From 7f112acee63906c68ab87210f88422fb0caa6a5e Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Tue, 12 Mar 2019 15:11:32 -0700 Subject: [PATCH 001/219] Bump to v4 --- CMakeLists.txt | 2 +- examples/CMakeLists.txt | 8 ++++---- tutorials/profiler.md | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6127b1ba2..62e222b6f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(ignition-common3 VERSION 3.0.0) +project(ignition-common4 VERSION 4.0.0) #============================================================================ # Find ignition-cmake diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 51cf332c1..fe99f5834 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,14 +1,14 @@ cmake_minimum_required(VERSION 2.8 FATAL_ERROR) # Find the ignition-common library -find_package(ignition-common3 QUIET REQUIRED COMPONENTS events profiler) +find_package(ignition-common4 QUIET REQUIRED COMPONENTS events profiler) add_executable(assert_example assert_example.cc) -target_link_libraries(assert_example ignition-common3::core) +target_link_libraries(assert_example ignition-common4::core) add_executable(events_example events.cc) -target_link_libraries(events_example ignition-common3::events) +target_link_libraries(events_example ignition-common4::events) add_executable(profiler_example profiler.cc) -target_link_libraries(profiler_example ignition-common3::profiler) +target_link_libraries(profiler_example ignition-common4::profiler) target_compile_definitions(profiler_example PUBLIC "IGN_PROFILER_ENABLE=1") diff --git a/tutorials/profiler.md b/tutorials/profiler.md index ab108f300..0905cd84b 100644 --- a/tutorials/profiler.md +++ b/tutorials/profiler.md @@ -57,10 +57,10 @@ enabled at compile time in order to function. cmake_minimum_required(VERSION 2.8 FATAL_ERROR) # Find the ignition-common library -find_package(ignition-common3 QUIET REQUIRED COMPONENTS profiler) +find_package(ignition-common4 QUIET REQUIRED COMPONENTS profiler) add_executable(profiler_example profiler.cc) -target_link_libraries(profiler_example ignition-common3::profiler) +target_link_libraries(profiler_example ignition-common4::profiler) # Enable the profiler for the example target_compile_definitions(profiler_example PUBLIC "IGN_PROFILER_ENABLE=1") ``` @@ -93,10 +93,10 @@ xdg-open $SOURCE_DIR/ign-common/profiler/src/Remotery/vis/index.html # Use the installation path (Linux) # This may vary depending on where you have choosen to install -xdg-open /usr/share/ignition/ignition-common3/profiler_vis/index.html +xdg-open /usr/share/ignition/ignition-common4/profiler_vis/index.html # Use the installation path (macOS) -open /usr/share/ignition/ignition-common3/profiler_vis/index.html +open /usr/share/ignition/ignition-common4/profiler_vis/index.html ``` If you are successful, you should see the profiler output in a browser. From 0b1c46e6e6f0068cde45709f9acc9033aea4e98b Mon Sep 17 00:00:00 2001 From: Steven Peters Date: Wed, 13 Mar 2019 07:16:18 +0000 Subject: [PATCH 002/219] Close branch merge3default From 4dfe346b38f4e5810c1478f3bf711c6b224b105b Mon Sep 17 00:00:00 2001 From: Louise Poubel Date: Tue, 19 Mar 2019 20:01:08 +0000 Subject: [PATCH 003/219] Close branch default_to_v4 From 7885834ae816e04ec414086fb0a7ed3026a229f7 Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Tue, 30 Apr 2019 07:12:33 -0700 Subject: [PATCH 004/219] Fix bayer pixel format typo --- graphics/include/ignition/common/Image.hh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graphics/include/ignition/common/Image.hh b/graphics/include/ignition/common/Image.hh index c5221cedc..8ede2598c 100644 --- a/graphics/include/ignition/common/Image.hh +++ b/graphics/include/ignition/common/Image.hh @@ -50,7 +50,7 @@ namespace ignition "R_FLOAT32", "RGB_FLOAT32", "BAYER_RGGB8", - "BAYER_RGGR8", + "BAYER_BGGR8", "BAYER_GBRG8", "BAYER_GRBG8" }; @@ -78,7 +78,7 @@ namespace ignition R_FLOAT32, RGB_FLOAT32, BAYER_RGGB8, - BAYER_RGGR8, + BAYER_BGGR8, BAYER_GBRG8, BAYER_GRBG8, PIXEL_FORMAT_COUNT From 4e54e0a4b7fbad07fb0a51748ac664c563177543 Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Tue, 30 Apr 2019 11:59:00 -0700 Subject: [PATCH 005/219] Changelog and migration guide --- Changelog.md | 8 ++++++++ Migration.md | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/Changelog.md b/Changelog.md index 9a20373b5..8992b26d9 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,11 @@ +## Ignition Common 4.x + +## Ignition Common 4.x.x (2019-XX-XX) + +1. Corrected `BAYER_RGGR8` to `BAYER_BGGR8` in `PixelFormatName` and + `PixelFormatType` located in `graphics/include/ignition/common/Image.hh`. + * [Pull request 191](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/191) + ## Ignition Common 3.x ## Ignition Common 3.x.x (2018-XX-XX) diff --git a/Migration.md b/Migration.md index 3225dabce..6281e32c3 100644 --- a/Migration.md +++ b/Migration.md @@ -5,6 +5,13 @@ Deprecated code produces compile-time warnings. These warning serve as notification to users that their code should be upgraded. The next major release will remove the deprecated code. +## Ignition Common 3.X to 4.X + +### Modifications + +1. Corrected `BAYER_RGGR8` to `BAYER_BGGR8` in `PixelFormatName` and + `PixelFormatType` located in `graphics/include/ignition/common/Image.hh`. + ## Ignition Common 2.X to 3.X ### Additions From f89217f4dbfceee8b1803f218985367f01b5ce0e Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Tue, 7 May 2019 19:25:36 +0000 Subject: [PATCH 006/219] Close branch bayer_pixel_format_typo From 568250b8d66de41f3694957d27bc76f3f92e77c8 Mon Sep 17 00:00:00 2001 From: mingfei sun Date: Mon, 3 Jun 2019 04:05:21 +0000 Subject: [PATCH 007/219] fix the bug of url error for profiler.cc --- tutorials/profiler.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/profiler.md b/tutorials/profiler.md index 0905cd84b..de269a6b9 100644 --- a/tutorials/profiler.md +++ b/tutorials/profiler.md @@ -21,7 +21,7 @@ In order to use the profiler, inspection points must be added to the source code and the application or library must be linked to the `ignition-common::profiler` component. -To start, download the [profiler.cc](https://bitbucket.org/ignitionrobotics/ign-common/raw/default/example/profiler.cc) example. +To start, download the [profiler.cc](https://bitbucket.org/ignitionrobotics/ign-common/raw/default/examples/profiler.cc) example. The relevant corresponding C++ would be as follows: From 233bd2817d2685a75e24f6b5a690d3d27ae110f7 Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Fri, 20 Dec 2019 11:37:37 -0800 Subject: [PATCH 008/219] Added URI authority --- Changelog.md | 6 + include/ignition/common/URI.hh | 97 +++++++- src/URI.cc | 442 ++++++++++++++++++++++++++++----- src/URI_TEST.cc | 228 ++++++++++++----- 4 files changed, 657 insertions(+), 116 deletions(-) diff --git a/Changelog.md b/Changelog.md index 174268308..284a6f42c 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,9 @@ +## Ignition Common 4.x + +1. Added URI Authority parsing to the URI class. Authority information can + be found [here](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Generic_syntax). This update also caused some formally valid syntax to become invalid, and some formally invalid syntax to become valid. See the migration guide. + * [Pull request xxx](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/xxx) + ## Ignition Common 3.x ## Ignition Common 3.X.X diff --git a/include/ignition/common/URI.hh b/include/ignition/common/URI.hh index 774762289..a01ec792e 100644 --- a/include/ignition/common/URI.hh +++ b/include/ignition/common/URI.hh @@ -28,11 +28,93 @@ namespace ignition namespace common { // Forward declare private data classes. + class URIAuthorityPrivate; class URIPathPrivate; class URIQueryPrivate; class URIFragmentPrivate; class URIPrivate; + /// A URI authority contains userinfo, host, and port data. The format + /// of a URI authority is `//userinfo@host:port`. The `userinfo` and + /// `port` components are optional. + class IGNITION_COMMON_VISIBLE URIAuthority + { + /// \brief Constructor + public: URIAuthority(); + + /// \brief Copy constructor. + /// \param[in] _path Another URIAuthority. + public: URIAuthority(const URIAuthority &_path); + + /// \brief Construct a URIAuthority object from a string. + /// \param[in] _str A string. + public: explicit URIAuthority(const std::string &_str); + + /// \brief Destructor + public: virtual ~URIAuthority(); + + /// \brief Remove all parts of the authority + public: void Clear(); + + /// \brief Get the user information. + /// \return User information, or an empty string if the user + /// information is not set. + public: std::string UserInfo() const; + + /// \brief Set the user information. + /// \param[in] _userInfo The user information string. + public: void SetUserInfo(const std::string &_userInfo) const; + + /// \brief Get the host. + /// \return The host. + public: std::string Host() const; + + /// \brief Set the host. + /// \param[in] _host The host. + public: void SetHost(const std::string &_host) const; + + /// \brief Get the port. + /// \return The port number, which is optional. + public: std::optional Port() const; + + /// \brief Set the port number. + public: void SetPort(int _port) const; + + /// \brief Return true if the two authorities match. + /// \param[in] _auth Authority. + /// return True of the authorities match. + public: bool operator==(const URIAuthority &_auth) const; + + /// \brief Get the complete authoriy as a string. + /// \return The authority as a string. + public: std::string Str() const; + + /// \brief Assignment operator. + /// \param[in] _auth Another URIAuthority. + /// \return Itself. + public: URIAuthority &operator=(const URIAuthority &_auth); + + /// \brief Return true if the string is a valid path. + /// \param[in] _str String to check. + /// \return True if _str is a valid URI path. + public: static bool Valid(const std::string &_str); + + /// \brief Return true if this is a valid authority. + /// \return True if this is a valid URI authority. + public: bool Valid() const; + + /// \brief Parse a string as URIAuthority. + /// \param[in] _str A string. + /// \return True if the string could be parsed as a URIAuthority. + public: bool Parse(const std::string &_str); + + IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + /// \internal + /// \brief Pointer to private data. + private: std::unique_ptr dataPtr; + IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + }; + /// \brief The path component of a URI class IGNITION_COMMON_VISIBLE URIPath { @@ -251,7 +333,10 @@ namespace ignition IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING }; - /// \brief A complete URI + /// \brief A complete URI which has the following components: + /// + /// scheme:[//authority]path[?query][#fragment] + /// // cppcheck-suppress class_X_Y class IGNITION_COMMON_VISIBLE URI { @@ -271,7 +356,7 @@ namespace ignition /// \brief Get the URI as a string, which has the form: /// - /// scheme://path?query + /// scheme:[//authority]path[?query][#fragment] /// /// \return The full URI as a string public: std::string Str() const; @@ -287,6 +372,14 @@ namespace ignition /// \param[in] _scheme New scheme. public: void SetScheme(const std::string &_scheme); + /// \brief Get a mutable version of the URI's authority. + /// \return The authority + public: URIAuthority &Authority(); + + /// \brief Get a const reference of the URI's authority. + /// \return The authority + public: const URIAuthority &Authority() const; + /// \brief Get a mutable version of the path component /// \return A reference to the path public: URIPath &Path(); diff --git a/src/URI.cc b/src/URI.cc index 5328a4145..70b656829 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -27,30 +27,47 @@ using namespace ignition; using namespace common; -static const char kSchemeDelim[] = "://"; +static const char kSchemeDelim[] = ":"; +static const char kAuthDelim[] = "//"; -/// \brief URIPath private data. -class ignition::common::URIPathPrivate +/// \brief URIAuthority private data. +class ignition::common::URIAuthorityPrivate { - /// \brief The parts of the path. - public: std::list path; + /// \brief The user information. + public: std::string userInfo; - /// \brief Whether the path is absolute (starts with slash) or not. - public: bool isAbsolute = false; + /// \brief The host. + public: std::string host; + /// \brief The port. + public: std::optional port; +}; + +/// \brief URIPath private data. +class ignition::common::URIPathPrivate +{ /// \brief A helper method to determine if the given string represents /// an absolute path starting segment or not. public: bool IsStringAbsolute(const std::string &_path) { return _path.length() > 0 && _path[0] == '/'; } + + /// \brief The parts of the path. + public: std::list path; + + /// \brief Whether the path is absolute (starts with slash) or not. + public: bool isAbsolute = false; + + /// \brief True if there is a trailing slash in the path. + public: bool trailingSlash = false; }; /// \brief URIQuery private data. class ignition::common::URIQueryPrivate { /// \brief The key/value tuples that compose the query. - public: std::map values; + public: std::vector> values; }; /// \brief URIFragment private data. @@ -66,6 +83,9 @@ class ignition::common::URIPrivate /// \brief The URI scheme. public: std::string scheme; + /// \brief Authority component. + public: URIAuthority authority; + /// \brief Path component. public: URIPath path; @@ -76,6 +96,254 @@ class ignition::common::URIPrivate public: URIFragment fragment; }; +////////////////////////////////////////////////// +URIAuthority::URIAuthority() +: dataPtr(new URIAuthorityPrivate()) +{ +} + +////////////////////////////////////////////////// +URIAuthority::URIAuthority(const URIAuthority &_authority) + : URIAuthority() +{ + *this = _authority; +} + +////////////////////////////////////////////////// +URIAuthority::URIAuthority(const std::string &_str) + : URIAuthority() +{ + if (!this->Parse(_str)) + { + ignwarn << "Unable to parse URIAuthority [" << _str << "]. Ignoring." + << std::endl; + } +} + +////////////////////////////////////////////////// +URIAuthority::~URIAuthority() +{ +} + +////////////////////////////////////////////////// +void URIAuthority::Clear() +{ + this->dataPtr->userInfo.clear(); + this->dataPtr->host.clear(); + this->dataPtr->port.reset(); +} + +////////////////////////////////////////////////// +std::string URIAuthority::UserInfo() const +{ + return this->dataPtr->userInfo; +} + +////////////////////////////////////////////////// +void URIAuthority::SetUserInfo(const std::string &_userInfo) const +{ + this->dataPtr->userInfo = _userInfo; +} + +////////////////////////////////////////////////// +std::string URIAuthority::Host() const +{ + return this->dataPtr->host; +} + +////////////////////////////////////////////////// +void URIAuthority::SetHost(const std::string &_host) const +{ + this->dataPtr->host = _host; +} + +////////////////////////////////////////////////// +std::optional URIAuthority::Port() const +{ + return this->dataPtr->port; +} + +////////////////////////////////////////////////// +void URIAuthority::SetPort(int _port) const +{ + this->dataPtr->port.emplace(_port); +} + +////////////////////////////////////////////////// +bool URIAuthority::operator==(const URIAuthority &_auth) const +{ + return this->dataPtr->userInfo == _auth.UserInfo() && + this->dataPtr->host == _auth.Host() && + this->dataPtr->port == _auth.Port(); +} + +////////////////////////////////////////////////// +std::string URIAuthority::Str() const +{ + if (!this->dataPtr->host.empty()) + { + std::string result = "//"; + result += this->dataPtr->userInfo.empty() ? "" : + this->dataPtr->userInfo + "@"; + result += this->dataPtr->host; + result += this->dataPtr->port ? + ":" + std::to_string(*this->dataPtr->port) : ""; + return result; + } + + return ""; +} + +////////////////////////////////////////////////// +URIAuthority &URIAuthority::operator=(const URIAuthority &_auth) +{ + this->dataPtr->userInfo = _auth.UserInfo(); + this->dataPtr->host = _auth.Host(); + this->dataPtr->port = _auth.Port(); + return *this; +} + +////////////////////////////////////////////////// +bool URIAuthority::Valid() const +{ + return URIAuthority::Valid(this->Str()); +} + +////////////////////////////////////////////////// +bool URIAuthority::Valid(const std::string &_str) +{ + auto str = trimmed(_str); + if (str.empty()) + return true; + + // The authority must start with two forward slashes + if (str.find("//") != 0) + return false; + + auto userInfoIndex = str.find("@", 2); + if (userInfoIndex != std::string::npos) + { + // Allowed character for userinformation from RFC3986: + // unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" + // pct-encoded = "%" HEXDIG HEXDIG + // sub-delims = "!" / "$" / "&" / "'" / "(" / ")" + // / "*" / "+" / "," / ";" / "=" + const std::string allowedChars = "qwertzuiopasdfghjklyxcvbnm" + "QWERTZUIOPASDFGHJKLYXCVBNM" + "0123456789" + "-._~" + "%" + "!$&'()*+,;="; + + std::string userInfo = str.substr(2, userInfoIndex - 2); + if (userInfo.find_first_not_of(allowedChars, 1) != std::string::npos) + return false; + userInfoIndex += 1; + } + else + { + userInfoIndex = 2; + } + + auto ipv6StartIndex = str.find("[", userInfoIndex); + std::string host; + // Is this an IPV6 address? + if (ipv6StartIndex != std::string::npos) + { + auto ipv6EndIndex = str.find("]", ipv6StartIndex); + // IPV6 must be surrounded by square brackets [ ]. + if (ipv6EndIndex == std::string::npos) + return false; + host = str.substr(ipv6StartIndex, ipv6EndIndex); + } + // Is a port specified? + else if (str.find(":", userInfoIndex) != std::string::npos) + { + host = str.substr(userInfoIndex, + str.find(":", userInfoIndex) - userInfoIndex); + } + else + host = str.substr(userInfoIndex); + + // The host can't be empty. + if (host.empty()) + return false; + + // IP-literal = "[" IPV6address "] + // IPV4address = dec-octet "." dec-octet "." dec-octet "." dec-octet + // reg-name = *( unreserved / pct-encoded ) + // + // pct-encoded = "%" HEXDIG HEXDIG + // unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" + const std::string hostAllowedChars = "qwertzuiopasdfghjklyxcvbnm" + "QWERTZUIOPASDFGHJKLYXCVBNM" + "0123456789" + "%" + "-._" + "[] :"; + if (host.find_first_not_of(hostAllowedChars, 1) != std::string::npos) + return false; + + auto portIndex = str.find(":", userInfoIndex + host.size()); + if (portIndex != std::string::npos) + { + std::string portStr = str.substr(portIndex+1); + const std::string allowedChars = "0123456789"; + if (portStr.find_first_not_of(allowedChars, 1) != std::string::npos) + return false; + } + + return true; +} + +////////////////////////////////////////////////// +bool URIAuthority::Parse(const std::string &_str) +{ + if (!this->Valid(_str)) + return false; + + this->Clear(); + + if (_str.empty()) + return true; + + auto userInfoIndex = _str.find("@"); + if (userInfoIndex != std::string::npos) + { + this->dataPtr->userInfo = _str.substr(2, userInfoIndex - 2); + userInfoIndex += 1; + } + else + { + userInfoIndex = 2; + } + + auto ipv6StartIndex = _str.find("[", userInfoIndex); + // Is this an IPV6 address? + if (ipv6StartIndex != std::string::npos) + { + auto ipv6EndIndex = _str.find("]", ipv6StartIndex); + this->dataPtr->host = _str.substr(ipv6StartIndex, ipv6EndIndex); + } + // Is a port specified? + else if (_str.find(":", userInfoIndex) != std::string::npos) + { + this->dataPtr->host = _str.substr(userInfoIndex, + _str.find(":", userInfoIndex) - userInfoIndex); + } + else + this->dataPtr->host = _str.substr(userInfoIndex); + + auto portIndex = _str.find(":", userInfoIndex + this->dataPtr->host.size()); + if (portIndex != std::string::npos) + { + std::string portStr = _str.substr(portIndex + 1); + this->dataPtr->port.emplace(std::stoi(portStr)); + } + + return true; +} + ///////////////////////////////////////////////// URIPath::URIPath() : dataPtr(new URIPathPrivate()) @@ -219,6 +487,9 @@ std::string URIPath::Str(const std::string &_delim) const result += part; } + if (this->dataPtr->trailingSlash) + result += "/"; + return result; } @@ -254,12 +525,10 @@ bool URIPath::Valid() const bool URIPath::Valid(const std::string &_str) { auto str = trimmed(_str); - size_t slashCount = std::count(str.begin(), str.end(), '/'); - if ((str.empty()) || - (slashCount == str.size() && str.size() > 1)) - { + + // All spaces is not allowed. + if (str.empty() && !_str.empty()) return false; - } // TODO(anyone): the space should not be // there, but leaving it out breaks @@ -283,16 +552,12 @@ bool URIPath::Valid(const std::string &_str) ":" "%" // "-._~" // is in RFC, weird - // "!$&'()*+,;=" // is in RFC, weird + "+"// "!$&'()*,;=" // is in RFC, weird "[/"; if (str.substr(0, 1).find_first_not_of(allowedCharsFirst) != std::string::npos) return false; - // Two consecutive slashes are not valid - if (str.find("//") != std::string::npos) - return false; - return true; } @@ -310,6 +575,8 @@ bool URIPath::Parse(const std::string &_str) // the initial / is removed from _str when splitting, so we need to // explicitly check for it this->dataPtr->isAbsolute = this->dataPtr->IsStringAbsolute(_str); + this->dataPtr->trailingSlash = + _str.back() == '/' && _str.size() != 1; return true; } @@ -346,7 +613,7 @@ URIQuery::~URIQuery() ///////////////////////////////////////////////// void URIQuery::Insert(const std::string &_key, const std::string &_value) { - this->dataPtr->values.insert(std::make_pair(_key, _value)); + this->dataPtr->values.push_back(std::make_pair(_key, _value)); } ///////////////////////////////////////////////// @@ -363,11 +630,14 @@ std::string URIQuery::Str(const std::string &_delim) const return ""; std::string result = "?"; - for (auto const &value : this->dataPtr->values) + for (const std::pair &value : this->dataPtr->values) { if (result != "?") result += _delim; - result += value.first + "=" + value.second; + if (!value.second.empty()) + result += value.first + "=" + value.second; + else + result += value.first; } return result; @@ -420,12 +690,6 @@ bool URIQuery::Valid(const std::string &_str) if (str.find_first_not_of(allowedChars, 1) != std::string::npos) return false; - for (auto const &query : common::split(str.substr(1), "&")) - { - if (common::split(query, "=").size() != 2u) - return false; - } - return true; } @@ -439,10 +703,13 @@ bool URIQuery::Parse(const std::string &_str) if (!_str.empty()) { - for (auto query : common::split(_str.substr(1), "&")) + for (const std::string &query : common::split(_str.substr(1), "&")) { - auto values = common::split(query, "="); - this->Insert(values.at(0), values.at(1)); + std::vector values = common::split(query, "="); + if (values.size() == 2) + this->Insert(values.at(0), values.at(1)); + else + this->Insert(query, ""); } } @@ -596,9 +863,11 @@ URI::~URI() std::string URI::Str() const { std::string result = - this->dataPtr->scheme.empty() ? "" : this->dataPtr->scheme + "://"; - result += this->dataPtr->path.Str() + this->dataPtr->query.Str() + - this->dataPtr->fragment.Str(); + this->dataPtr->scheme.empty() ? "" : this->dataPtr->scheme + ":"; + result += this->dataPtr->authority.Str() + + this->dataPtr->path.Str() + + this->dataPtr->query.Str() + + this->dataPtr->fragment.Str(); return result; } @@ -614,6 +883,18 @@ void URI::SetScheme(const std::string &_scheme) this->dataPtr->scheme = _scheme; } +///////////////////////////////////////////////// +URIAuthority &URI::Authority() +{ + return this->dataPtr->authority; +} + +///////////////////////////////////////////////// +const URIAuthority &URI::Authority() const +{ + return this->dataPtr->authority; +} + ///////////////////////////////////////////////// URIPath &URI::Path() { @@ -654,6 +935,7 @@ const URIFragment &URI::Fragment() const void URI::Clear() { this->dataPtr->scheme.clear(); + this->dataPtr->authority.Clear(); this->dataPtr->path.Clear(); this->dataPtr->query.Clear(); this->dataPtr->fragment.Clear(); @@ -663,6 +945,7 @@ void URI::Clear() bool URI::operator==(const URI &_uri) const { return this->dataPtr->scheme == _uri.dataPtr->scheme && + this->dataPtr->authority == _uri.dataPtr->authority && this->dataPtr->path == _uri.dataPtr->path && this->dataPtr->query == _uri.dataPtr->query && this->dataPtr->fragment == _uri.dataPtr->fragment; @@ -672,6 +955,7 @@ bool URI::operator==(const URI &_uri) const URI &URI::operator=(const URI &_uri) { this->dataPtr->scheme = _uri.dataPtr->scheme; + this->dataPtr->authority = _uri.dataPtr->authority; this->dataPtr->path = _uri.dataPtr->path; this->dataPtr->query = _uri.dataPtr->query; this->dataPtr->fragment = _uri.dataPtr->fragment; @@ -697,16 +981,42 @@ bool URI::Valid(const std::string &_str) return false; } - auto from = schemeDelimPos + std::strlen(kSchemeDelim); - std::string localPath = str.substr(from); + auto authDelimPos = str.find(kAuthDelim); + auto pathStart = authDelimPos != std::string::npos ? + str.find("/", authDelimPos + std::strlen(kAuthDelim)) : + str.find("/"); + + std::string localAuthority; + if (authDelimPos != std::string::npos && authDelimPos == schemeDelimPos+1) + { + if (pathStart != std::string::npos) + localAuthority = str.substr(authDelimPos, pathStart - authDelimPos); + else + { + auto to = str.find('?', authDelimPos); + if (to != std::string::npos) + localAuthority = str.substr(authDelimPos, to - authDelimPos); + else + { + to = str.find('#', authDelimPos); + if (to != std::string::npos) + localAuthority = str.substr(authDelimPos, to - authDelimPos); + else + localAuthority = str.substr(authDelimPos); + } + } + } + + std::string localPath = pathStart != std::string::npos ? + str.substr(pathStart) : ""; std::string localQuery; std::string localFragment; - auto to = str.find('?', from); + auto to = str.find('?', pathStart); if (to != std::string::npos) { // Update path. - localPath = str.substr(from, to - from); + localPath = str.substr(pathStart, to - pathStart); // Update the query. localQuery = str.substr(to); @@ -723,7 +1033,9 @@ bool URI::Valid(const std::string &_str) } // Validate the path and query. - return URIPath::Valid(localPath) && URIQuery::Valid(localQuery) && + return URIAuthority::Valid(localAuthority) && + URIPath::Valid(localPath) && + URIQuery::Valid(localQuery) && URIFragment::Valid(localFragment); } @@ -733,37 +1045,55 @@ bool URI::Parse(const std::string &_str) if (!this->Valid(_str)) return false; - auto schemeDelimPos = _str.find(kSchemeDelim); - auto from = schemeDelimPos + std::strlen(kSchemeDelim); - std::string localScheme = _str.substr(0, schemeDelimPos); - std::string localPath = _str.substr(from); + // Copy the string so that we can modify it. + std::string str = _str; + + std::string localScheme; + std::string localAuthority; + std::string localPath; std::string localQuery; std::string localFragment; - auto to = _str.find('?', from); - if (to != std::string::npos) - { - // Update path. - localPath = _str.substr(from, to - from); + size_t schemeDelimPos = str.find(kSchemeDelim); + localScheme = str.substr(0, schemeDelimPos); + str.erase(0, schemeDelimPos + std::strlen(kSchemeDelim)); - // Update the query. - localQuery = _str.substr(to); + // Get the authority delimiter position, if one is present + size_t authDelimPos = str.find(kAuthDelim); + if (authDelimPos != std::string::npos && authDelimPos == 0) + { + size_t authEndPos = str.find_first_of("/?#", + authDelimPos + std::strlen(kAuthDelim)); + localAuthority = str.substr(authDelimPos, authEndPos); + str.erase(0, authEndPos); } - auto to2 = _str.find('#', to); - if (to2 != std::string::npos) + // Get the path information + size_t pathEndPos = str.find_first_of("?#"); + localPath = str.substr(0, pathEndPos); + str.erase(0, pathEndPos); + + size_t queryStartPos = str.find("?"); + if (queryStartPos != std::string::npos) { - // Update query. - localQuery = _str.substr(to, to2 - to); + size_t queryEndPos = str.find("#"); + // Get the query. + localQuery = str.substr(0, queryEndPos); + str.erase(0, queryEndPos); + } - // Update the fragment. - localFragment = _str.substr(to2); + size_t fragStartPos = str.find("#"); + if (fragStartPos != std::string::npos) + { + // Get the query. + localFragment = str; } this->Clear(); this->SetScheme(localScheme); - return this->dataPtr->path.Parse(localPath) && + return this->dataPtr->authority.Parse(localAuthority) && + this->dataPtr->path.Parse(localPath) && this->dataPtr->query.Parse(localQuery) && this->dataPtr->fragment.Parse(localFragment); } diff --git a/src/URI_TEST.cc b/src/URI_TEST.cc index f7dc70521..0c66a6a2c 100644 --- a/src/URI_TEST.cc +++ b/src/URI_TEST.cc @@ -172,10 +172,10 @@ TEST(URITEST, URIPathCoverageExtra) TEST(URITEST, URIPathString) { URIPath path; - EXPECT_FALSE(URIPath::Valid("")); - EXPECT_FALSE(URIPath::Valid("//")); - EXPECT_FALSE(URIPath::Valid("a//b")); - EXPECT_FALSE(URIPath::Valid("/a//b")); + EXPECT_TRUE(URIPath::Valid("")); + EXPECT_TRUE(URIPath::Valid("//")); + EXPECT_TRUE(URIPath::Valid("a//b")); + EXPECT_TRUE(URIPath::Valid("/a//b")); EXPECT_FALSE(URIPath::Valid(" ")); EXPECT_FALSE(URIPath::Valid("?invalid")); EXPECT_FALSE(URIPath::Valid("=invalid")); @@ -195,10 +195,10 @@ TEST(URITEST, URIPathString) // EXPECT_TRUE(URIPath::Valid("/part+1/part+2")); // EXPECT_TRUE(URIPath::Valid("/part%201/part%202")); - EXPECT_FALSE(path.Parse("")); - EXPECT_FALSE(path.Parse("//")); - EXPECT_FALSE(path.Parse("a//b")); - EXPECT_FALSE(path.Parse("/a//b")); + EXPECT_TRUE(path.Parse("")); + EXPECT_TRUE(path.Parse("//")); + EXPECT_TRUE(path.Parse("a//b")); + EXPECT_TRUE(path.Parse("/a//b")); EXPECT_FALSE(path.Parse(" ")); EXPECT_FALSE(path.Parse("?invalid")); EXPECT_FALSE(path.Parse("=invalid")); @@ -218,16 +218,16 @@ TEST(URITEST, URIPathString) // EXPECT_TRUE(path.Parse("/part+1/part+2")); // EXPECT_TRUE(path.Parse("/part%201/part%202")); - EXPECT_NO_THROW(EXPECT_FALSE(URIPath("").Valid())); - EXPECT_NO_THROW(EXPECT_FALSE(URIPath("//").Valid())); - EXPECT_NO_THROW(EXPECT_FALSE(URIPath("a//b").Valid())); - EXPECT_NO_THROW(EXPECT_FALSE(URIPath("/a//b").Valid())); - EXPECT_NO_THROW(EXPECT_FALSE(URIPath(" ").Valid())); - EXPECT_NO_THROW(EXPECT_FALSE(URIPath("?invalid").Valid())); - EXPECT_NO_THROW(EXPECT_FALSE(URIPath("=invalid").Valid())); - EXPECT_NO_THROW(EXPECT_FALSE(URIPath("&invalid").Valid())); - EXPECT_NO_THROW(EXPECT_FALSE(URIPath("invalid#").Valid())); - EXPECT_NO_THROW(EXPECT_FALSE(URIPath("#invalid").Valid())); + EXPECT_NO_THROW(EXPECT_TRUE(URIPath("").Valid())); + EXPECT_NO_THROW(EXPECT_TRUE(URIPath("//").Valid())); + EXPECT_NO_THROW(EXPECT_TRUE(URIPath("a//b").Valid())); + EXPECT_NO_THROW(EXPECT_TRUE(URIPath("/a//b").Valid())); + EXPECT_NO_THROW(EXPECT_TRUE(URIPath(" ").Valid())); + EXPECT_NO_THROW(EXPECT_TRUE(URIPath("?invalid").Valid())); + EXPECT_NO_THROW(EXPECT_TRUE(URIPath("=invalid").Valid())); + EXPECT_NO_THROW(EXPECT_TRUE(URIPath("&invalid").Valid())); + EXPECT_NO_THROW(EXPECT_TRUE(URIPath("invalid#").Valid())); + EXPECT_NO_THROW(EXPECT_TRUE(URIPath("#invalid").Valid())); EXPECT_NO_THROW(URIPath("/")); EXPECT_NO_THROW(URIPath("part1")); @@ -282,30 +282,30 @@ TEST(URITEST, URIQueryString) EXPECT_TRUE(query.Valid()); // test static Valid function - EXPECT_FALSE(URIQuery::Valid("??")); + EXPECT_TRUE(URIQuery::Valid("??")); EXPECT_FALSE(URIQuery::Valid("invalid?")); - EXPECT_FALSE(URIQuery::Valid("?invalid?")); + EXPECT_TRUE(URIQuery::Valid("?valid?")); EXPECT_FALSE(URIQuery::Valid("? invalid")); EXPECT_FALSE(URIQuery::Valid("#invalid")); EXPECT_FALSE(URIQuery::Valid("invalid#")); - EXPECT_FALSE(URIQuery::Valid("?key")); - EXPECT_FALSE(URIQuery::Valid("?key=")); - EXPECT_FALSE(URIQuery::Valid("?=value")); + EXPECT_TRUE(URIQuery::Valid("?key")); + EXPECT_TRUE(URIQuery::Valid("?key=")); + EXPECT_TRUE(URIQuery::Valid("?=value")); EXPECT_FALSE(URIQuery::Valid("?key=value with space")); EXPECT_TRUE(URIQuery::Valid("")); EXPECT_TRUE(URIQuery::Valid("?key=value")); EXPECT_TRUE(URIQuery::Valid("?key=value&key2=value2")); - EXPECT_FALSE(query.Parse("??")); + EXPECT_TRUE(query.Parse("??")); EXPECT_FALSE(query.Parse("invalid?")); - EXPECT_FALSE(query.Parse("?invalid?")); + EXPECT_TRUE(query.Parse("?invalid?")); EXPECT_FALSE(query.Parse("? invalid")); EXPECT_FALSE(query.Parse("#invalid")); EXPECT_FALSE(query.Parse("invalid#")); - EXPECT_FALSE(query.Parse("?key")); - EXPECT_FALSE(query.Parse("?key=")); - EXPECT_FALSE(query.Parse("?=value")); + EXPECT_TRUE(query.Parse("?key")); + EXPECT_TRUE(query.Parse("?key=")); + EXPECT_TRUE(query.Parse("?=value")); // these invalid queries failed to parse and // didn't update the query. // it should still be valid @@ -422,7 +422,7 @@ TEST(URITEST, Scheme) EXPECT_TRUE(uri.Str().empty()); uri.SetScheme("data"); - EXPECT_EQ(uri.Str(), "data://"); + EXPECT_EQ(uri.Str(), "data:"); EXPECT_EQ("data", uri.Scheme()); } @@ -433,26 +433,42 @@ TEST(URITEST, Path) uri.SetScheme("data"); uri.Path() = uri.Path() / "world"; - EXPECT_EQ(uri.Str(), "data://world"); + EXPECT_EQ(uri.Str(), "data:world"); uri.Path() /= "default"; - EXPECT_EQ(uri.Str(), "data://world/default"); + EXPECT_EQ(uri.Str(), "data:world/default"); - uri.Parse("file:///var/run/test"); - EXPECT_EQ(uri.Str(), "file:///var/run/test"); + EXPECT_FALSE(uri.Parse("file:///var/run/test")); + + EXPECT_TRUE(uri.Parse("file:/var/run/test")); + EXPECT_EQ(uri.Str(), "file:/var/run/test"); EXPECT_TRUE(uri.Path().IsAbsolute()); uri.Parse("file://var/run/test"); EXPECT_EQ(uri.Str(), "file://var/run/test"); - EXPECT_FALSE(uri.Path().IsAbsolute()); + EXPECT_EQ(uri.Path().Str(), "/run/test"); + EXPECT_TRUE(uri.Path().IsAbsolute()); - uri.Parse("file://test+space"); - EXPECT_EQ(uri.Str(), "file://test+space"); - EXPECT_FALSE(uri.Path().IsAbsolute()); + uri.Parse("file:/var/run/test"); + EXPECT_EQ(uri.Str(), "file:/var/run/test"); + EXPECT_EQ(uri.Path().Str(), "/var/run/test"); + EXPECT_TRUE(uri.Path().IsAbsolute()); - uri.Parse("file://test%20space"); - EXPECT_EQ(uri.Str(), "file://test%20space"); - EXPECT_FALSE(uri.Path().IsAbsolute()); + EXPECT_FALSE(uri.Parse("file://test+space")); + + EXPECT_TRUE(uri.Parse("file:/test+space")); + EXPECT_EQ(uri.Str(), "file:/test+space"); + EXPECT_EQ(uri.Path().Str(), "/test+space"); + EXPECT_TRUE(uri.Path().IsAbsolute()); + + EXPECT_TRUE(uri.Parse("file://test%20space")); + EXPECT_EQ(uri.Authority().Str(), "//test%20space"); + EXPECT_TRUE(uri.Path().Str().empty()); + + EXPECT_TRUE(uri.Parse("file:/test%20space")); + EXPECT_EQ(uri.Str(), "file:/test%20space"); + EXPECT_EQ(uri.Path().Str(), "/test%20space"); + EXPECT_TRUE(uri.Path().IsAbsolute()); } ///////////////////////////////////////////////// @@ -477,21 +493,21 @@ TEST(URITEST, Query) uri.SetScheme("data"); uri.Query().Insert("p", "v"); - EXPECT_EQ(uri.Str(), "data://?p=v"); + EXPECT_EQ(uri.Str(), "data:?p=v"); uri.Path().PushFront("default"); - EXPECT_EQ(uri.Str(), "data://default?p=v"); + EXPECT_EQ(uri.Str(), "data:default?p=v"); uri.Path().PushFront("world"); - EXPECT_EQ(uri.Str(), "data://world/default?p=v"); + EXPECT_EQ(uri.Str(), "data:world/default?p=v"); URI uri2 = uri; uri.Path().Clear(); - EXPECT_EQ(uri.Str(), "data://?p=v"); + EXPECT_EQ(uri.Str(), "data:?p=v"); uri.Query().Clear(); - EXPECT_EQ(uri.Str(), "data://"); + EXPECT_EQ(uri.Str(), "data:"); uri.Clear(); uri2.Clear(); @@ -522,21 +538,21 @@ TEST(URITEST, Fragment) uri.SetScheme("data"); uri.Fragment() = "#f"; - EXPECT_EQ(uri.Str(), "data://#f"); + EXPECT_EQ(uri.Str(), "data:#f"); uri.Path().PushFront("default"); - EXPECT_EQ(uri.Str(), "data://default#f"); + EXPECT_EQ(uri.Str(), "data:default#f"); uri.Path().PushFront("world"); - EXPECT_EQ(uri.Str(), "data://world/default#f"); + EXPECT_EQ(uri.Str(), "data:world/default#f"); URI uri2 = uri; uri.Path().Clear(); - EXPECT_EQ(uri.Str(), "data://#f"); + EXPECT_EQ(uri.Str(), "data:#f"); uri.Fragment().Clear(); - EXPECT_EQ(uri.Str(), "data://"); + EXPECT_EQ(uri.Str(), "data:"); uri.Clear(); uri2.Clear(); @@ -557,8 +573,8 @@ TEST(URITEST, FragmentCopy) EXPECT_NE(uri.Fragment().Str(), fragmentCopy.Str()); EXPECT_EQ(uri.Fragment().Str(), "#f"); - EXPECT_EQ(uriTmp.Str(), "data://#g"); - EXPECT_EQ(uriCopy.Str(), "data://#g"); + EXPECT_EQ(uriTmp.Str(), "data:#g"); + EXPECT_EQ(uriCopy.Str(), "data:#g"); EXPECT_EQ(fragmentCopy.Str(), "#g"); } @@ -570,13 +586,13 @@ TEST(URITEST, URIString) EXPECT_FALSE(URI::Valid("scheme")); EXPECT_FALSE(URI::Valid("scheme://")); EXPECT_FALSE(URI::Valid("scheme://?key=value")); - EXPECT_FALSE(URI::Valid("scheme://part1?keyvalue")); - EXPECT_FALSE(URI::Valid("scheme://part1?key value")); + EXPECT_TRUE(URI::Valid("scheme://part1?keyvalue")); + EXPECT_TRUE(URI::Valid("scheme://part1?key value")); EXPECT_TRUE(URI::Valid("scheme://part1")); EXPECT_TRUE(URI::Valid("scheme://part1/part2")); EXPECT_TRUE(URI::Valid("scheme://part1?key=value")); EXPECT_TRUE(URI::Valid("scheme://part1/part2?k1=v1&k2=v2")); - EXPECT_TRUE(URI::Valid("scheme://part+1/part+2?k1=v1&k2=v2")); + EXPECT_FALSE(URI::Valid("scheme://part+1/part+2?k1=v1&k2=v2")); EXPECT_TRUE(URI::Valid("scheme://part%201/part%202?k1=v1&k2=v2")); EXPECT_TRUE(URI::Valid("scheme://part 1/part 2?k1=v1&k2=v2")); @@ -593,19 +609,20 @@ TEST(URITEST, URIString) EXPECT_FALSE(uri.Parse("scheme")); EXPECT_FALSE(uri.Parse("scheme://")); EXPECT_FALSE(uri.Parse("scheme://?key=value")); - EXPECT_FALSE(uri.Parse("scheme://part1?keyvalue")); + EXPECT_TRUE(uri.Parse("scheme://part1?keyvalue")); EXPECT_TRUE(uri.Parse("scheme://part1")); EXPECT_TRUE(uri.Parse("scheme://part1/part2")); EXPECT_TRUE(uri.Parse("scheme://part1?key=value")); EXPECT_TRUE(uri.Parse("scheme://part1/part2?k1=v1&k2=v2")); - EXPECT_TRUE(uri.Parse("scheme://part+1/part+2?k1=v1&k2=v2")); + EXPECT_FALSE(uri.Parse("scheme://part+1/part+2?k1=v1&k2=v2")); EXPECT_TRUE(uri.Parse("scheme://part%201/part%202?k1=v1&k2=v2")); EXPECT_NO_THROW(EXPECT_FALSE(URI("").Valid())); EXPECT_NO_THROW(EXPECT_FALSE(URI("scheme").Valid())); EXPECT_NO_THROW(EXPECT_FALSE(URI("scheme://").Valid())); EXPECT_NO_THROW(EXPECT_FALSE(URI("scheme://?key=value").Valid())); - EXPECT_NO_THROW(EXPECT_FALSE(URI("scheme://part1?keyvalue").Valid())); + EXPECT_NO_THROW(EXPECT_TRUE(URI("scheme://part1?keyvalue").Valid())); + EXPECT_NO_THROW(EXPECT_TRUE(URI("scheme://part1?keyvalue").Valid())); EXPECT_NO_THROW(URI("scheme://part1")); EXPECT_NO_THROW(URI("scheme://part1/part2")); @@ -615,6 +632,101 @@ TEST(URITEST, URIString) EXPECT_NO_THROW(URI("scheme://part%201/part%202?k1=v1&k2=v2")); } +///////////////////////////////////////////////// +TEST(URITEST, WikipediaTests) +{ + URI uri; + + // The following tests were pulled from: + // https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Examples + + EXPECT_TRUE(uri.Parse("https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top")); + EXPECT_EQ("https", uri.Scheme()); + EXPECT_EQ("john.doe", uri.Authority().UserInfo()); + EXPECT_EQ("www.example.com", uri.Authority().Host()); + EXPECT_EQ(123, *uri.Authority().Port()); + EXPECT_EQ("//john.doe@www.example.com:123", uri.Authority().Str()); + EXPECT_EQ("/forum/questions/", uri.Path().Str()); + EXPECT_EQ("?tag=networking&order=newest", uri.Query().Str()); + EXPECT_EQ("#top", uri.Fragment().Str()); + + EXPECT_TRUE(uri.Parse("ldap://[2001:db8::7]/c=GB?objectClass?one")); + EXPECT_EQ("ldap", uri.Scheme()); + EXPECT_EQ("[2001:db8::7]", uri.Authority().Host()); + EXPECT_EQ("//[2001:db8::7]", uri.Authority().Str()); + EXPECT_EQ("/c=GB", uri.Path().Str()); + EXPECT_EQ("?objectClass?one", uri.Query().Str()); + + EXPECT_TRUE(uri.Parse("mailto:John.Doe@example.com")); + EXPECT_EQ("mailto", uri.Scheme()); + EXPECT_TRUE(uri.Authority().Str().empty()); + EXPECT_EQ("John.Doe@example.com", uri.Path().Str()); + EXPECT_TRUE(uri.Query().Str().empty()); + EXPECT_TRUE(uri.Fragment().Str().empty()); + + EXPECT_TRUE(uri.Parse("news:comp.infosystems.www.servers.unix")); + EXPECT_EQ("news", uri.Scheme()); + EXPECT_TRUE(uri.Authority().Str().empty()); + EXPECT_EQ("comp.infosystems.www.servers.unix", uri.Path().Str()); + EXPECT_TRUE(uri.Query().Str().empty()); + EXPECT_TRUE(uri.Fragment().Str().empty()); + + EXPECT_TRUE(uri.Parse("tel:+1-816-555-1212")); + EXPECT_EQ("tel", uri.Scheme()); + EXPECT_TRUE(uri.Authority().Str().empty()); + EXPECT_EQ("+1-816-555-1212", uri.Path().Str()); + EXPECT_TRUE(uri.Query().Str().empty()); + EXPECT_TRUE(uri.Fragment().Str().empty()); + + EXPECT_TRUE(uri.Parse("telnet://192.0.2.16:80/")); + EXPECT_EQ("telnet", uri.Scheme()); + EXPECT_TRUE(uri.Authority().UserInfo().empty()); + EXPECT_EQ("192.0.2.16", uri.Authority().Host()); + EXPECT_EQ(80, uri.Authority().Port()); + EXPECT_EQ("/", uri.Path().Str()); + + EXPECT_TRUE(uri.Parse("urn:oasis:names:specification:docbook:dtd:xml:4.1.2")); + EXPECT_EQ("urn", uri.Scheme()); + EXPECT_TRUE(uri.Authority().Str().empty()); + EXPECT_EQ("oasis:names:specification:docbook:dtd:xml:4.1.2", + uri.Path().Str()); + EXPECT_TRUE(uri.Query().Str().empty()); + EXPECT_TRUE(uri.Fragment().Str().empty()); +} + +///////////////////////////////////////////////// +TEST(URITEST, URIAuthority) +{ + URIAuthority auth; + + // Empty + EXPECT_TRUE(auth.UserInfo().empty()); + EXPECT_TRUE(auth.Host().empty()); + EXPECT_FALSE(auth.Port()); + + auth.SetUserInfo("bob.smith"); + EXPECT_EQ("bob.smith", auth.UserInfo()); + // No host has been set yet, so the string will be empty. + EXPECT_EQ("", auth.Str()); + EXPECT_TRUE(auth.Valid()); + + auth.SetHost("google.com"); + EXPECT_EQ("google.com", auth.Host()); + EXPECT_EQ("//bob.smith@google.com", auth.Str()); + EXPECT_TRUE(auth.Valid()); + + auth.SetPort(1234); + EXPECT_EQ(1234, *auth.Port()); + EXPECT_EQ("//bob.smith@google.com:1234", auth.Str()); + EXPECT_TRUE(auth.Valid()); + + URIAuthority auth2; + EXPECT_FALSE(auth == auth2); + auth2 = auth; + EXPECT_TRUE(auth == auth2); + EXPECT_TRUE(auth2.Valid()); +} + ///////////////////////////////////////////////// int main(int argc, char **argv) { From 95f8cad10628c8eb0d9932dac0c5f579f0f4aefb Mon Sep 17 00:00:00 2001 From: Steve Peters Date: Fri, 20 Dec 2019 11:46:51 -0800 Subject: [PATCH 009/219] remove test for removed enum value --- graphics/src/Image_TEST.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/graphics/src/Image_TEST.cc b/graphics/src/Image_TEST.cc index 8fcf585a6..3ac3a630b 100644 --- a/graphics/src/Image_TEST.cc +++ b/graphics/src/Image_TEST.cc @@ -96,8 +96,6 @@ TEST_F(ImageTest, ConvertPixelFormat) Image::ConvertPixelFormat("RGB_FLOAT32")); EXPECT_EQ(Image::PixelFormatType::BAYER_RGGB8, Image::ConvertPixelFormat("BAYER_RGGB8")); - EXPECT_EQ(Image::PixelFormatType::BAYER_RGGR8, - Image::ConvertPixelFormat("BAYER_RGGR8")); EXPECT_EQ(Image::PixelFormatType::BAYER_GBRG8, Image::ConvertPixelFormat("BAYER_GBRG8")); EXPECT_EQ(Image::PixelFormatType::BAYER_GRBG8, From c985f6709ac19fe921864c7e4126a2ab58792786 Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Fri, 20 Dec 2019 11:55:36 -0800 Subject: [PATCH 010/219] Updates --- Migration.md | 11 +++++++++++ src/URI_TEST.cc | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Migration.md b/Migration.md index 6281e32c3..f655f1069 100644 --- a/Migration.md +++ b/Migration.md @@ -12,6 +12,17 @@ release will remove the deprecated code. 1. Corrected `BAYER_RGGR8` to `BAYER_BGGR8` in `PixelFormatName` and `PixelFormatType` located in `graphics/include/ignition/common/Image.hh`. +1. URI parsing has updated to follow the specification more closely. + * An empty URI Path is valid. + * Double forward slashes (//) are valid in a URI Path. + * A URI Query does not require the `key=value` format. For example + a valid query can be "?aquery" and even "?aquery?". + * A URI authority is optional. If present, then a URI authority begins + with two forward slashes and immediately follows the URI scheme. A host + must be present if an authority is present. All this means the following + is invalid, `file:///abs/path/to/file`. The proper form is + `file:/abs/path/to/file`. + ## Ignition Common 2.X to 3.X ### Additions diff --git a/src/URI_TEST.cc b/src/URI_TEST.cc index 0c66a6a2c..4df30bcd0 100644 --- a/src/URI_TEST.cc +++ b/src/URI_TEST.cc @@ -223,7 +223,7 @@ TEST(URITEST, URIPathString) EXPECT_NO_THROW(EXPECT_TRUE(URIPath("a//b").Valid())); EXPECT_NO_THROW(EXPECT_TRUE(URIPath("/a//b").Valid())); EXPECT_NO_THROW(EXPECT_TRUE(URIPath(" ").Valid())); - EXPECT_NO_THROW(EXPECT_TRUE(URIPath("?invalid").Valid())); + EXPECT_NO_THROW(EXPECT_FALSE(URIPath("?invalid").Valid())); EXPECT_NO_THROW(EXPECT_TRUE(URIPath("=invalid").Valid())); EXPECT_NO_THROW(EXPECT_TRUE(URIPath("&invalid").Valid())); EXPECT_NO_THROW(EXPECT_TRUE(URIPath("invalid#").Valid())); From 357aa8c68e0e44ca5875e3aa0f91d8db49b28a6e Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Fri, 20 Dec 2019 12:18:13 -0800 Subject: [PATCH 011/219] Deprecated file:// --- src/SystemPaths_TEST.cc | 5 +++-- src/URI.cc | 22 ++++++++++++++++++---- src/URI_TEST.cc | 30 +++++++++++++++++++++++------- 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index ad997db54..40a0927c9 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -213,6 +213,7 @@ TEST_F(SystemPathsFixture, FindFileURI) this->filesystemRoot); EXPECT_EQ("", sp.FindFileURI("file://no_such_file")); + EXPECT_EQ(file1, sp.FindFileURI("file:test_dir1/test_f1")); EXPECT_EQ(file1, sp.FindFileURI("file://test_dir1/test_f1")); EXPECT_EQ(file1, sp.FindFileURI("file://" + ignition::common::copyToUnixPath(file1))); @@ -267,13 +268,13 @@ TEST_F(SystemPathsFixture, FindFileURI) sp.AddFindFileURICallback(osrfCb); EXPECT_EQ(file1, sp.FindFileURI("robot://test_f1")); - EXPECT_EQ(file2, sp.FindFileURI("osrf://test_f2")); + EXPECT_EQ(file2, sp.FindFileURI("osrf:test_f2")); // Test that th CB from SetFindFileURICallback is called first even when a // second handler for the same protocol is available sp.AddFindFileURICallback(robot2Cb); EXPECT_EQ(file1, sp.FindFileURI("robot://test_f1")); - EXPECT_EQ(file2, sp.FindFileURI("osrf://test_f2")); + EXPECT_EQ(file2, sp.FindFileURI("osrf:test_f2")); } ////////////////////////////////////////////////// diff --git a/src/URI.cc b/src/URI.cc index 70b656829..844bbb411 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -1062,10 +1062,24 @@ bool URI::Parse(const std::string &_str) size_t authDelimPos = str.find(kAuthDelim); if (authDelimPos != std::string::npos && authDelimPos == 0) { - size_t authEndPos = str.find_first_of("/?#", - authDelimPos + std::strlen(kAuthDelim)); - localAuthority = str.substr(authDelimPos, authEndPos); - str.erase(0, authEndPos); + if (localScheme == "file") + { + // Deprecated. file:// is deprecated in Ignition Common 4. Remove + // this part of this `if` statement and leave just the contents of the + // `else` clause. + ignwarn << "`file://` is deprecated. The double forward slash " + << "following a scheme (`file:` in this case) indicates the presense " + << "of a URI authority. `file://` should be replaced with just " + << "`file:` when referring to system path.\n"; + str.erase(0, 2); + } + else + { + size_t authEndPos = str.find_first_of("/?#", + authDelimPos + std::strlen(kAuthDelim)); + localAuthority = str.substr(authDelimPos, authEndPos); + str.erase(0, authEndPos); + } } // Get the path information diff --git a/src/URI_TEST.cc b/src/URI_TEST.cc index 4df30bcd0..9db72915a 100644 --- a/src/URI_TEST.cc +++ b/src/URI_TEST.cc @@ -223,7 +223,10 @@ TEST(URITEST, URIPathString) EXPECT_NO_THROW(EXPECT_TRUE(URIPath("a//b").Valid())); EXPECT_NO_THROW(EXPECT_TRUE(URIPath("/a//b").Valid())); EXPECT_NO_THROW(EXPECT_TRUE(URIPath(" ").Valid())); - EXPECT_NO_THROW(EXPECT_FALSE(URIPath("?invalid").Valid())); + + // The following are valid because setting a URIPath to an invalid string + // results in the path being empty, which in turn is a valid path. + EXPECT_NO_THROW(EXPECT_TRUE(URIPath("?invalid").Valid())); EXPECT_NO_THROW(EXPECT_TRUE(URIPath("=invalid").Valid())); EXPECT_NO_THROW(EXPECT_TRUE(URIPath("&invalid").Valid())); EXPECT_NO_THROW(EXPECT_TRUE(URIPath("invalid#").Valid())); @@ -444,10 +447,26 @@ TEST(URITEST, Path) EXPECT_EQ(uri.Str(), "file:/var/run/test"); EXPECT_TRUE(uri.Path().IsAbsolute()); + // The following seven lines are valid for Ignition Common 5. See + // the deprecation note in URI::Parse(const std::string). + // uri.Parse("file://var/run/test"); + // EXPECT_EQ(uri.Str(), "file://var/run/test"); + // EXPECT_EQ(uri.Path().Str(), "/run/test"); + // EXPECT_TRUE(uri.Path().IsAbsolute()); + // EXPECT_TRUE(uri.Parse("file://test%20space")); + // EXPECT_EQ(uri.Authority().Str(), "//test%20space"); + // EXPECT_TRUE(uri.Path().Str().empty()); + + // The following seven lines are valid for Ignition Common 4, and should + // be removed in Ignition Common 5. See the deprecation note in + // URI::Parse(const std::string). uri.Parse("file://var/run/test"); - EXPECT_EQ(uri.Str(), "file://var/run/test"); - EXPECT_EQ(uri.Path().Str(), "/run/test"); - EXPECT_TRUE(uri.Path().IsAbsolute()); + EXPECT_EQ(uri.Str(), "file:var/run/test"); + EXPECT_EQ(uri.Path().Str(), "var/run/test"); + EXPECT_FALSE(uri.Path().IsAbsolute()); + EXPECT_TRUE(uri.Parse("file://test%20space")); + EXPECT_EQ(uri.Authority().Str(), ""); + EXPECT_EQ("test%20space", uri.Path().Str()); uri.Parse("file:/var/run/test"); EXPECT_EQ(uri.Str(), "file:/var/run/test"); @@ -461,9 +480,6 @@ TEST(URITEST, Path) EXPECT_EQ(uri.Path().Str(), "/test+space"); EXPECT_TRUE(uri.Path().IsAbsolute()); - EXPECT_TRUE(uri.Parse("file://test%20space")); - EXPECT_EQ(uri.Authority().Str(), "//test%20space"); - EXPECT_TRUE(uri.Path().Str().empty()); EXPECT_TRUE(uri.Parse("file:/test%20space")); EXPECT_EQ(uri.Str(), "file:/test%20space"); From 787483ffa25444dc4154a8780472a9e992e04777 Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Fri, 20 Dec 2019 12:23:01 -0800 Subject: [PATCH 012/219] Code check --- src/URI.cc | 2 +- src/URI_TEST.cc | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/URI.cc b/src/URI.cc index 844bbb411..ca1ce7e2a 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -552,7 +552,7 @@ bool URIPath::Valid(const std::string &_str) ":" "%" // "-._~" // is in RFC, weird - "+"// "!$&'()*,;=" // is in RFC, weird + "+" // "!$&'()*,;=" // is in RFC, weird "[/"; if (str.substr(0, 1).find_first_not_of(allowedCharsFirst) != std::string::npos) diff --git a/src/URI_TEST.cc b/src/URI_TEST.cc index 9db72915a..38aa74027 100644 --- a/src/URI_TEST.cc +++ b/src/URI_TEST.cc @@ -656,7 +656,8 @@ TEST(URITEST, WikipediaTests) // The following tests were pulled from: // https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Examples - EXPECT_TRUE(uri.Parse("https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top")); + EXPECT_TRUE(uri.Parse("https://john.doe@www.example.com:123/forum/questions" + "/?tag=networking&order=newest#top")); EXPECT_EQ("https", uri.Scheme()); EXPECT_EQ("john.doe", uri.Authority().UserInfo()); EXPECT_EQ("www.example.com", uri.Authority().Host()); From da7a67720f765530a4df06eba2a730982d4dec8a Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Fri, 20 Dec 2019 12:25:26 -0800 Subject: [PATCH 013/219] Update --- Migration.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Migration.md b/Migration.md index f655f1069..ab9344e4e 100644 --- a/Migration.md +++ b/Migration.md @@ -12,16 +12,19 @@ release will remove the deprecated code. 1. Corrected `BAYER_RGGR8` to `BAYER_BGGR8` in `PixelFormatName` and `PixelFormatType` located in `graphics/include/ignition/common/Image.hh`. -1. URI parsing has updated to follow the specification more closely. +1. URI parsing has updated to follow the specification more closely. Changes + include: * An empty URI Path is valid. - * Double forward slashes (//) are valid in a URI Path. - * A URI Query does not require the `key=value` format. For example - a valid query can be "?aquery" and even "?aquery?". + * Double forward slashes, `//`, are valid in a URI Path. + * A URI Query does not require a `key=value` format. For example + a valid query can be "?aquery", "?aquery?", and `??`. * A URI authority is optional. If present, then a URI authority begins with two forward slashes and immediately follows the URI scheme. A host must be present if an authority is present. All this means the following is invalid, `file:///abs/path/to/file`. The proper form is - `file:/abs/path/to/file`. + `file:/abs/path/to/file`. `file://` has been deprecated in Ignition + Common 4. Starting in Ignition Common 5 `file://` will require a + valid authority. ## Ignition Common 2.X to 3.X From 71d89a624806ff1f17b424b1e36ade13e61d59ef Mon Sep 17 00:00:00 2001 From: Steve Peters Date: Fri, 20 Dec 2019 20:44:01 +0000 Subject: [PATCH 014/219] URI.hh: include --- include/ignition/common/URI.hh | 1 + 1 file changed, 1 insertion(+) diff --git a/include/ignition/common/URI.hh b/include/ignition/common/URI.hh index a01ec792e..f8fa13f1c 100644 --- a/include/ignition/common/URI.hh +++ b/include/ignition/common/URI.hh @@ -18,6 +18,7 @@ #define IGNITION_COMMON_URI_HH_ #include +#include #include #include From f518c918324934fdcdacc717a7cb01ae9fe2be66 Mon Sep 17 00:00:00 2001 From: Steve Peters Date: Fri, 20 Dec 2019 14:26:54 -0800 Subject: [PATCH 015/219] add c++17 headers to cpplint --- tools/cpplint.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tools/cpplint.py b/tools/cpplint.py index b58b44275..c464a1347 100644 --- a/tools/cpplint.py +++ b/tools/cpplint.py @@ -399,6 +399,18 @@ 'utility', 'valarray', 'vector', + # 17.6.1.2 C++14 headers + 'shared_mutex', + # 17.6.1.2 C++17 headers + 'any', + 'charconv', + 'codecvt', + 'execution', + 'filesystem', + 'memory_resource', + 'optional', + 'string_view', + 'variant', # 17.6.1.2 C++ headers for C library facilities 'cassert', 'ccomplex', From 3d2f69e199478b47b1fcf0d5754df92d4cd9dff3 Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Fri, 20 Dec 2019 16:17:48 -0800 Subject: [PATCH 016/219] Add file: as special case --- Migration.md | 6 +- include/ignition/common/URI.hh | 36 ++++++- src/SystemPaths_TEST.cc | 3 +- src/URI.cc | 168 +++++++++++++++++++++------------ src/URI_TEST.cc | 51 +++++----- 5 files changed, 175 insertions(+), 89 deletions(-) diff --git a/Migration.md b/Migration.md index ab9344e4e..7dbeb8287 100644 --- a/Migration.md +++ b/Migration.md @@ -20,11 +20,7 @@ release will remove the deprecated code. a valid query can be "?aquery", "?aquery?", and `??`. * A URI authority is optional. If present, then a URI authority begins with two forward slashes and immediately follows the URI scheme. A host - must be present if an authority is present. All this means the following - is invalid, `file:///abs/path/to/file`. The proper form is - `file:/abs/path/to/file`. `file://` has been deprecated in Ignition - Common 4. Starting in Ignition Common 5 `file://` will require a - valid authority. + must be present if an authority is present and the scheme != 'file'. ## Ignition Common 2.X to 3.X diff --git a/include/ignition/common/URI.hh b/include/ignition/common/URI.hh index a01ec792e..d1f8cb653 100644 --- a/include/ignition/common/URI.hh +++ b/include/ignition/common/URI.hh @@ -37,6 +37,20 @@ namespace ignition /// A URI authority contains userinfo, host, and port data. The format /// of a URI authority is `//userinfo@host:port`. The `userinfo` and /// `port` components are optional. + /// + /// A URI Authority requires the existence of host information, + /// except when a Scheme is `file`. When a scheme is `file`, then the + /// following are considered valid URIs and equivalent: + /// + /// * file:/abs/path + /// * file:///abs/path + /// + /// Keep in mind that a URI path must start with a forward slash when an + /// authority, as indicated by two forward slashes, is present. This + /// means relative file paths cannot be specified with an empty + /// authority. For example, `file://abs/path` will result in a host + /// value of `abs` and the URI path will be `/path`. You can specify + /// a relative path using `file:abs/path`. class IGNITION_COMMON_VISIBLE URIAuthority { /// \brief Constructor @@ -73,6 +87,16 @@ namespace ignition /// \param[in] _host The host. public: void SetHost(const std::string &_host) const; + /// \brief True if an empty host is considered valid. + /// \return True if an empty host is valid. + public: bool EmptyHostValid() const; + + /// \brief Set whether an empty host is considered valid. + /// This should only be set to true if the corresponding URIScheme + /// is "file". + /// \param[in] _valid True if an empty host is valid. + public: void SetEmptyHostValid(bool _valid) const; + /// \brief Get the port. /// \return The port number, which is optional. public: std::optional Port() const; @@ -96,8 +120,12 @@ namespace ignition /// \brief Return true if the string is a valid path. /// \param[in] _str String to check. + /// \param[in] _emptyHostValid Set this to true if an empty host is + /// valid. This should only be set to true if the corresponding URIScheme + /// is "file". /// \return True if _str is a valid URI path. - public: static bool Valid(const std::string &_str); + public: static bool Valid(const std::string &_str, + bool _emptyHostValid = false); /// \brief Return true if this is a valid authority. /// \return True if this is a valid URI authority. @@ -105,8 +133,12 @@ namespace ignition /// \brief Parse a string as URIAuthority. /// \param[in] _str A string. + /// \param[in] _emptyHostValid Set this to true if an empty host is + /// valid. This should only be set to true if the corresponding URIScheme + /// is "file". /// \return True if the string could be parsed as a URIAuthority. - public: bool Parse(const std::string &_str); + public: bool Parse(const std::string &_str, + bool _emptyHostValid = false); IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING /// \internal diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index 40a0927c9..88c42549a 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -214,7 +214,6 @@ TEST_F(SystemPathsFixture, FindFileURI) EXPECT_EQ("", sp.FindFileURI("file://no_such_file")); EXPECT_EQ(file1, sp.FindFileURI("file:test_dir1/test_f1")); - EXPECT_EQ(file1, sp.FindFileURI("file://test_dir1/test_f1")); EXPECT_EQ(file1, sp.FindFileURI("file://" + ignition::common::copyToUnixPath(file1))); EXPECT_EQ("", sp.FindFileURI("osrf://unknown.protocol")); @@ -311,7 +310,7 @@ TEST_F(SystemPathsFixture, FindFile) EXPECT_EQ("", sp.FindFile(this->filesystemRoot + "no_such_file")); EXPECT_EQ("", sp.FindFile("no_such_file")); EXPECT_EQ(file1, sp.FindFile(common::joinPaths("test_dir1", "test_f1"))); - EXPECT_EQ(file1, sp.FindFile("file://test_dir1/test_f1")); + EXPECT_EQ(file1, sp.FindFile("file:test_dir1/test_f1")); // Existing absolute paths #ifndef _WIN32 diff --git a/src/URI.cc b/src/URI.cc index ca1ce7e2a..aa99783f2 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -41,6 +41,13 @@ class ignition::common::URIAuthorityPrivate /// \brief The port. public: std::optional port; + + /// \brief Set this to true if an empty host is valid. This should only be + /// set to true if the corresponding URIScheme is "file". + public: bool emptyHostValid = false; + + /// \brief True if the host was set to empty. + public: bool hasEmptyHost = false; }; /// \brief URIPath private data. @@ -131,6 +138,8 @@ void URIAuthority::Clear() this->dataPtr->userInfo.clear(); this->dataPtr->host.clear(); this->dataPtr->port.reset(); + this->dataPtr->emptyHostValid = false; + this->dataPtr->hasEmptyHost = false; } ////////////////////////////////////////////////// @@ -174,13 +183,15 @@ bool URIAuthority::operator==(const URIAuthority &_auth) const { return this->dataPtr->userInfo == _auth.UserInfo() && this->dataPtr->host == _auth.Host() && - this->dataPtr->port == _auth.Port(); + this->dataPtr->port == _auth.Port() && + this->dataPtr->emptyHostValid == _auth.EmptyHostValid(); } ////////////////////////////////////////////////// std::string URIAuthority::Str() const { - if (!this->dataPtr->host.empty()) + if (!this->dataPtr->host.empty() || + (this->dataPtr->emptyHostValid && this->dataPtr->hasEmptyHost)) { std::string result = "//"; result += this->dataPtr->userInfo.empty() ? "" : @@ -200,6 +211,9 @@ URIAuthority &URIAuthority::operator=(const URIAuthority &_auth) this->dataPtr->userInfo = _auth.UserInfo(); this->dataPtr->host = _auth.Host(); this->dataPtr->port = _auth.Port(); + this->dataPtr->emptyHostValid = _auth.EmptyHostValid(); + this->dataPtr->hasEmptyHost = _auth.dataPtr->hasEmptyHost; + return *this; } @@ -210,7 +224,7 @@ bool URIAuthority::Valid() const } ////////////////////////////////////////////////// -bool URIAuthority::Valid(const std::string &_str) +bool URIAuthority::Valid(const std::string &_str, bool _emptyHostValid) { auto str = trimmed(_str); if (str.empty()) @@ -266,7 +280,7 @@ bool URIAuthority::Valid(const std::string &_str) host = str.substr(userInfoIndex); // The host can't be empty. - if (host.empty()) + if (host.empty() && !_emptyHostValid) return false; // IP-literal = "[" IPV6address "] @@ -297,15 +311,32 @@ bool URIAuthority::Valid(const std::string &_str) } ////////////////////////////////////////////////// -bool URIAuthority::Parse(const std::string &_str) +bool URIAuthority::EmptyHostValid() const { - if (!this->Valid(_str)) + return this->dataPtr->emptyHostValid; +} + +////////////////////////////////////////////////// +void URIAuthority::SetEmptyHostValid(bool _valid) const +{ + this->dataPtr->emptyHostValid = _valid; +} + +////////////////////////////////////////////////// +bool URIAuthority::Parse(const std::string &_str, bool _emptyHostValid) +{ + if (!this->Valid(_str, _emptyHostValid)) return false; this->Clear(); - if (_str.empty()) + this->dataPtr->emptyHostValid = _emptyHostValid; + + if (_str.empty() || _str == "//") + { + this->dataPtr->hasEmptyHost = true; return true; + } auto userInfoIndex = _str.find("@"); if (userInfoIndex != std::string::npos) @@ -972,8 +1003,10 @@ bool URI::Valid() const bool URI::Valid(const std::string &_str) { auto str = trimmed(_str); + // Validate scheme. - auto schemeDelimPos = str.find(kSchemeDelim); + size_t schemeDelimPos = str.find(kSchemeDelim); + if ((str.empty()) || (schemeDelimPos == std::string::npos) || (schemeDelimPos == 0u)) @@ -981,60 +1014,70 @@ bool URI::Valid(const std::string &_str) return false; } - auto authDelimPos = str.find(kAuthDelim); - auto pathStart = authDelimPos != std::string::npos ? - str.find("/", authDelimPos + std::strlen(kAuthDelim)) : - str.find("/"); - + std::string localScheme; std::string localAuthority; - if (authDelimPos != std::string::npos && authDelimPos == schemeDelimPos+1) + std::string localPath; + std::string localQuery; + std::string localFragment; + + localScheme = str.substr(0, schemeDelimPos); + str.erase(0, schemeDelimPos + std::strlen(kSchemeDelim)); + + bool emptyHostValid = false; + if (localScheme == "file") + emptyHostValid = true; + + bool authorityPresent = false; + + // Get the authority delimiter position, if one is present + size_t authDelimPos = str.find(kAuthDelim); + if (authDelimPos != std::string::npos && authDelimPos == 0) { - if (pathStart != std::string::npos) - localAuthority = str.substr(authDelimPos, pathStart - authDelimPos); + authorityPresent = true; + size_t authEndPos = str.find_first_of("/?#", + authDelimPos + std::strlen(kAuthDelim)); + + if (localScheme != "file" && authEndPos == authDelimPos+2) + { + ignerr << "A host is manadatory when using a scheme other than file\n"; + return false; + } else { - auto to = str.find('?', authDelimPos); - if (to != std::string::npos) - localAuthority = str.substr(authDelimPos, to - authDelimPos); - else - { - to = str.find('#', authDelimPos); - if (to != std::string::npos) - localAuthority = str.substr(authDelimPos, to - authDelimPos); - else - localAuthority = str.substr(authDelimPos); - } + localAuthority = str.substr(authDelimPos, authEndPos); + str.erase(0, authEndPos); } } - std::string localPath = pathStart != std::string::npos ? - str.substr(pathStart) : ""; - std::string localQuery; - std::string localFragment; + // Get the path information + size_t pathEndPos = str.find_first_of("?#"); + localPath = str.substr(0, pathEndPos); + str.erase(0, pathEndPos); - auto to = str.find('?', pathStart); - if (to != std::string::npos) + size_t queryStartPos = str.find("?"); + if (queryStartPos != std::string::npos) { - // Update path. - localPath = str.substr(pathStart, to - pathStart); - - // Update the query. - localQuery = str.substr(to); + size_t queryEndPos = str.find("#"); + // Get the query. + localQuery = str.substr(0, queryEndPos); + str.erase(0, queryEndPos); } - auto to2 = str.find('#', to); - if (to2 != std::string::npos) + size_t fragStartPos = str.find("#"); + if (fragStartPos != std::string::npos) { - // Update query. - localQuery = str.substr(to, to2 - to); + // Get the query. + localFragment = str; + } - // Update the fragment. - localFragment = str.substr(to2); + if (!emptyHostValid || authorityPresent) + { + if (!URIAuthority::Valid(localAuthority, emptyHostValid)) + return false; } // Validate the path and query. - return URIAuthority::Valid(localAuthority) && - URIPath::Valid(localPath) && + return URIPath::Valid(localPath) && URIQuery::Valid(localQuery) && URIFragment::Valid(localFragment); } @@ -1058,25 +1101,27 @@ bool URI::Parse(const std::string &_str) localScheme = str.substr(0, schemeDelimPos); str.erase(0, schemeDelimPos + std::strlen(kSchemeDelim)); + bool emptyHostValid = false; + if (localScheme == "file") + emptyHostValid = true; + + bool authorityPresent = false; + // Get the authority delimiter position, if one is present size_t authDelimPos = str.find(kAuthDelim); if (authDelimPos != std::string::npos && authDelimPos == 0) { - if (localScheme == "file") + authorityPresent = true; + size_t authEndPos = str.find_first_of("/?#", + authDelimPos + std::strlen(kAuthDelim)); + + if (localScheme != "file" && authEndPos == authDelimPos+2) { - // Deprecated. file:// is deprecated in Ignition Common 4. Remove - // this part of this `if` statement and leave just the contents of the - // `else` clause. - ignwarn << "`file://` is deprecated. The double forward slash " - << "following a scheme (`file:` in this case) indicates the presense " - << "of a URI authority. `file://` should be replaced with just " - << "`file:` when referring to system path.\n"; - str.erase(0, 2); + ignerr << "A host is manadatory when using a scheme other than file\n"; + return false; } else { - size_t authEndPos = str.find_first_of("/?#", - authDelimPos + std::strlen(kAuthDelim)); localAuthority = str.substr(authDelimPos, authEndPos); str.erase(0, authEndPos); } @@ -1106,8 +1151,13 @@ bool URI::Parse(const std::string &_str) this->Clear(); this->SetScheme(localScheme); - return this->dataPtr->authority.Parse(localAuthority) && - this->dataPtr->path.Parse(localPath) && + if (!emptyHostValid || authorityPresent) + { + if (!this->dataPtr->authority.Parse(localAuthority, emptyHostValid)) + return false; + } + + return this->dataPtr->path.Parse(localPath) && this->dataPtr->query.Parse(localQuery) && this->dataPtr->fragment.Parse(localFragment); } diff --git a/src/URI_TEST.cc b/src/URI_TEST.cc index 38aa74027..d8cf714dc 100644 --- a/src/URI_TEST.cc +++ b/src/URI_TEST.cc @@ -441,32 +441,24 @@ TEST(URITEST, Path) uri.Path() /= "default"; EXPECT_EQ(uri.Str(), "data:world/default"); - EXPECT_FALSE(uri.Parse("file:///var/run/test")); + EXPECT_TRUE(uri.Parse("file:///var/run/test")); EXPECT_TRUE(uri.Parse("file:/var/run/test")); EXPECT_EQ(uri.Str(), "file:/var/run/test"); EXPECT_TRUE(uri.Path().IsAbsolute()); - // The following seven lines are valid for Ignition Common 5. See - // the deprecation note in URI::Parse(const std::string). - // uri.Parse("file://var/run/test"); - // EXPECT_EQ(uri.Str(), "file://var/run/test"); - // EXPECT_EQ(uri.Path().Str(), "/run/test"); - // EXPECT_TRUE(uri.Path().IsAbsolute()); - // EXPECT_TRUE(uri.Parse("file://test%20space")); - // EXPECT_EQ(uri.Authority().Str(), "//test%20space"); - // EXPECT_TRUE(uri.Path().Str().empty()); - - // The following seven lines are valid for Ignition Common 4, and should - // be removed in Ignition Common 5. See the deprecation note in - // URI::Parse(const std::string). - uri.Parse("file://var/run/test"); - EXPECT_EQ(uri.Str(), "file:var/run/test"); - EXPECT_EQ(uri.Path().Str(), "var/run/test"); - EXPECT_FALSE(uri.Path().IsAbsolute()); + EXPECT_TRUE(uri.Parse("file://var/run/test")); + EXPECT_EQ(uri.Str(), "file://var/run/test"); + EXPECT_EQ(uri.Path().Str(), "/run/test"); + EXPECT_TRUE(uri.Path().IsAbsolute()); EXPECT_TRUE(uri.Parse("file://test%20space")); - EXPECT_EQ(uri.Authority().Str(), ""); - EXPECT_EQ("test%20space", uri.Path().Str()); + EXPECT_EQ(uri.Authority().Str(), "//test%20space"); + EXPECT_TRUE(uri.Path().Str().empty()); + + EXPECT_TRUE(uri.Parse("file:///abs/path/test")); + EXPECT_EQ(uri.Str(), "file:///abs/path/test"); + EXPECT_EQ(uri.Path().Str(), "/abs/path/test"); + EXPECT_TRUE(uri.Path().IsAbsolute()); uri.Parse("file:/var/run/test"); EXPECT_EQ(uri.Str(), "file:/var/run/test"); @@ -603,7 +595,7 @@ TEST(URITEST, URIString) EXPECT_FALSE(URI::Valid("scheme://")); EXPECT_FALSE(URI::Valid("scheme://?key=value")); EXPECT_TRUE(URI::Valid("scheme://part1?keyvalue")); - EXPECT_TRUE(URI::Valid("scheme://part1?key value")); + EXPECT_FALSE(URI::Valid("scheme://part1?key value")); EXPECT_TRUE(URI::Valid("scheme://part1")); EXPECT_TRUE(URI::Valid("scheme://part1/part2")); EXPECT_TRUE(URI::Valid("scheme://part1?key=value")); @@ -744,6 +736,23 @@ TEST(URITEST, URIAuthority) EXPECT_TRUE(auth2.Valid()); } +TEST(URITEST, File) +{ + URI uri; + EXPECT_TRUE(uri.Parse("file:relative/path")); + EXPECT_EQ("relative/path", uri.Path().Str()); + EXPECT_FALSE(uri.Authority().EmptyHostValid()); + + EXPECT_TRUE(uri.Parse("file:/abs/path")); + EXPECT_EQ("/abs/path", uri.Path().Str()); + EXPECT_FALSE(uri.Authority().EmptyHostValid()); + + // Empty host is valid for file: scheme + EXPECT_TRUE(uri.Parse("file:///abs/path")); + EXPECT_EQ("/abs/path", uri.Path().Str()); + EXPECT_TRUE(uri.Authority().EmptyHostValid()); +} + ///////////////////////////////////////////////// int main(int argc, char **argv) { From 21bea77f9c1bfddcfe392baf1d6f36c156a50b67 Mon Sep 17 00:00:00 2001 From: Louise Poubel Date: Fri, 3 Jan 2020 21:26:02 +0000 Subject: [PATCH 017/219] Close branch common3_to_default_20191220 From 4fca2b736bc5f45d16e39df22a3888f88c197cf4 Mon Sep 17 00:00:00 2001 From: Steve Peters Date: Wed, 22 Jan 2020 09:08:30 +0000 Subject: [PATCH 018/219] Close branch merge_3_default_012220 From 8c5bb2e03d4e72887088e37eaeb3f34899f8ede1 Mon Sep 17 00:00:00 2001 From: Sean Yen Date: Wed, 12 Feb 2020 22:43:41 +0000 Subject: [PATCH 019/219] add missing dependency for PERFORMANCE_plugin_specialization. --- test/performance/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/performance/CMakeLists.txt b/test/performance/CMakeLists.txt index c21ce1320..56babb295 100644 --- a/test/performance/CMakeLists.txt +++ b/test/performance/CMakeLists.txt @@ -12,3 +12,9 @@ link_directories(${PROJECT_BINARY_DIR}/test) ign_build_tests( TYPE PERFORMANCE SOURCES ${tests}) + +if(TARGET PERFORMANCE_plugin_specialization) + # We add this dependency to make sure that DummyPlugins gets generated + # before PERFORMANCE_plugin_specialization so that its auto-generated header is available. + add_dependencies(PERFORMANCE_plugin_specialization IGNDummyPlugins) +endif() From 810755b60838edf7a3738be128736aa0a9c1888c Mon Sep 17 00:00:00 2001 From: Sean Yen Date: Wed, 12 Feb 2020 22:55:03 +0000 Subject: [PATCH 020/219] Fix PRE_BUILD was treated as PRE_LINK causing building problems. --- test/plugins/CMakeLists.txt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/test/plugins/CMakeLists.txt b/test/plugins/CMakeLists.txt index 3d871cf07..7f665ee61 100644 --- a/test/plugins/CMakeLists.txt +++ b/test/plugins/CMakeLists.txt @@ -8,24 +8,27 @@ add_library(IGNDummyPlugins SHARED DummyPlugins.cc) # This variable gets put in the cache so that it is available at generation time. set(IGN_DUMMY_PLUGIN_PATH_HEADER "DummyPluginsPath.h" CACHE INTERNAL "Name of header which contains DummyPlugin library path") -set(header_text "#define IGN_DUMMY_PLUGIN_PATH \"$\"") +get_target_property(IGNDummyPluginsLocation IGNDummyPlugins RUNTIME_OUTPUT_DIRECTORY) +set(header_text "#define IGN_DUMMY_PLUGIN_PATH \"${IGNDummyPluginsLocation}\"") # Pipe the header text into a header that will be placed in the project binary directory. # We need to use this approach instead of the usual configure_file, because we required a # generator expression in order to locate the IGNDummyPlugins library on Windows. Generator # expressions can only be evaluated during generation (as opposed to during configuration), # so we must use add_custom_command in order to produce this header. +add_custom_target(IGNDummyPluginsPathHeader) if(WIN32) # Including VERBATIM causes the wrong behavior on Windows, so we leave it out of the # custom command when compiling on Windows. - add_custom_command(TARGET IGNDummyPlugins + add_custom_command(TARGET IGNDummyPluginsPathHeader PRE_BUILD COMMAND echo ARGS "${header_text}" > ${PROJECT_BINARY_DIR}/${IGN_DUMMY_PLUGIN_PATH_HEADER}) else() - add_custom_command(TARGET IGNDummyPlugins + add_custom_command(TARGET IGNDummyPluginsPathHeader PRE_BUILD COMMAND echo ARGS "${header_text}" > ${PROJECT_BINARY_DIR}/${IGN_DUMMY_PLUGIN_PATH_HEADER} VERBATIM) -endif() \ No newline at end of file +endif() +add_dependencies(IGNDummyPlugins IGNDummyPluginsPathHeader) From fb24e770c9ddc68f5e1b81f46f5812c1777e6309 Mon Sep 17 00:00:00 2001 From: Sean Yen Date: Thu, 13 Feb 2020 01:22:20 +0000 Subject: [PATCH 021/219] Attempt to fix the CI break. --- test/plugins/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/plugins/CMakeLists.txt b/test/plugins/CMakeLists.txt index 7f665ee61..6d9323703 100644 --- a/test/plugins/CMakeLists.txt +++ b/test/plugins/CMakeLists.txt @@ -8,7 +8,11 @@ add_library(IGNDummyPlugins SHARED DummyPlugins.cc) # This variable gets put in the cache so that it is available at generation time. set(IGN_DUMMY_PLUGIN_PATH_HEADER "DummyPluginsPath.h" CACHE INTERNAL "Name of header which contains DummyPlugin library path") -get_target_property(IGNDummyPluginsLocation IGNDummyPlugins RUNTIME_OUTPUT_DIRECTORY) +if(WIN32) + get_target_property(IGNDummyPluginsLocation IGNDummyPlugins RUNTIME_OUTPUT_DIRECTORY) +else() + get_target_property(IGNDummyPluginsLocation IGNDummyPlugins LIBRARY_OUTPUT_DIRECTORY) +endif() set(header_text "#define IGN_DUMMY_PLUGIN_PATH \"${IGNDummyPluginsLocation}\"") # Pipe the header text into a header that will be placed in the project binary directory. From b1a7f433708b9ce9c95d84f6c8b3322f1f44c219 Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Tue, 7 Apr 2020 06:04:43 -0700 Subject: [PATCH 022/219] Fix port number --- src/URI.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/URI.cc b/src/URI.cc index aa99783f2..05e643e5f 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -369,7 +369,14 @@ bool URIAuthority::Parse(const std::string &_str, bool _emptyHostValid) if (portIndex != std::string::npos) { std::string portStr = _str.substr(portIndex + 1); - this->dataPtr->port.emplace(std::stoi(portStr)); + try + { + this->dataPtr->port.emplace(std::stoi(portStr)); + } + catch (...) + { + // Do nothing. The port number was invalid. + } } return true; From dc52761aaf383bf5509b26069826ece616c0e74f Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Tue, 7 Apr 2020 06:23:28 -0700 Subject: [PATCH 023/219] Debugging --- src/SystemPaths.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SystemPaths.cc b/src/SystemPaths.cc index 54f68491f..f7f47c4e7 100644 --- a/src/SystemPaths.cc +++ b/src/SystemPaths.cc @@ -307,6 +307,7 @@ std::string SystemPaths::FindFileURI(const std::string &_uri) const } const auto uri = ignition::common::URI(_uri); + std::cout << "Debug URI[" << uri.Str() << "]\n"; return this->FindFileURI(uri); } From 6efc8c726c8a7259f9f554d1d22e34636150ae7c Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Tue, 7 Apr 2020 13:50:14 -0700 Subject: [PATCH 024/219] Added another test, and hopefully fix windows --- src/URI.cc | 9 ++++++++- src/URI_TEST.cc | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/URI.cc b/src/URI.cc index 05e643e5f..7579d014f 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -1122,7 +1122,14 @@ bool URI::Parse(const std::string &_str) size_t authEndPos = str.find_first_of("/?#", authDelimPos + std::strlen(kAuthDelim)); - if (localScheme != "file" && authEndPos == authDelimPos+2) + // This could be a windows file path of the form file://D:/path/to/file + // In this case, the authority is not present. + if (str[authEndPos-1] == ':' && str[authEndPos] == '/') + { + str.erase(0, std::strlen(kAuthDelim)); + authorityPresent = false; + } + else if (localScheme != "file" && authEndPos == authDelimPos+2) { ignerr << "A host is manadatory when using a scheme other than file\n"; return false; diff --git a/src/URI_TEST.cc b/src/URI_TEST.cc index d8cf714dc..dad759544 100644 --- a/src/URI_TEST.cc +++ b/src/URI_TEST.cc @@ -753,6 +753,15 @@ TEST(URITEST, File) EXPECT_TRUE(uri.Authority().EmptyHostValid()); } +////////////////////////////////////////////////// +TEST(URITEST, WinPath) +{ + const auto uri = ignition::common::URI("file://D:/my/test/dir/world.sdf"); + EXPECT_EQ("file", uri.Scheme()); + EXPECT_TRUE(uri.Authority().Str().empty()); + EXPECT_EQ("file:D:/my/test/dir/world.sdf", uri.Str()); +} + ///////////////////////////////////////////////// int main(int argc, char **argv) { From eece845a68d2f7dc2bc23674c0ab7497285769e8 Mon Sep 17 00:00:00 2001 From: Nate Koenig Date: Wed, 8 Apr 2020 21:20:00 +0000 Subject: [PATCH 025/219] Close branch uri_authority From 6fdc25eda495472efc16fc66beea97609d635473 Mon Sep 17 00:00:00 2001 From: claireyywang Date: Fri, 17 Apr 2020 17:11:27 -0700 Subject: [PATCH 026/219] move hgignore to gitignore --- .hgignore => .gitignore | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .hgignore => .gitignore (100%) diff --git a/.hgignore b/.gitignore similarity index 100% rename from .hgignore rename to .gitignore From d85aadc320e589ff354f0a409ee6bf1fb84aaf56 Mon Sep 17 00:00:00 2001 From: claireyywang Date: Fri, 17 Apr 2020 17:12:01 -0700 Subject: [PATCH 027/219] add comments Signed-off-by: claireyywang --- .gitignore | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index ebd4abe1b..62b9898cc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ -syntax: glob - +# CMake folders build build_* + +# OS generated files .DS_Store *.swp From 452d4a309f987ca64f61f2dd10501c0306afa503 Mon Sep 17 00:00:00 2001 From: chapulina Date: Tue, 21 Apr 2020 19:14:04 -0700 Subject: [PATCH 028/219] [master] Update BitBucket links (#58) * [master] Update BitBucket links Signed-off-by: Louise Poubel * [master] Update BitBucket links Signed-off-by: Louise Poubel * fix URLs in changelog Signed-off-by: Mabel Zhang Co-authored-by: Mabel Zhang --- CONTRIBUTING.md | 2 +- Changelog.md | 120 ++++++++++++++++++------------------ README.md | 52 ++++++++-------- bitbucket-pipelines.yml | 6 +- graphics/src/CMakeLists.txt | 2 +- src/CMakeLists.txt | 2 +- src/Filesystem_TEST.cc | 4 +- tutorials/profiler.md | 2 +- 8 files changed, 95 insertions(+), 95 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6877dd263..147239ce5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1 +1 @@ -See the [Ignition Robotics contributing guide](https://bitbucket.org/ignitionrobotics/ign-gazebo/src/default/CONTRIBUTING.md). +See the [Ignition Robotics contributing guide](https://ignitionrobotics.org/docs/all/contributing). diff --git a/Changelog.md b/Changelog.md index 88d442d4f..80d578638 100644 --- a/Changelog.md +++ b/Changelog.md @@ -4,122 +4,122 @@ 1. Corrected `BAYER_RGGR8` to `BAYER_BGGR8` in `PixelFormatName` and `PixelFormatType` located in `graphics/include/ignition/common/Image.hh`. - * [Pull request 191](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/191) + * [BitBucket pull request 191](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/191) 1. Added URI Authority parsing to the URI class. Authority information can be found [here](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Generic_syntax). This update also caused some formally valid syntax to become invalid, and some formally invalid syntax to become valid. See the migration guide. - * [Pull request xxx](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/xxx) + * [BitBucket pull request xxx](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/213) ## Ignition Common 3.x ## Ignition Common 3.X.X 1. `tiny_obj_loader`: set better diffuse value when `map_kD` is present and `Kd` is not specified. - * [Pull request 216](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/216) - * [Pull request 217](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/217) + * [BitBucket pull request 216](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/216) + * [BitBucket pull request 217](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/217) 1. ColladaLoader: load files with actors with multiple skeletons - * [Pull request 215](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/215) + * [BitBucket pull request 215](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/215) 1. Port Skeleton fixes from gazebo. - * [Pull request 209](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/209) + * [BitBucket pull request 209](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/209) 1. Port gazebo9 fix for ColladaLoader with multiple geometries - * [Pull request 208](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/208) + * [BitBucket pull request 208](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/208) 1. `SystemPaths::FindSharedLibrary`: return input if its is an absolute path to a file - * [Pull request 206](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/206) + * [BitBucket pull request 206](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/206) 1. Fix `Image::ConvertPixelFormat` for `BAYER_BGGR8` - * [Pull request 211](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/211) + * [BitBucket pull request 211](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/211) ## Ignition Common 3.3.0 (2019-08-27) 1. skip GTSMeshUtils test on Windows due to issue #50 - * [Pull request 205](https://bitbucket.org/osrf/gazebo/pull-request/205) + * [BitBucket pull request 205](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/205) 1. Add bvh animation support for skeleton and TrajectoryInfo - * [Pull request 197](https://bitbucket.org/osrf/gazebo/pull-request/197) + * [BitBucket pull request 197](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/197) 1. ColladaLoader: fix wrong node weights caused by buffer overflow bug - * [Pull request 201](https://bitbucket.org/osrf/gazebo/pull-request/201) + * [BitBucket pull request 201](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/201) 1. Filesystem copy directory and parentpath - * [Pull request 200](https://bitbucket.org/osrf/gazebo/pull-request/200) + * [BitBucket pull request 200](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/200) ## Ignition Common 3.2.0 (2019-08-07) 1. Allow ignLogInit to use an absolute path. Added a timeToIso that converts a given time to an ISO string. Some console timestamps were using `IGN_SYSTEM_TIME_NS()` and others `ignition::common::systemTimeISO()`. Switched all to use `ignition::common::systemTimeISO()`. - * [Pull request 203](https://bitbucket.org/osrf/gazebo/pull-request/203) + * [BitBucket pull request 203](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/203) 1. Port ColladaLoader fix: use default value of 1 for stride parameter when unset. - * [Pull request 196](https://bitbucket.org/osrf/gazebo/pull-request/196) + * [BitBucket pull request 196](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/196) ## Ignition Common 3.1.0 (2019-05-17) 1. Image::PixelFormatType: append `BAYER_BGGR8` instead of replacing `BAYER_RGGR8` - * [Pull request 192](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/192) + * [BitBucket pull request 192](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/192) 1. Use `std::tolower` with locale in lowercase helper function - * [Pull request 190](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/190) + * [BitBucket pull request 190](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/190) 1. Profiler: give hint on osx to find frameworks so it doesn't find them inside Xcode - * [Pull request 189](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/189) + * [BitBucket pull request 189](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/189) 1. Fix windows tests: SystemPathsFixture.FileSystemPaths and TimeTest.Sleep - * [Pull request 188](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/188) + * [BitBucket pull request 188](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/188) 1. Filesystem functions to create unique paths - * [Pull request 187](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/187) + * [BitBucket pull request 187](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/187) 1. Battery additions for LinearBatteryPlugin port to ign-gazebo - * [Pull request 186](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/186) + * [BitBucket pull request 186](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/186) 1. Consolidate Console::log streams to reduce colored log size - * [Pull request 185](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/185) - * [Issue 47](https://bitbucket.org/ignitionrobotics/ign-common/issue/47) + * [BitBucket pull request 185](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/185) + * [Issue 47](https://github.com/ignitionrobotics/ign-common/issues/47) 1. Fix ColladaLoader to support mixamo models and fix skeleton animation loading - * [Pull request 179](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/179) - * [osrf/gazebo pull request 3071](https://bitbucket.org/osrf/gazebo/pull-requests/3071) + * [BitBucket pull request 179](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/179) + * [BitBucket osrf/gazebo pull request 3071](https://osrf-migration.github.io/gazebo-gh-pages/#!/osrf/gazebo/pull-requests/3071) ## Ignition Common 3.0.0 (2019-02-28) 1. Use ign-cmake2 and support Ubuntu Bionic (18.04). - * [Pull request 131](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/131) + * [BitBucket pull request 131](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/131) 1. WorkerPool: allow user to set minimum number of worker threads. - * [Pull request 151](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/151) + * [BitBucket pull request 151](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/151) 1. ColladaLoader fixes: setting multiple texcoord's, check for line breaks when using `split` - * [Pull request 152](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/152) - * [Pull request 157](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/157) + * [BitBucket pull request 152](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/152) + * [BitBucket pull request 157](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/157) 1. Event: replace `operator()` and `Signal()` explicit templates with variadic templates and perfect forwarding. - * [Pull request 156](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/156) + * [BitBucket pull request 156](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/156) 1. Event: use second template argument to disambiguate events with matching signatures. - * [Pull request 164](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/164) - * [Pull request 166](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/166) + * [BitBucket pull request 164](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/164) + * [BitBucket pull request 166](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/166) 1. Add profiler using Remotery. - * [Pull request 162](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/162) - * [Pull request 169](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/169) + * [BitBucket pull request 162](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/162) + * [BitBucket pull request 169](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/169) 1. Added hash64 function for converting `std::string` to `uint64_t` as `constexpr`. - * [Pull request 170](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/170) - * [Pull request 171](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/171) - * [Pull request 172](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/172) + * [BitBucket pull request 170](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/170) + * [BitBucket pull request 171](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/171) + * [BitBucket pull request 172](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/172) 1. SystemPaths: search paths in `IGN_FILE_PATH` environment variable when finding files - * [Pull request 175](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/175) + * [BitBucket pull request 175](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/175) 1. `Time::Sleep`: return amount of time actually slept - * [Pull request 175](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/175) - * [Issue 44](https://bitbucket.org/ignitionrobotics/ign-common/issue/44) + * [BitBucket pull request 175](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/176) + * [Issue 44](https://github.com/ignitionrobotics/ign-common/issues/44) 1. NodeTransform: use unique_ptr for private data, add copy constructor/assignment - * [Pull request 181](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/181) + * [BitBucket pull request 181](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/181) ## Ignition Common 2.x @@ -128,22 +128,22 @@ ## Ignition Common 2.0.0 (2018-02-11) 1. Use ignition-cmake1 and components for av, events, and graphics - * [Pull request 102](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/102) - * [Pull request 103](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/103) - * [Pull request 105](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/105) - * [Pull request 106](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/106) - * [Pull request 107](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/107) - * [Pull request 108](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/108) - * [Pull request 109](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/109) + * [BitBucket pull request 102](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/102) + * [BitBucket pull request 103](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/103) + * [BitBucket pull request 105](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/105) + * [BitBucket pull request 106](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/106) + * [BitBucket pull request 107](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/107) + * [BitBucket pull request 108](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/108) + * [BitBucket pull request 109](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/109) 1. Expand plugin functionality with PluginPtr and specializations - * [Pull request 59](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/59) + * [BitBucket pull request 59](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/59) 1. Added signal handler class - * [Pull request 115](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/115) + * [BitBucket pull request 115](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/115) 1. Update tinyobjloader to version that supports triangulating meshes with concave polygons. - * [Pull request 160](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/160) + * [BitBucket pull request 160](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/160) ## Ignition Common 1.x.x (2018-XX-XX) @@ -151,32 +151,32 @@ ## Ignition Common 1.X.X (20XX-XX-XX) 1. Time::Sleep: use CLOCK_MONOTONIC on Linux - * [Pull request 159](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/159) + * [BitBucket pull request 159](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/159) ## Ignition Common 1.1.1 (2018-05-23) 1. Documentation upload improvements - * [Pull request 117](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/117) + * [BitBucket pull request 117](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/117) 1. Fix build on homebrew with ffmpeg4 - * [Pull request 119](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/119) + * [BitBucket pull request 119](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/119) 1. Remove symbolic link directory - * [Pull request 124](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/124) + * [BitBucket pull request 124](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/124) ## Ignition Common 1.1.0 (2018-04-16) 1. Accept spaces on URI path - * [Pull request 110](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/110) - * [Pull request 111](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/111) + * [BitBucket pull request 110](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/110) + * [BitBucket pull request 111](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/111) 1. Fix gcc7 compiler warnings on artful - * [Pull request 97](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/97) + * [BitBucket pull request 97](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/97) 1. Fix artful cppcheck - * [Pull request 99](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/99) + * [BitBucket pull request 99](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/99) 1. Fix nanosecond to second conversion - * [Pull request 100](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/100) + * [BitBucket pull request 100](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/100) diff --git a/README.md b/README.md index f8f784d65..b03bed164 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ **Maintainer:** nate AT openrobotics DOT org -[![Bitbucket open issues](https://img.shields.io/bitbucket/issues-raw/ignitionrobotics/ign-common.svg)](https://bitbucket.org/ignitionrobotics/ign-common/issues) -[![Bitbucket open pull requests](https://img.shields.io/bitbucket/pr-raw/ignitionrobotics/ign-common.svg)](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests) +[![GitHub open issues](https://img.shields.io/github/issues-raw/ignitionrobotics/ign-common.svg)](https://github.com/ignitionrobotics/ign-common/issues) +[![GitHub open pull requests](https://img.shields.io/github/issues-pr-raw/ignitionrobotics/ign-common.svg)](https://github.com/ignitionrobotics/ign-common/pulls) [![Discourse topics](https://img.shields.io/discourse/https/community.gazebosim.org/topics.svg)](https://community.gazebosim.org) [![Hex.pm](https://img.shields.io/hexpm/l/plug.svg)](https://www.apache.org/licenses/LICENSE-2.0) @@ -24,33 +24,33 @@ encoding/decoding to thread pools. # Table of Contents -[Features](#markdown-header-features) +[Features](#features) -[Install](#markdown-header-install) +[Install](#install) -* [Binary Install](#markdown-header-binary-install) +* [Binary Install](#binary-install) -* [Source Install](#markdown-header-source-install) +* [Source Install](#source-install) - * [Prerequisites](#markdown-header-prerequisites) + * [Prerequisites](#prerequisites) - * [Building from Source](#markdown-header-building-from-source) + * [Building from Source](#building-from-source) -[Usage](#markdown-header-usage) +[Usage](#usage) -[Documentation](#markdown-header-documentation) +[Documentation](#documentation) -[Testing](#markdown-header-testing) +[Testing](#testing) -[Folder Structure](#markdown-header-folder-structure) +[Folder Structure](#folder-structure) -[Code of Conduct](#markdown-header-code-of-conduct) +[Code of Conduct](#code-of-conduct) -[Contributing](#markdown-header-code-of-contributing) +[Contributing](#code-of-contributing) -[Versioning](#markdown-header-versioning) +[Versioning](#versioning) -[License](#markdown-header-license) +[License](#license) # Features @@ -68,9 +68,9 @@ callback system. # Install -We recommend following the [Binary Install](#markdown-header-binary-install) instructions to get up and running as quickly and painlessly as possible. +We recommend following the [Binary Install](#binary-install) instructions to get up and running as quickly and painlessly as possible. -The [Source Install](#markdown-header-source-install) instructions should be used if you need the very latest software improvements, you need to modify the code, or you plan to make a contribution. +The [Source Install](#source-install) instructions should be used if you need the very latest software improvements, you need to modify the code, or you plan to make a contribution. ## Binary Install @@ -113,10 +113,10 @@ The AV component requires: 1. Clone the repository ``` - hg clone https://bitbucket.org/ignitionrobotics/ign-common + git clone https://github.com/ignitionrobotics/ign-common ``` -2. Install the [Prerequisites](#markdown-header-prerequisites). +2. Install the [Prerequisites](#prerequisites). 3. Configure and build @@ -132,7 +132,7 @@ The AV component requires: # Usage -Please refer to the [examples directory](https://bitbucket.org/ignitionrobotics/ign-common/raw/default/examples/?at=default). +Please refer to the [examples directory](https://github.com/ignitionrobotics/ign-common/raw/master/examples/). # Documentation @@ -149,7 +149,7 @@ You can also generate the documentation from a clone of this repository by follo 2. Clone the repository ``` - hg clone https://bitbucket.org/ignitionrobotics/ign-common + git clone https://github.com/ignitionrobotics/ign-common ``` 3. Configure and build the documentation. @@ -168,7 +168,7 @@ You can also generate the documentation from a clone of this repository by follo Follow these steps to run tests and static code analysis in your clone of this repository. -1. Follow the [source install instruction](#markdown-header-source-install). +1. Follow the [source install instruction](#source-install). 2. Run tests. @@ -208,12 +208,12 @@ Refer to the following table for information about important directories and fil # Contributing Please see -[CONTRIBUTING.md](https://bitbucket.org/ignitionrobotics/ign-gazebo/src/406665896aa40bb42f14cf61d48b3d94f2fc5dd8/CONTRIBUTING.md?at=default&fileviewer=file-view-default). +[CONTRIBUTING.md](https://github.com/ignitionrobotics/ign-gazebo/blob/master/CONTRIBUTING.md). # Code of Conduct Please see -[CODE_OF_CONDUCT.md](https://bitbucket.org/ignitionrobotics/ign-gazebo/src/406665896aa40bb42f14cf61d48b3d94f2fc5dd8/CODE_OF_CONDUCT.md?at=default&fileviewer=file-view-default). +[CODE_OF_CONDUCT.md](https://github.com/ignitionrobotics/ign-gazebo/blob/master/CODE_OF_CONDUCT.md). # Versioning @@ -221,4 +221,4 @@ This library uses [Semantic Versioning](https://semver.org/). Additionally, this # License -This library is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). See also the [LICENSE](https://bitbucket.org/ignitionrobotics/ign-common/src/default/LICENSE) file. +This library is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). See also the [LICENSE](https://github.com/ignitionrobotics/ign-common/blob/master/LICENSE) file. diff --git a/bitbucket-pipelines.yml b/bitbucket-pipelines.yml index f597a097f..7359e19bd 100644 --- a/bitbucket-pipelines.yml +++ b/bitbucket-pipelines.yml @@ -12,7 +12,7 @@ pipelines: cmake pkg-config python ruby-ronn uuid-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libfreeimage-dev libgts-dev libswscale-dev libtinyxml2-dev - curl git mercurial cppcheck g++-8 + curl git cppcheck g++-8 - update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8 --slave /usr/bin/gcov gcov /usr/bin/gcov-8 - gcc -v - g++ -v @@ -34,7 +34,7 @@ pipelines: libignition-cmake2-dev libignition-math6-dev # Ignition cmake (uncomment to build from a specific branch) - # - hg clone http://bitbucket.org/ignitionrobotics/ign-cmake -b gz11 + # - git clone http://github.com/ignitionrobotics/ign-cmake -b gz11 # - cd ign-cmake # - mkdir build # - cd build @@ -42,7 +42,7 @@ pipelines: # - make -j4 install # - cd ../.. # Ignition math (uncomment to build from a specific branch) - # - hg clone http://bitbucket.org/ignitionrobotics/ign-math -b gz11 + # - git clone http://github.com/ignitionrobotics/ign-math -b gz11 # - cd ign-math # - mkdir build # - cd build diff --git a/graphics/src/CMakeLists.txt b/graphics/src/CMakeLists.txt index 618ecfc3f..000a0ce98 100644 --- a/graphics/src/CMakeLists.txt +++ b/graphics/src/CMakeLists.txt @@ -61,7 +61,7 @@ else() endif() # define of tinxml2 major version >= 6 -# https://bitbucket.org/ignitionrobotics/ign-common/issues/28 +# https://github.com/ignitionrobotics/ign-common/issues/28 if (NOT TINYXML2_VERSION VERSION_LESS "6.0.0") message(STATUS "TINYXML2_VERSION ${TINYXML2_VERSION} >= 6.0.0") target_compile_definitions(${graphics_target} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d79cfbe03..393e9328f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -58,7 +58,7 @@ if(WIN32) message(STATUS "You have opted to enable symlink tests on a Windows platform.") message(STATUS "The test UNIT_Filesystem_TEST will require elevated privileges") message(STATUS "in order to succeed. For more information, see the issue") - message(STATUS "https://bitbucket.org/ignitionrobotics/ign-common/issues/21") + message(STATUS "https://github.com/ignitionrobotics/ign-common/issues/21") message(STATUS "") target_compile_definitions(UNIT_Filesystem_TEST PRIVATE IGN_BUILD_SYMLINK_TESTS_ON_WINDOWS) endif() diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index ec608765c..031ef52c2 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -109,7 +109,7 @@ bool create_new_file_hardlink(const std::string &_hardlink, #ifdef IGN_BUILD_SYMLINK_TESTS_ON_WINDOWS // The symlink tests require special permissions to work on Windows, // so they will be disabled by default. For more information, see: -// https://bitbucket.org/ignitionrobotics/ign-common/issues/21 +// https://github.com/ignitionrobotics/ign-common/issues/21 #define BUILD_SYMLINK_TESTS #endif @@ -334,7 +334,7 @@ TEST_F(FilesystemTest, exists) // The symlink tests require special permissions to work on Windows, // so they will be disabled by default. For more information, see: -// https://bitbucket.org/ignitionrobotics/ign-common/issues/21 +// https://github.com/ignitionrobotics/ign-common/issues/21 #ifdef BUILD_SYMLINK_TESTS ///////////////////////////////////////////////// TEST_F(FilesystemTest, symlink_exists) diff --git a/tutorials/profiler.md b/tutorials/profiler.md index de269a6b9..eaf44d41f 100644 --- a/tutorials/profiler.md +++ b/tutorials/profiler.md @@ -21,7 +21,7 @@ In order to use the profiler, inspection points must be added to the source code and the application or library must be linked to the `ignition-common::profiler` component. -To start, download the [profiler.cc](https://bitbucket.org/ignitionrobotics/ign-common/raw/default/examples/profiler.cc) example. +To start, download the [profiler.cc](https://github.com/ignitionrobotics/ign-common/raw/master/examples/profiler.cc) example. The relevant corresponding C++ would be as follows: From 9c35741099081e0ea15f926bf19adc5c11bfbb97 Mon Sep 17 00:00:00 2001 From: chapulina Date: Mon, 4 May 2020 14:32:24 -0700 Subject: [PATCH 029/219] [master] Workflow updates (#64) Signed-off-by: Louise Poubel --- .github/CODEOWNERS | 5 +++++ .github/ci-bionic/after_make.sh | 13 +++++++++++++ .github/workflows/ci-bionic.yml | 18 ++++++++++++++++++ .github/workflows/pr-collection-labeler.yml | 13 +++++++++++++ .github/workflows/triage.yml | 19 +++++++++++++++++++ README.md | 8 ++++---- codecov.yml | 4 +--- 7 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 .github/CODEOWNERS create mode 100644 .github/ci-bionic/after_make.sh create mode 100644 .github/workflows/ci-bionic.yml create mode 100644 .github/workflows/pr-collection-labeler.yml create mode 100644 .github/workflows/triage.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..817a0d8bc --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,5 @@ +# More info: +# https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners + +* @mjcarroll +tutorials/* @maryaB-osr diff --git a/.github/ci-bionic/after_make.sh b/.github/ci-bionic/after_make.sh new file mode 100644 index 000000000..5ea56eb87 --- /dev/null +++ b/.github/ci-bionic/after_make.sh @@ -0,0 +1,13 @@ +#!/bin/sh -l + +set -x + +# Install +make install + +# Compile examples +cd ../examples +mkdir build +cd build +cmake .. +make diff --git a/.github/workflows/ci-bionic.yml b/.github/workflows/ci-bionic.yml new file mode 100644 index 000000000..f17d9b5fc --- /dev/null +++ b/.github/workflows/ci-bionic.yml @@ -0,0 +1,18 @@ +name: Ubuntu Bionic CI + +on: [push, pull_request] + +jobs: + bionic-ci: + runs-on: ubuntu-latest + name: Ubuntu Bionic CI + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Bionic CI + id: ci + uses: ignition-tooling/ubuntu-bionic-ci-action@master + with: + apt-dependencies: 'pkg-config ruby-ronn uuid-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libfreeimage-dev libgts-dev libswscale-dev libtinyxml2-dev libignition-cmake2-dev libignition-math6-dev' + codecov-token: ${{ secrets.CODECOV_TOKEN }} + script-after-make: ../.github/ci-bionic/after_make.sh diff --git a/.github/workflows/pr-collection-labeler.yml b/.github/workflows/pr-collection-labeler.yml new file mode 100644 index 000000000..99e9730bc --- /dev/null +++ b/.github/workflows/pr-collection-labeler.yml @@ -0,0 +1,13 @@ +name: PR Collection Labeler + +on: pull_request + +jobs: + pr_collection_labeler: + runs-on: ubuntu-latest + steps: + - name: Add collection labels + if: github.event.action == 'opened' + uses: ignition-tooling/pr-collection-labeler@v1 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml new file mode 100644 index 000000000..69c16ac81 --- /dev/null +++ b/.github/workflows/triage.yml @@ -0,0 +1,19 @@ +on: + issues: + types: [opened] + pull_request: + types: [opened] +name: Ticket opened +jobs: + assign: + name: Add ticket to inbox + runs-on: ubuntu-latest + steps: + - name: Add ticket to inbox + uses: technote-space/create-project-card-action@v1 + with: + PROJECT: Core development + COLUMN: Inbox + GITHUB_TOKEN: ${{ secrets.TRIAGE_TOKEN }} + CHECK_ORG_PROJECT: true + diff --git a/README.md b/README.md index b03bed164..a6e61e39e 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,10 @@ Build | Status -- | -- -Test coverage | [![codecov](https://codecov.io/bb/ignitionrobotics/ign-common/branch/default/graph/badge.svg)](https://codecov.io/bb/ignitionrobotics/ign-common) -Ubuntu Bionic | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-default-bionic-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-default-bionic-amd64) -Homebrew | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-default-homebrew-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-default-homebrew-amd64) -Windows | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-default-windows7-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-default-windows7-amd64) +Test coverage | [![codecov](https://codecov.io/gh/ignitionrobotics/ign-common/branch/master/graph/badge.svg)](https://codecov.io/gh/ignitionrobotics/ign-common) +Ubuntu Bionic | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-master-bionic-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-master-bionic-amd64) +Homebrew | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-master-homebrew-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-master-homebrew-amd64) +Windows | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-master-windows7-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-master-windows7-amd64) Ignition Common, a component of [Ignition Robotics](https://ignitionrobotics.org), provides a set of libraries that diff --git a/codecov.yml b/codecov.yml index fb95e9e63..4e879bc74 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,5 +1,3 @@ -codecov: - branch: default ignore: - "profiler/src/Remotery/lib" - - "profiler/src/Remotery/vis" \ No newline at end of file + - "profiler/src/Remotery/vis" From 512f077c7970813ed37d55d5f83111765cba9d4e Mon Sep 17 00:00:00 2001 From: Marya Belanger Date: Fri, 21 Aug 2020 20:59:14 -0400 Subject: [PATCH 030/219] Update codeowners (#88) Signed-off-by: Louise Poubel --- .github/CODEOWNERS | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 817a0d8bc..c379a6ef4 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2,4 +2,3 @@ # https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners * @mjcarroll -tutorials/* @maryaB-osr From 526c2aceb847dcdbfc2d25fc72457caaece03d3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez=20Cordero?= Date: Fri, 18 Sep 2020 18:49:59 +0200 Subject: [PATCH 031/219] Deprecated common:Time (#90) Signed-off-by: ahcorde --- .github/ci-bionic/after_make.sh | 3 + CMakeLists.txt | 2 +- include/ignition/common/Time.hh | 14 +-- include/ignition/common/Timer.hh | 14 ++- include/ignition/common/WorkerPool.hh | 11 +- src/CMakeLists.txt | 5 + src/Time.cc | 160 +++++++++++++++++++++++++- src/Time_TEST.cc | 57 ++++++++- src/Timer.cc | 30 +++-- src/WorkerPool.cc | 13 ++- src/WorkerPool_TEST.cc | 9 +- 11 files changed, 283 insertions(+), 35 deletions(-) diff --git a/.github/ci-bionic/after_make.sh b/.github/ci-bionic/after_make.sh index 5ea56eb87..d1ec8cd7c 100644 --- a/.github/ci-bionic/after_make.sh +++ b/.github/ci-bionic/after_make.sh @@ -11,3 +11,6 @@ mkdir build cd build cmake .. make + +# return to the compilation place +cd ../../build diff --git a/CMakeLists.txt b/CMakeLists.txt index 62e222b6f..1c1ec8cb0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,7 @@ message(STATUS "\n\n-- ====== Finding Dependencies ======") #-------------------------------------- # Find ignition-math -ign_find_package(ignition-math6 REQUIRED_BY graphics events) +ign_find_package(ignition-math6 REQUIRED_BY graphics events VERSION 6.6) set(IGN_MATH_VER ${ignition-math6_VERSION_MAJOR}) #-------------------------------------- diff --git a/include/ignition/common/Time.hh b/include/ignition/common/Time.hh index 9c36f293d..0ea57300c 100644 --- a/include/ignition/common/Time.hh +++ b/include/ignition/common/Time.hh @@ -52,31 +52,31 @@ namespace ignition }; /// \brief Constructors - public: Time(); + public: IGN_DEPRECATED(4) Time(); /// \brief Copy constructor /// \param[in] time Time to copy - public: Time(const Time &_time); + public: IGN_DEPRECATED(4) Time(const Time &_time); /// \brief Constructor /// \param[in] _tv Time to initialize to - public: explicit Time(const struct timespec &_tv); + public: explicit IGN_DEPRECATED(4) Time(const struct timespec &_tv); /// \brief Constructor /// \param[in] _sec Seconds /// \param[in] _nsec Nanoseconds - public: Time(int32_t _sec, int32_t _nsec); + public: IGN_DEPRECATED(4) Time(int32_t _sec, int32_t _nsec); /// \brief Constuctor /// \param[in] _time Time in double format sec.nsec - public: explicit Time(double _time); + public: explicit IGN_DEPRECATED(4) Time(double _time); /// \brief Destructor public: virtual ~Time(); /// \brief Get the wall time /// \return the current time - public: static const Time &SystemTime(); + public: static const IGN_DEPRECATED(4) Time &SystemTime(); /// \brief Set to sec and nsec /// \param[in] _sec Seconds @@ -103,7 +103,7 @@ namespace ignition /// actual call to the system's sleep function. /// /// On Windows the return value is always common::Time::Zero. - public: static Time Sleep(const common::Time &_time); + public: static Time IGN_DEPRECATED(4) Sleep(const common::Time &_time); /// \brief Get the time as a string formatted as "DD hh:mm:ss.mmm", with /// the option to choose the start/end. diff --git a/include/ignition/common/Timer.hh b/include/ignition/common/Timer.hh index 6e10e66e6..706bcc6c2 100644 --- a/include/ignition/common/Timer.hh +++ b/include/ignition/common/Timer.hh @@ -46,21 +46,27 @@ namespace ignition /// \brief Get the elapsed time /// \return The time - public: Time Elapsed() const; + public: Time IGN_DEPRECATED(4) Elapsed() const; + + /// \brief Get the elapsed time + /// \return The elapsed time + public: std::chrono::duration ElapsedTime() const; /// \brief Stream operator friendly public: friend std::ostream &operator<<(std::ostream &out, const ignition::common::Timer &t) { - out << t.Elapsed(); + out << t.ElapsedTime().count(); return out; } + IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief The time of the last call to Start - private: Time start; + private: std::chrono::steady_clock::time_point start; /// \brief The time when Stop was called. - private: Time stop; + private: std::chrono::steady_clock::time_point stop; + IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING /// \brief True if the timer is running. private: bool running; diff --git a/include/ignition/common/WorkerPool.hh b/include/ignition/common/WorkerPool.hh index 64d5d14ac..94da2b5a7 100644 --- a/include/ignition/common/WorkerPool.hh +++ b/include/ignition/common/WorkerPool.hh @@ -59,7 +59,16 @@ namespace ignition /// \returns true if all work was finished /// \remarks The return value can be false even when waiting forever if // the WorkerPool is destructed before all work is completed - public: bool WaitForResults(const Time &_timeout = Time::Zero); + public: bool IGN_DEPRECATED(4) WaitForResults(const Time &_timeout); + + /// \brief Waits until all work is done and threads are idle + /// \param[in] _timeout How long to wait, default to forever + /// \returns true if all work was finished + /// \remarks The return value can be false even when waiting forever if + // the WorkerPool is destructed before all work is completed + public: bool WaitForResults( + const std::chrono::steady_clock::duration &_timeout = + std::chrono::steady_clock::duration::zero()); IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief private implementation pointer diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 393e9328f..a16191b38 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -12,6 +12,11 @@ ign_create_core_library( target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE ${DL_TARGET}) +# This is required by the WorkerPool::WaitForResults(const Time &_timeout) +# TODO(anyone): IGN_DEPRECATED(4). Remove this part when the method is removed +target_include_directories(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE + ${ignition-math${IGN_MATH_VER}_INCLUDE_DIRS}) + # Handle non-Windows configuration settings if(NOT WIN32) diff --git a/src/Time.cc b/src/Time.cc index 0c0f581d8..21636746c 100644 --- a/src/Time.cc +++ b/src/Time.cc @@ -59,10 +59,25 @@ using namespace ignition; using namespace common; +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif Time Time::wallTime; +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif struct timespec Time::clockResolution; +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif const Time Time::Zero = common::Time(0, 0); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + const int32_t Time::nsInSec = 1000000000L; const int32_t Time::nsInMs = 1000000; @@ -99,13 +114,19 @@ Time::Time(const Time &_time) : sec(_time.sec), nsec(_time.nsec) { } - +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif ///////////////////////////////////////////////// Time::Time(int32_t _sec, int32_t _nsec) : sec(_sec), nsec(_nsec) { this->Correct(); } +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif ///////////////////////////////////////////////// Time::Time(double _time) @@ -162,7 +183,14 @@ float Time::Float() const ///////////////////////////////////////////////// Time Time::Sleep(const common::Time &_time) { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif Time result; +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif if (_time >= clockResolution) { @@ -174,7 +202,14 @@ Time Time::Sleep(const common::Time &_time) if (interval.tv_sec < 0) { ignerr << "Cannot sleep for negative time[" << _time << "]\n"; - return result; +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + return result; +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } // This assert conforms to the manpage for nanosleep @@ -182,7 +217,14 @@ Time Time::Sleep(const common::Time &_time) { ignerr << "Nanoseconds of [" << interval.tv_nsec << "] must be in the range0 to 999999999.\n"; +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif return result; +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } #ifdef _WIN32 @@ -197,20 +239,41 @@ Time Time::Sleep(const common::Time &_time) if (timer == NULL) { ignerr << "Unable to create waitable timer. Sleep will be incorrect.\n"; +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif return result; +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } if (!SetWaitableTimer (timer, &sleepTime, 0, NULL, NULL, 0)) { ignerr << "Unable to use waitable timer. Sleep will be incorrect.\n"; +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif return result; +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } if (WaitForSingleObject (timer, INFINITE) != WAIT_OBJECT_0) { ignerr << "Unable to wait for a single object. Sleep will be incorrect.\n"; +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif return result; +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } result.sec = 0; @@ -241,7 +304,14 @@ Time Time::Sleep(const common::Time &_time) ignlog << "Sleep time is larger than clock resolution, skipping sleep\n"; } +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif return result; +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } ///////////////////////////////////////////////// @@ -256,10 +326,24 @@ Time &Time::operator=(const Time &_time) ///////////////////////////////////////////////// Time Time::operator+(const Time &_time) const { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif Time t(this->sec + _time.sec, this->nsec + _time.nsec); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif t.Correct(); +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif return t; +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } ///////////////////////////////////////////////// @@ -274,9 +358,16 @@ const Time &Time::operator+=(const Time &_time) ///////////////////////////////////////////////// Time Time::operator-(const Time &_time) const { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif Time t(this->sec - _time.sec, this->nsec - _time.nsec); t.Correct(); return t; +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } ///////////////////////////////////////////////// @@ -291,9 +382,16 @@ const Time &Time::operator-=(const Time &_time) ///////////////////////////////////////////////// Time Time::operator*(const Time &_time) const { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif Time t(this->sec * _time.sec, this->nsec * _time.nsec); t.Correct(); return t; +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } ///////////////////////////////////////////////// @@ -307,14 +405,26 @@ const Time &Time::operator*=(const Time &_time) ///////////////////////////////////////////////// Time Time::operator/(const Time &_time) const { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif Time result(*this); - +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif if (_time.sec == 0 && _time.nsec == 0) ignerr << "Time divide by zero\n"; else result.Set(this->Double() / _time.Double()); - +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif return result; +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } ///////////////////////////////////////////////// @@ -333,7 +443,14 @@ bool Time::operator==(const Time &_time) const ///////////////////////////////////////////////// bool Time::operator==(double _time) const { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif return *this == Time(_time); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } ///////////////////////////////////////////////// @@ -358,7 +475,14 @@ bool Time::operator<(const Time &_time) const ///////////////////////////////////////////////// bool Time::operator<(double _time) const { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif return *this < Time(_time); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } ///////////////////////////////////////////////// @@ -370,7 +494,14 @@ bool Time::operator<=(const Time &_time) const ///////////////////////////////////////////////// bool Time::operator<=(double _time) const { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif return *this <= Time(_time); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } ///////////////////////////////////////////////// @@ -382,7 +513,14 @@ bool Time::operator>(const Time &_time) const ///////////////////////////////////////////////// bool Time::operator>(double _time) const { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif return *this > Time(_time); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } ///////////////////////////////////////////////// @@ -394,13 +532,27 @@ bool Time::operator>=(const Time &_time) const ///////////////////////////////////////////////// bool Time::operator>=(double _time) const { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif return *this >= Time(_time); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } ///////////////////////////////////////////////// bool Time::operator>=(const struct timespec &_tv) const { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif return *this >= Time(_tv); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } ///////////////////////////////////////////////// diff --git a/src/Time_TEST.cc b/src/Time_TEST.cc index 98e896400..aa7ca404c 100644 --- a/src/Time_TEST.cc +++ b/src/Time_TEST.cc @@ -28,8 +28,12 @@ TEST(TimeTest, Time) common::Timer timer; timer.Start(); IGN_SLEEP_MS(100); - EXPECT_TRUE(timer.Elapsed() > common::Time(0, 100000000)); + EXPECT_TRUE(timer.ElapsedTime().count() > 0.1); +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif common::Time time; time = common::Time::SystemTime(); EXPECT_TRUE(common::Time::SystemTime() - time < common::Time(0, 1000000)); @@ -58,6 +62,9 @@ TEST(TimeTest, Time) EXPECT_FALSE(time != common::Time(1, 1999)); time += common::Time(0, 1); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif EXPECT_EQ(time, 1.0 + 2000*1e-9); EXPECT_FALSE(time != 1.0 + 2000*1e-9); @@ -66,12 +73,26 @@ TEST(TimeTest, Time) EXPECT_TRUE(time >= 0.1); time.Set(1, 1000); +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif time = common::Time(1, 1000) * common::Time(2, 2); EXPECT_TRUE(time == common::Time(2, 2000)); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif time.Set(1, 1000); +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif time = common::Time(1, 1000) / common::Time(2, 2); EXPECT_TRUE(time == common::Time(0, 500000499)); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif double sec = 1.0 + 1e-9; double msec = sec * 1e3; @@ -86,6 +107,10 @@ TEST(TimeTest, Time) ///////////////////////////////////////////////// TEST(TimeTest, String) { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif common::Time time(0); // Several combinations @@ -173,16 +198,29 @@ TEST(TimeTest, String) EXPECT_EQ(time.FormattedString(common::Time::FormatOption::MINUTES, common::Time::FormatOption::MINUTES), "4320"); - +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif // Large time time = common::Time(1234567890, 123456789); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif EXPECT_EQ(time.FormattedString(), "14288 23:31:30.123"); } ///////////////////////////////////////////////// TEST(TimeTest, Double) { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif common::Time time(1, 900000000); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif EXPECT_DOUBLE_EQ(1.9, time.Double()); time.Set(1, -900000000); @@ -198,7 +236,14 @@ TEST(TimeTest, Double) ///////////////////////////////////////////////// TEST(TimeTest, Float) { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif common::Time time(1, 900000000); +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif EXPECT_FLOAT_EQ(1.9f, time.Float()); time.Set(1, -900000000); @@ -214,6 +259,10 @@ TEST(TimeTest, Float) ///////////////////////////////////////////////// TEST(TimeTest, Sleep) { +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif common::Time sleepTime(1, 900000000); common::Time result = common::Time::Sleep(sleepTime); #ifdef _WIN32 @@ -222,6 +271,10 @@ TEST(TimeTest, Sleep) #else EXPECT_EQ(sleepTime, result); #endif + +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif } ///////////////////////////////////////////////// diff --git a/src/Timer.cc b/src/Timer.cc index ae6b8c05d..0a8bb5f2a 100644 --- a/src/Timer.cc +++ b/src/Timer.cc @@ -34,14 +34,14 @@ Timer::~Timer() ////////////////////////////////////////////////// void Timer::Start() { - this->start = Time::SystemTime(); + this->start = std::chrono::steady_clock::now(); this->running = true; } ////////////////////////////////////////////////// void Timer::Stop() { - this->stop = Time::SystemTime(); + this->stop = std::chrono::steady_clock::now(); this->running = false; } @@ -51,16 +51,32 @@ bool Timer::Running() const return this->running; } +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif ////////////////////////////////////////////////// Time Timer::Elapsed() const +{ + return common::Time(this->ElapsedTime().count()); +} +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +////////////////////////////////////////////////// +std::chrono::duration Timer::ElapsedTime() const { if (this->running) { - Time currentTime; - currentTime = Time::SystemTime(); - - return currentTime - this->start; + std::chrono::steady_clock::time_point currentTime; + currentTime = std::chrono::steady_clock::now(); + std::chrono::duration diff = currentTime - this->start; + return diff; } else - return this->stop - this->start; + { + std::chrono::duration diff = this->stop - this->start; + return diff; + } } diff --git a/src/WorkerPool.cc b/src/WorkerPool.cc index ccfbea2b3..8390faa92 100644 --- a/src/WorkerPool.cc +++ b/src/WorkerPool.cc @@ -21,6 +21,7 @@ #include #include "ignition/common/WorkerPool.hh" +#include "ignition/math/Helpers.hh" namespace igncmn = ignition::common; using namespace igncmn; @@ -165,6 +166,13 @@ void WorkerPool::AddWork(std::function _work, std::function _cb) ////////////////////////////////////////////////// bool WorkerPool::WaitForResults(const Time &_timeout) +{ + return WaitForResults(math::secNsecToDuration(_timeout.sec, _timeout.nsec)); +} + +////////////////////////////////////////////////// +bool WorkerPool::WaitForResults( + const std::chrono::steady_clock::duration &_timeout) { bool signaled = true; std::unique_lock queueLock(this->dataPtr->queueMtx); @@ -178,7 +186,7 @@ bool WorkerPool::WaitForResults(const Time &_timeout) if (!haveResults()) { - if (Time::Zero == _timeout) + if (std::chrono::steady_clock::duration::zero() == _timeout) { // Wait forever this->dataPtr->signalWorkDone.wait(queueLock); @@ -187,8 +195,7 @@ bool WorkerPool::WaitForResults(const Time &_timeout) { // Wait for timeout signaled = this->dataPtr->signalWorkDone.wait_for(queueLock, - std::chrono::seconds(_timeout.sec) + - std::chrono::nanoseconds(_timeout.nsec), + _timeout, haveResults); } } diff --git a/src/WorkerPool_TEST.cc b/src/WorkerPool_TEST.cc index 19d4dc43a..015e686f2 100644 --- a/src/WorkerPool_TEST.cc +++ b/src/WorkerPool_TEST.cc @@ -92,8 +92,7 @@ TEST(WorkerPool, WaitWithTimeout) { workSentinel = 5; }); - Time time(5); - EXPECT_TRUE(pool.WaitForResults(time)); + EXPECT_TRUE(pool.WaitForResults(std::chrono::seconds(5))); EXPECT_EQ(5, workSentinel); } @@ -105,8 +104,7 @@ TEST(WorkerPool, WaitWithTimeoutThatTimesOut) { std::this_thread::sleep_for(std::chrono::milliseconds(5)); }); - Time time(0.0001); - EXPECT_FALSE(pool.WaitForResults(time)); + EXPECT_FALSE(pool.WaitForResults(std::chrono::nanoseconds(100000))); } ////////////////////////////////////////////////// @@ -133,8 +131,7 @@ TEST(WorkerPool, ThingsRunInParallel) std::this_thread::sleep_for(std::chrono::milliseconds(5)); ++sentinel; }); - Time time(0.009); - bool result = pool.WaitForResults(time); + bool result = pool.WaitForResults(std::chrono::milliseconds(9)); #ifdef __linux__ // the timing test is flaky on windows and mac EXPECT_TRUE(result); From f20ac25015a29a6911cc4db9f83030964c3a2a7c Mon Sep 17 00:00:00 2001 From: Steve Peters Date: Wed, 22 Jan 2020 01:55:05 -0800 Subject: [PATCH 032/219] changelog Signed-off-by: Michael Carroll --- Changelog.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Changelog.md b/Changelog.md index 80d578638..e87d6e35f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -21,6 +21,9 @@ 1. ColladaLoader: load files with actors with multiple skeletons * [BitBucket pull request 215](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/215) +1. Compute volume of mesh shapes with `Mesh::Volume` and `SubMesh::Volume`. + * [Pull request 214](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/214) + 1. Port Skeleton fixes from gazebo. * [BitBucket pull request 209](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/209) From f92d59259676b2c35e7a63c3b51ab3fc58ad17d6 Mon Sep 17 00:00:00 2001 From: Luca Della Vedova Date: Wed, 22 Jan 2020 16:24:57 +0800 Subject: [PATCH 033/219] Merged in transparent_texture_common3 (pull request #221) Support for alpha based texture rendering Approved-by: Louise Poubel Approved-by: Ian Chen Signed-off-by: Michael Carroll --- Changelog.md | 3 ++ graphics/include/ignition/common/Material.hh | 21 +++++++++++- graphics/src/ColladaLoader.cc | 3 +- graphics/src/Material.cc | 36 ++++++++++++++++++++ graphics/src/Material_TEST.cc | 5 +++ 5 files changed, 65 insertions(+), 3 deletions(-) diff --git a/Changelog.md b/Changelog.md index e87d6e35f..9d5b73795 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,9 @@ ## Ignition Common 3.X.X +1. Add support for alpha based texture transparency. + * [Pull request 221](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/221) + 1. `tiny_obj_loader`: set better diffuse value when `map_kD` is present and `Kd` is not specified. * [BitBucket pull request 216](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/216) * [BitBucket pull request 217](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/217) diff --git a/graphics/include/ignition/common/Material.hh b/graphics/include/ignition/common/Material.hh index a39a8ecea..fc5115719 100644 --- a/graphics/include/ignition/common/Material.hh +++ b/graphics/include/ignition/common/Material.hh @@ -157,6 +157,25 @@ namespace ignition /// \return The transparency percentage public: double Transparency() const; + /// \brief Set the material to use the alpha channel from the textures + /// \param[in] _enabled Enable alpha channel based rendering + /// \param[in] _alpha Set the alpha threshold value + /// \param[in] _twoSided Enable two sided rendering + public: void SetAlphaFromTexture(bool _enabled, + double _alpha = 0.5, bool _twoSided = true); + + /// \brief Get the enable alpha from textures + /// \return The enable alpha value + public: bool TextureAlphaEnabled() const; + + /// \brief Get the alpha threshold + /// \return The alpha threshold value + public: double AlphaThreshold() const; + + /// \brief Get the enable two sided rendering + /// \return The enable two sided rendering value + public: bool TwoSidedEnabled() const; + /// \brief Set the shininess /// \param[in] _t The shininess value public: void SetShininess(double _t); @@ -165,7 +184,7 @@ namespace ignition /// \return The shininess value public: double Shininess() const; - /// \brief Set the blende factors. Will be interpreted as: + /// \brief Set the blend factors. Will be interpreted as: /// (texture * _srcFactor) + (scene_pixel * _dstFactor) /// \param[in] _srcFactor The source factor /// \param[in] _dstFactor The destination factor diff --git a/graphics/src/ColladaLoader.cc b/graphics/src/ColladaLoader.cc index 80fd3de32..bb3fdeb4b 100644 --- a/graphics/src/ColladaLoader.cc +++ b/graphics/src/ColladaLoader.cc @@ -2461,13 +2461,12 @@ void ColladaLoaderPrivate::LoadTransparent(tinyxml2::XMLElement *_elem, return; } - // TODO(anyone): Handle transparent textures // https://www.khronos.org/files/collada_spec_1_5.pdf // Determining Transparency (Opacity) section: // opaque modes: RGB_ZERO, RGB_ONE, A_ONE if (_elem->FirstChildElement("texture")) { - ignwarn << "texture based transparency not supported" << std::endl; + _mat->SetAlphaFromTexture(true); _mat->SetTransparency(0.0); } else if (_elem->FirstChildElement("color")) diff --git a/graphics/src/Material.cc b/graphics/src/Material.cc index 9e5355184..0cfbe1dc9 100644 --- a/graphics/src/Material.cc +++ b/graphics/src/Material.cc @@ -55,6 +55,15 @@ class ignition::common::MaterialPrivate /// \brief transparency value in the range 0 to 1 public: double transparency = 0.0; + // \brief Enable texture based alpha rendering + public: bool textureAlphaEnabled = false; + + // \brief Cutoff value for alpha, values below threshold will not be rendered + public: double alphaThreshold = 0.5; + + // \brief Enables two sided rendering + public: bool twoSidedEnabled = false; + /// \brief shininess value (0 to 1) public: double shininess = 0.0; @@ -213,6 +222,33 @@ double Material::Transparency() const return this->dataPtr->transparency; } +////////////////////////////////////////////////// +void Material::SetAlphaFromTexture(bool _enabled, double _alpha, + bool _twoSided) +{ + this->dataPtr->textureAlphaEnabled = _enabled; + this->dataPtr->alphaThreshold = _alpha; + this->dataPtr->twoSidedEnabled = _twoSided; +} + +////////////////////////////////////////////////// +bool Material::TextureAlphaEnabled() const +{ + return this->dataPtr->textureAlphaEnabled; +} + +////////////////////////////////////////////////// +double Material::AlphaThreshold() const +{ + return this->dataPtr->alphaThreshold; +} + +////////////////////////////////////////////////// +bool Material::TwoSidedEnabled() const +{ + return this->dataPtr->twoSidedEnabled; +} + ////////////////////////////////////////////////// void Material::SetShininess(double _s) { diff --git a/graphics/src/Material_TEST.cc b/graphics/src/Material_TEST.cc index b38d2a5c9..b6947a490 100644 --- a/graphics/src/Material_TEST.cc +++ b/graphics/src/Material_TEST.cc @@ -52,6 +52,11 @@ TEST_F(MaterialTest, Material) mat.SetTransparency(0.2); EXPECT_DOUBLE_EQ(0.2, mat.Transparency()); + mat.SetAlphaFromTexture(true, 0.3, false); + EXPECT_EQ(mat.TextureAlphaEnabled(), true); + EXPECT_DOUBLE_EQ(mat.AlphaThreshold(), 0.3); + EXPECT_EQ(mat.TwoSidedEnabled(), false); + mat.SetShininess(0.2); EXPECT_DOUBLE_EQ(0.2, mat.Shininess()); From e751b6dbfd60e05b1e7c30c3693b046b6359d6e9 Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Fri, 7 Feb 2020 12:27:54 -0800 Subject: [PATCH 034/219] prepare for 3.4.0 pre1 release Signed-off-by: Michael Carroll --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c1ec8cb0..48cf42cc4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ find_package(ignition-cmake2 REQUIRED) #============================================================================ # Configure the project #============================================================================ -ign_configure_project() +ign_configure_project(VERSION_SUFFIX pre1) #============================================================================ # Set project-specific options From ff3c4d390c12256c2e69be108dfd245642efb112 Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Wed, 12 Feb 2020 11:43:37 -0800 Subject: [PATCH 035/219] Merged in node_anim (pull request #223) Add function to get NodeAnimation Approved-by: Louise Poubel Approved-by: Steve Peters Signed-off-by: Michael Carroll --- Changelog.md | 3 +++ graphics/include/ignition/common/SkeletonAnimation.hh | 7 +++++++ graphics/src/ColladaLoader_TEST.cc | 6 ++++++ graphics/src/SkeletonAnimation.cc | 10 ++++++++++ 4 files changed, 26 insertions(+) diff --git a/Changelog.md b/Changelog.md index 9d5b73795..dd3c5be0f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,9 @@ ## Ignition Common 3.X.X +1. Add function to get NodeAnimation + * [Pull request 223](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/223) + 1. Add support for alpha based texture transparency. * [Pull request 221](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/221) diff --git a/graphics/include/ignition/common/SkeletonAnimation.hh b/graphics/include/ignition/common/SkeletonAnimation.hh index 2aa04510c..1a703679f 100644 --- a/graphics/include/ignition/common/SkeletonAnimation.hh +++ b/graphics/include/ignition/common/SkeletonAnimation.hh @@ -24,6 +24,7 @@ #include #include +#include #include namespace ignition @@ -58,6 +59,12 @@ namespace ignition /// \return the count public: unsigned int NodeCount() const; + /// \brief Returns the node animation for given node name + /// \param[in] _name Name of node + /// \return NodeAnimation object + public: NodeAnimation *NodeAnimationByName(const std::string &_name) + const; + /// \brief Looks for a node with a specific name in the animations /// \param[in] _node the name of the node /// \return true if the node exits diff --git a/graphics/src/ColladaLoader_TEST.cc b/graphics/src/ColladaLoader_TEST.cc index bda5abe34..af8f3b081 100644 --- a/graphics/src/ColladaLoader_TEST.cc +++ b/graphics/src/ColladaLoader_TEST.cc @@ -204,6 +204,9 @@ TEST_F(ColladaLoader, LoadBoxWithAnimationOutsideSkeleton) common::SkeletonAnimation *anim = skeleton->Animation(0); EXPECT_EQ(1u, anim->NodeCount()); EXPECT_TRUE(anim->HasNode("Armature")); + auto nodeAnimation = anim->NodeAnimationByName("Armature"); + EXPECT_NE(nullptr, nodeAnimation); + EXPECT_EQ("Armature", nodeAnimation->Name()); auto poseStart = anim->PoseAt(0.04166662); math::Matrix4d expectedTrans = math::Matrix4d( 1, 0, 0, 1, @@ -284,6 +287,9 @@ TEST_F(ColladaLoader, LoadBoxNestedAnimation) common::SkeletonAnimation *anim = skeleton->Animation(0); EXPECT_EQ(1u, anim->NodeCount()); EXPECT_TRUE(anim->HasNode("Bone")); + auto nodeAnimation = anim->NodeAnimationByName("Bone"); + EXPECT_NE(nullptr, nodeAnimation); + EXPECT_EQ("Bone", nodeAnimation->Name()); auto poseStart = anim->PoseAt(0); math::Matrix4d expectedTrans = math::Matrix4d( 1, 0, 0, 1, diff --git a/graphics/src/SkeletonAnimation.cc b/graphics/src/SkeletonAnimation.cc index 0a248af81..dc28110f4 100644 --- a/graphics/src/SkeletonAnimation.cc +++ b/graphics/src/SkeletonAnimation.cc @@ -68,6 +68,16 @@ unsigned int SkeletonAnimation::NodeCount() const return this->data->animations.size(); } +////////////////////////////////////////////////// +NodeAnimation *SkeletonAnimation::NodeAnimationByName( + const std::string &_node) const +{ + auto it = this->data->animations.find(_node); + if (it != this->data->animations.end()) + return it->second; + return nullptr; +} + ////////////////////////////////////////////////// bool SkeletonAnimation::HasNode(const std::string &_node) const { From cdb135d2805f4bfb20ade907380bb78dedbb499e Mon Sep 17 00:00:00 2001 From: chapulina Date: Mon, 2 Dec 2019 12:57:52 -0800 Subject: [PATCH 036/219] Merged in findFileCb (pull request #226) Support custom callbacks to find files on global interface Approved-by: Ian Chen Approved-by: Nate Koenig Signed-off-by: Michael Carroll --- Changelog.md | 3 +++ include/ignition/common/Util.hh | 12 ++++++++++++ src/SystemPaths.cc | 16 ++++++++++++++++ src/SystemPaths_TEST.cc | 26 +++++++++++++++++++++++++- src/Util.cc | 7 +++++++ src/Util_TEST.cc | 33 +++++++++++++++++++++++++++++++++ 6 files changed, 96 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index dd3c5be0f..947708848 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,9 @@ ## Ignition Common 3.X.X +1. Custom paths for file URIs (env var + URI) + * [Pull request 210](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/210) + 1. Add function to get NodeAnimation * [Pull request 223](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/223) diff --git a/include/ignition/common/Util.hh b/include/ignition/common/Util.hh index 347de6eb3..0f4ebef9c 100644 --- a/include/ignition/common/Util.hh +++ b/include/ignition/common/Util.hh @@ -25,6 +25,7 @@ #include #include #include +#include ///////////////////////////////////////////////// // Defines @@ -148,6 +149,17 @@ namespace ignition /// \return The path containing the file. std::string IGNITION_COMMON_VISIBLE findFilePath(const std::string &_file); + /// \brief Add a callback to use when findFile() can't find a file that is + /// a valid URI. + /// The callback should return a full local path to the requested file, or + /// and empty string if the file was not found in the callback. + /// Callbacks will be called in the order they were added until a path is + /// found. + /// \param[in] _cb The callback function, which takes a file path or URI + /// and returns the full local path. + void IGNITION_COMMON_VISIBLE addFindFileURICallback( + std::function _cb); + /// \brief Compute the SHA1 hash of an array of bytes. /// \param[in] _buffer Input sequence. The permitted data types for this /// function are std::string and any STL container. diff --git a/src/SystemPaths.cc b/src/SystemPaths.cc index f7f47c4e7..a41a5a330 100644 --- a/src/SystemPaths.cc +++ b/src/SystemPaths.cc @@ -328,6 +328,22 @@ std::string SystemPaths::FindFileURI(const ignition::common::URI &_uri) const filename = this->dataPtr->findFileURICB(_uri.Str()); } + // Look in custom paths. + // Tries the suffix against all paths, regardless of the scheme + if (filename.empty()) + { + for (const std::string &filePath : this->dataPtr->filePaths) + { + auto withSuffix = filePath + suffix; + if (exists(withSuffix)) + { + filename = withSuffix; + ignition::common::replaceAll(filename, filename, "//", "/"); + break; + } + } + } + // If still not found, try custom callbacks if (filename.empty()) { diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index 88c42549a..ce452aa21 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -34,6 +34,7 @@ using namespace ignition; class SystemPathsFixture : public ::testing::Test { + // Documentation inherited public: virtual void SetUp() { this->backupPluginPath = "IGN_PLUGIN_PATH="; @@ -57,14 +58,20 @@ class SystemPathsFixture : public ::testing::Test #endif } + // Documentation inherited public: virtual void TearDown() { putenv(const_cast(this->backupPluginPath.c_str())); putenv(const_cast(this->backupFilePath.c_str())); } + /// \brief Backup of plugin paths to be restored after the test public: std::string backupPluginPath; + + /// \brief Backup of file paths to be restored after the test public: std::string backupFilePath; + + /// \brief Root of filesystem according to each platform public: std::string filesystemRoot; }; @@ -135,6 +142,7 @@ TEST_F(SystemPathsFixture, FileSystemPaths) putenv(env); paths.SetFilePathEnv("IGN_FILE_PATH"); EXPECT_EQ(file1, paths.FindFile("test_f1")) << paths.FindFile("test_f1"); + EXPECT_EQ(file1, paths.FindFile("model://test_f1")); } ///////////////////////////////////////////////// @@ -273,7 +281,23 @@ TEST_F(SystemPathsFixture, FindFileURI) // second handler for the same protocol is available sp.AddFindFileURICallback(robot2Cb); EXPECT_EQ(file1, sp.FindFileURI("robot://test_f1")); - EXPECT_EQ(file2, sp.FindFileURI("osrf:test_f2")); + EXPECT_EQ(file2, sp.FindFileURI("osrf://test_f2")); + + // URI + env var + static char env[1024]; + snprintf(env, sizeof(env), "%s", ("IGN_FILE_PATH=" + dir1).c_str()); + putenv(env); + + sp.SetFilePathEnv("IGN_FILE_PATH"); + EXPECT_EQ(file1, sp.FindFileURI("anything://test_f1")); + EXPECT_NE(file2, sp.FindFileURI("anything://test_f2")); + + snprintf(env, sizeof(env), "%s", ("IGN_FILE_PATH=" + dir2).c_str()); + putenv(env); + + sp.SetFilePathEnv("IGN_FILE_PATH"); + EXPECT_NE(file1, sp.FindFileURI("anything://test_f1")); + EXPECT_EQ(file2, sp.FindFileURI("anything://test_f2")); } ////////////////////////////////////////////////// diff --git a/src/Util.cc b/src/Util.cc index 775dcdbdf..67771781a 100644 --- a/src/Util.cc +++ b/src/Util.cc @@ -309,6 +309,13 @@ std::string ignition::common::findFilePath(const std::string &_file) } } +///////////////////////////////////////////////// +void ignition::common::addFindFileURICallback( + std::function _cb) +{ + gSystemPaths->AddFindFileURICallback(_cb); +} + ///////////////////////////////////////////////// bool ignition::common::env(const std::string &_name, std::string &_value) { diff --git a/src/Util_TEST.cc b/src/Util_TEST.cc index 4ca92826e..18b260663 100644 --- a/src/Util_TEST.cc +++ b/src/Util_TEST.cc @@ -172,6 +172,39 @@ TEST(Util_TEST, emptyENV) EXPECT_TRUE(var.empty()); } +///////////////////////////////////////////////// +TEST(Util_TEST, findFile) +{ + EXPECT_EQ("", ignition::common::findFile("no_such_file")); + + // Create file to find + auto dir1 = ignition::common::absPath("test_dir1"); + ignition::common::createDirectories(dir1); + auto file1 = ignition::common::absPath( + ignition::common::joinPaths(dir1, "test_f1")); + + std::ofstream fout; + fout.open(file1, std::ofstream::out); + fout << "asdf"; + fout.close(); + + // Relative path + EXPECT_EQ(file1, ignition::common::findFile(common::joinPaths("test_dir1", + "test_f1"))); + + // Relative prefixed by file:// + EXPECT_EQ(file1, ignition::common::findFile("file://test_dir1/test_f1")); + + // Custom callback + auto fileCb = [](const ignition::common::URI &) + { + return "/tmp"; + }; + + ignition::common::addFindFileURICallback(fileCb); + EXPECT_EQ("/tmp", ignition::common::findFile("model://banana")); +} + ///////////////////////////////////////////////// int main(int argc, char **argv) { From adee179847a3e6cb42026e25bf8a98b8566ba0fc Mon Sep 17 00:00:00 2001 From: chapulina Date: Wed, 19 Feb 2020 12:21:41 -0800 Subject: [PATCH 037/219] Merged in custom_paths_uri (pull request #210) [Proposal] Custom paths for file URIs Approved-by: Nate Koenig Approved-by: Ian Chen Signed-off-by: Michael Carroll --- src/SystemPaths.cc | 11 +++++------ src/SystemPaths_TEST.cc | 4 ++-- src/Util_TEST.cc | 11 ++++++++--- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/SystemPaths.cc b/src/SystemPaths.cc index a41a5a330..5530b3b5e 100644 --- a/src/SystemPaths.cc +++ b/src/SystemPaths.cc @@ -334,11 +334,10 @@ std::string SystemPaths::FindFileURI(const ignition::common::URI &_uri) const { for (const std::string &filePath : this->dataPtr->filePaths) { - auto withSuffix = filePath + suffix; + auto withSuffix = NormalizeDirectoryPath(filePath) + suffix; if (exists(withSuffix)) { - filename = withSuffix; - ignition::common::replaceAll(filename, filename, "//", "/"); + filename = ignition::common::copyFromUnixPath(withSuffix); break; } } @@ -424,10 +423,10 @@ std::string SystemPaths::FindFile(const std::string &_filename, { for (const std::string &filePath : this->dataPtr->filePaths) { - if (exists(NormalizeDirectoryPath(filePath) + filename)) + auto withSuffix = NormalizeDirectoryPath(filePath) + filename; + if (exists(withSuffix)) { - path = NormalizeDirectoryPath(filePath) + filename; - ignition::common::replaceAll(path, path, "//", "/"); + path = ignition::common::copyFromUnixPath(withSuffix); break; } } diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index ce452aa21..8e3a0b651 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -126,8 +126,8 @@ TEST_F(SystemPathsFixture, FileSystemPaths) std::string dir1 = "test_dir1"; ignition::common::createDirectories(dir1); - std::string file1 = - ignition::common::SystemPaths::NormalizeDirectoryPath(dir1) + "test_f1"; + auto file1 = ignition::common::copyFromUnixPath( + ignition::common::joinPaths(dir1, "test_f1")); std::ofstream fout; fout.open(file1, std::ofstream::out); fout << "asdf"; diff --git a/src/Util_TEST.cc b/src/Util_TEST.cc index 18b260663..aea97c761 100644 --- a/src/Util_TEST.cc +++ b/src/Util_TEST.cc @@ -196,13 +196,18 @@ TEST(Util_TEST, findFile) EXPECT_EQ(file1, ignition::common::findFile("file://test_dir1/test_f1")); // Custom callback - auto fileCb = [](const ignition::common::URI &) +#ifndef _WIN32 + const auto tmpDir = "/tmp"; +#else + const auto tmpDir = "C:\\Windows"; +#endif + auto fileCb = [&tmpDir](const ignition::common::URI &) { - return "/tmp"; + return tmpDir; }; ignition::common::addFindFileURICallback(fileCb); - EXPECT_EQ("/tmp", ignition::common::findFile("model://banana")); + EXPECT_EQ(tmpDir, ignition::common::findFile("model://banana")); } ///////////////////////////////////////////////// From edb6d0faba56e46b4be747d661447054644ea60a Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Wed, 19 Feb 2020 18:11:07 -0800 Subject: [PATCH 038/219] Merged in pbr_common3 (pull request #227) Add PBR material class Signed-off-by: Michael Carroll --- Changelog.md | 3 + graphics/include/ignition/common/Material.hh | 9 + graphics/include/ignition/common/Pbr.hh | 226 ++++++++++++++ graphics/src/ColladaLoader.cc | 5 + graphics/src/Material.cc | 14 + graphics/src/Material_TEST.cc | 7 + graphics/src/OBJLoader.cc | 5 + graphics/src/Pbr.cc | 307 +++++++++++++++++++ graphics/src/Pbr_TEST.cc | 235 ++++++++++++++ 9 files changed, 811 insertions(+) create mode 100644 graphics/include/ignition/common/Pbr.hh create mode 100644 graphics/src/Pbr.cc create mode 100644 graphics/src/Pbr_TEST.cc diff --git a/Changelog.md b/Changelog.md index 947708848..06640d7c6 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,9 @@ ## Ignition Common 3.X.X +1. Add PBR material class + * [Pull request 227](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/227) + 1. Custom paths for file URIs (env var + URI) * [Pull request 210](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/210) diff --git a/graphics/include/ignition/common/Material.hh b/graphics/include/ignition/common/Material.hh index fc5115719..387da5112 100644 --- a/graphics/include/ignition/common/Material.hh +++ b/graphics/include/ignition/common/Material.hh @@ -24,6 +24,7 @@ #include #include #include +#include #include namespace ignition @@ -241,6 +242,14 @@ namespace ignition /// \return the lighting enabled state public: bool Lighting() const; + /// \brief Set the Physically Based Rendering (PBR) material + /// \return The PBR material to set to. + public: void SetPbrMaterial(const Pbr &_pbr); + + /// \brief Get the Physically Based Rendering (PBR) material + /// \return Pointer to the PBR material. Null if it does not exist. + public: Pbr *PbrMaterial() const; + /// \brief Stream insertion operator /// param[in] _out the output stream to extract from /// param[out] _m the material information diff --git a/graphics/include/ignition/common/Pbr.hh b/graphics/include/ignition/common/Pbr.hh new file mode 100644 index 000000000..cd84c8573 --- /dev/null +++ b/graphics/include/ignition/common/Pbr.hh @@ -0,0 +1,226 @@ +/* + * Copyright 2020 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#ifndef IGNITION_COMMON_PBR_HH_ +#define IGNITION_COMMON_PBR_HH_ + +#include +#include + +namespace ignition +{ +namespace common +{ + // Forward declarations. + class PbrPrivate; + + /// \brief Type of PBR workflow. + enum class PbrType : int + { + /// \brief No workflow + NONE = 0, + + /// \brief Metal/Roughness workflow + METAL = 1, + + /// \brief Specular/Glossiness workflow + SPECULAR = 2, + }; + + /// \brief Space the normal map is defined in + enum class NormalMapSpace: int + { + /// \brief Tangent space + TANGENT = 0, + + /// \brief Object space + OBJECT = 1, + }; + + /// \brief This class contains Physically-Based-Rendering (PBR) workflow + /// properties. + class IGNITION_COMMON_GRAPHICS_VISIBLE Pbr + { + /// \brief Default constructor + public: Pbr(); + + /// \brief Copy constructor + /// \param[in] _pbr Pbr to copy. + public: Pbr(const Pbr &_pbr); + + /// \brief Move constructor + /// \param[in] _pbr to move. + public: Pbr(Pbr &&_pbr) noexcept; + + /// \brief Destructor + public: ~Pbr(); + + /// \brief Assignment operator. + /// \param[in] _pbr The pbr material to set values from. + /// \return *this + public: Pbr &operator=(const Pbr &_pbr); + + /// \brief Move assignment operator. + /// \param[in] _pbr The pbr material to move from. + /// \return *this + public: Pbr &operator=(Pbr &&_pbr); + + /// \brief Return true if both Pbr objects contain the same values. + /// \param[_in] _pbr Pbr value to compare. + /// \returen True if 'this' == _pbr. + public: bool operator==(const Pbr &_pbr) const; + + /// \brief Return true this Pbr object does not contain the same + /// values as the passed in parameter. + /// \param[_in] _pbr Pbr value to compare. + /// \returen True if 'this' != _pbr. + public: bool operator!=(const Pbr &_pbr) const; + + /// \brief Get the albedo map filename. This will be an empty string if + /// an albedo map has not been set. + /// \return Filename of the albedo map, or empty string if an albedo map + /// has not been specified. + public: std::string AlbedoMap() const; + + /// \brief Set the albedo map filename. + /// \param[in] _map Filename of the albedo map. + public: void SetAlbedoMap(const std::string &_map); + + /// \brief Get the normal map filename. This will be an empty string if + /// a normal map has not been set. + /// \return Filename of the normal map, or empty string if a normal map + /// has not been specified. + public: std::string NormalMap() const; + + /// \brief Set the normal map filename. + /// \param[in] _map Filename of the normal map. + /// \param[in] _space Space that the normal map is defined in. + /// Defaults to tangent space. + public: void SetNormalMap(const std::string &_map, + NormalMapSpace _space = NormalMapSpace::TANGENT); + + /// \brief Get the normal map type, either tangent or object space + /// \return Space that the normal map is defined in + public: NormalMapSpace NormalMapType() const; + + /// \brief Get the environment map filename. This will be an empty string + /// if an environment map has not been set. + /// \return Filename of the environment map, or empty string if an + /// environment map has not been specified. + public: std::string EnvironmentMap() const; + + /// \brief Set the environment map filename. + /// \param[in] _map Filename of the environment map. + public: void SetEnvironmentMap(const std::string &_map); + + /// \brief Get the ambient occlusion map filename. This will be an empty + /// string if an ambient occlusion map has not been set. + /// \return Filename of the ambient occlusion map, or empty string if an + /// ambient occlusion map has not been specified. + public: std::string AmbientOcclusionMap() const; + + /// \brief Set the ambient occlusion map filename. + /// \param[in] _map Filename of the ambient occlusion map. + public: void SetAmbientOcclusionMap(const std::string &_map); + + /// \brief Get the roughness map filename for metal workflow. This will be + /// an empty string if a roughness map has not been set. + /// \return Filename of the roughness map, or empty string if a roughness + /// map has not been specified. + public: std::string RoughnessMap() const; + + /// \brief Set the roughness map filename for metal workflow. + /// \param[in] _map Filename of the roughness map. + public: void SetRoughnessMap(const std::string &_map); + + /// \brief Get the metalness map filename for metal workflow. This will be + /// an empty string if a metalness map has not been set. + /// \return Filename of the metalness map, or empty string if a metalness + /// map has not been specified. + public: std::string MetalnessMap() const; + + /// \brief Set the metalness map filename for metal workflow. + /// \param[in] _map Filename of the metalness map. + public: void SetMetalnessMap(const std::string &_map); + + /// \brief Get the emissive map filename. This will be an empty string + /// if an emissive map has not been set. + /// \return Filename of the emissive map, or empty string if an emissive + /// map has not been specified. + public: std::string EmissiveMap() const; + + /// \brief Set the emissive map filename. + /// \param[in] _map Filename of the emissive map. + public: void SetEmissiveMap(const std::string &_map); + + /// \brief Get the metalness value of the material for metal workflow + /// \return metalness value of the material + public: double Metalness() const; + + /// \brief Set the metalness value of the material for metal workflow. + /// \param[in] _value Metalness value. + public: void SetMetalness(double _value); + + /// \brief Get the roughness value of the material for metal workflow + /// \return roughness value of the material + public: double Roughness() const; + + /// \brief Set the roughness value of the material for metal workflow. + /// \param[in] _value Roughness value. + public: void SetRoughness(double _value); + + /// \brief Get the glossiness map filename for specular workflow. This will + /// be an empty string if a glossiness map has not been set. + /// \return Filename of the glossiness map, or empty string if a glossiness + /// map has not been specified. + public: std::string GlossinessMap() const; + + /// \brief Set the glossiness map filename for specular workflow. + /// \param[in] _map Filename of the glossiness map. + public: void SetGlossinessMap(const std::string &_map); + + /// \brief Get the glossiness value of the material for specular workflow + /// \return Glossiness value of the material + public: double Glossiness() const; + + /// \brief Set the glossiness value of the material for specular workflow. + /// \param[in] _value Glossiness value. + public: void SetGlossiness(double _value); + + /// \brief Get the specular map filename for specular workflow. This will + /// be an empty string if a specular map has not been set. + /// \return Filename of the specular map, or empty string if a specular + /// map has not been specified. + public: std::string SpecularMap() const; + + /// \brief Set the specular map filename for specular workflow. + /// \param[in] _map Filename of the specular map. + public: void SetSpecularMap(const std::string &_map); + + /// \brief Get the workflow type. + /// \return PBR workflow type. + public: PbrType Type() const; + + /// \brief Set the PBR workflow to use + /// \param[in] _type Workflow type to use + public: void SetType(PbrType _type); + + /// \brief Private data pointer. + private: PbrPrivate *dataPtr = nullptr; + }; +} +} +#endif diff --git a/graphics/src/ColladaLoader.cc b/graphics/src/ColladaLoader.cc index bb3fdeb4b..7b9044e09 100644 --- a/graphics/src/ColladaLoader.cc +++ b/graphics/src/ColladaLoader.cc @@ -1707,6 +1707,11 @@ MaterialPtr ColladaLoaderPrivate::LoadMaterial(const std::string &_name) if (cgXml) ignerr << "profile_CG unsupported\n"; + // set default PBR material properties + common::Pbr pbr; + pbr.SetMetalness(0.0); + mat->SetPbrMaterial(pbr); + this->materialIds[_name] = mat; return mat; diff --git a/graphics/src/Material.cc b/graphics/src/Material.cc index 0cfbe1dc9..cc3a21c63 100644 --- a/graphics/src/Material.cc +++ b/graphics/src/Material.cc @@ -90,6 +90,9 @@ class ignition::common::MaterialPrivate /// \brief destination blend factor public: double dstBlendFactor; + + /// \brief Physically Based Rendering (PBR) properties + public: std::unique_ptr pbr; }; unsigned int MaterialPrivate::counter = 0; @@ -346,3 +349,14 @@ std::string Material::ShadeStr() const return shadeModeIface.Str(this->Shade()); } +////////////////////////////////////////////////// +void Material::SetPbrMaterial(const Pbr &_pbr) +{ + this->dataPtr->pbr = std::make_unique(_pbr); +} + +////////////////////////////////////////////////// +Pbr *Material::PbrMaterial() const +{ + return this->dataPtr->pbr.get(); +} diff --git a/graphics/src/Material_TEST.cc b/graphics/src/Material_TEST.cc index b6947a490..693e465a7 100644 --- a/graphics/src/Material_TEST.cc +++ b/graphics/src/Material_TEST.cc @@ -17,6 +17,7 @@ #include #include "ignition/common/Material.hh" +#include "ignition/common/Pbr.hh" #include "test/util.hh" using namespace ignition; @@ -80,6 +81,12 @@ TEST_F(MaterialTest, Material) mat.SetLighting(true); EXPECT_TRUE(mat.Lighting()); + + common::Pbr pbr; + EXPECT_EQ(nullptr, mat.PbrMaterial()); + mat.SetPbrMaterial(pbr); + EXPECT_NE(nullptr, mat.PbrMaterial()); + EXPECT_EQ(pbr, *mat.PbrMaterial()); } ///////////////////////////////////////////////// diff --git a/graphics/src/OBJLoader.cc b/graphics/src/OBJLoader.cc index df1c2a8da..87cdb124d 100644 --- a/graphics/src/OBJLoader.cc +++ b/graphics/src/OBJLoader.cc @@ -133,6 +133,11 @@ Mesh *OBJLoader::Load(const std::string &_filename) if (!m.diffuse_texname.empty()) mat->SetTextureImage(m.diffuse_texname, path.c_str()); materialIds[m.name] = mat; + + // set default PBR material properties + common::Pbr pbr; + pbr.SetMetalness(0.0); + mat->SetPbrMaterial(pbr); } int matIndex = mesh->IndexOfMaterial(mat); if (matIndex < 0) diff --git a/graphics/src/Pbr.cc b/graphics/src/Pbr.cc new file mode 100644 index 000000000..7e37233df --- /dev/null +++ b/graphics/src/Pbr.cc @@ -0,0 +1,307 @@ +/* + * Copyright 2020 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#include +#include +#include + +#include "ignition/common/Pbr.hh" + +/// \brief Private data for Pbr class +class ignition::common::PbrPrivate +{ + /// \brief Workflow type + public: PbrType type = PbrType::NONE; + + /// \brief Albedo map + public: std::string albedoMap = ""; + + /// \brief Normal map + public: std::string normalMap = ""; + + /// \brief Normal map space + public: NormalMapSpace normalMapSpace = NormalMapSpace::TANGENT; + + /// \brief Environment map + public: std::string environmentMap = ""; + + /// \brief Ambient occlusion map + public: std::string ambientOcclusionMap = ""; + + /// \brief Roughness map (metal workflow only) + public: std::string roughnessMap = ""; + + /// \brief Metalness map (metal workflow only) + public: std::string metalnessMap = ""; + + /// \brief Emissive map + public: std::string emissiveMap = ""; + + /// \brief Roughness value (metal workflow only) + public: double roughness = 0.5; + + /// \brief Metalness value (metal workflow only) + public: double metalness = 0.5; + + /// \brief Specular map (specular workflow only) + public: std::string specularMap = ""; + + /// \brief Glossiness map (specular workflow only) + public: std::string glossinessMap = ""; + + /// \brief Glossiness value (specular workflow only) + public: double glossiness = 0.0; +}; + + +using namespace ignition; +using namespace common; + +///////////////////////////////////////////////// +Pbr::Pbr() + : dataPtr(new PbrPrivate) +{ +} + +///////////////////////////////////////////////// +Pbr::~Pbr() +{ + delete this->dataPtr; + this->dataPtr = nullptr; +} + +////////////////////////////////////////////////// +Pbr::Pbr(const Pbr &_pbr) + : dataPtr(new PbrPrivate) +{ + *this->dataPtr = *_pbr.dataPtr; +} + +///////////////////////////////////////////////// +Pbr &Pbr::operator=(const Pbr &_pbr) +{ + if (!this->dataPtr) + { + this->dataPtr = new PbrPrivate; + } + *this->dataPtr = *_pbr.dataPtr; + return *this; +} + +///////////////////////////////////////////////// +Pbr &Pbr::operator=(Pbr &&_pbr) +{ + this->dataPtr = _pbr.dataPtr; + _pbr.dataPtr = nullptr; + return *this; +} + +////////////////////////////////////////////////// +bool Pbr::operator!=(const Pbr &_pbr) const +{ + return !(*this == _pbr); +} + +///////////////////////////////////////////////// +bool Pbr::operator==(const Pbr &_pbr) const +{ + return (this->dataPtr->albedoMap == _pbr.dataPtr->albedoMap) + && (this->dataPtr->normalMap == _pbr.dataPtr->normalMap) + && (this->dataPtr->metalnessMap == _pbr.dataPtr->metalnessMap) + && (this->dataPtr->roughnessMap == _pbr.dataPtr->roughnessMap) + && (this->dataPtr->glossinessMap == _pbr.dataPtr->glossinessMap) + && (this->dataPtr->environmentMap == _pbr.dataPtr->environmentMap) + && (this->dataPtr->emissiveMap == _pbr.dataPtr->emissiveMap) + && (this->dataPtr->ambientOcclusionMap == + _pbr.dataPtr->ambientOcclusionMap) + && (ignition::math::equal( + this->dataPtr->metalness, _pbr.dataPtr->metalness)) + && (ignition::math::equal( + this->dataPtr->roughness, _pbr.dataPtr->roughness)) + && (ignition::math::equal( + this->dataPtr->glossiness, _pbr.dataPtr->glossiness)); +} + +///////////////////////////////////////////////// +Pbr::Pbr(Pbr &&_pbr) noexcept +{ + this->dataPtr = _pbr.dataPtr; + _pbr.dataPtr = nullptr; +} + +////////////////////////////////////////////////// +std::string Pbr::AlbedoMap() const +{ + return this->dataPtr->albedoMap; +} + +////////////////////////////////////////////////// +void Pbr::SetAlbedoMap(const std::string &_map) +{ + this->dataPtr->albedoMap = _map; +} + +////////////////////////////////////////////////// +std::string Pbr::NormalMap() const +{ + return this->dataPtr->normalMap; +} + +////////////////////////////////////////////////// +NormalMapSpace Pbr::NormalMapType() const +{ + return this->dataPtr->normalMapSpace; +} + +////////////////////////////////////////////////// +void Pbr::SetNormalMap(const std::string &_map, NormalMapSpace _space) +{ + this->dataPtr->normalMap = _map; + this->dataPtr->normalMapSpace = _space; +} + +////////////////////////////////////////////////// +std::string Pbr::EnvironmentMap() const +{ + return this->dataPtr->environmentMap; +} + +////////////////////////////////////////////////// +void Pbr::SetEnvironmentMap(const std::string &_map) +{ + this->dataPtr->environmentMap = _map; +} + +////////////////////////////////////////////////// +std::string Pbr::AmbientOcclusionMap() const +{ + return this->dataPtr->ambientOcclusionMap; +} + +////////////////////////////////////////////////// +void Pbr::SetAmbientOcclusionMap(const std::string &_map) +{ + this->dataPtr->ambientOcclusionMap = _map; +} + +////////////////////////////////////////////////// +std::string Pbr::RoughnessMap() const +{ + return this->dataPtr->roughnessMap; +} + +////////////////////////////////////////////////// +void Pbr::SetRoughnessMap(const std::string &_map) +{ + this->dataPtr->roughnessMap = _map; +} + +////////////////////////////////////////////////// +std::string Pbr::MetalnessMap() const +{ + return this->dataPtr->metalnessMap; +} + +////////////////////////////////////////////////// +void Pbr::SetMetalnessMap(const std::string &_map) +{ + this->dataPtr->metalnessMap = _map; +} + +////////////////////////////////////////////////// +double Pbr::Metalness() const +{ + return this->dataPtr->metalness; +} + +////////////////////////////////////////////////// +void Pbr::SetMetalness(double _metalness) +{ + this->dataPtr->metalness = _metalness; +} + +////////////////////////////////////////////////// +double Pbr::Roughness() const +{ + return this->dataPtr->roughness; +} + +////////////////////////////////////////////////// +void Pbr::SetRoughness(double _roughness) +{ + this->dataPtr->roughness = _roughness; +} + +////////////////////////////////////////////////// +std::string Pbr::SpecularMap() const +{ + return this->dataPtr->specularMap; +} + +////////////////////////////////////////////////// +void Pbr::SetSpecularMap(const std::string &_map) +{ + this->dataPtr->specularMap = _map; +} + +////////////////////////////////////////////////// +std::string Pbr::GlossinessMap() const +{ + return this->dataPtr->glossinessMap; +} + +////////////////////////////////////////////////// +void Pbr::SetGlossinessMap(const std::string &_map) +{ + this->dataPtr->glossinessMap = _map; +} + +////////////////////////////////////////////////// +void Pbr::SetGlossiness(double _glossiness) +{ + this->dataPtr->glossiness = _glossiness; +} + +////////////////////////////////////////////////// +double Pbr::Glossiness() const +{ + return this->dataPtr->glossiness; +} + +////////////////////////////////////////////////// +std::string Pbr::EmissiveMap() const +{ + return this->dataPtr->emissiveMap; +} + +////////////////////////////////////////////////// +void Pbr::SetEmissiveMap(const std::string &_map) +{ + this->dataPtr->emissiveMap = _map; +} + +////////////////////////////////////////////////// +PbrType Pbr::Type() const +{ + return this->dataPtr->type; +} + +////////////////////////////////////////////////// +void Pbr::SetType(PbrType _type) +{ + this->dataPtr->type = _type; +} + diff --git a/graphics/src/Pbr_TEST.cc b/graphics/src/Pbr_TEST.cc new file mode 100644 index 000000000..5d11f05df --- /dev/null +++ b/graphics/src/Pbr_TEST.cc @@ -0,0 +1,235 @@ +/* + * Copyright (C) 2020 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ + +#include + +#include +#include "ignition/common/Pbr.hh" + +///////////////////////////////////////////////// +TEST(Pbr, BasicAPI) +{ + // initial state + ignition::common::Pbr pbr; + EXPECT_EQ(ignition::common::PbrType::NONE, pbr.Type()); + EXPECT_EQ(std::string(), pbr.AlbedoMap()); + EXPECT_EQ(std::string(), pbr.NormalMap()); + EXPECT_EQ(ignition::common::NormalMapSpace::TANGENT, pbr.NormalMapType()); + EXPECT_EQ(std::string(), pbr.RoughnessMap()); + EXPECT_EQ(std::string(), pbr.MetalnessMap()); + EXPECT_EQ(std::string(), pbr.EmissiveMap()); + EXPECT_DOUBLE_EQ(0.5, pbr.Roughness()); + EXPECT_DOUBLE_EQ(0.5, pbr.Metalness()); + EXPECT_EQ(std::string(), pbr.SpecularMap()); + EXPECT_EQ(std::string(), pbr.GlossinessMap()); + EXPECT_DOUBLE_EQ(0.0, pbr.Glossiness()); + EXPECT_EQ(std::string(), pbr.EnvironmentMap()); + EXPECT_EQ(std::string(), pbr.AmbientOcclusionMap()); + + // set / get + pbr.SetType(ignition::common::PbrType::METAL); + EXPECT_EQ(ignition::common::PbrType::METAL, pbr.Type()); + + pbr.SetAlbedoMap("metal_albedo_map.png"); + EXPECT_EQ("metal_albedo_map.png", pbr.AlbedoMap()); + + pbr.SetNormalMap("metal_normal_map.png"); + EXPECT_EQ("metal_normal_map.png", pbr.NormalMap()); + + pbr.SetEnvironmentMap("metal_env_map.png"); + EXPECT_EQ("metal_env_map.png", pbr.EnvironmentMap()); + + pbr.SetAmbientOcclusionMap("metal_ambient_occlusion_map.png"); + EXPECT_EQ("metal_ambient_occlusion_map.png", + pbr.AmbientOcclusionMap()); + + pbr.SetEmissiveMap("metal_emissive_map.png"); + EXPECT_EQ("metal_emissive_map.png", pbr.EmissiveMap()); + + pbr.SetRoughnessMap("roughness_map.png"); + EXPECT_EQ("roughness_map.png", pbr.RoughnessMap()); + + pbr.SetMetalnessMap("metalness_map.png"); + EXPECT_EQ("metalness_map.png", pbr.MetalnessMap()); + + pbr.SetRoughness(0.8); + EXPECT_DOUBLE_EQ(0.8, pbr.Roughness()); + + pbr.SetMetalness(0.3); + EXPECT_DOUBLE_EQ(0.3, pbr.Metalness()); + + EXPECT_EQ(std::string(), pbr.GlossinessMap()); + EXPECT_EQ(std::string(), pbr.SpecularMap()); + EXPECT_DOUBLE_EQ(0.0, pbr.Glossiness()); +} + +///////////////////////////////////////////////// +TEST(Pbr, MoveCopy) +{ + // copy constructor + { + ignition::common::Pbr pbr; + pbr.SetType(ignition::common::PbrType::SPECULAR); + pbr.SetAlbedoMap("specular_albedo_map.png"); + pbr.SetNormalMap("specular_normal_map.png"); + pbr.SetEnvironmentMap("specular_env_map.png"); + pbr.SetAmbientOcclusionMap("specular_ambient_occlusion_map.png"); + pbr.SetEmissiveMap("specular_emissive_map.png"); + pbr.SetGlossinessMap("glossiness_map.png"); + pbr.SetSpecularMap("specular_map.png"); + pbr.SetGlossiness(0.1); + + ignition::common::Pbr pbr2(pbr); + EXPECT_EQ(ignition::common::PbrType::SPECULAR, pbr2.Type()); + EXPECT_EQ("specular_albedo_map.png", pbr2.AlbedoMap()); + EXPECT_EQ("specular_normal_map.png", pbr2.NormalMap()); + EXPECT_EQ(ignition::common::NormalMapSpace::TANGENT, pbr2.NormalMapType()); + EXPECT_EQ("specular_env_map.png", pbr2.EnvironmentMap()); + EXPECT_EQ("specular_ambient_occlusion_map.png", + pbr2.AmbientOcclusionMap()); + EXPECT_EQ("specular_emissive_map.png", pbr2.EmissiveMap()); + EXPECT_EQ("specular_map.png", pbr2.SpecularMap()); + EXPECT_EQ("glossiness_map.png", pbr2.GlossinessMap()); + EXPECT_DOUBLE_EQ(0.1, pbr2.Glossiness()); + + EXPECT_EQ(std::string(), pbr2.RoughnessMap()); + EXPECT_EQ(std::string(), pbr2.MetalnessMap()); + EXPECT_DOUBLE_EQ(0.5, pbr2.Roughness()); + EXPECT_DOUBLE_EQ(0.5, pbr2.Metalness()); + } + + // move + { + ignition::common::Pbr pbr; + pbr.SetType(ignition::common::PbrType::METAL); + pbr.SetAlbedoMap("metal_albedo_map.png"); + pbr.SetNormalMap("metal_normal_map.png", + ignition::common::NormalMapSpace::TANGENT); + pbr.SetEnvironmentMap("metal_env_map.png"); + pbr.SetAmbientOcclusionMap("metal_ambient_occlusion_map.png"); + pbr.SetEmissiveMap("metal_emissive_map.png"); + pbr.SetRoughnessMap("roughness_map.png"); + pbr.SetMetalnessMap("metalness_map.png"); + pbr.SetRoughness(0.8); + pbr.SetMetalness(0.3); + + ignition::common::Pbr pbr2(std::move(pbr)); + EXPECT_EQ(ignition::common::PbrType::METAL, pbr2.Type()); + EXPECT_EQ("metal_albedo_map.png", pbr2.AlbedoMap()); + EXPECT_EQ("metal_normal_map.png", pbr2.NormalMap()); + EXPECT_EQ(ignition::common::NormalMapSpace::TANGENT, pbr2.NormalMapType()); + EXPECT_EQ("metal_env_map.png", pbr2.EnvironmentMap()); + EXPECT_EQ("metal_ambient_occlusion_map.png", + pbr2.AmbientOcclusionMap()); + EXPECT_EQ("metal_emissive_map.png", pbr2.EmissiveMap()); + EXPECT_EQ("roughness_map.png", pbr2.RoughnessMap()); + EXPECT_EQ("metalness_map.png", pbr2.MetalnessMap()); + EXPECT_DOUBLE_EQ(0.8, pbr2.Roughness()); + EXPECT_DOUBLE_EQ(0.3, pbr2.Metalness()); + + EXPECT_EQ(std::string(), pbr2.GlossinessMap()); + EXPECT_EQ(std::string(), pbr2.SpecularMap()); + EXPECT_DOUBLE_EQ(0.0, pbr2.Glossiness()); + } + + // move assignment + { + ignition::common::Pbr pbr; + pbr.SetType(ignition::common::PbrType::METAL); + pbr.SetAlbedoMap("metal_albedo_map.png"); + pbr.SetNormalMap("metal_normal_map.png", + ignition::common::NormalMapSpace::TANGENT); + pbr.SetEnvironmentMap("metal_env_map.png"); + pbr.SetAmbientOcclusionMap("metal_ambient_occlusion_map.png"); + pbr.SetEmissiveMap("metal_emissive_map.png"); + pbr.SetRoughnessMap("roughness_map.png"); + pbr.SetMetalnessMap("metalness_map.png"); + pbr.SetRoughness(0.8); + pbr.SetMetalness(0.3); + + ignition::common::Pbr pbr2; + pbr2 = std::move(pbr); + EXPECT_EQ(ignition::common::PbrType::METAL, pbr2.Type()); + EXPECT_EQ("metal_albedo_map.png", pbr2.AlbedoMap()); + EXPECT_EQ("metal_normal_map.png", pbr2.NormalMap()); + EXPECT_EQ(ignition::common::NormalMapSpace::TANGENT, pbr2.NormalMapType()); + EXPECT_EQ("metal_env_map.png", pbr2.EnvironmentMap()); + EXPECT_EQ("metal_ambient_occlusion_map.png", + pbr2.AmbientOcclusionMap()); + EXPECT_EQ("metal_emissive_map.png", pbr2.EmissiveMap()); + EXPECT_EQ("roughness_map.png", pbr2.RoughnessMap()); + EXPECT_EQ("metalness_map.png", pbr2.MetalnessMap()); + EXPECT_DOUBLE_EQ(0.8, pbr2.Roughness()); + EXPECT_DOUBLE_EQ(0.3, pbr2.Metalness()); + + EXPECT_EQ(std::string(), pbr2.GlossinessMap()); + EXPECT_EQ(std::string(), pbr2.SpecularMap()); + EXPECT_DOUBLE_EQ(0.0, pbr2.Glossiness()); + } + + + // assignment + { + ignition::common::Pbr pbr; + pbr.SetType(ignition::common::PbrType::METAL); + pbr.SetAlbedoMap("metal_albedo_map.png"); + pbr.SetNormalMap("metal_normal_map.png"); + pbr.SetEnvironmentMap("metal_env_map.png"); + pbr.SetAmbientOcclusionMap("metal_ambient_occlusion_map.png"); + pbr.SetEmissiveMap("metal_emissive_map.png"); + pbr.SetRoughnessMap("roughness_map.png"); + pbr.SetMetalnessMap("metalness_map.png"); + pbr.SetRoughness(0.18); + pbr.SetMetalness(0.13); + + ignition::common::Pbr pbr2; + pbr2 = pbr; + EXPECT_EQ(ignition::common::PbrType::METAL, pbr2.Type()); + EXPECT_EQ("metal_albedo_map.png", pbr2.AlbedoMap()); + EXPECT_EQ("metal_normal_map.png", pbr2.NormalMap()); + EXPECT_EQ("metal_env_map.png", pbr2.EnvironmentMap()); + EXPECT_EQ("metal_ambient_occlusion_map.png", + pbr2.AmbientOcclusionMap()); + EXPECT_EQ("metal_emissive_map.png", pbr2.EmissiveMap()); + EXPECT_EQ("roughness_map.png", pbr2.RoughnessMap()); + EXPECT_EQ("metalness_map.png", pbr2.MetalnessMap()); + EXPECT_DOUBLE_EQ(0.18, pbr2.Roughness()); + EXPECT_DOUBLE_EQ(0.13, pbr2.Metalness()); + + EXPECT_EQ(std::string(), pbr2.GlossinessMap()); + EXPECT_EQ(std::string(), pbr2.SpecularMap()); + EXPECT_DOUBLE_EQ(0.0, pbr2.Glossiness()); + } + + // copy assignment after move + { + ignition::common::Pbr pbr1; + pbr1.SetType(ignition::common::PbrType::METAL); + + ignition::common::Pbr pbr2; + pbr2.SetType(ignition::common::PbrType::SPECULAR); + + // This is similar to what std::swap does except it uses std::move for each + // assignment + ignition::common::Pbr tmp = std::move(pbr1); + pbr1 = pbr2; + pbr2 = tmp; + + EXPECT_EQ(ignition::common::PbrType::SPECULAR, pbr1.Type()); + EXPECT_EQ(ignition::common::PbrType::METAL, pbr2.Type()); + } +} From 724561311a0bdb9b892fed242dca956353a0058f Mon Sep 17 00:00:00 2001 From: chapulina Date: Fri, 10 Jan 2020 18:05:48 -0800 Subject: [PATCH 039/219] Merged in collada_catch_errors (pull request #218) Handle unexpected COLLADA more gracefully Approved-by: Steve Peters Signed-off-by: Michael Carroll --- graphics/src/ColladaLoader.cc | 191 ++- graphics/src/ColladaLoader_TEST.cc | 35 + graphics/src/Skeleton.cc | 12 +- graphics/src/SkeletonAnimation.cc | 6 + test/data/cylinder_animated_from_3ds_max.dae | 1487 ++++++++++++++++++ 5 files changed, 1706 insertions(+), 25 deletions(-) create mode 100644 test/data/cylinder_animated_from_3ds_max.dae diff --git a/graphics/src/ColladaLoader.cc b/graphics/src/ColladaLoader.cc index 7b9044e09..bc79f9175 100644 --- a/graphics/src/ColladaLoader.cc +++ b/graphics/src/ColladaLoader.cc @@ -645,26 +645,50 @@ ignition::math::Matrix4d ColladaLoaderPrivate::LoadNodeTransform( ///////////////////////////////////////////////// void ColladaLoaderPrivate::LoadController(tinyxml2::XMLElement *_contrXml, - std::vector _skelXmls, + std::vector _skelXmls, const ignition::math::Matrix4d &_transform, Mesh *_mesh) { + if (nullptr == _contrXml) + { + ignerr << "Can't load null controller element." << std::endl; + return; + } + tinyxml2::XMLElement *skinXml = _contrXml->FirstChildElement("skin"); + if (nullptr == skinXml) + { + ignerr << "Failed to find skin element" << std::endl; + return; + } + std::string geomURL = skinXml->Attribute("source"); - ignition::math::Matrix4d bindTrans; - std::string matrixStr = - skinXml->FirstChildElement("bind_shape_matrix")->GetText(); + auto shapeMat = skinXml->FirstChildElement("bind_shape_matrix"); + if (nullptr == shapeMat || nullptr == shapeMat->GetText()) + { + ignerr << "Missing " << std::endl; + return; + } + std::string matrixStr = shapeMat->GetText(); std::istringstream iss(matrixStr); std::vector values(16); for (unsigned int i = 0; i < 16; ++i) iss >> values[i]; + + ignition::math::Matrix4d bindTrans; bindTrans.Set(values[0], values[1], values[2], values[3], values[4], values[5], values[6], values[7], values[8], values[9], values[10], values[11], values[12], values[13], values[14], values[15]); tinyxml2::XMLElement *jointsXml = skinXml->FirstChildElement("joints"); + if (nullptr == jointsXml) + { + ignerr << "Failed to find element" << std::endl; + return; + } + std::string jointsURL, invBindMatURL; tinyxml2::XMLElement *inputXml = jointsXml->FirstChildElement("input"); while (inputXml) @@ -673,23 +697,39 @@ void ColladaLoaderPrivate::LoadController(tinyxml2::XMLElement *_contrXml, std::string source = inputXml->Attribute("source"); if (semantic == "JOINT") jointsURL = source; - else - { - if (semantic == "INV_BIND_MATRIX") - invBindMatURL = source; - } + else if (semantic == "INV_BIND_MATRIX") + invBindMatURL = source; + inputXml = inputXml->NextSiblingElement("input"); } + if (jointsURL.empty()) + { + ignwarn << "Missing semantic='JOINT' input source" << std::endl; + } + + if (invBindMatURL.empty()) + { + ignwarn << "Missing semantic='INV__BIND_MATRIX' input source" << std::endl; + } + jointsXml = this->ElementId("source", jointsURL); if (!jointsXml) { - ignerr << "Could not find node[" << jointsURL << "]. " - << "Faild to parse skinning information in Collada file." << std::endl; + ignerr << "Could not find node [" << jointsURL << "]. " + << "Failed to parse skinning information in Collada file." << std::endl; + return; + } + + auto nameArray = jointsXml->FirstChildElement("Name_array"); + if (nullptr == nameArray) + { + ignerr << "Missing " << std::endl; + return; } - std::string jointsStr = jointsXml->FirstChildElement("Name_array")->GetText(); + std::string jointsStr = nameArray->GetText(); std::vector joints = split(jointsStr, " \t\r\n"); @@ -697,22 +737,28 @@ void ColladaLoaderPrivate::LoadController(tinyxml2::XMLElement *_contrXml, SkeletonPtr skeleton = nullptr; if (_mesh->HasSkeleton()) skeleton = _mesh->MeshSkeleton(); + for (tinyxml2::XMLElement *rootNodeXml : _skelXmls) { SkeletonNode *rootSkelNode = this->LoadSkeletonNodes(rootNodeXml, nullptr); - if (skeleton) - this->MergeSkeleton(skeleton, rootSkelNode); - else + if (nullptr == skeleton) { skeleton = SkeletonPtr(new Skeleton(rootSkelNode)); _mesh->SetSkeleton(skeleton); } + else if (nullptr != rootSkelNode) + this->MergeSkeleton(skeleton, rootSkelNode); + } + if (nullptr == skeleton) + { + ignerr << "Failed to create skeleton." << std::endl; + return; } skeleton->SetBindShapeTransform(bindTrans); tinyxml2::XMLElement *rootXml = _contrXml->GetDocument()->RootElement(); - if (rootXml->FirstChildElement("library_animations")) + if (rootXml && rootXml->FirstChildElement("library_animations")) { this->LoadAnimations(rootXml->FirstChildElement("library_animations"), skeleton); @@ -720,10 +766,11 @@ void ColladaLoaderPrivate::LoadController(tinyxml2::XMLElement *_contrXml, tinyxml2::XMLElement *invBMXml = this->ElementId("source", invBindMatURL); - if (!invBMXml) + if (nullptr == invBMXml) { ignerr << "Could not find node[" << invBindMatURL << "]. " << "Faild to parse skinning information in Collada file." << std::endl; + return; } std::string posesStr = invBMXml->FirstChildElement("float_array")->GetText(); @@ -732,6 +779,13 @@ void ColladaLoaderPrivate::LoadController(tinyxml2::XMLElement *_contrXml, for (unsigned int i = 0; i < joints.size(); ++i) { + auto node = skeleton->NodeByName(joints[i]); + if (nullptr == node) + { + ignerr << "Node [" << joints[i] << "] is null." << std::endl; + continue; + } + unsigned int id = i * 16; ignition::math::Matrix4d mat; mat.Set(ignition::math::parseFloat(strs[id + 0]), @@ -751,11 +805,16 @@ void ColladaLoaderPrivate::LoadController(tinyxml2::XMLElement *_contrXml, ignition::math::parseFloat(strs[id + 14]), ignition::math::parseFloat(strs[id + 15])); - skeleton->NodeByName(joints[i])->SetInverseBindTransform(mat); + node->SetInverseBindTransform(mat); } tinyxml2::XMLElement *vertWeightsXml = skinXml->FirstChildElement("vertex_weights"); + if (nullptr == vertWeightsXml) + { + ignerr << "Failed to find vertex_weights" << std::endl; + return; + } inputXml = vertWeightsXml->FirstChildElement("input"); unsigned int jOffset = 0; @@ -963,13 +1022,18 @@ void ColladaLoaderPrivate::LoadAnimationSet(tinyxml2::XMLElement *_xml, this->ElementId("node", targetBone); if (targetNodeXml == nullptr) { - ignerr << "Failed to load animation, '" << targetBone << "' not found" + ignerr << "Failed to load animation, [" << targetBone << "] not found" << std::endl; - return; + continue; } targetNode = this->LoadSkeletonNodes(targetNodeXml, nullptr); this->MergeSkeleton(_skel, targetNode); } + if (targetNode == nullptr) + { + ignerr << "Failed to load bone [" << targetBone << "]." << std::endl; + continue; + } // In COLLOADA, `target` is specified to be the `id` of a node, however // the nodes are identified by `name` in this loader. Here, we resolve @@ -980,8 +1044,16 @@ void ColladaLoaderPrivate::LoadAnimationSet(tinyxml2::XMLElement *_xml, if (animation[targetBoneName].find(times[i]) == animation[targetBoneName].end()) { - animation[targetBoneName][times[i]] = - _skel->NodeById(targetBone)->Transforms(); + auto bone = _skel->NodeById(targetBone); + if (nullptr != bone) + { + animation[targetBoneName][times[i]] = bone->Transforms(); + } + else + { + ignerr << "Failed to find node with ID [" << targetBone << "]" + << std::endl; + } } std::vector *frame = @@ -1035,13 +1107,24 @@ void ColladaLoaderPrivate::LoadAnimationSet(tinyxml2::XMLElement *_xml, SkeletonNode *ColladaLoaderPrivate::LoadSingleSkeletonNode( tinyxml2::XMLElement *_xml, SkeletonNode *_parent) { + if (nullptr == _xml) + { + ignerr << "Can't load single skeleton node from null XML." << std::endl; + return nullptr; + } + std::string name; if (_xml->Attribute("sid")) name = _xml->Attribute("sid"); else if (_xml->Attribute("name")) name = _xml->Attribute("name"); - else + else if (_xml->Attribute("id")) name = _xml->Attribute("id"); + else + { + ignerr << "Failed to create skeleton node without a name." << std::endl; + return nullptr; + } SkeletonNode* node = new SkeletonNode(_parent, name, _xml->Attribute("id")); @@ -1058,8 +1141,29 @@ SkeletonNode *ColladaLoaderPrivate::LoadSingleSkeletonNode( SkeletonNode *ColladaLoaderPrivate::LoadSkeletonNodes( tinyxml2::XMLElement *_xml, SkeletonNode *_parent) { + if (nullptr == _xml) + { + ignerr << "Can't load skeleton nodes from null XML element." << std::endl; + return nullptr; + } + + // Skip extras + if (std::string(_xml->Value()) == "extra") + { + ignwarn << "Skipping [extra] element." << std::endl; + return nullptr; + } + + if (std::string(_xml->Value()) != "node") + { + ignwarn << "Failed to load element [" << _xml->Value() + << "] as skeleton node." << std::endl; + return nullptr; + } + auto node = this->LoadSingleSkeletonNode(_xml, _parent); this->SetSkeletonNodeTransform(_xml, node); + auto childXml = _xml->FirstChildElement("node"); while (childXml) { @@ -1073,6 +1177,18 @@ SkeletonNode *ColladaLoaderPrivate::LoadSkeletonNodes( void ColladaLoaderPrivate::SetSkeletonNodeTransform(tinyxml2::XMLElement *_elem, SkeletonNode *_node) { + if (nullptr == _elem) + { + ignerr << "Can't set transform from null XML." << std::endl; + return; + } + + if (nullptr == _node) + { + ignerr << "Can't set transform to null skeleton node." << std::endl; + return; + } + ignition::math::Matrix4d transform(ignition::math::Matrix4d::Identity); if (_elem->FirstChildElement("matrix")) @@ -2364,6 +2480,12 @@ void ColladaLoaderPrivate::LoadTriangles(tinyxml2::XMLElement *_trianglesXml, skel->VertNodeWeight(daeVertIndex, i); SkeletonNode *node = _mesh->MeshSkeleton()->NodeByName(node_weight.first); + if (nullptr == node) + { + ignerr << "Failed to find skeleton node named [" + << node_weight.first << "]" << std::endl; + continue; + } subMesh->AddNodeAssignment(subMesh->VertexCount()-1, node->Handle(), node_weight.second); } @@ -2555,9 +2677,27 @@ void ColladaLoaderPrivate::LoadTransparent(tinyxml2::XMLElement *_elem, void ColladaLoaderPrivate::MergeSkeleton(SkeletonPtr _skeleton, SkeletonNode *_mergeNode) { + if (nullptr == _skeleton) + { + ignerr << "Fail to merge null skeleton." << std::endl; + return; + } + + if (nullptr == _mergeNode) + { + ignerr << "Fail to merge null skeleton node." << std::endl; + return; + } + if (_skeleton->NodeById(_mergeNode->Id())) return; + if (nullptr == _skeleton->RootNode()) + { + ignerr << "Skeleton missing root node." << std::endl; + return; + } + SkeletonNode *currentRoot = _skeleton->RootNode(); if (currentRoot->Id() == _mergeNode->Id()) return; @@ -2616,10 +2756,13 @@ void ColladaLoaderPrivate::ApplyInvBindTransform(SkeletonPtr _skeleton) while (!queue.empty()) { SkeletonNode *node = queue.front(); + queue.pop_front(); + if (nullptr == node) + continue; + if (node->HasInvBindTransform()) node->SetModelTransform(node->InverseBindTransform().Inverse(), false); for (unsigned int i = 0; i < node->ChildCount(); i++) queue.push_back(node->Child(i)); - queue.pop_front(); } } diff --git a/graphics/src/ColladaLoader_TEST.cc b/graphics/src/ColladaLoader_TEST.cc index af8f3b081..d287ff08d 100644 --- a/graphics/src/ColladaLoader_TEST.cc +++ b/graphics/src/ColladaLoader_TEST.cc @@ -353,6 +353,41 @@ TEST_F(ColladaLoader, MergeBoxWithDoubleSkeleton) EXPECT_EQ(skeleton_ptr->RootNode()->Name(), std::string("Armature")); } +///////////////////////////////////////////////// +TEST_F(ColladaLoader, LoadCylinderAnimatedFrom3dsMax) +{ + // TODO(anyone) This test shows that the mesh loads without crashing, but the + // mesh animation looks deformed when loaded. That still needs to be + // addressed. + common::ColladaLoader loader; + common::Mesh *mesh = loader.Load( + std::string(PROJECT_SOURCE_PATH) + + "/test/data/cylinder_animated_from_3ds_max.dae"); + + EXPECT_EQ("unknown", mesh->Name()); + EXPECT_EQ(202u, mesh->VertexCount()); + EXPECT_EQ(202u, mesh->NormalCount()); + EXPECT_EQ(852u, mesh->IndexCount()); + EXPECT_LT(0u, mesh->TexCoordCount()); + EXPECT_EQ(0u, mesh->MaterialCount()); + + EXPECT_EQ(1u, mesh->SubMeshCount()); + auto subMesh = mesh->SubMeshByIndex(0); + ASSERT_NE(nullptr, subMesh.lock()); + EXPECT_EQ("Cylinder01", subMesh.lock()->Name()); + + EXPECT_TRUE(mesh->HasSkeleton()); + auto skeleton = mesh->MeshSkeleton(); + ASSERT_NE(nullptr, skeleton); + ASSERT_EQ(1u, skeleton->AnimationCount()); + + auto anim = skeleton->Animation(0); + ASSERT_NE(nullptr, anim); + EXPECT_EQ("Bone02", anim->Name()); + EXPECT_EQ(1u, anim->NodeCount()); + EXPECT_TRUE(anim->HasNode("Bone02")); +} + ///////////////////////////////////////////////// int main(int argc, char **argv) { diff --git a/graphics/src/Skeleton.cc b/graphics/src/Skeleton.cc index 28cee182d..ca48a9ada 100644 --- a/graphics/src/Skeleton.cc +++ b/graphics/src/Skeleton.cc @@ -15,6 +15,7 @@ * */ #include +#include #include #include #include @@ -155,6 +156,12 @@ unsigned int Skeleton::JointCount() const ////////////////////////////////////////////////// void Skeleton::Scale(const double _scale) { + if (nullptr == this->data->root) + { + ignerr << "Failed to scale skeleton, null root." << std::endl; + return; + } + // scale skeleton structure for (SkeletonNodeMap::iterator iter = this->data->nodes.begin(); iter != this->data->nodes.end(); ++iter) @@ -177,7 +184,7 @@ void Skeleton::Scale(const double _scale) ////////////////////////////////////////////////// void Skeleton::BuildNodeMap() { - std::list toVisit; + std::list toVisit; toVisit.push_front(this->data->root); unsigned int handle = 0; @@ -187,6 +194,9 @@ void Skeleton::BuildNodeMap() SkeletonNode *node = toVisit.front(); toVisit.pop_front(); + if (nullptr == node) + continue; + for (int i = (node->ChildCount() - 1); i >= 0; --i) toVisit.push_front(node->Child(i)); diff --git a/graphics/src/SkeletonAnimation.cc b/graphics/src/SkeletonAnimation.cc index dc28110f4..7e0563b74 100644 --- a/graphics/src/SkeletonAnimation.cc +++ b/graphics/src/SkeletonAnimation.cc @@ -149,6 +149,12 @@ std::map SkeletonAnimation::PoseAtX( { std::map::const_iterator nodeAnim = this->data->animations.find(_node); + if (nodeAnim == this->data->animations.end()) + { + ignerr << "Can't find animation named [" << _node << "]" << std::endl; + return {}; + } + math::Matrix4d lastPos = nodeAnim->second->KeyFrame( nodeAnim->second->FrameCount() - 1).second; diff --git a/test/data/cylinder_animated_from_3ds_max.dae b/test/data/cylinder_animated_from_3ds_max.dae new file mode 100644 index 000000000..26092dda1 --- /dev/null +++ b/test/data/cylinder_animated_from_3ds_max.dae @@ -0,0 +1,1487 @@ + + + + + + FBX COLLADA exporter + + + 2020-01-10T17:40:08Z + + 2020-01-10T17:40:08Z + + + + <unit meter="0.010000" name="centimeter"/> + <up_axis>Z_UP</up_axis> + </asset> + <library_geometries> + <geometry id="Cylinder01-lib" name="Cylinder01Mesh"> + <mesh> + <source id="Cylinder01-POSITION"> + <float_array id="Cylinder01-POSITION-array" count="432"> +6.938509 0.000000 0.000000 +6.520066 2.373110 0.000000 +5.315206 4.459988 0.000000 +3.469254 6.008925 0.000000 +1.204859 6.833098 0.000000 +-1.204860 6.833097 0.000000 +-3.469255 6.008925 0.000000 +-5.315206 4.459988 0.000000 +-6.520066 2.373110 0.000000 +-6.938509 0.000001 0.000000 +-6.520066 -2.373108 0.000000 +-5.315207 -4.459986 0.000000 +-3.469257 -6.008924 0.000000 +-1.204862 -6.833097 0.000000 +1.204856 -6.833098 0.000000 +3.469251 -6.008927 0.000000 +5.315203 -4.459991 0.000000 +6.520064 -2.373114 0.000000 +6.938510 -0.000002 87.256248 +6.520067 2.373108 87.256248 +5.315207 4.459986 87.256248 +3.469255 6.008924 87.256248 +1.204859 6.833096 87.256248 +-1.204860 6.833096 87.256248 +-3.469254 6.008923 87.256248 +-5.315205 4.459986 87.256248 +-6.520065 2.373108 87.256248 +-6.938508 -0.000001 87.256248 +-6.520065 -2.373110 87.256248 +-5.315207 -4.459988 87.256248 +-3.469256 -6.008925 87.256248 +-1.204862 -6.833099 87.256248 +1.204857 -6.833100 87.256248 +3.469252 -6.008929 87.256248 +5.315204 -4.459993 87.256248 +6.520065 -2.373116 87.256248 +6.938509 0.000000 229.222961 +6.520066 2.373110 229.222961 +5.315206 4.459988 229.222961 +3.469254 6.008925 229.222961 +1.204859 6.833098 229.222961 +-1.204860 6.833097 229.222961 +-3.469255 6.008925 229.222961 +-5.315206 4.459988 229.222961 +-6.520066 2.373110 229.222961 +-6.938509 0.000001 229.222961 +-6.520066 -2.373108 229.222961 +-5.315207 -4.459986 229.222961 +-3.469257 -6.008924 229.222961 +-1.204862 -6.833097 229.222961 +1.204856 -6.833098 229.222961 +3.469251 -6.008927 229.222961 +5.315203 -4.459991 229.222961 +6.520064 -2.373114 229.222961 +6.938510 -0.000002 107.229500 +6.520067 2.373108 107.229500 +5.315207 4.459986 107.229500 +3.469255 6.008924 107.229500 +1.204860 6.833096 107.229500 +-1.204860 6.833096 107.229500 +-3.469254 6.008923 107.229500 +-5.315205 4.459986 107.229500 +-6.520065 2.373108 107.229500 +-6.938508 -0.000001 107.229500 +-6.520065 -2.373110 107.229500 +-5.315207 -4.459988 107.229500 +-3.469256 -6.008925 107.229500 +-1.204862 -6.833099 107.229500 +1.204857 -6.833100 107.229500 +3.469252 -6.008929 107.229500 +5.315204 -4.459993 107.229500 +6.520065 -2.373116 107.229500 +6.938510 -0.000002 91.250900 +6.938510 -0.000002 95.245552 +6.938510 -0.000002 99.240204 +6.938510 -0.000002 103.234848 +6.520067 2.373108 91.250900 +6.520067 2.373108 95.245552 +6.520067 2.373108 99.240204 +6.520067 2.373108 103.234848 +5.315207 4.459986 91.250900 +5.315207 4.459986 95.245552 +5.315207 4.459986 99.240204 +5.315207 4.459986 103.234848 +3.469255 6.008924 91.250900 +3.469255 6.008924 95.245552 +3.469255 6.008924 99.240204 +3.469255 6.008924 103.234848 +1.204860 6.833096 91.250900 +1.204860 6.833096 95.245552 +1.204860 6.833096 99.240204 +1.204860 6.833096 103.234848 +-1.204860 6.833096 91.250900 +-1.204860 6.833096 95.245552 +-1.204860 6.833096 99.240204 +-1.204860 6.833096 103.234848 +-3.469254 6.008923 91.250900 +-3.469254 6.008923 95.245552 +-3.469254 6.008923 99.240204 +-3.469254 6.008923 103.234848 +-5.315205 4.459986 91.250900 +-5.315205 4.459986 95.245552 +-5.315205 4.459986 99.240204 +-5.315205 4.459986 103.234848 +-6.520065 2.373108 91.250900 +-6.520065 2.373108 95.245552 +-6.520065 2.373108 99.240204 +-6.520065 2.373108 103.234848 +-6.938508 -0.000001 91.250900 +-6.938508 -0.000001 95.245552 +-6.938508 -0.000001 99.240204 +-6.938508 -0.000001 103.234848 +-6.520065 -2.373110 91.250900 +-6.520065 -2.373111 95.245552 +-6.520065 -2.373111 99.240204 +-6.520065 -2.373111 103.234848 +-5.315207 -4.459988 91.250900 +-5.315207 -4.459988 95.245552 +-5.315207 -4.459988 99.240204 +-5.315207 -4.459988 103.234848 +-3.469256 -6.008925 91.250900 +-3.469256 -6.008925 95.245552 +-3.469256 -6.008925 99.240204 +-3.469256 -6.008925 103.234848 +-1.204862 -6.833099 91.250900 +-1.204862 -6.833099 95.245552 +-1.204862 -6.833099 99.240204 +-1.204862 -6.833099 103.234848 +1.204857 -6.833100 91.250900 +1.204857 -6.833100 95.245552 +1.204857 -6.833100 99.240204 +1.204857 -6.833100 103.234848 +3.469252 -6.008929 91.250900 +3.469252 -6.008929 95.245552 +3.469252 -6.008929 99.240204 +3.469252 -6.008929 103.234848 +5.315204 -4.459993 91.250900 +5.315204 -4.459993 95.245552 +5.315204 -4.459993 99.240204 +5.315204 -4.459993 103.234848 +6.520065 -2.373116 91.250900 +6.520065 -2.373116 95.245552 +6.520065 -2.373116 99.240204 +6.520065 -2.373116 103.234848 +</float_array> + <technique_common> + <accessor source="#Cylinder01-POSITION-array" count="144" stride="3"> + <param name="X" type="float"/> + <param name="Y" type="float"/> + <param name="Z" type="float"/> + </accessor> + </technique_common> + </source> + <source id="Cylinder01-Normal0"> + <float_array id="Cylinder01-Normal0-array" count="2556"> +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +0.000000 0.000000 -1.000000 +1.000000 -0.000000 -0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 -0.000000 +1.000000 -0.000000 -0.000000 +1.000000 -0.000000 -0.000000 +0.939693 0.342020 -0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 -0.000000 +0.766044 0.642788 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.500000 0.866025 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 0.000000 +0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.500000 0.866025 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642787 0.000000 +-0.766044 0.642787 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.766044 0.642788 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-0.766044 0.642787 0.000000 +-0.766044 0.642788 0.000000 +-0.939693 0.342020 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-1.000000 0.000000 0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-0.939693 -0.342020 0.000000 +-0.766045 -0.642787 -0.000000 +-0.766045 -0.642787 -0.000000 +-0.766045 -0.642787 -0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 0.000000 +-0.766045 -0.642787 -0.000000 +-0.500000 -0.866025 -0.000000 +-0.500000 -0.866025 -0.000000 +-0.500000 -0.866025 -0.000000 +-0.766045 -0.642787 -0.000000 +-0.766045 -0.642787 -0.000000 +-0.500000 -0.866025 -0.000000 +-0.173649 -0.984808 -0.000000 +-0.173649 -0.984808 -0.000000 +-0.173649 -0.984808 -0.000000 +-0.500000 -0.866025 -0.000000 +-0.500000 -0.866025 -0.000000 +-0.173649 -0.984808 -0.000000 +0.173648 -0.984808 -0.000000 +0.173648 -0.984808 -0.000000 +0.173648 -0.984808 -0.000000 +-0.173649 -0.984808 -0.000000 +-0.173649 -0.984808 -0.000000 +0.173648 -0.984808 -0.000000 +0.499999 -0.866026 -0.000000 +0.500000 -0.866026 -0.000000 +0.500000 -0.866026 -0.000000 +0.173648 -0.984808 -0.000000 +0.173648 -0.984808 -0.000000 +0.499999 -0.866026 -0.000000 +0.766044 -0.642788 -0.000000 +0.766044 -0.642788 -0.000000 +0.766044 -0.642788 -0.000000 +0.500000 -0.866026 -0.000000 +0.499999 -0.866026 -0.000000 +0.766044 -0.642788 -0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +0.766044 -0.642788 -0.000000 +0.766044 -0.642788 -0.000000 +0.939692 -0.342021 -0.000000 +1.000000 -0.000000 -0.000000 +1.000000 -0.000000 -0.000000 +1.000000 -0.000000 -0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +1.000000 -0.000000 0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 0.000000 +0.939693 0.342020 0.000000 +1.000000 -0.000000 0.000000 +1.000000 -0.000000 0.000000 +0.939693 0.342020 -0.000000 +0.766044 0.642788 -0.000000 +0.766044 0.642788 -0.000000 +0.766044 0.642788 -0.000000 +0.939693 0.342020 0.000000 +0.939693 0.342020 -0.000000 +0.766044 0.642788 -0.000000 +0.500000 0.866025 -0.000000 +0.500000 0.866026 -0.000000 +0.500000 0.866026 -0.000000 +0.766044 0.642788 -0.000000 +0.766044 0.642788 -0.000000 +0.500000 0.866025 -0.000000 +0.173648 0.984808 -0.000000 +0.173648 0.984808 -0.000000 +0.173648 0.984808 -0.000000 +0.500000 0.866026 -0.000000 +0.500000 0.866025 -0.000000 +0.173648 0.984808 -0.000000 +-0.173648 0.984808 -0.000000 +-0.173649 0.984808 -0.000000 +-0.173649 0.984808 -0.000000 +0.173648 0.984808 -0.000000 +0.173648 0.984808 -0.000000 +-0.173648 0.984808 -0.000000 +-0.500000 0.866025 -0.000000 +-0.500000 0.866025 -0.000000 +-0.500000 0.866025 -0.000000 +-0.173649 0.984808 -0.000000 +-0.173648 0.984808 -0.000000 +-0.500000 0.866025 -0.000000 +-0.766044 0.642788 -0.000000 +-0.766044 0.642787 -0.000000 +-0.766044 0.642787 -0.000000 +-0.500000 0.866025 -0.000000 +-0.500000 0.866025 -0.000000 +-0.766044 0.642788 -0.000000 +-0.939693 0.342020 -0.000000 +-0.939693 0.342020 -0.000000 +-0.939693 0.342020 -0.000000 +-0.766044 0.642787 -0.000000 +-0.766044 0.642788 -0.000000 +-0.939693 0.342020 -0.000000 +-1.000000 0.000000 -0.000000 +-1.000000 -0.000000 -0.000000 +-1.000000 -0.000000 -0.000000 +-0.939693 0.342020 -0.000000 +-0.939693 0.342020 -0.000000 +-1.000000 0.000000 -0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 -0.000000 +-0.939693 -0.342020 -0.000000 +-1.000000 -0.000000 -0.000000 +-1.000000 0.000000 -0.000000 +-0.939693 -0.342020 0.000000 +-0.766045 -0.642787 0.000000 +-0.766044 -0.642788 0.000000 +-0.766044 -0.642788 0.000000 +-0.939693 -0.342020 -0.000000 +-0.939693 -0.342020 0.000000 +-0.766045 -0.642787 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.766044 -0.642788 0.000000 +-0.766045 -0.642787 0.000000 +-0.500000 -0.866025 0.000000 +-0.173649 -0.984808 0.000000 +-0.173648 -0.984808 0.000000 +-0.173648 -0.984808 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.173649 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +-0.173648 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.499999 -0.866026 0.000000 +0.500000 -0.866026 0.000000 +0.500000 -0.866026 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.499999 -0.866026 0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 0.000000 +0.500000 -0.866026 0.000000 +0.499999 -0.866026 0.000000 +0.766044 -0.642788 0.000000 +0.939692 -0.342021 0.000000 +0.939692 -0.342021 0.000000 +0.939692 -0.342021 0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 0.000000 +0.939692 -0.342021 0.000000 +1.000000 -0.000000 0.000000 +1.000000 -0.000000 0.000000 +1.000000 -0.000000 0.000000 +0.939692 -0.342021 0.000000 +0.939692 -0.342021 0.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +0.000000 0.000000 1.000000 +1.000000 -0.000000 -0.000000 +1.000000 -0.000000 -0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 0.000000 +1.000000 -0.000000 -0.000000 +0.939693 0.342020 0.000000 +0.939693 0.342020 -0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.939693 0.342020 0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 -0.000000 +0.766044 0.642788 0.000000 +0.500000 0.866025 -0.000000 +0.500000 0.866025 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 -0.000000 +0.500000 0.866025 -0.000000 +0.173648 0.984808 -0.000000 +0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +0.173648 0.984808 -0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.173648 0.984808 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.766044 0.642787 0.000000 +-0.766044 0.642787 0.000000 +-0.766044 0.642788 0.000000 +-0.500000 0.866025 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642787 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-0.766044 0.642788 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-0.939693 0.342020 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 -0.000000 +-1.000000 0.000000 0.000000 +-0.939693 -0.342020 -0.000000 +-0.939693 -0.342020 0.000000 +-0.766045 -0.642787 -0.000000 +-0.766045 -0.642787 -0.000000 +-0.766045 -0.642787 -0.000000 +-0.939693 -0.342020 -0.000000 +-0.766045 -0.642787 -0.000000 +-0.766045 -0.642787 -0.000000 +-0.500000 -0.866025 -0.000000 +-0.500000 -0.866025 -0.000000 +-0.500000 -0.866025 0.000000 +-0.766045 -0.642787 -0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 -0.000000 +-0.173649 -0.984808 -0.000000 +-0.173649 -0.984808 -0.000000 +-0.173649 -0.984808 0.000000 +-0.500000 -0.866025 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 -0.000000 +0.173648 -0.984808 -0.000000 +0.173648 -0.984808 -0.000000 +0.173648 -0.984808 -0.000000 +-0.173649 -0.984808 0.000000 +0.173648 -0.984808 -0.000000 +0.173648 -0.984808 -0.000000 +0.500000 -0.866026 -0.000000 +0.500000 -0.866026 -0.000000 +0.499999 -0.866026 0.000000 +0.173648 -0.984808 -0.000000 +0.499999 -0.866026 0.000000 +0.500000 -0.866026 -0.000000 +0.766044 -0.642788 -0.000000 +0.766044 -0.642788 -0.000000 +0.766044 -0.642788 0.000000 +0.499999 -0.866026 0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 -0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +0.766044 -0.642788 0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +1.000000 -0.000000 -0.000000 +1.000000 -0.000000 -0.000000 +1.000000 -0.000000 -0.000000 +0.939692 -0.342021 -0.000000 +1.000000 -0.000000 0.000000 +1.000000 -0.000000 -0.000000 +0.939693 0.342020 0.000000 +0.939693 0.342020 0.000000 +0.939693 0.342020 0.000000 +1.000000 -0.000000 0.000000 +1.000000 -0.000000 -0.000000 +1.000000 -0.000000 0.000000 +0.939693 0.342020 0.000000 +0.939693 0.342020 0.000000 +0.939693 0.342020 -0.000000 +1.000000 -0.000000 -0.000000 +1.000000 -0.000000 0.000000 +1.000000 -0.000000 -0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 -0.000000 +1.000000 -0.000000 0.000000 +1.000000 -0.000000 0.000000 +1.000000 -0.000000 0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 -0.000000 +1.000000 -0.000000 0.000000 +0.939693 0.342020 0.000000 +0.939693 0.342020 0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.939693 0.342020 0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 -0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 -0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 -0.000000 +0.939693 0.342020 -0.000000 +0.766044 0.642788 -0.000000 +0.766044 0.642788 -0.000000 +0.766044 0.642788 -0.000000 +0.939693 0.342020 -0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.500000 0.866025 -0.000000 +0.500000 0.866025 -0.000000 +0.500000 0.866025 0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 0.000000 +0.766044 0.642788 0.000000 +0.766044 0.642788 -0.000000 +0.766044 0.642788 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 0.000000 +0.766044 0.642788 -0.000000 +0.766044 0.642788 -0.000000 +0.766044 0.642788 -0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 -0.000000 +0.766044 0.642788 -0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 -0.000000 +0.173648 0.984808 -0.000000 +0.173648 0.984808 -0.000000 +0.173648 0.984808 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.500000 0.866025 0.000000 +0.500000 0.866025 -0.000000 +0.500000 0.866025 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 -0.000000 +0.500000 0.866025 -0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 -0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +0.173648 0.984808 0.000000 +0.173648 0.984808 -0.000000 +0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 -0.000000 +0.173648 0.984808 -0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.173648 0.984808 0.000000 +-0.173648 0.984808 -0.000000 +-0.173648 0.984808 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 -0.000000 +-0.173648 0.984808 -0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 0.000000 +-0.500000 0.866025 0.000000 +-0.500000 0.866025 -0.000000 +-0.500000 0.866025 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 -0.000000 +-0.500000 0.866025 -0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 -0.000000 +-0.766044 0.642788 0.000000 +-0.766044 0.642788 -0.000000 +-0.766044 0.642788 0.000000 +-0.939693 0.342020 -0.000000 +-0.939693 0.342020 -0.000000 +-0.939693 0.342020 -0.000000 +-0.766044 0.642788 -0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 -0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 0.000000 +-1.000000 0.000000 -0.000000 +-1.000000 0.000000 -0.000000 +-1.000000 0.000000 0.000000 +-0.939693 0.342020 0.000000 +-0.939693 0.342020 -0.000000 +-0.939693 0.342020 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 -0.000000 +-0.939693 0.342020 -0.000000 +-0.939693 0.342020 -0.000000 +-0.939693 0.342020 -0.000000 +-1.000000 0.000000 -0.000000 +-1.000000 0.000000 -0.000000 +-1.000000 0.000000 -0.000000 +-0.939693 0.342020 -0.000000 +-1.000000 0.000000 -0.000000 +-1.000000 0.000000 0.000000 +-0.939693 -0.342020 -0.000000 +-0.939693 -0.342020 -0.000000 +-0.939693 -0.342020 -0.000000 +-1.000000 0.000000 -0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 -0.000000 +-0.939693 -0.342020 -0.000000 +-0.939693 -0.342020 -0.000000 +-0.939693 -0.342020 0.000000 +-1.000000 0.000000 0.000000 +-1.000000 0.000000 -0.000000 +-1.000000 0.000000 0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 0.000000 +-1.000000 0.000000 -0.000000 +-1.000000 0.000000 -0.000000 +-1.000000 0.000000 -0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 0.000000 +-1.000000 0.000000 -0.000000 +-0.939693 -0.342020 -0.000000 +-0.939693 -0.342020 -0.000000 +-0.766045 -0.642787 -0.000000 +-0.766045 -0.642787 -0.000000 +-0.766045 -0.642787 0.000000 +-0.939693 -0.342020 -0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 -0.000000 +-0.766045 -0.642787 0.000000 +-0.766045 -0.642787 0.000000 +-0.766045 -0.642787 0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 0.000000 +-0.766045 -0.642787 0.000000 +-0.766045 -0.642787 0.000000 +-0.766045 -0.642787 0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 0.000000 +-0.939693 -0.342020 0.000000 +-0.766045 -0.642787 0.000000 +-0.766045 -0.642787 0.000000 +-0.766045 -0.642787 0.000000 +-0.939693 -0.342020 0.000000 +-0.766045 -0.642787 0.000000 +-0.766045 -0.642787 -0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.766045 -0.642787 0.000000 +-0.766045 -0.642787 0.000000 +-0.766045 -0.642787 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.766045 -0.642787 0.000000 +-0.766045 -0.642787 0.000000 +-0.766045 -0.642787 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.766045 -0.642787 0.000000 +-0.766045 -0.642787 0.000000 +-0.766045 -0.642787 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.766045 -0.642787 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.500000 -0.866025 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.500000 -0.866025 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +0.173648 -0.984808 -0.000000 +0.173648 -0.984808 -0.000000 +0.173648 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +-0.173649 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 -0.000000 +0.499999 -0.866026 0.000000 +0.499999 -0.866026 0.000000 +0.500000 -0.866026 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.500000 -0.866026 0.000000 +0.500000 -0.866026 0.000000 +0.499999 -0.866026 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.499999 -0.866026 0.000000 +0.499999 -0.866026 0.000000 +0.499999 -0.866026 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.173648 -0.984808 0.000000 +0.499999 -0.866026 0.000000 +0.499999 -0.866026 0.000000 +0.499999 -0.866026 0.000000 +0.173648 -0.984808 0.000000 +0.500000 -0.866026 0.000000 +0.499999 -0.866026 0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 -0.000000 +0.500000 -0.866026 0.000000 +0.499999 -0.866026 0.000000 +0.500000 -0.866026 0.000000 +0.766044 -0.642788 -0.000000 +0.766044 -0.642788 -0.000000 +0.766044 -0.642788 0.000000 +0.499999 -0.866026 0.000000 +0.499999 -0.866026 0.000000 +0.499999 -0.866026 0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 0.000000 +0.499999 -0.866026 0.000000 +0.499999 -0.866026 0.000000 +0.499999 -0.866026 0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 0.000000 +0.499999 -0.866026 0.000000 +0.766044 -0.642788 -0.000000 +0.766044 -0.642788 0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +0.766044 -0.642788 -0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 -0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 0.000000 +0.766044 -0.642788 0.000000 +0.939692 -0.342021 0.000000 +0.939692 -0.342021 0.000000 +0.939692 -0.342021 0.000000 +0.766044 -0.642788 0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +1.000000 -0.000000 -0.000000 +1.000000 -0.000000 -0.000000 +1.000000 -0.000000 0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 -0.000000 +1.000000 -0.000000 0.000000 +1.000000 -0.000000 0.000000 +1.000000 -0.000000 -0.000000 +0.939692 -0.342021 -0.000000 +0.939692 -0.342021 0.000000 +0.939692 -0.342021 -0.000000 +1.000000 -0.000000 -0.000000 +1.000000 -0.000000 -0.000000 +1.000000 -0.000000 0.000000 +0.939692 -0.342021 0.000000 +0.939692 -0.342021 0.000000 +0.939692 -0.342021 0.000000 +1.000000 -0.000000 0.000000 +1.000000 -0.000000 0.000000 +1.000000 -0.000000 0.000000 +0.939692 -0.342021 0.000000 +</float_array> + <technique_common> + <accessor source="#Cylinder01-Normal0-array" count="852" stride="3"> + <param name="X" type="float"/> + <param name="Y" type="float"/> + <param name="Z" type="float"/> + </accessor> + </technique_common> + </source> + <source id="Cylinder01-UV0"> + <float_array id="Cylinder01-UV0-array" count="366"> +0.750000 0.000000 +0.805556 0.000000 +0.861111 0.000000 +0.916667 0.000000 +0.972222 0.000000 +0.027778 0.000000 +0.083333 0.000000 +0.138889 0.000000 +0.194444 0.000000 +0.250000 0.000000 +0.305556 0.000000 +0.361111 0.000000 +0.416667 0.000000 +0.472222 0.000000 +0.527778 0.000000 +0.583333 0.000000 +0.638889 0.000000 +0.694444 0.000000 +0.750000 0.448651 +0.805556 0.448651 +0.861111 0.448651 +0.916667 0.448651 +0.972222 0.448651 +0.027778 0.448651 +0.083333 0.448651 +0.138889 0.448651 +0.194444 0.448651 +0.250000 0.448651 +0.305556 0.448651 +0.361111 0.448651 +0.416667 0.448651 +0.472222 0.448651 +0.527778 0.448651 +0.583333 0.448651 +0.638889 0.448651 +0.694444 0.448651 +0.750000 1.000000 +0.805556 1.000000 +0.861111 1.000000 +0.916667 1.000000 +0.972222 1.000000 +0.027778 1.000000 +0.083333 1.000000 +0.138889 1.000000 +0.194444 1.000000 +0.250000 1.000000 +0.305556 1.000000 +0.361111 1.000000 +0.416667 1.000000 +0.472222 1.000000 +0.527778 1.000000 +0.583333 1.000000 +0.638889 1.000000 +0.694444 1.000000 +-0.027778 0.000000 +-0.027778 0.448651 +-0.027778 0.537834 +-0.027778 1.000000 +0.970821 0.000000 +0.912631 0.000000 +0.804673 0.000000 +0.659966 0.000000 +0.495965 0.000000 +0.332450 0.000000 +0.189145 0.000000 +0.083333 0.000000 +0.027778 0.000000 +0.029179 0.000000 +0.087369 0.000000 +0.195328 0.000000 +0.340035 0.000000 +0.970821 1.000000 +0.912631 1.000000 +0.804673 1.000000 +0.659966 1.000000 +0.495965 1.000000 +0.332451 1.000000 +0.189145 1.000000 +0.083333 1.000000 +0.027778 1.000000 +0.029179 1.000000 +0.087368 1.000000 +0.195327 1.000000 +0.750000 0.537834 +0.805556 0.537834 +0.861111 0.537834 +0.916667 0.537834 +0.972222 0.537834 +0.027778 0.537834 +0.083333 0.537834 +0.138889 0.537834 +0.194444 0.537834 +0.250000 0.537834 +0.305556 0.537834 +0.361111 0.537834 +0.416667 0.537834 +0.472222 0.537834 +0.527778 0.537834 +0.583333 0.537834 +0.638889 0.537834 +0.694444 0.537834 +0.027778 0.008623 +-0.027778 0.008623 +0.750000 0.466488 +0.750000 0.484324 +0.750000 0.502161 +0.750000 0.519997 +0.805556 0.466488 +0.805556 0.484324 +0.805556 0.502161 +0.805556 0.519997 +0.861111 0.466488 +0.861111 0.484324 +0.861111 0.502161 +0.861111 0.519997 +0.916667 0.466488 +0.916667 0.484324 +0.916667 0.502161 +0.916667 0.519997 +-0.027778 0.114465 +0.972222 0.466488 +-0.027778 0.220307 +0.972222 0.484324 +-0.027778 0.326149 +0.972222 0.502161 +-0.027778 0.431992 +0.972222 0.519997 +0.027778 0.466488 +0.027778 0.114465 +0.027778 0.484324 +0.027778 0.220307 +0.027778 0.502161 +0.027778 0.326149 +0.027778 0.519997 +0.027778 0.431992 +0.083333 0.466488 +0.083333 0.484324 +0.083333 0.502161 +0.083333 0.519997 +0.138889 0.466488 +0.138889 0.484324 +0.138889 0.502161 +0.138889 0.519997 +0.194444 0.466488 +0.194444 0.484324 +0.194444 0.502161 +0.194444 0.519997 +0.250000 0.466488 +0.250000 0.484324 +0.250000 0.502161 +0.250000 0.519997 +0.305556 0.466488 +0.305556 0.484324 +0.305556 0.502161 +0.305556 0.519997 +0.361111 0.466488 +0.361111 0.484324 +0.361111 0.502161 +0.361111 0.519997 +0.416667 0.466488 +0.416667 0.484324 +0.416667 0.502161 +0.416667 0.519997 +0.472222 0.466488 +0.472222 0.484324 +0.472222 0.502161 +0.472222 0.519997 +0.527778 0.466488 +0.527778 0.484324 +0.527778 0.502161 +0.527778 0.519997 +0.583333 0.466488 +0.583333 0.484324 +0.583333 0.502161 +0.583333 0.519997 +0.638889 0.466488 +0.638889 0.484324 +0.638889 0.502161 +0.638889 0.519997 +0.694444 0.466488 +0.694444 0.484324 +0.694444 0.502161 +0.694444 0.519997 +</float_array> + <technique_common> + <accessor source="#Cylinder01-UV0-array" count="183" stride="2"> + <param name="S" type="float"/> + <param name="T" type="float"/> + </accessor> + </technique_common> + </source> + <vertices id="Cylinder01-VERTEX"> + <input semantic="POSITION" source="#Cylinder01-POSITION"/> + </vertices> + <triangles count="284"> + <input semantic="VERTEX" offset="0" source="#Cylinder01-VERTEX"/> + <input semantic="NORMAL" offset="1" source="#Cylinder01-Normal0"/> + <input semantic="TEXCOORD" offset="2" set="0" source="#Cylinder01-UV0"/> + <p> 16 0 69 15 1 68 14 2 67 14 3 67 13 4 66 12 5 65 12 6 65 11 7 64 10 8 63 14 9 67 12 10 65 10 11 63 10 12 63 9 13 62 8 14 61 8 15 61 7 16 60 6 17 59 10 18 63 8 19 61 6 20 59 6 21 59 5 22 58 4 23 4 4 24 4 3 25 3 2 26 2 6 27 59 4 28 4 2 29 2 10 30 63 6 31 59 2 32 2 14 33 67 10 34 63 2 35 2 2 36 2 1 37 1 0 38 0 14 39 67 2 40 2 0 41 0 16 42 69 14 43 67 0 44 0 17 45 70 16 46 69 0 47 0 0 48 0 1 49 1 19 50 19 19 51 19 18 52 18 0 53 0 1 54 1 2 55 2 20 56 20 20 57 20 19 58 19 1 59 1 2 60 2 3 61 3 21 62 21 21 63 21 20 64 20 2 65 2 3 66 3 4 67 4 22 68 22 22 69 22 21 70 21 3 71 3 4 72 54 5 73 5 23 74 23 23 75 23 22 76 55 4 77 54 5 78 5 6 79 6 24 80 24 24 81 24 23 82 23 5 83 5 6 84 6 7 85 7 25 86 25 25 87 25 24 88 24 6 89 6 7 90 7 8 91 8 26 92 26 26 93 26 25 94 25 7 95 7 8 96 8 9 97 9 27 98 27 27 99 27 26 100 26 8 101 8 9 102 9 10 103 10 28 104 28 28 105 28 27 106 27 9 107 9 10 108 10 11 109 11 29 110 29 29 111 29 28 112 28 10 113 10 11 114 11 12 115 12 30 116 30 30 117 30 29 118 29 11 119 11 12 120 12 13 121 13 31 122 31 31 123 31 30 124 30 12 125 12 13 126 13 14 127 14 32 128 32 32 129 32 31 130 31 13 131 13 14 132 14 15 133 15 33 134 33 33 135 33 32 136 32 14 137 14 15 138 15 16 139 16 34 140 34 34 141 34 33 142 33 15 143 15 16 144 16 17 145 17 35 146 35 35 147 35 34 148 34 16 149 16 17 150 17 0 151 0 18 152 18 18 153 18 35 154 35 17 155 17 54 156 83 55 157 84 37 158 37 37 159 37 36 160 36 54 161 83 55 162 84 56 163 85 38 164 38 38 165 38 37 166 37 55 167 84 56 168 85 57 169 86 39 170 39 39 171 39 38 172 38 56 173 85 57 174 86 58 175 87 40 176 40 40 177 40 39 178 39 57 179 86 58 180 56 59 181 88 41 182 41 41 183 41 40 184 57 58 185 56 59 186 88 60 187 89 42 188 42 42 189 42 41 190 41 59 191 88 60 192 89 61 193 90 43 194 43 43 195 43 42 196 42 60 197 89 61 198 90 62 199 91 44 200 44 44 201 44 43 202 43 61 203 90 62 204 91 63 205 92 45 206 45 45 207 45 44 208 44 62 209 91 63 210 92 64 211 93 46 212 46 46 213 46 45 214 45 63 215 92 64 216 93 65 217 94 47 218 47 47 219 47 46 220 46 64 221 93 65 222 94 66 223 95 48 224 48 48 225 48 47 226 47 65 227 94 66 228 95 67 229 96 49 230 49 49 231 49 48 232 48 66 233 95 67 234 96 68 235 97 50 236 50 50 237 50 49 238 49 67 239 96 68 240 97 69 241 98 51 242 51 51 243 51 50 244 50 68 245 97 69 246 98 70 247 99 52 248 52 52 249 52 51 250 51 69 251 98 70 252 99 71 253 100 53 254 53 53 255 53 52 256 52 70 257 99 71 258 100 54 259 83 36 260 36 36 261 36 53 262 53 71 263 100 36 264 36 37 265 37 38 266 38 38 267 38 39 268 39 40 269 40 40 270 40 41 271 71 42 272 72 38 273 38 40 274 40 42 275 72 42 276 72 43 277 73 44 278 74 44 279 74 45 280 75 46 281 76 42 282 72 44 283 74 46 284 76 46 285 76 47 286 77 48 287 78 48 288 78 49 289 79 50 290 80 46 291 76 48 292 78 50 293 80 42 294 72 46 295 76 50 296 80 38 297 38 42 298 72 50 299 80 50 300 80 51 301 81 52 302 82 38 303 38 50 304 80 52 305 82 36 306 36 38 307 38 52 308 82 53 309 53 36 310 36 52 311 82 72 312 103 18 313 18 19 314 19 19 315 19 76 316 107 72 317 103 76 318 107 19 319 19 20 320 20 20 321 20 80 322 111 76 323 107 80 324 111 20 325 20 21 326 21 21 327 21 84 328 115 80 329 111 84 330 115 21 331 21 22 332 22 22 333 22 88 334 120 84 335 115 88 336 119 22 337 102 23 338 101 23 339 101 92 340 128 88 341 119 92 342 127 23 343 23 24 344 24 24 345 24 96 346 135 92 347 127 96 348 135 24 349 24 25 350 25 25 351 25 100 352 139 96 353 135 100 354 139 25 355 25 26 356 26 26 357 26 104 358 143 100 359 139 104 360 143 26 361 26 27 362 27 27 363 27 108 364 147 104 365 143 108 366 147 27 367 27 28 368 28 28 369 28 112 370 151 108 371 147 112 372 151 28 373 28 29 374 29 29 375 29 116 376 155 112 377 151 116 378 155 29 379 29 30 380 30 30 381 30 120 382 159 116 383 155 120 384 159 30 385 30 31 386 31 31 387 31 124 388 163 120 389 159 124 390 163 31 391 31 32 392 32 32 393 32 128 394 167 124 395 163 128 396 167 32 397 32 33 398 33 33 399 33 132 400 171 128 401 167 132 402 171 33 403 33 34 404 34 34 405 34 136 406 175 132 407 171 136 408 175 34 409 34 35 410 35 35 411 35 140 412 179 136 413 175 140 414 179 35 415 35 18 416 18 18 417 18 72 418 103 140 419 179 73 420 104 72 421 103 76 422 107 76 423 107 77 424 108 73 425 104 74 426 105 73 427 104 77 428 108 77 429 108 78 430 109 74 431 105 75 432 106 74 433 105 78 434 109 78 435 109 79 436 110 75 437 106 54 438 83 75 439 106 79 440 110 79 441 110 55 442 84 54 443 83 77 444 108 76 445 107 80 446 111 80 447 111 81 448 112 77 449 108 78 450 109 77 451 108 81 452 112 81 453 112 82 454 113 78 455 109 79 456 110 78 457 109 82 458 113 82 459 113 83 460 114 79 461 110 55 462 84 79 463 110 83 464 114 83 465 114 56 466 85 55 467 84 81 468 112 80 469 111 84 470 115 84 471 115 85 472 116 81 473 112 82 474 113 81 475 112 85 476 116 85 477 116 86 478 117 82 479 113 83 480 114 82 481 113 86 482 117 86 483 117 87 484 118 83 485 114 56 486 85 83 487 114 87 488 118 87 489 118 57 490 86 56 491 85 85 492 116 84 493 115 88 494 120 88 495 120 89 496 122 85 497 116 86 498 117 85 499 116 89 500 122 89 501 122 90 502 124 86 503 117 87 504 118 86 505 117 90 506 124 90 507 124 91 508 126 87 509 118 57 510 86 87 511 118 91 512 126 91 513 126 58 514 87 57 515 86 89 516 121 88 517 119 92 518 128 92 519 128 93 520 130 89 521 121 90 522 123 89 523 121 93 524 130 93 525 130 94 526 132 90 527 123 91 528 125 90 529 123 94 530 132 94 531 132 95 532 134 91 533 125 58 534 56 91 535 125 95 536 134 95 537 134 59 538 88 58 539 56 93 540 129 92 541 127 96 542 135 96 543 135 97 544 136 93 545 129 94 546 131 93 547 129 97 548 136 97 549 136 98 550 137 94 551 131 95 552 133 94 553 131 98 554 137 98 555 137 99 556 138 95 557 133 59 558 88 95 559 133 99 560 138 99 561 138 60 562 89 59 563 88 97 564 136 96 565 135 100 566 139 100 567 139 101 568 140 97 569 136 98 570 137 97 571 136 101 572 140 101 573 140 102 574 141 98 575 137 99 576 138 98 577 137 102 578 141 102 579 141 103 580 142 99 581 138 60 582 89 99 583 138 103 584 142 103 585 142 61 586 90 60 587 89 101 588 140 100 589 139 104 590 143 104 591 143 105 592 144 101 593 140 102 594 141 101 595 140 105 596 144 105 597 144 106 598 145 102 599 141 103 600 142 102 601 141 106 602 145 106 603 145 107 604 146 103 605 142 61 606 90 103 607 142 107 608 146 107 609 146 62 610 91 61 611 90 105 612 144 104 613 143 108 614 147 108 615 147 109 616 148 105 617 144 106 618 145 105 619 144 109 620 148 109 621 148 110 622 149 106 623 145 107 624 146 106 625 145 110 626 149 110 627 149 111 628 150 107 629 146 62 630 91 107 631 146 111 632 150 111 633 150 63 634 92 62 635 91 109 636 148 108 637 147 112 638 151 112 639 151 113 640 152 109 641 148 110 642 149 109 643 148 113 644 152 113 645 152 114 646 153 110 647 149 111 648 150 110 649 149 114 650 153 114 651 153 115 652 154 111 653 150 63 654 92 111 655 150 115 656 154 115 657 154 64 658 93 63 659 92 113 660 152 112 661 151 116 662 155 116 663 155 117 664 156 113 665 152 114 666 153 113 667 152 117 668 156 117 669 156 118 670 157 114 671 153 115 672 154 114 673 153 118 674 157 118 675 157 119 676 158 115 677 154 64 678 93 115 679 154 119 680 158 119 681 158 65 682 94 64 683 93 117 684 156 116 685 155 120 686 159 120 687 159 121 688 160 117 689 156 118 690 157 117 691 156 121 692 160 121 693 160 122 694 161 118 695 157 119 696 158 118 697 157 122 698 161 122 699 161 123 700 162 119 701 158 65 702 94 119 703 158 123 704 162 123 705 162 66 706 95 65 707 94 121 708 160 120 709 159 124 710 163 124 711 163 125 712 164 121 713 160 122 714 161 121 715 160 125 716 164 125 717 164 126 718 165 122 719 161 123 720 162 122 721 161 126 722 165 126 723 165 127 724 166 123 725 162 66 726 95 123 727 162 127 728 166 127 729 166 67 730 96 66 731 95 125 732 164 124 733 163 128 734 167 128 735 167 129 736 168 125 737 164 126 738 165 125 739 164 129 740 168 129 741 168 130 742 169 126 743 165 127 744 166 126 745 165 130 746 169 130 747 169 131 748 170 127 749 166 67 750 96 127 751 166 131 752 170 131 753 170 68 754 97 67 755 96 129 756 168 128 757 167 132 758 171 132 759 171 133 760 172 129 761 168 130 762 169 129 763 168 133 764 172 133 765 172 134 766 173 130 767 169 131 768 170 130 769 169 134 770 173 134 771 173 135 772 174 131 773 170 68 774 97 131 775 170 135 776 174 135 777 174 69 778 98 68 779 97 133 780 172 132 781 171 136 782 175 136 783 175 137 784 176 133 785 172 134 786 173 133 787 172 137 788 176 137 789 176 138 790 177 134 791 173 135 792 174 134 793 173 138 794 177 138 795 177 139 796 178 135 797 174 69 798 98 135 799 174 139 800 178 139 801 178 70 802 99 69 803 98 137 804 176 136 805 175 140 806 179 140 807 179 141 808 180 137 809 176 138 810 177 137 811 176 141 812 180 141 813 180 142 814 181 138 815 177 139 816 178 138 817 177 142 818 181 142 819 181 143 820 182 139 821 178 70 822 99 139 823 178 143 824 182 143 825 182 71 826 100 70 827 99 141 828 180 140 829 179 72 830 103 72 831 103 73 832 104 141 833 180 142 834 181 141 835 180 73 836 104 73 837 104 74 838 105 142 839 181 143 840 182 142 841 181 74 842 105 74 843 105 75 844 106 143 845 182 71 846 100 143 847 182 75 848 106 75 849 106 54 850 83 71 851 100</p> + </triangles> + </mesh> + </geometry> + </library_geometries> + <library_controllers> + <controller id="Cylinder01Controller"> + <skin source="#Cylinder01-lib"> + <bind_shape_matrix>1.000000 0.000000 0.000000 0.376294 0.000000 -0.000000 -1.000000 -0.000000 0.000000 1.000000 -0.000000 0.564440 0.000000 0.000000 0.000000 1.000000 +</bind_shape_matrix> + <source id="Cylinder01Controller-Joints"> + <Name_array id="Cylinder01Controller-Joints-array" count="2"> + Bone01 Bone02</Name_array> + <technique_common> + <accessor source="#Cylinder01Controller-Joints-array" count="2"> + <param type="name"/> + </accessor> + </technique_common> + </source> + <source id="Cylinder01Controller-Matrices"> + <float_array id="Cylinder01Controller-Matrices-array" count="32"> + +-0.000013 -1.000000 0.000000 0.000000 0.654934 -0.000009 0.755686 -0.000003 -0.755686 0.000010 0.654934 0.000003 0.000000 0.000000 0.000000 1.000000 +-0.000559 -0.999920 0.012674 -95.076286 0.741504 0.008089 0.670900 0.770038 -0.670948 0.009773 0.741440 0.928359 0.000000 0.000000 0.000000 1.000000</float_array> + <technique_common> + <accessor source="#Cylinder01Controller-Matrices-array" count="2" stride="16"> + <param type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="Cylinder01Controller-Weights"> + <float_array id="Cylinder01Controller-Weights-array" count="199"> + +1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 +1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 +1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 +1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 +1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.600000 0.400000 0.400000 0.600000 0.200000 0.800000 +1.000000 0.600000 0.400000 0.400000 0.600000 0.200000 0.800000 1.000000 0.600000 0.400000 0.400000 0.600000 0.200000 0.800000 1.000000 0.600000 +0.400000 0.400000 0.600000 0.200000 0.800000 1.000000 0.600000 0.400000 0.400000 0.600000 0.200000 0.800000 1.000000 0.600000 0.400000 0.400000 +0.600000 0.200000 0.800000 1.000000 0.600000 0.400000 0.400000 0.600000 0.200000 0.800000 1.000000 0.600000 0.400000 0.400000 0.600000 0.200000 +0.800000 1.000000 0.600000 0.400000 0.400000 0.600000 0.200000 0.800000 1.000000 0.600000 0.400000 0.400000 0.600000 0.200000 0.800000 1.000000 +0.600000 0.400000 0.400000 0.600000 0.200000 0.800000 1.000000 0.600000 0.400000 0.400000 0.600000 0.200000 0.800000 1.000000 0.600000 0.400000 +0.400000 0.600000 0.200000 0.800000 1.000000 0.600000 0.400000 0.400000 0.600000 0.200000 0.800000 1.000000 0.600000 0.400000 0.400000 0.600000 +0.200000 0.800000 1.000000 0.600000 0.400000 0.400000 0.600000 0.200000 0.800000 1.000000 0.600000 0.400000 0.400000 0.600000 0.200000 0.800000 +1.000000 0.600000 0.400000 0.400000 0.600000 0.200000 0.800000</float_array> + <technique_common> + <accessor source="#Cylinder01Controller-Weights-array" count="199"> + <param type="float"/> + </accessor> + </technique_common> + </source> + <joints> + <input semantic="JOINT" source="#Cylinder01Controller-Joints"/> + <input semantic="INV_BIND_MATRIX" source="#Cylinder01Controller-Matrices"/> + </joints> + <vertex_weights count="144"> + <input semantic="JOINT" offset="0" source="#Cylinder01Controller-Joints"/> + <input semantic="WEIGHT" offset="1" source="#Cylinder01Controller-Weights"/> + <vcount>1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2 1 2 2 2</vcount> + <v>0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 1 37 1 38 1 39 1 40 1 41 1 42 1 43 1 44 1 45 1 46 1 47 1 48 1 49 1 50 1 51 1 52 1 53 1 54 1 55 1 56 1 57 1 58 1 59 1 60 1 61 1 62 1 63 1 64 1 65 1 66 1 67 1 68 1 69 1 70 1 71 1 72 0 73 0 74 1 75 0 76 1 77 0 78 1 79 0 80 0 81 1 82 0 83 1 84 0 85 1 86 0 87 0 88 1 89 0 90 1 91 0 92 1 93 0 94 0 95 1 96 0 97 1 98 0 99 1 100 0 101 0 102 1 103 0 104 1 105 0 106 1 107 0 108 0 109 1 110 0 111 1 112 0 113 1 114 0 115 0 116 1 117 0 118 1 119 0 120 1 121 0 122 0 123 1 124 0 125 1 126 0 127 1 128 0 129 0 130 1 131 0 132 1 133 0 134 1 135 0 136 0 137 1 138 0 139 1 140 0 141 1 142 0 143 0 144 1 145 0 146 1 147 0 148 1 149 0 150 0 151 1 152 0 153 1 154 0 155 1 156 0 157 0 158 1 159 0 160 1 161 0 162 1 163 0 164 0 165 1 166 0 167 1 168 0 169 1 170 0 171 0 172 1 173 0 174 1 175 0 176 1 177 0 178 0 179 1 180 0 181 1 182 0 183 1 184 0 185 0 186 1 187 0 188 1 189 0 190 1 191 0 192 0 193 1 194 0 195 1 196 0 197 1 198</v> + </vertex_weights> + </skin> + </controller> + </library_controllers> + <library_animations> + <animation id="Bone02-anim" name="Bone02"> + <animation> + <source id="Bone02-Matrix-animation-input"> + <float_array id="Bone02-Matrix-animation-input-array" count="91"> + +0.000000 0.033333 0.066667 0.100000 0.133333 0.166667 0.200000 0.233333 0.266667 0.300000 0.333333 0.366667 0.400000 0.433333 0.466667 0.500000 +0.533333 0.566667 0.600000 0.633333 0.666667 0.700000 0.733333 0.766667 0.800000 0.833333 0.866667 0.900000 0.933333 0.966667 1.000000 1.033333 +1.066667 1.100000 1.133333 1.166667 1.200000 1.233333 1.266667 1.300000 1.333333 1.366667 1.400000 1.433333 1.466667 1.500000 1.533333 1.566667 +1.600000 1.633333 1.666667 1.700000 1.733333 1.766667 1.800000 1.833333 1.866667 1.900000 1.933333 1.966667 2.000000 2.033333 2.066667 2.100000 +2.133333 2.166667 2.200000 2.233333 2.266667 2.300000 2.333333 2.366667 2.400000 2.433333 2.466667 2.500000 2.533333 2.566667 2.600000 2.633333 +2.666667 2.700000 2.733333 2.766667 2.800000 2.833333 2.866667 2.900000 2.933333 2.966667 3.000000</float_array> + <technique_common> + <accessor source="#Bone02-Matrix-animation-input-array" count="91"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="Bone02-Matrix-animation-output-transform"> + <float_array id="Bone02-Matrix-animation-output-transform-array" count="1456"> + +0.999920 -0.008098 -0.009764 95.083931 0.009220 0.992626 0.120868 -0.000011 0.008713 -0.120949 0.992621 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.999708 -0.016567 -0.017568 95.083931 0.018610 0.992191 0.123334 -0.000011 0.015388 -0.123625 0.992210 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.998403 -0.040160 -0.039740 95.083931 0.045000 0.990553 0.129534 -0.000011 0.034163 -0.131116 0.990778 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.994326 -0.075907 -0.074524 95.083931 0.085603 0.986871 0.136961 -0.000011 0.063149 -0.142563 0.987769 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.985417 -0.120633 -0.120002 95.083931 0.137364 0.980197 0.142637 -0.000011 0.100419 -0.157041 0.982473 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.969795 -0.171122 -0.173827 95.083931 0.196884 0.969841 0.143682 -0.000011 0.143998 -0.173566 0.974238 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.946223 -0.224304 -0.233130 95.083931 0.260479 0.955593 0.137811 -0.000011 0.191866 -0.191125 0.962631 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.914446 -0.277438 -0.294647 95.083931 0.324391 0.937795 0.123734 -0.000011 0.241990 -0.208729 0.947562 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.875338 -0.328250 -0.355014 95.083931 0.385104 0.917286 0.101397 -0.000011 0.292366 -0.225474 0.929346 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.830871 -0.374993 -0.411138 95.083931 0.439689 0.895258 0.072017 -0.000011 0.341069 -0.240610 0.908724 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.783896 -0.416422 -0.460544 95.083931 0.486087 0.873087 0.037931 -0.000011 0.386300 -0.253598 0.886826 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.737826 -0.451685 -0.501591 95.083931 0.523242 0.852181 0.002279 -0.000011 0.426417 -0.264135 0.865102 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.696284 -0.480175 -0.533498 95.083931 0.551040 0.833889 -0.031363 -0.000011 0.459938 -0.272141 0.845220 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.662804 -0.501368 -0.556166 95.083931 0.570061 0.819455 -0.059352 -0.000011 0.485510 -0.277710 0.828949 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.640641 -0.514681 -0.569809 95.083931 0.581147 0.810026 -0.078268 -0.000011 0.501843 -0.281002 0.818041 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.632680 -0.519339 -0.574459 95.083931 0.584852 0.806660 -0.085133 -0.000011 0.507606 -0.282111 0.814094 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.636249 -0.516813 -0.572792 95.083931 0.583273 0.808195 -0.081320 -0.000011 0.504955 -0.282355 0.815657 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.646583 -0.509445 -0.567800 95.083931 0.578537 0.812622 -0.070295 -0.000011 0.497218 -0.283041 0.820160 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.663055 -0.497517 -0.559316 95.083931 0.570473 0.819619 -0.052777 -0.000011 0.484683 -0.284081 0.827273 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.684945 -0.481287 -0.547004 95.083931 0.558740 0.828815 -0.029600 -0.000011 0.467611 -0.285358 0.836607 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.711433 -0.460992 -0.530424 95.083931 0.542890 0.839802 -0.001719 -0.000011 0.446244 -0.286739 0.847731 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.741591 -0.436861 -0.509112 95.083931 0.522446 0.852151 0.029797 -0.000011 0.420823 -0.288080 0.860185 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.774388 -0.409119 -0.482644 95.083931 0.496962 0.865426 0.063771 -0.000011 0.391603 -0.289239 0.873492 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.808692 -0.377996 -0.450706 95.083931 0.466088 0.879189 0.098938 -0.000011 0.358857 -0.290078 0.887173 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.843305 -0.343732 -0.413141 95.083931 0.429626 0.893014 0.133968 -0.000011 0.322892 -0.290472 0.900759 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.876987 -0.306582 -0.370003 95.083931 0.387572 0.906491 0.167518 -0.000011 0.284046 -0.290314 0.913803 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.908513 -0.266821 -0.321576 95.083931 0.340149 0.919231 0.198274 -0.000011 0.242699 -0.289518 0.925892 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.936725 -0.224750 -0.268390 95.083931 0.287818 0.930875 0.225017 -0.000011 0.199265 -0.288026 0.936661 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.960591 -0.180703 -0.211212 95.083931 0.231275 0.941096 0.246680 -0.000011 0.154195 -0.285806 0.945800 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.979263 -0.135046 -0.151017 95.083931 0.171424 0.949608 0.262409 -0.000011 0.107970 -0.282856 0.953066 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.992125 -0.088186 -0.088943 95.083931 0.109340 0.956175 0.271614 -0.000011 0.061092 -0.279200 0.958288 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.998833 -0.040568 -0.026228 95.083931 0.046210 0.960619 0.273999 -0.000011 0.014079 -0.274892 0.961372 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.999330 0.007322 0.035853 95.083931 -0.016727 0.962830 0.269589 -0.000011 -0.032546 -0.270008 0.962308 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.993856 0.054965 0.096063 95.083931 -0.078253 0.962777 0.258720 -0.000011 -0.078267 -0.264648 0.961164 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.982926 0.101811 0.153270 95.083931 -0.137230 0.960516 0.242028 -0.000011 -0.122577 -0.258929 0.958087 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.967295 0.147295 0.206504 95.083931 -0.192657 0.956193 0.220405 -0.000011 -0.164993 -0.252981 0.953298 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.947921 0.190842 0.255000 95.083931 -0.243714 0.950051 0.194951 -0.000011 -0.205058 -0.246945 0.947085 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.925902 0.231884 0.298221 95.083931 -0.289783 0.942425 0.166915 -0.000011 -0.242346 -0.240967 0.939789 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.902423 0.269868 0.335864 95.083931 -0.330456 0.933732 0.137635 -0.000011 -0.276464 -0.235194 0.931800 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.878700 0.304266 0.367843 95.083931 -0.365522 0.924460 0.108477 -0.000011 -0.307050 -0.229773 0.923539 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.855934 0.334578 0.394252 95.083931 -0.394934 0.915151 0.080782 -0.000011 -0.333773 -0.224847 0.915445 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.835265 0.360336 0.415320 95.083931 -0.418771 0.906374 0.055825 -0.000011 -0.356319 -0.220553 0.907961 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.817744 0.381101 0.431342 95.083931 -0.437178 0.898702 0.034785 -0.000011 -0.374392 -0.217019 0.901517 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.804313 0.396448 0.442616 95.083931 -0.450304 0.892679 0.018716 -0.000011 -0.387694 -0.214365 0.896516 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.795783 0.405966 0.449357 95.083931 -0.458233 0.888791 0.008535 -0.000011 -0.395920 -0.212702 0.893311 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.792818 0.409234 0.451627 95.083931 -0.460918 0.887429 0.005001 -0.000011 -0.398740 -0.212128 0.892193 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.795783 0.405966 0.449357 95.083931 -0.458233 0.888791 0.008535 -0.000011 -0.395920 -0.212702 0.893311 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.804313 0.396448 0.442616 95.083931 -0.450304 0.892679 0.018716 -0.000011 -0.387694 -0.214365 0.896516 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.817744 0.381101 0.431342 95.083931 -0.437178 0.898702 0.034785 -0.000011 -0.374392 -0.217019 0.901517 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.835265 0.360336 0.415320 95.083931 -0.418771 0.906374 0.055825 -0.000011 -0.356319 -0.220553 0.907961 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.855934 0.334578 0.394252 95.083931 -0.394934 0.915151 0.080781 -0.000011 -0.333773 -0.224847 0.915445 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.878700 0.304266 0.367843 95.083931 -0.365522 0.924460 0.108477 -0.000011 -0.307050 -0.229773 0.923539 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.902423 0.269868 0.335864 95.083931 -0.330456 0.933732 0.137635 -0.000011 -0.276464 -0.235194 0.931800 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.925902 0.231884 0.298221 95.083931 -0.289783 0.942425 0.166915 -0.000011 -0.242346 -0.240967 0.939789 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.947921 0.190842 0.255000 95.083931 -0.243714 0.950051 0.194951 -0.000011 -0.205058 -0.246945 0.947085 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.967295 0.147294 0.206504 95.083931 -0.192657 0.956193 0.220405 -0.000011 -0.164993 -0.252981 0.953298 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.982926 0.101811 0.153270 95.083931 -0.137230 0.960516 0.242028 -0.000011 -0.122577 -0.258929 0.958087 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.993857 0.054965 0.096063 95.083931 -0.078253 0.962777 0.258721 -0.000011 -0.078267 -0.264648 0.961164 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.999330 0.007322 0.035853 95.083931 -0.016727 0.962830 0.269589 -0.000011 -0.032546 -0.270008 0.962308 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.998832 -0.040568 -0.026228 95.083931 0.046210 0.960619 0.273999 -0.000011 0.014079 -0.274892 0.961372 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.992125 -0.088186 -0.088943 95.083931 0.109340 0.956175 0.271614 -0.000011 0.061092 -0.279200 0.958288 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.979263 -0.135046 -0.151017 95.083931 0.171424 0.949608 0.262409 -0.000011 0.107970 -0.282856 0.953066 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.960591 -0.180703 -0.211212 95.083931 0.231275 0.941096 0.246680 -0.000011 0.154195 -0.285806 0.945800 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.936725 -0.224750 -0.268390 95.083931 0.287818 0.930875 0.225017 -0.000011 0.199265 -0.288026 0.936661 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.908513 -0.266821 -0.321576 95.083931 0.340149 0.919231 0.198274 -0.000011 0.242699 -0.289518 0.925892 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.876987 -0.306582 -0.370003 95.083931 0.387572 0.906491 0.167518 -0.000011 0.284046 -0.290314 0.913803 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.843304 -0.343732 -0.413142 95.083931 0.429626 0.893014 0.133968 -0.000011 0.322892 -0.290472 0.900759 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.808692 -0.377996 -0.450706 95.083931 0.466088 0.879189 0.098937 -0.000011 0.358858 -0.290078 0.887173 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.774388 -0.409119 -0.482644 95.083931 0.496962 0.865426 0.063771 -0.000011 0.391603 -0.289239 0.873492 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.741591 -0.436861 -0.509112 95.083931 0.522446 0.852151 0.029797 -0.000011 0.420823 -0.288080 0.860185 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.711433 -0.460992 -0.530424 95.083931 0.542890 0.839802 -0.001719 -0.000011 0.446244 -0.286739 0.847731 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.684945 -0.481287 -0.547004 95.083931 0.558740 0.828815 -0.029600 -0.000011 0.467611 -0.285358 0.836607 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.663055 -0.497517 -0.559316 95.083931 0.570473 0.819619 -0.052777 -0.000011 0.484683 -0.284081 0.827273 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.646583 -0.509445 -0.567800 95.083931 0.578537 0.812622 -0.070295 -0.000011 0.497218 -0.283041 0.820160 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.636249 -0.516813 -0.572792 95.083931 0.583273 0.808195 -0.081320 -0.000011 0.504955 -0.282355 0.815657 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.632680 -0.519339 -0.574459 95.083931 0.584852 0.806660 -0.085133 -0.000011 0.507606 -0.282111 0.814094 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.640641 -0.514681 -0.569809 95.083931 0.581147 0.810026 -0.078268 -0.000011 0.501843 -0.281002 0.818041 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.662804 -0.501368 -0.556166 95.083931 0.570061 0.819455 -0.059352 -0.000011 0.485510 -0.277710 0.828949 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.696284 -0.480175 -0.533498 95.083931 0.551040 0.833889 -0.031363 -0.000011 0.459938 -0.272141 0.845220 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.737826 -0.451685 -0.501590 95.083931 0.523241 0.852181 0.002279 -0.000011 0.426417 -0.264135 0.865102 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.783896 -0.416422 -0.460544 95.083931 0.486087 0.873087 0.037931 -0.000011 0.386300 -0.253598 0.886826 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.830871 -0.374993 -0.411138 95.083931 0.439689 0.895258 0.072017 -0.000011 0.341069 -0.240610 0.908724 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.875338 -0.328250 -0.355014 95.083931 0.385104 0.917286 0.101397 -0.000011 0.292366 -0.225474 0.929346 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.914446 -0.277438 -0.294647 95.083931 0.324391 0.937795 0.123734 -0.000011 0.241990 -0.208729 0.947562 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.946223 -0.224304 -0.233130 95.083931 0.260479 0.955593 0.137811 -0.000011 0.191866 -0.191125 0.962631 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.969795 -0.171122 -0.173827 95.083931 0.196884 0.969841 0.143682 -0.000011 0.143998 -0.173566 0.974238 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.985417 -0.120633 -0.120002 95.083931 0.137364 0.980197 0.142637 -0.000011 0.100419 -0.157041 0.982473 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.994326 -0.075907 -0.074524 95.083931 0.085603 0.986871 0.136961 -0.000011 0.063149 -0.142563 0.987769 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.998403 -0.040160 -0.039740 95.083931 0.045000 0.990553 0.129534 -0.000011 0.034163 -0.131116 0.990778 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.999708 -0.016567 -0.017568 95.083931 0.018610 0.992191 0.123334 -0.000011 0.015388 -0.123625 0.992210 -0.000003 0.000000 0.000000 0.000000 1.000000 +0.999920 -0.008098 -0.009764 95.083931 0.009220 0.992626 0.120868 -0.000011 0.008713 -0.120949 0.992621 -0.000003 0.000000 0.000000 0.000000 1.000000</float_array> + <technique_common> + <accessor source="#Bone02-Matrix-animation-output-transform-array" count="91" stride="16"> + <param type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="Bone02-Interpolations"> + <Name_array id="Bone02-Interpolations-array" count="91"> + LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR +LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR +LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR +LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR +LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR +LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR +LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR +LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#Bone02-Interpolations-array" count="91"> + <param type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="Bone02-Matrix-animation-transform"> + <input semantic="INPUT" source="#Bone02-Matrix-animation-input"/> + <input semantic="OUTPUT" source="#Bone02-Matrix-animation-output-transform"/> + <input semantic="INTERPOLATION" source="#Bone02-Interpolations"/> + </sampler> + <channel source="#Bone02-Matrix-animation-transform" target="Bone02/matrix"/> + </animation> + </animation> + </library_animations> + <library_visual_scenes> + <visual_scene id="AnimSimple" name="AnimSimple"> + <node name="Bone01" id="Bone01" sid="Bone01" type="JOINT"> + <matrix sid="matrix">-0.000013 0.654934 -0.755686 0.000004 -1.000000 -0.000009 0.000010 0.000000 0.000000 0.755686 0.654934 0.000000 0.000000 0.000000 0.000000 1.000000</matrix> + <extra> + <technique profile="FCOLLADA"> + <visibility>1.000000</visibility> + </technique> + </extra> + <node name="Bone02" id="Bone02" sid="Bone02" type="JOINT"> + <matrix sid="matrix">0.999920 -0.008098 -0.009764 95.083931 0.009220 0.992626 0.120868 -0.000011 0.008713 -0.120949 0.992621 -0.000003 0.000000 0.000000 0.000000 1.000000</matrix> + <extra> + <technique profile="FCOLLADA"> + <visibility>1.000000</visibility> + </technique> + </extra> + </node> + </node> + <node name="Cylinder01" id="Cylinder01" sid="Cylinder01"> + <instance_controller url="#Cylinder01Controller"/> + <extra> + <technique profile="FCOLLADA"> + <visibility>1.000000</visibility> + </technique> + </extra> + </node> + <extra> + <technique profile="MAX3D"> + <frame_rate>30.000000</frame_rate> + </technique> + <technique profile="FCOLLADA"> + <start_time>0.000000</start_time> + <end_time>3.000000</end_time> + </technique> + </extra> + </visual_scene> + </library_visual_scenes> + <scene> + <instance_visual_scene url="#AnimSimple"/> + </scene> +</COLLADA> From c6f457c7d0326f6263edada36f6113f35cfa8aca Mon Sep 17 00:00:00 2001 From: chapulina <burajiru.no.chapulina@gmail.com> Date: Thu, 20 Feb 2020 17:08:11 -0800 Subject: [PATCH 040/219] Bump to 3.4.0 Signed-off-by: Michael Carroll <michael@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 48cf42cc4..1c1ec8cb0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ find_package(ignition-cmake2 REQUIRED) #============================================================================ # Configure the project #============================================================================ -ign_configure_project(VERSION_SUFFIX pre1) +ign_configure_project() #============================================================================ # Set project-specific options diff --git a/Changelog.md b/Changelog.md index 06640d7c6..7393f379b 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,8 @@ ## Ignition Common 3.X.X +## Ignition Common 3.4.0 (2019-02-20) + 1. Add PBR material class * [Pull request 227](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/227) @@ -23,6 +25,9 @@ 1. Add function to get NodeAnimation * [Pull request 223](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/223) +1. Handle unexpected COLLADA more gracefully + * [Pull request 218](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/218) + 1. Add support for alpha based texture transparency. * [Pull request 221](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/221) From cfac7729ffb6899b0b4b48b3c7277fcc85a6fd6b Mon Sep 17 00:00:00 2001 From: Ian Chen <ichen@osrfoundation.org> Date: Mon, 2 Mar 2020 18:41:41 -0800 Subject: [PATCH 041/219] Merged in port_obj_invalid_mtl (pull request #230) Port obj invalid mtl fix from gazebo Approved-by: Ian Chen Signed-off-by: Michael Carroll <michael@openrobotics.org> --- Changelog.md | 3 +++ graphics/src/ColladaLoader.cc | 5 ----- graphics/src/OBJLoader.cc | 5 ----- graphics/src/Pbr.cc | 2 +- graphics/src/Pbr_TEST.cc | 4 ++-- 5 files changed, 6 insertions(+), 13 deletions(-) diff --git a/Changelog.md b/Changelog.md index 7393f379b..88555edf5 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,9 @@ ## Ignition Common 3.X.X +1. Update PBR metalness default value to 0.0 + * [Pull request 231](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/231) + ## Ignition Common 3.4.0 (2019-02-20) 1. Add PBR material class diff --git a/graphics/src/ColladaLoader.cc b/graphics/src/ColladaLoader.cc index bc79f9175..cf49430f9 100644 --- a/graphics/src/ColladaLoader.cc +++ b/graphics/src/ColladaLoader.cc @@ -1823,11 +1823,6 @@ MaterialPtr ColladaLoaderPrivate::LoadMaterial(const std::string &_name) if (cgXml) ignerr << "profile_CG unsupported\n"; - // set default PBR material properties - common::Pbr pbr; - pbr.SetMetalness(0.0); - mat->SetPbrMaterial(pbr); - this->materialIds[_name] = mat; return mat; diff --git a/graphics/src/OBJLoader.cc b/graphics/src/OBJLoader.cc index 87cdb124d..df1c2a8da 100644 --- a/graphics/src/OBJLoader.cc +++ b/graphics/src/OBJLoader.cc @@ -133,11 +133,6 @@ Mesh *OBJLoader::Load(const std::string &_filename) if (!m.diffuse_texname.empty()) mat->SetTextureImage(m.diffuse_texname, path.c_str()); materialIds[m.name] = mat; - - // set default PBR material properties - common::Pbr pbr; - pbr.SetMetalness(0.0); - mat->SetPbrMaterial(pbr); } int matIndex = mesh->IndexOfMaterial(mat); if (matIndex < 0) diff --git a/graphics/src/Pbr.cc b/graphics/src/Pbr.cc index 7e37233df..f3024a303 100644 --- a/graphics/src/Pbr.cc +++ b/graphics/src/Pbr.cc @@ -54,7 +54,7 @@ class ignition::common::PbrPrivate public: double roughness = 0.5; /// \brief Metalness value (metal workflow only) - public: double metalness = 0.5; + public: double metalness = 0.0; /// \brief Specular map (specular workflow only) public: std::string specularMap = ""; diff --git a/graphics/src/Pbr_TEST.cc b/graphics/src/Pbr_TEST.cc index 5d11f05df..b7e89b072 100644 --- a/graphics/src/Pbr_TEST.cc +++ b/graphics/src/Pbr_TEST.cc @@ -33,7 +33,7 @@ TEST(Pbr, BasicAPI) EXPECT_EQ(std::string(), pbr.MetalnessMap()); EXPECT_EQ(std::string(), pbr.EmissiveMap()); EXPECT_DOUBLE_EQ(0.5, pbr.Roughness()); - EXPECT_DOUBLE_EQ(0.5, pbr.Metalness()); + EXPECT_DOUBLE_EQ(0.0, pbr.Metalness()); EXPECT_EQ(std::string(), pbr.SpecularMap()); EXPECT_EQ(std::string(), pbr.GlossinessMap()); EXPECT_DOUBLE_EQ(0.0, pbr.Glossiness()); @@ -109,7 +109,7 @@ TEST(Pbr, MoveCopy) EXPECT_EQ(std::string(), pbr2.RoughnessMap()); EXPECT_EQ(std::string(), pbr2.MetalnessMap()); EXPECT_DOUBLE_EQ(0.5, pbr2.Roughness()); - EXPECT_DOUBLE_EQ(0.5, pbr2.Metalness()); + EXPECT_DOUBLE_EQ(0.0, pbr2.Metalness()); } // move From ea290c2eb8f27aec1ff0deecfc9f997b39749755 Mon Sep 17 00:00:00 2001 From: Luca Della Vedova <luca@openrobotics.org> Date: Tue, 25 Feb 2020 12:33:33 +0800 Subject: [PATCH 042/219] Merged in pbr_common3 (pull request #231) Set default PBR metalness value Approved-by: Louise Poubel <lupoubel@hotmail.com> Approved-by: Luca Della Vedova <lucadellavr@gmail.com> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- Changelog.md | 3 ++ graphics/src/OBJLoader.cc | 56 +++++++++++++++++++--------------- graphics/src/OBJLoader_TEST.cc | 13 ++++++++ test/data/invalid_material.obj | 51 +++++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 24 deletions(-) create mode 100644 test/data/invalid_material.obj diff --git a/Changelog.md b/Changelog.md index 88555edf5..5d202feb0 100644 --- a/Changelog.md +++ b/Changelog.md @@ -17,6 +17,9 @@ 1. Update PBR metalness default value to 0.0 * [Pull request 231](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/231) +1. Fix crash when loading OBJ meshes with invalid materials + * [Pull request 230](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/230) + ## Ignition Common 3.4.0 (2019-02-20) 1. Add PBR material class diff --git a/graphics/src/OBJLoader.cc b/graphics/src/OBJLoader.cc index df1c2a8da..546ab242e 100644 --- a/graphics/src/OBJLoader.cc +++ b/graphics/src/OBJLoader.cc @@ -93,7 +93,7 @@ Mesh *OBJLoader::Load(const std::string &_filename) Mesh *mesh = new Mesh(); mesh->SetPath(path); - for (auto const s : shapes) + for (auto const &s : shapes) { // obj mesh assigns a material id to each 'face' but ignition assigns a // single material to each 'submesh'. The strategy here is to identify @@ -110,34 +110,42 @@ Mesh *OBJLoader::Load(const std::string &_filename) subMeshMatId[id] = subMesh.get(); Material *mat = nullptr; - auto m = materials[id]; - if (materialIds.find(m.name) != materialIds.end()) + if (id >= 0 && static_cast<size_t>(id) < materials.size()) { - mat = materialIds[m.name]; + auto &m = materials[id]; + if (materialIds.find(m.name) != materialIds.end()) + { + mat = materialIds[m.name]; + } + else + { + // Create new material and pass it to mesh who will take ownership + // of the object + mat = new Material(); + mat->SetAmbient( + math::Color(m.ambient[0], m.ambient[1], m.ambient[2])); + mat->SetDiffuse( + math::Color(m.diffuse[0], m.diffuse[1], m.diffuse[2])); + mat->SetSpecular( + math::Color(m.specular[0], m.specular[1], m.specular[2])); + mat->SetEmissive( + math::Color(m.emission[0], m.emission[1], m.emission[2])); + mat->SetShininess(m.shininess); + mat->SetTransparency(1.0 - m.dissolve); + if (!m.diffuse_texname.empty()) + mat->SetTextureImage(m.diffuse_texname, path.c_str()); + materialIds[m.name] = mat; + } + int matIndex = mesh->IndexOfMaterial(mat); + if (matIndex < 0) + matIndex = mesh->AddMaterial(MaterialPtr(mat)); + subMesh->SetMaterialIndex(matIndex); } else { - // Create new material and pass it to mesh who will take ownership of - // the object - mat = new Material(); - mat->SetAmbient( - math::Color(m.ambient[0], m.ambient[1], m.ambient[2])); - mat->SetDiffuse( - math::Color(m.diffuse[0], m.diffuse[1], m.diffuse[2])); - mat->SetSpecular( - math::Color(m.specular[0], m.specular[1], m.specular[2])); - mat->SetEmissive( - math::Color(m.emission[0], m.emission[1], m.emission[2])); - mat->SetShininess(m.shininess); - mat->SetTransparency(1.0 - m.dissolve); - if (!m.diffuse_texname.empty()) - mat->SetTextureImage(m.diffuse_texname, path.c_str()); - materialIds[m.name] = mat; + ignwarn << "Missing material for shape[" << s.name << "] " + << "in OBJ file[" << _filename << "]" << std::endl; } - int matIndex = mesh->IndexOfMaterial(mat); - if (matIndex < 0) - matIndex = mesh->AddMaterial(MaterialPtr(mat)); - subMesh->SetMaterialIndex(matIndex); mesh->AddSubMesh(std::move(subMesh)); } } diff --git a/graphics/src/OBJLoader_TEST.cc b/graphics/src/OBJLoader_TEST.cc index ffb5dc2e9..b369a675e 100644 --- a/graphics/src/OBJLoader_TEST.cc +++ b/graphics/src/OBJLoader_TEST.cc @@ -60,6 +60,19 @@ TEST_F(OBJLoaderTest, LoadObjBox) EXPECT_DOUBLE_EQ(mat->Transparency(), 0.0); } +///////////////////////////////////////////////// +// This tests opening an OBJ file that has an invalid material reference +TEST_F(OBJLoaderTest, InvalidMaterial) +{ + ignition::common::OBJLoader objLoader; + + std::string meshFilename = std::string(PROJECT_SOURCE_PATH) + + "/test/data/invalid_material.obj"; + + ignition::common::Mesh *mesh = objLoader.Load(meshFilename); + EXPECT_TRUE(mesh != nullptr); +} + ///////////////////////////////////////////////// int main(int argc, char **argv) { diff --git a/test/data/invalid_material.obj b/test/data/invalid_material.obj new file mode 100644 index 000000000..8d864cd2b --- /dev/null +++ b/test/data/invalid_material.obj @@ -0,0 +1,51 @@ +o floor +v 6.020000 0.000000 2.410000 +v 6.020000 0.000000 -4.189999 +v -9.900001 0.000000 -4.190000 +v -9.900001 0.000000 2.410000 +v -9.900001 -0.200000 2.410000 +v 6.020000 -0.200000 2.410000 +v 6.020000 -0.200000 -4.189999 +v -9.900001 -0.200000 -4.190000 +vt 0.956522 1.000000 +vt 0.478261 0.000000 +vt 0.956521 0.000000 +vt 0.478261 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 0.985507 0.829146 +vt 1.000000 0.414573 +vt 1.000000 0.829146 +vt 0.985507 0.000000 +vt 0.971014 1.000000 +vt 0.971014 0.000000 +vt 0.985507 0.414573 +vt 1.000000 0.000000 +vt 1.000000 0.414573 +vt 0.971014 0.000000 +vt 0.478261 1.000000 +vt 0.478261 1.000000 +vt 0.985507 0.414573 +vt 0.985507 1.000000 +vt 0.985507 0.000000 +vt 0.971014 1.000000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +usemtl blank +s off +f 1/1/1 3/2/1 4/3/1 +f 8/4/2 6/5/2 5/6/2 +f 6/7/3 2/8/3 1/9/3 +f 7/10/4 3/11/4 2/12/4 +f 8/13/5 4/14/5 3/15/5 +f 5/16/6 1/1/6 4/3/6 +f 1/1/1 2/17/1 3/2/1 +f 8/4/2 7/18/2 6/5/2 +f 6/7/3 7/19/3 2/8/3 +f 7/10/4 8/20/4 3/11/4 +f 8/13/5 5/21/5 4/14/5 +f 5/16/6 6/22/6 1/1/6 From 49f79b85361d8d88f83340b303a88ea909503b34 Mon Sep 17 00:00:00 2001 From: Luca Della Vedova <luca@openrobotics.org> Date: Thu, 2 Apr 2020 14:55:53 +0800 Subject: [PATCH 043/219] Merged in animation_interpolatex_common3 (pull request #232) Add interpolateX member to the Animation class Approved-by: Ian Chen <ichen@osrfoundation.org> Approved-by: Louise Poubel <lupoubel@hotmail.com> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- Changelog.md | 3 ++ graphics/include/ignition/common/Animation.hh | 11 +++- graphics/src/Animation.cc | 54 ++++++++++++++++++- graphics/src/Animation_TEST.cc | 7 +++ 4 files changed, 72 insertions(+), 3 deletions(-) diff --git a/Changelog.md b/Changelog.md index 5d202feb0..33c780928 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,9 @@ ## Ignition Common 3.X.X +1. Add interpolate\_x property to actor animations + * [Pull request 232](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/232) + 1. Update PBR metalness default value to 0.0 * [Pull request 231](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/231) diff --git a/graphics/include/ignition/common/Animation.hh b/graphics/include/ignition/common/Animation.hh index 6f6512717..596c7840d 100644 --- a/graphics/include/ignition/common/Animation.hh +++ b/graphics/include/ignition/common/Animation.hh @@ -34,6 +34,7 @@ namespace ignition class KeyFrame; class PoseKeyFrame; class NumericKeyFrame; + class AnimationPrivate; class TrajectoryInfoPrivate; /// \class Animation Animation.hh ignition/common/Animation.hh @@ -71,6 +72,14 @@ namespace ignition /// \return The time position in seconds public: double Time() const; + /// \brief Return the interpolateX value + /// \return The interpolateX value + public: bool InterpolateX() const; + + /// \brief Set the interpolateX value + /// \param[in] _interpolateX The interpolateX value + public: void SetInterpolateX(const bool _interpolateX); + /// \brief Return the number of key frames in the animation /// \return The number of keyframes public: unsigned int KeyFrameCount() const; @@ -131,7 +140,7 @@ namespace ignition /// \param[in] _length Length of the animation in seconds /// \param[in] _loop True == loop the animation public: PoseAnimation(const std::string &_name, - const double _length, const bool _loop); + const double _length, const bool _loop); /// \brief Destructor public: virtual ~PoseAnimation(); diff --git a/graphics/src/Animation.cc b/graphics/src/Animation.cc index 07563209c..b3a66c460 100644 --- a/graphics/src/Animation.cc +++ b/graphics/src/Animation.cc @@ -15,6 +15,7 @@ * */ #include <algorithm> +#include <unordered_map> #include <ignition/math/Spline.hh> #include <ignition/math/Vector2.hh> @@ -38,6 +39,42 @@ namespace }; } +///////////////////////////////////////////////// +class ignition::common::AnimationPrivate +{ + /// \brief true if the animation is interpolated in x + public: bool interpolateX = false; +}; + +// TODO(luca) Make Animation class follow PIMPL and remove global static map +///////////////////////////////////////////////// +typedef std::unordered_map<Animation *, AnimationPrivate *> AnimationPrivateMap; +static AnimationPrivateMap animationPrivateMap; + +///////////////////////////////////////////////// +static AnimationPrivate* AnimationDataPtr(Animation *_animation) +{ + auto mapIt = animationPrivateMap.find(_animation); + if (mapIt == animationPrivateMap.end()) + { + // Create the map entry + animationPrivateMap[_animation] = new AnimationPrivate; + } + return animationPrivateMap[_animation]; +} + +///////////////////////////////////////////////// +static void DeleteAnimationDataPtr(Animation *_animation) +{ + // Delete the data pointer class and erase the hash map entry + auto mapIt = animationPrivateMap.find(_animation); + if (mapIt != animationPrivateMap.end()) + { + delete mapIt->second; + animationPrivateMap.erase(mapIt); + } +} + ///////////////////////////////////////////////// class ignition::common::TrajectoryInfoPrivate { @@ -79,6 +116,7 @@ Animation::Animation(const std::string &_name, const double _length, ///////////////////////////////////////////////// Animation::~Animation() { + DeleteAnimationDataPtr(this); } ///////////////////////////////////////////////// @@ -127,6 +165,18 @@ double Animation::Time() const return this->timePos; } +///////////////////////////////////////////////// +bool Animation::InterpolateX() const +{ + return AnimationDataPtr(const_cast<Animation *>(this))->interpolateX; +} + +///////////////////////////////////////////////// +void Animation::SetInterpolateX(const bool _interpolateX) +{ + AnimationDataPtr(this)->interpolateX = _interpolateX; +} + ///////////////////////////////////////////////// unsigned int Animation::KeyFrameCount() const { @@ -199,8 +249,8 @@ double Animation::KeyFramesAtTime(double _time, common::KeyFrame **_kf1, } ///////////////////////////////////////////////// -PoseAnimation::PoseAnimation(const std::string &_name, - const double _length, const bool _loop) +PoseAnimation::PoseAnimation(const std::string &_name, const double _length, + const bool _loop) : Animation(_name, _length, _loop) { this->positionSpline = NULL; diff --git a/graphics/src/Animation_TEST.cc b/graphics/src/Animation_TEST.cc index c79953201..8aea84452 100644 --- a/graphics/src/Animation_TEST.cc +++ b/graphics/src/Animation_TEST.cc @@ -45,6 +45,13 @@ TEST_F(AnimationTest, PoseAnimation) EXPECT_DOUBLE_EQ(1.0, anim.Time()); } + { + common::PoseAnimation anim("interpolatex_test", 1.0, true); + EXPECT_FALSE(anim.InterpolateX()); + anim.SetInterpolateX(true); + EXPECT_TRUE(anim.InterpolateX()); + } + common::PoseAnimation anim("pose_test", 5.0, false); common::PoseKeyFrame *key = anim.CreateKeyFrame(0.0); From 377eac1c0cb2b43ecc992deb1a8823dbd5f12f57 Mon Sep 17 00:00:00 2001 From: Ian Chen <ichen@osrfoundation.org> Date: Thu, 9 Apr 2020 15:15:09 -0700 Subject: [PATCH 044/219] bump ign-common 3.5.0 Signed-off-by: Michael Carroll <michael@openrobotics.org> --- Changelog.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index 33c780928..70881bc62 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,8 @@ ## Ignition Common 3.X.X +## Ignition Common 3.5.0 (2020-04-09) + 1. Add interpolate\_x property to actor animations * [Pull request 232](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/232) @@ -23,7 +25,7 @@ 1. Fix crash when loading OBJ meshes with invalid materials * [Pull request 230](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/230) -## Ignition Common 3.4.0 (2019-02-20) +## Ignition Common 3.4.0 (2020-02-20) 1. Add PBR material class * [Pull request 227](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/227) From 2dab74f74f8f7c84a3368d3b58d2b25e7e93d831 Mon Sep 17 00:00:00 2001 From: chapulina <lupoubel@hotmail.com> Date: Tue, 21 Apr 2020 19:13:41 -0700 Subject: [PATCH 045/219] [ign-common3] Update BitBucket links (#57) * [ign-common3] Update BitBucket links Signed-off-by: Louise Poubel <louise@openrobotics.org> * [ign-common3] Update BitBucket links Signed-off-by: Louise Poubel <louise@openrobotics.org> * Fix osrf/gazebo URLs to point to ign-common instead Signed-off-by: Mabel Zhang <mabel@openrobotics.org> * [ign-common3] Update BitBucket links Signed-off-by: Louise Poubel <louise@openrobotics.org> Fix osrf/gazebo URLs to point to ign-common instead Signed-off-by: Mabel Zhang <mabel@openrobotics.org> * correct link Signed-off-by: Mabel Zhang <mabel@openrobotics.org> * remove unnecessary suffix in URL Signed-off-by: Mabel Zhang <mabel@openrobotics.org> Co-authored-by: Mabel Zhang <mabel@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- .gitignore | 3 --- Changelog.md | 21 ++++++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 62b9898cc..9cd526d66 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,4 @@ -# CMake folders build build_* - -# OS generated files .DS_Store *.swp diff --git a/Changelog.md b/Changelog.md index 70881bc62..35d9a8390 100644 --- a/Changelog.md +++ b/Changelog.md @@ -17,30 +17,30 @@ ## Ignition Common 3.5.0 (2020-04-09) 1. Add interpolate\_x property to actor animations - * [Pull request 232](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/232) + * [BitBucket pull request 232](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/232) 1. Update PBR metalness default value to 0.0 - * [Pull request 231](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/231) + * [BitBucket pull request 231](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/231) 1. Fix crash when loading OBJ meshes with invalid materials - * [Pull request 230](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/230) + * [BitBucket pull request 230](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/230) ## Ignition Common 3.4.0 (2020-02-20) 1. Add PBR material class - * [Pull request 227](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/227) + * [BitBucket pull request 227](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/227) 1. Custom paths for file URIs (env var + URI) - * [Pull request 210](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/210) + * [BitBucket pull request 210](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/210) 1. Add function to get NodeAnimation - * [Pull request 223](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/223) + * [BitBucket pull request 223](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/223) 1. Handle unexpected COLLADA more gracefully - * [Pull request 218](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/218) + * [BitBucket pull request 218](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/218) 1. Add support for alpha based texture transparency. - * [Pull request 221](https://bitbucket.org/ignitionrobotics/ign-common/pull-request/221) + * [BitBucket pull request 221](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/221) 1. `tiny_obj_loader`: set better diffuse value when `map_kD` is present and `Kd` is not specified. * [BitBucket pull request 216](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/216) @@ -50,7 +50,7 @@ * [BitBucket pull request 215](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/215) 1. Compute volume of mesh shapes with `Mesh::Volume` and `SubMesh::Volume`. - * [Pull request 214](https://bitbucket.org/ignitionrobotics/ign-common/pull-requests/214) + * [BitBucket pull request 214](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/214) 1. Port Skeleton fixes from gazebo. * [BitBucket pull request 209](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/209) @@ -64,6 +64,9 @@ 1. Fix `Image::ConvertPixelFormat` for `BAYER_BGGR8` * [BitBucket pull request 211](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/211) +1. Support custom callbacks to find files on global interface + * [BitBucket pull request 226](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/226) + ## Ignition Common 3.3.0 (2019-08-27) 1. skip GTSMeshUtils test on Windows due to issue #50 From a8b8388f904c598993db553accbefc5493a232d0 Mon Sep 17 00:00:00 2001 From: Steve Peters <scpeters@openrobotics.org> Date: Fri, 22 May 2020 16:05:01 -0700 Subject: [PATCH 046/219] Update to gtest 1.10.0 with patch for gcc warnings (#67) Signed-off-by: Steve Peters <scpeters@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- test/gtest/cmake/Config.cmake.in | 9 + test/gtest/cmake/gtest.pc.in | 10 + test/gtest/cmake/gtest_main.pc.in | 11 + test/gtest/cmake/internal_utils.cmake | 182 +- test/gtest/cmake/libgtest.la.in | 21 + test/gtest/gtest-1.10.0.diff | 15 + test/gtest/gtest-20180605-98a0d007d70.diff | 28 - test/gtest/include/gtest/gtest-death-test.h | 29 +- test/gtest/include/gtest/gtest-matchers.h | 750 +++++++ test/gtest/include/gtest/gtest-message.h | 53 +- test/gtest/include/gtest/gtest-param-test.h | 1207 ++--------- test/gtest/include/gtest/gtest-printers.h | 312 +-- test/gtest/include/gtest/gtest-spi.h | 15 +- test/gtest/include/gtest/gtest-test-part.h | 43 +- test/gtest/include/gtest/gtest-typed-test.h | 260 ++- test/gtest/include/gtest/gtest.h | 708 ++++--- test/gtest/include/gtest/gtest_pred_impl.h | 74 +- test/gtest/include/gtest/gtest_prod.h | 4 +- .../include/gtest/internal/custom/README.md | 56 + .../gtest/internal/custom/gtest-port.h | 40 +- .../gtest/internal/custom/gtest-printers.h | 4 +- .../include/gtest/internal/custom/gtest.h | 10 +- .../internal/gtest-death-test-internal.h | 121 +- .../include/gtest/internal/gtest-filepath.h | 10 +- .../include/gtest/internal/gtest-internal.h | 635 +++--- .../include/gtest/internal/gtest-param-util.h | 490 +++-- .../include/gtest/internal/gtest-port-arch.h | 15 +- .../gtest/include/gtest/internal/gtest-port.h | 798 ++----- .../include/gtest/internal/gtest-string.h | 28 +- .../include/gtest/internal/gtest-type-util.h | 24 +- .../gtest/internal/gtest-type-util.h.pump | 25 +- test/gtest/src/gtest-all.cc | 4 +- test/gtest/src/gtest-death-test.cc | 415 ++-- test/gtest/src/gtest-filepath.cc | 28 +- test/gtest/src/gtest-internal-inl.h | 258 ++- test/gtest/src/gtest-matchers.cc | 97 + test/gtest/src/gtest-port.cc | 322 ++- test/gtest/src/gtest-printers.cc | 38 +- test/gtest/src/gtest-test-part.cc | 24 +- test/gtest/src/gtest-typed-test.cc | 9 +- test/gtest/src/gtest.cc | 1882 ++++++++++------- test/gtest/src/gtest_main.cc | 15 +- 42 files changed, 4790 insertions(+), 4289 deletions(-) create mode 100644 test/gtest/cmake/Config.cmake.in create mode 100644 test/gtest/cmake/gtest.pc.in create mode 100644 test/gtest/cmake/gtest_main.pc.in create mode 100644 test/gtest/cmake/libgtest.la.in create mode 100644 test/gtest/gtest-1.10.0.diff delete mode 100644 test/gtest/gtest-20180605-98a0d007d70.diff create mode 100644 test/gtest/include/gtest/gtest-matchers.h create mode 100644 test/gtest/include/gtest/internal/custom/README.md create mode 100644 test/gtest/src/gtest-matchers.cc diff --git a/test/gtest/cmake/Config.cmake.in b/test/gtest/cmake/Config.cmake.in new file mode 100644 index 000000000..12be4498b --- /dev/null +++ b/test/gtest/cmake/Config.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ +include(CMakeFindDependencyMacro) +if (@GTEST_HAS_PTHREAD@) + set(THREADS_PREFER_PTHREAD_FLAG @THREADS_PREFER_PTHREAD_FLAG@) + find_dependency(Threads) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake") +check_required_components("@project_name@") diff --git a/test/gtest/cmake/gtest.pc.in b/test/gtest/cmake/gtest.pc.in new file mode 100644 index 000000000..9aae29e26 --- /dev/null +++ b/test/gtest/cmake/gtest.pc.in @@ -0,0 +1,10 @@ +prefix=${pcfiledir}/../.. +libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ +includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ + +Name: gtest +Description: GoogleTest (without main() function) +Version: @PROJECT_VERSION@ +URL: https://github.com/google/googletest +Libs: -L${libdir} -lgtest @CMAKE_THREAD_LIBS_INIT@ +Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ @CMAKE_THREAD_LIBS_INIT@ diff --git a/test/gtest/cmake/gtest_main.pc.in b/test/gtest/cmake/gtest_main.pc.in new file mode 100644 index 000000000..915f2973a --- /dev/null +++ b/test/gtest/cmake/gtest_main.pc.in @@ -0,0 +1,11 @@ +prefix=${pcfiledir}/../.. +libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ +includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ + +Name: gtest_main +Description: GoogleTest (with main() function) +Version: @PROJECT_VERSION@ +URL: https://github.com/google/googletest +Requires: gtest +Libs: -L${libdir} -lgtest_main @CMAKE_THREAD_LIBS_INIT@ +Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ @CMAKE_THREAD_LIBS_INIT@ diff --git a/test/gtest/cmake/internal_utils.cmake b/test/gtest/cmake/internal_utils.cmake index 6448918f8..2f70f0b08 100644 --- a/test/gtest/cmake/internal_utils.cmake +++ b/test/gtest/cmake/internal_utils.cmake @@ -12,6 +12,10 @@ # Test and Google Mock's option() definitions, and thus must be # called *after* the options have been defined. +if (POLICY CMP0054) + cmake_policy(SET CMP0054 NEW) +endif (POLICY CMP0054) + # Tweaks CMake's default compiler/linker settings to suit Google Test's needs. # # This must be a macro(), as inside a function string() can only @@ -20,8 +24,10 @@ macro(fix_default_compiler_settings_) if (MSVC) # For MSVC, CMake sets certain flags to defaults we want to override. # This replacement code is taken from sample in the CMake Wiki at - # http://www.cmake.org/Wiki/CMake_FAQ#Dynamic_Replace. + # https://gitlab.kitware.com/cmake/community/wikis/FAQ#dynamic-replace. foreach (flag_var + CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) if (NOT BUILD_SHARED_LIBS AND NOT gtest_force_shared_crt) @@ -38,6 +44,11 @@ macro(fix_default_compiler_settings_) # We prefer more strict warning checking for building Google Test. # Replaces /W3 with /W4 in defaults. string(REPLACE "/W3" "/W4" ${flag_var} "${${flag_var}}") + + # Prevent D9025 warning for targets that have exception handling + # turned off (/EHs-c- flag). Where required, exceptions are explicitly + # re-enabled using the cxx_exception_flags variable. + string(REPLACE "/EHsc" "" ${flag_var} "${${flag_var}}") endforeach() endif() endmacro() @@ -51,7 +62,6 @@ macro(config_compiler_and_linker) unset(GTEST_HAS_PTHREAD) if (NOT gtest_disable_pthreads AND NOT MINGW) # Defines CMAKE_USE_PTHREADS_INIT and CMAKE_THREAD_LIBS_INIT. - set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads) if (CMAKE_USE_PTHREADS_INIT) set(GTEST_HAS_PTHREAD ON) @@ -63,36 +73,20 @@ macro(config_compiler_and_linker) # Newlines inside flags variables break CMake's NMake generator. # TODO(vladl@google.com): Add -RTCs and -RTCu to debug builds. set(cxx_base_flags "-GS -W4 -WX -wd4251 -wd4275 -nologo -J -Zi") - if (MSVC_VERSION LESS 1400) # 1400 is Visual Studio 2005 - # Suppress spurious warnings MSVC 7.1 sometimes issues. - # Forcing value to bool. - set(cxx_base_flags "${cxx_base_flags} -wd4800") - # Copy constructor and assignment operator could not be generated. - set(cxx_base_flags "${cxx_base_flags} -wd4511 -wd4512") - # Compatibility warnings not applicable to Google Test. - # Resolved overload was found by argument-dependent lookup. - set(cxx_base_flags "${cxx_base_flags} -wd4675") - endif() - if (MSVC_VERSION LESS 1500) # 1500 is Visual Studio 2008 - # Conditional expression is constant. - # When compiling with /W4, we get several instances of C4127 - # (Conditional expression is constant). In our code, we disable that - # warning on a case-by-case basis. However, on Visual Studio 2005, - # the warning fires on std::list. Therefore on that compiler and earlier, - # we disable the warning project-wide. - set(cxx_base_flags "${cxx_base_flags} -wd4127") - endif() - if (NOT (MSVC_VERSION LESS 1700)) # 1700 is Visual Studio 2012. - # Suppress "unreachable code" warning on VS 2012 and later. - # http://stackoverflow.com/questions/3232669 explains the issue. - set(cxx_base_flags "${cxx_base_flags} -wd4702") - endif() - set(cxx_base_flags "${cxx_base_flags} -D_UNICODE -DUNICODE -DWIN32 -D_WIN32") set(cxx_base_flags "${cxx_base_flags} -DSTRICT -DWIN32_LEAN_AND_MEAN") set(cxx_exception_flags "-EHsc -D_HAS_EXCEPTIONS=1") set(cxx_no_exception_flags "-EHs-c- -D_HAS_EXCEPTIONS=0") set(cxx_no_rtti_flags "-GR-") + # Suppress "unreachable code" warning + # http://stackoverflow.com/questions/3232669 explains the issue. + set(cxx_base_flags "${cxx_base_flags} -wd4702") + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(cxx_base_flags "-Wall -Wshadow -Werror -Wconversion") + set(cxx_exception_flags "-fexceptions") + set(cxx_no_exception_flags "-fno-exceptions") + set(cxx_strict_flags "-W -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wunused-parameter -Wcast-align -Wchar-subscripts -Winline -Wredundant-decls") + set(cxx_no_rtti_flags "-fno-rtti") elseif (CMAKE_COMPILER_IS_GNUCXX) set(cxx_base_flags "-Wall -Wshadow -Werror") if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0.0) @@ -138,12 +132,11 @@ macro(config_compiler_and_linker) set(cxx_base_flags "${cxx_base_flags} ${GTEST_HAS_PTHREAD_MACRO}") # For building gtest's own tests and samples. - set(cxx_exception "${CMAKE_CXX_FLAGS} ${cxx_base_flags} ${cxx_exception_flags}") + set(cxx_exception "${cxx_base_flags} ${cxx_exception_flags}") set(cxx_no_exception "${CMAKE_CXX_FLAGS} ${cxx_base_flags} ${cxx_no_exception_flags}") set(cxx_default "${cxx_exception}") set(cxx_no_rtti "${cxx_default} ${cxx_no_rtti_flags}") - set(cxx_use_own_tuple "${cxx_default} -DGTEST_USE_OWN_TR1_TUPLE=1") # For building the gtest libraries. set(cxx_strict "${cxx_default} ${cxx_strict_flags}") @@ -162,13 +155,38 @@ function(cxx_library_with_type name type cxx_flags) set_target_properties(${name} PROPERTIES DEBUG_POSTFIX "d") + # Set the output directory for build artifacts + set_target_properties(${name} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") + # make PDBs match library name + get_target_property(pdb_debug_postfix ${name} DEBUG_POSTFIX) + set_target_properties(${name} + PROPERTIES + PDB_NAME "${name}" + PDB_NAME_DEBUG "${name}${pdb_debug_postfix}" + COMPILE_PDB_NAME "${name}" + COMPILE_PDB_NAME_DEBUG "${name}${pdb_debug_postfix}") + if (BUILD_SHARED_LIBS OR type STREQUAL "SHARED") set_target_properties(${name} PROPERTIES COMPILE_DEFINITIONS "GTEST_CREATE_SHARED_LIBRARY=1") + if (NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11") + target_compile_definitions(${name} INTERFACE + $<INSTALL_INTERFACE:GTEST_LINKED_AS_SHARED_LIBRARY=1>) + endif() endif() if (DEFINED GTEST_HAS_PTHREAD) - target_link_libraries(${name} ${CMAKE_THREAD_LIBS_INIT}) + if ("${CMAKE_VERSION}" VERSION_LESS "3.1.0") + set(threads_spec ${CMAKE_THREAD_LIBS_INIT}) + else() + set(threads_spec Threads::Threads) + endif() + target_link_libraries(${name} PUBLIC ${threads_spec}) endif() endfunction() @@ -190,7 +208,7 @@ endfunction() # is built from the given source files with the given compiler flags. function(cxx_executable_with_flags name cxx_flags libs) add_executable(${name} ${ARGN}) - if (MSVC AND (NOT (MSVC_VERSION LESS 1700))) # 1700 is Visual Studio 2012. + if (MSVC) # BigObj required for tests. set(cxx_flags "${cxx_flags} -bigobj") endif() @@ -230,7 +248,13 @@ find_package(PythonInterp) # from the given source files with the given compiler flags. function(cxx_test_with_flags name cxx_flags libs) cxx_executable_with_flags(${name} "${cxx_flags}" "${libs}" ${ARGN}) - add_test(${name} ${name}) + if (WIN32 OR MINGW) + add_test(NAME ${name} + COMMAND "powershell" "-Command" "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/RunTest.ps1" "$<TARGET_FILE:${name}>") + else() + add_test(NAME ${name} + COMMAND "$<TARGET_FILE:${name}>") + endif() endfunction() # cxx_test(name libs srcs...) @@ -249,32 +273,86 @@ endfunction() # test/name.py. It does nothing if Python is not installed. function(py_test name) if (PYTHONINTERP_FOUND) - if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 3.1) + if ("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" VERSION_GREATER 3.1) if (CMAKE_CONFIGURATION_TYPES) - # Multi-configuration build generators as for Visual Studio save - # output in a subdirectory of CMAKE_CURRENT_BINARY_DIR (Debug, - # Release etc.), so we have to provide it here. - add_test( - NAME ${name} - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py - --build_dir=${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>) + # Multi-configuration build generators as for Visual Studio save + # output in a subdirectory of CMAKE_CURRENT_BINARY_DIR (Debug, + # Release etc.), so we have to provide it here. + if (WIN32 OR MINGW) + add_test(NAME ${name} + COMMAND powershell -Command ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/RunTest.ps1 + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py + --build_dir=${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG> ${ARGN}) + else() + add_test(NAME ${name} + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py + --build_dir=${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG> ${ARGN}) + endif() else (CMAKE_CONFIGURATION_TYPES) - # Single-configuration build generators like Makefile generators - # don't have subdirs below CMAKE_CURRENT_BINARY_DIR. - add_test( - NAME ${name} - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py - --build_dir=${CMAKE_CURRENT_BINARY_DIR}) + # Single-configuration build generators like Makefile generators + # don't have subdirs below CMAKE_CURRENT_BINARY_DIR. + if (WIN32 OR MINGW) + add_test(NAME ${name} + COMMAND powershell -Command ${CMAKE_CURRENT_BINARY_DIR}/RunTest.ps1 + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py + --build_dir=${CMAKE_CURRENT_BINARY_DIR} ${ARGN}) + else() + add_test(NAME ${name} + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py + --build_dir=${CMAKE_CURRENT_BINARY_DIR} ${ARGN}) + endif() endif (CMAKE_CONFIGURATION_TYPES) - else (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 3.1) + else() # ${CMAKE_CURRENT_BINARY_DIR} is known at configuration time, so we can # directly bind it from cmake. ${CTEST_CONFIGURATION_TYPE} is known # only at ctest runtime (by calling ctest -c <Configuration>), so # we have to escape $ to delay variable substitution here. - add_test( - ${name} - ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py - --build_dir=${CMAKE_CURRENT_BINARY_DIR}/\${CTEST_CONFIGURATION_TYPE}) - endif (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 3.1) + if (WIN32 OR MINGW) + add_test(NAME ${name} + COMMAND powershell -Command ${CMAKE_CURRENT_BINARY_DIR}/RunTest.ps1 + ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py + --build_dir=${CMAKE_CURRENT_BINARY_DIR}/\${CTEST_CONFIGURATION_TYPE} ${ARGN}) + else() + add_test(NAME ${name} + COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py + --build_dir=${CMAKE_CURRENT_BINARY_DIR}/\${CTEST_CONFIGURATION_TYPE} ${ARGN}) + endif() + endif() endif(PYTHONINTERP_FOUND) endfunction() + +# install_project(targets...) +# +# Installs the specified targets and configures the associated pkgconfig files. +function(install_project) + if(INSTALL_GTEST) + install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + # Install the project targets. + install(TARGETS ${ARGN} + EXPORT ${targets_export_name} + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + # Install PDBs + foreach(t ${ARGN}) + get_target_property(t_pdb_name ${t} COMPILE_PDB_NAME) + get_target_property(t_pdb_name_debug ${t} COMPILE_PDB_NAME_DEBUG) + get_target_property(t_pdb_output_directory ${t} PDB_OUTPUT_DIRECTORY) + install(FILES + "${t_pdb_output_directory}/\${CMAKE_INSTALL_CONFIG_NAME}/$<$<CONFIG:Debug>:${t_pdb_name_debug}>$<$<NOT:$<CONFIG:Debug>>:${t_pdb_name}>.pdb" + DESTINATION ${CMAKE_INSTALL_LIBDIR} + OPTIONAL) + endforeach() + endif() + # Configure and install pkgconfig files. + foreach(t ${ARGN}) + set(configured_pc "${generated_dir}/${t}.pc") + configure_file("${PROJECT_SOURCE_DIR}/cmake/${t}.pc.in" + "${configured_pc}" @ONLY) + install(FILES "${configured_pc}" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + endforeach() + endif() +endfunction() diff --git a/test/gtest/cmake/libgtest.la.in b/test/gtest/cmake/libgtest.la.in new file mode 100644 index 000000000..840c83885 --- /dev/null +++ b/test/gtest/cmake/libgtest.la.in @@ -0,0 +1,21 @@ +# libgtest.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.6 + +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Names of this library. +library_names='libgtest.so' + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='@CMAKE_INSTALL_FULL_LIBDIR@' diff --git a/test/gtest/gtest-1.10.0.diff b/test/gtest/gtest-1.10.0.diff new file mode 100644 index 000000000..9df3ab210 --- /dev/null +++ b/test/gtest/gtest-1.10.0.diff @@ -0,0 +1,15 @@ +diff --git a/test/gtest/src/gtest.cc b/test/gtest/src/gtest.cc +index a5b4e5a..1dff1a6 100644 +--- a/test/gtest/src/gtest.cc ++++ b/test/gtest/src/gtest.cc +@@ -34,6 +34,10 @@ + #include "gtest/internal/custom/gtest.h" + #include "gtest/gtest-spi.h" + ++#ifndef _WIN32 ++#pragma GCC system_header ++#endif ++ + #include <ctype.h> + #include <math.h> + #include <stdarg.h> diff --git a/test/gtest/gtest-20180605-98a0d007d70.diff b/test/gtest/gtest-20180605-98a0d007d70.diff deleted file mode 100644 index 77c9cccab..000000000 --- a/test/gtest/gtest-20180605-98a0d007d70.diff +++ /dev/null @@ -1,28 +0,0 @@ -diff -r 142c19af194c test/gtest/include/gtest/internal/gtest-port.h ---- a/test/gtest/include/gtest/internal/gtest-port.h Thu Jun 07 13:05:44 2018 -0700 -+++ b/test/gtest/include/gtest/internal/gtest-port.h Thu Jun 07 14:17:57 2018 -0700 -@@ -43,6 +43,10 @@ - #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ - #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ - -+#ifndef _WIN32 -+#pragma GCC system_header -+#endif -+ - // Environment-describing macros - // ----------------------------- - // -diff -r 142c19af194c test/gtest/src/gtest.cc ---- a/test/gtest/src/gtest.cc Thu Jun 07 13:05:44 2018 -0700 -+++ b/test/gtest/src/gtest.cc Thu Jun 07 14:17:57 2018 -0700 -@@ -35,6 +35,10 @@ - #include "gtest/internal/custom/gtest.h" - #include "gtest/gtest-spi.h" - -+#ifndef _WIN32 -+#pragma GCC system_header -+#endif -+ - #include <ctype.h> - #include <math.h> - #include <stdarg.h> diff --git a/test/gtest/include/gtest/gtest-death-test.h b/test/gtest/include/gtest/gtest-death-test.h index 53f11d4c5..dc878ffbb 100644 --- a/test/gtest/include/gtest/gtest-death-test.h +++ b/test/gtest/include/gtest/gtest-death-test.h @@ -26,14 +26,14 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) + // // The Google C++ Testing and Mocking Framework (Google Test) // // This header file defines the public API for death tests. It is // #included by gtest.h so a user doesn't need to include this // directly. +// GOOGLETEST_CM0001 DO NOT DELETE #ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ @@ -99,6 +99,7 @@ GTEST_API_ bool InDeathTestChild(); // // On the regular expressions used in death tests: // +// GOOGLETEST_CM0005 DO NOT DELETE // On POSIX-compliant systems (*nix), we use the <regex.h> library, // which uses the POSIX extended regex syntax. // @@ -160,7 +161,6 @@ GTEST_API_ bool InDeathTestChild(); // is rarely a problem as people usually don't put the test binary // directory in PATH. // -// TODO(wan@google.com): make thread-safe death tests search the PATH. // Asserts that a given statement causes the program to exit, with an // integer exit status that satisfies predicate, and emitting error output @@ -169,7 +169,7 @@ GTEST_API_ bool InDeathTestChild(); GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_) // Like ASSERT_EXIT, but continues on to successive tests in the -// test case, if any: +// test suite, if any: # define EXPECT_EXIT(statement, predicate, regex) \ GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_) @@ -180,7 +180,7 @@ GTEST_API_ bool InDeathTestChild(); ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) // Like ASSERT_DEATH, but continues on to successive tests in the -// test case, if any: +// test suite, if any: # define EXPECT_DEATH(statement, regex) \ EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) @@ -201,6 +201,7 @@ class GTEST_API_ ExitedWithCode { # if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA // Tests that an exit code describes an exit due to termination by a // given signal. +// GOOGLETEST_CM0006 DO NOT DELETE class GTEST_API_ KilledBySignal { public: explicit KilledBySignal(int signum); @@ -226,7 +227,7 @@ class GTEST_API_ KilledBySignal { // return 12; // } // -// TEST(TestCase, TestDieOr12WorksInDgbAndOpt) { +// TEST(TestSuite, TestDieOr12WorksInDgbAndOpt) { // int sideeffect = 0; // // Only asserts in dbg. // EXPECT_DEBUG_DEATH(DieInDebugOr12(&sideeffect), "death"); @@ -275,20 +276,20 @@ class GTEST_API_ KilledBySignal { // This macro is used for implementing macros such as // EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where // death tests are not supported. Those macros must compile on such systems -// iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on -// systems that support death tests. This allows one to write such a macro -// on a system that does not support death tests and be sure that it will -// compile on a death-test supporting system. It is exposed publicly so that -// systems that have death-tests with stricter requirements than -// GTEST_HAS_DEATH_TEST can write their own equivalent of -// EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED. +// if and only if EXPECT_DEATH and ASSERT_DEATH compile with the same parameters +// on systems that support death tests. This allows one to write such a macro on +// a system that does not support death tests and be sure that it will compile +// on a death-test supporting system. It is exposed publicly so that systems +// that have death-tests with stricter requirements than GTEST_HAS_DEATH_TEST +// can write their own equivalent of EXPECT_DEATH_IF_SUPPORTED and +// ASSERT_DEATH_IF_SUPPORTED. // // Parameters: // statement - A statement that a macro such as EXPECT_DEATH would test // for program termination. This macro has to make sure this // statement is compiled but not executed, to ensure that // EXPECT_DEATH_IF_SUPPORTED compiles with a certain -// parameter iff EXPECT_DEATH compiles with it. +// parameter if and only if EXPECT_DEATH compiles with it. // regex - A regex that a macro such as EXPECT_DEATH would use to test // the output of statement. This parameter has to be // compiled but not evaluated by this macro, to ensure that diff --git a/test/gtest/include/gtest/gtest-matchers.h b/test/gtest/include/gtest/gtest-matchers.h new file mode 100644 index 000000000..9de6c2e10 --- /dev/null +++ b/test/gtest/include/gtest/gtest-matchers.h @@ -0,0 +1,750 @@ +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// The Google C++ Testing and Mocking Framework (Google Test) +// +// This file implements just enough of the matcher interface to allow +// EXPECT_DEATH and friends to accept a matcher argument. + +// IWYU pragma: private, include "testing/base/public/gunit.h" +// IWYU pragma: friend third_party/googletest/googlemock/.* +// IWYU pragma: friend third_party/googletest/googletest/.* + +#ifndef GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_ +#define GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_ + +#include <memory> +#include <ostream> +#include <string> +#include <type_traits> + +#include "gtest/gtest-printers.h" +#include "gtest/internal/gtest-internal.h" +#include "gtest/internal/gtest-port.h" + +// MSVC warning C5046 is new as of VS2017 version 15.8. +#if defined(_MSC_VER) && _MSC_VER >= 1915 +#define GTEST_MAYBE_5046_ 5046 +#else +#define GTEST_MAYBE_5046_ +#endif + +GTEST_DISABLE_MSC_WARNINGS_PUSH_( + 4251 GTEST_MAYBE_5046_ /* class A needs to have dll-interface to be used by + clients of class B */ + /* Symbol involving type with internal linkage not defined */) + +namespace testing { + +// To implement a matcher Foo for type T, define: +// 1. a class FooMatcherImpl that implements the +// MatcherInterface<T> interface, and +// 2. a factory function that creates a Matcher<T> object from a +// FooMatcherImpl*. +// +// The two-level delegation design makes it possible to allow a user +// to write "v" instead of "Eq(v)" where a Matcher is expected, which +// is impossible if we pass matchers by pointers. It also eases +// ownership management as Matcher objects can now be copied like +// plain values. + +// MatchResultListener is an abstract class. Its << operator can be +// used by a matcher to explain why a value matches or doesn't match. +// +class MatchResultListener { + public: + // Creates a listener object with the given underlying ostream. The + // listener does not own the ostream, and does not dereference it + // in the constructor or destructor. + explicit MatchResultListener(::std::ostream* os) : stream_(os) {} + virtual ~MatchResultListener() = 0; // Makes this class abstract. + + // Streams x to the underlying ostream; does nothing if the ostream + // is NULL. + template <typename T> + MatchResultListener& operator<<(const T& x) { + if (stream_ != nullptr) *stream_ << x; + return *this; + } + + // Returns the underlying ostream. + ::std::ostream* stream() { return stream_; } + + // Returns true if and only if the listener is interested in an explanation + // of the match result. A matcher's MatchAndExplain() method can use + // this information to avoid generating the explanation when no one + // intends to hear it. + bool IsInterested() const { return stream_ != nullptr; } + + private: + ::std::ostream* const stream_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(MatchResultListener); +}; + +inline MatchResultListener::~MatchResultListener() { +} + +// An instance of a subclass of this knows how to describe itself as a +// matcher. +class MatcherDescriberInterface { + public: + virtual ~MatcherDescriberInterface() {} + + // Describes this matcher to an ostream. The function should print + // a verb phrase that describes the property a value matching this + // matcher should have. The subject of the verb phrase is the value + // being matched. For example, the DescribeTo() method of the Gt(7) + // matcher prints "is greater than 7". + virtual void DescribeTo(::std::ostream* os) const = 0; + + // Describes the negation of this matcher to an ostream. For + // example, if the description of this matcher is "is greater than + // 7", the negated description could be "is not greater than 7". + // You are not required to override this when implementing + // MatcherInterface, but it is highly advised so that your matcher + // can produce good error messages. + virtual void DescribeNegationTo(::std::ostream* os) const { + *os << "not ("; + DescribeTo(os); + *os << ")"; + } +}; + +// The implementation of a matcher. +template <typename T> +class MatcherInterface : public MatcherDescriberInterface { + public: + // Returns true if and only if the matcher matches x; also explains the + // match result to 'listener' if necessary (see the next paragraph), in + // the form of a non-restrictive relative clause ("which ...", + // "whose ...", etc) that describes x. For example, the + // MatchAndExplain() method of the Pointee(...) matcher should + // generate an explanation like "which points to ...". + // + // Implementations of MatchAndExplain() should add an explanation of + // the match result *if and only if* they can provide additional + // information that's not already present (or not obvious) in the + // print-out of x and the matcher's description. Whether the match + // succeeds is not a factor in deciding whether an explanation is + // needed, as sometimes the caller needs to print a failure message + // when the match succeeds (e.g. when the matcher is used inside + // Not()). + // + // For example, a "has at least 10 elements" matcher should explain + // what the actual element count is, regardless of the match result, + // as it is useful information to the reader; on the other hand, an + // "is empty" matcher probably only needs to explain what the actual + // size is when the match fails, as it's redundant to say that the + // size is 0 when the value is already known to be empty. + // + // You should override this method when defining a new matcher. + // + // It's the responsibility of the caller (Google Test) to guarantee + // that 'listener' is not NULL. This helps to simplify a matcher's + // implementation when it doesn't care about the performance, as it + // can talk to 'listener' without checking its validity first. + // However, in order to implement dummy listeners efficiently, + // listener->stream() may be NULL. + virtual bool MatchAndExplain(T x, MatchResultListener* listener) const = 0; + + // Inherits these methods from MatcherDescriberInterface: + // virtual void DescribeTo(::std::ostream* os) const = 0; + // virtual void DescribeNegationTo(::std::ostream* os) const; +}; + +namespace internal { + +// Converts a MatcherInterface<T> to a MatcherInterface<const T&>. +template <typename T> +class MatcherInterfaceAdapter : public MatcherInterface<const T&> { + public: + explicit MatcherInterfaceAdapter(const MatcherInterface<T>* impl) + : impl_(impl) {} + ~MatcherInterfaceAdapter() override { delete impl_; } + + void DescribeTo(::std::ostream* os) const override { impl_->DescribeTo(os); } + + void DescribeNegationTo(::std::ostream* os) const override { + impl_->DescribeNegationTo(os); + } + + bool MatchAndExplain(const T& x, + MatchResultListener* listener) const override { + return impl_->MatchAndExplain(x, listener); + } + + private: + const MatcherInterface<T>* const impl_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(MatcherInterfaceAdapter); +}; + +struct AnyEq { + template <typename A, typename B> + bool operator()(const A& a, const B& b) const { return a == b; } +}; +struct AnyNe { + template <typename A, typename B> + bool operator()(const A& a, const B& b) const { return a != b; } +}; +struct AnyLt { + template <typename A, typename B> + bool operator()(const A& a, const B& b) const { return a < b; } +}; +struct AnyGt { + template <typename A, typename B> + bool operator()(const A& a, const B& b) const { return a > b; } +}; +struct AnyLe { + template <typename A, typename B> + bool operator()(const A& a, const B& b) const { return a <= b; } +}; +struct AnyGe { + template <typename A, typename B> + bool operator()(const A& a, const B& b) const { return a >= b; } +}; + +// A match result listener that ignores the explanation. +class DummyMatchResultListener : public MatchResultListener { + public: + DummyMatchResultListener() : MatchResultListener(nullptr) {} + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(DummyMatchResultListener); +}; + +// A match result listener that forwards the explanation to a given +// ostream. The difference between this and MatchResultListener is +// that the former is concrete. +class StreamMatchResultListener : public MatchResultListener { + public: + explicit StreamMatchResultListener(::std::ostream* os) + : MatchResultListener(os) {} + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamMatchResultListener); +}; + +// An internal class for implementing Matcher<T>, which will derive +// from it. We put functionalities common to all Matcher<T> +// specializations here to avoid code duplication. +template <typename T> +class MatcherBase { + public: + // Returns true if and only if the matcher matches x; also explains the + // match result to 'listener'. + bool MatchAndExplain(const T& x, MatchResultListener* listener) const { + return impl_->MatchAndExplain(x, listener); + } + + // Returns true if and only if this matcher matches x. + bool Matches(const T& x) const { + DummyMatchResultListener dummy; + return MatchAndExplain(x, &dummy); + } + + // Describes this matcher to an ostream. + void DescribeTo(::std::ostream* os) const { impl_->DescribeTo(os); } + + // Describes the negation of this matcher to an ostream. + void DescribeNegationTo(::std::ostream* os) const { + impl_->DescribeNegationTo(os); + } + + // Explains why x matches, or doesn't match, the matcher. + void ExplainMatchResultTo(const T& x, ::std::ostream* os) const { + StreamMatchResultListener listener(os); + MatchAndExplain(x, &listener); + } + + // Returns the describer for this matcher object; retains ownership + // of the describer, which is only guaranteed to be alive when + // this matcher object is alive. + const MatcherDescriberInterface* GetDescriber() const { + return impl_.get(); + } + + protected: + MatcherBase() {} + + // Constructs a matcher from its implementation. + explicit MatcherBase(const MatcherInterface<const T&>* impl) : impl_(impl) {} + + template <typename U> + explicit MatcherBase( + const MatcherInterface<U>* impl, + typename std::enable_if<!std::is_same<U, const U&>::value>::type* = + nullptr) + : impl_(new internal::MatcherInterfaceAdapter<U>(impl)) {} + + MatcherBase(const MatcherBase&) = default; + MatcherBase& operator=(const MatcherBase&) = default; + MatcherBase(MatcherBase&&) = default; + MatcherBase& operator=(MatcherBase&&) = default; + + virtual ~MatcherBase() {} + + private: + std::shared_ptr<const MatcherInterface<const T&>> impl_; +}; + +} // namespace internal + +// A Matcher<T> is a copyable and IMMUTABLE (except by assignment) +// object that can check whether a value of type T matches. The +// implementation of Matcher<T> is just a std::shared_ptr to const +// MatcherInterface<T>. Don't inherit from Matcher! +template <typename T> +class Matcher : public internal::MatcherBase<T> { + public: + // Constructs a null matcher. Needed for storing Matcher objects in STL + // containers. A default-constructed matcher is not yet initialized. You + // cannot use it until a valid value has been assigned to it. + explicit Matcher() {} // NOLINT + + // Constructs a matcher from its implementation. + explicit Matcher(const MatcherInterface<const T&>* impl) + : internal::MatcherBase<T>(impl) {} + + template <typename U> + explicit Matcher( + const MatcherInterface<U>* impl, + typename std::enable_if<!std::is_same<U, const U&>::value>::type* = + nullptr) + : internal::MatcherBase<T>(impl) {} + + // Implicit constructor here allows people to write + // EXPECT_CALL(foo, Bar(5)) instead of EXPECT_CALL(foo, Bar(Eq(5))) sometimes + Matcher(T value); // NOLINT +}; + +// The following two specializations allow the user to write str +// instead of Eq(str) and "foo" instead of Eq("foo") when a std::string +// matcher is expected. +template <> +class GTEST_API_ Matcher<const std::string&> + : public internal::MatcherBase<const std::string&> { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface<const std::string&>* impl) + : internal::MatcherBase<const std::string&>(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a std::string object. + Matcher(const std::string& s); // NOLINT + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT +}; + +template <> +class GTEST_API_ Matcher<std::string> + : public internal::MatcherBase<std::string> { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface<const std::string&>* impl) + : internal::MatcherBase<std::string>(impl) {} + explicit Matcher(const MatcherInterface<std::string>* impl) + : internal::MatcherBase<std::string>(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a string object. + Matcher(const std::string& s); // NOLINT + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT +}; + +#if GTEST_HAS_ABSL +// The following two specializations allow the user to write str +// instead of Eq(str) and "foo" instead of Eq("foo") when a absl::string_view +// matcher is expected. +template <> +class GTEST_API_ Matcher<const absl::string_view&> + : public internal::MatcherBase<const absl::string_view&> { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface<const absl::string_view&>* impl) + : internal::MatcherBase<const absl::string_view&>(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a std::string object. + Matcher(const std::string& s); // NOLINT + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT + + // Allows the user to pass absl::string_views directly. + Matcher(absl::string_view s); // NOLINT +}; + +template <> +class GTEST_API_ Matcher<absl::string_view> + : public internal::MatcherBase<absl::string_view> { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface<const absl::string_view&>* impl) + : internal::MatcherBase<absl::string_view>(impl) {} + explicit Matcher(const MatcherInterface<absl::string_view>* impl) + : internal::MatcherBase<absl::string_view>(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a std::string object. + Matcher(const std::string& s); // NOLINT + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT + + // Allows the user to pass absl::string_views directly. + Matcher(absl::string_view s); // NOLINT +}; +#endif // GTEST_HAS_ABSL + +// Prints a matcher in a human-readable format. +template <typename T> +std::ostream& operator<<(std::ostream& os, const Matcher<T>& matcher) { + matcher.DescribeTo(&os); + return os; +} + +// The PolymorphicMatcher class template makes it easy to implement a +// polymorphic matcher (i.e. a matcher that can match values of more +// than one type, e.g. Eq(n) and NotNull()). +// +// To define a polymorphic matcher, a user should provide an Impl +// class that has a DescribeTo() method and a DescribeNegationTo() +// method, and define a member function (or member function template) +// +// bool MatchAndExplain(const Value& value, +// MatchResultListener* listener) const; +// +// See the definition of NotNull() for a complete example. +template <class Impl> +class PolymorphicMatcher { + public: + explicit PolymorphicMatcher(const Impl& an_impl) : impl_(an_impl) {} + + // Returns a mutable reference to the underlying matcher + // implementation object. + Impl& mutable_impl() { return impl_; } + + // Returns an immutable reference to the underlying matcher + // implementation object. + const Impl& impl() const { return impl_; } + + template <typename T> + operator Matcher<T>() const { + return Matcher<T>(new MonomorphicImpl<const T&>(impl_)); + } + + private: + template <typename T> + class MonomorphicImpl : public MatcherInterface<T> { + public: + explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {} + + virtual void DescribeTo(::std::ostream* os) const { impl_.DescribeTo(os); } + + virtual void DescribeNegationTo(::std::ostream* os) const { + impl_.DescribeNegationTo(os); + } + + virtual bool MatchAndExplain(T x, MatchResultListener* listener) const { + return impl_.MatchAndExplain(x, listener); + } + + private: + const Impl impl_; + }; + + Impl impl_; +}; + +// Creates a matcher from its implementation. +// DEPRECATED: Especially in the generic code, prefer: +// Matcher<T>(new MyMatcherImpl<const T&>(...)); +// +// MakeMatcher may create a Matcher that accepts its argument by value, which +// leads to unnecessary copies & lack of support for non-copyable types. +template <typename T> +inline Matcher<T> MakeMatcher(const MatcherInterface<T>* impl) { + return Matcher<T>(impl); +} + +// Creates a polymorphic matcher from its implementation. This is +// easier to use than the PolymorphicMatcher<Impl> constructor as it +// doesn't require you to explicitly write the template argument, e.g. +// +// MakePolymorphicMatcher(foo); +// vs +// PolymorphicMatcher<TypeOfFoo>(foo); +template <class Impl> +inline PolymorphicMatcher<Impl> MakePolymorphicMatcher(const Impl& impl) { + return PolymorphicMatcher<Impl>(impl); +} + +namespace internal { +// Implements a matcher that compares a given value with a +// pre-supplied value using one of the ==, <=, <, etc, operators. The +// two values being compared don't have to have the same type. +// +// The matcher defined here is polymorphic (for example, Eq(5) can be +// used to match an int, a short, a double, etc). Therefore we use +// a template type conversion operator in the implementation. +// +// The following template definition assumes that the Rhs parameter is +// a "bare" type (i.e. neither 'const T' nor 'T&'). +template <typename D, typename Rhs, typename Op> +class ComparisonBase { + public: + explicit ComparisonBase(const Rhs& rhs) : rhs_(rhs) {} + template <typename Lhs> + operator Matcher<Lhs>() const { + return Matcher<Lhs>(new Impl<const Lhs&>(rhs_)); + } + + private: + template <typename T> + static const T& Unwrap(const T& v) { return v; } + template <typename T> + static const T& Unwrap(std::reference_wrapper<T> v) { return v; } + + template <typename Lhs, typename = Rhs> + class Impl : public MatcherInterface<Lhs> { + public: + explicit Impl(const Rhs& rhs) : rhs_(rhs) {} + bool MatchAndExplain(Lhs lhs, + MatchResultListener* /* listener */) const override { + return Op()(lhs, Unwrap(rhs_)); + } + void DescribeTo(::std::ostream* os) const override { + *os << D::Desc() << " "; + UniversalPrint(Unwrap(rhs_), os); + } + void DescribeNegationTo(::std::ostream* os) const override { + *os << D::NegatedDesc() << " "; + UniversalPrint(Unwrap(rhs_), os); + } + + private: + Rhs rhs_; + }; + Rhs rhs_; +}; + +template <typename Rhs> +class EqMatcher : public ComparisonBase<EqMatcher<Rhs>, Rhs, AnyEq> { + public: + explicit EqMatcher(const Rhs& rhs) + : ComparisonBase<EqMatcher<Rhs>, Rhs, AnyEq>(rhs) { } + static const char* Desc() { return "is equal to"; } + static const char* NegatedDesc() { return "isn't equal to"; } +}; +template <typename Rhs> +class NeMatcher : public ComparisonBase<NeMatcher<Rhs>, Rhs, AnyNe> { + public: + explicit NeMatcher(const Rhs& rhs) + : ComparisonBase<NeMatcher<Rhs>, Rhs, AnyNe>(rhs) { } + static const char* Desc() { return "isn't equal to"; } + static const char* NegatedDesc() { return "is equal to"; } +}; +template <typename Rhs> +class LtMatcher : public ComparisonBase<LtMatcher<Rhs>, Rhs, AnyLt> { + public: + explicit LtMatcher(const Rhs& rhs) + : ComparisonBase<LtMatcher<Rhs>, Rhs, AnyLt>(rhs) { } + static const char* Desc() { return "is <"; } + static const char* NegatedDesc() { return "isn't <"; } +}; +template <typename Rhs> +class GtMatcher : public ComparisonBase<GtMatcher<Rhs>, Rhs, AnyGt> { + public: + explicit GtMatcher(const Rhs& rhs) + : ComparisonBase<GtMatcher<Rhs>, Rhs, AnyGt>(rhs) { } + static const char* Desc() { return "is >"; } + static const char* NegatedDesc() { return "isn't >"; } +}; +template <typename Rhs> +class LeMatcher : public ComparisonBase<LeMatcher<Rhs>, Rhs, AnyLe> { + public: + explicit LeMatcher(const Rhs& rhs) + : ComparisonBase<LeMatcher<Rhs>, Rhs, AnyLe>(rhs) { } + static const char* Desc() { return "is <="; } + static const char* NegatedDesc() { return "isn't <="; } +}; +template <typename Rhs> +class GeMatcher : public ComparisonBase<GeMatcher<Rhs>, Rhs, AnyGe> { + public: + explicit GeMatcher(const Rhs& rhs) + : ComparisonBase<GeMatcher<Rhs>, Rhs, AnyGe>(rhs) { } + static const char* Desc() { return "is >="; } + static const char* NegatedDesc() { return "isn't >="; } +}; + +// Implements polymorphic matchers MatchesRegex(regex) and +// ContainsRegex(regex), which can be used as a Matcher<T> as long as +// T can be converted to a string. +class MatchesRegexMatcher { + public: + MatchesRegexMatcher(const RE* regex, bool full_match) + : regex_(regex), full_match_(full_match) {} + +#if GTEST_HAS_ABSL + bool MatchAndExplain(const absl::string_view& s, + MatchResultListener* listener) const { + return MatchAndExplain(std::string(s), listener); + } +#endif // GTEST_HAS_ABSL + + // Accepts pointer types, particularly: + // const char* + // char* + // const wchar_t* + // wchar_t* + template <typename CharType> + bool MatchAndExplain(CharType* s, MatchResultListener* listener) const { + return s != nullptr && MatchAndExplain(std::string(s), listener); + } + + // Matches anything that can convert to std::string. + // + // This is a template, not just a plain function with const std::string&, + // because absl::string_view has some interfering non-explicit constructors. + template <class MatcheeStringType> + bool MatchAndExplain(const MatcheeStringType& s, + MatchResultListener* /* listener */) const { + const std::string& s2(s); + return full_match_ ? RE::FullMatch(s2, *regex_) + : RE::PartialMatch(s2, *regex_); + } + + void DescribeTo(::std::ostream* os) const { + *os << (full_match_ ? "matches" : "contains") << " regular expression "; + UniversalPrinter<std::string>::Print(regex_->pattern(), os); + } + + void DescribeNegationTo(::std::ostream* os) const { + *os << "doesn't " << (full_match_ ? "match" : "contain") + << " regular expression "; + UniversalPrinter<std::string>::Print(regex_->pattern(), os); + } + + private: + const std::shared_ptr<const RE> regex_; + const bool full_match_; +}; +} // namespace internal + +// Matches a string that fully matches regular expression 'regex'. +// The matcher takes ownership of 'regex'. +inline PolymorphicMatcher<internal::MatchesRegexMatcher> MatchesRegex( + const internal::RE* regex) { + return MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex, true)); +} +inline PolymorphicMatcher<internal::MatchesRegexMatcher> MatchesRegex( + const std::string& regex) { + return MatchesRegex(new internal::RE(regex)); +} + +// Matches a string that contains regular expression 'regex'. +// The matcher takes ownership of 'regex'. +inline PolymorphicMatcher<internal::MatchesRegexMatcher> ContainsRegex( + const internal::RE* regex) { + return MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex, false)); +} +inline PolymorphicMatcher<internal::MatchesRegexMatcher> ContainsRegex( + const std::string& regex) { + return ContainsRegex(new internal::RE(regex)); +} + +// Creates a polymorphic matcher that matches anything equal to x. +// Note: if the parameter of Eq() were declared as const T&, Eq("foo") +// wouldn't compile. +template <typename T> +inline internal::EqMatcher<T> Eq(T x) { return internal::EqMatcher<T>(x); } + +// Constructs a Matcher<T> from a 'value' of type T. The constructed +// matcher matches any value that's equal to 'value'. +template <typename T> +Matcher<T>::Matcher(T value) { *this = Eq(value); } + +// Creates a monomorphic matcher that matches anything with type Lhs +// and equal to rhs. A user may need to use this instead of Eq(...) +// in order to resolve an overloading ambiguity. +// +// TypedEq<T>(x) is just a convenient short-hand for Matcher<T>(Eq(x)) +// or Matcher<T>(x), but more readable than the latter. +// +// We could define similar monomorphic matchers for other comparison +// operations (e.g. TypedLt, TypedGe, and etc), but decided not to do +// it yet as those are used much less than Eq() in practice. A user +// can always write Matcher<T>(Lt(5)) to be explicit about the type, +// for example. +template <typename Lhs, typename Rhs> +inline Matcher<Lhs> TypedEq(const Rhs& rhs) { return Eq(rhs); } + +// Creates a polymorphic matcher that matches anything >= x. +template <typename Rhs> +inline internal::GeMatcher<Rhs> Ge(Rhs x) { + return internal::GeMatcher<Rhs>(x); +} + +// Creates a polymorphic matcher that matches anything > x. +template <typename Rhs> +inline internal::GtMatcher<Rhs> Gt(Rhs x) { + return internal::GtMatcher<Rhs>(x); +} + +// Creates a polymorphic matcher that matches anything <= x. +template <typename Rhs> +inline internal::LeMatcher<Rhs> Le(Rhs x) { + return internal::LeMatcher<Rhs>(x); +} + +// Creates a polymorphic matcher that matches anything < x. +template <typename Rhs> +inline internal::LtMatcher<Rhs> Lt(Rhs x) { + return internal::LtMatcher<Rhs>(x); +} + +// Creates a polymorphic matcher that matches anything != x. +template <typename Rhs> +inline internal::NeMatcher<Rhs> Ne(Rhs x) { + return internal::NeMatcher<Rhs>(x); +} +} // namespace testing + +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 5046 + +#endif // GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_ diff --git a/test/gtest/include/gtest/gtest-message.h b/test/gtest/include/gtest/gtest-message.h index d7266baab..4a80e11e6 100644 --- a/test/gtest/include/gtest/gtest-message.h +++ b/test/gtest/include/gtest/gtest-message.h @@ -26,8 +26,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) + // // The Google C++ Testing and Mocking Framework (Google Test) // @@ -43,13 +42,19 @@ // to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user // program! +// GOOGLETEST_CM0001 DO NOT DELETE + #ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ #define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ #include <limits> +#include <memory> #include "gtest/internal/gtest-port.h" +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ +/* class A needs to have dll-interface to be used by clients of class B */) + // Ensures that there is at least one operator<< in the global namespace. // See Message& operator<<(...) below for why. void operator<<(const testing::internal::Secret&, int); @@ -102,14 +107,6 @@ class GTEST_API_ Message { *ss_ << str; } -#if GTEST_OS_SYMBIAN - // Streams a value (either a pointer or not) to this object. - template <typename T> - inline Message& operator <<(const T& value) { - StreamHelper(typename internal::is_pointer<T>::type(), value); - return *this; - } -#else // Streams a non-pointer value to this object. template <typename T> inline Message& operator <<(const T& val) { @@ -147,14 +144,13 @@ class GTEST_API_ Message { // as "(null)". template <typename T> inline Message& operator <<(T* const& pointer) { // NOLINT - if (pointer == NULL) { + if (pointer == nullptr) { *ss_ << "(null)"; } else { *ss_ << pointer; } return *this; } -#endif // GTEST_OS_SYMBIAN // Since the basic IO manipulators are overloaded for both narrow // and wide streams, we have to provide this specialized definition @@ -183,12 +179,6 @@ class GTEST_API_ Message { Message& operator <<(const ::std::wstring& wstr); #endif // GTEST_HAS_STD_WSTRING -#if GTEST_HAS_GLOBAL_WSTRING - // Converts the given wide string to a narrow string using the UTF-8 - // encoding, and streams the result to this Message object. - Message& operator <<(const ::wstring& wstr); -#endif // GTEST_HAS_GLOBAL_WSTRING - // Gets the text streamed to this object so far as an std::string. // Each '\0' character in the buffer is replaced with "\\0". // @@ -196,31 +186,8 @@ class GTEST_API_ Message { std::string GetString() const; private: -#if GTEST_OS_SYMBIAN - // These are needed as the Nokia Symbian Compiler cannot decide between - // const T& and const T* in a function template. The Nokia compiler _can_ - // decide between class template specializations for T and T*, so a - // tr1::type_traits-like is_pointer works, and we can overload on that. - template <typename T> - inline void StreamHelper(internal::true_type /*is_pointer*/, T* pointer) { - if (pointer == NULL) { - *ss_ << "(null)"; - } else { - *ss_ << pointer; - } - } - template <typename T> - inline void StreamHelper(internal::false_type /*is_pointer*/, - const T& value) { - // See the comments in Message& operator <<(const T&) above for why - // we need this using statement. - using ::operator <<; - *ss_ << value; - } -#endif // GTEST_OS_SYMBIAN - // We'll hold the text streamed to this object here. - const internal::scoped_ptr< ::std::stringstream> ss_; + const std::unique_ptr< ::std::stringstream> ss_; // We declare (but don't implement) this to prevent the compiler // from implementing the assignment operator. @@ -246,4 +213,6 @@ std::string StreamableToString(const T& streamable) { } // namespace internal } // namespace testing +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 + #endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ diff --git a/test/gtest/include/gtest/gtest-param-test.h b/test/gtest/include/gtest/gtest-param-test.h index 8993c1ce1..c2e6eae3d 100644 --- a/test/gtest/include/gtest/gtest-param-test.h +++ b/test/gtest/include/gtest/gtest-param-test.h @@ -1,7 +1,3 @@ -// This file was GENERATED by command: -// pump.py gtest-param-test.h.pump -// DO NOT EDIT BY HAND!!! - // Copyright 2008, Google Inc. // All rights reserved. // @@ -31,14 +27,12 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Authors: vladl@google.com (Vlad Losev) -// // Macros and functions for implementing parameterized tests // in Google C++ Testing and Mocking Framework (Google Test) // // This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // - +// GOOGLETEST_CM0001 DO NOT DELETE #ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ @@ -77,7 +71,7 @@ TEST_P(FooTest, HasBlahBlah) { ... } -// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test +// Finally, you can use INSTANTIATE_TEST_SUITE_P to instantiate the test // case with any set of parameters you want. Google Test defines a number // of functions for generating test parameters. They return what we call // (surprise!) parameter generators. Here is a summary of them, which @@ -98,17 +92,17 @@ TEST_P(FooTest, HasBlahBlah) { // For more details, see comments at the definitions of these functions below // in this file. // -// The following statement will instantiate tests from the FooTest test case +// The following statement will instantiate tests from the FooTest test suite // each with parameter values "meeny", "miny", and "moe". -INSTANTIATE_TEST_CASE_P(InstantiationName, - FooTest, - Values("meeny", "miny", "moe")); +INSTANTIATE_TEST_SUITE_P(InstantiationName, + FooTest, + Values("meeny", "miny", "moe")); // To distinguish different instances of the pattern, (yes, you -// can instantiate it more then once) the first argument to the -// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the -// actual test case name. Remember to pick unique prefixes for different +// can instantiate it more than once) the first argument to the +// INSTANTIATE_TEST_SUITE_P macro is a prefix that will be added to the +// actual test suite name. Remember to pick unique prefixes for different // instantiations. The tests from the instantiation above will have // these names: // @@ -125,7 +119,7 @@ INSTANTIATE_TEST_CASE_P(InstantiationName, // with parameter values "cat" and "dog": const char* pets[] = {"cat", "dog"}; -INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); +INSTANTIATE_TEST_SUITE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); // The tests from the instantiation above will have these names: // @@ -134,9 +128,9 @@ INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); // * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat" // * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog" // -// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests -// in the given test case, whether their definitions come before or -// AFTER the INSTANTIATE_TEST_CASE_P statement. +// Please note that INSTANTIATE_TEST_SUITE_P will instantiate all tests +// in the given test suite, whether their definitions come before or +// AFTER the INSTANTIATE_TEST_SUITE_P statement. // // Please also note that generator expressions (including parameters to the // generators) are evaluated in InitGoogleTest(), after main() has started. @@ -180,26 +174,23 @@ TEST_P(DerivedTest, DoesBlah) { #endif // 0 -#include "gtest/internal/gtest-port.h" - -#if !GTEST_OS_SYMBIAN -# include <utility> -#endif +#include <iterator> +#include <utility> #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-param-util.h" -#include "gtest/internal/gtest-param-util-generated.h" +#include "gtest/internal/gtest-port.h" namespace testing { // Functions producing parameter generators. // // Google Test uses these generators to produce parameters for value- -// parameterized tests. When a parameterized test case is instantiated +// parameterized tests. When a parameterized test suite is instantiated // with a particular generator, Google Test creates and runs tests // for each element in the sequence produced by the generator. // -// In the following sample, tests from test case FooTest are instantiated +// In the following sample, tests from test suite FooTest are instantiated // each three times with parameter values 3, 5, and 8: // // class FooTest : public TestWithParam<int> { ... }; @@ -208,7 +199,7 @@ namespace testing { // } // TEST_P(FooTest, TestThat) { // } -// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8)); +// INSTANTIATE_TEST_SUITE_P(TestSequence, FooTest, Values(3, 5, 8)); // // Range() returns generators providing sequences of values in a range. @@ -265,13 +256,13 @@ internal::ParamGenerator<T> Range(T start, T end) { // // Examples: // -// This instantiates tests from test case StringTest +// This instantiates tests from test suite StringTest // each with C-string values of "foo", "bar", and "baz": // // const char* strings[] = {"foo", "bar", "baz"}; -// INSTANTIATE_TEST_CASE_P(StringSequence, StringTest, ValuesIn(strings)); +// INSTANTIATE_TEST_SUITE_P(StringSequence, StringTest, ValuesIn(strings)); // -// This instantiates tests from test case StlStringTest +// This instantiates tests from test suite StlStringTest // each with STL strings with values "a" and "b": // // ::std::vector< ::std::string> GetParameterStrings() { @@ -281,9 +272,9 @@ internal::ParamGenerator<T> Range(T start, T end) { // return v; // } // -// INSTANTIATE_TEST_CASE_P(CharSequence, -// StlStringTest, -// ValuesIn(GetParameterStrings())); +// INSTANTIATE_TEST_SUITE_P(CharSequence, +// StlStringTest, +// ValuesIn(GetParameterStrings())); // // // This will also instantiate tests from CharTest @@ -296,16 +287,15 @@ internal::ParamGenerator<T> Range(T start, T end) { // return list; // } // ::std::list<char> l = GetParameterChars(); -// INSTANTIATE_TEST_CASE_P(CharSequence2, -// CharTest, -// ValuesIn(l.begin(), l.end())); +// INSTANTIATE_TEST_SUITE_P(CharSequence2, +// CharTest, +// ValuesIn(l.begin(), l.end())); // template <typename ForwardIterator> internal::ParamGenerator< - typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type> + typename std::iterator_traits<ForwardIterator>::value_type> ValuesIn(ForwardIterator begin, ForwardIterator end) { - typedef typename ::testing::internal::IteratorTraits<ForwardIterator> - ::value_type ParamType; + typedef typename std::iterator_traits<ForwardIterator>::value_type ParamType; return internal::ParamGenerator<ParamType>( new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end)); } @@ -328,869 +318,22 @@ internal::ParamGenerator<typename Container::value_type> ValuesIn( // Values(T v1, T v2, ..., T vN) // - returns a generator producing sequences with elements v1, v2, ..., vN. // -// For example, this instantiates tests from test case BarTest each +// For example, this instantiates tests from test suite BarTest each // with values "one", "two", and "three": // -// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three")); +// INSTANTIATE_TEST_SUITE_P(NumSequence, +// BarTest, +// Values("one", "two", "three")); // -// This instantiates tests from test case BazTest each with values 1, 2, 3.5. +// This instantiates tests from test suite BazTest each with values 1, 2, 3.5. // The exact type of values will depend on the type of parameter in BazTest. // -// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); +// INSTANTIATE_TEST_SUITE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); // -// Currently, Values() supports from 1 to 50 parameters. // -template <typename T1> -internal::ValueArray1<T1> Values(T1 v1) { - return internal::ValueArray1<T1>(v1); -} - -template <typename T1, typename T2> -internal::ValueArray2<T1, T2> Values(T1 v1, T2 v2) { - return internal::ValueArray2<T1, T2>(v1, v2); -} - -template <typename T1, typename T2, typename T3> -internal::ValueArray3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) { - return internal::ValueArray3<T1, T2, T3>(v1, v2, v3); -} - -template <typename T1, typename T2, typename T3, typename T4> -internal::ValueArray4<T1, T2, T3, T4> Values(T1 v1, T2 v2, T3 v3, T4 v4) { - return internal::ValueArray4<T1, T2, T3, T4>(v1, v2, v3, v4); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5> -internal::ValueArray5<T1, T2, T3, T4, T5> Values(T1 v1, T2 v2, T3 v3, T4 v4, - T5 v5) { - return internal::ValueArray5<T1, T2, T3, T4, T5>(v1, v2, v3, v4, v5); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6> -internal::ValueArray6<T1, T2, T3, T4, T5, T6> Values(T1 v1, T2 v2, T3 v3, - T4 v4, T5 v5, T6 v6) { - return internal::ValueArray6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7> -internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7> Values(T1 v1, T2 v2, T3 v3, - T4 v4, T5 v5, T6 v6, T7 v7) { - return internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5, - v6, v7); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8> -internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8> Values(T1 v1, T2 v2, - T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) { - return internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4, - v5, v6, v7, v8); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9> -internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9> Values(T1 v1, T2 v2, - T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) { - return internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3, - v4, v5, v6, v7, v8, v9); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10> -internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Values(T1 v1, - T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) { - return internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1, - v2, v3, v4, v5, v6, v7, v8, v9, v10); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11> -internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, - T11> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11) { - return internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, - T11>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12> -internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12) { - return internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13> -internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13) { - return internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14> -internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) { - return internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, - v14); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15> -internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, - T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) { - return internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, - v13, v14, v15); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16> -internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16) { - return internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, - v12, v13, v14, v15, v16); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17> -internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17) { - return internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, - v11, v12, v13, v14, v15, v16, v17); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18> -internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, - T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18) { - return internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18>(v1, v2, v3, v4, v5, v6, v7, v8, v9, - v10, v11, v12, v13, v14, v15, v16, v17, v18); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19> -internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, - T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, - T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) { - return internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19>(v1, v2, v3, v4, v5, v6, v7, v8, - v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20> -internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20> Values(T1 v1, T2 v2, T3 v3, T4 v4, - T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, - T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) { - return internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20>(v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21> -internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21> Values(T1 v1, T2 v2, T3 v3, T4 v4, - T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, - T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) { - return internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(v1, v2, v3, v4, v5, v6, - v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22> -internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22> Values(T1 v1, T2 v2, T3 v3, - T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, - T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, - T21 v21, T22 v22) { - return internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>(v1, v2, v3, v4, - v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, - v20, v21, v22); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23> -internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> Values(T1 v1, T2 v2, - T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, - T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, - T21 v21, T22 v22, T23 v23) { - return internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23>(v1, v2, v3, - v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, - v20, v21, v22, v23); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24> -internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Values(T1 v1, T2 v2, - T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, - T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, - T21 v21, T22 v22, T23 v23, T24 v24) { - return internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24>(v1, v2, - v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, - v19, v20, v21, v22, v23, v24); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25> -internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Values(T1 v1, - T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, - T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, - T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) { - return internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25>(v1, - v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, - v18, v19, v20, v21, v22, v23, v24, v25); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26> -internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26) { - return internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, - v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27> -internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27) { - return internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, - v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28> -internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28) { - return internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, - v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, - v28); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29> -internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29) { - return internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, - v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, - v27, v28, v29); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30> -internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, - T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, - T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, - T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) { - return internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, - v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, - v26, v27, v28, v29, v30); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31> -internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, - T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) { - return internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, - v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, - v25, v26, v27, v28, v29, v30, v31); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32> -internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, - T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, - T32 v32) { - return internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32>(v1, v2, v3, v4, v5, v6, v7, v8, v9, - v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, - v24, v25, v26, v27, v28, v29, v30, v31, v32); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33> -internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, - T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, - T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, - T32 v32, T33 v33) { - return internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33>(v1, v2, v3, v4, v5, v6, v7, v8, - v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, - v24, v25, v26, v27, v28, v29, v30, v31, v32, v33); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34> -internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, - T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, - T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, - T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, - T31 v31, T32 v32, T33 v33, T34 v34) { - return internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34>(v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, - v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35> -internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35> Values(T1 v1, T2 v2, T3 v3, T4 v4, - T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, - T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, - T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, - T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) { - return internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35>(v1, v2, v3, v4, v5, v6, - v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, - v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36> -internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36> Values(T1 v1, T2 v2, T3 v3, T4 v4, - T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, - T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, - T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, - T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) { - return internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36>(v1, v2, v3, v4, - v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, - v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, - v34, v35, v36); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37> -internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37> Values(T1 v1, T2 v2, T3 v3, - T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, - T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, - T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, - T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, - T37 v37) { - return internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37>(v1, v2, v3, - v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, - v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, - v34, v35, v36, v37); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38> -internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Values(T1 v1, T2 v2, - T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, - T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, - T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, - T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, - T37 v37, T38 v38) { - return internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>(v1, v2, - v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, - v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, - v33, v34, v35, v36, v37, v38); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39> -internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Values(T1 v1, T2 v2, - T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, - T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, - T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, - T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, - T37 v37, T38 v38, T39 v39) { - return internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>(v1, - v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, - v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, - v32, v33, v34, v35, v36, v37, v38, v39); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40> -internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Values(T1 v1, - T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, - T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, - T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, - T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, - T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) { - return internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, - T40>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, - v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, - v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41> -internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, - T41> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) { - return internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, - T40, T41>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, - v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, - v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42> -internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, - T42> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42) { - return internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, - T40, T41, T42>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, - v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, - v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, - v42); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43> -internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, - T43> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43) { - return internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, - T40, T41, T42, T43>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, - v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, - v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, - v41, v42, v43); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44> -internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44) { - return internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, - T40, T41, T42, T43, T44>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, - v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, - v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, - v40, v41, v42, v43, v44); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45> -internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44, T45> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, - T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, - T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, - T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, - T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, - T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) { - return internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, - T40, T41, T42, T43, T44, T45>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, - v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, - v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, - v39, v40, v41, v42, v43, v44, v45); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46> -internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44, T45, T46> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, - T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, - T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, - T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) { - return internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, - T40, T41, T42, T43, T44, T45, T46>(v1, v2, v3, v4, v5, v6, v7, v8, v9, - v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, - v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, - v38, v39, v40, v41, v42, v43, v44, v45, v46); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47> -internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44, T45, T46, T47> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, - T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, - T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, - T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) { - return internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, - T40, T41, T42, T43, T44, T45, T46, T47>(v1, v2, v3, v4, v5, v6, v7, v8, - v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, - v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, - v38, v39, v40, v41, v42, v43, v44, v45, v46, v47); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47, typename T48> -internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44, T45, T46, T47, T48> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, - T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, - T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, - T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, - T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, - T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, - T48 v48) { - return internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, - T40, T41, T42, T43, T44, T45, T46, T47, T48>(v1, v2, v3, v4, v5, v6, v7, - v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, - v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, - v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47, typename T48, typename T49> -internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44, T45, T46, T47, T48, T49> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, - T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, - T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, - T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, - T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, - T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, - T47 v47, T48 v48, T49 v49) { - return internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, - T40, T41, T42, T43, T44, T45, T46, T47, T48, T49>(v1, v2, v3, v4, v5, v6, - v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, - v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, - v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47, typename T48, typename T49, typename T50> -internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44, T45, T46, T47, T48, T49, T50> Values(T1 v1, T2 v2, T3 v3, T4 v4, - T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, - T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, - T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, - T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, - T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, - T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) { - return internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, - T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>(v1, v2, v3, v4, - v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, - v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, - v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, - v48, v49, v50); +template <typename... T> +internal::ValueArray<T...> Values(T... v) { + return internal::ValueArray<T...>(std::move(v)...); } // Bool() allows generating tests with parameters in a set of (false, true). @@ -1203,7 +346,7 @@ internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, // of multiple flags can be tested when several Bool()'s are combined using // Combine() function. // -// In the following example all tests in the test case FlagDependentTest +// In the following example all tests in the test suite FlagDependentTest // will be instantiated twice with parameters false and true. // // class FlagDependentTest : public testing::TestWithParam<bool> { @@ -1211,13 +354,12 @@ internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, // external_flag = GetParam(); // } // } -// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool()); +// INSTANTIATE_TEST_SUITE_P(BoolSequence, FlagDependentTest, Bool()); // inline internal::ParamGenerator<bool> Bool() { return Values(false, true); } -# if GTEST_HAS_COMBINE // Combine() allows the user to combine two or more sequences to produce // values of a Cartesian product of those sequences' elements. // @@ -1226,184 +368,83 @@ inline internal::ParamGenerator<bool> Bool() { // - returns a generator producing sequences with elements coming from // the Cartesian product of elements from the sequences generated by // gen1, gen2, ..., genN. The sequence elements will have a type of -// tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types +// std::tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types // of elements from sequences produces by gen1, gen2, ..., genN. // -// Combine can have up to 10 arguments. This number is currently limited -// by the maximum number of elements in the tuple implementation used by Google -// Test. +// Combine can have up to 10 arguments. // // Example: // -// This will instantiate tests in test case AnimalTest each one with +// This will instantiate tests in test suite AnimalTest each one with // the parameter values tuple("cat", BLACK), tuple("cat", WHITE), // tuple("dog", BLACK), and tuple("dog", WHITE): // // enum Color { BLACK, GRAY, WHITE }; // class AnimalTest -// : public testing::TestWithParam<tuple<const char*, Color> > {...}; +// : public testing::TestWithParam<std::tuple<const char*, Color> > {...}; // // TEST_P(AnimalTest, AnimalLooksNice) {...} // -// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest, -// Combine(Values("cat", "dog"), -// Values(BLACK, WHITE))); +// INSTANTIATE_TEST_SUITE_P(AnimalVariations, AnimalTest, +// Combine(Values("cat", "dog"), +// Values(BLACK, WHITE))); // // This will instantiate tests in FlagDependentTest with all variations of two // Boolean flags: // // class FlagDependentTest -// : public testing::TestWithParam<tuple<bool, bool> > { +// : public testing::TestWithParam<std::tuple<bool, bool> > { // virtual void SetUp() { // // Assigns external_flag_1 and external_flag_2 values from the tuple. -// tie(external_flag_1, external_flag_2) = GetParam(); +// std::tie(external_flag_1, external_flag_2) = GetParam(); // } // }; // // TEST_P(FlagDependentTest, TestFeature1) { // // Test your code using external_flag_1 and external_flag_2 here. // } -// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest, -// Combine(Bool(), Bool())); -// -template <typename Generator1, typename Generator2> -internal::CartesianProductHolder2<Generator1, Generator2> Combine( - const Generator1& g1, const Generator2& g2) { - return internal::CartesianProductHolder2<Generator1, Generator2>( - g1, g2); -} - -template <typename Generator1, typename Generator2, typename Generator3> -internal::CartesianProductHolder3<Generator1, Generator2, Generator3> Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3) { - return internal::CartesianProductHolder3<Generator1, Generator2, Generator3>( - g1, g2, g3); -} - -template <typename Generator1, typename Generator2, typename Generator3, - typename Generator4> -internal::CartesianProductHolder4<Generator1, Generator2, Generator3, - Generator4> Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4) { - return internal::CartesianProductHolder4<Generator1, Generator2, Generator3, - Generator4>( - g1, g2, g3, g4); -} - -template <typename Generator1, typename Generator2, typename Generator3, - typename Generator4, typename Generator5> -internal::CartesianProductHolder5<Generator1, Generator2, Generator3, - Generator4, Generator5> Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4, const Generator5& g5) { - return internal::CartesianProductHolder5<Generator1, Generator2, Generator3, - Generator4, Generator5>( - g1, g2, g3, g4, g5); -} - -template <typename Generator1, typename Generator2, typename Generator3, - typename Generator4, typename Generator5, typename Generator6> -internal::CartesianProductHolder6<Generator1, Generator2, Generator3, - Generator4, Generator5, Generator6> Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4, const Generator5& g5, const Generator6& g6) { - return internal::CartesianProductHolder6<Generator1, Generator2, Generator3, - Generator4, Generator5, Generator6>( - g1, g2, g3, g4, g5, g6); -} - -template <typename Generator1, typename Generator2, typename Generator3, - typename Generator4, typename Generator5, typename Generator6, - typename Generator7> -internal::CartesianProductHolder7<Generator1, Generator2, Generator3, - Generator4, Generator5, Generator6, Generator7> Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4, const Generator5& g5, const Generator6& g6, - const Generator7& g7) { - return internal::CartesianProductHolder7<Generator1, Generator2, Generator3, - Generator4, Generator5, Generator6, Generator7>( - g1, g2, g3, g4, g5, g6, g7); -} - -template <typename Generator1, typename Generator2, typename Generator3, - typename Generator4, typename Generator5, typename Generator6, - typename Generator7, typename Generator8> -internal::CartesianProductHolder8<Generator1, Generator2, Generator3, - Generator4, Generator5, Generator6, Generator7, Generator8> Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4, const Generator5& g5, const Generator6& g6, - const Generator7& g7, const Generator8& g8) { - return internal::CartesianProductHolder8<Generator1, Generator2, Generator3, - Generator4, Generator5, Generator6, Generator7, Generator8>( - g1, g2, g3, g4, g5, g6, g7, g8); -} - -template <typename Generator1, typename Generator2, typename Generator3, - typename Generator4, typename Generator5, typename Generator6, - typename Generator7, typename Generator8, typename Generator9> -internal::CartesianProductHolder9<Generator1, Generator2, Generator3, - Generator4, Generator5, Generator6, Generator7, Generator8, - Generator9> Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4, const Generator5& g5, const Generator6& g6, - const Generator7& g7, const Generator8& g8, const Generator9& g9) { - return internal::CartesianProductHolder9<Generator1, Generator2, Generator3, - Generator4, Generator5, Generator6, Generator7, Generator8, Generator9>( - g1, g2, g3, g4, g5, g6, g7, g8, g9); -} - -template <typename Generator1, typename Generator2, typename Generator3, - typename Generator4, typename Generator5, typename Generator6, - typename Generator7, typename Generator8, typename Generator9, - typename Generator10> -internal::CartesianProductHolder10<Generator1, Generator2, Generator3, - Generator4, Generator5, Generator6, Generator7, Generator8, Generator9, - Generator10> Combine( - const Generator1& g1, const Generator2& g2, const Generator3& g3, - const Generator4& g4, const Generator5& g5, const Generator6& g6, - const Generator7& g7, const Generator8& g8, const Generator9& g9, - const Generator10& g10) { - return internal::CartesianProductHolder10<Generator1, Generator2, Generator3, - Generator4, Generator5, Generator6, Generator7, Generator8, Generator9, - Generator10>( - g1, g2, g3, g4, g5, g6, g7, g8, g9, g10); -} -# endif // GTEST_HAS_COMBINE - -# define TEST_P(test_case_name, test_name) \ - class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ - : public test_case_name { \ - public: \ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ - virtual void TestBody(); \ - private: \ - static int AddToRegistry() { \ - ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ - GetTestCasePatternHolder<test_case_name>(\ - #test_case_name, \ - ::testing::internal::CodeLocation(\ - __FILE__, __LINE__))->AddTestPattern(\ - GTEST_STRINGIFY_(test_case_name), \ - GTEST_STRINGIFY_(test_name), \ - new ::testing::internal::TestMetaFactory< \ - GTEST_TEST_CLASS_NAME_(\ - test_case_name, test_name)>()); \ - return 0; \ - } \ - static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_(\ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ - }; \ - int GTEST_TEST_CLASS_NAME_(test_case_name, \ - test_name)::gtest_registering_dummy_ = \ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ - void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() - -// The optional last argument to INSTANTIATE_TEST_CASE_P allows the user -// to specify a function or functor that generates custom test name suffixes -// based on the test parameters. The function should accept one argument of -// type testing::TestParamInfo<class ParamType>, and return std::string. +// INSTANTIATE_TEST_SUITE_P(TwoBoolSequence, FlagDependentTest, +// Combine(Bool(), Bool())); +// +template <typename... Generator> +internal::CartesianProductHolder<Generator...> Combine(const Generator&... g) { + return internal::CartesianProductHolder<Generator...>(g...); +} + +#define TEST_P(test_suite_name, test_name) \ + class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + : public test_suite_name { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \ + virtual void TestBody(); \ + \ + private: \ + static int AddToRegistry() { \ + ::testing::UnitTest::GetInstance() \ + ->parameterized_test_registry() \ + .GetTestSuitePatternHolder<test_suite_name>( \ + #test_suite_name, \ + ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ + ->AddTestPattern( \ + GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \ + new ::testing::internal::TestMetaFactory<GTEST_TEST_CLASS_NAME_( \ + test_suite_name, test_name)>()); \ + return 0; \ + } \ + static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)); \ + }; \ + int GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::gtest_registering_dummy_ = \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody() + +// The last argument to INSTANTIATE_TEST_SUITE_P allows the user to specify +// generator and an optional function or functor that generates custom test name +// suffixes based on the test parameters. Such a function or functor should +// accept one argument of type testing::TestParamInfo<class ParamType>, and +// return std::string. // // testing::PrintToStringParamName is a builtin test suffix generator that // returns the value of testing::PrintToString(GetParam()). @@ -1412,26 +453,50 @@ internal::CartesianProductHolder10<Generator1, Generator2, Generator3, // alphanumeric characters or underscore. Because PrintToString adds quotes // to std::string and C strings, it won't work for these types. -#define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator, ...) \ - static ::testing::internal::ParamGenerator<test_case_name::ParamType> \ - gtest_##prefix##test_case_name##_EvalGenerator_() { \ - return generator; \ - } \ - static ::std::string gtest_##prefix##test_case_name##_EvalGenerateName_( \ - const ::testing::TestParamInfo<test_case_name::ParamType>& info) { \ - return ::testing::internal::GetParamNameGen<test_case_name::ParamType>( \ - __VA_ARGS__)(info); \ - } \ - static int gtest_##prefix##test_case_name##_dummy_ GTEST_ATTRIBUTE_UNUSED_ = \ - ::testing::UnitTest::GetInstance() \ - ->parameterized_test_registry() \ - .GetTestCasePatternHolder<test_case_name>( \ - #test_case_name, \ - ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ - ->AddTestCaseInstantiation( \ - #prefix, >est_##prefix##test_case_name##_EvalGenerator_, \ - >est_##prefix##test_case_name##_EvalGenerateName_, __FILE__, \ - __LINE__) +#define GTEST_EXPAND_(arg) arg +#define GTEST_GET_FIRST_(first, ...) first +#define GTEST_GET_SECOND_(first, second, ...) second + +#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, ...) \ + static ::testing::internal::ParamGenerator<test_suite_name::ParamType> \ + gtest_##prefix##test_suite_name##_EvalGenerator_() { \ + return GTEST_EXPAND_(GTEST_GET_FIRST_(__VA_ARGS__, DUMMY_PARAM_)); \ + } \ + static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_( \ + const ::testing::TestParamInfo<test_suite_name::ParamType>& info) { \ + if (::testing::internal::AlwaysFalse()) { \ + ::testing::internal::TestNotEmpty(GTEST_EXPAND_(GTEST_GET_SECOND_( \ + __VA_ARGS__, \ + ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \ + DUMMY_PARAM_))); \ + auto t = std::make_tuple(__VA_ARGS__); \ + static_assert(std::tuple_size<decltype(t)>::value <= 2, \ + "Too Many Args!"); \ + } \ + return ((GTEST_EXPAND_(GTEST_GET_SECOND_( \ + __VA_ARGS__, \ + ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \ + DUMMY_PARAM_))))(info); \ + } \ + static int gtest_##prefix##test_suite_name##_dummy_ \ + GTEST_ATTRIBUTE_UNUSED_ = \ + ::testing::UnitTest::GetInstance() \ + ->parameterized_test_registry() \ + .GetTestSuitePatternHolder<test_suite_name>( \ + #test_suite_name, \ + ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ + ->AddTestSuiteInstantiation( \ + #prefix, >est_##prefix##test_suite_name##_EvalGenerator_, \ + >est_##prefix##test_suite_name##_EvalGenerateName_, \ + __FILE__, __LINE__) + +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ +#define INSTANTIATE_TEST_CASE_P \ + static_assert(::testing::internal::InstantiateTestCase_P_IsDeprecated(), \ + ""); \ + INSTANTIATE_TEST_SUITE_P +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ } // namespace testing diff --git a/test/gtest/include/gtest/gtest-printers.h b/test/gtest/include/gtest/gtest-printers.h index 373946b96..56a05450e 100644 --- a/test/gtest/include/gtest/gtest-printers.h +++ b/test/gtest/include/gtest/gtest-printers.h @@ -26,8 +26,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) + // Google Test - The Google C++ Testing and Mocking Framework // @@ -96,24 +95,26 @@ // being defined as many user-defined container types don't have // value_type. +// GOOGLETEST_CM0001 DO NOT DELETE + #ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ #define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ +#include <functional> #include <ostream> // NOLINT #include <sstream> #include <string> +#include <tuple> +#include <type_traits> #include <utility> #include <vector> -#include "gtest/internal/gtest-port.h" #include "gtest/internal/gtest-internal.h" - -#if GTEST_HAS_STD_TUPLE_ -# include <tuple> -#endif +#include "gtest/internal/gtest-port.h" #if GTEST_HAS_ABSL #include "absl/strings/string_view.h" #include "absl/types/optional.h" +#include "absl/types/variant.h" #endif // GTEST_HAS_ABSL namespace testing { @@ -150,9 +151,10 @@ class TypeWithoutFormatter { public: // This default version is called when kTypeKind is kOtherType. static void PrintValue(const T& value, ::std::ostream* os) { - PrintBytesInObjectTo(static_cast<const unsigned char*>( - reinterpret_cast<const void*>(&value)), - sizeof(value), os); + PrintBytesInObjectTo( + static_cast<const unsigned char*>( + reinterpret_cast<const void*>(std::addressof(value))), + sizeof(value), os); } }; @@ -231,12 +233,12 @@ ::std::basic_ostream<Char, CharTraits>& operator<<( ::std::basic_ostream<Char, CharTraits>& os, const T& x) { TypeWithoutFormatter<T, (internal::IsAProtocolMessage<T>::value ? kProtobuf - : internal::ImplicitlyConvertible< + : std::is_convertible< const T&, internal::BiggestInt>::value ? kConvertibleToInteger : #if GTEST_HAS_ABSL - internal::ImplicitlyConvertible< + std::is_convertible< const T&, absl::string_view>::value ? kConvertibleToStringView : @@ -356,16 +358,6 @@ GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const wchar_t); GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::std::string); GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::std::string); -#if GTEST_HAS_GLOBAL_STRING -GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::string); -GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::string); -#endif - -#if GTEST_HAS_GLOBAL_WSTRING -GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::wstring); -GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::wstring); -#endif - #if GTEST_HAS_STD_WSTRING GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::std::wstring); GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::std::wstring); @@ -446,7 +438,7 @@ void DefaultPrintTo(WrapPrinterType<kPrintContainer> /* dummy */, template <typename T> void DefaultPrintTo(WrapPrinterType<kPrintPointer> /* dummy */, T* p, ::std::ostream* os) { - if (p == NULL) { + if (p == nullptr) { *os << "NULL"; } else { // T is not a function type. We just call << to print p, @@ -458,7 +450,7 @@ void DefaultPrintTo(WrapPrinterType<kPrintPointer> /* dummy */, template <typename T> void DefaultPrintTo(WrapPrinterType<kPrintFunctionPointer> /* dummy */, T* p, ::std::ostream* os) { - if (p == NULL) { + if (p == nullptr) { *os << "NULL"; } else { // T is a function type, so '*os << p' doesn't do what we want @@ -513,13 +505,9 @@ void PrintTo(const T& value, ::std::ostream* os) { (sizeof(IsContainerTest<T>(0)) == sizeof(IsContainer)) && !IsRecursiveContainer<T>::value ? kPrintContainer - : !is_pointer<T>::value + : !std::is_pointer<T>::value ? kPrintOther -#if GTEST_LANG_CXX11 : std::is_function<typename std::remove_pointer<T>::type>::value -#else - : !internal::ImplicitlyConvertible<T, const void*>::value -#endif ? kPrintFunctionPointer : kPrintPointer > (), value, os); @@ -601,27 +589,13 @@ void PrintRawArrayTo(const T a[], size_t count, ::std::ostream* os) { } } -// Overloads for ::string and ::std::string. -#if GTEST_HAS_GLOBAL_STRING -GTEST_API_ void PrintStringTo(const ::string&s, ::std::ostream* os); -inline void PrintTo(const ::string& s, ::std::ostream* os) { - PrintStringTo(s, os); -} -#endif // GTEST_HAS_GLOBAL_STRING - +// Overloads for ::std::string. GTEST_API_ void PrintStringTo(const ::std::string&s, ::std::ostream* os); inline void PrintTo(const ::std::string& s, ::std::ostream* os) { PrintStringTo(s, os); } -// Overloads for ::wstring and ::std::wstring. -#if GTEST_HAS_GLOBAL_WSTRING -GTEST_API_ void PrintWideStringTo(const ::wstring&s, ::std::ostream* os); -inline void PrintTo(const ::wstring& s, ::std::ostream* os) { - PrintWideStringTo(s, os); -} -#endif // GTEST_HAS_GLOBAL_WSTRING - +// Overloads for ::std::wstring. #if GTEST_HAS_STD_WSTRING GTEST_API_ void PrintWideStringTo(const ::std::wstring&s, ::std::ostream* os); inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) { @@ -636,99 +610,38 @@ inline void PrintTo(absl::string_view sp, ::std::ostream* os) { } #endif // GTEST_HAS_ABSL -#if GTEST_LANG_CXX11 inline void PrintTo(std::nullptr_t, ::std::ostream* os) { *os << "(nullptr)"; } -#endif // GTEST_LANG_CXX11 -#if GTEST_HAS_TR1_TUPLE || GTEST_HAS_STD_TUPLE_ -// Helper function for printing a tuple. T must be instantiated with -// a tuple type. template <typename T> -void PrintTupleTo(const T& t, ::std::ostream* os); -#endif // GTEST_HAS_TR1_TUPLE || GTEST_HAS_STD_TUPLE_ - -#if GTEST_HAS_TR1_TUPLE -// Overload for ::std::tr1::tuple. Needed for printing function arguments, -// which are packed as tuples. - -// Overloaded PrintTo() for tuples of various arities. We support -// tuples of up-to 10 fields. The following implementation works -// regardless of whether tr1::tuple is implemented using the -// non-standard variadic template feature or not. - -inline void PrintTo(const ::std::tr1::tuple<>& t, ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template <typename T1> -void PrintTo(const ::std::tr1::tuple<T1>& t, ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template <typename T1, typename T2> -void PrintTo(const ::std::tr1::tuple<T1, T2>& t, ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template <typename T1, typename T2, typename T3> -void PrintTo(const ::std::tr1::tuple<T1, T2, T3>& t, ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template <typename T1, typename T2, typename T3, typename T4> -void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4>& t, ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5> -void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5>& t, - ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6> -void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6>& t, - ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7> -void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7>& t, - ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8> -void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8>& t, - ::std::ostream* os) { - PrintTupleTo(t, os); -} - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9> -void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>& t, - ::std::ostream* os) { - PrintTupleTo(t, os); +void PrintTo(std::reference_wrapper<T> ref, ::std::ostream* os) { + UniversalPrinter<T&>::Print(ref.get(), os); } -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10> -void PrintTo( - const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>& t, - ::std::ostream* os) { - PrintTupleTo(t, os); +// Helper function for printing a tuple. T must be instantiated with +// a tuple type. +template <typename T> +void PrintTupleTo(const T&, std::integral_constant<size_t, 0>, + ::std::ostream*) {} + +template <typename T, size_t I> +void PrintTupleTo(const T& t, std::integral_constant<size_t, I>, + ::std::ostream* os) { + PrintTupleTo(t, std::integral_constant<size_t, I - 1>(), os); + GTEST_INTENTIONAL_CONST_COND_PUSH_() + if (I > 1) { + GTEST_INTENTIONAL_CONST_COND_POP_() + *os << ", "; + } + UniversalPrinter<typename std::tuple_element<I - 1, T>::type>::Print( + std::get<I - 1>(t), os); } -#endif // GTEST_HAS_TR1_TUPLE -#if GTEST_HAS_STD_TUPLE_ template <typename... Types> void PrintTo(const ::std::tuple<Types...>& t, ::std::ostream* os) { - PrintTupleTo(t, os); + *os << "("; + PrintTupleTo(t, std::integral_constant<size_t, sizeof...(Types)>(), os); + *os << ")"; } -#endif // GTEST_HAS_STD_TUPLE_ // Overload for std::pair. template <typename T1, typename T2> @@ -787,6 +700,28 @@ class UniversalPrinter<::absl::optional<T>> { } }; +// Printer for absl::variant + +template <typename... T> +class UniversalPrinter<::absl::variant<T...>> { + public: + static void Print(const ::absl::variant<T...>& value, ::std::ostream* os) { + *os << '('; + absl::visit(Visitor{os}, value); + *os << ')'; + } + + private: + struct Visitor { + template <typename U> + void operator()(const U& u) const { + *os << "'" << GetTypeName<U>() << "' with value "; + UniversalPrint(u, os); + } + ::std::ostream* os; + }; +}; + #endif // GTEST_HAS_ABSL // UniversalPrintArray(begin, len, os) prints an array of 'len' @@ -802,7 +737,6 @@ void UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) { // If the array has more than kThreshold elements, we'll have to // omit some details by printing only the first and the last // kChunkSize elements. - // TODO(wan@google.com): let the user control the threshold using a flag. if (len <= kThreshold) { PrintRawArrayTo(begin, len, os); } else { @@ -881,7 +815,7 @@ template <> class UniversalTersePrinter<const char*> { public: static void Print(const char* str, ::std::ostream* os) { - if (str == NULL) { + if (str == nullptr) { *os << "NULL"; } else { UniversalPrint(std::string(str), os); @@ -901,7 +835,7 @@ template <> class UniversalTersePrinter<const wchar_t*> { public: static void Print(const wchar_t* str, ::std::ostream* os) { - if (str == NULL) { + if (str == nullptr) { *os << "NULL"; } else { UniversalPrint(::std::wstring(str), os); @@ -937,108 +871,20 @@ void UniversalPrint(const T& value, ::std::ostream* os) { typedef ::std::vector< ::std::string> Strings; -// TuplePolicy<TupleT> must provide: -// - tuple_size -// size of tuple TupleT. -// - get<size_t I>(const TupleT& t) -// static function extracting element I of tuple TupleT. -// - tuple_element<size_t I>::type -// type of element I of tuple TupleT. -template <typename TupleT> -struct TuplePolicy; - -#if GTEST_HAS_TR1_TUPLE -template <typename TupleT> -struct TuplePolicy { - typedef TupleT Tuple; - static const size_t tuple_size = ::std::tr1::tuple_size<Tuple>::value; - - template <size_t I> - struct tuple_element : ::std::tr1::tuple_element<I, Tuple> {}; - - template <size_t I> - static typename AddReference< - const typename ::std::tr1::tuple_element<I, Tuple>::type>::type get( - const Tuple& tuple) { - return ::std::tr1::get<I>(tuple); - } -}; -template <typename TupleT> -const size_t TuplePolicy<TupleT>::tuple_size; -#endif // GTEST_HAS_TR1_TUPLE - -#if GTEST_HAS_STD_TUPLE_ -template <typename... Types> -struct TuplePolicy< ::std::tuple<Types...> > { - typedef ::std::tuple<Types...> Tuple; - static const size_t tuple_size = ::std::tuple_size<Tuple>::value; - - template <size_t I> - struct tuple_element : ::std::tuple_element<I, Tuple> {}; - - template <size_t I> - static const typename ::std::tuple_element<I, Tuple>::type& get( - const Tuple& tuple) { - return ::std::get<I>(tuple); - } -}; -template <typename... Types> -const size_t TuplePolicy< ::std::tuple<Types...> >::tuple_size; -#endif // GTEST_HAS_STD_TUPLE_ - -#if GTEST_HAS_TR1_TUPLE || GTEST_HAS_STD_TUPLE_ -// This helper template allows PrintTo() for tuples and -// UniversalTersePrintTupleFieldsToStrings() to be defined by -// induction on the number of tuple fields. The idea is that -// TuplePrefixPrinter<N>::PrintPrefixTo(t, os) prints the first N -// fields in tuple t, and can be defined in terms of -// TuplePrefixPrinter<N - 1>. -// -// The inductive case. -template <size_t N> -struct TuplePrefixPrinter { - // Prints the first N fields of a tuple. - template <typename Tuple> - static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) { - TuplePrefixPrinter<N - 1>::PrintPrefixTo(t, os); - GTEST_INTENTIONAL_CONST_COND_PUSH_() - if (N > 1) { - GTEST_INTENTIONAL_CONST_COND_POP_() - *os << ", "; - } - UniversalPrinter< - typename TuplePolicy<Tuple>::template tuple_element<N - 1>::type> - ::Print(TuplePolicy<Tuple>::template get<N - 1>(t), os); - } - // Tersely prints the first N fields of a tuple to a string vector, // one element for each field. - template <typename Tuple> - static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) { - TuplePrefixPrinter<N - 1>::TersePrintPrefixToStrings(t, strings); - ::std::stringstream ss; - UniversalTersePrint(TuplePolicy<Tuple>::template get<N - 1>(t), &ss); - strings->push_back(ss.str()); - } -}; - -// Base case. -template <> -struct TuplePrefixPrinter<0> { - template <typename Tuple> - static void PrintPrefixTo(const Tuple&, ::std::ostream*) {} - - template <typename Tuple> - static void TersePrintPrefixToStrings(const Tuple&, Strings*) {} -}; - -// Helper function for printing a tuple. -// Tuple must be either std::tr1::tuple or std::tuple type. template <typename Tuple> -void PrintTupleTo(const Tuple& t, ::std::ostream* os) { - *os << "("; - TuplePrefixPrinter<TuplePolicy<Tuple>::tuple_size>::PrintPrefixTo(t, os); - *os << ")"; +void TersePrintPrefixToStrings(const Tuple&, std::integral_constant<size_t, 0>, + Strings*) {} +template <typename Tuple, size_t I> +void TersePrintPrefixToStrings(const Tuple& t, + std::integral_constant<size_t, I>, + Strings* strings) { + TersePrintPrefixToStrings(t, std::integral_constant<size_t, I - 1>(), + strings); + ::std::stringstream ss; + UniversalTersePrint(std::get<I - 1>(t), &ss); + strings->push_back(ss.str()); } // Prints the fields of a tuple tersely to a string vector, one @@ -1047,11 +893,11 @@ void PrintTupleTo(const Tuple& t, ::std::ostream* os) { template <typename Tuple> Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) { Strings result; - TuplePrefixPrinter<TuplePolicy<Tuple>::tuple_size>:: - TersePrintPrefixToStrings(value, &result); + TersePrintPrefixToStrings( + value, std::integral_constant<size_t, std::tuple_size<Tuple>::value>(), + &result); return result; } -#endif // GTEST_HAS_TR1_TUPLE || GTEST_HAS_STD_TUPLE_ } // namespace internal diff --git a/test/gtest/include/gtest/gtest-spi.h b/test/gtest/include/gtest/gtest-spi.h index 0e5c10cf7..aa38870e8 100644 --- a/test/gtest/include/gtest/gtest-spi.h +++ b/test/gtest/include/gtest/gtest-spi.h @@ -26,17 +26,21 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) + // // Utilities for testing Google Test itself and code that uses Google Test // (e.g. frameworks built on top of Google Test). +// GOOGLETEST_CM0004 DO NOT DELETE + #ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_ #define GTEST_INCLUDE_GTEST_GTEST_SPI_H_ #include "gtest/gtest.h" +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ +/* class A needs to have dll-interface to be used by clients of class B */) + namespace testing { // This helper class can be used to mock out Google Test failure reporting @@ -68,14 +72,15 @@ class GTEST_API_ ScopedFakeTestPartResultReporter TestPartResultArray* result); // The d'tor restores the previous test part result reporter. - virtual ~ScopedFakeTestPartResultReporter(); + ~ScopedFakeTestPartResultReporter() override; // Appends the TestPartResult object to the TestPartResultArray // received in the constructor. // // This method is from the TestPartResultReporterInterface // interface. - virtual void ReportTestPartResult(const TestPartResult& result); + void ReportTestPartResult(const TestPartResult& result) override; + private: void Init(); @@ -111,6 +116,8 @@ class GTEST_API_ SingleFailureChecker { } // namespace testing +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 + // A set of macros for testing Google Test assertions or code that's expected // to generate Google Test fatal failures. It verifies that the given // statement will cause exactly one fatal Google Test failure with 'substr' diff --git a/test/gtest/include/gtest/gtest-test-part.h b/test/gtest/include/gtest/gtest-test-part.h index 77eb84483..05a798535 100644 --- a/test/gtest/include/gtest/gtest-test-part.h +++ b/test/gtest/include/gtest/gtest-test-part.h @@ -27,8 +27,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Author: mheule@google.com (Markus Heule) -// +// GOOGLETEST_CM0001 DO NOT DELETE #ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ #define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ @@ -38,6 +37,9 @@ #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-string.h" +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ +/* class A needs to have dll-interface to be used by clients of class B */) + namespace testing { // A copyable object representing the result of a test part (i.e. an @@ -51,22 +53,20 @@ class GTEST_API_ TestPartResult { enum Type { kSuccess, // Succeeded. kNonFatalFailure, // Failed but the test can continue. - kFatalFailure // Failed and the test should be terminated. + kFatalFailure, // Failed and the test should be terminated. + kSkip // Skipped. }; // C'tor. TestPartResult does NOT have a default constructor. // Always use this constructor (with parameters) to create a // TestPartResult object. - TestPartResult(Type a_type, - const char* a_file_name, - int a_line_number, + TestPartResult(Type a_type, const char* a_file_name, int a_line_number, const char* a_message) : type_(a_type), - file_name_(a_file_name == NULL ? "" : a_file_name), + file_name_(a_file_name == nullptr ? "" : a_file_name), line_number_(a_line_number), summary_(ExtractSummary(a_message)), - message_(a_message) { - } + message_(a_message) {} // Gets the outcome of the test part. Type type() const { return type_; } @@ -74,7 +74,7 @@ class GTEST_API_ TestPartResult { // Gets the name of the source file where the test part took place, or // NULL if it's unknown. const char* file_name() const { - return file_name_.empty() ? NULL : file_name_.c_str(); + return file_name_.empty() ? nullptr : file_name_.c_str(); } // Gets the line in the source file where the test part took place, @@ -87,18 +87,21 @@ class GTEST_API_ TestPartResult { // Gets the message associated with the test part. const char* message() const { return message_.c_str(); } - // Returns true iff the test part passed. - bool passed() const { return type_ == kSuccess; } + // Returns true if and only if the test part was skipped. + bool skipped() const { return type_ == kSkip; } - // Returns true iff the test part failed. - bool failed() const { return type_ != kSuccess; } + // Returns true if and only if the test part passed. + bool passed() const { return type_ == kSuccess; } - // Returns true iff the test part non-fatally failed. + // Returns true if and only if the test part non-fatally failed. bool nonfatally_failed() const { return type_ == kNonFatalFailure; } - // Returns true iff the test part fatally failed. + // Returns true if and only if the test part fatally failed. bool fatally_failed() const { return type_ == kFatalFailure; } + // Returns true if and only if the test part failed. + bool failed() const { return fatally_failed() || nonfatally_failed(); } + private: Type type_; @@ -143,7 +146,7 @@ class GTEST_API_ TestPartResultArray { }; // This interface knows how to report a test part result. -class TestPartResultReporterInterface { +class GTEST_API_ TestPartResultReporterInterface { public: virtual ~TestPartResultReporterInterface() {} @@ -162,8 +165,8 @@ class GTEST_API_ HasNewFatalFailureHelper : public TestPartResultReporterInterface { public: HasNewFatalFailureHelper(); - virtual ~HasNewFatalFailureHelper(); - virtual void ReportTestPartResult(const TestPartResult& result); + ~HasNewFatalFailureHelper() override; + void ReportTestPartResult(const TestPartResult& result) override; bool has_new_fatal_failure() const { return has_new_fatal_failure_; } private: bool has_new_fatal_failure_; @@ -176,4 +179,6 @@ class GTEST_API_ HasNewFatalFailureHelper } // namespace testing +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 + #endif // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ diff --git a/test/gtest/include/gtest/gtest-typed-test.h b/test/gtest/include/gtest/gtest-typed-test.h index 759d1dbdf..095ce0580 100644 --- a/test/gtest/include/gtest/gtest-typed-test.h +++ b/test/gtest/include/gtest/gtest-typed-test.h @@ -26,8 +26,9 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) + + +// GOOGLETEST_CM0001 DO NOT DELETE #ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ @@ -51,22 +52,22 @@ class FooTest : public testing::Test { T value_; }; -// Next, associate a list of types with the test case, which will be +// Next, associate a list of types with the test suite, which will be // repeated for each type in the list. The typedef is necessary for // the macro to parse correctly. typedef testing::Types<char, int, unsigned int> MyTypes; -TYPED_TEST_CASE(FooTest, MyTypes); +TYPED_TEST_SUITE(FooTest, MyTypes); // If the type list contains only one type, you can write that type // directly without Types<...>: -// TYPED_TEST_CASE(FooTest, int); +// TYPED_TEST_SUITE(FooTest, int); // Then, use TYPED_TEST() instead of TEST_F() to define as many typed -// tests for this test case as you want. +// tests for this test suite as you want. TYPED_TEST(FooTest, DoesBlah) { - // Inside a test, refer to TypeParam to get the type parameter. - // Since we are inside a derived class template, C++ requires use to - // visit the members of FooTest via 'this'. + // Inside a test, refer to the special name TypeParam to get the type + // parameter. Since we are inside a derived class template, C++ requires + // us to visit the members of FooTest via 'this'. TypeParam n = this->value_; // To visit static members of the fixture, add the TestFixture:: @@ -82,6 +83,24 @@ TYPED_TEST(FooTest, DoesBlah) { TYPED_TEST(FooTest, HasPropertyA) { ... } +// TYPED_TEST_SUITE takes an optional third argument which allows to specify a +// class that generates custom test name suffixes based on the type. This should +// be a class which has a static template function GetName(int index) returning +// a string for each type. The provided integer index equals the index of the +// type in the provided type list. In many cases the index can be ignored. +// +// For example: +// class MyTypeNames { +// public: +// template <typename T> +// static std::string GetName(int) { +// if (std::is_same<T, char>()) return "char"; +// if (std::is_same<T, int>()) return "int"; +// if (std::is_same<T, unsigned int>()) return "unsignedInt"; +// } +// }; +// TYPED_TEST_SUITE(FooTest, MyTypes, MyTypeNames); + #endif // 0 // Type-parameterized tests are abstract test patterns parameterized @@ -107,13 +126,13 @@ class FooTest : public testing::Test { ... }; -// Next, declare that you will define a type-parameterized test case +// Next, declare that you will define a type-parameterized test suite // (the _P suffix is for "parameterized" or "pattern", whichever you // prefer): -TYPED_TEST_CASE_P(FooTest); +TYPED_TEST_SUITE_P(FooTest); // Then, use TYPED_TEST_P() to define as many type-parameterized tests -// for this type-parameterized test case as you want. +// for this type-parameterized test suite as you want. TYPED_TEST_P(FooTest, DoesBlah) { // Inside a test, refer to TypeParam to get the type parameter. TypeParam n = 0; @@ -124,10 +143,10 @@ TYPED_TEST_P(FooTest, HasPropertyA) { ... } // Now the tricky part: you need to register all test patterns before // you can instantiate them. The first argument of the macro is the -// test case name; the rest are the names of the tests in this test +// test suite name; the rest are the names of the tests in this test // case. -REGISTER_TYPED_TEST_CASE_P(FooTest, - DoesBlah, HasPropertyA); +REGISTER_TYPED_TEST_SUITE_P(FooTest, + DoesBlah, HasPropertyA); // Finally, you are free to instantiate the pattern with the types you // want. If you put the above code in a header file, you can #include @@ -135,14 +154,19 @@ REGISTER_TYPED_TEST_CASE_P(FooTest, // // To distinguish different instances of the pattern, the first // argument to the INSTANTIATE_* macro is a prefix that will be added -// to the actual test case name. Remember to pick unique prefixes for +// to the actual test suite name. Remember to pick unique prefixes for // different instances. typedef testing::Types<char, int, unsigned int> MyTypes; -INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes); +INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); // If the type list contains only one type, you can write that type // directly without Types<...>: -// INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, int); +// INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, int); +// +// Similar to the optional argument of TYPED_TEST_SUITE above, +// INSTANTIATE_TEST_SUITE_P takes an optional fourth argument which allows to +// generate custom names. +// INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes, MyTypeNames); #endif // 0 @@ -156,35 +180,53 @@ INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes); // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the name of the typedef for the type parameters of the -// given test case. -# define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_ - -// The 'Types' template argument below must have spaces around it -// since some compilers may choke on '>>' when passing a template -// instance (e.g. Types<int>) -# define TYPED_TEST_CASE(CaseName, Types) \ - typedef ::testing::internal::TypeList< Types >::type \ - GTEST_TYPE_PARAMS_(CaseName) - -# define TYPED_TEST(CaseName, TestName) \ - template <typename gtest_TypeParam_> \ - class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \ - : public CaseName<gtest_TypeParam_> { \ - private: \ - typedef CaseName<gtest_TypeParam_> TestFixture; \ - typedef gtest_TypeParam_ TypeParam; \ - virtual void TestBody(); \ - }; \ - bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \ - ::testing::internal::TypeParameterizedTest< \ - CaseName, \ - ::testing::internal::TemplateSel< \ - GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \ - GTEST_TYPE_PARAMS_(CaseName)>::Register(\ - "", ::testing::internal::CodeLocation(__FILE__, __LINE__), \ - #CaseName, #TestName, 0); \ - template <typename gtest_TypeParam_> \ - void GTEST_TEST_CLASS_NAME_(CaseName, TestName)<gtest_TypeParam_>::TestBody() +// given test suite. +#define GTEST_TYPE_PARAMS_(TestSuiteName) gtest_type_params_##TestSuiteName##_ + +// Expands to the name of the typedef for the NameGenerator, responsible for +// creating the suffixes of the name. +#define GTEST_NAME_GENERATOR_(TestSuiteName) \ + gtest_type_params_##TestSuiteName##_NameGenerator + +#define TYPED_TEST_SUITE(CaseName, Types, ...) \ + typedef ::testing::internal::TypeList<Types>::type GTEST_TYPE_PARAMS_( \ + CaseName); \ + typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \ + GTEST_NAME_GENERATOR_(CaseName) + +# define TYPED_TEST(CaseName, TestName) \ + template <typename gtest_TypeParam_> \ + class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \ + : public CaseName<gtest_TypeParam_> { \ + private: \ + typedef CaseName<gtest_TypeParam_> TestFixture; \ + typedef gtest_TypeParam_ TypeParam; \ + virtual void TestBody(); \ + }; \ + static bool gtest_##CaseName##_##TestName##_registered_ \ + GTEST_ATTRIBUTE_UNUSED_ = \ + ::testing::internal::TypeParameterizedTest< \ + CaseName, \ + ::testing::internal::TemplateSel<GTEST_TEST_CLASS_NAME_(CaseName, \ + TestName)>, \ + GTEST_TYPE_PARAMS_( \ + CaseName)>::Register("", \ + ::testing::internal::CodeLocation( \ + __FILE__, __LINE__), \ + #CaseName, #TestName, 0, \ + ::testing::internal::GenerateNames< \ + GTEST_NAME_GENERATOR_(CaseName), \ + GTEST_TYPE_PARAMS_(CaseName)>()); \ + template <typename gtest_TypeParam_> \ + void GTEST_TEST_CLASS_NAME_(CaseName, \ + TestName)<gtest_TypeParam_>::TestBody() + +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ +#define TYPED_TEST_CASE \ + static_assert(::testing::internal::TypedTestCaseIsDeprecated(), ""); \ + TYPED_TEST_SUITE +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ #endif // GTEST_HAS_TYPED_TEST @@ -195,69 +237,93 @@ INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes); // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the namespace name that the type-parameterized tests for -// the given type-parameterized test case are defined in. The exact +// the given type-parameterized test suite are defined in. The exact // name of the namespace is subject to change without notice. -# define GTEST_CASE_NAMESPACE_(TestCaseName) \ - gtest_case_##TestCaseName##_ +#define GTEST_SUITE_NAMESPACE_(TestSuiteName) gtest_suite_##TestSuiteName##_ // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the name of the variable used to remember the names of -// the defined tests in the given test case. -# define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \ - gtest_typed_test_case_p_state_##TestCaseName##_ +// the defined tests in the given test suite. +#define GTEST_TYPED_TEST_SUITE_P_STATE_(TestSuiteName) \ + gtest_typed_test_suite_p_state_##TestSuiteName##_ // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE DIRECTLY. // // Expands to the name of the variable used to remember the names of -// the registered tests in the given test case. -# define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \ - gtest_registered_test_names_##TestCaseName##_ +// the registered tests in the given test suite. +#define GTEST_REGISTERED_TEST_NAMES_(TestSuiteName) \ + gtest_registered_test_names_##TestSuiteName##_ // The variables defined in the type-parameterized test macros are // static as typically these macros are used in a .h file that can be // #included in multiple translation units linked together. -# define TYPED_TEST_CASE_P(CaseName) \ - static ::testing::internal::TypedTestCasePState \ - GTEST_TYPED_TEST_CASE_P_STATE_(CaseName) - -# define TYPED_TEST_P(CaseName, TestName) \ - namespace GTEST_CASE_NAMESPACE_(CaseName) { \ - template <typename gtest_TypeParam_> \ - class TestName : public CaseName<gtest_TypeParam_> { \ - private: \ - typedef CaseName<gtest_TypeParam_> TestFixture; \ - typedef gtest_TypeParam_ TypeParam; \ - virtual void TestBody(); \ - }; \ - static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \ - GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\ - __FILE__, __LINE__, #CaseName, #TestName); \ - } \ - template <typename gtest_TypeParam_> \ - void GTEST_CASE_NAMESPACE_(CaseName)::TestName<gtest_TypeParam_>::TestBody() - -# define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \ - namespace GTEST_CASE_NAMESPACE_(CaseName) { \ - typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \ - } \ - static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) \ - GTEST_ATTRIBUTE_UNUSED_ = \ - GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames( \ - __FILE__, __LINE__, #__VA_ARGS__) - -// The 'Types' template argument below must have spaces around it -// since some compilers may choke on '>>' when passing a template -// instance (e.g. Types<int>) -# define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \ - bool gtest_##Prefix##_##CaseName GTEST_ATTRIBUTE_UNUSED_ = \ - ::testing::internal::TypeParameterizedTestCase<CaseName, \ - GTEST_CASE_NAMESPACE_(CaseName)::gtest_AllTests_, \ - ::testing::internal::TypeList< Types >::type>::Register(\ - #Prefix, \ - ::testing::internal::CodeLocation(__FILE__, __LINE__), \ - >EST_TYPED_TEST_CASE_P_STATE_(CaseName), \ - #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName)) +#define TYPED_TEST_SUITE_P(SuiteName) \ + static ::testing::internal::TypedTestSuitePState \ + GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName) + +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ +#define TYPED_TEST_CASE_P \ + static_assert(::testing::internal::TypedTestCase_P_IsDeprecated(), ""); \ + TYPED_TEST_SUITE_P +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + +#define TYPED_TEST_P(SuiteName, TestName) \ + namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \ + template <typename gtest_TypeParam_> \ + class TestName : public SuiteName<gtest_TypeParam_> { \ + private: \ + typedef SuiteName<gtest_TypeParam_> TestFixture; \ + typedef gtest_TypeParam_ TypeParam; \ + virtual void TestBody(); \ + }; \ + static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \ + GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).AddTestName( \ + __FILE__, __LINE__, #SuiteName, #TestName); \ + } \ + template <typename gtest_TypeParam_> \ + void GTEST_SUITE_NAMESPACE_( \ + SuiteName)::TestName<gtest_TypeParam_>::TestBody() + +#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \ + namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \ + typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \ + } \ + static const char* const GTEST_REGISTERED_TEST_NAMES_( \ + SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \ + GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).VerifyRegisteredTestNames( \ + __FILE__, __LINE__, #__VA_ARGS__) + +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ +#define REGISTER_TYPED_TEST_CASE_P \ + static_assert(::testing::internal::RegisterTypedTestCase_P_IsDeprecated(), \ + ""); \ + REGISTER_TYPED_TEST_SUITE_P +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + +#define INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, SuiteName, Types, ...) \ + static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \ + ::testing::internal::TypeParameterizedTestSuite< \ + SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \ + ::testing::internal::TypeList<Types>::type>:: \ + Register(#Prefix, \ + ::testing::internal::CodeLocation(__FILE__, __LINE__), \ + >EST_TYPED_TEST_SUITE_P_STATE_(SuiteName), #SuiteName, \ + GTEST_REGISTERED_TEST_NAMES_(SuiteName), \ + ::testing::internal::GenerateNames< \ + ::testing::internal::NameGeneratorSelector< \ + __VA_ARGS__>::type, \ + ::testing::internal::TypeList<Types>::type>()) + +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ +#define INSTANTIATE_TYPED_TEST_CASE_P \ + static_assert( \ + ::testing::internal::InstantiateTypedTestCase_P_IsDeprecated(), ""); \ + INSTANTIATE_TYPED_TEST_SUITE_P +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ #endif // GTEST_HAS_TYPED_TEST_P diff --git a/test/gtest/include/gtest/gtest.h b/test/gtest/include/gtest/gtest.h index 686750e02..dbe5b1c2c 100644 --- a/test/gtest/include/gtest/gtest.h +++ b/test/gtest/include/gtest/gtest.h @@ -26,8 +26,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) + // // The Google C++ Testing and Mocking Framework (Google Test) // @@ -48,16 +47,22 @@ // registration from Barthelemy Dagenais' (barthelemy@prologique.com) // easyUnit framework. +// GOOGLETEST_CM0001 DO NOT DELETE + #ifndef GTEST_INCLUDE_GTEST_GTEST_H_ #define GTEST_INCLUDE_GTEST_GTEST_H_ +#include <cstddef> #include <limits> +#include <memory> #include <ostream> +#include <type_traits> #include <vector> #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-string.h" #include "gtest/gtest-death-test.h" +#include "gtest/gtest-matchers.h" #include "gtest/gtest-message.h" #include "gtest/gtest-param-test.h" #include "gtest/gtest-printers.h" @@ -65,20 +70,8 @@ #include "gtest/gtest-test-part.h" #include "gtest/gtest-typed-test.h" -// Depending on the platform, different string classes are available. -// On Linux, in addition to ::std::string, Google also makes use of -// class ::string, which has the same interface as ::std::string, but -// has a different implementation. -// -// You can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that -// ::string is available AND is a distinct type to ::std::string, or -// define it to 0 to indicate otherwise. -// -// If ::std::string and ::string are the same class on your platform -// due to aliasing, you should define GTEST_HAS_GLOBAL_STRING to 0. -// -// If you do not define GTEST_HAS_GLOBAL_STRING, it is defined -// heuristically. +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ +/* class A needs to have dll-interface to be used by clients of class B */) namespace testing { @@ -112,6 +105,10 @@ GTEST_DECLARE_string_(color); // the tests to run. If the filter is not given all tests are executed. GTEST_DECLARE_string_(filter); +// This flag controls whether Google Test installs a signal handler that dumps +// debugging information when fatal signals are raised. +GTEST_DECLARE_bool_(install_failure_signal_handler); + // This flag causes the Google Test to list tests. None of the tests listed // are actually run if the flag is provided. GTEST_DECLARE_bool_(list_tests); @@ -155,6 +152,10 @@ GTEST_DECLARE_bool_(throw_on_failure); // the specified host machine. GTEST_DECLARE_string_(stream_result_to); +#if GTEST_USE_OWN_FLAGFILE_FLAG_ +GTEST_DECLARE_string_(flagfile); +#endif // GTEST_USE_OWN_FLAGFILE_FLAG_ + // The upper limit for valid stack trace depths. const int kMaxStackTraceDepth = 100; @@ -183,7 +184,12 @@ void ReportFailureInUnknownLocation(TestPartResult::Type result_type, // If we don't forward declare them the compiler might confuse the classes // in friendship clauses with same named classes on the scope. class Test; -class TestCase; +class TestSuite; + +// Old API is still available but deprecated +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ +using TestCase = TestSuite; +#endif class TestInfo; class UnitTest; @@ -286,9 +292,10 @@ class GTEST_API_ AssertionResult { template <typename T> explicit AssertionResult( const T& success, - typename internal::EnableIf< - !internal::ImplicitlyConvertible<T, AssertionResult>::value>::type* - /*enabler*/ = NULL) + typename std::enable_if< + !std::is_convertible<T, AssertionResult>::value>::type* + /*enabler*/ + = nullptr) : success_(success) {} #if defined(_MSC_VER) && _MSC_VER < 1910 @@ -301,7 +308,7 @@ class GTEST_API_ AssertionResult { return *this; } - // Returns true iff the assertion succeeded. + // Returns true if and only if the assertion succeeded. operator bool() const { return success_; } // NOLINT // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. @@ -312,9 +319,8 @@ class GTEST_API_ AssertionResult { // assertion's expectation). When nothing has been streamed into the // object, returns an empty string. const char* message() const { - return message_.get() != NULL ? message_->c_str() : ""; + return message_.get() != nullptr ? message_->c_str() : ""; } - // TODO(vladl@google.com): Remove this after making sure no clients use it. // Deprecated; please use message() instead. const char* failure_message() const { return message(); } @@ -335,8 +341,7 @@ class GTEST_API_ AssertionResult { private: // Appends the contents of message to message_. void AppendMessage(const Message& a_message) { - if (message_.get() == NULL) - message_.reset(new ::std::string); + if (message_.get() == nullptr) message_.reset(new ::std::string); message_->append(a_message.GetString().c_str()); } @@ -349,7 +354,7 @@ class GTEST_API_ AssertionResult { // construct is not satisfied with the predicate's outcome. // Referenced via a pointer to avoid taking too much stack frame space // with test assertions. - internal::scoped_ptr< ::std::string> message_; + std::unique_ptr< ::std::string> message_; }; // Makes a successful assertion result. @@ -373,8 +378,8 @@ namespace testing { // The abstract class that all tests inherit from. // -// In Google Test, a unit test program contains one or many TestCases, and -// each TestCase contains one or many Tests. +// In Google Test, a unit test program contains one or many TestSuites, and +// each TestSuite contains one or many Tests. // // When you define a test using the TEST macro, you don't need to // explicitly derive from Test - the TEST macro automatically does @@ -398,49 +403,57 @@ class GTEST_API_ Test { public: friend class TestInfo; - // Defines types for pointers to functions that set up and tear down - // a test case. - typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc; - typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc; - // The d'tor is virtual as we intend to inherit from Test. virtual ~Test(); // Sets up the stuff shared by all tests in this test case. // - // Google Test will call Foo::SetUpTestCase() before running the first + // Google Test will call Foo::SetUpTestSuite() before running the first // test in test case Foo. Hence a sub-class can define its own - // SetUpTestCase() method to shadow the one defined in the super + // SetUpTestSuite() method to shadow the one defined in the super // class. - static void SetUpTestCase() {} + // Failures that happen during SetUpTestSuite are logged but otherwise + // ignored. + static void SetUpTestSuite() {} - // Tears down the stuff shared by all tests in this test case. + // Tears down the stuff shared by all tests in this test suite. // - // Google Test will call Foo::TearDownTestCase() after running the last + // Google Test will call Foo::TearDownTestSuite() after running the last // test in test case Foo. Hence a sub-class can define its own - // TearDownTestCase() method to shadow the one defined in the super + // TearDownTestSuite() method to shadow the one defined in the super // class. + // Failures that happen during TearDownTestSuite are logged but otherwise + // ignored. + static void TearDownTestSuite() {} + + // Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ static void TearDownTestCase() {} + static void SetUpTestCase() {} +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ - // Returns true iff the current test has a fatal failure. + // Returns true if and only if the current test has a fatal failure. static bool HasFatalFailure(); - // Returns true iff the current test has a non-fatal failure. + // Returns true if and only if the current test has a non-fatal failure. static bool HasNonfatalFailure(); - // Returns true iff the current test has a (either fatal or + // Returns true if and only if the current test was skipped. + static bool IsSkipped(); + + // Returns true if and only if the current test has a (either fatal or // non-fatal) failure. static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); } - // Logs a property for the current test, test case, or for the entire + // Logs a property for the current test, test suite, or for the entire // invocation of the test program when used outside of the context of a - // test case. Only the last value for a given key is remembered. These + // test suite. Only the last value for a given key is remembered. These // are public static so they can be called from utility functions that are // not members of the test fixture. Calls to RecordProperty made during // lifespan of the test (from the moment its constructor starts to the // moment its destructor finishes) will be output in XML as attributes of // the <testcase> element. Properties recorded from fixture's - // SetUpTestCase or TearDownTestCase are logged as attributes of the + // SetUpTestSuite or TearDownTestSuite are logged as attributes of the // corresponding <testsuite> element. Calls to RecordProperty made in the // global context (before or after invocation of RUN_ALL_TESTS and from // SetUp/TearDown method of Environment objects registered with Google @@ -459,8 +472,8 @@ class GTEST_API_ Test { virtual void TearDown(); private: - // Returns true iff the current test has the same fixture class as - // the first test in the current test case. + // Returns true if and only if the current test has the same fixture class + // as the first test in the current test suite. static bool HasSameFixtureClass(); // Runs the test after the test fixture has been set up. @@ -478,7 +491,7 @@ class GTEST_API_ Test { // internal method to avoid clashing with names used in user TESTs. void DeleteSelf_() { delete this; } - const internal::scoped_ptr< GTEST_FLAG_SAVER_ > gtest_flag_saver_; + const std::unique_ptr<GTEST_FLAG_SAVER_> gtest_flag_saver_; // Often a user misspells SetUp() as Setup() and spends a long time // wondering why it is never called by Google Test. The declaration of @@ -497,7 +510,7 @@ class GTEST_API_ Test { // If you see an error about overriding the following function or // about it being private, you have mis-spelled SetUp() as Setup(). struct Setup_should_be_spelled_SetUp {}; - virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } + virtual Setup_should_be_spelled_SetUp* Setup() { return nullptr; } // We disallow copying Tests. GTEST_DISALLOW_COPY_AND_ASSIGN_(Test); @@ -561,21 +574,28 @@ class GTEST_API_ TestResult { // Returns the number of the test properties. int test_property_count() const; - // Returns true iff the test passed (i.e. no test part failed). - bool Passed() const { return !Failed(); } + // Returns true if and only if the test passed (i.e. no test part failed). + bool Passed() const { return !Skipped() && !Failed(); } + + // Returns true if and only if the test was skipped. + bool Skipped() const; - // Returns true iff the test failed. + // Returns true if and only if the test failed. bool Failed() const; - // Returns true iff the test fatally failed. + // Returns true if and only if the test fatally failed. bool HasFatalFailure() const; - // Returns true iff the test has a non-fatal failure. + // Returns true if and only if the test has a non-fatal failure. bool HasNonfatalFailure() const; // Returns the elapsed time, in milliseconds. TimeInMillis elapsed_time() const { return elapsed_time_; } + // Gets the time of the test case start, in ms from the start of the + // UNIX epoch. + TimeInMillis start_timestamp() const { return start_timestamp_; } + // Returns the i-th test part result among all the results. i can range from 0 // to total_part_count() - 1. If i is not in that range, aborts the program. const TestPartResult& GetTestPartResult(int i) const; @@ -587,7 +607,7 @@ class GTEST_API_ TestResult { private: friend class TestInfo; - friend class TestCase; + friend class TestSuite; friend class UnitTest; friend class internal::DefaultGlobalTestPartResultReporter; friend class internal::ExecDeathTest; @@ -606,6 +626,9 @@ class GTEST_API_ TestResult { return test_properties_; } + // Sets the start time. + void set_start_timestamp(TimeInMillis start) { start_timestamp_ = start; } + // Sets the elapsed time. void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; } @@ -619,8 +642,8 @@ class GTEST_API_ TestResult { const TestProperty& test_property); // Adds a failure if the key is a reserved attribute of Google Test - // testcase tags. Returns true if the property is valid. - // TODO(russr): Validate attribute names are legal and human readable. + // testsuite tags. Returns true if the property is valid. + // FIXME: Validate attribute names are legal and human readable. static bool ValidateTestProperty(const std::string& xml_element, const TestProperty& test_property); @@ -649,6 +672,8 @@ class GTEST_API_ TestResult { std::vector<TestProperty> test_properties_; // Running count of death tests. int death_test_count_; + // The start time, in milliseconds since UNIX Epoch. + TimeInMillis start_timestamp_; // The elapsed time, in milliseconds. TimeInMillis elapsed_time_; @@ -658,7 +683,7 @@ class GTEST_API_ TestResult { // A TestInfo object stores the following information about a test: // -// Test case name +// Test suite name // Test name // Whether the test should be run // A function pointer that creates the test object when invoked @@ -673,8 +698,13 @@ class GTEST_API_ TestInfo { // don't inherit from TestInfo. ~TestInfo(); - // Returns the test case name. - const char* test_case_name() const { return test_case_name_.c_str(); } + // Returns the test suite name. + const char* test_suite_name() const { return test_suite_name_.c_str(); } + +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + const char* test_case_name() const { return test_suite_name(); } +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ // Returns the test name. const char* name() const { return name_.c_str(); } @@ -682,17 +712,15 @@ class GTEST_API_ TestInfo { // Returns the name of the parameter type, or NULL if this is not a typed // or a type-parameterized test. const char* type_param() const { - if (type_param_.get() != NULL) - return type_param_->c_str(); - return NULL; + if (type_param_.get() != nullptr) return type_param_->c_str(); + return nullptr; } // Returns the text representation of the value parameter, or NULL if this // is not a value-parameterized test. const char* value_param() const { - if (value_param_.get() != NULL) - return value_param_->c_str(); - return NULL; + if (value_param_.get() != nullptr) return value_param_->c_str(); + return nullptr; } // Returns the file name where this test is defined. @@ -709,7 +737,7 @@ class GTEST_API_ TestInfo { // been specified) and its full name matches the user-specified filter. // // Google Test allows the user to filter the tests by their full names. - // The full name of a test Bar in test case Foo is defined as + // The full name of a test Bar in test suite Foo is defined as // "Foo.Bar". Only the tests that match the filter will run. // // A filter is a colon-separated list of glob (not regex) patterns, @@ -722,7 +750,7 @@ class GTEST_API_ TestInfo { // contains the character 'A' or starts with "Foo.". bool should_run() const { return should_run_; } - // Returns true iff this test will appear in the XML report. + // Returns true if and only if this test will appear in the XML report. bool is_reportable() const { // The XML report includes tests matching the filter, excluding those // run in other shards. @@ -737,24 +765,19 @@ class GTEST_API_ TestInfo { friend class internal::DefaultDeathTestFactory; #endif // GTEST_HAS_DEATH_TEST friend class Test; - friend class TestCase; + friend class TestSuite; friend class internal::UnitTestImpl; friend class internal::StreamingListenerTest; friend TestInfo* internal::MakeAndRegisterTestInfo( - const char* test_case_name, - const char* name, - const char* type_param, - const char* value_param, - internal::CodeLocation code_location, - internal::TypeId fixture_class_id, - Test::SetUpTestCaseFunc set_up_tc, - Test::TearDownTestCaseFunc tear_down_tc, + const char* test_suite_name, const char* name, const char* type_param, + const char* value_param, internal::CodeLocation code_location, + internal::TypeId fixture_class_id, internal::SetUpTestSuiteFunc set_up_tc, + internal::TearDownTestSuiteFunc tear_down_tc, internal::TestFactoryBase* factory); // Constructs a TestInfo object. The newly constructed instance assumes // ownership of the factory object. - TestInfo(const std::string& test_case_name, - const std::string& name, + TestInfo(const std::string& test_suite_name, const std::string& name, const char* a_type_param, // NULL if not a type-parameterized test const char* a_value_param, // NULL if not a value-parameterized test internal::CodeLocation a_code_location, @@ -776,21 +799,21 @@ class GTEST_API_ TestInfo { } // These fields are immutable properties of the test. - const std::string test_case_name_; // Test case name + const std::string test_suite_name_; // test suite name const std::string name_; // Test name // Name of the parameter type, or NULL if this is not a typed or a // type-parameterized test. - const internal::scoped_ptr<const ::std::string> type_param_; + const std::unique_ptr<const ::std::string> type_param_; // Text representation of the value parameter, or NULL if this is not a // value-parameterized test. - const internal::scoped_ptr<const ::std::string> value_param_; + const std::unique_ptr<const ::std::string> value_param_; internal::CodeLocation location_; - const internal::TypeId fixture_class_id_; // ID of the test fixture class - bool should_run_; // True iff this test should run - bool is_disabled_; // True iff this test is disabled - bool matches_filter_; // True if this test matches the - // user-specified filter. - bool is_in_another_shard_; // Will be run in another shard. + const internal::TypeId fixture_class_id_; // ID of the test fixture class + bool should_run_; // True if and only if this test should run + bool is_disabled_; // True if and only if this test is disabled + bool matches_filter_; // True if this test matches the + // user-specified filter. + bool is_in_another_shard_; // Will be run in another shard. internal::TestFactoryBase* const factory_; // The factory that creates // the test object @@ -801,90 +824,96 @@ class GTEST_API_ TestInfo { GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo); }; -// A test case, which consists of a vector of TestInfos. +// A test suite, which consists of a vector of TestInfos. // -// TestCase is not copyable. -class GTEST_API_ TestCase { +// TestSuite is not copyable. +class GTEST_API_ TestSuite { public: - // Creates a TestCase with the given name. + // Creates a TestSuite with the given name. // - // TestCase does NOT have a default constructor. Always use this - // constructor to create a TestCase object. + // TestSuite does NOT have a default constructor. Always use this + // constructor to create a TestSuite object. // // Arguments: // - // name: name of the test case + // name: name of the test suite // a_type_param: the name of the test's type parameter, or NULL if // this is not a type-parameterized test. - // set_up_tc: pointer to the function that sets up the test case - // tear_down_tc: pointer to the function that tears down the test case - TestCase(const char* name, const char* a_type_param, - Test::SetUpTestCaseFunc set_up_tc, - Test::TearDownTestCaseFunc tear_down_tc); + // set_up_tc: pointer to the function that sets up the test suite + // tear_down_tc: pointer to the function that tears down the test suite + TestSuite(const char* name, const char* a_type_param, + internal::SetUpTestSuiteFunc set_up_tc, + internal::TearDownTestSuiteFunc tear_down_tc); - // Destructor of TestCase. - virtual ~TestCase(); + // Destructor of TestSuite. + virtual ~TestSuite(); - // Gets the name of the TestCase. + // Gets the name of the TestSuite. const char* name() const { return name_.c_str(); } // Returns the name of the parameter type, or NULL if this is not a - // type-parameterized test case. + // type-parameterized test suite. const char* type_param() const { - if (type_param_.get() != NULL) - return type_param_->c_str(); - return NULL; + if (type_param_.get() != nullptr) return type_param_->c_str(); + return nullptr; } - // Returns true if any test in this test case should run. + // Returns true if any test in this test suite should run. bool should_run() const { return should_run_; } - // Gets the number of successful tests in this test case. + // Gets the number of successful tests in this test suite. int successful_test_count() const; - // Gets the number of failed tests in this test case. + // Gets the number of skipped tests in this test suite. + int skipped_test_count() const; + + // Gets the number of failed tests in this test suite. int failed_test_count() const; // Gets the number of disabled tests that will be reported in the XML report. int reportable_disabled_test_count() const; - // Gets the number of disabled tests in this test case. + // Gets the number of disabled tests in this test suite. int disabled_test_count() const; // Gets the number of tests to be printed in the XML report. int reportable_test_count() const; - // Get the number of tests in this test case that should run. + // Get the number of tests in this test suite that should run. int test_to_run_count() const; - // Gets the number of all tests in this test case. + // Gets the number of all tests in this test suite. int total_test_count() const; - // Returns true iff the test case passed. + // Returns true if and only if the test suite passed. bool Passed() const { return !Failed(); } - // Returns true iff the test case failed. + // Returns true if and only if the test suite failed. bool Failed() const { return failed_test_count() > 0; } // Returns the elapsed time, in milliseconds. TimeInMillis elapsed_time() const { return elapsed_time_; } + // Gets the time of the test suite start, in ms from the start of the + // UNIX epoch. + TimeInMillis start_timestamp() const { return start_timestamp_; } + // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. const TestInfo* GetTestInfo(int i) const; // Returns the TestResult that holds test properties recorded during - // execution of SetUpTestCase and TearDownTestCase. + // execution of SetUpTestSuite and TearDownTestSuite. const TestResult& ad_hoc_test_result() const { return ad_hoc_test_result_; } private: friend class Test; friend class internal::UnitTestImpl; - // Gets the (mutable) vector of TestInfos in this TestCase. + // Gets the (mutable) vector of TestInfos in this TestSuite. std::vector<TestInfo*>& test_info_list() { return test_info_list_; } - // Gets the (immutable) vector of TestInfos in this TestCase. + // Gets the (immutable) vector of TestInfos in this TestSuite. const std::vector<TestInfo*>& test_info_list() const { return test_info_list_; } @@ -896,51 +925,64 @@ class GTEST_API_ TestCase { // Sets the should_run member. void set_should_run(bool should) { should_run_ = should; } - // Adds a TestInfo to this test case. Will delete the TestInfo upon - // destruction of the TestCase object. + // Adds a TestInfo to this test suite. Will delete the TestInfo upon + // destruction of the TestSuite object. void AddTestInfo(TestInfo * test_info); - // Clears the results of all tests in this test case. + // Clears the results of all tests in this test suite. void ClearResult(); - // Clears the results of all tests in the given test case. - static void ClearTestCaseResult(TestCase* test_case) { - test_case->ClearResult(); + // Clears the results of all tests in the given test suite. + static void ClearTestSuiteResult(TestSuite* test_suite) { + test_suite->ClearResult(); } - // Runs every test in this TestCase. + // Runs every test in this TestSuite. void Run(); - // Runs SetUpTestCase() for this TestCase. This wrapper is needed - // for catching exceptions thrown from SetUpTestCase(). - void RunSetUpTestCase() { (*set_up_tc_)(); } + // Runs SetUpTestSuite() for this TestSuite. This wrapper is needed + // for catching exceptions thrown from SetUpTestSuite(). + void RunSetUpTestSuite() { + if (set_up_tc_ != nullptr) { + (*set_up_tc_)(); + } + } - // Runs TearDownTestCase() for this TestCase. This wrapper is - // needed for catching exceptions thrown from TearDownTestCase(). - void RunTearDownTestCase() { (*tear_down_tc_)(); } + // Runs TearDownTestSuite() for this TestSuite. This wrapper is + // needed for catching exceptions thrown from TearDownTestSuite(). + void RunTearDownTestSuite() { + if (tear_down_tc_ != nullptr) { + (*tear_down_tc_)(); + } + } - // Returns true iff test passed. + // Returns true if and only if test passed. static bool TestPassed(const TestInfo* test_info) { return test_info->should_run() && test_info->result()->Passed(); } - // Returns true iff test failed. + // Returns true if and only if test skipped. + static bool TestSkipped(const TestInfo* test_info) { + return test_info->should_run() && test_info->result()->Skipped(); + } + + // Returns true if and only if test failed. static bool TestFailed(const TestInfo* test_info) { return test_info->should_run() && test_info->result()->Failed(); } - // Returns true iff the test is disabled and will be reported in the XML - // report. + // Returns true if and only if the test is disabled and will be reported in + // the XML report. static bool TestReportableDisabled(const TestInfo* test_info) { return test_info->is_reportable() && test_info->is_disabled_; } - // Returns true iff test is disabled. + // Returns true if and only if test is disabled. static bool TestDisabled(const TestInfo* test_info) { return test_info->is_disabled_; } - // Returns true iff this test will appear in the XML report. + // Returns true if and only if this test will appear in the XML report. static bool TestReportable(const TestInfo* test_info) { return test_info->is_reportable(); } @@ -950,17 +992,17 @@ class GTEST_API_ TestCase { return test_info->should_run(); } - // Shuffles the tests in this test case. + // Shuffles the tests in this test suite. void ShuffleTests(internal::Random* random); // Restores the test order to before the first shuffle. void UnshuffleTests(); - // Name of the test case. + // Name of the test suite. std::string name_; // Name of the parameter type, or NULL if this is not a typed or a // type-parameterized test. - const internal::scoped_ptr<const ::std::string> type_param_; + const std::unique_ptr<const ::std::string> type_param_; // The vector of TestInfos in their original order. It owns the // elements in the vector. std::vector<TestInfo*> test_info_list_; @@ -968,20 +1010,22 @@ class GTEST_API_ TestCase { // shuffling and restoring the test order. The i-th element in this // vector is the index of the i-th test in the shuffled test list. std::vector<int> test_indices_; - // Pointer to the function that sets up the test case. - Test::SetUpTestCaseFunc set_up_tc_; - // Pointer to the function that tears down the test case. - Test::TearDownTestCaseFunc tear_down_tc_; - // True iff any test in this test case should run. + // Pointer to the function that sets up the test suite. + internal::SetUpTestSuiteFunc set_up_tc_; + // Pointer to the function that tears down the test suite. + internal::TearDownTestSuiteFunc tear_down_tc_; + // True if and only if any test in this test suite should run. bool should_run_; + // The start time, in milliseconds since UNIX Epoch. + TimeInMillis start_timestamp_; // Elapsed time, in milliseconds. TimeInMillis elapsed_time_; - // Holds test properties recorded during execution of SetUpTestCase and - // TearDownTestCase. + // Holds test properties recorded during execution of SetUpTestSuite and + // TearDownTestSuite. TestResult ad_hoc_test_result_; - // We disallow copying TestCases. - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase); + // We disallow copying TestSuites. + GTEST_DISALLOW_COPY_AND_ASSIGN_(TestSuite); }; // An Environment object is capable of setting up and tearing down an @@ -1012,7 +1056,7 @@ class Environment { // If you see an error about overriding the following function or // about it being private, you have mis-spelled SetUp() as Setup(). struct Setup_should_be_spelled_SetUp {}; - virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } + virtual Setup_should_be_spelled_SetUp* Setup() { return nullptr; } }; #if GTEST_HAS_EXCEPTIONS @@ -1048,8 +1092,13 @@ class TestEventListener { // Fired after environment set-up for each iteration of tests ends. virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0; - // Fired before the test case starts. - virtual void OnTestCaseStart(const TestCase& test_case) = 0; + // Fired before the test suite starts. + virtual void OnTestSuiteStart(const TestSuite& /*test_suite*/) {} + + // Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + virtual void OnTestCaseStart(const TestCase& /*test_case*/) {} +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ // Fired before the test starts. virtual void OnTestStart(const TestInfo& test_info) = 0; @@ -1062,8 +1111,13 @@ class TestEventListener { // Fired after the test ends. virtual void OnTestEnd(const TestInfo& test_info) = 0; - // Fired after the test case ends. - virtual void OnTestCaseEnd(const TestCase& test_case) = 0; + // Fired after the test suite ends. + virtual void OnTestSuiteEnd(const TestSuite& /*test_suite*/) {} + +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {} +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ // Fired before environment tear-down for each iteration of tests starts. virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0; @@ -1086,21 +1140,30 @@ class TestEventListener { // above. class EmptyTestEventListener : public TestEventListener { public: - virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} - virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, - int /*iteration*/) {} - virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {} - virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} - virtual void OnTestCaseStart(const TestCase& /*test_case*/) {} - virtual void OnTestStart(const TestInfo& /*test_info*/) {} - virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {} - virtual void OnTestEnd(const TestInfo& /*test_info*/) {} - virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {} - virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {} - virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} - virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, - int /*iteration*/) {} - virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} + void OnTestProgramStart(const UnitTest& /*unit_test*/) override {} + void OnTestIterationStart(const UnitTest& /*unit_test*/, + int /*iteration*/) override {} + void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) override {} + void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) override {} + void OnTestSuiteStart(const TestSuite& /*test_suite*/) override {} +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + void OnTestCaseStart(const TestCase& /*test_case*/) override {} +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + + void OnTestStart(const TestInfo& /*test_info*/) override {} + void OnTestPartResult(const TestPartResult& /*test_part_result*/) override {} + void OnTestEnd(const TestInfo& /*test_info*/) override {} + void OnTestSuiteEnd(const TestSuite& /*test_suite*/) override {} +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + void OnTestCaseEnd(const TestCase& /*test_case*/) override {} +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + + void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) override {} + void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) override {} + void OnTestIterationEnd(const UnitTest& /*unit_test*/, + int /*iteration*/) override {} + void OnTestProgramEnd(const UnitTest& /*unit_test*/) override {} }; // TestEventListeners lets users add listeners to track events in Google Test. @@ -1140,7 +1203,7 @@ class GTEST_API_ TestEventListeners { } private: - friend class TestCase; + friend class TestSuite; friend class TestInfo; friend class internal::DefaultGlobalTestPartResultReporter; friend class internal::NoExecDeathTest; @@ -1181,7 +1244,7 @@ class GTEST_API_ TestEventListeners { GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners); }; -// A UnitTest consists of a vector of TestCases. +// A UnitTest consists of a vector of TestSuites. // // This is a singleton class. The only instance of UnitTest is // created when UnitTest::GetInstance() is first called. This @@ -1210,10 +1273,14 @@ class GTEST_API_ UnitTest { // was executed. The UnitTest object owns the string. const char* original_working_dir() const; - // Returns the TestCase object for the test that's currently running, + // Returns the TestSuite object for the test that's currently running, // or NULL if no test is running. - const TestCase* current_test_case() const - GTEST_LOCK_EXCLUDED_(mutex_); + const TestSuite* current_test_suite() const GTEST_LOCK_EXCLUDED_(mutex_); + +// Legacy API is still available but deprecated +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + const TestCase* current_test_case() const GTEST_LOCK_EXCLUDED_(mutex_); +#endif // Returns the TestInfo object for the test that's currently running, // or NULL if no test is running. @@ -1223,29 +1290,40 @@ class GTEST_API_ UnitTest { // Returns the random seed used at the start of the current test run. int random_seed() const; - // Returns the ParameterizedTestCaseRegistry object used to keep track of + // Returns the ParameterizedTestSuiteRegistry object used to keep track of // value-parameterized tests and instantiate and register them. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. - internal::ParameterizedTestCaseRegistry& parameterized_test_registry() + internal::ParameterizedTestSuiteRegistry& parameterized_test_registry() GTEST_LOCK_EXCLUDED_(mutex_); - // Gets the number of successful test cases. - int successful_test_case_count() const; + // Gets the number of successful test suites. + int successful_test_suite_count() const; - // Gets the number of failed test cases. - int failed_test_case_count() const; + // Gets the number of failed test suites. + int failed_test_suite_count() const; - // Gets the number of all test cases. - int total_test_case_count() const; + // Gets the number of all test suites. + int total_test_suite_count() const; - // Gets the number of all test cases that contain at least one test + // Gets the number of all test suites that contain at least one test // that should run. + int test_suite_to_run_count() const; + + // Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + int successful_test_case_count() const; + int failed_test_case_count() const; + int total_test_case_count() const; int test_case_to_run_count() const; +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ // Gets the number of successful tests. int successful_test_count() const; + // Gets the number of skipped tests. + int skipped_test_count() const; + // Gets the number of failed tests. int failed_test_count() const; @@ -1271,19 +1349,25 @@ class GTEST_API_ UnitTest { // Gets the elapsed time, in milliseconds. TimeInMillis elapsed_time() const; - // Returns true iff the unit test passed (i.e. all test cases passed). + // Returns true if and only if the unit test passed (i.e. all test suites + // passed). bool Passed() const; - // Returns true iff the unit test failed (i.e. some test case failed - // or something outside of all tests failed). + // Returns true if and only if the unit test failed (i.e. some test suite + // failed or something outside of all tests failed). bool Failed() const; - // Gets the i-th test case among all the test cases. i can range from 0 to - // total_test_case_count() - 1. If i is not in that range, returns NULL. + // Gets the i-th test suite among all the test suites. i can range from 0 to + // total_test_suite_count() - 1. If i is not in that range, returns NULL. + const TestSuite* GetTestSuite(int i) const; + +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ const TestCase* GetTestCase(int i) const; +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ // Returns the TestResult containing information on test failures and - // properties logged outside of individual test cases. + // properties logged outside of individual test suites. const TestResult& ad_hoc_test_result() const; // Returns the list of event listeners that can be used to track events @@ -1314,15 +1398,15 @@ class GTEST_API_ UnitTest { GTEST_LOCK_EXCLUDED_(mutex_); // Adds a TestProperty to the current TestResult object when invoked from - // inside a test, to current TestCase's ad_hoc_test_result_ when invoked - // from SetUpTestCase or TearDownTestCase, or to the global property set + // inside a test, to current TestSuite's ad_hoc_test_result_ when invoked + // from SetUpTestSuite or TearDownTestSuite, or to the global property set // when invoked elsewhere. If the result already contains a property with // the same key, the value will be updated. void RecordProperty(const std::string& key, const std::string& value); - // Gets the i-th test case among all the test cases. i can range from 0 to - // total_test_case_count() - 1. If i is not in that range, returns NULL. - TestCase* GetMutableTestCase(int i); + // Gets the i-th test suite among all the test suites. i can range from 0 to + // total_test_suite_count() - 1. If i is not in that range, returns NULL. + TestSuite* GetMutableTestSuite(int i); // Accessors for the implementation object. internal::UnitTestImpl* impl() { return impl_; } @@ -1407,6 +1491,10 @@ GTEST_API_ void InitGoogleTest(int* argc, char** argv); // UNICODE mode. GTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv); +// This overloaded version can be used on Arduino/embedded platforms where +// there is no argc/argv. +GTEST_API_ void InitGoogleTest(); + namespace internal { // Separate the error generating code from the code path to reduce the stack @@ -1423,6 +1511,13 @@ AssertionResult CmpHelperEQFailure(const char* lhs_expression, false); } +// This block of code defines operator==/!= +// to block lexical scope lookup. +// It prevents using invalid operator==/!= defined at namespace scope. +struct faketype {}; +inline bool operator==(faketype, faketype) { return true; } +inline bool operator!=(faketype, faketype) { return false; } + // The helper function for {ASSERT|EXPECT}_EQ. template <typename T1, typename T2> AssertionResult CmpHelperEQ(const char* lhs_expression, @@ -1444,18 +1539,17 @@ GTEST_API_ AssertionResult CmpHelperEQ(const char* lhs_expression, BiggestInt lhs, BiggestInt rhs); -// The helper class for {ASSERT|EXPECT}_EQ. The template argument -// lhs_is_null_literal is true iff the first argument to ASSERT_EQ() -// is a null pointer literal. The following default implementation is -// for lhs_is_null_literal being false. -template <bool lhs_is_null_literal> class EqHelper { public: // This templatized version is for the general case. - template <typename T1, typename T2> + template < + typename T1, typename T2, + // Disable this overload for cases where one argument is a pointer + // and the other is the null pointer constant. + typename std::enable_if<!std::is_integral<T1>::value || + !std::is_pointer<T2>::value>::type* = nullptr> static AssertionResult Compare(const char* lhs_expression, - const char* rhs_expression, - const T1& lhs, + const char* rhs_expression, const T1& lhs, const T2& rhs) { return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs); } @@ -1472,49 +1566,15 @@ class EqHelper { BiggestInt rhs) { return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs); } -}; - -// This specialization is used when the first argument to ASSERT_EQ() -// is a null pointer literal, like NULL, false, or 0. -template <> -class EqHelper<true> { - public: - // We define two overloaded versions of Compare(). The first - // version will be picked when the second argument to ASSERT_EQ() is - // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or - // EXPECT_EQ(false, a_bool). - template <typename T1, typename T2> - static AssertionResult Compare( - const char* lhs_expression, - const char* rhs_expression, - const T1& lhs, - const T2& rhs, - // The following line prevents this overload from being considered if T2 - // is not a pointer type. We need this because ASSERT_EQ(NULL, my_ptr) - // expands to Compare("", "", NULL, my_ptr), which requires a conversion - // to match the Secret* in the other overload, which would otherwise make - // this template match better. - typename EnableIf<!is_pointer<T2>::value>::type* = 0) { - return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs); - } - // This version will be picked when the second argument to ASSERT_EQ() is a - // pointer, e.g. ASSERT_EQ(NULL, a_pointer). template <typename T> static AssertionResult Compare( - const char* lhs_expression, - const char* rhs_expression, - // We used to have a second template parameter instead of Secret*. That - // template parameter would deduce to 'long', making this a better match - // than the first overload even without the first overload's EnableIf. - // Unfortunately, gcc with -Wconversion-null warns when "passing NULL to - // non-pointer argument" (even a deduced integral argument), so the old - // implementation caused warnings in user code. - Secret* /* lhs (NULL) */, - T* rhs) { + const char* lhs_expression, const char* rhs_expression, + // Handle cases where '0' is used as a null pointer literal. + std::nullptr_t /* lhs */, T* rhs) { // We already know that 'lhs' is a null pointer. - return CmpHelperEQ(lhs_expression, rhs_expression, - static_cast<T*>(NULL), rhs); + return CmpHelperEQ(lhs_expression, rhs_expression, static_cast<T*>(nullptr), + rhs); } }; @@ -1743,6 +1803,12 @@ class GTEST_API_ AssertHelper { GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper); }; +enum GTestColor { COLOR_DEFAULT, COLOR_RED, COLOR_GREEN, COLOR_YELLOW }; + +GTEST_API_ GTEST_ATTRIBUTE_PRINTF_(2, 3) void ColoredPrintf(GTestColor color, + const char* fmt, + ...); + } // namespace internal // The pure interface class that all value-parameterized tests inherit from. @@ -1762,13 +1828,13 @@ class GTEST_API_ AssertHelper { // FooTest() { // // Can use GetParam() here. // } -// virtual ~FooTest() { +// ~FooTest() override { // // Can use GetParam() here. // } -// virtual void SetUp() { +// void SetUp() override { // // Can use GetParam() here. // } -// virtual void TearDown { +// void TearDown override { // // Can use GetParam() here. // } // }; @@ -1777,7 +1843,7 @@ class GTEST_API_ AssertHelper { // Foo foo; // ASSERT_TRUE(foo.DoesBar(GetParam())); // } -// INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)); +// INSTANTIATE_TEST_SUITE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)); template <typename T> class WithParamInterface { @@ -1786,12 +1852,9 @@ class WithParamInterface { virtual ~WithParamInterface() {} // The current parameter value. Is also available in the test fixture's - // constructor. This member function is non-static, even though it only - // references static data, to reduce the opportunity for incorrect uses - // like writing 'WithParamInterface<bool>::GetParam()' for a test that - // uses a fixture whose parameter type is int. - const ParamType& GetParam() const { - GTEST_CHECK_(parameter_ != NULL) + // constructor. + static const ParamType& GetParam() { + GTEST_CHECK_(parameter_ != nullptr) << "GetParam() can only be called inside a value-parameterized test " << "-- did you intend to write TEST_P instead of TEST_F?"; return *parameter_; @@ -1812,7 +1875,7 @@ class WithParamInterface { }; template <typename T> -const T* WithParamInterface<T>::parameter_ = NULL; +const T* WithParamInterface<T>::parameter_ = nullptr; // Most value-parameterized classes can ignore the existence of // WithParamInterface, and can just inherit from ::testing::TestWithParam. @@ -1823,6 +1886,11 @@ class TestWithParam : public Test, public WithParamInterface<T> { // Macros for indicating success/failure in test code. +// Skips test in runtime. +// Skipping test aborts current function. +// Skipped tests are neither successful nor failed. +#define GTEST_SKIP() GTEST_SKIP_("Skipped") + // ADD_FAILURE unconditionally adds a failure to the current test. // SUCCEED generates a success - it doesn't automatically make the // current test successful, as a test is only successful when it has @@ -1852,6 +1920,11 @@ class TestWithParam : public Test, public WithParamInterface<T> { // Generates a fatal failure with a generic message. #define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") +// Like GTEST_FAIL(), but at the given source file location. +#define GTEST_FAIL_AT(file, line) \ + GTEST_MESSAGE_AT_(file, line, "Failed", \ + ::testing::TestPartResult::kFatalFailure) + // Define this macro to 1 to omit the definition of FAIL(), which is a // generic name and clashes with some other libraries. #if !GTEST_DONT_DEFINE_FAIL @@ -1952,9 +2025,7 @@ class TestWithParam : public Test, public WithParamInterface<T> { // ASSERT_GT(records.size(), 0) << "There is no record left."; #define EXPECT_EQ(val1, val2) \ - EXPECT_PRED_FORMAT2(::testing::internal:: \ - EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, \ - val1, val2) + EXPECT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2) #define EXPECT_NE(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) #define EXPECT_LE(val1, val2) \ @@ -1967,9 +2038,7 @@ class TestWithParam : public Test, public WithParamInterface<T> { EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) #define GTEST_ASSERT_EQ(val1, val2) \ - ASSERT_PRED_FORMAT2(::testing::internal:: \ - EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, \ - val1, val2) + ASSERT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2) #define GTEST_ASSERT_NE(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) #define GTEST_ASSERT_LE(val1, val2) \ @@ -2160,12 +2229,6 @@ class GTEST_API_ ScopedTrace { PushTrace(file, line, message ? message : "(null)"); } -#if GTEST_HAS_GLOBAL_STRING - ScopedTrace(const char* file, int line, const ::string& message) { - PushTrace(file, line, message); - } -#endif - ScopedTrace(const char* file, int line, const std::string& message) { PushTrace(file, line, message); } @@ -2203,10 +2266,9 @@ class GTEST_API_ ScopedTrace { ::testing::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ __FILE__, __LINE__, (message)) - // Compile-time assertion for type equality. -// StaticAssertTypeEq<type1, type2>() compiles iff type1 and type2 are -// the same type. The value it returns is not interesting. +// StaticAssertTypeEq<type1, type2>() compiles if and only if type1 and type2 +// are the same type. The value it returns is not interesting. // // Instead of making StaticAssertTypeEq a class template, we make it a // function template that invokes a helper class template. This @@ -2235,18 +2297,19 @@ class GTEST_API_ ScopedTrace { // // to cause a compiler error. template <typename T1, typename T2> -bool StaticAssertTypeEq() { - (void)internal::StaticAssertTypeEqHelper<T1, T2>(); +constexpr bool StaticAssertTypeEq() noexcept { + static_assert(std::is_same<T1, T2>::value, + "type1 and type2 are not the same type"); return true; } // Defines a test. // -// The first parameter is the name of the test case, and the second -// parameter is the name of the test within the test case. +// The first parameter is the name of the test suite, and the second +// parameter is the name of the test within the test suite. // -// The convention is to end the test case name with "Test". For -// example, a test case for the Foo class can be named FooTest. +// The convention is to end the test suite name with "Test". For +// example, a test suite for the Foo class can be named FooTest. // // Test code should appear between braces after an invocation of // this macro. Example: @@ -2265,28 +2328,28 @@ bool StaticAssertTypeEq() { // code. GetTestTypeId() is guaranteed to always return the same // value, as it always calls GetTypeId<>() from the Google Test // framework. -#define GTEST_TEST(test_case_name, test_name)\ - GTEST_TEST_(test_case_name, test_name, \ - ::testing::Test, ::testing::internal::GetTestTypeId()) +#define GTEST_TEST(test_suite_name, test_name) \ + GTEST_TEST_(test_suite_name, test_name, ::testing::Test, \ + ::testing::internal::GetTestTypeId()) // Define this macro to 1 to omit the definition of TEST(), which // is a generic name and clashes with some other libraries. #if !GTEST_DONT_DEFINE_TEST -# define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name) +#define TEST(test_suite_name, test_name) GTEST_TEST(test_suite_name, test_name) #endif // Defines a test that uses a test fixture. // // The first parameter is the name of the test fixture class, which -// also doubles as the test case name. The second parameter is the -// name of the test within the test case. +// also doubles as the test suite name. The second parameter is the +// name of the test within the test suite. // // A test fixture class must be declared earlier. The user should put // the test code between braces after using this macro. Example: // // class FooTest : public testing::Test { // protected: -// virtual void SetUp() { b_.AddElement(3); } +// void SetUp() override { b_.AddElement(3); } // // Foo a_; // Foo b_; @@ -2300,7 +2363,8 @@ bool StaticAssertTypeEq() { // EXPECT_EQ(a_.size(), 0); // EXPECT_EQ(b_.size(), 1); // } - +// +// GOOGLETEST_CM0011 DO NOT DELETE #define TEST_F(test_fixture, test_name)\ GTEST_TEST_(test_fixture, test_name, test_fixture, \ ::testing::internal::GetTypeId<test_fixture>()) @@ -2313,6 +2377,86 @@ GTEST_API_ std::string TempDir(); # pragma warning(pop) #endif +// Dynamically registers a test with the framework. +// +// This is an advanced API only to be used when the `TEST` macros are +// insufficient. The macros should be preferred when possible, as they avoid +// most of the complexity of calling this function. +// +// The `factory` argument is a factory callable (move-constructible) object or +// function pointer that creates a new instance of the Test object. It +// handles ownership to the caller. The signature of the callable is +// `Fixture*()`, where `Fixture` is the test fixture class for the test. All +// tests registered with the same `test_suite_name` must return the same +// fixture type. This is checked at runtime. +// +// The framework will infer the fixture class from the factory and will call +// the `SetUpTestSuite` and `TearDownTestSuite` for it. +// +// Must be called before `RUN_ALL_TESTS()` is invoked, otherwise behavior is +// undefined. +// +// Use case example: +// +// class MyFixture : public ::testing::Test { +// public: +// // All of these optional, just like in regular macro usage. +// static void SetUpTestSuite() { ... } +// static void TearDownTestSuite() { ... } +// void SetUp() override { ... } +// void TearDown() override { ... } +// }; +// +// class MyTest : public MyFixture { +// public: +// explicit MyTest(int data) : data_(data) {} +// void TestBody() override { ... } +// +// private: +// int data_; +// }; +// +// void RegisterMyTests(const std::vector<int>& values) { +// for (int v : values) { +// ::testing::RegisterTest( +// "MyFixture", ("Test" + std::to_string(v)).c_str(), nullptr, +// std::to_string(v).c_str(), +// __FILE__, __LINE__, +// // Important to use the fixture type as the return type here. +// [=]() -> MyFixture* { return new MyTest(v); }); +// } +// } +// ... +// int main(int argc, char** argv) { +// std::vector<int> values_to_test = LoadValuesFromConfig(); +// RegisterMyTests(values_to_test); +// ... +// return RUN_ALL_TESTS(); +// } +// +template <int&... ExplicitParameterBarrier, typename Factory> +TestInfo* RegisterTest(const char* test_suite_name, const char* test_name, + const char* type_param, const char* value_param, + const char* file, int line, Factory factory) { + using TestT = typename std::remove_pointer<decltype(factory())>::type; + + class FactoryImpl : public internal::TestFactoryBase { + public: + explicit FactoryImpl(Factory f) : factory_(std::move(f)) {} + Test* CreateTest() override { return factory_(); } + + private: + Factory factory_; + }; + + return internal::MakeAndRegisterTestInfo( + test_suite_name, test_name, type_param, value_param, + internal::CodeLocation(file, line), internal::GetTypeId<TestT>(), + internal::SuiteApiResolver<TestT>::GetSetUpCaseOrSuite(file, line), + internal::SuiteApiResolver<TestT>::GetTearDownCaseOrSuite(file, line), + new FactoryImpl{std::move(factory)}); +} + } // namespace testing // Use this function in main() to run all tests. It returns 0 if all @@ -2329,4 +2473,6 @@ inline int RUN_ALL_TESTS() { return ::testing::UnitTest::GetInstance()->Run(); } +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 + #endif // GTEST_INCLUDE_GTEST_GTEST_H_ diff --git a/test/gtest/include/gtest/gtest_pred_impl.h b/test/gtest/include/gtest/gtest_pred_impl.h index c8be230ed..d514255c7 100644 --- a/test/gtest/include/gtest/gtest_pred_impl.h +++ b/test/gtest/include/gtest/gtest_pred_impl.h @@ -27,10 +27,11 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// This file is AUTOMATICALLY GENERATED on 01/02/2018 by command +// This file is AUTOMATICALLY GENERATED on 01/02/2019 by command // 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! // // Implements a family of generic predicate assertion macros. +// GOOGLETEST_CM0001 DO NOT DELETE #ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ #define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ @@ -65,6 +66,8 @@ namespace testing { // We also define the EXPECT_* variations. // // For now we only support predicates whose arity is at most 5. +// Please email googletestframework@googlegroups.com if you need +// support for higher arities. // GTEST_ASSERT_ is the basic statement to which all of the assertions // in this file reduce. Don't use this in your code. @@ -87,9 +90,10 @@ AssertionResult AssertPred1Helper(const char* pred_text, const T1& v1) { if (pred(v1)) return AssertionSuccess(); - return AssertionFailure() << pred_text << "(" - << e1 << ") evaluates to false, where" - << "\n" << e1 << " evaluates to " << v1; + return AssertionFailure() + << pred_text << "(" << e1 << ") evaluates to false, where" + << "\n" + << e1 << " evaluates to " << ::testing::PrintToString(v1); } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1. @@ -131,11 +135,12 @@ AssertionResult AssertPred2Helper(const char* pred_text, const T2& v2) { if (pred(v1, v2)) return AssertionSuccess(); - return AssertionFailure() << pred_text << "(" - << e1 << ", " - << e2 << ") evaluates to false, where" - << "\n" << e1 << " evaluates to " << v1 - << "\n" << e2 << " evaluates to " << v2; + return AssertionFailure() + << pred_text << "(" << e1 << ", " << e2 + << ") evaluates to false, where" + << "\n" + << e1 << " evaluates to " << ::testing::PrintToString(v1) << "\n" + << e2 << " evaluates to " << ::testing::PrintToString(v2); } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2. @@ -182,13 +187,13 @@ AssertionResult AssertPred3Helper(const char* pred_text, const T3& v3) { if (pred(v1, v2, v3)) return AssertionSuccess(); - return AssertionFailure() << pred_text << "(" - << e1 << ", " - << e2 << ", " - << e3 << ") evaluates to false, where" - << "\n" << e1 << " evaluates to " << v1 - << "\n" << e2 << " evaluates to " << v2 - << "\n" << e3 << " evaluates to " << v3; + return AssertionFailure() + << pred_text << "(" << e1 << ", " << e2 << ", " << e3 + << ") evaluates to false, where" + << "\n" + << e1 << " evaluates to " << ::testing::PrintToString(v1) << "\n" + << e2 << " evaluates to " << ::testing::PrintToString(v2) << "\n" + << e3 << " evaluates to " << ::testing::PrintToString(v3); } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3. @@ -240,15 +245,14 @@ AssertionResult AssertPred4Helper(const char* pred_text, const T4& v4) { if (pred(v1, v2, v3, v4)) return AssertionSuccess(); - return AssertionFailure() << pred_text << "(" - << e1 << ", " - << e2 << ", " - << e3 << ", " - << e4 << ") evaluates to false, where" - << "\n" << e1 << " evaluates to " << v1 - << "\n" << e2 << " evaluates to " << v2 - << "\n" << e3 << " evaluates to " << v3 - << "\n" << e4 << " evaluates to " << v4; + return AssertionFailure() + << pred_text << "(" << e1 << ", " << e2 << ", " << e3 << ", " << e4 + << ") evaluates to false, where" + << "\n" + << e1 << " evaluates to " << ::testing::PrintToString(v1) << "\n" + << e2 << " evaluates to " << ::testing::PrintToString(v2) << "\n" + << e3 << " evaluates to " << ::testing::PrintToString(v3) << "\n" + << e4 << " evaluates to " << ::testing::PrintToString(v4); } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4. @@ -305,17 +309,15 @@ AssertionResult AssertPred5Helper(const char* pred_text, const T5& v5) { if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); - return AssertionFailure() << pred_text << "(" - << e1 << ", " - << e2 << ", " - << e3 << ", " - << e4 << ", " - << e5 << ") evaluates to false, where" - << "\n" << e1 << " evaluates to " << v1 - << "\n" << e2 << " evaluates to " << v2 - << "\n" << e3 << " evaluates to " << v3 - << "\n" << e4 << " evaluates to " << v4 - << "\n" << e5 << " evaluates to " << v5; + return AssertionFailure() + << pred_text << "(" << e1 << ", " << e2 << ", " << e3 << ", " << e4 + << ", " << e5 << ") evaluates to false, where" + << "\n" + << e1 << " evaluates to " << ::testing::PrintToString(v1) << "\n" + << e2 << " evaluates to " << ::testing::PrintToString(v2) << "\n" + << e3 << " evaluates to " << ::testing::PrintToString(v3) << "\n" + << e4 << " evaluates to " << ::testing::PrintToString(v4) << "\n" + << e5 << " evaluates to " << ::testing::PrintToString(v5); } // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5. diff --git a/test/gtest/include/gtest/gtest_prod.h b/test/gtest/include/gtest/gtest_prod.h index 89314f405..e651671eb 100644 --- a/test/gtest/include/gtest/gtest_prod.h +++ b/test/gtest/include/gtest/gtest_prod.h @@ -26,10 +26,10 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) + // // Google C++ Testing and Mocking Framework definitions useful in production code. +// GOOGLETEST_CM0003 DO NOT DELETE #ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_ #define GTEST_INCLUDE_GTEST_GTEST_PROD_H_ diff --git a/test/gtest/include/gtest/internal/custom/README.md b/test/gtest/include/gtest/internal/custom/README.md new file mode 100644 index 000000000..ff391fb4e --- /dev/null +++ b/test/gtest/include/gtest/internal/custom/README.md @@ -0,0 +1,56 @@ +# Customization Points + +The custom directory is an injection point for custom user configurations. + +## Header `gtest.h` + +### The following macros can be defined: + +* `GTEST_OS_STACK_TRACE_GETTER_` - The name of an implementation of + `OsStackTraceGetterInterface`. +* `GTEST_CUSTOM_TEMPDIR_FUNCTION_` - An override for `testing::TempDir()`. See + `testing::TempDir` for semantics and signature. + +## Header `gtest-port.h` + +The following macros can be defined: + +### Flag related macros: + +* `GTEST_FLAG(flag_name)` +* `GTEST_USE_OWN_FLAGFILE_FLAG_` - Define to 0 when the system provides its + own flagfile flag parsing. +* `GTEST_DECLARE_bool_(name)` +* `GTEST_DECLARE_int32_(name)` +* `GTEST_DECLARE_string_(name)` +* `GTEST_DEFINE_bool_(name, default_val, doc)` +* `GTEST_DEFINE_int32_(name, default_val, doc)` +* `GTEST_DEFINE_string_(name, default_val, doc)` + +### Logging: + +* `GTEST_LOG_(severity)` +* `GTEST_CHECK_(condition)` +* Functions `LogToStderr()` and `FlushInfoLog()` have to be provided too. + +### Threading: + +* `GTEST_HAS_NOTIFICATION_` - Enabled if Notification is already provided. +* `GTEST_HAS_MUTEX_AND_THREAD_LOCAL_` - Enabled if `Mutex` and `ThreadLocal` + are already provided. Must also provide `GTEST_DECLARE_STATIC_MUTEX_(mutex)` + and `GTEST_DEFINE_STATIC_MUTEX_(mutex)` +* `GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks)` +* `GTEST_LOCK_EXCLUDED_(locks)` + +### Underlying library support features + +* `GTEST_HAS_CXXABI_H_` + +### Exporting API symbols: + +* `GTEST_API_` - Specifier for exported symbols. + +## Header `gtest-printers.h` + +* See documentation at `gtest/gtest-printers.h` for details on how to define a + custom printer. diff --git a/test/gtest/include/gtest/internal/custom/gtest-port.h b/test/gtest/include/gtest/internal/custom/gtest-port.h index 94884c15b..cd85d956d 100644 --- a/test/gtest/include/gtest/internal/custom/gtest-port.h +++ b/test/gtest/include/gtest/internal/custom/gtest-port.h @@ -27,45 +27,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Injection point for custom user configurations. -// The following macros can be defined: -// -// Flag related macros: -// GTEST_FLAG(flag_name) -// GTEST_USE_OWN_FLAGFILE_FLAG_ - Define to 0 when the system provides its -// own flagfile flag parsing. -// GTEST_DECLARE_bool_(name) -// GTEST_DECLARE_int32_(name) -// GTEST_DECLARE_string_(name) -// GTEST_DEFINE_bool_(name, default_val, doc) -// GTEST_DEFINE_int32_(name, default_val, doc) -// GTEST_DEFINE_string_(name, default_val, doc) -// -// Test filtering: -// GTEST_TEST_FILTER_ENV_VAR_ - The name of an environment variable that -// will be used if --GTEST_FLAG(test_filter) -// is not provided. -// -// Logging: -// GTEST_LOG_(severity) -// GTEST_CHECK_(condition) -// Functions LogToStderr() and FlushInfoLog() have to be provided too. -// -// Threading: -// GTEST_HAS_NOTIFICATION_ - Enabled if Notification is already provided. -// GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ - Enabled if Mutex and ThreadLocal are -// already provided. -// Must also provide GTEST_DECLARE_STATIC_MUTEX_(mutex) and -// GTEST_DEFINE_STATIC_MUTEX_(mutex) -// -// GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) -// GTEST_LOCK_EXCLUDED_(locks) -// -// Underlying library support features: -// GTEST_HAS_CXXABI_H_ -// -// Exporting API symbols: -// GTEST_API_ - Specifier for exported symbols. +// Injection point for custom user configurations. See README for details // // ** Custom implementation starts here ** diff --git a/test/gtest/include/gtest/internal/custom/gtest-printers.h b/test/gtest/include/gtest/internal/custom/gtest-printers.h index 60c1ea050..eb4467abc 100644 --- a/test/gtest/include/gtest/internal/custom/gtest-printers.h +++ b/test/gtest/include/gtest/internal/custom/gtest-printers.h @@ -31,8 +31,8 @@ // installation of gTest. // It will be included from gtest-printers.h and the overrides in this file // will be visible to everyone. -// See documentation at gtest/gtest-printers.h for details on how to define a -// custom printer. +// +// Injection point for custom user configurations. See README for details // // ** Custom implementation starts here ** diff --git a/test/gtest/include/gtest/internal/custom/gtest.h b/test/gtest/include/gtest/internal/custom/gtest.h index 6f7c5e40a..4c8e07be2 100644 --- a/test/gtest/include/gtest/internal/custom/gtest.h +++ b/test/gtest/include/gtest/internal/custom/gtest.h @@ -27,15 +27,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Injection point for custom user configurations. -// The following macros can be defined: -// -// GTEST_OS_STACK_TRACE_GETTER_ - The name of an implementation of -// OsStackTraceGetterInterface. -// -// GTEST_CUSTOM_TEMPDIR_FUNCTION_ - An override for testing::TempDir(). -// See testing::TempDir for semantics and -// signature. +// Injection point for custom user configurations. See README for details // // ** Custom implementation starts here ** diff --git a/test/gtest/include/gtest/internal/gtest-death-test-internal.h b/test/gtest/include/gtest/internal/gtest-death-test-internal.h index 949c42984..68bd35306 100644 --- a/test/gtest/include/gtest/internal/gtest-death-test-internal.h +++ b/test/gtest/include/gtest/internal/gtest-death-test-internal.h @@ -27,18 +27,20 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// // The Google C++ Testing and Mocking Framework (Google Test) // // This header file defines internal utilities needed for implementing // death tests. They are subject to change without notice. +// GOOGLETEST_CM0001 DO NOT DELETE #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ +#include "gtest/gtest-matchers.h" #include "gtest/internal/gtest-internal.h" #include <stdio.h> +#include <memory> namespace testing { namespace internal { @@ -52,6 +54,9 @@ const char kInternalRunDeathTestFlag[] = "internal_run_death_test"; #if GTEST_HAS_DEATH_TEST +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ +/* class A needs to have dll-interface to be used by clients of class B */) + // DeathTest is a class that hides much of the complexity of the // GTEST_DEATH_TEST_ macro. It is abstract; its static Create method // returns a concrete class that depends on the prevailing death test @@ -75,7 +80,7 @@ class GTEST_API_ DeathTest { // argument is set. If the death test should be skipped, the pointer // is set to NULL; otherwise, it is set to the address of a new concrete // DeathTest object that controls the execution of the current test. - static bool Create(const char* statement, const RE* regex, + static bool Create(const char* statement, Matcher<const std::string&> matcher, const char* file, int line, DeathTest** test); DeathTest(); virtual ~DeathTest() { } @@ -135,25 +140,50 @@ class GTEST_API_ DeathTest { GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest); }; +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 + // Factory interface for death tests. May be mocked out for testing. class DeathTestFactory { public: virtual ~DeathTestFactory() { } - virtual bool Create(const char* statement, const RE* regex, - const char* file, int line, DeathTest** test) = 0; + virtual bool Create(const char* statement, + Matcher<const std::string&> matcher, const char* file, + int line, DeathTest** test) = 0; }; // A concrete DeathTestFactory implementation for normal use. class DefaultDeathTestFactory : public DeathTestFactory { public: - virtual bool Create(const char* statement, const RE* regex, - const char* file, int line, DeathTest** test); + bool Create(const char* statement, Matcher<const std::string&> matcher, + const char* file, int line, DeathTest** test) override; }; // Returns true if exit_status describes a process that was terminated // by a signal, or exited normally with a nonzero exit code. GTEST_API_ bool ExitedUnsuccessfully(int exit_status); +// A string passed to EXPECT_DEATH (etc.) is caught by one of these overloads +// and interpreted as a regex (rather than an Eq matcher) for legacy +// compatibility. +inline Matcher<const ::std::string&> MakeDeathTestMatcher( + ::testing::internal::RE regex) { + return ContainsRegex(regex.pattern()); +} +inline Matcher<const ::std::string&> MakeDeathTestMatcher(const char* regex) { + return ContainsRegex(regex); +} +inline Matcher<const ::std::string&> MakeDeathTestMatcher( + const ::std::string& regex) { + return ContainsRegex(regex); +} + +// If a Matcher<const ::std::string&> is passed to EXPECT_DEATH (etc.), it's +// used directly. +inline Matcher<const ::std::string&> MakeDeathTestMatcher( + Matcher<const ::std::string&> matcher) { + return matcher; +} + // Traps C++ exceptions escaping statement and reports them as test // failures. Note that trapping SEH exceptions is not implemented here. # if GTEST_HAS_EXCEPTIONS @@ -181,38 +211,38 @@ GTEST_API_ bool ExitedUnsuccessfully(int exit_status); // This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*, // ASSERT_EXIT*, and EXPECT_EXIT*. -# define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::AlwaysTrue()) { \ - const ::testing::internal::RE& gtest_regex = (regex); \ - ::testing::internal::DeathTest* gtest_dt; \ - if (!::testing::internal::DeathTest::Create(#statement, >est_regex, \ - __FILE__, __LINE__, >est_dt)) { \ - goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ - } \ - if (gtest_dt != NULL) { \ - ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \ - gtest_dt_ptr(gtest_dt); \ - switch (gtest_dt->AssumeRole()) { \ - case ::testing::internal::DeathTest::OVERSEE_TEST: \ - if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \ - goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ - } \ - break; \ - case ::testing::internal::DeathTest::EXECUTE_TEST: { \ - ::testing::internal::DeathTest::ReturnSentinel \ - gtest_sentinel(gtest_dt); \ - GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \ - gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \ - break; \ - } \ - default: \ - break; \ - } \ - } \ - } else \ - GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \ - fail(::testing::internal::DeathTest::LastMessage()) +#define GTEST_DEATH_TEST_(statement, predicate, regex_or_matcher, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + ::testing::internal::DeathTest* gtest_dt; \ + if (!::testing::internal::DeathTest::Create( \ + #statement, \ + ::testing::internal::MakeDeathTestMatcher(regex_or_matcher), \ + __FILE__, __LINE__, >est_dt)) { \ + goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ + } \ + if (gtest_dt != nullptr) { \ + std::unique_ptr< ::testing::internal::DeathTest> gtest_dt_ptr(gtest_dt); \ + switch (gtest_dt->AssumeRole()) { \ + case ::testing::internal::DeathTest::OVERSEE_TEST: \ + if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \ + goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \ + } \ + break; \ + case ::testing::internal::DeathTest::EXECUTE_TEST: { \ + ::testing::internal::DeathTest::ReturnSentinel gtest_sentinel( \ + gtest_dt); \ + GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \ + gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \ + break; \ + } \ + default: \ + break; \ + } \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__) \ + : fail(::testing::internal::DeathTest::LastMessage()) // The symbol "fail" here expands to something into which a message // can be streamed. @@ -221,14 +251,13 @@ GTEST_API_ bool ExitedUnsuccessfully(int exit_status); // must accept a streamed message even though the message is never printed. // The regex object is not evaluated, but it is used to prevent "unused" // warnings and to avoid an expression that doesn't compile in debug mode. -#define GTEST_EXECUTE_STATEMENT_(statement, regex) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::AlwaysTrue()) { \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - } else if (!::testing::internal::AlwaysTrue()) { \ - const ::testing::internal::RE& gtest_regex = (regex); \ - static_cast<void>(gtest_regex); \ - } else \ +#define GTEST_EXECUTE_STATEMENT_(statement, regex_or_matcher) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } else if (!::testing::internal::AlwaysTrue()) { \ + ::testing::internal::MakeDeathTestMatcher(regex_or_matcher); \ + } else \ ::testing::Message() // A class representing the parsed contents of the diff --git a/test/gtest/include/gtest/internal/gtest-filepath.h b/test/gtest/include/gtest/internal/gtest-filepath.h index 406597a44..c11b10151 100644 --- a/test/gtest/include/gtest/internal/gtest-filepath.h +++ b/test/gtest/include/gtest/internal/gtest-filepath.h @@ -27,7 +27,6 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// // Google Test filepath utilities // // This header file declares classes and functions used internally by @@ -36,11 +35,16 @@ // This file is #included in gtest/internal/gtest-internal.h. // Do not include this header file separately! +// GOOGLETEST_CM0001 DO NOT DELETE + #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ #include "gtest/internal/gtest-string.h" +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ +/* class A needs to have dll-interface to be used by clients of class B */) + namespace testing { namespace internal { @@ -106,7 +110,7 @@ class GTEST_API_ FilePath { const FilePath& base_name, const char* extension); - // Returns true iff the path is "". + // Returns true if and only if the path is "". bool IsEmpty() const { return pathname_.empty(); } // If input name has a trailing separator character, removes it and returns @@ -202,4 +206,6 @@ class GTEST_API_ FilePath { } // namespace internal } // namespace testing +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 + #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ diff --git a/test/gtest/include/gtest/internal/gtest-internal.h b/test/gtest/include/gtest/internal/gtest-internal.h index fc65b1f2b..94c816a28 100644 --- a/test/gtest/include/gtest/internal/gtest-internal.h +++ b/test/gtest/include/gtest/internal/gtest-internal.h @@ -27,12 +27,13 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// // The Google C++ Testing and Mocking Framework (Google Test) // // This header file declares functions and macros used internally by // Google Test. They are subject to change without notice. +// GOOGLETEST_CM0001 DO NOT DELETE + #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ @@ -57,6 +58,7 @@ #include <map> #include <set> #include <string> +#include <type_traits> #include <vector> #include "gtest/gtest-message.h" @@ -78,7 +80,6 @@ // Stringifies its argument. #define GTEST_STRINGIFY_(name) #name -class ProtocolMessage; namespace proto2 { class Message; } namespace testing { @@ -90,7 +91,7 @@ class Message; // Represents a failure message. class Test; // Represents a test. class TestInfo; // Information about a test. class TestPartResult; // Result of a test part. -class UnitTest; // A collection of test cases. +class UnitTest; // A collection of test suites. template <typename T> ::std::string PrintToString(const T& value); @@ -105,34 +106,22 @@ class UnitTestImpl; // Opaque implementation of UnitTest // stack trace. GTEST_API_ extern const char kStackTraceMarker[]; -// Two overloaded helpers for checking at compile time whether an -// expression is a null pointer literal (i.e. NULL or any 0-valued -// compile-time integral constant). Their return values have -// different sizes, so we can use sizeof() to test which version is -// picked by the compiler. These helpers have no implementations, as -// we only need their signatures. -// -// Given IsNullLiteralHelper(x), the compiler will pick the first -// version if x can be implicitly converted to Secret*, and pick the -// second version otherwise. Since Secret is a secret and incomplete -// type, the only expression a user can write that has type Secret* is -// a null pointer literal. Therefore, we know that x is a null -// pointer literal if and only if the first version is picked by the -// compiler. -char IsNullLiteralHelper(Secret* p); -char (&IsNullLiteralHelper(...))[2]; // NOLINT - -// A compile-time bool constant that is true if and only if x is a -// null pointer literal (i.e. NULL or any 0-valued compile-time -// integral constant). -#ifdef GTEST_ELLIPSIS_NEEDS_POD_ -// We lose support for NULL detection where the compiler doesn't like -// passing non-POD classes through ellipsis (...). -# define GTEST_IS_NULL_LITERAL_(x) false -#else -# define GTEST_IS_NULL_LITERAL_(x) \ - (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1) -#endif // GTEST_ELLIPSIS_NEEDS_POD_ +// An IgnoredValue object can be implicitly constructed from ANY value. +class IgnoredValue { + struct Sink {}; + public: + // This constructor template allows any value to be implicitly + // converted to IgnoredValue. The object has no data member and + // doesn't try to remember anything about the argument. We + // deliberately omit the 'explicit' keyword in order to allow the + // conversion to be implicit. + // Disable the conversion if T already has a magical conversion operator. + // Otherwise we get ambiguity. + template <typename T, + typename std::enable_if<!std::is_convertible<T, Sink>::value, + int>::type = 0> + IgnoredValue(const T& /* ignored */) {} // NOLINT(runtime/explicit) +}; // Appends the user-supplied message to the Google-Test-generated message. GTEST_API_ std::string AppendUserMessage( @@ -140,6 +129,9 @@ GTEST_API_ std::string AppendUserMessage( #if GTEST_HAS_EXCEPTIONS +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4275 \ +/* an exported class was derived from a class that was not exported */) + // This exception is thrown by (and only by) a failed Google Test // assertion when GTEST_FLAG(throw_on_failure) is true (if exceptions // are enabled). We derive it from std::runtime_error, which is for @@ -151,6 +143,8 @@ class GTEST_API_ GoogleTestFailureException : public ::std::runtime_error { explicit GoogleTestFailureException(const TestPartResult& failure); }; +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4275 + #endif // GTEST_HAS_EXCEPTIONS namespace edit_distance { @@ -195,7 +189,7 @@ GTEST_API_ std::string DiffStrings(const std::string& left, // expected_value: "5" // actual_value: "6" // -// The ignoring_case parameter is true iff the assertion is a +// The ignoring_case parameter is true if and only if the assertion is a // *_STRCASEEQ*. When it's true, the string " (ignoring case)" will // be inserted into the message. GTEST_API_ AssertionResult EqFailure(const char* expected_expression, @@ -324,15 +318,15 @@ class FloatingPoint { // Returns the sign bit of this number. Bits sign_bit() const { return kSignBitMask & u_.bits_; } - // Returns true iff this is NAN (not a number). + // Returns true if and only if this is NAN (not a number). bool is_nan() const { // It's a NAN if the exponent bits are all ones and the fraction // bits are not entirely zeros. return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0); } - // Returns true iff this number is at most kMaxUlps ULP's away from - // rhs. In particular, this function: + // Returns true if and only if this number is at most kMaxUlps ULP's away + // from rhs. In particular, this function: // // - returns false if either number is (or both are) NAN. // - treats really large numbers as almost equal to infinity. @@ -403,7 +397,7 @@ typedef FloatingPoint<float> Float; typedef FloatingPoint<double> Double; // In order to catch the mistake of putting tests that use different -// test fixture classes in the same test case, we need to assign +// test fixture classes in the same test suite, we need to assign // unique IDs to fixture classes and compare them. The TypeId type is // used to hold such IDs. The user should treat TypeId as an opaque // type: the only operation allowed on TypeId values is to compare @@ -463,7 +457,7 @@ class TestFactoryBase { template <class TestClass> class TestFactoryImpl : public TestFactoryBase { public: - virtual Test* CreateTest() { return new TestClass; } + Test* CreateTest() override { return new TestClass; } }; #if GTEST_OS_WINDOWS @@ -479,9 +473,9 @@ GTEST_API_ AssertionResult IsHRESULTFailure(const char* expr, #endif // GTEST_OS_WINDOWS -// Types of SetUpTestCase() and TearDownTestCase() functions. -typedef void (*SetUpTestCaseFunc)(); -typedef void (*TearDownTestCaseFunc)(); +// Types of SetUpTestSuite() and TearDownTestSuite() functions. +using SetUpTestSuiteFunc = void (*)(); +using TearDownTestSuiteFunc = void (*)(); struct CodeLocation { CodeLocation(const std::string& a_file, int a_line) @@ -491,12 +485,64 @@ struct CodeLocation { int line; }; +// Helper to identify which setup function for TestCase / TestSuite to call. +// Only one function is allowed, either TestCase or TestSute but not both. + +// Utility functions to help SuiteApiResolver +using SetUpTearDownSuiteFuncType = void (*)(); + +inline SetUpTearDownSuiteFuncType GetNotDefaultOrNull( + SetUpTearDownSuiteFuncType a, SetUpTearDownSuiteFuncType def) { + return a == def ? nullptr : a; +} + +template <typename T> +// Note that SuiteApiResolver inherits from T because +// SetUpTestSuite()/TearDownTestSuite() could be protected. Ths way +// SuiteApiResolver can access them. +struct SuiteApiResolver : T { + // testing::Test is only forward declared at this point. So we make it a + // dependend class for the compiler to be OK with it. + using Test = + typename std::conditional<sizeof(T) != 0, ::testing::Test, void>::type; + + static SetUpTearDownSuiteFuncType GetSetUpCaseOrSuite(const char* filename, + int line_num) { + SetUpTearDownSuiteFuncType test_case_fp = + GetNotDefaultOrNull(&T::SetUpTestCase, &Test::SetUpTestCase); + SetUpTearDownSuiteFuncType test_suite_fp = + GetNotDefaultOrNull(&T::SetUpTestSuite, &Test::SetUpTestSuite); + + GTEST_CHECK_(!test_case_fp || !test_suite_fp) + << "Test can not provide both SetUpTestSuite and SetUpTestCase, please " + "make sure there is only one present at " + << filename << ":" << line_num; + + return test_case_fp != nullptr ? test_case_fp : test_suite_fp; + } + + static SetUpTearDownSuiteFuncType GetTearDownCaseOrSuite(const char* filename, + int line_num) { + SetUpTearDownSuiteFuncType test_case_fp = + GetNotDefaultOrNull(&T::TearDownTestCase, &Test::TearDownTestCase); + SetUpTearDownSuiteFuncType test_suite_fp = + GetNotDefaultOrNull(&T::TearDownTestSuite, &Test::TearDownTestSuite); + + GTEST_CHECK_(!test_case_fp || !test_suite_fp) + << "Test can not provide both TearDownTestSuite and TearDownTestCase," + " please make sure there is only one present at" + << filename << ":" << line_num; + + return test_case_fp != nullptr ? test_case_fp : test_suite_fp; + } +}; + // Creates a new TestInfo object and registers it with Google Test; // returns the created object. // // Arguments: // -// test_case_name: name of the test case +// test_suite_name: name of the test suite // name: name of the test // type_param the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. @@ -504,21 +550,16 @@ struct CodeLocation { // or NULL if this is not a type-parameterized test. // code_location: code location where the test is defined // fixture_class_id: ID of the test fixture class -// set_up_tc: pointer to the function that sets up the test case -// tear_down_tc: pointer to the function that tears down the test case +// set_up_tc: pointer to the function that sets up the test suite +// tear_down_tc: pointer to the function that tears down the test suite // factory: pointer to the factory that creates a test object. // The newly created TestInfo instance will assume // ownership of the factory object. GTEST_API_ TestInfo* MakeAndRegisterTestInfo( - const char* test_case_name, - const char* name, - const char* type_param, - const char* value_param, - CodeLocation code_location, - TypeId fixture_class_id, - SetUpTestCaseFunc set_up_tc, - TearDownTestCaseFunc tear_down_tc, - TestFactoryBase* factory); + const char* test_suite_name, const char* name, const char* type_param, + const char* value_param, CodeLocation code_location, + TypeId fixture_class_id, SetUpTestSuiteFunc set_up_tc, + TearDownTestSuiteFunc tear_down_tc, TestFactoryBase* factory); // If *pstr starts with the given prefix, modifies *pstr to be right // past the prefix and returns true; otherwise leaves *pstr unchanged @@ -527,19 +568,23 @@ GTEST_API_ bool SkipPrefix(const char* prefix, const char** pstr); #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P -// State of the definition of a type-parameterized test case. -class GTEST_API_ TypedTestCasePState { +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ +/* class A needs to have dll-interface to be used by clients of class B */) + +// State of the definition of a type-parameterized test suite. +class GTEST_API_ TypedTestSuitePState { public: - TypedTestCasePState() : registered_(false) {} + TypedTestSuitePState() : registered_(false) {} // Adds the given test name to defined_test_names_ and return true - // if the test case hasn't been registered; otherwise aborts the + // if the test suite hasn't been registered; otherwise aborts the // program. bool AddTestName(const char* file, int line, const char* case_name, const char* test_name) { if (registered_) { - fprintf(stderr, "%s Test %s must be defined before " - "REGISTER_TYPED_TEST_CASE_P(%s, ...).\n", + fprintf(stderr, + "%s Test %s must be defined before " + "REGISTER_TYPED_TEST_SUITE_P(%s, ...).\n", FormatFileLocation(file, line).c_str(), test_name, case_name); fflush(stderr); posix::Abort(); @@ -572,12 +617,19 @@ class GTEST_API_ TypedTestCasePState { RegisteredTestsMap registered_tests_; }; +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ +using TypedTestCasePState = TypedTestSuitePState; +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 + // Skips to the first non-space char after the first comma in 'str'; // returns NULL if no comma is found in 'str'. inline const char* SkipComma(const char* str) { const char* comma = strchr(str, ','); - if (comma == NULL) { - return NULL; + if (comma == nullptr) { + return nullptr; } while (IsSpace(*(++comma))) {} return comma; @@ -587,7 +639,7 @@ inline const char* SkipComma(const char* str) { // the entire string if it contains no comma. inline std::string GetPrefixUntilComma(const char* str) { const char* comma = strchr(str, ','); - return comma == NULL ? str : std::string(str, comma); + return comma == nullptr ? str : std::string(str, comma); } // Splits a given string on a given delimiter, populating a given @@ -595,6 +647,37 @@ inline std::string GetPrefixUntilComma(const char* str) { void SplitString(const ::std::string& str, char delimiter, ::std::vector< ::std::string>* dest); +// The default argument to the template below for the case when the user does +// not provide a name generator. +struct DefaultNameGenerator { + template <typename T> + static std::string GetName(int i) { + return StreamableToString(i); + } +}; + +template <typename Provided = DefaultNameGenerator> +struct NameGeneratorSelector { + typedef Provided type; +}; + +template <typename NameGenerator> +void GenerateNamesRecursively(Types0, std::vector<std::string>*, int) {} + +template <typename NameGenerator, typename Types> +void GenerateNamesRecursively(Types, std::vector<std::string>* result, int i) { + result->push_back(NameGenerator::template GetName<typename Types::Head>(i)); + GenerateNamesRecursively<NameGenerator>(typename Types::Tail(), result, + i + 1); +} + +template <typename NameGenerator, typename Types> +std::vector<std::string> GenerateNames() { + std::vector<std::string> result; + GenerateNamesRecursively<NameGenerator>(Types(), &result, 0); + return result; +} + // TypeParameterizedTest<Fixture, TestSel, Types>::Register() // registers a list of type-parameterized tests with Google Test. The // return value is insignificant - we just need to return something @@ -606,13 +689,13 @@ template <GTEST_TEMPLATE_ Fixture, class TestSel, typename Types> class TypeParameterizedTest { public: // 'index' is the index of the test in the type list 'Types' - // specified in INSTANTIATE_TYPED_TEST_CASE_P(Prefix, TestCase, + // specified in INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, TestSuite, // Types). Valid values for 'index' are [0, N - 1] where N is the // length of Types. - static bool Register(const char* prefix, - const CodeLocation& code_location, - const char* case_name, const char* test_names, - int index) { + static bool Register(const char* prefix, const CodeLocation& code_location, + const char* case_name, const char* test_names, int index, + const std::vector<std::string>& type_names = + GenerateNames<DefaultNameGenerator, Types>()) { typedef typename Types::Head Type; typedef Fixture<Type> FixtureClass; typedef typename GTEST_BIND_(TestSel, Type) TestClass; @@ -620,20 +703,27 @@ class TypeParameterizedTest { // First, registers the first type-parameterized test in the type // list. MakeAndRegisterTestInfo( - (std::string(prefix) + (prefix[0] == '\0' ? "" : "/") + case_name + "/" - + StreamableToString(index)).c_str(), + (std::string(prefix) + (prefix[0] == '\0' ? "" : "/") + case_name + + "/" + type_names[static_cast<size_t>(index)]) + .c_str(), StripTrailingSpaces(GetPrefixUntilComma(test_names)).c_str(), GetTypeName<Type>().c_str(), - NULL, // No value parameter. - code_location, - GetTypeId<FixtureClass>(), - TestClass::SetUpTestCase, - TestClass::TearDownTestCase, + nullptr, // No value parameter. + code_location, GetTypeId<FixtureClass>(), + SuiteApiResolver<TestClass>::GetSetUpCaseOrSuite( + code_location.file.c_str(), code_location.line), + SuiteApiResolver<TestClass>::GetTearDownCaseOrSuite( + code_location.file.c_str(), code_location.line), new TestFactoryImpl<TestClass>); // Next, recurses (at compile time) with the tail of the type list. - return TypeParameterizedTest<Fixture, TestSel, typename Types::Tail> - ::Register(prefix, code_location, case_name, test_names, index + 1); + return TypeParameterizedTest<Fixture, TestSel, + typename Types::Tail>::Register(prefix, + code_location, + case_name, + test_names, + index + 1, + type_names); } }; @@ -643,21 +733,25 @@ class TypeParameterizedTest<Fixture, TestSel, Types0> { public: static bool Register(const char* /*prefix*/, const CodeLocation&, const char* /*case_name*/, const char* /*test_names*/, - int /*index*/) { + int /*index*/, + const std::vector<std::string>& = + std::vector<std::string>() /*type_names*/) { return true; } }; -// TypeParameterizedTestCase<Fixture, Tests, Types>::Register() +// TypeParameterizedTestSuite<Fixture, Tests, Types>::Register() // registers *all combinations* of 'Tests' and 'Types' with Google // Test. The return value is insignificant - we just need to return // something such that we can call this function in a namespace scope. template <GTEST_TEMPLATE_ Fixture, typename Tests, typename Types> -class TypeParameterizedTestCase { +class TypeParameterizedTestSuite { public: static bool Register(const char* prefix, CodeLocation code_location, - const TypedTestCasePState* state, - const char* case_name, const char* test_names) { + const TypedTestSuitePState* state, const char* case_name, + const char* test_names, + const std::vector<std::string>& type_names = + GenerateNames<DefaultNameGenerator, Types>()) { std::string test_name = StripTrailingSpaces( GetPrefixUntilComma(test_names)); if (!state->TestExists(test_name)) { @@ -674,22 +768,26 @@ class TypeParameterizedTestCase { // First, register the first test in 'Test' for each type in 'Types'. TypeParameterizedTest<Fixture, Head, Types>::Register( - prefix, test_location, case_name, test_names, 0); + prefix, test_location, case_name, test_names, 0, type_names); // Next, recurses (at compile time) with the tail of the test list. - return TypeParameterizedTestCase<Fixture, typename Tests::Tail, Types> - ::Register(prefix, code_location, state, - case_name, SkipComma(test_names)); + return TypeParameterizedTestSuite<Fixture, typename Tests::Tail, + Types>::Register(prefix, code_location, + state, case_name, + SkipComma(test_names), + type_names); } }; // The base case for the compile time recursion. template <GTEST_TEMPLATE_ Fixture, typename Types> -class TypeParameterizedTestCase<Fixture, Templates0, Types> { +class TypeParameterizedTestSuite<Fixture, Templates0, Types> { public: static bool Register(const char* /*prefix*/, const CodeLocation&, - const TypedTestCasePState* /*state*/, - const char* /*case_name*/, const char* /*test_names*/) { + const TypedTestSuitePState* /*state*/, + const char* /*case_name*/, const char* /*test_names*/, + const std::vector<std::string>& = + std::vector<std::string>() /*type_names*/) { return true; } }; @@ -749,120 +847,16 @@ class GTEST_API_ Random { GTEST_DISALLOW_COPY_AND_ASSIGN_(Random); }; -// Defining a variable of type CompileAssertTypesEqual<T1, T2> will cause a -// compiler error iff T1 and T2 are different types. -template <typename T1, typename T2> -struct CompileAssertTypesEqual; - -template <typename T> -struct CompileAssertTypesEqual<T, T> { -}; - -// Removes the reference from a type if it is a reference type, -// otherwise leaves it unchanged. This is the same as -// tr1::remove_reference, which is not widely available yet. -template <typename T> -struct RemoveReference { typedef T type; }; // NOLINT -template <typename T> -struct RemoveReference<T&> { typedef T type; }; // NOLINT - -// A handy wrapper around RemoveReference that works when the argument -// T depends on template parameters. -#define GTEST_REMOVE_REFERENCE_(T) \ - typename ::testing::internal::RemoveReference<T>::type - -// Removes const from a type if it is a const type, otherwise leaves -// it unchanged. This is the same as tr1::remove_const, which is not -// widely available yet. -template <typename T> -struct RemoveConst { typedef T type; }; // NOLINT -template <typename T> -struct RemoveConst<const T> { typedef T type; }; // NOLINT - -// MSVC 8.0, Sun C++, and IBM XL C++ have a bug which causes the above -// definition to fail to remove the const in 'const int[3]' and 'const -// char[3][4]'. The following specialization works around the bug. -template <typename T, size_t N> -struct RemoveConst<const T[N]> { - typedef typename RemoveConst<T>::type type[N]; -}; - -#if defined(_MSC_VER) && _MSC_VER < 1400 -// This is the only specialization that allows VC++ 7.1 to remove const in -// 'const int[3] and 'const int[3][4]'. However, it causes trouble with GCC -// and thus needs to be conditionally compiled. -template <typename T, size_t N> -struct RemoveConst<T[N]> { - typedef typename RemoveConst<T>::type type[N]; -}; -#endif - -// A handy wrapper around RemoveConst that works when the argument -// T depends on template parameters. -#define GTEST_REMOVE_CONST_(T) \ - typename ::testing::internal::RemoveConst<T>::type - // Turns const U&, U&, const U, and U all into U. #define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \ - GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T)) - -// ImplicitlyConvertible<From, To>::value is a compile-time bool -// constant that's true iff type From can be implicitly converted to -// type To. -template <typename From, typename To> -class ImplicitlyConvertible { - private: - // We need the following helper functions only for their types. - // They have no implementations. - - // MakeFrom() is an expression whose type is From. We cannot simply - // use From(), as the type From may not have a public default - // constructor. - static typename AddReference<From>::type MakeFrom(); - - // These two functions are overloaded. Given an expression - // Helper(x), the compiler will pick the first version if x can be - // implicitly converted to type To; otherwise it will pick the - // second version. - // - // The first version returns a value of size 1, and the second - // version returns a value of size 2. Therefore, by checking the - // size of Helper(x), which can be done at compile time, we can tell - // which version of Helper() is used, and hence whether x can be - // implicitly converted to type To. - static char Helper(To); - static char (&Helper(...))[2]; // NOLINT - - // We have to put the 'public' section after the 'private' section, - // or MSVC refuses to compile the code. - public: -#if defined(__BORLANDC__) - // C++Builder cannot use member overload resolution during template - // instantiation. The simplest workaround is to use its C++0x type traits - // functions (C++Builder 2009 and above only). - static const bool value = __is_convertible(From, To); -#else - // MSVC warns about implicitly converting from double to int for - // possible loss of data, so we need to temporarily disable the - // warning. - GTEST_DISABLE_MSC_WARNINGS_PUSH_(4244) - static const bool value = - sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1; - GTEST_DISABLE_MSC_WARNINGS_POP_() -#endif // __BORLANDC__ -}; -template <typename From, typename To> -const bool ImplicitlyConvertible<From, To>::value; + typename std::remove_const<typename std::remove_reference<T>::type>::type // IsAProtocolMessage<T>::value is a compile-time bool constant that's -// true iff T is type ProtocolMessage, proto2::Message, or a subclass -// of those. +// true if and only if T is type proto2::Message or a subclass of it. template <typename T> struct IsAProtocolMessage : public bool_constant< - ImplicitlyConvertible<const T*, const ::ProtocolMessage*>::value || - ImplicitlyConvertible<const T*, const ::proto2::Message*>::value> { -}; + std::is_convertible<const T*, const ::proto2::Message*>::value> {}; // When the compiler sees expression IsContainerTest<C>(0), if C is an // STL-style container class, the first overload of IsContainerTest @@ -889,7 +883,6 @@ struct IsAProtocolMessage // IsContainerTest(typename C::const_iterator*) and // IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++. typedef int IsContainer; -#if GTEST_LANG_CXX11 template <class C, class Iterator = decltype(::std::declval<const C&>().begin()), class = decltype(::std::declval<const C&>().end()), @@ -899,14 +892,6 @@ template <class C, IsContainer IsContainerTest(int /* dummy */) { return 0; } -#else -template <class C> -IsContainer IsContainerTest(int /* dummy */, - typename C::iterator* /* it */ = NULL, - typename C::const_iterator* /* const_it */ = NULL) { - return 0; -} -#endif // GTEST_LANG_CXX11 typedef char IsNotContainer; template <class C> @@ -927,47 +912,30 @@ struct IsHashTable { static char test(...); public: - static const bool value = sizeof(test<T>(0, 0)) == sizeof(int); + static const bool value = sizeof(test<T>(nullptr, nullptr)) == sizeof(int); }; template <typename T> const bool IsHashTable<T>::value; -template<typename T> -struct VoidT { - typedef void value_type; -}; - -template <typename T, typename = void> -struct HasValueType : false_type {}; -template <typename T> -struct HasValueType<T, VoidT<typename T::value_type> > : true_type { -}; - template <typename C, - bool = sizeof(IsContainerTest<C>(0)) == sizeof(IsContainer), - bool = HasValueType<C>::value> + bool = sizeof(IsContainerTest<C>(0)) == sizeof(IsContainer)> struct IsRecursiveContainerImpl; -template <typename C, bool HV> -struct IsRecursiveContainerImpl<C, false, HV> : public false_type {}; +template <typename C> +struct IsRecursiveContainerImpl<C, false> : public std::false_type {}; // Since the IsRecursiveContainerImpl depends on the IsContainerTest we need to // obey the same inconsistencies as the IsContainerTest, namely check if // something is a container is relying on only const_iterator in C++11 and // is relying on both const_iterator and iterator otherwise template <typename C> -struct IsRecursiveContainerImpl<C, true, false> : public false_type {}; - -template <typename C> -struct IsRecursiveContainerImpl<C, true, true> { - #if GTEST_LANG_CXX11 - typedef typename IteratorTraits<typename C::const_iterator>::value_type - value_type; -#else - typedef typename IteratorTraits<typename C::iterator>::value_type value_type; -#endif - typedef is_same<value_type, C> type; +struct IsRecursiveContainerImpl<C, true> { + using value_type = decltype(*std::declval<typename C::const_iterator>()); + using type = + std::is_same<typename std::remove_const< + typename std::remove_reference<value_type>::type>::type, + C>; }; // IsRecursiveContainer<Type> is a unary compile-time predicate that @@ -979,13 +947,6 @@ struct IsRecursiveContainerImpl<C, true, true> { template <typename C> struct IsRecursiveContainer : public IsRecursiveContainerImpl<C>::type {}; -// EnableIf<condition>::type is void when 'Cond' is true, and -// undefined when 'Cond' is false. To use SFINAE to make a function -// overload only apply when a particular expression is true, add -// "typename EnableIf<expression>::type* = 0" as the last parameter. -template<bool> struct EnableIf; -template<> struct EnableIf<true> { typedef void type; }; // NOLINT - // Utilities for native arrays. // ArrayEq() compares two k-dimensional native arrays using the @@ -1108,10 +1069,9 @@ class NativeArray { } private: - enum { - kCheckTypeIsNotConstOrAReference = StaticAssertTypeEqHelper< - Element, GTEST_REMOVE_REFERENCE_AND_CONST_(Element)>::value - }; + static_assert(!std::is_const<Element>::value, "Type must not be const"); + static_assert(!std::is_reference<Element>::value, + "Type must not be a reference"); // Initializes this object with a copy of the input. void InitCopy(const Element* array, size_t a_size) { @@ -1136,6 +1096,139 @@ class NativeArray { GTEST_DISALLOW_ASSIGN_(NativeArray); }; +// Backport of std::index_sequence. +template <size_t... Is> +struct IndexSequence { + using type = IndexSequence; +}; + +// Double the IndexSequence, and one if plus_one is true. +template <bool plus_one, typename T, size_t sizeofT> +struct DoubleSequence; +template <size_t... I, size_t sizeofT> +struct DoubleSequence<true, IndexSequence<I...>, sizeofT> { + using type = IndexSequence<I..., (sizeofT + I)..., 2 * sizeofT>; +}; +template <size_t... I, size_t sizeofT> +struct DoubleSequence<false, IndexSequence<I...>, sizeofT> { + using type = IndexSequence<I..., (sizeofT + I)...>; +}; + +// Backport of std::make_index_sequence. +// It uses O(ln(N)) instantiation depth. +template <size_t N> +struct MakeIndexSequence + : DoubleSequence<N % 2 == 1, typename MakeIndexSequence<N / 2>::type, + N / 2>::type {}; + +template <> +struct MakeIndexSequence<0> : IndexSequence<> {}; + +// FIXME: This implementation of ElemFromList is O(1) in instantiation depth, +// but it is O(N^2) in total instantiations. Not sure if this is the best +// tradeoff, as it will make it somewhat slow to compile. +template <typename T, size_t, size_t> +struct ElemFromListImpl {}; + +template <typename T, size_t I> +struct ElemFromListImpl<T, I, I> { + using type = T; +}; + +// Get the Nth element from T... +// It uses O(1) instantiation depth. +template <size_t N, typename I, typename... T> +struct ElemFromList; + +template <size_t N, size_t... I, typename... T> +struct ElemFromList<N, IndexSequence<I...>, T...> + : ElemFromListImpl<T, N, I>... {}; + +template <typename... T> +class FlatTuple; + +template <typename Derived, size_t I> +struct FlatTupleElemBase; + +template <typename... T, size_t I> +struct FlatTupleElemBase<FlatTuple<T...>, I> { + using value_type = + typename ElemFromList<I, typename MakeIndexSequence<sizeof...(T)>::type, + T...>::type; + FlatTupleElemBase() = default; + explicit FlatTupleElemBase(value_type t) : value(std::move(t)) {} + value_type value; +}; + +template <typename Derived, typename Idx> +struct FlatTupleBase; + +template <size_t... Idx, typename... T> +struct FlatTupleBase<FlatTuple<T...>, IndexSequence<Idx...>> + : FlatTupleElemBase<FlatTuple<T...>, Idx>... { + using Indices = IndexSequence<Idx...>; + FlatTupleBase() = default; + explicit FlatTupleBase(T... t) + : FlatTupleElemBase<FlatTuple<T...>, Idx>(std::move(t))... {} +}; + +// Analog to std::tuple but with different tradeoffs. +// This class minimizes the template instantiation depth, thus allowing more +// elements that std::tuple would. std::tuple has been seen to require an +// instantiation depth of more than 10x the number of elements in some +// implementations. +// FlatTuple and ElemFromList are not recursive and have a fixed depth +// regardless of T... +// MakeIndexSequence, on the other hand, it is recursive but with an +// instantiation depth of O(ln(N)). +template <typename... T> +class FlatTuple + : private FlatTupleBase<FlatTuple<T...>, + typename MakeIndexSequence<sizeof...(T)>::type> { + using Indices = typename FlatTuple::FlatTupleBase::Indices; + + public: + FlatTuple() = default; + explicit FlatTuple(T... t) : FlatTuple::FlatTupleBase(std::move(t)...) {} + + template <size_t I> + const typename ElemFromList<I, Indices, T...>::type& Get() const { + return static_cast<const FlatTupleElemBase<FlatTuple, I>*>(this)->value; + } + + template <size_t I> + typename ElemFromList<I, Indices, T...>::type& Get() { + return static_cast<FlatTupleElemBase<FlatTuple, I>*>(this)->value; + } +}; + +// Utility functions to be called with static_assert to induce deprecation +// warnings. +GTEST_INTERNAL_DEPRECATED( + "INSTANTIATE_TEST_CASE_P is deprecated, please use " + "INSTANTIATE_TEST_SUITE_P") +constexpr bool InstantiateTestCase_P_IsDeprecated() { return true; } + +GTEST_INTERNAL_DEPRECATED( + "TYPED_TEST_CASE_P is deprecated, please use " + "TYPED_TEST_SUITE_P") +constexpr bool TypedTestCase_P_IsDeprecated() { return true; } + +GTEST_INTERNAL_DEPRECATED( + "TYPED_TEST_CASE is deprecated, please use " + "TYPED_TEST_SUITE") +constexpr bool TypedTestCaseIsDeprecated() { return true; } + +GTEST_INTERNAL_DEPRECATED( + "REGISTER_TYPED_TEST_CASE_P is deprecated, please use " + "REGISTER_TYPED_TEST_SUITE_P") +constexpr bool RegisterTypedTestCase_P_IsDeprecated() { return true; } + +GTEST_INTERNAL_DEPRECATED( + "INSTANTIATE_TYPED_TEST_CASE_P is deprecated, please use " + "INSTANTIATE_TYPED_TEST_SUITE_P") +constexpr bool InstantiateTypedTestCase_P_IsDeprecated() { return true; } + } // namespace internal } // namespace testing @@ -1155,7 +1248,10 @@ class NativeArray { #define GTEST_SUCCESS_(message) \ GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess) -// Suppress MSVC warning 4702 (unreachable code) for the code following +#define GTEST_SKIP_(message) \ + return GTEST_MESSAGE_(message, ::testing::TestPartResult::kSkip) + +// Suppress MSVC warning 4072 (unreachable code) for the code following // statement if it returns or throws (or doesn't return or throw in some // situations). #define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ @@ -1247,31 +1343,38 @@ class NativeArray { " Actual: it does.") // Expands to the name of the class that implements the given test. -#define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ - test_case_name##_##test_name##_Test +#define GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + test_suite_name##_##test_name##_Test // Helper macro for defining tests. -#define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\ -class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\ - public:\ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\ - private:\ - virtual void TestBody();\ - static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;\ - GTEST_DISALLOW_COPY_AND_ASSIGN_(\ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\ -};\ -\ -::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\ - ::test_info_ =\ - ::testing::internal::MakeAndRegisterTestInfo(\ - #test_case_name, #test_name, NULL, NULL, \ - ::testing::internal::CodeLocation(__FILE__, __LINE__), \ - (parent_id), \ - parent_class::SetUpTestCase, \ - parent_class::TearDownTestCase, \ - new ::testing::internal::TestFactoryImpl<\ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\ -void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() +#define GTEST_TEST_(test_suite_name, test_name, parent_class, parent_id) \ + static_assert(sizeof(GTEST_STRINGIFY_(test_suite_name)) > 1, \ + "test_suite_name must not be empty"); \ + static_assert(sizeof(GTEST_STRINGIFY_(test_name)) > 1, \ + "test_name must not be empty"); \ + class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + : public parent_class { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \ + \ + private: \ + virtual void TestBody(); \ + static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)); \ + }; \ + \ + ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::test_info_ = \ + ::testing::internal::MakeAndRegisterTestInfo( \ + #test_suite_name, #test_name, nullptr, nullptr, \ + ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \ + ::testing::internal::SuiteApiResolver< \ + parent_class>::GetSetUpCaseOrSuite(__FILE__, __LINE__), \ + ::testing::internal::SuiteApiResolver< \ + parent_class>::GetTearDownCaseOrSuite(__FILE__, __LINE__), \ + new ::testing::internal::TestFactoryImpl<GTEST_TEST_CLASS_NAME_( \ + test_suite_name, test_name)>); \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody() #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ diff --git a/test/gtest/include/gtest/internal/gtest-param-util.h b/test/gtest/include/gtest/internal/gtest-param-util.h index 3c80863cd..97533993c 100644 --- a/test/gtest/include/gtest/internal/gtest-param-util.h +++ b/test/gtest/include/gtest/internal/gtest-param-util.h @@ -26,28 +26,30 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: vladl@google.com (Vlad Losev) + // Type and function utilities for implementing parameterized tests. +// GOOGLETEST_CM0001 DO NOT DELETE + #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ #include <ctype.h> +#include <cassert> #include <iterator> +#include <memory> #include <set> +#include <tuple> #include <utility> #include <vector> #include "gtest/internal/gtest-internal.h" -#include "gtest/internal/gtest-linked_ptr.h" #include "gtest/internal/gtest-port.h" #include "gtest/gtest-printers.h" namespace testing { - // Input to a parameterized test name generator, describing a test parameter. // Consists of the parameter value and the integer parameter index. template <class ParamType> @@ -71,13 +73,14 @@ struct PrintToStringParamName { namespace internal { // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// +// Utility Functions + // Outputs a message explaining invalid registration of different -// fixture class for the same test case. This may happen when +// fixture class for the same test suite. This may happen when // TEST_P macro is used to define two tests with the same name // but in different namespaces. -GTEST_API_ void ReportInvalidTestCaseType(const char* test_case_name, - CodeLocation code_location); +GTEST_API_ void ReportInvalidTestSuiteType(const char* test_suite_name, + CodeLocation code_location); template <typename> class ParamGeneratorInterface; template <typename> class ParamGenerator; @@ -152,7 +155,7 @@ class ParamIterator { private: friend class ParamGenerator<T>; explicit ParamIterator(ParamIteratorInterface<T>* impl) : impl_(impl) {} - scoped_ptr<ParamIteratorInterface<T> > impl_; + std::unique_ptr<ParamIteratorInterface<T> > impl_; }; // ParamGeneratorInterface<T> is the binary interface to access generators @@ -191,7 +194,7 @@ class ParamGenerator { iterator end() const { return iterator(impl_->End()); } private: - linked_ptr<const ParamGeneratorInterface<T> > impl_; + std::shared_ptr<const ParamGeneratorInterface<T> > impl_; }; // Generates values from a range of two comparable values. Can be used to @@ -204,12 +207,12 @@ class RangeGenerator : public ParamGeneratorInterface<T> { RangeGenerator(T begin, T end, IncrementT step) : begin_(begin), end_(end), step_(step), end_index_(CalculateEndIndex(begin, end, step)) {} - virtual ~RangeGenerator() {} + ~RangeGenerator() override {} - virtual ParamIteratorInterface<T>* Begin() const { + ParamIteratorInterface<T>* Begin() const override { return new Iterator(this, begin_, 0, step_); } - virtual ParamIteratorInterface<T>* End() const { + ParamIteratorInterface<T>* End() const override { return new Iterator(this, end_, end_index_, step_); } @@ -219,20 +222,20 @@ class RangeGenerator : public ParamGeneratorInterface<T> { Iterator(const ParamGeneratorInterface<T>* base, T value, int index, IncrementT step) : base_(base), value_(value), index_(index), step_(step) {} - virtual ~Iterator() {} + ~Iterator() override {} - virtual const ParamGeneratorInterface<T>* BaseGenerator() const { + const ParamGeneratorInterface<T>* BaseGenerator() const override { return base_; } - virtual void Advance() { + void Advance() override { value_ = static_cast<T>(value_ + step_); index_++; } - virtual ParamIteratorInterface<T>* Clone() const { + ParamIteratorInterface<T>* Clone() const override { return new Iterator(*this); } - virtual const T* Current() const { return &value_; } - virtual bool Equals(const ParamIteratorInterface<T>& other) const { + const T* Current() const override { return &value_; } + bool Equals(const ParamIteratorInterface<T>& other) const override { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) @@ -289,12 +292,12 @@ class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface<T> { template <typename ForwardIterator> ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end) : container_(begin, end) {} - virtual ~ValuesInIteratorRangeGenerator() {} + ~ValuesInIteratorRangeGenerator() override {} - virtual ParamIteratorInterface<T>* Begin() const { + ParamIteratorInterface<T>* Begin() const override { return new Iterator(this, container_.begin()); } - virtual ParamIteratorInterface<T>* End() const { + ParamIteratorInterface<T>* End() const override { return new Iterator(this, container_.end()); } @@ -306,16 +309,16 @@ class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface<T> { Iterator(const ParamGeneratorInterface<T>* base, typename ContainerType::const_iterator iterator) : base_(base), iterator_(iterator) {} - virtual ~Iterator() {} + ~Iterator() override {} - virtual const ParamGeneratorInterface<T>* BaseGenerator() const { + const ParamGeneratorInterface<T>* BaseGenerator() const override { return base_; } - virtual void Advance() { + void Advance() override { ++iterator_; value_.reset(); } - virtual ParamIteratorInterface<T>* Clone() const { + ParamIteratorInterface<T>* Clone() const override { return new Iterator(*this); } // We need to use cached value referenced by iterator_ because *iterator_ @@ -325,12 +328,11 @@ class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface<T> { // can advance iterator_ beyond the end of the range, and we cannot // detect that fact. The client code, on the other hand, is // responsible for not calling Current() on an out-of-range iterator. - virtual const T* Current() const { - if (value_.get() == NULL) - value_.reset(new T(*iterator_)); + const T* Current() const override { + if (value_.get() == nullptr) value_.reset(new T(*iterator_)); return value_.get(); } - virtual bool Equals(const ParamIteratorInterface<T>& other) const { + bool Equals(const ParamIteratorInterface<T>& other) const override { // Having the same base generator guarantees that the other // iterator is of the same type and we can downcast. GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) @@ -353,9 +355,9 @@ class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface<T> { // A cached value of *iterator_. We keep it here to allow access by // pointer in the wrapping iterator's operator->(). // value_ needs to be mutable to be accessed in Current(). - // Use of scoped_ptr helps manage cached value's lifetime, + // Use of std::unique_ptr helps manage cached value's lifetime, // which is bound by the lifespan of the iterator itself. - mutable scoped_ptr<const T> value_; + mutable std::unique_ptr<const T> value_; }; // class ValuesInIteratorRangeGenerator::Iterator // No implementation - assignment is unsupported. @@ -375,25 +377,12 @@ std::string DefaultParamName(const TestParamInfo<ParamType>& info) { return name_stream.GetString(); } -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// Parameterized test name overload helpers, which help the -// INSTANTIATE_TEST_CASE_P macro choose between the default parameterized -// test name generator and user param name generator. -template <class ParamType, class ParamNameGenFunctor> -ParamNameGenFunctor GetParamNameGen(ParamNameGenFunctor func) { - return func; -} - -template <class ParamType> -struct ParamNameGenFunc { - typedef std::string Type(const TestParamInfo<ParamType>&); -}; - -template <class ParamType> -typename ParamNameGenFunc<ParamType>::Type *GetParamNameGen() { - return DefaultParamName; +template <typename T = int> +void TestNotEmpty() { + static_assert(sizeof(T) == 0, "Empty arguments are not allowed."); } +template <typename T = int> +void TestNotEmpty(const T&) {} // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // @@ -405,7 +394,7 @@ class ParameterizedTestFactory : public TestFactoryBase { typedef typename TestClass::ParamType ParamType; explicit ParameterizedTestFactory(ParamType parameter) : parameter_(parameter) {} - virtual Test* CreateTest() { + Test* CreateTest() override { TestClass::SetParam(¶meter_); return new TestClass(); } @@ -433,19 +422,19 @@ class TestMetaFactoryBase { // TestMetaFactory creates test factories for passing into // MakeAndRegisterTestInfo function. Since MakeAndRegisterTestInfo receives // ownership of test factory pointer, same factory object cannot be passed -// into that method twice. But ParameterizedTestCaseInfo is going to call +// into that method twice. But ParameterizedTestSuiteInfo is going to call // it for each Test/Parameter value combination. Thus it needs meta factory // creator class. -template <class TestCase> +template <class TestSuite> class TestMetaFactory - : public TestMetaFactoryBase<typename TestCase::ParamType> { + : public TestMetaFactoryBase<typename TestSuite::ParamType> { public: - typedef typename TestCase::ParamType ParamType; + using ParamType = typename TestSuite::ParamType; TestMetaFactory() {} - virtual TestFactoryBase* CreateTestFactory(ParamType parameter) { - return new ParameterizedTestFactory<TestCase>(parameter); + TestFactoryBase* CreateTestFactory(ParamType parameter) override { + return new ParameterizedTestFactory<TestSuite>(parameter); } private: @@ -454,93 +443,93 @@ class TestMetaFactory // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // -// ParameterizedTestCaseInfoBase is a generic interface -// to ParameterizedTestCaseInfo classes. ParameterizedTestCaseInfoBase +// ParameterizedTestSuiteInfoBase is a generic interface +// to ParameterizedTestSuiteInfo classes. ParameterizedTestSuiteInfoBase // accumulates test information provided by TEST_P macro invocations -// and generators provided by INSTANTIATE_TEST_CASE_P macro invocations +// and generators provided by INSTANTIATE_TEST_SUITE_P macro invocations // and uses that information to register all resulting test instances -// in RegisterTests method. The ParameterizeTestCaseRegistry class holds -// a collection of pointers to the ParameterizedTestCaseInfo objects +// in RegisterTests method. The ParameterizeTestSuiteRegistry class holds +// a collection of pointers to the ParameterizedTestSuiteInfo objects // and calls RegisterTests() on each of them when asked. -class ParameterizedTestCaseInfoBase { +class ParameterizedTestSuiteInfoBase { public: - virtual ~ParameterizedTestCaseInfoBase() {} + virtual ~ParameterizedTestSuiteInfoBase() {} - // Base part of test case name for display purposes. - virtual const std::string& GetTestCaseName() const = 0; + // Base part of test suite name for display purposes. + virtual const std::string& GetTestSuiteName() const = 0; // Test case id to verify identity. - virtual TypeId GetTestCaseTypeId() const = 0; + virtual TypeId GetTestSuiteTypeId() const = 0; // UnitTest class invokes this method to register tests in this - // test case right before running them in RUN_ALL_TESTS macro. - // This method should not be called more then once on any single - // instance of a ParameterizedTestCaseInfoBase derived class. + // test suite right before running them in RUN_ALL_TESTS macro. + // This method should not be called more than once on any single + // instance of a ParameterizedTestSuiteInfoBase derived class. virtual void RegisterTests() = 0; protected: - ParameterizedTestCaseInfoBase() {} + ParameterizedTestSuiteInfoBase() {} private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfoBase); + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestSuiteInfoBase); }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // -// ParameterizedTestCaseInfo accumulates tests obtained from TEST_P -// macro invocations for a particular test case and generators -// obtained from INSTANTIATE_TEST_CASE_P macro invocations for that -// test case. It registers tests with all values generated by all +// ParameterizedTestSuiteInfo accumulates tests obtained from TEST_P +// macro invocations for a particular test suite and generators +// obtained from INSTANTIATE_TEST_SUITE_P macro invocations for that +// test suite. It registers tests with all values generated by all // generators when asked. -template <class TestCase> -class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { +template <class TestSuite> +class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { public: // ParamType and GeneratorCreationFunc are private types but are required // for declarations of public methods AddTestPattern() and - // AddTestCaseInstantiation(). - typedef typename TestCase::ParamType ParamType; + // AddTestSuiteInstantiation(). + using ParamType = typename TestSuite::ParamType; // A function that returns an instance of appropriate generator type. typedef ParamGenerator<ParamType>(GeneratorCreationFunc)(); - typedef typename ParamNameGenFunc<ParamType>::Type ParamNameGeneratorFunc; + using ParamNameGeneratorFunc = std::string(const TestParamInfo<ParamType>&); - explicit ParameterizedTestCaseInfo( - const char* name, CodeLocation code_location) - : test_case_name_(name), code_location_(code_location) {} + explicit ParameterizedTestSuiteInfo(const char* name, + CodeLocation code_location) + : test_suite_name_(name), code_location_(code_location) {} // Test case base name for display purposes. - virtual const std::string& GetTestCaseName() const { return test_case_name_; } + const std::string& GetTestSuiteName() const override { + return test_suite_name_; + } // Test case id to verify identity. - virtual TypeId GetTestCaseTypeId() const { return GetTypeId<TestCase>(); } + TypeId GetTestSuiteTypeId() const override { return GetTypeId<TestSuite>(); } // TEST_P macro uses AddTestPattern() to record information // about a single test in a LocalTestInfo structure. - // test_case_name is the base name of the test case (without invocation + // test_suite_name is the base name of the test suite (without invocation // prefix). test_base_name is the name of an individual test without // parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is - // test case base name and DoBar is test base name. - void AddTestPattern(const char* test_case_name, - const char* test_base_name, + // test suite base name and DoBar is test base name. + void AddTestPattern(const char* test_suite_name, const char* test_base_name, TestMetaFactoryBase<ParamType>* meta_factory) { - tests_.push_back(linked_ptr<TestInfo>(new TestInfo(test_case_name, - test_base_name, - meta_factory))); + tests_.push_back(std::shared_ptr<TestInfo>( + new TestInfo(test_suite_name, test_base_name, meta_factory))); } - // INSTANTIATE_TEST_CASE_P macro uses AddGenerator() to record information + // INSTANTIATE_TEST_SUITE_P macro uses AddGenerator() to record information // about a generator. - int AddTestCaseInstantiation(const std::string& instantiation_name, - GeneratorCreationFunc* func, - ParamNameGeneratorFunc* name_func, - const char* file, int line) { + int AddTestSuiteInstantiation(const std::string& instantiation_name, + GeneratorCreationFunc* func, + ParamNameGeneratorFunc* name_func, + const char* file, int line) { instantiations_.push_back( InstantiationInfo(instantiation_name, func, name_func, file, line)); return 0; // Return value used only to run this method in namespace scope. } - // UnitTest class invokes this method to register tests in this test case - // test cases right before running tests in RUN_ALL_TESTS macro. - // This method should not be called more then once on any single - // instance of a ParameterizedTestCaseInfoBase derived class. - // UnitTest has a guard to prevent from calling this method more then once. - virtual void RegisterTests() { + // UnitTest class invokes this method to register tests in this test suite + // test suites right before running tests in RUN_ALL_TESTS macro. + // This method should not be called more than once on any single + // instance of a ParameterizedTestSuiteInfoBase derived class. + // UnitTest has a guard to prevent from calling this method more than once. + void RegisterTests() override { for (typename TestInfoContainer::iterator test_it = tests_.begin(); test_it != tests_.end(); ++test_it) { - linked_ptr<TestInfo> test_info = *test_it; + std::shared_ptr<TestInfo> test_info = *test_it; for (typename InstantiationContainer::iterator gen_it = instantiations_.begin(); gen_it != instantiations_.end(); ++gen_it) { @@ -550,10 +539,10 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { const char* file = gen_it->file; int line = gen_it->line; - std::string test_case_name; + std::string test_suite_name; if ( !instantiation_name.empty() ) - test_case_name = instantiation_name + "/"; - test_case_name += test_info->test_case_base_name; + test_suite_name = instantiation_name + "/"; + test_suite_name += test_info->test_suite_base_name; size_t i = 0; std::set<std::string> test_param_names; @@ -576,39 +565,39 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { test_param_names.insert(param_name); - test_name_stream << test_info->test_base_name << "/" << param_name; + if (!test_info->test_base_name.empty()) { + test_name_stream << test_info->test_base_name << "/"; + } + test_name_stream << param_name; MakeAndRegisterTestInfo( - test_case_name.c_str(), - test_name_stream.GetString().c_str(), - NULL, // No type parameter. - PrintToString(*param_it).c_str(), - code_location_, - GetTestCaseTypeId(), - TestCase::SetUpTestCase, - TestCase::TearDownTestCase, + test_suite_name.c_str(), test_name_stream.GetString().c_str(), + nullptr, // No type parameter. + PrintToString(*param_it).c_str(), code_location_, + GetTestSuiteTypeId(), + SuiteApiResolver<TestSuite>::GetSetUpCaseOrSuite(file, line), + SuiteApiResolver<TestSuite>::GetTearDownCaseOrSuite(file, line), test_info->test_meta_factory->CreateTestFactory(*param_it)); } // for param_it } // for gen_it } // for test_it - } // RegisterTests + } // RegisterTests private: // LocalTestInfo structure keeps information about a single test registered // with TEST_P macro. struct TestInfo { - TestInfo(const char* a_test_case_base_name, - const char* a_test_base_name, - TestMetaFactoryBase<ParamType>* a_test_meta_factory) : - test_case_base_name(a_test_case_base_name), - test_base_name(a_test_base_name), - test_meta_factory(a_test_meta_factory) {} - - const std::string test_case_base_name; + TestInfo(const char* a_test_suite_base_name, const char* a_test_base_name, + TestMetaFactoryBase<ParamType>* a_test_meta_factory) + : test_suite_base_name(a_test_suite_base_name), + test_base_name(a_test_base_name), + test_meta_factory(a_test_meta_factory) {} + + const std::string test_suite_base_name; const std::string test_base_name; - const scoped_ptr<TestMetaFactoryBase<ParamType> > test_meta_factory; + const std::unique_ptr<TestMetaFactoryBase<ParamType> > test_meta_factory; }; - typedef ::std::vector<linked_ptr<TestInfo> > TestInfoContainer; - // Records data received from INSTANTIATE_TEST_CASE_P macros: + using TestInfoContainer = ::std::vector<std::shared_ptr<TestInfo> >; + // Records data received from INSTANTIATE_TEST_SUITE_P macros: // <Instantiation name, Sequence generator creation function, // Name generator function, Source file, Source line> struct InstantiationInfo { @@ -645,76 +634,247 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { return true; } - const std::string test_case_name_; + const std::string test_suite_name_; CodeLocation code_location_; TestInfoContainer tests_; InstantiationContainer instantiations_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfo); -}; // class ParameterizedTestCaseInfo + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestSuiteInfo); +}; // class ParameterizedTestSuiteInfo + +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ +template <class TestCase> +using ParameterizedTestCaseInfo = ParameterizedTestSuiteInfo<TestCase>; +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // -// ParameterizedTestCaseRegistry contains a map of ParameterizedTestCaseInfoBase -// classes accessed by test case names. TEST_P and INSTANTIATE_TEST_CASE_P -// macros use it to locate their corresponding ParameterizedTestCaseInfo -// descriptors. -class ParameterizedTestCaseRegistry { +// ParameterizedTestSuiteRegistry contains a map of +// ParameterizedTestSuiteInfoBase classes accessed by test suite names. TEST_P +// and INSTANTIATE_TEST_SUITE_P macros use it to locate their corresponding +// ParameterizedTestSuiteInfo descriptors. +class ParameterizedTestSuiteRegistry { public: - ParameterizedTestCaseRegistry() {} - ~ParameterizedTestCaseRegistry() { - for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); - it != test_case_infos_.end(); ++it) { - delete *it; + ParameterizedTestSuiteRegistry() {} + ~ParameterizedTestSuiteRegistry() { + for (auto& test_suite_info : test_suite_infos_) { + delete test_suite_info; } } // Looks up or creates and returns a structure containing information about - // tests and instantiations of a particular test case. - template <class TestCase> - ParameterizedTestCaseInfo<TestCase>* GetTestCasePatternHolder( - const char* test_case_name, - CodeLocation code_location) { - ParameterizedTestCaseInfo<TestCase>* typed_test_info = NULL; - for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); - it != test_case_infos_.end(); ++it) { - if ((*it)->GetTestCaseName() == test_case_name) { - if ((*it)->GetTestCaseTypeId() != GetTypeId<TestCase>()) { + // tests and instantiations of a particular test suite. + template <class TestSuite> + ParameterizedTestSuiteInfo<TestSuite>* GetTestSuitePatternHolder( + const char* test_suite_name, CodeLocation code_location) { + ParameterizedTestSuiteInfo<TestSuite>* typed_test_info = nullptr; + for (auto& test_suite_info : test_suite_infos_) { + if (test_suite_info->GetTestSuiteName() == test_suite_name) { + if (test_suite_info->GetTestSuiteTypeId() != GetTypeId<TestSuite>()) { // Complain about incorrect usage of Google Test facilities // and terminate the program since we cannot guaranty correct - // test case setup and tear-down in this case. - ReportInvalidTestCaseType(test_case_name, code_location); + // test suite setup and tear-down in this case. + ReportInvalidTestSuiteType(test_suite_name, code_location); posix::Abort(); } else { // At this point we are sure that the object we found is of the same // type we are looking for, so we downcast it to that type // without further checks. typed_test_info = CheckedDowncastToActualType< - ParameterizedTestCaseInfo<TestCase> >(*it); + ParameterizedTestSuiteInfo<TestSuite> >(test_suite_info); } break; } } - if (typed_test_info == NULL) { - typed_test_info = new ParameterizedTestCaseInfo<TestCase>( - test_case_name, code_location); - test_case_infos_.push_back(typed_test_info); + if (typed_test_info == nullptr) { + typed_test_info = new ParameterizedTestSuiteInfo<TestSuite>( + test_suite_name, code_location); + test_suite_infos_.push_back(typed_test_info); } return typed_test_info; } void RegisterTests() { - for (TestCaseInfoContainer::iterator it = test_case_infos_.begin(); - it != test_case_infos_.end(); ++it) { - (*it)->RegisterTests(); + for (auto& test_suite_info : test_suite_infos_) { + test_suite_info->RegisterTests(); } } +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + template <class TestCase> + ParameterizedTestCaseInfo<TestCase>* GetTestCasePatternHolder( + const char* test_case_name, CodeLocation code_location) { + return GetTestSuitePatternHolder<TestCase>(test_case_name, code_location); + } + +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + + private: + using TestSuiteInfoContainer = ::std::vector<ParameterizedTestSuiteInfoBase*>; + + TestSuiteInfoContainer test_suite_infos_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestSuiteRegistry); +}; + +} // namespace internal + +// Forward declarations of ValuesIn(), which is implemented in +// include/gtest/gtest-param-test.h. +template <class Container> +internal::ParamGenerator<typename Container::value_type> ValuesIn( + const Container& container); + +namespace internal { +// Used in the Values() function to provide polymorphic capabilities. + +template <typename... Ts> +class ValueArray { + public: + ValueArray(Ts... v) : v_{std::move(v)...} {} + + template <typename T> + operator ParamGenerator<T>() const { // NOLINT + return ValuesIn(MakeVector<T>(MakeIndexSequence<sizeof...(Ts)>())); + } + + private: + template <typename T, size_t... I> + std::vector<T> MakeVector(IndexSequence<I...>) const { + return std::vector<T>{static_cast<T>(v_.template Get<I>())...}; + } + + FlatTuple<Ts...> v_; +}; + +template <typename... T> +class CartesianProductGenerator + : public ParamGeneratorInterface<::std::tuple<T...>> { + public: + typedef ::std::tuple<T...> ParamType; + + CartesianProductGenerator(const std::tuple<ParamGenerator<T>...>& g) + : generators_(g) {} + ~CartesianProductGenerator() override {} + + ParamIteratorInterface<ParamType>* Begin() const override { + return new Iterator(this, generators_, false); + } + ParamIteratorInterface<ParamType>* End() const override { + return new Iterator(this, generators_, true); + } private: - typedef ::std::vector<ParameterizedTestCaseInfoBase*> TestCaseInfoContainer; + template <class I> + class IteratorImpl; + template <size_t... I> + class IteratorImpl<IndexSequence<I...>> + : public ParamIteratorInterface<ParamType> { + public: + IteratorImpl(const ParamGeneratorInterface<ParamType>* base, + const std::tuple<ParamGenerator<T>...>& generators, bool is_end) + : base_(base), + begin_(std::get<I>(generators).begin()...), + end_(std::get<I>(generators).end()...), + current_(is_end ? end_ : begin_) { + ComputeCurrentValue(); + } + ~IteratorImpl() override {} + + const ParamGeneratorInterface<ParamType>* BaseGenerator() const override { + return base_; + } + // Advance should not be called on beyond-of-range iterators + // so no component iterators must be beyond end of range, either. + void Advance() override { + assert(!AtEnd()); + // Advance the last iterator. + ++std::get<sizeof...(T) - 1>(current_); + // if that reaches end, propagate that up. + AdvanceIfEnd<sizeof...(T) - 1>(); + ComputeCurrentValue(); + } + ParamIteratorInterface<ParamType>* Clone() const override { + return new IteratorImpl(*this); + } - TestCaseInfoContainer test_case_infos_; + const ParamType* Current() const override { return current_value_.get(); } - GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseRegistry); + bool Equals(const ParamIteratorInterface<ParamType>& other) const override { + // Having the same base generator guarantees that the other + // iterator is of the same type and we can downcast. + GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) + << "The program attempted to compare iterators " + << "from different generators." << std::endl; + const IteratorImpl* typed_other = + CheckedDowncastToActualType<const IteratorImpl>(&other); + + // We must report iterators equal if they both point beyond their + // respective ranges. That can happen in a variety of fashions, + // so we have to consult AtEnd(). + if (AtEnd() && typed_other->AtEnd()) return true; + + bool same = true; + bool dummy[] = { + (same = same && std::get<I>(current_) == + std::get<I>(typed_other->current_))...}; + (void)dummy; + return same; + } + + private: + template <size_t ThisI> + void AdvanceIfEnd() { + if (std::get<ThisI>(current_) != std::get<ThisI>(end_)) return; + + bool last = ThisI == 0; + if (last) { + // We are done. Nothing else to propagate. + return; + } + + constexpr size_t NextI = ThisI - (ThisI != 0); + std::get<ThisI>(current_) = std::get<ThisI>(begin_); + ++std::get<NextI>(current_); + AdvanceIfEnd<NextI>(); + } + + void ComputeCurrentValue() { + if (!AtEnd()) + current_value_ = std::make_shared<ParamType>(*std::get<I>(current_)...); + } + bool AtEnd() const { + bool at_end = false; + bool dummy[] = { + (at_end = at_end || std::get<I>(current_) == std::get<I>(end_))...}; + (void)dummy; + return at_end; + } + + const ParamGeneratorInterface<ParamType>* const base_; + std::tuple<typename ParamGenerator<T>::iterator...> begin_; + std::tuple<typename ParamGenerator<T>::iterator...> end_; + std::tuple<typename ParamGenerator<T>::iterator...> current_; + std::shared_ptr<ParamType> current_value_; + }; + + using Iterator = IteratorImpl<typename MakeIndexSequence<sizeof...(T)>::type>; + + std::tuple<ParamGenerator<T>...> generators_; +}; + +template <class... Gen> +class CartesianProductHolder { + public: + CartesianProductHolder(const Gen&... g) : generators_(g...) {} + template <typename... T> + operator ParamGenerator<::std::tuple<T...>>() const { + return ParamGenerator<::std::tuple<T...>>( + new CartesianProductGenerator<T...>(generators_)); + } + + private: + std::tuple<Gen...> generators_; }; } // namespace internal diff --git a/test/gtest/include/gtest/internal/gtest-port-arch.h b/test/gtest/include/gtest/internal/gtest-port-arch.h index f83700e06..cece93dba 100644 --- a/test/gtest/include/gtest/internal/gtest-port-arch.h +++ b/test/gtest/include/gtest/internal/gtest-port-arch.h @@ -38,14 +38,13 @@ // Determines the platform on which Google Test is compiled. #ifdef __CYGWIN__ # define GTEST_OS_CYGWIN 1 -#elif defined __SYMBIAN32__ -# define GTEST_OS_SYMBIAN 1 +# elif defined(__MINGW__) || defined(__MINGW32__) || defined(__MINGW64__) +# define GTEST_OS_WINDOWS_MINGW 1 +# define GTEST_OS_WINDOWS 1 #elif defined _WIN32 # define GTEST_OS_WINDOWS 1 # ifdef _WIN32_WCE # define GTEST_OS_WINDOWS_MOBILE 1 -# elif defined(__MINGW__) || defined(__MINGW32__) -# define GTEST_OS_WINDOWS_MINGW 1 # elif defined(WINAPI_FAMILY) # include <winapifamily.h> # if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) @@ -65,15 +64,21 @@ # else # define GTEST_OS_WINDOWS_DESKTOP 1 # endif // _WIN32_WCE +#elif defined __OS2__ +# define GTEST_OS_OS2 1 #elif defined __APPLE__ # define GTEST_OS_MAC 1 # if TARGET_OS_IPHONE # define GTEST_OS_IOS 1 # endif +#elif defined __DragonFly__ +# define GTEST_OS_DRAGONFLY 1 #elif defined __FreeBSD__ # define GTEST_OS_FREEBSD 1 #elif defined __Fuchsia__ # define GTEST_OS_FUCHSIA 1 +#elif defined(__GLIBC__) && defined(__FreeBSD_kernel__) +# define GTEST_OS_GNU_KFREEBSD 1 #elif defined __linux__ # define GTEST_OS_LINUX 1 # if defined __ANDROID__ @@ -95,6 +100,8 @@ # define GTEST_OS_OPENBSD 1 #elif defined __QNX__ # define GTEST_OS_QNX 1 +#elif defined(__HAIKU__) +#define GTEST_OS_HAIKU 1 #endif // __CYGWIN__ #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_ diff --git a/test/gtest/include/gtest/internal/gtest-port.h b/test/gtest/include/gtest/internal/gtest-port.h index c823ad963..063fcb108 100644 --- a/test/gtest/include/gtest/internal/gtest-port.h +++ b/test/gtest/include/gtest/internal/gtest-port.h @@ -27,8 +27,6 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// Authors: wan@google.com (Zhanyong Wan) -// // Low-level types and utilities for porting Google Test to various // platforms. All macros ending with _ and symbols defined in an // internal namespace are subject to change without notice. Code @@ -40,13 +38,11 @@ // files are expected to #include this. Therefore, it cannot #include // any other Google Test header. +// GOOGLETEST_CM0001 DO NOT DELETE + #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ -#ifndef _WIN32 -#pragma GCC system_header -#endif - // Environment-describing macros // ----------------------------- // @@ -76,10 +72,6 @@ // is/isn't available. // GTEST_HAS_EXCEPTIONS - Define it to 1/0 to indicate that exceptions // are enabled. -// GTEST_HAS_GLOBAL_STRING - Define it to 1/0 to indicate that ::string -// is/isn't available -// GTEST_HAS_GLOBAL_WSTRING - Define it to 1/0 to indicate that ::wstring -// is/isn't available // GTEST_HAS_POSIX_RE - Define it to 1/0 to indicate that POSIX regular // expressions are/aren't available. // GTEST_HAS_PTHREAD - Define it to 1/0 to indicate that <pthread.h> @@ -89,8 +81,6 @@ // GTEST_HAS_STD_WSTRING - Define it to 1/0 to indicate that // std::wstring does/doesn't work (Google Test can // be used where std::wstring is unavailable). -// GTEST_HAS_TR1_TUPLE - Define it to 1/0 to indicate tr1::tuple -// is/isn't available. // GTEST_HAS_SEH - Define it to 1/0 to indicate whether the // compiler supports Microsoft's "Structured // Exception Handling". @@ -98,12 +88,6 @@ // - Define it to 1/0 to indicate whether the // platform supports I/O stream redirection using // dup() and dup2(). -// GTEST_USE_OWN_TR1_TUPLE - Define it to 1/0 to indicate whether Google -// Test's own tr1 tuple implementation should be -// used. Unused when the user sets -// GTEST_HAS_TR1_TUPLE to 0. -// GTEST_LANG_CXX11 - Define it to 1/0 to indicate that Google Test -// is building in C++11/C++98 mode. // GTEST_LINKED_AS_SHARED_LIBRARY // - Define to 1 when compiling tests that use // Google Test as a shared library (known as @@ -129,8 +113,11 @@ // // GTEST_OS_AIX - IBM AIX // GTEST_OS_CYGWIN - Cygwin +// GTEST_OS_DRAGONFLY - DragonFlyBSD // GTEST_OS_FREEBSD - FreeBSD // GTEST_OS_FUCHSIA - Fuchsia +// GTEST_OS_GNU_KFREEBSD - GNU/kFreeBSD +// GTEST_OS_HAIKU - Haiku // GTEST_OS_HPUX - HP-UX // GTEST_OS_LINUX - Linux // GTEST_OS_LINUX_ANDROID - Google Android @@ -139,9 +126,9 @@ // GTEST_OS_NACL - Google Native Client (NaCl) // GTEST_OS_NETBSD - NetBSD // GTEST_OS_OPENBSD - OpenBSD +// GTEST_OS_OS2 - OS/2 // GTEST_OS_QNX - QNX // GTEST_OS_SOLARIS - Sun Solaris -// GTEST_OS_SYMBIAN - Symbian // GTEST_OS_WINDOWS - Windows (Desktop, MinGW, or Mobile) // GTEST_OS_WINDOWS_DESKTOP - Windows Desktop // GTEST_OS_WINDOWS_MINGW - MinGW @@ -150,7 +137,7 @@ // GTEST_OS_WINDOWS_RT - Windows Store App/WinRT // GTEST_OS_ZOS - z/OS // -// Among the platforms, Cygwin, Linux, Max OS X, and Windows have the +// Among the platforms, Cygwin, Linux, Mac OS X, and Windows have the // most stable support. Since core members of the Google Test project // don't have access to other platforms, support for them may be less // stable. If you notice any problems on your platform, please notify @@ -176,18 +163,16 @@ // EXPECT_DEATH(DoSomethingDeadly()); // #endif // -// GTEST_HAS_COMBINE - the Combine() function (for value-parameterized -// tests) // GTEST_HAS_DEATH_TEST - death tests // GTEST_HAS_TYPED_TEST - typed tests // GTEST_HAS_TYPED_TEST_P - type-parameterized tests // GTEST_IS_THREADSAFE - Google Test is thread-safe. +// GOOGLETEST_CM0007 DO NOT DELETE // GTEST_USES_POSIX_RE - enhanced POSIX regex is used. Do not confuse with // GTEST_HAS_POSIX_RE (see above) which users can // define themselves. // GTEST_USES_SIMPLE_RE - our own simple regex is used; // the above RE\b(s) are mutually exclusive. -// GTEST_CAN_COMPARE_NULL - accepts untyped NULL in EXPECT_EQ(). // Misc public macros // ------------------ @@ -213,26 +198,14 @@ // GTEST_INTENTIONAL_CONST_COND_POP_ - finish code section where MSVC C4127 // is suppressed. // -// C++11 feature wrappers: -// -// testing::internal::forward - portability wrapper for std::forward. -// testing::internal::move - portability wrapper for std::move. -// // Synchronization: // Mutex, MutexLock, ThreadLocal, GetThreadCount() // - synchronization primitives. // -// Template meta programming: -// is_pointer - as in TR1; needed on Symbian and IBM XL C/C++ only. -// IteratorTraits - partial implementation of std::iterator_traits, which -// is not available in libCstd when compiled with Sun C++. -// -// Smart pointers: -// scoped_ptr - as in TR2. -// // Regular expressions: // RE - a simple regular expression class using the POSIX // Extended Regular Expression syntax on UNIX-like platforms +// GOOGLETEST_CM0008 DO NOT DELETE // or a reduced regular exception syntax on other // platforms, including Windows. // Logging: @@ -264,12 +237,20 @@ // BoolFromGTestEnv() - parses a bool environment variable. // Int32FromGTestEnv() - parses an Int32 environment variable. // StringFromGTestEnv() - parses a string environment variable. +// +// Deprecation warnings: +// GTEST_INTERNAL_DEPRECATED(message) - attribute marking a function as +// deprecated; calling a marked function +// should generate a compiler warning #include <ctype.h> // for isspace, etc #include <stddef.h> // for ptrdiff_t -#include <stdlib.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> +#include <memory> +#include <type_traits> + #ifndef _WIN32_WCE # include <sys/types.h> # include <sys/stat.h> @@ -280,12 +261,11 @@ # include <TargetConditionals.h> #endif -// Brings in the definition of HAS_GLOBAL_STRING. This must be done -// BEFORE we test HAS_GLOBAL_STRING. -#include <string> // NOLINT #include <algorithm> // NOLINT -#include <iostream> // NOLINT -#include <sstream> // NOLINT +#include <iostream> // NOLINT +#include <sstream> // NOLINT +#include <string> // NOLINT +#include <tuple> #include <utility> #include <vector> // NOLINT @@ -317,89 +297,32 @@ // GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 4385) // /* code that triggers warnings C4800 and C4385 */ // GTEST_DISABLE_MSC_WARNINGS_POP_() -#if _MSC_VER >= 1500 +#if defined(_MSC_VER) # define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) \ __pragma(warning(push)) \ __pragma(warning(disable: warnings)) # define GTEST_DISABLE_MSC_WARNINGS_POP_() \ __pragma(warning(pop)) #else -// Older versions of MSVC don't have __pragma. +// Not all compilers are MSVC # define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) # define GTEST_DISABLE_MSC_WARNINGS_POP_() #endif -#ifndef GTEST_LANG_CXX11 -// gcc and clang define __GXX_EXPERIMENTAL_CXX0X__ when -// -std={c,gnu}++{0x,11} is passed. The C++11 standard specifies a -// value for __cplusplus, and recent versions of clang, gcc, and -// probably other compilers set that too in C++11 mode. -# if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L || _MSC_VER >= 1900 -// Compiling in at least C++11 mode. -# define GTEST_LANG_CXX11 1 -# else -# define GTEST_LANG_CXX11 0 -# endif -#endif - -// Distinct from C++11 language support, some environments don't provide -// proper C++11 library support. Notably, it's possible to build in -// C++11 mode when targeting Mac OS X 10.6, which has an old libstdc++ -// with no C++11 support. -// -// libstdc++ has sufficient C++11 support as of GCC 4.6.0, __GLIBCXX__ -// 20110325, but maintenance releases in the 4.4 and 4.5 series followed -// this date, so check for those versions by their date stamps. -// https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html#abi.versioning -#if GTEST_LANG_CXX11 && \ - (!defined(__GLIBCXX__) || ( \ - __GLIBCXX__ >= 20110325ul && /* GCC >= 4.6.0 */ \ - /* Blacklist of patch releases of older branches: */ \ - __GLIBCXX__ != 20110416ul && /* GCC 4.4.6 */ \ - __GLIBCXX__ != 20120313ul && /* GCC 4.4.7 */ \ - __GLIBCXX__ != 20110428ul && /* GCC 4.5.3 */ \ - __GLIBCXX__ != 20120702ul)) /* GCC 4.5.4 */ -# define GTEST_STDLIB_CXX11 1 -#endif - -// Only use C++11 library features if the library provides them. -#if GTEST_STDLIB_CXX11 -# define GTEST_HAS_STD_BEGIN_AND_END_ 1 -# define GTEST_HAS_STD_FORWARD_LIST_ 1 -# if !defined(_MSC_VER) || (_MSC_FULL_VER >= 190023824) -// works only with VS2015U2 and better -# define GTEST_HAS_STD_FUNCTION_ 1 -# endif -# define GTEST_HAS_STD_INITIALIZER_LIST_ 1 -# define GTEST_HAS_STD_MOVE_ 1 -# define GTEST_HAS_STD_UNIQUE_PTR_ 1 -# define GTEST_HAS_STD_SHARED_PTR_ 1 -# define GTEST_HAS_UNORDERED_MAP_ 1 -# define GTEST_HAS_UNORDERED_SET_ 1 -#endif - -// C++11 specifies that <tuple> provides std::tuple. -// Some platforms still might not have it, however. -#if GTEST_LANG_CXX11 -# define GTEST_HAS_STD_TUPLE_ 1 -# if defined(__clang__) -// Inspired by http://clang.llvm.org/docs/LanguageExtensions.html#__has_include -# if defined(__has_include) && !__has_include(<tuple>) -# undef GTEST_HAS_STD_TUPLE_ -# endif -# elif defined(_MSC_VER) -// Inspired by boost/config/stdlib/dinkumware.hpp -# if defined(_CPPLIB_VER) && _CPPLIB_VER < 520 -# undef GTEST_HAS_STD_TUPLE_ -# endif -# elif defined(__GLIBCXX__) -// Inspired by boost/config/stdlib/libstdcpp3.hpp, -// http://gcc.gnu.org/gcc-4.2/changes.html and -// http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch01.html#manual.intro.status.standard.200x -# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2) -# undef GTEST_HAS_STD_TUPLE_ -# endif -# endif +// Clang on Windows does not understand MSVC's pragma warning. +// We need clang-specific way to disable function deprecation warning. +#ifdef __clang__ +# define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \ + _Pragma("clang diagnostic ignored \"-Wdeprecated-implementations\"") +#define GTEST_DISABLE_MSC_DEPRECATED_POP_() \ + _Pragma("clang diagnostic pop") +#else +# define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \ + GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996) +# define GTEST_DISABLE_MSC_DEPRECATED_POP_() \ + GTEST_DISABLE_MSC_WARNINGS_POP_() #endif // Brings in definitions for functions used in the testing::internal::posix @@ -434,7 +357,8 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; # include <android/api-level.h> // NOLINT #endif -// Defines this to true iff Google Test can use POSIX regular expressions. +// Defines this to true if and only if Google Test can use POSIX regular +// expressions. #ifndef GTEST_HAS_POSIX_RE # if GTEST_OS_LINUX_ANDROID // On Android, <regex.h> is only available starting with Gingerbread. @@ -475,7 +399,7 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // The user didn't tell us whether exceptions are enabled, so we need // to figure it out. # if defined(_MSC_VER) && defined(_CPPUNWIND) -// MSVC defines _CPPUNWIND to 1 iff exceptions are enabled. +// MSVC defines _CPPUNWIND to 1 if and only if exceptions are enabled. # define GTEST_HAS_EXCEPTIONS 1 # elif defined(__BORLANDC__) // C++Builder's implementation of the STL uses the _HAS_EXCEPTIONS @@ -486,16 +410,17 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; # endif // _HAS_EXCEPTIONS # define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS # elif defined(__clang__) -// clang defines __EXCEPTIONS iff exceptions are enabled before clang 220714, -// but iff cleanups are enabled after that. In Obj-C++ files, there can be -// cleanups for ObjC exceptions which also need cleanups, even if C++ exceptions -// are disabled. clang has __has_feature(cxx_exceptions) which checks for C++ -// exceptions starting at clang r206352, but which checked for cleanups prior to -// that. To reliably check for C++ exception availability with clang, check for +// clang defines __EXCEPTIONS if and only if exceptions are enabled before clang +// 220714, but if and only if cleanups are enabled after that. In Obj-C++ files, +// there can be cleanups for ObjC exceptions which also need cleanups, even if +// C++ exceptions are disabled. clang has __has_feature(cxx_exceptions) which +// checks for C++ exceptions starting at clang r206352, but which checked for +// cleanups prior to that. To reliably check for C++ exception availability with +// clang, check for // __EXCEPTIONS && __has_feature(cxx_exceptions). # define GTEST_HAS_EXCEPTIONS (__EXCEPTIONS && __has_feature(cxx_exceptions)) # elif defined(__GNUC__) && __EXCEPTIONS -// gcc defines __EXCEPTIONS to 1 iff exceptions are enabled. +// gcc defines __EXCEPTIONS to 1 if and only if exceptions are enabled. # define GTEST_HAS_EXCEPTIONS 1 # elif defined(__SUNPRO_CC) // Sun Pro CC supports exceptions. However, there is no compile-time way of @@ -503,7 +428,7 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // they are enabled unless the user tells us otherwise. # define GTEST_HAS_EXCEPTIONS 1 # elif defined(__IBMCPP__) && __EXCEPTIONS -// xlC defines __EXCEPTIONS to 1 iff exceptions are enabled. +// xlC defines __EXCEPTIONS to 1 if and only if exceptions are enabled. # define GTEST_HAS_EXCEPTIONS 1 # elif defined(__HP_aCC) // Exception handling is in effect by default in HP aCC compiler. It has to @@ -525,35 +450,18 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; # error "::std::string isn't available." #endif // !defined(GTEST_HAS_STD_STRING) -#ifndef GTEST_HAS_GLOBAL_STRING -// The user didn't tell us whether ::string is available, so we need -// to figure it out. - -# define GTEST_HAS_GLOBAL_STRING 0 - -#endif // GTEST_HAS_GLOBAL_STRING - #ifndef GTEST_HAS_STD_WSTRING // The user didn't tell us whether ::std::wstring is available, so we need // to figure it out. -// TODO(wan@google.com): uses autoconf to detect whether ::std::wstring -// is available. - // Cygwin 1.7 and below doesn't support ::std::wstring. // Solaris' libc++ doesn't support it either. Android has // no support for it at least as recent as Froyo (2.2). -# define GTEST_HAS_STD_WSTRING \ - (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS)) +#define GTEST_HAS_STD_WSTRING \ + (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ + GTEST_OS_HAIKU)) #endif // GTEST_HAS_STD_WSTRING -#ifndef GTEST_HAS_GLOBAL_WSTRING -// The user didn't tell us whether ::wstring is available, so we need -// to figure it out. -# define GTEST_HAS_GLOBAL_WSTRING \ - (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING) -#endif // GTEST_HAS_GLOBAL_WSTRING - // Determines whether RTTI is available. #ifndef GTEST_HAS_RTTI // The user didn't tell us whether RTTI is enabled, so we need to @@ -561,14 +469,15 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; # ifdef _MSC_VER -# ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled. +#ifdef _CPPRTTI // MSVC defines this macro if and only if RTTI is enabled. # define GTEST_HAS_RTTI 1 # else # define GTEST_HAS_RTTI 0 # endif -// Starting with version 4.3.2, gcc defines __GXX_RTTI iff RTTI is enabled. -# elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302) +// Starting with version 4.3.2, gcc defines __GXX_RTTI if and only if RTTI is +// enabled. +# elif defined(__GNUC__) # ifdef __GXX_RTTI // When building against STLport with the Android NDK and with @@ -624,9 +533,11 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // // To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0 // to your compiler flags. -#define GTEST_HAS_PTHREAD \ - (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX || GTEST_OS_QNX || \ - GTEST_OS_FREEBSD || GTEST_OS_NACL || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA) +#define GTEST_HAS_PTHREAD \ + (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX || GTEST_OS_QNX || \ + GTEST_OS_FREEBSD || GTEST_OS_NACL || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA || \ + GTEST_OS_DRAGONFLY || GTEST_OS_GNU_KFREEBSD || GTEST_OS_OPENBSD || \ + GTEST_OS_HAIKU) #endif // GTEST_HAS_PTHREAD #if GTEST_HAS_PTHREAD @@ -638,136 +549,6 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; # include <time.h> // NOLINT #endif -// Determines if hash_map/hash_set are available. -// Only used for testing against those containers. -#if !defined(GTEST_HAS_HASH_MAP_) -# if defined(_MSC_VER) && (_MSC_VER < 1900) -# define GTEST_HAS_HASH_MAP_ 1 // Indicates that hash_map is available. -# define GTEST_HAS_HASH_SET_ 1 // Indicates that hash_set is available. -# endif // _MSC_VER -#endif // !defined(GTEST_HAS_HASH_MAP_) - -// Determines whether Google Test can use tr1/tuple. You can define -// this macro to 0 to prevent Google Test from using tuple (any -// feature depending on tuple with be disabled in this mode). -#ifndef GTEST_HAS_TR1_TUPLE -# if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) -// STLport, provided with the Android NDK, has neither <tr1/tuple> or <tuple>. -# define GTEST_HAS_TR1_TUPLE 0 -# elif defined(_MSC_VER) && (_MSC_VER >= 1910) -// Prevent `warning C4996: 'std::tr1': warning STL4002: -// The non-Standard std::tr1 namespace and TR1-only machinery -// are deprecated and will be REMOVED.` -# define GTEST_HAS_TR1_TUPLE 0 -# elif GTEST_LANG_CXX11 && defined(_LIBCPP_VERSION) -// libc++ doesn't support TR1. -# define GTEST_HAS_TR1_TUPLE 0 -# else -// The user didn't tell us not to do it, so we assume it's OK. -# define GTEST_HAS_TR1_TUPLE 1 -# endif -#endif // GTEST_HAS_TR1_TUPLE - -// Determines whether Google Test's own tr1 tuple implementation -// should be used. -#ifndef GTEST_USE_OWN_TR1_TUPLE -// We use our own tuple implementation on Symbian. -# if GTEST_OS_SYMBIAN -# define GTEST_USE_OWN_TR1_TUPLE 1 -# else -// The user didn't tell us, so we need to figure it out. - -// We use our own TR1 tuple if we aren't sure the user has an -// implementation of it already. At this time, libstdc++ 4.0.0+ and -// MSVC 2010 are the only mainstream standard libraries that come -// with a TR1 tuple implementation. NVIDIA's CUDA NVCC compiler -// pretends to be GCC by defining __GNUC__ and friends, but cannot -// compile GCC's tuple implementation. MSVC 2008 (9.0) provides TR1 -// tuple in a 323 MB Feature Pack download, which we cannot assume the -// user has. QNX's QCC compiler is a modified GCC but it doesn't -// support TR1 tuple. libc++ only provides std::tuple, in C++11 mode, -// and it can be used with some compilers that define __GNUC__. -# if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000) \ - && !GTEST_OS_QNX && !defined(_LIBCPP_VERSION)) \ - || (_MSC_VER >= 1600 && _MSC_VER < 1900) -# define GTEST_ENV_HAS_TR1_TUPLE_ 1 -# endif - -// C++11 specifies that <tuple> provides std::tuple. Use that if gtest is used -// in C++11 mode and libstdc++ isn't very old (binaries targeting OS X 10.6 -// can build with clang but need to use gcc4.2's libstdc++). -# if GTEST_LANG_CXX11 && (!defined(__GLIBCXX__) || __GLIBCXX__ > 20110325) -# define GTEST_ENV_HAS_STD_TUPLE_ 1 -# endif - -# if GTEST_ENV_HAS_TR1_TUPLE_ || GTEST_ENV_HAS_STD_TUPLE_ -# define GTEST_USE_OWN_TR1_TUPLE 0 -# else -# define GTEST_USE_OWN_TR1_TUPLE 1 -# endif -# endif // GTEST_OS_SYMBIAN -#endif // GTEST_USE_OWN_TR1_TUPLE - -// To avoid conditional compilation we make it gtest-port.h's responsibility -// to #include the header implementing tuple. -#if GTEST_HAS_STD_TUPLE_ -# include <tuple> // IWYU pragma: export -# define GTEST_TUPLE_NAMESPACE_ ::std -#endif // GTEST_HAS_STD_TUPLE_ - -// We include tr1::tuple even if std::tuple is available to define printers for -// them. -#if GTEST_HAS_TR1_TUPLE -# ifndef GTEST_TUPLE_NAMESPACE_ -# define GTEST_TUPLE_NAMESPACE_ ::std::tr1 -# endif // GTEST_TUPLE_NAMESPACE_ - -# if GTEST_USE_OWN_TR1_TUPLE -# include "gtest/internal/gtest-tuple.h" // IWYU pragma: export // NOLINT -# elif GTEST_OS_SYMBIAN - -// On Symbian, BOOST_HAS_TR1_TUPLE causes Boost's TR1 tuple library to -// use STLport's tuple implementation, which unfortunately doesn't -// work as the copy of STLport distributed with Symbian is incomplete. -// By making sure BOOST_HAS_TR1_TUPLE is undefined, we force Boost to -// use its own tuple implementation. -# ifdef BOOST_HAS_TR1_TUPLE -# undef BOOST_HAS_TR1_TUPLE -# endif // BOOST_HAS_TR1_TUPLE - -// This prevents <boost/tr1/detail/config.hpp>, which defines -// BOOST_HAS_TR1_TUPLE, from being #included by Boost's <tuple>. -# define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED -# include <tuple> // IWYU pragma: export // NOLINT - -# elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000) -// GCC 4.0+ implements tr1/tuple in the <tr1/tuple> header. This does -// not conform to the TR1 spec, which requires the header to be <tuple>. - -# if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 -// Until version 4.3.2, gcc has a bug that causes <tr1/functional>, -// which is #included by <tr1/tuple>, to not compile when RTTI is -// disabled. _TR1_FUNCTIONAL is the header guard for -// <tr1/functional>. Hence the following #define is a hack to prevent -// <tr1/functional> from being included. -# define _TR1_FUNCTIONAL 1 -# include <tr1/tuple> -# undef _TR1_FUNCTIONAL // Allows the user to #include - // <tr1/functional> if they choose to. -# else -# include <tr1/tuple> // NOLINT -# endif // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302 - -// VS 2010 now has tr1 support. -# elif _MSC_VER >= 1600 -# include <tuple> // IWYU pragma: export // NOLINT - -# else // GTEST_USE_OWN_TR1_TUPLE -# include <tr1/tuple> // IWYU pragma: export // NOLINT -# endif // GTEST_USE_OWN_TR1_TUPLE - -#endif // GTEST_HAS_TR1_TUPLE - // Determines whether clone(2) is supported. // Usually it will only be available on Linux, excluding // Linux on the Itanium architecture. @@ -801,24 +582,21 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; #ifndef GTEST_HAS_STREAM_REDIRECTION // By default, we assume that stream redirection is supported on all // platforms except known mobile ones. -# if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || \ - GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT +# if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT # define GTEST_HAS_STREAM_REDIRECTION 0 # else # define GTEST_HAS_STREAM_REDIRECTION 1 -# endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN +# endif // !GTEST_OS_WINDOWS_MOBILE #endif // GTEST_HAS_STREAM_REDIRECTION // Determines whether to support death tests. -// Google Test does not support death tests for VC 7.1 and earlier as -// abort() in a VC 7.1 application compiled as GUI in debug config // pops up a dialog window that cannot be suppressed programmatically. -#if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ - (GTEST_OS_MAC && !GTEST_OS_IOS) || \ - (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \ - GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \ - GTEST_OS_OPENBSD || GTEST_OS_QNX || GTEST_OS_FREEBSD || \ - GTEST_OS_NETBSD || GTEST_OS_FUCHSIA) +#if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ + (GTEST_OS_MAC && !GTEST_OS_IOS) || \ + (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER) || GTEST_OS_WINDOWS_MINGW || \ + GTEST_OS_AIX || GTEST_OS_HPUX || GTEST_OS_OPENBSD || GTEST_OS_QNX || \ + GTEST_OS_FREEBSD || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA || \ + GTEST_OS_DRAGONFLY || GTEST_OS_GNU_KFREEBSD || GTEST_OS_HAIKU) # define GTEST_HAS_DEATH_TEST 1 #endif @@ -826,26 +604,19 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // Typed tests need <typeinfo> and variadic macros, which GCC, VC++ 8.0, // Sun Pro CC, IBM Visual Age, and HP aCC support. -#if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \ +#if defined(__GNUC__) || defined(_MSC_VER) || defined(__SUNPRO_CC) || \ defined(__IBMCPP__) || defined(__HP_aCC) # define GTEST_HAS_TYPED_TEST 1 # define GTEST_HAS_TYPED_TEST_P 1 #endif -// Determines whether to support Combine(). This only makes sense when -// value-parameterized tests are enabled. The implementation doesn't -// work on Sun Studio since it doesn't understand templated conversion -// operators. -#if (GTEST_HAS_TR1_TUPLE || GTEST_HAS_STD_TUPLE_) && !defined(__SUNPRO_CC) -# define GTEST_HAS_COMBINE 1 -#endif - // Determines whether the system compiler uses UTF-16 for encoding wide strings. #define GTEST_WIDE_STRING_USES_UTF16_ \ - (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX) + (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_AIX || GTEST_OS_OS2) // Determines whether test results can be streamed to a socket. -#if GTEST_OS_LINUX +#if GTEST_OS_LINUX || GTEST_OS_GNU_KFREEBSD || GTEST_OS_DRAGONFLY || \ + GTEST_OS_FREEBSD || GTEST_OS_NETBSD || GTEST_OS_OPENBSD # define GTEST_CAN_STREAM_RESULTS_ 1 #endif @@ -887,12 +658,6 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; # define GTEST_ATTRIBUTE_UNUSED_ #endif -#if GTEST_LANG_CXX11 -# define GTEST_CXX11_EQUALS_DELETE_ = delete -#else // GTEST_LANG_CXX11 -# define GTEST_CXX11_EQUALS_DELETE_ -#endif // GTEST_LANG_CXX11 - // Use this annotation before a function that takes a printf format string. #if (defined(__GNUC__) || defined(__clang__)) && !defined(COMPILER_ICC) # if defined(__MINGW_PRINTF_FORMAT) @@ -914,12 +679,12 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // A macro to disallow operator= // This should be used in the private: declarations for a class. #define GTEST_DISALLOW_ASSIGN_(type) \ - void operator=(type const &) GTEST_CXX11_EQUALS_DELETE_ + void operator=(type const &) = delete // A macro to disallow copy constructor and operator= // This should be used in the private: declarations for a class. #define GTEST_DISALLOW_COPY_AND_ASSIGN_(type) \ - type(type const &) GTEST_CXX11_EQUALS_DELETE_; \ + type(type const &) = delete; \ GTEST_DISALLOW_ASSIGN_(type) // Tell the compiler to warn about unused return values for functions declared @@ -927,11 +692,11 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // following the argument list: // // Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_; -#if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC) +#if defined(__GNUC__) && !defined(COMPILER_ICC) # define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result)) #else # define GTEST_MUST_USE_RESULT_ -#endif // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC +#endif // __GNUC__ && !COMPILER_ICC // MS C++ compiler emits warning when a conditional expression is compile time // constant. In some contexts this warning is false positive and needs to be @@ -960,13 +725,17 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; # define GTEST_HAS_SEH 0 # endif -#define GTEST_IS_THREADSAFE \ - (GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ \ - || (GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT) \ - || GTEST_HAS_PTHREAD) - #endif // GTEST_HAS_SEH +#ifndef GTEST_IS_THREADSAFE + +#define GTEST_IS_THREADSAFE \ + (GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ || \ + (GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT) || \ + GTEST_HAS_PTHREAD) + +#endif // GTEST_IS_THREADSAFE + // GTEST_API_ qualifies all symbols that must be exported. The definitions below // are guarded by #ifndef to give embedders a chance to define GTEST_API_ in // gtest/internal/custom/gtest-port.h @@ -1033,6 +802,18 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; # define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ #endif // __clang__ +// A function level attribute to disable HWAddressSanitizer instrumentation. +#if defined(__clang__) +# if __has_feature(hwaddress_sanitizer) +# define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ \ + __attribute__((no_sanitize("hwaddress"))) +# else +# define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ +# endif // __has_feature(hwaddress_sanitizer) +#else +# define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ +#endif // __clang__ + // A function level attribute to disable ThreadSanitizer instrumentation. #if defined(__clang__) # if __has_feature(thread_sanitizer) @@ -1049,16 +830,13 @@ namespace testing { class Message; -#if defined(GTEST_TUPLE_NAMESPACE_) -// Import tuple and friends into the ::testing namespace. -// It is part of our interface, having them in ::testing allows us to change -// their types as needed. -using GTEST_TUPLE_NAMESPACE_::get; -using GTEST_TUPLE_NAMESPACE_::make_tuple; -using GTEST_TUPLE_NAMESPACE_::tuple; -using GTEST_TUPLE_NAMESPACE_::tuple_size; -using GTEST_TUPLE_NAMESPACE_::tuple_element; -#endif // defined(GTEST_TUPLE_NAMESPACE_) +// Legacy imports for backwards compatibility. +// New code should use std:: names directly. +using std::get; +using std::make_tuple; +using std::tuple; +using std::tuple_element; +using std::tuple_size; namespace internal { @@ -1067,162 +845,28 @@ namespace internal { // Secret object, which is what we want. class Secret; -// The GTEST_COMPILE_ASSERT_ macro can be used to verify that a compile time -// expression is true. For example, you could use it to verify the -// size of a static array: +// The GTEST_COMPILE_ASSERT_ is a legacy macro used to verify that a compile +// time expression is true (in new code, use static_assert instead). For +// example, you could use it to verify the size of a static array: // // GTEST_COMPILE_ASSERT_(GTEST_ARRAY_SIZE_(names) == NUM_NAMES, // names_incorrect_size); // -// or to make sure a struct is smaller than a certain size: -// -// GTEST_COMPILE_ASSERT_(sizeof(foo) < 128, foo_too_large); -// -// The second argument to the macro is the name of the variable. If -// the expression is false, most compilers will issue a warning/error -// containing the name of the variable. - -#if GTEST_LANG_CXX11 -# define GTEST_COMPILE_ASSERT_(expr, msg) static_assert(expr, #msg) -#else // !GTEST_LANG_CXX11 -template <bool> - struct CompileAssert { -}; - -# define GTEST_COMPILE_ASSERT_(expr, msg) \ - typedef ::testing::internal::CompileAssert<(static_cast<bool>(expr))> \ - msg[static_cast<bool>(expr) ? 1 : -1] GTEST_ATTRIBUTE_UNUSED_ -#endif // !GTEST_LANG_CXX11 - -// Implementation details of GTEST_COMPILE_ASSERT_: -// -// (In C++11, we simply use static_assert instead of the following) -// -// - GTEST_COMPILE_ASSERT_ works by defining an array type that has -1 -// elements (and thus is invalid) when the expression is false. -// -// - The simpler definition -// -// #define GTEST_COMPILE_ASSERT_(expr, msg) typedef char msg[(expr) ? 1 : -1] -// -// does not work, as gcc supports variable-length arrays whose sizes -// are determined at run-time (this is gcc's extension and not part -// of the C++ standard). As a result, gcc fails to reject the -// following code with the simple definition: -// -// int foo; -// GTEST_COMPILE_ASSERT_(foo, msg); // not supposed to compile as foo is -// // not a compile-time constant. -// -// - By using the type CompileAssert<(bool(expr))>, we ensures that -// expr is a compile-time constant. (Template arguments must be -// determined at compile-time.) -// -// - The outter parentheses in CompileAssert<(bool(expr))> are necessary -// to work around a bug in gcc 3.4.4 and 4.0.1. If we had written -// -// CompileAssert<bool(expr)> -// -// instead, these compilers will refuse to compile -// -// GTEST_COMPILE_ASSERT_(5 > 0, some_message); -// -// (They seem to think the ">" in "5 > 0" marks the end of the -// template argument list.) -// -// - The array size is (bool(expr) ? 1 : -1), instead of simply -// -// ((expr) ? 1 : -1). -// -// This is to avoid running into a bug in MS VC 7.1, which -// causes ((0.0) ? 1 : -1) to incorrectly evaluate to 1. - -// StaticAssertTypeEqHelper is used by StaticAssertTypeEq defined in gtest.h. -// -// This template is declared, but intentionally undefined. -template <typename T1, typename T2> -struct StaticAssertTypeEqHelper; - -template <typename T> -struct StaticAssertTypeEqHelper<T, T> { - enum { value = true }; -}; - -// Same as std::is_same<>. -template <typename T, typename U> -struct IsSame { - enum { value = false }; -}; -template <typename T> -struct IsSame<T, T> { - enum { value = true }; -}; +// The second argument to the macro must be a valid C++ identifier. If the +// expression is false, compiler will issue an error containing this identifier. +#define GTEST_COMPILE_ASSERT_(expr, msg) static_assert(expr, #msg) // Evaluates to the number of elements in 'array'. #define GTEST_ARRAY_SIZE_(array) (sizeof(array) / sizeof(array[0])) -#if GTEST_HAS_GLOBAL_STRING -typedef ::string string; -#else -typedef ::std::string string; -#endif // GTEST_HAS_GLOBAL_STRING - -#if GTEST_HAS_GLOBAL_WSTRING -typedef ::wstring wstring; -#elif GTEST_HAS_STD_WSTRING -typedef ::std::wstring wstring; -#endif // GTEST_HAS_GLOBAL_WSTRING - // A helper for suppressing warnings on constant condition. It just // returns 'condition'. GTEST_API_ bool IsTrue(bool condition); -// Defines scoped_ptr. - -// This implementation of scoped_ptr is PARTIAL - it only contains -// enough stuff to satisfy Google Test's need. -template <typename T> -class scoped_ptr { - public: - typedef T element_type; - - explicit scoped_ptr(T* p = NULL) : ptr_(p) {} - ~scoped_ptr() { reset(); } - - T& operator*() const { return *ptr_; } - T* operator->() const { return ptr_; } - T* get() const { return ptr_; } - - T* release() { - T* const ptr = ptr_; - ptr_ = NULL; - return ptr; - } - - void reset(T* p = NULL) { - if (p != ptr_) { - if (IsTrue(sizeof(T) > 0)) { // Makes sure T is a complete type. - delete ptr_; - } - ptr_ = p; - } - } - - friend void swap(scoped_ptr& a, scoped_ptr& b) { - using std::swap; - swap(a.ptr_, b.ptr_); - } - - private: - T* ptr_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(scoped_ptr); -}; - // Defines RE. #if GTEST_USES_PCRE -using ::RE; +// if used, PCRE is injected by custom/gtest-port.h #elif GTEST_USES_POSIX_RE || GTEST_USES_SIMPLE_RE // A simple C++ wrapper for <regex.h>. It uses the POSIX Extended @@ -1236,25 +880,16 @@ class GTEST_API_ RE { // Constructs an RE from a string. RE(const ::std::string& regex) { Init(regex.c_str()); } // NOLINT -# if GTEST_HAS_GLOBAL_STRING - - RE(const ::string& regex) { Init(regex.c_str()); } // NOLINT - -# endif // GTEST_HAS_GLOBAL_STRING - RE(const char* regex) { Init(regex); } // NOLINT ~RE(); // Returns the string representation of the regex. const char* pattern() const { return pattern_; } - // FullMatch(str, re) returns true iff regular expression re matches - // the entire str. - // PartialMatch(str, re) returns true iff regular expression re + // FullMatch(str, re) returns true if and only if regular expression re + // matches the entire str. + // PartialMatch(str, re) returns true if and only if regular expression re // matches a substring of str (including str itself). - // - // TODO(wan@google.com): make FullMatch() and PartialMatch() work - // when str contains NUL characters. static bool FullMatch(const ::std::string& str, const RE& re) { return FullMatch(str.c_str(), re); } @@ -1262,26 +897,11 @@ class GTEST_API_ RE { return PartialMatch(str.c_str(), re); } -# if GTEST_HAS_GLOBAL_STRING - - static bool FullMatch(const ::string& str, const RE& re) { - return FullMatch(str.c_str(), re); - } - static bool PartialMatch(const ::string& str, const RE& re) { - return PartialMatch(str.c_str(), re); - } - -# endif // GTEST_HAS_GLOBAL_STRING - static bool FullMatch(const char* str, const RE& re); static bool PartialMatch(const char* str, const RE& re); private: void Init(const char* regex); - - // We use a const char* instead of an std::string, as Google Test used to be - // used where std::string is not available. TODO(wan@google.com): change to - // std::string. const char* pattern_; bool is_valid_; @@ -1349,7 +969,7 @@ class GTEST_API_ GTestLog { __FILE__, __LINE__).GetStream() inline void LogToStderr() {} -inline void FlushInfoLog() { fflush(NULL); } +inline void FlushInfoLog() { fflush(nullptr); } #endif // !defined(GTEST_LOG_) @@ -1386,19 +1006,6 @@ inline void FlushInfoLog() { fflush(NULL); } GTEST_LOG_(FATAL) << #posix_call << "failed with error " \ << gtest_error -// Adds reference to a type if it is not a reference type, -// otherwise leaves it unchanged. This is the same as -// tr1::add_reference, which is not widely available yet. -template <typename T> -struct AddReference { typedef T& type; }; // NOLINT -template <typename T> -struct AddReference<T&> { typedef T& type; }; // NOLINT - -// A handy wrapper around AddReference that works when the argument T -// depends on template parameters. -#define GTEST_ADD_REFERENCE_(T) \ - typename ::testing::internal::AddReference<T>::type - // Transforms "T" into "const T&" according to standard reference collapsing // rules (this is only needed as a backport for C++98 compilers that do not // support reference collapsing). Specifically, it transforms: @@ -1419,28 +1026,6 @@ struct ConstRef<T&> { typedef T& type; }; #define GTEST_REFERENCE_TO_CONST_(T) \ typename ::testing::internal::ConstRef<T>::type -#if GTEST_HAS_STD_MOVE_ -using std::forward; -using std::move; - -template <typename T> -struct RvalueRef { - typedef T&& type; -}; -#else // GTEST_HAS_STD_MOVE_ -template <typename T> -const T& move(const T& t) { - return t; -} -template <typename T> -GTEST_ADD_REFERENCE_(T) forward(GTEST_ADD_REFERENCE_(T) t) { return t; } - -template <typename T> -struct RvalueRef { - typedef const T& type; -}; -#endif // GTEST_HAS_STD_MOVE_ - // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Use ImplicitCast_ as a safe version of static_cast for upcasting in @@ -1494,13 +1079,13 @@ inline To DownCast_(From* f) { // so we only accept pointers GTEST_INTENTIONAL_CONST_COND_PUSH_() if (false) { GTEST_INTENTIONAL_CONST_COND_POP_() - const To to = NULL; - ::testing::internal::ImplicitCast_<From*>(to); + const To to = nullptr; + ::testing::internal::ImplicitCast_<From*>(to); } #if GTEST_HAS_RTTI // RTTI: debug mode only! - GTEST_CHECK_(f == NULL || dynamic_cast<To>(f) != NULL); + GTEST_CHECK_(f == nullptr || dynamic_cast<To>(f) != nullptr); #endif return static_cast<To>(f); } @@ -1554,9 +1139,6 @@ std::vector<std::string> GetInjectableArgvs(); // Deprecated: pass the args vector by value instead. void SetInjectableArgvs(const std::vector<std::string>* new_argvs); void SetInjectableArgvs(const std::vector<std::string>& new_argvs); -#if GTEST_HAS_GLOBAL_STRING -void SetInjectableArgvs(const std::vector< ::string>& new_argvs); -#endif // GTEST_HAS_GLOBAL_STRING void ClearInjectableArgvs(); #endif // GTEST_HAS_DEATH_TEST @@ -1572,7 +1154,7 @@ inline void SleepMilliseconds(int n) { 0, // 0 seconds. n * 1000L * 1000L, // And n ms. }; - nanosleep(&time, NULL); + nanosleep(&time, nullptr); } # endif // GTEST_HAS_PTHREAD @@ -1590,7 +1172,7 @@ inline void SleepMilliseconds(int n) { class Notification { public: Notification() : notified_(false) { - GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, nullptr)); } ~Notification() { pthread_mutex_destroy(&mutex_); @@ -1648,7 +1230,8 @@ class GTEST_API_ AutoHandle { void Reset(Handle handle); private: - // Returns true iff the handle is a valid handle object that can be closed. + // Returns true if and only if the handle is a valid handle object that can be + // closed. bool IsCloseable() const; Handle handle_; @@ -1699,7 +1282,7 @@ class ThreadWithParamBase { // pass into pthread_create(). extern "C" inline void* ThreadFuncWithCLinkage(void* thread) { static_cast<ThreadWithParamBase*>(thread)->Run(); - return NULL; + return nullptr; } // Helper class for testing Google Test's multi-threading constructs. @@ -1728,20 +1311,19 @@ class ThreadWithParam : public ThreadWithParamBase { // The thread can be created only after all fields except thread_ // have been initialized. GTEST_CHECK_POSIX_SUCCESS_( - pthread_create(&thread_, 0, &ThreadFuncWithCLinkage, base)); + pthread_create(&thread_, nullptr, &ThreadFuncWithCLinkage, base)); } - ~ThreadWithParam() { Join(); } + ~ThreadWithParam() override { Join(); } void Join() { if (!finished_) { - GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, 0)); + GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, nullptr)); finished_ = true; } } - virtual void Run() { - if (thread_can_start_ != NULL) - thread_can_start_->WaitForNotification(); + void Run() override { + if (thread_can_start_ != nullptr) thread_can_start_->WaitForNotification(); func_(param_); } @@ -1751,7 +1333,8 @@ class ThreadWithParam : public ThreadWithParamBase { // When non-NULL, used to block execution until the controller thread // notifies. Notification* const thread_can_start_; - bool finished_; // true iff we know that the thread function has finished. + bool finished_; // true if and only if we know that the thread function has + // finished. pthread_t thread_; // The native thread object. GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam); @@ -1807,7 +1390,7 @@ class GTEST_API_ Mutex { // Initializes owner_thread_id_ and critical_section_ in static mutexes. void ThreadSafeLazyInit(); - // Per http://blogs.msdn.com/b/oldnewthing/archive/2004/02/23/78395.aspx, + // Per https://blogs.msdn.microsoft.com/oldnewthing/20040223-00/?p=40503, // we assume that 0 is an invalid value for thread IDs. unsigned int owner_thread_id_; @@ -2035,7 +1618,7 @@ class ThreadLocal : public ThreadLocalBase { GTEST_DISALLOW_COPY_AND_ASSIGN_(InstanceValueHolderFactory); }; - scoped_ptr<ValueHolderFactory> default_factory_; + std::unique_ptr<ValueHolderFactory> default_factory_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal); }; @@ -2096,15 +1679,15 @@ class MutexBase { // particular, the owner_ field (a pthread_t) is not explicitly initialized. // This allows initialization to work whether pthread_t is a scalar or struct. // The flag -Wmissing-field-initializers must not be specified for this to work. -# define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ - ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, false } +#define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ + ::testing::internal::MutexBase mutex = {PTHREAD_MUTEX_INITIALIZER, false, 0} // The Mutex class can only be used for mutexes created at runtime. It // shares its API with MutexBase otherwise. class Mutex : public MutexBase { public: Mutex() { - GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL)); + GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, nullptr)); has_owner_ = false; } ~Mutex() { @@ -2202,7 +1785,7 @@ class GTEST_API_ ThreadLocal { T* GetOrCreateValue() const { ThreadLocalValueHolderBase* const holder = static_cast<ThreadLocalValueHolderBase*>(pthread_getspecific(key_)); - if (holder != NULL) { + if (holder != nullptr) { return CheckedDowncastToActualType<ValueHolder>(holder)->pointer(); } @@ -2246,7 +1829,7 @@ class GTEST_API_ ThreadLocal { // A key pthreads uses for looking up per-thread values. const pthread_key_t key_; - scoped_ptr<ValueHolderFactory> default_factory_; + std::unique_ptr<ValueHolderFactory> default_factory_; GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal); }; @@ -2304,67 +1887,8 @@ class GTEST_API_ ThreadLocal { // we cannot detect it. GTEST_API_ size_t GetThreadCount(); -// Passing non-POD classes through ellipsis (...) crashes the ARM -// compiler and generates a warning in Sun Studio before 12u4. The Nokia Symbian -// and the IBM XL C/C++ compiler try to instantiate a copy constructor -// for objects passed through ellipsis (...), failing for uncopyable -// objects. We define this to ensure that only POD is passed through -// ellipsis on these systems. -#if defined(__SYMBIAN32__) || defined(__IBMCPP__) || \ - (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x5130) -// We lose support for NULL detection where the compiler doesn't like -// passing non-POD classes through ellipsis (...). -# define GTEST_ELLIPSIS_NEEDS_POD_ 1 -#else -# define GTEST_CAN_COMPARE_NULL 1 -#endif - -// The Nokia Symbian and IBM XL C/C++ compilers cannot decide between -// const T& and const T* in a function template. These compilers -// _can_ decide between class template specializations for T and T*, -// so a tr1::type_traits-like is_pointer works. -#if defined(__SYMBIAN32__) || defined(__IBMCPP__) -# define GTEST_NEEDS_IS_POINTER_ 1 -#endif - -template <bool bool_value> -struct bool_constant { - typedef bool_constant<bool_value> type; - static const bool value = bool_value; -}; -template <bool bool_value> const bool bool_constant<bool_value>::value; - -typedef bool_constant<false> false_type; -typedef bool_constant<true> true_type; - -template <typename T, typename U> -struct is_same : public false_type {}; - -template <typename T> -struct is_same<T, T> : public true_type {}; - - -template <typename T> -struct is_pointer : public false_type {}; - -template <typename T> -struct is_pointer<T*> : public true_type {}; - -template <typename Iterator> -struct IteratorTraits { - typedef typename Iterator::value_type value_type; -}; - - -template <typename T> -struct IteratorTraits<T*> { - typedef T value_type; -}; - -template <typename T> -struct IteratorTraits<const T*> { - typedef T value_type; -}; +template <bool B> +using bool_constant = std::integral_constant<bool, B>; #if GTEST_OS_WINDOWS # define GTEST_PATH_SEP_ "\\" @@ -2487,7 +2011,7 @@ inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } // Functions deprecated by MSVC 8.0. -GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996 /* deprecated function */) +GTEST_DISABLE_MSC_DEPRECATED_PUSH_() inline const char* StrNCpy(char* dest, const char* src, size_t n) { return strncpy(dest, src, n); @@ -2524,26 +2048,26 @@ inline const char* GetEnv(const char* name) { #if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT // We are on Windows CE, which has no environment variables. static_cast<void>(name); // To prevent 'unused argument' warning. - return NULL; + return nullptr; #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) // Environment variables which we programmatically clear will be set to the // empty string rather than unset (NULL). Handle that case. const char* const env = getenv(name); - return (env != NULL && env[0] != '\0') ? env : NULL; + return (env != nullptr && env[0] != '\0') ? env : nullptr; #else return getenv(name); #endif } -GTEST_DISABLE_MSC_WARNINGS_POP_() +GTEST_DISABLE_MSC_DEPRECATED_POP_() #if GTEST_OS_WINDOWS_MOBILE // Windows CE has no C library. The abort() function is used in // several places in Google Test. This implementation provides a reasonable // imitation of standard behaviour. -void Abort(); +[[noreturn]] void Abort(); #else -inline void Abort() { abort(); } +[[noreturn]] inline void Abort() { abort(); } #endif // GTEST_OS_WINDOWS_MOBILE } // namespace posix @@ -2553,13 +2077,12 @@ inline void Abort() { abort(); } // MSVC-based platforms. We map the GTEST_SNPRINTF_ macro to the appropriate // function in order to achieve that. We use macro definition here because // snprintf is a variadic function. -#if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE +#if _MSC_VER && !GTEST_OS_WINDOWS_MOBILE // MSVC 2005 and above support variadic macros. # define GTEST_SNPRINTF_(buffer, size, format, ...) \ _snprintf_s(buffer, size, size, format, __VA_ARGS__) #elif defined(_MSC_VER) -// Windows CE does not define _snprintf_s and MSVC prior to 2005 doesn't -// complain about _snprintf. +// Windows CE does not define _snprintf_s # define GTEST_SNPRINTF_ _snprintf #else # define GTEST_SNPRINTF_ snprintf @@ -2673,9 +2196,6 @@ typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. // Parses 'str' for a 32-bit signed integer. If successful, writes the result // to *value and returns true; otherwise leaves *value unchanged and returns // false. -// TODO(chandlerc): Find a better way to refactor flag and environment parsing -// out of both gtest-port.cc and gtest.cc to avoid exporting this utility -// function. bool ParseInt32(const Message& src_text, const char* str, Int32* value); // Parses a bool/Int32/string from the environment variable @@ -2688,4 +2208,24 @@ const char* StringFromGTestEnv(const char* flag, const char* default_val); } // namespace internal } // namespace testing +#if !defined(GTEST_INTERNAL_DEPRECATED) + +// Internal Macro to mark an API deprecated, for googletest usage only +// Usage: class GTEST_INTERNAL_DEPRECATED(message) MyClass or +// GTEST_INTERNAL_DEPRECATED(message) <return_type> myFunction(); Every usage of +// a deprecated entity will trigger a warning when compiled with +// `-Wdeprecated-declarations` option (clang, gcc, any __GNUC__ compiler). +// For msvc /W3 option will need to be used +// Note that for 'other' compilers this macro evaluates to nothing to prevent +// compilations errors. +#if defined(_MSC_VER) +#define GTEST_INTERNAL_DEPRECATED(message) __declspec(deprecated(message)) +#elif defined(__GNUC__) +#define GTEST_INTERNAL_DEPRECATED(message) __attribute__((deprecated(message))) +#else +#define GTEST_INTERNAL_DEPRECATED(message) +#endif + +#endif // !defined(GTEST_INTERNAL_DEPRECATED) + #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ diff --git a/test/gtest/include/gtest/internal/gtest-string.h b/test/gtest/include/gtest/internal/gtest-string.h index 71eb840c1..82aaa63bf 100644 --- a/test/gtest/include/gtest/internal/gtest-string.h +++ b/test/gtest/include/gtest/internal/gtest-string.h @@ -27,17 +27,17 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -// // The Google C++ Testing and Mocking Framework (Google Test) // // This header file declares the String class and functions used internally by // Google Test. They are subject to change without notice. They should not used // by code external to Google Test. // -// This header file is #included by -// gtest/internal/gtest-internal.h. +// This header file is #included by gtest-internal.h. // It should not be #included by other files. +// GOOGLETEST_CM0001 DO NOT DELETE + #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ @@ -94,7 +94,8 @@ class GTEST_API_ String { static const char* Utf16ToAnsi(LPCWSTR utf16_str); #endif - // Compares two C strings. Returns true iff they have the same content. + // Compares two C strings. Returns true if and only if they have the same + // content. // // Unlike strcmp(), this function can handle NULL argument(s). A // NULL C string is considered different to any non-NULL C string, @@ -107,16 +108,16 @@ class GTEST_API_ String { // returned. static std::string ShowWideCString(const wchar_t* wide_c_str); - // Compares two wide C strings. Returns true iff they have the same - // content. + // Compares two wide C strings. Returns true if and only if they have the + // same content. // // Unlike wcscmp(), this function can handle NULL argument(s). A // NULL C string is considered different to any non-NULL C string, // including the empty string. static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs); - // Compares two C strings, ignoring case. Returns true iff they - // have the same content. + // Compares two C strings, ignoring case. Returns true if and only if + // they have the same content. // // Unlike strcasecmp(), this function can handle NULL argument(s). // A NULL C string is considered different to any non-NULL C string, @@ -124,8 +125,8 @@ class GTEST_API_ String { static bool CaseInsensitiveCStringEquals(const char* lhs, const char* rhs); - // Compares two wide C strings, ignoring case. Returns true iff they - // have the same content. + // Compares two wide C strings, ignoring case. Returns true if and only if + // they have the same content. // // Unlike wcscasecmp(), this function can handle NULL argument(s). // A NULL C string is considered different to any non-NULL wide C string, @@ -139,8 +140,8 @@ class GTEST_API_ String { static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs, const wchar_t* rhs); - // Returns true iff the given string ends with the given suffix, ignoring - // case. Any string is considered to end with an empty suffix. + // Returns true if and only if the given string ends with the given suffix, + // ignoring case. Any string is considered to end with an empty suffix. static bool EndsWithCaseInsensitive( const std::string& str, const std::string& suffix); @@ -150,6 +151,9 @@ class GTEST_API_ String { // Formats an int value as "%X". static std::string FormatHexInt(int value); + // Formats an int value as "%X". + static std::string FormatHexUInt32(UInt32 value); + // Formats a byte as "%02X". static std::string FormatByte(unsigned char value); diff --git a/test/gtest/include/gtest/internal/gtest-type-util.h b/test/gtest/include/gtest/internal/gtest-type-util.h index 282b81fb0..3d7542d1f 100644 --- a/test/gtest/include/gtest/internal/gtest-type-util.h +++ b/test/gtest/include/gtest/internal/gtest-type-util.h @@ -30,17 +30,17 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) // Type utilities needed for implementing typed and type-parameterized // tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // // Currently we support at most 50 types in a list, and at most 50 -// type-parameterized tests in one type-parameterized test case. +// type-parameterized tests in one type-parameterized test suite. // Please contact googletestframework@googlegroups.com if you need // more. +// GOOGLETEST_CM0001 DO NOT DELETE + #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ @@ -88,7 +88,7 @@ std::string GetTypeName() { # if GTEST_HAS_CXXABI_H_ using abi::__cxa_demangle; # endif // GTEST_HAS_CXXABI_H_ - char* const readable_name = __cxa_demangle(name, 0, 0, &status); + char* const readable_name = __cxa_demangle(name, nullptr, nullptr, &status); const std::string name_str(status == 0 ? readable_name : name); free(readable_name); return CanonicalizeForStdLibVersioning(name_str); @@ -105,18 +105,6 @@ std::string GetTypeName() { #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P -// AssertyTypeEq<T1, T2>::type is defined iff T1 and T2 are the same -// type. This can be used as a compile-time assertion to ensure that -// two types are equal. - -template <typename T1, typename T2> -struct AssertTypeEq; - -template <typename T> -struct AssertTypeEq<T, T> { - typedef bool type; -}; - // A unique type used as the default value for the arguments of class // template Types. This allows us to simulate variadic templates // (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't @@ -3311,8 +3299,8 @@ struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, }; // The TypeList template makes it possible to use either a single type -// or a Types<...> list in TYPED_TEST_CASE() and -// INSTANTIATE_TYPED_TEST_CASE_P(). +// or a Types<...> list in TYPED_TEST_SUITE() and +// INSTANTIATE_TYPED_TEST_SUITE_P(). template <typename T> struct TypeList { diff --git a/test/gtest/include/gtest/internal/gtest-type-util.h.pump b/test/gtest/include/gtest/internal/gtest-type-util.h.pump index eaa888011..5e31b7b32 100644 --- a/test/gtest/include/gtest/internal/gtest-type-util.h.pump +++ b/test/gtest/include/gtest/internal/gtest-type-util.h.pump @@ -28,17 +28,18 @@ $var n = 50 $$ Maximum length of type lists we want to support. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) + // Type utilities needed for implementing typed and type-parameterized // tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND! // // Currently we support at most $n types in a list, and at most $n -// type-parameterized tests in one type-parameterized test case. +// type-parameterized tests in one type-parameterized test suite. // Please contact googletestframework@googlegroups.com if you need // more. +// GOOGLETEST_CM0001 DO NOT DELETE + #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ @@ -86,7 +87,7 @@ std::string GetTypeName() { # if GTEST_HAS_CXXABI_H_ using abi::__cxa_demangle; # endif // GTEST_HAS_CXXABI_H_ - char* const readable_name = __cxa_demangle(name, 0, 0, &status); + char* const readable_name = __cxa_demangle(name, nullptr, nullptr, &status); const std::string name_str(status == 0 ? readable_name : name); free(readable_name); return CanonicalizeForStdLibVersioning(name_str); @@ -103,18 +104,6 @@ std::string GetTypeName() { #if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P -// AssertyTypeEq<T1, T2>::type is defined iff T1 and T2 are the same -// type. This can be used as a compile-time assertion to ensure that -// two types are equal. - -template <typename T1, typename T2> -struct AssertTypeEq; - -template <typename T> -struct AssertTypeEq<T, T> { - typedef bool type; -}; - // A unique type used as the default value for the arguments of class // template Types. This allows us to simulate variadic templates // (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't @@ -290,8 +279,8 @@ struct Templates<$for j, [[T$j]]$for k[[, NoneT]]> { ]] // The TypeList template makes it possible to use either a single type -// or a Types<...> list in TYPED_TEST_CASE() and -// INSTANTIATE_TYPED_TEST_CASE_P(). +// or a Types<...> list in TYPED_TEST_SUITE() and +// INSTANTIATE_TYPED_TEST_SUITE_P(). template <typename T> struct TypeList { diff --git a/test/gtest/src/gtest-all.cc b/test/gtest/src/gtest-all.cc index 5872a2e62..ad292905c 100644 --- a/test/gtest/src/gtest-all.cc +++ b/test/gtest/src/gtest-all.cc @@ -26,8 +26,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: mheule@google.com (Markus Heule) + // // Google C++ Testing and Mocking Framework (Google Test) // @@ -42,6 +41,7 @@ #include "src/gtest.cc" #include "src/gtest-death-test.cc" #include "src/gtest-filepath.cc" +#include "src/gtest-matchers.cc" #include "src/gtest-port.cc" #include "src/gtest-printers.cc" #include "src/gtest-test-part.cc" diff --git a/test/gtest/src/gtest-death-test.cc b/test/gtest/src/gtest-death-test.cc index e5b4e09e6..da09a1cfc 100644 --- a/test/gtest/src/gtest-death-test.cc +++ b/test/gtest/src/gtest-death-test.cc @@ -26,12 +26,14 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan), vladl@google.com (Vlad Losev) + // // This file implements death tests. #include "gtest/gtest-death-test.h" + +#include <utility> + #include "gtest/internal/gtest-port.h" #include "gtest/internal/custom/gtest.h" @@ -63,10 +65,17 @@ # endif // GTEST_OS_QNX # if GTEST_OS_FUCHSIA -# include <fdio/io.h> -# include <fdio/spawn.h> +# include <lib/fdio/fd.h> +# include <lib/fdio/io.h> +# include <lib/fdio/spawn.h> +# include <lib/zx/channel.h> +# include <lib/zx/port.h> +# include <lib/zx/process.h> +# include <lib/zx/socket.h> # include <zircon/processargs.h> # include <zircon/syscalls.h> +# include <zircon/syscalls/policy.h> +# include <zircon/syscalls/port.h> # endif // GTEST_OS_FUCHSIA #endif // GTEST_HAS_DEATH_TEST @@ -113,8 +122,8 @@ GTEST_DEFINE_string_( "Indicates the file, line number, temporal index of " "the single death test to run, and a file descriptor to " "which a success code may be sent, all separated by " - "the '|' characters. This flag is specified if and only if the current " - "process is a sub-process launched for running a thread-safe " + "the '|' characters. This flag is specified if and only if the " + "current process is a sub-process launched for running a thread-safe " "death test. FOR INTERNAL USE ONLY."); } // namespace internal @@ -232,10 +241,16 @@ static std::string DeathTestThreadWarning(size_t thread_count) { Message msg; msg << "Death tests use fork(), which is unsafe particularly" << " in a threaded context. For this test, " << GTEST_NAME_ << " "; - if (thread_count == 0) + if (thread_count == 0) { msg << "couldn't detect the number of threads."; - else + } else { msg << "detected " << thread_count << " threads."; + } + msg << " See " + "https://github.com/google/googletest/blob/master/googletest/docs/" + "advanced.md#death-tests-and-threads" + << " for more explanation and suggested solutions, especially if" + << " this is the last message you see before your test times out."; return msg.GetString(); } # endif // !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA @@ -260,8 +275,6 @@ static const int kFuchsiaReadPipeFd = 3; // statement, which is not allowed; THREW means that the test statement // returned control by throwing an exception. IN_PROGRESS means the test // has not yet concluded. -// TODO(vladl@google.com): Unify names and possibly values for -// AbortReason, DeathTestOutcome, and flag characters above. enum DeathTestOutcome { IN_PROGRESS, DIED, LIVED, RETURNED, THREW }; // Routine for aborting the program which is safe to call from an @@ -275,7 +288,7 @@ static void DeathTestAbort(const std::string& message) { // the heap for any additional non-minuscule memory requirements. const InternalRunDeathTestFlag* const flag = GetUnitTestImpl()->internal_run_death_test_flag(); - if (flag != NULL) { + if (flag != nullptr) { FILE* parent = posix::FDOpen(flag->write_fd(), "w"); fputc(kDeathTestInternalError, parent); fprintf(parent, "%s", message.c_str()); @@ -355,7 +368,7 @@ static void FailFromInternalError(int fd) { // for the current test. DeathTest::DeathTest() { TestInfo* const info = GetUnitTestImpl()->current_test_info(); - if (info == NULL) { + if (info == nullptr) { DeathTestAbort("Cannot run a death test outside of a TEST or " "TEST_F construct"); } @@ -363,10 +376,11 @@ DeathTest::DeathTest() { // Creates and returns a death test by dispatching to the current // death test factory. -bool DeathTest::Create(const char* statement, const RE* regex, - const char* file, int line, DeathTest** test) { +bool DeathTest::Create(const char* statement, + Matcher<const std::string&> matcher, const char* file, + int line, DeathTest** test) { return GetUnitTestImpl()->death_test_factory()->Create( - statement, regex, file, line, test); + statement, std::move(matcher), file, line, test); } const char* DeathTest::LastMessage() { @@ -382,9 +396,9 @@ std::string DeathTest::last_death_test_message_; // Provides cross platform implementation for some death functionality. class DeathTestImpl : public DeathTest { protected: - DeathTestImpl(const char* a_statement, const RE* a_regex) + DeathTestImpl(const char* a_statement, Matcher<const std::string&> matcher) : statement_(a_statement), - regex_(a_regex), + matcher_(std::move(matcher)), spawned_(false), status_(-1), outcome_(IN_PROGRESS), @@ -392,13 +406,12 @@ class DeathTestImpl : public DeathTest { write_fd_(-1) {} // read_fd_ is expected to be closed and cleared by a derived class. - ~DeathTestImpl() { GTEST_DEATH_TEST_CHECK_(read_fd_ == -1); } + ~DeathTestImpl() override { GTEST_DEATH_TEST_CHECK_(read_fd_ == -1); } - void Abort(AbortReason reason); - virtual bool Passed(bool status_ok); + void Abort(AbortReason reason) override; + bool Passed(bool status_ok) override; const char* statement() const { return statement_; } - const RE* regex() const { return regex_; } bool spawned() const { return spawned_; } void set_spawned(bool is_spawned) { spawned_ = is_spawned; } int status() const { return status_; } @@ -416,13 +429,15 @@ class DeathTestImpl : public DeathTest { // case of unexpected codes. void ReadAndInterpretStatusByte(); + // Returns stderr output from the child process. + virtual std::string GetErrorLogs(); + private: // The textual content of the code this object is testing. This class // doesn't own this string and should not attempt to delete it. const char* const statement_; - // The regular expression which test output must match. DeathTestImpl - // doesn't own this object and should not attempt to delete it. - const RE* const regex_; + // A matcher that's expected to match the stderr output by the child process. + Matcher<const std::string&> matcher_; // True if the death test child process has been successfully spawned. bool spawned_; // The exit status of the child process. @@ -484,6 +499,10 @@ void DeathTestImpl::ReadAndInterpretStatusByte() { set_read_fd(-1); } +std::string DeathTestImpl::GetErrorLogs() { + return GetCapturedStderr(); +} + // Signals that the death test code which should have exited, didn't. // Should be called only in a death test child process. // Writes a status byte to the child's status file descriptor, then @@ -537,22 +556,21 @@ static ::std::string FormatDeathTestOutput(const ::std::string& output) { // in the format specified by wait(2). On Windows, this is the // value supplied to the ExitProcess() API or a numeric code // of the exception that terminated the program. -// regex: A regular expression object to be applied to -// the test's captured standard error output; the death test -// fails if it does not match. +// matcher_: A matcher that's expected to match the stderr output by the child +// process. // // Argument: // status_ok: true if exit_status is acceptable in the context of // this particular death test, which fails if it is false // -// Returns true iff all of the above conditions are met. Otherwise, the -// first failing condition, in the order given above, is the one that is +// Returns true if and only if all of the above conditions are met. Otherwise, +// the first failing condition, in the order given above, is the one that is // reported. Also sets the last death test message string. bool DeathTestImpl::Passed(bool status_ok) { if (!spawned()) return false; - const std::string error_message = GetCapturedStderr(); + const std::string error_message = GetErrorLogs(); bool success = false; Message buffer; @@ -573,19 +591,15 @@ bool DeathTestImpl::Passed(bool status_ok) { break; case DIED: if (status_ok) { -# if GTEST_USES_PCRE - // PCRE regexes support embedded NULs. - // GTEST_USES_PCRE is defined only in google3 mode - const bool matched = RE::PartialMatch(error_message, *regex()); -# else - const bool matched = RE::PartialMatch(error_message.c_str(), *regex()); -# endif // GTEST_USES_PCRE - if (matched) { + if (matcher_.Matches(error_message)) { success = true; } else { + std::ostringstream stream; + matcher_.DescribeTo(&stream); buffer << " Result: died but not with expected error.\n" - << " Expected: " << regex()->pattern() << "\n" - << "Actual msg:\n" << FormatDeathTestOutput(error_message); + << " Expected: " << stream.str() << "\n" + << "Actual msg:\n" + << FormatDeathTestOutput(error_message); } } else { buffer << " Result: died but not with expected exit code:\n" @@ -634,11 +648,11 @@ bool DeathTestImpl::Passed(bool status_ok) { // class WindowsDeathTest : public DeathTestImpl { public: - WindowsDeathTest(const char* a_statement, - const RE* a_regex, - const char* file, - int line) - : DeathTestImpl(a_statement, a_regex), file_(file), line_(line) {} + WindowsDeathTest(const char* a_statement, Matcher<const std::string&> matcher, + const char* file, int line) + : DeathTestImpl(a_statement, std::move(matcher)), + file_(file), + line_(line) {} // All of these virtual functions are inherited from DeathTest. virtual int Wait(); @@ -715,7 +729,7 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() { const TestInfo* const info = impl->current_test_info(); const int death_test_index = info->result()->death_test_count(); - if (flag != NULL) { + if (flag != nullptr) { // ParseInternalRunDeathTestFlag() has performed all the necessary // processing. set_write_fd(flag->write_fd()); @@ -724,8 +738,8 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() { // WindowsDeathTest uses an anonymous pipe to communicate results of // a death test. - SECURITY_ATTRIBUTES handles_are_inheritable = { - sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; + SECURITY_ATTRIBUTES handles_are_inheritable = {sizeof(SECURITY_ATTRIBUTES), + nullptr, TRUE}; HANDLE read_handle, write_handle; GTEST_DEATH_TEST_CHECK_( ::CreatePipe(&read_handle, &write_handle, &handles_are_inheritable, @@ -736,13 +750,13 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() { write_handle_.Reset(write_handle); event_handle_.Reset(::CreateEvent( &handles_are_inheritable, - TRUE, // The event will automatically reset to non-signaled state. - FALSE, // The initial state is non-signalled. - NULL)); // The even is unnamed. - GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != NULL); - const std::string filter_flag = - std::string("--") + GTEST_FLAG_PREFIX_ + kFilterFlag + "=" + - info->test_case_name() + "." + info->name(); + TRUE, // The event will automatically reset to non-signaled state. + FALSE, // The initial state is non-signalled. + nullptr)); // The even is unnamed. + GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != nullptr); + const std::string filter_flag = std::string("--") + GTEST_FLAG_PREFIX_ + + kFilterFlag + "=" + info->test_suite_name() + + "." + info->name(); const std::string internal_flag = std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + "=" + file_ + "|" + StreamableToString(line_) + "|" + @@ -755,10 +769,9 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() { "|" + StreamableToString(reinterpret_cast<size_t>(event_handle_.Get())); char executable_path[_MAX_PATH + 1]; // NOLINT - GTEST_DEATH_TEST_CHECK_( - _MAX_PATH + 1 != ::GetModuleFileNameA(NULL, - executable_path, - _MAX_PATH)); + GTEST_DEATH_TEST_CHECK_(_MAX_PATH + 1 != ::GetModuleFileNameA(nullptr, + executable_path, + _MAX_PATH)); std::string command_line = std::string(::GetCommandLineA()) + " " + filter_flag + " \"" + @@ -779,17 +792,16 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() { startup_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE); PROCESS_INFORMATION process_info; - GTEST_DEATH_TEST_CHECK_(::CreateProcessA( - executable_path, - const_cast<char*>(command_line.c_str()), - NULL, // Retuned process handle is not inheritable. - NULL, // Retuned thread handle is not inheritable. - TRUE, // Child inherits all inheritable handles (for write_handle_). - 0x0, // Default creation flags. - NULL, // Inherit the parent's environment. - UnitTest::GetInstance()->original_working_dir(), - &startup_info, - &process_info) != FALSE); + GTEST_DEATH_TEST_CHECK_( + ::CreateProcessA( + executable_path, const_cast<char*>(command_line.c_str()), + nullptr, // Retuned process handle is not inheritable. + nullptr, // Retuned thread handle is not inheritable. + TRUE, // Child inherits all inheritable handles (for write_handle_). + 0x0, // Default creation flags. + nullptr, // Inherit the parent's environment. + UnitTest::GetInstance()->original_working_dir(), &startup_info, + &process_info) != FALSE); child_handle_.Reset(process_info.hProcess); ::CloseHandle(process_info.hThread); set_spawned(true); @@ -800,31 +812,34 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() { class FuchsiaDeathTest : public DeathTestImpl { public: - FuchsiaDeathTest(const char* a_statement, - const RE* a_regex, - const char* file, - int line) - : DeathTestImpl(a_statement, a_regex), file_(file), line_(line) {} + FuchsiaDeathTest(const char* a_statement, Matcher<const std::string&> matcher, + const char* file, int line) + : DeathTestImpl(a_statement, std::move(matcher)), + file_(file), + line_(line) {} // All of these virtual functions are inherited from DeathTest. - virtual int Wait(); - virtual TestRole AssumeRole(); + int Wait() override; + TestRole AssumeRole() override; + std::string GetErrorLogs() override; private: // The name of the file in which the death test is located. const char* const file_; // The line number on which the death test is located. const int line_; + // The stderr data captured by the child process. + std::string captured_stderr_; - zx_handle_t child_process_; + zx::process child_process_; + zx::channel exception_channel_; + zx::socket stderr_socket_; }; // Utility class for accumulating command-line arguments. class Arguments { public: - Arguments() { - args_.push_back(NULL); - } + Arguments() { args_.push_back(nullptr); } ~Arguments() { for (std::vector<char*>::iterator i = args_.begin(); i != args_.end(); @@ -860,29 +875,88 @@ class Arguments { // status, or 0 if no child process exists. As a side effect, sets the // outcome data member. int FuchsiaDeathTest::Wait() { + const int kProcessKey = 0; + const int kSocketKey = 1; + const int kExceptionKey = 2; + if (!spawned()) return 0; - // Wait for child process to terminate. + // Create a port to wait for socket/task/exception events. zx_status_t status_zx; - zx_signals_t signals; - status_zx = zx_object_wait_one( - child_process_, - ZX_PROCESS_TERMINATED, - ZX_TIME_INFINITE, - &signals); + zx::port port; + status_zx = zx::port::create(0, &port); + GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); + + // Register to wait for the child process to terminate. + status_zx = child_process_.wait_async( + port, kProcessKey, ZX_PROCESS_TERMINATED, ZX_WAIT_ASYNC_ONCE); GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); + // Register to wait for the socket to be readable or closed. + status_zx = stderr_socket_.wait_async( + port, kSocketKey, ZX_SOCKET_READABLE | ZX_SOCKET_PEER_CLOSED, + ZX_WAIT_ASYNC_ONCE); + GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); + + // Register to wait for an exception. + status_zx = exception_channel_.wait_async( + port, kExceptionKey, ZX_CHANNEL_READABLE, ZX_WAIT_ASYNC_ONCE); + GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); + + bool process_terminated = false; + bool socket_closed = false; + do { + zx_port_packet_t packet = {}; + status_zx = port.wait(zx::time::infinite(), &packet); + GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); + + if (packet.key == kExceptionKey) { + // Process encountered an exception. Kill it directly rather than + // letting other handlers process the event. We will get a kProcessKey + // event when the process actually terminates. + status_zx = child_process_.kill(); + GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); + } else if (packet.key == kProcessKey) { + // Process terminated. + GTEST_DEATH_TEST_CHECK_(ZX_PKT_IS_SIGNAL_ONE(packet.type)); + GTEST_DEATH_TEST_CHECK_(packet.signal.observed & ZX_PROCESS_TERMINATED); + process_terminated = true; + } else if (packet.key == kSocketKey) { + GTEST_DEATH_TEST_CHECK_(ZX_PKT_IS_SIGNAL_ONE(packet.type)); + if (packet.signal.observed & ZX_SOCKET_READABLE) { + // Read data from the socket. + constexpr size_t kBufferSize = 1024; + do { + size_t old_length = captured_stderr_.length(); + size_t bytes_read = 0; + captured_stderr_.resize(old_length + kBufferSize); + status_zx = stderr_socket_.read( + 0, &captured_stderr_.front() + old_length, kBufferSize, + &bytes_read); + captured_stderr_.resize(old_length + bytes_read); + } while (status_zx == ZX_OK); + if (status_zx == ZX_ERR_PEER_CLOSED) { + socket_closed = true; + } else { + GTEST_DEATH_TEST_CHECK_(status_zx == ZX_ERR_SHOULD_WAIT); + status_zx = stderr_socket_.wait_async( + port, kSocketKey, ZX_SOCKET_READABLE | ZX_SOCKET_PEER_CLOSED, + ZX_WAIT_ASYNC_ONCE); + GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); + } + } else { + GTEST_DEATH_TEST_CHECK_(packet.signal.observed & ZX_SOCKET_PEER_CLOSED); + socket_closed = true; + } + } + } while (!process_terminated && !socket_closed); + ReadAndInterpretStatusByte(); zx_info_process_t buffer; - status_zx = zx_object_get_info( - child_process_, - ZX_INFO_PROCESS, - &buffer, - sizeof(buffer), - nullptr, - nullptr); + status_zx = child_process_.get_info( + ZX_INFO_PROCESS, &buffer, sizeof(buffer), nullptr, nullptr); GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); GTEST_DEATH_TEST_CHECK_(buffer.exited); @@ -902,21 +976,20 @@ DeathTest::TestRole FuchsiaDeathTest::AssumeRole() { const TestInfo* const info = impl->current_test_info(); const int death_test_index = info->result()->death_test_count(); - if (flag != NULL) { + if (flag != nullptr) { // ParseInternalRunDeathTestFlag() has performed all the necessary // processing. set_write_fd(kFuchsiaReadPipeFd); return EXECUTE_TEST; } - CaptureStderr(); // Flush the log buffers since the log streams are shared with the child. FlushInfoLog(); // Build the child process command line. - const std::string filter_flag = - std::string("--") + GTEST_FLAG_PREFIX_ + kFilterFlag + "=" - + info->test_case_name() + "." + info->name(); + const std::string filter_flag = std::string("--") + GTEST_FLAG_PREFIX_ + + kFilterFlag + "=" + info->test_suite_name() + + "." + info->name(); const std::string internal_flag = std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + "=" + file_ + "|" @@ -930,30 +1003,68 @@ DeathTest::TestRole FuchsiaDeathTest::AssumeRole() { // Build the pipe for communication with the child. zx_status_t status; zx_handle_t child_pipe_handle; - uint32_t type; - status = fdio_pipe_half(&child_pipe_handle, &type); - GTEST_DEATH_TEST_CHECK_(status >= 0); - set_read_fd(status); + int child_pipe_fd; + status = fdio_pipe_half(&child_pipe_fd, &child_pipe_handle); + GTEST_DEATH_TEST_CHECK_(status == ZX_OK); + set_read_fd(child_pipe_fd); // Set the pipe handle for the child. - fdio_spawn_action_t add_handle_action = { - .action = FDIO_SPAWN_ACTION_ADD_HANDLE, - .h = { - .id = PA_HND(type, kFuchsiaReadPipeFd), - .handle = child_pipe_handle - } - }; + fdio_spawn_action_t spawn_actions[2] = {}; + fdio_spawn_action_t* add_handle_action = &spawn_actions[0]; + add_handle_action->action = FDIO_SPAWN_ACTION_ADD_HANDLE; + add_handle_action->h.id = PA_HND(PA_FD, kFuchsiaReadPipeFd); + add_handle_action->h.handle = child_pipe_handle; + + // Create a socket pair will be used to receive the child process' stderr. + zx::socket stderr_producer_socket; + status = + zx::socket::create(0, &stderr_producer_socket, &stderr_socket_); + GTEST_DEATH_TEST_CHECK_(status >= 0); + int stderr_producer_fd = -1; + status = + fdio_fd_create(stderr_producer_socket.release(), &stderr_producer_fd); + GTEST_DEATH_TEST_CHECK_(status >= 0); + + // Make the stderr socket nonblocking. + GTEST_DEATH_TEST_CHECK_(fcntl(stderr_producer_fd, F_SETFL, 0) == 0); + + fdio_spawn_action_t* add_stderr_action = &spawn_actions[1]; + add_stderr_action->action = FDIO_SPAWN_ACTION_CLONE_FD; + add_stderr_action->fd.local_fd = stderr_producer_fd; + add_stderr_action->fd.target_fd = STDERR_FILENO; + + // Create a child job. + zx_handle_t child_job = ZX_HANDLE_INVALID; + status = zx_job_create(zx_job_default(), 0, & child_job); + GTEST_DEATH_TEST_CHECK_(status == ZX_OK); + zx_policy_basic_t policy; + policy.condition = ZX_POL_NEW_ANY; + policy.policy = ZX_POL_ACTION_ALLOW; + status = zx_job_set_policy( + child_job, ZX_JOB_POL_RELATIVE, ZX_JOB_POL_BASIC, &policy, 1); + GTEST_DEATH_TEST_CHECK_(status == ZX_OK); + + // Create an exception channel attached to the |child_job|, to allow + // us to suppress the system default exception handler from firing. + status = + zx_task_create_exception_channel( + child_job, 0, exception_channel_.reset_and_get_address()); + GTEST_DEATH_TEST_CHECK_(status == ZX_OK); // Spawn the child process. - status = fdio_spawn_etc(ZX_HANDLE_INVALID, FDIO_SPAWN_CLONE_ALL, - args.Argv()[0], args.Argv(), nullptr, 1, - &add_handle_action, &child_process_, nullptr); + status = fdio_spawn_etc( + child_job, FDIO_SPAWN_CLONE_ALL, args.Argv()[0], args.Argv(), nullptr, + 2, spawn_actions, child_process_.reset_and_get_address(), nullptr); GTEST_DEATH_TEST_CHECK_(status == ZX_OK); set_spawned(true); return OVERSEE_TEST; } +std::string FuchsiaDeathTest::GetErrorLogs() { + return captured_stderr_; +} + #else // We are neither on Windows, nor on Fuchsia. // ForkingDeathTest provides implementations for most of the abstract @@ -961,10 +1072,10 @@ DeathTest::TestRole FuchsiaDeathTest::AssumeRole() { // left undefined. class ForkingDeathTest : public DeathTestImpl { public: - ForkingDeathTest(const char* statement, const RE* regex); + ForkingDeathTest(const char* statement, Matcher<const std::string&> matcher); // All of these virtual functions are inherited from DeathTest. - virtual int Wait(); + int Wait() override; protected: void set_child_pid(pid_t child_pid) { child_pid_ = child_pid; } @@ -975,9 +1086,9 @@ class ForkingDeathTest : public DeathTestImpl { }; // Constructs a ForkingDeathTest. -ForkingDeathTest::ForkingDeathTest(const char* a_statement, const RE* a_regex) - : DeathTestImpl(a_statement, a_regex), - child_pid_(-1) {} +ForkingDeathTest::ForkingDeathTest(const char* a_statement, + Matcher<const std::string&> matcher) + : DeathTestImpl(a_statement, std::move(matcher)), child_pid_(-1) {} // Waits for the child in a death test to exit, returning its exit // status, or 0 if no child process exists. As a side effect, sets the @@ -998,9 +1109,9 @@ int ForkingDeathTest::Wait() { // in the child process. class NoExecDeathTest : public ForkingDeathTest { public: - NoExecDeathTest(const char* a_statement, const RE* a_regex) : - ForkingDeathTest(a_statement, a_regex) { } - virtual TestRole AssumeRole(); + NoExecDeathTest(const char* a_statement, Matcher<const std::string&> matcher) + : ForkingDeathTest(a_statement, std::move(matcher)) {} + TestRole AssumeRole() override; }; // The AssumeRole process for a fork-and-run death test. It implements a @@ -1053,10 +1164,13 @@ DeathTest::TestRole NoExecDeathTest::AssumeRole() { // only this specific death test to be run. class ExecDeathTest : public ForkingDeathTest { public: - ExecDeathTest(const char* a_statement, const RE* a_regex, - const char* file, int line) : - ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { } - virtual TestRole AssumeRole(); + ExecDeathTest(const char* a_statement, Matcher<const std::string&> matcher, + const char* file, int line) + : ForkingDeathTest(a_statement, std::move(matcher)), + file_(file), + line_(line) {} + TestRole AssumeRole() override; + private: static ::std::vector<std::string> GetArgvsForDeathTestChildProcess() { ::std::vector<std::string> args = GetInjectableArgvs(); @@ -1076,9 +1190,7 @@ class ExecDeathTest : public ForkingDeathTest { // Utility class for accumulating command-line arguments. class Arguments { public: - Arguments() { - args_.push_back(NULL); - } + Arguments() { args_.push_back(nullptr); } ~Arguments() { for (std::vector<char*>::iterator i = args_.begin(); i != args_.end(); @@ -1172,6 +1284,9 @@ static int ExecDeathTestChildMain(void* child_arg) { // correct answer. static void StackLowerThanAddress(const void* ptr, bool* result) GTEST_NO_INLINE_; +// HWAddressSanitizer add a random tag to the MSB of the local variable address, +// making comparison result unpredictable. +GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ static void StackLowerThanAddress(const void* ptr, bool* result) { int dummy; *result = (&dummy < ptr); @@ -1179,6 +1294,7 @@ static void StackLowerThanAddress(const void* ptr, bool* result) { // Make sure AddressSanitizer does not tamper with the stack here. GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ +GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ static bool StackGrowsDown() { int dummy; bool result; @@ -1223,7 +1339,8 @@ static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { fd_flags | FD_CLOEXEC)); struct inheritance inherit = {0}; // spawn is a system call. - child_pid = spawn(args.argv[0], 0, NULL, &inherit, args.argv, GetEnviron()); + child_pid = + spawn(args.argv[0], 0, nullptr, &inherit, args.argv, GetEnviron()); // Restores the current working directory. GTEST_DEATH_TEST_CHECK_(fchdir(cwd_fd) != -1); GTEST_DEATH_TEST_CHECK_SYSCALL_(close(cwd_fd)); @@ -1247,9 +1364,9 @@ static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { if (!use_fork) { static const bool stack_grows_down = StackGrowsDown(); - const size_t stack_size = getpagesize(); + const auto stack_size = static_cast<size_t>(getpagesize()); // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead. - void* const stack = mmap(NULL, stack_size, PROT_READ | PROT_WRITE, + void* const stack = mmap(nullptr, stack_size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); GTEST_DEATH_TEST_CHECK_(stack != MAP_FAILED); @@ -1263,8 +1380,9 @@ static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { void* const stack_top = static_cast<char*>(stack) + (stack_grows_down ? stack_size - kMaxStackAlignment : 0); - GTEST_DEATH_TEST_CHECK_(stack_size > kMaxStackAlignment && - reinterpret_cast<intptr_t>(stack_top) % kMaxStackAlignment == 0); + GTEST_DEATH_TEST_CHECK_( + static_cast<size_t>(stack_size) > kMaxStackAlignment && + reinterpret_cast<uintptr_t>(stack_top) % kMaxStackAlignment == 0); child_pid = clone(&ExecDeathTestChildMain, stack_top, SIGCHLD, &args); @@ -1281,7 +1399,7 @@ static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { # endif // GTEST_OS_QNX # if GTEST_OS_LINUX GTEST_DEATH_TEST_CHECK_SYSCALL_( - sigaction(SIGPROF, &saved_sigprof_action, NULL)); + sigaction(SIGPROF, &saved_sigprof_action, nullptr)); # endif // GTEST_OS_LINUX GTEST_DEATH_TEST_CHECK_(child_pid != -1); @@ -1299,7 +1417,7 @@ DeathTest::TestRole ExecDeathTest::AssumeRole() { const TestInfo* const info = impl->current_test_info(); const int death_test_index = info->result()->death_test_count(); - if (flag != NULL) { + if (flag != nullptr) { set_write_fd(flag->write_fd()); return EXECUTE_TEST; } @@ -1310,9 +1428,9 @@ DeathTest::TestRole ExecDeathTest::AssumeRole() { // it be closed when the child process does an exec: GTEST_DEATH_TEST_CHECK_(fcntl(pipe_fd[1], F_SETFD, 0) != -1); - const std::string filter_flag = - std::string("--") + GTEST_FLAG_PREFIX_ + kFilterFlag + "=" - + info->test_case_name() + "." + info->name(); + const std::string filter_flag = std::string("--") + GTEST_FLAG_PREFIX_ + + kFilterFlag + "=" + info->test_suite_name() + + "." + info->name(); const std::string internal_flag = std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + "=" + file_ + "|" + StreamableToString(line_) + "|" @@ -1345,7 +1463,8 @@ DeathTest::TestRole ExecDeathTest::AssumeRole() { // by the "test" argument to its address. If the test should be // skipped, sets that pointer to NULL. Returns true, unless the // flag is set to an invalid value. -bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex, +bool DefaultDeathTestFactory::Create(const char* statement, + Matcher<const std::string&> matcher, const char* file, int line, DeathTest** test) { UnitTestImpl* const impl = GetUnitTestImpl(); @@ -1354,7 +1473,7 @@ bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex, const int death_test_index = impl->current_test_info() ->increment_death_test_count(); - if (flag != NULL) { + if (flag != nullptr) { if (death_test_index > flag->index()) { DeathTest::set_last_death_test_message( "Death test count (" + StreamableToString(death_test_index) @@ -1365,7 +1484,7 @@ bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex, if (!(flag->file() == file && flag->line() == line && flag->index() == death_test_index)) { - *test = NULL; + *test = nullptr; return true; } } @@ -1374,22 +1493,22 @@ bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex, if (GTEST_FLAG(death_test_style) == "threadsafe" || GTEST_FLAG(death_test_style) == "fast") { - *test = new WindowsDeathTest(statement, regex, file, line); + *test = new WindowsDeathTest(statement, std::move(matcher), file, line); } # elif GTEST_OS_FUCHSIA if (GTEST_FLAG(death_test_style) == "threadsafe" || GTEST_FLAG(death_test_style) == "fast") { - *test = new FuchsiaDeathTest(statement, regex, file, line); + *test = new FuchsiaDeathTest(statement, std::move(matcher), file, line); } # else if (GTEST_FLAG(death_test_style) == "threadsafe") { - *test = new ExecDeathTest(statement, regex, file, line); + *test = new ExecDeathTest(statement, std::move(matcher), file, line); } else if (GTEST_FLAG(death_test_style) == "fast") { - *test = new NoExecDeathTest(statement, regex); + *test = new NoExecDeathTest(statement, std::move(matcher)); } # endif // GTEST_OS_WINDOWS @@ -1419,8 +1538,6 @@ static int GetStatusFileDescriptor(unsigned int parent_process_id, StreamableToString(parent_process_id)); } - // TODO(vladl@google.com): Replace the following check with a - // compile-time assertion when available. GTEST_CHECK_(sizeof(HANDLE) <= sizeof(size_t)); const HANDLE write_handle = @@ -1476,7 +1593,7 @@ static int GetStatusFileDescriptor(unsigned int parent_process_id, // initialized from the GTEST_FLAG(internal_run_death_test) flag if // the flag is specified; otherwise returns NULL. InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag() { - if (GTEST_FLAG(internal_run_death_test) == "") return NULL; + if (GTEST_FLAG(internal_run_death_test) == "") return nullptr; // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we // can use it here. diff --git a/test/gtest/src/gtest-filepath.cc b/test/gtest/src/gtest-filepath.cc index 6b76ea0f3..bd7b99ff0 100644 --- a/test/gtest/src/gtest-filepath.cc +++ b/test/gtest/src/gtest-filepath.cc @@ -38,9 +38,6 @@ #elif GTEST_OS_WINDOWS # include <direct.h> # include <io.h> -#elif GTEST_OS_SYMBIAN -// Symbian OpenC has PATH_MAX in sys/syslimits.h -# include <sys/syslimits.h> #else # include <limits.h> # include <climits> // Some Linux distributions define PATH_MAX here. @@ -95,13 +92,14 @@ static bool IsPathSeparator(char c) { // Returns the current working directory, or "" if unsuccessful. FilePath FilePath::GetCurrentDir() { -#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT - // Windows CE doesn't have a current directory, so we just return +#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \ + GTEST_OS_WINDOWS_RT || ARDUINO || defined(ESP_PLATFORM) + // These platforms do not have a current directory, so we just return // something reasonable. return FilePath(kCurrentDirectoryString); #elif GTEST_OS_WINDOWS char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; - return FilePath(_getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd); + return FilePath(_getcwd(cwd, sizeof(cwd)) == nullptr ? "" : cwd); #else char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; char* result = getcwd(cwd, sizeof(cwd)); @@ -109,9 +107,9 @@ FilePath FilePath::GetCurrentDir() { // getcwd will likely fail in NaCl due to the sandbox, so return something // reasonable. The user may have provided a shim implementation for getcwd, // however, so fallback only when failure is detected. - return FilePath(result == NULL ? kCurrentDirectoryString : cwd); + return FilePath(result == nullptr ? kCurrentDirectoryString : cwd); # endif // GTEST_OS_NACL - return FilePath(result == NULL ? "" : cwd); + return FilePath(result == nullptr ? "" : cwd); #endif // GTEST_OS_WINDOWS_MOBILE } @@ -136,8 +134,8 @@ const char* FilePath::FindLastPathSeparator() const { #if GTEST_HAS_ALT_PATH_SEP_ const char* const last_alt_sep = strrchr(c_str(), kAlternatePathSeparator); // Comparing two pointers of which only one is NULL is undefined. - if (last_alt_sep != NULL && - (last_sep == NULL || last_alt_sep > last_sep)) { + if (last_alt_sep != nullptr && + (last_sep == nullptr || last_alt_sep > last_sep)) { return last_alt_sep; } #endif @@ -165,7 +163,7 @@ FilePath FilePath::RemoveFileName() const { const char* const last_sep = FindLastPathSeparator(); std::string dir; if (last_sep) { - dir = std::string(c_str(), last_sep + 1 - c_str()); + dir = std::string(c_str(), static_cast<size_t>(last_sep + 1 - c_str())); } else { dir = kCurrentDirectoryString; } @@ -250,9 +248,6 @@ bool FilePath::DirectoryExists() const { // root directory per disk drive.) bool FilePath::IsRootDirectory() const { #if GTEST_OS_WINDOWS - // TODO(wan@google.com): on Windows a network share like - // \\server\share can be a root directory, although it cannot be the - // current directory. Handle this properly. return pathname_.length() == 3 && IsAbsolutePath(); #else return pathname_.length() == 1 && IsPathSeparator(pathname_.c_str()[0]); @@ -324,7 +319,7 @@ bool FilePath::CreateFolder() const { #if GTEST_OS_WINDOWS_MOBILE FilePath removed_sep(this->RemoveTrailingPathSeparator()); LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str()); - int result = CreateDirectory(unicode, NULL) ? 0 : -1; + int result = CreateDirectory(unicode, nullptr) ? 0 : -1; delete [] unicode; #elif GTEST_OS_WINDOWS int result = _mkdir(pathname_.c_str()); @@ -350,9 +345,8 @@ FilePath FilePath::RemoveTrailingPathSeparator() const { // Removes any redundant separators that might be in the pathname. // For example, "bar///foo" becomes "bar/foo". Does not eliminate other // redundancies that might be in a pathname involving "." or "..". -// TODO(wan@google.com): handle Windows network shares (e.g. \\server\share). void FilePath::Normalize() { - if (pathname_.c_str() == NULL) { + if (pathname_.c_str() == nullptr) { pathname_ = ""; return; } diff --git a/test/gtest/src/gtest-internal-inl.h b/test/gtest/src/gtest-internal-inl.h index e77c8b6ca..8ed70daab 100644 --- a/test/gtest/src/gtest-internal-inl.h +++ b/test/gtest/src/gtest-internal-inl.h @@ -27,10 +27,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Utility functions and classes used by the Google C++ testing framework. -// -// Author: wan@google.com (Zhanyong Wan) -// +// Utility functions and classes used by the Google C++ testing framework.// // This file contains purely Google Test's internal implementation. Please // DO NOT #INCLUDE IT IN A USER PROGRAM. @@ -45,6 +42,7 @@ #include <string.h> // For memmove. #include <algorithm> +#include <memory> #include <string> #include <vector> @@ -62,6 +60,9 @@ #include "gtest/gtest.h" #include "gtest/gtest-spi.h" +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ +/* class A needs to have dll-interface to be used by clients of class B */) + namespace testing { // Declares the flags. @@ -98,14 +99,14 @@ const char kFlagfileFlag[] = "flagfile"; // A valid random seed must be in [1, kMaxRandomSeed]. const int kMaxRandomSeed = 99999; -// g_help_flag is true iff the --help flag or an equivalent form is -// specified on the command line. +// g_help_flag is true if and only if the --help flag or an equivalent form +// is specified on the command line. GTEST_API_ extern bool g_help_flag; // Returns the current time in milliseconds. GTEST_API_ TimeInMillis GetTimeInMillis(); -// Returns true iff Google Test should use colors in the output. +// Returns true if and only if Google Test should use colors in the output. GTEST_API_ bool ShouldUseColor(bool stdout_is_tty); // Formats the given time in milliseconds as seconds. @@ -230,7 +231,7 @@ GTEST_API_ std::string CodePointToUtf8(UInt32 code_point); // Converts a wide string to a narrow string in UTF-8 encoding. // The wide string is assumed to have the following encoding: -// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) +// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin) // UTF-32 if sizeof(wchar_t) == 4 (on Linux) // Parameter str points to a null-terminated wide string. // Parameter num_chars may additionally limit the number @@ -265,8 +266,8 @@ GTEST_API_ bool ShouldShard(const char* total_shards_str, GTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val); // Given the total number of shards, the shard index, and the test id, -// returns true iff the test should be run on this shard. The test id is -// some arbitrary but unique non-negative integer assigned to each test +// returns true if and only if the test should be run on this shard. The test id +// is some arbitrary but unique non-negative integer assigned to each test // method. Assumes that 0 <= shard_index < total_shards. GTEST_API_ bool ShouldRunTestOnShard( int total_shards, int shard_index, int test_id); @@ -297,7 +298,8 @@ void ForEach(const Container& c, Functor functor) { // in range [0, v.size()). template <typename E> inline E GetElementOr(const std::vector<E>& v, int i, E default_value) { - return (i < 0 || i >= static_cast<int>(v.size())) ? default_value : v[i]; + return (i < 0 || i >= static_cast<int>(v.size())) ? default_value + : v[static_cast<size_t>(i)]; } // Performs an in-place shuffle of a range of the vector's elements. @@ -319,8 +321,11 @@ void ShuffleRange(internal::Random* random, int begin, int end, // http://en.wikipedia.org/wiki/Fisher-Yates_shuffle for (int range_width = end - begin; range_width >= 2; range_width--) { const int last_in_range = begin + range_width - 1; - const int selected = begin + random->Generate(range_width); - std::swap((*v)[selected], (*v)[last_in_range]); + const int selected = + begin + + static_cast<int>(random->Generate(static_cast<UInt32>(range_width))); + std::swap((*v)[static_cast<size_t>(selected)], + (*v)[static_cast<size_t>(last_in_range)]); } } @@ -347,7 +352,7 @@ class TestPropertyKeyIs { // TestPropertyKeyIs has NO default constructor. explicit TestPropertyKeyIs(const std::string& key) : key_(key) {} - // Returns true iff the test name of test property matches on key_. + // Returns true if and only if the test name of test property matches on key_. bool operator()(const TestProperty& test_property) const { return test_property.key() == key_; } @@ -380,17 +385,17 @@ class GTEST_API_ UnitTestOptions { // Functions for processing the gtest_filter flag. - // Returns true iff the wildcard pattern matches the string. The - // first ':' or '\0' character in pattern marks the end of it. + // Returns true if and only if the wildcard pattern matches the string. + // The first ':' or '\0' character in pattern marks the end of it. // // This recursive algorithm isn't very efficient, but is clear and // works well enough for matching test names, which are short. static bool PatternMatchesString(const char *pattern, const char *str); - // Returns true iff the user-specified filter matches the test case - // name and the test name. - static bool FilterMatchesTest(const std::string &test_case_name, - const std::string &test_name); + // Returns true if and only if the user-specified filter matches the test + // suite name and the test name. + static bool FilterMatchesTest(const std::string& test_suite_name, + const std::string& test_name); #if GTEST_OS_WINDOWS // Function for supporting the gtest_catch_exception flag. @@ -442,10 +447,20 @@ class OsStackTraceGetter : public OsStackTraceGetterInterface { public: OsStackTraceGetter() {} - virtual std::string CurrentStackTrace(int max_depth, int skip_count); - virtual void UponLeavingGTest(); + std::string CurrentStackTrace(int max_depth, int skip_count) override; + void UponLeavingGTest() override; private: +#if GTEST_HAS_ABSL + Mutex mutex_; // Protects all internal state. + + // We save the stack frame below the frame that calls user code. + // We do this because the address of the frame immediately below + // the user code changes between the call to UponLeavingGTest() + // and any calls to the stack trace code from within the user code. + void* caller_frame_ = nullptr; +#endif // GTEST_HAS_ABSL + GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetter); }; @@ -464,7 +479,7 @@ class DefaultGlobalTestPartResultReporter explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test); // Implements the TestPartResultReporterInterface. Reports the test part // result in the current test. - virtual void ReportTestPartResult(const TestPartResult& result); + void ReportTestPartResult(const TestPartResult& result) override; private: UnitTestImpl* const unit_test_; @@ -480,7 +495,7 @@ class DefaultPerThreadTestPartResultReporter explicit DefaultPerThreadTestPartResultReporter(UnitTestImpl* unit_test); // Implements the TestPartResultReporterInterface. The implementation just // delegates to the current global test part result reporter of *unit_test_. - virtual void ReportTestPartResult(const TestPartResult& result); + void ReportTestPartResult(const TestPartResult& result) override; private: UnitTestImpl* const unit_test_; @@ -518,22 +533,25 @@ class GTEST_API_ UnitTestImpl { void SetTestPartResultReporterForCurrentThread( TestPartResultReporterInterface* reporter); - // Gets the number of successful test cases. - int successful_test_case_count() const; + // Gets the number of successful test suites. + int successful_test_suite_count() const; - // Gets the number of failed test cases. - int failed_test_case_count() const; + // Gets the number of failed test suites. + int failed_test_suite_count() const; - // Gets the number of all test cases. - int total_test_case_count() const; + // Gets the number of all test suites. + int total_test_suite_count() const; - // Gets the number of all test cases that contain at least one test + // Gets the number of all test suites that contain at least one test // that should run. - int test_case_to_run_count() const; + int test_suite_to_run_count() const; // Gets the number of successful tests. int successful_test_count() const; + // Gets the number of skipped tests. + int skipped_test_count() const; + // Gets the number of failed tests. int failed_test_count() const; @@ -559,27 +577,33 @@ class GTEST_API_ UnitTestImpl { // Gets the elapsed time, in milliseconds. TimeInMillis elapsed_time() const { return elapsed_time_; } - // Returns true iff the unit test passed (i.e. all test cases passed). + // Returns true if and only if the unit test passed (i.e. all test suites + // passed). bool Passed() const { return !Failed(); } - // Returns true iff the unit test failed (i.e. some test case failed - // or something outside of all tests failed). + // Returns true if and only if the unit test failed (i.e. some test suite + // failed or something outside of all tests failed). bool Failed() const { - return failed_test_case_count() > 0 || ad_hoc_test_result()->Failed(); + return failed_test_suite_count() > 0 || ad_hoc_test_result()->Failed(); } - // Gets the i-th test case among all the test cases. i can range from 0 to - // total_test_case_count() - 1. If i is not in that range, returns NULL. - const TestCase* GetTestCase(int i) const { - const int index = GetElementOr(test_case_indices_, i, -1); - return index < 0 ? NULL : test_cases_[i]; + // Gets the i-th test suite among all the test suites. i can range from 0 to + // total_test_suite_count() - 1. If i is not in that range, returns NULL. + const TestSuite* GetTestSuite(int i) const { + const int index = GetElementOr(test_suite_indices_, i, -1); + return index < 0 ? nullptr : test_suites_[static_cast<size_t>(i)]; } - // Gets the i-th test case among all the test cases. i can range from 0 to - // total_test_case_count() - 1. If i is not in that range, returns NULL. - TestCase* GetMutableTestCase(int i) { - const int index = GetElementOr(test_case_indices_, i, -1); - return index < 0 ? NULL : test_cases_[index]; + // Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + const TestCase* GetTestCase(int i) const { return GetTestSuite(i); } +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + + // Gets the i-th test suite among all the test suites. i can range from 0 to + // total_test_suite_count() - 1. If i is not in that range, returns NULL. + TestSuite* GetMutableSuiteCase(int i) { + const int index = GetElementOr(test_suite_indices_, i, -1); + return index < 0 ? nullptr : test_suites_[static_cast<size_t>(index)]; } // Provides access to the event listener list. @@ -616,30 +640,38 @@ class GTEST_API_ UnitTestImpl { // trace but Bar() and CurrentOsStackTraceExceptTop() won't. std::string CurrentOsStackTraceExceptTop(int skip_count) GTEST_NO_INLINE_; - // Finds and returns a TestCase with the given name. If one doesn't + // Finds and returns a TestSuite with the given name. If one doesn't // exist, creates one and returns it. // // Arguments: // - // test_case_name: name of the test case + // test_suite_name: name of the test suite // type_param: the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. - // set_up_tc: pointer to the function that sets up the test case - // tear_down_tc: pointer to the function that tears down the test case - TestCase* GetTestCase(const char* test_case_name, - const char* type_param, - Test::SetUpTestCaseFunc set_up_tc, - Test::TearDownTestCaseFunc tear_down_tc); + // set_up_tc: pointer to the function that sets up the test suite + // tear_down_tc: pointer to the function that tears down the test suite + TestSuite* GetTestSuite(const char* test_suite_name, const char* type_param, + internal::SetUpTestSuiteFunc set_up_tc, + internal::TearDownTestSuiteFunc tear_down_tc); + +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + TestCase* GetTestCase(const char* test_case_name, const char* type_param, + internal::SetUpTestSuiteFunc set_up_tc, + internal::TearDownTestSuiteFunc tear_down_tc) { + return GetTestSuite(test_case_name, type_param, set_up_tc, tear_down_tc); + } +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ // Adds a TestInfo to the unit test. // // Arguments: // - // set_up_tc: pointer to the function that sets up the test case - // tear_down_tc: pointer to the function that tears down the test case + // set_up_tc: pointer to the function that sets up the test suite + // tear_down_tc: pointer to the function that tears down the test suite // test_info: the TestInfo object - void AddTestInfo(Test::SetUpTestCaseFunc set_up_tc, - Test::TearDownTestCaseFunc tear_down_tc, + void AddTestInfo(internal::SetUpTestSuiteFunc set_up_tc, + internal::TearDownTestSuiteFunc tear_down_tc, TestInfo* test_info) { // In order to support thread-safe death tests, we need to // remember the original working directory when the test program @@ -654,21 +686,20 @@ class GTEST_API_ UnitTestImpl { << "Failed to get the current working directory."; } - GetTestCase(test_info->test_case_name(), - test_info->type_param(), - set_up_tc, - tear_down_tc)->AddTestInfo(test_info); + GetTestSuite(test_info->test_suite_name(), test_info->type_param(), + set_up_tc, tear_down_tc) + ->AddTestInfo(test_info); } - // Returns ParameterizedTestCaseRegistry object used to keep track of + // Returns ParameterizedTestSuiteRegistry object used to keep track of // value-parameterized tests and instantiate and register them. - internal::ParameterizedTestCaseRegistry& parameterized_test_registry() { + internal::ParameterizedTestSuiteRegistry& parameterized_test_registry() { return parameterized_test_registry_; } - // Sets the TestCase object for the test that's currently running. - void set_current_test_case(TestCase* a_current_test_case) { - current_test_case_ = a_current_test_case; + // Sets the TestSuite object for the test that's currently running. + void set_current_test_suite(TestSuite* a_current_test_suite) { + current_test_suite_ = a_current_test_suite; } // Sets the TestInfo object for the test that's currently running. If @@ -679,7 +710,7 @@ class GTEST_API_ UnitTestImpl { } // Registers all parameterized tests defined using TEST_P and - // INSTANTIATE_TEST_CASE_P, creating regular tests for each test/parameter + // INSTANTIATE_TEST_SUITE_P, creating regular tests for each test/parameter // combination. This method can be called more then once; it has guards // protecting from registering the tests more then once. If // value-parameterized tests are disabled, RegisterParameterizedTests is @@ -694,7 +725,7 @@ class GTEST_API_ UnitTestImpl { // Clears the results of all tests, except the ad hoc tests. void ClearNonAdHocTestResult() { - ForEach(test_cases_, TestCase::ClearTestCaseResult); + ForEach(test_suites_, TestSuite::ClearTestSuiteResult); } // Clears the results of ad-hoc test assertions. @@ -703,7 +734,7 @@ class GTEST_API_ UnitTestImpl { } // Adds a TestProperty to the current TestResult object when invoked in a - // context of a test or a test case, or to the global property set. If the + // context of a test or a test suite, or to the global property set. If the // result already contains a property with the same key, the value will be // updated. void RecordProperty(const TestProperty& test_property); @@ -715,7 +746,7 @@ class GTEST_API_ UnitTestImpl { // Matches the full name of each test against the user-specified // filter to decide whether the test should run, then records the - // result in each TestCase and TestInfo object. + // result in each TestSuite and TestInfo object. // If shard_tests == HONOR_SHARDING_PROTOCOL, further filters tests // based on sharding variables in the environment. // Returns the number of tests that should run. @@ -724,7 +755,7 @@ class GTEST_API_ UnitTestImpl { // Prints the names of the tests matching the user-specified filter flag. void ListTestsMatchingFilter(); - const TestCase* current_test_case() const { return current_test_case_; } + const TestSuite* current_test_suite() const { return current_test_suite_; } TestInfo* current_test_info() { return current_test_info_; } const TestInfo* current_test_info() const { return current_test_info_; } @@ -785,11 +816,11 @@ class GTEST_API_ UnitTestImpl { // Gets the random number generator. internal::Random* random() { return &random_; } - // Shuffles all test cases, and the tests within each test case, + // Shuffles all test suites, and the tests within each test suite, // making sure that death tests are still run first. void ShuffleTests(); - // Restores the test cases and tests to their order before the first shuffle. + // Restores the test suites and tests to their order before the first shuffle. void UnshuffleTests(); // Returns the value of GTEST_FLAG(catch_exceptions) at the moment @@ -829,31 +860,31 @@ class GTEST_API_ UnitTestImpl { // before/after the tests are run. std::vector<Environment*> environments_; - // The vector of TestCases in their original order. It owns the + // The vector of TestSuites in their original order. It owns the // elements in the vector. - std::vector<TestCase*> test_cases_; + std::vector<TestSuite*> test_suites_; - // Provides a level of indirection for the test case list to allow - // easy shuffling and restoring the test case order. The i-th - // element of this vector is the index of the i-th test case in the + // Provides a level of indirection for the test suite list to allow + // easy shuffling and restoring the test suite order. The i-th + // element of this vector is the index of the i-th test suite in the // shuffled order. - std::vector<int> test_case_indices_; + std::vector<int> test_suite_indices_; // ParameterizedTestRegistry object used to register value-parameterized // tests. - internal::ParameterizedTestCaseRegistry parameterized_test_registry_; + internal::ParameterizedTestSuiteRegistry parameterized_test_registry_; // Indicates whether RegisterParameterizedTests() has been called already. bool parameterized_tests_registered_; - // Index of the last death test case registered. Initially -1. - int last_death_test_case_; + // Index of the last death test suite registered. Initially -1. + int last_death_test_suite_; - // This points to the TestCase for the currently running test. It - // changes as Google Test goes through one test case after another. + // This points to the TestSuite for the currently running test. It + // changes as Google Test goes through one test suite after another. // When no test is running, this is set to NULL and Google Test // stores assertion results in ad_hoc_test_result_. Initially NULL. - TestCase* current_test_case_; + TestSuite* current_test_suite_; // This points to the TestInfo for the currently running test. It // changes as Google Test goes through one test after another. When @@ -881,7 +912,7 @@ class GTEST_API_ UnitTestImpl { // desired. OsStackTraceGetterInterface* os_stack_trace_getter_; - // True iff PostFlagParsingInit() has been called. + // True if and only if PostFlagParsingInit() has been called. bool post_flag_parse_init_performed_; // The random number seed used at the beginning of the test run. @@ -900,8 +931,8 @@ class GTEST_API_ UnitTestImpl { #if GTEST_HAS_DEATH_TEST // The decomposed components of the gtest_internal_run_death_test flag, // parsed when RUN_ALL_TESTS is called. - internal::scoped_ptr<InternalRunDeathTestFlag> internal_run_death_test_flag_; - internal::scoped_ptr<internal::DeathTestFactory> death_test_factory_; + std::unique_ptr<InternalRunDeathTestFlag> internal_run_death_test_flag_; + std::unique_ptr<internal::DeathTestFactory> death_test_factory_; #endif // GTEST_HAS_DEATH_TEST // A per-thread stack of traces created by the SCOPED_TRACE() macro. @@ -984,8 +1015,6 @@ bool ParseNaturalNumber(const ::std::string& str, Integer* number) { const bool parse_success = *end == '\0' && errno == 0; - // TODO(vladl@google.com): Convert this to compile time assertion when it is - // available. GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed)); const Integer result = static_cast<Integer>(parsed); @@ -1049,18 +1078,18 @@ class StreamingListener : public EmptyTestEventListener { MakeConnection(); } - virtual ~SocketWriter() { + ~SocketWriter() override { if (sockfd_ != -1) CloseConnection(); } // Sends a string to the socket. - virtual void Send(const std::string& message) { + void Send(const std::string& message) override { GTEST_CHECK_(sockfd_ != -1) << "Send() can be called only when there is a connection."; - const int len = static_cast<int>(message.length()); - if (write(sockfd_, message.c_str(), len) != len) { + const auto len = static_cast<size_t>(message.length()); + if (write(sockfd_, message.c_str(), len) != static_cast<ssize_t>(len)) { GTEST_LOG_(WARNING) << "stream_result_to: failed to stream to " << host_name_ << ":" << port_num_; @@ -1072,7 +1101,7 @@ class StreamingListener : public EmptyTestEventListener { void MakeConnection(); // Closes the socket. - void CloseConnection() { + void CloseConnection() override { GTEST_CHECK_(sockfd_ != -1) << "CloseConnection() can be called only when there is a connection."; @@ -1098,11 +1127,11 @@ class StreamingListener : public EmptyTestEventListener { explicit StreamingListener(AbstractSocketWriter* socket_writer) : socket_writer_(socket_writer) { Start(); } - void OnTestProgramStart(const UnitTest& /* unit_test */) { + void OnTestProgramStart(const UnitTest& /* unit_test */) override { SendLn("event=TestProgramStart"); } - void OnTestProgramEnd(const UnitTest& unit_test) { + void OnTestProgramEnd(const UnitTest& unit_test) override { // Note that Google Test current only report elapsed time for each // test iteration, not for the entire test program. SendLn("event=TestProgramEnd&passed=" + FormatBool(unit_test.Passed())); @@ -1111,42 +1140,47 @@ class StreamingListener : public EmptyTestEventListener { socket_writer_->CloseConnection(); } - void OnTestIterationStart(const UnitTest& /* unit_test */, int iteration) { + void OnTestIterationStart(const UnitTest& /* unit_test */, + int iteration) override { SendLn("event=TestIterationStart&iteration=" + StreamableToString(iteration)); } - void OnTestIterationEnd(const UnitTest& unit_test, int /* iteration */) { + void OnTestIterationEnd(const UnitTest& unit_test, + int /* iteration */) override { SendLn("event=TestIterationEnd&passed=" + FormatBool(unit_test.Passed()) + "&elapsed_time=" + StreamableToString(unit_test.elapsed_time()) + "ms"); } - void OnTestCaseStart(const TestCase& test_case) { + // Note that "event=TestCaseStart" is a wire format and has to remain + // "case" for compatibilty + void OnTestCaseStart(const TestCase& test_case) override { SendLn(std::string("event=TestCaseStart&name=") + test_case.name()); } - void OnTestCaseEnd(const TestCase& test_case) { - SendLn("event=TestCaseEnd&passed=" + FormatBool(test_case.Passed()) - + "&elapsed_time=" + StreamableToString(test_case.elapsed_time()) - + "ms"); + // Note that "event=TestCaseEnd" is a wire format and has to remain + // "case" for compatibilty + void OnTestCaseEnd(const TestCase& test_case) override { + SendLn("event=TestCaseEnd&passed=" + FormatBool(test_case.Passed()) + + "&elapsed_time=" + StreamableToString(test_case.elapsed_time()) + + "ms"); } - void OnTestStart(const TestInfo& test_info) { + void OnTestStart(const TestInfo& test_info) override { SendLn(std::string("event=TestStart&name=") + test_info.name()); } - void OnTestEnd(const TestInfo& test_info) { + void OnTestEnd(const TestInfo& test_info) override { SendLn("event=TestEnd&passed=" + FormatBool((test_info.result())->Passed()) + "&elapsed_time=" + StreamableToString((test_info.result())->elapsed_time()) + "ms"); } - void OnTestPartResult(const TestPartResult& test_part_result) { + void OnTestPartResult(const TestPartResult& test_part_result) override { const char* file_name = test_part_result.file_name(); - if (file_name == NULL) - file_name = ""; + if (file_name == nullptr) file_name = ""; SendLn("event=TestPartResult&file=" + UrlEncode(file_name) + "&line=" + StreamableToString(test_part_result.line_number()) + "&message=" + UrlEncode(test_part_result.message())); @@ -1162,7 +1196,7 @@ class StreamingListener : public EmptyTestEventListener { std::string FormatBool(bool value) { return value ? "1" : "0"; } - const scoped_ptr<AbstractSocketWriter> socket_writer_; + const std::unique_ptr<AbstractSocketWriter> socket_writer_; GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamingListener); }; // class StreamingListener @@ -1172,4 +1206,6 @@ class StreamingListener : public EmptyTestEventListener { } // namespace internal } // namespace testing +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 + #endif // GTEST_SRC_GTEST_INTERNAL_INL_H_ diff --git a/test/gtest/src/gtest-matchers.cc b/test/gtest/src/gtest-matchers.cc new file mode 100644 index 000000000..7d2fb6851 --- /dev/null +++ b/test/gtest/src/gtest-matchers.cc @@ -0,0 +1,97 @@ +// Copyright 2007, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// The Google C++ Testing and Mocking Framework (Google Test) +// +// This file implements just enough of the matcher interface to allow +// EXPECT_DEATH and friends to accept a matcher argument. + +#include "gtest/internal/gtest-internal.h" +#include "gtest/internal/gtest-port.h" +#include "gtest/gtest-matchers.h" + +#include <string> + +namespace testing { + +// Constructs a matcher that matches a const std::string& whose value is +// equal to s. +Matcher<const std::string&>::Matcher(const std::string& s) { *this = Eq(s); } + +// Constructs a matcher that matches a const std::string& whose value is +// equal to s. +Matcher<const std::string&>::Matcher(const char* s) { + *this = Eq(std::string(s)); +} + +// Constructs a matcher that matches a std::string whose value is equal to +// s. +Matcher<std::string>::Matcher(const std::string& s) { *this = Eq(s); } + +// Constructs a matcher that matches a std::string whose value is equal to +// s. +Matcher<std::string>::Matcher(const char* s) { *this = Eq(std::string(s)); } + +#if GTEST_HAS_ABSL +// Constructs a matcher that matches a const absl::string_view& whose value is +// equal to s. +Matcher<const absl::string_view&>::Matcher(const std::string& s) { + *this = Eq(s); +} + +// Constructs a matcher that matches a const absl::string_view& whose value is +// equal to s. +Matcher<const absl::string_view&>::Matcher(const char* s) { + *this = Eq(std::string(s)); +} + +// Constructs a matcher that matches a const absl::string_view& whose value is +// equal to s. +Matcher<const absl::string_view&>::Matcher(absl::string_view s) { + *this = Eq(std::string(s)); +} + +// Constructs a matcher that matches a absl::string_view whose value is equal to +// s. +Matcher<absl::string_view>::Matcher(const std::string& s) { *this = Eq(s); } + +// Constructs a matcher that matches a absl::string_view whose value is equal to +// s. +Matcher<absl::string_view>::Matcher(const char* s) { + *this = Eq(std::string(s)); +} + +// Constructs a matcher that matches a absl::string_view whose value is equal to +// s. +Matcher<absl::string_view>::Matcher(absl::string_view s) { + *this = Eq(std::string(s)); +} +#endif // GTEST_HAS_ABSL + +} // namespace testing diff --git a/test/gtest/src/gtest-port.cc b/test/gtest/src/gtest-port.cc index f8a0ad65a..fc5ba6bec 100644 --- a/test/gtest/src/gtest-port.cc +++ b/test/gtest/src/gtest-port.cc @@ -26,22 +26,25 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) + #include "gtest/internal/gtest-port.h" #include <limits.h> -#include <stdlib.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <fstream> +#include <memory> #if GTEST_OS_WINDOWS # include <windows.h> # include <io.h> # include <sys/stat.h> # include <map> // Used in ThreadLocal. +# ifdef _MSC_VER +# include <crtdbg.h> +# endif // _MSC_VER #else # include <unistd.h> #endif // GTEST_OS_WINDOWS @@ -52,6 +55,14 @@ # include <mach/vm_map.h> #endif // GTEST_OS_MAC +#if GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \ + GTEST_OS_NETBSD || GTEST_OS_OPENBSD +# include <sys/sysctl.h> +# if GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD +# include <sys/user.h> +# endif +#endif + #if GTEST_OS_QNX # include <devctl.h> # include <fcntl.h> @@ -106,7 +117,7 @@ T ReadProcFileField(const std::string& filename, int field) { size_t GetThreadCount() { const std::string filename = (Message() << "/proc/" << getpid() << "/stat").GetString(); - return ReadProcFileField<int>(filename, 19); + return ReadProcFileField<size_t>(filename, 19); } #elif GTEST_OS_MAC @@ -128,6 +139,81 @@ size_t GetThreadCount() { } } +#elif GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \ + GTEST_OS_NETBSD + +#if GTEST_OS_NETBSD +#undef KERN_PROC +#define KERN_PROC KERN_PROC2 +#define kinfo_proc kinfo_proc2 +#endif + +#if GTEST_OS_DRAGONFLY +#define KP_NLWP(kp) (kp.kp_nthreads) +#elif GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD +#define KP_NLWP(kp) (kp.ki_numthreads) +#elif GTEST_OS_NETBSD +#define KP_NLWP(kp) (kp.p_nlwps) +#endif + +// Returns the number of threads running in the process, or 0 to indicate that +// we cannot detect it. +size_t GetThreadCount() { + int mib[] = { + CTL_KERN, + KERN_PROC, + KERN_PROC_PID, + getpid(), +#if GTEST_OS_NETBSD + sizeof(struct kinfo_proc), + 1, +#endif + }; + u_int miblen = sizeof(mib) / sizeof(mib[0]); + struct kinfo_proc info; + size_t size = sizeof(info); + if (sysctl(mib, miblen, &info, &size, NULL, 0)) { + return 0; + } + return static_cast<size_t>(KP_NLWP(info)); +} +#elif GTEST_OS_OPENBSD + +// Returns the number of threads running in the process, or 0 to indicate that +// we cannot detect it. +size_t GetThreadCount() { + int mib[] = { + CTL_KERN, + KERN_PROC, + KERN_PROC_PID | KERN_PROC_SHOW_THREADS, + getpid(), + sizeof(struct kinfo_proc), + 0, + }; + u_int miblen = sizeof(mib) / sizeof(mib[0]); + + // get number of structs + size_t size; + if (sysctl(mib, miblen, NULL, &size, NULL, 0)) { + return 0; + } + mib[5] = size / mib[4]; + + // populate array of structs + struct kinfo_proc info[mib[5]]; + if (sysctl(mib, miblen, &info, &size, NULL, 0)) { + return 0; + } + + // exclude empty members + int nthreads = 0; + for (int i = 0; i < size / mib[4]; i++) { + if (info[i].p_tid != -1) + nthreads++; + } + return nthreads; +} + #elif GTEST_OS_QNX // Returns the number of threads running in the process, or 0 to indicate that @@ -139,7 +225,7 @@ size_t GetThreadCount() { } procfs_info process_info; const int status = - devctl(fd, DCMD_PROC_INFO, &process_info, sizeof(process_info), NULL); + devctl(fd, DCMD_PROC_INFO, &process_info, sizeof(process_info), nullptr); close(fd); if (status == EOK) { return static_cast<size_t>(process_info.num_threads); @@ -153,7 +239,7 @@ size_t GetThreadCount() { size_t GetThreadCount() { struct procentry64 entry; pid_t pid = getpid(); - int status = getprocs64(&entry, sizeof(entry), NULL, 0, &pid, 1); + int status = getprocs64(&entry, sizeof(entry), nullptr, 0, &pid, 1); if (status == 1) { return entry.pi_thcount; } else { @@ -193,7 +279,7 @@ size_t GetThreadCount() { #if GTEST_IS_THREADSAFE && GTEST_OS_WINDOWS void SleepMilliseconds(int n) { - ::Sleep(n); + ::Sleep(static_cast<DWORD>(n)); } AutoHandle::AutoHandle() @@ -231,15 +317,15 @@ void AutoHandle::Reset(HANDLE handle) { bool AutoHandle::IsCloseable() const { // Different Windows APIs may use either of these values to represent an // invalid handle. - return handle_ != NULL && handle_ != INVALID_HANDLE_VALUE; + return handle_ != nullptr && handle_ != INVALID_HANDLE_VALUE; } Notification::Notification() - : event_(::CreateEvent(NULL, // Default security attributes. - TRUE, // Do not reset automatically. - FALSE, // Initially unset. - NULL)) { // Anonymous event. - GTEST_CHECK_(event_.Get() != NULL); + : event_(::CreateEvent(nullptr, // Default security attributes. + TRUE, // Do not reset automatically. + FALSE, // Initially unset. + nullptr)) { // Anonymous event. + GTEST_CHECK_(event_.Get() != nullptr); } void Notification::Notify() { @@ -262,13 +348,10 @@ Mutex::Mutex() Mutex::~Mutex() { // Static mutexes are leaked intentionally. It is not thread-safe to try // to clean them up. - // TODO(yukawa): Switch to Slim Reader/Writer (SRW) Locks, which requires - // nothing to clean it up but is available only on Vista and later. - // http://msdn.microsoft.com/en-us/library/windows/desktop/aa904937.aspx if (type_ == kDynamic) { ::DeleteCriticalSection(critical_section_); delete critical_section_; - critical_section_ = NULL; + critical_section_ = nullptr; } } @@ -295,6 +378,41 @@ void Mutex::AssertHeld() { << "The current thread is not holding the mutex @" << this; } +namespace { + +#ifdef _MSC_VER +// Use the RAII idiom to flag mem allocs that are intentionally never +// deallocated. The motivation is to silence the false positive mem leaks +// that are reported by the debug version of MS's CRT which can only detect +// if an alloc is missing a matching deallocation. +// Example: +// MemoryIsNotDeallocated memory_is_not_deallocated; +// critical_section_ = new CRITICAL_SECTION; +// +class MemoryIsNotDeallocated +{ + public: + MemoryIsNotDeallocated() : old_crtdbg_flag_(0) { + old_crtdbg_flag_ = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); + // Set heap allocation block type to _IGNORE_BLOCK so that MS debug CRT + // doesn't report mem leak if there's no matching deallocation. + _CrtSetDbgFlag(old_crtdbg_flag_ & ~_CRTDBG_ALLOC_MEM_DF); + } + + ~MemoryIsNotDeallocated() { + // Restore the original _CRTDBG_ALLOC_MEM_DF flag + _CrtSetDbgFlag(old_crtdbg_flag_); + } + + private: + int old_crtdbg_flag_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(MemoryIsNotDeallocated); +}; +#endif // _MSC_VER + +} // namespace + // Initializes owner_thread_id_ and critical_section_ in static mutexes. void Mutex::ThreadSafeLazyInit() { // Dynamic mutexes are initialized in the constructor. @@ -305,7 +423,13 @@ void Mutex::ThreadSafeLazyInit() { // If critical_section_init_phase_ was 0 before the exchange, we // are the first to test it and need to perform the initialization. owner_thread_id_ = 0; - critical_section_ = new CRITICAL_SECTION; + { + // Use RAII to flag that following mem alloc is never deallocated. +#ifdef _MSC_VER + MemoryIsNotDeallocated memory_is_not_deallocated; +#endif // _MSC_VER + critical_section_ = new CRITICAL_SECTION; + } ::InitializeCriticalSection(critical_section_); // Updates the critical_section_init_phase_ to 2 to signal // initialization complete. @@ -344,17 +468,16 @@ class ThreadWithParamSupport : public ThreadWithParamBase { Notification* thread_can_start) { ThreadMainParam* param = new ThreadMainParam(runnable, thread_can_start); DWORD thread_id; - // TODO(yukawa): Consider to use _beginthreadex instead. HANDLE thread_handle = ::CreateThread( - NULL, // Default security. - 0, // Default stack size. + nullptr, // Default security. + 0, // Default stack size. &ThreadWithParamSupport::ThreadMain, - param, // Parameter to ThreadMainStatic - 0x0, // Default creation flags. + param, // Parameter to ThreadMainStatic + 0x0, // Default creation flags. &thread_id); // Need a valid pointer for the call to work under Win98. - GTEST_CHECK_(thread_handle != NULL) << "CreateThread failed with error " - << ::GetLastError() << "."; - if (thread_handle == NULL) { + GTEST_CHECK_(thread_handle != nullptr) + << "CreateThread failed with error " << ::GetLastError() << "."; + if (thread_handle == nullptr) { delete param; } return thread_handle; @@ -366,15 +489,15 @@ class ThreadWithParamSupport : public ThreadWithParamBase { : runnable_(runnable), thread_can_start_(thread_can_start) { } - scoped_ptr<Runnable> runnable_; + std::unique_ptr<Runnable> runnable_; // Does not own. Notification* thread_can_start_; }; static DWORD WINAPI ThreadMain(void* ptr) { // Transfers ownership. - scoped_ptr<ThreadMainParam> param(static_cast<ThreadMainParam*>(ptr)); - if (param->thread_can_start_ != NULL) + std::unique_ptr<ThreadMainParam> param(static_cast<ThreadMainParam*>(ptr)); + if (param->thread_can_start_ != nullptr) param->thread_can_start_->WaitForNotification(); param->runnable_->Run(); return 0; @@ -432,7 +555,7 @@ class ThreadLocalRegistryImpl { thread_local_values .insert(std::make_pair( thread_local_instance, - linked_ptr<ThreadLocalValueHolderBase>( + std::shared_ptr<ThreadLocalValueHolderBase>( thread_local_instance->NewValueForCurrentThread()))) .first; } @@ -441,7 +564,7 @@ class ThreadLocalRegistryImpl { static void OnThreadLocalDestroyed( const ThreadLocalBase* thread_local_instance) { - std::vector<linked_ptr<ThreadLocalValueHolderBase> > value_holders; + std::vector<std::shared_ptr<ThreadLocalValueHolderBase> > value_holders; // Clean up the ThreadLocalValues data structure while holding the lock, but // defer the destruction of the ThreadLocalValueHolderBases. { @@ -469,7 +592,7 @@ class ThreadLocalRegistryImpl { static void OnThreadExit(DWORD thread_id) { GTEST_CHECK_(thread_id != 0) << ::GetLastError(); - std::vector<linked_ptr<ThreadLocalValueHolderBase> > value_holders; + std::vector<std::shared_ptr<ThreadLocalValueHolderBase> > value_holders; // Clean up the ThreadIdToThreadLocals data structure while holding the // lock, but defer the destruction of the ThreadLocalValueHolderBases. { @@ -496,7 +619,8 @@ class ThreadLocalRegistryImpl { private: // In a particular thread, maps a ThreadLocal object to its value. typedef std::map<const ThreadLocalBase*, - linked_ptr<ThreadLocalValueHolderBase> > ThreadLocalValues; + std::shared_ptr<ThreadLocalValueHolderBase> > + ThreadLocalValues; // Stores all ThreadIdToThreadLocals having values in a thread, indexed by // thread's ID. typedef std::map<DWORD, ThreadLocalValues> ThreadIdToThreadLocals; @@ -511,18 +635,17 @@ class ThreadLocalRegistryImpl { HANDLE thread = ::OpenThread(SYNCHRONIZE | THREAD_QUERY_INFORMATION, FALSE, thread_id); - GTEST_CHECK_(thread != NULL); + GTEST_CHECK_(thread != nullptr); // We need to pass a valid thread ID pointer into CreateThread for it // to work correctly under Win98. DWORD watcher_thread_id; HANDLE watcher_thread = ::CreateThread( - NULL, // Default security. - 0, // Default stack size + nullptr, // Default security. + 0, // Default stack size &ThreadLocalRegistryImpl::WatcherThreadFunc, reinterpret_cast<LPVOID>(new ThreadIdAndHandle(thread_id, thread)), - CREATE_SUSPENDED, - &watcher_thread_id); - GTEST_CHECK_(watcher_thread != NULL); + CREATE_SUSPENDED, &watcher_thread_id); + GTEST_CHECK_(watcher_thread != nullptr); // Give the watcher thread the same priority as ours to avoid being // blocked by it. ::SetThreadPriority(watcher_thread, @@ -547,7 +670,10 @@ class ThreadLocalRegistryImpl { // Returns map of thread local instances. static ThreadIdToThreadLocals* GetThreadLocalsMapLocked() { mutex_.AssertHeld(); - static ThreadIdToThreadLocals* map = new ThreadIdToThreadLocals; +#ifdef _MSC_VER + MemoryIsNotDeallocated memory_is_not_deallocated; +#endif // _MSC_VER + static ThreadIdToThreadLocals* map = new ThreadIdToThreadLocals(); return map; } @@ -589,7 +715,7 @@ RE::~RE() { free(const_cast<char*>(pattern_)); } -// Returns true iff regular expression re matches the entire str. +// Returns true if and only if regular expression re matches the entire str. bool RE::FullMatch(const char* str, const RE& re) { if (!re.is_valid_) return false; @@ -597,8 +723,8 @@ bool RE::FullMatch(const char* str, const RE& re) { return regexec(&re.full_regex_, str, 1, &match, 0) == 0; } -// Returns true iff regular expression re matches a substring of str -// (including str itself). +// Returns true if and only if regular expression re matches a substring of +// str (including str itself). bool RE::PartialMatch(const char* str, const RE& re) { if (!re.is_valid_) return false; @@ -638,14 +764,14 @@ void RE::Init(const char* regex) { #elif GTEST_USES_SIMPLE_RE -// Returns true iff ch appears anywhere in str (excluding the +// Returns true if and only if ch appears anywhere in str (excluding the // terminating '\0' character). bool IsInSet(char ch, const char* str) { - return ch != '\0' && strchr(str, ch) != NULL; + return ch != '\0' && strchr(str, ch) != nullptr; } -// Returns true iff ch belongs to the given classification. Unlike -// similar functions in <ctype.h>, these aren't affected by the +// Returns true if and only if ch belongs to the given classification. +// Unlike similar functions in <ctype.h>, these aren't affected by the // current locale. bool IsAsciiDigit(char ch) { return '0' <= ch && ch <= '9'; } bool IsAsciiPunct(char ch) { @@ -658,13 +784,13 @@ bool IsAsciiWordChar(char ch) { ('0' <= ch && ch <= '9') || ch == '_'; } -// Returns true iff "\\c" is a supported escape sequence. +// Returns true if and only if "\\c" is a supported escape sequence. bool IsValidEscape(char c) { return (IsAsciiPunct(c) || IsInSet(c, "dDfnrsStvwW")); } -// Returns true iff the given atom (specified by escaped and pattern) -// matches ch. The result is undefined if the atom is invalid. +// Returns true if and only if the given atom (specified by escaped and +// pattern) matches ch. The result is undefined if the atom is invalid. bool AtomMatchesChar(bool escaped, char pattern_char, char ch) { if (escaped) { // "\\p" where p is pattern_char. switch (pattern_char) { @@ -695,17 +821,14 @@ static std::string FormatRegexSyntaxError(const char* regex, int index) { // Generates non-fatal failures and returns false if regex is invalid; // otherwise returns true. bool ValidateRegex(const char* regex) { - if (regex == NULL) { - // TODO(wan@google.com): fix the source file location in the - // assertion failures to match where the regex is used in user - // code. + if (regex == nullptr) { ADD_FAILURE() << "NULL is not a valid simple regular expression."; return false; } bool is_valid = true; - // True iff ?, *, or + can follow the previous atom. + // True if and only if ?, *, or + can follow the previous atom. bool prev_repeatable = false; for (int i = 0; regex[i]; i++) { if (regex[i] == '\\') { // An escape sequence @@ -781,8 +904,8 @@ bool MatchRepetitionAndRegexAtHead( return false; } -// Returns true iff regex matches a prefix of str. regex must be a -// valid simple regular expression and not start with "^", or the +// Returns true if and only if regex matches a prefix of str. regex must +// be a valid simple regular expression and not start with "^", or the // result is undefined. bool MatchRegexAtHead(const char* regex, const char* str) { if (*regex == '\0') // An empty regex matches a prefix of anything. @@ -812,8 +935,8 @@ bool MatchRegexAtHead(const char* regex, const char* str) { } } -// Returns true iff regex matches any substring of str. regex must be -// a valid simple regular expression, or the result is undefined. +// Returns true if and only if regex matches any substring of str. regex must +// be a valid simple regular expression, or the result is undefined. // // The algorithm is recursive, but the recursion depth doesn't exceed // the regex length, so we won't need to worry about running out of @@ -821,8 +944,7 @@ bool MatchRegexAtHead(const char* regex, const char* str) { // exponential with respect to the regex length + the string length, // but usually it's must faster (often close to linear). bool MatchRegexAnywhere(const char* regex, const char* str) { - if (regex == NULL || str == NULL) - return false; + if (regex == nullptr || str == nullptr) return false; if (*regex == '^') return MatchRegexAtHead(regex + 1, str); @@ -842,21 +964,21 @@ RE::~RE() { free(const_cast<char*>(full_pattern_)); } -// Returns true iff regular expression re matches the entire str. +// Returns true if and only if regular expression re matches the entire str. bool RE::FullMatch(const char* str, const RE& re) { return re.is_valid_ && MatchRegexAnywhere(re.full_pattern_, str); } -// Returns true iff regular expression re matches a substring of str -// (including str itself). +// Returns true if and only if regular expression re matches a substring of +// str (including str itself). bool RE::PartialMatch(const char* str, const RE& re) { return re.is_valid_ && MatchRegexAnywhere(re.pattern_, str); } // Initializes an RE from its string representation. void RE::Init(const char* regex) { - pattern_ = full_pattern_ = NULL; - if (regex != NULL) { + pattern_ = full_pattern_ = nullptr; + if (regex != nullptr) { pattern_ = posix::StrDup(regex); } @@ -894,7 +1016,7 @@ const char kUnknownFile[] = "unknown file"; // Formats a source file path and a line number as they would appear // in an error message from the compiler used to compile this code. GTEST_API_ ::std::string FormatFileLocation(const char* file, int line) { - const std::string file_name(file == NULL ? kUnknownFile : file); + const std::string file_name(file == nullptr ? kUnknownFile : file); if (line < 0) { return file_name + ":"; @@ -913,7 +1035,7 @@ GTEST_API_ ::std::string FormatFileLocation(const char* file, int line) { // to the file location it produces, unlike FormatFileLocation(). GTEST_API_ ::std::string FormatCompilerIndependentFileLocation( const char* file, int line) { - const std::string file_name(file == NULL ? kUnknownFile : file); + const std::string file_name(file == nullptr ? kUnknownFile : file); if (line < 0) return file_name; @@ -942,7 +1064,7 @@ GTestLog::~GTestLog() { // Disable Microsoft deprecation warnings for POSIX functions called from // this class (creat, dup, dup2, and close) -GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996) +GTEST_DISABLE_MSC_DEPRECATED_PUSH_() #if GTEST_HAS_STREAM_REDIRECTION @@ -980,20 +1102,22 @@ class CapturedStream { // code as part of a regular standalone executable, which doesn't // run in a Dalvik process (e.g. when running it through 'adb shell'). // - // The location /sdcard is directly accessible from native code - // and is the only location (unofficially) supported by the Android - // team. It's generally a symlink to the real SD Card mount point - // which can be /mnt/sdcard, /mnt/sdcard0, /system/media/sdcard, or - // other OEM-customized locations. Never rely on these, and always - // use /sdcard. - char name_template[] = "/sdcard/gtest_captured_stream.XXXXXX"; + // The location /data/local/tmp is directly accessible from native code. + // '/sdcard' and other variants cannot be relied on, as they are not + // guaranteed to be mounted, or may have a delay in mounting. + char name_template[] = "/data/local/tmp/gtest_captured_stream.XXXXXX"; # else char name_template[] = "/tmp/captured_stream.XXXXXX"; # endif // GTEST_OS_LINUX_ANDROID const int captured_fd = mkstemp(name_template); + if (captured_fd == -1) { + GTEST_LOG_(WARNING) + << "Failed to create tmp file " << name_template + << " for test; does the test have access to the /tmp directory?"; + } filename_ = name_template; # endif // GTEST_OS_WINDOWS - fflush(NULL); + fflush(nullptr); dup2(captured_fd, fd_); close(captured_fd); } @@ -1005,13 +1129,17 @@ class CapturedStream { std::string GetCapturedString() { if (uncaptured_fd_ != -1) { // Restores the original stream. - fflush(NULL); + fflush(nullptr); dup2(uncaptured_fd_, fd_); close(uncaptured_fd_); uncaptured_fd_ = -1; } FILE* const file = posix::FOpen(filename_.c_str(), "r"); + if (file == nullptr) { + GTEST_LOG_(FATAL) << "Failed to open tmp file " << filename_ + << " for capturing stream."; + } const std::string content = ReadEntireFile(file); posix::FClose(file); return content; @@ -1026,15 +1154,15 @@ class CapturedStream { GTEST_DISALLOW_COPY_AND_ASSIGN_(CapturedStream); }; -GTEST_DISABLE_MSC_WARNINGS_POP_() +GTEST_DISABLE_MSC_DEPRECATED_POP_() -static CapturedStream* g_captured_stderr = NULL; -static CapturedStream* g_captured_stdout = NULL; +static CapturedStream* g_captured_stderr = nullptr; +static CapturedStream* g_captured_stdout = nullptr; // Starts capturing an output stream (stdout/stderr). static void CaptureStream(int fd, const char* stream_name, CapturedStream** stream) { - if (*stream != NULL) { + if (*stream != nullptr) { GTEST_LOG_(FATAL) << "Only one " << stream_name << " capturer can exist at a time."; } @@ -1046,7 +1174,7 @@ static std::string GetCapturedStream(CapturedStream** captured_stream) { const std::string content = (*captured_stream)->GetCapturedString(); delete *captured_stream; - *captured_stream = NULL; + *captured_stream = nullptr; return content; } @@ -1105,10 +1233,11 @@ std::string ReadEntireFile(FILE* file) { } #if GTEST_HAS_DEATH_TEST -static const std::vector<std::string>* g_injected_test_argvs = NULL; // Owned. +static const std::vector<std::string>* g_injected_test_argvs = + nullptr; // Owned. std::vector<std::string> GetInjectableArgvs() { - if (g_injected_test_argvs != NULL) { + if (g_injected_test_argvs != nullptr) { return *g_injected_test_argvs; } return GetArgvs(); @@ -1124,16 +1253,9 @@ void SetInjectableArgvs(const std::vector<std::string>& new_argvs) { new std::vector<std::string>(new_argvs.begin(), new_argvs.end())); } -#if GTEST_HAS_GLOBAL_STRING -void SetInjectableArgvs(const std::vector< ::string>& new_argvs) { - SetInjectableArgvs( - new std::vector<std::string>(new_argvs.begin(), new_argvs.end())); -} -#endif // GTEST_HAS_GLOBAL_STRING - void ClearInjectableArgvs() { delete g_injected_test_argvs; - g_injected_test_argvs = NULL; + g_injected_test_argvs = nullptr; } #endif // GTEST_HAS_DEATH_TEST @@ -1166,7 +1288,7 @@ static std::string FlagToEnvVar(const char* flag) { // unchanged and returns false. bool ParseInt32(const Message& src_text, const char* str, Int32* value) { // Parses the environment variable as a decimal integer. - char* end = NULL; + char* end = nullptr; const long long_value = strtol(str, &end, 10); // NOLINT // Has strtol() consumed all characters in the string? @@ -1205,15 +1327,15 @@ bool ParseInt32(const Message& src_text, const char* str, Int32* value) { // Reads and returns the Boolean environment variable corresponding to // the given flag; if it's not set, returns default_value. // -// The value is considered true iff it's not "0". +// The value is considered true if and only if it's not "0". bool BoolFromGTestEnv(const char* flag, bool default_value) { #if defined(GTEST_GET_BOOL_FROM_ENV_) return GTEST_GET_BOOL_FROM_ENV_(flag, default_value); #else const std::string env_var = FlagToEnvVar(flag); const char* const string_value = posix::GetEnv(env_var.c_str()); - return string_value == NULL ? - default_value : strcmp(string_value, "0") != 0; + return string_value == nullptr ? default_value + : strcmp(string_value, "0") != 0; #endif // defined(GTEST_GET_BOOL_FROM_ENV_) } @@ -1226,7 +1348,7 @@ Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { #else const std::string env_var = FlagToEnvVar(flag); const char* const string_value = posix::GetEnv(env_var.c_str()); - if (string_value == NULL) { + if (string_value == nullptr) { // The environment variable is not set. return default_value; } @@ -1255,7 +1377,7 @@ Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { std::string OutputFlagAlsoCheckEnvVar(){ std::string default_value_for_output_flag = ""; const char* xml_output_file_env = posix::GetEnv("XML_OUTPUT_FILE"); - if (NULL != xml_output_file_env) { + if (nullptr != xml_output_file_env) { default_value_for_output_flag = std::string("xml:") + xml_output_file_env; } return default_value_for_output_flag; @@ -1269,7 +1391,7 @@ const char* StringFromGTestEnv(const char* flag, const char* default_value) { #else const std::string env_var = FlagToEnvVar(flag); const char* const value = posix::GetEnv(env_var.c_str()); - return value == NULL ? default_value : value; + return value == nullptr ? default_value : value; #endif // defined(GTEST_GET_STRING_FROM_ENV_) } diff --git a/test/gtest/src/gtest-printers.cc b/test/gtest/src/gtest-printers.cc index eeba17fbf..3337be312 100644 --- a/test/gtest/src/gtest-printers.cc +++ b/test/gtest/src/gtest-printers.cc @@ -26,8 +26,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) + // Google Test - The Google C++ Testing and Mocking Framework // @@ -60,6 +59,7 @@ using ::std::ostream; // Prints a segment of bytes in the given object. GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ +GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ void PrintByteSegmentInObjectTo(const unsigned char* obj_bytes, size_t start, size_t count, ostream* os) { @@ -90,7 +90,6 @@ void PrintBytesInObjectToImpl(const unsigned char* obj_bytes, size_t count, // If the object size is bigger than kThreshold, we'll have to omit // some details by printing only the first and the last kChunkSize // bytes. - // TODO(wan): let the user control the threshold using a flag. if (count < kThreshold) { PrintByteSegmentInObjectTo(obj_bytes, 0, count, os); } else { @@ -145,7 +144,8 @@ inline bool IsPrintableAscii(wchar_t c) { // which is the type of c. template <typename UnsignedChar, typename Char> static CharFormat PrintAsCharLiteralTo(Char c, ostream* os) { - switch (static_cast<wchar_t>(c)) { + wchar_t w_c = static_cast<wchar_t>(c); + switch (w_c) { case L'\0': *os << "\\0"; break; @@ -177,7 +177,7 @@ static CharFormat PrintAsCharLiteralTo(Char c, ostream* os) { *os << "\\v"; break; default: - if (IsPrintableAscii(c)) { + if (IsPrintableAscii(w_c)) { *os << static_cast<char>(c); return kAsIs; } else { @@ -237,7 +237,7 @@ void PrintCharAndCodeTo(Char c, ostream* os) { if (format == kHexEscape || (1 <= c && c <= 9)) { // Do nothing. } else { - *os << ", 0x" << String::FormatHexInt(static_cast<UnsignedChar>(c)); + *os << ", 0x" << String::FormatHexInt(static_cast<int>(c)); } *os << ")"; } @@ -262,6 +262,7 @@ void PrintTo(wchar_t wc, ostream* os) { template <typename CharType> GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ +GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ static CharFormat PrintCharsAsStringTo( const CharType* begin, size_t len, ostream* os) { @@ -292,6 +293,7 @@ static CharFormat PrintCharsAsStringTo( template <typename CharType> GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ +GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ static void UniversalPrintCharArray( const CharType* begin, size_t len, ostream* os) { @@ -328,7 +330,7 @@ void UniversalPrintArray(const wchar_t* begin, size_t len, ostream* os) { // Prints the given C string to the ostream. void PrintTo(const char* s, ostream* os) { - if (s == NULL) { + if (s == nullptr) { *os << "NULL"; } else { *os << ImplicitCast_<const void*>(s) << " pointing to "; @@ -345,11 +347,11 @@ void PrintTo(const char* s, ostream* os) { #if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) // Prints the given wide C string to the ostream. void PrintTo(const wchar_t* s, ostream* os) { - if (s == NULL) { + if (s == nullptr) { *os << "NULL"; } else { *os << ImplicitCast_<const void*>(s) << " pointing to "; - PrintCharsAsStringTo(s, std::wcslen(s), os); + PrintCharsAsStringTo(s, wcslen(s), os); } } #endif // wchar_t is native @@ -421,17 +423,6 @@ void ConditionalPrintAsText(const char* str, size_t length, ostream* os) { } // anonymous namespace -// Prints a ::string object. -#if GTEST_HAS_GLOBAL_STRING -void PrintStringTo(const ::string& s, ostream* os) { - if (PrintCharsAsStringTo(s.data(), s.size(), os) == kHexEscape) { - if (GTEST_FLAG(print_utf8)) { - ConditionalPrintAsText(s.data(), s.size(), os); - } - } -} -#endif // GTEST_HAS_GLOBAL_STRING - void PrintStringTo(const ::std::string& s, ostream* os) { if (PrintCharsAsStringTo(s.data(), s.size(), os) == kHexEscape) { if (GTEST_FLAG(print_utf8)) { @@ -440,13 +431,6 @@ void PrintStringTo(const ::std::string& s, ostream* os) { } } -// Prints a ::wstring object. -#if GTEST_HAS_GLOBAL_WSTRING -void PrintWideStringTo(const ::wstring& s, ostream* os) { - PrintCharsAsStringTo(s.data(), s.size(), os); -} -#endif // GTEST_HAS_GLOBAL_WSTRING - #if GTEST_HAS_STD_WSTRING void PrintWideStringTo(const ::std::wstring& s, ostream* os) { PrintCharsAsStringTo(s.data(), s.size(), os); diff --git a/test/gtest/src/gtest-test-part.cc b/test/gtest/src/gtest-test-part.cc index 4c5f2e378..178317a6b 100644 --- a/test/gtest/src/gtest-test-part.cc +++ b/test/gtest/src/gtest-test-part.cc @@ -26,8 +26,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: mheule@google.com (Markus Heule) + // // The Google C++ Testing and Mocking Framework (Google Test) @@ -42,18 +41,21 @@ using internal::GetUnitTestImpl; // in it. std::string TestPartResult::ExtractSummary(const char* message) { const char* const stack_trace = strstr(message, internal::kStackTraceMarker); - return stack_trace == NULL ? message : - std::string(message, stack_trace); + return stack_trace == nullptr ? message : std::string(message, stack_trace); } // Prints a TestPartResult object. std::ostream& operator<<(std::ostream& os, const TestPartResult& result) { - return os - << result.file_name() << ":" << result.line_number() << ": " - << (result.type() == TestPartResult::kSuccess ? "Success" : - result.type() == TestPartResult::kFatalFailure ? "Fatal failure" : - "Non-fatal failure") << ":\n" - << result.message() << std::endl; + return os << result.file_name() << ":" << result.line_number() << ": " + << (result.type() == TestPartResult::kSuccess + ? "Success" + : result.type() == TestPartResult::kSkip + ? "Skipped" + : result.type() == TestPartResult::kFatalFailure + ? "Fatal failure" + : "Non-fatal failure") + << ":\n" + << result.message() << std::endl; } // Appends a TestPartResult to the array. @@ -68,7 +70,7 @@ const TestPartResult& TestPartResultArray::GetTestPartResult(int index) const { internal::posix::Abort(); } - return array_[index]; + return array_[static_cast<size_t>(index)]; } // Returns the number of TestPartResult objects in the array. diff --git a/test/gtest/src/gtest-typed-test.cc b/test/gtest/src/gtest-typed-test.cc index b35824346..8677caf73 100644 --- a/test/gtest/src/gtest-typed-test.cc +++ b/test/gtest/src/gtest-typed-test.cc @@ -26,8 +26,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) + #include "gtest/gtest-typed-test.h" @@ -49,7 +48,7 @@ static const char* SkipSpaces(const char* str) { static std::vector<std::string> SplitIntoTestNames(const char* src) { std::vector<std::string> name_vec; src = SkipSpaces(src); - for (; src != NULL; src = SkipComma(src)) { + for (; src != nullptr; src = SkipComma(src)) { name_vec.push_back(StripTrailingSpaces(GetPrefixUntilComma(src))); } return name_vec; @@ -58,7 +57,7 @@ static std::vector<std::string> SplitIntoTestNames(const char* src) { // Verifies that registered_tests match the test names in // registered_tests_; returns registered_tests if successful, or // aborts the program otherwise. -const char* TypedTestCasePState::VerifyRegisteredTestNames( +const char* TypedTestSuitePState::VerifyRegisteredTestNames( const char* file, int line, const char* registered_tests) { typedef RegisteredTestsMap::const_iterator RegisteredTestIter; registered_ = true; @@ -90,7 +89,7 @@ const char* TypedTestCasePState::VerifyRegisteredTestNames( tests.insert(name); } else { errors << "No test named " << name - << " can be found in this test case.\n"; + << " can be found in this test suite.\n"; } } diff --git a/test/gtest/src/gtest.cc b/test/gtest/src/gtest.cc index 5a36ead36..1dff1a6af 100644 --- a/test/gtest/src/gtest.cc +++ b/test/gtest/src/gtest.cc @@ -26,8 +26,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) + // // The Google C++ Testing and Mocking Framework (Google Test) @@ -59,8 +58,6 @@ #if GTEST_OS_LINUX -// TODO(kenton@google.com): Use autoconf to detect availability of -// gettimeofday(). # define GTEST_HAS_GETTIMEOFDAY_ 1 # include <fcntl.h> // NOLINT @@ -73,10 +70,6 @@ # include <unistd.h> // NOLINT # include <string> -#elif GTEST_OS_SYMBIAN -# define GTEST_HAS_GETTIMEOFDAY_ 1 -# include <sys/time.h> // NOLINT - #elif GTEST_OS_ZOS # define GTEST_HAS_GETTIMEOFDAY_ 1 # include <sys/time.h> // NOLINT @@ -91,6 +84,11 @@ #elif GTEST_OS_WINDOWS // We are on Windows proper. +# include <windows.h> // NOLINT +# undef min + +# include <crtdbg.h> // NOLINT +# include <debugapi.h> // NOLINT # include <io.h> // NOLINT # include <sys/timeb.h> // NOLINT # include <sys/types.h> // NOLINT @@ -98,25 +96,13 @@ # if GTEST_OS_WINDOWS_MINGW // MinGW has gettimeofday() but not _ftime64(). -// TODO(kenton@google.com): Use autoconf to detect availability of -// gettimeofday(). -// TODO(kenton@google.com): There are other ways to get the time on -// Windows, like GetTickCount() or GetSystemTimeAsFileTime(). MinGW -// supports these. consider using them instead. # define GTEST_HAS_GETTIMEOFDAY_ 1 # include <sys/time.h> // NOLINT # endif // GTEST_OS_WINDOWS_MINGW -// cpplint thinks that the header is already included, so we want to -// silence it. -# include <windows.h> // NOLINT -# undef min - #else // Assume other platforms have gettimeofday(). -// TODO(kenton@google.com): Use autoconf to detect availability of -// gettimeofday(). # define GTEST_HAS_GETTIMEOFDAY_ 1 // cpplint thinks that the header is already included, so we want to @@ -143,6 +129,19 @@ # define vsnprintf _vsnprintf #endif // GTEST_OS_WINDOWS +#if GTEST_OS_MAC +#ifndef GTEST_OS_IOS +#include <crt_externs.h> +#endif +#endif + +#if GTEST_HAS_ABSL +#include "absl/debugging/failure_signal_handler.h" +#include "absl/debugging/stacktrace.h" +#include "absl/debugging/symbolize.h" +#include "absl/strings/str_cat.h" +#endif // GTEST_HAS_ABSL + namespace testing { using internal::CountIf; @@ -152,14 +151,14 @@ using internal::Shuffle; // Constants. -// A test whose test case name or test name matches this filter is +// A test whose test suite name or test name matches this filter is // disabled and not run. static const char kDisableTestFilter[] = "DISABLED_*:*/DISABLED_*"; -// A test case whose name matches this filter is considered a death -// test case and will be run before test cases whose name doesn't +// A test suite whose name matches this filter is considered a death +// test suite and will be run before test suites whose name doesn't // match this filter. -static const char kDeathTestCaseFilter[] = "*DeathTest:*DeathTest/*"; +static const char kDeathTestSuiteFilter[] = "*DeathTest:*DeathTest/*"; // A test filter that matches everything. static const char kUniversalFilter[] = "*"; @@ -182,19 +181,35 @@ namespace internal { // stack trace. const char kStackTraceMarker[] = "\nStack trace:\n"; -// g_help_flag is true iff the --help flag or an equivalent form is -// specified on the command line. +// g_help_flag is true if and only if the --help flag or an equivalent form +// is specified on the command line. bool g_help_flag = false; +// Utilty function to Open File for Writing +static FILE* OpenFileForWriting(const std::string& output_file) { + FILE* fileout = nullptr; + FilePath output_file_path(output_file); + FilePath output_dir(output_file_path.RemoveFileName()); + + if (output_dir.CreateDirectoriesRecursively()) { + fileout = posix::FOpen(output_file.c_str(), "w"); + } + if (fileout == nullptr) { + GTEST_LOG_(FATAL) << "Unable to open file \"" << output_file << "\""; + } + return fileout; +} + } // namespace internal +// Bazel passes in the argument to '--test_filter' via the TESTBRIDGE_TEST_ONLY +// environment variable. static const char* GetDefaultFilter() { -#ifdef GTEST_TEST_FILTER_ENV_VAR_ - const char* const testbridge_test_only = getenv(GTEST_TEST_FILTER_ENV_VAR_); - if (testbridge_test_only != NULL) { + const char* const testbridge_test_only = + internal::posix::GetEnv("TESTBRIDGE_TEST_ONLY"); + if (testbridge_test_only != nullptr) { return testbridge_test_only; } -#endif // GTEST_TEST_FILTER_ENV_VAR_ return kUniversalFilter; } @@ -204,15 +219,14 @@ GTEST_DEFINE_bool_( "Run disabled tests too, in addition to the tests normally being run."); GTEST_DEFINE_bool_( - break_on_failure, - internal::BoolFromGTestEnv("break_on_failure", false), - "True iff a failed assertion should be a debugger break-point."); + break_on_failure, internal::BoolFromGTestEnv("break_on_failure", false), + "True if and only if a failed assertion should be a debugger " + "break-point."); -GTEST_DEFINE_bool_( - catch_exceptions, - internal::BoolFromGTestEnv("catch_exceptions", true), - "True iff " GTEST_NAME_ - " should catch exceptions and treat them as test failures."); +GTEST_DEFINE_bool_(catch_exceptions, + internal::BoolFromGTestEnv("catch_exceptions", true), + "True if and only if " GTEST_NAME_ + " should catch exceptions and treat them as test failures."); GTEST_DEFINE_string_( color, @@ -231,6 +245,13 @@ GTEST_DEFINE_string_( "exclude). A test is run if it matches one of the positive " "patterns and does not match any of the negative patterns."); +GTEST_DEFINE_bool_( + install_failure_signal_handler, + internal::BoolFromGTestEnv("install_failure_signal_handler", false), + "If true and supported on the current platform, " GTEST_NAME_ " should " + "install a signal handler that dumps debugging information when fatal " + "signals are raised."); + GTEST_DEFINE_bool_(list_tests, false, "List all tests without running them."); @@ -252,17 +273,13 @@ GTEST_DEFINE_string_( "executable's name and, if necessary, made unique by adding " "digits."); -GTEST_DEFINE_bool_( - print_time, - internal::BoolFromGTestEnv("print_time", true), - "True iff " GTEST_NAME_ - " should display elapsed time in text output."); +GTEST_DEFINE_bool_(print_time, internal::BoolFromGTestEnv("print_time", true), + "True if and only if " GTEST_NAME_ + " should display elapsed time in text output."); -GTEST_DEFINE_bool_( - print_utf8, - internal::BoolFromGTestEnv("print_utf8", true), - "True iff " GTEST_NAME_ - " prints UTF8 characters as text."); +GTEST_DEFINE_bool_(print_utf8, internal::BoolFromGTestEnv("print_utf8", true), + "True if and only if " GTEST_NAME_ + " prints UTF8 characters as text."); GTEST_DEFINE_int32_( random_seed, @@ -276,16 +293,14 @@ GTEST_DEFINE_int32_( "How many times to repeat each test. Specify a negative number " "for repeating forever. Useful for shaking out flaky tests."); -GTEST_DEFINE_bool_( - show_internal_stack_frames, false, - "True iff " GTEST_NAME_ " should include internal stack frames when " - "printing test failure stack traces."); +GTEST_DEFINE_bool_(show_internal_stack_frames, false, + "True if and only if " GTEST_NAME_ + " should include internal stack frames when " + "printing test failure stack traces."); -GTEST_DEFINE_bool_( - shuffle, - internal::BoolFromGTestEnv("shuffle", false), - "True iff " GTEST_NAME_ - " should randomize tests' order on every run."); +GTEST_DEFINE_bool_(shuffle, internal::BoolFromGTestEnv("shuffle", false), + "True if and only if " GTEST_NAME_ + " should randomize tests' order on every run."); GTEST_DEFINE_int32_( stack_trace_depth, @@ -336,16 +351,16 @@ UInt32 Random::Generate(UInt32 range) { return state_ % range; } -// GTestIsInitialized() returns true iff the user has initialized +// GTestIsInitialized() returns true if and only if the user has initialized // Google Test. Useful for catching the user mistake of not initializing // Google Test before calling RUN_ALL_TESTS(). static bool GTestIsInitialized() { return GetArgvs().size() > 0; } -// Iterates over a vector of TestCases, keeping a running sum of the +// Iterates over a vector of TestSuites, keeping a running sum of the // results of calling a given int-returning method on each. // Returns the sum. -static int SumOverTestCaseList(const std::vector<TestCase*>& case_list, - int (TestCase::*method)() const) { +static int SumOverTestSuiteList(const std::vector<TestSuite*>& case_list, + int (TestSuite::*method)() const) { int sum = 0; for (size_t i = 0; i < case_list.size(); i++) { sum += (case_list[i]->*method)(); @@ -353,20 +368,20 @@ static int SumOverTestCaseList(const std::vector<TestCase*>& case_list, return sum; } -// Returns true iff the test case passed. -static bool TestCasePassed(const TestCase* test_case) { - return test_case->should_run() && test_case->Passed(); +// Returns true if and only if the test suite passed. +static bool TestSuitePassed(const TestSuite* test_suite) { + return test_suite->should_run() && test_suite->Passed(); } -// Returns true iff the test case failed. -static bool TestCaseFailed(const TestCase* test_case) { - return test_case->should_run() && test_case->Failed(); +// Returns true if and only if the test suite failed. +static bool TestSuiteFailed(const TestSuite* test_suite) { + return test_suite->should_run() && test_suite->Failed(); } -// Returns true iff test_case contains at least one test that should -// run. -static bool ShouldRunTestCase(const TestCase* test_case) { - return test_case->should_run(); +// Returns true if and only if test_suite contains at least one test that +// should run. +static bool ShouldRunTestSuite(const TestSuite* test_suite) { + return test_suite->should_run(); } // AssertHelper constructor. @@ -392,11 +407,8 @@ void AssertHelper::operator=(const Message& message) const { ); // NOLINT } -// Mutex for linked pointers. -GTEST_API_ GTEST_DEFINE_STATIC_MUTEX_(g_linked_ptr_mutex); - // A copy of all command line arguments. Set by InitGoogleTest(). -::std::vector<std::string> g_argvs; +static ::std::vector<std::string> g_argvs; ::std::vector<std::string> GetArgvs() { #if defined(GTEST_CUSTOM_GET_ARGVS_) @@ -414,7 +426,7 @@ ::std::vector<std::string> GetArgvs() { FilePath GetCurrentExecutableName() { FilePath result; -#if GTEST_OS_WINDOWS +#if GTEST_OS_WINDOWS || GTEST_OS_OS2 result.Set(FilePath(GetArgvs()[0]).RemoveExtension("exe")); #else result.Set(FilePath(GetArgvs()[0])); @@ -428,27 +440,24 @@ FilePath GetCurrentExecutableName() { // Returns the output format, or "" for normal printed output. std::string UnitTestOptions::GetOutputFormat() { const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); - if (gtest_output_flag == NULL) return std::string(""); - const char* const colon = strchr(gtest_output_flag, ':'); - return (colon == NULL) ? - std::string(gtest_output_flag) : - std::string(gtest_output_flag, colon - gtest_output_flag); + return (colon == nullptr) + ? std::string(gtest_output_flag) + : std::string(gtest_output_flag, + static_cast<size_t>(colon - gtest_output_flag)); } // Returns the name of the requested output file, or the default if none // was explicitly specified. std::string UnitTestOptions::GetAbsolutePathToOutputFile() { const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); - if (gtest_output_flag == NULL) - return ""; std::string format = GetOutputFormat(); if (format.empty()) format = std::string(kDefaultOutputFormat); const char* const colon = strchr(gtest_output_flag, ':'); - if (colon == NULL) + if (colon == nullptr) return internal::FilePath::MakeFileName( internal::FilePath( UnitTest::GetInstance()->original_working_dir()), @@ -457,10 +466,6 @@ std::string UnitTestOptions::GetAbsolutePathToOutputFile() { internal::FilePath output_name(colon + 1); if (!output_name.IsAbsolutePath()) - // TODO(wan@google.com): on Windows \some\path is not an absolute - // path (as its meaning depends on the current drive), yet the - // following logic for turning it into an absolute path is wrong. - // Fix it. output_name = internal::FilePath::ConcatPaths( internal::FilePath(UnitTest::GetInstance()->original_working_dir()), internal::FilePath(colon + 1)); @@ -474,8 +479,8 @@ std::string UnitTestOptions::GetAbsolutePathToOutputFile() { return result.string(); } -// Returns true iff the wildcard pattern matches the string. The -// first ':' or '\0' character in pattern marks the end of it. +// Returns true if and only if the wildcard pattern matches the string. +// The first ':' or '\0' character in pattern marks the end of it. // // This recursive algorithm isn't very efficient, but is clear and // works well enough for matching test names, which are short. @@ -508,7 +513,7 @@ bool UnitTestOptions::MatchesFilter( cur_pattern = strchr(cur_pattern, ':'); // Returns if no more pattern can be found. - if (cur_pattern == NULL) { + if (cur_pattern == nullptr) { return false; } @@ -517,11 +522,11 @@ bool UnitTestOptions::MatchesFilter( } } -// Returns true iff the user-specified filter matches the test case -// name and the test name. -bool UnitTestOptions::FilterMatchesTest(const std::string &test_case_name, - const std::string &test_name) { - const std::string& full_name = test_case_name + "." + test_name.c_str(); +// Returns true if and only if the user-specified filter matches the test +// suite name and the test name. +bool UnitTestOptions::FilterMatchesTest(const std::string& test_suite_name, + const std::string& test_name) { + const std::string& full_name = test_suite_name + "." + test_name.c_str(); // Split --gtest_filter at '-', if there is one, to separate into // positive filter and negative filter portions @@ -529,7 +534,7 @@ bool UnitTestOptions::FilterMatchesTest(const std::string &test_case_name, const char* const dash = strchr(p, '-'); std::string positive; std::string negative; - if (dash == NULL) { + if (dash == nullptr) { positive = GTEST_FLAG(filter).c_str(); // Whole string is a positive filter negative = ""; } else { @@ -674,7 +679,7 @@ static AssertionResult HasOneFailure(const char* /* results_expr */, << r; } - if (strstr(r.message(), substr.c_str()) == NULL) { + if (strstr(r.message(), substr.c_str()) == nullptr) { return AssertionFailure() << "Expected: " << expected << " containing \"" << substr << "\"\n" << " Actual:\n" @@ -743,61 +748,66 @@ void UnitTestImpl::SetTestPartResultReporterForCurrentThread( per_thread_test_part_result_reporter_.set(reporter); } -// Gets the number of successful test cases. -int UnitTestImpl::successful_test_case_count() const { - return CountIf(test_cases_, TestCasePassed); +// Gets the number of successful test suites. +int UnitTestImpl::successful_test_suite_count() const { + return CountIf(test_suites_, TestSuitePassed); } -// Gets the number of failed test cases. -int UnitTestImpl::failed_test_case_count() const { - return CountIf(test_cases_, TestCaseFailed); +// Gets the number of failed test suites. +int UnitTestImpl::failed_test_suite_count() const { + return CountIf(test_suites_, TestSuiteFailed); } -// Gets the number of all test cases. -int UnitTestImpl::total_test_case_count() const { - return static_cast<int>(test_cases_.size()); +// Gets the number of all test suites. +int UnitTestImpl::total_test_suite_count() const { + return static_cast<int>(test_suites_.size()); } -// Gets the number of all test cases that contain at least one test +// Gets the number of all test suites that contain at least one test // that should run. -int UnitTestImpl::test_case_to_run_count() const { - return CountIf(test_cases_, ShouldRunTestCase); +int UnitTestImpl::test_suite_to_run_count() const { + return CountIf(test_suites_, ShouldRunTestSuite); } // Gets the number of successful tests. int UnitTestImpl::successful_test_count() const { - return SumOverTestCaseList(test_cases_, &TestCase::successful_test_count); + return SumOverTestSuiteList(test_suites_, &TestSuite::successful_test_count); +} + +// Gets the number of skipped tests. +int UnitTestImpl::skipped_test_count() const { + return SumOverTestSuiteList(test_suites_, &TestSuite::skipped_test_count); } // Gets the number of failed tests. int UnitTestImpl::failed_test_count() const { - return SumOverTestCaseList(test_cases_, &TestCase::failed_test_count); + return SumOverTestSuiteList(test_suites_, &TestSuite::failed_test_count); } // Gets the number of disabled tests that will be reported in the XML report. int UnitTestImpl::reportable_disabled_test_count() const { - return SumOverTestCaseList(test_cases_, - &TestCase::reportable_disabled_test_count); + return SumOverTestSuiteList(test_suites_, + &TestSuite::reportable_disabled_test_count); } // Gets the number of disabled tests. int UnitTestImpl::disabled_test_count() const { - return SumOverTestCaseList(test_cases_, &TestCase::disabled_test_count); + return SumOverTestSuiteList(test_suites_, &TestSuite::disabled_test_count); } // Gets the number of tests to be printed in the XML report. int UnitTestImpl::reportable_test_count() const { - return SumOverTestCaseList(test_cases_, &TestCase::reportable_test_count); + return SumOverTestSuiteList(test_suites_, &TestSuite::reportable_test_count); } // Gets the number of all tests. int UnitTestImpl::total_test_count() const { - return SumOverTestCaseList(test_cases_, &TestCase::total_test_count); + return SumOverTestSuiteList(test_suites_, &TestSuite::total_test_count); } // Gets the number of tests that should run. int UnitTestImpl::test_to_run_count() const { - return SumOverTestCaseList(test_cases_, &TestCase::test_to_run_count); + return SumOverTestSuiteList(test_suites_, &TestSuite::test_to_run_count); } // Returns the current OS stack trace as an std::string. @@ -831,8 +841,6 @@ TimeInMillis GetTimeInMillis() { SYSTEMTIME now_systime; FILETIME now_filetime; ULARGE_INTEGER now_int64; - // TODO(kenton@google.com): Shouldn't this just use - // GetSystemTimeAsFileTime()? GetSystemTime(&now_systime); if (SystemTimeToFileTime(&now_systime, &now_filetime)) { now_int64.LowPart = now_filetime.dwLowDateTime; @@ -847,16 +855,14 @@ TimeInMillis GetTimeInMillis() { // MSVC 8 deprecates _ftime64(), so we want to suppress warning 4996 // (deprecated function) there. - // TODO(kenton@google.com): Use GetTickCount()? Or use - // SystemTimeToFileTime() - GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996) + GTEST_DISABLE_MSC_DEPRECATED_PUSH_() _ftime64(&now); - GTEST_DISABLE_MSC_WARNINGS_POP_() + GTEST_DISABLE_MSC_DEPRECATED_POP_() return static_cast<TimeInMillis>(now.time) * 1000 + now.millitm; #elif GTEST_HAS_GETTIMEOFDAY_ struct timeval now; - gettimeofday(&now, NULL); + gettimeofday(&now, nullptr); return static_cast<TimeInMillis>(now.tv_sec) * 1000 + now.tv_usec / 1000; #else # error "Don't know how to get the current time on your system." @@ -873,11 +879,10 @@ TimeInMillis GetTimeInMillis() { // value using delete[]. Returns the wide string, or NULL if the // input is NULL. LPCWSTR String::AnsiToUtf16(const char* ansi) { - if (!ansi) return NULL; + if (!ansi) return nullptr; const int length = strlen(ansi); const int unicode_length = - MultiByteToWideChar(CP_ACP, 0, ansi, length, - NULL, 0); + MultiByteToWideChar(CP_ACP, 0, ansi, length, nullptr, 0); WCHAR* unicode = new WCHAR[unicode_length + 1]; MultiByteToWideChar(CP_ACP, 0, ansi, length, unicode, unicode_length); @@ -890,33 +895,33 @@ LPCWSTR String::AnsiToUtf16(const char* ansi) { // value using delete[]. Returns the ANSI string, or NULL if the // input is NULL. const char* String::Utf16ToAnsi(LPCWSTR utf16_str) { - if (!utf16_str) return NULL; - const int ansi_length = - WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, - NULL, 0, NULL, NULL); + if (!utf16_str) return nullptr; + const int ansi_length = WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, nullptr, + 0, nullptr, nullptr); char* ansi = new char[ansi_length + 1]; - WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, - ansi, ansi_length, NULL, NULL); + WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, ansi, ansi_length, nullptr, + nullptr); ansi[ansi_length] = 0; return ansi; } #endif // GTEST_OS_WINDOWS_MOBILE -// Compares two C strings. Returns true iff they have the same content. +// Compares two C strings. Returns true if and only if they have the same +// content. // // Unlike strcmp(), this function can handle NULL argument(s). A NULL // C string is considered different to any non-NULL C string, // including the empty string. bool String::CStringEquals(const char * lhs, const char * rhs) { - if ( lhs == NULL ) return rhs == NULL; + if (lhs == nullptr) return rhs == nullptr; - if ( rhs == NULL ) return false; + if (rhs == nullptr) return false; return strcmp(lhs, rhs) == 0; } -#if GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING +#if GTEST_HAS_STD_WSTRING // Converts an array of wide chars to a narrow string using the UTF-8 // encoding, and streams the result to the given Message object. @@ -934,7 +939,7 @@ static void StreamWideCharsToMessage(const wchar_t* wstr, size_t length, } } -#endif // GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING +#endif // GTEST_HAS_STD_WSTRING void SplitString(const ::std::string& str, char delimiter, ::std::vector< ::std::string>* dest) { @@ -984,15 +989,6 @@ Message& Message::operator <<(const ::std::wstring& wstr) { } #endif // GTEST_HAS_STD_WSTRING -#if GTEST_HAS_GLOBAL_WSTRING -// Converts the given wide string to a narrow string using the UTF-8 -// encoding, and streams the result to this Message object. -Message& Message::operator <<(const ::wstring& wstr) { - internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); - return *this; -} -#endif // GTEST_HAS_GLOBAL_WSTRING - // Gets the text streamed to this object so far as an std::string. // Each '\0' character in the buffer is replaced with "\\0". std::string Message::GetString() const { @@ -1003,10 +999,9 @@ std::string Message::GetString() const { // Used in EXPECT_TRUE/FALSE(assertion_result). AssertionResult::AssertionResult(const AssertionResult& other) : success_(other.success_), - message_(other.message_.get() != NULL ? - new ::std::string(*other.message_) : - static_cast< ::std::string*>(NULL)) { -} + message_(other.message_.get() != nullptr + ? new ::std::string(*other.message_) + : static_cast< ::std::string*>(nullptr)) {} // Swaps two AssertionResults. void AssertionResult::swap(AssertionResult& other) { @@ -1018,8 +1013,7 @@ void AssertionResult::swap(AssertionResult& other) { // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. AssertionResult AssertionResult::operator!() const { AssertionResult negation(!success_); - if (message_.get() != NULL) - negation << *message_; + if (message_.get() != nullptr) negation << *message_; return negation; } @@ -1245,9 +1239,10 @@ std::string CreateUnifiedDiff(const std::vector<std::string>& left, for (; edit_i < edits.size(); ++edit_i) { if (n_suffix >= context) { // Continue only if the next hunk is very close. - std::vector<EditType>::const_iterator it = edits.begin() + edit_i; + auto it = edits.begin() + static_cast<int>(edit_i); while (it != edits.end() && *it == kMatch) ++it; - if (it == edits.end() || (it - edits.begin()) - edit_i >= context) { + if (it == edits.end() || + static_cast<size_t>(it - edits.begin()) - edit_i >= context) { // There is no next edit or it is too far away. break; } @@ -1323,7 +1318,7 @@ std::vector<std::string> SplitEscapedString(const std::string& str) { // lhs_value: "5" // rhs_value: "6" // -// The ignoring_case parameter is true iff the assertion is a +// The ignoring_case parameter is true if and only if the assertion is a // *_STRCASEEQ*. When it's true, the string "Ignoring case" will // be inserted into the message. AssertionResult EqFailure(const char* lhs_expression, @@ -1386,8 +1381,6 @@ AssertionResult DoubleNearPredFormat(const char* expr1, const double diff = fabs(val1 - val2); if (diff <= abs_error) return AssertionSuccess(); - // TODO(wan): do not print the value of an expression if it's - // already a literal. return AssertionFailure() << "The difference between " << expr1 << " and " << expr2 << " is " << diff << ", which exceeds " << abs_error_expr << ", where\n" @@ -1568,22 +1561,20 @@ namespace { // Helper functions for implementing IsSubString() and IsNotSubstring(). -// This group of overloaded functions return true iff needle is a -// substring of haystack. NULL is considered a substring of itself -// only. +// This group of overloaded functions return true if and only if needle +// is a substring of haystack. NULL is considered a substring of +// itself only. bool IsSubstringPred(const char* needle, const char* haystack) { - if (needle == NULL || haystack == NULL) - return needle == haystack; + if (needle == nullptr || haystack == nullptr) return needle == haystack; - return strstr(haystack, needle) != NULL; + return strstr(haystack, needle) != nullptr; } bool IsSubstringPred(const wchar_t* needle, const wchar_t* haystack) { - if (needle == NULL || haystack == NULL) - return needle == haystack; + if (needle == nullptr || haystack == nullptr) return needle == haystack; - return wcsstr(haystack, needle) != NULL; + return wcsstr(haystack, needle) != nullptr; } // StringType here can be either ::std::string or ::std::wstring. @@ -1697,12 +1688,12 @@ AssertionResult HRESULTFailureHelper(const char* expr, // Gets the system's human readable message string for this HRESULT. char error_text[kBufSize] = { '\0' }; DWORD message_length = ::FormatMessageA(kFlags, - 0, // no source, we're asking system - hr, // the error - 0, // no line width restrictions + 0, // no source, we're asking system + static_cast<DWORD>(hr), // the error + 0, // no line width restrictions error_text, // output buffer - kBufSize, // buf size - NULL); // no arguments for inserts + kBufSize, // buf size + nullptr); // no arguments for inserts // Trims tailing white space (FormatMessage leaves a trailing CR-LF) for (; message_length && IsSpace(error_text[message_length - 1]); --message_length) { @@ -1776,7 +1767,7 @@ inline UInt32 ChopLowBits(UInt32* bits, int n) { // to "(Invalid Unicode 0xXXXXXXXX)". std::string CodePointToUtf8(UInt32 code_point) { if (code_point > kMaxCodePoint4) { - return "(Invalid Unicode 0x" + String::FormatHexInt(code_point) + ")"; + return "(Invalid Unicode 0x" + String::FormatHexUInt32(code_point) + ")"; } char str[5]; // Big enough for the largest valid code point. @@ -1804,7 +1795,7 @@ std::string CodePointToUtf8(UInt32 code_point) { // The following two functions only make sense if the system // uses UTF-16 for wide string encoding. All supported systems -// with 16 bit wchar_t (Windows, Cygwin, Symbian OS) do use UTF-16. +// with 16 bit wchar_t (Windows, Cygwin) do use UTF-16. // Determines if the arguments constitute UTF-16 surrogate pair // and thus should be combined into a single Unicode code point @@ -1817,17 +1808,20 @@ inline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) { // Creates a Unicode code point from UTF16 surrogate pair. inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first, wchar_t second) { + const auto first_u = static_cast<UInt32>(first); + const auto second_u = static_cast<UInt32>(second); const UInt32 mask = (1 << 10) - 1; - return (sizeof(wchar_t) == 2) ? - (((first & mask) << 10) | (second & mask)) + 0x10000 : - // This function should not be called when the condition is - // false, but we provide a sensible default in case it is. - static_cast<UInt32>(first); + return (sizeof(wchar_t) == 2) + ? (((first_u & mask) << 10) | (second_u & mask)) + 0x10000 + : + // This function should not be called when the condition is + // false, but we provide a sensible default in case it is. + first_u; } // Converts a wide string to a narrow string in UTF-8 encoding. // The wide string is assumed to have the following encoding: -// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS) +// UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin) // UTF-32 if sizeof(wchar_t) == 4 (on Linux) // Parameter str points to a null-terminated wide string. // Parameter num_chars may additionally limit the number @@ -1864,21 +1858,21 @@ std::string WideStringToUtf8(const wchar_t* str, int num_chars) { // Converts a wide C string to an std::string using the UTF-8 encoding. // NULL will be converted to "(null)". std::string String::ShowWideCString(const wchar_t * wide_c_str) { - if (wide_c_str == NULL) return "(null)"; + if (wide_c_str == nullptr) return "(null)"; return internal::WideStringToUtf8(wide_c_str, -1); } -// Compares two wide C strings. Returns true iff they have the same -// content. +// Compares two wide C strings. Returns true if and only if they have the +// same content. // // Unlike wcscmp(), this function can handle NULL argument(s). A NULL // C string is considered different to any non-NULL C string, // including the empty string. bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) { - if (lhs == NULL) return rhs == NULL; + if (lhs == nullptr) return rhs == nullptr; - if (rhs == NULL) return false; + if (rhs == nullptr) return false; return wcscmp(lhs, rhs) == 0; } @@ -1914,37 +1908,35 @@ AssertionResult CmpHelperSTRNE(const char* s1_expression, << " vs " << PrintToString(s2); } -// Compares two C strings, ignoring case. Returns true iff they have +// Compares two C strings, ignoring case. Returns true if and only if they have // the same content. // // Unlike strcasecmp(), this function can handle NULL argument(s). A // NULL C string is considered different to any non-NULL C string, // including the empty string. bool String::CaseInsensitiveCStringEquals(const char * lhs, const char * rhs) { - if (lhs == NULL) - return rhs == NULL; - if (rhs == NULL) - return false; + if (lhs == nullptr) return rhs == nullptr; + if (rhs == nullptr) return false; return posix::StrCaseCmp(lhs, rhs) == 0; } - // Compares two wide C strings, ignoring case. Returns true iff they - // have the same content. - // - // Unlike wcscasecmp(), this function can handle NULL argument(s). - // A NULL C string is considered different to any non-NULL wide C string, - // including the empty string. - // NB: The implementations on different platforms slightly differ. - // On windows, this method uses _wcsicmp which compares according to LC_CTYPE - // environment variable. On GNU platform this method uses wcscasecmp - // which compares according to LC_CTYPE category of the current locale. - // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the - // current locale. +// Compares two wide C strings, ignoring case. Returns true if and only if they +// have the same content. +// +// Unlike wcscasecmp(), this function can handle NULL argument(s). +// A NULL C string is considered different to any non-NULL wide C string, +// including the empty string. +// NB: The implementations on different platforms slightly differ. +// On windows, this method uses _wcsicmp which compares according to LC_CTYPE +// environment variable. On GNU platform this method uses wcscasecmp +// which compares according to LC_CTYPE category of the current locale. +// On MacOS X, it uses towlower, which also uses LC_CTYPE category of the +// current locale. bool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs, const wchar_t* rhs) { - if (lhs == NULL) return rhs == NULL; + if (lhs == nullptr) return rhs == nullptr; - if (rhs == NULL) return false; + if (rhs == nullptr) return false; #if GTEST_OS_WINDOWS return _wcsicmp(lhs, rhs) == 0; @@ -1955,14 +1947,14 @@ bool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs, // Other unknown OSes may not define it either. wint_t left, right; do { - left = towlower(*lhs++); - right = towlower(*rhs++); + left = towlower(static_cast<wint_t>(*lhs++)); + right = towlower(static_cast<wint_t>(*rhs++)); } while (left && left == right); return left == right; #endif // OS selector } -// Returns true iff str ends with the given suffix, ignoring case. +// Returns true if and only if str ends with the given suffix, ignoring case. // Any string is considered to end with an empty suffix. bool String::EndsWithCaseInsensitive( const std::string& str, const std::string& suffix) { @@ -1981,12 +1973,17 @@ std::string String::FormatIntWidth2(int value) { } // Formats an int value as "%X". -std::string String::FormatHexInt(int value) { +std::string String::FormatHexUInt32(UInt32 value) { std::stringstream ss; ss << std::hex << std::uppercase << value; return ss.str(); } +// Formats an int value as "%X". +std::string String::FormatHexInt(int value) { + return FormatHexUInt32(static_cast<UInt32>(value)); +} + // Formats a byte as "%02X". std::string String::FormatByte(unsigned char value) { std::stringstream ss; @@ -2003,7 +2000,7 @@ std::string StringStreamToString(::std::stringstream* ss) { const char* const end = start + str.length(); std::string result; - result.reserve(2 * (end - start)); + result.reserve(static_cast<size_t>(2 * (end - start))); for (const char* ch = start; ch != end; ++ch) { if (*ch == '\0') { result += "\\0"; // Replaces NUL with "\\0"; @@ -2033,9 +2030,7 @@ std::string AppendUserMessage(const std::string& gtest_msg, // Creates an empty TestResult. TestResult::TestResult() - : death_test_count_(0), - elapsed_time_(0) { -} + : death_test_count_(0), start_timestamp_(0), elapsed_time_(0) {} // D'tor. TestResult::~TestResult() { @@ -2047,7 +2042,7 @@ TestResult::~TestResult() { const TestPartResult& TestResult::GetTestPartResult(int i) const { if (i < 0 || i >= total_part_count()) internal::posix::Abort(); - return test_part_results_.at(i); + return test_part_results_.at(static_cast<size_t>(i)); } // Returns the i-th test property. i can range from 0 to @@ -2056,7 +2051,7 @@ const TestPartResult& TestResult::GetTestPartResult(int i) const { const TestProperty& TestResult::GetTestProperty(int i) const { if (i < 0 || i >= test_property_count()) internal::posix::Abort(); - return test_properties_.at(i); + return test_properties_.at(static_cast<size_t>(i)); } // Clears the test part results. @@ -2104,23 +2099,18 @@ static const char* const kReservedTestSuitesAttributes[] = { // The list of reserved attributes used in the <testsuite> element of XML // output. static const char* const kReservedTestSuiteAttributes[] = { - "disabled", - "errors", - "failures", - "name", - "tests", - "time" -}; + "disabled", "errors", "failures", "name", "tests", "time", "timestamp"}; // The list of reserved attributes used in the <testcase> element of XML output. static const char* const kReservedTestCaseAttributes[] = { - "classname", - "name", - "status", - "time", - "type_param", - "value_param" -}; + "classname", "name", "status", "time", "type_param", + "value_param", "file", "line"}; + +// Use a slightly different set for allowed output to ensure existing tests can +// still RecordProperty("result") or "RecordProperty(timestamp") +static const char* const kReservedOutputTestCaseAttributes[] = { + "classname", "name", "status", "time", "type_param", + "value_param", "file", "line", "result", "timestamp"}; template <int kSize> std::vector<std::string> ArrayAsVector(const char* const (&array)[kSize]) { @@ -2142,6 +2132,22 @@ static std::vector<std::string> GetReservedAttributesForElement( return std::vector<std::string>(); } +// TODO(jdesprez): Merge the two getReserved attributes once skip is improved +static std::vector<std::string> GetReservedOutputAttributesForElement( + const std::string& xml_element) { + if (xml_element == "testsuites") { + return ArrayAsVector(kReservedTestSuitesAttributes); + } else if (xml_element == "testsuite") { + return ArrayAsVector(kReservedTestSuiteAttributes); + } else if (xml_element == "testcase") { + return ArrayAsVector(kReservedOutputTestCaseAttributes); + } else { + GTEST_CHECK_(false) << "Unrecognized xml_element provided: " << xml_element; + } + // This code is unreachable but some compilers may not realizes that. + return std::vector<std::string>(); +} + static std::string FormatWordList(const std::vector<std::string>& words) { Message word_list; for (size_t i = 0; i < words.size(); ++i) { @@ -2185,7 +2191,17 @@ void TestResult::Clear() { elapsed_time_ = 0; } -// Returns true iff the test failed. +// Returns true off the test part was skipped. +static bool TestPartSkipped(const TestPartResult& result) { + return result.skipped(); +} + +// Returns true if and only if the test was skipped. +bool TestResult::Skipped() const { + return !Failed() && CountIf(test_part_results_, TestPartSkipped) > 0; +} + +// Returns true if and only if the test failed. bool TestResult::Failed() const { for (int i = 0; i < total_part_count(); ++i) { if (GetTestPartResult(i).failed()) @@ -2194,22 +2210,22 @@ bool TestResult::Failed() const { return false; } -// Returns true iff the test part fatally failed. +// Returns true if and only if the test part fatally failed. static bool TestPartFatallyFailed(const TestPartResult& result) { return result.fatally_failed(); } -// Returns true iff the test fatally failed. +// Returns true if and only if the test fatally failed. bool TestResult::HasFatalFailure() const { return CountIf(test_part_results_, TestPartFatallyFailed) > 0; } -// Returns true iff the test part non-fatally failed. +// Returns true if and only if the test part non-fatally failed. static bool TestPartNonfatallyFailed(const TestPartResult& result) { return result.nonfatally_failed(); } -// Returns true iff the test has a non-fatal failure. +// Returns true if and only if the test has a non-fatal failure. bool TestResult::HasNonfatalFailure() const { return CountIf(test_part_results_, TestPartNonfatallyFailed) > 0; } @@ -2272,25 +2288,25 @@ void ReportFailureInUnknownLocation(TestPartResult::Type result_type, // AddTestPartResult. UnitTest::GetInstance()->AddTestPartResult( result_type, - NULL, // No info about the source file where the exception occurred. - -1, // We have no info on which line caused the exception. + nullptr, // No info about the source file where the exception occurred. + -1, // We have no info on which line caused the exception. message, - ""); // No stack trace, either. + ""); // No stack trace, either. } } // namespace internal -// Google Test requires all tests in the same test case to use the same test +// Google Test requires all tests in the same test suite to use the same test // fixture class. This function checks if the current test has the -// same fixture class as the first test in the current test case. If +// same fixture class as the first test in the current test suite. If // yes, it returns true; otherwise it generates a Google Test failure and // returns false. bool Test::HasSameFixtureClass() { internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); - const TestCase* const test_case = impl->current_test_case(); + const TestSuite* const test_suite = impl->current_test_suite(); - // Info about the first test in the current test case. - const TestInfo* const first_test_info = test_case->test_info_list()[0]; + // Info about the first test in the current test suite. + const TestInfo* const first_test_info = test_suite->test_info_list()[0]; const internal::TypeId first_fixture_id = first_test_info->fixture_class_id_; const char* const first_test_name = first_test_info->name(); @@ -2306,7 +2322,7 @@ bool Test::HasSameFixtureClass() { const bool this_is_TEST = this_fixture_id == internal::GetTestTypeId(); if (first_is_TEST || this_is_TEST) { - // Both TEST and TEST_F appear in same test case, which is incorrect. + // Both TEST and TEST_F appear in same test suite, which is incorrect. // Tell the user how to fix this. // Gets the name of the TEST and the name of the TEST_F. Note @@ -2318,9 +2334,9 @@ bool Test::HasSameFixtureClass() { first_is_TEST ? this_test_name : first_test_name; ADD_FAILURE() - << "All tests in the same test case must use the same test fixture\n" - << "class, so mixing TEST_F and TEST in the same test case is\n" - << "illegal. In test case " << this_test_info->test_case_name() + << "All tests in the same test suite must use the same test fixture\n" + << "class, so mixing TEST_F and TEST in the same test suite is\n" + << "illegal. In test suite " << this_test_info->test_suite_name() << ",\n" << "test " << TEST_F_name << " is defined using TEST_F but\n" << "test " << TEST_name << " is defined using TEST. You probably\n" @@ -2330,15 +2346,15 @@ bool Test::HasSameFixtureClass() { // Two fixture classes with the same name appear in two different // namespaces, which is not allowed. Tell the user how to fix this. ADD_FAILURE() - << "All tests in the same test case must use the same test fixture\n" - << "class. However, in test case " - << this_test_info->test_case_name() << ",\n" - << "you defined test " << first_test_name - << " and test " << this_test_name << "\n" + << "All tests in the same test suite must use the same test fixture\n" + << "class. However, in test suite " + << this_test_info->test_suite_name() << ",\n" + << "you defined test " << first_test_name << " and test " + << this_test_name << "\n" << "using two different test fixture classes. This can happen if\n" << "the two classes are from different namespaces or translation\n" << "units and have the same name. You should probably rename one\n" - << "of the classes to put the tests into different test cases."; + << "of the classes to put the tests into different test suites."; } return false; } @@ -2371,7 +2387,7 @@ namespace internal { static std::string FormatCxxExceptionMessage(const char* description, const char* location) { Message message; - if (description != NULL) { + if (description != nullptr) { message << "C++ exception with description \"" << description << "\""; } else { message << "Unknown C++ exception"; @@ -2469,7 +2485,7 @@ Result HandleExceptionsInMethodIfSupported( } catch (...) { // NOLINT internal::ReportFailureInUnknownLocation( TestPartResult::kFatalFailure, - FormatCxxExceptionMessage(NULL, location)); + FormatCxxExceptionMessage(nullptr, location)); } return static_cast<Result>(0); #else @@ -2489,8 +2505,9 @@ void Test::Run() { internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported(this, &Test::SetUp, "SetUp()"); - // We will run the test only if SetUp() was successful. - if (!HasFatalFailure()) { + // We will run the test only if SetUp() was successful and didn't call + // GTEST_SKIP(). + if (!HasFatalFailure() && !IsSkipped()) { impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &Test::TestBody, "the test body"); @@ -2504,32 +2521,36 @@ void Test::Run() { this, &Test::TearDown, "TearDown()"); } -// Returns true iff the current test has a fatal failure. +// Returns true if and only if the current test has a fatal failure. bool Test::HasFatalFailure() { return internal::GetUnitTestImpl()->current_test_result()->HasFatalFailure(); } -// Returns true iff the current test has a non-fatal failure. +// Returns true if and only if the current test has a non-fatal failure. bool Test::HasNonfatalFailure() { return internal::GetUnitTestImpl()->current_test_result()-> HasNonfatalFailure(); } +// Returns true if and only if the current test was skipped. +bool Test::IsSkipped() { + return internal::GetUnitTestImpl()->current_test_result()->Skipped(); +} + // class TestInfo // Constructs a TestInfo object. It assumes ownership of the test factory // object. -TestInfo::TestInfo(const std::string& a_test_case_name, - const std::string& a_name, - const char* a_type_param, +TestInfo::TestInfo(const std::string& a_test_suite_name, + const std::string& a_name, const char* a_type_param, const char* a_value_param, internal::CodeLocation a_code_location, internal::TypeId fixture_class_id, internal::TestFactoryBase* factory) - : test_case_name_(a_test_case_name), + : test_suite_name_(a_test_suite_name), name_(a_name), - type_param_(a_type_param ? new std::string(a_type_param) : NULL), - value_param_(a_value_param ? new std::string(a_value_param) : NULL), + type_param_(a_type_param ? new std::string(a_type_param) : nullptr), + value_param_(a_value_param ? new std::string(a_value_param) : nullptr), location_(a_code_location), fixture_class_id_(fixture_class_id), should_run_(false), @@ -2548,7 +2569,7 @@ namespace internal { // // Arguments: // -// test_case_name: name of the test case +// test_suite_name: name of the test suite // name: name of the test // type_param: the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. @@ -2556,40 +2577,35 @@ namespace internal { // or NULL if this is not a value-parameterized test. // code_location: code location where the test is defined // fixture_class_id: ID of the test fixture class -// set_up_tc: pointer to the function that sets up the test case -// tear_down_tc: pointer to the function that tears down the test case +// set_up_tc: pointer to the function that sets up the test suite +// tear_down_tc: pointer to the function that tears down the test suite // factory: pointer to the factory that creates a test object. // The newly created TestInfo instance will assume // ownership of the factory object. TestInfo* MakeAndRegisterTestInfo( - const char* test_case_name, - const char* name, - const char* type_param, - const char* value_param, - CodeLocation code_location, - TypeId fixture_class_id, - SetUpTestCaseFunc set_up_tc, - TearDownTestCaseFunc tear_down_tc, - TestFactoryBase* factory) { + const char* test_suite_name, const char* name, const char* type_param, + const char* value_param, CodeLocation code_location, + TypeId fixture_class_id, SetUpTestSuiteFunc set_up_tc, + TearDownTestSuiteFunc tear_down_tc, TestFactoryBase* factory) { TestInfo* const test_info = - new TestInfo(test_case_name, name, type_param, value_param, + new TestInfo(test_suite_name, name, type_param, value_param, code_location, fixture_class_id, factory); GetUnitTestImpl()->AddTestInfo(set_up_tc, tear_down_tc, test_info); return test_info; } -void ReportInvalidTestCaseType(const char* test_case_name, - CodeLocation code_location) { +void ReportInvalidTestSuiteType(const char* test_suite_name, + CodeLocation code_location) { Message errors; errors - << "Attempted redefinition of test case " << test_case_name << ".\n" - << "All tests in the same test case must use the same test fixture\n" - << "class. However, in test case " << test_case_name << ", you tried\n" + << "Attempted redefinition of test suite " << test_suite_name << ".\n" + << "All tests in the same test suite must use the same test fixture\n" + << "class. However, in test suite " << test_suite_name << ", you tried\n" << "to define a test using a fixture class different from the one\n" << "used earlier. This can happen if the two fixture classes are\n" << "from different namespaces and have the same name. You should\n" << "probably rename one of the classes to put the tests into different\n" - << "test cases."; + << "test suites."; GTEST_LOG_(ERROR) << FormatFileLocation(code_location.file.c_str(), code_location.line) @@ -2602,7 +2618,7 @@ namespace { // A predicate that checks the test name of a TestInfo against a known // value. // -// This is used for implementation of the TestCase class only. We put +// This is used for implementation of the TestSuite class only. We put // it in the anonymous namespace to prevent polluting the outer // namespace. // @@ -2615,7 +2631,7 @@ class TestNameIs { explicit TestNameIs(const char* name) : name_(name) {} - // Returns true iff the test name of test_info matches name_. + // Returns true if and only if the test name of test_info matches name_. bool operator()(const TestInfo * test_info) const { return test_info && test_info->name() == name_; } @@ -2629,7 +2645,7 @@ class TestNameIs { namespace internal { // This method expands all parameterized tests registered with macros TEST_P -// and INSTANTIATE_TEST_CASE_P into regular tests and registers those. +// and INSTANTIATE_TEST_SUITE_P into regular tests and registers those. // This will be done just once during the program runtime. void UnitTestImpl::RegisterParameterizedTests() { if (!parameterized_tests_registered_) { @@ -2663,19 +2679,23 @@ void TestInfo::Run() { factory_, &internal::TestFactoryBase::CreateTest, "the test fixture's constructor"); - // Runs the test only if the test object was created and its - // constructor didn't generate a fatal failure. - if ((test != NULL) && !Test::HasFatalFailure()) { + // Runs the test if the constructor didn't generate a fatal failure or invoke + // GTEST_SKIP(). + // Note that the object will not be null + if (!Test::HasFatalFailure() && !Test::IsSkipped()) { // This doesn't throw as all user code that can throw are wrapped into // exception handling code. test->Run(); } - // Deletes the test object. - impl->os_stack_trace_getter()->UponLeavingGTest(); - internal::HandleExceptionsInMethodIfSupported( - test, &Test::DeleteSelf_, "the test fixture's destructor"); + if (test != nullptr) { + // Deletes the test object. + impl->os_stack_trace_getter()->UponLeavingGTest(); + internal::HandleExceptionsInMethodIfSupported( + test, &Test::DeleteSelf_, "the test fixture's destructor"); + } + result_.set_start_timestamp(start); result_.set_elapsed_time(internal::GetTimeInMillis() - start); // Notifies the unit test event listener that a test has just finished. @@ -2683,134 +2703,151 @@ void TestInfo::Run() { // Tells UnitTest to stop associating assertion results to this // test. - impl->set_current_test_info(NULL); + impl->set_current_test_info(nullptr); } -// class TestCase +// class TestSuite -// Gets the number of successful tests in this test case. -int TestCase::successful_test_count() const { +// Gets the number of successful tests in this test suite. +int TestSuite::successful_test_count() const { return CountIf(test_info_list_, TestPassed); } -// Gets the number of failed tests in this test case. -int TestCase::failed_test_count() const { +// Gets the number of successful tests in this test suite. +int TestSuite::skipped_test_count() const { + return CountIf(test_info_list_, TestSkipped); +} + +// Gets the number of failed tests in this test suite. +int TestSuite::failed_test_count() const { return CountIf(test_info_list_, TestFailed); } // Gets the number of disabled tests that will be reported in the XML report. -int TestCase::reportable_disabled_test_count() const { +int TestSuite::reportable_disabled_test_count() const { return CountIf(test_info_list_, TestReportableDisabled); } -// Gets the number of disabled tests in this test case. -int TestCase::disabled_test_count() const { +// Gets the number of disabled tests in this test suite. +int TestSuite::disabled_test_count() const { return CountIf(test_info_list_, TestDisabled); } // Gets the number of tests to be printed in the XML report. -int TestCase::reportable_test_count() const { +int TestSuite::reportable_test_count() const { return CountIf(test_info_list_, TestReportable); } -// Get the number of tests in this test case that should run. -int TestCase::test_to_run_count() const { +// Get the number of tests in this test suite that should run. +int TestSuite::test_to_run_count() const { return CountIf(test_info_list_, ShouldRunTest); } // Gets the number of all tests. -int TestCase::total_test_count() const { +int TestSuite::total_test_count() const { return static_cast<int>(test_info_list_.size()); } -// Creates a TestCase with the given name. +// Creates a TestSuite with the given name. // // Arguments: // -// name: name of the test case -// a_type_param: the name of the test case's type parameter, or NULL if -// this is not a typed or a type-parameterized test case. -// set_up_tc: pointer to the function that sets up the test case -// tear_down_tc: pointer to the function that tears down the test case -TestCase::TestCase(const char* a_name, const char* a_type_param, - Test::SetUpTestCaseFunc set_up_tc, - Test::TearDownTestCaseFunc tear_down_tc) +// name: name of the test suite +// a_type_param: the name of the test suite's type parameter, or NULL if +// this is not a typed or a type-parameterized test suite. +// set_up_tc: pointer to the function that sets up the test suite +// tear_down_tc: pointer to the function that tears down the test suite +TestSuite::TestSuite(const char* a_name, const char* a_type_param, + internal::SetUpTestSuiteFunc set_up_tc, + internal::TearDownTestSuiteFunc tear_down_tc) : name_(a_name), - type_param_(a_type_param ? new std::string(a_type_param) : NULL), + type_param_(a_type_param ? new std::string(a_type_param) : nullptr), set_up_tc_(set_up_tc), tear_down_tc_(tear_down_tc), should_run_(false), - elapsed_time_(0) { -} + start_timestamp_(0), + elapsed_time_(0) {} -// Destructor of TestCase. -TestCase::~TestCase() { +// Destructor of TestSuite. +TestSuite::~TestSuite() { // Deletes every Test in the collection. ForEach(test_info_list_, internal::Delete<TestInfo>); } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. -const TestInfo* TestCase::GetTestInfo(int i) const { +const TestInfo* TestSuite::GetTestInfo(int i) const { const int index = GetElementOr(test_indices_, i, -1); - return index < 0 ? NULL : test_info_list_[index]; + return index < 0 ? nullptr : test_info_list_[static_cast<size_t>(index)]; } // Returns the i-th test among all the tests. i can range from 0 to // total_test_count() - 1. If i is not in that range, returns NULL. -TestInfo* TestCase::GetMutableTestInfo(int i) { +TestInfo* TestSuite::GetMutableTestInfo(int i) { const int index = GetElementOr(test_indices_, i, -1); - return index < 0 ? NULL : test_info_list_[index]; + return index < 0 ? nullptr : test_info_list_[static_cast<size_t>(index)]; } -// Adds a test to this test case. Will delete the test upon -// destruction of the TestCase object. -void TestCase::AddTestInfo(TestInfo * test_info) { +// Adds a test to this test suite. Will delete the test upon +// destruction of the TestSuite object. +void TestSuite::AddTestInfo(TestInfo* test_info) { test_info_list_.push_back(test_info); test_indices_.push_back(static_cast<int>(test_indices_.size())); } -// Runs every test in this TestCase. -void TestCase::Run() { +// Runs every test in this TestSuite. +void TestSuite::Run() { if (!should_run_) return; internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); - impl->set_current_test_case(this); + impl->set_current_test_suite(this); TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); + // Call both legacy and the new API + repeater->OnTestSuiteStart(*this); +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI repeater->OnTestCaseStart(*this); +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI + impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( - this, &TestCase::RunSetUpTestCase, "SetUpTestCase()"); + this, &TestSuite::RunSetUpTestSuite, "SetUpTestSuite()"); - const internal::TimeInMillis start = internal::GetTimeInMillis(); + start_timestamp_ = internal::GetTimeInMillis(); for (int i = 0; i < total_test_count(); i++) { GetMutableTestInfo(i)->Run(); } - elapsed_time_ = internal::GetTimeInMillis() - start; + elapsed_time_ = internal::GetTimeInMillis() - start_timestamp_; impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( - this, &TestCase::RunTearDownTestCase, "TearDownTestCase()"); + this, &TestSuite::RunTearDownTestSuite, "TearDownTestSuite()"); + // Call both legacy and the new API + repeater->OnTestSuiteEnd(*this); +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI repeater->OnTestCaseEnd(*this); - impl->set_current_test_case(NULL); +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI + + impl->set_current_test_suite(nullptr); } -// Clears the results of all tests in this test case. -void TestCase::ClearResult() { +// Clears the results of all tests in this test suite. +void TestSuite::ClearResult() { ad_hoc_test_result_.Clear(); ForEach(test_info_list_, TestInfo::ClearTestResult); } -// Shuffles the tests in this test case. -void TestCase::ShuffleTests(internal::Random* random) { +// Shuffles the tests in this test suite. +void TestSuite::ShuffleTests(internal::Random* random) { Shuffle(random, &test_indices_); } // Restores the test order to before the first shuffle. -void TestCase::UnshuffleTests() { +void TestSuite::UnshuffleTests() { for (size_t i = 0; i < test_indices_.size(); i++) { test_indices_[i] = static_cast<int>(i); } @@ -2833,9 +2870,9 @@ static std::string FormatTestCount(int test_count) { return FormatCountableNoun(test_count, "test", "tests"); } -// Formats the count of test cases. -static std::string FormatTestCaseCount(int test_case_count) { - return FormatCountableNoun(test_case_count, "test case", "test cases"); +// Formats the count of test suites. +static std::string FormatTestSuiteCount(int test_suite_count) { + return FormatCountableNoun(test_suite_count, "test suite", "test suites"); } // Converts a TestPartResult::Type enum to human-friendly string @@ -2844,6 +2881,8 @@ static std::string FormatTestCaseCount(int test_case_count) { // between the two when viewing the test result. static const char * TestPartResultTypeToString(TestPartResult::Type type) { switch (type) { + case TestPartResult::kSkip: + return "Skipped"; case TestPartResult::kSuccess: return "Success"; @@ -2891,14 +2930,6 @@ static void PrintTestPartResult(const TestPartResult& test_part_result) { } // class PrettyUnitTestResultPrinter - -enum GTestColor { - COLOR_DEFAULT, - COLOR_RED, - COLOR_GREEN, - COLOR_YELLOW -}; - #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE && \ !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT && !GTEST_OS_WINDOWS_MINGW @@ -2952,13 +2983,14 @@ static const char* GetAnsiColorCode(GTestColor color) { case COLOR_RED: return "1"; case COLOR_GREEN: return "2"; case COLOR_YELLOW: return "3"; - default: return NULL; - }; + default: + return nullptr; + } } #endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE -// Returns true iff Google Test should use colors in the output. +// Returns true if and only if Google Test should use colors in the output. bool ShouldUseColor(bool stdout_is_tty) { const char* const gtest_color = GTEST_FLAG(color).c_str(); @@ -2999,19 +3031,18 @@ bool ShouldUseColor(bool stdout_is_tty) { // cannot simply emit special characters and have the terminal change colors. // This routine must actually emit the characters rather than return a string // that would be colored when printed, as can be done on Linux. -static void ColoredPrintf(GTestColor color, const char* fmt, ...) { +void ColoredPrintf(GTestColor color, const char* fmt, ...) { va_list args; va_start(args, fmt); -#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS || \ - GTEST_OS_IOS || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT +#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_ZOS || GTEST_OS_IOS || \ + GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT || defined(ESP_PLATFORM) const bool use_color = AlwaysFalse(); #else static const bool in_color_mode = ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0); const bool use_color = in_color_mode && (color != COLOR_DEFAULT); -#endif // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS - // The '!= 0' comparison is necessary to satisfy MSVC 7.1. +#endif // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_ZOS if (!use_color) { vprintf(fmt, args); @@ -3057,14 +3088,13 @@ static void PrintFullTestCommentIfPresent(const TestInfo& test_info) { const char* const type_param = test_info.type_param(); const char* const value_param = test_info.value_param(); - if (type_param != NULL || value_param != NULL) { + if (type_param != nullptr || value_param != nullptr) { printf(", where "); - if (type_param != NULL) { + if (type_param != nullptr) { printf("%s = %s", kTypeParamLabel, type_param); - if (value_param != NULL) - printf(" and "); + if (value_param != nullptr) printf(" and "); } - if (value_param != NULL) { + if (value_param != nullptr) { printf("%s = %s", kValueParamLabel, value_param); } } @@ -3076,27 +3106,39 @@ static void PrintFullTestCommentIfPresent(const TestInfo& test_info) { class PrettyUnitTestResultPrinter : public TestEventListener { public: PrettyUnitTestResultPrinter() {} - static void PrintTestName(const char * test_case, const char * test) { - printf("%s.%s", test_case, test); + static void PrintTestName(const char* test_suite, const char* test) { + printf("%s.%s", test_suite, test); } // The following methods override what's in the TestEventListener class. - virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} - virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); - virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); - virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} - virtual void OnTestCaseStart(const TestCase& test_case); - virtual void OnTestStart(const TestInfo& test_info); - virtual void OnTestPartResult(const TestPartResult& result); - virtual void OnTestEnd(const TestInfo& test_info); - virtual void OnTestCaseEnd(const TestCase& test_case); - virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); - virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} - virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); - virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} + void OnTestProgramStart(const UnitTest& /*unit_test*/) override {} + void OnTestIterationStart(const UnitTest& unit_test, int iteration) override; + void OnEnvironmentsSetUpStart(const UnitTest& unit_test) override; + void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) override {} +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + void OnTestCaseStart(const TestCase& test_case) override; +#else + void OnTestSuiteStart(const TestSuite& test_suite) override; +#endif // OnTestCaseStart + + void OnTestStart(const TestInfo& test_info) override; + + void OnTestPartResult(const TestPartResult& result) override; + void OnTestEnd(const TestInfo& test_info) override; +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + void OnTestCaseEnd(const TestCase& test_case) override; +#else + void OnTestSuiteEnd(const TestSuite& test_suite) override; +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + + void OnEnvironmentsTearDownStart(const UnitTest& unit_test) override; + void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) override {} + void OnTestIterationEnd(const UnitTest& unit_test, int iteration) override; + void OnTestProgramEnd(const UnitTest& /*unit_test*/) override {} private: static void PrintFailedTests(const UnitTest& unit_test); + static void PrintSkippedTests(const UnitTest& unit_test); }; // Fired before each iteration of tests starts. @@ -3127,10 +3169,11 @@ void PrettyUnitTestResultPrinter::OnTestIterationStart( "Note: Randomizing tests' orders with a seed of %d .\n", unit_test.random_seed()); } + ColoredPrintf(COLOR_GREEN, "[==========] "); printf("Running %s from %s.\n", FormatTestCount(unit_test.test_to_run_count()).c_str(), - FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); + FormatTestSuiteCount(unit_test.test_suite_to_run_count()).c_str()); fflush(stdout); } @@ -3141,22 +3184,38 @@ void PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart( fflush(stdout); } +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ void PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) { const std::string counts = FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); ColoredPrintf(COLOR_GREEN, "[----------] "); printf("%s from %s", counts.c_str(), test_case.name()); - if (test_case.type_param() == NULL) { + if (test_case.type_param() == nullptr) { printf("\n"); } else { printf(", where %s = %s\n", kTypeParamLabel, test_case.type_param()); } fflush(stdout); } +#else +void PrettyUnitTestResultPrinter::OnTestSuiteStart( + const TestSuite& test_suite) { + const std::string counts = + FormatCountableNoun(test_suite.test_to_run_count(), "test", "tests"); + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("%s from %s", counts.c_str(), test_suite.name()); + if (test_suite.type_param() == nullptr) { + printf("\n"); + } else { + printf(", where %s = %s\n", kTypeParamLabel, test_suite.type_param()); + } + fflush(stdout); +} +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { ColoredPrintf(COLOR_GREEN, "[ RUN ] "); - PrintTestName(test_info.test_case_name(), test_info.name()); + PrintTestName(test_info.test_suite_name(), test_info.name()); printf("\n"); fflush(stdout); } @@ -3164,22 +3223,29 @@ void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { // Called after an assertion failure. void PrettyUnitTestResultPrinter::OnTestPartResult( const TestPartResult& result) { - // If the test part succeeded, we don't need to do anything. - if (result.type() == TestPartResult::kSuccess) - return; - - // Print failure message from the assertion (e.g. expected this and got that). - PrintTestPartResult(result); - fflush(stdout); + switch (result.type()) { + // If the test part succeeded, or was skipped, + // we don't need to do anything. + case TestPartResult::kSkip: + case TestPartResult::kSuccess: + return; + default: + // Print failure message from the assertion + // (e.g. expected this and got that). + PrintTestPartResult(result); + fflush(stdout); + } } void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) { if (test_info.result()->Passed()) { ColoredPrintf(COLOR_GREEN, "[ OK ] "); + } else if (test_info.result()->Skipped()) { + ColoredPrintf(COLOR_GREEN, "[ SKIPPED ] "); } else { ColoredPrintf(COLOR_RED, "[ FAILED ] "); } - PrintTestName(test_info.test_case_name(), test_info.name()); + PrintTestName(test_info.test_suite_name(), test_info.name()); if (test_info.result()->Failed()) PrintFullTestCommentIfPresent(test_info); @@ -3192,17 +3258,29 @@ void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) { fflush(stdout); } +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ void PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) { if (!GTEST_FLAG(print_time)) return; const std::string counts = FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); ColoredPrintf(COLOR_GREEN, "[----------] "); - printf("%s from %s (%s ms total)\n\n", - counts.c_str(), test_case.name(), + printf("%s from %s (%s ms total)\n\n", counts.c_str(), test_case.name(), internal::StreamableToString(test_case.elapsed_time()).c_str()); fflush(stdout); } +#else +void PrettyUnitTestResultPrinter::OnTestSuiteEnd(const TestSuite& test_suite) { + if (!GTEST_FLAG(print_time)) return; + + const std::string counts = + FormatCountableNoun(test_suite.test_to_run_count(), "test", "tests"); + ColoredPrintf(COLOR_GREEN, "[----------] "); + printf("%s from %s (%s ms total)\n\n", counts.c_str(), test_suite.name(), + internal::StreamableToString(test_suite.elapsed_time()).c_str()); + fflush(stdout); +} +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart( const UnitTest& /*unit_test*/) { @@ -3218,30 +3296,54 @@ void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) { return; } - for (int i = 0; i < unit_test.total_test_case_count(); ++i) { - const TestCase& test_case = *unit_test.GetTestCase(i); - if (!test_case.should_run() || (test_case.failed_test_count() == 0)) { + for (int i = 0; i < unit_test.total_test_suite_count(); ++i) { + const TestSuite& test_suite = *unit_test.GetTestSuite(i); + if (!test_suite.should_run() || (test_suite.failed_test_count() == 0)) { continue; } - for (int j = 0; j < test_case.total_test_count(); ++j) { - const TestInfo& test_info = *test_case.GetTestInfo(j); - if (!test_info.should_run() || test_info.result()->Passed()) { + for (int j = 0; j < test_suite.total_test_count(); ++j) { + const TestInfo& test_info = *test_suite.GetTestInfo(j); + if (!test_info.should_run() || !test_info.result()->Failed()) { continue; } ColoredPrintf(COLOR_RED, "[ FAILED ] "); - printf("%s.%s", test_case.name(), test_info.name()); + printf("%s.%s", test_suite.name(), test_info.name()); PrintFullTestCommentIfPresent(test_info); printf("\n"); } } } +// Internal helper for printing the list of skipped tests. +void PrettyUnitTestResultPrinter::PrintSkippedTests(const UnitTest& unit_test) { + const int skipped_test_count = unit_test.skipped_test_count(); + if (skipped_test_count == 0) { + return; + } + + for (int i = 0; i < unit_test.total_test_suite_count(); ++i) { + const TestSuite& test_suite = *unit_test.GetTestSuite(i); + if (!test_suite.should_run() || (test_suite.skipped_test_count() == 0)) { + continue; + } + for (int j = 0; j < test_suite.total_test_count(); ++j) { + const TestInfo& test_info = *test_suite.GetTestInfo(j); + if (!test_info.should_run() || !test_info.result()->Skipped()) { + continue; + } + ColoredPrintf(COLOR_GREEN, "[ SKIPPED ] "); + printf("%s.%s", test_suite.name(), test_info.name()); + printf("\n"); + } + } +} + void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, int /*iteration*/) { ColoredPrintf(COLOR_GREEN, "[==========] "); printf("%s from %s ran.", FormatTestCount(unit_test.test_to_run_count()).c_str(), - FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str()); + FormatTestSuiteCount(unit_test.test_suite_to_run_count()).c_str()); if (GTEST_FLAG(print_time)) { printf(" (%s ms total)", internal::StreamableToString(unit_test.elapsed_time()).c_str()); @@ -3250,6 +3352,13 @@ void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, ColoredPrintf(COLOR_GREEN, "[ PASSED ] "); printf("%s.\n", FormatTestCount(unit_test.successful_test_count()).c_str()); + const int skipped_test_count = unit_test.skipped_test_count(); + if (skipped_test_count > 0) { + ColoredPrintf(COLOR_GREEN, "[ SKIPPED ] "); + printf("%s, listed below:\n", FormatTestCount(skipped_test_count).c_str()); + PrintSkippedTests(unit_test); + } + int num_failures = unit_test.failed_test_count(); if (!unit_test.Passed()) { const int failed_test_count = unit_test.failed_test_count(); @@ -3282,7 +3391,7 @@ void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, class TestEventRepeater : public TestEventListener { public: TestEventRepeater() : forwarding_enabled_(true) {} - virtual ~TestEventRepeater(); + ~TestEventRepeater() override; void Append(TestEventListener *listener); TestEventListener* Release(TestEventListener* listener); @@ -3291,19 +3400,27 @@ class TestEventRepeater : public TestEventListener { bool forwarding_enabled() const { return forwarding_enabled_; } void set_forwarding_enabled(bool enable) { forwarding_enabled_ = enable; } - virtual void OnTestProgramStart(const UnitTest& unit_test); - virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration); - virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test); - virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test); - virtual void OnTestCaseStart(const TestCase& test_case); - virtual void OnTestStart(const TestInfo& test_info); - virtual void OnTestPartResult(const TestPartResult& result); - virtual void OnTestEnd(const TestInfo& test_info); - virtual void OnTestCaseEnd(const TestCase& test_case); - virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test); - virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test); - virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); - virtual void OnTestProgramEnd(const UnitTest& unit_test); + void OnTestProgramStart(const UnitTest& unit_test) override; + void OnTestIterationStart(const UnitTest& unit_test, int iteration) override; + void OnEnvironmentsSetUpStart(const UnitTest& unit_test) override; + void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) override; +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + void OnTestCaseStart(const TestSuite& parameter) override; +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + void OnTestSuiteStart(const TestSuite& parameter) override; + void OnTestStart(const TestInfo& test_info) override; + void OnTestPartResult(const TestPartResult& result) override; + void OnTestEnd(const TestInfo& test_info) override; +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + void OnTestCaseEnd(const TestCase& parameter) override; +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + void OnTestSuiteEnd(const TestSuite& parameter) override; + void OnEnvironmentsTearDownStart(const UnitTest& unit_test) override; + void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) override; + void OnTestIterationEnd(const UnitTest& unit_test, int iteration) override; + void OnTestProgramEnd(const UnitTest& unit_test) override; private: // Controls whether events will be forwarded to listeners_. Set to false @@ -3323,16 +3440,15 @@ void TestEventRepeater::Append(TestEventListener *listener) { listeners_.push_back(listener); } -// TODO(vladl@google.com): Factor the search functionality into Vector::Find. TestEventListener* TestEventRepeater::Release(TestEventListener *listener) { for (size_t i = 0; i < listeners_.size(); ++i) { if (listeners_[i] == listener) { - listeners_.erase(listeners_.begin() + i); + listeners_.erase(listeners_.begin() + static_cast<int>(i)); return listener; } } - return NULL; + return nullptr; } // Since most methods are very similar, use macros to reduce boilerplate. @@ -3347,25 +3463,33 @@ void TestEventRepeater::Name(const Type& parameter) { \ } // This defines a member that forwards the call to all listeners in reverse // order. -#define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \ -void TestEventRepeater::Name(const Type& parameter) { \ - if (forwarding_enabled_) { \ - for (int i = static_cast<int>(listeners_.size()) - 1; i >= 0; i--) { \ - listeners_[i]->Name(parameter); \ - } \ - } \ -} +#define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \ + void TestEventRepeater::Name(const Type& parameter) { \ + if (forwarding_enabled_) { \ + for (size_t i = listeners_.size(); i != 0; i--) { \ + listeners_[i - 1]->Name(parameter); \ + } \ + } \ + } GTEST_REPEATER_METHOD_(OnTestProgramStart, UnitTest) GTEST_REPEATER_METHOD_(OnEnvironmentsSetUpStart, UnitTest) -GTEST_REPEATER_METHOD_(OnTestCaseStart, TestCase) +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ +GTEST_REPEATER_METHOD_(OnTestCaseStart, TestSuite) +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ +GTEST_REPEATER_METHOD_(OnTestSuiteStart, TestSuite) GTEST_REPEATER_METHOD_(OnTestStart, TestInfo) GTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult) GTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest) GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest) GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsTearDownEnd, UnitTest) GTEST_REVERSE_REPEATER_METHOD_(OnTestEnd, TestInfo) -GTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestCase) +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ +GTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestSuite) +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ +GTEST_REVERSE_REPEATER_METHOD_(OnTestSuiteEnd, TestSuite) GTEST_REVERSE_REPEATER_METHOD_(OnTestProgramEnd, UnitTest) #undef GTEST_REPEATER_METHOD_ @@ -3383,8 +3507,8 @@ void TestEventRepeater::OnTestIterationStart(const UnitTest& unit_test, void TestEventRepeater::OnTestIterationEnd(const UnitTest& unit_test, int iteration) { if (forwarding_enabled_) { - for (int i = static_cast<int>(listeners_.size()) - 1; i >= 0; i--) { - listeners_[i]->OnTestIterationEnd(unit_test, iteration); + for (size_t i = listeners_.size(); i > 0; i--) { + listeners_[i - 1]->OnTestIterationEnd(unit_test, iteration); } } } @@ -3396,7 +3520,12 @@ class XmlUnitTestResultPrinter : public EmptyTestEventListener { public: explicit XmlUnitTestResultPrinter(const char* output_file); - virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + void OnTestIterationEnd(const UnitTest& unit_test, int iteration) override; + void ListTestsMatchingFilter(const std::vector<TestSuite*>& test_suites); + + // Prints an XML summary of all unit tests. + static void PrintXmlTestsList(std::ostream* stream, + const std::vector<TestSuite*>& test_suites); private: // Is c a whitespace character that is normalized to a space character @@ -3441,12 +3570,12 @@ class XmlUnitTestResultPrinter : public EmptyTestEventListener { // Streams an XML representation of a TestInfo object. static void OutputXmlTestInfo(::std::ostream* stream, - const char* test_case_name, + const char* test_suite_name, const TestInfo& test_info); - // Prints an XML representation of a TestCase object - static void PrintXmlTestCase(::std::ostream* stream, - const TestCase& test_case); + // Prints an XML representation of a TestSuite object + static void PrintXmlTestSuite(::std::ostream* stream, + const TestSuite& test_suite); // Prints an XML summary of unit_test to output stream out. static void PrintXmlUnitTest(::std::ostream* stream, @@ -3472,7 +3601,7 @@ class XmlUnitTestResultPrinter : public EmptyTestEventListener { // Creates a new XmlUnitTestResultPrinter. XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file) : output_file_(output_file) { - if (output_file_.c_str() == NULL || output_file_.empty()) { + if (output_file_.empty()) { GTEST_LOG_(FATAL) << "XML output file may not be null"; } } @@ -3480,33 +3609,22 @@ XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file) // Called after the unit test ends. void XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, int /*iteration*/) { - FILE* xmlout = NULL; - FilePath output_file(output_file_); - FilePath output_dir(output_file.RemoveFileName()); - - if (output_dir.CreateDirectoriesRecursively()) { - xmlout = posix::FOpen(output_file_.c_str(), "w"); - } - if (xmlout == NULL) { - // TODO(wan): report the reason of the failure. - // - // We don't do it for now as: - // - // 1. There is no urgent need for it. - // 2. It's a bit involved to make the errno variable thread-safe on - // all three operating systems (Linux, Windows, and Mac OS). - // 3. To interpret the meaning of errno in a thread-safe way, - // we need the strerror_r() function, which is not available on - // Windows. - - GTEST_LOG_(FATAL) << "Unable to open file \"" << output_file_ << "\""; - } + FILE* xmlout = OpenFileForWriting(output_file_); std::stringstream stream; PrintXmlUnitTest(&stream, unit_test); fprintf(xmlout, "%s", StringStreamToString(&stream).c_str()); fclose(xmlout); } +void XmlUnitTestResultPrinter::ListTestsMatchingFilter( + const std::vector<TestSuite*>& test_suites) { + FILE* xmlout = OpenFileForWriting(output_file_); + std::stringstream stream; + PrintXmlTestsList(&stream, test_suites); + fprintf(xmlout, "%s", StringStreamToString(&stream).c_str()); + fclose(xmlout); +} + // Returns an XML-escaped copy of the input string str. If is_attribute // is true, the text is meant to appear as an attribute value, and // normalizable whitespace is preserved by replacing it with character @@ -3517,8 +3635,6 @@ void XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, // module will consist of ordinary English text. // If this module is ever modified to produce version 1.1 XML output, // most invalid characters can be retained using character references. -// TODO(wan): It might be nice to have a minimally invasive, human-readable -// escaping scheme for invalid characters, rather than dropping them. std::string XmlUnitTestResultPrinter::EscapeXml( const std::string& str, bool is_attribute) { Message m; @@ -3578,11 +3694,12 @@ std::string XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters( // The following routines generate an XML representation of a UnitTest // object. +// GOOGLETEST_CM0009 DO NOT DELETE // // This is how Google Test concepts map to the DTD: // // <testsuites name="AllTests"> <-- corresponds to a UnitTest object -// <testsuite name="testcase-name"> <-- corresponds to a TestCase object +// <testsuite name="testcase-name"> <-- corresponds to a TestSuite object // <testcase name="test-name"> <-- corresponds to a TestInfo object // <failure message="...">...</failure> // <failure message="...">...</failure> @@ -3606,12 +3723,11 @@ static bool PortableLocaltime(time_t seconds, struct tm* out) { // MINGW <time.h> provides neither localtime_r nor localtime_s, but uses // Windows' localtime(), which has a thread-local tm buffer. struct tm* tm_ptr = localtime(&seconds); // NOLINT - if (tm_ptr == NULL) - return false; + if (tm_ptr == nullptr) return false; *out = *tm_ptr; return true; #else - return localtime_r(&seconds, out) != NULL; + return localtime_r(&seconds, out) != nullptr; #endif } @@ -3637,7 +3753,7 @@ void XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream, *stream << "<![CDATA["; for (;;) { const char* const next_segment = strstr(segment, "]]>"); - if (next_segment != NULL) { + if (next_segment != nullptr) { stream->write( segment, static_cast<std::streamsize>(next_segment - segment)); *stream << "]]>]]><![CDATA["; @@ -3656,7 +3772,7 @@ void XmlUnitTestResultPrinter::OutputXmlAttribute( const std::string& name, const std::string& value) { const std::vector<std::string>& allowed_names = - GetReservedAttributesForElement(element_name); + GetReservedOutputAttributesForElement(element_name); GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) != allowed_names.end()) @@ -3667,33 +3783,47 @@ void XmlUnitTestResultPrinter::OutputXmlAttribute( } // Prints an XML representation of a TestInfo object. -// TODO(wan): There is also value in printing properties with the plain printer. void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, - const char* test_case_name, + const char* test_suite_name, const TestInfo& test_info) { const TestResult& result = *test_info.result(); - const std::string kTestcase = "testcase"; + const std::string kTestsuite = "testcase"; if (test_info.is_in_another_shard()) { return; } *stream << " <testcase"; - OutputXmlAttribute(stream, kTestcase, "name", test_info.name()); + OutputXmlAttribute(stream, kTestsuite, "name", test_info.name()); - if (test_info.value_param() != NULL) { - OutputXmlAttribute(stream, kTestcase, "value_param", + if (test_info.value_param() != nullptr) { + OutputXmlAttribute(stream, kTestsuite, "value_param", test_info.value_param()); } - if (test_info.type_param() != NULL) { - OutputXmlAttribute(stream, kTestcase, "type_param", test_info.type_param()); + if (test_info.type_param() != nullptr) { + OutputXmlAttribute(stream, kTestsuite, "type_param", + test_info.type_param()); + } + if (GTEST_FLAG(list_tests)) { + OutputXmlAttribute(stream, kTestsuite, "file", test_info.file()); + OutputXmlAttribute(stream, kTestsuite, "line", + StreamableToString(test_info.line())); + *stream << " />\n"; + return; } - OutputXmlAttribute(stream, kTestcase, "status", + OutputXmlAttribute(stream, kTestsuite, "status", test_info.should_run() ? "run" : "notrun"); - OutputXmlAttribute(stream, kTestcase, "time", + OutputXmlAttribute(stream, kTestsuite, "result", + test_info.should_run() + ? (result.Skipped() ? "skipped" : "completed") + : "suppressed"); + OutputXmlAttribute(stream, kTestsuite, "time", FormatTimeInMillisAsSeconds(result.elapsed_time())); - OutputXmlAttribute(stream, kTestcase, "classname", test_case_name); + OutputXmlAttribute( + stream, kTestsuite, "timestamp", + FormatEpochTimeInMillisAsIso8601(result.start_timestamp())); + OutputXmlAttribute(stream, kTestsuite, "classname", test_suite_name); int failures = 0; for (int i = 0; i < result.total_part_count(); ++i) { @@ -3726,28 +3856,32 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, } } -// Prints an XML representation of a TestCase object -void XmlUnitTestResultPrinter::PrintXmlTestCase(std::ostream* stream, - const TestCase& test_case) { +// Prints an XML representation of a TestSuite object +void XmlUnitTestResultPrinter::PrintXmlTestSuite(std::ostream* stream, + const TestSuite& test_suite) { const std::string kTestsuite = "testsuite"; *stream << " <" << kTestsuite; - OutputXmlAttribute(stream, kTestsuite, "name", test_case.name()); + OutputXmlAttribute(stream, kTestsuite, "name", test_suite.name()); OutputXmlAttribute(stream, kTestsuite, "tests", - StreamableToString(test_case.reportable_test_count())); - OutputXmlAttribute(stream, kTestsuite, "failures", - StreamableToString(test_case.failed_test_count())); - OutputXmlAttribute( - stream, kTestsuite, "disabled", - StreamableToString(test_case.reportable_disabled_test_count())); - OutputXmlAttribute(stream, kTestsuite, "errors", "0"); - OutputXmlAttribute(stream, kTestsuite, "time", - FormatTimeInMillisAsSeconds(test_case.elapsed_time())); - *stream << TestPropertiesAsXmlAttributes(test_case.ad_hoc_test_result()) - << ">\n"; - - for (int i = 0; i < test_case.total_test_count(); ++i) { - if (test_case.GetTestInfo(i)->is_reportable()) - OutputXmlTestInfo(stream, test_case.name(), *test_case.GetTestInfo(i)); + StreamableToString(test_suite.reportable_test_count())); + if (!GTEST_FLAG(list_tests)) { + OutputXmlAttribute(stream, kTestsuite, "failures", + StreamableToString(test_suite.failed_test_count())); + OutputXmlAttribute( + stream, kTestsuite, "disabled", + StreamableToString(test_suite.reportable_disabled_test_count())); + OutputXmlAttribute(stream, kTestsuite, "errors", "0"); + OutputXmlAttribute(stream, kTestsuite, "time", + FormatTimeInMillisAsSeconds(test_suite.elapsed_time())); + OutputXmlAttribute( + stream, kTestsuite, "timestamp", + FormatEpochTimeInMillisAsIso8601(test_suite.start_timestamp())); + *stream << TestPropertiesAsXmlAttributes(test_suite.ad_hoc_test_result()); + } + *stream << ">\n"; + for (int i = 0; i < test_suite.total_test_count(); ++i) { + if (test_suite.GetTestInfo(i)->is_reportable()) + OutputXmlTestInfo(stream, test_suite.name(), *test_suite.GetTestInfo(i)); } *stream << " </" << kTestsuite << ">\n"; } @@ -3768,11 +3902,11 @@ void XmlUnitTestResultPrinter::PrintXmlUnitTest(std::ostream* stream, stream, kTestsuites, "disabled", StreamableToString(unit_test.reportable_disabled_test_count())); OutputXmlAttribute(stream, kTestsuites, "errors", "0"); + OutputXmlAttribute(stream, kTestsuites, "time", + FormatTimeInMillisAsSeconds(unit_test.elapsed_time())); OutputXmlAttribute( stream, kTestsuites, "timestamp", FormatEpochTimeInMillisAsIso8601(unit_test.start_timestamp())); - OutputXmlAttribute(stream, kTestsuites, "time", - FormatTimeInMillisAsSeconds(unit_test.elapsed_time())); if (GTEST_FLAG(shuffle)) { OutputXmlAttribute(stream, kTestsuites, "random_seed", @@ -3783,9 +3917,31 @@ void XmlUnitTestResultPrinter::PrintXmlUnitTest(std::ostream* stream, OutputXmlAttribute(stream, kTestsuites, "name", "AllTests"); *stream << ">\n"; - for (int i = 0; i < unit_test.total_test_case_count(); ++i) { - if (unit_test.GetTestCase(i)->reportable_test_count() > 0) - PrintXmlTestCase(stream, *unit_test.GetTestCase(i)); + for (int i = 0; i < unit_test.total_test_suite_count(); ++i) { + if (unit_test.GetTestSuite(i)->reportable_test_count() > 0) + PrintXmlTestSuite(stream, *unit_test.GetTestSuite(i)); + } + *stream << "</" << kTestsuites << ">\n"; +} + +void XmlUnitTestResultPrinter::PrintXmlTestsList( + std::ostream* stream, const std::vector<TestSuite*>& test_suites) { + const std::string kTestsuites = "testsuites"; + + *stream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; + *stream << "<" << kTestsuites; + + int total_tests = 0; + for (auto test_suite : test_suites) { + total_tests += test_suite->total_test_count(); + } + OutputXmlAttribute(stream, kTestsuites, "tests", + StreamableToString(total_tests)); + OutputXmlAttribute(stream, kTestsuites, "name", "AllTests"); + *stream << ">\n"; + + for (auto test_suite : test_suites) { + PrintXmlTestSuite(stream, *test_suite); } *stream << "</" << kTestsuites << ">\n"; } @@ -3825,13 +3981,16 @@ void XmlUnitTestResultPrinter::OutputXmlTestProperties( // End XmlUnitTestResultPrinter - // This class generates an JSON output file. class JsonUnitTestResultPrinter : public EmptyTestEventListener { public: explicit JsonUnitTestResultPrinter(const char* output_file); - virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration); + void OnTestIterationEnd(const UnitTest& unit_test, int iteration) override; + + // Prints an JSON summary of all unit tests. + static void PrintJsonTestList(::std::ostream* stream, + const std::vector<TestSuite*>& test_suites); private: // Returns an JSON-escaped copy of the input string str. @@ -3854,12 +4013,12 @@ class JsonUnitTestResultPrinter : public EmptyTestEventListener { // Streams a JSON representation of a TestInfo object. static void OutputJsonTestInfo(::std::ostream* stream, - const char* test_case_name, + const char* test_suite_name, const TestInfo& test_info); - // Prints a JSON representation of a TestCase object - static void PrintJsonTestCase(::std::ostream* stream, - const TestCase& test_case); + // Prints a JSON representation of a TestSuite object + static void PrintJsonTestSuite(::std::ostream* stream, + const TestSuite& test_suite); // Prints a JSON summary of unit_test to output stream out. static void PrintJsonUnitTest(::std::ostream* stream, @@ -3886,27 +4045,7 @@ JsonUnitTestResultPrinter::JsonUnitTestResultPrinter(const char* output_file) void JsonUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, int /*iteration*/) { - FILE* jsonout = NULL; - FilePath output_file(output_file_); - FilePath output_dir(output_file.RemoveFileName()); - - if (output_dir.CreateDirectoriesRecursively()) { - jsonout = posix::FOpen(output_file_.c_str(), "w"); - } - if (jsonout == NULL) { - // TODO(phosek): report the reason of the failure. - // - // We don't do it for now as: - // - // 1. There is no urgent need for it. - // 2. It's a bit involved to make the errno variable thread-safe on - // all three operating systems (Linux, Windows, and Mac OS). - // 3. To interpret the meaning of errno in a thread-safe way, - // we need the strerror_r() function, which is not available on - // Windows. - GTEST_LOG_(FATAL) << "Unable to open file \"" - << output_file_ << "\""; - } + FILE* jsonout = OpenFileForWriting(output_file_); std::stringstream stream; PrintJsonUnitTest(&stream, unit_test); fprintf(jsonout, "%s", StringStreamToString(&stream).c_str()); @@ -3978,7 +4117,7 @@ static std::string FormatEpochTimeInMillisAsRFC3339(TimeInMillis ms) { String::FormatIntWidth2(time_struct.tm_sec) + "Z"; } -static inline std::string Indent(int width) { +static inline std::string Indent(size_t width) { return std::string(width, ' '); } @@ -3990,7 +4129,7 @@ void JsonUnitTestResultPrinter::OutputJsonKey( const std::string& indent, bool comma) { const std::vector<std::string>& allowed_names = - GetReservedAttributesForElement(element_name); + GetReservedOutputAttributesForElement(element_name); GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) != allowed_names.end()) @@ -4010,7 +4149,7 @@ void JsonUnitTestResultPrinter::OutputJsonKey( const std::string& indent, bool comma) { const std::vector<std::string>& allowed_names = - GetReservedAttributesForElement(element_name); + GetReservedOutputAttributesForElement(element_name); GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) != allowed_names.end()) @@ -4024,29 +4163,44 @@ void JsonUnitTestResultPrinter::OutputJsonKey( // Prints a JSON representation of a TestInfo object. void JsonUnitTestResultPrinter::OutputJsonTestInfo(::std::ostream* stream, - const char* test_case_name, + const char* test_suite_name, const TestInfo& test_info) { const TestResult& result = *test_info.result(); - const std::string kTestcase = "testcase"; + const std::string kTestsuite = "testcase"; const std::string kIndent = Indent(10); *stream << Indent(8) << "{\n"; - OutputJsonKey(stream, kTestcase, "name", test_info.name(), kIndent); + OutputJsonKey(stream, kTestsuite, "name", test_info.name(), kIndent); - if (test_info.value_param() != NULL) { - OutputJsonKey(stream, kTestcase, "value_param", - test_info.value_param(), kIndent); + if (test_info.value_param() != nullptr) { + OutputJsonKey(stream, kTestsuite, "value_param", test_info.value_param(), + kIndent); } - if (test_info.type_param() != NULL) { - OutputJsonKey(stream, kTestcase, "type_param", test_info.type_param(), + if (test_info.type_param() != nullptr) { + OutputJsonKey(stream, kTestsuite, "type_param", test_info.type_param(), kIndent); } + if (GTEST_FLAG(list_tests)) { + OutputJsonKey(stream, kTestsuite, "file", test_info.file(), kIndent); + OutputJsonKey(stream, kTestsuite, "line", test_info.line(), kIndent, false); + *stream << "\n" << Indent(8) << "}"; + return; + } - OutputJsonKey(stream, kTestcase, "status", + OutputJsonKey(stream, kTestsuite, "status", test_info.should_run() ? "RUN" : "NOTRUN", kIndent); - OutputJsonKey(stream, kTestcase, "time", + OutputJsonKey(stream, kTestsuite, "result", + test_info.should_run() + ? (result.Skipped() ? "SKIPPED" : "COMPLETED") + : "SUPPRESSED", + kIndent); + OutputJsonKey(stream, kTestsuite, "timestamp", + FormatEpochTimeInMillisAsRFC3339(result.start_timestamp()), + kIndent); + OutputJsonKey(stream, kTestsuite, "time", FormatTimeInMillisAsDuration(result.elapsed_time()), kIndent); - OutputJsonKey(stream, kTestcase, "classname", test_case_name, kIndent, false); + OutputJsonKey(stream, kTestsuite, "classname", test_suite_name, kIndent, + false); *stream << TestPropertiesAsJson(result, kIndent); int failures = 0; @@ -4073,38 +4227,44 @@ void JsonUnitTestResultPrinter::OutputJsonTestInfo(::std::ostream* stream, *stream << "\n" << Indent(8) << "}"; } -// Prints an JSON representation of a TestCase object -void JsonUnitTestResultPrinter::PrintJsonTestCase(std::ostream* stream, - const TestCase& test_case) { +// Prints an JSON representation of a TestSuite object +void JsonUnitTestResultPrinter::PrintJsonTestSuite( + std::ostream* stream, const TestSuite& test_suite) { const std::string kTestsuite = "testsuite"; const std::string kIndent = Indent(6); *stream << Indent(4) << "{\n"; - OutputJsonKey(stream, kTestsuite, "name", test_case.name(), kIndent); - OutputJsonKey(stream, kTestsuite, "tests", test_case.reportable_test_count(), - kIndent); - OutputJsonKey(stream, kTestsuite, "failures", test_case.failed_test_count(), + OutputJsonKey(stream, kTestsuite, "name", test_suite.name(), kIndent); + OutputJsonKey(stream, kTestsuite, "tests", test_suite.reportable_test_count(), kIndent); - OutputJsonKey(stream, kTestsuite, "disabled", - test_case.reportable_disabled_test_count(), kIndent); - OutputJsonKey(stream, kTestsuite, "errors", 0, kIndent); - OutputJsonKey(stream, kTestsuite, "time", - FormatTimeInMillisAsDuration(test_case.elapsed_time()), kIndent, - false); - *stream << TestPropertiesAsJson(test_case.ad_hoc_test_result(), kIndent) - << ",\n"; + if (!GTEST_FLAG(list_tests)) { + OutputJsonKey(stream, kTestsuite, "failures", + test_suite.failed_test_count(), kIndent); + OutputJsonKey(stream, kTestsuite, "disabled", + test_suite.reportable_disabled_test_count(), kIndent); + OutputJsonKey(stream, kTestsuite, "errors", 0, kIndent); + OutputJsonKey( + stream, kTestsuite, "timestamp", + FormatEpochTimeInMillisAsRFC3339(test_suite.start_timestamp()), + kIndent); + OutputJsonKey(stream, kTestsuite, "time", + FormatTimeInMillisAsDuration(test_suite.elapsed_time()), + kIndent, false); + *stream << TestPropertiesAsJson(test_suite.ad_hoc_test_result(), kIndent) + << ",\n"; + } *stream << kIndent << "\"" << kTestsuite << "\": [\n"; bool comma = false; - for (int i = 0; i < test_case.total_test_count(); ++i) { - if (test_case.GetTestInfo(i)->is_reportable()) { + for (int i = 0; i < test_suite.total_test_count(); ++i) { + if (test_suite.GetTestInfo(i)->is_reportable()) { if (comma) { *stream << ",\n"; } else { comma = true; } - OutputJsonTestInfo(stream, test_case.name(), *test_case.GetTestInfo(i)); + OutputJsonTestInfo(stream, test_suite.name(), *test_suite.GetTestInfo(i)); } } *stream << "\n" << kIndent << "]\n" << Indent(4) << "}"; @@ -4142,20 +4302,45 @@ void JsonUnitTestResultPrinter::PrintJsonUnitTest(std::ostream* stream, *stream << kIndent << "\"" << kTestsuites << "\": [\n"; bool comma = false; - for (int i = 0; i < unit_test.total_test_case_count(); ++i) { - if (unit_test.GetTestCase(i)->reportable_test_count() > 0) { + for (int i = 0; i < unit_test.total_test_suite_count(); ++i) { + if (unit_test.GetTestSuite(i)->reportable_test_count() > 0) { if (comma) { *stream << ",\n"; } else { comma = true; } - PrintJsonTestCase(stream, *unit_test.GetTestCase(i)); + PrintJsonTestSuite(stream, *unit_test.GetTestSuite(i)); } } *stream << "\n" << kIndent << "]\n" << "}\n"; } +void JsonUnitTestResultPrinter::PrintJsonTestList( + std::ostream* stream, const std::vector<TestSuite*>& test_suites) { + const std::string kTestsuites = "testsuites"; + const std::string kIndent = Indent(2); + *stream << "{\n"; + int total_tests = 0; + for (auto test_suite : test_suites) { + total_tests += test_suite->total_test_count(); + } + OutputJsonKey(stream, kTestsuites, "tests", total_tests, kIndent); + + OutputJsonKey(stream, kTestsuites, "name", "AllTests", kIndent); + *stream << kIndent << "\"" << kTestsuites << "\": [\n"; + + for (size_t i = 0; i < test_suites.size(); ++i) { + if (i != 0) { + *stream << ",\n"; + } + PrintJsonTestSuite(stream, *test_suites[i]); + } + + *stream << "\n" + << kIndent << "]\n" + << "}\n"; +} // Produces a string representing the test properties in a result as // a JSON dictionary. std::string JsonUnitTestResultPrinter::TestPropertiesAsJson( @@ -4205,7 +4390,7 @@ void StreamingListener::SocketWriter::MakeConnection() { memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; // To allow both IPv4 and IPv6 addresses. hints.ai_socktype = SOCK_STREAM; - addrinfo* servinfo = NULL; + addrinfo* servinfo = nullptr; // Use the getaddrinfo() to get a linked list of IP addresses for // the given host name. @@ -4217,7 +4402,7 @@ void StreamingListener::SocketWriter::MakeConnection() { } // Loop through all the results and connect to the first we can. - for (addrinfo* cur_addr = servinfo; sockfd_ == -1 && cur_addr != NULL; + for (addrinfo* cur_addr = servinfo; sockfd_ == -1 && cur_addr != nullptr; cur_addr = cur_addr->ai_next) { sockfd_ = socket( cur_addr->ai_family, cur_addr->ai_socktype, cur_addr->ai_protocol); @@ -4246,12 +4431,67 @@ void StreamingListener::SocketWriter::MakeConnection() { const char* const OsStackTraceGetterInterface::kElidedFramesMarker = "... " GTEST_NAME_ " internal frames ..."; -std::string OsStackTraceGetter::CurrentStackTrace(int /*max_depth*/, - int /*skip_count*/) { +std::string OsStackTraceGetter::CurrentStackTrace(int max_depth, int skip_count) + GTEST_LOCK_EXCLUDED_(mutex_) { +#if GTEST_HAS_ABSL + std::string result; + + if (max_depth <= 0) { + return result; + } + + max_depth = std::min(max_depth, kMaxStackTraceDepth); + + std::vector<void*> raw_stack(max_depth); + // Skips the frames requested by the caller, plus this function. + const int raw_stack_size = + absl::GetStackTrace(&raw_stack[0], max_depth, skip_count + 1); + + void* caller_frame = nullptr; + { + MutexLock lock(&mutex_); + caller_frame = caller_frame_; + } + + for (int i = 0; i < raw_stack_size; ++i) { + if (raw_stack[i] == caller_frame && + !GTEST_FLAG(show_internal_stack_frames)) { + // Add a marker to the trace and stop adding frames. + absl::StrAppend(&result, kElidedFramesMarker, "\n"); + break; + } + + char tmp[1024]; + const char* symbol = "(unknown)"; + if (absl::Symbolize(raw_stack[i], tmp, sizeof(tmp))) { + symbol = tmp; + } + + char line[1024]; + snprintf(line, sizeof(line), " %p: %s\n", raw_stack[i], symbol); + result += line; + } + + return result; + +#else // !GTEST_HAS_ABSL + static_cast<void>(max_depth); + static_cast<void>(skip_count); return ""; +#endif // GTEST_HAS_ABSL } -void OsStackTraceGetter::UponLeavingGTest() {} +void OsStackTraceGetter::UponLeavingGTest() GTEST_LOCK_EXCLUDED_(mutex_) { +#if GTEST_HAS_ABSL + void* caller_frame = nullptr; + if (absl::GetStackTrace(&caller_frame, 1, 3) <= 0) { + caller_frame = nullptr; + } + + MutexLock lock(&mutex_); + caller_frame_ = caller_frame; +#endif // GTEST_HAS_ABSL +} // A helper class that creates the premature-exit file in its // constructor and deletes the file in its destructor. @@ -4294,9 +4534,8 @@ class ScopedPrematureExitFile { TestEventListeners::TestEventListeners() : repeater_(new internal::TestEventRepeater()), - default_result_printer_(NULL), - default_xml_generator_(NULL) { -} + default_result_printer_(nullptr), + default_xml_generator_(nullptr) {} TestEventListeners::~TestEventListeners() { delete repeater_; } @@ -4313,9 +4552,9 @@ void TestEventListeners::Append(TestEventListener* listener) { // NULL if the listener is not found in the list. TestEventListener* TestEventListeners::Release(TestEventListener* listener) { if (listener == default_result_printer_) - default_result_printer_ = NULL; + default_result_printer_ = nullptr; else if (listener == default_xml_generator_) - default_xml_generator_ = NULL; + default_xml_generator_ = nullptr; return repeater_->Release(listener); } @@ -4334,8 +4573,7 @@ void TestEventListeners::SetDefaultResultPrinter(TestEventListener* listener) { // list. delete Release(default_result_printer_); default_result_printer_ = listener; - if (listener != NULL) - Append(listener); + if (listener != nullptr) Append(listener); } } @@ -4350,8 +4588,7 @@ void TestEventListeners::SetDefaultXmlGenerator(TestEventListener* listener) { // list. delete Release(default_xml_generator_); default_xml_generator_ = listener; - if (listener != NULL) - Append(listener); + if (listener != nullptr) Append(listener); } } @@ -4375,52 +4612,66 @@ void TestEventListeners::SuppressEventForwarding() { // call this before main() starts, from which point on the return // value will never change. UnitTest* UnitTest::GetInstance() { - // When compiled with MSVC 7.1 in optimized mode, destroying the - // UnitTest object upon exiting the program messes up the exit code, - // causing successful tests to appear failed. We have to use a - // different implementation in this case to bypass the compiler bug. - // This implementation makes the compiler happy, at the cost of - // leaking the UnitTest object. - // CodeGear C++Builder insists on a public destructor for the // default implementation. Use this implementation to keep good OO // design with private destructor. -#if (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) +#if defined(__BORLANDC__) static UnitTest* const instance = new UnitTest; return instance; #else static UnitTest instance; return &instance; -#endif // (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__) +#endif // defined(__BORLANDC__) } -// Gets the number of successful test cases. -int UnitTest::successful_test_case_count() const { - return impl()->successful_test_case_count(); +// Gets the number of successful test suites. +int UnitTest::successful_test_suite_count() const { + return impl()->successful_test_suite_count(); } -// Gets the number of failed test cases. -int UnitTest::failed_test_case_count() const { - return impl()->failed_test_case_count(); +// Gets the number of failed test suites. +int UnitTest::failed_test_suite_count() const { + return impl()->failed_test_suite_count(); } -// Gets the number of all test cases. -int UnitTest::total_test_case_count() const { - return impl()->total_test_case_count(); +// Gets the number of all test suites. +int UnitTest::total_test_suite_count() const { + return impl()->total_test_suite_count(); } -// Gets the number of all test cases that contain at least one test +// Gets the number of all test suites that contain at least one test // that should run. +int UnitTest::test_suite_to_run_count() const { + return impl()->test_suite_to_run_count(); +} + +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ +int UnitTest::successful_test_case_count() const { + return impl()->successful_test_suite_count(); +} +int UnitTest::failed_test_case_count() const { + return impl()->failed_test_suite_count(); +} +int UnitTest::total_test_case_count() const { + return impl()->total_test_suite_count(); +} int UnitTest::test_case_to_run_count() const { - return impl()->test_case_to_run_count(); + return impl()->test_suite_to_run_count(); } +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ // Gets the number of successful tests. int UnitTest::successful_test_count() const { return impl()->successful_test_count(); } +// Gets the number of skipped tests. +int UnitTest::skipped_test_count() const { + return impl()->skipped_test_count(); +} + // Gets the number of failed tests. int UnitTest::failed_test_count() const { return impl()->failed_test_count(); } @@ -4456,29 +4707,37 @@ internal::TimeInMillis UnitTest::elapsed_time() const { return impl()->elapsed_time(); } -// Returns true iff the unit test passed (i.e. all test cases passed). +// Returns true if and only if the unit test passed (i.e. all test suites +// passed). bool UnitTest::Passed() const { return impl()->Passed(); } -// Returns true iff the unit test failed (i.e. some test case failed -// or something outside of all tests failed). +// Returns true if and only if the unit test failed (i.e. some test suite +// failed or something outside of all tests failed). bool UnitTest::Failed() const { return impl()->Failed(); } -// Gets the i-th test case among all the test cases. i can range from 0 to -// total_test_case_count() - 1. If i is not in that range, returns NULL. +// Gets the i-th test suite among all the test suites. i can range from 0 to +// total_test_suite_count() - 1. If i is not in that range, returns NULL. +const TestSuite* UnitTest::GetTestSuite(int i) const { + return impl()->GetTestSuite(i); +} + +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ const TestCase* UnitTest::GetTestCase(int i) const { return impl()->GetTestCase(i); } +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ // Returns the TestResult containing information on test failures and -// properties logged outside of individual test cases. +// properties logged outside of individual test suites. const TestResult& UnitTest::ad_hoc_test_result() const { return *impl()->ad_hoc_test_result(); } -// Gets the i-th test case among all the test cases. i can range from 0 to -// total_test_case_count() - 1. If i is not in that range, returns NULL. -TestCase* UnitTest::GetMutableTestCase(int i) { - return impl()->GetMutableTestCase(i); +// Gets the i-th test suite among all the test suites. i can range from 0 to +// total_test_suite_count() - 1. If i is not in that range, returns NULL. +TestSuite* UnitTest::GetMutableTestSuite(int i) { + return impl()->GetMutableSuiteCase(i); } // Returns the list of event listeners that can be used to track events @@ -4498,8 +4757,8 @@ TestEventListeners& UnitTest::listeners() { // We don't protect this under mutex_, as we only support calling it // from the main thread. Environment* UnitTest::AddEnvironment(Environment* env) { - if (env == NULL) { - return NULL; + if (env == nullptr) { + return nullptr; } impl_->environments().push_back(env); @@ -4523,25 +4782,24 @@ void UnitTest::AddTestPartResult( if (impl_->gtest_trace_stack().size() > 0) { msg << "\n" << GTEST_NAME_ << " trace:"; - for (int i = static_cast<int>(impl_->gtest_trace_stack().size()); - i > 0; --i) { + for (size_t i = impl_->gtest_trace_stack().size(); i > 0; --i) { const internal::TraceInfo& trace = impl_->gtest_trace_stack()[i - 1]; msg << "\n" << internal::FormatFileLocation(trace.file, trace.line) << " " << trace.message; } } - if (os_stack_trace.c_str() != NULL && !os_stack_trace.empty()) { + if (os_stack_trace.c_str() != nullptr && !os_stack_trace.empty()) { msg << internal::kStackTraceMarker << os_stack_trace; } - const TestPartResult result = - TestPartResult(result_type, file_name, line_number, - msg.GetString().c_str()); + const TestPartResult result = TestPartResult( + result_type, file_name, line_number, msg.GetString().c_str()); impl_->GetTestPartResultReporterForCurrentThread()-> ReportTestPartResult(result); - if (result_type != TestPartResult::kSuccess) { + if (result_type != TestPartResult::kSuccess && + result_type != TestPartResult::kSkip) { // gtest_break_on_failure takes precedence over // gtest_throw_on_failure. This allows a user to set the latter // in the code (perhaps in order to use Google Test assertions @@ -4559,11 +4817,10 @@ void UnitTest::AddTestPartResult( // with clang/gcc we can achieve the same effect on x86 by invoking int3 asm("int3"); #else - // Dereference NULL through a volatile pointer to prevent the compiler + // Dereference nullptr through a volatile pointer to prevent the compiler // from removing. We use this rather than abort() or __builtin_trap() for - // portability: Symbian doesn't implement abort() well, and some debuggers - // don't correctly trap abort(). - *static_cast<volatile int*>(NULL) = 1; + // portability: some debuggers don't correctly trap abort(). + *static_cast<volatile int*>(nullptr) = 1; #endif // GTEST_OS_WINDOWS } else if (GTEST_FLAG(throw_on_failure)) { #if GTEST_HAS_EXCEPTIONS @@ -4578,8 +4835,8 @@ void UnitTest::AddTestPartResult( } // Adds a TestProperty to the current TestResult object when invoked from -// inside a test, to current TestCase's ad_hoc_test_result_ when invoked -// from SetUpTestCase or TearDownTestCase, or to the global property set +// inside a test, to current TestSuite's ad_hoc_test_result_ when invoked +// from SetUpTestSuite or TearDownTestSuite, or to the global property set // when invoked elsewhere. If the result already contains a property with // the same key, the value will be updated. void UnitTest::RecordProperty(const std::string& key, @@ -4618,14 +4875,15 @@ int UnitTest::Run() { // that understands the premature-exit-file protocol to report the // test as having failed. const internal::ScopedPrematureExitFile premature_exit_file( - in_death_test_child_process ? - NULL : internal::posix::GetEnv("TEST_PREMATURE_EXIT_FILE")); + in_death_test_child_process + ? nullptr + : internal::posix::GetEnv("TEST_PREMATURE_EXIT_FILE")); // Captures the value of GTEST_FLAG(catch_exceptions). This value will be // used for the duration of the program. impl()->set_catch_exceptions(GTEST_FLAG(catch_exceptions)); -#if GTEST_HAS_SEH +#if GTEST_OS_WINDOWS // Either the user wants Google Test to catch exceptions thrown by the // tests or this is executing in the context of death test child // process. In either case the user does not want to see pop-up dialogs @@ -4644,25 +4902,29 @@ int UnitTest::Run() { _set_error_mode(_OUT_TO_STDERR); # endif -# if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE +# if defined(_MSC_VER) && !GTEST_OS_WINDOWS_MOBILE // In the debug version, Visual Studio pops up a separate dialog // offering a choice to debug the aborted program. We need to suppress // this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement // executed. Google Test will notify the user of any unexpected // failure via stderr. - // - // VC++ doesn't define _set_abort_behavior() prior to the version 8.0. - // Users of prior VC versions shall suffer the agony and pain of - // clicking through the countless debug dialogs. - // TODO(vladl@google.com): find a way to suppress the abort dialog() in the - // debug mode when compiled with VC 7.1 or lower. if (!GTEST_FLAG(break_on_failure)) _set_abort_behavior( 0x0, // Clear the following flags: _WRITE_ABORT_MSG | _CALL_REPORTFAULT); // pop-up window, core dump. # endif + + // In debug mode, the Windows CRT can crash with an assertion over invalid + // input (e.g. passing an invalid file descriptor). The default handling + // for these assertions is to pop up a dialog and wait for user input. + // Instead ask the CRT to dump such assertions to stderr non-interactively. + if (!IsDebuggerPresent()) { + (void)_CrtSetReportMode(_CRT_ASSERT, + _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); + (void)_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); + } } -#endif // GTEST_HAS_SEH +#endif // GTEST_OS_WINDOWS return internal::HandleExceptionsInMethodIfSupported( impl(), @@ -4676,13 +4938,22 @@ const char* UnitTest::original_working_dir() const { return impl_->original_working_dir_.c_str(); } -// Returns the TestCase object for the test that's currently running, +// Returns the TestSuite object for the test that's currently running, // or NULL if no test is running. +const TestSuite* UnitTest::current_test_suite() const + GTEST_LOCK_EXCLUDED_(mutex_) { + internal::MutexLock lock(&mutex_); + return impl_->current_test_suite(); +} + +// Legacy API is still available but deprecated +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ const TestCase* UnitTest::current_test_case() const GTEST_LOCK_EXCLUDED_(mutex_) { internal::MutexLock lock(&mutex_); - return impl_->current_test_case(); + return impl_->current_test_suite(); } +#endif // Returns the TestInfo object for the test that's currently running, // or NULL if no test is running. @@ -4695,11 +4966,10 @@ const TestInfo* UnitTest::current_test_info() const // Returns the random seed used at the start of the current test run. int UnitTest::random_seed() const { return impl_->random_seed(); } -// Returns ParameterizedTestCaseRegistry object used to keep track of +// Returns ParameterizedTestSuiteRegistry object used to keep track of // value-parameterized tests and instantiate and register them. -internal::ParameterizedTestCaseRegistry& - UnitTest::parameterized_test_registry() - GTEST_LOCK_EXCLUDED_(mutex_) { +internal::ParameterizedTestSuiteRegistry& +UnitTest::parameterized_test_registry() GTEST_LOCK_EXCLUDED_(mutex_) { return impl_->parameterized_test_registry(); } @@ -4733,23 +5003,22 @@ namespace internal { UnitTestImpl::UnitTestImpl(UnitTest* parent) : parent_(parent), GTEST_DISABLE_MSC_WARNINGS_PUSH_(4355 /* using this in initializer */) - default_global_test_part_result_reporter_(this), + default_global_test_part_result_reporter_(this), default_per_thread_test_part_result_reporter_(this), - GTEST_DISABLE_MSC_WARNINGS_POP_() - global_test_part_result_repoter_( + GTEST_DISABLE_MSC_WARNINGS_POP_() global_test_part_result_repoter_( &default_global_test_part_result_reporter_), per_thread_test_part_result_reporter_( &default_per_thread_test_part_result_reporter_), parameterized_test_registry_(), parameterized_tests_registered_(false), - last_death_test_case_(-1), - current_test_case_(NULL), - current_test_info_(NULL), + last_death_test_suite_(-1), + current_test_suite_(nullptr), + current_test_info_(nullptr), ad_hoc_test_result_(), - os_stack_trace_getter_(NULL), + os_stack_trace_getter_(nullptr), post_flag_parse_init_performed_(false), random_seed_(0), // Will be overridden by the flag before first use. - random_(0), // Will be reseeded before first use. + random_(0), // Will be reseeded before first use. start_timestamp_(0), elapsed_time_(0), #if GTEST_HAS_DEATH_TEST @@ -4761,8 +5030,8 @@ UnitTestImpl::UnitTestImpl(UnitTest* parent) } UnitTestImpl::~UnitTestImpl() { - // Deletes every TestCase. - ForEach(test_cases_, internal::Delete<TestCase>); + // Deletes every TestSuite. + ForEach(test_suites_, internal::Delete<TestSuite>); // Deletes every Environment. ForEach(environments_, internal::Delete<Environment>); @@ -4771,20 +5040,20 @@ UnitTestImpl::~UnitTestImpl() { } // Adds a TestProperty to the current TestResult object when invoked in a -// context of a test, to current test case's ad_hoc_test_result when invoke -// from SetUpTestCase/TearDownTestCase, or to the global property set +// context of a test, to current test suite's ad_hoc_test_result when invoke +// from SetUpTestSuite/TearDownTestSuite, or to the global property set // otherwise. If the result already contains a property with the same key, // the value will be updated. void UnitTestImpl::RecordProperty(const TestProperty& test_property) { std::string xml_element; TestResult* test_result; // TestResult appropriate for property recording. - if (current_test_info_ != NULL) { + if (current_test_info_ != nullptr) { xml_element = "testcase"; test_result = &(current_test_info_->result_); - } else if (current_test_case_ != NULL) { + } else if (current_test_suite_ != nullptr) { xml_element = "testsuite"; - test_result = &(current_test_case_->ad_hoc_test_result_); + test_result = &(current_test_suite_->ad_hoc_test_result_); } else { xml_element = "testsuites"; test_result = &ad_hoc_test_result_; @@ -4796,7 +5065,7 @@ void UnitTestImpl::RecordProperty(const TestProperty& test_property) { // Disables event forwarding if the control is currently in a death test // subprocess. Must not be called before InitGoogleTest. void UnitTestImpl::SuppressTestEventsIfInSubprocess() { - if (internal_run_death_test_flag_.get() != NULL) + if (internal_run_death_test_flag_.get() != nullptr) listeners()->SuppressEventForwarding(); } #endif // GTEST_HAS_DEATH_TEST @@ -4868,77 +5137,83 @@ void UnitTestImpl::PostFlagParsingInit() { // Configures listeners for streaming test results to the specified server. ConfigureStreamingOutput(); #endif // GTEST_CAN_STREAM_RESULTS_ + +#if GTEST_HAS_ABSL + if (GTEST_FLAG(install_failure_signal_handler)) { + absl::FailureSignalHandlerOptions options; + absl::InstallFailureSignalHandler(options); + } +#endif // GTEST_HAS_ABSL } } -// A predicate that checks the name of a TestCase against a known +// A predicate that checks the name of a TestSuite against a known // value. // // This is used for implementation of the UnitTest class only. We put // it in the anonymous namespace to prevent polluting the outer // namespace. // -// TestCaseNameIs is copyable. -class TestCaseNameIs { +// TestSuiteNameIs is copyable. +class TestSuiteNameIs { public: // Constructor. - explicit TestCaseNameIs(const std::string& name) - : name_(name) {} + explicit TestSuiteNameIs(const std::string& name) : name_(name) {} - // Returns true iff the name of test_case matches name_. - bool operator()(const TestCase* test_case) const { - return test_case != NULL && strcmp(test_case->name(), name_.c_str()) == 0; + // Returns true if and only if the name of test_suite matches name_. + bool operator()(const TestSuite* test_suite) const { + return test_suite != nullptr && + strcmp(test_suite->name(), name_.c_str()) == 0; } private: std::string name_; }; -// Finds and returns a TestCase with the given name. If one doesn't +// Finds and returns a TestSuite with the given name. If one doesn't // exist, creates one and returns it. It's the CALLER'S // RESPONSIBILITY to ensure that this function is only called WHEN THE // TESTS ARE NOT SHUFFLED. // // Arguments: // -// test_case_name: name of the test case -// type_param: the name of the test case's type parameter, or NULL if -// this is not a typed or a type-parameterized test case. -// set_up_tc: pointer to the function that sets up the test case -// tear_down_tc: pointer to the function that tears down the test case -TestCase* UnitTestImpl::GetTestCase(const char* test_case_name, - const char* type_param, - Test::SetUpTestCaseFunc set_up_tc, - Test::TearDownTestCaseFunc tear_down_tc) { - // Can we find a TestCase with the given name? - const std::vector<TestCase*>::const_iterator test_case = - std::find_if(test_cases_.begin(), test_cases_.end(), - TestCaseNameIs(test_case_name)); - - if (test_case != test_cases_.end()) - return *test_case; +// test_suite_name: name of the test suite +// type_param: the name of the test suite's type parameter, or NULL if +// this is not a typed or a type-parameterized test suite. +// set_up_tc: pointer to the function that sets up the test suite +// tear_down_tc: pointer to the function that tears down the test suite +TestSuite* UnitTestImpl::GetTestSuite( + const char* test_suite_name, const char* type_param, + internal::SetUpTestSuiteFunc set_up_tc, + internal::TearDownTestSuiteFunc tear_down_tc) { + // Can we find a TestSuite with the given name? + const auto test_suite = + std::find_if(test_suites_.rbegin(), test_suites_.rend(), + TestSuiteNameIs(test_suite_name)); + + if (test_suite != test_suites_.rend()) return *test_suite; // No. Let's create one. - TestCase* const new_test_case = - new TestCase(test_case_name, type_param, set_up_tc, tear_down_tc); - - // Is this a death test case? - if (internal::UnitTestOptions::MatchesFilter(test_case_name, - kDeathTestCaseFilter)) { - // Yes. Inserts the test case after the last death test case - // defined so far. This only works when the test cases haven't + auto* const new_test_suite = + new TestSuite(test_suite_name, type_param, set_up_tc, tear_down_tc); + + // Is this a death test suite? + if (internal::UnitTestOptions::MatchesFilter(test_suite_name, + kDeathTestSuiteFilter)) { + // Yes. Inserts the test suite after the last death test suite + // defined so far. This only works when the test suites haven't // been shuffled. Otherwise we may end up running a death test // after a non-death test. - ++last_death_test_case_; - test_cases_.insert(test_cases_.begin() + last_death_test_case_, - new_test_case); + ++last_death_test_suite_; + test_suites_.insert(test_suites_.begin() + last_death_test_suite_, + new_test_suite); } else { // No. Appends to the end of the list. - test_cases_.push_back(new_test_case); + test_suites_.push_back(new_test_suite); } - test_case_indices_.push_back(static_cast<int>(test_case_indices_.size())); - return new_test_case; + test_suite_indices_.push_back(static_cast<int>(test_suite_indices_.size())); + return new_test_suite; } // Helpers for setting up / tearing down the given environment. They @@ -4956,7 +5231,8 @@ static void TearDownEnvironment(Environment* env) { env->TearDown(); } // All other functions called from RunAllTests() may safely assume that // parameterized tests are ready to be counted and run. bool UnitTestImpl::RunAllTests() { - // True iff Google Test is initialized before RUN_ALL_TESTS() is called. + // True if and only if Google Test is initialized before RUN_ALL_TESTS() is + // called. const bool gtest_is_initialized_before_run_all_tests = GTestIsInitialized(); // Do not run any test if the --help flag was specified. @@ -4972,12 +5248,13 @@ bool UnitTestImpl::RunAllTests() { // protocol. internal::WriteToShardStatusFileIfNeeded(); - // True iff we are in a subprocess for running a thread-safe-style + // True if and only if we are in a subprocess for running a thread-safe-style // death test. bool in_subprocess_for_death_test = false; #if GTEST_HAS_DEATH_TEST - in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != NULL); + in_subprocess_for_death_test = + (internal_run_death_test_flag_.get() != nullptr); # if defined(GTEST_EXTRA_DEATH_TEST_CHILD_SETUP_) if (in_subprocess_for_death_test) { GTEST_EXTRA_DEATH_TEST_CHILD_SETUP_(); @@ -5004,7 +5281,7 @@ bool UnitTestImpl::RunAllTests() { random_seed_ = GTEST_FLAG(shuffle) ? GetRandomSeedFromFlag(GTEST_FLAG(random_seed)) : 0; - // True iff at least one test has failed. + // True if and only if at least one test has failed. bool failed = false; TestEventListener* repeater = listeners()->repeater(); @@ -5016,17 +5293,17 @@ bool UnitTestImpl::RunAllTests() { // when we are inside the subprocess of a death test. const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG(repeat); // Repeats forever if the repeat count is negative. - const bool forever = repeat < 0; - for (int i = 0; forever || i != repeat; i++) { + const bool gtest_repeat_forever = repeat < 0; + for (int i = 0; gtest_repeat_forever || i != repeat; i++) { // We want to preserve failures generated by ad-hoc test // assertions executed before RUN_ALL_TESTS(). ClearNonAdHocTestResult(); const TimeInMillis start = GetTimeInMillis(); - // Shuffles test cases and tests if requested. + // Shuffles test suites and tests if requested. if (has_tests_to_run && GTEST_FLAG(shuffle)) { - random()->Reseed(random_seed_); + random()->Reseed(static_cast<UInt32>(random_seed_)); // This should be done before calling OnTestIterationStart(), // such that a test event listener can see the actual test order // in the event. @@ -5036,19 +5313,33 @@ bool UnitTestImpl::RunAllTests() { // Tells the unit test event listeners that the tests are about to start. repeater->OnTestIterationStart(*parent_, i); - // Runs each test case if there is at least one test to run. + // Runs each test suite if there is at least one test to run. if (has_tests_to_run) { // Sets up all environments beforehand. repeater->OnEnvironmentsSetUpStart(*parent_); ForEach(environments_, SetUpEnvironment); repeater->OnEnvironmentsSetUpEnd(*parent_); - // Runs the tests only if there was no fatal failure during global - // set-up. - if (!Test::HasFatalFailure()) { - for (int test_index = 0; test_index < total_test_case_count(); + // Runs the tests only if there was no fatal failure or skip triggered + // during global set-up. + if (Test::IsSkipped()) { + // Emit diagnostics when global set-up calls skip, as it will not be + // emitted by default. + TestResult& test_result = + *internal::GetUnitTestImpl()->current_test_result(); + for (int j = 0; j < test_result.total_part_count(); ++j) { + const TestPartResult& test_part_result = + test_result.GetTestPartResult(j); + if (test_part_result.type() == TestPartResult::kSkip) { + const std::string& result = test_part_result.message(); + printf("%s\n", result.c_str()); + } + } + fflush(stdout); + } else if (!Test::HasFatalFailure()) { + for (int test_index = 0; test_index < total_test_suite_count(); test_index++) { - GetMutableTestCase(test_index)->Run(); + GetMutableSuiteCase(test_index)->Run(); } } @@ -5108,9 +5399,9 @@ bool UnitTestImpl::RunAllTests() { // be created, prints an error and exits. void WriteToShardStatusFileIfNeeded() { const char* const test_shard_file = posix::GetEnv(kTestShardStatusFile); - if (test_shard_file != NULL) { + if (test_shard_file != nullptr) { FILE* const file = posix::FOpen(test_shard_file, "w"); - if (file == NULL) { + if (file == nullptr) { ColoredPrintf(COLOR_RED, "Could not write to the test shard status file \"%s\" " "specified by the %s environment variable.\n", @@ -5145,7 +5436,7 @@ bool ShouldShard(const char* total_shards_env, << "Invalid environment variables: you have " << kTestShardIndex << " = " << shard_index << ", but have left " << kTestTotalShards << " unset.\n"; - ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + ColoredPrintf(COLOR_RED, "%s", msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } else if (total_shards != -1 && shard_index == -1) { @@ -5153,7 +5444,7 @@ bool ShouldShard(const char* total_shards_env, << "Invalid environment variables: you have " << kTestTotalShards << " = " << total_shards << ", but have left " << kTestShardIndex << " unset.\n"; - ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + ColoredPrintf(COLOR_RED, "%s", msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } else if (shard_index < 0 || shard_index >= total_shards) { @@ -5162,7 +5453,7 @@ bool ShouldShard(const char* total_shards_env, << kTestShardIndex << " < " << kTestTotalShards << ", but you have " << kTestShardIndex << "=" << shard_index << ", " << kTestTotalShards << "=" << total_shards << ".\n"; - ColoredPrintf(COLOR_RED, msg.GetString().c_str()); + ColoredPrintf(COLOR_RED, "%s", msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } @@ -5175,7 +5466,7 @@ bool ShouldShard(const char* total_shards_env, // and aborts. Int32 Int32FromEnvOrDie(const char* var, Int32 default_val) { const char* str_val = posix::GetEnv(var); - if (str_val == NULL) { + if (str_val == nullptr) { return default_val; } @@ -5188,8 +5479,8 @@ Int32 Int32FromEnvOrDie(const char* var, Int32 default_val) { } // Given the total number of shards, the shard index, and the test id, -// returns true iff the test should be run on this shard. The test id is -// some arbitrary but unique non-negative integer assigned to each test +// returns true if and only if the test should be run on this shard. The test id +// is some arbitrary but unique non-negative integer assigned to each test // method. Assumes that 0 <= shard_index < total_shards. bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { return (test_id % total_shards) == shard_index; @@ -5197,10 +5488,10 @@ bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { // Compares the name of each test with the user-specified filter to // decide whether the test should be run, then records the result in -// each TestCase and TestInfo object. +// each TestSuite and TestInfo object. // If shard_tests == true, further filters tests based on sharding // variables in the environment - see -// https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md +// https://github.com/google/googletest/blob/master/googletest/docs/advanced.md // . Returns the number of tests that should run. int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ? @@ -5214,26 +5505,23 @@ int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { // this shard. int num_runnable_tests = 0; int num_selected_tests = 0; - for (size_t i = 0; i < test_cases_.size(); i++) { - TestCase* const test_case = test_cases_[i]; - const std::string &test_case_name = test_case->name(); - test_case->set_should_run(false); + for (auto* test_suite : test_suites_) { + const std::string& test_suite_name = test_suite->name(); + test_suite->set_should_run(false); - for (size_t j = 0; j < test_case->test_info_list().size(); j++) { - TestInfo* const test_info = test_case->test_info_list()[j]; + for (size_t j = 0; j < test_suite->test_info_list().size(); j++) { + TestInfo* const test_info = test_suite->test_info_list()[j]; const std::string test_name(test_info->name()); - // A test is disabled if test case name or test name matches + // A test is disabled if test suite name or test name matches // kDisableTestFilter. - const bool is_disabled = - internal::UnitTestOptions::MatchesFilter(test_case_name, - kDisableTestFilter) || - internal::UnitTestOptions::MatchesFilter(test_name, - kDisableTestFilter); + const bool is_disabled = internal::UnitTestOptions::MatchesFilter( + test_suite_name, kDisableTestFilter) || + internal::UnitTestOptions::MatchesFilter( + test_name, kDisableTestFilter); test_info->is_disabled_ = is_disabled; - const bool matches_filter = - internal::UnitTestOptions::FilterMatchesTest(test_case_name, - test_name); + const bool matches_filter = internal::UnitTestOptions::FilterMatchesTest( + test_suite_name, test_name); test_info->matches_filter_ = matches_filter; const bool is_runnable = @@ -5250,7 +5538,7 @@ int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { num_selected_tests += is_selected; test_info->should_run_ = is_selected; - test_case->set_should_run(test_case->should_run() || is_selected); + test_suite->set_should_run(test_suite->should_run() || is_selected); } } return num_selected_tests; @@ -5261,7 +5549,7 @@ int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { // max_length characters, only prints the first max_length characters // and "...". static void PrintOnOneLine(const char* str, int max_length) { - if (str != NULL) { + if (str != nullptr) { for (int i = 0; *str != '\0'; ++str) { if (i >= max_length) { printf("..."); @@ -5283,27 +5571,25 @@ void UnitTestImpl::ListTestsMatchingFilter() { // Print at most this many characters for each type/value parameter. const int kMaxParamLength = 250; - for (size_t i = 0; i < test_cases_.size(); i++) { - const TestCase* const test_case = test_cases_[i]; - bool printed_test_case_name = false; + for (auto* test_suite : test_suites_) { + bool printed_test_suite_name = false; - for (size_t j = 0; j < test_case->test_info_list().size(); j++) { - const TestInfo* const test_info = - test_case->test_info_list()[j]; + for (size_t j = 0; j < test_suite->test_info_list().size(); j++) { + const TestInfo* const test_info = test_suite->test_info_list()[j]; if (test_info->matches_filter_) { - if (!printed_test_case_name) { - printed_test_case_name = true; - printf("%s.", test_case->name()); - if (test_case->type_param() != NULL) { + if (!printed_test_suite_name) { + printed_test_suite_name = true; + printf("%s.", test_suite->name()); + if (test_suite->type_param() != nullptr) { printf(" # %s = ", kTypeParamLabel); // We print the type parameter on a single line to make // the output easy to parse by a program. - PrintOnOneLine(test_case->type_param(), kMaxParamLength); + PrintOnOneLine(test_suite->type_param(), kMaxParamLength); } printf("\n"); } printf(" %s", test_info->name()); - if (test_info->value_param() != NULL) { + if (test_info->value_param() != nullptr) { printf(" # %s = ", kValueParamLabel); // We print the value parameter on a single line to make the // output easy to parse by a program. @@ -5314,6 +5600,23 @@ void UnitTestImpl::ListTestsMatchingFilter() { } } fflush(stdout); + const std::string& output_format = UnitTestOptions::GetOutputFormat(); + if (output_format == "xml" || output_format == "json") { + FILE* fileout = OpenFileForWriting( + UnitTestOptions::GetAbsolutePathToOutputFile().c_str()); + std::stringstream stream; + if (output_format == "xml") { + XmlUnitTestResultPrinter( + UnitTestOptions::GetAbsolutePathToOutputFile().c_str()) + .PrintXmlTestsList(&stream, test_suites_); + } else if (output_format == "json") { + JsonUnitTestResultPrinter( + UnitTestOptions::GetAbsolutePathToOutputFile().c_str()) + .PrintJsonTestList(&stream, test_suites_); + } + fprintf(fileout, "%s", StringStreamToString(&stream).c_str()); + fclose(fileout); + } } // Sets the OS stack trace getter. @@ -5333,7 +5636,7 @@ void UnitTestImpl::set_os_stack_trace_getter( // otherwise, creates an OsStackTraceGetter, makes it the current // getter, and returns it. OsStackTraceGetterInterface* UnitTestImpl::os_stack_trace_getter() { - if (os_stack_trace_getter_ == NULL) { + if (os_stack_trace_getter_ == nullptr) { #ifdef GTEST_OS_STACK_TRACE_GETTER_ os_stack_trace_getter_ = new GTEST_OS_STACK_TRACE_GETTER_; #else @@ -5346,38 +5649,38 @@ OsStackTraceGetterInterface* UnitTestImpl::os_stack_trace_getter() { // Returns the most specific TestResult currently running. TestResult* UnitTestImpl::current_test_result() { - if (current_test_info_ != NULL) { + if (current_test_info_ != nullptr) { return ¤t_test_info_->result_; } - if (current_test_case_ != NULL) { - return ¤t_test_case_->ad_hoc_test_result_; + if (current_test_suite_ != nullptr) { + return ¤t_test_suite_->ad_hoc_test_result_; } return &ad_hoc_test_result_; } -// Shuffles all test cases, and the tests within each test case, +// Shuffles all test suites, and the tests within each test suite, // making sure that death tests are still run first. void UnitTestImpl::ShuffleTests() { - // Shuffles the death test cases. - ShuffleRange(random(), 0, last_death_test_case_ + 1, &test_case_indices_); + // Shuffles the death test suites. + ShuffleRange(random(), 0, last_death_test_suite_ + 1, &test_suite_indices_); - // Shuffles the non-death test cases. - ShuffleRange(random(), last_death_test_case_ + 1, - static_cast<int>(test_cases_.size()), &test_case_indices_); + // Shuffles the non-death test suites. + ShuffleRange(random(), last_death_test_suite_ + 1, + static_cast<int>(test_suites_.size()), &test_suite_indices_); - // Shuffles the tests inside each test case. - for (size_t i = 0; i < test_cases_.size(); i++) { - test_cases_[i]->ShuffleTests(random()); + // Shuffles the tests inside each test suite. + for (auto& test_suite : test_suites_) { + test_suite->ShuffleTests(random()); } } -// Restores the test cases and tests to their order before the first shuffle. +// Restores the test suites and tests to their order before the first shuffle. void UnitTestImpl::UnshuffleTests() { - for (size_t i = 0; i < test_cases_.size(); i++) { - // Unshuffles the tests in each test case. - test_cases_[i]->UnshuffleTests(); - // Resets the index of each test case. - test_case_indices_[i] = static_cast<int>(i); + for (size_t i = 0; i < test_suites_.size(); i++) { + // Unshuffles the tests in each test suite. + test_suites_[i]->UnshuffleTests(); + // Resets the index of each test suite. + test_suite_indices_[i] = static_cast<int>(i); } } @@ -5436,12 +5739,12 @@ bool SkipPrefix(const char* prefix, const char** pstr) { static const char* ParseFlagValue(const char* str, const char* flag, bool def_optional) { // str and flag must not be NULL. - if (str == NULL || flag == NULL) return NULL; + if (str == nullptr || flag == nullptr) return nullptr; // The flag must start with "--" followed by GTEST_FLAG_PREFIX_. const std::string flag_str = std::string("--") + GTEST_FLAG_PREFIX_ + flag; const size_t flag_len = flag_str.length(); - if (strncmp(str, flag_str.c_str(), flag_len) != 0) return NULL; + if (strncmp(str, flag_str.c_str(), flag_len) != 0) return nullptr; // Skips the flag name. const char* flag_end = str + flag_len; @@ -5454,7 +5757,7 @@ static const char* ParseFlagValue(const char* str, const char* flag, // If def_optional is true and there are more characters after the // flag name, or if def_optional is false, there must be a '=' after // the flag name. - if (flag_end[0] != '=') return NULL; + if (flag_end[0] != '=') return nullptr; // Returns the string after "=". return flag_end + 1; @@ -5475,7 +5778,7 @@ static bool ParseBoolFlag(const char* str, const char* flag, bool* value) { const char* const value_str = ParseFlagValue(str, flag, true); // Aborts if the parsing failed. - if (value_str == NULL) return false; + if (value_str == nullptr) return false; // Converts the string value to a bool. *value = !(*value_str == '0' || *value_str == 'f' || *value_str == 'F'); @@ -5492,7 +5795,7 @@ bool ParseInt32Flag(const char* str, const char* flag, Int32* value) { const char* const value_str = ParseFlagValue(str, flag, false); // Aborts if the parsing failed. - if (value_str == NULL) return false; + if (value_str == nullptr) return false; // Sets *value to the value of the flag. return ParseInt32(Message() << "The value of flag --" << flag, @@ -5510,7 +5813,7 @@ static bool ParseStringFlag(const char* str, const char* flag, String* value) { const char* const value_str = ParseFlagValue(str, flag, false); // Aborts if the parsing failed. - if (value_str == NULL) return false; + if (value_str == nullptr) return false; // Sets *value to the value of the flag. *value = value_str; @@ -5541,8 +5844,6 @@ static bool HasGoogleTestFlagPrefix(const char* str) { // @Y changes the color to yellow. // @D changes to the default terminal text color. // -// TODO(wan@google.com): Write tests for this once we add stdout -// capturing to Google Test. static void PrintColorEncoded(const char* str) { GTestColor color = COLOR_DEFAULT; // The current color. @@ -5552,7 +5853,7 @@ static void PrintColorEncoded(const char* str) { // next segment. for (;;) { const char* p = strchr(str, '@'); - if (p == NULL) { + if (p == nullptr) { ColoredPrintf(color, "%s", str); return; } @@ -5610,7 +5911,7 @@ static const char kColorEncodedHelpMessage[] = " @G--" GTEST_FLAG_PREFIX_ "output=@Y(@Gjson@Y|@Gxml@Y)[@G:@YDIRECTORY_PATH@G" GTEST_PATH_SEP_ "@Y|@G:@YFILE_PATH]@D\n" " Generate a JSON or XML report in the given directory or with the given\n" -" file name. @YFILE_PATH@D defaults to @Gtest_details.xml@D.\n" +" file name. @YFILE_PATH@D defaults to @Gtest_detail.xml@D.\n" # if GTEST_CAN_STREAM_RESULTS_ " @G--" GTEST_FLAG_PREFIX_ "stream_result_to=@YHOST@G:@YPORT@D\n" " Stream test results to the given server.\n" @@ -5751,6 +6052,17 @@ void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) { // other parts of Google Test. void ParseGoogleTestFlagsOnly(int* argc, char** argv) { ParseGoogleTestFlagsOnlyImpl(argc, argv); + + // Fix the value of *_NSGetArgc() on macOS, but if and only if + // *_NSGetArgv() == argv + // Only applicable to char** version of argv +#if GTEST_OS_MAC +#ifndef GTEST_OS_IOS + if (*_NSGetArgv() == argv) { + *_NSGetArgc() = *argc; + } +#endif +#endif } void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv) { ParseGoogleTestFlagsOnlyImpl(argc, argv); @@ -5772,6 +6084,10 @@ void InitGoogleTestImpl(int* argc, CharType** argv) { g_argvs.push_back(StreamableToString(argv[i])); } +#if GTEST_HAS_ABSL + absl::InitializeSymbolizer(g_argvs[0].c_str()); +#endif // GTEST_HAS_ABSL + ParseGoogleTestFlagsOnly(argc, argv); GetUnitTestImpl()->PostFlagParsingInit(); } @@ -5805,6 +6121,22 @@ void InitGoogleTest(int* argc, wchar_t** argv) { #endif // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) } +// This overloaded version can be used on Arduino/embedded platforms where +// there is no argc/argv. +void InitGoogleTest() { + // Since Arduino doesn't have a command line, fake out the argc/argv arguments + int argc = 1; + const auto arg0 = "dummy"; + char* argv0 = const_cast<char*>(arg0); + char** argv = &argv0; + +#if defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) + GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_(&argc, argv); +#else // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) + internal::InitGoogleTestImpl(&argc, argv); +#endif // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) +} + std::string TempDir() { #if defined(GTEST_CUSTOM_TEMPDIR_FUNCTION_) return GTEST_CUSTOM_TEMPDIR_FUNCTION_(); @@ -5814,7 +6146,7 @@ std::string TempDir() { return "\\temp\\"; #elif GTEST_OS_WINDOWS const char* temp_dir = internal::posix::GetEnv("TEMP"); - if (temp_dir == NULL || temp_dir[0] == '\0') + if (temp_dir == nullptr || temp_dir[0] == '\0') return "\\temp\\"; else if (temp_dir[strlen(temp_dir) - 1] == '\\') return temp_dir; diff --git a/test/gtest/src/gtest_main.cc b/test/gtest/src/gtest_main.cc index 5e9c94cbb..f6e1dd96f 100644 --- a/test/gtest/src/gtest_main.cc +++ b/test/gtest/src/gtest_main.cc @@ -26,13 +26,22 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -#include <stdio.h> +#include <cstdio> #include "gtest/gtest.h" +#ifdef ARDUINO +void setup() { + testing::InitGoogleTest(); +} + +void loop() { RUN_ALL_TESTS(); } + +#else + GTEST_API_ int main(int argc, char **argv) { - printf("Running main() from gtest_main.cc\n"); + printf("Running main() from %s\n", __FILE__); testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } +#endif From 6ca11064cfd0ff6579d8279b76c808b85bb95c25 Mon Sep 17 00:00:00 2001 From: iche033 <ichen@osrfoundation.org> Date: Fri, 5 Jun 2020 15:19:13 -0700 Subject: [PATCH 047/219] Fix ColladaLoader loading <transparent> tag when <transparency> does not exist (#68) * fix loading <transparent> when <transparency> does not exist Signed-off-by: Ian Chen <ichen@osrfoundation.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- Changelog.md | 3 + graphics/src/ColladaLoader.cc | 25 +++++--- graphics/src/ColladaLoader_TEST.cc | 25 ++++++++ test/data/box_opaque.dae | 95 ++++++++++++++++++++++++++++++ 4 files changed, 140 insertions(+), 8 deletions(-) create mode 100644 test/data/box_opaque.dae diff --git a/Changelog.md b/Changelog.md index 35d9a8390..6e5bac740 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,9 @@ ## Ignition Common 3.X.X +1. Fix ColladaLoader loading <transparent> tag when <transparency> does not exist + * [Pull request 68](https://github.com/ignitionrobotics/ign-common/pull/68) + ## Ignition Common 3.5.0 (2020-04-09) 1. Add interpolate\_x property to actor animations diff --git a/graphics/src/ColladaLoader.cc b/graphics/src/ColladaLoader.cc index cf49430f9..54f88be26 100644 --- a/graphics/src/ColladaLoader.cc +++ b/graphics/src/ColladaLoader.cc @@ -2610,6 +2610,15 @@ void ColladaLoaderPrivate::LoadTransparent(tinyxml2::XMLElement *_elem, double srcFactor = 0; double dstFactor = 0; + // If <transparency> tag exists, _mat->Transparency() should be set to + // that value already. Otherwise, use default value of 1.0 as per + // collada spec + double transparency = 1.0; + auto transparencyNode = + _elem->Parent()->FirstChildElement("transparency"); + if (transparencyNode) + transparency = _mat->Transparency(); + // Calculate alpha based on opaque mode. // Equations are extracted from collada spec // Make sure to update the final transparency value @@ -2624,8 +2633,8 @@ void ColladaLoaderPrivate::LoadTransparent(tinyxml2::XMLElement *_elem, // (1.0f - luminance(transparent.rgb) * transparency) // where fb corresponds to the framebuffer (existing pixel) and // mat corresponds to material before transparency (texel) - dstFactor = luminance * _mat->Transparency(); - srcFactor = 1.0 - luminance * _mat->Transparency(); + dstFactor = luminance * transparency; + srcFactor = 1.0 - luminance * transparency; _mat->SetTransparency(dstFactor); } else if (opaqueStr == "RGB_ONE") @@ -2639,8 +2648,8 @@ void ColladaLoaderPrivate::LoadTransparent(tinyxml2::XMLElement *_elem, // mat.a * (luminance(transparent.rgb) * transparency) // where fb corresponds to the framebuffer (existing pixel) and // mat corresponds to material before transparency (texel) - dstFactor = 1.0 - luminance * _mat->Transparency(); - srcFactor = luminance * _mat->Transparency(); + dstFactor = 1.0 - luminance * transparency; + srcFactor = luminance * transparency; _mat->SetTransparency(dstFactor); } else if (opaqueStr == "A_ONE") @@ -2649,8 +2658,8 @@ void ColladaLoaderPrivate::LoadTransparent(tinyxml2::XMLElement *_elem, // (transparent.a * transparency) // where fb corresponds to the framebuffer (existing pixel) and // mat corresponds to material before transparency (texel) - dstFactor = 1.0 - color.A() * _mat->Transparency(); - srcFactor = color.A() * _mat->Transparency(); + dstFactor = 1.0 - color.A() * transparency; + srcFactor = color.A() * transparency; _mat->SetTransparency(dstFactor); } else if (opaqueStr == "A_ZERO") @@ -2659,8 +2668,8 @@ void ColladaLoaderPrivate::LoadTransparent(tinyxml2::XMLElement *_elem, // (1.0f - transparent.a * transparency) // where fb corresponds to the framebuffer (existing pixel) and // mat corresponds to material before transparency (texel) - dstFactor = color.A() * _mat->Transparency(); - srcFactor = 1.0 - color.A() * _mat->Transparency(); + dstFactor = color.A() * transparency; + srcFactor = 1.0 - color.A() * transparency; _mat->SetTransparency(dstFactor); } diff --git a/graphics/src/ColladaLoader_TEST.cc b/graphics/src/ColladaLoader_TEST.cc index d287ff08d..8c360e80f 100644 --- a/graphics/src/ColladaLoader_TEST.cc +++ b/graphics/src/ColladaLoader_TEST.cc @@ -154,6 +154,31 @@ TEST_F(ColladaLoader, Material) mat->BlendFactors(srcFactor, dstFactor); EXPECT_DOUBLE_EQ(1.0, srcFactor); EXPECT_DOUBLE_EQ(0.0, dstFactor); + + common::Mesh *meshOpaque = loader.Load( + std::string(PROJECT_SOURCE_PATH) + "/test/data/box_opaque.dae"); + ASSERT_TRUE(meshOpaque); + + EXPECT_EQ(meshOpaque->MaterialCount(), 1u); + + common::MaterialPtr matOpaque = meshOpaque->MaterialByIndex(0u); + ASSERT_TRUE(matOpaque != nullptr); + + // Make sure we read the specular value + EXPECT_EQ(math::Color(0.0, 0.0, 0.0, 1.0), matOpaque->Ambient()); + EXPECT_EQ(math::Color(0.64f, 0.64f, 0.64f, 1.0f), matOpaque->Diffuse()); + EXPECT_EQ(math::Color(0.5, 0.5, 0.5, 1.0), matOpaque->Specular()); + EXPECT_EQ(math::Color(0.0, 0.0, 0.0, 1.0), matOpaque->Emissive()); + EXPECT_DOUBLE_EQ(50.0, matOpaque->Shininess()); + // transparent: opaque="A_ONE", color=[1 1 1 1] + // transparency: not specified, defaults to 1.0 + // resulting transparency value = (1 - color.a * transparency) + EXPECT_DOUBLE_EQ(0.0, matOpaque->Transparency()); + srcFactor = -1; + dstFactor = -1; + matOpaque->BlendFactors(srcFactor, dstFactor); + EXPECT_DOUBLE_EQ(1.0, srcFactor); + EXPECT_DOUBLE_EQ(0.0, dstFactor); } ///////////////////////////////////////////////// diff --git a/test/data/box_opaque.dae b/test/data/box_opaque.dae new file mode 100644 index 000000000..acc4ab69d --- /dev/null +++ b/test/data/box_opaque.dae @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="utf-8"?> +<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1"> + <asset> + <unit name="meter" meter="1"/> + <up_axis>Z_UP</up_axis> + </asset> + <library_effects> + <effect id="Material-effect"> + <profile_COMMON> + <technique sid="common"> + <phong> + <emission> + <color sid="emission">0 0 0 1</color> + </emission> + <ambient> + <color sid="ambient">0 0 0 1</color> + </ambient> + <diffuse> + <color sid="diffuse">0.64 0.64 0.64 1</color> + </diffuse> + <specular> + <color sid="specular">0.5 0.5 0.5 1</color> + </specular> + <shininess> + <float sid="shininess">50</float> + </shininess> + <transparent opaque="A_ONE"> + <color>1 1 1 1</color> + </transparent> + <index_of_refraction> + <float sid="index_of_refraction">1</float> + </index_of_refraction> + </phong> + </technique> + </profile_COMMON> + </effect> + </library_effects> + <library_materials> + <material id="Material-material" name="Material-material"> + <instance_effect url="#Material-effect"/> + </material> + </library_materials> + <library_geometries> + <geometry id="Cube-mesh" name="Cube"> + <mesh> + <source id="Cube-mesh-positions"> + <float_array id="Cube-mesh-positions-array" count="24">1 1 -1 1 -1 -1 -1 -0.9999998 -1 -0.9999997 1 -1 1 0.9999995 1 0.9999994 -1.000001 1 -1 -0.9999997 1 -1 1 1</float_array> + <technique_common> + <accessor source="#Cube-mesh-positions-array" count="8" stride="3"> + <param name="X" type="float"/> + <param name="Y" type="float"/> + <param name="Z" type="float"/> + </accessor> + </technique_common> + </source> + <source id="Cube-mesh-normals"> + <float_array id="Cube-mesh-normals-array" count="18">0 0 -1 0 0 1 1 -2.83122e-7 0 -2.83122e-7 -1 0 -1 2.23517e-7 -1.3411e-7 2.38419e-7 1 2.08616e-7</float_array> + <technique_common> + <accessor source="#Cube-mesh-normals-array" count="6" stride="3"> + <param name="X" type="float"/> + <param name="Y" type="float"/> + <param name="Z" type="float"/> + </accessor> + </technique_common> + </source> + <vertices id="Cube-mesh-vertices"> + <input semantic="POSITION" source="#Cube-mesh-positions"/> + </vertices> + <polylist material="Material-material" count="6"> + <input semantic="VERTEX" source="#Cube-mesh-vertices" offset="0"/> + <input semantic="NORMAL" source="#Cube-mesh-normals" offset="1"/> + <vcount>4 4 4 4 4 4 </vcount> + <p>0 0 1 0 2 0 3 0 4 1 7 1 6 1 5 1 0 2 4 2 5 2 1 2 1 3 5 3 6 3 2 3 2 4 6 4 7 4 3 4 4 5 0 5 3 5 7 5</p> + </polylist> + </mesh> + <extra><technique profile="MAYA"><double_sided>1</double_sided></technique></extra> + </geometry> + </library_geometries> + <library_visual_scenes> + <visual_scene id="Scene" name="Scene"> + <node id="Cube" name="Cube" type="NODE"> + <instance_geometry url="#Cube-mesh"> + <bind_material> + <technique_common> + <instance_material symbol="Material-material" target="#Material-material"/> + </technique_common> + </bind_material> + </instance_geometry> + </node> + </visual_scene> + </library_visual_scenes> + <scene> + <instance_visual_scene url="#Scene"/> + </scene> +</COLLADA> From 023601763d7f95392b19a1d87214b905ce975564 Mon Sep 17 00:00:00 2001 From: Silvio Traversaro <silvio.traversaro@iit.it> Date: Sun, 7 Jun 2020 18:47:31 +0200 Subject: [PATCH 048/219] Remove unused included headers (#71) Signed-off-by: Silvio Traversaro <silvio.traversaro@iit.it> Signed-off-by: Silvio <silvio.traversaro@iit.it> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- av/src/VideoEncoder.cc | 4 ---- src/Filesystem.cc | 2 -- src/Util.cc | 3 --- 3 files changed, 9 deletions(-) diff --git a/av/src/VideoEncoder.cc b/av/src/VideoEncoder.cc index 4412b114d..47948288b 100644 --- a/av/src/VideoEncoder.cc +++ b/av/src/VideoEncoder.cc @@ -15,10 +15,6 @@ * */ #include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <sys/ioctl.h> #include <mutex> diff --git a/src/Filesystem.cc b/src/Filesystem.cc index 0114d2980..2d396c3b3 100644 --- a/src/Filesystem.cc +++ b/src/Filesystem.cc @@ -15,9 +15,7 @@ * */ -#include <sys/types.h> #include <sys/stat.h> -#include <fcntl.h> #ifdef __linux__ #include <sys/sendfile.h> diff --git a/src/Util.cc b/src/Util.cc index 67771781a..8dbeffc67 100644 --- a/src/Util.cc +++ b/src/Util.cc @@ -14,9 +14,6 @@ * limitations under the License. * */ -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> #ifdef __linux__ #include <sys/sendfile.h> From 3c896d78be21b9f3c8631f95673091d8f2f20444 Mon Sep 17 00:00:00 2001 From: Steve Peters <scpeters@openrobotics.org> Date: Thu, 21 May 2020 01:19:49 -0700 Subject: [PATCH 049/219] Refactor Image::MaxColor to reduce computation time (#66) Signed-off-by: Steve Peters <scpeters@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- Changelog.md | 9 ++++ graphics/src/Image.cc | 67 +++++++++++++++++++++++-- graphics/src/Image_TEST.cc | 43 ++++++++++++++++ test/data/heightmap_flat_1025x1025.png | Bin 0 -> 21222 bytes test/data/heightmap_flat_129x129.png | Bin 0 -> 1174 bytes test/data/heightmap_flat_257x257.png | Bin 0 -> 2330 bytes test/data/heightmap_flat_513x513.png | Bin 0 -> 6302 bytes 7 files changed, 114 insertions(+), 5 deletions(-) create mode 100644 test/data/heightmap_flat_1025x1025.png create mode 100644 test/data/heightmap_flat_129x129.png create mode 100644 test/data/heightmap_flat_257x257.png create mode 100644 test/data/heightmap_flat_513x513.png diff --git a/Changelog.md b/Changelog.md index 6e5bac740..075cde8d5 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,9 +14,18 @@ ## Ignition Common 3.X.X +1. Refactor Image::MaxColor to reduce computation time + * [Pull request 66](https://github.com/ignitionrobotics/ign-common/pull/66) + +1. Update to gtest 1.10.0 with patch for gcc warnings + * [Pull request 67](https://github.com/ignitionrobotics/ign-common/pull/67) + 1. Fix ColladaLoader loading <transparent> tag when <transparency> does not exist * [Pull request 68](https://github.com/ignitionrobotics/ign-common/pull/68) +1. Remove unused included headers + * [Pull request 71](https://github.com/ignitionrobotics/ign-common/pull/71) + ## Ignition Common 3.5.0 (2020-04-09) 1. Add interpolate\_x property to actor animations diff --git a/graphics/src/Image.cc b/graphics/src/Image.cc index 017f652ea..6899634fe 100644 --- a/graphics/src/Image.cc +++ b/graphics/src/Image.cc @@ -383,15 +383,72 @@ math::Color Image::MaxColor() const maxClr.Set(0, 0, 0, 0); - for (y = 0; y < this->Height(); y++) + if (!this->Valid()) + return clr; + + FREE_IMAGE_COLOR_TYPE type = FreeImage_GetColorType(this->dataPtr->bitmap); + + if (type == FIC_RGB || type == FIC_RGBALPHA) { - for (x = 0; x < this->Width(); x++) + RGBQUAD firgb; + + for (y = 0; y < this->Height(); y++) { - clr = this->Pixel(x, y); + for (x = 0; x < this->Width(); x++) + { + clr.Set(0, 0, 0, 0); - if (clr.R() + clr.G() + clr.B() > maxClr.R() + maxClr.G() + maxClr.B()) + if (FALSE == + FreeImage_GetPixelColor(this->dataPtr->bitmap, x, y, &firgb)) + { + ignerr << "Image: Coordinates out of range[" + << x << " " << y << "] \n"; + continue; + } + +#ifdef FREEIMAGE_COLORORDER + // cppcheck-suppress ConfigurationNotChecked + if (FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_RGB) + clr.Set(firgb.rgbRed, firgb.rgbGreen, firgb.rgbBlue); + else + clr.Set(firgb.rgbBlue, firgb.rgbGreen, firgb.rgbRed); +#else +#ifdef FREEIMAGE_BIGENDIAN + clr.Set(firgb.rgbRed, firgb.rgbGreen, firgb.rgbBlue); +#else + clr.Set(firgb.rgbBlue, firgb.rgbGreen, firgb.rgbRed); +#endif +#endif + if (clr.R() + clr.G() + clr.B() > maxClr.R() + maxClr.G() + maxClr.B()) + { + maxClr = clr; + } + } + } + } + else + { + BYTE byteValue; + for (y = 0; y < this->Height(); y++) + { + for (x = 0; x < this->Width(); x++) { - maxClr = clr; + clr.Set(0, 0, 0, 0); + + if (FreeImage_GetPixelIndex( + this->dataPtr->bitmap, x, y, &byteValue) == FALSE) + { + ignerr << "Image: Coordinates out of range [" + << x << " " << y << "] \n"; + continue; + } + + clr.Set(byteValue, byteValue, byteValue); + + if (clr.R() + clr.G() + clr.B() > maxClr.R() + maxClr.G() + maxClr.B()) + { + maxClr = clr; + } } } } diff --git a/graphics/src/Image_TEST.cc b/graphics/src/Image_TEST.cc index 3ac3a630b..da276c990 100644 --- a/graphics/src/Image_TEST.cc +++ b/graphics/src/Image_TEST.cc @@ -104,6 +104,49 @@ TEST_F(ImageTest, ConvertPixelFormat) Image::ConvertPixelFormat("BAYER_BGGR8")); } +using string_int2 = std::tuple<const char *, unsigned int, unsigned int>; + +class ImagePerformanceTest : public ImageTest, + public ::testing::WithParamInterface<string_int2> +{ + /// \brief Loads an image specified by _filename and checks its max color. + /// \param[in] _filePath Relative path to the image file to check. + /// \param[in] _width Width of the image in pixels. + /// \param[in] _height Height of the image in pixels. + public: void MaxColor(const std::string &_filePath, + const unsigned int _width, + const unsigned int _height); +}; + +TEST_P(ImagePerformanceTest, MaxColorFlatHeightmap) +{ + MaxColor(std::get<0>(GetParam()), std::get<1>(GetParam()), + std::get<2>(GetParam())); +} + +void ImagePerformanceTest::MaxColor(const std::string &_filePath, + const unsigned int _width, + const unsigned int _height) +{ + std::string fileName = "file://"; + fileName += PROJECT_SOURCE_PATH; + fileName += "/"; + fileName += _filePath; + + common::Image img; + EXPECT_EQ(0, img.Load(fileName)); + EXPECT_EQ(_width, img.Width()); + EXPECT_EQ(_height, img.Height()); + EXPECT_EQ(ignition::math::Color(0., 0., 0., 0), img.MaxColor()); + EXPECT_TRUE(img.Valid()); +} + +INSTANTIATE_TEST_SUITE_P(FlatHeightmaps, ImagePerformanceTest, + ::testing::Values( + std::make_tuple("test/data/heightmap_flat_129x129.png", 129u, 129u), + std::make_tuple("test/data/heightmap_flat_257x257.png", 257u, 257u), + std::make_tuple("test/data/heightmap_flat_513x513.png", 513u, 513u), + std::make_tuple("test/data/heightmap_flat_1025x1025.png", 1025u, 1025u))); ///////////////////////////////////////////////// int main(int argc, char **argv) diff --git a/test/data/heightmap_flat_1025x1025.png b/test/data/heightmap_flat_1025x1025.png new file mode 100644 index 0000000000000000000000000000000000000000..e5357212db907caf0f3c2eb9300f10c7936db2a4 GIT binary patch literal 21222 zcmeI4PiPZa9LIl?MopuI#A>(H%P^I~3du~mE4v*gA+clIfa%s!q1sE*cG?b`e@v!i zwtJbb9_k-Z@n9(hLA;2tP}YNZ%B5Gq+p;W+N0Ei~DE>j;o1|@~=-q{HV93mG-uu1x ze)H$O`OJ6T)rs-Zu5e$Nh`O?4`Xo_M;7jNrv&>w+)64#Xi<w-8XzS+T_k{y&Tbvu4 z%n_{&5V==~-ZGQ>l4w~WdX*<q*NMKVZazJ)u^pY&v5PgL!`*xlXk(K(3?$8|X?r?% zPMxci;)VIjtPyugRhF7ab5yokGVFrrl#1n=>LevEh04~sS(ZdEiT!g@n$As#!xhUA zPshKHD^e;filS!CFQ}9HNGm(rN=i$%T~%edUa!aN-^DA|qMR5S8j_Vkd2lesQp9S% zl<k5OE7$s)PImn0Ms3bAtF~Dwi`;Kvwz6y|C5acb`)k(IHW&6vD%V=gVhxn}9yt+L z<j-X@9P<m=_?~7quU*aJH116O$ubRAVP36NLh}mn+4icZaWCqHnqduBN+p)5%@_0N z1uIkBXWiLRG<gu!Vxhd4l$_YSu~1kp+EQxRG77daFV;<aNgU1QCN!A`r)chT?pgib zHTg>wYWipkc=Kp_KG@+*g*AEi)JTO-ZLIYZr75dtrX1nlKewU{<w!?j``v$=4_+Tz zdGo9zGPS+9@XyCzgQ19+c1Z{{R~pvpAKE=<zxB8h`0+q1Nh@t6ss!|FJ$H7qdMmxc z-+n`6Ez~PWXRl}X%HRoZP}y$?>CATf{`SeX%CLkZ^n>3Jlma8}*z?(=?X@PM-#y_s z1foKJ`oU77)7LyV+UW8bXm!nvij$Am{Vi^UUL5oXCapI@k#8@Z^9LaxtakWwic&tf zb}Tlq6VPTfl)w|eK}7gid=WmJee5=Xix>C4AnPX3b)f4&&x?Tz#(g0SoB2Q+!)82n zq+L9;;h7i6AOd8-NehqxkO7cE5V(}{R3HP;W-$$90Av7U0A%33VFNM%G5|6N;59ja z@eY*%L>fQ_(71TgAgBzWG5|72L!ib4fItR720#Wt20#W}4GnEG3j$OIP#FLjKxN>4 z-~p8ZR0dEPKxM!oGE@dY20#YvN&qqdG5|6FG5|90o)P{p$RO|Dx=R!}#ODHN|5hCz z=Hm+^us?5>2e3b|Kd?WrKd?Wpl);oZe99rng&-FK`-5DF4-g?20{i<~+25PLw&wcy v)R37EGbi*@io7@D-8%Jo%GVaIU@hogrI6Jr9C`SthiA#29oK(9lmG1#fy0?n literal 0 HcmV?d00001 diff --git a/test/data/heightmap_flat_129x129.png b/test/data/heightmap_flat_129x129.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb4916d22a117880d87f43b3f913ddd4740c49f GIT binary patch literal 1174 zcmeAS@N?(olHy`uVBq!ia0vp^jUddy1|**^xETPXSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=d3-BeIx*fm;}a85w5H zkzin8vds*MD2ed(u}aR*)k{ptPfFFR$SnY>W?-<XumUo3Q%e#RDspr3imfVamB1>j zfNYSkzLEl1NlCV?QiN}Sf^&XRs)DJWiJpOy9hZWFf=y9MnpKdC8&o@xXRDM^Qc_^0 zuU}qXu2*iXmtT~wZ)j<0sc&GUZ)BtkRH0j3nOBlnp_^B%3^4>|j!SBBa#3bMNoIbY z0?6FNr2NtnTO}osMQ{LdXKF<z!lt}psJDO~)CbAv8|oS8W7AfWnTA6fNCu(}>@SFQ zHXy^SLW@(2obz*YQ}arY<bW!`o_EYa6NO3SWP$?4Dkm{7-BzhWHzhSKu{5Vd$<Dbb zHL)Z$MWH;iBtya7(>K6IALQAbOf<v6qNt|ZfPII<K{g;SSos%a0^OMi3PU?X8+{Bh zXjnq*L<(?7Y=Z3sMyDN@jXpeS*l|Vf4KZS1U_9*U;uuoF`1V>OXM=+P^TCY&wyU|z zJ}O5XXn!~<`}XI*`<jJ!@Yn5L{-4vK;gCWD0}~q?Ba48+2h{}O1O`TCJx1nN4UIw@ zI4v3)7^gQdmL726yul*laG=5aK!a7n0+t*mK81t>stFFV1_4ZFjO+pi4}=UB@JVPe z&Te4lkSO4k2w>-#(%^f5k%eam3(pE>Hm?I}4}jLhFtJ@>WCmJOFlr6HK+Dm;_lb$I TLuAKfQ1171^>bP0l+XkKG;d9! literal 0 HcmV?d00001 diff --git a/test/data/heightmap_flat_257x257.png b/test/data/heightmap_flat_257x257.png new file mode 100644 index 0000000000000000000000000000000000000000..1744d60700447321ea8bd23204ac30391b2cff19 GIT binary patch literal 2330 zcmeAS@N?(olHy`uVBq!ia0y~yU}OYg4mO}j#T$XYK#C>Z(btiIVPik{pF~z5Um@8e z$d`ekN{xY`p@o6r7f`6-1p`B=0RzLU1O^7H84L{K1#@-<+5jau3p^r=85p>QL70(Y z)*J~21}59gkcg59UmvUF{9L`nl>DSry^7odplSvNn+hu+GdHy)QK2F?C$HG5!d3~a z!V1U+3F|8<fR&VF+bTu)1}He^7o{qg>Y3;nDA{o-C@9zzrKDK}xwt{K19`Se86_nJ zR{Hwo<>h+i#(Mch>H3D2mX`VkM*2oZx<D1W#g%y_i50qe#mW#vVCJ}_7AF^F7L;V> z=P7{9O-#x!EwNQn0$BtH5O<bjrXg&~D~5Ut=s|sujJ~0sfj%~EsTG+xw1H$G+Q9yT zSZ4z=%*wwgGZpAykhAOzZNL_wh#{P312V-bv^cfMIX^cSs0qm|po!qXa?C*!g-PUO zf&$ShCowPGR;fZaB{eOvG^a$#&bcTxu_QG`p**uBL&4qCH^4?86gWAVXoiDDQBAke z$K@c18At&RiA}H>!05E&veAbp4LdHaSsls@3~cV6E{-7;jBl?T<YiFcIkMr<KWk?G zZ5<OO7F^TJPCNHoj*%&_QFia`n=BkPjDiNNOofbs9sCD=vbY>z<2b_VqF~4HTv&in zT0uZupz#O89DfIvoCb#&2bM?71$K;r8yH75jE2%^(iqJTqou|$E-D`|bp$grdKZ86 Q0kuFpUHx3vIVCg!06<cU!2kdN literal 0 HcmV?d00001 diff --git a/test/data/heightmap_flat_513x513.png b/test/data/heightmap_flat_513x513.png new file mode 100644 index 0000000000000000000000000000000000000000..2453a08cf6845f05f8ed8ce923d43698acf468b1 GIT binary patch literal 6302 zcmeHMPiWIn82^&B+I3D_#@G-hj}&&;Xwps{EGDIObz8yCZEP@6q*<G8!SoMpM&nMI z2u>V$mAQlL<VomFq=$hB!Y=b7dfa6UL7d=8M11dM|8aK@FA$RVec$i*eecW1`;wO@ zW23{Z{)>J9XibeICjfYkoW3(yvbk+)_~MyOq!R%3XDz=qFCL@p$V3`op&P(?1n>)s zoE?Dq2*B42fczYwqrCcdT)~Rw^2qHfKua4rIapck#O$guIc-g+Z_3$HLDX`k8C|ps zWo!+g*fPE?=$3};f?2G}wkl8y8Q&AJBp_;H-B*R_^cWf}RdjS!ydp+~m>(geRC0NF zB001N$0Jpkv#hc#Nwr!{tX&pMm02k|FfbrR`lP<TFt!L+9~3Rk4i~E-mt>zOsaLZV zqih+aA|kxnOljUy1%Ws^INUfbBY)_rSlyczo}ffDQdEpc|AOhZaSDuRTo|2~>rNqL z@~w)Y<A6z6v8X~F9FrY}rw|r-s;XB8ON9ak9pS=^G+7DrgmhnF8YGFbsTF5c!4Bv2 zyf$xILTs?2YnGlvHN%=i!>RO`B9Y{n#tCvNJ<hI3rv>D497(wQG${vuoH4&59h64Q z-?Oq50%+ezB@>f2_w7?X2<Ti>ef`h1Chwibn=JH-jr?}wdl1DP;P~ib*G8|%@g83Q z?RuAC$`y}uA+%uEn*(_01Yb50bsY6%Jjn}EKedkV7QuUbN$;|=v-Q54(hWK12?Q2j zIl+M1_)Kx@zD?IbpgqE`J??lxah;q@A)YmUDE@PIrj2?I#m^E~PJD9Rw{+>ANdwDx zb|@sU<nQD@zI&Rco|mDELU<M|VwvSw83b4v;AMiX2CNKN8IZ=yngUx5SQ*flOx6_G zYQUNTYYOaxk$sA@eS<jLk>Ne83|JZ9ZOQ+?4DS9&c)2eh`c?85Aa!Fj`TBb1;a@-u Bvf2Ou literal 0 HcmV?d00001 From 063959794457b7cdce2db752326a8381ccf52c34 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Tue, 9 Jun 2020 16:42:51 -0700 Subject: [PATCH 050/219] More file path APIs (#70) Signed-off-by: Louise Poubel <louise@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- graphics/include/ignition/common/MeshManager.hh | 4 +++- include/ignition/common/SystemPaths.hh | 9 +++++++++ include/ignition/common/Util.hh | 9 +++++++++ src/SystemPaths.cc | 6 ++++++ src/SystemPaths_TEST.cc | 8 ++++++-- src/Util.cc | 6 ++++++ src/Util_TEST.cc | 6 ++++-- 7 files changed, 43 insertions(+), 5 deletions(-) diff --git a/graphics/include/ignition/common/MeshManager.hh b/graphics/include/ignition/common/MeshManager.hh index 6113f87db..558eb7886 100644 --- a/graphics/include/ignition/common/MeshManager.hh +++ b/graphics/include/ignition/common/MeshManager.hh @@ -57,7 +57,9 @@ namespace ignition /// Destroys the collada loader, the stl loader and all the meshes private: virtual ~MeshManager(); - /// \brief Load a mesh from a file + /// \brief Load a mesh from a file. + /// The mesh will be searched on the global SystemPaths instance provided + /// by Util.hh. /// \param[in] _filename the path to the mesh /// \return a pointer to the created mesh public: const Mesh *Load(const std::string &_filename); diff --git a/include/ignition/common/SystemPaths.hh b/include/ignition/common/SystemPaths.hh index a823f202e..a5f541d8a 100644 --- a/include/ignition/common/SystemPaths.hh +++ b/include/ignition/common/SystemPaths.hh @@ -109,8 +109,17 @@ namespace ignition /// environment variable should be a set of colon (semicolon on windows) /// delimited paths. These paths will be used with the FindFile function. /// \param [in] _env name of the environment variable + /// \sa FilePathEnv public: void SetFilePathEnv(const std::string &_env); + /// \brief Get the file path environment variable in use. + /// The environment variable contains a set of colon (semicolon on + /// windows) delimited paths. These paths are used with the FindFile + /// functions. + /// \return Name of the environment variable + /// \sa SetFilePathEnv + public: std::string FilePathEnv() const; + /// \brief Get the file paths /// \return a list of paths public: const std::list<std::string> &FilePaths(); diff --git a/include/ignition/common/Util.hh b/include/ignition/common/Util.hh index 0f4ebef9c..23dcf5a4c 100644 --- a/include/ignition/common/Util.hh +++ b/include/ignition/common/Util.hh @@ -25,6 +25,7 @@ #include <chrono> #include <ignition/common/Export.hh> #include <ignition/common/Filesystem.hh> +#include <ignition/common/SystemPaths.hh> #include <ignition/common/URI.hh> ///////////////////////////////////////////////// @@ -160,6 +161,14 @@ namespace ignition void IGNITION_COMMON_VISIBLE addFindFileURICallback( std::function<std::string(const URI &)> _cb); + /// \brief Get a pointer to the global system paths that is used by all + /// the findFile functions. + /// The returned instance has global shared state for a given process. + /// Care should be taken when manipulating global system paths + /// Caller should not assume ownership of the pointer. + /// \return A mutable reference to the system paths object. + common::SystemPaths IGNITION_COMMON_VISIBLE *systemPaths(); + /// \brief Compute the SHA1 hash of an array of bytes. /// \param[in] _buffer Input sequence. The permitted data types for this /// function are std::string and any STL container. diff --git a/src/SystemPaths.cc b/src/SystemPaths.cc index 5530b3b5e..725cc7a25 100644 --- a/src/SystemPaths.cc +++ b/src/SystemPaths.cc @@ -198,6 +198,12 @@ void SystemPaths::SetFilePathEnv(const std::string &_env) } } +///////////////////////////////////////////////// +std::string SystemPaths::FilePathEnv() const +{ + return this->dataPtr->filePathEnv; +} + ///////////////////////////////////////////////// const std::list<std::string> &SystemPaths::FilePaths() { diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index 8e3a0b651..d540595a4 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -115,6 +115,7 @@ TEST_F(SystemPathsFixture, FileSystemPaths) putenv(env); common::SystemPaths paths; + EXPECT_EQ("IGN_FILE_PATH", paths.FilePathEnv()); const std::list<std::string> pathList3 = paths.FilePaths(); EXPECT_EQ(static_cast<unsigned int>(2), pathList3.size()); EXPECT_STREQ("/tmp/file/", pathList3.front().c_str()); @@ -289,13 +290,16 @@ TEST_F(SystemPathsFixture, FindFileURI) putenv(env); sp.SetFilePathEnv("IGN_FILE_PATH"); + EXPECT_EQ("IGN_FILE_PATH", sp.FilePathEnv()); EXPECT_EQ(file1, sp.FindFileURI("anything://test_f1")); EXPECT_NE(file2, sp.FindFileURI("anything://test_f2")); - snprintf(env, sizeof(env), "%s", ("IGN_FILE_PATH=" + dir2).c_str()); + std::string newEnv{"IGN_NEW_FILE_PATH"}; + snprintf(env, sizeof(env), "%s", (newEnv + "=" + dir2).c_str()); putenv(env); - sp.SetFilePathEnv("IGN_FILE_PATH"); + sp.SetFilePathEnv(newEnv); + EXPECT_EQ(newEnv, sp.FilePathEnv()); EXPECT_NE(file1, sp.FindFileURI("anything://test_f1")); EXPECT_EQ(file2, sp.FindFileURI("anything://test_f2")); } diff --git a/src/Util.cc b/src/Util.cc index 8dbeffc67..a29ddcd8b 100644 --- a/src/Util.cc +++ b/src/Util.cc @@ -313,6 +313,12 @@ void ignition::common::addFindFileURICallback( gSystemPaths->AddFindFileURICallback(_cb); } +///////////////////////////////////////////////// +ignition::common::SystemPaths *ignition::common::systemPaths() +{ + return gSystemPaths.get(); +} + ///////////////////////////////////////////////// bool ignition::common::env(const std::string &_name, std::string &_value) { diff --git a/src/Util_TEST.cc b/src/Util_TEST.cc index aea97c761..ab63169eb 100644 --- a/src/Util_TEST.cc +++ b/src/Util_TEST.cc @@ -189,8 +189,10 @@ TEST(Util_TEST, findFile) fout.close(); // Relative path - EXPECT_EQ(file1, ignition::common::findFile(common::joinPaths("test_dir1", - "test_f1"))); + auto systemPaths = ignition::common::systemPaths(); + ASSERT_NE(nullptr, systemPaths); + EXPECT_EQ(file1, systemPaths->FindFile(common::joinPaths("test_dir1", + "test_f1"), true)); // Relative prefixed by file:// EXPECT_EQ(file1, ignition::common::findFile("file://test_dir1/test_f1")); From 39e8f51ab451dc2e6c2b2739ad92a962d636c0e2 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Wed, 10 Jun 2020 11:31:01 -0700 Subject: [PATCH 051/219] Bump to 3.6.0 (#72) Signed-off-by: Louise Poubel <louise@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- Changelog.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Changelog.md b/Changelog.md index 075cde8d5..511931480 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,8 @@ ## Ignition Common 3.X.X +## Ignition Common 3.6.0 (2020-06-09) + 1. Refactor Image::MaxColor to reduce computation time * [Pull request 66](https://github.com/ignitionrobotics/ign-common/pull/66) @@ -26,6 +28,9 @@ 1. Remove unused included headers * [Pull request 71](https://github.com/ignitionrobotics/ign-common/pull/71) +1. More file path APIs + * [Pull request 70](https://github.com/ignitionrobotics/ign-common/pull/70) + ## Ignition Common 3.5.0 (2020-04-09) 1. Add interpolate\_x property to actor animations From e7fee23a500231ec8dbd71da969d19a1ca769ae1 Mon Sep 17 00:00:00 2001 From: Nate Koenig <nkoenig@users.noreply.github.com> Date: Tue, 16 Jun 2020 15:19:35 -0700 Subject: [PATCH 052/219] Fix hierarchical submesh processing in the ColladaLoader. (#78) Fix hierarchical submesh processing in the ColladaLoader. #78 Signed-off-by: Nate Koenig <nate@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- Changelog.md | 3 +++ graphics/src/ColladaLoader.cc | 10 +++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Changelog.md b/Changelog.md index 511931480..91f10e9fa 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,9 @@ ## Ignition Common 3.X.X +1. Fix hierarchical submesh processing in the ColladaLoader. + * [Pull Request 78](https://github.com/ignitionrobotics/ign-common/pull/78) + ## Ignition Common 3.6.0 (2020-06-09) 1. Refactor Image::MaxColor to reduce computation time diff --git a/graphics/src/ColladaLoader.cc b/graphics/src/ColladaLoader.cc index 54f88be26..7812b36cc 100644 --- a/graphics/src/ColladaLoader.cc +++ b/graphics/src/ColladaLoader.cc @@ -466,11 +466,6 @@ void ColladaLoaderPrivate::LoadNode(tinyxml2::XMLElement *_elem, Mesh *_mesh, ignition::math::Matrix4d transform = this->LoadNodeTransform(_elem); transform = _transform * transform; - if (_elem->Attribute("name")) - { - this->currentNodeName = _elem->Attribute("name"); - } - nodeXml = _elem->FirstChildElement("node"); while (nodeXml) { @@ -478,6 +473,11 @@ void ColladaLoaderPrivate::LoadNode(tinyxml2::XMLElement *_elem, Mesh *_mesh, nodeXml = nodeXml->NextSiblingElement("node"); } + if (_elem->Attribute("name")) + { + this->currentNodeName = _elem->Attribute("name"); + } + if (_elem->FirstChildElement("instance_node")) { std::string nodeURLStr = From a8661ca24f9fb3ada75713c5540090cd045d7d50 Mon Sep 17 00:00:00 2001 From: adlarkin <42042756+adlarkin@users.noreply.github.com> Date: Fri, 10 Jul 2020 10:43:01 -0400 Subject: [PATCH 053/219] Fixed the AudioDecoder class (#81) * fixed existing AudioDecoder unit tests Signed-off-by: Ashton Larkin <ashton@openrobotics.org> * handled possible seg fault by using AudioDecoder without calling SetFile Signed-off-by: Ashton Larkin <ashton@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- av/include/ignition/common/AudioDecoder.hh | 1 + av/src/AudioDecoder.cc | 5 ++++- av/src/AudioDecoder_TEST.cc | 25 +++++++++++++++------- av/src/CMakeLists.txt | 4 ---- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/av/include/ignition/common/AudioDecoder.hh b/av/include/ignition/common/AudioDecoder.hh index 6b920fcd8..da9479a87 100644 --- a/av/include/ignition/common/AudioDecoder.hh +++ b/av/include/ignition/common/AudioDecoder.hh @@ -60,6 +60,7 @@ namespace ignition /// \brief Get the sample rate from the latest decoded file. /// \return Integer sample rate, such as 44100. + /// If no file is decoded, -1 is returned. public: int SampleRate(); /// \brief Free audio object, close files, streams. diff --git a/av/src/AudioDecoder.cc b/av/src/AudioDecoder.cc index 8729a952a..e0d2db9cf 100644 --- a/av/src/AudioDecoder.cc +++ b/av/src/AudioDecoder.cc @@ -172,7 +172,10 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) ///////////////////////////////////////////////// int AudioDecoder::SampleRate() { - return this->data->codecCtx->sample_rate; + if (this->data->codecCtx) + return this->data->codecCtx->sample_rate; + + return -1; } ///////////////////////////////////////////////// diff --git a/av/src/AudioDecoder_TEST.cc b/av/src/AudioDecoder_TEST.cc index 60229f220..89fb765c5 100644 --- a/av/src/AudioDecoder_TEST.cc +++ b/av/src/AudioDecoder_TEST.cc @@ -30,6 +30,9 @@ TEST(AudioDecoder, FileNotSet) unsigned int dataBufferSize; uint8_t *dataBuffer = NULL; EXPECT_FALSE(audio.Decode(&dataBuffer, &dataBufferSize)); + + EXPECT_EQ(audio.File(), ""); + EXPECT_EQ(audio.SampleRate(), -1); } ///////////////////////////////////////////////// @@ -59,7 +62,7 @@ TEST(AudioDecoder, DataBuffer) { common::AudioDecoder audio; - std::string path = PROJECT_SOURCE_PATH; + std::string path = TEST_PATH; path += "/data/cheer.wav"; EXPECT_TRUE(audio.SetFile(path)); @@ -110,8 +113,8 @@ TEST(AudioDecoder, CheerFile) path = TEST_PATH; path += "/data/cheer.wav"; EXPECT_TRUE(audio.SetFile(path)); - EXPECT_EQ(audio.GetFile(), path); - EXPECT_EQ(audio.GetSampleRate(), 48000); + EXPECT_EQ(audio.File(), path); + EXPECT_EQ(audio.SampleRate(), 48000); audio.Decode(&dataBuffer, &dataBufferSize); EXPECT_EQ(dataBufferSize, 5428692u); @@ -122,8 +125,8 @@ TEST(AudioDecoder, CheerFile) path = TEST_PATH; path += "/data/cheer.ogg"; EXPECT_TRUE(audio.SetFile(path)); - EXPECT_EQ(audio.GetFile(), path); - EXPECT_EQ(audio.GetSampleRate(), 44100); + EXPECT_EQ(audio.File(), path); + EXPECT_EQ(audio.SampleRate(), 44100); audio.Decode(&dataBuffer, &dataBufferSize); // In Ubuntu trusty the buffer size double for ogg decoding. @@ -137,11 +140,17 @@ TEST(AudioDecoder, CheerFile) path = TEST_PATH; path += "/data/cheer.mp3"; EXPECT_TRUE(audio.SetFile(path)); - EXPECT_EQ(audio.GetFile(), path); - EXPECT_EQ(audio.GetSampleRate(), 44100); + EXPECT_EQ(audio.File(), path); + EXPECT_EQ(audio.SampleRate(), 44100); audio.Decode(&dataBuffer, &dataBufferSize); - EXPECT_EQ(dataBufferSize, 4995072u); + + // later versions of ffmpeg produces a different buffer size probably due to + // underlying changes in the decoder. The size of the first decoded frame + // is much smaller than all other frames. + EXPECT_TRUE(dataBufferSize == 4995072u || + dataBufferSize == 4987612u || + dataBufferSize == 4987612u * 2); } } diff --git a/av/src/CMakeLists.txt b/av/src/CMakeLists.txt index 471e8e90b..fb78e8c7a 100644 --- a/av/src/CMakeLists.txt +++ b/av/src/CMakeLists.txt @@ -1,9 +1,5 @@ ign_get_libsources_and_unittests(sources gtest_sources) -# FIXME: This class does not currently work -list(REMOVE_ITEM sources AudioDecoder.cc) -list(REMOVE_ITEM gtest_sources AudioDecoder_TEST.cc) - ign_add_component(av SOURCES ${sources} GET_TARGET_NAME av_target) target_link_libraries(${av_target} From 46c4a827b111a556b129f9e72d09bd221d0a2200 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Fri, 31 Jul 2020 18:21:53 -0700 Subject: [PATCH 054/219] =?UTF-8?q?Fix=20actions=20CI=20=E2=9C=A8=20(#83)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Louise Poubel <louise@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- .github/{ci-bionic => ci}/after_make.sh | 5 +++-- .github/ci/packages.apt | 13 ++++++++++++ .github/workflows/ci-bionic.yml | 18 ----------------- .github/workflows/ci.yml | 27 +++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 20 deletions(-) rename .github/{ci-bionic => ci}/after_make.sh (70%) create mode 100644 .github/ci/packages.apt delete mode 100644 .github/workflows/ci-bionic.yml create mode 100644 .github/workflows/ci.yml diff --git a/.github/ci-bionic/after_make.sh b/.github/ci/after_make.sh similarity index 70% rename from .github/ci-bionic/after_make.sh rename to .github/ci/after_make.sh index d1ec8cd7c..0acbe428f 100644 --- a/.github/ci-bionic/after_make.sh +++ b/.github/ci/after_make.sh @@ -2,6 +2,8 @@ set -x +BUILD_DIR=`pwd` + # Install make install @@ -12,5 +14,4 @@ cd build cmake .. make -# return to the compilation place -cd ../../build +cd $BUILD_DIR diff --git a/.github/ci/packages.apt b/.github/ci/packages.apt new file mode 100644 index 000000000..a7fb41b53 --- /dev/null +++ b/.github/ci/packages.apt @@ -0,0 +1,13 @@ +libavcodec-dev +libavdevice-dev +libavformat-dev +libavutil-dev +libfreeimage-dev +libgts-dev +libignition-cmake2-dev +libignition-math6-dev +libswscale-dev +libtinyxml2-dev +pkg-config +ruby-ronn +uuid-dev diff --git a/.github/workflows/ci-bionic.yml b/.github/workflows/ci-bionic.yml deleted file mode 100644 index f17d9b5fc..000000000 --- a/.github/workflows/ci-bionic.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Ubuntu Bionic CI - -on: [push, pull_request] - -jobs: - bionic-ci: - runs-on: ubuntu-latest - name: Ubuntu Bionic CI - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Bionic CI - id: ci - uses: ignition-tooling/ubuntu-bionic-ci-action@master - with: - apt-dependencies: 'pkg-config ruby-ronn uuid-dev libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libfreeimage-dev libgts-dev libswscale-dev libtinyxml2-dev libignition-cmake2-dev libignition-math6-dev' - codecov-token: ${{ secrets.CODECOV_TOKEN }} - script-after-make: ../.github/ci-bionic/after_make.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..5d9be4dd1 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,27 @@ +name: Ubuntu CI + +on: [push] + +jobs: + bionic-ci: + runs-on: ubuntu-latest + name: Ubuntu Bionic CI + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Compile and test + id: ci + uses: ignition-tooling/action-ignition-ci@master + with: + codecov-token: ${{ secrets.CODECOV_TOKEN }} + focal-ci: + runs-on: ubuntu-latest + name: Ubuntu Focal CI + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Compile and test + id: ci + uses: ignition-tooling/action-ignition-ci@focal + with: + codecov-token: ${{ secrets.CODECOV_TOKEN }} From d4b1fe4d7a0eb56b3cbf09092d0bc0a5f30b9096 Mon Sep 17 00:00:00 2001 From: Claire Wang <22240514+claireyywang@users.noreply.github.com> Date: Thu, 13 Aug 2020 10:19:10 -0700 Subject: [PATCH 055/219] Add more detail to profiler tutorial (#86) * add to profiler tutorials * address review comments * fix typo and port Signed-off-by: claireyywang <22240514+claireyywang@users.noreply.github.com> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- tutorials/imgs/profiler_tutorial_example.png | Bin 0 -> 105951 bytes tutorials/profiler.md | 37 ++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 tutorials/imgs/profiler_tutorial_example.png diff --git a/tutorials/imgs/profiler_tutorial_example.png b/tutorials/imgs/profiler_tutorial_example.png new file mode 100644 index 0000000000000000000000000000000000000000..144fe85bf752909f3b4335c921ab6a7483408dc9 GIT binary patch literal 105951 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 v6M^e9UMw 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 b?bc`NDa46tQbQ2|{!)-tktu)q!T;X?)k-&( literal 0 HcmV?d00001 diff --git a/tutorials/profiler.md b/tutorials/profiler.md index eaf44d41f..c0cc4a6b4 100644 --- a/tutorials/profiler.md +++ b/tutorials/profiler.md @@ -17,6 +17,8 @@ cmake on the targets or sources that you are interested in (described below). ## Enabling the Profiler +### On custom example + In order to use the profiler, inspection points must be added to the source code, and the application or library must be linked to the `ignition-common::profiler` component. @@ -30,7 +32,6 @@ The relevant corresponding C++ would be as follows: #include <ignition/common/Profiler.hh> ... - void thread(const char *_thread_name) { // Sets the name of the thread to appear in the UI @@ -99,7 +100,39 @@ xdg-open /usr/share/ignition/ignition-common4/profiler_vis/index.html open /usr/share/ignition/ignition-common4/profiler_vis/index.html ``` -If you are successful, you should see the profiler output in a browser. +### On Ignition library + +If you want to use profiler on any other ignition library, enable the profiler at compile time with ``ENABLE_PROFILER`` cmake argument. + +When compiling with ``CMake``: +```{.sh} +cmake .. -DENABLE_PROFILER=1 +``` +When compiling with ``colcon``: +```{.sh} +colcon build --cmake-args -DENABLE_PROFILER=1 +``` + +If the profiler is run successfully, you should see output in a browser. Similar to this + +![profiler viewer exmaple](imgs/profiler_tutorial_example.png) + +### Troubleshoot the web viewer + +If you see ``connection error``, there are a couple of things to double check +1. Was the profiler enabled when the project you're trying to run was compiled? Note that this isn't the case if you installed Ignition libraries from binaries, for example. You need to compile the project from source with the ENABLE_PROFILER variable set. +2. Are you using the correct port number in the upper left corner ``Connection Addresss: ws://127.0.0.1:1500/rmt``? Run ``ign gazebo -v 4`` to show the port number in use. The port number will be printed out if the profiler is enabled. + + ```{.sh} + [Dbg] [RemoteryProfilerImpl.cc:187] Staring ign-common profiler impl: Remotery (port: 1500) + ``` +3. Are you running the program in a separate terminal? Profiler only establishes connection if there is a program runing and being actively profiled. + +4. If you want to use a different port, configure the environment variable `RMT_PORT` by running the following in terminal, and update the web viewer port in your browser accordingly (see 2 above) + ```{.sh} + export RMT_PORT=1500 + ``` + ## Using the Profiler From 1c291543da776682d3b5ea2e77cae2c1b7356338 Mon Sep 17 00:00:00 2001 From: Claire Wang <22240514+claireyywang@users.noreply.github.com> Date: Fri, 14 Aug 2020 13:55:01 -0700 Subject: [PATCH 056/219] fix profiler tutorial image link (#87) Signed-off-by: claireyywang <22240514+claireyywang@users.noreply.github.com> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- tutorials/profiler.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tutorials/profiler.md b/tutorials/profiler.md index c0cc4a6b4..65e06eddc 100644 --- a/tutorials/profiler.md +++ b/tutorials/profiler.md @@ -115,7 +115,7 @@ colcon build --cmake-args -DENABLE_PROFILER=1 If the profiler is run successfully, you should see output in a browser. Similar to this -![profiler viewer exmaple](imgs/profiler_tutorial_example.png) +<img src="https://raw.githubusercontent.com/ignitionrobotics/ign-common/ign-common3/tutorials/imgs/profiler_tutorial_example.png"> ### Troubleshoot the web viewer From e4d88b09f26d6addd96cb98e5585b521850c8852 Mon Sep 17 00:00:00 2001 From: John Shepherd <john@openrobotics.org> Date: Fri, 4 Sep 2020 13:35:08 -0700 Subject: [PATCH 057/219] small tutorials fixes (#92) Signed-off-by: John Shepherd <john@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- profiler/src/RemoteryProfilerImpl.cc | 2 +- tutorials/profiler.md | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/profiler/src/RemoteryProfilerImpl.cc b/profiler/src/RemoteryProfilerImpl.cc index 85d4eb30d..c78bdf0a9 100644 --- a/profiler/src/RemoteryProfilerImpl.cc +++ b/profiler/src/RemoteryProfilerImpl.cc @@ -184,7 +184,7 @@ RemoteryProfilerImpl::RemoteryProfilerImpl() static_cast<RemoteryProfilerImpl *>(_context)->HandleInput(_text); }; - igndbg << "Staring ign-common profiler impl: Remotery" << + igndbg << "Starting ign-common profiler impl: Remotery" << " (port: " << this->settings->port << ")" << std::endl; rmtError error; error = rmt_CreateGlobalInstance(&this->rmt); diff --git a/tutorials/profiler.md b/tutorials/profiler.md index 65e06eddc..d6f8fd926 100644 --- a/tutorials/profiler.md +++ b/tutorials/profiler.md @@ -113,6 +113,11 @@ When compiling with ``colcon``: colcon build --cmake-args -DENABLE_PROFILER=1 ``` +Run your Ignition library then open the profiler browser using: +``` +ign_remotery_vis +``` + If the profiler is run successfully, you should see output in a browser. Similar to this <img src="https://raw.githubusercontent.com/ignitionrobotics/ign-common/ign-common3/tutorials/imgs/profiler_tutorial_example.png"> @@ -120,13 +125,13 @@ If the profiler is run successfully, you should see output in a browser. Similar ### Troubleshoot the web viewer If you see ``connection error``, there are a couple of things to double check -1. Was the profiler enabled when the project you're trying to run was compiled? Note that this isn't the case if you installed Ignition libraries from binaries, for example. You need to compile the project from source with the ENABLE_PROFILER variable set. -2. Are you using the correct port number in the upper left corner ``Connection Addresss: ws://127.0.0.1:1500/rmt``? Run ``ign gazebo -v 4`` to show the port number in use. The port number will be printed out if the profiler is enabled. +1. Was the profiler enabled when the project you're trying to run was compiled? Note that this isn't the case if you installed Ignition libraries from binaries, for example. You need to compile the project from source with the `ENABLE_PROFILER` variable set. +2. Are you using the correct port number in the upper left corner ``Connection Addresss: ws://127.0.0.1:1500/rmt``? Running ``ign gazebo -v 4`` will show the port number in use near the top of the outputted text. The port number will be printed out if the profiler is enabled. ```{.sh} - [Dbg] [RemoteryProfilerImpl.cc:187] Staring ign-common profiler impl: Remotery (port: 1500) + [Dbg] [RemoteryProfilerImpl.cc:187] Starting ign-common profiler impl: Remotery (port: 1500) ``` -3. Are you running the program in a separate terminal? Profiler only establishes connection if there is a program runing and being actively profiled. +3. Are you running the program in a separate terminal? The profiler only establishes connection if there is a program running and being actively profiled. 4. If you want to use a different port, configure the environment variable `RMT_PORT` by running the following in terminal, and update the web viewer port in your browser accordingly (see 2 above) ```{.sh} From ea545b7e48671da02402c772da6cc3fab511c4ba Mon Sep 17 00:00:00 2001 From: John Shepherd <john@openrobotics.org> Date: Fri, 11 Sep 2020 08:56:53 -0700 Subject: [PATCH 058/219] Fix trajectory info memory leak (#93) Signed-off-by: John Shepherd <john@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- graphics/src/Animation.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/graphics/src/Animation.cc b/graphics/src/Animation.cc index b3a66c460..a0330c2c8 100644 --- a/graphics/src/Animation.cc +++ b/graphics/src/Animation.cc @@ -408,6 +408,7 @@ TrajectoryInfo::TrajectoryInfo(TrajectoryInfo &&_trajInfo) noexcept ///////////////////////////////////////////////// TrajectoryInfo::~TrajectoryInfo() { + delete this->dataPtr; } ////////////////////////////////////////////////// From d8b32b7de8a170d76e76848c9b1442c73511dce4 Mon Sep 17 00:00:00 2001 From: John Shepherd <john@openrobotics.org> Date: Tue, 15 Sep 2020 17:25:34 -0700 Subject: [PATCH 059/219] Add fix Signed-off-by: John Shepherd <john@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- src/URI.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/URI.cc b/src/URI.cc index 7579d014f..f3a2dc6d4 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -881,8 +881,7 @@ URI::URI() URI::URI(const std::string &_str) : URI() { - if (!this->Parse(_str)) - ignwarn << "Unable to parse URI [" << _str << "]. Ignoring." << std::endl; + this->Parse(_str); } ///////////////////////////////////////////////// From 2fd8145825b1d6f27eb8ec203127ea120d166891 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Wed, 16 Sep 2020 14:42:13 -0700 Subject: [PATCH 060/219] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20=203.6.1=20(#95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Louise Poubel <louise@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- Changelog.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Changelog.md b/Changelog.md index 91f10e9fa..8c77f0341 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,9 +14,28 @@ ## Ignition Common 3.X.X +## Ignition Common 3.6.1 (2020-09-16) + 1. Fix hierarchical submesh processing in the ColladaLoader. * [Pull Request 78](https://github.com/ignitionrobotics/ign-common/pull/78) +1. Tutorial updates + * [Pull Request 86](https://github.com/ignitionrobotics/ign-common/pull/86) + * [Pull Request 87](https://github.com/ignitionrobotics/ign-common/pull/87) + * [Pull Request 92](https://github.com/ignitionrobotics/ign-common/pull/92) + +1. Fix the AudioDecoder class + * [Pull Request 81](https://github.com/ignitionrobotics/ign-common/pull/81) + +1. Fix actions CI + * [Pull Request 83](https://github.com/ignitionrobotics/ign-common/pull/83) + +1. Fix trajectory info memory leak + * [Pull Request 93](https://github.com/ignitionrobotics/ign-common/pull/93) + +1. Remove URI warning on constructor + * [Pull Request 94](https://github.com/ignitionrobotics/ign-common/pull/94) + ## Ignition Common 3.6.0 (2020-06-09) 1. Refactor Image::MaxColor to reduce computation time From b43336ac7fe1a02a793154902f6f5a076e438019 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Mon, 28 Sep 2020 12:42:11 -0500 Subject: [PATCH 061/219] Fix env behavior to return true on empty vars (#97) Signed-off-by: Michael Carroll <michael@openrobotics.org> --- include/ignition/common/Util.hh | 29 +++++++++ src/Util.cc | 80 ++++++++++++++++++++++++- src/Util_TEST.cc | 103 ++++++++++++++++++++++++++++++++ tools/code_check.sh | 0 4 files changed, 210 insertions(+), 2 deletions(-) mode change 100644 => 100755 tools/code_check.sh diff --git a/include/ignition/common/Util.hh b/include/ignition/common/Util.hh index 23dcf5a4c..289239211 100644 --- a/include/ignition/common/Util.hh +++ b/include/ignition/common/Util.hh @@ -215,12 +215,41 @@ namespace ignition #endif /// \brief Find the environment variable '_name' and return its value. + /// + /// \TODO(mjcarroll): Deprecate and remove in tick-tock. + /// /// \param[in] _name Name of the environment variable. /// \param[out] _value Value if the variable was found. /// \return True if the variable was found or false otherwise. bool IGNITION_COMMON_VISIBLE env( const std::string &_name, std::string &_value); + /// \brief Find the environment variable '_name' and return its value. + /// \param[in] _name Name of the environment variable. + /// \param[out] _value Value if the variable was found. + /// \param[in] _allowEmpty Allow set-but-empty variables. + /// (Unsupported on Windows) + /// \return True if the variable was found or false otherwise. + bool IGNITION_COMMON_VISIBLE env( + const std::string &_name, std::string &_value, + bool _allowEmpty); + + /// \brief Set the environment variable '_name'. + /// + /// Note that on Windows setting an empty string (_value=="") + /// is the equivalent of unsetting the variable. + /// + /// \param[in] _name Name of the environment variable. + /// \param[in] _value Value of the variable to be set. + /// \return True if the variable was set or false otherwise. + bool IGNITION_COMMON_VISIBLE setenv( + const std::string &_name, const std::string &_value); + + /// \brief Unset the environment variable '_name'. + /// \param[in] _name Name of the environment variable. + /// \return True if the variable was unset or false otherwise. + bool IGNITION_COMMON_VISIBLE unsetenv(const std::string &_name); + /// \brief Get a UUID /// \return A UUID string std::string IGNITION_COMMON_VISIBLE uuid(); diff --git a/src/Util.cc b/src/Util.cc index a29ddcd8b..2c5f8f9ad 100644 --- a/src/Util.cc +++ b/src/Util.cc @@ -31,6 +31,7 @@ #include <sstream> #include <ignition/common/config.hh> +#include <ignition/common/Console.hh> #include <ignition/common/SystemPaths.hh> #include <ignition/common/Util.hh> #include <ignition/common/Uuid.hh> @@ -321,8 +322,17 @@ ignition::common::SystemPaths *ignition::common::systemPaths() ///////////////////////////////////////////////// bool ignition::common::env(const std::string &_name, std::string &_value) +{ + return env(_name, _value, false); +} + +///////////////////////////////////////////////// +bool ignition::common::env(const std::string &_name, + std::string &_value, + bool _allowEmpty) { std::string v; + bool valid = false; #ifdef _WIN32 const DWORD buffSize = 32767; static char buffer[buffSize]; @@ -330,12 +340,32 @@ bool ignition::common::env(const std::string &_name, std::string &_value) { v = buffer; } + + if (!v.empty()) + { + valid = true; + } + + if (_allowEmpty) + { + ignwarn << "Reading environment variable with _allowEmpty==true" + << " is unsupported on Windows.\n"; + } + #else const char *cvar = std::getenv(_name.c_str()); - if (cvar) + if (cvar != nullptr) + { v = cvar; + valid = true; + + if (v[0] == '\0' && !_allowEmpty) + { + valid = false; + } + } #endif - if (!v.empty()) + if (valid) { _value = v; return true; @@ -343,6 +373,52 @@ bool ignition::common::env(const std::string &_name, std::string &_value) return false; } +///////////////////////////////////////////////// +bool ignition::common::setenv(const std::string &_name, + const std::string &_value) +{ +#ifdef _WIN32 + if (0 != _putenv_s(_name.c_str(), _value.c_str())) + { + ignwarn << "Failed to set environment variable: " + << "[" << _name << "]" + << strerror(errno) << std::endl; + return false; + } +#else + if (0 != ::setenv(_name.c_str(), _value.c_str(), true)) + { + ignwarn << "Failed to set environment variable: " + << "[" << _name << "]" + << strerror(errno) << std::endl; + return false; + } +#endif + return true; +} +///////////////////////////////////////////////// +bool ignition::common::unsetenv(const std::string &_name) +{ +#ifdef _WIN32 + if (0 != _putenv_s(_name.c_str(), "")) + { + ignwarn << "Failed to unset environment variable: " + << "[" << _name << "]" + << strerror(errno) << std::endl; + return false; + } +#else + if (0 != ::unsetenv(_name.c_str())) + { + ignwarn << "Failed to unset environment variable: " + << "[" << _name << "]" + << strerror(errno) << std::endl; + return false; + } +#endif + return true; +} + ///////////////////////////////////////////////// std::string ignition::common::sha1(void const *_buffer, std::size_t _byteCount) { diff --git a/src/Util_TEST.cc b/src/Util_TEST.cc index ab63169eb..2b41184e8 100644 --- a/src/Util_TEST.cc +++ b/src/Util_TEST.cc @@ -172,6 +172,109 @@ TEST(Util_TEST, emptyENV) EXPECT_TRUE(var.empty()); } +///////////////////////////////////////////////// +TEST(Util_TEST, envSet) +{ + const auto key = "IGN_ENV_SET"; + ASSERT_TRUE(common::setenv(key, "VALUE")); + + // Check set var + { + std::string value; + EXPECT_TRUE(common::env(key, value)); + EXPECT_FALSE(value.empty()); + EXPECT_EQ("VALUE", value); + } + + // Check set var with allowEmpty + { + std::string value; + EXPECT_TRUE(common::env(key, value, true)); + EXPECT_FALSE(value.empty()); + EXPECT_EQ("VALUE", value); + } + + // Check set var without allowEmpty + { + std::string value; + EXPECT_TRUE(common::env(key, value, false)); + EXPECT_FALSE(value.empty()); + EXPECT_EQ("VALUE", value); + } + + ASSERT_TRUE(common::unsetenv(key)); +} + +///////////////////////////////////////////////// +TEST(Util_TEST, envUnset) +{ + const auto key = "IGN_ENV_UNSET"; + ASSERT_TRUE(common::unsetenv(key)); + + // Check unset var (default) + { + std::string value; + EXPECT_FALSE(common::env(key, value)); + EXPECT_TRUE(value.empty()); + } + + // Check unset var with allowEmpty + { + std::string value; + EXPECT_FALSE(common::env(key, value, true)); + EXPECT_TRUE(value.empty()); + } + + // Check unset var without allowEmpty + { + std::string value; + EXPECT_FALSE(common::env(key, value, false)); + EXPECT_TRUE(value.empty()); + } + ASSERT_TRUE(common::unsetenv(key)); +} + +///////////////////////////////////////////////// +TEST(Util_TEST, envSetEmpty) +{ + const auto key = "IGN_ENV_SET_EMPTY"; + + ASSERT_TRUE(common::setenv(key, "")); + ASSERT_FALSE(common::setenv("", "")); + + // Check set empty var (default) + { + std::string value; + EXPECT_FALSE(common::env(key, value)); + EXPECT_TRUE(value.empty()); + } + +#ifdef _WIN32 + { + // This will warn on Windows, but return false + std::string value; + EXPECT_FALSE(common::env(key, value, true)); + EXPECT_TRUE(value.empty()); + } +#else + { + // This will not warn and return true on Linux, + // as empty environment variables are allowed. + std::string value; + EXPECT_TRUE(common::env(key, value, true)); + EXPECT_TRUE(value.empty()); + } +#endif + + // Check set empty var without allowEmpty + { + std::string value; + EXPECT_FALSE(common::env(key, value, false)); + EXPECT_TRUE(value.empty()); + } + ASSERT_TRUE(common::unsetenv(key)); +} + ///////////////////////////////////////////////// TEST(Util_TEST, findFile) { diff --git a/tools/code_check.sh b/tools/code_check.sh old mode 100644 new mode 100755 From ac2c4b648b614692dd39d197735b712f20862c17 Mon Sep 17 00:00:00 2001 From: Ian Chen <ichen@osrfoundation.org> Date: Mon, 28 Sep 2020 12:08:09 -0700 Subject: [PATCH 062/219] Fix more Animation memory leak (#98) Signed-off-by: Ian Chen <ichen@osrfoundation.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- graphics/include/ignition/common/Animation.hh | 2 +- graphics/src/Animation.cc | 9 ++++++--- graphics/src/SkeletonAnimation.cc | 19 ++++++++----------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/graphics/include/ignition/common/Animation.hh b/graphics/include/ignition/common/Animation.hh index 596c7840d..65209519d 100644 --- a/graphics/include/ignition/common/Animation.hh +++ b/graphics/include/ignition/common/Animation.hh @@ -123,7 +123,7 @@ namespace ignition protected: bool loop; /// \brief array of keyframe type alias - protected: typedef std::vector<common::KeyFrame*> KeyFrame_V; + protected: typedef std::vector<common::KeyFrame *> KeyFrame_V; /// \brief array of key frames protected: KeyFrame_V keyFrames; diff --git a/graphics/src/Animation.cc b/graphics/src/Animation.cc index a0330c2c8..272ccb5eb 100644 --- a/graphics/src/Animation.cc +++ b/graphics/src/Animation.cc @@ -97,7 +97,7 @@ class ignition::common::TrajectoryInfoPrivate /// \brief Waypoints in pose animation format. /// Times within the animation should be considered durations counted /// from start time. - public: common::PoseAnimation *waypoints{nullptr}; + public: std::shared_ptr<common::PoseAnimation> waypoints; /// \brief Distance on the XY plane covered by each segment. The key is the /// duration from start time, the value is the distance in meters. @@ -262,6 +262,8 @@ PoseAnimation::~PoseAnimation() { delete this->positionSpline; delete this->rotationSpline; + for (auto kf : this->keyFrames) + delete kf; } ///////////////////////////////////////////////// @@ -536,7 +538,7 @@ void TrajectoryInfo::SetTranslated(bool _translated) ///////////////////////////////////////////////// common::PoseAnimation *TrajectoryInfo::Waypoints() const { - return this->dataPtr->waypoints; + return this->dataPtr->waypoints.get(); } ///////////////////////////////////////////////// @@ -553,7 +555,8 @@ void TrajectoryInfo::SetWaypoints( std::stringstream animName; animName << this->AnimIndex() << "_" << this->Id(); - common::PoseAnimation *anim = new common::PoseAnimation(animName.str(), + std::shared_ptr<common::PoseAnimation> anim = + std::make_shared<common::PoseAnimation>(animName.str(), std::chrono::duration<double>(this->Duration()).count(), false); auto prevPose = first->second.Pos(); diff --git a/graphics/src/SkeletonAnimation.cc b/graphics/src/SkeletonAnimation.cc index 7e0563b74..b73d8b53e 100644 --- a/graphics/src/SkeletonAnimation.cc +++ b/graphics/src/SkeletonAnimation.cc @@ -32,7 +32,7 @@ class ignition::common::SkeletonAnimationPrivate public: double length; /// \brief a dictionary of node animations - public: std::map<std::string, NodeAnimation*> animations; + public: std::map<std::string, std::shared_ptr<NodeAnimation>> animations; }; ////////////////////////////////////////////////// @@ -74,7 +74,7 @@ NodeAnimation *SkeletonAnimation::NodeAnimationByName( { auto it = this->data->animations.find(_node); if (it != this->data->animations.end()) - return it->second; + return it->second.get(); return nullptr; } @@ -89,7 +89,7 @@ void SkeletonAnimation::AddKeyFrame(const std::string &_node, const double _time, const math::Matrix4d &_mat) { if (this->data->animations.find(_node) == this->data->animations.end()) - this->data->animations[_node] = new NodeAnimation(_node); + this->data->animations[_node] = std::make_shared<NodeAnimation>(_node); if (_time > this->data->length) this->data->length = _time; @@ -102,7 +102,7 @@ void SkeletonAnimation::AddKeyFrame(const std::string &_node, const double _time, const math::Pose3d &_pose) { if (this->data->animations.find(_node) == this->data->animations.end()) - this->data->animations[_node] = new NodeAnimation(_node); + this->data->animations[_node] = std::make_shared<NodeAnimation>(_node); if (_time > this->data->length) this->data->length = _time; @@ -133,9 +133,8 @@ std::map<std::string, math::Matrix4d> SkeletonAnimation::PoseAt( /// prev and next keyframe for each node at each time step, but rather /// doing it only once per time step. std::map<std::string, math::Matrix4d> pose; - for (std::map<std::string, NodeAnimation*>::const_iterator iter = - this->data->animations.begin(); - iter != this->data->animations.end(); ++iter) + for (auto iter = this->data->animations.begin(); + iter != this->data->animations.end(); ++iter) { pose[iter->first] = iter->second->FrameAt(_time, _loop); } @@ -147,8 +146,7 @@ std::map<std::string, math::Matrix4d> SkeletonAnimation::PoseAt( std::map<std::string, math::Matrix4d> SkeletonAnimation::PoseAtX( const double _x, const std::string &_node, const bool _loop) const { - std::map<std::string, NodeAnimation*>::const_iterator nodeAnim = - this->data->animations.find(_node); + auto nodeAnim = this->data->animations.find(_node); if (nodeAnim == this->data->animations.end()) { ignerr << "Can't find animation named [" << _node << "]" << std::endl; @@ -178,8 +176,7 @@ std::map<std::string, math::Matrix4d> SkeletonAnimation::PoseAtX( ////////////////////////////////////////////////// void SkeletonAnimation::Scale(const double _scale) { - for (std::map<std::string, NodeAnimation*>::iterator iter = - this->data->animations.begin(); + for (auto iter = this->data->animations.begin(); iter != this->data->animations.end(); ++iter) { iter->second->Scale(_scale); From ba80f904cba8a67d2a50af8845cf34381f40b649 Mon Sep 17 00:00:00 2001 From: Ian Chen <ichen@osrfoundation.org> Date: Mon, 12 Oct 2020 12:19:30 -0700 Subject: [PATCH 063/219] Fix loading dae file with hierarchical node that does not have a name (#101) Signed-off-by: Ian Chen <ichen@osrfoundation.org> Co-authored-by: Louise Poubel <louise@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- graphics/src/ColladaLoader.cc | 25 +++++++ graphics/src/ColladaLoader_TEST.cc | 26 +++++++ test/data/box_with_hierarchical_nodes.dae | 86 +++++++++++++++++++++++ 3 files changed, 137 insertions(+) create mode 100644 test/data/box_with_hierarchical_nodes.dae diff --git a/graphics/src/ColladaLoader.cc b/graphics/src/ColladaLoader.cc index 7812b36cc..7bf473576 100644 --- a/graphics/src/ColladaLoader.cc +++ b/graphics/src/ColladaLoader.cc @@ -477,6 +477,31 @@ void ColladaLoaderPrivate::LoadNode(tinyxml2::XMLElement *_elem, Mesh *_mesh, { this->currentNodeName = _elem->Attribute("name"); } + else + { + // if node does not have a name, then append the mesh in this node + // to the first ancestor node that has a name, i.e. this mesh becomes + // part of the parent / ancestor mesh + tinyxml2::XMLElement *parent = + dynamic_cast<tinyxml2::XMLElement *>(_elem->Parent()); + std::string nodeName; + while (parent && std::string(parent->Value()) == "node") + { + const char *name = parent->Attribute("name"); + if (name) + { + nodeName = name; + break; + } + } + if (nodeName.empty()) + { + // if none of the ancestor node has a name, then create a custom name + static int nodeCounter = 0; + nodeName = "unnamed_submesh_" + std::to_string(nodeCounter++); + } + this->currentNodeName = nodeName; + } if (_elem->FirstChildElement("instance_node")) { diff --git a/graphics/src/ColladaLoader_TEST.cc b/graphics/src/ColladaLoader_TEST.cc index 8c360e80f..45eca5228 100644 --- a/graphics/src/ColladaLoader_TEST.cc +++ b/graphics/src/ColladaLoader_TEST.cc @@ -365,6 +365,32 @@ TEST_F(ColladaLoader, LoadBoxWithMultipleGeoms) EXPECT_EQ(0u, mesh->SubMeshByIndex(1).lock()->NodeAssignmentsCount()); } +///////////////////////////////////////////////// +TEST_F(ColladaLoader, LoadBoxWithHierarchicalNodes) +{ + common::ColladaLoader loader; + common::Mesh *mesh = loader.Load( + std::string(PROJECT_SOURCE_PATH) + + "/test/data/box_with_hierarchical_nodes.dae"); + + ASSERT_EQ(5u, mesh->SubMeshCount()); + + // node by itself + EXPECT_EQ("StaticCube", mesh->SubMeshByIndex(0).lock()->Name()); + + // nested node with no name so it takes the parent's name instead + EXPECT_EQ("StaticCubeParent", mesh->SubMeshByIndex(1).lock()->Name()); + + // parent node containing child node with no name + EXPECT_EQ("StaticCubeParent", mesh->SubMeshByIndex(2).lock()->Name()); + + // nested node with name + EXPECT_EQ("StaticCubeNested", mesh->SubMeshByIndex(3).lock()->Name()); + + // Parent of nested node with name + EXPECT_EQ("StaticCubeParent2", mesh->SubMeshByIndex(4).lock()->Name()); +} + ///////////////////////////////////////////////// TEST_F(ColladaLoader, MergeBoxWithDoubleSkeleton) { diff --git a/test/data/box_with_hierarchical_nodes.dae b/test/data/box_with_hierarchical_nodes.dae new file mode 100644 index 000000000..0f4950ce4 --- /dev/null +++ b/test/data/box_with_hierarchical_nodes.dae @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="utf-8"?> +<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <asset> + <contributor> + <author>Blender User</author> + <authoring_tool>Blender 2.80.75 commit date:2019-07-29, commit time:14:47, hash:f6cb5f54494e</authoring_tool> + </contributor> + <created>2019-09-13T12:07:34</created> + <modified>2019-09-13T12:07:34</modified> + <unit name="meter" meter="1"/> + <up_axis>Z_UP</up_axis> + </asset> + <library_images/> + <library_geometries> + <geometry id="StaticCube-mesh" name="StaticCube"> + <mesh> + <source id="StaticCube-mesh-positions"> + <float_array id="StaticCube-mesh-positions-array" count="24">-1 -3.545556 0 -1 -3.545556 2 -1 -1.545556 0 -1 -1.545556 2 1 -3.545556 0 1 -3.545556 2 1 -1.545556 0 1 -1.545556 2</float_array> + <technique_common> + <accessor source="#StaticCube-mesh-positions-array" count="8" stride="3"> + <param name="X" type="float"/> + <param name="Y" type="float"/> + <param name="Z" type="float"/> + </accessor> + </technique_common> + </source> + <source id="StaticCube-mesh-normals"> + <float_array id="StaticCube-mesh-normals-array" count="18">-1 0 0 0 1 0 1 0 0 0 -1 0 0 0 -1 0 0 1</float_array> + <technique_common> + <accessor source="#StaticCube-mesh-normals-array" count="6" stride="3"> + <param name="X" type="float"/> + <param name="Y" type="float"/> + <param name="Z" type="float"/> + </accessor> + </technique_common> + </source> + <source id="StaticCube-mesh-map-0"> + <float_array id="StaticCube-mesh-map-0-array" count="48">0.375 0 0.625 0 0.625 0.25 0.375 0.25 0.375 0.25 0.625 0.25 0.625 0.5 0.375 0.5 0.375 0.5 0.625 0.5 0.625 0.75 0.375 0.75 0.375 0.75 0.625 0.75 0.625 1 0.375 1 0.125 0.5 0.375 0.5 0.375 0.75 0.125 0.75 0.625 0.5 0.875 0.5 0.875 0.75 0.625 0.75</float_array> + <technique_common> + <accessor source="#StaticCube-mesh-map-0-array" count="24" stride="2"> + <param name="S" type="float"/> + <param name="T" type="float"/> + </accessor> + </technique_common> + </source> + <vertices id="StaticCube-mesh-vertices"> + <input semantic="POSITION" source="#StaticCube-mesh-positions"/> + </vertices> + <polylist count="6"> + <input semantic="VERTEX" source="#StaticCube-mesh-vertices" offset="0"/> + <input semantic="NORMAL" source="#StaticCube-mesh-normals" offset="1"/> + <input semantic="TEXCOORD" source="#StaticCube-mesh-map-0" offset="2" set="0"/> + <vcount>4 4 4 4 4 4 </vcount> + <p>0 0 0 1 0 1 3 0 2 2 0 3 2 1 4 3 1 5 7 1 6 6 1 7 6 2 8 7 2 9 5 2 10 4 2 11 4 3 12 5 3 13 1 3 14 0 3 15 2 4 16 6 4 17 4 4 18 0 4 19 7 5 20 3 5 21 1 5 22 5 5 23</p> + </polylist> + </mesh> + </geometry> + </library_geometries> + <library_visual_scenes> + <visual_scene id="Scene" name="Scene"> + <node id="StaticCube" name="StaticCube" type="NODE"> + <matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix> + <instance_geometry url="#StaticCube-mesh" name="StaticCube"/> + </node> + <node id="StaticCubeParent" name="StaticCubeParent" type="NODE"> + <matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix> + <instance_geometry url="#StaticCube-mesh" name="StaticCube"/> + <node id="StaticCubeNestedNoName" type="NODE"> + <matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix> + <instance_geometry url="#StaticCube-mesh" name="StaticCubeNestedNodeName"/> + </node> + </node> + <node id="StaticCubeParent2" name="StaticCubeParent2" type="NODE"> + <matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix> + <instance_geometry url="#StaticCube-mesh" name="StaticCube"/> + <node id="StaticCubeNested" name="StaticCubeNested" type="NODE"> + <matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix> + <instance_geometry url="#StaticCube-mesh" name="StaticCubeNested"/> + </node> + </node> + </visual_scene> + </library_visual_scenes> + <scene> + <instance_visual_scene url="#Scene"/> + </scene> +</COLLADA> From f5ee75a5aab5cc0af2646176f0be3cdcb62a07f3 Mon Sep 17 00:00:00 2001 From: John Shepherd <john@openrobotics.org> Date: Fri, 16 Oct 2020 13:39:56 -0700 Subject: [PATCH 064/219] [ign-common3] Support fuel URLs for textures (#102) Resolves ignitionrobotics/ign-gazebo#343 Signed-off-by: John Shepherd <john@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- graphics/src/Material.cc | 15 +++++++++++---- graphics/src/Material_TEST.cc | 12 ++++++++++-- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/graphics/src/Material.cc b/graphics/src/Material.cc index cc3a21c63..291773dfc 100644 --- a/graphics/src/Material.cc +++ b/graphics/src/Material.cc @@ -144,16 +144,23 @@ void Material::SetTextureImage(const std::string &_tex) void Material::SetTextureImage(const std::string &_tex, const std::string &_resourcePath) { - this->dataPtr->texImage = _resourcePath + "/" + _tex; + this->dataPtr->texImage = common::joinPaths(_resourcePath, _tex); // If the texture image doesn't exist then try the next most likely path. if (!exists(this->dataPtr->texImage)) { - this->dataPtr->texImage = _resourcePath + "/../materials/textures/" + _tex; + // Try to resolve this texture image to a locally cached path in a + // separate directory + this->dataPtr->texImage = common::findFile(_tex); if (!exists(this->dataPtr->texImage)) { - ignerr << "Unable to find texture[" << _tex << "] in path[" - << _resourcePath << "]\n"; + this->dataPtr->texImage = common::joinPaths(_resourcePath, "..", + "materials", "textures", _tex); + if (!exists(this->dataPtr->texImage)) + { + ignerr << "Unable to find texture [" << _tex << "] as a locally" + " cached texture or in path ["<< _resourcePath << "]\n"; + } } } } diff --git a/graphics/src/Material_TEST.cc b/graphics/src/Material_TEST.cc index 693e465a7..1b5dd92da 100644 --- a/graphics/src/Material_TEST.cc +++ b/graphics/src/Material_TEST.cc @@ -16,6 +16,7 @@ #include <gtest/gtest.h> +#include "test_config.h" #include "ignition/common/Material.hh" #include "ignition/common/Pbr.hh" #include "test/util.hh" @@ -35,8 +36,15 @@ TEST_F(MaterialTest, Material) EXPECT_STREQ("texture_image", mat.TextureImage().c_str()); mat.SetTextureImage("texture_image", "/path"); - EXPECT_STREQ("/path/../materials/textures/texture_image", - mat.TextureImage().c_str()); + std::string texturePath = common::joinPaths("/path", "..", + "materials", "textures", "texture_image"); + EXPECT_STREQ(texturePath.c_str(), mat.TextureImage().c_str()); + + texturePath = common::joinPaths(std::string(PROJECT_SOURCE_PATH), "test", + "data", "box.dae"); + + mat.SetTextureImage(texturePath, "bad_path"); + EXPECT_STREQ(texturePath.c_str(), mat.TextureImage().c_str()); mat.SetAmbient(math::Color(0.1f, 0.2f, 0.3f, 0.4f)); EXPECT_TRUE(mat.Ambient() == math::Color(0.1f, 0.2f, 0.3f, 0.4f)); From 62536792e6cd3de7714d0fa4f8daa3fe448bbc02 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Mon, 19 Oct 2020 07:38:26 -0700 Subject: [PATCH 065/219] Add Console example (#106) Signed-off-by: Louise Poubel <louise@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- examples/CMakeLists.txt | 3 +++ examples/README.md | 25 +++++++++++++++++++++++++ examples/console.cc | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 examples/README.md create mode 100644 examples/console.cc diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index fe99f5834..24b3db132 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -6,6 +6,9 @@ find_package(ignition-common4 QUIET REQUIRED COMPONENTS events profiler) add_executable(assert_example assert_example.cc) target_link_libraries(assert_example ignition-common4::core) +add_executable(console_example console.cc) +target_link_libraries(console_example ignition-common4::core) + add_executable(events_example events.cc) target_link_libraries(events_example ignition-common4::events) diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 000000000..9a7fb5fa8 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,25 @@ +# Examples + +These examples demonstrate various Ignition Common features. + +## Build + +After installing Ignition Common, from source or from binaries, build with: + +``` +git clone https://github.com/ignitionrobotics/ign-common/ +cd ign-common/examples +mkdir build +cd build +cmake .. +make +``` + +## Run + +One execuable is created inside the `build` folder for each example. + +You can run each executable from the build folder with `./executablename`. For example: + +`./events_example` + diff --git a/examples/console.cc b/examples/console.cc new file mode 100644 index 000000000..0fe561a48 --- /dev/null +++ b/examples/console.cc @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2020 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#include <ignition/common.hh> + +int main(int argc, char **argv) +{ + // Default verbosity is 1, only error messages show + igndbg << "This is a debug message" << std::endl; + ignmsg << "This is an informational message" << std::endl; + ignwarn << "This is a warning" << std::endl; + ignerr << "This is an error" << std::endl; + + // Change verbosity to level 4, all messages show + ignition::common::Console::SetVerbosity(4); + igndbg << "This is a debug message" << std::endl; + ignmsg << "This is an informational message" << std::endl; + ignwarn << "This is a warning" << std::endl; + ignerr << "This is an error" << std::endl; + + return 0; +} From 77eab3ed9efa57db6614cca8510480f6bf69c279 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Tue, 20 Oct 2020 16:16:49 -0700 Subject: [PATCH 066/219] Improve fork experience (#103) Signed-off-by: Louise Poubel <louise@openrobotics.org> Co-authored-by: Michael Carroll <michael@openrobotics.org> --- .github/workflows/ci.yml | 4 +--- .github/workflows/pr-collection-labeler.yml | 2 +- .github/workflows/triage.yml | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5d9be4dd1..7aa80d0bd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,6 @@ name: Ubuntu CI -on: [push] +on: [push, pull_request] jobs: bionic-ci: @@ -23,5 +23,3 @@ jobs: - name: Compile and test id: ci uses: ignition-tooling/action-ignition-ci@focal - with: - codecov-token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/pr-collection-labeler.yml b/.github/workflows/pr-collection-labeler.yml index 99e9730bc..7d7b4e179 100644 --- a/.github/workflows/pr-collection-labeler.yml +++ b/.github/workflows/pr-collection-labeler.yml @@ -1,6 +1,6 @@ name: PR Collection Labeler -on: pull_request +on: pull_request_target jobs: pr_collection_labeler: diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml index 69c16ac81..736670e0e 100644 --- a/.github/workflows/triage.yml +++ b/.github/workflows/triage.yml @@ -1,7 +1,7 @@ on: issues: types: [opened] - pull_request: + pull_request_target: types: [opened] name: Ticket opened jobs: From dfc3f10912833a0d1b25f92d1016d35efe82d239 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Wed, 21 Oct 2020 13:17:55 -0500 Subject: [PATCH 067/219] [ign-common3] Miscellaneous Cleanups (#107) * Use variable substitution to prevent forward port issues * Add string Join functionality * Replace all uses of env with Ignition functions Signed-off-by: Michael Carroll <michael@openrobotics.org> --- examples/CMakeLists.txt | 11 +-- include/ignition/common/StringUtils.hh | 24 +++++++ src/Filesystem_TEST.cc | 10 ++- src/StringUtils.cc | 24 +++++++ src/StringUtils_TEST.cc | 53 ++++++++++++++ src/SystemPaths_TEST.cc | 97 +++++++++----------------- 6 files changed, 144 insertions(+), 75 deletions(-) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 24b3db132..570041193 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,17 +1,18 @@ cmake_minimum_required(VERSION 2.8 FATAL_ERROR) # Find the ignition-common library -find_package(ignition-common4 QUIET REQUIRED COMPONENTS events profiler) +set(IGN_COMMON_VER 4) +find_package(ignition-common${IGN_COMMON_VER} QUIET REQUIRED COMPONENTS events profiler) add_executable(assert_example assert_example.cc) -target_link_libraries(assert_example ignition-common4::core) +target_link_libraries(assert_example ignition-common${IGN_COMMON_VER}::core) add_executable(console_example console.cc) -target_link_libraries(console_example ignition-common4::core) +target_link_libraries(console_example ignition-common${IGN_COMMON_VER}::core) add_executable(events_example events.cc) -target_link_libraries(events_example ignition-common4::events) +target_link_libraries(events_example ignition-common${IGN_COMMON_VER}::events) add_executable(profiler_example profiler.cc) -target_link_libraries(profiler_example ignition-common4::profiler) +target_link_libraries(profiler_example ignition-common${IGN_COMMON_VER}::profiler) target_compile_definitions(profiler_example PUBLIC "IGN_PROFILER_ENABLE=1") diff --git a/include/ignition/common/StringUtils.hh b/include/ignition/common/StringUtils.hh index 9836e40ff..6075fc935 100644 --- a/include/ignition/common/StringUtils.hh +++ b/include/ignition/common/StringUtils.hh @@ -33,6 +33,30 @@ namespace ignition std::vector<std::string> IGNITION_COMMON_VISIBLE Split( const std::string &_orig, char _delim); + /// \brief Join a sequence of strings with a delimiter + /// + /// Note that this will skip any empty entries in the vector, + /// and will also not prepend or append the delimiter to the + /// final output string + /// + /// \param[in] _orig The input sequence of strings + /// \param[in] _delim a string delimiter to join the string with + /// \returns a single string composed of strings joined with the delimiter + std::string IGNITION_COMMON_VISIBLE Join( + const std::vector<std::string> &_orig, const std::string &_delim); + + /// \brief Join a sequence of strings with a delimiter + /// + /// Note that this will skip any empty entries in the vector, + /// and will also not prepend or append the delimiter to the + /// final output string + /// + /// \param[in] _orig The input sequence of strings + /// \param[in] _delim a character to join the string with + /// \returns a single string composed of strings joined with the delimiter + std::string IGNITION_COMMON_VISIBLE Join( + const std::vector<std::string> &_orig, char _delim); + /// \brief return true if string starts with another string /// \param[in] _s1 the string to check /// \param[in] _s2 the possible prefix diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index 031ef52c2..917b7a566 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -25,6 +25,8 @@ #include <sys/types.h> #include <unistd.h> +#include "ignition/common/Util.hh" + // The symlink tests should always work on UNIX systems #define BUILD_SYMLINK_TESTS @@ -32,12 +34,8 @@ bool create_and_switch_to_temp_dir(std::string &_new_temp_path) { std::string tmppath; - const char *tmp = getenv("TMPDIR"); - if (tmp) - { - tmppath = std::string(tmp); - } - else + + if (!ignition::common::env("TMPDIR", tmppath)) { tmppath = std::string("/tmp"); } diff --git a/src/StringUtils.cc b/src/StringUtils.cc index f6c5434e0..ebd5562ba 100644 --- a/src/StringUtils.cc +++ b/src/StringUtils.cc @@ -38,6 +38,30 @@ namespace ignition return pieces; } + ////////////////////////////////////////////////// + std::string Join(const std::vector<std::string> &_orig, + const std::string &_delim) + { + std::string ret = ""; + for (size_t ii = 0; ii < _orig.size(); ++ii) + { + if (_orig[ii].empty()) + continue; + + ret += _orig[ii]; + if (ii < _orig.size() - 1) + { + ret += _delim; + } + } + return ret; + } + ////////////////////////////////////////////////// + std::string Join(const std::vector<std::string> &_orig, char _delim) + { + return Join(_orig, std::string(1, _delim)); + } + ////////////////////////////////////////////////// bool StartsWith(const std::string &_s1, const std::string &_s2) { diff --git a/src/StringUtils_TEST.cc b/src/StringUtils_TEST.cc index b8aedf993..5c7b31b48 100644 --- a/src/StringUtils_TEST.cc +++ b/src/StringUtils_TEST.cc @@ -70,6 +70,59 @@ TEST(StringUtils, SplitOneDelimiterAtEnd) EXPECT_EQ("", pieces[1]); } +///////////////////////////////////////////////// +TEST(Join, Simple) +{ + { + std::string delim = " "; + auto pieces = std::vector<std::string>{"Hello", "World"}; + auto joined = common::Join(pieces, delim); + EXPECT_EQ("Hello World", joined); + } + + { + std::string delim = "x"; + auto pieces = std::vector<std::string>{"Hello", "World"}; + auto joined = common::Join(pieces, delim); + EXPECT_EQ("HelloxWorld", joined); + } + + { + std::string delim = "x"; + auto pieces = std::vector<std::string>{ + "foo", "bar", "baz", "bing"}; + auto joined = common::Join(pieces, delim); + EXPECT_EQ("fooxbarxbazxbing", joined); + } +} + +///////////////////////////////////////////////// +TEST(Join, EmptyDelim) +{ + std::string delim = ""; + auto pieces = std::vector<std::string>{"Hello", "World"}; + auto joined = common::Join(pieces, delim); + EXPECT_EQ("HelloWorld", joined); +} + +///////////////////////////////////////////////// +TEST(Join, EmptyPart) +{ + std::string delim = " "; + auto pieces = std::vector<std::string>{"Hello", "", "World"}; + auto joined = common::Join(pieces, delim); + EXPECT_EQ("Hello World", joined); +} + +///////////////////////////////////////////////// +TEST(Join, EmptyParts) +{ + std::string delim = "x"; + auto pieces = std::vector<std::string>{}; + auto joined = common::Join(pieces, delim); + EXPECT_EQ("", joined); +} + ///////////////////////////////////////////////// TEST(StartsWith, NotInString) { diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index d540595a4..f695c0750 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -24,6 +24,7 @@ #include <cstdio> #include "ignition/common/Util.hh" +#include "ignition/common/StringUtils.hh" #include "ignition/common/SystemPaths.hh" #ifdef _WIN32 @@ -32,24 +33,19 @@ using namespace ignition; +const char kPluginPath[] = "IGN_PLUGIN_PATH"; +const char kFilePath[] = "IGN_FILE_PATH"; + class SystemPathsFixture : public ::testing::Test { // Documentation inherited public: virtual void SetUp() { - this->backupPluginPath = "IGN_PLUGIN_PATH="; - - if (getenv("IGN_PLUGIN_PATH")) - this->backupPluginPath += getenv("IGN_PLUGIN_PATH"); - - putenv(const_cast<char*>("IGN_PLUGIN_PATH=")); - - this->backupFilePath = "IGN_FILE_PATH="; + common::env(kPluginPath, this->backupPluginPath); + common::unsetenv(kPluginPath); - if (getenv("IGN_FILE_PATH")) - this->backupFilePath += getenv("IGN_FILE_PATH"); - - putenv(const_cast<char*>("IGN_FILE_PATH=")); + common::env(kFilePath, this->backupFilePath); + common::unsetenv(kFilePath); #ifdef _WIN32 this->filesystemRoot = "C:\\"; @@ -61,8 +57,8 @@ class SystemPathsFixture : public ::testing::Test // Documentation inherited public: virtual void TearDown() { - putenv(const_cast<char*>(this->backupPluginPath.c_str())); - putenv(const_cast<char*>(this->backupFilePath.c_str())); + common::setenv(kPluginPath, this->backupPluginPath); + common::setenv(kFilePath, this->backupFilePath); } /// \brief Backup of plugin paths to be restored after the test @@ -75,21 +71,18 @@ class SystemPathsFixture : public ::testing::Test public: std::string filesystemRoot; }; +std::string SystemPathsJoin(const std::vector<std::string> &_paths) +{ + return common::Join(_paths, common::SystemPaths::Delimiter()); +} + ///////////////////////////////////////////////// TEST_F(SystemPathsFixture, SystemPaths) { - common::SystemPaths paths; - std::string env_str("IGN_PLUGIN_PATH=/tmp/plugin"); - env_str += ignition::common::SystemPaths::Delimiter(); - env_str += "/test/plugin/now"; - - // The char* passed to putenv will continue to be stored after the lifetime - // of this function, so we should not pass it a pointer which has an automatic - // lifetime. - static char env[1024]; - snprintf(env, sizeof(env), "%s", env_str.c_str()); - putenv(env); + common::setenv(kPluginPath, + SystemPathsJoin({"/tmp/plugin", "/test/plugin/now"})); + common::SystemPaths paths; const std::list<std::string> pathList3 = paths.PluginPaths(); EXPECT_EQ(static_cast<unsigned int>(2), pathList3.size()); EXPECT_STREQ("/tmp/plugin/", pathList3.front().c_str()); @@ -103,19 +96,12 @@ TEST_F(SystemPathsFixture, SystemPaths) ///////////////////////////////////////////////// TEST_F(SystemPathsFixture, FileSystemPaths) { - std::string env_str("IGN_FILE_PATH=/tmp/file"); - env_str += ignition::common::SystemPaths::Delimiter(); - env_str += "/test/file/now"; - - // The char* passed to putenv will continue to be stored after the lifetime - // of this function, so we should not pass it a pointer which has an automatic - // lifetime. - static char env[1024]; - snprintf(env, sizeof(env), "%s", env_str.c_str()); - putenv(env); + std::vector<std::string> filePaths {"/tmp/file", + "/test/file/now"}; + common::setenv(kFilePath, SystemPathsJoin(filePaths)); common::SystemPaths paths; - EXPECT_EQ("IGN_FILE_PATH", paths.FilePathEnv()); + EXPECT_EQ(kFilePath, paths.FilePathEnv()); const std::list<std::string> pathList3 = paths.FilePaths(); EXPECT_EQ(static_cast<unsigned int>(2), pathList3.size()); EXPECT_STREQ("/tmp/file/", pathList3.front().c_str()); @@ -136,12 +122,10 @@ TEST_F(SystemPathsFixture, FileSystemPaths) EXPECT_EQ("", paths.FindFile("no_such_file")); EXPECT_EQ("", paths.FindFile("test_f1")); - env_str += ignition::common::SystemPaths::Delimiter(); - env_str += "test_dir1"; - snprintf(env, sizeof(env), "%s", env_str.c_str()); - putenv(env); - paths.SetFilePathEnv("IGN_FILE_PATH"); + filePaths.push_back("test_dir1"); + common::setenv(kFilePath, SystemPathsJoin(filePaths)); + paths.SetFilePathEnv(kFilePath); EXPECT_EQ(file1, paths.FindFile("test_f1")) << paths.FindFile("test_f1"); EXPECT_EQ(file1, paths.FindFile("model://test_f1")); } @@ -285,19 +269,14 @@ TEST_F(SystemPathsFixture, FindFileURI) EXPECT_EQ(file2, sp.FindFileURI("osrf://test_f2")); // URI + env var - static char env[1024]; - snprintf(env, sizeof(env), "%s", ("IGN_FILE_PATH=" + dir1).c_str()); - putenv(env); - - sp.SetFilePathEnv("IGN_FILE_PATH"); - EXPECT_EQ("IGN_FILE_PATH", sp.FilePathEnv()); + common::setenv(kFilePath, dir1); + sp.SetFilePathEnv(kFilePath); + EXPECT_EQ(kFilePath, sp.FilePathEnv()); EXPECT_EQ(file1, sp.FindFileURI("anything://test_f1")); EXPECT_NE(file2, sp.FindFileURI("anything://test_f2")); std::string newEnv{"IGN_NEW_FILE_PATH"}; - snprintf(env, sizeof(env), "%s", (newEnv + "=" + dir2).c_str()); - putenv(env); - + common::setenv(newEnv, dir2); sp.SetFilePathEnv(newEnv); EXPECT_EQ(newEnv, sp.FilePathEnv()); EXPECT_NE(file1, sp.FindFileURI("anything://test_f1")); @@ -422,20 +401,10 @@ TEST_F(SystemPathsFixture, NormalizeDirectoryPath) ////////////////////////////////////////////////// TEST_F(SystemPathsFixture, PathsFromEnv) { - std::string env_str = "IGN_PLUGIN_PATH=/tmp/plugin"; - env_str += ignition::common::SystemPaths::Delimiter(); - env_str += "/test/plugin/now/"; - env_str += ignition::common::SystemPaths::Delimiter(); - env_str += "/tmp/plugin"; - - // The char* passed to putenv will continue to be stored after the lifetime - // of this function, so we should not pass it a pointer which has an automatic - // lifetime. - static char env[1024]; - snprintf(env, sizeof(env), "%s", env_str.c_str()); - putenv(env); - - auto paths = ignition::common::SystemPaths::PathsFromEnv("IGN_PLUGIN_PATH"); + common::setenv(kPluginPath, + SystemPathsJoin({"/tmp/plugin", "/test/plugin/now/", "/tmp/plugin"})); + + auto paths = ignition::common::SystemPaths::PathsFromEnv(kPluginPath); EXPECT_EQ(paths.size(), 2u); From 466164e672eb7d1faf4c07de215b4e69b73382cf Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 22 Oct 2020 12:20:07 -0500 Subject: [PATCH 068/219] =?UTF-8?q?=E2=AC=86=EF=B8=8F=203.7.0=20(#108)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Carroll <michael@openrobotics.org> --- Changelog.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Changelog.md b/Changelog.md index 8c77f0341..1245dc500 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,33 @@ ## Ignition Common 3.X.X +## Ignition Common 3.7.0 (2020-10-21) + +1. Miscellaneous Cleanups + * Feature: Join function for combining strings with a delimiter + * [Pull Request 107](https://github.com/ignitionrobotics/ign-common/pull/107) + +1. Improve fork experience + * [Pull Request 103](https://github.com/ignitionrobotics/ign-common/pull/103) + +1. Add Console example + * [Pull Request 106](https://github.com/ignitionrobotics/ign-common/pull/106) + +1. Support fuel URLs for textures + * [Pull Request 102](https://github.com/ignitionrobotics/ign-common/pull/102) + +1. Fix loading dae file with hierarchical node that does not have a name + * [Pull Request 101](https://github.com/ignitionrobotics/ign-common/pull/101) + +1. Fix more Animation memory leaks + * [Pull Request 98](https://github.com/ignitionrobotics/ign-common/pull/98) + +1. Fix env behavior to return true on empty vars + * Feature: Add setenv for setting environment variables + * Feature: Add unsetenv for clearing environment variables + * Feature: Add alternative env implementation that respects empty variables + * [Pull Request 97](https://github.com/ignitionrobotics/ign-common/pull/97) + ## Ignition Common 3.6.1 (2020-09-16) 1. Fix hierarchical submesh processing in the ColladaLoader. From 68d944549225eedd2a140978d1d712f5be66103e Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Mon, 19 Oct 2020 13:42:15 -0500 Subject: [PATCH 069/219] Fix API differences between URI in 3 and 4 Signed-off-by: Michael Carroll <michael@openrobotics.org> --- src/SystemPaths.cc | 1 - src/SystemPaths_TEST.cc | 16 ++++++++-------- src/Util_TEST.cc | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/SystemPaths.cc b/src/SystemPaths.cc index 725cc7a25..81ced0ff2 100644 --- a/src/SystemPaths.cc +++ b/src/SystemPaths.cc @@ -313,7 +313,6 @@ std::string SystemPaths::FindFileURI(const std::string &_uri) const } const auto uri = ignition::common::URI(_uri); - std::cout << "Debug URI[" << uri.Str() << "]\n"; return this->FindFileURI(uri); } diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index f695c0750..f87cc8f5d 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -127,7 +127,7 @@ TEST_F(SystemPathsFixture, FileSystemPaths) common::setenv(kFilePath, SystemPathsJoin(filePaths)); paths.SetFilePathEnv(kFilePath); EXPECT_EQ(file1, paths.FindFile("test_f1")) << paths.FindFile("test_f1"); - EXPECT_EQ(file1, paths.FindFile("model://test_f1")); + EXPECT_EQ(file1, paths.FindFile("model:test_f1")); } ///////////////////////////////////////////////// @@ -243,7 +243,7 @@ TEST_F(SystemPathsFixture, FindFileURI) }; EXPECT_EQ("", sp.FindFileURI("robot://test_f1")); - EXPECT_EQ("", sp.FindFileURI("osrf://test_f2")); + EXPECT_EQ("", sp.FindFileURI("osrf:test_f2")); // We still want to test the deprecated function until it is removed. #ifndef _WIN32 @@ -256,7 +256,7 @@ TEST_F(SystemPathsFixture, FindFileURI) #endif EXPECT_EQ(file1, sp.FindFileURI("robot://test_f1")); - EXPECT_EQ("", sp.FindFileURI("osrf://test_f2")); + EXPECT_EQ("", sp.FindFileURI("osrf:test_f2")); sp.AddFindFileURICallback(osrfCb); EXPECT_EQ(file1, sp.FindFileURI("robot://test_f1")); @@ -266,21 +266,21 @@ TEST_F(SystemPathsFixture, FindFileURI) // second handler for the same protocol is available sp.AddFindFileURICallback(robot2Cb); EXPECT_EQ(file1, sp.FindFileURI("robot://test_f1")); - EXPECT_EQ(file2, sp.FindFileURI("osrf://test_f2")); + EXPECT_EQ(file2, sp.FindFileURI("osrf:test_f2")); // URI + env var common::setenv(kFilePath, dir1); sp.SetFilePathEnv(kFilePath); EXPECT_EQ(kFilePath, sp.FilePathEnv()); - EXPECT_EQ(file1, sp.FindFileURI("anything://test_f1")); - EXPECT_NE(file2, sp.FindFileURI("anything://test_f2")); + EXPECT_EQ(file1, sp.FindFileURI("anything:test_f1")); + EXPECT_NE(file2, sp.FindFileURI("anything:test_f2")); std::string newEnv{"IGN_NEW_FILE_PATH"}; common::setenv(newEnv, dir2); sp.SetFilePathEnv(newEnv); EXPECT_EQ(newEnv, sp.FilePathEnv()); - EXPECT_NE(file1, sp.FindFileURI("anything://test_f1")); - EXPECT_EQ(file2, sp.FindFileURI("anything://test_f2")); + EXPECT_NE(file1, sp.FindFileURI("anything:test_f1")); + EXPECT_EQ(file2, sp.FindFileURI("anything:test_f2")); } ////////////////////////////////////////////////// diff --git a/src/Util_TEST.cc b/src/Util_TEST.cc index 2b41184e8..6b827756f 100644 --- a/src/Util_TEST.cc +++ b/src/Util_TEST.cc @@ -298,7 +298,7 @@ TEST(Util_TEST, findFile) "test_f1"), true)); // Relative prefixed by file:// - EXPECT_EQ(file1, ignition::common::findFile("file://test_dir1/test_f1")); + EXPECT_EQ(file1, ignition::common::findFile("file:test_dir1/test_f1")); // Custom callback #ifndef _WIN32 From 79c408b44a5281e38a47c9a024dee964761ac0bc Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Wed, 23 Dec 2020 15:37:19 -0600 Subject: [PATCH 070/219] Fix URI test Signed-off-by: Michael Carroll <michael@openrobotics.org> --- src/URI_TEST.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/URI_TEST.cc b/src/URI_TEST.cc index 83a4d990a..a2a87983c 100644 --- a/src/URI_TEST.cc +++ b/src/URI_TEST.cc @@ -497,7 +497,7 @@ TEST(URITEST, Path) EXPECT_TRUE(uri.Path().IsAbsolute()); uri.Parse("file://C:/Users"); - EXPECT_EQ(uri.Str(), "file://C:/Users"); + EXPECT_EQ(uri.Str(), "file:C:/Users"); EXPECT_TRUE(uri.Path().IsAbsolute()); } From df047cb8ed6c13343c2f2ed551c0748e4f5b86e9 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Fri, 19 Feb 2021 16:15:59 -0800 Subject: [PATCH 071/219] Restore support for model:// URIs (#172) * Restore support for model:// URIs * Implement no-authority mode * tweaks * Use std::optional * optional usage * no value vs empty Signed-off-by: Louise Poubel <louise@openrobotics.org> --- Migration.md | 4 +- include/ignition/common/SystemPaths.hh | 10 +- include/ignition/common/URI.hh | 51 ++++- src/SystemPaths.cc | 44 +++- src/SystemPaths_TEST.cc | 24 +- src/URI.cc | 121 +++++++--- src/URI_TEST.cc | 291 ++++++++++++++++++++++--- 7 files changed, 441 insertions(+), 104 deletions(-) diff --git a/Migration.md b/Migration.md index b13058da3..69f1bb4bb 100644 --- a/Migration.md +++ b/Migration.md @@ -12,8 +12,8 @@ release will remove the deprecated code. 1. Corrected `BAYER_RGGR8` to `BAYER_BGGR8` in `PixelFormatName` and `PixelFormatType` located in `graphics/include/ignition/common/Image.hh`. -1. URI parsing has updated to follow the specification more closely. Changes - include: +1. URI parsing has updated to follow the specification more closely when + `URI::Authority` is set. Changes include: * An empty URI Path is valid. * Double forward slashes, `//`, are valid in a URI Path. * A URI Query does not require a `key=value` format. For example diff --git a/include/ignition/common/SystemPaths.hh b/include/ignition/common/SystemPaths.hh index e88f482e7..ddd0fcc17 100644 --- a/include/ignition/common/SystemPaths.hh +++ b/include/ignition/common/SystemPaths.hh @@ -71,9 +71,13 @@ namespace ignition /// \param[in] _uri the uniform resource identifier /// \return Returns full path name to file with platform-specific /// directory separators, or an empty string if URI couldn't be found. + /// \sa FindFileURI(const ignition::common::URI &_uri) public: std::string FindFileURI(const std::string &_uri) const; - /// \brief Find a file or path using a URI + /// \brief Find a file or path using a URI. + /// If URI is not an absolute path, the URI's path will be matched against + /// all added paths and environment variables (including URI authority as + /// needed). /// \param[in] _uri the uniform resource identifier /// \return Returns full path name to file with platform-specific /// directory separators, or an empty string if URI couldn't be found. @@ -87,10 +91,12 @@ namespace ignition /// \param[in] _filename Name of the file to find. /// \param[in] _searchLocalPath True to search in the current working /// directory. + /// \param[in] _verbose False to omit console messages. /// \return Returns full path name to file with platform-specific /// directory separators, or empty string on error. public: std::string FindFile(const std::string &_filename, - const bool _searchLocalPath = true) const; + const bool _searchLocalPath = true, + const bool _verbose = true) const; /// \brief Find a shared library by name in the plugin paths /// diff --git a/include/ignition/common/URI.hh b/include/ignition/common/URI.hh index e7371e31f..f4dba47b4 100644 --- a/include/ignition/common/URI.hh +++ b/include/ignition/common/URI.hh @@ -52,6 +52,13 @@ namespace ignition /// authority. For example, `file://abs/path` will result in a host /// value of `abs` and the URI path will be `/path`. You can specify /// a relative path using `file:abs/path`. + /// + /// URIs that are set not to have an authority + /// (i.e. `Authority() == false`) preserve the legacy behaviour, which + /// is: + /// * `file:/abs/path` has the path `/abs/path` + /// * `file://abs/path` has the path `abs/path` + /// * `file:///abs/path` has the path `/abs/path` class IGNITION_COMMON_VISIBLE URIAuthority { /// \brief Constructor @@ -148,7 +155,15 @@ namespace ignition IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING }; - /// \brief The path component of a URI + /// \brief A URI path contains a sequence of segments separated by `/`. + /// The path may be empty in a valid URI. + /// When an authority is present, the path must start with a `/`. + /// + /// In the following URI: + /// + /// scheme://authority.com/seg1/seg2?query + /// + /// The path is `/seg1/seg2` class IGNITION_COMMON_VISIBLE URIPath { /// \brief Constructor @@ -203,6 +218,16 @@ namespace ignition /// and a Windows drive specifier (e.g. 'C:') is pushed to it. public: void PushBack(const std::string &_part); + /// \brief Remove the part that's in the front of this path and return it. + /// \return Popped part. + /// Returns empty string if path doesn't have parts to be popped. + public: std::string PopFront(); + + /// \brief Remove the part that's in the back of this path and return it. + /// \return Popped part. + /// Returns empty string if path doesn't have parts to be popped. + public: std::string PopBack(); + /// \brief Compound assignment operator. /// \param[in] _part A new path to append. /// \return A new Path that consists of "this / _part" @@ -383,9 +408,12 @@ namespace ignition /// \brief Default constructor public: URI(); - /// \brief Construct a URI object from a string. - /// \param[in] _str A string. - public: explicit URI(const std::string &_str); + /// \brief Default constructor + /// \param[in] _hasAuthority False if the URI doesn't have an authority. + /// Defaults to false. If true, an authority will be created and will be + /// empty. + public: explicit URI(const std::string &_str, + bool _hasAuthority = false); /// \brief Copy constructor /// \param[in] _uri Another URI. @@ -412,13 +440,16 @@ namespace ignition /// \param[in] _scheme New scheme. public: void SetScheme(const std::string &_scheme); - /// \brief Get a mutable version of the URI's authority. + /// \brief Set the URI's authority. /// \return The authority - public: URIAuthority &Authority(); + public: void SetAuthority(const URIAuthority &_authority); - /// \brief Get a const reference of the URI's authority. + /// \brief Get a copy of the URI's authority. + /// If the authority has no value (as opposed to being empty), it means + /// that it isn't present, and the authority value may be contained in + /// the path instead. /// \return The authority - public: const URIAuthority &Authority() const; + public: std::optional<URIAuthority> Authority() const; /// \brief Get a mutable version of the path component /// \return A reference to the path @@ -464,6 +495,10 @@ namespace ignition public: static bool Valid(const std::string &_str); /// \brief Parse a string as URI. + /// If there's no authority (i.e. `Authority().has_value() == false`), + /// authority information will be contained within the path. + /// In order to populate the `Authority`, either set `hasAuthority` to + /// true on the constructor or set an empty authority before parsing. /// \param[in] _str A string. /// \return True if the string can be parsed as a URI. public: bool Parse(const std::string &_str); diff --git a/src/SystemPaths.cc b/src/SystemPaths.cc index 6c8c8cc09..ec1bf7c0e 100644 --- a/src/SystemPaths.cc +++ b/src/SystemPaths.cc @@ -313,15 +313,30 @@ std::string SystemPaths::FindFileURI(const std::string &_uri) const std::string SystemPaths::FindFileURI(const ignition::common::URI &_uri) const { std::string prefix = _uri.Scheme(); - std::string suffix = _uri.Path().Str() + _uri.Query().Str(); - std::string filename; - - if (prefix == "file") + std::string suffix; + if (_uri.Authority()) { - // First try to find the file on the current system - filename = this->FindFile(ignition::common::copyFromUnixPath(suffix)); + // Strip // + suffix = _uri.Authority()->Str().substr(2) + _uri.Path().Str(); } - else if (this->dataPtr->findFileURICB) + else + { + // Strip / + if (_uri.Path().IsAbsolute() && prefix != "file") + suffix += _uri.Path().Str().substr(1); + else + suffix += _uri.Path().Str(); + } + suffix += _uri.Query().Str(); + + std::string filename; + + // First try to find the file on the current system + filename = this->FindFile(ignition::common::copyFromUnixPath(suffix), + true, false); + + // Try URI callback + if (filename.empty() && this->dataPtr->findFileURICB) { filename = this->dataPtr->findFileURICB(_uri.Str()); } @@ -371,7 +386,8 @@ std::string SystemPaths::FindFileURI(const ignition::common::URI &_uri) const ////////////////////////////////////////////////// std::string SystemPaths::FindFile(const std::string &_filename, - const bool _searchLocalPath) const + const bool _searchLocalPath, + const bool _verbose) const { std::string path; std::string filename = _filename; @@ -441,14 +457,20 @@ std::string SystemPaths::FindFile(const std::string &_filename, if (path.empty()) { - ignerr << "Could not resolve file [" << _filename << "]" << std::endl; + if (_verbose) + { + ignerr << "Could not resolve file [" << _filename << "]" << std::endl; + } return std::string(); } if (!exists(path)) { - ignerr << "File [" << _filename << "] resolved to path [" << path << - "] but the path does not exist" << std::endl; + if (_verbose) + { + ignerr << "File [" << _filename << "] resolved to path [" << path << + "] but the path does not exist" << std::endl; + } return std::string(); } diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index d22dd4c7f..f20878fb0 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -126,8 +126,8 @@ TEST_F(SystemPathsFixture, FileSystemPaths) filePaths.push_back("test_dir1"); common::setenv(kFilePath, SystemPathsJoin(filePaths)); paths.SetFilePathEnv(kFilePath); - EXPECT_EQ(file1, paths.FindFile("test_f1")) << paths.FindFile("test_f1"); - EXPECT_EQ(file1, paths.FindFile("model:test_f1")); + EXPECT_EQ(file1, paths.FindFile("test_f1")); + EXPECT_EQ(file1, paths.FindFile("model://test_f1")); } ///////////////////////////////////////////////// @@ -234,7 +234,8 @@ TEST_F(SystemPathsFixture, FindFileURI) auto osrfCb = [dir2](const ignition::common::URI &_uri) { return _uri.Scheme() == "osrf" ? - ignition::common::joinPaths(dir2, _uri.Path().Str()) : ""; + ignition::common::joinPaths(dir2, ignition::common::copyFromUnixPath( + _uri.Path().Str())) : ""; }; auto robot2Cb = [dir2](const ignition::common::URI &_uri) { @@ -243,7 +244,7 @@ TEST_F(SystemPathsFixture, FindFileURI) }; EXPECT_EQ("", sp.FindFileURI("robot://test_f1")); - EXPECT_EQ("", sp.FindFileURI("osrf:test_f2")); + EXPECT_EQ("", sp.FindFileURI("osrf://test_f2")); // We still want to test the deprecated function until it is removed. #ifndef _WIN32 @@ -256,31 +257,31 @@ TEST_F(SystemPathsFixture, FindFileURI) #endif EXPECT_EQ(file1, sp.FindFileURI("robot://test_f1")); - EXPECT_EQ("", sp.FindFileURI("osrf:test_f2")); + EXPECT_EQ("", sp.FindFileURI("osrf://test_f2")); sp.AddFindFileURICallback(osrfCb); EXPECT_EQ(file1, sp.FindFileURI("robot://test_f1")); - EXPECT_EQ(file2, sp.FindFileURI("osrf:test_f2")); + EXPECT_EQ(file2, sp.FindFileURI("osrf://test_f2")); // Test that th CB from SetFindFileURICallback is called first even when a // second handler for the same protocol is available sp.AddFindFileURICallback(robot2Cb); EXPECT_EQ(file1, sp.FindFileURI("robot://test_f1")); - EXPECT_EQ(file2, sp.FindFileURI("osrf:test_f2")); + EXPECT_EQ(file2, sp.FindFileURI("osrf://test_f2")); // URI + env var common::setenv(kFilePath, dir1); sp.SetFilePathEnv(kFilePath); EXPECT_EQ(kFilePath, sp.FilePathEnv()); - EXPECT_EQ(file1, sp.FindFileURI("anything:test_f1")); - EXPECT_NE(file2, sp.FindFileURI("anything:test_f2")); + EXPECT_EQ(file1, sp.FindFileURI("anything://test_f1")); + EXPECT_NE(file2, sp.FindFileURI("anything://test_f2")); std::string newEnv{"IGN_NEW_FILE_PATH"}; common::setenv(newEnv, dir2); sp.SetFilePathEnv(newEnv); EXPECT_EQ(newEnv, sp.FilePathEnv()); - EXPECT_NE(file1, sp.FindFileURI("anything:test_f1")); - EXPECT_EQ(file2, sp.FindFileURI("anything:test_f2")); + EXPECT_NE(file1, sp.FindFileURI("anything://test_f1")); + EXPECT_EQ(file2, sp.FindFileURI("anything://test_f2")); } ////////////////////////////////////////////////// @@ -317,6 +318,7 @@ TEST_F(SystemPathsFixture, FindFile) EXPECT_EQ("", sp.FindFile(this->filesystemRoot + "no_such_file")); EXPECT_EQ("", sp.FindFile("no_such_file")); EXPECT_EQ(file1, sp.FindFile(common::joinPaths("test_dir1", "test_f1"))); + EXPECT_EQ(file1, sp.FindFile("file:test_dir1/test_f1")); // Existing absolute paths diff --git a/src/URI.cc b/src/URI.cc index 30606d733..3eac8d57b 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -92,7 +92,7 @@ class ignition::common::URIPrivate public: std::string scheme; /// \brief Authority component. - public: URIAuthority authority; + public: std::optional<URIAuthority> authority; /// \brief Path component. public: URIPath path; @@ -194,7 +194,7 @@ std::string URIAuthority::Str() const if (!this->dataPtr->host.empty() || (this->dataPtr->emptyHostValid && this->dataPtr->hasEmptyHost)) { - std::string result = "//"; + std::string result = kAuthDelim; result += this->dataPtr->userInfo.empty() ? "" : this->dataPtr->userInfo + "@"; result += this->dataPtr->host; @@ -232,7 +232,7 @@ bool URIAuthority::Valid(const std::string &_str, bool _emptyHostValid) return true; // The authority must start with two forward slashes - if (str.find("//") != 0) + if (str.find(kAuthDelim) != 0) return false; auto userInfoIndex = str.find("@", 2); @@ -333,7 +333,7 @@ bool URIAuthority::Parse(const std::string &_str, bool _emptyHostValid) this->dataPtr->emptyHostValid = _emptyHostValid; - if (_str.empty() || _str == "//") + if (_str.empty() || _str == kAuthDelim) { this->dataPtr->hasEmptyHost = true; return true; @@ -513,6 +513,28 @@ void URIPath::PushBack(const std::string &_part) this->dataPtr->path.push_back(part); } +///////////////////////////////////////////////// +std::string URIPath::PopFront() +{ + if (this->dataPtr->path.size() == 0) + return std::string(); + + auto result = this->dataPtr->path.front(); + this->dataPtr->path.pop_front(); + return result; +} + +///////////////////////////////////////////////// +std::string URIPath::PopBack() +{ + if (this->dataPtr->path.size() == 0) + return std::string(); + + auto result = this->dataPtr->path.back(); + this->dataPtr->path.pop_back(); + return result; +} + ///////////////////////////////////////////////// const URIPath URIPath::operator/(const std::string &_part) const { @@ -572,6 +594,7 @@ void URIPath::Clear() { this->dataPtr->path.clear(); this->dataPtr->isAbsolute = false; + this->dataPtr->trailingSlash = false; } ///////////////////////////////////////////////// @@ -906,9 +929,11 @@ URI::URI() } ///////////////////////////////////////////////// -URI::URI(const std::string &_str) +URI::URI(const std::string &_str, bool _hasAuthority) : URI() { + if (_hasAuthority) + this->dataPtr->authority.emplace(URIAuthority()); this->Parse(_str); } @@ -928,10 +953,22 @@ URI::~URI() std::string URI::Str() const { std::string result = - this->dataPtr->scheme.empty() ? "" : this->dataPtr->scheme + ":"; - result += this->dataPtr->authority.Str() + - this->dataPtr->path.Str() + - this->dataPtr->query.Str() + + this->dataPtr->scheme.empty() ? "" : this->dataPtr->scheme + kSchemeDelim; + + if (this->dataPtr->authority) + { + result += this->dataPtr->authority->Str() + this->dataPtr->path.Str(); + } + else + { + if (!this->dataPtr->scheme.empty()) + { + result += kAuthDelim; + } + result += this->dataPtr->path.Str(); + } + + result += this->dataPtr->query.Str() + this->dataPtr->fragment.Str(); return result; } @@ -949,13 +986,13 @@ void URI::SetScheme(const std::string &_scheme) } ///////////////////////////////////////////////// -URIAuthority &URI::Authority() +void URI::SetAuthority(const URIAuthority &_authority) { - return this->dataPtr->authority; + this->dataPtr->authority.emplace(_authority); } ///////////////////////////////////////////////// -const URIAuthority &URI::Authority() const +std::optional <URIAuthority> URI::Authority() const { return this->dataPtr->authority; } @@ -1000,7 +1037,9 @@ const URIFragment &URI::Fragment() const void URI::Clear() { this->dataPtr->scheme.clear(); - this->dataPtr->authority.Clear(); + // Set to empty instead of removing value + if (this->dataPtr->authority) + this->dataPtr->authority = URIAuthority(); this->dataPtr->path.Clear(); this->dataPtr->query.Clear(); this->dataPtr->fragment.Clear(); @@ -1140,31 +1179,41 @@ bool URI::Parse(const std::string &_str) emptyHostValid = true; bool authorityPresent = false; - - // Get the authority delimiter position, if one is present - size_t authDelimPos = str.find(kAuthDelim); - if (authDelimPos != std::string::npos && authDelimPos == 0) + if (this->dataPtr->authority) { - authorityPresent = true; - size_t authEndPos = str.find_first_of("/?#", - authDelimPos + std::strlen(kAuthDelim)); - - // This could be a windows file path of the form file://D:/path/to/file - // In this case, the authority is not present. - if (str[authEndPos-1] == ':' && str[authEndPos] == '/') - { - str.erase(0, std::strlen(kAuthDelim)); - authorityPresent = false; - } - else if (localScheme != "file" && authEndPos == authDelimPos+2) + // Get the authority delimiter position, if one is present + size_t authDelimPos = str.find(kAuthDelim); + if (authDelimPos != std::string::npos && authDelimPos == 0) { - ignerr << "A host is manadatory when using a scheme other than file\n"; - return false; + authorityPresent = true; + size_t authEndPos = str.find_first_of("/?#", + authDelimPos + std::strlen(kAuthDelim)); + + // This could be a windows file path of the form file://D:/path/to/file + // In this case, the authority is not present. + if (str[authEndPos-1] == ':' && str[authEndPos] == '/') + { + str.erase(0, std::strlen(kAuthDelim)); + authorityPresent = false; + } + else if (localScheme != "file" && authEndPos == authDelimPos+2) + { + ignerr << "A host is manadatory when using a scheme other than file\n"; + return false; + } + else + { + localAuthority = str.substr(authDelimPos, authEndPos); + str.erase(0, authEndPos); + } } - else + } + else + { + // Relative paths: remove `//` prefix if there are exactly 2 + if (str.find("//") == 0 && str.find("///") == std::string::npos) { - localAuthority = str.substr(authDelimPos, authEndPos); - str.erase(0, authEndPos); + str = str.substr(2); } } @@ -1192,9 +1241,9 @@ bool URI::Parse(const std::string &_str) this->Clear(); this->SetScheme(localScheme); - if (!emptyHostValid || authorityPresent) + if (this->dataPtr->authority && (!emptyHostValid || authorityPresent)) { - if (!this->dataPtr->authority.Parse(localAuthority, emptyHostValid)) + if (!this->dataPtr->authority->Parse(localAuthority, emptyHostValid)) return false; } diff --git a/src/URI_TEST.cc b/src/URI_TEST.cc index a2a87983c..b4c76ff1d 100644 --- a/src/URI_TEST.cc +++ b/src/URI_TEST.cc @@ -16,6 +16,7 @@ */ #include <gtest/gtest.h> +#include "ignition/common/Console.hh" #include "ignition/common/URI.hh" using namespace ignition; @@ -73,6 +74,9 @@ TEST(URITEST, URIPath) EXPECT_EQ(path6.Str(), "/"); EXPECT_TRUE(path6.IsAbsolute()); + EXPECT_TRUE(path6.PopFront().empty()); + EXPECT_TRUE(path6.PopBack().empty()); + URIPath path7; path7.PushFront("/abs"); EXPECT_EQ(path7.Str(), "/abs"); @@ -116,6 +120,11 @@ TEST(URITEST, URIPath) EXPECT_EQ(path7.Str(), "/abs6%2Fabs5/abs4/abs3/abs2/abs"); EXPECT_TRUE(path7.IsAbsolute()); + EXPECT_EQ("abs6%2Fabs5", path7.PopFront()); + EXPECT_EQ("/abs4/abs3/abs2/abs", path7.Str()); + EXPECT_EQ("abs", path7.PopBack()); + EXPECT_EQ("/abs4/abs3/abs2", path7.Str()); + URIPath path8; path8.PushBack("/abs"); EXPECT_EQ(path8.Str(), "/abs"); @@ -444,14 +453,18 @@ TEST(URITEST, Scheme) EXPECT_TRUE(uri.Str().empty()); uri.SetScheme("data"); - EXPECT_EQ(uri.Str(), "data:"); + EXPECT_EQ(uri.Str(), "data://"); EXPECT_EQ("data", uri.Scheme()); } ///////////////////////////////////////////////// -TEST(URITEST, Path) +TEST(URITEST, PathIfHasAuthority) { URI uri; + EXPECT_FALSE(uri.Authority()); + uri.SetAuthority(URIAuthority()); + EXPECT_TRUE(uri.Authority()); + uri.SetScheme("data"); uri.Path() = uri.Path() / "world"; @@ -461,18 +474,25 @@ TEST(URITEST, Path) EXPECT_EQ(uri.Str(), "data:world/default"); EXPECT_TRUE(uri.Parse("file:///var/run/test")); + EXPECT_TRUE(uri.Authority()); + EXPECT_EQ(uri.Str(), "file:///var/run/test"); + EXPECT_TRUE(uri.Path().IsAbsolute()); EXPECT_TRUE(uri.Parse("file:/var/run/test")); + EXPECT_TRUE(uri.Authority()); EXPECT_EQ(uri.Str(), "file:/var/run/test"); EXPECT_TRUE(uri.Path().IsAbsolute()); EXPECT_TRUE(uri.Parse("file://var/run/test")); + ASSERT_TRUE(uri.Authority()); EXPECT_EQ(uri.Str(), "file://var/run/test"); + EXPECT_EQ(uri.Authority()->Str(), "//var"); EXPECT_EQ(uri.Path().Str(), "/run/test"); EXPECT_TRUE(uri.Path().IsAbsolute()); + EXPECT_TRUE(uri.Parse("file://test%20space")); - EXPECT_EQ(uri.Authority().Str(), "//test%20space"); - EXPECT_TRUE(uri.Path().Str().empty()); + EXPECT_EQ("//test%20space", uri.Authority()->Str()); + EXPECT_EQ("", uri.Path().Str()); EXPECT_TRUE(uri.Parse("file:///abs/path/test")); EXPECT_EQ(uri.Str(), "file:///abs/path/test"); @@ -501,6 +521,61 @@ TEST(URITEST, Path) EXPECT_TRUE(uri.Path().IsAbsolute()); } +///////////////////////////////////////////////// +TEST(URITEST, Path) +{ + URI uri; + uri.SetScheme("data"); + + uri.Path() = uri.Path() / "world"; + EXPECT_EQ(uri.Str(), "data://world"); + + uri.Path() /= "default"; + EXPECT_EQ(uri.Str(), "data://world/default"); + + EXPECT_TRUE(uri.Parse("file:///var/run/test")); + EXPECT_EQ(uri.Str(), "file:///var/run/test"); + + EXPECT_TRUE(uri.Parse("file:/var/run/test")); + EXPECT_EQ(uri.Str(), "file:///var/run/test"); + EXPECT_TRUE(uri.Path().IsAbsolute()); + + EXPECT_TRUE(uri.Parse("file://var/run/test")); + EXPECT_EQ(uri.Str(), "file://var/run/test"); + EXPECT_FALSE(uri.Authority()); + EXPECT_EQ(uri.Path().Str(), "var/run/test"); + EXPECT_FALSE(uri.Path().IsAbsolute()); + + EXPECT_TRUE(uri.Parse("file://test%20space")); + EXPECT_EQ("test%20space", uri.Path().Str()); + + EXPECT_TRUE(uri.Parse("file:///abs/path/test")); + EXPECT_EQ(uri.Str(), "file:///abs/path/test"); + EXPECT_EQ(uri.Path().Str(), "/abs/path/test"); + EXPECT_TRUE(uri.Path().IsAbsolute()); + + uri.Parse("file:/var/run/test"); + EXPECT_EQ(uri.Str(), "file:///var/run/test"); + EXPECT_EQ(uri.Path().Str(), "/var/run/test"); + EXPECT_TRUE(uri.Path().IsAbsolute()); + + EXPECT_FALSE(uri.Parse("file://test+space")); + + EXPECT_TRUE(uri.Parse("file:/test+space")); + EXPECT_EQ(uri.Str(), "file:///test+space"); + EXPECT_EQ(uri.Path().Str(), "/test+space"); + EXPECT_TRUE(uri.Path().IsAbsolute()); + + EXPECT_TRUE(uri.Parse("file:/test%20space")); + EXPECT_EQ(uri.Str(), "file:///test%20space"); + EXPECT_EQ(uri.Path().Str(), "/test%20space"); + EXPECT_TRUE(uri.Path().IsAbsolute()); + + uri.Parse("file://C:/Users"); + EXPECT_EQ(uri.Str(), "file://C:/Users"); + EXPECT_TRUE(uri.Path().IsAbsolute()); +} + ///////////////////////////////////////////////// TEST(URITEST, PathCopy) { @@ -523,21 +598,21 @@ TEST(URITEST, Query) uri.SetScheme("data"); uri.Query().Insert("p", "v"); - EXPECT_EQ(uri.Str(), "data:?p=v"); + EXPECT_EQ(uri.Str(), "data://?p=v"); uri.Path().PushFront("default"); - EXPECT_EQ(uri.Str(), "data:default?p=v"); + EXPECT_EQ(uri.Str(), "data://default?p=v"); uri.Path().PushFront("world"); - EXPECT_EQ(uri.Str(), "data:world/default?p=v"); + EXPECT_EQ(uri.Str(), "data://world/default?p=v"); URI uri2 = uri; uri.Path().Clear(); - EXPECT_EQ(uri.Str(), "data:?p=v"); + EXPECT_EQ(uri.Str(), "data://?p=v"); uri.Query().Clear(); - EXPECT_EQ(uri.Str(), "data:"); + EXPECT_EQ(uri.Str(), "data://"); uri.Clear(); uri2.Clear(); @@ -568,21 +643,21 @@ TEST(URITEST, Fragment) uri.SetScheme("data"); uri.Fragment() = "#f"; - EXPECT_EQ(uri.Str(), "data:#f"); + EXPECT_EQ(uri.Str(), "data://#f"); uri.Path().PushFront("default"); - EXPECT_EQ(uri.Str(), "data:default#f"); + EXPECT_EQ(uri.Str(), "data://default#f"); uri.Path().PushFront("world"); - EXPECT_EQ(uri.Str(), "data:world/default#f"); + EXPECT_EQ(uri.Str(), "data://world/default#f"); URI uri2 = uri; uri.Path().Clear(); - EXPECT_EQ(uri.Str(), "data:#f"); + EXPECT_EQ(uri.Str(), "data://#f"); uri.Fragment().Clear(); - EXPECT_EQ(uri.Str(), "data:"); + EXPECT_EQ(uri.Str(), "data://"); uri.Clear(); uri2.Clear(); @@ -603,8 +678,8 @@ TEST(URITEST, FragmentCopy) EXPECT_NE(uri.Fragment().Str(), fragmentCopy.Str()); EXPECT_EQ(uri.Fragment().Str(), "#f"); - EXPECT_EQ(uriTmp.Str(), "data:#g"); - EXPECT_EQ(uriCopy.Str(), "data:#g"); + EXPECT_EQ(uriTmp.Str(), "data://#g"); + EXPECT_EQ(uriCopy.Str(), "data://#g"); EXPECT_EQ(fragmentCopy.Str(), "#g"); } @@ -666,59 +741,67 @@ TEST(URITEST, URIString) TEST(URITEST, WikipediaTests) { URI uri; + uri.SetAuthority(URIAuthority()); // The following tests were pulled from: // https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Examples EXPECT_TRUE(uri.Parse("https://john.doe@www.example.com:123/forum/questions" "/?tag=networking&order=newest#top")); + ASSERT_TRUE(uri.Authority()); EXPECT_EQ("https", uri.Scheme()); - EXPECT_EQ("john.doe", uri.Authority().UserInfo()); - EXPECT_EQ("www.example.com", uri.Authority().Host()); - EXPECT_EQ(123, *uri.Authority().Port()); - EXPECT_EQ("//john.doe@www.example.com:123", uri.Authority().Str()); + EXPECT_EQ("john.doe", uri.Authority()->UserInfo()); + EXPECT_EQ("www.example.com", uri.Authority()->Host()); + EXPECT_EQ(123, *uri.Authority()->Port()); + EXPECT_EQ("//john.doe@www.example.com:123", uri.Authority()->Str()); EXPECT_EQ("/forum/questions/", uri.Path().Str()); EXPECT_EQ("?tag=networking&order=newest", uri.Query().Str()); EXPECT_EQ("#top", uri.Fragment().Str()); EXPECT_TRUE(uri.Parse("ldap://[2001:db8::7]/c=GB?objectClass?one")); + ASSERT_TRUE(uri.Authority()); EXPECT_EQ("ldap", uri.Scheme()); - EXPECT_EQ("[2001:db8::7]", uri.Authority().Host()); - EXPECT_EQ("//[2001:db8::7]", uri.Authority().Str()); + EXPECT_EQ("[2001:db8::7]", uri.Authority()->Host()); + EXPECT_EQ("//[2001:db8::7]", uri.Authority()->Str()); EXPECT_EQ("/c=GB", uri.Path().Str()); EXPECT_EQ("?objectClass?one", uri.Query().Str()); EXPECT_TRUE(uri.Parse("mailto:John.Doe@example.com")); + ASSERT_TRUE(uri.Authority()); EXPECT_EQ("mailto", uri.Scheme()); - EXPECT_TRUE(uri.Authority().Str().empty()); + EXPECT_TRUE(uri.Authority()->Str().empty()); EXPECT_EQ("John.Doe@example.com", uri.Path().Str()); EXPECT_TRUE(uri.Query().Str().empty()); EXPECT_TRUE(uri.Fragment().Str().empty()); EXPECT_TRUE(uri.Parse("news:comp.infosystems.www.servers.unix")); + ASSERT_TRUE(uri.Authority()); EXPECT_EQ("news", uri.Scheme()); - EXPECT_TRUE(uri.Authority().Str().empty()); + EXPECT_TRUE(uri.Authority()->Str().empty()); EXPECT_EQ("comp.infosystems.www.servers.unix", uri.Path().Str()); EXPECT_TRUE(uri.Query().Str().empty()); EXPECT_TRUE(uri.Fragment().Str().empty()); EXPECT_TRUE(uri.Parse("tel:+1-816-555-1212")); + ASSERT_TRUE(uri.Authority()); EXPECT_EQ("tel", uri.Scheme()); - EXPECT_TRUE(uri.Authority().Str().empty()); + EXPECT_TRUE(uri.Authority()->Str().empty()); EXPECT_EQ("+1-816-555-1212", uri.Path().Str()); EXPECT_TRUE(uri.Query().Str().empty()); EXPECT_TRUE(uri.Fragment().Str().empty()); EXPECT_TRUE(uri.Parse("telnet://192.0.2.16:80/")); + ASSERT_TRUE(uri.Authority()); EXPECT_EQ("telnet", uri.Scheme()); - EXPECT_TRUE(uri.Authority().UserInfo().empty()); - EXPECT_EQ("192.0.2.16", uri.Authority().Host()); - EXPECT_EQ(80, uri.Authority().Port()); + EXPECT_TRUE(uri.Authority()->UserInfo().empty()); + EXPECT_EQ("192.0.2.16", uri.Authority()->Host()); + EXPECT_EQ(80, uri.Authority()->Port()); EXPECT_EQ("/", uri.Path().Str()); EXPECT_TRUE(uri.Parse("urn:oasis:names:specification:docbook:dtd:xml:4.1.2")); + ASSERT_TRUE(uri.Authority()); EXPECT_EQ("urn", uri.Scheme()); - EXPECT_TRUE(uri.Authority().Str().empty()); + EXPECT_TRUE(uri.Authority()->Str().empty()); EXPECT_EQ("oasis:names:specification:docbook:dtd:xml:4.1.2", uri.Path().Str()); EXPECT_TRUE(uri.Query().Str().empty()); @@ -758,32 +841,172 @@ TEST(URITEST, URIAuthority) EXPECT_TRUE(auth2.Valid()); } +////////////////////////////////////////////////// TEST(URITEST, File) { URI uri; + uri.SetAuthority(URIAuthority()); + ASSERT_TRUE(uri.Authority()); + EXPECT_TRUE(uri.Parse("file:relative/path")); EXPECT_EQ("relative/path", uri.Path().Str()); - EXPECT_FALSE(uri.Authority().EmptyHostValid()); + EXPECT_FALSE(uri.Authority()->EmptyHostValid()); EXPECT_TRUE(uri.Parse("file:/abs/path")); EXPECT_EQ("/abs/path", uri.Path().Str()); - EXPECT_FALSE(uri.Authority().EmptyHostValid()); + EXPECT_FALSE(uri.Authority()->EmptyHostValid()); // Empty host is valid for file: scheme EXPECT_TRUE(uri.Parse("file:///abs/path")); EXPECT_EQ("/abs/path", uri.Path().Str()); - EXPECT_TRUE(uri.Authority().EmptyHostValid()); + EXPECT_TRUE(uri.Authority()->EmptyHostValid()); } ////////////////////////////////////////////////// TEST(URITEST, WinPath) { - const auto uri = ignition::common::URI("file://D:/my/test/dir/world.sdf"); + // Windows path requires authority + const auto uri = ignition::common::URI("file://D:/my/test/dir/world.sdf", + true); + ASSERT_TRUE(uri.Authority()); EXPECT_EQ("file", uri.Scheme()); - EXPECT_TRUE(uri.Authority().Str().empty()); + EXPECT_TRUE(uri.Authority()->Str().empty()); EXPECT_EQ("file:D:/my/test/dir/world.sdf", uri.Str()); } +////////////////////////////////////////////////// +TEST(URITEST, HasAuthority) +{ + { + // No authority by default + URI uri("https://john.doe@www.example.com:123/forum/questions/"); + + EXPECT_FALSE(uri.Authority()); + EXPECT_EQ("john.doe@www.example.com:123/forum/questions/", + uri.Path().Str()); + EXPECT_EQ("https://john.doe@www.example.com:123/forum/questions/", + uri.Str()); + + // Modifyng path updates string + uri.Path() = URIPath("new_authority.com/another/path"); + + EXPECT_EQ("new_authority.com/another/path/", uri.Path().Str()); + EXPECT_EQ("https://new_authority.com/another/path/", uri.Str()); + + // Clearing keeps false authority + uri.Clear(); + EXPECT_EQ("", uri.Str()); + EXPECT_FALSE(uri.Authority()); + } + + { + // Has authority + URI uri("https://john.doe@www.example.com:123/forum/questions/", true); + + ASSERT_TRUE(uri.Authority()); + EXPECT_EQ("john.doe", uri.Authority()->UserInfo()); + EXPECT_EQ("www.example.com", uri.Authority()->Host()); + EXPECT_EQ(123, *uri.Authority()->Port()); + EXPECT_EQ("//john.doe@www.example.com:123", uri.Authority()->Str()); + + EXPECT_EQ("/forum/questions/", uri.Path().Str()); + + uri.SetAuthority(URIAuthority("//new_authority.com")); + EXPECT_EQ("//new_authority.com", uri.Authority()->Str()); + EXPECT_EQ("/forum/questions/", uri.Path().Str()); + EXPECT_EQ("https://new_authority.com/forum/questions/", uri.Str()); + + // Clearing keeps true authority, but empty + uri.Clear(); + EXPECT_EQ("", uri.Str()); + ASSERT_TRUE(uri.Authority()); + EXPECT_EQ("", uri.Authority()->Str()); + } +} + +////////////////////////////////////////////////// +TEST(URITEST, Resource) +{ + // Test URIs that are commonly used for resources in Ignition + { + URI uri; + EXPECT_TRUE(uri.Parse("model://model_name/meshes/mesh.dae")); + EXPECT_EQ("model", uri.Scheme()); + EXPECT_FALSE(uri.Authority()); + EXPECT_EQ("model_name/meshes/mesh.dae", uri.Path().Str()); + EXPECT_TRUE(uri.Query().Str().empty()); + EXPECT_TRUE(uri.Fragment().Str().empty()); + EXPECT_FALSE(uri.Path().IsAbsolute()); + } + + { + URI uri; + uri.SetAuthority(URIAuthority()); + EXPECT_TRUE(uri.Parse("model://model_name/meshes/mesh.dae")); + EXPECT_EQ("model", uri.Scheme()); + ASSERT_TRUE(uri.Authority()); + EXPECT_EQ("//model_name", uri.Authority()->Str()); + EXPECT_EQ("model_name", uri.Authority()->Host()); + EXPECT_TRUE(uri.Authority()->UserInfo().empty()); + EXPECT_EQ("/meshes/mesh.dae", uri.Path().Str()); + EXPECT_TRUE(uri.Query().Str().empty()); + EXPECT_TRUE(uri.Fragment().Str().empty()); + EXPECT_TRUE(uri.Path().IsAbsolute()); + } + + { + URI uri; + EXPECT_TRUE(uri.Parse("model://model_name")); + EXPECT_EQ("model", uri.Scheme()); + EXPECT_FALSE(uri.Authority()); + EXPECT_EQ("model_name", uri.Path().Str()); + EXPECT_TRUE(uri.Query().Str().empty()); + EXPECT_TRUE(uri.Fragment().Str().empty()); + EXPECT_FALSE(uri.Path().IsAbsolute()); + } + + { + URI uri; + uri.SetAuthority(URIAuthority()); + EXPECT_TRUE(uri.Parse("model://model_name")); + EXPECT_EQ("model", uri.Scheme()); + ASSERT_TRUE(uri.Authority()); + EXPECT_EQ("//model_name", uri.Authority()->Str()); + EXPECT_EQ("model_name", uri.Authority()->Host()); + EXPECT_TRUE(uri.Authority()->UserInfo().empty()); + EXPECT_TRUE(uri.Path().Str().empty()); + EXPECT_TRUE(uri.Query().Str().empty()); + EXPECT_TRUE(uri.Fragment().Str().empty()); + EXPECT_FALSE(uri.Path().IsAbsolute()); + } + + { + URI uri; + EXPECT_TRUE(uri.Parse("package://package_name/models/model")); + EXPECT_EQ("package", uri.Scheme()); + EXPECT_FALSE(uri.Authority()); + EXPECT_EQ("package_name/models/model", uri.Path().Str()); + EXPECT_TRUE(uri.Query().Str().empty()); + EXPECT_TRUE(uri.Fragment().Str().empty()); + EXPECT_FALSE(uri.Path().IsAbsolute()); + } + + { + URI uri; + uri.SetAuthority(URIAuthority()); + EXPECT_TRUE(uri.Parse("package://package_name/models/model")); + EXPECT_EQ("package", uri.Scheme()); + ASSERT_TRUE(uri.Authority()); + EXPECT_EQ("//package_name", uri.Authority()->Str()); + EXPECT_EQ("package_name", uri.Authority()->Host()); + EXPECT_TRUE(uri.Authority()->UserInfo().empty()); + EXPECT_EQ("/models/model", uri.Path().Str()); + EXPECT_TRUE(uri.Query().Str().empty()); + EXPECT_TRUE(uri.Fragment().Str().empty()); + EXPECT_TRUE(uri.Path().IsAbsolute()); + } +} + ///////////////////////////////////////////////// int main(int argc, char **argv) { From 7510820a2f046cb4bda73a63e589ac4c5a361cee Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Fri, 19 Feb 2021 18:53:35 -0600 Subject: [PATCH 072/219] Install the profiler in a version-safe manner (#170) This allows the script to be side-by-side installable. Signed-off-by: Michael Carroll <michael@openrobotics.org> Signed-off-by: Louise Poubel <louise@openrobotics.org> Co-authored-by: Steve Peters <scpeters@openrobotics.org> Co-authored-by: Louise Poubel <louise@openrobotics.org> --- profiler/src/CMakeLists.txt | 8 +++++--- profiler/src/Remotery/ign_remotery_vis.in | 13 ++++++++++++- tutorials/profiler.md | 7 +++++-- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/profiler/src/CMakeLists.txt b/profiler/src/CMakeLists.txt index dc2bc58f1..1c2f7e360 100644 --- a/profiler/src/CMakeLists.txt +++ b/profiler/src/CMakeLists.txt @@ -88,15 +88,17 @@ if(TARGET UNIT_Profiler_Remotery_TEST) endif() if(IGN_PROFILER_REMOTERY) + set(IGN_PROFILER_SCRIPT_PATH ${CMAKE_INSTALL_LIBDIR}/ignition/ignition-common${PROJECT_VERSION_MAJOR}) set(IGN_PROFILER_VIS_PATH ${IGN_DATA_INSTALL_DIR}/profiler_vis) configure_file(Remotery/ign_remotery_vis.in - ${CMAKE_CURRENT_BINARY_DIR}/ign_remotery_vis) + ${CMAKE_CURRENT_BINARY_DIR}/ign_remotery_vis + @ONLY) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/ign_remotery_vis - DESTINATION bin) + DESTINATION ${IGN_PROFILER_SCRIPT_PATH}) install(DIRECTORY Remotery/vis/ - DESTINATION ${IGN_DATA_INSTALL_DIR}/profiler_vis) + DESTINATION ${IGN_PROFILER_VIS_PATH}) endif() diff --git a/profiler/src/Remotery/ign_remotery_vis.in b/profiler/src/Remotery/ign_remotery_vis.in index 86c873237..079f5baa9 100755 --- a/profiler/src/Remotery/ign_remotery_vis.in +++ b/profiler/src/Remotery/ign_remotery_vis.in @@ -1,7 +1,18 @@ #!/usr/bin/env bash -VIS_PATH=@CMAKE_INSTALL_PREFIX@/@IGN_PROFILER_VIS_PATH@/index.html +SCRIPT_PATH=@IGN_PROFILER_SCRIPT_PATH@/ign_remotery_vis +VIS_PATH=@IGN_PROFILER_VIS_PATH@/index.html +# Get the full path to this script +SCRIPT=`realpath $0` + +# Strip the known script path off the end of the full path +INSTALL_ROOT=${SCRIPT%${SCRIPT_PATH}} + +# Append the relative vis path +VIS_PATH=$INSTALL_ROOT/$VIS_PATH + +# Open with a system web browser if [ -x "$(command -v xdg-open)" ]; then xdg-open $VIS_PATH elif [ -x "$(command -v open)" ]; then diff --git a/tutorials/profiler.md b/tutorials/profiler.md index 5e230ad33..6a37357aa 100644 --- a/tutorials/profiler.md +++ b/tutorials/profiler.md @@ -85,8 +85,11 @@ From terminal 1: From terminal 2, open the visualizer using one of the following commands ```{.sh} -# Use a launcher script (Linux and macOS) -ign_remotery_vis +# Find the launcher script and use it (Linux and macOS) +find /usr | grep ign_remotery_vis +... + +/usr/<path_to>/ign_remotery_vis # Use the source path (Linux) # Substitute the path to your ign-common source checkout From fda53acf4c1e2a3d87a7444d10426856ce7586dd Mon Sep 17 00:00:00 2001 From: Luca Della Vedova <luca@openrobotics.org> Date: Fri, 12 Mar 2021 22:49:01 +0800 Subject: [PATCH 073/219] Cleanup and add Implementation pointer to Animation classes (#160) Signed-off-by: Luca Della Vedova <luca@openrobotics.org> Co-authored-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Louise Poubel <louise@openrobotics.org> Co-authored-by: Steve Peters <scpeters@openrobotics.org> --- .github/ci/packages.apt | 1 + CMakeLists.txt | 5 + graphics/include/ignition/common/Animation.hh | 88 ++--- graphics/src/Animation.cc | 310 ++++++++---------- graphics/src/CMakeLists.txt | 1 + 5 files changed, 162 insertions(+), 243 deletions(-) diff --git a/.github/ci/packages.apt b/.github/ci/packages.apt index a7fb41b53..764e85842 100644 --- a/.github/ci/packages.apt +++ b/.github/ci/packages.apt @@ -6,6 +6,7 @@ libfreeimage-dev libgts-dev libignition-cmake2-dev libignition-math6-dev +libignition-utils1-dev libswscale-dev libtinyxml2-dev pkg-config diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b4cd1290..bf4daa86d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,6 +49,11 @@ message(STATUS "\n\n-- ====== Finding Dependencies ======") ign_find_package(ignition-math6 REQUIRED_BY graphics events VERSION 6.6) set(IGN_MATH_VER ${ignition-math6_VERSION_MAJOR}) +#-------------------------------------- +# Find ignition-utils +ign_find_package(ignition-utils1 REQUIRED_BY graphics VERSION 1.0) +set(IGN_UTILS_VER ${ignition-utils1_VERSION_MAJOR}) + #-------------------------------------- # Find Tinyxml2 if(USE_EXTERNAL_TINYXML2) diff --git a/graphics/include/ignition/common/Animation.hh b/graphics/include/ignition/common/Animation.hh index c0843519f..de06e6374 100644 --- a/graphics/include/ignition/common/Animation.hh +++ b/graphics/include/ignition/common/Animation.hh @@ -25,6 +25,8 @@ #include <ignition/math/Spline.hh> #include <ignition/math/RotationSpline.hh> +#include <ignition/utils/ImplPtr.hh> + #include <ignition/common/graphics/Export.hh> namespace ignition @@ -34,7 +36,6 @@ namespace ignition class KeyFrame; class PoseKeyFrame; class NumericKeyFrame; - class TrajectoryInfoPrivate; /// \class Animation Animation.hh ignition/common/Animation.hh /// \brief Manages an animation, which is a collection of keyframes and @@ -48,9 +49,6 @@ namespace ignition public: Animation(const std::string &_name, const double _length, const bool _loop); - /// \brief Destructor - public: virtual ~Animation(); - /// \brief Return the duration of the animation /// \return Duration of the animation in seconds public: double Length() const; @@ -88,6 +86,12 @@ namespace ignition /// \return A pointer the keyframe, NULL if the _index is invalid public: common::KeyFrame *KeyFrame(const unsigned int _index) const; + /// \brief Create a keyframe at the given time + /// \param[in] _time Time at which to create the keyframe + /// \return Pointer to the new keyframe + protected: template<typename KeyFrameType> + KeyFrameType *CreateKeyFrame(const double _time); + /// \brief Get the two key frames that bound a time value /// \param[in] _time The time in seconds /// \param[out] _kf1 Lower bound keyframe that is returned @@ -99,36 +103,8 @@ namespace ignition common::KeyFrame **_kf2, unsigned int &_firstKeyIndex) const; -#ifdef _WIN32 -// Disable warning C4251 which is triggered by -// std::unique_ptr -#pragma warning(push) -#pragma warning(disable: 4251) -#endif - - /// \brief animation name - protected: std::string name; - - /// \brief animation duration - protected: double length; - - /// \brief current time position - protected: double timePos; - - /// \brief determines if the interpolation splines need building - protected: mutable bool build; - - /// \brief true if animation repeats - protected: bool loop; - - /// \brief array of keyframe type alias - protected: typedef std::vector<common::KeyFrame *> KeyFrame_V; - - /// \brief array of key frames - protected: KeyFrame_V keyFrames; -#ifdef _WIN32 -#pragma warning(pop) -#endif + /// \brief Private data pointer. + IGN_UTILS_IMPL_PTR(dataPtr) }; /// \brief A pose animation. @@ -141,9 +117,6 @@ namespace ignition public: PoseAnimation(const std::string &_name, const double _length, const bool _loop); - /// \brief Destructor - public: virtual ~PoseAnimation(); - /// \brief Create a pose keyframe at the given time /// \param[in] _time Time at which to create the keyframe /// \return Pointer to the new keyframe @@ -151,22 +124,19 @@ namespace ignition /// \brief Get a keyframe using the animation's current time. /// \param[out] _kf PoseKeyFrame reference to hold the interpolated result - public: void InterpolatedKeyFrame(PoseKeyFrame &_kf) const; + public: void InterpolatedKeyFrame(PoseKeyFrame &_kf); /// \brief Get a keyframe using a passed in time. /// \param[in] _time Time in seconds /// \param[out] _kf PoseKeyFrame reference to hold the interpolated result protected: void InterpolatedKeyFrame(const double _time, - PoseKeyFrame &_kf) const; + PoseKeyFrame &_kf); /// \brief Update the pose splines - protected: void BuildInterpolationSplines() const; - - /// \brief smooth interpolation for position - private: mutable math::Spline *positionSpline; + protected: void BuildInterpolationSplines(); - /// \brief smooth interpolation for rotation - private: mutable math::RotationSpline *rotationSpline; + /// \brief Private data pointer. + IGN_UTILS_IMPL_PTR(dataPtr) }; /// \brief A numeric animation. @@ -179,9 +149,6 @@ namespace ignition public: NumericAnimation(const std::string &_name, const double _length, const bool _loop); - /// \brief Destructor - public: virtual ~NumericAnimation(); - /// \brief Create a numeric keyframe at the given time /// \param[in] _time Time at which to create the keyframe /// \return Pointer to the new keyframe @@ -191,6 +158,9 @@ namespace ignition /// \param[out] _kf NumericKeyFrame reference to hold the /// interpolated result public: void InterpolatedKeyFrame(NumericKeyFrame &_kf) const; + + /// \brief Private data pointer. + IGN_UTILS_IMPL_PTR(dataPtr) }; /// \brief Information about a trajectory for an animation (e.g., Actor) @@ -200,26 +170,6 @@ namespace ignition /// \brief Constructor public: TrajectoryInfo(); - /// \brief Copy constructor - /// \param[in] _trajInfo TrajectoryInfo to copy. - public: TrajectoryInfo(const TrajectoryInfo &_trajInfo); - - /// \brief Move constructor - /// \param[in] _trajInfo TrajectoryInfo to move. - public: TrajectoryInfo(TrajectoryInfo &&_trajInfo) noexcept; - - /// \brief Destructor - public: ~TrajectoryInfo(); - - /// \brief Assignment operator. - /// \param[in] _trajInfo The TrajectoryInfo to set values from. - /// \return *this - public: TrajectoryInfo &operator=(const TrajectoryInfo &_trajInfo); - - /// \brief Copy TrajectoryInfo from a TrajectoryInfo instance. - /// \param[in] _trajInfo The TrajectoryInfo to set values from. - public: void CopyFrom(const TrajectoryInfo &_trajInfo); - /// \brief Return the id of the trajectory /// \return Id of the trajectory public: unsigned int Id() const; @@ -285,7 +235,7 @@ namespace ignition _waypoints); /// \brief Private data pointer. - private: TrajectoryInfoPrivate *dataPtr{nullptr}; + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/src/Animation.cc b/graphics/src/Animation.cc index 60cafecce..2234ef4b5 100644 --- a/graphics/src/Animation.cc +++ b/graphics/src/Animation.cc @@ -15,7 +15,7 @@ * */ #include <algorithm> -#include <unordered_map> +#include <memory> #include <ignition/math/Spline.hh> #include <ignition/math/Vector2.hh> @@ -27,12 +27,28 @@ using namespace ignition; using namespace common; +using KeyFrame_V = std::vector<std::shared_ptr<common::KeyFrame>>; + +/// \brief Implementaiton of std::reinterpret_pointer_cast from +/// cppreference. +/// Needed because MacOS Catalina doesn't support this part of the standard +/// \todo(anyone) remove withs future versions of MacOS +template< class T, class U > +std::shared_ptr<T> +reinterpret_pointer_cast( const std::shared_ptr<U>& r ) noexcept +{ + auto p = + reinterpret_cast<typename std::shared_ptr<T>::element_type*>(r.get()); + return std::shared_ptr<T>(r, p); +} + +///////////////////////////////////////////////// namespace { struct KeyFrameTimeLess { - bool operator() (const common::KeyFrame *_kf, - const common::KeyFrame *_kf2) const + bool operator() (const std::shared_ptr<common::KeyFrame> &_kf, + const std::shared_ptr<common::KeyFrame> &_kf2) const { return _kf->Time() < _kf2->Time(); } @@ -42,45 +58,48 @@ namespace ///////////////////////////////////////////////// namespace ignition { namespace common { -class AnimationPrivate + +class Animation::Implementation { /// \brief true if the animation is interpolated in x - public: bool interpolateX = false; -}; -} // namespace ignition -} // namespace common + public: bool interpolateX{false}; -// TODO(luca) Make Animation class follow PIMPL and remove global static map -///////////////////////////////////////////////// -typedef std::unordered_map<Animation *, AnimationPrivate *> AnimationPrivateMap; -static AnimationPrivateMap animationPrivateMap; + /// \brief animation name + public: std::string name; + + /// \brief animation duration + public: double length; + + /// \brief current time position + public: double timePos{0}; + + /// \brief true if animation repeats + public: bool loop; + + /// \brief array of key frames + public: KeyFrame_V keyFrames; +}; ///////////////////////////////////////////////// -static AnimationPrivate* AnimationDataPtr(Animation *_animation) +class PoseAnimation::Implementation { - auto mapIt = animationPrivateMap.find(_animation); - if (mapIt == animationPrivateMap.end()) - { - // Create the map entry - animationPrivateMap[_animation] = new AnimationPrivate; - } - return animationPrivateMap[_animation]; -} + /// \brief smooth interpolation for position + public: std::shared_ptr<math::Spline> positionSpline; + + /// \brief smooth interpolation for rotation + public: std::shared_ptr<math::RotationSpline> rotationSpline; + + /// \brief determines if the interpolation splines need building + public: bool build{false}; +}; ///////////////////////////////////////////////// -static void DeleteAnimationDataPtr(Animation *_animation) +class NumericAnimation::Implementation { - // Delete the data pointer class and erase the hash map entry - auto mapIt = animationPrivateMap.find(_animation); - if (mapIt != animationPrivateMap.end()) - { - delete mapIt->second; - animationPrivateMap.erase(mapIt); - } -} +}; ///////////////////////////////////////////////// -class ignition::common::TrajectoryInfoPrivate +class TrajectoryInfo::Implementation { /// \brief ID of the trajectory public: unsigned int id{0}; @@ -111,48 +130,44 @@ class ignition::common::TrajectoryInfoPrivate ///////////////////////////////////////////////// Animation::Animation(const std::string &_name, const double _length, const bool _loop) -: name(_name), length(_length), loop(_loop) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { - this->timePos = 0; - this->build = false; -} - -///////////////////////////////////////////////// -Animation::~Animation() -{ - DeleteAnimationDataPtr(this); + this->dataPtr->name = _name; + this->dataPtr->length = _length; + this->dataPtr->loop = _loop; } ///////////////////////////////////////////////// double Animation::Length() const { - return this->length; + return this->dataPtr->length; } ///////////////////////////////////////////////// void Animation::Length(const double _len) { - this->length = _len; + this->dataPtr->length = _len; } ///////////////////////////////////////////////// void Animation::Time(const double _time) { - if (!math::equal(_time, this->timePos)) + if (!math::equal(_time, this->dataPtr->timePos)) { - this->timePos = _time; - if (this->loop) + this->dataPtr->timePos = _time; + if (this->dataPtr->loop) { - this->timePos = fmod(this->timePos, this->length); - if (this->timePos < 0) - this->timePos += this->length; + this->dataPtr->timePos = fmod(this->dataPtr->timePos, + this->dataPtr->length); + if (this->dataPtr->timePos < 0) + this->dataPtr->timePos += this->dataPtr->length; } else { - if (this->timePos < 0) - this->timePos = 0; - else if (this->timePos > this->length) - this->timePos = this->length; + if (this->dataPtr->timePos < 0) + this->dataPtr->timePos = 0; + else if (this->dataPtr->timePos > this->dataPtr->length) + this->dataPtr->timePos = this->dataPtr->length; } } } @@ -160,31 +175,31 @@ void Animation::Time(const double _time) ///////////////////////////////////////////////// void Animation::AddTime(const double _time) { - this->Time(this->timePos + _time); + this->Time(this->dataPtr->timePos + _time); } ///////////////////////////////////////////////// double Animation::Time() const { - return this->timePos; + return this->dataPtr->timePos; } ///////////////////////////////////////////////// bool Animation::InterpolateX() const { - return AnimationDataPtr(const_cast<Animation *>(this))->interpolateX; + return this->dataPtr->interpolateX; } ///////////////////////////////////////////////// void Animation::SetInterpolateX(const bool _interpolateX) { - AnimationDataPtr(this)->interpolateX = _interpolateX; + this->dataPtr->interpolateX = _interpolateX; } ///////////////////////////////////////////////// unsigned int Animation::KeyFrameCount() const { - return this->keyFrames.size(); + return this->dataPtr->keyFrames.size(); } ///////////////////////////////////////////////// @@ -192,18 +207,33 @@ common::KeyFrame *Animation::KeyFrame(const unsigned int _index) const { common::KeyFrame *result = NULL; - if (_index < this->keyFrames.size()) - result = this->keyFrames[_index]; + if (_index < this->dataPtr->keyFrames.size()) + result = this->dataPtr->keyFrames[_index].get(); else { ignerr << "Key frame index[" << _index << "] is larger than key frame array size[" - << this->keyFrames.size() << "]\n"; + << this->dataPtr->keyFrames.size() << "]\n"; } return result; } +///////////////////////////////////////////////// +template<typename KeyFrameType> +KeyFrameType *Animation::CreateKeyFrame(const double _time) +{ + auto frame = std::make_shared<KeyFrameType>(_time); + auto iter = + std::upper_bound(this->dataPtr->keyFrames.begin(), + this->dataPtr->keyFrames.end(), + ::reinterpret_pointer_cast<common::KeyFrame>(frame), + KeyFrameTimeLess()); + + this->dataPtr->keyFrames.insert(iter, frame); + return frame.get(); +} + ///////////////////////////////////////////////// double Animation::KeyFramesAtTime(double _time, common::KeyFrame **_kf1, common::KeyFrame **_kf2, unsigned int &_firstKeyIndex) const @@ -214,36 +244,36 @@ double Animation::KeyFramesAtTime(double _time, common::KeyFrame **_kf1, double t1, t2; // Find first key frame after or on current time - while (_time > this->length && this->length > 0.0) - _time -= this->length; + while (_time > this->dataPtr->length && this->dataPtr->length > 0.0) + _time -= this->dataPtr->length; KeyFrame_V::const_iterator iter; - common::KeyFrame timeKey(_time); - iter = std::lower_bound(this->keyFrames.begin(), this->keyFrames.end(), - &timeKey, KeyFrameTimeLess()); + auto timeKey = std::make_shared<common::KeyFrame>(_time); + iter = std::lower_bound(this->dataPtr->keyFrames.begin(), + this->dataPtr->keyFrames.end(), timeKey, KeyFrameTimeLess()); - if (iter == this->keyFrames.end()) + if (iter == this->dataPtr->keyFrames.end()) { // There is no keyframe after this time, wrap back to first - *_kf2 = this->keyFrames.front(); - t2 = this->length + (*_kf2)->Time(); + *_kf2 = this->dataPtr->keyFrames.front().get(); + t2 = this->dataPtr->length + (*_kf2)->Time(); // Use the last keyframe as the previous keyframe --iter; } else { - *_kf2 = *iter; + *_kf2 = iter->get(); t2 = (*_kf2)->Time(); // Find last keyframe before or on current time - if (iter != this->keyFrames.begin() && _time < (*iter)->Time()) + if (iter != this->dataPtr->keyFrames.begin() && _time < (*iter)->Time()) --iter; } - _firstKeyIndex = std::distance(this->keyFrames.begin(), iter); + _firstKeyIndex = std::distance(this->dataPtr->keyFrames.cbegin(), iter); - *_kf1 = *iter; + *_kf1 = iter->get(); t1 = (*_kf1)->Time(); if (math::equal(t1, t2)) @@ -255,78 +285,60 @@ double Animation::KeyFramesAtTime(double _time, common::KeyFrame **_kf1, ///////////////////////////////////////////////// PoseAnimation::PoseAnimation(const std::string &_name, const double _length, const bool _loop) -: Animation(_name, _length, _loop) +: Animation(_name, _length, _loop), + dataPtr(ignition::utils::MakeImpl<Implementation>()) { - this->positionSpline = NULL; - this->rotationSpline = NULL; -} - -///////////////////////////////////////////////// -PoseAnimation::~PoseAnimation() -{ - delete this->positionSpline; - delete this->rotationSpline; - for (auto kf : this->keyFrames) - delete kf; } ///////////////////////////////////////////////// PoseKeyFrame *PoseAnimation::CreateKeyFrame(const double _time) { - PoseKeyFrame *frame = new PoseKeyFrame(_time); - std::vector<common::KeyFrame*>::iterator iter = - std::upper_bound(this->keyFrames.begin(), this->keyFrames.end(), - reinterpret_cast<common::KeyFrame*>(frame), KeyFrameTimeLess()); - - this->keyFrames.insert(iter, frame); - this->build = true; - - return frame; + this->dataPtr->build = true; + return Animation::CreateKeyFrame<PoseKeyFrame>(_time); } ///////////////////////////////////////////////// -void PoseAnimation::BuildInterpolationSplines() const +void PoseAnimation::BuildInterpolationSplines() { - if (!this->positionSpline) - this->positionSpline = new math::Spline(); + if (!this->dataPtr->positionSpline) + this->dataPtr->positionSpline = std::make_unique<math::Spline>(); - if (!this->rotationSpline) - this->rotationSpline = new math::RotationSpline(); + if (!this->dataPtr->rotationSpline) + this->dataPtr->rotationSpline = std::make_unique<math::RotationSpline>(); - this->positionSpline->AutoCalculate(false); - this->rotationSpline->AutoCalculate(false); + this->dataPtr->positionSpline->AutoCalculate(false); + this->dataPtr->rotationSpline->AutoCalculate(false); - this->positionSpline->Clear(); - this->rotationSpline->Clear(); + this->dataPtr->positionSpline->Clear(); + this->dataPtr->rotationSpline->Clear(); - for (KeyFrame_V::const_iterator iter = this->keyFrames.begin(); - iter != this->keyFrames.end(); ++iter) + for (size_t idx = 0; idx < this->KeyFrameCount(); ++idx) { - PoseKeyFrame *pkey = reinterpret_cast<PoseKeyFrame*>(*iter); - this->positionSpline->AddPoint(pkey->Translation()); - this->rotationSpline->AddPoint(pkey->Rotation()); + PoseKeyFrame *pkey = reinterpret_cast<PoseKeyFrame*>(this->KeyFrame(idx)); + this->dataPtr->positionSpline->AddPoint(pkey->Translation()); + this->dataPtr->rotationSpline->AddPoint(pkey->Rotation()); } - this->positionSpline->RecalcTangents(); - this->rotationSpline->RecalcTangents(); - this->build = false; + this->dataPtr->positionSpline->RecalcTangents(); + this->dataPtr->rotationSpline->RecalcTangents(); + this->dataPtr->build = false; } ///////////////////////////////////////////////// -void PoseAnimation::InterpolatedKeyFrame(PoseKeyFrame &_kf) const +void PoseAnimation::InterpolatedKeyFrame(PoseKeyFrame &_kf) { - this->InterpolatedKeyFrame(this->timePos, _kf); + this->InterpolatedKeyFrame(this->Time(), _kf); } ///////////////////////////////////////////////// void PoseAnimation::InterpolatedKeyFrame(const double _time, - PoseKeyFrame &_kf) const + PoseKeyFrame &_kf) { common::KeyFrame *kBase1, *kBase2; PoseKeyFrame *k1; unsigned int firstKeyIndex; - if (this->build) + if (this->dataPtr->build) this->BuildInterpolationSplines(); double t = this->KeyFramesAtTime(_time, &kBase1, &kBase2, firstKeyIndex); @@ -340,37 +352,24 @@ void PoseAnimation::InterpolatedKeyFrame(const double _time, } else { - _kf.Translation(this->positionSpline->Interpolate(firstKeyIndex, t)); - _kf.Rotation(this->rotationSpline->Interpolate(firstKeyIndex, t)); + _kf.Translation( + this->dataPtr->positionSpline->Interpolate(firstKeyIndex, t)); + _kf.Rotation(this->dataPtr->rotationSpline->Interpolate(firstKeyIndex, t)); } } ///////////////////////////////////////////////// NumericAnimation::NumericAnimation(const std::string &_name, const double _length, const bool _loop) -: Animation(_name, _length, _loop) +: Animation(_name, _length, _loop), + dataPtr(ignition::utils::MakeImpl<Implementation>()) { } -///////////////////////////////////////////////// -NumericAnimation::~NumericAnimation() -{ - for (auto kf : this->keyFrames) - delete kf; -} - ///////////////////////////////////////////////// NumericKeyFrame *NumericAnimation::CreateKeyFrame(const double _time) { - NumericKeyFrame *frame = new NumericKeyFrame(_time); - std::vector<common::KeyFrame*>::iterator iter = - std::upper_bound(this->keyFrames.begin(), this->keyFrames.end(), - reinterpret_cast<common::KeyFrame*>(frame), - KeyFrameTimeLess()); - - this->keyFrames.insert(iter, frame); - this->build = true; - return frame; + return Animation::CreateKeyFrame<NumericKeyFrame>(_time); } ///////////////////////////////////////////////// @@ -382,7 +381,7 @@ void NumericAnimation::InterpolatedKeyFrame(NumericKeyFrame &_kf) const unsigned int firstKeyIndex; double t; - t = this->KeyFramesAtTime(this->timePos, &kBase1, &kBase2, firstKeyIndex); + t = this->KeyFramesAtTime(this->Time(), &kBase1, &kBase2, firstKeyIndex); k1 = reinterpret_cast<NumericKeyFrame*>(kBase1); k2 = reinterpret_cast<NumericKeyFrame*>(kBase2); @@ -402,49 +401,10 @@ void NumericAnimation::InterpolatedKeyFrame(NumericKeyFrame &_kf) const ///////////////////////////////////////////////// TrajectoryInfo::TrajectoryInfo() - : dataPtr(new TrajectoryInfoPrivate) + : dataPtr(ignition::utils::MakeImpl<Implementation>()) { } -///////////////////////////////////////////////// -TrajectoryInfo::TrajectoryInfo(TrajectoryInfo &&_trajInfo) noexcept -{ - this->dataPtr = _trajInfo.dataPtr; - _trajInfo.dataPtr = nullptr; -} - -///////////////////////////////////////////////// -TrajectoryInfo::~TrajectoryInfo() -{ - delete this->dataPtr; -} - -////////////////////////////////////////////////// -void TrajectoryInfo::CopyFrom(const TrajectoryInfo &_trajInfo) -{ - this->dataPtr->id = _trajInfo.dataPtr->id; - this->dataPtr->animIndex = _trajInfo.dataPtr->animIndex; - this->dataPtr->startTime = _trajInfo.dataPtr->startTime; - this->dataPtr->endTime = _trajInfo.dataPtr->endTime; - this->dataPtr->translated = _trajInfo.dataPtr->translated; - this->dataPtr->waypoints = _trajInfo.dataPtr->waypoints; - this->dataPtr->segDistance = _trajInfo.dataPtr->segDistance; -} - -////////////////////////////////////////////////// -TrajectoryInfo::TrajectoryInfo(const TrajectoryInfo &_trajInfo) - : dataPtr(new TrajectoryInfoPrivate) -{ - this->CopyFrom(_trajInfo); -} - -////////////////////////////////////////////////// -TrajectoryInfo &TrajectoryInfo::operator=(const TrajectoryInfo &_trajInfo) -{ - this->CopyFrom(_trajInfo); - return *this; -} - ///////////////////////////////////////////////// unsigned int TrajectoryInfo::Id() const { @@ -585,3 +545,5 @@ void TrajectoryInfo::SetWaypoints( this->dataPtr->waypoints = anim; this->dataPtr->translated = true; } +} // namespace ignition +} // namespace common diff --git a/graphics/src/CMakeLists.txt b/graphics/src/CMakeLists.txt index dcd41d8ef..461c993a2 100644 --- a/graphics/src/CMakeLists.txt +++ b/graphics/src/CMakeLists.txt @@ -15,6 +15,7 @@ ign_add_component(graphics SOURCES ${sources} GET_TARGET_NAME graphics_target) target_link_libraries(${graphics_target} PUBLIC ignition-math${IGN_MATH_VER}::ignition-math${IGN_MATH_VER} + ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER} PRIVATE GTS::GTS FreeImage::FreeImage) From 2b4ad723418359ea744c58a29224d384e1409fc2 Mon Sep 17 00:00:00 2001 From: Luca Della Vedova <luca@openrobotics.org> Date: Sat, 20 Mar 2021 06:03:23 +0800 Subject: [PATCH 074/219] Add implementation pointer to ign-common classes (#163) * Add impl pointer to Animation classes * Convert keyframes to shared pointers * Refactoring of graphics libraries Signed-off-by: Luca Della Vedova <luca@openrobotics.org> Co-authored-by: Louise Poubel <louise@openrobotics.org> Co-authored-by: Michael Carroll <michael@openrobotics.org> --- .../ignition/common/ColladaExporter.hh | 10 +- .../include/ignition/common/ColladaLoader.hh | 7 +- graphics/include/ignition/common/Dem.hh | 9 +- graphics/include/ignition/common/Image.hh | 16 +-- graphics/include/ignition/common/KeyFrame.hh | 28 ++-- graphics/include/ignition/common/Material.hh | 12 +- graphics/include/ignition/common/Mesh.hh | 8 +- .../include/ignition/common/MeshManager.hh | 10 +- .../include/ignition/common/NodeAnimation.hh | 6 +- .../include/ignition/common/NodeTransform.hh | 20 +-- graphics/include/ignition/common/OBJLoader.hh | 9 +- graphics/include/ignition/common/Pbr.hh | 29 +---- graphics/include/ignition/common/STLLoader.hh | 5 + graphics/include/ignition/common/SVGLoader.hh | 12 +- graphics/include/ignition/common/Skeleton.hh | 9 +- .../ignition/common/SkeletonAnimation.hh | 9 +- .../include/ignition/common/SkeletonNode.hh | 9 +- graphics/include/ignition/common/SubMesh.hh | 11 +- graphics/src/ColladaExporter.cc | 22 ++-- graphics/src/ColladaLoader.cc | 69 +++++----- graphics/src/Dem.cc | 4 +- graphics/src/Image.cc | 14 +- graphics/src/KeyFrame.cc | 53 ++++++-- graphics/src/Material.cc | 8 +- graphics/src/Mesh.cc | 5 +- graphics/src/MeshManager.cc | 4 +- graphics/src/NodeAnimation.cc | 54 ++++---- graphics/src/NodeTransform.cc | 121 ++++++++---------- graphics/src/OBJLoader.cc | 4 +- graphics/src/Pbr.cc | 48 +------ graphics/src/STLLoader.cc | 9 +- graphics/src/SVGLoader.cc | 19 +-- graphics/src/Skeleton.cc | 115 +++++++++-------- graphics/src/SkeletonAnimation.cc | 61 +++++---- graphics/src/SkeletonNode.cc | 121 +++++++++--------- graphics/src/SubMesh.cc | 40 +----- 36 files changed, 434 insertions(+), 556 deletions(-) diff --git a/graphics/include/ignition/common/ColladaExporter.hh b/graphics/include/ignition/common/ColladaExporter.hh index 623c85a4a..93d4d41d1 100644 --- a/graphics/include/ignition/common/ColladaExporter.hh +++ b/graphics/include/ignition/common/ColladaExporter.hh @@ -23,16 +23,15 @@ #include <ignition/common/MeshExporter.hh> #include <ignition/common/graphics/Export.hh> -#include <ignition/common/SuppressWarning.hh> #include <ignition/math/Matrix4.hh> +#include <ignition/utils/ImplPtr.hh> + namespace ignition { namespace common { - class ColladaExporterPrivate; - /// \brief Class used to export Collada mesh files class IGNITION_COMMON_GRAPHICS_VISIBLE ColladaExporter : public MeshExporter { @@ -54,11 +53,8 @@ namespace ignition const std::string &_filename, bool _exportTextures, const std::vector<math::Matrix4d> &_submeshToMatrix); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \internal /// \brief Pointer to private data. - private: std::unique_ptr<ColladaExporterPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/ColladaLoader.hh b/graphics/include/ignition/common/ColladaLoader.hh index 144fba0f5..199212f3b 100644 --- a/graphics/include/ignition/common/ColladaLoader.hh +++ b/graphics/include/ignition/common/ColladaLoader.hh @@ -21,13 +21,12 @@ #include <ignition/common/graphics/Export.hh> #include <ignition/common/MeshLoader.hh> +#include <ignition/utils/ImplPtr.hh> + namespace ignition { namespace common { - // Forward declare private data class - class ColladaLoaderPrivate; - /// \class ColladaLoader ColladaLoader.hh ignition/common/ColladaLoader.hh /// \brief Class used to load Collada mesh files class IGNITION_COMMON_GRAPHICS_VISIBLE ColladaLoader : public MeshLoader @@ -45,7 +44,7 @@ namespace ignition /// \internal /// \brief Pointer to private data. - private: ColladaLoaderPrivate *dataPtr; + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/Dem.hh b/graphics/include/ignition/common/Dem.hh index 77ba3cf5b..ff83c0dd8 100644 --- a/graphics/include/ignition/common/Dem.hh +++ b/graphics/include/ignition/common/Dem.hh @@ -22,7 +22,8 @@ #include <ignition/math/Angle.hh> #include <ignition/common/graphics/Export.hh> -#include <ignition/common/SuppressWarning.hh> + +#include <ignition/utils/ImplPtr.hh> #ifdef HAVE_GDAL # include <string> @@ -34,8 +35,6 @@ namespace ignition { namespace common { - class DemPrivate; - /// \class DEM DEM.hh common/common.hh /// \brief Encapsulates a DEM (Digital Elevation Model) file. class IGNITION_COMMON_GRAPHICS_VISIBLE Dem : public HeightmapData @@ -131,11 +130,9 @@ namespace ignition /// \return 0 when the operation succeeds to open a file. private: int LoadData(); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING /// internal /// \brief Pointer to the private data. - private: std::unique_ptr<DemPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/Image.hh b/graphics/include/ignition/common/Image.hh index 8ede2598c..5c1bb6cdb 100644 --- a/graphics/include/ignition/common/Image.hh +++ b/graphics/include/ignition/common/Image.hh @@ -21,15 +21,13 @@ #include <string> #include <ignition/math/Color.hh> #include <ignition/common/graphics/Export.hh> -#include <ignition/common/SuppressWarning.hh> + +#include <ignition/utils/ImplPtr.hh> namespace ignition { namespace common { - /// \brief Forward declaration of private data class - class ImagePrivate; - /// \brief String names for the pixel formats. /// \sa Image::PixelFormat. static std::string PixelFormatNames[] = @@ -120,15 +118,13 @@ namespace ignition /// \brief Get the image as a data array /// \param[out] _data Pointer to a NULL array of char. /// \param[out] _count The resulting data array size - public: void Data(unsigned char **_data, - unsigned int &_count) const; + public: void Data(unsigned char **_data, unsigned int &_count); /// \brief Get only the RGB data from the image. This will drop the /// alpha channel if one is present. /// \param[out] _data Pointer to a NULL array of char. /// \param[out] _count The resulting data array size - public: void RGBData(unsigned char **_data, - unsigned int &_count) const; + public: void RGBData(unsigned char **_data, unsigned int &_count); /// \brief Get the width /// \return The image width @@ -178,10 +174,8 @@ namespace ignition /// \return true if image has a bitmap public: bool Valid() const; - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief Private data pointer - private: std::unique_ptr<ImagePrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/KeyFrame.hh b/graphics/include/ignition/common/KeyFrame.hh index e26f42dd7..6dfbc6354 100644 --- a/graphics/include/ignition/common/KeyFrame.hh +++ b/graphics/include/ignition/common/KeyFrame.hh @@ -19,8 +19,12 @@ #include <ignition/math/Vector3.hh> #include <ignition/math/Quaternion.hh> + +#include <ignition/utils/ImplPtr.hh> + #include <ignition/common/graphics/Export.hh> + namespace ignition { namespace common @@ -40,8 +44,8 @@ namespace ignition /// \return the time public: double Time() const; - /// \brief time of key frame - protected: double time; + /// \brief Private data pointer. + IGN_UTILS_IMPL_PTR(dataPtr) }; /// \brief A keyframe for a PoseAnimation @@ -70,20 +74,8 @@ namespace ignition /// \return The rotation amount public: const math::Quaterniond &Rotation() const; -#ifdef _WIN32 -// Disable warning C4251 which is triggered by -// std::unique_ptr -#pragma warning(push) -#pragma warning(disable: 4251) -#endif - /// \brief the translation vector - protected: math::Vector3d translate; - - /// \brief the rotation quaternion - protected: math::Quaterniond rotate; -#ifdef _WIN32 -#pragma warning(pop) -#endif + /// \brief Private data pointer. + IGN_UTILS_IMPL_PTR(dataPtr) }; /// \brief A keyframe for a NumericAnimation @@ -104,8 +96,8 @@ namespace ignition /// \return the value of the keyframe public: const double &Value() const; - /// \brief numeric value - protected: double value; + /// \brief Private data pointer. + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/Material.hh b/graphics/include/ignition/common/Material.hh index 179311ad8..4f438d59a 100644 --- a/graphics/include/ignition/common/Material.hh +++ b/graphics/include/ignition/common/Material.hh @@ -25,15 +25,13 @@ #include <ignition/common/graphics/Export.hh> #include <ignition/common/EnumIface.hh> #include <ignition/common/Pbr.hh> -#include <ignition/common/SuppressWarning.hh> + +#include <ignition/utils/ImplPtr.hh> namespace ignition { namespace common { - // Forward declare private data class - class MaterialPrivate; - /// \brief Encapsulates description of a material class IGNITION_COMMON_GRAPHICS_VISIBLE Material { @@ -283,10 +281,8 @@ namespace ignition return _out; } - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \brief destination blend factor - private: std::unique_ptr<MaterialPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + /// \brief Private data pointer. + IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/Mesh.hh b/graphics/include/ignition/common/Mesh.hh index c95430222..733a3e212 100644 --- a/graphics/include/ignition/common/Mesh.hh +++ b/graphics/include/ignition/common/Mesh.hh @@ -24,9 +24,10 @@ #include <ignition/math/Vector3.hh> #include <ignition/math/Vector2.hh> +#include <ignition/utils/ImplPtr.hh> + #include <ignition/common/graphics/Types.hh> #include <ignition/common/graphics/Export.hh> -#include <ignition/common/SuppressWarning.hh> namespace ignition { @@ -34,7 +35,6 @@ namespace ignition { class Material; class Skeleton; - class MeshPrivate; /// \class Mesh Mesh.hh ignition/common/Mesh.hh /// \brief A 3D mesh @@ -203,10 +203,8 @@ namespace ignition /// or there are no submeshes. public: double Volume() const; - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief Private data pointer. - private: std::unique_ptr<MeshPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/MeshManager.hh b/graphics/include/ignition/common/MeshManager.hh index 28e9df2e0..6bf0ee045 100644 --- a/graphics/include/ignition/common/MeshManager.hh +++ b/graphics/include/ignition/common/MeshManager.hh @@ -30,10 +30,11 @@ #include <ignition/math/Vector3.hh> #include <ignition/math/Pose3.hh> +#include <ignition/utils/ImplPtr.hh> + #include <ignition/common/graphics/Types.hh> #include <ignition/common/SingletonT.hh> #include <ignition/common/graphics/Export.hh> -#include <ignition/common/SuppressWarning.hh> namespace ignition { @@ -42,7 +43,6 @@ namespace ignition /// \brief forward declaration class Mesh; class SubMesh; - class MeshManagerPrivate; /// \class MeshManager MeshManager.hh ignition/common/MeshManager.hh /// \brief Maintains and manages all meshes @@ -284,10 +284,8 @@ namespace ignition const ignition::math::Vector2d &_p, const double _tol); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \brief Pointer to private data - private: std::unique_ptr<MeshManagerPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + /// \brief Private data pointer. + IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) /// \brief Singleton implementation private: friend class SingletonT<MeshManager>; diff --git a/graphics/include/ignition/common/NodeAnimation.hh b/graphics/include/ignition/common/NodeAnimation.hh index f6e4bc887..dd92ba528 100644 --- a/graphics/include/ignition/common/NodeAnimation.hh +++ b/graphics/include/ignition/common/NodeAnimation.hh @@ -23,14 +23,14 @@ #include <ignition/math/Matrix4.hh> #include <ignition/math/Pose3.hh> +#include <ignition/utils/ImplPtr.hh> + #include <ignition/common/graphics/Export.hh> namespace ignition { namespace common { - class NodeAnimationPrivate; - /// \class NodeAnimation NodeAnimation.hh ignition/common/NodeAnimation.hh /// \brief Node animation class IGNITION_COMMON_GRAPHICS_VISIBLE NodeAnimation @@ -109,7 +109,7 @@ namespace ignition public: double TimeAtX(const double _x) const; /// \brief Private data pointer. - private: NodeAnimationPrivate *data; + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/NodeTransform.hh b/graphics/include/ignition/common/NodeTransform.hh index e647bc0c0..62136d18d 100644 --- a/graphics/include/ignition/common/NodeTransform.hh +++ b/graphics/include/ignition/common/NodeTransform.hh @@ -21,6 +21,9 @@ #include <ignition/math/Matrix4.hh> #include <ignition/math/Vector3.hh> + +#include <ignition/utils/ImplPtr.hh> + #include <ignition/common/graphics/Export.hh> #include <ignition/common/Util.hh> @@ -28,9 +31,6 @@ namespace ignition { namespace common { - /// Forward declare private data structure. - class NodeTransformPrivate; - /// \class NodeTransform NodeTransform.hh ignition/common/NodeTransform.hh /// \brief A transformation node class IGNITION_COMMON_GRAPHICS_VISIBLE NodeTransform @@ -39,14 +39,6 @@ namespace ignition /// \param[in] _type the type of transform public: explicit NodeTransform(const NodeTransformType _type = MATRIX); - /// \brief Copy constructor - /// \param[in] _other NodeTransform to copy - public: NodeTransform(const NodeTransform &_other); - - /// \brief Copy assignment - /// \param[in] _ther NodeTransform to copy - public: NodeTransform &operator=(const NodeTransform &_other); - /// \brief Constructor /// \param[in] _mat the matrix /// \param[in] _sid identifier @@ -121,10 +113,8 @@ namespace ignition /// \return transform matrix multiplied by _m public: math::Matrix4d operator*(const math::Matrix4d &_m) const; - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \brief Data pointer - private: std::unique_ptr<NodeTransformPrivate> data; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + /// \brief Private data pointer. + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/OBJLoader.hh b/graphics/include/ignition/common/OBJLoader.hh index bb156f3f1..7267b8558 100644 --- a/graphics/include/ignition/common/OBJLoader.hh +++ b/graphics/include/ignition/common/OBJLoader.hh @@ -21,9 +21,10 @@ #include <string> #include <memory> +#include <ignition/utils/ImplPtr.hh> + #include <ignition/common/MeshLoader.hh> #include <ignition/common/graphics/Export.hh> -#include <ignition/common/SuppressWarning.hh> namespace ignition { @@ -46,11 +47,9 @@ namespace ignition /// \return Pointer to a new Mesh public: virtual Mesh *Load(const std::string &_filename); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING /// \internal - /// \brief Pointer to private data. - private: std::unique_ptr<OBJLoaderPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + /// \brief Private data pointer. + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/Pbr.hh b/graphics/include/ignition/common/Pbr.hh index 68afde020..516cbe6a4 100644 --- a/graphics/include/ignition/common/Pbr.hh +++ b/graphics/include/ignition/common/Pbr.hh @@ -18,15 +18,15 @@ #define IGNITION_COMMON_PBR_HH_ #include <string> + +#include <ignition/utils/ImplPtr.hh> + #include <ignition/common/graphics/Export.hh> namespace ignition { namespace common { - // Forward declarations. - class PbrPrivate; - /// \brief Type of PBR workflow. enum class PbrType : int { @@ -57,27 +57,6 @@ namespace common /// \brief Default constructor public: Pbr(); - /// \brief Copy constructor - /// \param[in] _pbr Pbr to copy. - public: Pbr(const Pbr &_pbr); - - /// \brief Move constructor - /// \param[in] _pbr to move. - public: Pbr(Pbr &&_pbr) noexcept; - - /// \brief Destructor - public: ~Pbr(); - - /// \brief Assignment operator. - /// \param[in] _pbr The pbr material to set values from. - /// \return *this - public: Pbr &operator=(const Pbr &_pbr); - - /// \brief Move assignment operator. - /// \param[in] _pbr The pbr material to move from. - /// \return *this - public: Pbr &operator=(Pbr &&_pbr); - /// \brief Return true if both Pbr objects contain the same values. /// \param[_in] _pbr Pbr value to compare. /// \returen True if 'this' == _pbr. @@ -234,7 +213,7 @@ namespace common public: void SetType(PbrType _type); /// \brief Private data pointer. - private: PbrPrivate *dataPtr = nullptr; + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/STLLoader.hh b/graphics/include/ignition/common/STLLoader.hh index d6e47642d..021c3205f 100644 --- a/graphics/include/ignition/common/STLLoader.hh +++ b/graphics/include/ignition/common/STLLoader.hh @@ -20,6 +20,8 @@ #include <stdint.h> #include <string> +#include <ignition/utils/ImplPtr.hh> + #include "ignition/common/MeshLoader.hh" #include "ignition/common/graphics/Export.hh" @@ -88,6 +90,9 @@ namespace ignition /// \param[out] the value /// \return true private: bool FloatRead(FILE *_filein, double &_value); + + /// \brief Private data pointer. + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/SVGLoader.hh b/graphics/include/ignition/common/SVGLoader.hh index 39589e2ca..429286a1d 100644 --- a/graphics/include/ignition/common/SVGLoader.hh +++ b/graphics/include/ignition/common/SVGLoader.hh @@ -24,17 +24,15 @@ #include <ignition/math/Vector2.hh> #include <ignition/math/Matrix3.hh> +#include <ignition/utils/ImplPtr.hh> + #include <ignition/common/graphics/Export.hh> #include <ignition/common/Console.hh> -#include <ignition/common/SuppressWarning.hh> namespace ignition { namespace common { - // Forward declare private data class - class SVGLoaderPrivate; - /// \brief SVG command data structure class IGNITION_COMMON_GRAPHICS_VISIBLE SVGCommand { @@ -123,11 +121,9 @@ namespace ignition public: void DumpPaths(const std::vector<SVGPath> &_paths, std::ostream &_out) const; - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING /// \internal - /// \brief Pointer to private data - private: std::unique_ptr<SVGLoaderPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + /// \brief Private data pointer. + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/Skeleton.hh b/graphics/include/ignition/common/Skeleton.hh index 1921905f8..015f33485 100644 --- a/graphics/include/ignition/common/Skeleton.hh +++ b/graphics/include/ignition/common/Skeleton.hh @@ -23,6 +23,9 @@ #include <utility> #include <ignition/math/Matrix4.hh> + +#include <ignition/utils/ImplPtr.hh> + #include <ignition/common/SkeletonNode.hh> #include <ignition/common/graphics/Export.hh> @@ -30,8 +33,6 @@ namespace ignition { namespace common { - /// Forward declarations - class SkeletonPrivate; class SkeletonAnimation; /// \class Skeleton Skeleton.hh ignition/common/Skeleton.hh @@ -170,8 +171,8 @@ namespace ignition /// using breadth first traversal private: void BuildNodeMap(); - /// \brief Private data pointer - private: SkeletonPrivate *data; + /// \brief Private data pointer. + IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/SkeletonAnimation.hh b/graphics/include/ignition/common/SkeletonAnimation.hh index 1a703679f..ca096bc35 100644 --- a/graphics/include/ignition/common/SkeletonAnimation.hh +++ b/graphics/include/ignition/common/SkeletonAnimation.hh @@ -24,6 +24,8 @@ #include <ignition/math/Matrix4.hh> #include <ignition/math/Pose3.hh> +#include <ignition/utils/ImplPtr.hh> + #include <ignition/common/NodeAnimation.hh> #include <ignition/common/graphics/Export.hh> @@ -31,9 +33,6 @@ namespace ignition { namespace common { - /// Forward declare private data class - class SkeletonAnimationPrivate; - /// \class SkeletonAnimation SkeletonAnimation.hh /// ignition/common/SkeletonAnimation.hh /// \brief Skeleton animation @@ -126,8 +125,8 @@ namespace ignition /// \return the duration in seconds public: double Length() const; - /// \brief Private data pointer - private: SkeletonAnimationPrivate *data; + /// \brief Private data pointer. + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/ignition/common/SkeletonNode.hh b/graphics/include/ignition/common/SkeletonNode.hh index e275f58bc..3983f5e0f 100644 --- a/graphics/include/ignition/common/SkeletonNode.hh +++ b/graphics/include/ignition/common/SkeletonNode.hh @@ -21,6 +21,8 @@ #include <string> #include <vector> +#include <ignition/utils/ImplPtr.hh> + #include <ignition/common/NodeTransform.hh> #include <ignition/common/graphics/Export.hh> @@ -28,9 +30,6 @@ namespace ignition { namespace common { - /// Forward declare private data class - class SkeletonNodePrivate; - /// \class SkeletonNode Skeleton.hh ignition/common/SkeletonNode.hh /// \brief A skeleton node class IGNITION_COMMON_GRAPHICS_VISIBLE SkeletonNode @@ -190,8 +189,8 @@ namespace ignition /// \return the array of transform (These are the same as the raw trans) public: std::vector<NodeTransform> Transforms() const; - /// \brief Private data pointer - private: SkeletonNodePrivate *data; + /// \brief Private data pointer. + IGN_UTILS_IMPL_PTR(dataPtr) }; typedef std::map<unsigned int, SkeletonNode*> SkeletonNodeMap; diff --git a/graphics/include/ignition/common/SubMesh.hh b/graphics/include/ignition/common/SubMesh.hh index 0a7ee0018..3b4c7721c 100644 --- a/graphics/include/ignition/common/SubMesh.hh +++ b/graphics/include/ignition/common/SubMesh.hh @@ -24,6 +24,8 @@ #include <ignition/math/Vector3.hh> #include <ignition/math/Vector2.hh> +#include <ignition/utils/ImplPtr.hh> + #include <ignition/common/graphics/Types.hh> #include <ignition/common/graphics/Export.hh> #include <ignition/common/SuppressWarning.hh> @@ -32,7 +34,6 @@ namespace ignition { namespace common { - class SubMeshPrivate; class Material; class NodeAssignment; @@ -68,10 +69,6 @@ namespace ignition /// \param _name Name of the submesh. public: explicit SubMesh(const std::string &_name); - /// \brief Copy Constructor - /// \brief _other Other mesh object - public: SubMesh(const SubMesh &_other); - /// \brief Destructor public: virtual ~SubMesh(); @@ -396,10 +393,8 @@ namespace ignition /// the primitive type is not TRIANGLES, or there are no triangles. public: double Volume() const; - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief Private data pointer. - private: std::unique_ptr<SubMeshPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_IMPL_PTR(dataPtr) }; /// \brief Vertex to node weighted assignement for skeleton animation diff --git a/graphics/src/ColladaExporter.cc b/graphics/src/ColladaExporter.cc index 7f28a4112..26936ba51 100644 --- a/graphics/src/ColladaExporter.cc +++ b/graphics/src/ColladaExporter.cc @@ -69,7 +69,7 @@ static void LogTinyXml2DocumentError( } /// Private data for the ColladaExporter class -class ignition::common::ColladaExporterPrivate +class ignition::common::ColladaExporter::Implementation { /// \brief Geometry types public: enum GeometryType {POSITION, NORMAL, UVMAP}; @@ -141,7 +141,7 @@ class ignition::common::ColladaExporterPrivate ////////////////////////////////////////////////// ColladaExporter::ColladaExporter() -: MeshExporter(), dataPtr(new ColladaExporterPrivate) +: MeshExporter(), dataPtr(ignition::utils::MakeImpl<Implementation>()) { } @@ -276,7 +276,8 @@ void ColladaExporter::Export(const Mesh *_mesh, const std::string &_filename, } ////////////////////////////////////////////////// -void ColladaExporterPrivate::ExportAsset(tinyxml2::XMLElement *_assetXml) +void ColladaExporter::Implementation::ExportAsset( + tinyxml2::XMLElement *_assetXml) { tinyxml2::XMLElement *unitXml = _assetXml->GetDocument()->NewElement("unit"); unitXml->SetAttribute("meter", "1"); @@ -290,7 +291,7 @@ void ColladaExporterPrivate::ExportAsset(tinyxml2::XMLElement *_assetXml) } ////////////////////////////////////////////////// -void ColladaExporterPrivate::ExportGeometrySource( +void ColladaExporter::Implementation::ExportGeometrySource( const ignition::common::SubMesh *_subMesh, tinyxml2::XMLElement *_meshXml, GeometryType _type, const char *_meshID) { @@ -395,7 +396,7 @@ void ColladaExporterPrivate::ExportGeometrySource( } ////////////////////////////////////////////////// -void ColladaExporterPrivate::ExportGeometries( +void ColladaExporter::Implementation::ExportGeometries( tinyxml2::XMLElement *_libraryGeometriesXml) { for (unsigned int i = 0; i < this->subMeshCount; ++i) @@ -497,7 +498,7 @@ void ColladaExporterPrivate::ExportGeometries( } ////////////////////////////////////////////////// -int ColladaExporterPrivate::ExportImages( +int ColladaExporter::Implementation::ExportImages( tinyxml2::XMLElement *_libraryImagesXml) { int imageCount = 0; @@ -544,7 +545,7 @@ int ColladaExporterPrivate::ExportImages( } ////////////////////////////////////////////////// -void ColladaExporterPrivate::ExportMaterials( +void ColladaExporter::Implementation::ExportMaterials( tinyxml2::XMLElement *_libraryMaterialsXml) { for (unsigned int i = 0; i < this->materialCount; ++i) @@ -566,7 +567,7 @@ void ColladaExporterPrivate::ExportMaterials( } ////////////////////////////////////////////////// -void ColladaExporterPrivate::ExportEffects( +void ColladaExporter::Implementation::ExportEffects( tinyxml2::XMLElement *_libraryEffectsXml) { for (unsigned int i = 0; i < this->materialCount; ++i) @@ -752,7 +753,7 @@ void ColladaExporterPrivate::ExportEffects( } ////////////////////////////////////////////////// -void ColladaExporterPrivate::ExportVisualScenes( +void ColladaExporter::Implementation::ExportVisualScenes( tinyxml2::XMLElement *_libraryVisualScenesXml, const std::vector<math::Matrix4d> &_submeshToMatrix) { @@ -840,7 +841,8 @@ void ColladaExporterPrivate::ExportVisualScenes( } ////////////////////////////////////////////////// -void ColladaExporterPrivate::ExportScene(tinyxml2::XMLElement *_sceneXml) +void ColladaExporter::Implementation::ExportScene( + tinyxml2::XMLElement *_sceneXml) { tinyxml2::XMLElement *instanceVisualSceneXml = _sceneXml->GetDocument()->NewElement("instance_visual_scene"); diff --git a/graphics/src/ColladaLoader.cc b/graphics/src/ColladaLoader.cc index 9bfe3206c..7f5899743 100644 --- a/graphics/src/ColladaLoader.cc +++ b/graphics/src/ColladaLoader.cc @@ -48,7 +48,7 @@ namespace ignition namespace common { /// \brief Private data for the ColladaLoader class - class ColladaLoaderPrivate + class ColladaLoader::Implementation { /// \brief scaling factor public: double meter; @@ -360,7 +360,7 @@ struct Vector2dHash ////////////////////////////////////////////////// ColladaLoader::ColladaLoader() -: MeshLoader(), dataPtr(new ColladaLoaderPrivate) +: MeshLoader(), dataPtr(ignition::utils::MakeImpl<Implementation>()) { this->dataPtr->meter = 1.0; } @@ -368,8 +368,6 @@ ColladaLoader::ColladaLoader() ////////////////////////////////////////////////// ColladaLoader::~ColladaLoader() { - delete this->dataPtr; - this->dataPtr = 0; } ////////////////////////////////////////////////// @@ -434,7 +432,7 @@ Mesh *ColladaLoader::Load(const std::string &_filename) } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadScene(Mesh *_mesh) +void ColladaLoader::Implementation::LoadScene(Mesh *_mesh) { auto *sceneXml = this->colladaXml->FirstChildElement("scene"); std::string sceneURL = @@ -458,7 +456,8 @@ void ColladaLoaderPrivate::LoadScene(Mesh *_mesh) } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadNode(tinyxml2::XMLElement *_elem, Mesh *_mesh, +void ColladaLoader::Implementation::LoadNode( + tinyxml2::XMLElement *_elem, Mesh *_mesh, const ignition::math::Matrix4d &_transform) { tinyxml2::XMLElement *nodeXml; @@ -604,7 +603,7 @@ void ColladaLoaderPrivate::LoadNode(tinyxml2::XMLElement *_elem, Mesh *_mesh, } ///////////////////////////////////////////////// -ignition::math::Matrix4d ColladaLoaderPrivate::LoadNodeTransform( +ignition::math::Matrix4d ColladaLoader::Implementation::LoadNodeTransform( tinyxml2::XMLElement *_elem) { ignition::math::Matrix4d transform(ignition::math::Matrix4d::Identity); @@ -670,7 +669,8 @@ ignition::math::Matrix4d ColladaLoaderPrivate::LoadNodeTransform( } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadController(tinyxml2::XMLElement *_contrXml, +void ColladaLoader::Implementation::LoadController( + tinyxml2::XMLElement *_contrXml, std::vector<tinyxml2::XMLElement *> _skelXmls, const ignition::math::Matrix4d &_transform, Mesh *_mesh) @@ -908,7 +908,7 @@ void ColladaLoaderPrivate::LoadController(tinyxml2::XMLElement *_contrXml, } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadAnimations(tinyxml2::XMLElement *_xml, +void ColladaLoader::Implementation::LoadAnimations(tinyxml2::XMLElement *_xml, SkeletonPtr _skel) { tinyxml2::XMLElement *childXml = _xml->FirstChildElement("animation"); @@ -925,7 +925,7 @@ void ColladaLoaderPrivate::LoadAnimations(tinyxml2::XMLElement *_xml, } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadAnimationSet(tinyxml2::XMLElement *_xml, +void ColladaLoader::Implementation::LoadAnimationSet(tinyxml2::XMLElement *_xml, SkeletonPtr _skel) { std::stringstream animName; @@ -1130,7 +1130,7 @@ void ColladaLoaderPrivate::LoadAnimationSet(tinyxml2::XMLElement *_xml, } ///////////////////////////////////////////////// -SkeletonNode *ColladaLoaderPrivate::LoadSingleSkeletonNode( +SkeletonNode *ColladaLoader::Implementation::LoadSingleSkeletonNode( tinyxml2::XMLElement *_xml, SkeletonNode *_parent) { if (nullptr == _xml) @@ -1164,7 +1164,7 @@ SkeletonNode *ColladaLoaderPrivate::LoadSingleSkeletonNode( } ///////////////////////////////////////////////// -SkeletonNode *ColladaLoaderPrivate::LoadSkeletonNodes( +SkeletonNode *ColladaLoader::Implementation::LoadSkeletonNodes( tinyxml2::XMLElement *_xml, SkeletonNode *_parent) { if (nullptr == _xml) @@ -1200,8 +1200,8 @@ SkeletonNode *ColladaLoaderPrivate::LoadSkeletonNodes( } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::SetSkeletonNodeTransform(tinyxml2::XMLElement *_elem, - SkeletonNode *_node) +void ColladaLoader::Implementation::SetSkeletonNodeTransform( + tinyxml2::XMLElement *_elem, SkeletonNode *_node) { if (nullptr == _elem) { @@ -1308,7 +1308,7 @@ void ColladaLoaderPrivate::SetSkeletonNodeTransform(tinyxml2::XMLElement *_elem, } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadGeometry(tinyxml2::XMLElement *_xml, +void ColladaLoader::Implementation::LoadGeometry(tinyxml2::XMLElement *_xml, const ignition::math::Matrix4d &_transform, Mesh *_mesh) { tinyxml2::XMLElement *meshXml = _xml->FirstChildElement("mesh"); @@ -1340,14 +1340,14 @@ void ColladaLoaderPrivate::LoadGeometry(tinyxml2::XMLElement *_xml, } ///////////////////////////////////////////////// -tinyxml2::XMLElement *ColladaLoaderPrivate::ElementId(const std::string &_name, - const std::string &_id) +tinyxml2::XMLElement *ColladaLoader::Implementation::ElementId( + const std::string &_name, const std::string &_id) { return this->ElementId(this->colladaXml, _name, _id); } ///////////////////////////////////////////////// -tinyxml2::XMLElement *ColladaLoaderPrivate::ElementId( +tinyxml2::XMLElement *ColladaLoader::Implementation::ElementId( tinyxml2::XMLElement *_parent, const std::string &_name, const std::string &_id) { @@ -1378,7 +1378,7 @@ tinyxml2::XMLElement *ColladaLoaderPrivate::ElementId( } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadVertices(const std::string &_id, +void ColladaLoader::Implementation::LoadVertices(const std::string &_id, const ignition::math::Matrix4d &_transform, std::vector<ignition::math::Vector3d> &_verts, std::vector<ignition::math::Vector3d> &_norms) @@ -1389,7 +1389,7 @@ void ColladaLoaderPrivate::LoadVertices(const std::string &_id, } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadVertices(const std::string &_id, +void ColladaLoader::Implementation::LoadVertices(const std::string &_id, const ignition::math::Matrix4d &_transform, std::vector<ignition::math::Vector3d> &_verts, std::vector<ignition::math::Vector3d> &_norms, @@ -1424,7 +1424,7 @@ void ColladaLoaderPrivate::LoadVertices(const std::string &_id, } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadPositions(const std::string &_id, +void ColladaLoader::Implementation::LoadPositions(const std::string &_id, const ignition::math::Matrix4d &_transform, std::vector<ignition::math::Vector3d> &_values, std::map<unsigned int, unsigned int> &_duplicates) @@ -1502,7 +1502,7 @@ void ColladaLoaderPrivate::LoadPositions(const std::string &_id, } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadNormals(const std::string &_id, +void ColladaLoader::Implementation::LoadNormals(const std::string &_id, const ignition::math::Matrix4d &_transform, std::vector<ignition::math::Vector3d> &_values, std::map<unsigned int, unsigned int> &_duplicates) @@ -1583,7 +1583,7 @@ void ColladaLoaderPrivate::LoadNormals(const std::string &_id, } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadTexCoords(const std::string &_id, +void ColladaLoader::Implementation::LoadTexCoords(const std::string &_id, std::vector<ignition::math::Vector2d> &_values, std::map<unsigned int, unsigned int> &_duplicates) { @@ -1734,7 +1734,8 @@ void ColladaLoaderPrivate::LoadTexCoords(const std::string &_id, } ///////////////////////////////////////////////// -MaterialPtr ColladaLoaderPrivate::LoadMaterial(const std::string &_name) +MaterialPtr ColladaLoader::Implementation::LoadMaterial( + const std::string &_name) { if (this->materialIds.find(_name) != this->materialIds.end()) @@ -1855,8 +1856,8 @@ MaterialPtr ColladaLoaderPrivate::LoadMaterial(const std::string &_name) } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadColorOrTexture(tinyxml2::XMLElement *_elem, - const std::string &_type, MaterialPtr _mat) +void ColladaLoader::Implementation::LoadColorOrTexture( + tinyxml2::XMLElement *_elem, const std::string &_type, MaterialPtr _mat) { if (!_elem || !_elem->FirstChildElement(_type.c_str())) return; @@ -1952,7 +1953,8 @@ void ColladaLoaderPrivate::LoadColorOrTexture(tinyxml2::XMLElement *_elem, } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadPolylist(tinyxml2::XMLElement *_polylistXml, +void ColladaLoader::Implementation::LoadPolylist( + tinyxml2::XMLElement *_polylistXml, const ignition::math::Matrix4d &_transform, Mesh *_mesh) { @@ -2287,7 +2289,8 @@ void ColladaLoaderPrivate::LoadPolylist(tinyxml2::XMLElement *_polylistXml, } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadTriangles(tinyxml2::XMLElement *_trianglesXml, +void ColladaLoader::Implementation::LoadTriangles( + tinyxml2::XMLElement *_trianglesXml, const ignition::math::Matrix4d &_transform, Mesh *_mesh) { std::unique_ptr<SubMesh> subMesh(new SubMesh); @@ -2605,7 +2608,7 @@ void ColladaLoaderPrivate::LoadTriangles(tinyxml2::XMLElement *_trianglesXml, } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadLines(tinyxml2::XMLElement *_xml, +void ColladaLoader::Implementation::LoadLines(tinyxml2::XMLElement *_xml, const ignition::math::Matrix4d &_transform, Mesh *_mesh) { std::unique_ptr<SubMesh> subMesh(new SubMesh); @@ -2641,7 +2644,7 @@ void ColladaLoaderPrivate::LoadLines(tinyxml2::XMLElement *_xml, } ///////////////////////////////////////////////// -float ColladaLoaderPrivate::LoadFloat(tinyxml2::XMLElement *_elem) +float ColladaLoader::Implementation::LoadFloat(tinyxml2::XMLElement *_elem) { float value = 0; @@ -2655,7 +2658,7 @@ float ColladaLoaderPrivate::LoadFloat(tinyxml2::XMLElement *_elem) } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::LoadTransparent(tinyxml2::XMLElement *_elem, +void ColladaLoader::Implementation::LoadTransparent(tinyxml2::XMLElement *_elem, MaterialPtr _mat) { const char *opaqueCStr = _elem->Attribute("opaque"); @@ -2761,7 +2764,7 @@ void ColladaLoaderPrivate::LoadTransparent(tinyxml2::XMLElement *_elem, } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::MergeSkeleton(SkeletonPtr _skeleton, +void ColladaLoader::Implementation::MergeSkeleton(SkeletonPtr _skeleton, SkeletonNode *_mergeNode) { if (nullptr == _skeleton) @@ -2835,7 +2838,7 @@ void ColladaLoaderPrivate::MergeSkeleton(SkeletonPtr _skeleton, } ///////////////////////////////////////////////// -void ColladaLoaderPrivate::ApplyInvBindTransform(SkeletonPtr _skeleton) +void ColladaLoader::Implementation::ApplyInvBindTransform(SkeletonPtr _skeleton) { std::list<SkeletonNode *> queue; queue.push_back(_skeleton->RootNode()); diff --git a/graphics/src/Dem.cc b/graphics/src/Dem.cc index 00ec71942..ad52f023c 100644 --- a/graphics/src/Dem.cc +++ b/graphics/src/Dem.cc @@ -32,7 +32,7 @@ using namespace common; #ifdef HAVE_GDAL -class ignition::common::DemPrivate +class ignition::common::Dem::Implementation { /// \brief A set of associated raster bands. public: GDALDataset *dataSet; @@ -61,7 +61,7 @@ class ignition::common::DemPrivate ////////////////////////////////////////////////// Dem::Dem() - : dataPtr(new DemPrivate) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { this->dataPtr->dataSet = nullptr; GDALAllRegister(); diff --git a/graphics/src/Image.cc b/graphics/src/Image.cc index 11f142564..617f023ed 100644 --- a/graphics/src/Image.cc +++ b/graphics/src/Image.cc @@ -33,7 +33,7 @@ namespace ignition namespace common { /// \brief Private data class - class ImagePrivate + class Image::Implementation { /// \brief bitmap data public: FIBITMAP *bitmap; @@ -59,7 +59,7 @@ static int count = 0; ////////////////////////////////////////////////// Image::Image(const std::string &_filename) - : dataPtr(new ImagePrivate) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { if (count == 0) FreeImage_Initialise(); @@ -219,7 +219,7 @@ int Image::Pitch() const } ////////////////////////////////////////////////// -void Image::RGBData(unsigned char **_data, unsigned int &_count) const +void Image::RGBData(unsigned char **_data, unsigned int &_count) { FIBITMAP *tmp = this->dataPtr->bitmap; if (FREEIMAGE_COLORORDER != FREEIMAGE_COLORORDER_RGB) @@ -232,7 +232,7 @@ void Image::RGBData(unsigned char **_data, unsigned int &_count) const } ////////////////////////////////////////////////// -void Image::Data(unsigned char **_data, unsigned int &_count) const +void Image::Data(unsigned char **_data, unsigned int &_count) { if (FREEIMAGE_COLORORDER != FREEIMAGE_COLORORDER_RGB) { @@ -246,8 +246,8 @@ void Image::Data(unsigned char **_data, unsigned int &_count) const } ////////////////////////////////////////////////// -void ImagePrivate::DataImpl(unsigned char **_data, unsigned int &_count, - FIBITMAP *_img) const +void Image::Implementation::DataImpl( + unsigned char **_data, unsigned int &_count, FIBITMAP *_img) const { int redmask = FI_RGBA_RED_MASK; // int bluemask = 0x00ff0000; @@ -533,7 +533,7 @@ Image::PixelFormatType Image::ConvertPixelFormat(const std::string &_format) } ////////////////////////////////////////////////// -FIBITMAP* ImagePrivate::SwapRedBlue(const unsigned int &_width, +FIBITMAP* Image::Implementation::SwapRedBlue(const unsigned int &_width, const unsigned int &_height) { FIBITMAP *copy = FreeImage_Copy(this->bitmap, 0, 0, _width, _height); diff --git a/graphics/src/KeyFrame.cc b/graphics/src/KeyFrame.cc index 66ea2b36b..1c3d87b3a 100644 --- a/graphics/src/KeyFrame.cc +++ b/graphics/src/KeyFrame.cc @@ -16,13 +16,38 @@ */ #include <ignition/common/KeyFrame.hh> -using namespace ignition; -using namespace common; +namespace ignition { +namespace common { + +///////////////////////////////////////////////// +class KeyFrame::Implementation +{ + /// \brief time of key frame + public: double time; +}; + +///////////////////////////////////////////////// +class PoseKeyFrame::Implementation +{ + /// \brief the translation vector + public: math::Vector3d translate; + + /// \brief the rotation quaternion + public: math::Quaterniond rotate; +}; + +///////////////////////////////////////////////// +class NumericKeyFrame::Implementation +{ + /// \brief numeric value + public: double value; +}; ///////////////////////////////////////////////// KeyFrame::KeyFrame(const double _time) -: time(_time) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { + this->dataPtr->time = _time; } ///////////////////////////////////////////////// @@ -33,13 +58,14 @@ KeyFrame::~KeyFrame() ///////////////////////////////////////////////// double KeyFrame::Time() const { - return this->time; + return this->dataPtr->time; } ///////////////////////////////////////////////// PoseKeyFrame::PoseKeyFrame(const double _time) -: KeyFrame(_time) +: KeyFrame(_time), + dataPtr(ignition::utils::MakeImpl<Implementation>()) { } @@ -51,30 +77,31 @@ PoseKeyFrame::~PoseKeyFrame() ///////////////////////////////////////////////// void PoseKeyFrame::Translation(const math::Vector3d &_trans) { - this->translate = _trans; + this->dataPtr->translate = _trans; } ///////////////////////////////////////////////// const math::Vector3d &PoseKeyFrame::Translation() const { - return this->translate; + return this->dataPtr->translate; } ///////////////////////////////////////////////// void PoseKeyFrame::Rotation(const math::Quaterniond &_rot) { - this->rotate = _rot; + this->dataPtr->rotate = _rot; } ///////////////////////////////////////////////// const math::Quaterniond &PoseKeyFrame::Rotation() const { - return this->rotate; + return this->dataPtr->rotate; } ///////////////////////////////////////////////// NumericKeyFrame::NumericKeyFrame(const double _time) -: KeyFrame(_time) +: KeyFrame(_time), + dataPtr(ignition::utils::MakeImpl<Implementation>()) { } @@ -86,11 +113,13 @@ NumericKeyFrame::~NumericKeyFrame() ///////////////////////////////////////////////// void NumericKeyFrame::Value(const double &_value) { - this->value = _value; + this->dataPtr->value = _value; } ///////////////////////////////////////////////// const double &NumericKeyFrame::Value() const { - return this->value; + return this->dataPtr->value; } +} // namespace ignition +} // namespace common diff --git a/graphics/src/Material.cc b/graphics/src/Material.cc index c717761de..8c2f3a507 100644 --- a/graphics/src/Material.cc +++ b/graphics/src/Material.cc @@ -32,7 +32,7 @@ IGN_ENUM(blendModeIface, Material::BlendMode, "ADD", "MODULATE", "REPLACE") /// \brief Private data for Material -class ignition::common::MaterialPrivate +class ignition::common::Material::Implementation { /// \brief the name of the material public: std::string name; @@ -98,11 +98,11 @@ class ignition::common::MaterialPrivate public: std::unique_ptr<Pbr> pbr; }; -unsigned int MaterialPrivate::counter = 0; +unsigned int Material::Implementation::counter = 0; ////////////////////////////////////////////////// Material::Material() -: dataPtr(new MaterialPrivate) +: dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { this->dataPtr->name = "ignition_material_" + std::to_string(this->dataPtr->counter++); @@ -116,7 +116,7 @@ Material::Material() ////////////////////////////////////////////////// Material::Material(const math::Color &_clr) -: dataPtr(new MaterialPrivate) +: dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { this->dataPtr->name = "ignition_material_" + std::to_string(this->dataPtr->counter++); diff --git a/graphics/src/Mesh.cc b/graphics/src/Mesh.cc index d8f58d838..e8b9708cc 100644 --- a/graphics/src/Mesh.cc +++ b/graphics/src/Mesh.cc @@ -30,7 +30,7 @@ using namespace ignition; using namespace common; /// \brief Private data for Mesh -class ignition::common::MeshPrivate +class ignition::common::Mesh::Implementation { /// \brief The name of the mesh public: std::string name; @@ -50,7 +50,7 @@ class ignition::common::MeshPrivate ////////////////////////////////////////////////// Mesh::Mesh() -: dataPtr(new MeshPrivate) +: dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { this->dataPtr->name = "unknown"; this->dataPtr->skeleton = NULL; @@ -59,7 +59,6 @@ Mesh::Mesh() ////////////////////////////////////////////////// Mesh::~Mesh() { - this->dataPtr->materials.clear(); } ////////////////////////////////////////////////// diff --git a/graphics/src/MeshManager.cc b/graphics/src/MeshManager.cc index 9ef187ecf..1ec18b975 100644 --- a/graphics/src/MeshManager.cc +++ b/graphics/src/MeshManager.cc @@ -39,7 +39,7 @@ using namespace ignition::common; -class ignition::common::MeshManagerPrivate +class ignition::common::MeshManager::Implementation { #ifdef _WIN32 // Disable warning C4251 @@ -73,7 +73,7 @@ class ignition::common::MeshManagerPrivate ////////////////////////////////////////////////// MeshManager::MeshManager() - : dataPtr(new MeshManagerPrivate) +: dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { // Create some basic shapes this->CreatePlane("unit_plane", diff --git a/graphics/src/NodeAnimation.cc b/graphics/src/NodeAnimation.cc index c77677408..e5b526e17 100644 --- a/graphics/src/NodeAnimation.cc +++ b/graphics/src/NodeAnimation.cc @@ -22,7 +22,7 @@ using namespace ignition; using namespace common; /// \brief NodeAnimation private data -class ignition::common::NodeAnimationPrivate +class ignition::common::NodeAnimation::Implementation { /// \brief the name of the animation public: std::string name; @@ -31,45 +31,41 @@ class ignition::common::NodeAnimationPrivate public: std::map<double, math::Matrix4d> keyFrames; /// \brief the duration of the animations (time of last key frame) - public: double length; + public: double length = 0.0; }; ////////////////////////////////////////////////// NodeAnimation::NodeAnimation(const std::string &_name) -: data(new NodeAnimationPrivate) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { - this->data->name = _name; - this->data->length = 0.0; + this->dataPtr->name = _name; } ////////////////////////////////////////////////// NodeAnimation::~NodeAnimation() { - this->data->keyFrames.clear(); - delete this->data; - this->data = NULL; } ////////////////////////////////////////////////// void NodeAnimation::SetName(const std::string &_name) { - this->data->name = _name; + this->dataPtr->name = _name; } ////////////////////////////////////////////////// std::string NodeAnimation::Name() const { - return this->data->name; + return this->dataPtr->name; } ////////////////////////////////////////////////// void NodeAnimation::AddKeyFrame(const double _time, const math::Matrix4d &_trans) { - if (_time > this->data->length) - this->data->length = _time; + if (_time > this->dataPtr->length) + this->dataPtr->length = _time; - this->data->keyFrames[_time] = _trans; + this->dataPtr->keyFrames[_time] = _trans; } ////////////////////////////////////////////////// @@ -84,14 +80,14 @@ void NodeAnimation::AddKeyFrame(const double _time, const math::Pose3d &_pose) ////////////////////////////////////////////////// unsigned int NodeAnimation::FrameCount() const { - return this->data->keyFrames.size(); + return this->dataPtr->keyFrames.size(); } ////////////////////////////////////////////////// void NodeAnimation::KeyFrame(const unsigned int _i, double &_time, math::Matrix4d &_trans) const { - if (_i >= this->data->keyFrames.size()) + if (_i >= this->dataPtr->keyFrames.size()) { ignerr << "Invalid key frame index " << _i << "\n"; _time = -1.0; @@ -99,7 +95,7 @@ void NodeAnimation::KeyFrame(const unsigned int _i, double &_time, else { std::map<double, math::Matrix4d>::const_iterator iter = - this->data->keyFrames.begin(); + this->dataPtr->keyFrames.begin(); std::advance(iter, _i); @@ -122,33 +118,33 @@ std::pair<double, math::Matrix4d> NodeAnimation::KeyFrame( ////////////////////////////////////////////////// double NodeAnimation::Length() const { - return this->data->length; + return this->dataPtr->length; } ////////////////////////////////////////////////// math::Matrix4d NodeAnimation::FrameAt(double _time, bool _loop) const { double time = _time; - if (time > this->data->length) + if (time > this->dataPtr->length) { if (_loop) { - while (time > this->data->length) - time = time - this->data->length; + while (time > this->dataPtr->length) + time = time - this->dataPtr->length; } else { - time = this->data->length; + time = this->dataPtr->length; } } - if (math::equal(time, this->data->length)) - return this->data->keyFrames.rbegin()->second; + if (math::equal(time, this->dataPtr->length)) + return this->dataPtr->keyFrames.rbegin()->second; std::map<double, math::Matrix4d>::const_iterator it1 = - this->data->keyFrames.upper_bound(time); + this->dataPtr->keyFrames.upper_bound(time); - if (it1 == this->data->keyFrames.begin() || math::equal(it1->first, time)) + if (it1 == this->dataPtr->keyFrames.begin() || math::equal(it1->first, time)) return it1->second; std::map<double, math::Matrix4d>::const_iterator it2 = it1--; @@ -190,8 +186,8 @@ math::Matrix4d NodeAnimation::FrameAt(double _time, bool _loop) const void NodeAnimation::Scale(const double _scale) { for (std::map<double, math::Matrix4d>::iterator iter = - this->data->keyFrames.begin(); - iter != this->data->keyFrames.end(); ++iter) + this->dataPtr->keyFrames.begin(); + iter != this->dataPtr->keyFrames.end(); ++iter) { math::Matrix4d *mat = &iter->second; math::Vector3d pos = mat->Translation(); @@ -203,12 +199,12 @@ void NodeAnimation::Scale(const double _scale) double NodeAnimation::TimeAtX(const double _x) const { std::map<double, math::Matrix4d>::const_iterator it1 = - this->data->keyFrames.begin(); + this->dataPtr->keyFrames.begin(); while (it1->second.Translation().X() < _x) ++it1; - if (it1 == this->data->keyFrames.begin() || + if (it1 == this->dataPtr->keyFrames.begin() || math::equal(it1->second.Translation().X(), _x)) { return it1->first; diff --git a/graphics/src/NodeTransform.cc b/graphics/src/NodeTransform.cc index bb03e2adf..ff787c6c9 100644 --- a/graphics/src/NodeTransform.cc +++ b/graphics/src/NodeTransform.cc @@ -20,7 +20,7 @@ using namespace ignition; using namespace common; /// \brief Private data for NodeTransform -class ignition::common::NodeTransformPrivate +class ignition::common::NodeTransform::Implementation { /// \brief the sid public: std::string sid; @@ -37,35 +37,21 @@ class ignition::common::NodeTransformPrivate ////////////////////////////////////////////////// NodeTransform::NodeTransform(const NodeTransformType _type) - : data(new NodeTransformPrivate) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { - this->data->sid = "_default_"; - this->data->type = _type; - this->data->transform = math::Matrix4d::Identity; + this->dataPtr->sid = "_default_"; + this->dataPtr->type = _type; + this->dataPtr->transform = math::Matrix4d::Identity; } ////////////////////////////////////////////////// NodeTransform::NodeTransform(const math::Matrix4d &_mat, const std::string &_sid, const NodeTransformType _type) - : data(new NodeTransformPrivate) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { - this->data->sid = _sid; - this->data->type = _type; - this->data->transform = _mat; -} - -////////////////////////////////////////////////// -NodeTransform::NodeTransform(const NodeTransform &_other) - : data(new NodeTransformPrivate(*_other.data)) -{ - // do nothing -} - -////////////////////////////////////////////////// -NodeTransform &NodeTransform::operator=(const NodeTransform &_other) -{ - this->data.reset(new NodeTransformPrivate(*_other.data)); - return *this; + this->dataPtr->sid = _sid; + this->dataPtr->type = _type; + this->dataPtr->transform = _mat; } ////////////////////////////////////////////////// @@ -74,55 +60,55 @@ NodeTransform::~NodeTransform() = default; ////////////////////////////////////////////////// void NodeTransform::Set(const math::Matrix4d &_mat) { - this->data->transform = _mat; + this->dataPtr->transform = _mat; } ////////////////////////////////////////////////// void NodeTransform::SetType(const NodeTransformType _type) { - this->data->type = _type; + this->dataPtr->type = _type; } ////////////////////////////////////////////////// void NodeTransform::SetSID(const std::string &_sid) { - this->data->sid = _sid; + this->dataPtr->sid = _sid; } ////////////////////////////////////////////////// math::Matrix4d NodeTransform::Get() const { - return this->data->transform; + return this->dataPtr->transform; } ////////////////////////////////////////////////// NodeTransformType NodeTransform::Type() const { - return this->data->type; + return this->dataPtr->type; } ////////////////////////////////////////////////// std::string NodeTransform::SID() const { - return this->data->sid; + return this->dataPtr->sid; } ////////////////////////////////////////////////// void NodeTransform::SetComponent(const unsigned int _idx, const double _value) { - this->data->source[_idx] = _value; + this->dataPtr->source[_idx] = _value; } ////////////////////////////////////////////////// void NodeTransform::SetSourceValues(const math::Matrix4d &_mat) { - this->data->source.resize(16); + this->dataPtr->source.resize(16); unsigned int idx = 0; for (unsigned int i = 0; i < 4; ++i) { for (unsigned int j = 0; j < 4; ++j, ++idx) { - this->data->source[idx] = _mat(i, j); + this->dataPtr->source[idx] = _mat(i, j); } } } @@ -130,58 +116,61 @@ void NodeTransform::SetSourceValues(const math::Matrix4d &_mat) ////////////////////////////////////////////////// void NodeTransform::SetSourceValues(const math::Vector3d &_vec) { - this->data->source.resize(3); - this->data->source[0] = _vec.X(); - this->data->source[1] = _vec.Y(); - this->data->source[2] = _vec.Z(); + this->dataPtr->source.resize(3); + this->dataPtr->source[0] = _vec.X(); + this->dataPtr->source[1] = _vec.Y(); + this->dataPtr->source[2] = _vec.Z(); } ////////////////////////////////////////////////// void NodeTransform::SetSourceValues(const math::Vector3d &_axis, const double _angle) { - this->data->source.resize(4); - this->data->source[0] = _axis.X(); - this->data->source[1] = _axis.Y(); - this->data->source[2] = _axis.Z(); - this->data->source[3] = _angle; + this->dataPtr->source.resize(4); + this->dataPtr->source[0] = _axis.X(); + this->dataPtr->source[1] = _axis.Y(); + this->dataPtr->source[2] = _axis.Z(); + this->dataPtr->source[3] = _angle; } ////////////////////////////////////////////////// void NodeTransform::RecalculateMatrix() { - if (this->data->type == MATRIX) + if (this->dataPtr->type == MATRIX) { - this->data->transform.Set( - this->data->source[0], this->data->source[1], this->data->source[2], - this->data->source[3], this->data->source[4], this->data->source[5], - this->data->source[6], this->data->source[7], this->data->source[8], - this->data->source[9], this->data->source[10], this->data->source[11], - this->data->source[12], this->data->source[13], this->data->source[14], - this->data->source[15]); + this->dataPtr->transform.Set( + this->dataPtr->source[0], this->dataPtr->source[1], + this->dataPtr->source[2], this->dataPtr->source[3], + this->dataPtr->source[4], this->dataPtr->source[5], + this->dataPtr->source[6], this->dataPtr->source[7], + this->dataPtr->source[8], this->dataPtr->source[9], + this->dataPtr->source[10], this->dataPtr->source[11], + this->dataPtr->source[12], this->dataPtr->source[13], + this->dataPtr->source[14], this->dataPtr->source[15]); } else { - if (this->data->type == TRANSLATE) + if (this->dataPtr->type == TRANSLATE) { - this->data->transform.SetTranslation(math::Vector3d(this->data->source[0], - this->data->source[1], this->data->source[2])); + this->dataPtr->transform.SetTranslation(math::Vector3d( + this->dataPtr->source[0], this->dataPtr->source[1], + this->dataPtr->source[2])); } else { - if (this->data->type == ROTATE) + if (this->dataPtr->type == ROTATE) { math::Matrix3d mat; - mat.Axis(math::Vector3d(this->data->source[0], - this->data->source[1], - this->data->source[2]), - IGN_DTOR(this->data->source[3])); - this->data->transform = mat; + mat.Axis(math::Vector3d(this->dataPtr->source[0], + this->dataPtr->source[1], + this->dataPtr->source[2]), + IGN_DTOR(this->dataPtr->source[3])); + this->dataPtr->transform = mat; } else { - this->data->transform.Scale(math::Vector3d(this->data->source[0], - this->data->source[1], this->data->source[2])); + this->dataPtr->transform.Scale(math::Vector3d(this->dataPtr->source[0], + this->dataPtr->source[1], this->dataPtr->source[2])); } } } @@ -190,26 +179,26 @@ void NodeTransform::RecalculateMatrix() ////////////////////////////////////////////////// math::Matrix4d NodeTransform::operator()() const { - return this->data->transform; + return this->dataPtr->transform; } ////////////////////////////////////////////////// math::Matrix4d NodeTransform::operator*(const NodeTransform &_t) const { - return this->data->transform * _t(); + return this->dataPtr->transform * _t(); } ////////////////////////////////////////////////// math::Matrix4d NodeTransform::operator*(const math::Matrix4d &_m) const { - return this->data->transform * _m; + return this->dataPtr->transform * _m; } ////////////////////////////////////////////////// void NodeTransform::PrintSource() const { - std::cout << this->data->sid; - for (unsigned int i = 0; i < this->data->source.size(); ++i) - std::cout << " " << this->data->source[i]; + std::cout << this->dataPtr->sid; + for (unsigned int i = 0; i < this->dataPtr->source.size(); ++i) + std::cout << " " << this->dataPtr->source[i]; std::cout << "\n"; } diff --git a/graphics/src/OBJLoader.cc b/graphics/src/OBJLoader.cc index e5b22433d..eabe40bbe 100644 --- a/graphics/src/OBJLoader.cc +++ b/graphics/src/OBJLoader.cc @@ -33,7 +33,7 @@ namespace ignition { /// \internal /// \brief OBJLoader private data - class OBJLoaderPrivate + class OBJLoader::Implementation { }; } @@ -44,7 +44,7 @@ using namespace common; ////////////////////////////////////////////////// OBJLoader::OBJLoader() -: MeshLoader(), dataPtr(new OBJLoaderPrivate) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { } diff --git a/graphics/src/Pbr.cc b/graphics/src/Pbr.cc index 4eaace588..a5d57cf15 100644 --- a/graphics/src/Pbr.cc +++ b/graphics/src/Pbr.cc @@ -21,7 +21,7 @@ #include "ignition/common/Pbr.hh" /// \brief Private data for Pbr class -class ignition::common::PbrPrivate +class ignition::common::Pbr::Implementation { /// \brief Workflow type public: PbrType type = PbrType::NONE; @@ -78,47 +78,10 @@ using namespace common; ///////////////////////////////////////////////// Pbr::Pbr() - : dataPtr(new PbrPrivate) + : dataPtr(ignition::utils::MakeImpl<Implementation>()) { } -///////////////////////////////////////////////// -Pbr::~Pbr() -{ - delete this->dataPtr; - this->dataPtr = nullptr; -} - -////////////////////////////////////////////////// -Pbr::Pbr(const Pbr &_pbr) - : dataPtr(new PbrPrivate) -{ - *this->dataPtr = *_pbr.dataPtr; -} - -///////////////////////////////////////////////// -Pbr &Pbr::operator=(const Pbr &_pbr) -{ - if (!this->dataPtr) - { - this->dataPtr = new PbrPrivate; - } - *this->dataPtr = *_pbr.dataPtr; - return *this; -} - -///////////////////////////////////////////////// -Pbr &Pbr::operator=(Pbr &&_pbr) -{ - if (this->dataPtr) - { - delete this->dataPtr; - } - this->dataPtr = _pbr.dataPtr; - _pbr.dataPtr = nullptr; - return *this; -} - ////////////////////////////////////////////////// bool Pbr::operator!=(const Pbr &_pbr) const { @@ -145,13 +108,6 @@ bool Pbr::operator==(const Pbr &_pbr) const this->dataPtr->glossiness, _pbr.dataPtr->glossiness)); } -///////////////////////////////////////////////// -Pbr::Pbr(Pbr &&_pbr) noexcept -{ - this->dataPtr = _pbr.dataPtr; - _pbr.dataPtr = nullptr; -} - ////////////////////////////////////////////////// std::string Pbr::AlbedoMap() const { diff --git a/graphics/src/STLLoader.cc b/graphics/src/STLLoader.cc index bc0411e80..cf4770a36 100644 --- a/graphics/src/STLLoader.cc +++ b/graphics/src/STLLoader.cc @@ -28,9 +28,16 @@ using namespace ignition; using namespace common; + +////////////////////////////////////////////////// +class ignition::common::STLLoader::Implementation +{ +}; + ////////////////////////////////////////////////// STLLoader::STLLoader() -: MeshLoader() +: MeshLoader(), + dataPtr(ignition::utils::MakeImpl<Implementation>()) { } diff --git a/graphics/src/SVGLoader.cc b/graphics/src/SVGLoader.cc index 26a0d6e67..c403da2fa 100644 --- a/graphics/src/SVGLoader.cc +++ b/graphics/src/SVGLoader.cc @@ -31,7 +31,7 @@ using namespace ignition; using namespace common; -class ignition::common::SVGLoaderPrivate +class ignition::common::SVGLoader::Implementation { /// \brief Generates polylines for each SVG subpath /// \param[in] _subpath The subpath commands @@ -479,7 +479,7 @@ void arcPath(const ignition::math::Vector2d &_p0, } ///////////////////////////////////////////////// -ignition::math::Vector2d SVGLoaderPrivate::SubpathToPolyline( +ignition::math::Vector2d SVGLoader::Implementation::SubpathToPolyline( const std::vector<SVGCommand> &_subpath, ignition::math::Vector2d _last, std::vector<ignition::math::Vector2d> &_polyline) @@ -613,7 +613,7 @@ ignition::math::Vector2d SVGLoaderPrivate::SubpathToPolyline( ///////////////////////////////////////////////// SVGLoader::SVGLoader(const unsigned int _samples) -: dataPtr(new SVGLoaderPrivate()) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { this->dataPtr->resolution = 1.0/std::max(1u, _samples); } @@ -624,7 +624,8 @@ SVGLoader::~SVGLoader() } ///////////////////////////////////////////////// -bool SVGLoaderPrivate::SplitSubpaths(const std::vector<SVGCommand> &_cmds, +bool SVGLoader::Implementation::SplitSubpaths( + const std::vector<SVGCommand> &_cmds, std::vector< std::vector<SVGCommand> > &_subpaths) { if (_cmds.empty()) @@ -653,7 +654,7 @@ bool SVGLoaderPrivate::SplitSubpaths(const std::vector<SVGCommand> &_cmds, } ///////////////////////////////////////////////// -void SVGLoaderPrivate::ExpandCommands( +void SVGLoader::Implementation::ExpandCommands( const std::vector< std::vector<SVGCommand> > &_subpaths, SVGPath &_path) { for (const std::vector<SVGCommand> &compressedSubpath : _subpaths) @@ -700,8 +701,8 @@ void SVGLoaderPrivate::ExpandCommands( } ///////////////////////////////////////////////// -bool SVGLoaderPrivate::PathCommands(const std::vector<std::string> &_tokens, - SVGPath &_path) +bool SVGLoader::Implementation::PathCommands( + const std::vector<std::string> &_tokens, SVGPath &_path) { std::vector <SVGCommand> cmds; std::string lookup = "aAcCmMqQlLvVhHzZ"; @@ -783,7 +784,7 @@ bool SVGLoaderPrivate::PathCommands(const std::vector<std::string> &_tokens, } ///////////////////////////////////////////////// -bool SVGLoaderPrivate::PathAttribs(tinyxml2::XMLElement *_pElement, +bool SVGLoader::Implementation::PathAttribs(tinyxml2::XMLElement *_pElement, SVGPath &_path) { if (!_pElement) @@ -830,7 +831,7 @@ bool SVGLoaderPrivate::PathAttribs(tinyxml2::XMLElement *_pElement, } ///////////////////////////////////////////////// -bool SVGLoaderPrivate::SvgPaths(tinyxml2::XMLNode *_pParent, +bool SVGLoader::Implementation::SvgPaths(tinyxml2::XMLNode *_pParent, std::vector<SVGPath> &_paths) { if (!_pParent) diff --git a/graphics/src/Skeleton.cc b/graphics/src/Skeleton.cc index e34a1f5ff..cd42c6e28 100644 --- a/graphics/src/Skeleton.cc +++ b/graphics/src/Skeleton.cc @@ -24,7 +24,7 @@ using namespace ignition; using namespace common; /// Private data class -class ignition::common::SkeletonPrivate +class ignition::common::Skeleton::Implementation { typedef std::vector<std::vector<std::pair<std::string, double> > > RawNodeWeights; @@ -66,48 +66,46 @@ class ignition::common::SkeletonPrivate ////////////////////////////////////////////////// Skeleton::Skeleton() - : data(new SkeletonPrivate) +: dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { - this->data->root = nullptr; + this->dataPtr->root = nullptr; } ////////////////////////////////////////////////// Skeleton::Skeleton(SkeletonNode *_root) - : data(new SkeletonPrivate) +: dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { - this->data->root = _root; + this->dataPtr->root = _root; this->BuildNodeMap(); } ////////////////////////////////////////////////// Skeleton::~Skeleton() { - for (auto& kv : this->data->nodes) + for (auto& kv : this->dataPtr->nodes) delete kv.second; - for (auto& a : this->data->anims) + for (auto& a : this->dataPtr->anims) delete a; - delete this->data; - this->data = NULL; } ////////////////////////////////////////////////// void Skeleton::RootNode(SkeletonNode *_node) { - this->data->root = _node; + this->dataPtr->root = _node; this->BuildNodeMap(); } ////////////////////////////////////////////////// SkeletonNode *Skeleton::RootNode() const { - return this->data->root; + return this->dataPtr->root; } ////////////////////////////////////////////////// SkeletonNode *Skeleton::NodeByName(const std::string &_name) const { for (SkeletonNodeMap::const_iterator iter = - this->data->nodes.begin(); iter != this->data->nodes.end(); ++iter) + this->dataPtr->nodes.begin(); iter != this->dataPtr->nodes.end(); ++iter) { if (iter->second->Name() == _name) return iter->second; @@ -120,7 +118,7 @@ SkeletonNode *Skeleton::NodeByName(const std::string &_name) const SkeletonNode *Skeleton::NodeById(const std::string &_id) const { for (SkeletonNodeMap::const_iterator iter = - this->data->nodes.begin(); iter != this->data->nodes.end(); ++iter) + this->dataPtr->nodes.begin(); iter != this->dataPtr->nodes.end(); ++iter) { if (iter->second->Id() == _id) return iter->second; @@ -132,14 +130,14 @@ SkeletonNode *Skeleton::NodeById(const std::string &_id) const ////////////////////////////////////////////////// SkeletonNode *Skeleton::NodeByHandle(const unsigned int _handle) const { - SkeletonNodeMap::const_iterator iter = this->data->nodes.find(_handle); - return iter != this->data->nodes.end() ? iter->second : NULL; + SkeletonNodeMap::const_iterator iter = this->dataPtr->nodes.find(_handle); + return iter != this->dataPtr->nodes.end() ? iter->second : NULL; } ////////////////////////////////////////////////// unsigned int Skeleton::NodeCount() const { - return this->data->nodes.size(); + return this->dataPtr->nodes.size(); } ////////////////////////////////////////////////// @@ -147,7 +145,7 @@ unsigned int Skeleton::JointCount() const { unsigned int c = 0; for (SkeletonNodeMap::const_iterator iter = - this->data->nodes.begin(); iter != this->data->nodes.end(); ++iter) + this->dataPtr->nodes.begin(); iter != this->dataPtr->nodes.end(); ++iter) { if (iter->second->IsJoint()) c++; @@ -159,15 +157,15 @@ unsigned int Skeleton::JointCount() const ////////////////////////////////////////////////// void Skeleton::Scale(const double _scale) { - if (nullptr == this->data->root) + if (nullptr == this->dataPtr->root) { ignerr << "Failed to scale skeleton, null root." << std::endl; return; } // scale skeleton structure - for (SkeletonNodeMap::iterator iter = this->data->nodes.begin(); - iter != this->data->nodes.end(); ++iter) + for (SkeletonNodeMap::iterator iter = this->dataPtr->nodes.begin(); + iter != this->dataPtr->nodes.end(); ++iter) { SkeletonNode *node = iter->second; math::Matrix4d trans = node->Transform(); @@ -177,18 +175,18 @@ void Skeleton::Scale(const double _scale) } // update the nodes' model transforms - this->data->root->UpdateChildrenTransforms(); + this->dataPtr->root->UpdateChildrenTransforms(); // scale the animation data - for (unsigned int i = 0; i < this->data->anims.size(); ++i) - this->data->anims[i]->Scale(_scale); + for (unsigned int i = 0; i < this->dataPtr->anims.size(); ++i) + this->dataPtr->anims[i]->Scale(_scale); } ////////////////////////////////////////////////// void Skeleton::BuildNodeMap() { std::list<SkeletonNode *> toVisit; - toVisit.push_front(this->data->root); + toVisit.push_front(this->dataPtr->root); unsigned int handle = 0; @@ -204,7 +202,7 @@ void Skeleton::BuildNodeMap() toVisit.push_front(node->Child(i)); node->Handle(handle); - this->data->nodes[handle] = node; + this->dataPtr->nodes[handle] = node; handle++; } } @@ -212,20 +210,20 @@ void Skeleton::BuildNodeMap() ////////////////////////////////////////////////// void Skeleton::SetBindShapeTransform(const math::Matrix4d &_trans) { - this->data->bindShapeTransform = _trans; + this->dataPtr->bindShapeTransform = _trans; } ////////////////////////////////////////////////// math::Matrix4d Skeleton::BindShapeTransform() const { - return this->data->bindShapeTransform; + return this->dataPtr->bindShapeTransform; } ////////////////////////////////////////////////// void Skeleton::PrintTransforms() const { for (SkeletonNodeMap::const_iterator iter = - this->data->nodes.begin(); iter != this->data->nodes.end(); ++iter) + this->dataPtr->nodes.begin(); iter != this->dataPtr->nodes.end(); ++iter) { const SkeletonNode *node = iter->second; std::cout << "---------------\n" << node->Name() << "\n"; @@ -265,14 +263,14 @@ void Skeleton::PrintTransforms() const ////////////////////////////////////////////////// const SkeletonNodeMap &Skeleton::Nodes() const { - return this->data->nodes; + return this->dataPtr->nodes; } ////////////////////////////////////////////////// void Skeleton::SetNumVertAttached(const unsigned int _vertices) { - this->data->rawNodeWeights.clear(); - this->data->rawNodeWeights.resize(_vertices); + this->dataPtr->rawNodeWeights.clear(); + this->dataPtr->rawNodeWeights.resize(_vertices); } ////////////////////////////////////////////////// @@ -280,9 +278,9 @@ void Skeleton::AddVertNodeWeight( const unsigned int _vertex, const std::string &_node, const double _weight) { - if (_vertex < this->data->rawNodeWeights.size()) + if (_vertex < this->dataPtr->rawNodeWeights.size()) { - this->data->rawNodeWeights[_vertex].push_back( + this->dataPtr->rawNodeWeights[_vertex].push_back( std::make_pair(_node, _weight)); } } @@ -290,8 +288,8 @@ void Skeleton::AddVertNodeWeight( ////////////////////////////////////////////////// unsigned int Skeleton::VertNodeWeightCount(const unsigned int _vertex) const { - if (_vertex < this->data->rawNodeWeights.size()) - return this->data->rawNodeWeights[_vertex].size(); + if (_vertex < this->dataPtr->rawNodeWeights.size()) + return this->dataPtr->rawNodeWeights[_vertex].size(); else return 0; } @@ -302,10 +300,10 @@ std::pair<std::string, double> Skeleton::VertNodeWeight( { std::pair<std::string, double> result; - if (_v < this->data->rawNodeWeights.size() && - _i < this->data->rawNodeWeights[_v].size()) + if (_v < this->dataPtr->rawNodeWeights.size() && + _i < this->dataPtr->rawNodeWeights[_v].size()) { - result = this->data->rawNodeWeights[_v][_i]; + result = this->dataPtr->rawNodeWeights[_v][_i]; } return result; @@ -314,14 +312,14 @@ std::pair<std::string, double> Skeleton::VertNodeWeight( ////////////////////////////////////////////////// unsigned int Skeleton::AnimationCount() const { - return this->data->anims.size(); + return this->dataPtr->anims.size(); } ////////////////////////////////////////////////// SkeletonAnimation *Skeleton::Animation(const unsigned int _i) const { - if (_i < this->data->anims.size()) - return this->data->anims[_i]; + if (_i < this->dataPtr->anims.size()) + return this->dataPtr->anims[_i]; else return NULL; } @@ -329,10 +327,11 @@ SkeletonAnimation *Skeleton::Animation(const unsigned int _i) const ////////////////////////////////////////////////// void Skeleton::AddAnimation(SkeletonAnimation *_anim) { - this->data->mapAnimSkin.push_back(std::map<std::string, std::string>()); - this->data->alignTranslate.push_back(std::map<std::string, math::Matrix4d>()); - this->data->alignRotate.push_back(std::map<std::string, math::Matrix4d>()); - this->data->anims.push_back(_anim); + this->dataPtr->mapAnimSkin.push_back(std::map<std::string, std::string>()); + this->dataPtr->alignTranslate.push_back( + std::map<std::string, math::Matrix4d>()); + this->dataPtr->alignRotate.push_back(std::map<std::string, math::Matrix4d>()); + this->dataPtr->anims.push_back(_anim); } ////////////////////////////////////////////////// @@ -463,10 +462,10 @@ bool Skeleton::AddBvhAnimation(const std::string &_bvhFile, double _scale) * math::Matrix4d(skinNode->Transform().Rotation()); } - this->data->anims.push_back(skel->Animation(0u)); - this->data->mapAnimSkin.push_back(skelMap); - this->data->alignTranslate.push_back(translations); - this->data->alignRotate.push_back(rotations); + this->dataPtr->anims.push_back(skel->Animation(0u)); + this->dataPtr->mapAnimSkin.push_back(skelMap); + this->dataPtr->alignTranslate.push_back(translations); + this->dataPtr->alignRotate.push_back(rotations); return true; } @@ -475,10 +474,10 @@ bool Skeleton::AddBvhAnimation(const std::string &_bvhFile, double _scale) std::string Skeleton::NodeNameAnimToSkin(unsigned int _index, const std::string &_animNodeName) { - if (this->data->mapAnimSkin[_index].find(_animNodeName) - != this->data->mapAnimSkin[_index].end()) + if (this->dataPtr->mapAnimSkin[_index].find(_animNodeName) + != this->dataPtr->mapAnimSkin[_index].end()) { - return this->data->mapAnimSkin[_index][_animNodeName]; + return this->dataPtr->mapAnimSkin[_index][_animNodeName]; } return _animNodeName; } @@ -487,10 +486,10 @@ std::string Skeleton::NodeNameAnimToSkin(unsigned int _index, math::Matrix4d Skeleton::AlignTranslation(unsigned int _index, const std::string &_animNodeName) { - if (this->data->alignTranslate[_index].find(_animNodeName) - != this->data->alignTranslate[_index].end()) + if (this->dataPtr->alignTranslate[_index].find(_animNodeName) + != this->dataPtr->alignTranslate[_index].end()) { - return this->data->alignTranslate[_index][_animNodeName]; + return this->dataPtr->alignTranslate[_index][_animNodeName]; } return math::Matrix4d::Identity; } @@ -499,10 +498,10 @@ math::Matrix4d Skeleton::AlignTranslation(unsigned int _index, math::Matrix4d Skeleton::AlignRotation(unsigned int _index, const std::string &_animNodeName) { - if (this->data->alignRotate[_index].find(_animNodeName) - != this->data->alignRotate[_index].end()) + if (this->dataPtr->alignRotate[_index].find(_animNodeName) + != this->dataPtr->alignRotate[_index].end()) { - return this->data->alignRotate[_index][_animNodeName]; + return this->dataPtr->alignRotate[_index][_animNodeName]; } return math::Matrix4d::Identity; } diff --git a/graphics/src/SkeletonAnimation.cc b/graphics/src/SkeletonAnimation.cc index b73d8b53e..bf74a3cbd 100644 --- a/graphics/src/SkeletonAnimation.cc +++ b/graphics/src/SkeletonAnimation.cc @@ -23,7 +23,7 @@ using namespace ignition; using namespace common; /// Prvate data class -class ignition::common::SkeletonAnimationPrivate +class ignition::common::SkeletonAnimation::Implementation { /// \brief the node name public: std::string name; @@ -37,43 +37,40 @@ class ignition::common::SkeletonAnimationPrivate ////////////////////////////////////////////////// SkeletonAnimation::SkeletonAnimation(const std::string &_name) - : data(new SkeletonAnimationPrivate) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { - this->data->name = _name; + this->dataPtr->name = _name; } ////////////////////////////////////////////////// SkeletonAnimation::~SkeletonAnimation() { - this->data->animations.clear(); - delete this->data; - this->data = NULL; } ////////////////////////////////////////////////// void SkeletonAnimation::SetName(const std::string &_name) { - this->data->name = _name; + this->dataPtr->name = _name; } ////////////////////////////////////////////////// std::string SkeletonAnimation::Name() const { - return this->data->name; + return this->dataPtr->name; } ////////////////////////////////////////////////// unsigned int SkeletonAnimation::NodeCount() const { - return this->data->animations.size(); + return this->dataPtr->animations.size(); } ////////////////////////////////////////////////// NodeAnimation *SkeletonAnimation::NodeAnimationByName( const std::string &_node) const { - auto it = this->data->animations.find(_node); - if (it != this->data->animations.end()) + auto it = this->dataPtr->animations.find(_node); + if (it != this->dataPtr->animations.end()) return it->second.get(); return nullptr; } @@ -81,33 +78,34 @@ NodeAnimation *SkeletonAnimation::NodeAnimationByName( ////////////////////////////////////////////////// bool SkeletonAnimation::HasNode(const std::string &_node) const { - return (this->data->animations.find(_node) != this->data->animations.end()); + return (this->dataPtr->animations.find(_node) != + this->dataPtr->animations.end()); } ////////////////////////////////////////////////// void SkeletonAnimation::AddKeyFrame(const std::string &_node, const double _time, const math::Matrix4d &_mat) { - if (this->data->animations.find(_node) == this->data->animations.end()) - this->data->animations[_node] = std::make_shared<NodeAnimation>(_node); + if (this->dataPtr->animations.find(_node) == this->dataPtr->animations.end()) + this->dataPtr->animations[_node] = std::make_shared<NodeAnimation>(_node); - if (_time > this->data->length) - this->data->length = _time; + if (_time > this->dataPtr->length) + this->dataPtr->length = _time; - this->data->animations[_node]->AddKeyFrame(_time, _mat); + this->dataPtr->animations[_node]->AddKeyFrame(_time, _mat); } ////////////////////////////////////////////////// void SkeletonAnimation::AddKeyFrame(const std::string &_node, const double _time, const math::Pose3d &_pose) { - if (this->data->animations.find(_node) == this->data->animations.end()) - this->data->animations[_node] = std::make_shared<NodeAnimation>(_node); + if (this->dataPtr->animations.find(_node) == this->dataPtr->animations.end()) + this->dataPtr->animations[_node] = std::make_shared<NodeAnimation>(_node); - if (_time > this->data->length) - this->data->length = _time; + if (_time > this->dataPtr->length) + this->dataPtr->length = _time; - this->data->animations[_node]->AddKeyFrame(_time, _pose); + this->dataPtr->animations[_node]->AddKeyFrame(_time, _pose); } ////////////////////////////////////////////////// @@ -116,8 +114,9 @@ math::Matrix4d SkeletonAnimation::NodePoseAt(const std::string &_node, { math::Matrix4d mat; - if (this->data->animations[_node]) - mat = this->data->animations[_node]->FrameAt(_time, _loop); + auto nodeAnim = this->dataPtr->animations.find(_node); + if (nodeAnim != this->dataPtr->animations.end()) + mat = nodeAnim->second->FrameAt(_time, _loop); return mat; } @@ -133,8 +132,8 @@ std::map<std::string, math::Matrix4d> SkeletonAnimation::PoseAt( /// prev and next keyframe for each node at each time step, but rather /// doing it only once per time step. std::map<std::string, math::Matrix4d> pose; - for (auto iter = this->data->animations.begin(); - iter != this->data->animations.end(); ++iter) + for (auto iter = this->dataPtr->animations.begin(); + iter != this->dataPtr->animations.end(); ++iter) { pose[iter->first] = iter->second->FrameAt(_time, _loop); } @@ -146,8 +145,8 @@ std::map<std::string, math::Matrix4d> SkeletonAnimation::PoseAt( std::map<std::string, math::Matrix4d> SkeletonAnimation::PoseAtX( const double _x, const std::string &_node, const bool _loop) const { - auto nodeAnim = this->data->animations.find(_node); - if (nodeAnim == this->data->animations.end()) + auto nodeAnim = this->dataPtr->animations.find(_node); + if (nodeAnim == this->dataPtr->animations.end()) { ignerr << "Can't find animation named [" << _node << "]" << std::endl; return {}; @@ -176,8 +175,8 @@ std::map<std::string, math::Matrix4d> SkeletonAnimation::PoseAtX( ////////////////////////////////////////////////// void SkeletonAnimation::Scale(const double _scale) { - for (auto iter = this->data->animations.begin(); - iter != this->data->animations.end(); ++iter) + for (auto iter = this->dataPtr->animations.begin(); + iter != this->dataPtr->animations.end(); ++iter) { iter->second->Scale(_scale); } @@ -186,5 +185,5 @@ void SkeletonAnimation::Scale(const double _scale) ////////////////////////////////////////////////// double SkeletonAnimation::Length() const { - return this->data->length; + return this->dataPtr->length; } diff --git a/graphics/src/SkeletonNode.cc b/graphics/src/SkeletonNode.cc index 39b097eb6..3b179a686 100644 --- a/graphics/src/SkeletonNode.cc +++ b/graphics/src/SkeletonNode.cc @@ -24,7 +24,7 @@ using namespace ignition; using namespace common; /// \brief SkeletonNode private data -class ignition::common::SkeletonNodePrivate +class ignition::common::SkeletonNode::Implementation { /// \brief the name of the skeletal node public: std::string name; @@ -62,72 +62,69 @@ class ignition::common::SkeletonNodePrivate ////////////////////////////////////////////////// SkeletonNode::SkeletonNode(SkeletonNode *_parent) - : data(new SkeletonNodePrivate) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { - this->data->parent = _parent; + this->dataPtr->parent = _parent; - if (this->data->parent) - this->data->parent->AddChild(this); + if (this->dataPtr->parent) + this->dataPtr->parent->AddChild(this); } ////////////////////////////////////////////////// SkeletonNode::SkeletonNode(SkeletonNode *_parent, const std::string &_name, const std::string &_id, const SkeletonNodeType _type) - : data(new SkeletonNodePrivate) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { - this->data->parent = _parent; + this->dataPtr->parent = _parent; - if (this->data->parent) - this->data->parent->AddChild(this); + if (this->dataPtr->parent) + this->dataPtr->parent->AddChild(this); - this->data->name = _name; - this->data->id = _id; - this->data->type = _type; + this->dataPtr->name = _name; + this->dataPtr->id = _id; + this->dataPtr->type = _type; } ////////////////////////////////////////////////// SkeletonNode::~SkeletonNode() { - this->data->children.clear(); - delete this->data; - this->data = NULL; } ////////////////////////////////////////////////// void SkeletonNode::Name(const std::string &_name) { - this->data->name = _name; + this->dataPtr->name = _name; } ////////////////////////////////////////////////// std::string SkeletonNode::Name() const { - return this->data->name; + return this->dataPtr->name; } ////////////////////////////////////////////////// void SkeletonNode::Id(const std::string &_id) { - this->data->id = _id; + this->dataPtr->id = _id; } ////////////////////////////////////////////////// std::string SkeletonNode::Id() const { - return this->data->id; + return this->dataPtr->id; } ////////////////////////////////////////////////// void SkeletonNode::SetType(const SkeletonNodeType _type) { - this->data->type = _type; + this->dataPtr->type = _type; } ////////////////////////////////////////////////// bool SkeletonNode::IsJoint() const { - if (this->data->type == JOINT) + if (this->dataPtr->type == JOINT) return true; else return false; @@ -137,16 +134,16 @@ bool SkeletonNode::IsJoint() const void SkeletonNode::SetTransform(const math::Matrix4d &_trans, const bool _updateChildren) { - this->data->transform = _trans; + this->dataPtr->transform = _trans; - if (this->data->parent == NULL) + if (this->dataPtr->parent == NULL) { - this->data->modelTransform = _trans; + this->dataPtr->modelTransform = _trans; } else { - this->data->modelTransform = - this->data->parent->ModelTransform() * _trans; + this->dataPtr->modelTransform = + this->dataPtr->parent->ModelTransform() * _trans; } /// propagate the change to the children nodes @@ -157,14 +154,14 @@ void SkeletonNode::SetTransform(const math::Matrix4d &_trans, ////////////////////////////////////////////////// void SkeletonNode::SetInitialTransform(const math::Matrix4d &_trans) { - this->data->initialTransform = _trans; + this->dataPtr->initialTransform = _trans; this->SetTransform(_trans); } ////////////////////////////////////////////////// void SkeletonNode::Reset(const bool _resetChildren) { - this->SetTransform(this->data->initialTransform); + this->SetTransform(this->dataPtr->initialTransform); if (_resetChildren) { @@ -177,8 +174,8 @@ void SkeletonNode::Reset(const bool _resetChildren) void SkeletonNode::UpdateChildrenTransforms() { std::list<SkeletonNode*> toVisit; - for (unsigned int i = 0; i < this->data->children.size(); ++i) - toVisit.push_back(this->data->children[i]); + for (unsigned int i = 0; i < this->dataPtr->children.size(); ++i) + toVisit.push_back(this->dataPtr->children[i]); while (!toVisit.empty()) { @@ -188,30 +185,30 @@ void SkeletonNode::UpdateChildrenTransforms() for (int i = (node->ChildCount() - 1); i >= 0; --i) toVisit.push_front(node->Child(i)); - node->data->modelTransform = - node->Parent()->data->modelTransform * node->data->transform; + node->dataPtr->modelTransform = + node->Parent()->dataPtr->modelTransform * node->dataPtr->transform; } } ////////////////////////////////////////////////// math::Matrix4d SkeletonNode::Transform() const { - return this->data->transform; + return this->dataPtr->transform; } ////////////////////////////////////////////////// void SkeletonNode::SetModelTransform(const math::Matrix4d &_trans, const bool _updateChildren) { - this->data->modelTransform = _trans; + this->dataPtr->modelTransform = _trans; - if (this->data->parent == NULL) - this->data->transform = _trans; + if (this->dataPtr->parent == NULL) + this->dataPtr->transform = _trans; else { math::Matrix4d invParentTrans = - this->data->parent->ModelTransform().Inverse(); - this->data->transform = invParentTrans * this->data->modelTransform; + this->dataPtr->parent->ModelTransform().Inverse(); + this->dataPtr->transform = invParentTrans * this->dataPtr->modelTransform; } if (_updateChildren) @@ -221,25 +218,25 @@ void SkeletonNode::SetModelTransform(const math::Matrix4d &_trans, ////////////////////////////////////////////////// math::Matrix4d SkeletonNode::ModelTransform() const { - return this->data->modelTransform; + return this->dataPtr->modelTransform; } ////////////////////////////////////////////////// void SkeletonNode::SetParent(SkeletonNode *_parent) { - this->data->parent = _parent; + this->dataPtr->parent = _parent; } ////////////////////////////////////////////////// SkeletonNode *SkeletonNode::Parent() const { - return this->data->parent; + return this->dataPtr->parent; } ////////////////////////////////////////////////// bool SkeletonNode::IsRootNode() const { - if (!this->data->parent) + if (!this->dataPtr->parent) return true; else return false; @@ -248,13 +245,13 @@ bool SkeletonNode::IsRootNode() const ////////////////////////////////////////////////// void SkeletonNode::AddChild(SkeletonNode *_child) { - this->data->children.push_back(_child); + this->dataPtr->children.push_back(_child); } ////////////////////////////////////////////////// unsigned int SkeletonNode::ChildCount() const { - return this->data->children.size(); + return this->dataPtr->children.size(); } ////////////////////////////////////////////////// @@ -262,10 +259,10 @@ SkeletonNode *SkeletonNode::Child(const unsigned int _index) const { SkeletonNode *result = NULL; - if (_index >= this->data->children.size()) + if (_index >= this->dataPtr->children.size()) ignerr << "Index out of range[" << _index << "]\n"; else - result = this->data->children[_index]; + result = this->dataPtr->children[_index]; return result; } @@ -273,10 +270,10 @@ SkeletonNode *SkeletonNode::Child(const unsigned int _index) const ////////////////////////////////////////////////// SkeletonNode *SkeletonNode::ChildByName(const std::string &_name) const { - for (unsigned int i = 0; i < this->data->children.size(); ++i) + for (unsigned int i = 0; i < this->dataPtr->children.size(); ++i) { - if (this->data->children[i]->Name() == _name) - return this->data->children[i]; + if (this->dataPtr->children[i]->Name() == _name) + return this->dataPtr->children[i]; } return NULL; @@ -285,10 +282,10 @@ SkeletonNode *SkeletonNode::ChildByName(const std::string &_name) const ////////////////////////////////////////////////// SkeletonNode *SkeletonNode::ChildById(const std::string &_id) const { - for (unsigned int i = 0; i < this->data->children.size(); ++i) + for (unsigned int i = 0; i < this->dataPtr->children.size(); ++i) { - if (this->data->children[i]->Id() == _id) - return this->data->children[i]; + if (this->dataPtr->children[i]->Id() == _id) + return this->dataPtr->children[i]; } return NULL; @@ -297,59 +294,59 @@ SkeletonNode *SkeletonNode::ChildById(const std::string &_id) const ////////////////////////////////////////////////// void SkeletonNode::Handle(const unsigned int _handle) { - this->data->handle = _handle; + this->dataPtr->handle = _handle; } ////////////////////////////////////////////////// unsigned int SkeletonNode::Handle() const { - return this->data->handle; + return this->dataPtr->handle; } ////////////////////////////////////////////////// void SkeletonNode::SetInverseBindTransform(const math::Matrix4d &_invBM) { - this->data->invBindTransform = _invBM; + this->dataPtr->invBindTransform = _invBM; } ////////////////////////////////////////////////// math::Matrix4d SkeletonNode::InverseBindTransform() const { - return this->data->invBindTransform; + return this->dataPtr->invBindTransform; } ////////////////////////////////////////////////// bool SkeletonNode::HasInvBindTransform() const { - return this->data->invBindTransform != math::Matrix4d::Zero; + return this->dataPtr->invBindTransform != math::Matrix4d::Zero; } ////////////////////////////////////////////////// std::vector<NodeTransform> SkeletonNode::RawTransforms() const { - return this->data->rawTransforms; + return this->dataPtr->rawTransforms; } ////////////////////////////////////////////////// unsigned int SkeletonNode::RawTransformCount() const { - return this->data->rawTransforms.size(); + return this->dataPtr->rawTransforms.size(); } ////////////////////////////////////////////////// NodeTransform SkeletonNode::RawTransform(const unsigned int _i) const { - return this->data->rawTransforms[_i]; + return this->dataPtr->rawTransforms[_i]; } ////////////////////////////////////////////////// void SkeletonNode::AddRawTransform(const NodeTransform &_t) { - this->data->rawTransforms.push_back(_t); + this->dataPtr->rawTransforms.push_back(_t); } ////////////////////////////////////////////////// std::vector<NodeTransform> SkeletonNode::Transforms() const { - return this->data->rawTransforms; + return this->dataPtr->rawTransforms; } diff --git a/graphics/src/SubMesh.cc b/graphics/src/SubMesh.cc index 846126c25..35fa615d9 100644 --- a/graphics/src/SubMesh.cc +++ b/graphics/src/SubMesh.cc @@ -29,7 +29,7 @@ using namespace ignition; using namespace common; /// \brief Private data for SubMesh -class ignition::common::SubMeshPrivate +class ignition::common::SubMesh::Implementation { /// \brief the vertex array public: std::vector<ignition::math::Vector3d> vertices; @@ -60,52 +60,20 @@ class ignition::common::SubMeshPrivate ////////////////////////////////////////////////// SubMesh::SubMesh() -: dataPtr(new SubMeshPrivate) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { } ////////////////////////////////////////////////// SubMesh::SubMesh(const std::string &_name) -: dataPtr(new SubMeshPrivate) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { this->dataPtr->name = _name; } -////////////////////////////////////////////////// -SubMesh::SubMesh(const SubMesh &_submesh) -: dataPtr(new SubMeshPrivate) -{ - this->dataPtr->name = _submesh.dataPtr->name; - this->dataPtr->materialIndex = _submesh.dataPtr->materialIndex; - this->dataPtr->primitiveType = _submesh.dataPtr->primitiveType; - - std::copy(_submesh.dataPtr->nodeAssignments.begin(), - _submesh.dataPtr->nodeAssignments.end(), - std::back_inserter(this->dataPtr->nodeAssignments)); - - std::copy(_submesh.dataPtr->indices.begin(), - _submesh.dataPtr->indices.end(), - std::back_inserter(this->dataPtr->indices)); - std::copy(_submesh.dataPtr->normals.begin(), - _submesh.dataPtr->normals.end(), - std::back_inserter(this->dataPtr->normals)); - - for (const auto &set : _submesh.dataPtr->texCoords) - { - std::copy(set.second.begin(), set.second.end(), - std::back_inserter(this->dataPtr->texCoords[set.first])); - } - std::copy(_submesh.dataPtr->vertices.begin(), - _submesh.dataPtr->vertices.end(), - std::back_inserter(this->dataPtr->vertices)); -} - ////////////////////////////////////////////////// SubMesh::~SubMesh() { - this->dataPtr->vertices.clear(); - this->dataPtr->indices.clear(); - this->dataPtr->nodeAssignments.clear(); } ////////////////////////////////////////////////// @@ -490,7 +458,7 @@ unsigned int SubMesh::TexCoordCountBySet(unsigned int _setIndex) const if (it == this->dataPtr->texCoords.end()) return 0u; - return this->dataPtr->texCoords[_setIndex].size(); + return it->second.size(); } ////////////////////////////////////////////////// From d36a0fa8fd24619f335037be505c515d10c8e42f Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Mon, 22 Mar 2021 07:57:21 -0700 Subject: [PATCH 075/219] Rotate capsule to Z-up (#186) Signed-off-by: Louise Poubel <louise@openrobotics.org> --- .../include/ignition/common/MeshManager.hh | 4 +- graphics/src/MeshManager.cc | 59 +++++++++++-------- graphics/src/SubMesh_TEST.cc | 4 +- 3 files changed, 37 insertions(+), 30 deletions(-) diff --git a/graphics/include/ignition/common/MeshManager.hh b/graphics/include/ignition/common/MeshManager.hh index 6bf0ee045..e7d33f51f 100644 --- a/graphics/include/ignition/common/MeshManager.hh +++ b/graphics/include/ignition/common/MeshManager.hh @@ -167,9 +167,9 @@ namespace ignition /// \brief Create a capsule mesh /// \param[in] _name the name of the new mesh /// \param[in] _radius the radius of the capsule in the x y plane - /// \param[in] _length length of the body + /// \param[in] _length length of the capsule along z /// \param[in] _rings the number of circles along the height - /// \param[in] _segments the number of segment per circle + /// \param[in] _segments the number of segments per circle public: void CreateCapsule(const std::string &_name, const double radius, const double length, diff --git a/graphics/src/MeshManager.cc b/graphics/src/MeshManager.cc index 1ec18b975..8a53efc92 100644 --- a/graphics/src/MeshManager.cc +++ b/graphics/src/MeshManager.cc @@ -919,7 +919,8 @@ void MeshManager::CreateCapsule(const std::string &_name, SubMesh subMesh; - // Based on https://github.com/godotengine/godot primitive_meshes.cpp + // Based on https://github.com/godotengine/godot/blob/3.2.3-stable/scene/resources/primitive_meshes.cpp + // Rotated to be Z-up int prevRow, thisRow, point; double x, y, z, u, v, w; const double oneThird = 1.0 / 3.0; @@ -930,31 +931,33 @@ void MeshManager::CreateCapsule(const std::string &_name, /* top hemisphere */ thisRow = 0; prevRow = 0; - for (unsigned int j = 0; j <= (_rings + 1); j++) { + for (unsigned int j = 0; j <= (_rings + 1); j++) + { v = j; v /= (_rings + 1); w = sin(0.5 * IGN_PI * v); - y = _radius * cos(0.5 * IGN_PI * v); + z = _radius * cos(0.5 * IGN_PI * v); - for (unsigned int i = 0; i <= _segments; i++) { + for (unsigned int i = 0; i <= _segments; i++) + { u = i; u /= _segments; x = -sin(u * (IGN_PI * 2.0)); - z = cos(u * (IGN_PI * 2.0)); + y = cos(u * (IGN_PI * 2.0)); - ignition::math::Vector3d p( - x * _radius * w, y, -z * _radius * w); + ignition::math::Vector3d p(x * _radius * w, y * _radius * w, z); // Compute vertex subMesh.AddVertex(ignition::math::Vector3d( - p + ignition::math::Vector3d(0.0, 0.5 * _length, 0.0))); + p + ignition::math::Vector3d(0.0, 0.0, 0.5 * _length))); subMesh.AddTexCoord({u, v * oneThird}); subMesh.AddNormal(p.Normalize()); point++; - if (i > 0 && j > 0) { + if (i > 0 && j > 0) + { subMesh.AddIndex(thisRow + i - 1); subMesh.AddIndex(prevRow + i); subMesh.AddIndex(prevRow + i - 1); @@ -971,30 +974,32 @@ void MeshManager::CreateCapsule(const std::string &_name, /* cylinder */ thisRow = point; prevRow = 0; - for (unsigned int j = 0; j <= (_rings + 1); j++) { + for (unsigned int j = 0; j <= (_rings + 1); j++) + { v = j; v /= (_rings + 1); - y = _length * v; - y = (_length * 0.5) - y; + z = _length * v; + z = (_length * 0.5) - z; - for (unsigned int i = 0; i <= _segments; i++) { + for (unsigned int i = 0; i <= _segments; i++) + { u = i; u /= _segments; x = -sin(u * (IGN_PI * 2.0)); - z = cos(u * (IGN_PI * 2.0)); + y = cos(u * (IGN_PI * 2.0)); - ignition::math::Vector3d p( - x * _radius, y, -z * _radius); + ignition::math::Vector3d p(x * _radius, y * _radius, z); // Compute vertex subMesh.AddVertex(p); subMesh.AddTexCoord({u, oneThird + (v * oneThird)}); - subMesh.AddNormal(ignition::math::Vector3d(x, 0.0, -z)); + subMesh.AddNormal(ignition::math::Vector3d(x, y, 0.0)); point++; - if (i > 0 && j > 0) { + if (i > 0 && j > 0) + { subMesh.AddIndex(thisRow + i - 1); subMesh.AddIndex(prevRow + i); subMesh.AddIndex(prevRow + i - 1); @@ -1011,31 +1016,33 @@ void MeshManager::CreateCapsule(const std::string &_name, /* bottom hemisphere */ thisRow = point; prevRow = 0; - for (unsigned int j = 0; j <= (_rings + 1); j++) { + for (unsigned int j = 0; j <= (_rings + 1); j++) + { v = j; v /= (_rings + 1); v += 1.0; w = sin(0.5 * IGN_PI * v); - y = _radius * cos(0.5 * IGN_PI * v); + z = _radius * cos(0.5 * IGN_PI * v); - for (unsigned int i = 0; i <= _segments; i++) { + for (unsigned int i = 0; i <= _segments; i++) + { double u2 = static_cast<double>(i); u2 /= _segments; x = -sin(u2 * (IGN_PI * 2.0)); - z = cos(u2 * (IGN_PI * 2.0)); + y = cos(u2 * (IGN_PI * 2.0)); - ignition::math::Vector3d p( - x * _radius * w, y, -z * _radius * w); + ignition::math::Vector3d p(x * _radius * w, y * _radius * w, z); // Compute vertex subMesh.AddVertex(ignition::math::Vector3d( - p + ignition::math::Vector3d(0.0, -0.5 * _length, 0.0))); + p + ignition::math::Vector3d(0.0, 0.0, -0.5 * _length))); subMesh.AddTexCoord({u2, twoThirds + ((v - 1.0) * oneThird)}); subMesh.AddNormal(p.Normalize()); point++; - if (i > 0 && j > 0) { + if (i > 0 && j > 0) + { subMesh.AddIndex(thisRow + i - 1); subMesh.AddIndex(prevRow + i); subMesh.AddIndex(prevRow + i - 1); diff --git a/graphics/src/SubMesh_TEST.cc b/graphics/src/SubMesh_TEST.cc index 127d67b9e..69992a749 100644 --- a/graphics/src/SubMesh_TEST.cc +++ b/graphics/src/SubMesh_TEST.cc @@ -421,7 +421,7 @@ TEST_F(SubMeshTest, Volume) checkIndexes(unitEllipsoid2); // The new mesh should have more vertex, but it should be introduced in the - // meshmanager. It should be the same number becuase it was not modified. + // meshmanager. It should be the same number because it was not modified. EXPECT_EQ(unitEllipsoid->VertexCount(), unitEllipsoid2->VertexCount()); // A larger cylinder needs to have higher resolution in order to get the @@ -452,7 +452,7 @@ TEST_F(SubMeshTest, Volume) common::MeshManager::Instance()->MeshByName("capsule"); // the new mesh should have more vertex, but it should be introduced in the - // meshmanager. It should be the same number becuase it was not modified. + // meshmanager. It should be the same number because it was not modified. EXPECT_EQ(unitCapsule->VertexCount(), unitCapsule2->VertexCount()); common::MeshManager::Instance()->CreateCapsule("other_capsule", From b68fd3a1a037b72524bd5c5557697d0b75132302 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Mon, 22 Mar 2021 18:52:06 -0500 Subject: [PATCH 076/219] =?UTF-8?q?=E2=AC=86=EF=B8=8F=204.0.0=20(#187)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Carroll <michael@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 31 ++++++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bf4daa86d..fa51a48f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ set(IGN_CMAKE_VER ${ignition-cmake2_VERSION_MAJOR}) #============================================================================ # Configure the project #============================================================================ -ign_configure_project() +ign_configure_project(VERSION_SUFFIX pre1) #============================================================================ # Set project-specific options diff --git a/Changelog.md b/Changelog.md index 4a1bfb84b..10f2f56b2 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,6 +1,35 @@ ## Ignition Common 4.x -## Ignition Common 4.x.x (2019-XX-XX) +## Ignition Common 4.X.X + +## Ignition Common 4.0.0 (2021-03-22) + +1. Rotate capsule to Z-up + * [Pull request #186](https://github.com/ignitionrobotics/ign-common/pull/186) + +1. Add implementation pointer to ign-common classes + * [Pull request #163](https://github.com/ignitionrobotics/ign-common/pull/163) + +1. Cleanup and add implementation pointer to Animation classes + * [Pull request #160](https://github.com/ignitionrobotics/ign-common/pull/160) + +1. Install the profiler in a version-safe manner + * [Pull request #170](https://github.com/ignitionrobotics/ign-common/pull/170) + +1. Restore support for model:// URIs + * [Pull request #172](https://github.com/ignitionrobotics/ign-common/pull/172) + +1. Deprecated common::Time + * [Pull request #90](https://github.com/ignitionrobotics/ign-common/pull/90) + +1. Update codeowners + * [Pull request #88](https://github.com/ignitionrobotics/ign-common/pull/88) + +1. Workflow updates + * [Pull request #64](https://github.com/ignitionrobotics/ign-common/pull/64) + +1. Update BitBucket Links + * [Pull request #58](https://github.com/ignitionrobotics/ign-common/pull/58) 1. Corrected `BAYER_RGGR8` to `BAYER_BGGR8` in `PixelFormatName` and `PixelFormatType` located in `graphics/include/ignition/common/Image.hh`. From d3cd29a9c79fdc84d48875ce58557b91ebf2b0a2 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Thu, 25 Mar 2021 15:49:13 -0700 Subject: [PATCH 077/219] Fix crash when using BVH animations (#188) Signed-off-by: Louise Poubel <louise@openrobotics.org> --- graphics/src/Skeleton.cc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/graphics/src/Skeleton.cc b/graphics/src/Skeleton.cc index cd42c6e28..0f64dafeb 100644 --- a/graphics/src/Skeleton.cc +++ b/graphics/src/Skeleton.cc @@ -30,7 +30,7 @@ class ignition::common::Skeleton::Implementation RawNodeWeights; /// \brief the root node - public: SkeletonNode *root; + public: SkeletonNode *root{nullptr}; /// \brief The dictionary of nodes, indexed by name public: SkeletonNodeMap nodes; @@ -68,7 +68,6 @@ class ignition::common::Skeleton::Implementation Skeleton::Skeleton() : dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { - this->dataPtr->root = nullptr; } ////////////////////////////////////////////////// @@ -82,10 +81,13 @@ Skeleton::Skeleton(SkeletonNode *_root) ////////////////////////////////////////////////// Skeleton::~Skeleton() { - for (auto& kv : this->dataPtr->nodes) + for (auto &kv : this->dataPtr->nodes) delete kv.second; - for (auto& a : this->dataPtr->anims) + this->dataPtr->nodes.clear(); + + for (auto &a : this->dataPtr->anims) delete a; + this->dataPtr->anims.clear(); } ////////////////////////////////////////////////// @@ -462,7 +464,10 @@ bool Skeleton::AddBvhAnimation(const std::string &_bvhFile, double _scale) * math::Matrix4d(skinNode->Transform().Rotation()); } - this->dataPtr->anims.push_back(skel->Animation(0u)); + // Copy pointer from temp skeleton before it's deleted + auto newAnim = new SkeletonAnimation(skel->Animation(0u)->Name()); + *newAnim = *skel->Animation(0u); + this->dataPtr->anims.push_back(newAnim); this->dataPtr->mapAnimSkin.push_back(skelMap); this->dataPtr->alignTranslate.push_back(translations); this->dataPtr->alignRotate.push_back(rotations); From 7109d23f8cd69e947f3f8dec3aa4a0288995d090 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Fri, 26 Mar 2021 06:46:41 -0700 Subject: [PATCH 078/219] =?UTF-8?q?=F0=9F=8E=88=204.0.0~pre2=20(#189)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Louise Poubel <louise@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fa51a48f5..dd31e941c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ set(IGN_CMAKE_VER ${ignition-cmake2_VERSION_MAJOR}) #============================================================================ # Configure the project #============================================================================ -ign_configure_project(VERSION_SUFFIX pre1) +ign_configure_project(VERSION_SUFFIX pre2) #============================================================================ # Set project-specific options diff --git a/Changelog.md b/Changelog.md index 10f2f56b2..750b26621 100644 --- a/Changelog.md +++ b/Changelog.md @@ -4,31 +4,34 @@ ## Ignition Common 4.0.0 (2021-03-22) +1. Fix crash when using BVH animations + * [Pull request #188](https://github.com/ignitionrobotics/ign-common/pull/188) + 1. Rotate capsule to Z-up * [Pull request #186](https://github.com/ignitionrobotics/ign-common/pull/186) -1. Add implementation pointer to ign-common classes +1. Add implementation pointer to ign-common classes * [Pull request #163](https://github.com/ignitionrobotics/ign-common/pull/163) -1. Cleanup and add implementation pointer to Animation classes +1. Cleanup and add implementation pointer to Animation classes * [Pull request #160](https://github.com/ignitionrobotics/ign-common/pull/160) -1. Install the profiler in a version-safe manner +1. Install the profiler in a version-safe manner * [Pull request #170](https://github.com/ignitionrobotics/ign-common/pull/170) -1. Restore support for model:// URIs +1. Restore support for model:// URIs * [Pull request #172](https://github.com/ignitionrobotics/ign-common/pull/172) -1. Deprecated common::Time +1. Deprecated common::Time * [Pull request #90](https://github.com/ignitionrobotics/ign-common/pull/90) -1. Update codeowners +1. Update codeowners * [Pull request #88](https://github.com/ignitionrobotics/ign-common/pull/88) -1. Workflow updates +1. Workflow updates * [Pull request #64](https://github.com/ignitionrobotics/ign-common/pull/64) -1. Update BitBucket Links +1. Update BitBucket Links * [Pull request #58](https://github.com/ignitionrobotics/ign-common/pull/58) 1. Corrected `BAYER_RGGR8` to `BAYER_BGGR8` in `PixelFormatName` and From 2f2b229a45c47cd55cc2fb751a3a9deeaa77d1f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez=20Cordero?= <ahcorde@gmail.com> Date: Fri, 26 Mar 2021 23:24:42 +0100 Subject: [PATCH 079/219] Include windows instructions in examples README.md (#190) Signed-off-by: ahcorde <ahcorde@gmail.com> --- examples/README.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/examples/README.md b/examples/README.md index 9a7fb5fa8..84917e754 100644 --- a/examples/README.md +++ b/examples/README.md @@ -12,14 +12,30 @@ cd ign-common/examples mkdir build cd build cmake .. +``` + +### Ubuntu and MacOS + +```bash make ``` +### Windows + +```bash +cmake --build . --config Release +``` + ## Run -One execuable is created inside the `build` folder for each example. +One executable is created inside the `build` folder for each example. You can run each executable from the build folder with `./executablename`. For example: +### Ubuntu and MacOS + `./events_example` +### Windows + +`.\Release\events_example.exe` From d496d79d9d90b9474e7ccd298210115084e472ad Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Wed, 31 Mar 2021 09:43:38 -0700 Subject: [PATCH 080/219] =?UTF-8?q?=F0=9F=8E=88=204.0.0=20(#191)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Louise Poubel <louise@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dd31e941c..6c73cef9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ set(IGN_CMAKE_VER ${ignition-cmake2_VERSION_MAJOR}) #============================================================================ # Configure the project #============================================================================ -ign_configure_project(VERSION_SUFFIX pre2) +ign_configure_project(VERSION_SUFFIX) #============================================================================ # Set project-specific options diff --git a/Changelog.md b/Changelog.md index 750b26621..357a352bd 100644 --- a/Changelog.md +++ b/Changelog.md @@ -2,7 +2,10 @@ ## Ignition Common 4.X.X -## Ignition Common 4.0.0 (2021-03-22) +## Ignition Common 4.0.0 (2021-03-30) + +1. Include windows instructions in examples README.md + * [Pull request #190](https://github.com/ignitionrobotics/ign-common/pull/190) 1. Fix crash when using BVH animations * [Pull request #188](https://github.com/ignitionrobotics/ign-common/pull/188) From b7ac4ed8329d50aee7d8c3e92cdf9b307aef7c0b Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Fri, 2 Apr 2021 07:28:16 -0700 Subject: [PATCH 081/219] Bump main to 5.0.0~pre1 (#193) * Bump main to 5.0.0~pre1 Signed-off-by: Louise Poubel <louise@openrobotics.org> --- CMakeLists.txt | 4 ++-- Changelog.md | 6 +++++- examples/CMakeLists.txt | 2 +- tutorials/profiler.md | 8 ++++---- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dd31e941c..3dfb5c3b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(ignition-common4 VERSION 4.0.0) +project(ignition-common5 VERSION 5.0.0) #============================================================================ # Find ignition-cmake @@ -14,7 +14,7 @@ set(IGN_CMAKE_VER ${ignition-cmake2_VERSION_MAJOR}) #============================================================================ # Configure the project #============================================================================ -ign_configure_project(VERSION_SUFFIX pre2) +ign_configure_project(VERSION_SUFFIX pre1) #============================================================================ # Set project-specific options diff --git a/Changelog.md b/Changelog.md index 750b26621..29fce3518 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,6 +1,10 @@ +## Ignition Common 5.x + +## Ignition Common 5.0.0 (20XX-XX-XX) + ## Ignition Common 4.x -## Ignition Common 4.X.X +## Ignition Common 4.X.X (20XX-XX-XX) ## Ignition Common 4.0.0 (2021-03-22) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 570041193..7528931e8 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.8 FATAL_ERROR) # Find the ignition-common library -set(IGN_COMMON_VER 4) +set(IGN_COMMON_VER 5) find_package(ignition-common${IGN_COMMON_VER} QUIET REQUIRED COMPONENTS events profiler) add_executable(assert_example assert_example.cc) diff --git a/tutorials/profiler.md b/tutorials/profiler.md index 3901e9330..2d2059d20 100644 --- a/tutorials/profiler.md +++ b/tutorials/profiler.md @@ -60,10 +60,10 @@ enabled at compile time in order to function. cmake_minimum_required(VERSION 2.8 FATAL_ERROR) # Find the ignition-common library -find_package(ignition-common4 QUIET REQUIRED COMPONENTS profiler) +find_package(ignition-common5 QUIET REQUIRED COMPONENTS profiler) add_executable(profiler_example profiler.cc) -target_link_libraries(profiler_example ignition-common4::profiler) +target_link_libraries(profiler_example ignition-common5::profiler) # Enable the profiler for the example target_compile_definitions(profiler_example PUBLIC "IGN_PROFILER_ENABLE=1") ``` @@ -99,10 +99,10 @@ xdg-open $SOURCE_DIR/ign-common/profiler/src/Remotery/vis/index.html # Use the installation path (Linux) # This may vary depending on where you have choosen to install -xdg-open /usr/share/ignition/ignition-common4/profiler_vis/index.html +xdg-open /usr/share/ignition/ignition-common5/profiler_vis/index.html # Use the installation path (macOS) -open /usr/share/ignition/ignition-common4/profiler_vis/index.html +open /usr/share/ignition/ignition-common5/profiler_vis/index.html ``` ### On Ignition library From 1f6b640a4c6dda6015258a752003523a95034d48 Mon Sep 17 00:00:00 2001 From: Jorge Perez <j.j.perez13@hotmail.com> Date: Mon, 26 Apr 2021 15:05:43 -0300 Subject: [PATCH 082/219] Remove ColladaExporter path constraint (#204) * Remove check for path to include "meshes" * Add test to check that the texture file is exported Signed-off-by: Jorge Perez <jjperez@ekumenlabs.com> --- graphics/src/ColladaExporter.cc | 8 ++++---- graphics/src/ColladaExporter_TEST.cc | 6 ++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/graphics/src/ColladaExporter.cc b/graphics/src/ColladaExporter.cc index 26936ba51..5b165e2a7 100644 --- a/graphics/src/ColladaExporter.cc +++ b/graphics/src/ColladaExporter.cc @@ -508,7 +508,7 @@ int ColladaExporter::Implementation::ExportImages( this->mesh->MaterialByIndex(i); std::string imageString = material->TextureImage(); - if (imageString.find("meshes/") != std::string::npos) + if (imageString.find("/") != std::string::npos) { char id[100]; snprintf(id, sizeof(id), "image_%u", i); @@ -589,7 +589,7 @@ void ColladaExporter::Implementation::ExportEffects( this->mesh->MaterialByIndex(i); std::string imageString = material->TextureImage(); - if (imageString.find("meshes/") != std::string::npos) + if (imageString.find("/") != std::string::npos) { tinyxml2::XMLElement *newParamXml = _libraryEffectsXml->GetDocument()->NewElement("newparam"); @@ -684,7 +684,7 @@ void ColladaExporter::Implementation::ExportEffects( _libraryEffectsXml->GetDocument()->NewElement("diffuse"); phongXml->LinkEndChild(diffuseXml); - if (imageString.find("meshes/") != std::string::npos) + if (imageString.find("/") != std::string::npos) { tinyxml2::XMLElement *textureXml = _libraryEffectsXml->GetDocument()->NewElement("texture"); @@ -827,7 +827,7 @@ void ColladaExporter::Implementation::ExportVisualScenes( std::string imageString = material->TextureImage(); - if (imageString.find("meshes/") != std::string::npos) + if (imageString.find("/") != std::string::npos) { tinyxml2::XMLElement *bindVertexInputXml = _libraryVisualScenesXml->GetDocument()->NewElement( diff --git a/graphics/src/ColladaExporter_TEST.cc b/graphics/src/ColladaExporter_TEST.cc index b2725f5c4..0bd54dd12 100644 --- a/graphics/src/ColladaExporter_TEST.cc +++ b/graphics/src/ColladaExporter_TEST.cc @@ -121,6 +121,8 @@ TEST_F(ColladaExporter, ExportCordlessDrill) "cordless_drill_exported"); const auto filenameOutExt = common::joinPaths(filenameOut, "meshes", "cordless_drill_exported.dae"); + const auto filenameOutTexture = common::joinPaths(filenameOut, + "materials", "textures", "cordless_drill.png"); // Load original mesh common::ColladaLoader loader; @@ -130,6 +132,10 @@ TEST_F(ColladaExporter, ExportCordlessDrill) common::ColladaExporter exporter; exporter.Export(meshOriginal, filenameOut, true); + // The export directory and texture should now exist. + ASSERT_TRUE(common::exists(filenameOut)); + EXPECT_TRUE(common::exists(filenameOutTexture)); + // Check .dae file tinyxml2::XMLDocument xmlDoc; ASSERT_EQ(xmlDoc.LoadFile(filenameOutExt.c_str()), tinyxml2::XML_SUCCESS); From 9a9d0e98c57fbb241f9fe4b8f309be8701a78200 Mon Sep 17 00:00:00 2001 From: Jose Luis Rivero <jrivero@osrfoundation.org> Date: Thu, 6 May 2021 07:20:20 -0700 Subject: [PATCH 083/219] Port codecov to new configuration (#212) See https://github.com/ignition-tooling/action-ignition-ci/pull/32/ Signed-off-by: Jose Luis Rivero <jrivero@osrfoundation.org> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 705db4f35..e36175c3a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: id: ci uses: ignition-tooling/action-ignition-ci@bionic with: - codecov-token: ${{ secrets.CODECOV_TOKEN }} + codecov-enabled: true focal-ci: runs-on: ubuntu-latest name: Ubuntu Focal CI From fd871fee26d8f711339cd24cc85a1974c7f522d8 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 6 May 2021 10:44:01 -0500 Subject: [PATCH 084/219] Port bazel changes for common4 Signed-off-by: Michael Carroll <michael@openrobotics.org> --- BUILD.bazel | 22 ++++++++++++++-------- av/BUILD.bazel | 14 ++++++++++---- events/BUILD.bazel | 11 +++++++---- graphics/BUILD.bazel | 12 ++++++++---- profiler/BUILD.bazel | 4 ++-- 5 files changed, 41 insertions(+), 22 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index a1b9fe3da..eff758bc1 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -19,9 +19,9 @@ exports_files(["LICENSE"]) PROJECT_NAME = "ignition-common" -PROJECT_MAJOR = 3 +PROJECT_MAJOR = 4 -PROJECT_MINOR = 13 +PROJECT_MINOR = 0 PROJECT_PATCH = 0 @@ -43,7 +43,7 @@ ign_export_header( public_headers_no_gen = glob([ "include/ignition/common/*.hh", - "include/ignition/common/detail/*.hh" + "include/ignition/common/detail/*.hh", ]) private_headers = [ @@ -51,7 +51,10 @@ private_headers = [ "src/PrintWindowsSystemWarning.hh", ] -sources = glob(["src/*.cc"], exclude=["src/*_TEST.cc"]) +sources = glob( + ["src/*.cc"], + exclude = ["src/*_TEST.cc"], +) generate_include_header( name = "commonhh_genrule", @@ -81,19 +84,22 @@ cc_library( ) cc_binary( - name = "libignition-common3.so", + name = "libignition-common4.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common3.so"], + linkopts = ["-Wl,-soname,libignition-common4.so"], linkshared = True, deps = [":ign_common"], ) -test_srcs = glob(["src/*_TEST.cc"]) +test_srcs = glob( + ["src/*_TEST.cc"], + exclude = ["src/PluginLoader_TEST.cc"], +) [cc_test( name = src.replace("/", "_").replace(".cc", "").replace("src_", ""), srcs = [src], - data = [":libignition-common3.so"], + data = [":libignition-common4.so"], deps = [ ":ign_common", IGNITION_ROOT + "ign_bazel:utilities", diff --git a/av/BUILD.bazel b/av/BUILD.bazel index f314fd603..44d33d091 100644 --- a/av/BUILD.bazel +++ b/av/BUILD.bazel @@ -16,10 +16,16 @@ package( public_headers_no_gen = glob([ "include/ignition/common/*.hh", - "include/ignition/common/av/*.hh", + "include/ignition/common/**/*.hh", ]) -sources = glob(["src/*.cc"], exclude=["src/*_TEST.cc"]) +sources = glob( + ["src/*.cc"], + exclude = [ + "src/*_TEST.cc", + "src/HWEncoder.cc", + ], +) test_sources = glob(["src/*_TEST.cc"]) @@ -59,9 +65,9 @@ cc_library( ) cc_binary( - name = "libignition-common3-av.so", + name = "libignition-common4-av.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common3-av.so"], + linkopts = ["-Wl,-soname,libignition-common4-av.so"], linkshared = True, deps = [":av"], ) diff --git a/events/BUILD.bazel b/events/BUILD.bazel index 0ecc3a6da..aa5c4c45b 100644 --- a/events/BUILD.bazel +++ b/events/BUILD.bazel @@ -16,10 +16,13 @@ package( public_headers_no_gen = glob([ "include/ignition/common/*.hh", - "include/ignition/common/events/*.hh" + "include/ignition/common/events/*.hh", ]) -sources = glob(["src/*.cc"], exclude=["src/*_TEST.cc"]) +sources = glob( + ["src/*.cc"], + exclude = ["src/*_TEST.cc"], +) test_sources = glob(["src/*_TEST.cc"]) @@ -54,9 +57,9 @@ cc_library( ) cc_binary( - name = "libignition-common3-events.so", + name = "libignition-common4-events.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common3-events.so"], + linkopts = ["-Wl,-soname,libignition-common4-events.so"], linkshared = True, deps = [":events"], ) diff --git a/graphics/BUILD.bazel b/graphics/BUILD.bazel index 81cdac7f6..8ad33792f 100644 --- a/graphics/BUILD.bazel +++ b/graphics/BUILD.bazel @@ -16,10 +16,13 @@ package( public_headers_no_gen = glob([ "include/ignition/common/*.hh", - "include/ignition/common/graphics/*.hh" + "include/ignition/common/**/*.hh", ]) -sources = glob(["src/*.cc"], exclude=["src/*_TEST.cc"]) +sources = glob( + ["src/*.cc"], + exclude = ["src/*_TEST.cc"], +) test_sources = glob(["src/*_TEST.cc"]) @@ -55,13 +58,14 @@ cc_library( "@gts", "@tinyxml2", IGNITION_ROOT + "ign_common", + IGNITION_ROOT + "ign_utils", ], ) cc_binary( - name = "libignition-common3-graphics.so", + name = "libignition-common4-graphics.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common3-graphics.so"], + linkopts = ["-Wl,-soname,libignition-common4-graphics.so"], linkshared = True, deps = [":graphics"], ) diff --git a/profiler/BUILD.bazel b/profiler/BUILD.bazel index 5d1d90fff..8de578174 100644 --- a/profiler/BUILD.bazel +++ b/profiler/BUILD.bazel @@ -100,9 +100,9 @@ cc_library( ) cc_binary( - name = "libignition-common3-profiler.so", + name = "libignition-common4-profiler.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common3-profiler.so"], + linkopts = ["-Wl,-soname,libignition-common4-profiler.so"], linkshared = True, deps = [":profiler"], ) From 69a1df36a746b72e3fe96cdd9928e754eca943db Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 6 May 2021 10:52:56 -0500 Subject: [PATCH 085/219] Account for version differences Signed-off-by: Michael Carroll <michael@openrobotics.org> --- README.md | 2 +- .../include/ignition/common/SkeletonAnimation.hh | 9 --------- graphics/src/SkeletonAnimation.cc | 13 ------------- 3 files changed, 1 insertion(+), 23 deletions(-) diff --git a/README.md b/README.md index e596b67f3..61ed6dc51 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ callback system. # Install -See the [installation tutorial](https://ignitionrobotics.org/api/common/3.11/tutorials.html). +See the [installation tutorial](https://ignitionrobotics.org/api/common/4.0/tutorials.html). # Usage diff --git a/graphics/include/ignition/common/SkeletonAnimation.hh b/graphics/include/ignition/common/SkeletonAnimation.hh index f64f2203f..ca096bc35 100644 --- a/graphics/include/ignition/common/SkeletonAnimation.hh +++ b/graphics/include/ignition/common/SkeletonAnimation.hh @@ -46,15 +46,6 @@ namespace ignition /// the animations public: ~SkeletonAnimation(); - // NOTE: this is not needed starting in ign-common4 since ign-common4 uses - // the IGN_UTILS_IMPL_PTR instead of a raw impl pointer. So, this - // method should not be included in forward ports from ign-common3 to - // ign-common4 - /// \brief Assignment operator - /// \param[in] _other The new SkeletonAnimation - /// \return A reference to this instance - public: SkeletonAnimation &operator=(const SkeletonAnimation &_other); - /// \brief Changes the name /// \param[in] _name the new name public: void SetName(const std::string& _name); diff --git a/graphics/src/SkeletonAnimation.cc b/graphics/src/SkeletonAnimation.cc index 62dc91248..bf74a3cbd 100644 --- a/graphics/src/SkeletonAnimation.cc +++ b/graphics/src/SkeletonAnimation.cc @@ -47,19 +47,6 @@ SkeletonAnimation::~SkeletonAnimation() { } -////////////////////////////////////////////////// -SkeletonAnimation &SkeletonAnimation::operator=(const SkeletonAnimation &_other) -{ - if (this == &_other) - return *this; - - this->data->name = _other.data->name; - this->data->length = _other.data->length; - this->data->animations = _other.data->animations; - - return *this; -} - ////////////////////////////////////////////////// void SkeletonAnimation::SetName(const std::string &_name) { From 912de23a71cc44fcfb2d5f391e218becc5f0fb0d Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 6 May 2021 11:41:59 -0500 Subject: [PATCH 086/219] Fix bad merge Signed-off-by: Michael Carroll <michael@openrobotics.org> --- graphics/src/Skeleton.cc | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/graphics/src/Skeleton.cc b/graphics/src/Skeleton.cc index d07e5d3a3..dbb46b8a5 100644 --- a/graphics/src/Skeleton.cc +++ b/graphics/src/Skeleton.cc @@ -81,16 +81,13 @@ Skeleton::Skeleton(SkeletonNode *_root) ////////////////////////////////////////////////// Skeleton::~Skeleton() { - for (auto &kv : this->data->nodes) + for (auto &kv : this->dataPtr->nodes) delete kv.second; - this->data->nodes.clear(); + this->dataPtr->nodes.clear(); - for (auto &a : this->data->anims) + for (auto &a : this->dataPtr->anims) delete a; - this->data->anims.clear(); - - delete this->data; - this->data = NULL; + this->dataPtr->anims.clear(); } ////////////////////////////////////////////////// @@ -470,18 +467,10 @@ bool Skeleton::AddBvhAnimation(const std::string &_bvhFile, double _scale) // Copy pointer from temp skeleton before it's deleted auto newAnim = new SkeletonAnimation(skel->Animation(0u)->Name()); *newAnim = *skel->Animation(0u); -<<<<<<< HEAD this->dataPtr->anims.push_back(newAnim); this->dataPtr->mapAnimSkin.push_back(skelMap); this->dataPtr->alignTranslate.push_back(translations); this->dataPtr->alignRotate.push_back(rotations); -======= - this->data->anims.push_back(newAnim); - this->data->mapAnimSkin.push_back(skelMap); - this->data->alignTranslate.push_back(translations); - this->data->alignRotate.push_back(rotations); ->>>>>>> ign-common3 - return true; } From d73921557ce8e0747daa878e42070a43344557ec Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Tue, 22 Jun 2021 10:33:36 -0700 Subject: [PATCH 087/219] =?UTF-8?q?=F0=9F=8E=88=204.1.0=20(#226)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Louise Poubel <louise@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 65 ++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 61 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 959440d3d..67143e7d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(ignition-common4 VERSION 4.0.0) +project(ignition-common4 VERSION 4.1.0) #============================================================================ # Find ignition-cmake diff --git a/Changelog.md b/Changelog.md index 88172af49..52764743f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,6 +1,61 @@ ## Ignition Common 4.x -## Ignition Common 4.X.X +## Ignition Common 4.X.X (202X-XX-XX) + +## Ignition Common 4.1.0 (2021-06-22) + +1. Make KeyEvent rule-of-five compliant + * [Pull request #224](https://github.com/ignitionrobotics/ign-common/pull/224) + +1. Fix `av_*` API usage for deprecations + * [Pull request #220](https://github.com/ignitionrobotics/ign-common/pull/220) + +1. Set project-wide standard to C++17 + * [Pull request #221](https://github.com/ignitionrobotics/ign-common/pull/221) + +1. Remove `CMAKE_CXX_FLAGS` from test targets + * [Pull request #214](https://github.com/ignitionrobotics/ign-common/pull/214) + +1. Support loading PBR textures in OBJLoader + * [Pull request #216](https://github.com/ignitionrobotics/ign-common/pull/216) + +1. Remove `tools/code_check` and update codecov + * [Pull request #219](https://github.com/ignitionrobotics/ign-common/pull/219) + +1. Port codecov to new configuration + * [Pull request #212](https://github.com/ignitionrobotics/ign-common/pull/212) + +1. Fix loading collada files with multiple texcoord sets using the same offset + * [Pull request #208](https://github.com/ignitionrobotics/ign-common/pull/208) + +1. Add function to convert single channel image data to RGB image + * [Pull request #205](https://github.com/ignitionrobotics/ign-common/pull/205) + +1. Remove ColladaExporter path constraint + * [Pull request #204](https://github.com/ignitionrobotics/ign-common/pull/204) + +1. Avoid duplication of / in joinPaths (Windows) + * [Pull request #201](https://github.com/ignitionrobotics/ign-common/pull/201) + * [Pull request #209](https://github.com/ignitionrobotics/ign-common/pull/209) + * [Pull request #215](https://github.com/ignitionrobotics/ign-common/pull/215) + +1. Fixed colladaLoader on Windows + * [Pull request #200](https://github.com/ignitionrobotics/ign-common/pull/200) + +1. Improved Windows support + * [Pull request #197](https://github.com/ignitionrobotics/ign-common/pull/197) + +1. Function to serialize compressed image to buffer + * [Pull request #139](https://github.com/ignitionrobotics/ign-common/pull/139) + +1. Fixed tutorial link + * [Pull request #194](https://github.com/ignitionrobotics/ign-common/pull/194) + +1. Use matching malloc/free for AudioDecoder. + * [Pull request #192](https://github.com/ignitionrobotics/ign-common/pull/192) + +1. Add bazel buildsystem support + * [Pull request #123](https://github.com/ignitionrobotics/ign-common/pull/123) ## Ignition Common 4.0.0 (2021-03-30) @@ -67,19 +122,19 @@ ## Ignition Common 3.13.0 (2021-04-27) -1. Add function to convert single channel image data to RGB image +1. Add function to convert single channel image data to RGB image * [Pull request #205](https://github.com/ignitionrobotics/ign-common/pull/205) 1. Avoid duplication of / in joinPaths (Windows) * [Pull request #201](https://github.com/ignitionrobotics/ign-common/pull/201) -1. Fix colladaLoader on Windows +1. Fix colladaLoader on Windows * [Pull request #200](https://github.com/ignitionrobotics/ign-common/pull/200) 1. Backport #188: Fix crash when using BVH animations. * [Pull request #199](https://github.com/ignitionrobotics/ign-common/pull/199) -1. Improved Windows support +1. Improved Windows support * [Pull request #197](https://github.com/ignitionrobotics/ign-common/pull/197) ## Ignition Common 3.12.0 (2021-04-06) @@ -96,7 +151,7 @@ 1. Fixed tutorial link in the README.md. * [Pull request #194](https://github.com/ignitionrobotics/ign-common/pull/194) -1. Function to serialize compressed image to buffer +1. Function to serialize compressed image to buffer * [Pull request #139](https://github.com/ignitionrobotics/ign-common/pull/139) ## Ignition Common 3.11.1 (2021-03-08) From d1f45f4546a9e687543caa2641ec0b2a7dcfc64a Mon Sep 17 00:00:00 2001 From: ddengster <liangdeng.fan@gmail.com> Date: Tue, 20 Jul 2021 00:28:03 +0800 Subject: [PATCH 088/219] Export lights to dae (#228) * Exports lights for the collada world exporter. Based off the collada 1.4 spec * Test added for collada exporter exporting lights Signed-off-by: ddengster <ed.fan@osrfoundation.org> --- .../ignition/common/ColladaExporter.hh | 54 +++++++ graphics/src/ColladaExporter.cc | 141 +++++++++++++++++- graphics/src/ColladaExporter_TEST.cc | 129 ++++++++++++++++ 3 files changed, 319 insertions(+), 5 deletions(-) diff --git a/graphics/include/ignition/common/ColladaExporter.hh b/graphics/include/ignition/common/ColladaExporter.hh index 93d4d41d1..5add1a5cb 100644 --- a/graphics/include/ignition/common/ColladaExporter.hh +++ b/graphics/include/ignition/common/ColladaExporter.hh @@ -24,6 +24,7 @@ #include <ignition/common/MeshExporter.hh> #include <ignition/common/graphics/Export.hh> +#include <ignition/math/Color.hh> #include <ignition/math/Matrix4.hh> #include <ignition/utils/ImplPtr.hh> @@ -32,6 +33,41 @@ namespace ignition { namespace common { + /// \brief This struct contains light data specifically for collada export + /// Defaults set based on collada 1.4 specifications + struct ColladaLight + { + /// \brief Name of the light + std::string name; + + /// \brief Type of the light. Either "point", "directional" or "spot" + std::string type; + + /// \brief Light direction (directional/spot lights only) + math::Vector3d direction; + + /// \brief Light position (non directional lights only) + math::Vector3d position; + + /// \brief Light diffuse color + math::Color diffuse; + + /// \brief Constant attentuation + double constantAttenuation = 1.0; + + /// \brief Linear attentuation + double linearAttenuation = 0.0; + + /// \brief Quadratic attentuation + double quadraticAttenuation = 0.0; + + /// \brief Falloff angle in degrees + double falloffAngleDeg = 180.0; + + /// \brief Fallof exponent + double falloffExponent = 0.0; + }; + /// \brief Class used to export Collada mesh files class IGNITION_COMMON_GRAPHICS_VISIBLE ColladaExporter : public MeshExporter { @@ -49,10 +85,28 @@ namespace ignition public: virtual void Export(const Mesh *_mesh, const std::string &_filename, bool _exportTextures = false); + /// \brief Export a mesh to a file + /// \param[in] _mesh Pointer to the mesh to be exported + /// \param[in] _filename Exported file's path and name + /// \param[in] _exportTextures True to export texture images to + /// '../materials/textures' folder + /// \param[in] _submeshToMatrix Matrices of submeshes public: void Export(const Mesh *_mesh, const std::string &_filename, bool _exportTextures, const std::vector<math::Matrix4d> &_submeshToMatrix); + /// \brief Export a mesh to a file + /// \param[in] _mesh Pointer to the mesh to be exported + /// \param[in] _filename Exported file's path and name + /// \param[in] _exportTextures True to export texture images to + /// '../materials/textures' folder + /// \param[in] _submeshToMatrix Matrices of submeshes + /// \param[in] _lights List of lights to export + public: void Export(const Mesh *_mesh, + const std::string &_filename, bool _exportTextures, + const std::vector<math::Matrix4d> &_submeshToMatrix, + const std::vector<ColladaLight> &_lights); + /// \brief Pointer to private data. IGN_UTILS_IMPL_PTR(dataPtr) }; diff --git a/graphics/src/ColladaExporter.cc b/graphics/src/ColladaExporter.cc index 101f41cb4..153540162 100644 --- a/graphics/src/ColladaExporter.cc +++ b/graphics/src/ColladaExporter.cc @@ -122,7 +122,8 @@ class ignition::common::ColladaExporter::Implementation /// scenes XML instance public: void ExportVisualScenes( tinyxml2::XMLElement *_libraryVisualScenesXml, - const std::vector<math::Matrix4d> &_submeshToMatrix); + const std::vector<math::Matrix4d> &_submeshToMatrix, + const std::vector<ColladaLight> &_lights); /// \brief Export scene element /// \param[in] _sceneXml Pointer to the scene XML instance @@ -164,12 +165,24 @@ void ColladaExporter::Export(const Mesh *_mesh, const std::string &_filename, bool _exportTextures) { std::vector<math::Matrix4d> empty; - this->Export(_mesh, _filename, _exportTextures, empty); + std::vector<ColladaLight> empty_lights; + this->Export(_mesh, _filename, _exportTextures, empty, empty_lights); +} + +////////////////////////////////////////////////// +void ColladaExporter::Export(const Mesh *_mesh, + const std::string &_filename, bool _exportTextures, + const std::vector<math::Matrix4d> &_submeshToMatrix) +{ + std::vector<ColladaLight> empty_lights; + this->Export(_mesh, _filename, _exportTextures, + _submeshToMatrix, empty_lights); } ////////////////////////////////////////////////// void ColladaExporter::Export(const Mesh *_mesh, const std::string &_filename, - bool _exportTextures, const std::vector<math::Matrix4d> &_submeshToMatrix) + bool _exportTextures, const std::vector<math::Matrix4d> &_submeshToMatrix, + const std::vector<ColladaLight> &_lights) { if ( _submeshToMatrix.size() > 0 && (_mesh->SubMeshCount() != _submeshToMatrix.size()) ) @@ -239,10 +252,75 @@ void ColladaExporter::Export(const Mesh *_mesh, const std::string &_filename, colladaXml->LinkEndChild(libraryEffectsXml); } + tinyxml2::XMLElement *libraryLightsXml = + xmlDoc.NewElement("library_lights"); + for (const auto& light : _lights) + { + tinyxml2::XMLElement *lightXml = + xmlDoc.NewElement("light"); + lightXml->SetAttribute("name", light.name.c_str()); + lightXml->SetAttribute("id", light.name.c_str()); + libraryLightsXml->LinkEndChild(lightXml); + + tinyxml2::XMLElement *techniqueCommonXml = + xmlDoc.NewElement("technique_common"); + lightXml->LinkEndChild(techniqueCommonXml); + + tinyxml2::XMLElement *lightTypeXml = + xmlDoc.NewElement(light.type.c_str()); + techniqueCommonXml->LinkEndChild(lightTypeXml); + + // color + tinyxml2::XMLElement *colorXml = + xmlDoc.NewElement("color"); + char color_str[100] = { 0 }; + snprintf(color_str, sizeof(color_str), "%g %g %g", + light.diffuse.R(), light.diffuse.G(), light.diffuse.B()); + colorXml->SetText(color_str); + lightTypeXml->LinkEndChild(colorXml); + + // attenuations + if (light.type == "point" || light.type == "spot") + { + auto attenuation_tag = [&](const char* tagname, double value) + { + tinyxml2::XMLElement *attenXml = + xmlDoc.NewElement(tagname); + + char str[100] = { 0 }; + snprintf(str, sizeof(str), "%g", value); + attenXml->SetText(str); + lightTypeXml->LinkEndChild(attenXml); + }; + attenuation_tag("constant_attenuation", light.constantAttenuation); + attenuation_tag("linear_attenuation", light.linearAttenuation); + attenuation_tag("quadratic_attenuation", light.quadraticAttenuation); + } + + // falloff + if (light.type == "spot") + { + tinyxml2::XMLElement *falloffAngleXml = + xmlDoc.NewElement("falloff_angle"); + char str[100] = { 0 }; + snprintf(str, sizeof(str), "%g", light.falloffAngleDeg); + falloffAngleXml->SetText(str); + lightTypeXml->LinkEndChild(falloffAngleXml); + + tinyxml2::XMLElement *falloffExpoXml = + xmlDoc.NewElement("falloff_exponent"); + snprintf(str, sizeof(str), "%g", light.falloffExponent); + falloffExpoXml->SetText(str); + lightTypeXml->LinkEndChild(falloffExpoXml); + } + } + colladaXml->LinkEndChild(libraryLightsXml); + // Library visual scenes element tinyxml2::XMLElement *libraryVisualScenesXml = xmlDoc.NewElement("library_visual_scenes"); - this->dataPtr->ExportVisualScenes(libraryVisualScenesXml, _submeshToMatrix); + this->dataPtr->ExportVisualScenes(libraryVisualScenesXml, + _submeshToMatrix, _lights); colladaXml->LinkEndChild(libraryVisualScenesXml); // Scene element @@ -765,7 +843,8 @@ void ColladaExporter::Implementation::ExportEffects( ////////////////////////////////////////////////// void ColladaExporter::Implementation::ExportVisualScenes( tinyxml2::XMLElement *_libraryVisualScenesXml, - const std::vector<math::Matrix4d> &_submeshToMatrix) + const std::vector<math::Matrix4d> &_submeshToMatrix, + const std::vector<ColladaLight> &_lights) { tinyxml2::XMLElement *visualSceneXml = _libraryVisualScenesXml->GetDocument()->NewElement("visual_scene"); @@ -848,6 +927,58 @@ void ColladaExporter::Implementation::ExportVisualScenes( } } } + + for (const auto& light : _lights) + { + tinyxml2::XMLElement *nodeXml = + _libraryVisualScenesXml->GetDocument()->NewElement("node"); + visualSceneXml->LinkEndChild(nodeXml); + + nodeXml->SetAttribute("name", light.name.c_str()); + + tinyxml2::XMLElement *lightInstXml = + _libraryVisualScenesXml->GetDocument()->NewElement("instance_light"); + char lightId[100] = { 0 }; + snprintf(lightId, sizeof(lightId), "#%s", light.name.c_str()); + lightInstXml->SetAttribute("url", lightId); + nodeXml->LinkEndChild(lightInstXml); + + const auto& position = light.position; + // translation + { + tinyxml2::XMLElement *translateXml = + _libraryVisualScenesXml->GetDocument()->NewElement("translate"); + translateXml->SetAttribute("sid", "translate"); + + char tx_value[100] = { 0 }; + snprintf(tx_value, sizeof(tx_value), "%f %f %f", + position.X(), position.Y(), position.Z()); + translateXml->SetText(tx_value); + nodeXml->LinkEndChild(translateXml); + } + + // rotation; blender starts off with light direction (0,0,-1), + // we output an axis-angle rotation to our desired direction + { + auto lightdir_norm = light.direction.Normalized(); + math::Vector3d initial_dir(0, 0, -1); + math::Quaterniond q; + q.From2Axes(initial_dir, lightdir_norm); + + math::Vector3d axis; + double angle = 0.0; + q.ToAxis(axis, angle); + + tinyxml2::XMLElement *rotateXml = + _libraryVisualScenesXml->GetDocument()->NewElement("rotate"); + + char str[100] = { 0 }; + snprintf(str, sizeof(str), "%g %g %g %g", + axis.X(), axis.Y(), axis.Z(), angle / IGN_PI * 180.0); + rotateXml->SetText(str); + nodeXml->LinkEndChild(rotateXml); + } + } } ////////////////////////////////////////////////// diff --git a/graphics/src/ColladaExporter_TEST.cc b/graphics/src/ColladaExporter_TEST.cc index f005b163e..5d1af1b8c 100644 --- a/graphics/src/ColladaExporter_TEST.cc +++ b/graphics/src/ColladaExporter_TEST.cc @@ -315,6 +315,135 @@ TEST_F(ColladaExporter, ExportMeshWithSubmeshes) meshReloaded->TexCoordCount()); } +TEST_F(ColladaExporter, ExportLights) +{ + const auto filenameIn = common::testing::TestFile("data", "box.dae"); + const auto filenameOut = common::joinPaths(this->pathOut, + "box_with_lights_exported"); + const auto filenameOutExt = filenameOut + ".dae"; + + // Load original mesh + common::ColladaLoader loader; + const common::Mesh *meshOriginal = loader.Load(filenameIn); + + // Export with extension + common::ColladaExporter exporter; + std::vector<math::Matrix4d> submesh_mtx; + std::vector<common::ColladaLight> lights; + + // add some lights + { + common::ColladaLight directional; + directional.name = "sun"; + directional.type = "directional"; + directional.direction = math::Vector3d(0, 1, -1); + directional.position = math::Vector3d(0, 0, 0); + directional.diffuse = math::Color(1, 0.5, 1); + lights.push_back(directional); + + common::ColladaLight point; + point.name = "lamp"; + point.type = "point"; + point.position = math::Vector3d(0, 0, 10); + point.diffuse = math::Color(1, 0.5, 1); + point.constantAttenuation = 0.8; + point.linearAttenuation = 0.8; + point.quadraticAttenuation = 0.1; + lights.push_back(point); + + common::ColladaLight spot; + spot.name = "torch"; + spot.type = "spot"; + spot.position = math::Vector3d(0, 10, 10); + spot.diffuse = math::Color(1, 0.5, 1); + spot.constantAttenuation = 0.8; + spot.linearAttenuation = 0.8; + spot.quadraticAttenuation = 0.1; + spot.falloffAngleDeg = 90.0; + spot.falloffExponent = 0.125; + lights.push_back(spot); + } + + exporter.Export(meshOriginal, filenameOut, false, submesh_mtx, lights); + + tinyxml2::XMLDocument xmlDoc; + ASSERT_EQ(xmlDoc.LoadFile(filenameOutExt.c_str()), tinyxml2::XML_SUCCESS); + + tinyxml2::XMLElement* collada = xmlDoc.FirstChildElement("COLLADA"); + ASSERT_TRUE(xmlDoc.FirstChildElement("COLLADA") != nullptr); + + auto lib_lights = collada->FirstChildElement("library_lights"); + EXPECT_TRUE(lib_lights); + + int light_count = 0; + auto light_ele = lib_lights->FirstChildElement("light"); + for (; light_ele != nullptr; light_ele = light_ele->NextSiblingElement()) + { + const char* light_name_cstr = light_ele->Attribute("name"); + ASSERT_TRUE(light_name_cstr); + std::string light_name = light_name_cstr; + + auto technique = light_ele->FirstChildElement("technique_common"); + EXPECT_TRUE(technique); + + if (light_name == "sun") + { + auto directional = technique->FirstChildElement("directional"); + EXPECT_TRUE(directional); + EXPECT_TRUE(directional->FirstChildElement("color")); + } + else if (light_name == "lamp") + { + auto point = technique->FirstChildElement("point"); + EXPECT_TRUE(point); + EXPECT_TRUE(point->FirstChildElement("color")); + EXPECT_TRUE(point->FirstChildElement("constant_attenuation")); + EXPECT_TRUE(point->FirstChildElement("linear_attenuation")); + EXPECT_TRUE(point->FirstChildElement("quadratic_attenuation")); + } + else if (light_name == "torch") + { + auto spot = technique->FirstChildElement("spot"); + EXPECT_TRUE(spot); + EXPECT_TRUE(spot->FirstChildElement("color")); + EXPECT_TRUE(spot->FirstChildElement("constant_attenuation")); + EXPECT_TRUE(spot->FirstChildElement("linear_attenuation")); + EXPECT_TRUE(spot->FirstChildElement("quadratic_attenuation")); + EXPECT_TRUE(spot->FirstChildElement("falloff_angle")); + EXPECT_TRUE(spot->FirstChildElement("falloff_exponent")); + } + else + ASSERT_TRUE(0); // Invalid light name given + + ++light_count; + } + EXPECT_EQ(light_count, 3); + + // instantiation + auto lib_visual_scenes = collada->FirstChildElement("library_visual_scenes"); + EXPECT_TRUE(lib_visual_scenes); + auto scene = lib_visual_scenes->FirstChildElement("visual_scene"); + EXPECT_TRUE(scene); + + int node_with_light_count = 0; + auto node_ele = scene->FirstChildElement("node"); + for (; node_ele != nullptr; node_ele = node_ele->NextSiblingElement()) + { + const char* node_name_cstr = node_ele->Attribute("name"); + ASSERT_TRUE(node_name_cstr); + std::string node_name = node_name_cstr; + if (node_name == "sun" || node_name == "lamp" || node_name == "torch") + { + EXPECT_TRUE(node_ele->FirstChildElement("instance_light")); + EXPECT_TRUE(node_ele->FirstChildElement("translate")); + EXPECT_TRUE(node_ele->FirstChildElement("rotate")); + + ++node_with_light_count; + } + } + EXPECT_EQ(node_with_light_count, 3); +} + ///////////////////////////////////////////////// int main(int argc, char **argv) { From 465bb7780e552b278de559fafaffe3d061a99782 Mon Sep 17 00:00:00 2001 From: Kunal Tyagi <tyagi.kunal@live.com> Date: Wed, 28 Jul 2021 03:09:28 +0900 Subject: [PATCH 089/219] Add cstring for `std::memcpy` (#230) Signed-off-by: Kunal Tyagi <tyagi.kunal@live.com> --- graphics/src/Image.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/graphics/src/Image.cc b/graphics/src/Image.cc index 37737d740..b92855998 100644 --- a/graphics/src/Image.cc +++ b/graphics/src/Image.cc @@ -19,6 +19,7 @@ #endif #include <FreeImage.h> +#include <cstring> #include <string> #include <ignition/common/Console.hh> From e70a75d107ba86bb3d1a68690e1d33bfaa4cbb29 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Mon, 2 Aug 2021 14:22:25 -0500 Subject: [PATCH 090/219] =?UTF-8?q?=F0=9F=8E=88=204.2.0=20(#235)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Carroll <michael@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 67143e7d9..80e403ea6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(ignition-common4 VERSION 4.1.0) +project(ignition-common4 VERSION 4.2.0) #============================================================================ # Find ignition-cmake diff --git a/Changelog.md b/Changelog.md index 52764743f..4482e4a42 100644 --- a/Changelog.md +++ b/Changelog.md @@ -2,6 +2,14 @@ ## Ignition Common 4.X.X (202X-XX-XX) +## Ignition Common 4.2.0 (2021-08-02) + +1. Export lights to dae + * [Pull request #228](https://github.com/ignitionrobotics/ign-common/pull/228) + +1. Add cstring for std::memcpy + * [Pull request #230](https://github.com/ignitionrobotics/ign-common/pull/230) + ## Ignition Common 4.1.0 (2021-06-22) 1. Make KeyEvent rule-of-five compliant From 4c0ee89d500a521bf6f0ee991bf6c355bdf44afd Mon Sep 17 00:00:00 2001 From: "Matias N. Goldberg" <dark_sylinc@yahoo.com.ar> Date: Mon, 23 Aug 2021 12:22:57 -0300 Subject: [PATCH 091/219] Fix memory corruption & leaks in Image (#240) Image was calling SwapRedBlue unconditionally based on compile-time values. That meant that greyscale images would try to swap Red and Blue channels, but there is only one channel. This resulted in artifacts on the final image as well as memory corruption as the last pixels would be swapped against out of bound regions. Additionally, there were several instances where FIBITMAP handles were leaking. Signed-off-by: Matias N. Goldberg <dark_sylinc@yahoo.com.ar> --- graphics/src/Image.cc | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/graphics/src/Image.cc b/graphics/src/Image.cc index b92855998..c200fff74 100644 --- a/graphics/src/Image.cc +++ b/graphics/src/Image.cc @@ -46,6 +46,16 @@ namespace ignition public: void DataImpl(unsigned char **_data, unsigned int &_count, FIBITMAP *_img) const; + /// \brief Returns true if SwapRedBlue can and should be called + /// If it returns false, it may not be safe to call SwapRedBlue + /// (it could lead to memory corruption!). See CanSwapRedBlue + /// \return True if we should call SwapRedBlue + public: bool ShouldSwapRedBlue() const; + + /// \brief Returns true if SwapRedBlue is safe to be called + /// \return False if it is NOT safe to call SwapRedBlue + public: bool CanSwapRedBlue() const; + /// \brief Swap red and blue pixels /// \param[in] _width Width of the image /// \param[in] _height Height of the image @@ -223,10 +233,12 @@ void Image::SetFromData(const unsigned char *_data, this->dataPtr->bitmap = FreeImage_ConvertFromRawBits(const_cast<BYTE*>(_data), _width, _height, scanlineBytes, bpp, redmask, greenmask, bluemask, true); - if (FREEIMAGE_COLORORDER != FREEIMAGE_COLORORDER_RGB) + if (this->dataPtr->ShouldSwapRedBlue()) { + FIBITMAP *toDelete = this->dataPtr->bitmap; this->dataPtr->bitmap = this->dataPtr->SwapRedBlue(this->Width(), - this->Height()); + this->Height()); + FreeImage_Unload(toDelete); } } @@ -240,22 +252,27 @@ int Image::Pitch() const void Image::RGBData(unsigned char **_data, unsigned int &_count) { FIBITMAP *tmp = this->dataPtr->bitmap; - if (FREEIMAGE_COLORORDER != FREEIMAGE_COLORORDER_RGB) + FIBITMAP *tmp2 = nullptr; + if (this->dataPtr->ShouldSwapRedBlue()) { tmp = this->dataPtr->SwapRedBlue(this->Width(), this->Height()); + tmp2 = tmp; } tmp = FreeImage_ConvertTo24Bits(tmp); this->dataPtr->DataImpl(_data, _count, tmp); FreeImage_Unload(tmp); + if (tmp2) + FreeImage_Unload(tmp2); } ////////////////////////////////////////////////// void Image::Data(unsigned char **_data, unsigned int &_count) { - if (FREEIMAGE_COLORORDER != FREEIMAGE_COLORORDER_RGB) + if (this->dataPtr->ShouldSwapRedBlue()) { - this->dataPtr->DataImpl(_data, _count, this->dataPtr->SwapRedBlue( - this->Width(), this->Height())); + FIBITMAP *tmp = this->dataPtr->SwapRedBlue(this->Width(), this->Height()); + this->dataPtr->DataImpl(_data, _count, tmp); + FreeImage_Unload(tmp); } else { @@ -550,6 +567,19 @@ Image::PixelFormatType Image::ConvertPixelFormat(const std::string &_format) return UNKNOWN_PIXEL_FORMAT; } +////////////////////////////////////////////////// +bool Image::Implementation::ShouldSwapRedBlue() const +{ + return CanSwapRedBlue() && FREEIMAGE_COLORORDER != FREEIMAGE_COLORORDER_RGB; +} + +////////////////////////////////////////////////// +bool Image::Implementation::CanSwapRedBlue() const +{ + const unsigned bpp = FreeImage_GetBPP(this->bitmap); + return bpp == 24u || bpp == 32u; +} + ////////////////////////////////////////////////// FIBITMAP* Image::Implementation::SwapRedBlue(const unsigned int &_width, const unsigned int &_height) From d06ed33fc9abc4f149234acd246ea566d119a6b1 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Mon, 13 Sep 2021 17:40:13 -0500 Subject: [PATCH 092/219] Add functions and objects for Temporary Directories (#244) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Alejandro HernΓ‘ndez Cordero <ahcorde@gmail.com> --- include/ignition/common/TempDirectory.hh | 110 +++++++++++ src/CMakeLists.txt | 3 + src/Console.cc | 2 +- src/Console_TEST.cc | 19 +- src/SystemPaths_TEST.cc | 16 ++ src/TempDirectory.cc | 229 +++++++++++++++++++++++ src/TempDirectory_TEST.cc | 113 +++++++++++ test/test_config.h.in | 49 ++--- 8 files changed, 495 insertions(+), 46 deletions(-) create mode 100644 include/ignition/common/TempDirectory.hh create mode 100644 src/TempDirectory.cc create mode 100644 src/TempDirectory_TEST.cc diff --git a/include/ignition/common/TempDirectory.hh b/include/ignition/common/TempDirectory.hh new file mode 100644 index 000000000..b66c691e5 --- /dev/null +++ b/include/ignition/common/TempDirectory.hh @@ -0,0 +1,110 @@ +/* + * Copyright 2021 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef IGNITION_COMMON_TEMPDIRECTORY_HH_ +#define IGNITION_COMMON_TEMPDIRECTORY_HH_ + +#include <memory> +#include <string> + +#include <ignition/common/Export.hh> +#include <ignition/common/Filesystem.hh> +#include <ignition/utils/ImplPtr.hh> + +namespace ignition +{ + namespace common + { + class TempDirectoryPrivate; + + /// \brief Return the path to a directory suitable for temporary files. + /// + /// Calls std::filesystem::temp_directory_path, refer to the standard + /// documentation for your platform for behaviors. + /// \return A directory suitable for temporary files. + std::string IGNITION_COMMON_VISIBLE tempDirectoryPath(); + + /// \brief Create a directory in the tempDirectoryPath by expanding + /// a name template + /// + /// On execution, will create the directory: + /// "_parentPath"/"_baseName" + "XXXXXX", where XXXXXX will be filled + /// out by an OS-appropriate method (eg mkdtmp/_mktemp_s) + /// + /// \param[in] _baseName String to be prepended to the expanded template + /// \param[in] _parentPath Location to create the directory + /// \param[in] _warningOp Allow or suppress filesystem warnings + /// \return Path to newly-created temporary directory + std::string IGNITION_COMMON_VISIBLE createTempDirectory( + const std::string &_baseName, + const std::string &_parentPath, + const FilesystemWarningOp _warningOp = FSWO_LOG_WARNINGS); + + /// \class TempDirectory TempDirectory.hh ignitin/common/TempDirectory.hh + /// \brief Create a temporary directory in the OS temp location. + /// Upon construction, the current working directory will be set to this + /// new temporary directory. + /// Upon destruction, the current working directory will be restored to the + /// location when the TempDirectory object was constructed. + class IGNITION_COMMON_VISIBLE TempDirectory + { + /// \brief Create a directory in the tempDirectoryPath by expanding + /// a name template. This directory can also be automatically cleaned + /// up when the object goes out of scope. + /// + /// The TempDirectory will have the form $TMPDIR/_subdir/_prefixXXXXX/ + /// + /// \param[in] _prefix String to be expanded for the template + /// \param[in] _subDir Subdirectory in OS $TMPDIR, if desired + /// \param[in] _cleanup True to indicate that the filesystem should + /// be cleaned as part of the destructor + public: TempDirectory(const std::string &_prefix = "temp_dir", + const std::string &_subDir = "ignition", + bool _cleanup = true); + + /// \brief Destroy the temporary directory, removing from filesystem + /// if cleanup is true. + public: ~TempDirectory(); + + /// \brief Indicate if the TempDirectory object is in a valid state + /// and that the folder exists on the filesystem + /// \return true if the TempDirectory is valid + public: bool Valid() const; + + /// \brief Set if the folder on disk should be cleaned. + /// + /// This is useful if you wish to clean by default during a test, but + /// retain the contents of the TempDirectory if the test fails. + /// \param[in] _doCleanup True to indicate that the filesystem should + /// be cleaned as part of the destructor + public: void DoCleanup(bool _doCleanup); + + /// \brief Retrieve the current cleanup flag state + /// \return true if filesystem cleanup will occur + public: bool DoCleanup() const; + + /// \brief Retrieve the fully-expanded temporary directory path + /// \return the temporary directory path + public: std::string Path() const; + + /// \brief Private data pointer. + IGN_UTILS_IMPL_PTR(dataPtr) + }; + } // namespace common +} // namespace ignition +#endif // IGNITION_COMMON_TEMPDIRECTORY_HH_ + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 90e333f1e..7b2974194 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,6 +17,9 @@ target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} target_include_directories(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE ${ignition-math${IGN_MATH_VER}_INCLUDE_DIRS}) +target_include_directories(${PROJECT_LIBRARY_TARGET_NAME} PUBLIC + ${ignition-utils${IGN_UTILS_VER}_INCLUDE_DIRS}) + # Handle non-Windows configuration settings if(NOT WIN32) # Link the libraries that we don't expect to find on Windows diff --git a/src/Console.cc b/src/Console.cc index 0e8b1fbbb..ff013fe23 100644 --- a/src/Console.cc +++ b/src/Console.cc @@ -252,7 +252,7 @@ void FileLogger::Init(const std::string &_directory, if (isDirectory(logPath)) this->logDirectory = logPath; else - this->logDirectory = logPath.substr(0, logPath.rfind(separator(""))); + this->logDirectory = common::parentPath(logPath); this->initialized = true; diff --git a/src/Console_TEST.cc b/src/Console_TEST.cc index 2cc3805fd..28b05668c 100644 --- a/src/Console_TEST.cc +++ b/src/Console_TEST.cc @@ -33,23 +33,21 @@ const int g_messageRepeat = 4; class Console_TEST : public ::testing::Test { protected: virtual void SetUp() { - // Set IGN_HOMEDIR and store it - common::testing::TestSetHomePath(this->logBasePath); + this->temp = std::make_unique<TempDirectory>( + "test", "ign_common", true); + ASSERT_TRUE(this->temp->Valid()); + common::setenv(IGN_HOMEDIR, this->temp->Path()); } /// \brief Clear out all the directories we produced during this test. - public: virtual ~Console_TEST() + public: virtual void TearDown() { + ignLogClose(); EXPECT_TRUE(ignition::common::unsetenv(IGN_HOMEDIR)); - - if (ignition::common::isDirectory(this->logBasePath)) - { - ignLogClose(); - EXPECT_TRUE(ignition::common::removeAll(this->logBasePath)); - } } - private: std::string logBasePath; + /// \brief Temporary directory to run test in + private: std::unique_ptr<common::TempDirectory> temp; }; std::string GetLogContent(const std::string &_filename) @@ -58,6 +56,7 @@ std::string GetLogContent(const std::string &_filename) std::string path; EXPECT_TRUE(ignition::common::env(IGN_HOMEDIR, path)); path = ignition::common::joinPaths(path, _filename); + EXPECT_TRUE(ignition::common::exists(path)); // Open the log file, and read back the string std::ifstream ifs(path.c_str(), std::ios::in); diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index f20878fb0..a17950baa 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -26,6 +26,7 @@ #include "ignition/common/Util.hh" #include "ignition/common/StringUtils.hh" #include "ignition/common/SystemPaths.hh" +#include "ignition/common/TempDirectory.hh" #ifdef _WIN32 #define snprintf _snprintf @@ -36,11 +37,22 @@ using namespace ignition; const char kPluginPath[] = "IGN_PLUGIN_PATH"; const char kFilePath[] = "IGN_FILE_PATH"; +class TestTempDirectory : public ignition::common::TempDirectory +{ + public: TestTempDirectory(): + ignition::common::TempDirectory("systempaths", "ign_common", true) + { + } +}; + class SystemPathsFixture : public ::testing::Test { // Documentation inherited public: virtual void SetUp() { + this->temp = std::make_unique<TestTempDirectory>(); + ASSERT_TRUE(this->temp->Valid()); + common::env(kPluginPath, this->backupPluginPath); common::unsetenv(kPluginPath); @@ -59,6 +71,7 @@ class SystemPathsFixture : public ::testing::Test { common::setenv(kPluginPath, this->backupPluginPath); common::setenv(kFilePath, this->backupFilePath); + this->temp.reset(); } /// \brief Backup of plugin paths to be restored after the test @@ -69,6 +82,9 @@ class SystemPathsFixture : public ::testing::Test /// \brief Root of filesystem according to each platform public: std::string filesystemRoot; + + /// \brief Temporary directory to execute test in + public: std::unique_ptr<TestTempDirectory> temp; }; std::string SystemPathsJoin(const std::vector<std::string> &_paths) diff --git a/src/TempDirectory.cc b/src/TempDirectory.cc new file mode 100644 index 000000000..8e44b38fc --- /dev/null +++ b/src/TempDirectory.cc @@ -0,0 +1,229 @@ +/* + * Copyright 2021 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <ignition/common/TempDirectory.hh> + +#include <ignition/common/Console.hh> + +#ifdef _WIN32 +#include <windows.h> +#include <direct.h> +#include <fileapi.h> +#include <io.h> +#endif + +using namespace ignition; +using namespace common; + +///////////////////////////////////////////////// +// Return true if success, false if error +inline bool fs_warn(const std::string &_fcn, + const std::error_code &_ec, + const FilesystemWarningOp &_warningOp = FSWO_LOG_WARNINGS) +{ + if (_ec) + { + if (FSWO_LOG_WARNINGS == _warningOp) + { + ignwarn << "Failed ignition::common::" << _fcn + << " (ec: " << _ec << " " << _ec.message() << ")\n"; + } + return false; + } + return true; +} + +///////////////////////////////////////////////// +// Helper implementation of std::filesystem::temp_directory_path +// https://en.cppreference.com/w/cpp/filesystem/temp_directory_path +// \TODO(anyone) remove when using `std::filesystem` in C++17 and greater. +std::string temp_directory_path(std::error_code& _err) +{ + _err = std::error_code(); +#ifdef _WIN32 + TCHAR temp_path[MAX_PATH]; + DWORD size = GetTempPathA(MAX_PATH, temp_path); + if (size > MAX_PATH || size == 0) { + _err = std::error_code( + static_cast<int>(GetLastError()), std::system_category()); + } + temp_path[size] = '\0'; +#else + std::string temp_path; + if(!ignition::common::env("TMPDIR", temp_path)) + { + temp_path = "/tmp"; + } +#endif + return std::string(temp_path); +} + +///////////////////////////////////////////////// +std::string ignition::common::tempDirectoryPath() +{ + std::error_code ec; + auto ret = temp_directory_path(ec); + + if (!fs_warn("tempDirectoryPath", ec)) + { + ret = ""; + } + + return ret; +} + +///////////////////////////////////////////////// +/// \brief Internal method for createTempDirectory +/// +/// This is primarily to scope the "throw" behavior from when this +/// was copied from rclcpp. +std::string createTempDirectory( + const std::string &_baseName, + const std::string &_parentPath) +{ + std::string parentPath(_parentPath); + std::string templatePath = _baseName + "XXXXXX"; + + std::string fullTemplateStr = joinPaths(parentPath, templatePath); + if (!createDirectories(parentPath)) + { + std::error_code ec{errno, std::system_category()}; + errno = 0; + throw std::system_error(ec, "could not create the parent directory"); + } + +#ifdef _WIN32 + errno_t errcode = _mktemp_s(&fullTemplateStr[0], fullTemplateStr.size() + 1); + if (errcode) { + std::error_code ec(static_cast<int>(errcode), std::system_category()); + throw std::system_error(ec, + "could not format the temp directory name template"); + } + const std::string finalPath{fullTemplateStr}; + if (!createDirectories(finalPath)) { + std::error_code ec(static_cast<int>(GetLastError()), + std::system_category()); + throw std::system_error(ec, "could not create the temp directory"); + } +#else + const char * dirName = mkdtemp(&fullTemplateStr[0]); + if (dirName == nullptr) { + std::error_code ec{errno, std::system_category()}; + errno = 0; + throw std::system_error(ec, + "could not format or create the temp directory"); + } + const std::string finalPath{dirName}; +#endif + + return finalPath; +} + +///////////////////////////////////////////////// +std::string ignition::common::createTempDirectory( + const std::string &_baseName, + const std::string &_parentPath, + const FilesystemWarningOp _warningOp) +{ + std::string ret; + try { + ret = ::createTempDirectory(_baseName, _parentPath); + } + catch (const std::system_error &ex) + { + ret = ""; + if(FSWO_LOG_WARNINGS == _warningOp) + { + ignwarn << "Failed to create temp directory: " << ex.what() << "\n"; + } + } + return ret; +} + + +class ignition::common::TempDirectory::Implementation +{ + /// \brief Current working directory before creation of temporary dir. + public: std::string oldPath {""}; + + /// \brief Path of the temporary directory + public: std::string path {""}; + + /// \brief True if the temporary directory exists + public: bool isValid {false}; + + /// \brief True if the temporary directory should be cleaned up from + /// disk when the object goes out of scope. + public: bool doCleanup {true}; +}; + +///////////////////////////////////////////////// +TempDirectory::TempDirectory(const std::string &_prefix, + const std::string &_subDir, + bool _cleanup): + dataPtr(ignition::utils::MakeImpl<Implementation>()) +{ + + this->dataPtr->oldPath = common::cwd(); + this->dataPtr->doCleanup = _cleanup; + + auto tempPath = common::tempDirectoryPath(); + if (!_subDir.empty()) + { + tempPath = common::joinPaths(tempPath, _subDir); + } + this->dataPtr->path = common::createTempDirectory(_prefix, tempPath); + if (!this->dataPtr->path.empty()) + { + this->dataPtr->isValid = true; + common::chdir(this->dataPtr->path); + } +} + +///////////////////////////////////////////////// +TempDirectory::~TempDirectory() +{ + common::chdir(this->dataPtr->oldPath); + if (this->dataPtr->isValid && this->dataPtr->doCleanup) + { + common::removeAll(this->dataPtr->path); + } +} + +///////////////////////////////////////////////// +bool TempDirectory::Valid() const +{ + return this->dataPtr->isValid; +} + +///////////////////////////////////////////////// +void TempDirectory::DoCleanup(bool _doCleanup) +{ + this->dataPtr->doCleanup = _doCleanup; +} + +///////////////////////////////////////////////// +bool TempDirectory::DoCleanup() const +{ + return this->dataPtr->doCleanup; +} + +///////////////////////////////////////////////// +std::string TempDirectory::Path() const +{ + return this->dataPtr->path; +} diff --git a/src/TempDirectory_TEST.cc b/src/TempDirectory_TEST.cc new file mode 100644 index 000000000..a0c3ad7bb --- /dev/null +++ b/src/TempDirectory_TEST.cc @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2021 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gtest/gtest.h> + +#include <ignition/common/TempDirectory.hh> +#include <ignition/utilities/ExtraTestMacros.hh> + +///////////////////////////////////////////////// +TEST(TempDirectory, tempDirectoryPath) +{ + // OS TMPDIR should never be empty + ASSERT_FALSE(ignition::common::tempDirectoryPath().empty()); +} + +///////////////////////////////////////////////// +TEST(TempDirectory, createTempDirectory) +{ + // OS TMPDIR should never be empty + auto tmpDir = ignition::common::tempDirectoryPath(); + ASSERT_FALSE(tmpDir.empty()); + + // Nominal case + // eg /tmp/fooXXXXXX + auto tmp = ignition::common::createTempDirectory("foo", tmpDir); + ASSERT_FALSE(tmp.empty()); + EXPECT_NE(std::string::npos, tmp.find("foo")); + EXPECT_NE(std::string::npos, tmp.find(tmpDir)); + + // Should also work for subdirectories + // eg /tmp/bar/fooXXXXXX + tmpDir = ignition::common::joinPaths(tmpDir, "bar"); + auto tmp2 = ignition::common::createTempDirectory("bar", tmpDir); + ASSERT_FALSE(tmp2.empty()); +} + +///////////////////////////////////////////////// +TEST(TempDirectory, createTempDirectoryEmptyBase) +{ + // OS TMPDIR should never be empty + auto tmpDir = ignition::common::tempDirectoryPath(); + ASSERT_FALSE(tmpDir.empty()); + + // Create with an empty basename (eg /tmp/XXXXXX) + auto tmp = ignition::common::createTempDirectory("", tmpDir); + ASSERT_FALSE(tmp.empty()); + EXPECT_EQ(std::string::npos, tmp.find("foo")); + EXPECT_NE(std::string::npos, tmp.find(tmpDir)); +} + +///////////////////////////////////////////////// +TEST(TempDirectory, TempDirectory) +{ + std::string path; + { + ignition::common::TempDirectory tmp("temp_dir", "ignition", true); + EXPECT_TRUE(tmp.Valid()); + EXPECT_TRUE(tmp.DoCleanup()); + path = tmp.Path(); + EXPECT_FALSE(path.empty()); + EXPECT_TRUE(ignition::common::exists(path)); + } + EXPECT_FALSE(ignition::common::exists(path)); +} + +///////////////////////////////////////////////// +TEST(TempDirectory, TempDirectoryNoClean) +{ + std::string path; + { + ignition::common::TempDirectory tmp("temp_dir", "ignition", false); + EXPECT_TRUE(tmp.Valid()); + EXPECT_FALSE(tmp.DoCleanup()); + path = tmp.Path(); + EXPECT_FALSE(path.empty()); + EXPECT_TRUE(ignition::common::exists(path)); + } + EXPECT_TRUE(ignition::common::exists(path)); + EXPECT_TRUE(ignition::common::removeDirectory(path)); +} + +///////////////////////////////////////////////// +TEST(TempDirectory, TempDirectoryNoCleanLater) +{ + std::string path; + { + ignition::common::TempDirectory tmp("temp_dir", "ignition", true); + EXPECT_TRUE(tmp.Valid()); + EXPECT_TRUE(tmp.DoCleanup()); + path = tmp.Path(); + EXPECT_FALSE(path.empty()); + EXPECT_TRUE(ignition::common::exists(path)); + tmp.DoCleanup(false); + EXPECT_FALSE(tmp.DoCleanup()); + } + EXPECT_TRUE(ignition::common::exists(path)); + EXPECT_TRUE(ignition::common::removeDirectory(path)); +} + diff --git a/test/test_config.h.in b/test/test_config.h.in index 0a4616552..aea2bf931 100644 --- a/test/test_config.h.in +++ b/test/test_config.h.in @@ -13,6 +13,7 @@ #include <string> #include "ignition/common/Console.hh" #include "ignition/common/Filesystem.hh" +#include "ignition/common/TempDirectory.hh" #include "ignition/common/Util.hh" #define PROJECT_BINARY_PATH "${PROJECT_BINARY_DIR}" @@ -59,37 +60,9 @@ namespace ignition } else { - _tmpDir = common::joinPaths("${PROJECT_BINARY_DIR}", "tmp"); - return true; - } - } - - /// \brief Method to retrieve temporary home directory for tests - /// - /// This will update the contents of the home directory path variable - /// (HOME on Linux/MacOS, HOMEPATH on Windows) to this newly-set - /// directory - /// This additionally sets the HOME and HOMEPATH environment variables - /// - /// \param[inout] _homeDir Full path to the home directory - /// \return True if directory is set correctly, false otherwise - bool TestSetHomePath(std::string &_homeDir) - { - if (common::env("TEST_UNDECLARED_OUTPUTS_DIR", _homeDir)) - { - return ignition::common::setenv(IGN_HOMEDIR, _homeDir); - } - else - { - if (TestTmpPath(_homeDir)) - { - // Set both for linux and windows - return ignition::common::setenv(IGN_HOMEDIR, _homeDir); - } - else - { - return false; - } + _tmpDir = common::createTempDirectory("ignition", + common::tempDirectoryPath()); + return !_tmpDir.empty(); } } @@ -143,11 +116,14 @@ namespace ignition std::string testCaseName = testInfo->test_case_name(); this->logFilename = testCaseName + "_" + testName + ".log"; - common::testing::TestSetHomePath(this->logBasePath); + this->temp = std::make_unique<TempDirectory>( + "test", "ign_common", true); + ASSERT_TRUE(this->temp->Valid()); + common::setenv(IGN_HOMEDIR, this->temp->Path()); // Initialize Console - ignLogInit(common::joinPaths(this->logBasePath, "test_logs"), - this->logFilename); + ignLogInit(common::joinPaths(this->temp->Path(), "test_logs"), + this->logFilename); ignition::common::Console::SetVerbosity(4); @@ -184,7 +160,7 @@ namespace ignition public: virtual ~AutoLogFixture() { ignLogClose(); - ignition::common::removeAll(this->logBasePath); + EXPECT_TRUE(ignition::common::unsetenv(IGN_HOMEDIR)); } /// \brief String with the full path of the logfile @@ -195,6 +171,9 @@ namespace ignition /// \brief String with the base path to log directory private: std::string logBasePath; + + /// \brief Temporary directory to run test in + private: std::unique_ptr<common::TempDirectory> temp; }; } // namespace testing } // namespace common From bc7802ddf2f52bd6230e6e2906032b716279d652 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Wed, 15 Sep 2021 15:26:14 -0500 Subject: [PATCH 093/219] Remove ign-utils from TempDirectory (#248) Signed-off-by: Michael Carroll <michael@openrobotics.org> --- include/ignition/common/TempDirectory.hh | 7 ++++--- src/CMakeLists.txt | 3 --- src/TempDirectory.cc | 4 ++-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/include/ignition/common/TempDirectory.hh b/include/ignition/common/TempDirectory.hh index b66c691e5..4216fd712 100644 --- a/include/ignition/common/TempDirectory.hh +++ b/include/ignition/common/TempDirectory.hh @@ -23,7 +23,6 @@ #include <ignition/common/Export.hh> #include <ignition/common/Filesystem.hh> -#include <ignition/utils/ImplPtr.hh> namespace ignition { @@ -101,8 +100,10 @@ namespace ignition /// \return the temporary directory path public: std::string Path() const; - /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + /// \brief Private data pointer + private: std::unique_ptr<TempDirectoryPrivate> dataPtr; + IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING }; } // namespace common } // namespace ignition diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7b2974194..90e333f1e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,9 +17,6 @@ target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} target_include_directories(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE ${ignition-math${IGN_MATH_VER}_INCLUDE_DIRS}) -target_include_directories(${PROJECT_LIBRARY_TARGET_NAME} PUBLIC - ${ignition-utils${IGN_UTILS_VER}_INCLUDE_DIRS}) - # Handle non-Windows configuration settings if(NOT WIN32) # Link the libraries that we don't expect to find on Windows diff --git a/src/TempDirectory.cc b/src/TempDirectory.cc index 8e44b38fc..aa1bb914a 100644 --- a/src/TempDirectory.cc +++ b/src/TempDirectory.cc @@ -155,7 +155,7 @@ std::string ignition::common::createTempDirectory( } -class ignition::common::TempDirectory::Implementation +class ignition::common::TempDirectoryPrivate { /// \brief Current working directory before creation of temporary dir. public: std::string oldPath {""}; @@ -175,7 +175,7 @@ class ignition::common::TempDirectory::Implementation TempDirectory::TempDirectory(const std::string &_prefix, const std::string &_subDir, bool _cleanup): - dataPtr(ignition::utils::MakeImpl<Implementation>()) + dataPtr(std::make_unique<TempDirectoryPrivate>()) { this->dataPtr->oldPath = common::cwd(); From 9b0a8547681e3e69fb7f86917a4420517cb32e78 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Wed, 22 Sep 2021 02:38:11 -0700 Subject: [PATCH 094/219] =?UTF-8?q?=F0=9F=8E=88=204.3.0~pre1=20(#251)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Louise Poubel <louise@openrobotics.org> --- CMakeLists.txt | 4 ++-- Changelog.md | 22 +++++++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 80e403ea6..c5745afb8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(ignition-common4 VERSION 4.2.0) +project(ignition-common4 VERSION 4.3.0) #============================================================================ # Find ignition-cmake @@ -14,7 +14,7 @@ set(IGN_CMAKE_VER ${ignition-cmake2_VERSION_MAJOR}) #============================================================================ # Configure the project #============================================================================ -ign_configure_project(VERSION_SUFFIX) +ign_configure_project(VERSION_SUFFIX pre1) #============================================================================ # Set project-specific options diff --git a/Changelog.md b/Changelog.md index 4482e4a42..651db1732 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,6 +1,26 @@ ## Ignition Common 4.x -## Ignition Common 4.X.X (202X-XX-XX) +## Ignition Common 4.3.0 (2021-09-XX) + +1. Remove ign-utils from TempDirectory + * [Pull request #248](https://github.com/ignitionrobotics/ign-common/pull/248) + +1. Add functions and objects for Temporary Directories + * [Pull request #244](https://github.com/ignitionrobotics/ign-common/pull/244) + +1. Fix memory corruption & leaks in Image + * [Pull request #240](https://github.com/ignitionrobotics/ign-common/pull/240) + +1. Fix a typo in VideoEncoder_TEST. + * [Pull request #231](https://github.com/ignitionrobotics/ign-common/pull/231) + +1. Fix segfault caused by destruction order of Event and Connection + * [Pull request #234](https://github.com/ignitionrobotics/ign-common/pull/234) + +1. Infrastructure + * [Pull request #62](https://github.com/ignitionrobotics/ign-common/pull/62) + * [Pull request #55](https://github.com/ignitionrobotics/ign-common/pull/55) + * [Pull request #241](https://github.com/ignitionrobotics/ign-common/pull/241) ## Ignition Common 4.2.0 (2021-08-02) From 14a0daa6185bd7a059095c010fffa4ceb1b57063 Mon Sep 17 00:00:00 2001 From: Steve Peters <scpeters@openrobotics.org> Date: Fri, 24 Sep 2021 13:09:02 -0700 Subject: [PATCH 095/219] README: link directly to Contributing page (#252) Signed-off-by: Steve Peters <scpeters@openrobotics.org> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 61ed6dc51..7b2cd727a 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ Refer to the following table for information about important directories and fil # Contributing Please see -[CONTRIBUTING.md](https://github.com/ignitionrobotics/ign-gazebo/blob/main/CONTRIBUTING.md). +[CONTRIBUTING.md](https://ignitionrobotics.org/docs/all/contributing). # Code of Conduct From 8c7697ea087c566e8fc190a8d271f80dcd07fe49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez=20Cordero?= <ahcorde@gmail.com> Date: Mon, 27 Sep 2021 18:57:03 +0200 Subject: [PATCH 096/219] Add macos install instructions (#253) Signed-off-by: ahcorde <ahcorde@gmail.com> --- tutorials/install.md | 47 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/tutorials/install.md b/tutorials/install.md index 886f08f35..7838ad349 100644 --- a/tutorials/install.md +++ b/tutorials/install.md @@ -21,6 +21,22 @@ sudo apt install libignition-common<#>-dev Be sure to replace `<#>` with a number value, such as 2 or 3, depending on which version you need. +### macOS + +On macOS, add OSRF packages: + ``` + ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" + brew tap osrf/simulation + ``` + +Install Ignition Common: + ``` + brew install ignition-common<#> + ``` + +Be sure to replace `<#>` with a number value, such as 3 or 4, depending on +which version you need. + ## Windows Install [Conda package management system](https://docs.conda.io/projects/conda/en/latest/user-guide/install/download.html). @@ -116,6 +132,36 @@ conda install libignition-cmake<#> libignition-math<#> --channel conda-forge sudo make install ``` +### macOS + +1. Clone the repository + ``` + git clone https://github.com/ignitionrobotics/ign-common -b ign-common<#> + ``` + Be sure to replace `<#>` with a number value, such as 3 or 4, depending on + which version you need. + +2. Install dependencies + ``` + brew install --only-dependencies ignition-common<#> + ``` + Be sure to replace `<#>` with a number value, such as 3 or 4, depending on + which version you need. + +3. Configure and build + ``` + cd ign-common + mkdir build + cd build + cmake .. + make + ``` + +4. Optionally, install + ``` + sudo make install + ``` + ### Windows This assumes you have created and activated a Conda environment while installing the Prerequisites. @@ -185,4 +231,3 @@ Follow these steps to run tests and static code analysis in your clone of this r ``` make codecheck ``` - From 2af68956f401203048c8b6336b0b3630ae5aca70 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Mon, 27 Sep 2021 18:08:16 -0500 Subject: [PATCH 097/219] 4.3.0 (#254) Signed-off-by: Michael Carroll <michael@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c5745afb8..fa9d0b56a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ set(IGN_CMAKE_VER ${ignition-cmake2_VERSION_MAJOR}) #============================================================================ # Configure the project #============================================================================ -ign_configure_project(VERSION_SUFFIX pre1) +ign_configure_project() #============================================================================ # Set project-specific options diff --git a/Changelog.md b/Changelog.md index 651db1732..ae54009ff 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,6 +1,6 @@ ## Ignition Common 4.x -## Ignition Common 4.3.0 (2021-09-XX) +## Ignition Common 4.3.0 (2021-09-27) 1. Remove ign-utils from TempDirectory * [Pull request #248](https://github.com/ignitionrobotics/ign-common/pull/248) @@ -21,6 +21,10 @@ * [Pull request #62](https://github.com/ignitionrobotics/ign-common/pull/62) * [Pull request #55](https://github.com/ignitionrobotics/ign-common/pull/55) * [Pull request #241](https://github.com/ignitionrobotics/ign-common/pull/241) + +1. Documentation + * [Pull request #252](https://github.com/ignitionrobotics/ign-common/pull/252) + * [Pull request #253](https://github.com/ignitionrobotics/ign-common/pull/253) ## Ignition Common 4.2.0 (2021-08-02) From 773a8083d95bfb3dab16a493173bfa6609042012 Mon Sep 17 00:00:00 2001 From: Nate Koenig <nkoenig@users.noreply.github.com> Date: Thu, 14 Oct 2021 13:51:19 -0700 Subject: [PATCH 098/219] Add support for animation tension (#256) * Add support for animation tension Signed-off-by: Nate Koenig <nate@openrobotics.org> * Added a test and a todo Signed-off-by: Nate Koenig <nate@openrobotics.org> Co-authored-by: Nate Koenig <nate@openrobotics.org> --- graphics/include/ignition/common/Animation.hh | 27 +++++++++++++++++++ graphics/src/Animation.cc | 24 ++++++++++++++++- graphics/src/Animation_TEST.cc | 24 +++++++++++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) diff --git a/graphics/include/ignition/common/Animation.hh b/graphics/include/ignition/common/Animation.hh index de06e6374..5207d7eb5 100644 --- a/graphics/include/ignition/common/Animation.hh +++ b/graphics/include/ignition/common/Animation.hh @@ -117,6 +117,21 @@ namespace ignition public: PoseAnimation(const std::string &_name, const double _length, const bool _loop); + /// \brief Constructor + /// \param[in] _name String name of the animation. This should be unique. + /// \param[in] _length Length of the animation in seconds + /// \param[in] _loop True == loop the animation + /// \param[in] _tension The tension of the trajectory spline. The + /// default value of zero equates to a Catmull-Rom spline, which may + /// also cause the animation to overshoot keyframes. A value of one will + /// cause the animation to stick to the keyframes. This value should + /// be in the range 0..1. + /// \todo(nkoenig) Remove this in ign-common5, and use a single + /// consutrctory with a default _tension of 0. + public: PoseAnimation(const std::string &_name, + const double _length, const bool _loop, + double _tension); + /// \brief Create a pose keyframe at the given time /// \param[in] _time Time at which to create the keyframe /// \return Pointer to the new keyframe @@ -234,6 +249,18 @@ namespace ignition std::map<std::chrono::steady_clock::time_point, math::Pose3d> _waypoints); + /// \brief Load all waypoints in the trajectory + /// \param[in] _waypoints Map of waypoints, where the key is the absolute + /// time of the waypoint and the value is the pose. + /// \param[in] _tension The tension of the trajectory spline. The + /// default value of zero equates to a Catmull-Rom spline, which may + /// also cause the animation to overshoot keyframes. A value of one will + /// cause the animation to stick to the keyframes. This value should + /// be in the range 0..1. + public: void SetWaypoints( + std::map<std::chrono::steady_clock::time_point, math::Pose3d> + _waypoints, double _tension); + /// \brief Private data pointer. IGN_UTILS_IMPL_PTR(dataPtr) }; diff --git a/graphics/src/Animation.cc b/graphics/src/Animation.cc index 2234ef4b5..c9089dd10 100644 --- a/graphics/src/Animation.cc +++ b/graphics/src/Animation.cc @@ -91,6 +91,9 @@ class PoseAnimation::Implementation /// \brief determines if the interpolation splines need building public: bool build{false}; + + /// \brief Spline tension parameter. + public: double tension{0.0}; }; ///////////////////////////////////////////////// @@ -290,6 +293,15 @@ PoseAnimation::PoseAnimation(const std::string &_name, const double _length, { } +///////////////////////////////////////////////// +PoseAnimation::PoseAnimation(const std::string &_name, const double _length, + const bool _loop, double _tension) +: Animation(_name, _length, _loop), + dataPtr(ignition::utils::MakeImpl<Implementation>()) +{ + this->dataPtr->tension = math::clamp(_tension, 0.0, 1.0); +} + ///////////////////////////////////////////////// PoseKeyFrame *PoseAnimation::CreateKeyFrame(const double _time) { @@ -309,6 +321,7 @@ void PoseAnimation::BuildInterpolationSplines() this->dataPtr->positionSpline->AutoCalculate(false); this->dataPtr->rotationSpline->AutoCalculate(false); + this->dataPtr->positionSpline->Tension(this->dataPtr->tension); this->dataPtr->positionSpline->Clear(); this->dataPtr->rotationSpline->Clear(); @@ -511,6 +524,15 @@ common::PoseAnimation *TrajectoryInfo::Waypoints() const void TrajectoryInfo::SetWaypoints( std::map<std::chrono::steady_clock::time_point, math::Pose3d> _waypoints) { + this->SetWaypoints(_waypoints, 0.0); +} + +///////////////////////////////////////////////// +void TrajectoryInfo::SetWaypoints( + std::map<std::chrono::steady_clock::time_point, math::Pose3d> _waypoints, + double _tension) +{ + _tension = math::clamp(_tension, 0.0, 1.0); this->dataPtr->segDistance.clear(); auto first = _waypoints.begin(); @@ -523,7 +545,7 @@ void TrajectoryInfo::SetWaypoints( animName << this->AnimIndex() << "_" << this->Id(); std::shared_ptr<common::PoseAnimation> anim = std::make_shared<common::PoseAnimation>(animName.str(), - std::chrono::duration<double>(this->Duration()).count(), false); + std::chrono::duration<double>(this->Duration()).count(), false, _tension); auto prevPose = first->second.Pos(); for (auto pIter = _waypoints.begin(); pIter != _waypoints.end(); ++pIter) diff --git a/graphics/src/Animation_TEST.cc b/graphics/src/Animation_TEST.cc index 4c1eccece..3ad3c5496 100644 --- a/graphics/src/Animation_TEST.cc +++ b/graphics/src/Animation_TEST.cc @@ -87,6 +87,30 @@ TEST_F(AnimationTest, PoseAnimation) math::Quaterniond(0.0302776, 0.0785971, 0.109824)); } +///////////////////////////////////////////////// +TEST_F(AnimationTest, PoseAnimationTension) +{ + // Test using a tension value of 1.0, which should cause the pose + // animation to hit the key frames. + + common::PoseAnimation animTension("test-tension", 10.0, false, 1.0); + common::PoseKeyFrame *keyTension = animTension.CreateKeyFrame(0.0); + keyTension->Translation(math::Vector3d(0, 0, 0)); + keyTension->Rotation(math::Quaterniond(0, 0, 0)); + + animTension.AddTime(5.0); + keyTension->Translation(math::Vector3d(10, 20, 30)); + keyTension->Rotation(math::Quaterniond(0.1, 0.2, 0.3)); + animTension.Time(4.0); + + common::PoseKeyFrame interpolatedKeyTension(-1.0); + animTension.InterpolatedKeyFrame(interpolatedKeyTension); + EXPECT_TRUE(interpolatedKeyTension.Translation() == + math::Vector3d(10, 20, 30)); + EXPECT_TRUE(interpolatedKeyTension.Rotation() == + math::Quaterniond(0.1, 0.2, 0.3)); +} + ///////////////////////////////////////////////// TEST_F(AnimationTest, NumericAnimation) { From 92abc29da82d3e2c4f71a761f03031f6e6e6f442 Mon Sep 17 00:00:00 2001 From: Nate Koenig <nkoenig@users.noreply.github.com> Date: Fri, 15 Oct 2021 09:41:06 -0700 Subject: [PATCH 099/219] Update tension for common5 (#260) Signed-off-by: Nate Koenig <nate@openrobotics.org> --- graphics/include/ignition/common/Animation.hh | 20 ++----------------- graphics/src/Animation.cc | 15 -------------- 2 files changed, 2 insertions(+), 33 deletions(-) diff --git a/graphics/include/ignition/common/Animation.hh b/graphics/include/ignition/common/Animation.hh index 5207d7eb5..7ef0b9952 100644 --- a/graphics/include/ignition/common/Animation.hh +++ b/graphics/include/ignition/common/Animation.hh @@ -110,13 +110,6 @@ namespace ignition /// \brief A pose animation. class IGNITION_COMMON_GRAPHICS_VISIBLE PoseAnimation : public Animation { - /// \brief Constructor - /// \param[in] _name String name of the animation. This should be unique. - /// \param[in] _length Length of the animation in seconds - /// \param[in] _loop True == loop the animation - public: PoseAnimation(const std::string &_name, - const double _length, const bool _loop); - /// \brief Constructor /// \param[in] _name String name of the animation. This should be unique. /// \param[in] _length Length of the animation in seconds @@ -126,11 +119,9 @@ namespace ignition /// also cause the animation to overshoot keyframes. A value of one will /// cause the animation to stick to the keyframes. This value should /// be in the range 0..1. - /// \todo(nkoenig) Remove this in ign-common5, and use a single - /// consutrctory with a default _tension of 0. public: PoseAnimation(const std::string &_name, const double _length, const bool _loop, - double _tension); + double _tension = 0.0); /// \brief Create a pose keyframe at the given time /// \param[in] _time Time at which to create the keyframe @@ -242,13 +233,6 @@ namespace ignition /// \return Waypoints represented in pose animation format public: common::PoseAnimation *Waypoints() const; - /// \brief Load all waypoints in the trajectory - /// \param[in] _waypoints Map of waypoints, where the key is the absolute - /// time of the waypoint and the value is the pose. - public: void SetWaypoints( - std::map<std::chrono::steady_clock::time_point, math::Pose3d> - _waypoints); - /// \brief Load all waypoints in the trajectory /// \param[in] _waypoints Map of waypoints, where the key is the absolute /// time of the waypoint and the value is the pose. @@ -259,7 +243,7 @@ namespace ignition /// be in the range 0..1. public: void SetWaypoints( std::map<std::chrono::steady_clock::time_point, math::Pose3d> - _waypoints, double _tension); + _waypoints, double _tension = 0.0); /// \brief Private data pointer. IGN_UTILS_IMPL_PTR(dataPtr) diff --git a/graphics/src/Animation.cc b/graphics/src/Animation.cc index c9089dd10..ca4e762a1 100644 --- a/graphics/src/Animation.cc +++ b/graphics/src/Animation.cc @@ -285,14 +285,6 @@ double Animation::KeyFramesAtTime(double _time, common::KeyFrame **_kf1, return (_time - t1) / (t2 - t1); } -///////////////////////////////////////////////// -PoseAnimation::PoseAnimation(const std::string &_name, const double _length, - const bool _loop) -: Animation(_name, _length, _loop), - dataPtr(ignition::utils::MakeImpl<Implementation>()) -{ -} - ///////////////////////////////////////////////// PoseAnimation::PoseAnimation(const std::string &_name, const double _length, const bool _loop, double _tension) @@ -520,13 +512,6 @@ common::PoseAnimation *TrajectoryInfo::Waypoints() const return this->dataPtr->waypoints.get(); } -///////////////////////////////////////////////// -void TrajectoryInfo::SetWaypoints( - std::map<std::chrono::steady_clock::time_point, math::Pose3d> _waypoints) -{ - this->SetWaypoints(_waypoints, 0.0); -} - ///////////////////////////////////////////////// void TrajectoryInfo::SetWaypoints( std::map<std::chrono::steady_clock::time_point, math::Pose3d> _waypoints, From 51c8e067ccacc8717186a763a8df76de22242ae1 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Fri, 15 Oct 2021 12:46:25 -0500 Subject: [PATCH 100/219] Prepartions for 4.4.0 (#261) Signed-off-by: Michael Carroll <michael@openrobotics.org> --- Changelog.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Changelog.md b/Changelog.md index ae54009ff..0f1b996c8 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,10 @@ ## Ignition Common 4.x +## Ignition Common 4.4.0 (2021-10-15) + +1. Add support for animation tension + * [Pull request #256](https://github.com/ignitionrobotics/ign-common/pull/256) + ## Ignition Common 4.3.0 (2021-09-27) 1. Remove ign-utils from TempDirectory From 8ba9b71526b63193159adc577976949e83a089ee Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Fri, 15 Oct 2021 13:24:48 -0500 Subject: [PATCH 101/219] Bump CMakeLists version Signed-off-by: Michael Carroll <michael@openrobotics.org> --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fa9d0b56a..be87aca8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(ignition-common4 VERSION 4.3.0) +project(ignition-common4 VERSION 4.4.0) #============================================================================ # Find ignition-cmake From b337f4e0af725cd6dc1b3942c2114eaf311a9817 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez=20Cordero?= <ahcorde@gmail.com> Date: Tue, 9 Nov 2021 06:39:33 +0100 Subject: [PATCH 102/219] Added method to remove meshes from the MeshManager (#222) Signed-off-by: ahcorde <ahcorde@gmail.com> Signed-off-by: Nate Koenig <nate@openrobotics.org> Co-authored-by: Louise Poubel <louise@openrobotics.org> Co-authored-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Nate Koenig <nate@openrobotics.org> Co-authored-by: Nate Koenig <nkoenig@users.noreply.github.com> --- .../include/ignition/common/MeshManager.hh | 9 +++++++ graphics/src/MeshManager.cc | 27 +++++++++++++++++++ graphics/src/MeshManager_TEST.cc | 22 +++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/graphics/include/ignition/common/MeshManager.hh b/graphics/include/ignition/common/MeshManager.hh index e7d33f51f..f7dc59ff5 100644 --- a/graphics/include/ignition/common/MeshManager.hh +++ b/graphics/include/ignition/common/MeshManager.hh @@ -100,6 +100,15 @@ namespace ignition /// \param[in] the mesh to add. public: void AddMesh(Mesh *_mesh); + /// \brief Remove a mesh based on a name. + /// \param[in] _name Name of the mesh to remove. + /// \return True if the mesh was removed, false if the mesh with the + /// provided name could not be found. + public: bool RemoveMesh(const std::string &_name); + + /// \brief Remove all meshes. + public: void RemoveAll(); + /// \brief Get a mesh by name. /// \param[in] _name the name of the mesh to look for /// \return the mesh or nullptr if not found diff --git a/graphics/src/MeshManager.cc b/graphics/src/MeshManager.cc index 8a53efc92..037ad5afc 100644 --- a/graphics/src/MeshManager.cc +++ b/graphics/src/MeshManager.cc @@ -241,6 +241,33 @@ const Mesh *MeshManager::MeshByName(const std::string &_name) const return nullptr; } +////////////////////////////////////////////////// +void MeshManager::RemoveAll() +{ + std::lock_guard<std::mutex> lock(this->dataPtr->mutex); + for (auto m : this->dataPtr->meshes) + { + delete m.second; + } + this->dataPtr->meshes.clear(); +} + +////////////////////////////////////////////////// +bool MeshManager::RemoveMesh(const std::string &_name) +{ + std::lock_guard<std::mutex> lock(this->dataPtr->mutex); + + auto iter = this->dataPtr->meshes.find(_name); + if (iter != this->dataPtr->meshes.end()) + { + delete iter->second; + this->dataPtr->meshes.erase(iter); + return true; + } + + return false; +} + ////////////////////////////////////////////////// bool MeshManager::HasMesh(const std::string &_name) const { diff --git a/graphics/src/MeshManager_TEST.cc b/graphics/src/MeshManager_TEST.cc index fe75c0aff..76b198d3d 100644 --- a/graphics/src/MeshManager_TEST.cc +++ b/graphics/src/MeshManager_TEST.cc @@ -267,6 +267,28 @@ TEST_F(MeshManager, CreateExtrudedPolylineInvalid) EXPECT_TRUE(!common::MeshManager::Instance()->HasMesh(meshName)); } +///////////////////////////////////////////////// +TEST_F(MeshManager, Remove) +{ + auto mgr = common::MeshManager::Instance(); + + EXPECT_FALSE(mgr->HasMesh("box")); + mgr->CreateBox("box", + ignition::math::Vector3d(1, 1, 1), + ignition::math::Vector2d(0, 0)); + EXPECT_TRUE(mgr->HasMesh("box")); + + mgr->CreateSphere("sphere", 1.0, 1, 1); + EXPECT_TRUE(mgr->HasMesh("sphere")); + + EXPECT_TRUE(mgr->RemoveMesh("box")); + EXPECT_FALSE(mgr->HasMesh("box")); + EXPECT_TRUE(mgr->HasMesh("sphere")); + + mgr->RemoveAll(); + EXPECT_FALSE(mgr->HasMesh("sphere")); +} + ///////////////////////////////////////////////// int main(int argc, char **argv) { From d93da520f594b325990cc58537c89df46a7e57d5 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 18 Nov 2021 16:52:34 -0600 Subject: [PATCH 103/219] Synchronize console writes (#227) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Provide an internal mechanism for console writes. This will prevent messages from being interleaved. Signed-off-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Addisu Z. Taddese <addisu@openrobotics.org> Co-authored-by: Alejandro HernΓ‘ndez Cordero <ahcorde@gmail.com> Co-authored-by: Nate Koenig <nate@openrobotics.org> --- include/ignition/common/Console.hh | 15 ++- src/Console.cc | 61 +++++++-- src/Util.cc | 21 ++- test/performance/logging.cc | 207 +++++++++++++++++++++++++++++ 4 files changed, 292 insertions(+), 12 deletions(-) create mode 100644 test/performance/logging.cc diff --git a/include/ignition/common/Console.hh b/include/ignition/common/Console.hh index 53b1e5368..a5a256615 100644 --- a/include/ignition/common/Console.hh +++ b/include/ignition/common/Console.hh @@ -183,10 +183,17 @@ namespace ignition /// \brief Destructor. public: virtual ~Buffer(); + /// \brief Writes _count characters to the string buffer + /// \param[in] _char Input rharacter array. + /// \param[in] _count Number of characters in array. + /// \return The number of characters successfully written. + public: std::streamsize xsputn( + const char *_char, std::streamsize _count) override; + /// \brief Sync the stream (output the string buffer /// contents). /// \return Return 0 on success. - public: virtual int sync(); + public: int sync() override; /// \brief Destination type for the messages. public: LogType type; @@ -198,6 +205,12 @@ namespace ignition /// \brief Level of verbosity public: int verbosity; + + /// \brief Mutex to synchronize writes to the string buffer + /// and the output stream. + /// \todo(nkoenig) Put this back in for ign-common5, and + /// remove the corresponding static version. + // public: std::mutex syncMutex; }; IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING diff --git a/src/Console.cc b/src/Console.cc index ff013fe23..a4fde2786 100644 --- a/src/Console.cc +++ b/src/Console.cc @@ -16,6 +16,7 @@ */ #include <string> #include <sstream> +#include <unordered_map> #include <ignition/common/Console.hh> #include <ignition/common/config.hh> @@ -27,6 +28,7 @@ using namespace ignition; using namespace common; + FileLogger ignition::common::Console::log(""); // On UNIX, these are ANSI-based color codes. On Windows, these are colors from @@ -107,6 +109,23 @@ Logger &Logger::operator()(const std::string &_file, int _line) return (*this); } + +///////////////////////////////////////////////// +/// \brief Provide a lock_guard for a given buffer +/// This is workaround to keep us from breaking ABI, and can be removed +/// in future versions +/// \param[in] _bufferId a unique id of the requesting buffer +/// Acquired via reinterpret_cast<uintptr_t>(this) +/// \returns A RAII lock guard +std::lock_guard<std::mutex> BufferLock(std::uintptr_t _bufferId) +{ + static std::unordered_map<uintptr_t, std::mutex> *kSyncMutex{nullptr}; + if(nullptr == kSyncMutex) + kSyncMutex = new std::unordered_map<uintptr_t, std::mutex>(); + + return std::lock_guard<std::mutex>(kSyncMutex->operator[](_bufferId)); +} + ///////////////////////////////////////////////// Logger::Buffer::Buffer(LogType _type, const int _color, const int _verbosity) : type(_type), color(_color), verbosity(_verbosity) @@ -119,14 +138,29 @@ Logger::Buffer::~Buffer() this->pubsync(); } +///////////////////////////////////////////////// +std::streamsize Logger::Buffer::xsputn(const char *_char, + std::streamsize _count) +{ + auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + return std::stringbuf::xsputn(_char, _count); +} + ///////////////////////////////////////////////// int Logger::Buffer::sync() { - std::string outstr = this->str(); + std::string outstr; + { + auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + outstr = this->str(); + } // Log messages to disk - Console::log << outstr; - Console::log.flush(); + { + auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + Console::log << outstr; + Console::log.flush(); + } // Output to terminal if (Console::Verbosity() >= this->verbosity && !outstr.empty()) @@ -143,7 +177,10 @@ int Logger::Buffer::sync() if (lastNewLine) ss << std::endl; - fprintf(outstream, "%s", ss.str().c_str()); + { + auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + fprintf(outstream, "%s", ss.str().c_str()); + } #else HANDLE hConsole = CreateFileW( L"CONOUT$", GENERIC_WRITE|GENERIC_READ, 0, nullptr, OPEN_EXISTING, @@ -168,14 +205,20 @@ int Logger::Buffer::sync() std::ostream &outStream = this->type == Logger::STDOUT ? std::cout : std::cerr; - if (vtProcessing) - outStream << "\x1b[" << this->color << "m" << outstr << "\x1b[m"; - else - outStream << outstr; + { + auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + if (vtProcessing) + outStream << "\x1b[" << this->color << "m" << outstr << "\x1b[m"; + else + outStream << outstr; + } #endif } - this->str(""); + { + auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + this->str(""); + } return 0; } diff --git a/src/Util.cc b/src/Util.cc index a2057177c..de13ac071 100644 --- a/src/Util.cc +++ b/src/Util.cc @@ -249,19 +249,36 @@ std::string ignition::common::systemTimeIso() return timeToIso(IGN_SYSTEM_TIME()); } +// Taken from gtest.cc +static bool PortableLocaltime(time_t seconds, struct tm* out) { +#if defined(_MSC_VER) + return localtime_s(out, &seconds) == 0; +#elif defined(__MINGW32__) || defined(__MINGW64__) + // MINGW <time.h> provides neither localtime_r nor localtime_s, but uses + // Windows' localtime(), which has a thread-local tm buffer. + struct tm* tm_ptr = localtime(&seconds); // NOLINT + if (tm_ptr == nullptr) return false; + *out = *tm_ptr; + return true; +#else + return localtime_r(&seconds, out) != nullptr; +#endif +} + ///////////////////////////////////////////////// std::string ignition::common::timeToIso( const std::chrono::time_point<std::chrono::system_clock> &_time) { char isoStr[25]; - auto epoch = _time.time_since_epoch(); auto sec = std::chrono::duration_cast<std::chrono::seconds>(epoch).count(); auto nano = std::chrono::duration_cast<std::chrono::nanoseconds>( epoch).count() - sec * IGN_SEC_TO_NANO; time_t tmSec = static_cast<time_t>(sec); - std::strftime(isoStr, sizeof(isoStr), "%FT%T", std::localtime(&tmSec)); + struct tm localTime; + PortableLocaltime(tmSec, &localTime); + std::strftime(isoStr, sizeof(isoStr), "%FT%T", &localTime); return std::string(isoStr) + "." + std::to_string(nano); } diff --git a/test/performance/logging.cc b/test/performance/logging.cc new file mode 100644 index 000000000..d06868a23 --- /dev/null +++ b/test/performance/logging.cc @@ -0,0 +1,207 @@ +/* + * Copyright (C) 2021 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#include <gtest/gtest.h> + +#include <atomic> +#include <map> +#include <thread> + +#include <ignition/common/Console.hh> + +namespace { +// Lower value than spdlog to keep CI from flaking +const uint64_t g_iterations{10000}; + +std::atomic<size_t> g_counter = {0}; + +void WriteToFile(std::string result_filename, std::string content) +{ + std::ofstream out; + std::ios_base::openmode mode = std::ios_base::out | std::ios_base::app; + out.open(result_filename.c_str(), mode); + if (!out.is_open()) + { + std::cerr << "Error writing to " << result_filename << std::endl; + } + out << content << std::flush; + std::cout << content; +} + +void MeasurePeakDuringLogWrites(const size_t id, std::vector<uint64_t> &result) +{ + while (true) + { + const size_t value_now = ++g_counter; + if (value_now > g_iterations) + { + return; + } + std::stringstream ss; + ss << "Some text to log for thread: " << id << "\n"; + auto start_time = std::chrono::high_resolution_clock::now(); + ignmsg << ss.str(); + auto stop_time = std::chrono::high_resolution_clock::now(); + uint64_t time_us = std::chrono::duration_cast<std::chrono::microseconds>( + stop_time - start_time) + .count(); + result.push_back(time_us); + } +} + +void PrintStats(const std::string &filename, + const std::map<size_t, std::vector<uint64_t>> &threads_result, + const uint64_t total_time_in_us) +{ + size_t idx = 0; + std::ostringstream oss; + for (auto t_result : threads_result) + { + uint64_t worstUs = + (*std::max_element(t_result.second.begin(), t_result.second.end())); + oss << idx++ << " the worst thread latency was:" << worstUs / uint64_t(1000) + << " ms (" << worstUs << " us)] " << std::endl; + } + + oss << "Total time :" << total_time_in_us / uint64_t(1000) << " ms (" + << total_time_in_us << " us)" << std::endl; + oss << "Average time: " << double(total_time_in_us) / double(g_iterations) + << " us" << std::endl; + WriteToFile(filename, oss.str()); +} + +void SaveResultToBucketFile( + std::string result_filename, + const std::map<size_t, std::vector<uint64_t>> &threads_result) +{ + // now split the result in buckets of 1ms each so that it's obvious how the + // peaks go + std::vector<uint64_t> all_measurements; + all_measurements.reserve(g_iterations); + for (auto &t_result : threads_result) + { + all_measurements.insert(all_measurements.end(), t_result.second.begin(), + t_result.second.end()); + } + + std::map<uint64_t, uint64_t> bucketsWithEmpty; + std::map<uint64_t, uint64_t> buckets; + // force empty buckets to appear + auto maxValueIterator = + std::max_element(all_measurements.begin(), all_measurements.end()); + const auto kMaxValue = *maxValueIterator; + + for (uint64_t idx = 0; idx <= kMaxValue; ++idx) + { + bucketsWithEmpty[idx] = 0; + } + + for (auto value : all_measurements) + { + ++bucketsWithEmpty[value]; + ++buckets[value]; + } + + /* + std::cout << "\n\n Microsecond bucket measurement" << std::endl; + for (const auto ms_bucket : buckets) { + std::cout << ms_bucket.first << "\t, " << ms_bucket.second << std::endl; + } + std::cout << "\n\n"; + */ + + std::ostringstream oss; + // Save to xcel and google doc parsable format. with empty buckets + oss << "\n\n Microsecond bucket measurement with zero buckets till max" + << std::endl; + for (const auto ms_bucket : bucketsWithEmpty) + { + oss << ms_bucket.first << "\t, " << ms_bucket.second << std::endl; + } + WriteToFile(result_filename, oss.str()); + std::cout << "Worst Case Latency, max value: " << kMaxValue << std::endl; + std::cout << "microsecond bucket result is in file: " << result_filename + << std::endl; +} +} // namespace + +void run(size_t number_of_threads) +{ + g_counter = 0; + ignition::common::Console::SetVerbosity(4); + std::vector<std::thread> threads(number_of_threads); + std::map<size_t, std::vector<uint64_t>> threads_result; + + for (size_t idx = 0; idx < number_of_threads; ++idx) + { + // reserve to 1 million for all the result + // it's a test so let's not care about the wasted space + threads_result[idx].reserve(g_iterations); + } + + // int queue_size = 1048576; // 2 ^ 20 + // int queue_size = 524288; // 2 ^ 19 + // spdlog::set_async_mode(queue_size); // default size is 1048576 + auto filename_result = std::to_string(number_of_threads) + ".result.csv"; + std::ostringstream oss; + oss << "Using " << number_of_threads; + oss << " to log in total " << g_iterations << " log entries to " + << filename_result << std::endl; + WriteToFile(filename_result, oss.str()); + + auto start_time_application_total = + std::chrono::high_resolution_clock::now(); + for (uint64_t idx = 0; idx < number_of_threads; ++idx) + { + threads[idx] = std::thread(MeasurePeakDuringLogWrites, idx, + std::ref(threads_result[idx])); + } + for (size_t idx = 0; idx < number_of_threads; ++idx) + { + threads[idx].join(); + } + auto stop_time_application_total = std::chrono::high_resolution_clock::now(); + + uint64_t total_time_in_us = + std::chrono::duration_cast<std::chrono::microseconds>( + stop_time_application_total - start_time_application_total) + .count(); + + PrintStats(filename_result, threads_result, total_time_in_us); + SaveResultToBucketFile(filename_result, threads_result); +} + +class LoggingTest: + public ::testing::TestWithParam<std::size_t> +{ +}; + +TEST_P(LoggingTest, RunThreads) +{ + run(GetParam()); + SUCCEED(); +} + +INSTANTIATE_TEST_SUITE_P(LoggingTest, LoggingTest, + ::testing::Values(1, 2, 4, 8, 16, 32)); + +///////////////////////////////////////////////// +// This test is valid (passes) if it runs without segfaults. +int main(int argc, char **argv) +{ + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} From ee37636c6c7ea4efaba6fca08535cff563123700 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 18 Nov 2021 16:58:12 -0600 Subject: [PATCH 104/219] Remove static map mutex workaround Signed-off-by: Michael Carroll <michael@openrobotics.org> --- include/ignition/common/Console.hh | 5 ++--- src/Console.cc | 30 ++++++------------------------ 2 files changed, 8 insertions(+), 27 deletions(-) diff --git a/include/ignition/common/Console.hh b/include/ignition/common/Console.hh index a5a256615..7cd89cb97 100644 --- a/include/ignition/common/Console.hh +++ b/include/ignition/common/Console.hh @@ -19,6 +19,7 @@ #include <iostream> #include <fstream> +#include <memory> #include <sstream> #include <string> @@ -208,9 +209,7 @@ namespace ignition /// \brief Mutex to synchronize writes to the string buffer /// and the output stream. - /// \todo(nkoenig) Put this back in for ign-common5, and - /// remove the corresponding static version. - // public: std::mutex syncMutex; + public: std::mutex syncMutex; }; IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING diff --git a/src/Console.cc b/src/Console.cc index a4fde2786..05327777e 100644 --- a/src/Console.cc +++ b/src/Console.cc @@ -16,7 +16,6 @@ */ #include <string> #include <sstream> -#include <unordered_map> #include <ignition/common/Console.hh> #include <ignition/common/config.hh> @@ -109,23 +108,6 @@ Logger &Logger::operator()(const std::string &_file, int _line) return (*this); } - -///////////////////////////////////////////////// -/// \brief Provide a lock_guard for a given buffer -/// This is workaround to keep us from breaking ABI, and can be removed -/// in future versions -/// \param[in] _bufferId a unique id of the requesting buffer -/// Acquired via reinterpret_cast<uintptr_t>(this) -/// \returns A RAII lock guard -std::lock_guard<std::mutex> BufferLock(std::uintptr_t _bufferId) -{ - static std::unordered_map<uintptr_t, std::mutex> *kSyncMutex{nullptr}; - if(nullptr == kSyncMutex) - kSyncMutex = new std::unordered_map<uintptr_t, std::mutex>(); - - return std::lock_guard<std::mutex>(kSyncMutex->operator[](_bufferId)); -} - ///////////////////////////////////////////////// Logger::Buffer::Buffer(LogType _type, const int _color, const int _verbosity) : type(_type), color(_color), verbosity(_verbosity) @@ -142,7 +124,7 @@ Logger::Buffer::~Buffer() std::streamsize Logger::Buffer::xsputn(const char *_char, std::streamsize _count) { - auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + std::lock_guard<std::mutex> lk(this->syncMutex); return std::stringbuf::xsputn(_char, _count); } @@ -151,13 +133,13 @@ int Logger::Buffer::sync() { std::string outstr; { - auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + std::lock_guard<std::mutex> lk(this->syncMutex); outstr = this->str(); } // Log messages to disk { - auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + std::lock_guard<std::mutex> lk(this->syncMutex); Console::log << outstr; Console::log.flush(); } @@ -178,7 +160,7 @@ int Logger::Buffer::sync() ss << std::endl; { - auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + std::lock_guard<std::mutex> lk(this->syncMutex); fprintf(outstream, "%s", ss.str().c_str()); } #else @@ -206,7 +188,7 @@ int Logger::Buffer::sync() this->type == Logger::STDOUT ? std::cout : std::cerr; { - auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + std::lock_guard<std::mutex> lk(this->syncMutex); if (vtProcessing) outStream << "\x1b[" << this->color << "m" << outstr << "\x1b[m"; else @@ -216,7 +198,7 @@ int Logger::Buffer::sync() } { - auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + std::lock_guard<std::mutex> lk(this->syncMutex); this->str(""); } return 0; From 38c3c33cd02a952ba14c426005a3765d514f047c Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Fri, 19 Nov 2021 13:42:21 -0800 Subject: [PATCH 105/219] ign-common5: drop Bionic (#270) * Garden: Drop Bionic, support Jammy * Just drop Bionic, no Jammy for now Signed-off-by: Louise Poubel <louise@openrobotics.org> --- .github/workflows/ci.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e36175c3a..53663ff6e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,17 +3,6 @@ name: Ubuntu CI on: [push, pull_request] jobs: - bionic-ci: - runs-on: ubuntu-latest - name: Ubuntu Bionic CI - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Compile and test - id: ci - uses: ignition-tooling/action-ignition-ci@bionic - with: - codecov-enabled: true focal-ci: runs-on: ubuntu-latest name: Ubuntu Focal CI From 5d84d4a004ae80ca5f000d30655a987244bacbb6 Mon Sep 17 00:00:00 2001 From: Jose Luis Rivero <jrivero@osrfoundation.org> Date: Mon, 29 Nov 2021 17:28:16 +0100 Subject: [PATCH 106/219] Use libexec to install binary remotery_vis (#272) --- profiler/src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/profiler/src/CMakeLists.txt b/profiler/src/CMakeLists.txt index 1c2f7e360..f3e5287dc 100644 --- a/profiler/src/CMakeLists.txt +++ b/profiler/src/CMakeLists.txt @@ -88,7 +88,7 @@ if(TARGET UNIT_Profiler_Remotery_TEST) endif() if(IGN_PROFILER_REMOTERY) - set(IGN_PROFILER_SCRIPT_PATH ${CMAKE_INSTALL_LIBDIR}/ignition/ignition-common${PROJECT_VERSION_MAJOR}) + set(IGN_PROFILER_SCRIPT_PATH ${CMAKE_INSTALL_LIBEXECDIR}/ignition/ignition-common${PROJECT_VERSION_MAJOR}) set(IGN_PROFILER_VIS_PATH ${IGN_DATA_INSTALL_DIR}/profiler_vis) configure_file(Remotery/ign_remotery_vis.in From 7799dbfd433fe9094fbc390cf75462911c519882 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 2 Dec 2021 12:53:17 -0600 Subject: [PATCH 107/219] Remove all deprecated functionality from main (#273) Signed-off-by: Michael Carroll <michael@openrobotics.org> --- examples/profiler.cc | 1 - include/ignition/common/SystemPaths.hh | 18 - include/ignition/common/Time.hh | 324 ------------- include/ignition/common/Timer.hh | 9 +- include/ignition/common/WorkerPool.hh | 8 - profiler/src/Profiler_Disabled_TEST.cc | 1 - profiler/src/Profiler_Remotery_TEST.cc | 1 - src/Console_TEST.cc | 1 - src/SystemPaths.cc | 30 -- src/SystemPaths_TEST.cc | 35 +- src/Time.cc | 647 ------------------------- src/Time_TEST.cc | 285 ----------- src/Timer.cc | 13 - src/WorkerPool.cc | 9 +- 14 files changed, 10 insertions(+), 1372 deletions(-) delete mode 100644 include/ignition/common/Time.hh delete mode 100644 src/Time.cc delete mode 100644 src/Time_TEST.cc diff --git a/examples/profiler.cc b/examples/profiler.cc index 7144a11ab..f37bda37c 100644 --- a/examples/profiler.cc +++ b/examples/profiler.cc @@ -21,7 +21,6 @@ #include "ignition/common/Console.hh" #include "ignition/common/Profiler.hh" #include "ignition/common/SignalHandler.hh" -#include "ignition/common/Time.hh" std::atomic<bool> running; diff --git a/include/ignition/common/SystemPaths.hh b/include/ignition/common/SystemPaths.hh index ddd0fcc17..2ff236cfb 100644 --- a/include/ignition/common/SystemPaths.hh +++ b/include/ignition/common/SystemPaths.hh @@ -150,15 +150,6 @@ namespace ignition /// \param[in] _suffix The suffix to add public: void AddSearchPathSuffix(const std::string &_suffix); - /// \brief Set the callback to use when ignition can't find a file. - /// The callback should return a complete path to the requested file, or - /// and empty string if the file was not found in the callback. The path - /// should use platform-specific directory separators. - /// \param[in] _cb The callback function. - /// \deprecated Use AddFindFileCallback instead - public: void IGN_DEPRECATED(3) SetFindFileCallback( - std::function<std::string(const std::string &)> _cb); - /// \brief Add a callback to use when FindFile() can't find a file. /// The callback should return a full local path to the requested file, or /// and empty string if the file was not found in the callback. The path @@ -183,15 +174,6 @@ namespace ignition public: void AddFindFileURICallback( std::function<std::string(const ignition::common::URI &)> _cb); - /// \brief Set the callback to use when ignition can't find a file uri. - /// The callback should return a complete path to the requested file, or - /// and empty string if the file was not found in the callback. The path - /// should use platform-specific directory separators. - /// \param[in] _cb The callback function. - /// \deprecated Use AddFindFileURICallback instead - public: void IGN_DEPRECATED(3) SetFindFileURICallback( - std::function<std::string(const std::string &)> _cb); - /// \brief look for a file in a set of search paths (not recursive) /// \description This method checks if a file exists in given directories. /// It does so by joining each path with the filename and diff --git a/include/ignition/common/Time.hh b/include/ignition/common/Time.hh deleted file mode 100644 index 0ea57300c..000000000 --- a/include/ignition/common/Time.hh +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright (C) 2016 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * -*/ -#ifndef IGNITION_COMMON_TIME_HH_ -#define IGNITION_COMMON_TIME_HH_ - -#include <string> -#include <iostream> - -#include <ignition/common/Export.hh> -#include <ignition/common/Util.hh> - -namespace ignition -{ - namespace common - { - /// \class Time Time.hh common/common.hh - /// \brief A Time class, can be used to hold wall- or sim-time. - /// stored as sec and nano-sec. - class IGNITION_COMMON_VISIBLE Time - { - /// \brief A static zero time variable set to common::Time(0, 0). - public: static const Time Zero; - - /// \enum Format options - /// \brief Options for formatting time as a string. - public: enum class FormatOption - { - /// \brief Days - DAYS = 0, - /// \brief Hours - HOURS = 1, - /// \brief Minutes - MINUTES = 2, - /// \brief Seconds - SECONDS = 3, - /// \brief Milliseconds - MILLISECONDS = 4 - }; - - /// \brief Constructors - public: IGN_DEPRECATED(4) Time(); - - /// \brief Copy constructor - /// \param[in] time Time to copy - public: IGN_DEPRECATED(4) Time(const Time &_time); - - /// \brief Constructor - /// \param[in] _tv Time to initialize to - public: explicit IGN_DEPRECATED(4) Time(const struct timespec &_tv); - - /// \brief Constructor - /// \param[in] _sec Seconds - /// \param[in] _nsec Nanoseconds - public: IGN_DEPRECATED(4) Time(int32_t _sec, int32_t _nsec); - - /// \brief Constuctor - /// \param[in] _time Time in double format sec.nsec - public: explicit IGN_DEPRECATED(4) Time(double _time); - - /// \brief Destructor - public: virtual ~Time(); - - /// \brief Get the wall time - /// \return the current time - public: static const IGN_DEPRECATED(4) Time &SystemTime(); - - /// \brief Set to sec and nsec - /// \param[in] _sec Seconds - /// \param[in] _nsec Nanoseconds - public: void Set(int32_t _sec, int32_t _nsec); - - /// \brief Set to seconds - /// \param[in] _seconds Number of seconds - public: void Set(double _seconds); - - /// \brief Get the time as a double - /// \return Time as a double in seconds - public: double Double() const; - - /// \brief Get the time as a float - /// \return Time as a float in seconds - public: float Float() const; - - /// \brief Sleep for the specified time. - /// \param[in] _time Sleep time - /// \return On OSX and Linux the return value is the time slept, - /// as reported by `nanosleep` for OSX and `clock_nanosleep` for Linux. - /// The return value does not include time spent before and after the - /// actual call to the system's sleep function. - /// - /// On Windows the return value is always common::Time::Zero. - public: static Time IGN_DEPRECATED(4) Sleep(const common::Time &_time); - - /// \brief Get the time as a string formatted as "DD hh:mm:ss.mmm", with - /// the option to choose the start/end. - /// \param[in] _start Start point. - /// \param[in] _end End point. - /// \return String representing time. - public: std::string FormattedString( - FormatOption _start = FormatOption::DAYS, - FormatOption _end = FormatOption::MILLISECONDS) const; - - /// \brief Assignment operator - /// \param[in] _time the new time - /// \return a reference to this instance - public: Time &operator=(const Time &_time); - - /// \brief Addition operators - /// \param[in] _time The time to add - /// \return a Time instance - public: Time operator+(const Time &_time) const; - - /// \brief Addition assignemtn operator - /// \param[in] _time The time to add - /// \return a Time instance - public: const Time &operator +=(const Time &_time); - - /// \brief Subtraction operator - /// \param[in] _tv The time to subtract - /// \return a Time instance - public: Time operator -(const struct timespec &_tv) const; - - /// \brief Subtraction assignment operator - /// \param[in] _tv The time to subtract - /// \return a Time instance - public: const Time &operator -=(const struct timespec &_tv); - - /// \brief Subtraction operator - /// \param[in] _time The time to subtract - /// \return a Time instance - public: Time operator -(const Time &_time) const; - - /// \brief Subtraction assignment operator - /// \param[in] _time The time to subtract - /// \return a reference to this instance - public: const Time &operator -=(const Time &_time); - - /// \brief Multiplication operator - /// \param[in] _tv the scaling duration - /// \return Time instance - public: Time operator *(const struct timespec &_tv) const; - - /// \brief Multiplication assignment operator - /// \param[in] _tv the scaling duration - /// \return a reference to this instance - public: const Time &operator *=(const struct timespec &_tv); - - /// \brief Multiplication operators - /// \param[in] _time the scaling factor - /// \return a scaled Time instance - public: Time operator *(const Time &_time) const; - - /// \brief Multiplication operators - /// \param[in] _time scale factor - /// \return a scaled Time instance - public: const Time &operator *=(const Time &_time); - - /// \brief Division assignment operator - /// \param[in] _tv a divisor - /// \return a Time instance - public: const Time &operator /=(const struct timespec &_tv); - - /// \brief Division operator - /// \param[in] _time the divisor - /// \return a Time instance - public: Time operator /(const Time &_time) const; - - /// \brief Division assignment operator - /// \param[in] time the divisor - /// \return a Time instance - public: const Time &operator /=(const Time &time); - - /// \brief Equal to operator - /// \param[in] _time the time to compare to - /// \return true if values are the same, false otherwise - public: bool operator==(const Time &_time) const; - - /// \brief Equal to operator - /// \param[in] _time the time to compare to - /// \return true if values are the same, false otherwise - public: bool operator==(double _time) const; - - /// \brief Equal to operator - /// \param[in] _time the time to compare to - /// \return true if values are the same, false otherwise - public: bool operator!=(const Time &_time) const; - - /// \brief Equal to operator - /// \param[in] _time the time to compare to - /// \return true if values are the same, false otherwise - public: bool operator!=(double _time) const; - - /// \brief Less than operator - /// \param[in] _time the time to compare with - /// \return true if time is shorter than this, false otherwise - public: bool operator<(const Time &_time) const; - - /// \brief Less than operator - /// \param[in] _time the time to compare with - /// \return true if time is shorter than this, false otherwise - public: bool operator<(double _time) const; - - /// \brief Less than or equal to operator - /// \param[in] _time the time to compare with - /// \return true if time is shorter than or equal to this, false otherwise - public: bool operator<=(const Time &_time) const; - - /// \brief Less than or equal to operator - /// \param[in] _time the time to compare with - /// \return true if time is shorter than or equal to this, false otherwise - public: bool operator<=(double _time) const; - - /// \brief Greater than operator - /// \param[in] _tv the time to compare with - /// \return true if time is greater than this, false otherwise - public: bool operator>(const struct timespec &_tv) const; - - /// \brief Greater than operator - /// \param[in] _time the time to compare with - /// \return true if time is greater than this, false otherwise - public: bool operator>(const Time &_time) const; - - /// \brief Greater than operator - /// \param[in] _time the time to compare with - /// \return true if time is greater than this, false otherwise - public: bool operator>(double _time) const; - - /// \brief Greater than or equal operator - /// \param[in] _time the time to compare with - /// \return true if time is greater than or equal to this, false otherwise - public: bool operator>=(const Time &_time) const; - - /// \brief Greater than or equal operator - /// \param[in] _tv the time to compare with - /// \return true if tv is greater than or equal to this, false otherwise - public: bool operator>=(const struct timespec &_tv) const; - - /// \brief Greater than or equal operator - /// \param[in] _time the time to compare with - /// \return true if time is greater than or equal to this, false otherwise - public: bool operator>=(double _time) const; - - /// \brief Stream insertion operator - /// \param[in] _out the output stream - /// \param[in] _time time to write to the stream - /// \return the output stream - public: friend std::ostream &operator<<(std::ostream &_out, - const ignition::common::Time &_time) - { - _out << _time.sec << " " << _time.nsec; - return _out; - } - - /// \brief Stream extraction operator - /// \param[in] _in the input stream - /// \param[in] _time time to read from to the stream - /// \return the input stream - public: friend std::istream &operator>>(std::istream &_in, - ignition::common::Time &_time) - { - // Skip white spaces - _in.setf(std::ios_base::skipws); - _in >> _time.sec >> _time.nsec; - return _in; - } - - /// \brief Seconds - public: int32_t sec; - - /// \brief Nanoseconds - public: int32_t nsec; - - /// \brief a singleton value of the last GetWallTime() value - private: static Time wallTime; - - /// \brief Correct the time so that small additions/substractions - /// preserve the internal seconds and nanoseconds separation - private: inline void Correct() - { - // In the case sec and nsec have different signs, normalize - if (this->sec > 0 && this->nsec < 0) - { - int32_t n = abs(this->nsec / this->nsInSec) + 1; - this->sec -= n; - this->nsec += n * this->nsInSec; - } - if (this->sec < 0 && this->nsec > 0) - { - int32_t n = abs(this->nsec / this->nsInSec) + 1; - this->sec += n; - this->nsec -= n * this->nsInSec; - } - - // Make any corrections - this->sec += this->nsec / this->nsInSec; - this->nsec = this->nsec % this->nsInSec; - } - - /// \brief Constant multiplier to convert from nanoseconds to seconds. - private: static const int32_t nsInSec; - - /// \brief Constant multiplier to convert from nanoseconds to - /// milliseconds. - private: static const int32_t nsInMs; - - private: static struct timespec clockResolution; - }; - } -} -#endif diff --git a/include/ignition/common/Timer.hh b/include/ignition/common/Timer.hh index 706bcc6c2..7fda12dba 100644 --- a/include/ignition/common/Timer.hh +++ b/include/ignition/common/Timer.hh @@ -17,8 +17,11 @@ #ifndef IGNITION_COMMON_TIMER_HH_ #define IGNITION_COMMON_TIMER_HH_ -#include <ignition/common/Time.hh> #include <ignition/common/Export.hh> +#include <ignition/common/SuppressWarning.hh> + +#include <chrono> +#include <iostream> namespace ignition { @@ -44,10 +47,6 @@ namespace ignition /// \return Tue if the timer has been started and not stopped. public: bool Running() const; - /// \brief Get the elapsed time - /// \return The time - public: Time IGN_DEPRECATED(4) Elapsed() const; - /// \brief Get the elapsed time /// \return The elapsed time public: std::chrono::duration<double> ElapsedTime() const; diff --git a/include/ignition/common/WorkerPool.hh b/include/ignition/common/WorkerPool.hh index 94da2b5a7..342687047 100644 --- a/include/ignition/common/WorkerPool.hh +++ b/include/ignition/common/WorkerPool.hh @@ -22,7 +22,6 @@ #include <memory> #include <ignition/common/Export.hh> -#include <ignition/common/Time.hh> #include <ignition/common/SuppressWarning.hh> namespace ignition @@ -54,13 +53,6 @@ namespace ignition public: void AddWork(std::function<void()> _work, std::function<void()> _cb = std::function<void()>()); - /// \brief Waits until all work is done and threads are idle - /// \param[in] _timeout How long to wait, default to forever - /// \returns true if all work was finished - /// \remarks The return value can be false even when waiting forever if - // the WorkerPool is destructed before all work is completed - public: bool IGN_DEPRECATED(4) WaitForResults(const Time &_timeout); - /// \brief Waits until all work is done and threads are idle /// \param[in] _timeout How long to wait, default to forever /// \returns true if all work was finished diff --git a/profiler/src/Profiler_Disabled_TEST.cc b/profiler/src/Profiler_Disabled_TEST.cc index c719434c7..2b8a53449 100644 --- a/profiler/src/Profiler_Disabled_TEST.cc +++ b/profiler/src/Profiler_Disabled_TEST.cc @@ -21,7 +21,6 @@ #include <atomic> // NOLINT(*) #include <thread> // NOLINT(*) #include "ignition/common/Util.hh" // NOLINT(*) -#include "ignition/common/Time.hh" // NOLINT(*) using namespace ignition; using namespace common; diff --git a/profiler/src/Profiler_Remotery_TEST.cc b/profiler/src/Profiler_Remotery_TEST.cc index 58a63a424..36cef9ee5 100644 --- a/profiler/src/Profiler_Remotery_TEST.cc +++ b/profiler/src/Profiler_Remotery_TEST.cc @@ -21,7 +21,6 @@ #include <atomic> // NOLINT(*) #include <thread> // NOLINT(*) #include "ignition/common/Util.hh" // NOLINT(*) -#include "ignition/common/Time.hh" // NOLINT(*) using namespace ignition; using namespace common; diff --git a/src/Console_TEST.cc b/src/Console_TEST.cc index 28b05668c..e946ffce7 100644 --- a/src/Console_TEST.cc +++ b/src/Console_TEST.cc @@ -20,7 +20,6 @@ #include "ignition/common/Console.hh" #include "ignition/common/Filesystem.hh" -#include "ignition/common/Time.hh" #include "ignition/common/Util.hh" #include "test_config.h" diff --git a/src/SystemPaths.cc b/src/SystemPaths.cc index f809686c4..d82963129 100644 --- a/src/SystemPaths.cc +++ b/src/SystemPaths.cc @@ -60,12 +60,6 @@ class ignition::common::SystemPathsPrivate /// \brief Log path public: std::string logPath; - /// \brief Find file callback. - public: std::function<std::string(const std::string &)> findFileCB; - - /// \brief Find file URI callback. - public: std::function<std::string(const std::string &)> findFileURICB; - /// \brief Callbacks to be called in order in case a file can't be found. public: std::vector <std::function <std::string( const std::string &)> > findFileCbs; @@ -340,12 +334,6 @@ std::string SystemPaths::FindFileURI(const ignition::common::URI &_uri) const filename = this->FindFile(ignition::common::copyFromUnixPath(suffix), true, false); - // Try URI callback - if (filename.empty() && this->dataPtr->findFileURICB) - { - filename = this->dataPtr->findFileURICB(_uri.Str()); - } - // Look in custom paths. // Tries the suffix against all paths, regardless of the scheme if (filename.empty()) @@ -429,10 +417,6 @@ std::string SystemPaths::FindFile(const std::string &_filename, { path = filename; } - else if (this->dataPtr->findFileCB) - { - path = this->dataPtr->findFileCB(filename); - } } // Look in custom paths. @@ -535,20 +519,6 @@ void SystemPaths::AddSearchPathSuffix(const std::string &_suffix) this->dataPtr->suffixPaths.push_back(s); } -///////////////////////////////////////////////// -void SystemPaths::SetFindFileCallback( - std::function<std::string(const std::string &)> _cb) -{ - this->dataPtr->findFileCB = _cb; -} - -///////////////////////////////////////////////// -void SystemPaths::SetFindFileURICallback( - std::function<std::string(const std::string &)> _cb) -{ - this->dataPtr->findFileURICB = _cb; -} - ///////////////////////////////////////////////// void SystemPaths::AddFindFileCallback( std::function<std::string(const std::string &)> _cb) diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index a17950baa..dd31cfcb8 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -242,10 +242,10 @@ TEST_F(SystemPathsFixture, FindFileURI) // sp.FindFileURI("file://" + this->filesystemRoot + "Windows")); #endif - auto robotCb = [dir1](const std::string &_s) + auto robotCb = [dir1](const ignition::common::URI &_uri) { - return _s.find("robot://", 0) != std::string::npos ? - ignition::common::joinPaths(dir1, _s.substr(8)) : ""; + return _uri.Scheme() == "robot" ? + ignition::common::joinPaths(dir1, _uri.Path().Str()) : ""; }; auto osrfCb = [dir2](const ignition::common::URI &_uri) { @@ -262,16 +262,7 @@ TEST_F(SystemPathsFixture, FindFileURI) EXPECT_EQ("", sp.FindFileURI("robot://test_f1")); EXPECT_EQ("", sp.FindFileURI("osrf://test_f2")); - // We still want to test the deprecated function until it is removed. -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - sp.SetFindFileURICallback(robotCb); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - + sp.AddFindFileURICallback(robotCb); EXPECT_EQ(file1, sp.FindFileURI("robot://test_f1")); EXPECT_EQ("", sp.FindFileURI("osrf://test_f2")); @@ -352,7 +343,6 @@ TEST_F(SystemPathsFixture, FindFile) const auto uriBadDir = "file://C:/bad"; #endif { - EXPECT_EQ(tmpDir, sp.FindFile(tmpDir)); EXPECT_EQ(tmpDir, sp.FindFile(uriTmpDir)); EXPECT_EQ(homeDir, sp.FindFile(homeDir)); EXPECT_EQ("", sp.FindFile(badDir)); @@ -361,10 +351,6 @@ TEST_F(SystemPathsFixture, FindFile) // Custom callback { - auto tmpCb = [tmpDir](const std::string &_s) - { - return _s == "tmp" ? tmpDir : ""; - }; auto homeCb = [homeDir](const std::string &_s) { return _s == "home" ? homeDir : ""; @@ -374,31 +360,18 @@ TEST_F(SystemPathsFixture, FindFile) return _s == "bad" ? badDir : ""; }; - // We still want to test the deprecated function until it is removed. -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - sp.SetFindFileCallback(tmpCb); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - - EXPECT_EQ(tmpDir, sp.FindFile("tmp")); EXPECT_EQ("", sp.FindFile("home")); EXPECT_EQ("", sp.FindFile("bad")); EXPECT_EQ("", sp.FindFile("banana")); sp.AddFindFileCallback(homeCb); - EXPECT_EQ(tmpDir, sp.FindFile("tmp")); EXPECT_EQ(homeDir, sp.FindFile("home")); EXPECT_EQ("", sp.FindFile("bad")); EXPECT_EQ("", sp.FindFile("banana")); sp.AddFindFileCallback(badCb); - EXPECT_EQ(tmpDir, sp.FindFile("tmp")); EXPECT_EQ(homeDir, sp.FindFile("home")); EXPECT_EQ("", sp.FindFile("bad")); EXPECT_EQ("", sp.FindFile("banana")); diff --git a/src/Time.cc b/src/Time.cc deleted file mode 100644 index 21636746c..000000000 --- a/src/Time.cc +++ /dev/null @@ -1,647 +0,0 @@ -/* - * Copyright (C) 2016 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <ctime> -#include <chrono> -#include <iomanip> - -#ifdef _WIN32 - - #include <Windows.h> - #include <Winsock2.h> - #include <cstdint> -// As of MSVS2015 (which contains MSVC++ ver 19), timespec is provided in time.h -// _MSC_VER contains the the version of VC++ multiplied by 100. -#if defined(_MSC_VER) && _MSC_VER < 1900 - struct timespec - { - int64_t tv_sec; - int64_t tv_nsec; - }; -#else - - #include <time.h> -#endif - -#else - #include <unistd.h> - #include <sys/time.h> - - #include <time.h> // NOLINT (false positive for multiple includes) -#endif - - -#ifdef __MACH__ -#include <mach/clock.h> -#include <mach/mach.h> -#endif - -#include <math.h> - -#include <ignition/common/Util.hh> -#include <ignition/common/Console.hh> -#include <ignition/common/Time.hh> - -using namespace ignition; -using namespace common; - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif -Time Time::wallTime; -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -struct timespec Time::clockResolution; -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif -const Time Time::Zero = common::Time(0, 0); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -const int32_t Time::nsInSec = 1000000000L; -const int32_t Time::nsInMs = 1000000; - - -///////////////////////////////////////////////// -Time::Time() - : sec(0), nsec(0) -{ -#ifdef __MACH__ - clockResolution.tv_sec = 1 / sysconf(_SC_CLK_TCK); -#elif defined(_WIN32) - LARGE_INTEGER freq; - QueryPerformanceFrequency(&freq); - double period = 1.0/freq.QuadPart; - clockResolution.tv_sec = static_cast<int64_t>(floor(period)); - clockResolution.tv_nsec = - static_cast<int64_t>((period - floor(period)) * nsInSec); -#else - // get clock resolution, skip sleep if resolution is larger then - // requested sleep time - clock_getres(CLOCK_MONOTONIC, &clockResolution); -#endif -} - -///////////////////////////////////////////////// -Time::Time(const struct timespec &_tv) -{ - this->sec = _tv.tv_sec; - this->nsec = _tv.tv_nsec; -} - -///////////////////////////////////////////////// -Time::Time(const Time &_time) -: sec(_time.sec), nsec(_time.nsec) -{ -} -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif -///////////////////////////////////////////////// -Time::Time(int32_t _sec, int32_t _nsec) -: sec(_sec), nsec(_nsec) -{ - this->Correct(); -} -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - -///////////////////////////////////////////////// -Time::Time(double _time) -{ - this->Set(_time); -} - -///////////////////////////////////////////////// -Time::~Time() -{ -} - -///////////////////////////////////////////////// -const Time &Time::SystemTime() -{ - auto duration = IGN_SYSTEM_TIME().time_since_epoch(); - wallTime.sec = std::chrono::duration_cast<std::chrono::seconds>( - duration).count(); - wallTime.nsec = std::chrono::duration_cast<std::chrono::nanoseconds>( - duration).count() - wallTime.sec * IGN_SEC_TO_NANO; - - return wallTime; -} - -///////////////////////////////////////////////// -void Time::Set(int32_t _sec, int32_t _nsec) -{ - this->sec = _sec; - this->nsec = _nsec; - - this->Correct(); -} - -///////////////////////////////////////////////// -void Time::Set(double _seconds) -{ - this->sec = (int32_t)(floor(_seconds)); - this->nsec = (int32_t)(round((_seconds - this->sec) * IGN_SEC_TO_NANO)); - this->Correct(); -} - -///////////////////////////////////////////////// -double Time::Double() const -{ - return static_cast<double>(this->sec + this->nsec * IGN_NANO_TO_SEC); -} - -///////////////////////////////////////////////// -float Time::Float() const -{ - return static_cast<float>(this->sec + this->nsec * IGN_NANO_TO_SEC); -} - -///////////////////////////////////////////////// -Time Time::Sleep(const common::Time &_time) -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - Time result; -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - - if (_time >= clockResolution) - { - struct timespec interval; - interval.tv_sec = _time.sec; - interval.tv_nsec = _time.nsec; - - // Sleeping for negative time doesn't make sense - if (interval.tv_sec < 0) - { - ignerr << "Cannot sleep for negative time[" << _time << "]\n"; -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return result; -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - } - - // This assert conforms to the manpage for nanosleep - if (interval.tv_nsec < 0 || interval.tv_nsec > 999999999) - { - ignerr << "Nanoseconds of [" << interval.tv_nsec - << "] must be in the range0 to 999999999.\n"; -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return result; -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - } - -#ifdef _WIN32 - // Borrowed from roscpp_core/rostime/src/time.cpp - HANDLE timer = NULL; - LARGE_INTEGER sleepTime; - sleepTime.QuadPart = - - static_cast<int64_t>(interval.tv_sec)*10000000LL - - static_cast<int64_t>(interval.tv_nsec) / 100LL; - - timer = CreateWaitableTimer(NULL, TRUE, NULL); - if (timer == NULL) - { - ignerr << "Unable to create waitable timer. Sleep will be incorrect.\n"; -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return result; -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - } - - if (!SetWaitableTimer (timer, &sleepTime, 0, NULL, NULL, 0)) - { - ignerr << "Unable to use waitable timer. Sleep will be incorrect.\n"; -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return result; -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - } - - if (WaitForSingleObject (timer, INFINITE) != WAIT_OBJECT_0) - { - ignerr << - "Unable to wait for a single object. Sleep will be incorrect.\n"; -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return result; -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - } - - result.sec = 0; - result.nsec = 0; -#else - struct timespec remainder; -# ifdef __MACH__ - if (nanosleep(&interval, &remainder) == EINTR) - { - // Get the time remaining (time unslept) - result.sec = remainder.tv_sec; - result.nsec = remainder.tv_nsec; - } -# else - if (clock_nanosleep(CLOCK_MONOTONIC, 0, &interval, &remainder) == EINTR) - { - // Get the time remaining (time unslept) - result.sec = remainder.tv_sec; - result.nsec = remainder.tv_nsec; - } -# endif - // Compute the time actually slept. - result = _time - result; -#endif - } - else - { - ignlog << "Sleep time is larger than clock resolution, skipping sleep\n"; - } - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return result; -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -} - -///////////////////////////////////////////////// -Time &Time::operator=(const Time &_time) -{ - this->sec = _time.sec; - this->nsec = _time.nsec; - - return *this; -} - -///////////////////////////////////////////////// -Time Time::operator+(const Time &_time) const -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - Time t(this->sec + _time.sec, this->nsec + _time.nsec); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - t.Correct(); - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return t; -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -} - -///////////////////////////////////////////////// -const Time &Time::operator+=(const Time &_time) -{ - this->sec += _time.sec; - this->nsec += _time.nsec; - this->Correct(); - return *this; -} - -///////////////////////////////////////////////// -Time Time::operator-(const Time &_time) const -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - Time t(this->sec - _time.sec, this->nsec - _time.nsec); - t.Correct(); - return t; -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -} - -///////////////////////////////////////////////// -const Time &Time::operator-=(const Time &_time) -{ - this->sec -= _time.sec; - this->nsec -= _time.nsec; - this->Correct(); - return *this; -} - -///////////////////////////////////////////////// -Time Time::operator*(const Time &_time) const -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - Time t(this->sec * _time.sec, this->nsec * _time.nsec); - t.Correct(); - return t; -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -} - -///////////////////////////////////////////////// -const Time &Time::operator*=(const Time &_time) -{ - this->Set(this->sec * _time.sec, this->nsec * _time.nsec); - this->Correct(); - return *this; -} - -///////////////////////////////////////////////// -Time Time::operator/(const Time &_time) const -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - Time result(*this); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - if (_time.sec == 0 && _time.nsec == 0) - ignerr << "Time divide by zero\n"; - else - result.Set(this->Double() / _time.Double()); -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return result; -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -} - -///////////////////////////////////////////////// -const Time &Time::operator/=(const Time &_time) -{ - *this = *this / _time; - return *this; -} - -///////////////////////////////////////////////// -bool Time::operator==(const Time &_time) const -{ - return this->sec == _time.sec && this->nsec == _time.nsec; -} - -///////////////////////////////////////////////// -bool Time::operator==(double _time) const -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return *this == Time(_time); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -} - -///////////////////////////////////////////////// -bool Time::operator!=(const Time &_time) const -{ - return !(*this == _time); -} - -///////////////////////////////////////////////// -bool Time::operator!=(double _time) const -{ - return !(*this == _time); -} - -///////////////////////////////////////////////// -bool Time::operator<(const Time &_time) const -{ - return this->sec < _time.sec || - (this->sec == _time.sec && this->nsec < _time.nsec); -} - -///////////////////////////////////////////////// -bool Time::operator<(double _time) const -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return *this < Time(_time); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -} - -///////////////////////////////////////////////// -bool Time::operator<=(const Time &_time) const -{ - return !(_time < *this); -} - -///////////////////////////////////////////////// -bool Time::operator<=(double _time) const -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return *this <= Time(_time); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -} - -///////////////////////////////////////////////// -bool Time::operator>(const Time &_time) const -{ - return _time < *this; -} - -///////////////////////////////////////////////// -bool Time::operator>(double _time) const -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return *this > Time(_time); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -} - -///////////////////////////////////////////////// -bool Time::operator>=(const Time &_time) const -{ - return !(*this < _time); -} - -///////////////////////////////////////////////// -bool Time::operator>=(double _time) const -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return *this >= Time(_time); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -} - -///////////////////////////////////////////////// -bool Time::operator>=(const struct timespec &_tv) const -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - return *this >= Time(_tv); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -} - -///////////////////////////////////////////////// -std::string Time::FormattedString(FormatOption _start, FormatOption _end) const -{ - if (_end < _start) - { - ignwarn << "End can't come before start, using same end and start." - << std::endl; - _end = _start; - } - - std::ostringstream stream; - unsigned int s, msec; - - stream.str(""); - - // Get seconds - s = this->sec; - - // Get milliseconds - msec = this->nsec / nsInMs; - - // Get seconds from milliseconds - int seconds = msec / 1000; - msec -= seconds * 1000; - s += seconds; - - // Days - if (_start <= FormatOption::DAYS) - { - unsigned int day = s / 86400; - s -= day * 86400; - stream << std::setw(2) << std::setfill('0') << day; - } - - // Hours - if (_end >= FormatOption::HOURS) - { - if (_start < FormatOption::HOURS) - stream << " "; - - if (_start <= FormatOption::HOURS) - { - unsigned int hour = s / 3600; - s -= hour * 3600; - stream << std::setw(2) << std::setfill('0') << hour; - } - } - - // Minutes - if (_end >= FormatOption::MINUTES) - { - if (_start < FormatOption::MINUTES) - stream << ":"; - - if (_start <= FormatOption::MINUTES) - { - unsigned int min = s / 60; - s -= min * 60; - stream << std::setw(2) << std::setfill('0') << min; - } - } - - // Seconds - if (_end >= FormatOption::SECONDS) - { - if (_start < FormatOption::SECONDS) - stream << ":"; - - if (_start <= FormatOption::SECONDS) - { - stream << std::setw(2) << std::setfill('0') << s; - } - } - - // Milliseconds - if (_end >= FormatOption::MILLISECONDS) - { - if (_start < FormatOption::MILLISECONDS) - stream << "."; - else - msec = msec + s * 1000; - - if (_start <= FormatOption::MILLISECONDS) - { - stream << std::setw(3) << std::setfill('0') << msec; - } - } - - return stream.str(); -} diff --git a/src/Time_TEST.cc b/src/Time_TEST.cc deleted file mode 100644 index aa7ca404c..000000000 --- a/src/Time_TEST.cc +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright (C) 2016 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * -*/ - -#include <gtest/gtest.h> - -#include <ignition/common/Timer.hh> -#include <ignition/common/Time.hh> - -using namespace ignition; - -///////////////////////////////////////////////// -TEST(TimeTest, Time) -{ - common::Timer timer; - timer.Start(); - IGN_SLEEP_MS(100); - EXPECT_TRUE(timer.ElapsedTime().count() > 0.1); - -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - common::Time time; - time = common::Time::SystemTime(); - EXPECT_TRUE(common::Time::SystemTime() - time < common::Time(0, 1000000)); - - time = common::Time(1, 1000) - + common::Time(1.5) - + common::Time(0, static_cast<int32_t>(1e9)); - EXPECT_TRUE(time == common::Time(3, static_cast<int32_t>(5e8 + 1000))); - - time.Set(1, 1000); - time += common::Time(1.5); - time += common::Time(0, static_cast<int32_t>(1e9)); - EXPECT_TRUE(time == common::Time(3, static_cast<int32_t>(5e8 + 1000))); - - time.Set(1, 1000); - time -= common::Time(1, 1000); - EXPECT_TRUE(time == common::Time(0, 0)); - - time.Set(1, 1000); - time *= common::Time(2, 2); - EXPECT_EQ(time, common::Time(2, 2000)); - - time.Set(2, 4000); - time /= common::Time(2, 2); - EXPECT_TRUE(time == common::Time(1, 1999)); - EXPECT_FALSE(time != common::Time(1, 1999)); - - time += common::Time(0, 1); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - - EXPECT_EQ(time, 1.0 + 2000*1e-9); - EXPECT_FALSE(time != 1.0 + 2000*1e-9); - EXPECT_TRUE(time < 2.0); - EXPECT_TRUE(time > 0.1); - EXPECT_TRUE(time >= 0.1); - - time.Set(1, 1000); -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - time = common::Time(1, 1000) * common::Time(2, 2); - EXPECT_TRUE(time == common::Time(2, 2000)); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - - time.Set(1, 1000); -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - time = common::Time(1, 1000) / common::Time(2, 2); - EXPECT_TRUE(time == common::Time(0, 500000499)); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - - double sec = 1.0 + 1e-9; - double msec = sec * 1e3; - double usec = sec * 1e6; - double nsec = sec * 1e9; - EXPECT_DOUBLE_EQ(nsec, IGN_SEC_TO_NANO * sec); - EXPECT_DOUBLE_EQ(nsec, IGN_MS_TO_NANO * msec); - EXPECT_DOUBLE_EQ(nsec, IGN_US_TO_NANO * usec); - EXPECT_DOUBLE_EQ(1.0, 1e9 * IGN_NANO_TO_SEC); -} - -///////////////////////////////////////////////// -TEST(TimeTest, String) -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - common::Time time(0); - - // Several combinations - EXPECT_EQ(time.FormattedString(), "00 00:00:00.000"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::HOURS), - "00:00:00.000"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::MINUTES), - "00:00.000"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::SECONDS), - "00.000"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::MILLISECONDS), - "000"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::DAYS, - common::Time::FormatOption::MILLISECONDS), - "00 00:00:00.000"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::DAYS, - common::Time::FormatOption::SECONDS), - "00 00:00:00"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::DAYS, - common::Time::FormatOption::MINUTES), - "00 00:00"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::DAYS, - common::Time::FormatOption::HOURS), - "00 00"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::DAYS, - common::Time::FormatOption::DAYS), - "00"); - - // start > end: start pushes end - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::MILLISECONDS, - common::Time::FormatOption::MINUTES), - "000"); - - // 1 second - time = common::Time(0, 1000000000); - EXPECT_EQ(time.FormattedString(), "00 00:00:01.000"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::MILLISECONDS, - common::Time::FormatOption::MILLISECONDS), - "1000"); - - // 30.5 seconds - time = common::Time(30, 500000000); - EXPECT_EQ(time.FormattedString(), "00 00:00:30.500"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::SECONDS, - common::Time::FormatOption::SECONDS), - "30"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::MILLISECONDS, - common::Time::FormatOption::MILLISECONDS), - "30500"); - - // 1 min - time = common::Time(60); - EXPECT_EQ(time.FormattedString(), "00 00:01:00.000"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::SECONDS, - common::Time::FormatOption::SECONDS), - "60"); - - // 2.5 hours - time = common::Time(9000); - EXPECT_EQ(time.FormattedString(), "00 02:30:00.000"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::HOURS, - common::Time::FormatOption::MINUTES), - "02:30"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::SECONDS, - common::Time::FormatOption::SECONDS), - "9000"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::MINUTES, - common::Time::FormatOption::MINUTES), - "150"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::HOURS, - common::Time::FormatOption::HOURS), - "02"); - - // 3 days - time = common::Time(259200); - EXPECT_EQ(time.FormattedString(), "03 00:00:00.000"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::DAYS, - common::Time::FormatOption::DAYS), - "03"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::HOURS), - "72:00:00.000"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::HOURS, - common::Time::FormatOption::HOURS), - "72"); - EXPECT_EQ(time.FormattedString(common::Time::FormatOption::MINUTES, - common::Time::FormatOption::MINUTES), - "4320"); -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - // Large time - time = common::Time(1234567890, 123456789); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - EXPECT_EQ(time.FormattedString(), "14288 23:31:30.123"); -} - -///////////////////////////////////////////////// -TEST(TimeTest, Double) -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - common::Time time(1, 900000000); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - EXPECT_DOUBLE_EQ(1.9, time.Double()); - - time.Set(1, -900000000); - EXPECT_DOUBLE_EQ(0.100000000, time.Double()); - - time.Set(-1, 900000000); - EXPECT_DOUBLE_EQ(-0.100000000, time.Double()); - - time.Set(-1, -900000000); - EXPECT_DOUBLE_EQ(-1.900000000, time.Double()); -} - -///////////////////////////////////////////////// -TEST(TimeTest, Float) -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - common::Time time(1, 900000000); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - EXPECT_FLOAT_EQ(1.9f, time.Float()); - - time.Set(1, -900000000); - EXPECT_FLOAT_EQ(0.100000000f, time.Float()); - - time.Set(-1, 900000000); - EXPECT_FLOAT_EQ(-0.100000000f, time.Float()); - - time.Set(-1, -900000000); - EXPECT_FLOAT_EQ(-1.900000000f, time.Float()); -} - -///////////////////////////////////////////////// -TEST(TimeTest, Sleep) -{ -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - common::Time sleepTime(1, 900000000); - common::Time result = common::Time::Sleep(sleepTime); -#ifdef _WIN32 - // Sleep always returns (0 0) on Windows - EXPECT_EQ(common::Time::Zero, result); -#else - EXPECT_EQ(sleepTime, result); -#endif - -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif -} - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/Timer.cc b/src/Timer.cc index 0a8bb5f2a..5ea717770 100644 --- a/src/Timer.cc +++ b/src/Timer.cc @@ -51,19 +51,6 @@ bool Timer::Running() const return this->running; } -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif -////////////////////////////////////////////////// -Time Timer::Elapsed() const -{ - return common::Time(this->ElapsedTime().count()); -} -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - ////////////////////////////////////////////////// std::chrono::duration<double> Timer::ElapsedTime() const { diff --git a/src/WorkerPool.cc b/src/WorkerPool.cc index 8390faa92..e4b1a1f9b 100644 --- a/src/WorkerPool.cc +++ b/src/WorkerPool.cc @@ -15,7 +15,8 @@ * */ - +#include <condition_variable> +#include <mutex> #include <queue> #include <thread> #include <utility> @@ -164,12 +165,6 @@ void WorkerPool::AddWork(std::function<void()> _work, std::function<void()> _cb) this->dataPtr->signalNewWork.notify_one(); } -////////////////////////////////////////////////// -bool WorkerPool::WaitForResults(const Time &_timeout) -{ - return WaitForResults(math::secNsecToDuration(_timeout.sec, _timeout.nsec)); -} - ////////////////////////////////////////////////// bool WorkerPool::WaitForResults( const std::chrono::steady_clock::duration &_timeout) From 1d6b712953c3c30a892cf6a5f31b839be539d7dc Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Fri, 3 Dec 2021 15:11:37 -0600 Subject: [PATCH 108/219] Use ImplPtr where relevant (#274) Signed-off-by: Michael Carroll <michael@openrobotics.org> --- CMakeLists.txt | 2 +- include/ignition/common/Battery.hh | 31 +++--- include/ignition/common/Filesystem.hh | 23 ++-- include/ignition/common/SystemPaths.hh | 13 +-- include/ignition/common/TempDirectory.hh | 11 +- include/ignition/common/URI.hh | 104 ++---------------- include/ignition/common/WorkerPool.hh | 9 +- src/Battery.cc | 18 ++- src/CMakeLists.txt | 9 +- src/FilesystemBoost.cc | 10 +- src/SystemPaths.cc | 11 +- src/TempDirectory.cc | 4 +- src/URI.cc | 133 +++-------------------- src/URI_TEST.cc | 4 +- src/WorkerPool.cc | 8 +- 15 files changed, 101 insertions(+), 289 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 69ec46ca9..57cef06ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,7 +53,7 @@ set(IGN_MATH_VER ${ignition-math6_VERSION_MAJOR}) #-------------------------------------- # Find ignition-utils -ign_find_package(ignition-utils1 REQUIRED_BY graphics VERSION 1.0) +ign_find_package(ignition-utils1 REQUIRED VERSION 1.0) set(IGN_UTILS_VER ${ignition-utils1_VERSION_MAJOR}) #-------------------------------------- diff --git a/include/ignition/common/Battery.hh b/include/ignition/common/Battery.hh index 504d8361f..87cbb7dc6 100644 --- a/include/ignition/common/Battery.hh +++ b/include/ignition/common/Battery.hh @@ -17,20 +17,19 @@ #ifndef IGNITION_COMMON_BATTERY_HH_ #define IGNITION_COMMON_BATTERY_HH_ -#include <map> -#include <string> #include <functional> +#include <map> #include <memory> +#include <string> + #include <ignition/common/Export.hh> -#include <ignition/common/SuppressWarning.hh> + +#include <ignition/utils/ImplPtr.hh> namespace ignition { namespace common { - // Forward declare private data class. - class BatteryPrivate; - /// \brief A battery abstraction /// /// The default battery model is ideal: It just takes the initial voltage @@ -59,13 +58,22 @@ namespace ignition /// \param[in] _battery Battery to copy. public: Battery(const Battery &_battery); - /// \brief Assignment operator + /// \brief Copy assignment operator /// \param[in] _battery The new battery /// \return a reference to this instance public: Battery &operator=(const Battery &_battery); + /// \brief Move constructor + /// \param[in] _battery Battery to move. + public: Battery(Battery &&_battery); + + /// \brief Move assignment operator + /// \param[in] _battery The new battery + /// \return a reference to this instance + public: Battery &operator=(Battery &&_battery); + /// \brief Destructor. - public: virtual ~Battery(); + public: virtual ~Battery() = default; /// \brief Equal to operator /// \param[in] _battery the battery to compare to @@ -163,11 +171,8 @@ namespace ignition /// \return New battery voltage. private: double UpdateDefault(Battery *_battery); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \internal - /// \brief Private data pointer. - private: std::unique_ptr<BatteryPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + /// \brief Pointer to private data. + IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; /// \def BatteryPtr diff --git a/include/ignition/common/Filesystem.hh b/include/ignition/common/Filesystem.hh index 42e95b327..aa36f0a6f 100644 --- a/include/ignition/common/Filesystem.hh +++ b/include/ignition/common/Filesystem.hh @@ -18,11 +18,11 @@ #ifndef IGNITION_COMMON_FILESYSTEM_HH_ #define IGNITION_COMMON_FILESYSTEM_HH_ -#include <memory> #include <string> #include <ignition/common/Export.hh> -#include <ignition/common/SuppressWarning.hh> + +#include <ignition/utils/ImplPtr.hh> namespace ignition { @@ -253,19 +253,19 @@ namespace ignition std::string IGNITION_COMMON_VISIBLE uniqueDirectoryPath( const std::string &_dir); - /// \internal - class DirIterPrivate; - /// \class DirIter Filesystem.hh /// \brief A class for iterating over all items in a directory. class IGNITION_COMMON_VISIBLE DirIter { + /// \brief Constructor for end element. + public: DirIter(); + /// \brief Constructor. /// \param[in] _in Directory to iterate over. public: explicit DirIter(const std::string &_in); - /// \brief Constructor for end element. - public: DirIter(); + /// \brief Destructor + public: ~DirIter(); /// \brief Dereference operator; returns current directory record. /// \return A string representing the entire path of the directory @@ -282,9 +282,6 @@ namespace ignition /// \return true if the iterators are equal, false otherwise. public: bool operator!=(const DirIter &_other) const; - /// \brief Destructor - public: ~DirIter(); - /// \brief Move to the next directory record, skipping . and .. records. private: void Next(); @@ -294,10 +291,8 @@ namespace ignition /// \brief Close an open directory handle. private: void CloseHandle(); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \brief Private data. - private: std::unique_ptr<DirIterPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + /// \brief Pointer to private data. + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/include/ignition/common/SystemPaths.hh b/include/ignition/common/SystemPaths.hh index 2ff236cfb..9b8224525 100644 --- a/include/ignition/common/SystemPaths.hh +++ b/include/ignition/common/SystemPaths.hh @@ -29,14 +29,14 @@ #include <functional> #include <list> -#include <memory> #include <string> #include <vector> #include <ignition/common/Export.hh> -#include <ignition/common/SuppressWarning.hh> #include <ignition/common/URI.hh> +#include <ignition/utils/ImplPtr.hh> + namespace ignition { namespace common @@ -53,9 +53,6 @@ namespace ignition /// \brief Constructor for SystemPaths public: SystemPaths(); - /// \brief Destructor - public: virtual ~SystemPaths(); - /// \brief Get the log path. If IGN_LOG_PATH environment variable is set, /// then this path is used. If not, the path is $HOME/.ignition, and in /// case even HOME is not set, /tmp/ignition is used. If the directory @@ -205,10 +202,8 @@ namespace ignition /// uses to separate different paths from each other. public: static char Delimiter(); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \brief Private data pointer - private: std::unique_ptr<SystemPathsPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + /// \brief Pointer to private data. + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/include/ignition/common/TempDirectory.hh b/include/ignition/common/TempDirectory.hh index 4216fd712..a23c3eab3 100644 --- a/include/ignition/common/TempDirectory.hh +++ b/include/ignition/common/TempDirectory.hh @@ -18,18 +18,17 @@ #ifndef IGNITION_COMMON_TEMPDIRECTORY_HH_ #define IGNITION_COMMON_TEMPDIRECTORY_HH_ -#include <memory> #include <string> #include <ignition/common/Export.hh> #include <ignition/common/Filesystem.hh> +#include <ignition/utils/ImplPtr.hh> + namespace ignition { namespace common { - class TempDirectoryPrivate; - /// \brief Return the path to a directory suitable for temporary files. /// /// Calls std::filesystem::temp_directory_path, refer to the standard @@ -100,10 +99,8 @@ namespace ignition /// \return the temporary directory path public: std::string Path() const; - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \brief Private data pointer - private: std::unique_ptr<TempDirectoryPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + /// \brief Pointer to private data. + IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } // namespace common } // namespace ignition diff --git a/include/ignition/common/URI.hh b/include/ignition/common/URI.hh index f4dba47b4..a03904071 100644 --- a/include/ignition/common/URI.hh +++ b/include/ignition/common/URI.hh @@ -17,24 +17,17 @@ #ifndef IGNITION_COMMON_URI_HH_ #define IGNITION_COMMON_URI_HH_ -#include <memory> #include <optional> #include <string> #include <ignition/common/Export.hh> -#include <ignition/common/SuppressWarning.hh> + +#include <ignition/utils/ImplPtr.hh> namespace ignition { namespace common { - // Forward declare private data classes. - class URIAuthorityPrivate; - class URIPathPrivate; - class URIQueryPrivate; - class URIFragmentPrivate; - class URIPrivate; - /// A URI authority contains userinfo, host, and port data. The format /// of a URI authority is `//userinfo@host:port`. The `userinfo` and /// `port` components are optional. @@ -64,17 +57,10 @@ namespace ignition /// \brief Constructor public: URIAuthority(); - /// \brief Copy constructor. - /// \param[in] _path Another URIAuthority. - public: URIAuthority(const URIAuthority &_path); - /// \brief Construct a URIAuthority object from a string. /// \param[in] _str A string. public: explicit URIAuthority(const std::string &_str); - /// \brief Destructor - public: virtual ~URIAuthority(); - /// \brief Remove all parts of the authority public: void Clear(); @@ -85,7 +71,7 @@ namespace ignition /// \brief Set the user information. /// \param[in] _userInfo The user information string. - public: void SetUserInfo(const std::string &_userInfo) const; + public: void SetUserInfo(const std::string &_userInfo); /// \brief Get the host. /// \return The host. @@ -93,7 +79,7 @@ namespace ignition /// \brief Set the host. /// \param[in] _host The host. - public: void SetHost(const std::string &_host) const; + public: void SetHost(const std::string &_host); /// \brief True if an empty host is considered valid. /// \return True if an empty host is valid. @@ -103,14 +89,14 @@ namespace ignition /// This should only be set to true if the corresponding URIScheme /// is "file". /// \param[in] _valid True if an empty host is valid. - public: void SetEmptyHostValid(bool _valid) const; + public: void SetEmptyHostValid(bool _valid); /// \brief Get the port. /// \return The port number, which is optional. public: std::optional<int> Port() const; /// \brief Set the port number. - public: void SetPort(int _port) const; + public: void SetPort(int _port); /// \brief Return true if the two authorities match. /// \param[in] _auth Authority. @@ -121,11 +107,6 @@ namespace ignition /// \return The authority as a string. public: std::string Str() const; - /// \brief Assignment operator. - /// \param[in] _auth Another URIAuthority. - /// \return Itself. - public: URIAuthority &operator=(const URIAuthority &_auth); - /// \brief Return true if the string is a valid path. /// \param[in] _str String to check. /// \param[in] _emptyHostValid Set this to true if an empty host is @@ -148,11 +129,8 @@ namespace ignition public: bool Parse(const std::string &_str, bool _emptyHostValid = false); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \internal /// \brief Pointer to private data. - private: std::unique_ptr<URIAuthorityPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_IMPL_PTR(dataPtr) }; /// \brief A URI path contains a sequence of segments separated by `/`. @@ -169,17 +147,10 @@ namespace ignition /// \brief Constructor public: URIPath(); - /// \brief Copy constructor. - /// \param[in] _path Another URIPath. - public: URIPath(const URIPath &_path); - /// \brief Construct a URIPath object from a string. /// \param[in] _str A string. public: explicit URIPath(const std::string &_str); - /// \brief Destructor - public: virtual ~URIPath(); - /// \brief Remove all parts of the path public: void Clear(); @@ -249,11 +220,6 @@ namespace ignition /// \return The path as a string, with each path part separated by _delim. public: std::string Str(const std::string &_delim = "/") const; - /// \brief Assignment operator. - /// \param[in] _path Another URIPath. - /// \return Itself. - public: URIPath &operator=(const URIPath &_path); - /// \brief Return true if the string is a valid path. /// \param[in] _str String to check. /// \return True if _str is a valid URI path. @@ -268,11 +234,8 @@ namespace ignition /// \return True if the string could be parsed as a URIPath. public: bool Parse(const std::string &_str); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \internal /// \brief Pointer to private data. - private: std::unique_ptr<URIPathPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_IMPL_PTR(dataPtr) }; /// \brief The query component of a URI @@ -285,13 +248,6 @@ namespace ignition /// \param[in] _str A string. public: explicit URIQuery(const std::string &_str); - /// \brief Copy constructor - /// \param[in] _query Another query component - public: URIQuery(const URIQuery &_query); - - /// \brief Destructor - public: virtual ~URIQuery(); - /// \brief Remove all values of the query public: void Clear(); @@ -301,11 +257,6 @@ namespace ignition public: void Insert(const std::string &_key, const std::string &_value); - /// \brief Assignment operator. - /// \param[in] _query another URIQuery. - /// \return Itself. - public: URIQuery &operator=(const URIQuery &_query); - /// \brief Return true if the two queries contain the same values. /// \param[in] _query A URI query to compare. /// return True if the queries match. @@ -331,11 +282,8 @@ namespace ignition /// \return True if the string can be parsed as a URIQuery. public: bool Parse(const std::string &_string); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \internal /// \brief Pointer to private data. - private: std::unique_ptr<URIQueryPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_IMPL_PTR(dataPtr) }; /// \brief The fragment component of a URI @@ -348,21 +296,9 @@ namespace ignition /// \param[in] _str A string. public: explicit URIFragment(const std::string &_str); - /// \brief Copy constructor - /// \param[in] _fragment Another fragment component - public: URIFragment(const URIFragment &_fragment); - - /// \brief Destructor - public: virtual ~URIFragment(); - /// \brief Remove all values of the fragment public: void Clear(); - /// \brief Assignment operator. - /// \param[in] _fragment another URIFragment. - /// \return Itself. - public: URIFragment &operator=(const URIFragment &_fragment); - /// \brief Assignment operator. /// \param[in] _fragment another URIFragment. /// \return Itself. @@ -391,11 +327,8 @@ namespace ignition /// \return True if the string can be parsed as a URIFragment. public: bool Parse(const std::string &_string); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \internal /// \brief Pointer to private data. - private: std::unique_ptr<URIFragmentPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_IMPL_PTR(dataPtr) }; /// \brief A complete URI which has the following components: @@ -415,13 +348,6 @@ namespace ignition public: explicit URI(const std::string &_str, bool _hasAuthority = false); - /// \brief Copy constructor - /// \param[in] _uri Another URI. - public: URI(const URI &_uri); - - /// \brief Destructor. - public: ~URI(); - /// \brief Get the URI as a string, which has the form: /// /// scheme:[//authority]path[?query][#fragment] @@ -475,11 +401,6 @@ namespace ignition /// \return A const reference of the fragment. public: const URIFragment &Fragment() const; - /// \brief Assignment operator. - /// \param[in] _uri Another URI. - /// \return Itself. - public: URI &operator=(const URI &_uri); - /// \brief Return true if the two URIs match. /// \param[in] _uri Another URI to compare. /// \return True if the two URIs match. @@ -503,11 +424,8 @@ namespace ignition /// \return True if the string can be parsed as a URI. public: bool Parse(const std::string &_str); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \internal /// \brief Pointer to private data. - private: std::unique_ptr<URIPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/include/ignition/common/WorkerPool.hh b/include/ignition/common/WorkerPool.hh index 342687047..d7f5aeebc 100644 --- a/include/ignition/common/WorkerPool.hh +++ b/include/ignition/common/WorkerPool.hh @@ -19,10 +19,10 @@ #define IGNITION_COMMON_WORKER_POOL_HH_ #include <functional> -#include <memory> #include <ignition/common/Export.hh> -#include <ignition/common/SuppressWarning.hh> + +#include <ignition/utils/ImplPtr.hh> namespace ignition { @@ -62,10 +62,7 @@ namespace ignition const std::chrono::steady_clock::duration &_timeout = std::chrono::steady_clock::duration::zero()); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \brief private implementation pointer - private: std::unique_ptr<WorkerPoolPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/src/Battery.cc b/src/Battery.cc index f9ef49532..a5530773e 100644 --- a/src/Battery.cc +++ b/src/Battery.cc @@ -24,7 +24,7 @@ using namespace ignition; using namespace common; /// \brief Private data for the Battery class -class ignition::common::BatteryPrivate +class ignition::common::Battery::Implementation { /// \brief Initial voltage in volts. public: double initVoltage = 0.0; @@ -51,7 +51,7 @@ class ignition::common::BatteryPrivate ///////////////////////////////////////////////// Battery::Battery() -: dataPtr(new BatteryPrivate) + : dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { this->SetUpdateFunc(std::bind(&Battery::UpdateDefault, this, std::placeholders::_1)); @@ -59,7 +59,7 @@ Battery::Battery() ///////////////////////////////////////////////// Battery::Battery(const std::string &_name, const double _voltage) -: dataPtr(new BatteryPrivate) + : Battery() { this->dataPtr->name = _name; this->dataPtr->initVoltage = _voltage; @@ -67,7 +67,7 @@ Battery::Battery(const std::string &_name, const double _voltage) ///////////////////////////////////////////////// Battery::Battery(const Battery &_battery) - : dataPtr(new BatteryPrivate) + : Battery() { this->dataPtr->initVoltage = _battery.dataPtr->initVoltage; this->dataPtr->realVoltage = _battery.dataPtr->realVoltage; @@ -86,6 +86,12 @@ Battery::Battery(const Battery &_battery) // Mutex neither copyable nor movable. } +///////////////////////////////////////////////// +Battery::Battery(Battery &&_battery) + : dataPtr(std::exchange(_battery.dataPtr, nullptr)) +{ +} + ///////////////////////////////////////////////// Battery &Battery::operator=(const Battery &_battery) { @@ -108,8 +114,10 @@ Battery &Battery::operator=(const Battery &_battery) } ///////////////////////////////////////////////// -Battery::~Battery() +Battery &Battery::operator=(Battery &&_battery) { + std::swap(this->dataPtr, _battery.dataPtr); + return *this; } ///////////////////////////////////////////////// diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 90e333f1e..b36e0af24 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,8 +9,13 @@ ign_create_core_library( CXX_STANDARD 17) # Link the libraries that we always need -target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} - PRIVATE ${DL_TARGET}) +target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} + PRIVATE + ${DL_TARGET} + PUBLIC + ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER} +) + # This is required by the WorkerPool::WaitForResults(const Time &_timeout) # TODO(anyone): IGN_DEPRECATED(4). Remove this part when the method is removed diff --git a/src/FilesystemBoost.cc b/src/FilesystemBoost.cc index c09698e10..12e5cabc5 100644 --- a/src/FilesystemBoost.cc +++ b/src/FilesystemBoost.cc @@ -64,7 +64,7 @@ namespace ignition { /// \internal /// \brief Private data for the DirIter class. - class DirIterPrivate + class DirIter::Implementation { /// \def current /// \brief The current directory item. @@ -151,7 +151,8 @@ namespace ignition } ////////////////////////////////////////////////// - DirIter::DirIter(const std::string &_in) : dataPtr(new DirIterPrivate) + DirIter::DirIter(const std::string &_in) + : dataPtr(ignition::utils::MakeImpl<Implementation>()) { this->dataPtr->dirname = _in; @@ -429,7 +430,8 @@ namespace ignition } ////////////////////////////////////////////////// - DirIter::DirIter(const std::string &_in) : dataPtr(new DirIterPrivate) + DirIter::DirIter(const std::string &_in) + : dataPtr(ignition::utils::MakeImpl<Implementation>()) { // use a form of search Sebastian Martel reports will work with Win98 this->dataPtr->dirname = _in; @@ -590,7 +592,7 @@ namespace ignition } ////////////////////////////////////////////////// - DirIter::DirIter() : dataPtr(new DirIterPrivate) + DirIter::DirIter() : dataPtr(ignition::utils::MakeImpl<Implementation>()) { this->dataPtr->current = ""; diff --git a/src/SystemPaths.cc b/src/SystemPaths.cc index d82963129..20ed8db4c 100644 --- a/src/SystemPaths.cc +++ b/src/SystemPaths.cc @@ -40,7 +40,7 @@ using namespace ignition; using namespace common; // Private data class -class ignition::common::SystemPathsPrivate +class ignition::common::SystemPaths::Implementation { /// \brief Name of the environment variable to check for plugin paths public: std::string pluginPathEnv = "IGN_PLUGIN_PATH"; @@ -85,7 +85,7 @@ void insertUnique(const std::string &_path, std::list<std::string> &_list) ////////////////////////////////////////////////// SystemPaths::SystemPaths() -: dataPtr(new SystemPathsPrivate) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { std::string home, path, fullPath; if (!env(IGN_HOMEDIR, home)) @@ -120,11 +120,6 @@ SystemPaths::SystemPaths() this->SetFilePathEnv(this->dataPtr->filePathEnv); } -///////////////////////////////////////////////// -SystemPaths::~SystemPaths() -{ -} - ///////////////////////////////////////////////// std::string SystemPaths::LogPath() const { @@ -240,7 +235,7 @@ std::string SystemPaths::NormalizeDirectoryPath(const std::string &_path) } ///////////////////////////////////////////////// -std::vector<std::string> SystemPathsPrivate::GenerateLibraryPaths( +std::vector<std::string> SystemPaths::Implementation::GenerateLibraryPaths( const std::string &_libName) const { std::string lowercaseLibName = lowercase(_libName); diff --git a/src/TempDirectory.cc b/src/TempDirectory.cc index aa1bb914a..bdc8a3840 100644 --- a/src/TempDirectory.cc +++ b/src/TempDirectory.cc @@ -155,7 +155,7 @@ std::string ignition::common::createTempDirectory( } -class ignition::common::TempDirectoryPrivate +class ignition::common::TempDirectory::Implementation { /// \brief Current working directory before creation of temporary dir. public: std::string oldPath {""}; @@ -175,7 +175,7 @@ class ignition::common::TempDirectoryPrivate TempDirectory::TempDirectory(const std::string &_prefix, const std::string &_subDir, bool _cleanup): - dataPtr(std::make_unique<TempDirectoryPrivate>()) + dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { this->dataPtr->oldPath = common::cwd(); diff --git a/src/URI.cc b/src/URI.cc index ff46ea82e..da73e0833 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -32,7 +32,7 @@ static const char kSchemeDelim[] = ":"; static const char kAuthDelim[] = "//"; /// \brief URIAuthority private data. -class ignition::common::URIAuthorityPrivate +class ignition::common::URIAuthority::Implementation { /// \brief The user information. public: std::string userInfo; @@ -52,7 +52,7 @@ class ignition::common::URIAuthorityPrivate }; /// \brief URIPath private data. -class ignition::common::URIPathPrivate +class ignition::common::URIPath::Implementation { /// \brief A helper method to determine if the given string represents /// an absolute path starting segment or not. @@ -73,21 +73,21 @@ class ignition::common::URIPathPrivate }; /// \brief URIQuery private data. -class ignition::common::URIQueryPrivate +class ignition::common::URIQuery::Implementation { /// \brief The key/value tuples that compose the query. public: std::vector<std::pair<std::string, std::string>> values; }; /// \brief URIFragment private data. -class ignition::common::URIFragmentPrivate +class ignition::common::URIFragment::Implementation { /// \brief The value of the fragment. public: std::string value; }; /// \brief URI private data. -class ignition::common::URIPrivate +class ignition::common::URI::Implementation { /// \brief The URI scheme. public: std::string scheme; @@ -107,17 +107,10 @@ class ignition::common::URIPrivate ////////////////////////////////////////////////// URIAuthority::URIAuthority() -: dataPtr(new URIAuthorityPrivate()) +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { } -////////////////////////////////////////////////// -URIAuthority::URIAuthority(const URIAuthority &_authority) - : URIAuthority() -{ - *this = _authority; -} - ////////////////////////////////////////////////// URIAuthority::URIAuthority(const std::string &_str) : URIAuthority() @@ -129,11 +122,6 @@ URIAuthority::URIAuthority(const std::string &_str) } } -////////////////////////////////////////////////// -URIAuthority::~URIAuthority() -{ -} - ////////////////////////////////////////////////// void URIAuthority::Clear() { @@ -151,7 +139,7 @@ std::string URIAuthority::UserInfo() const } ////////////////////////////////////////////////// -void URIAuthority::SetUserInfo(const std::string &_userInfo) const +void URIAuthority::SetUserInfo(const std::string &_userInfo) { this->dataPtr->userInfo = _userInfo; } @@ -163,7 +151,7 @@ std::string URIAuthority::Host() const } ////////////////////////////////////////////////// -void URIAuthority::SetHost(const std::string &_host) const +void URIAuthority::SetHost(const std::string &_host) { this->dataPtr->host = _host; } @@ -175,7 +163,7 @@ std::optional<int> URIAuthority::Port() const } ////////////////////////////////////////////////// -void URIAuthority::SetPort(int _port) const +void URIAuthority::SetPort(int _port) { this->dataPtr->port.emplace(_port); } @@ -207,18 +195,6 @@ std::string URIAuthority::Str() const return ""; } -////////////////////////////////////////////////// -URIAuthority &URIAuthority::operator=(const URIAuthority &_auth) -{ - this->dataPtr->userInfo = _auth.UserInfo(); - this->dataPtr->host = _auth.Host(); - this->dataPtr->port = _auth.Port(); - this->dataPtr->emptyHostValid = _auth.EmptyHostValid(); - this->dataPtr->hasEmptyHost = _auth.dataPtr->hasEmptyHost; - - return *this; -} - ////////////////////////////////////////////////// bool URIAuthority::Valid() const { @@ -319,7 +295,7 @@ bool URIAuthority::EmptyHostValid() const } ////////////////////////////////////////////////// -void URIAuthority::SetEmptyHostValid(bool _valid) const +void URIAuthority::SetEmptyHostValid(bool _valid) { this->dataPtr->emptyHostValid = _valid; } @@ -386,12 +362,7 @@ bool URIAuthority::Parse(const std::string &_str, bool _emptyHostValid) ///////////////////////////////////////////////// URIPath::URIPath() -: dataPtr(new URIPathPrivate()) -{ -} - -///////////////////////////////////////////////// -URIPath::~URIPath() +: dataPtr(ignition::utils::MakeImpl<Implementation>()) { } @@ -406,13 +377,6 @@ URIPath::URIPath(const std::string &_str) } } -///////////////////////////////////////////////// -URIPath::URIPath(const URIPath &_path) - : URIPath() -{ - *this = _path; -} - ///////////////////////////////////////////////// bool URIPath::IsAbsolute() const { @@ -582,14 +546,6 @@ std::string URIPath::Str(const std::string &_delim) const return result; } -///////////////////////////////////////////////// -URIPath &URIPath::operator=(const URIPath &_path) -{ - this->dataPtr->path = _path.dataPtr->path; - this->dataPtr->isAbsolute = _path.dataPtr->isAbsolute; - return *this; -} - ///////////////////////////////////////////////// void URIPath::Clear() { @@ -673,7 +629,7 @@ bool URIPath::Parse(const std::string &_str) ///////////////////////////////////////////////// URIQuery::URIQuery() - : dataPtr(new URIQueryPrivate()) + : dataPtr(ignition::utils::MakeImpl<Implementation>()) { } @@ -688,31 +644,12 @@ URIQuery::URIQuery(const std::string &_str) } } -///////////////////////////////////////////////// -URIQuery::URIQuery(const URIQuery &_query) - : URIQuery() -{ - *this = _query; -} - -///////////////////////////////////////////////// -URIQuery::~URIQuery() -{ -} - ///////////////////////////////////////////////// void URIQuery::Insert(const std::string &_key, const std::string &_value) { this->dataPtr->values.push_back(std::make_pair(_key, _value)); } -///////////////////////////////////////////////// -URIQuery &URIQuery::operator=(const URIQuery &_query) -{ - this->dataPtr->values = _query.dataPtr->values; - return *this; -} - ///////////////////////////////////////////////// std::string URIQuery::Str(const std::string &_delim) const { @@ -808,7 +745,7 @@ bool URIQuery::Parse(const std::string &_str) ///////////////////////////////////////////////// URIFragment::URIFragment() - : dataPtr(new URIFragmentPrivate()) + : dataPtr(ignition::utils::MakeImpl<Implementation>()) { } @@ -823,25 +760,6 @@ URIFragment::URIFragment(const std::string &_str) } } -///////////////////////////////////////////////// -URIFragment::URIFragment(const URIFragment &_fragment) - : URIFragment() -{ - *this = _fragment; -} - -///////////////////////////////////////////////// -URIFragment::~URIFragment() -{ -} - -///////////////////////////////////////////////// -URIFragment &URIFragment::operator=(const URIFragment &_fragment) -{ - this->dataPtr->value = _fragment.dataPtr->value; - return *this; -} - ///////////////////////////////////////////////// URIFragment &URIFragment::operator=(const std::string &_fragment) { @@ -925,7 +843,7 @@ bool URIFragment::Parse(const std::string &_str) ///////////////////////////////////////////////// URI::URI() - : dataPtr(new URIPrivate()) + : dataPtr(ignition::utils::MakeImpl<Implementation>()) { } @@ -946,18 +864,6 @@ URI::URI(const std::string &_str, bool _hasAuthority) this->Parse(_str); } -///////////////////////////////////////////////// -URI::URI(const URI &_uri) - : URI() -{ - *this = _uri; -} - -///////////////////////////////////////////////// -URI::~URI() -{ -} - ////////////////////////////////////////////////// std::string URI::Str() const { @@ -1064,17 +970,6 @@ bool URI::operator==(const URI &_uri) const this->dataPtr->fragment == _uri.dataPtr->fragment; } -///////////////////////////////////////////////// -URI &URI::operator=(const URI &_uri) -{ - this->dataPtr->scheme = _uri.dataPtr->scheme; - this->dataPtr->authority = _uri.dataPtr->authority; - this->dataPtr->path = _uri.dataPtr->path; - this->dataPtr->query = _uri.dataPtr->query; - this->dataPtr->fragment = _uri.dataPtr->fragment; - return *this; -} - ///////////////////////////////////////////////// bool URI::Valid() const { diff --git a/src/URI_TEST.cc b/src/URI_TEST.cc index b4c76ff1d..4b2301bc3 100644 --- a/src/URI_TEST.cc +++ b/src/URI_TEST.cc @@ -890,8 +890,8 @@ TEST(URITEST, HasAuthority) // Modifyng path updates string uri.Path() = URIPath("new_authority.com/another/path"); - EXPECT_EQ("new_authority.com/another/path/", uri.Path().Str()); - EXPECT_EQ("https://new_authority.com/another/path/", uri.Str()); + EXPECT_EQ("new_authority.com/another/path", uri.Path().Str()); + EXPECT_EQ("https://new_authority.com/another/path", uri.Str()); // Clearing keeps false authority uri.Clear(); diff --git a/src/WorkerPool.cc b/src/WorkerPool.cc index e4b1a1f9b..a5bd312ee 100644 --- a/src/WorkerPool.cc +++ b/src/WorkerPool.cc @@ -52,7 +52,7 @@ namespace ignition }; /// \brief Private implementation - class WorkerPoolPrivate + class WorkerPool::Implementation { /// \brief Does work until signaled to shut down public: void Worker(); @@ -82,7 +82,7 @@ namespace ignition } ////////////////////////////////////////////////// -void WorkerPoolPrivate::Worker() +void WorkerPool::Implementation::Worker() { WorkOrder order; @@ -125,7 +125,7 @@ void WorkerPoolPrivate::Worker() ////////////////////////////////////////////////// WorkerPool::WorkerPool(const unsigned int _minThreadCount) - : dataPtr(new WorkerPoolPrivate) + : dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { unsigned int numWorkers = std::max(std::thread::hardware_concurrency(), std::max(_minThreadCount, 1u)); @@ -134,7 +134,7 @@ WorkerPool::WorkerPool(const unsigned int _minThreadCount) for (unsigned int w = 0; w < numWorkers; ++w) { this->dataPtr->workers.push_back( - std::thread(&WorkerPoolPrivate::Worker, this->dataPtr.get())); + std::thread(&WorkerPool::Implementation::Worker, this->dataPtr.get())); } } From f75ad3dbf540a01aa64b2f8a0d473f9a52ca891e Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Mon, 6 Dec 2021 09:48:22 -0600 Subject: [PATCH 109/219] Fix bug in URIPath assignment operator (#275) Signed-off-by: Michael Carroll <michael@openrobotics.org> --- src/URI.cc | 1 + src/URI_TEST.cc | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/URI.cc b/src/URI.cc index ff46ea82e..81ab22c2c 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -587,6 +587,7 @@ URIPath &URIPath::operator=(const URIPath &_path) { this->dataPtr->path = _path.dataPtr->path; this->dataPtr->isAbsolute = _path.dataPtr->isAbsolute; + this->dataPtr->trailingSlash = _path.dataPtr->trailingSlash; return *this; } diff --git a/src/URI_TEST.cc b/src/URI_TEST.cc index b4c76ff1d..4b2301bc3 100644 --- a/src/URI_TEST.cc +++ b/src/URI_TEST.cc @@ -890,8 +890,8 @@ TEST(URITEST, HasAuthority) // Modifyng path updates string uri.Path() = URIPath("new_authority.com/another/path"); - EXPECT_EQ("new_authority.com/another/path/", uri.Path().Str()); - EXPECT_EQ("https://new_authority.com/another/path/", uri.Str()); + EXPECT_EQ("new_authority.com/another/path", uri.Path().Str()); + EXPECT_EQ("https://new_authority.com/another/path", uri.Str()); // Clearing keeps false authority uri.Clear(); From 6fde8a19da123b89abe42b16684e4fdba07c0bf6 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Mon, 6 Dec 2021 12:34:25 -0600 Subject: [PATCH 110/219] Add macOS 11 workflow (#276) Signed-off-by: Michael Carroll <michael@openrobotics.org> --- .github/workflows/macos.yml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/macos.yml diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml new file mode 100644 index 000000000..c0753dcd3 --- /dev/null +++ b/.github/workflows/macos.yml @@ -0,0 +1,35 @@ +name: macOS latest + +on: [push, pull_request] + +jobs: + build: + env: + PACKAGE: ignition-common5 + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Homebrew + id: set-up-homebrew + uses: Homebrew/actions/setup-homebrew@master + - run: brew config + + - name: Install base dependencies + run: | + brew tap osrf/simulation; + brew install --only-dependencies ${PACKAGE}; + - run: mkdir build + - name: cmake + working-directory: build + run: cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/Cellar/${PACKAGE}/HEAD + - run: make + working-directory: build + - run: make test + working-directory: build + env: + CTEST_OUTPUT_ON_FAILURE: 1 + - name: make install + working-directory: build + run: | + make install; + brew link ${PACKAGE}; From 98b070d7b80a12b2b76406521b8b8d44bd66f1c9 Mon Sep 17 00:00:00 2001 From: Vatan Aksoy Tezer <vatan@picknik.ai> Date: Tue, 7 Dec 2021 02:11:17 +0300 Subject: [PATCH 111/219] Support 16 bit heightmaps (#266) * Support for 8, 16 and 32 bit heightmaps Signed-off-by: Vatan Aksoy Tezer <vatan@picknik.ai> --- .../include/ignition/common/ImageHeightmap.hh | 76 +++++++++++++++++++ graphics/src/ImageHeightmap.cc | 75 ++++++++---------- 2 files changed, 107 insertions(+), 44 deletions(-) diff --git a/graphics/include/ignition/common/ImageHeightmap.hh b/graphics/include/ignition/common/ImageHeightmap.hh index dd6cc2828..43a1bccc8 100644 --- a/graphics/include/ignition/common/ImageHeightmap.hh +++ b/graphics/include/ignition/common/ImageHeightmap.hh @@ -17,6 +17,7 @@ #ifndef IGNITION_COMMON_IMAGEHEIGHTMAPDATA_HH_ #define IGNITION_COMMON_IMAGEHEIGHTMAPDATA_HH_ +#include <limits> #include <string> #include <vector> #include <ignition/math/Vector3.hh> @@ -63,6 +64,81 @@ namespace ignition /// \brief Image containing the heightmap data. private: ignition::common::Image img; + + /// \brief Get Heightmap heights given the image + /// \param[in] _data Image data + /// \param[in] _pitch Size of a row of image pixels in bytes + /// \param[in] _subSampling Subsampling factor + /// \param[in] _vertSize Number of points per row. + /// \param[in] _size Real dimmensions of the terrain. + /// \param[in] _scale Vector3 used to scale the height. + /// \param[in] _flipY If true, it inverts the order in which the vector + /// is filled. + /// \param[out] _heights Vector containing the terrain heights. + private: template <typename T> + void FillHeights(T *_data, int _imgHeight, int _imgWidth, + unsigned int _pitch, int _subSampling, unsigned int _vertSize, + const ignition::math::Vector3d &_size, + const ignition::math::Vector3d &_scale, + bool _flipY, std::vector<float> &_heights) + { + // bytes per pixel + const unsigned int bpp = _pitch / _imgWidth; + // number of channels in a pixel + const unsigned int channels = bpp / sizeof(T); + // number of pixels in a row of image + const unsigned int pitchInPixels = _pitch / bpp; + + const double maxPixelValue = + static_cast<double>(std::numeric_limits<T>::max()); + + // Iterate over all the vertices + for (unsigned int y = 0; y < _vertSize; ++y) + { + // yf ranges between 0 and 4 + const double yf = y / static_cast<double>(_subSampling); + const int y1 = static_cast<int>(std::floor(yf)); + int y2 = static_cast<int>(std::ceil(yf)); + if (y2 >= _imgHeight) + y2 = _imgHeight - 1; + const double dy = yf - y1; + + for (unsigned int x = 0; x < _vertSize; ++x) + { + const double xf = x / static_cast<double>(_subSampling); + const int x1 = static_cast<int>(std::floor(xf)); + int x2 = static_cast<int>(std::ceil(xf)); + if (x2 >= _imgWidth) + x2 = _imgWidth - 1; + const double dx = xf - x1; + + const double px1 = static_cast<int>( + _data[(y1 * pitchInPixels + x1) * channels]) / maxPixelValue; + const double px2 = static_cast<int>( + _data[(y1 * pitchInPixels + x2) * channels]) / maxPixelValue; + const float h1 = (px1 - ((px1 - px2) * dx)); + + const double px3 = static_cast<int>( + _data[(y2 * pitchInPixels + x1) * channels]) / maxPixelValue; + const double px4 = static_cast<int>( + _data[(y2 * pitchInPixels + x2) * channels]) / maxPixelValue; + const float h2 = (px3 - ((px3 - px4) * dx)); + float h = (h1 - ((h1 - h2) * dy)) * _scale.Z(); + + // invert pixel definition so 1=ground, 0=full height, + // if the terrain size has a negative z component + // this is mainly for backward compatibility + if (_size.Z() < 0) + h = 1.0 - h; + + // Store the height for future use + if (!_flipY) + _heights[y * _vertSize + x] = h; + else + _heights[(_vertSize - y - 1) * _vertSize + x] = h; + } + } + } }; } } diff --git a/graphics/src/ImageHeightmap.cc b/graphics/src/ImageHeightmap.cc index 818083f76..6c8630835 100644 --- a/graphics/src/ImageHeightmap.cc +++ b/graphics/src/ImageHeightmap.cc @@ -54,57 +54,44 @@ void ImageHeightmap::FillHeightMap(int _subSampling, // Bytes per row unsigned int pitch = this->img.Pitch(); - // Bytes per pixel - unsigned int bpp = pitch / imgWidth; + // Get the image format so we can arrange our heightmap + // Currently supported: 8-bit and 16-bit. + auto imgFormat = this->img.PixelFormat(); unsigned char *data = nullptr; unsigned int count; this->img.Data(&data, count); - // Iterate over all the vertices - for (unsigned int y = 0; y < _vertSize; ++y) + if (imgFormat == ignition::common::Image::PixelFormatType::L_INT8 || + imgFormat == ignition::common::Image::PixelFormatType::RGB_INT8 || + imgFormat == ignition::common::Image::PixelFormatType::RGBA_INT8 || + imgFormat == ignition::common::Image::PixelFormatType::BAYER_BGGR8 || + imgFormat == ignition::common::Image::PixelFormatType::BAYER_GBRG8 || + imgFormat == ignition::common::Image::PixelFormatType::BAYER_GRBG8 || + imgFormat == ignition::common::Image::PixelFormatType::BAYER_GRBG8 || + imgFormat == ignition::common::Image::PixelFormatType::BAYER_RGGB8 || + imgFormat == ignition::common::Image::PixelFormatType::BGR_INT8 || + imgFormat == ignition::common::Image::PixelFormatType::BGRA_INT8) { - // yf ranges between 0 and 4 - double yf = y / static_cast<double>(_subSampling); - int y1 = static_cast<int>(std::floor(yf)); - int y2 = static_cast<int>(std::ceil(yf)); - if (y2 >= imgHeight) - y2 = imgHeight-1; - double dy = yf - y1; - - for (unsigned int x = 0; x < _vertSize; ++x) - { - double xf = x / static_cast<double>(_subSampling); - int x1 = static_cast<int>(std::floor(xf)); - int x2 = static_cast<int>(std::ceil(xf)); - if (x2 >= imgWidth) - x2 = imgWidth-1; - double dx = xf - x1; - - double px1 = static_cast<int>(data[y1 * pitch + x1 * bpp]) / 255.0; - double px2 = static_cast<int>(data[y1 * pitch + x2 * bpp]) / 255.0; - float h1 = (px1 - ((px1 - px2) * dx)); - - double px3 = static_cast<int>(data[y2 * pitch + x1 * bpp]) / 255.0; - double px4 = static_cast<int>(data[y2 * pitch + x2 * bpp]) / 255.0; - float h2 = (px3 - ((px3 - px4) * dx)); - - float h = (h1 - ((h1 - h2) * dy)) * _scale.Z(); - - // invert pixel definition so 1=ground, 0=full height, - // if the terrain size has a negative z component - // this is mainly for backward compatibility - if (_size.Z() < 0) - h = 1.0 - h; - - // Store the height for future use - if (!_flipY) - _heights[y * _vertSize + x] = h; - else - _heights[(_vertSize - y - 1) * _vertSize + x] = h; - } + this->FillHeights<unsigned char>(data, imgHeight, imgWidth, pitch, + _subSampling, _vertSize, _size, _scale, _flipY, _heights); + } + else if (imgFormat == ignition::common::Image::PixelFormatType::BGR_INT16 || + imgFormat == ignition::common::Image::PixelFormatType::L_INT16 || + imgFormat == ignition::common::Image::PixelFormatType::RGB_FLOAT16 || + imgFormat == ignition::common::Image::PixelFormatType::RGB_INT16 || + imgFormat == ignition::common::Image::PixelFormatType::R_FLOAT16) + { + uint16_t *dataShort = reinterpret_cast<uint16_t *>(data); + this->FillHeights<uint16_t>(dataShort, imgHeight, imgWidth, pitch, + _subSampling, _vertSize, _size, _scale, _flipY, _heights); + } + else + { + ignerr << "Unsupported image format, " + "heightmap will not be loaded" << std::endl; + return; } - delete [] data; } From 0012ca53804ef718c997ce67461875fe5f29ece5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez=20Cordero?= <ahcorde@gmail.com> Date: Thu, 16 Dec 2021 16:49:37 +0100 Subject: [PATCH 112/219] Fixed crash when a Collada file has an empty normal vector (#280) If a collada file has defined normals but these are empty, then Ignition will crash. This should fix this crash Signed-off-by: ahcorde <ahcorde@gmail.com> --- graphics/src/ColladaLoader.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/graphics/src/ColladaLoader.cc b/graphics/src/ColladaLoader.cc index f1c01a74b..7c4edb01a 100644 --- a/graphics/src/ColladaLoader.cc +++ b/graphics/src/ColladaLoader.cc @@ -2248,8 +2248,11 @@ void ColladaLoader::Implementation::LoadPolylist( inputRemappedNormalIndex = normalDupMap[inputRemappedNormalIndex]; } - subMesh->AddNormal(norms[inputRemappedNormalIndex]); - input.normalIndex = inputRemappedNormalIndex; + if (norms.size() > inputRemappedNormalIndex) + { + subMesh->AddNormal(norms[inputRemappedNormalIndex]); + input.normalIndex = inputRemappedNormalIndex; + } } if (!inputs[TEXCOORD].empty()) @@ -2370,7 +2373,8 @@ void ColladaLoader::Implementation::LoadTriangles( this->LoadNormals(source, _transform, norms, normalDupMap); combinedVertNorms = false; inputs[NORMAL].insert(ignition::math::parseInt(offset)); - hasNormals = true; + if (norms.size() > 0) + hasNormals = true; } else if (semantic == "TEXCOORD") { From 757462d0fc1dcfa8ce8262305479f7c3fcdd0bda Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Mon, 27 Dec 2021 23:20:18 -0800 Subject: [PATCH 113/219] Bumps in garden: use ignition-math7 (#285) Signed-off-by: Louise Poubel <louise@openrobotics.org> * Fix deprecations when using ign-math7 Signed-off-by: Michael Carroll <michael@openrobotics.org> Signed-off-by: Louise Poubel <louise@openrobotics.org> Co-authored-by: Michael Carroll <michael@openrobotics.org> --- .github/ci/packages.apt | 2 +- BUILD.bazel | 6 +++--- CMakeLists.txt | 4 ++-- av/BUILD.bazel | 4 ++-- configure.bat | 2 +- events/BUILD.bazel | 4 ++-- graphics/BUILD.bazel | 4 ++-- graphics/include/ignition/common/Image.hh | 1 + graphics/src/ColladaExporter.cc | 4 ++-- graphics/src/ColladaLoader.cc | 4 ++-- graphics/src/MeshManager.cc | 2 +- graphics/src/NodeTransform.cc | 11 +++++++---- graphics/src/SVGLoader.cc | 6 +++--- profiler/BUILD.bazel | 4 ++-- src/WorkerPool.cc | 1 - 15 files changed, 31 insertions(+), 28 deletions(-) diff --git a/.github/ci/packages.apt b/.github/ci/packages.apt index 764e85842..9bfe4b327 100644 --- a/.github/ci/packages.apt +++ b/.github/ci/packages.apt @@ -5,7 +5,7 @@ libavutil-dev libfreeimage-dev libgts-dev libignition-cmake2-dev -libignition-math6-dev +libignition-math7-dev libignition-utils1-dev libswscale-dev libtinyxml2-dev diff --git a/BUILD.bazel b/BUILD.bazel index ef66a9866..742ac0441 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -84,9 +84,9 @@ cc_library( ) cc_binary( - name = "libignition-common4.so", + name = "libignition-common5.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common4.so"], + linkopts = ["-Wl,-soname,libignition-common5.so"], linkshared = True, deps = [":ign_common"], ) @@ -99,7 +99,7 @@ test_srcs = glob( [cc_test( name = src.replace("/", "_").replace(".cc", "").replace("src_", ""), srcs = [src], - data = [":libignition-common4.so"], + data = [":libignition-common5.so"], deps = [ ":ign_common", IGNITION_ROOT + "ign_bazel:utilities", diff --git a/CMakeLists.txt b/CMakeLists.txt index 57cef06ff..da71892bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,8 +48,8 @@ message(STATUS "\n\n-- ====== Finding Dependencies ======") #-------------------------------------- # Find ignition-math -ign_find_package(ignition-math6 REQUIRED_BY graphics events VERSION 6.6) -set(IGN_MATH_VER ${ignition-math6_VERSION_MAJOR}) +ign_find_package(ignition-math7 REQUIRED_BY graphics events) +set(IGN_MATH_VER ${ignition-math7_VERSION_MAJOR}) #-------------------------------------- # Find ignition-utils diff --git a/av/BUILD.bazel b/av/BUILD.bazel index 44d33d091..b17154f2b 100644 --- a/av/BUILD.bazel +++ b/av/BUILD.bazel @@ -65,9 +65,9 @@ cc_library( ) cc_binary( - name = "libignition-common4-av.so", + name = "libignition-common5-av.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common4-av.so"], + linkopts = ["-Wl,-soname,libignition-common5-av.so"], linkshared = True, deps = [":av"], ) diff --git a/configure.bat b/configure.bat index 8d2006b69..f4da07fa2 100644 --- a/configure.bat +++ b/configure.bat @@ -5,7 +5,7 @@ :: Install dependencies call %win_lib% :download_unzip_install dlfcn-win32-vc15-x64-dll-MD.zip -call %win_lib% :install_ign_project ign-math ign-math6 +call %win_lib% :install_ign_project ign-math main :: Set configuration variables @set build_type=Release diff --git a/events/BUILD.bazel b/events/BUILD.bazel index aa5c4c45b..eeb014c8c 100644 --- a/events/BUILD.bazel +++ b/events/BUILD.bazel @@ -57,9 +57,9 @@ cc_library( ) cc_binary( - name = "libignition-common4-events.so", + name = "libignition-common5-events.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common4-events.so"], + linkopts = ["-Wl,-soname,libignition-common5-events.so"], linkshared = True, deps = [":events"], ) diff --git a/graphics/BUILD.bazel b/graphics/BUILD.bazel index 8ad33792f..c8d39fafc 100644 --- a/graphics/BUILD.bazel +++ b/graphics/BUILD.bazel @@ -63,9 +63,9 @@ cc_library( ) cc_binary( - name = "libignition-common4-graphics.so", + name = "libignition-common5-graphics.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common4-graphics.so"], + linkopts = ["-Wl,-soname,libignition-common5-graphics.so"], linkshared = True, deps = [":graphics"], ) diff --git a/graphics/include/ignition/common/Image.hh b/graphics/include/ignition/common/Image.hh index f1fb00d21..d17700311 100644 --- a/graphics/include/ignition/common/Image.hh +++ b/graphics/include/ignition/common/Image.hh @@ -17,6 +17,7 @@ #ifndef IGNITION_COMMON_IMAGE_HH_ #define IGNITION_COMMON_IMAGE_HH_ +#include <cstring> #include <limits> #include <memory> #include <string> diff --git a/graphics/src/ColladaExporter.cc b/graphics/src/ColladaExporter.cc index 153540162..731cc010c 100644 --- a/graphics/src/ColladaExporter.cc +++ b/graphics/src/ColladaExporter.cc @@ -963,11 +963,11 @@ void ColladaExporter::Implementation::ExportVisualScenes( auto lightdir_norm = light.direction.Normalized(); math::Vector3d initial_dir(0, 0, -1); math::Quaterniond q; - q.From2Axes(initial_dir, lightdir_norm); + q.SetFrom2Axes(initial_dir, lightdir_norm); math::Vector3d axis; double angle = 0.0; - q.ToAxis(axis, angle); + q.AxisAngle(axis, angle); tinyxml2::XMLElement *rotateXml = _libraryVisualScenesXml->GetDocument()->NewElement("rotate"); diff --git a/graphics/src/ColladaLoader.cc b/graphics/src/ColladaLoader.cc index 7c4edb01a..5018f0c3e 100644 --- a/graphics/src/ColladaLoader.cc +++ b/graphics/src/ColladaLoader.cc @@ -648,7 +648,7 @@ ignition::math::Matrix4d ColladaLoader::Implementation::LoadNodeTransform( iss >> axis.X() >> axis.Y() >> axis.Z(); iss >> angle; - mat.Axis(axis, IGN_DTOR(angle)); + mat.SetFromAxisAngle(axis, IGN_DTOR(angle)); ignition::math::Matrix4d mat4(ignition::math::Matrix4d::Identity); mat4 = mat; @@ -1271,7 +1271,7 @@ void ColladaLoader::Implementation::SetSkeletonNodeTransform( iss >> axis.X() >> axis.Y() >> axis.Z(); iss >> angle; - mat.Axis(axis, IGN_DTOR(angle)); + mat.SetFromAxisAngle(axis, IGN_DTOR(angle)); ignition::math::Matrix4d mat4(ignition::math::Matrix4d::Identity); mat4 = mat; diff --git a/graphics/src/MeshManager.cc b/graphics/src/MeshManager.cc index 037ad5afc..bee5b581d 100644 --- a/graphics/src/MeshManager.cc +++ b/graphics/src/MeshManager.cc @@ -379,7 +379,7 @@ void MeshManager::CreatePlane(const std::string &_name, xlate = rot = ignition::math::Matrix4d::Identity; ignition::math::Matrix3d rot3; - rot3.Axes(xAxis, yAxis, zAxis); + rot3.SetAxes(xAxis, yAxis, zAxis); rot = rot3; diff --git a/graphics/src/NodeTransform.cc b/graphics/src/NodeTransform.cc index ff787c6c9..79446f8af 100644 --- a/graphics/src/NodeTransform.cc +++ b/graphics/src/NodeTransform.cc @@ -14,8 +14,11 @@ * limitations under the License. * */ + #include <ignition/common/NodeTransform.hh> +#include <iostream> + using namespace ignition; using namespace common; @@ -161,10 +164,10 @@ void NodeTransform::RecalculateMatrix() if (this->dataPtr->type == ROTATE) { math::Matrix3d mat; - mat.Axis(math::Vector3d(this->dataPtr->source[0], - this->dataPtr->source[1], - this->dataPtr->source[2]), - IGN_DTOR(this->dataPtr->source[3])); + mat.SetFromAxisAngle(math::Vector3d(this->dataPtr->source[0], + this->dataPtr->source[1], + this->dataPtr->source[2]), + IGN_DTOR(this->dataPtr->source[3])); this->dataPtr->transform = mat; } else diff --git a/graphics/src/SVGLoader.cc b/graphics/src/SVGLoader.cc index 8a40488cd..88328f765 100644 --- a/graphics/src/SVGLoader.cc +++ b/graphics/src/SVGLoader.cc @@ -149,7 +149,7 @@ ignition::math::Matrix3d ParseTransformMatrixStr( } double deg = stod(numbers[0]); ignition::math::Angle angle; - angle.Degree(deg); + angle.SetDegree(deg); // get the tangent of the angle double t = tan(angle.Radian()); ignition::math::Matrix3d m(1, t, 0, 0, 1, 0, 0, 0, 1); @@ -166,7 +166,7 @@ ignition::math::Matrix3d ParseTransformMatrixStr( } double deg = stod(numbers[0]); ignition::math::Angle angle; - angle.Degree(deg); + angle.SetDegree(deg); // get the tangent of the angle double t = tan(angle.Radian()); ignition::math::Matrix3d m(1, 0, 0, t, 1, 0, 0, 0, 1); @@ -223,7 +223,7 @@ ignition::math::Matrix3d ParseTransformMatrixStr( } double deg = stod(numbers[0]); ignition::math::Angle angle; - angle.Degree(deg); + angle.SetDegree(deg); double a = angle.Radian(); double sina = sin(a); double cosa = cos(a); diff --git a/profiler/BUILD.bazel b/profiler/BUILD.bazel index 8de578174..6fc5ce419 100644 --- a/profiler/BUILD.bazel +++ b/profiler/BUILD.bazel @@ -100,9 +100,9 @@ cc_library( ) cc_binary( - name = "libignition-common4-profiler.so", + name = "libignition-common5-profiler.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common4-profiler.so"], + linkopts = ["-Wl,-soname,libignition-common5-profiler.so"], linkshared = True, deps = [":profiler"], ) diff --git a/src/WorkerPool.cc b/src/WorkerPool.cc index a5bd312ee..ef096cd86 100644 --- a/src/WorkerPool.cc +++ b/src/WorkerPool.cc @@ -22,7 +22,6 @@ #include <utility> #include "ignition/common/WorkerPool.hh" -#include "ignition/math/Helpers.hh" namespace igncmn = ignition::common; using namespace igncmn; From 06226f62f043709210993d6d3f34cb2fa7be67a9 Mon Sep 17 00:00:00 2001 From: Steve Peters <scpeters@openrobotics.org> Date: Thu, 30 Dec 2021 10:10:23 -0800 Subject: [PATCH 114/219] Try to checkout matching branch in macos workflow (#286) Part of ignition-tooling/release-tools#564 Signed-off-by: Steve Peters <scpeters@openrobotics.org> --- .github/workflows/macos.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index c0753dcd3..0c1874153 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -17,6 +17,21 @@ jobs: - name: Install base dependencies run: | brew tap osrf/simulation; + # check for ci_matching_branch + brew install wget + wget https://github.com/ignition-tooling/release-tools/raw/master/jenkins-scripts/tools/detect_ci_matching_branch.py + TRY_BRANCH="${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" + if python3 detect_ci_matching_branch.py ${TRY_BRANCH} + then + echo "# BEGIN SECTION: trying to checkout branch ${TRY_BRANCH} from osrf/simulation" + pushd $(brew --repo osrf/simulation) + git fetch origin ${TRY_BRANCH} || true + git checkout ${TRY_BRANCH} || true + popd + echo '# END SECTION' + fi + # ignition-math7 has problems with swig, remove it for now + brew remove swig || true brew install --only-dependencies ${PACKAGE}; - run: mkdir build - name: cmake From be3aa32aa303eabaf08adb1209cfbcf266c55de5 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Wed, 5 Jan 2022 07:58:43 -0800 Subject: [PATCH 115/219] Upload coverage for Focal builds (#284) * Upload coverage for Focal builds Signed-off-by: Louise Poubel <louise@openrobotics.org> * Testing https://github.com/ignition-tooling/action-ignition-ci/pull/49 Signed-off-by: Louise Poubel <louise@openrobotics.org> * Back to focal branch Signed-off-by: Louise Poubel <louise@openrobotics.org> --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 53663ff6e..da0b5b6f2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,3 +12,5 @@ jobs: - name: Compile and test id: ci uses: ignition-tooling/action-ignition-ci@focal + with: + codecov-enabled: true From ddeab2a297075a49946a0a951ba5f55268d11cbc Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Wed, 12 Jan 2022 14:11:17 -0800 Subject: [PATCH 116/219] =?UTF-8?q?=F0=9F=8E=88=204.5.0=20(#288)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Louise Poubel <louise@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 62 ++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 48 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index be87aca8e..04688701a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(ignition-common4 VERSION 4.4.0) +project(ignition-common4 VERSION 4.5.0) #============================================================================ # Find ignition-cmake diff --git a/Changelog.md b/Changelog.md index 659fa7d5e..6af3b6fe2 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,8 +1,40 @@ ## Ignition Common 4.x +## Ignition Common 4.5.0 (2022-01-12) + +1. Fixed crash when a Collada file has an empty normal vector + * [Pull request #280](https://github.com/ignitionrobotics/ign-common/pull/280) + +1. Support 16 bit heightmaps + * [Pull request #266](https://github.com/ignitionrobotics/ign-common/pull/266) + +1. Fix bug in URIPath assignment operator + * [Pull request #275](https://github.com/ignitionrobotics/ign-common/pull/275) + +1. Use `libexec` to install binary `remotery_vis` + * [Pull request #272](https://github.com/ignitionrobotics/ign-common/pull/272) + +1. Normalize normal vectors from OBJ. + * [Pull request #269](https://github.com/ignitionrobotics/ign-common/pull/269) + +1. Synchronize console writes + * [Pull request #227](https://github.com/ignitionrobotics/ign-common/pull/227) + +1. Added method to remove meshes from the `MeshManager` + * [Pull request #222](https://github.com/ignitionrobotics/ign-common/pull/222) + +1. Fixed macOS symbol in `common::Profiler` + * [Pull request #262](https://github.com/ignitionrobotics/ign-common/pull/262) + +1. Fix skip logic for integration tests + * [Pull request #264](https://github.com/ignitionrobotics/ign-common/pull/264) + +1. Use direct evaluation for SKIP_av. + * [Pull request #250](https://github.com/ignitionrobotics/ign-common/pull/250) + ## Ignition Common 4.4.0 (2021-10-15) -1. Add support for animation tension +1. Add support for animation tension * [Pull request #256](https://github.com/ignitionrobotics/ign-common/pull/256) ## Ignition Common 4.3.0 (2021-09-27) @@ -26,7 +58,7 @@ * [Pull request #62](https://github.com/ignitionrobotics/ign-common/pull/62) * [Pull request #55](https://github.com/ignitionrobotics/ign-common/pull/55) * [Pull request #241](https://github.com/ignitionrobotics/ign-common/pull/241) - + 1. Documentation * [Pull request #252](https://github.com/ignitionrobotics/ign-common/pull/252) * [Pull request #253](https://github.com/ignitionrobotics/ign-common/pull/253) @@ -145,26 +177,26 @@ 1. Support loading PBR textures in OBJLoader * [Pull request #216](https://github.com/ignitionrobotics/ign-common/pull/216) - -1. Remove CMAKE_CXX_FLAGS from test targetrs + +1. Remove CMAKE_CXX_FLAGS from test targetrs * [Pull request #214](https://github.com/ignitionrobotics/ign-common/pull/214) - + 1. Set project-wide standard to C++17 * [Pull request #221](https://github.com/ignitionrobotics/ign-common/pull/221) - -1. Fix av_* API usage for deprecations + +1. Fix av_* API usage for deprecations * [Pull request #220](https://github.com/ignitionrobotics/ign-common/pull/220) - -1. Make KeyEvent rule-of-five compliant + +1. Make KeyEvent rule-of-five compliant * [Pull request #224](https://github.com/ignitionrobotics/ign-common/pull/224) - -1. Fix segfault caused by destructionb order of Event and Connection + +1. Fix segfault caused by destructionb order of Event and Connection * [Pull request #234](https://github.com/ignitionrobotics/ign-common/pull/234) - -1. Fix a typo in VideoEncoder_TEST + +1. Fix a typo in VideoEncoder_TEST * [Pull request #231](https://github.com/ignitionrobotics/ign-common/pull/231) - -1. Use direct evaluation for SKIP_av + +1. Use direct evaluation for SKIP_av * [Pull request #250](https://github.com/ignitionrobotics/ign-common/pull/250) ## Ignition Common 3.13.2 (2021-05-11) From 28eb6c7fb564f612a7c7d9a60b11fb9ad8da52b8 Mon Sep 17 00:00:00 2001 From: Jenn Nguyen <jenn@openrobotics.org> Date: Tue, 18 Jan 2022 16:33:20 -0800 Subject: [PATCH 117/219] Geospatial component for heightmap & DEMs (#267) Signed-off-by: Jenn Nguyen <jenn@openrobotics.org> Co-authored-by: Steve Peters <scpeters@openrobotics.org> Co-authored-by: Ian Chen <ichen@osrfoundation.org> --- .github/ci/packages.apt | 1 + CMakeLists.txt | 11 +- Migration.md | 15 +- .../include/ignition/common/CMakeLists.txt | 2 + .../include/ignition/common/Dem.hh | 22 +-- .../include/ignition/common/HeightmapData.hh | 12 ++ .../include/ignition/common/ImageHeightmap.hh | 3 +- geospatial/src/CMakeLists.txt | 22 +++ {graphics => geospatial}/src/Dem.cc | 146 ++++++++++++------ {graphics => geospatial}/src/Dem_TEST.cc | 110 ++++++++----- .../src/ImageHeightmap.cc | 0 .../src/ImageHeightmap_TEST.cc | 5 +- test/data/dem_landscape.tif | Bin 0 -> 100487 bytes test/data/dem_nodata.dem | Bin 0 -> 9441 bytes test/data/dem_portrait.tif | Bin 0 -> 100487 bytes test/data/dem_squared.tif | Bin 0 -> 67701 bytes test/data/dem_unfinished.tif | Bin 0 -> 5144 bytes 17 files changed, 248 insertions(+), 101 deletions(-) create mode 100644 geospatial/include/ignition/common/CMakeLists.txt rename {graphics => geospatial}/include/ignition/common/Dem.hh (90%) rename {graphics => geospatial}/include/ignition/common/HeightmapData.hh (84%) rename {graphics => geospatial}/include/ignition/common/ImageHeightmap.hh (98%) create mode 100644 geospatial/src/CMakeLists.txt rename {graphics => geospatial}/src/Dem.cc (69%) rename {graphics => geospatial}/src/Dem_TEST.cc (51%) rename {graphics => geospatial}/src/ImageHeightmap.cc (100%) rename {graphics => geospatial}/src/ImageHeightmap_TEST.cc (97%) create mode 100644 test/data/dem_landscape.tif create mode 100644 test/data/dem_nodata.dem create mode 100644 test/data/dem_portrait.tif create mode 100644 test/data/dem_squared.tif create mode 100644 test/data/dem_unfinished.tif diff --git a/.github/ci/packages.apt b/.github/ci/packages.apt index 9bfe4b327..f9908b5f4 100644 --- a/.github/ci/packages.apt +++ b/.github/ci/packages.apt @@ -3,6 +3,7 @@ libavdevice-dev libavformat-dev libavutil-dev libfreeimage-dev +libgdal-dev libgts-dev libignition-cmake2-dev libignition-math7-dev diff --git a/CMakeLists.txt b/CMakeLists.txt index da71892bb..a9d507c8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,7 +48,7 @@ message(STATUS "\n\n-- ====== Finding Dependencies ======") #-------------------------------------- # Find ignition-math -ign_find_package(ignition-math7 REQUIRED_BY graphics events) +ign_find_package(ignition-math7 REQUIRED_BY geospatial graphics events) set(IGN_MATH_VER ${ignition-math7_VERSION_MAJOR}) #-------------------------------------- @@ -94,6 +94,13 @@ ign_find_package( REQUIRED_BY graphics PRIVATE_FOR graphics) +#------------------------------------ +# Find GDAL +ign_find_package(GDAL VERSION 3.0 + PKGCONFIG gdal + PRIVATE_FOR geospatial + REQUIRED_BY geospatial) + #------------------------------------ # Find libswscale ign_find_package(SWSCALE REQUIRED_BY av PRETTY libswscale) @@ -125,7 +132,7 @@ configure_file("${PROJECT_SOURCE_DIR}/cppcheck.suppress.in" ${PROJECT_BINARY_DIR}/cppcheck.suppress) ign_configure_build(QUIT_IF_BUILD_ERRORS - COMPONENTS av events graphics profiler) + COMPONENTS av events geospatial graphics profiler) #============================================================================ # Create package information diff --git a/Migration.md b/Migration.md index 69f1bb4bb..7b9385355 100644 --- a/Migration.md +++ b/Migration.md @@ -5,6 +5,20 @@ Deprecated code produces compile-time warnings. These warning serve as notification to users that their code should be upgraded. The next major release will remove the deprecated code. +## Ignition Common 4.X to 5.X + +### Additions + +1. **geospatial** component that loads heightmap images and DEMs + + Depends on the ign-common's `graphics` component and the `gdal` library + +### Modifications + +1. `HeightmapData.hh` and `ImageHeightmap.hh` have been moved out of the +`graphics` component and into the new `geospatial` component + + To use the heightmap features, users must add the `geospatial` component + to the `find_package` call + ## Ignition Common 3.X to 4.X ### Modifications @@ -72,4 +86,3 @@ release will remove the deprecated code. 1. **ignition-cmake** + Ignition-math now has a build dependency on ignition-cmake, which allows cmake scripts to be shared across all the ignition packages. - diff --git a/geospatial/include/ignition/common/CMakeLists.txt b/geospatial/include/ignition/common/CMakeLists.txt new file mode 100644 index 000000000..7155438eb --- /dev/null +++ b/geospatial/include/ignition/common/CMakeLists.txt @@ -0,0 +1,2 @@ + +ign_install_all_headers(COMPONENT geospatial) diff --git a/graphics/include/ignition/common/Dem.hh b/geospatial/include/ignition/common/Dem.hh similarity index 90% rename from graphics/include/ignition/common/Dem.hh rename to geospatial/include/ignition/common/Dem.hh index ff83c0dd8..2d251b7ec 100644 --- a/graphics/include/ignition/common/Dem.hh +++ b/geospatial/include/ignition/common/Dem.hh @@ -18,18 +18,17 @@ #define IGNITION_COMMON_DEM_HH_ #include <memory> +#include <string> +#include <vector> + #include <ignition/math/Vector3.hh> #include <ignition/math/Angle.hh> +#include <ignition/common/HeightmapData.hh> #include <ignition/common/graphics/Export.hh> #include <ignition/utils/ImplPtr.hh> -#ifdef HAVE_GDAL -# include <string> -# include <vector> - -# include <ignition/common/HeightmapData.hh> namespace ignition { @@ -53,7 +52,8 @@ namespace ignition /// \brief Get the elevation of a terrain's point in meters. /// \param[in] _x X coordinate of the terrain. /// \param[in] _y Y coordinate of the terrain. - /// \return Terrain's elevation at (x,y) in meters. + /// \return Terrain's elevation at (x,y) in meters or infinity if illegal + /// coordinates were provided. public: double Elevation(double _x, double _y); /// \brief Get the terrain's minimum elevation in meters. @@ -68,7 +68,8 @@ namespace ignition /// origin in WGS84. /// \param[out] _latitude Georeferenced latitude. /// \param[out] _longitude Georeferenced longitude. - public: void GeoReferenceOrigin(ignition::math::Angle &_latitude, + /// \return True if able to retrieve origin coordinates. False otherwise. + public: bool GeoReferenceOrigin(ignition::math::Angle &_latitude, ignition::math::Angle &_longitude) const; /// \brief Get the terrain's height. Due to the Ogre constrains, this @@ -120,7 +121,8 @@ namespace ignition /// \param[in] _y Y coordinate of the terrain. /// \param[out] _latitude Georeferenced latitude. /// \param[out] _longitude Georeferenced longitude. - private: void GeoReference(double _x, double _y, + /// \return True if able to retrieve coordinates. False otherwise. + private: bool GeoReference(double _x, double _y, ignition::math::Angle &_latitude, ignition::math::Angle &_longitude) const; @@ -130,6 +132,9 @@ namespace ignition /// \return 0 when the operation succeeds to open a file. private: int LoadData(); + // Documentation inherited. + public: std::string Filename() const; + /// internal /// \brief Pointer to the private data. IGN_UTILS_IMPL_PTR(dataPtr) @@ -137,4 +142,3 @@ namespace ignition } } #endif -#endif diff --git a/graphics/include/ignition/common/HeightmapData.hh b/geospatial/include/ignition/common/HeightmapData.hh similarity index 84% rename from graphics/include/ignition/common/HeightmapData.hh rename to geospatial/include/ignition/common/HeightmapData.hh index 22eeb4945..a67b1135a 100644 --- a/graphics/include/ignition/common/HeightmapData.hh +++ b/geospatial/include/ignition/common/HeightmapData.hh @@ -17,6 +17,7 @@ #ifndef IGNITION_COMMON_HEIGHTMAPDATA_HH_ #define IGNITION_COMMON_HEIGHTMAPDATA_HH_ +#include <string> #include <vector> #include <ignition/math/Vector3.hh> #include <ignition/common/graphics/Export.hh> @@ -57,6 +58,17 @@ namespace ignition /// \brief Get the maximum terrain's elevation. /// \return The maximum terrain's elevation. public: virtual float MaxElevation() const = 0; + + /// \brief Get the min terrain's elevation. + /// \return The min terrain's elevation. + public: virtual float MinElevation() const + { + return 0.0f; + } + + /// \brief Get the full filename of loaded heightmap image/dem + /// \return The filename used to load the heightmap image/dem + public: virtual std::string Filename() const = 0; }; } } diff --git a/graphics/include/ignition/common/ImageHeightmap.hh b/geospatial/include/ignition/common/ImageHeightmap.hh similarity index 98% rename from graphics/include/ignition/common/ImageHeightmap.hh rename to geospatial/include/ignition/common/ImageHeightmap.hh index 43a1bccc8..5ee7431e8 100644 --- a/graphics/include/ignition/common/ImageHeightmap.hh +++ b/geospatial/include/ignition/common/ImageHeightmap.hh @@ -49,8 +49,7 @@ namespace ignition const ignition::math::Vector3d &_scale, bool _flipY, std::vector<float> &_heights); - /// \brief Get the full filename of the image - /// \return The filename used to load the image + // Documentation inherited. public: std::string Filename() const; // Documentation inherited. diff --git a/geospatial/src/CMakeLists.txt b/geospatial/src/CMakeLists.txt new file mode 100644 index 000000000..6975e86fc --- /dev/null +++ b/geospatial/src/CMakeLists.txt @@ -0,0 +1,22 @@ + +ign_get_libsources_and_unittests(sources gtest_sources) + +ign_add_component(geospatial + SOURCES ${sources} + DEPENDS_ON_COMPONENTS graphics + GET_TARGET_NAME geospatial_target) + +target_link_libraries(${geospatial_target} + PUBLIC + ${PROJECT_LIBRARY_TARGET_NAME}-graphics + ignition-math${IGN_MATH_VER}::ignition-math${IGN_MATH_VER} + ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER} + PRIVATE + ${GDAL_LIBRARY}) + +target_include_directories(${geospatial_target} + PRIVATE + ${GDAL_INCLUDE_DIR}) + +ign_build_tests(TYPE UNIT SOURCES ${gtest_sources} + LIB_DEPS ${geospatial_target}) diff --git a/graphics/src/Dem.cc b/geospatial/src/Dem.cc similarity index 69% rename from graphics/src/Dem.cc rename to geospatial/src/Dem.cc index ad52f023c..eb9318555 100644 --- a/graphics/src/Dem.cc +++ b/geospatial/src/Dem.cc @@ -15,13 +15,10 @@ * */ #include <algorithm> +#include <limits> -#ifdef HAVE_GDAL -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wfloat-equal" -# include <ogr_spatialref.h> -# pragma GCC diagnostic pop -#endif +#include <gdal_priv.h> +#include <ogr_spatialref.h> #include "ignition/common/Console.hh" #include "ignition/common/Dem.hh" @@ -30,8 +27,6 @@ using namespace ignition; using namespace common; -#ifdef HAVE_GDAL - class ignition::common::Dem::Implementation { /// \brief A set of associated raster bands. @@ -57,6 +52,9 @@ class ignition::common::Dem::Implementation /// \brief DEM data converted to be OGRE-compatible. public: std::vector<float> demData; + + /// \brief Full filename used to load the dem. + public: std::string filename; }; ////////////////////////////////////////////////// @@ -89,12 +87,13 @@ int Dem::Load(const std::string &_filename) // Sanity check std::string fullName = _filename; if (!exists(findFilePath(fullName))) - fullName = common::find_file(_filename); + fullName = common::findFile(_filename); + + this->dataPtr->filename = fullName; if (!exists(findFilePath(fullName))) { - gzerr << "Unable to open DEM file[" << _filename - << "], check your GAZEBO_RESOURCE_PATH settings." << std::endl; + ignerr << "Unable to find DEM file[" << _filename << "]." << std::endl; return -1; } @@ -103,25 +102,25 @@ int Dem::Load(const std::string &_filename) if (this->dataPtr->dataSet == nullptr) { - gzerr << "Unable to open DEM file[" << fullName - << "]. Format not recognised as a supported dataset." << std::endl; + ignerr << "Unable to open DEM file[" << fullName + << "]. Format not recognized as a supported dataset." << std::endl; return -1; } - int nBands = this->dataPtr->dataSet->RasterCount(); + int nBands = this->dataPtr->dataSet->GetRasterCount(); if (nBands != 1) { - gzerr << "Unsupported number of bands in file [" << fullName + "]. Found " + ignerr << "Unsupported number of bands in file [" << fullName + "]. Found " << nBands << " but only 1 is a valid value." << std::endl; return -1; } // Set the pointer to the band - this->dataPtr->band = this->dataPtr->dataSet->RasterBand(1); + this->dataPtr->band = this->dataPtr->dataSet->GetRasterBand(1); // Raster width and height - xSize = this->dataPtr->dataSet->RasterXSize(); - ySize = this->dataPtr->dataSet->RasterYSize(); + xSize = this->dataPtr->dataSet->GetRasterXSize(); + ySize = this->dataPtr->dataSet->GetRasterYSize(); // Corner coordinates upLeftX = 0.0; @@ -132,9 +131,15 @@ int Dem::Load(const std::string &_filename) lowLeftY = ySize; // Calculate the georeferenced coordinates of the terrain corners - this->GeoReference(upLeftX, upLeftY, upLeftLat, upLeftLong); - this->GeoReference(upRightX, upRightY, upRightLat, upRightLong); - this->GeoReference(lowLeftX, lowLeftY, lowLeftLat, lowLeftLong); + if (!this->GeoReference(upLeftX, upLeftY, upLeftLat, upLeftLong) + || !this->GeoReference(upRightX, upRightY, upRightLat, upRightLong) + || !this->GeoReference(lowLeftX, lowLeftY, lowLeftLat, lowLeftLong)) + { + ignerr << "Failed to automatically compute DEM size. " + << "Please use the <size> element to manually set DEM size." + << std::endl; + return -1; + } // Set the world width and height this->dataPtr->worldWidth = @@ -161,12 +166,38 @@ int Dem::Load(const std::string &_filename) if (this->LoadData() != 0) return -1; - // Set the min/max heights - this->dataPtr->minElevation = *std::min_element(&this->dataPtr->demData[0], - &this->dataPtr->demData[0] + this->dataPtr->side * this->dataPtr->side); - this->dataPtr->maxElevation = *std::max_element(&this->dataPtr->demData[0], - &this->dataPtr->demData[0] + this->dataPtr->side * this->dataPtr->side); + // Check for nodata value in dem data. This is used when computing the + // min elevation. If nodata value is not defined, we assume it will be one + // of the commonly used values such as -9999, -32768, etc. + // See https://desktop.arcgis.com/en/arcmap/10.8/manage-data/raster-and-images/nodata-in-raster-datasets.htm + // For simplicity, we will treat values <= -9999 as nodata values and + // ignore them when computing the min elevation. + int validNoData = 0; + const double defaultNoDataValue = -9999; + double noDataValue = this->dataPtr->band->GetNoDataValue(&validNoData); + if (validNoData <= 0) + noDataValue = defaultNoDataValue; + + double min = ignition::math::MAX_D; + double max = -ignition::math::MAX_D; + for (auto d : this->dataPtr->demData) + { + if (d > noDataValue) + { + if (d < min) + min = d; + if (d > max) + max = d; + } + } + if (ignition::math::equal(min, ignition::math::MAX_D) || + ignition::math::equal(max, -ignition::math::MAX_D)) + { + ignwarn << "DEM is composed of 'nodata' values!" << std::endl; + } + this->dataPtr->minElevation = min; + this->dataPtr->maxElevation = max; return 0; } @@ -175,9 +206,10 @@ double Dem::Elevation(double _x, double _y) { if (_x >= this->Width() || _y >= this->Height()) { - gzthrow("Illegal coordinates. You are asking for the elevation in (" << - _x << "," << _y << ") but the terrain is [" << this->Width() << - " x " << this->Height() << "]\n"); + ignerr << "Illegal coordinates. You are asking for the elevation in (" + << _x << "," << _y << ") but the terrain is [" + << this->Width() << " x " << this->Height() << "]" << std::endl; + return std::numeric_limits<double>::infinity(); } return this->dataPtr->demData.at(_y * this->Width() + _x); @@ -196,11 +228,11 @@ float Dem::MaxElevation() const } ////////////////////////////////////////////////// -void Dem::GeoReference(double _x, double _y, +bool Dem::GeoReference(double _x, double _y, ignition::math::Angle &_latitude, ignition::math::Angle &_longitude) const { double geoTransf[6]; - if (this->dataPtr->dataSet->GeoTransform(geoTransf) == CE_None) + if (this->dataPtr->dataSet->GetGeoTransform(geoTransf) == CE_None) { OGRSpatialReference sourceCs; OGRSpatialReference targetCs; @@ -208,26 +240,40 @@ void Dem::GeoReference(double _x, double _y, double xGeoDeg, yGeoDeg; // Transform the terrain's coordinate system to WGS84 - char *importString = strdup(this->dataPtr->dataSet->ProjectionRef()); + const char *importString + = strdup(this->dataPtr->dataSet->GetProjectionRef()); sourceCs.importFromWkt(&importString); targetCs.SetWellKnownGeogCS("WGS84"); cT = OGRCreateCoordinateTransformation(&sourceCs, &targetCs); + if (nullptr == cT) + { + ignerr << "Unable to transform terrain coordinate system to WGS84 for " + << "coordinates (" << _x << "," << _y << ")" << std::endl; + OCTDestroyCoordinateTransformation(cT); + return false; + } xGeoDeg = geoTransf[0] + _x * geoTransf[1] + _y * geoTransf[2]; yGeoDeg = geoTransf[3] + _x * geoTransf[4] + _y * geoTransf[5]; cT->Transform(1, &xGeoDeg, &yGeoDeg); - _latitude.Degree(yGeoDeg); - _longitude.Degree(xGeoDeg); + _latitude.SetDegree(yGeoDeg); + _longitude.SetDegree(xGeoDeg); + + OCTDestroyCoordinateTransformation(cT); } else - gzthrow("Unable to obtain the georeferenced values for coordinates (" - << _x << "," << _y << ")\n"); + { + ignerr << "Unable to obtain the georeferenced values for coordinates (" + << _x << "," << _y << ")" << std::endl; + return false; + } + return true; } ////////////////////////////////////////////////// -void Dem::GeoReferenceOrigin(ignition::math::Angle &_latitude, +bool Dem::GeoReferenceOrigin(ignition::math::Angle &_latitude, ignition::math::Angle &_longitude) const { return this->GeoReference(0, 0, _latitude, _longitude); @@ -265,7 +311,7 @@ void Dem::FillHeightMap(int _subSampling, unsigned int _vertSize, { if (_subSampling <= 0) { - gzerr << "Illegal subsampling value (" << _subSampling << ")\n"; + ignerr << "Illegal subsampling value (" << _subSampling << ")\n"; return; } @@ -299,8 +345,8 @@ void Dem::FillHeightMap(int _subSampling, unsigned int _vertSize, double px4 = this->dataPtr->demData[y2 * this->dataPtr->side + x2]; float h2 = (px3 - ((px3 - px4) * dx)); - float h = (h1 - ((h1 - h2) * dy) - std::max(0.0f, - this->MinElevation())) * _scale.Z(); + float h = this->dataPtr->minElevation + + (h1 - ((h1 - h2) * dy) - this->dataPtr->minElevation) * _scale.Z(); // Invert pixel definition so 1=ground, 0=full height, // if the terrain size has a negative z component @@ -308,9 +354,9 @@ void Dem::FillHeightMap(int _subSampling, unsigned int _vertSize, if (_size.Z() < 0) h *= -1; - // Convert to 0 if a NODATA value is found - if (_size.Z() >= 0 && h < 0) - h = 0; + // Convert to minElevation if a NODATA value is found + if (_size.Z() >= 0 && h < this->dataPtr->minElevation) + h = this->dataPtr->minElevation; // Store the height for future use if (!_flipY) @@ -326,14 +372,14 @@ int Dem::LoadData() { unsigned int destWidth; unsigned int destHeight; - unsigned int nXSize = this->dataPtr->dataSet->RasterXSize(); - unsigned int nYSize = this->dataPtr->dataSet->RasterYSize(); + unsigned int nXSize = this->dataPtr->dataSet->GetRasterXSize(); + unsigned int nYSize = this->dataPtr->dataSet->GetRasterYSize(); float ratio; std::vector<float> buffer; if (nXSize == 0 || nYSize == 0) { - gzerr << "Illegal size loading a DEM file (" << nXSize << "," + ignerr << "Illegal size loading a DEM file (" << nXSize << "," << nYSize << ")\n"; return -1; } @@ -360,7 +406,7 @@ int Dem::LoadData() if (this->dataPtr->band->RasterIO(GF_Read, 0, 0, nXSize, nYSize, &buffer[0], destWidth, destHeight, GDT_Float32, 0, 0) != CE_None) { - gzerr << "Failure calling RasterIO while loading a DEM file\n"; + ignerr << "Failure calling RasterIO while loading a DEM file\n"; return -1; } @@ -378,4 +424,8 @@ int Dem::LoadData() return 0; } -#endif +////////////////////////////////////////////////// +std::string Dem::Filename() const +{ + return this->dataPtr->filename; +} diff --git a/graphics/src/Dem_TEST.cc b/geospatial/src/Dem_TEST.cc similarity index 51% rename from graphics/src/Dem_TEST.cc rename to geospatial/src/Dem_TEST.cc index bc39e7248..5a8fcde20 100644 --- a/graphics/src/Dem_TEST.cc +++ b/geospatial/src/Dem_TEST.cc @@ -16,6 +16,7 @@ */ #include <gtest/gtest.h> +#include <limits> #include <ignition/math/Angle.hh> #include <ignition/math/Vector3.hh> @@ -26,10 +27,8 @@ using namespace ignition; class DemTest : public common::testing::AutoLogFixture { }; -#ifdef HAVE_GDAL - ///////////////////////////////////////////////// -TEST_F(DemTest, MisingFile) +TEST_F(DemTest, MissingFile) { common::Dem dem; EXPECT_NE(dem.Load("/file/shouldn/never/exist.png"), 0); @@ -39,9 +38,7 @@ TEST_F(DemTest, MisingFile) TEST_F(DemTest, NotDem) { common::Dem dem; - std::string path; - - path = "file://media/materials/scripts/CMakeLists.txt"; + const auto path = common::testing::TestFile("CMakeLists.txt"); EXPECT_NE(dem.Load(path), 0); } @@ -49,9 +46,7 @@ TEST_F(DemTest, NotDem) TEST_F(DemTest, UnsupportedDem) { common::Dem dem; - std::string path; - - path = "file://media/materials/textures/wood.jpg"; + const auto path = common::testing::TestFile("data", "heightmap_bowl.png"); EXPECT_NE(dem.Load(path), 0); } @@ -86,30 +81,34 @@ TEST_F(DemTest, BasicAPI) const auto path = common::testing::TestFile("data", "dem_squared.tif"); EXPECT_EQ(dem.Load(path), 0); + // Check filename + EXPECT_EQ(path, dem.Filename()); + // Check the heights and widths - EXPECT_EQ(129, static_cast<int>(dem.GetHeight())); - EXPECT_EQ(129, static_cast<int>(dem.GetWidth())); - EXPECT_FLOAT_EQ(3984.4849, dem.GetWorldHeight()); - EXPECT_FLOAT_EQ(3139.7456, dem.GetWorldWidth()); - EXPECT_FLOAT_EQ(65.3583, dem.GetMinElevation()); - EXPECT_FLOAT_EQ(318.441, dem.GetMaxElevation()); - - // Check GetElevation() - unsigned int width = dem.GetWidth(); - unsigned int height = dem.GetHeight(); - EXPECT_FLOAT_EQ(215.82324, dem.GetElevation(0, 0)); - EXPECT_FLOAT_EQ(216.04961, dem.GetElevation(width - 1, 0)); - EXPECT_FLOAT_EQ(142.2274, dem.GetElevation(0, height - 1)); - EXPECT_FLOAT_EQ(209.14784, dem.GetElevation(width - 1, height - 1)); + EXPECT_EQ(129, static_cast<int>(dem.Height())); + EXPECT_EQ(129, static_cast<int>(dem.Width())); + EXPECT_FLOAT_EQ(3984.4849, dem.WorldHeight()); + EXPECT_FLOAT_EQ(3139.7456, dem.WorldWidth()); + EXPECT_FLOAT_EQ(65.3583, dem.MinElevation()); + EXPECT_FLOAT_EQ(318.441, dem.MaxElevation()); + + // Check Elevation() + unsigned int width = dem.Width(); + unsigned int height = dem.Height(); + EXPECT_FLOAT_EQ(215.82324, dem.Elevation(0, 0)); + EXPECT_FLOAT_EQ(216.04961, dem.Elevation(width - 1, 0)); + EXPECT_FLOAT_EQ(142.2274, dem.Elevation(0, height - 1)); + EXPECT_FLOAT_EQ(209.14784, dem.Elevation(width - 1, height - 1)); // Illegal coordinates - ASSERT_ANY_THROW(dem.GetElevation(0, height)); - ASSERT_ANY_THROW(dem.GetElevation(width, 0)); - ASSERT_ANY_THROW(dem.GetElevation(width, height)); + double inf = std::numeric_limits<double>::infinity(); + EXPECT_DOUBLE_EQ(inf, dem.Elevation(0, height)); + EXPECT_DOUBLE_EQ(inf, dem.Elevation(width, 0)); + EXPECT_DOUBLE_EQ(inf, dem.Elevation(width, height)); - // Check GetGeoReferenceOrigin() + // Check GeoReferenceOrigin() ignition::math::Angle latitude, longitude; - dem.GetGeoReferenceOrigin(latitude, longitude); + EXPECT_TRUE(dem.GeoReferenceOrigin(latitude, longitude)); EXPECT_FLOAT_EQ(38.001667, latitude.Degree()); EXPECT_FLOAT_EQ(-122.22278, longitude.Degree()); } @@ -130,17 +129,17 @@ TEST_F(DemTest, FillHeightmap) std::vector<float> elevations; subsampling = 2; - vertSize = (dem.GetWidth() * subsampling) - 1; - size.X(dem.GetWorldWidth()); - size.Y(dem.GetWorldHeight()); - size.Z(dem.GetMaxElevation() - dem.GetMinElevation()); + vertSize = (dem.Width() * subsampling) - 1; + size.X(dem.WorldWidth()); + size.Y(dem.WorldHeight()); + size.Z(dem.MaxElevation() - dem.MinElevation()); scale.X(size.X() / vertSize); scale.Y(size.Y() / vertSize); - if (ignition::math::equal(dem.GetMaxElevation(), 0.0f)) + if (ignition::math::equal(dem.MaxElevation(), 0.0f)) scale.Z(fabs(size.Z())); else - scale.Z(fabs(size.Z()) / dem.GetMaxElevation()); + scale.Z(fabs(size.Z()) / dem.MaxElevation()); flipY = false; dem.FillHeightMap(subsampling, vertSize, size, scale, flipY, elevations); @@ -149,11 +148,46 @@ TEST_F(DemTest, FillHeightmap) EXPECT_EQ(vertSize * vertSize, elevations.size()); // Check the elevation of some control points - EXPECT_FLOAT_EQ(119.58285, elevations.at(0)); - EXPECT_FLOAT_EQ(114.27753, elevations.at(elevations.size() - 1)); - EXPECT_FLOAT_EQ(148.07137, elevations.at(elevations.size() / 2)); + EXPECT_FLOAT_EQ(184.94113, elevations.at(0)); + EXPECT_FLOAT_EQ(179.63583, elevations.at(elevations.size() - 1)); + EXPECT_FLOAT_EQ(213.42966, elevations.at(elevations.size() / 2)); +} + +///////////////////////////////////////////////// +TEST_F(DemTest, UnfinishedDem) +{ + common::Dem dem; + auto path = common::testing::TestFile("data", "dem_unfinished.tif"); + EXPECT_EQ(dem.Load(path), 0); + + // Check that the min and max elevations are valid for an unfinished + // and unfilled dem. + EXPECT_EQ(33, static_cast<int>(dem.Height())); + EXPECT_EQ(33, static_cast<int>(dem.Width())); + EXPECT_FLOAT_EQ(111287.59, dem.WorldHeight()); + EXPECT_FLOAT_EQ(88878.297, dem.WorldWidth()); + // gdal reports min elevation as -32768 but this is treated as a nodata + // by our dem class and ignored when computing the min elevation + EXPECT_FLOAT_EQ(-10, dem.MinElevation()); + EXPECT_FLOAT_EQ(1909, dem.MaxElevation()); + + // test another dem file with multiple nodata values + common::Dem demNoData; + + path = common::testing::TestFile("data", "dem_nodata.dem"); + EXPECT_EQ(demNoData.Load(path), 0); + + // Check that the min and max elevations are valid for a dem with multiple + // nodata values + EXPECT_EQ(65, static_cast<int>(demNoData.Height())); + EXPECT_EQ(65, static_cast<int>(demNoData.Width())); + EXPECT_FLOAT_EQ(7499.8281, demNoData.WorldHeight()); + EXPECT_FLOAT_EQ(14150.225, demNoData.WorldWidth()); + // gdal reports min elevation as -32767 but this is treated as a nodata + // by our dem class and ignored when computing the min elevation + EXPECT_FLOAT_EQ(682, demNoData.MinElevation()); + EXPECT_FLOAT_EQ(2932, demNoData.MaxElevation()); } -#endif ///////////////////////////////////////////////// int main(int argc, char **argv) diff --git a/graphics/src/ImageHeightmap.cc b/geospatial/src/ImageHeightmap.cc similarity index 100% rename from graphics/src/ImageHeightmap.cc rename to geospatial/src/ImageHeightmap.cc diff --git a/graphics/src/ImageHeightmap_TEST.cc b/geospatial/src/ImageHeightmap_TEST.cc similarity index 97% rename from graphics/src/ImageHeightmap_TEST.cc rename to geospatial/src/ImageHeightmap_TEST.cc index b40880879..2b93f845a 100644 --- a/graphics/src/ImageHeightmap_TEST.cc +++ b/geospatial/src/ImageHeightmap_TEST.cc @@ -28,7 +28,7 @@ class ImageHeightmapTest : public common::testing::AutoLogFixture { }; class DemTest : public common::testing::AutoLogFixture { }; ///////////////////////////////////////////////// -TEST_F(DemTest, MisingFile) +TEST_F(DemTest, MissingFile) { common::ImageHeightmap img; EXPECT_EQ(-1, img.Load("/file/shouldn/never/exist.png")); @@ -51,6 +51,9 @@ TEST_F(ImageHeightmapTest, BasicAPI) std::cout << "PATH[" << path << "]\n"; EXPECT_EQ(0, img.Load(path)); + // Check filename + EXPECT_EQ(path, img.Filename()); + // Check the heights and widths EXPECT_EQ(129, static_cast<int>(img.Height())); EXPECT_EQ(129, static_cast<int>(img.Width())); diff --git a/test/data/dem_landscape.tif b/test/data/dem_landscape.tif new file mode 100644 index 0000000000000000000000000000000000000000..b8602372826264dc6772da19b88b719d10975533 GIT binary patch literal 100487 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 literal 0 HcmV?d00001 diff --git a/test/data/dem_nodata.dem b/test/data/dem_nodata.dem new file mode 100644 index 0000000000000000000000000000000000000000..60b04bf4c2edb74b203dbeda0e0d11842d60ae0e GIT binary patch literal 9441 zcmdU#b#zqMzQ<=~+c}dEtON^?;BLVQ?i9BI#UXeI5(v(qK}w5TOQBFG6l;*;9zt;^ zg#rZ%!2*<E3D*0Wx!m>o*1B)qKi+zOyqtArc8=_yeSflldm1z->`2P(aHMlMoWkLB zI2<)Noqrp<K8|_9AwG`1&*{I7(>tZZ#kI?vnf`V?@Z-1|*E4^7<}~A=zdh6P<JkLt zz(jwC;JXq8CQR~oXvQrVZ;BC)V8#;|$HurE1sNY=?D^j1=)m{}=fC?4t5>^5qsHM; zU3+wm>RQzu930jlDm)^1K-Y-yD!E%XY0#=wyJmHA2M_5QF|a>ZO6Cq89O)el9ndE# zYQ(_s+*KpON_bzX>JBUM-{*2%nYQ%TY1g|||0mskAHV<k-@p4ziffWIP>0muUiGWf zT6({Ie@>s)jl&_)yZ7*YyBsbV8xz74PAfJ>J3<`V^4|Y4kHg>l-KMwneHY5px>e)g z_K^d^gG-ex8r&pua8&Q`!2^Qphez}oGLT{T=q5F4mo7ir;q?4Z$8@nvEENaD2C<jV zBjSuWA#RFm;;2Xv@5FE7jd(Ad@`dn|ZYkvlkyZwC<d=D67Fk^8kfmfvSyYDbe@+=F z)5~`vovbd$%eC^HTp;_&<}ys)6HZU0h!)Glk7AS9D1H#L#MfdEG~&d1v6j!vVx4%v z|98YwaYft`uf+%Ph~u@$EHiP~Qph0riOec<L9d9cAdAUbvV^Q8%gb`IHlGz`71<NM z{G^f@WJ9@Jo|LcTOL<nt$d=r7dd5L@lUR+MJH=+WSSz-QyP^Oy#*1^}t+*ks3zvK# z97vNYY-j~Q)giM(Aw=eeYHlPgfYha-Ra4fHji6IoHkQ?pvI+cjmwV+`d<Xcr93r>K zWcjV^3jLbA?evTgE1`Kn>=*IkXZYB|=M|An)|VM&T6F1<7Vr8YO--Z?l7(d<t`?MK zp-@Ivg<@@4k9!TE`I&4lJIQXcgX{%`R*X8zwoqCjAIL>=7#vNNJLFR|uuTr-onpx1 z^h^`qi=V_V*!aA-Bu+y8G`3C>W#kY!QjU>Lv0wo#)=IYHjeJN|PS${WGbC*(KZjy> zD7KefWN)+`$;?A#e;Fl5$Y@4`WH{H>%Ph*R9?ADIy&9|vs^8@@If?t7;os?5E*4?$ zb5Op<aU0r6;twzrE;n$j<*9~@qnWh}&o}eQ)){Jjz|wFz7%s;`X&C&DlH;)LBsmM6 z&z4^z^&~k{{w{CI53-61Q|VMa)k76mekwu6!$XYBEaO1p3Q%wkjNjw9&-q-Wg7oyz zI09yOAZ2}K{z^_`)Et>2pcyT{kkg?u3n~k+={&xda4wc#^WS%JrCcpH$#tM^I{)30 z#Z)<!UFB5o<X!m$RIGyYPvui_P)vt|UE;8~0M_1#S5SY;$ddlxIzk?lXRu%sC{LGb z(BwKOFF>k=%(@m!?qaUpoIBxjm)tCW=5vocz<E%fmcMWwllypf72kg9B+vecO}nAH z3i!}2(NokC1>oSKPx}UqWCeR!@ZCIEyRsb33>T1VjBG8J%B}J+^L!7Ee}wj7c@f<v zBGDi6hD^Y-uJZIP#@EsM4es5Rzj5uFyezl#{1*8LSw3fGTOJnsu=+;PS(FlKM6%22 zc_bc-XXrfxI4jLr7GJIgg6Bi=iadoxtC`^hGyW#ynDIO_Ka}reT9rwCqS7d(-hyt2 zdIip2a(s{}GF85iNnCx*=TZ5q+>chyVXKBjgv;Wrm?RpBV!~gzL=ZYi5d!b3BGbsa zcvUms*%VYqL3ahw<1X?ZM5Z^)c#HF$^oMdGRaw>HsHTdkeAqbT<7Wug7An2+R|d|E zN|j2bAjc7SI)X0yW8d4tBg%_BBEKjn`oTd?ygh_?ksIuF$B+AQ_UBlE?c<O*75Ngt zPY_h4%As<pqN=*;s-o0bHBt>womCfASG7>hRDIPz)nHtj`*~Dem0M*|X;nt}RqBGY zRbjOoe@ZX+h(4mOXekDZj>LVZCqJ4mkDm=d_mkyZd}KD*`5tT^gzkIkQr>q%Q~}ji z72zC!M^8~ds-M*XwOwsioA_SCm6>XUn#4I&MZ((<{H~5F$s48N{0(?{g>{C=Z1Re* z<Z`h}Y{By`iBoV;2XCuRB<)Jh2*(39gZcf~{SY|5Ap=!@WG<%~s+Lf0roL25RjfLv zZmVa?p+BgX>aBXmI9C0pcB_r*JC1MELO7hGda6$7q_V0=3=+t2l?a)U*roX_LY(O@ zUyB?>q)~Dpe%=oGry~1SY;_UY-^jnv{w0vrn0dPSbpD;1s5Ypx>ZuCQ1#|^nN7v=7 zrOWCdT~cS)kJWv3N?la@(8>+97!57ty>QhC9tx>ps)YIj-yBUOs0bgo@Uvd>2RImv zzDHq$`FQ+pkarWjyHr;6S55`0Y}j?Unx<x`m1?It4h=tDPB+%Q^#nav&)4(xOg#!t zI_s7?m(H&X>YO@2KU1&Odv#aEsnu$fYNh(}_B7<Ek0#QnWKbChR&UC5Y7ZPtA;!!^ z{v|RN<lP2&PLNXsE4Bk=MO7a(zeOEF_Ec3+x7B_1K)qaV*N5~2{aC-$cXXWIppWT= zI$W>NtF;GyYU>hcMd?TCq}rwCW1U2`UQGo<%~e?tRZul$?t1D0vCQfDmI%EX<i#WZ zK_b9&`H3pS-L@)P#i(!L{8#k;N@Zl$ntHn4t<UI09c02x7ZYs;nSQ2~X=*~vRsBjA zG}2s$msL7if2zx)5ye}HpmsIr?5;k=OG<)_($FuChkYrhz`=C**aP~G5!KERSFaFj zD)7W;H5=ZKV$B^Yy$(h55qhaUt>5WJrllEY7MYvojq$f`n_tXPv%qvS-AxOV)g<X( z^?9_kL{HU`x+#3TLJt#=zoTk`O>6nIyB~a{S8IJ7RFFN0LXF69Ey%$AvBy{Nks^!W z;}hW^gO=!Zu%4k$>2#)!nPGl1zd}2$RnMAZ?XWsoC9E*ZvXadnGspDdiIOJBe84^@ z(8UOJq4jn3HU8NPOm|R?(L@I|PPNA#Dd^tmxl1;36P2nG6Fb3E97r(4k^JP-hS(w& z9zNHL^d+rLf0JO+SY@n=)<`Sbnqehd#@=ClXDzZkR%5Gxm1?$`6=tQG03V;2TY3{H zZI72+z?w1mMR)Yj1`AguinRd`MTn?QPbyJ41p4!dL>uss+eE*<#FlL!|B;gVB;H;H zX)fsurh_?SYFmA+=~j~U$_ldU+7;~5b|E{^eqimiCR?p7+cH)z>vuEW)W#w^(OoTc zcormltHwjWr7vz)P&M(*HsIkDIuPW7nMA^ER8m=x`-!ZrCaZ%gMP&v>&B1nWy%^M& zHN(*VD^u5+ZQZwu+u`<9`+~jS-fsVB&$Y+eHSJ{UXKRUd%KE}`Tf5B&6Ksy@Y5Fr= zOy4JR&Lvv*fNEW$Lnufas4}RZr3Vfkh%DqK51IIbEQEH3sovmrnmVD3ZVj4t=o|XE zE)34r7-hAzzOn9Eh3qj<e`g1}v$+eo3%d)tE%$u8yWPYtW8b&FvT9mS&G)8}@i+V6 zzMf8}Z{m|Z)o0MJrpn{v%|Loqbq}38Jq3xCTZm0(h!R!7$|$u$?Iou9>FT-zap#WC zWEz^`W}~@hid&<t+g1bnOZ&QA)ZNQH)IHL@)V<Ta!d=gu!JTBUu_JANdxO=%3b2mx zPC;{x7*UVt9fuvpg1-9D2nAz>!Fd+-!iU5kh=kXuAl~DJ<+0RwwM-o&0=RW4tat<; zZ-f4~nujL0)zR7j_Ilfw?dtBu?ms!+xj*p>^~>OQ)ji!^&HdC~WS6y1S`)2M>kkuS z3Yo`xo$gB1K8h6v5##ErD)>N2a`|6GgF2w!>6uFwx-Z`nAw$4sDBc>aejxW4U54nl zPZu@w%+KbmvC-``>o*WE!%ni>xevLk`3>=l@{9Cq<yY4))%`WLNU*2amFz#TR3qz+ zIb>Rc#tXW?E~1~{kJIsnidY~Y`MNGO#WwPhcg?g1|2s-HNR`>iWZ~dovRbDes6bss zN9i@%W$K!_<|G_6wx(Ja;9$P}#_r@k>@ElOA%4yLoPG!0Gu<8CncVyAR(5*(u+_uL ziWLT%5=6>FdbVyzoK8TpUd-PSPfwxBdQSZpC?CVY3OKkSpUFI`6fvtWIcTH0OvcSl z-W#Ep>117sI1p>z<A)=yV^(^*r+wbe@1Ewq=1$|6*RP=87589wI`<lTko~!x#Xe$< zvr1V{%vyZ+EpcQjxg<y*C&I2GCUgP^#gJcufy>kb?XW@|HPml#pz+Y&Aat(Us!pqW zO6feh6S?n(P6MiEm~-HuFa8!_H@6qtiFOfpKlfMeHSW#spWGwd`Q6{xCF~1U3|K8g zq@GGldZ^dp%Z+rfeveGY$!;_7c1_LxQvOLETutn~1qXZNacbQwG7VX@8(JDnZLx|- zcoc7_q$d+w)8PxF@kMRbvie(ltRi+d?0w39k2mJU8}quexL@0`b~`)C>SOs^3Fd&A z#5<4lMEszvexZ)wi}TbNVr+<VQYBo#?z@S9D_C7PJ>OB4oR@ddf**B6C8Aa|m|0D& zp^0a`!SXGg3Lbk9ZR63y4^|?UsBRCm=h@%c>+Nm!Mn+L~Cp({=U`??qqk&<jut_G1 zP9Y}eqgpt@e3MiJIU&1psi)NRC#k^Jv%>ij4z`dR51@rRM5K&75k}-1M*VkG{i)LG z(z=%(gHQiLOs<YC9+(DDS!Z3d-dms8h3z`nq#RK>#roYkONMA*y(2e7gWhCp(2tyI z={;%**6j=it6}N1R4CV}1-7!Hn&pd$PR}MHay+%!b+AyDTog%6m`Ig%TwS8p2_-U5 zCEq6K;%17uWCE>*)=+Ca@i)%8VZF8-_BAr(A`s9WD}`B)c&fU2uTR2v2eN7geGY6- zBs-T?!NftM9%J)(R&~qC!XwdvHzF*TKY_=`)U(-$m$g)DFu4#!?o~;uB$;u79;**) zCzZ%_v%@?yd90#H`vn<l4!%FsYC*QFVdW%8Czw-ap=m;;ava??);aVWb&VQpCV8<c z*)W($lt2X9O-;Il)!<+s2cuYrt{^hU6BSZGLkO#Z5g=zF);j|lnh>7{Qk`5RKbJFO z@v|-FsY!2DwTf8vk^8OjBM)3OkEv9?#&c^^ADq%#sHZw;f1LyhR)Fqk<O-tlPi3`t z0UInM7kjA9y*e1o+ITKk_7fQ%$o%B3_F$n8dKgbmOQb5#p$qGdc;;dKn&{A$ShJWo zdDO(2`$k%E<czP#g`<hXJ&44DIJlEKwzbZzQ&a+LiP1>Zk9Zq|4PLNzI8Mzxjp}>^ zJpeBU-Kp0nQ>CvVE<BaAd&nH6$Q<3tr*qK54ORzEokdrqO8r4^)K7I<uwH?f8%?Cz zYa)m}jZKL8OXo0wCWT6FGgd1>R(`1VGee}R%^EWwRq{LHKqBkT^Q?Wpr5@`_*Tu_0 zb4HPJBHpos^~x2Qmp59g{@7v|QEUM`>{I8}6O|RuXrc!ZCr{{W@bOkxph|6Sa#E9} z=(~EBjz#upJqaIdffqQa&ep5t)MVAjh3P=xQDonRA8sWl&Zi=4!)mD(Jk+F0^wx)S ziPW2^l*g*Itc-?Yg$Sy<aiHiMtg#<`CaHYXo&)fWwN&UgwM7;3kos|_{+6}FIBMyp zx*e;AxA^j1BKt|!QR|8H*;uzd0qZ-_w1<vMH#!2fSgBQIy;v9yicux?<a&2jt+T1p znj(J=@>h52mG1a)BwWl^vq0uPcrdI?K8H>OSu2jLF`EDCq45G##eb<g%F-?!$Es-s z>w~`PdoU2eDnYA9;QTaka3uO}ODCg>45cTQhn}3%lZoDAdAd`Lz{Mq5oHzTa6QCs* z^>lsWSQBciUikA6^#v9=LC#1eRt2$63fDEjyU>?ZJT?7xqWN5^i(Nd`k!oN7SnAK} zpbV(WssixCM4~_!Y~L7aWmz$&qa&FX4!qsa9Pm?I_63Q#s1Qo4!@hpZY3de1oGi%- zt}5}mH<4u##~fnjS(Q#_Bj?3Kc?no=MithA6-hC2{22Hy&YG_zlyj*MSUv!qro$Gy zSQXTvk5`K7*q=_UCF#r3!}yDO*&ipU20Dhx89cWhZg=9Jm+{YM(#hI4Gg+f9`e=o( z4nW!+SojR<_9%4S7p_Y{J15$9B5f(U2OsElc<HB-`>zsl&oSQ$uoeyaD#1Z86#o** z^lF_RZ^!lty`0zL1#5>O5Hf_?c_AIKm8_*Uvz9wX9J@tLk%q2BK3097l0%nctp$9y z!qcjfO;X4<m+<ujC_3q%JcsHFdH{QnV+QMxZ|KT20daLeKw0pYgRYH~FX<dQJy+>v z-J+9thyJa1MPD87i~^ex;C3AGav7boSTy+y_2e^ZDQ{mgBNiTs=1Zt6tn<?$`*z~& zejmj(;O#J;x19(Vhukx;ZVPIW20rVD(gV&5{XqJ(PWg-uveR=)9P{<f&xk}g2mqf| zSjYXdOWOl|OlCbXkKD0=xP64VFUfn<81<;VGt!;hFE^s4L&W$PynHtG_gp%ek-Rg8 z+&72p6N8sE#rs0heIa^v+3DJ)qmSW|Z^fU`bb5ZKqq2ei+HN?xhE|@_S1Uk&yu7cs z(g6>Nq{A>4O)l|uEPp_{W2|o6>OHyaGExqp2i1cPOcX~ao*%>+fxi22J&L=1n5!6) z<)Dib0Qw}|>eo<DLi1PPU^Tt%Z|LxEq@y1z4vF9C?Fssex$usPzTR3#dLF$wB8VC> zzP0T}YKo)8jzsVgPkd`c-P-~`?*P|jkT=ZN`_50-y8>3vN_RgGayvds{v6cZqmTP5 zy;N@}X`xs^Z+RKJ3mfRNAELwUwT2(v&0uU+g;}c6d8y~?_BDo!A>`B%Xn8)-^)j~K zj2))n<)wZ7$O6y`fs$t5BNH+Q$%n$b`w$57--w4`{w=g`Ks|vT`Z4G^Ju}4&F<&eZ z-_c>-4kmAcj;G=!dhlb0+(=Ur9Tugh?)@&0tX;tAK<u&rq|e6+8ySrUZw;aSUMOh0 z<)0!29bZN!FCX4rmQ3j2j8E!gbn<^;H{me530vV{t#4OjJL7%ubQa58hsWFS`&8KU zVbjtH&5ZY^;|N5;Qee71e$}4XF%PuOqTZXq=Oip%Sw8Xgr@j2&pkuxZN*Zlu;N8c} zdYJv11JK#Ue#&krZba|i?)n;b7`AbBA5WadFV4~Fy9)o;;UNi&BqNVQCW8+rUL1&K z^Ks@xM^(u4!$C$2o;wOGmXMoy?-IuWcA^%G+1RuIZ#d<3uD<|dvCv%2-q8kjmNuaG z`EalV?eD@LcJg@`-5ldMiGAYW@+=lfV6NYp=_*=z!LHLA^z3AJ<O7_A;3q@yyD0S0 zf*xThxeXfoIJSu$plqm!0afqCC-Nfn_OgGo3hIkM{!)<lJ)_xhFkFmhv_eego#Sw@ z6OHWRxpmC7n_ZtBytfbS#lyuN^z$2B+-2nDEiLw_Lr(1k25J*SN}%g`Sk)`xDG)zQ z3=~t4)T`HZ&{;qyc`2RkSv<8s%w%6}CLD|r6Sy`RJTAg&r?AN?-dW0Bua7Qfv<fZ7 zVzs^8-;173aU5p<?*_Xer?E{Ko>BtDRsshfka{-n9U`tIiiLFXqu5Cpi-b4fr>BSz zBjChKFGh@F_HjNPOb}DWaJYUgDj>-d@h#NniMirSo}3}R;#h#~mU4X+KD!S5c=ra^ zFz0Ec*#cSuz(oKam_dGxl+o<kB@^9tifN*S=pZ_A^gya<qO0gjM|%*wj1XfOjS@rP zU=VK%^6~RZR0dCNK+Phk#=z?Y&arSYi~Sg{*UsVULU@}E&r7h)CM-RKeYzKT?|pnd zUNjMr-0RPL-9&9sNz~)BE?4V{PwA((6m3Npxah|@fG2x%I6W)j<ws(q6Lfz@#A!?P z+>d^SV#AT>a0tgZ{u>G3qv^<d;C?LQ;UH-VSgyyFvv6=04_L*XK^swD)D&ezL5@(4 zY8;i}rJAS%7tKU#G|@$bW08UI(FP9Uu<8qJ*`1g&oX=*|FuC!6ul@RP^yRxBQg!3( zD=NTyZ?5!)i$z$qn(z~)xwanv+0AqL*gvT!DndDrZx^GuC@xBHmgdbWqPl1R53PK5 z=_q=^%ja<LSfnS~)hEt$Al8k7ekk;xA+`6}&giYZ_>9jM{P(%Y#b+b58i9Q#ay6}Z z=lbAE!>&zDcCPYrR1smKun1uXCyU6=^C56m03M3-OmXhj6^%u6blaI(TW~r(uRwDM zIXeU^gi#wb<J-wz%r>w#UesXbdc4(u_v-lc86?Vb)vLu}aFkgjx{_T_U2k1VSR8po zNuT_gxf38V!9z9?3}1zPM+^3M8bfy|mWyPDHfX`CgGAvE%>d3!@R11|e8Au5qUp-$ ztsE4K^JaOG6KjTuSFTL()C@U7xtANNcU<>e&t1Q|oWd4ac_IX=X+^3l16<@~j)J@y z;?vGZEO!)tS_zhWiZ8HaUpP2GwD8txDWKWA<C>mK@Q&ycCZ4%0=Ew={4Cv8|tXyKh z%SNWsqAJ`JgL+12U3A@c9e3SF7cPDXa^0oT%WGF-aMu;zX^#{Id7~(N55$)rf%+48 zYAidRhw*!-=Nr806mf6|k?<rtf6s`%31rFK;=Jpn>y0ag*=(Oo$*!}mLoT<_=sGvM zh1uD$bBHspGp-A+A6<W7i({^MBu{nSb%ha?mf;&KL1{xQ;9Z^l`y)L+ocQ1W#w9+_ zfBucjKA!nczi~OuGynRHOCsZc{l+CQ?|=Qqr48eM{l;Z1<MI67g<py|t}^!ieaPi- fNT<W`kn=u27Wx17o0R{{-{%wyEnU7`dB;Bh@|**W literal 0 HcmV?d00001 diff --git a/test/data/dem_portrait.tif b/test/data/dem_portrait.tif new file mode 100644 index 0000000000000000000000000000000000000000..bc8034221535fcc4c2853b02dfd5b427c066a633 GIT binary patch literal 100487 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 Q<-L)l9qD1MT-?I?A0rVC&j0`b literal 0 HcmV?d00001 diff --git a/test/data/dem_squared.tif b/test/data/dem_squared.tif new file mode 100644 index 0000000000000000000000000000000000000000..dcb8dd082844c6bc1c50177ee966bccf9e70db69 GIT binary patch literal 67701 zcmb5V2UHc^wl#RjIp-)Kiim-X2nfsx3K#%E1OyQk1LmCl%sJ<rGh#+0m=LodAR<T* zQ4~=`1qDIy-}m+H(eHNm_+K|;)Tzy>v#aWy+I#J}=A0`qu&YE-B9UlIBvLXGDbZRg zHmU#Cmi~9!LcA~Y@AkhwC;#8tT2itSCGnoJIH336-q-(kTSFW(`1fZ%h_>l}`%Kus z+cM&P_2sIPf9>yxmt`wdCGw(OEZP@W%SbFlTTxabxwKkUA}!hhqJ4R_w8TiXBSm}3 z32DhZaiE8|hoz!zDBeHwuak*CPxJr%W-Y${G;xk(D~aTjk3`ZbP9lk4B#|84FOig_ ziSJY_k%ayd=ji9>J78eK%=ppqGvoUxTUdAo&P<qOF*$xxf|pfTxNmr1Sa=}A;syo| z3LH3Opq0gp_(@YIievUxeY(54_HcD}b$4@gb#Zlc@$C7puK&Ap_(uLe&f(t6wTGj< zgIh00$A6vWe?Eu5@1Xy<2{(rx?oKXFj?NDD_Rfy~ANu<R{@>1E|37yM_VfRbi~i4D z!ovOh{3HIOlY_HE4`(-5Cs#KYXLtAi`BuaF2Zr?ZWq9!5$p1Xg|9HRuSI?;bpFRB} zIbevNzh8v!fFb^2|IzvX{i*|eqx=WQg-3<_=MNM=b6mot_?hEJ{hz%&d;aG@lSsNd z^>DU#?B(d>?CR>&%f+!*FV_S+r(TlgXZz+xI6Hb5{(Jvl!~K8r;;=Za&3DuAJCnxA z9CVdXjP?KHPwKzszJf#|W`UHLUt+R~y_iZOI7ms7HKi0Uum0DJlK-#&H+57}ytMjX z$5sAoFJ{{B&pXUcO!pBV@i`S9>Dy1tf<aTJ&m0%$J1JrM_)+nb;~d<3IW3gjDHzIs za>F>;Jb;1DeK=yFBNGN$vZPI$i!Z8jMvfYjiq*I?O@$jxl(_Av60b_jvC&M1vCc9q zSt?=D;_tBR_Z}ZVmq7CPDI6c%L|fEF*giReBXg2*WpWz&_P7k0bLZf0Z~+aa*KuUW zT}=7?9E0{(AY85vv+~=pu%{gTKPj`rWi^Hjl4ZipU#J;aiIf44F{CjCa#^R4HuNmc z%AA7#jlIaYv<A~tm!WX$a=eUL1N}2=5q)JH)=%Dm)6ts{)4Cbz54U3DkL`#%c^LAS zPax&~S*+H&guNjd@GN+Sjx}Xi{Qe^fZv2GrvS$1UZNSEqZ#Z233zr7`#jXZf4jHdR z{YEvO8>mgqD1G9E5$i4*aZj>2%Uvy)y`Tdx_#5+6j4t2I*XH_cO>Ua0!Ncd&Xqv0Y zAD5(gw50*ld)GnbNE^&XDbS)(mBDqItQf7!m{I!d_`#6&YNjl6v}7k^8*Wdq<BB!* zY%q3WO;1NIzU08)8{Mgy?ZY+4`mxGn5Kp&;a{K!b&g(jmHK~C#8{3c9TK$<;KuXK> z;|}%yoRT+yGxb7v%Vsdwd=2A<rf|N$8P2Wo;S4c|;8oQ~E-4$z!5bpE+He577WnXh zpDVS>Y}nzm5o?l7St4c5`)f@&C)kK@?Tol~lOB6pX)<@6ItSM)bM!7*j`ElALh>(6 zefkNOIWOTbJsZ-$Q;@UeG!`69#)IiM@u+J$HWXh*{NtOrCwCLyrl;XZ_)V<)bRPqE zy+V{iEnaMG#uR%Q>Ut`2qnkWiZZv|sD{w_M4>I1*kS_HY{x9#~(VS~2Q$L5)*+)=Z zvK!k%H=s;vCCZ~#qSwwfxHoeh-W=F~+v7GtA#n?y4BH0nf3_oQ;}M+Qd=h3(=U|_B z70U|l!s9_69u!vK!M2YWa<UeoS8DKFqZS*Qzrts06Eb2XEOeKr?`0Lne$e7_D+4CY zFy^6uOliB=jGeBUv1OGBe{a^K{2Ue5W{UfcSKwW-efTELqL3DJsrZ7&x2thA|2sHK znho2P=<`{f4fWbQ^Iea}r3`sB)R@brnX|`dE2_%d@T06PeM7o&L%(heRPD)p8&~dr z@6EkO`f`BnK!yz-Oh@A|9@PtF%YcE5*$~K2v;3K;O|B33Wss{MH5U7GeW^c-CkOHS zz5$$4KZvh}2Xmv<AeK0X@XnFJJXI6U!gtZk$&MkE!g+FM01FO#l23Zl{(TQ>o$Ses znLSuu*^Q&VccnwGF5J<zBV|-gDV?v&S}zSo>``J<v<$Bq{Kk`-F9@7himS^X!{bCM zbX(5i_lPU#ed__9s6IgNn<-G-`w$ZQB6zHOfr!sJcvkrcw*#_}QS%f>3#u@n`4^O@ z$x#xi$`PHF__*>fE{6VupW=JG+mHvW&cg0Bsi?Sr1FzTL!i(H=q?sh6^2k0s_FIL0 zg{$DbW-Ug^t;def8xg#4GZt;w0@wT7U@E%{e%8nEV#R4J4NbzMzbQEVkGS^iTujX> z!r9Bk=n?!1Qu@Vcm9IqJ^v}4_r3LflWm*45i5}B5sB&AE`>q;s>KaoXI@^JNWh^-S zhbcdf(PmPUB2V-X(fo>pALspnuKPE1*RRIc>bK~UTZe#2e{rIx0^fS6a#n=~t4?UK zqqH7BEjQr6B_`ZlV!|UTCLA7b#y;CD>D0Ls{pZ^8r<x0^{Jl6|){ntXft=YgkiIKJ zY2p;dya}P)s5XeRy9BZNW?xPWCA~v@=x*aphfm%-x!IdduD(q8LPkUc(n>3c--`P3 z&d(s;2phzSe}lR7$#DA5iRUBFXa+S6q~kXq9)9P|5$QfGlJj9yq8G=>_u&;;Pg-|( zrRRq3+>&g?Gsg`%Z;S>PtyE&kT4}zKZ^m%n8eExCgz>SDP`V-=vd@w+{6`9E%5z{? z@B-4S@1bSRBdqWK1}O(?P}rje<~r|j<!vbzY{`ZCxk@};_6q|R%hLa^8k>SO_$XYS zXD<Ch-}Vo1(|QBfnwQvjEFYfQukfYm1@5Tc!|sUlSaSU+F6D2A;gQwoV6zss)7E2- z)kdVO+6>oITVTI_8;;xVK)(ACyn1>99|F(dXlW8|8Kz*&j!f(?x{H<z*{Cpii0jsQ zc>kyZF_JHcNoj#ji!={dD-v7P7;{mJ-52U}#1>=DX%%x}g;)oE8nOl&Ox-NU@tVJ& zH@_YiCw@g#Qzg2Vm%_6813rm$W?ye9zG{)>iD8PoJzAMcU)0!BTZ>vr+RReW=22+T zTUD2TIv7#Dhb2`DZQ1bBiF1ecrrthp9w`G4oasyTs36|b9K_yvA&edtO1EjjOvxBP z?S(;{_`WZ%%?C3tdU42n4_+SIo85dpc=5A0?<f25%pS6He-FMk1NW}($MvB>tO<+d z(WV5}9gk&GVkpDw2GU$PlzGV^-1Tq}w>k`Dc~KxQ{^P@#)9%bJ>OrpnE3W%%$UBDW zR0@!1fczia@AMgSY+ggT`WeQoxr=?aX;ANW1-*iAW5TvVd{ZdJ(UgaXotTHwN$=72 zwgKvMTXAe#GoH!+Kwj}XtO=@x?ayY6d?U?^e>7Qar^^!ql-O!0%cWnXs4Hp3?z7(^ zW%UD1>%T&?;XO|Fc>&9k`-o7!f<3MWG3)wfZ27Vg^^xl_rDYvly*J^~`mHEd-hsh0 zcVqY5gRsguihZk+aCmq!I+kCCq33lxo}7wF{+T#`DF^T6OELe-2dvy#kGUOwBju=s z*Wb%hE=h@t52$f~w0Kspb=Y^l0jG2|<bhaiezj0y*aivxr+vkQo$pb2_AN?(y~5hf zrC8Xz7P$TcHq9+qxlf9d3#7R4l7vy>w=0;f!U^_DbgWS3&%Zi6Yh+B1YnFVlsViNM zIWT&W8)IjAFe=lN<(YjL?*sbW_h*2J2O-ab`1?r^=cx6k)~^0^x!<3cefx9p?0(E% zN)}D_rj(W^)fe{SgYoWkvhZf~<v#pX;L4R9oq4>mH(ic^>N|%sedu^fRwppgW(3dM z#<5s#1Rv~*W%QqDDn<;U?x;c3kS9lldvKbI6Aypu#1^p*8e3{{NtzP7J(gnQ<R)C1 zTa62@B`BEq6p@$HaU?k%k<XrD)zC7?+E+qLBM;~D-oW73PqYL|QEQ<bYj?=;?FAV= zSlxzR&P~XFC}EnrGGARcpw$^;8ps*&yrnLWd8pI;uM)5QqsRp>6xp{z%()wXuqy8x z{2Jfjt<Q6Od3_DzKOcrs(RN%}xemkj3tSMm3E|_mU{m{U_<HS!?5rbb9eo02PD$|E zegWEHmtj|S4F`v$Lhj)`++Udo{pbp04Eg~1tXlN9u7_ghM!ZdLMdxZUHn%D9n~e$| z)vD1ZMw@4yv^lLxi3>kV@x+L47(D4c98F4*`1>X7eG1^6P=?id)o}Ct0xPv2FsuEE z%Iyu<*Z38E^qO%wTZ$hPlv!!5Nrylq_PN!8nK@n9XIxKOB)V|RBR3YY7mM><XzJv~ zL#I5sc7hKLK9FW*esp^Q)*tktYBcHY>dz2oe^x~GqwVIt^tn#XSme!`tsX4B@65c5 z&U_T;#*N0#)PLWVWeXj+GP5@qdB%#dHI5%E#&V|XSQcI$%aGM$x#;j{+U<_#>Dpo3 zR36HPt^Pdd;lUj~4xA@&>)d2BN~`JcwT>!pXUOu;*;W`o|Aef_Qskd`j;7=Hp=bI8 z=apZhSL!FcQLMwUtCiU7R)_Y8W>kswqjRPb%O|MQ<%&9QWvfs*P=;^bEAeHbF25_7 zvn0@h6MA*v(J7`>?WIpET`hLlr$J6qV`d)}9?(?a<1f-|H)ulp_V;*Xl7sruS7Ft5 z0P`JpA=i8>lxJ^7V)R!0)!hMQg+s7XK8AwXCvdLq96X;Vqf_=pys)?e*@hHccguou zdJYDhF2TO!chK+s0W~=v;e6&Z)|~o=CwqRQONxXC_sDV62PG=0s?%@1I!~OCqfBix zo~-)-spDlBbfged_CLpM=REZHFT);_Ds(v~&h@7Tl@C7R(DBd6vi^dF?IND7{ewmm z6~2Zp$Ge*FP(VknnQ6zt`yDwm%#G^3U8t+#$a9zMxM_Azw)Ax4lsXTZ{qo=+fe~s} zdvflNUQG6O<q?hE0;l)kjCg-$yzNV~Dt~4<f~)R&@%4Tu9$8?|`L;djG^Hm~es$ub znKpcO*?~U{B5AvE1V5^e<xk&n99BPuSJscE&zl5p?lFo(%ZGF2*&&Q@=*xZw-DzBF z$C($bSfXsq)JkneoL1+WEIAI!{S7EpqqXb>c11ly*B&L9sZxdUr@r7=$Zz!9C1FOt zHsnlbfOfyHP|;|^&8{k}XxHPKb}|0d4Y<Ci2FJfQVDT3-9#rYX)Z$JYI?|HY^v!AL zVZ?w7Iy~M<o#p%F>8Gs7u7#?s66@-tF0x#s^9x~f-eA|^M_6NV71ySo!I|oV_%nJt zDlctD@WYLmTy+ouqmRMm+6m}QK7%y<Bz#XlkB7<^(MS0zj1ALJ<$n*>3eRyxwhT%Y zZ!zoLJM4G(h+!LR@w=fG=3i<B)@+COTY0A4Q{ggiHGbBWrRuvMX!ux#q))G4UG^M< z&7Q+L_ywk~e~nRQl^DIF3c;>#@S>#@tB=-TTfYX_9+L3rL^)>vQsrG|UG^w2;pi?M z=_qH%)u)`e&#)K6SN5Q^P8TXlEI7r%hU0A=X}s8te+M|wS;d8=k9u*ItRwR#c4E^? zJO0sdqw^hK+E)AV-dcYeT_FS0`mkBA7uQEQaM1P6Ofa)$KT~UJ=9_bGbSGZAC)RsO z6iWt;<YT$f{B|ssF2OO>of}Jc#If@4aBk6!=KHHb96s2CQXjk1MZP1i{50Z&(>nZk zR*4$95_XgR26d%3Xs9WKR=?M%>;4`QGT#w%qYWLm%kuL_MMl3>pts2T_l8PyU5qqO zS}9X*mL6YBvZS4bHFtTMGw+K9WpX=lzzQ3-eX-<6O(VWMrbVl}s{CZEz(@0B=;<Wk z*290W`<)#B*`!S0R7Fxzit~qkL&m*Vi1~gCclum_Zja+wC$$?5shi;=y9wii4q|@% zQJfxg91DU@;Pa1D$lG!T!^6&@+qw&Y%T+u+pNb2kZ)0Wt6Lg+XjHQhg=y1Lijn@ki zzx)+0Ec}3o1ucR<kfp_RCDvY4;%hxA=0^+MZ&-#m#d-MVpNo+_^RUXc5SuEB;ryr! zGl!HzYGWz3b$kO~&044`f5-jXt(d+=njYF>jk}`3F)s{xaEcXA->_rSA!nLYxG}e` zJ8$o`qMMB|O~pDfA*Cyiwb=9IHyaur>_UZc-6&66Hl8=<hE82sHOhsS>3z6<g%^*k z^W{}_QtfjeT5NLXB6BBByx*CFKbZ4Zp#@uB88chMl1h_<1=fh<p6n6qKYAo@Rm4(0 zBAiYQgZMThl&z&<^j#Ci`I2CUZvdBgxp7jK9n02R@aP3?Mw%!v%dQdL)gSS##~TEB z)L~$JBm8q(&|AdKS%>8KQ%jX$DcTIatj)b2G&ojIlh-4(x%H7QQ!g4)ad#(njp)XU z7TsB{+MPo}x-#g#HI>C0AlF5k<IgDb?M_)<@|93wXbYyC7GtY_9eT|9j-F?w*y<_I z&1+@2<>D_4HmStoiI3nHb{*DVPhm#eJ~Y*B!O<?8u%Kc$x>Oy;yk$r5#O)~D=O4v6 z^J5s_=@?wqPr=&b0(KW&hR^O4xb#oMYQ=2$t$K{|=qz|%$%b$FOSFuy#rk)DVf9mv ziG}j)5HH8iscm?3@-tR8m0-GgF3KL{pg=bt#vfiF{lH5s(=Ecqv_e$Wm16kPT6lkM zgnMZl9F=9bX|bY+@9KPJr^CffM$B)tq~jYq-i~qRyZ0_k`_zMfdUfQRrv_}PGi1+x zmRw(D%d8Abo|$LLv61F{&~Cz;BMdlhMn?`vv}4`1?)-7Yo`bDCnfAO7$I5yz;E)?% zb#S2e!_M6O!kpjs88XRCmklXKG%^jL=88xjdJ{wUX~X%ra5ycOMl*iUK(4w8o(KWW z`;k3Wy=i3Eo8x*r@k)V>$XQJ}W3>jo6J+>eV<V2uu0zLj%~<wX!bFh+uX?6Jf5C&S zh|}Od{(98fX3Edm=A5(Al+`oLSTV?gCbulunr%g&=&ro{#(}jLoY~vQkq*vw9In=x z^9{`COMOOm)MoQaHO31(_{B_?Ra06ad*Cz9bgV?<h>uWKt%t3C1AhEzfZB{29J=%Z z1LQL>J39#`(TCCD?N%%~x*2+nTc8%S3(3`cQMh9tQY!ahY{&f=x@14x#~;L%wBvXq zV#1=|7ch0~6%6>30{6mHB(<i(*76CSdsQGo;QJ*4|9^QXMV*xr_FmEsSHou9+fjo# zIxpeBGY6@KPx0kMF7ij@LuqY3pp}QI3ks3$CNM#dpSb2D;qsTV+`3PNe`agbEYX<3 z>K$0>Y01%ZJJHmx8#To5aC^4{i_7eo`NM+pbM;txNsEn#4Vm@OigUuunLb9BZS%C~ zuu7B1EOdCq-GnQ2J8(gm4P*Y=bKNR0&VJ~@j<Xy%Ow6z23bs5kr6U(LnX}HufO8_$ zxM7qweKH47`pOVyw?y(s$0*M27sb8nqPTv_5MJ-tpY{*EXgAr35#`;uG^-2uv|EeV zWX8m$x_sA3nGerPDDi8-xHGa8at+gRH0UNR_|NqQ{Ow}Gqu!=0jk4f$O<RuDu;ZGw zHvIM4hJ)R08FSZ`#Sgl2)3lycyX3;e2zMrLaiOBIJ&!N3W85qojxDyL#Uyi{4>00o zFI`Swpw8WE<e4DdijavPF*UUaujUsZ)$Jwre|-s)9fi2MI2ZRHW<p`xB?QbojX<L# z0vBvS{lM)|a^42(gl%w~wjExX+i~>tb}Td5iMb|w@O$Py*k3z<ZZi*pZ_ePC)kPc= z9M?RzRAd`v;m(>;^l%Z__Dus`$u|k!;TIPC^9lYX@6r828KzCog~FxB7&+$wl14s4 zSoBl;?UaL(w*{EHz6w9&8&DT7VQ91*yCkWJ`Ju<_BaIj~*MRF>4Y<F;faRx+X;j&f z5l_3Z=O{boFYL&|amM_aqDjA9syzQdpOYq=GfB+jhLsxZR;<KvO@hnz)ZlPM15VSo zpm|MK4&30(&9c2%o!~_2PCfY8w==(3TX4u{Q@$BsOqn(<_CBG=+FmLwnLmIt8pGJD za4>D{Lpfz;2$viS;mLU+?6o<V_cDTLpYOvIEm!(P+Hp#nC0z}SsHv;Yclz@D;3LDi z#R{x!QfJ?J2HYuaM!!l+_UvlIIX&#?*P$DCpgVoMojB%>6X#5H;FOC!dC1A0SwrpV zqUFHOPn|j9p(n%gy|}N$ok7+vH2-AJ%5&Xl;@5>a%dNS&x&vi<n(&&M9!HPY;DQ=C z-c$aGho`GhyCEM7OCDl_)?GX)zlmkL)8ML;iq5Yu;hW%vU-ml=+aJ5(I(9$ycR7fS zgLk8B&343J-i~`d2e5zVF{s)eh2gdR*uC)p@|GNg-lBt8HRdqVU!6z1&^o4WNP*SJ z49I<Zf}RuKpm$>p6vuwSCEfS18~hTNrJun4VK!F2%Z6ETHdF&1;P%aIxJ%{3(ew?H zSAIds*>=QslB3;34L;kYL;c-4RCCm%^HUYBPE=v#el>3UtH+@mt+?Wp9q(+kWLBvW z<8NzI_lGjax+$|YTAQn@wRuor(H%eJd3lK})%+FN^jM2SyBRao&5HYa+H&On?mWH2 zmg#@3`E<B7l`dNHvEchVsq6BvxVEFfvszQ-cyY79GsD8!<Mm)p;vhbr7{D2-{pc{a zFE?HF<59W3bQ#i*)@%AQ^QA90{dD1`j-9!Ek}>lKYw%^TD%FfMS*E1Tw1Xy;IbltY zfNnex=)l$?u6$_h!QoxKIPHfgmsxl*|DG3v#oF}bcrQN6a_0}j-b~-&A#%+=tXSpE z*PA_ga*r#ohxMeEvMpcBcB0;TD~^unz=8b?*>$Bcqx&22)*T&g%TZ!<vV<YG>XDRO zg(*E=Li6KetekKcMzZM`ubTq%)k)BJB``tAQS7?97o8gqz}fc%+*h20%aK!1Zajs? zZ>O-U<P`1>J%vk)PeA3(QLLJL6oVa(;>DxGxMq9=7X`2QebN>5c#?tI@Y@)Zl7+5= zbK&^60%QADV9{d1d)>&!pk-M&KP(H4m+oQZ?tA#){0K7NN|AoI1{XUt!CGLN_;<=2 z;iAfWx=K7Ir9h7}^0Yr7%|mjsY|>O`|9g7$=xW9718n%V)|B&p>QJtu3XR(3sB&MP zKhjmWzpFA=E>hr{RB7IbmS#ky5^sIiX1{GF>|bRm;(2H0Sz6NyX0$k|&-kf&Z0M`c z=&?F{a!i?XWmFiJpupIxGQ2Whg}3d8ago6N4UFLW*&)p9*`H%qk%w*i&|s+t^~G~q zmf*o|y?Qa>Z#O>ZW6t6m25gKr;*=P3s!GhcPh!L|9juwq*n=nXT$wbl50kHvvTyn_ zx+;L)xdB{bA#};!0W^5tk463ZQo-Dxd(!;4^S2*cbA6fa--lbh-RU{WiNltQc+<z4 zL;cLyf0+>rQgrz0g$5rFQf0yuHQv}K^tL4$JX4@VzunUOB6t_WRkcu<Re=wiU%<Zb z0otzK#Okrv@X7Za+yrm5Fl!Gk8y!Q@jI*fjnhXuIi%9-_0kZGUqxtrE<gGi8V4j7& z^cn0wa2k*9o<iNhlW0D50__uy;n>U*cvgEJHeJ#%_ChA4n+5-QI16qKkKz00KD-j{ z;oRK2sCjn>Ot=dzt87dfT?l)p_xQQ(JF*I;*=?UJgU5-y##M?%C9UvU@f*$h&3G_V ztfe#LXsEBwBSJs$(K6xOR&%b=Gv?u&8jLHIr{PiwH$0W*w54*CYm=ed4k?~gmhhIo zXfIOcnN>RMaoU8#j$2Y)+mfZSX3R0y=d<T(9Q#^D<lgF36tTwpm(XMLWZ9M{VaX*~ zPI{=uw)ex?*<v_PCB?Awm<Y~a5z6FlLPLDv&;A#^SvkRtO-FiAqq4Ke(K_(zD>F`& zSTUf=hA#DXym-AU2LxF$Z<-}<o$txaIUZCz+LwPr1~DrwoMn+ic+M@HTULZ|Tjy}z zE*iqWGDEnnelQOo4Q9J+KaQ^TW^r>b+BrD$>Yg49KHo*;d{%6-Hs#15eI7iZ!LAP# zc_v?)Jx)k?s!*08Pn79AUxCJ261G|Y!uR7p5ZLw+A3Z9etnw1?U9*tcb{(U?iD!P{ z5ESPf!1ivZFjwvZHXEg&lVd6}>r-&|;8hs(zKk9I$%u_fLYPr9Mz|#7LRJ!5Zk)xH zt7qUCcLuJOr{H(>1hx)2i@hr^Va0?roJh=s^Zr{n-gX;ky$$6tx3PEr9fWSp!tvMl z@ps}Ygm{0zIKO)2S~Q|ms}V`7>tR$?hj6nm*yH#SnU6ogM*lZ7U8QN>DstU)WnS8$ z$*FBR3_YmDdJ!+)JQjS~!B))5{DYRlzgSq`3i*}IV9sw88p`m{7bWU7YV(Jh5o2x| zF%bIP_K!CE8>kW{^29t@E(?@r;dp7@_mr^fJ)vpsX@`=z9F>17a@Fh+oH;6%L1mF_ zn-j_d3;T=s5Ws~pevEJPV$(ENmYnRyyN1@h<kp3bKHcaRW=~HKHxBCK$?9(&d^z5U ziMCznqi)9o_ubiC(w8yqA<UT_O|SA14Ea8aMN*@<dG$!nSUHlrcE)o-SscH&4Pp3` z0R9~5%dKbJ8NJq-bME$}f~75e8auLYtvNg88uIIGT{^u}VaQck&iv8_?Y@7oCSHb1 zi`tP_Rwq0N?=bCKCDsdl#(z*DhR%45gK~FJ>~bCUZD%ob{XxjRKa5^y&*1RWE4X<x z6LZdH!71W42Fa&E&L9QF3oheRm&;Jyb{Rt~1b>`+5tn-=!}e(sY%U~2_f|4`d!9$6 z>=}6HpGLKaFV+h#p=O`(Mto1lqpKOX{4x`Vd~Tue;2p>$Wg%Pn0WxOhLgr-=5-*p- zdqgG7Gs@uBOYrHE5`48Ng;s4X&faQ3^NS|fZT*9$XHqQRB+sKpDy;9S#067i7?an6 z6N?&P>C=co{e`C@xdBrxejt2A6Lxiyq23uqeiazM|3eLGhib6dNR=^Z3RGAj!$&LI zv1Z60m^ihgKC}%}rne&N+HcgTw<A46ii>(lvD2zpvNn?68wYd6hylEO+@CL!`%rO( z2QNHvWq0F$VfL;JS>?z-+3q~6?9MaSd+~x=UykS#$g-h<RI~HtkC|@N@6(;*YFxNC zm5gj3#P<bJjL(l}OOFZUk4ao-JCU`<<2m?a0^{69(Iq~LyQ2p3))_yB2)xi`u;4c? z^rVKAEpI*T$dS?(oV(M6Ze9j-5xBT`qat_R`-}HizTt&=GxmS@2`T4~==Ho5hBhyt zA5egG0ng$7@;)m2+`?9y8&H%v2fNvavG&Vx%%6M?Pj_C&kGd=|Qyw95K{i(CXW;R| z>oDt<iaNI&sF1pWC%3MnZ|*gGcDjNl(@W5Zx`dF+mryD83$9&+-}nodGUz-kJd#j0 zIthNY7ZLIJ2EN6oW5v=8c-LoQZ_zCnAHIWntt_lExCe)t`$98)ii5qM;n4Y~xb6KM zrbl06SHyd$W_-lJ3pE(^r4D)WKVhWbhSF!!d{rlSuc@ur5z~PDE_FCNs}6FRUvX#W z7lf<UVv6xE9C4IlZG*rCKV(>bT$Zm6%d$s+jKEkD20#6YwF4RuH=+T0*MH*b^(F*X z{6wNn6Ha;k#?zobupBGJeT9)sd>Tr>r2h2M_Gj`T@NP8tPh=lv>ALd#X%~iTxHB`} zo8Mymd3>!OHM@aUlLIK-E0p?gLg}+&AeX-(H(hsQhXszz>f^<*F9DpAI+*q~!}xba z0#{C(K<(v;bVy5};j4K1OpNEaZLzfMKA4m1`*Qz5FIpM8aBg!C)-CJ8`K^L4J7`Yn z#l~DQP@nCknhdQ`Wb&xLh&xw{&4)f?-pG19FRwxe6k$uZr`Q^C4_^BBkT>`i9K1ws z5P1os?9Sjq%~4pNIgLf)nXYcXgYMs+!TZ}I1X$mNW_21|cms)hZVN5z9`wIvV`S=G z<eyH*PT_azz!aQQzlIIFui{zuRZMifhN*+Ep`Y9}j0wI9NnfEm>Rmvzy3n6|uV7a5 zbv!+shC_iF$j{Eicbi-II`uX#>=EN(?Okj#&VqVMHpZ(w!R*($P^!tt(a|rkuG>p= zKV6QzQB`=H{Rx8=8?hn&C%RUA#d4Ec*w<ELS<WZe?W)D<){iJ#R0HLfdVGv;5Npg& zSS<dDZ|c9W+wB*!s~WK<paH=hzT-qzJ$n0n$C8l^7}UKHuTD4O>)2)-j+IdRfixF> zQebEM2zpoyV$7HTUb!F0-JU_*<l)aLN4+^f_*T|w^yT)9K)#6R&ra>ZG@KMnxr;$e ziVfk+y%F5ke>kPTMN`IH=*`By97R`t-08y~!voms*+BXWOyD{{hG#b>u)$_59iEQl zK)+bVP9DnQJrR6zB#ibN{dv(7yqNCJrX>#Ct!T@r&z52hG+~3bKAR6~(#J!E{|IcP z{Im_j{XXGFeL3dMsYNfhDvZc^fw;5TFdlseizj8msZT0m^sixkPBLb9ONQ^7lW?v| z!s`#Wu>a39)ZZ?^m)rNT<N0mjRmj39$uqPmlwk7p_sC4GM##)p_^9&~_r+NHnv@Fl z%h&O4;&o8$W$RM$V@4YGd`!dpcWJ2Gl7^zD8~Bi)g0xweA+z%m9;98uvffv5fAkH= z^-af{YZ*|LzKO)ix8NwQIc?)z$Ov6xq5A_IkrUp#7ti2Pnu8-2&yl84gt7_c@Dq-N zxtSmFHQ+ts<KMvRX(@`l-y+Ac3LO>Spv=7*FVjEbQ|?EkXnunE`8w$S`ik41zQTI+ zS3KJ-IJ*;Hpx6Exn{vMZx4xq2(RU;bYec(G6Qs*p(P`XYSc^E4^JWO6J`SQ|dI%5b z3O_>J09MQQrGc#<k6#O<!`Ki8x<^oXRTM8uV(GCtn$|~#@JIJpq1}#P<)$(G89R#E z!y=g8;!lH}o>be{kB+lL`Dw;b)_TWs>Fop#+drP^StF_2C59b;4dIT|{_K4`fMzQK zdEYyLE5`Y8<25f<?r`GT&0YA-L}&*K4Ou@?i??p5FuYctoj3i3_r7n)3M$6{_YzF( zSBBz4Z!l?BA>IT%z~e!;ku@<5<&spS2HwE<hgZ<(mjqk?bGSYA0=&20!_nY!#Jd!r zcF28X@;3UfEI`AckFe>}2-%OVn0mDx%dgcVqpkvb6LXLla}Vi8H!&$Z0|!hpF(pN8 zr8m*1%Pq(cxrIyxfeFhpktxPSsNxL_@y~#RQaThCUx&)9t4Peaia@XH=s7J7Mp_v- z_(=4BeGB(R?%=UF8_%2{LTcz^RK-0-fov|WPR>W#k|Gqvzeez#QjEJ&f?i*W;agdZ zlyR@IJmNJX$Ce=~xDpnZ-=cT7Dl}cM#=5poNG<&&)W;g!UHcx_pH)J8TsbyYmLY5W zC$!mo#a_=wTpZYplb>3#KkqN9rKNf1fDDhtMDTC!5Y9Fq%HOAlFzs|OU-}OcdY161 zbP>4j>`<Nx7|EoV(d;xRf&VNRN!K}}`26HJs%=Q5@%?d38X3oJBg5$T-Jc5OJ`9;Y zfN`gyxy3AjBkoP2<+^EHS2KYJOcL1TNF4hn59LLJV0zpjErfS%uC6DuyLqtQ#FfeZ z-DrQ^k}t0r@tnLSM?F>M_fk3L`AhNhiDq=1RF93*YH)mRIeOaX;d@aY*3Hj>yxx7> z>2U{N%+gU(pN8GdsrdHnBK(IXW9sGe2no6j+n%=(mzal7QTZr5_7Ja4vk;eDgmbO} ztIPg@)hB5-YROanj}$8x3Qq6gJ6y3Sf$q*{=)d71Oz{vOhTRiBwR>n^pCw|=J$$Oa zhvmDn@L<7h{L#LRbKmdchd~zh>)%1HiO3&aGqFKF6^r(#pw%lCYB6cZx}J$XHFwb5 zmW34;v*CN`KKfQY#Iee!h&i5%fp&SAHZLFBl?tG`JP&=Q=VQmBLVQUoM4a|ZY_cxF zV9he<$h?N_pCXhb6k=3yKBiYcM~8>GFrJYE6{lxt3C+PTrI+YdQ-k<zUr}Y*h^lcd zSX3dQiA0v?JIM32wj#rvqnVr-%>dbGZh99<*A9`?a*Sl2Pb9sPBB>A-$5r>nGGWC; z+P|C3^HV2KqbQLZQWII<K8`&qN6~gnH1{=zaA{zW(7^k$gVYcvz8lHqSrd5m=M?&n zoX*$Vr}OTz$-KHGk*;b9JP|OQT~7_+G^;?WM7i^Ots~t^g+`uh%`<tzuj#JOq1S{z z_p~Z^4^&{-G8w)$l`v>|6Ed^D;^y)9*lqn93quRAeN_(Z`#nI!{rhMbn~4rbuVdxK zE6D7Uf_-DIVU6&!sV&OHv>x~I<Ygg>4_08O^9y`F@B}SMIT*C(6_(Gg#)?4=2$gBa z7O_r-T$Sc7(?3X$szaB{rD$JUj<4^_U^uS`?@m6)*-6i!I_n8)H$Fzzl?OQJc@IIF zBDQPiAadSw{3E;!{X;}MEEi6lpJLyQdqBT*7#~YTxArv1Z@q(%enOM_CmTN^vIURu z0DkKq3!lX^%uLI{oVmHMUX=?ekLNf)Cl8B9=b@uc9-fKk?0x7tDre*(tTh)w$MP_~ zTLB*Te~FMa#RwW#ituG+II{CCJT_Ou>2eJ^9H_^oISm-F`6o6DeJe`vQOAWJM>$1< z9<4e&tQpH3;UiIOiDBxe7|!Sy%c1haIb9OR13yNvy-xxy-;U?|o)fu#;y7+H9?Kc? z#_+)FG2GZ`9Iv{K;Sq(Aw7L?*6Qf10_ohEhq{6vhJC1vACJ=Swc_(TLW%kabhtU-3 zpBc}V@X?&=JDijD3$5x^C__vGSZ3@kIB6HIi|@%(>YcfIyD5)W>Ipol!ThI+^uH@3 zJl^fNRndg-!g?ro6B_QmG8}kXfK5lAp%M3SbLmZVotlbUO)0P$k%3p{H_>`L1M?=_ zLGP0fVXX852Y0-|ghREEdsPjUHAR90D8!0`WjM975}vjn;O<a|1yU^nlgTnHO_n_` zi}gYHero>w!o|Q=EHe6u@l(EFS@K&f@A?vf`Ok4P>M;%%Jc3L2m-u|B3YmMVapzDa z_J1nHyH`~hIQ<=#iP-$mq!_7Ra{=dj*meIl#vK>D!mqnHc=aAstsX!j{t@O*c>)jj zXE>#w3zhIZ<ap+zAUq!it@#+3_X0c2Ug61s*XTE<0!ptcv9<IaRO>!s=(0L!$9%`> z*aql(HA10Zv+zu}VdQlQW4lY!Mf`pSH)NT4SdL2!6nQySg*%>Tvo2bA0$0Rv&EFVq zYmDXFvf=coilg8DcuK7s#Y^pDXp%ghU3ZM<h@`P}ua9TR_c+=QjH72v9OtZ$XI#{1 z=K3Y@&gqdHxg$mx+atL7Nd$jJ4CiN`1da)q!21uTFuipW&smM-nFqsJD|{;>Lk2VK zT7Ukt9NaqJldI!g=`HkwSwaJ!XV;k@3p#MrR|9GlsPolqd43!v&E*SQV6^u;JUV_t z_O`beDg7Etik`z(?J=VEWx;gjZ8VNfheUYU{Sxni(;p)3)FX@;Uw|HuiZH{j0$SFe zF(I}YA0GU~GoL!R<yWBJ)G}BKACm6r&yauo3oTQGH|d@{bEwXh(W+cIRFNw$sj#>3 ztgJFurk}kmkHme4N|$o1JywYEHqY^F|0~#pze8MI6Lz1FV!J~#7N*wYgTU>v>wn`& z>Td*yyf6BCEp9C+$J;M2(C5!{IKO@-V$(xhJoy0bLTl=F;}K*no?@9pE>s8S3;$68 zoI4a^_3k1ZC@;n`^>W;P_ZG)~e#Cc!uNd3(6F+9Qqv5*@H~dv#R~JQQJeOzGQF&Gi zeyOwIRboG@v8q{vJ4D@s-+4`b*{Q{@0lLgEFyIzBV_y9hCA7RK7L-QQ#5{&=39(H0 zFq{rE;`u>%N*0EV;nMzNSh0IFbw-Mqu{(-cABS?y%b`pcdEe+&Be~XWEZ^TrVE&O& zOxzXEZx7<>CU~K0#c|v+Gm(e(PNYL@BCje6Z<4!+7Y7D2LuVlW5&5HEx*s=$^r8Ae z7oI)PjXq<nIZwfYzcY<^LU{EyTBvgCK{-xs{)_L68)4L`9z$o=K=XD5R-S()^5lH{ zsd$L!^CA{U-bZWOJtVHk#-|O>P^w&rIjY6jb*NO-HN1oTy03^{{u}G(%5YYOJj1kP z7=Gm!{!IA@S+g4K5xx%TIZ_NCslanTRG2$Qo93Gg82DC~$Cv5Srdo$3u7aaBl4rxJ zdIaeSub^uYCQmFu@YPx*nf$<c3&C5?S7fNOB0WY(G1*XxJ0Hn$Vuc)gYs<1W^e@(F zH{e%oov_K*VvV@&f+KHn)SwvhZ*no=`XlU%e+-}Bk8$(vQ>;9Yi}qc4&{^{W;~R>w zVtxszRE}>h!n+*QhCQ$47_F$rmHyfS$LO$K=*bqHb?LfRo7bP~a@s^gdghw2_^c_v z%bId%hAH!Bn=y2a1p_y9VwAECAD)WhrY+%YKOfHI)kC=Mb_6xjqS)LyhR!nuk31%x zua!peh~r3NY7A$Ghw-!UleixX=FI*>X!Lgk9kwJ=TC5do62?=<b}XG9j^_J^BPsu4 z6f<Xy<$!bJxhHWvPjyV7e|;RMmJj2&;gR%S8pdClK}@#xWzlIjKKaLqv0I&(4tox} zWzBE*jku*wn=fLOcww)|VO}*NdB9g(8vFsSo5~SmQ;fgv`S@J&41N3`L+MKaidR2@ z_J{}QB5>b^tV-CLe8Iq5-_WD?59E()huv<W&FoTU(rgXRTd2zI{pA_7x?O0<jhI*S z9myJhQ8`{{({nU<`nf(!bItfy)|iQ5!pCNyMk!HaH8k!IGWOKKC;Bbam%oPMtS?Zj zYr{STIgw|p@We|kro7W(WvT{O%v0fE15L^YYw_n%bp{s+4`q@(SIEe5N*5U(A1C2Y z^A;p}enaBjYS<RNLf_h4y!<Mj|NLhdVDKFM>~b+>#dFMY$w&5*VqD6q!k^LxSXoNb zFI9=@gERy$sKrm&T6{%qhAh<MpB~0MCU8|?Ukk=mT2p104X+-v;kLOpv`w{Pte-6} z7<8rKPCGX28ODbl!?~%;K=uj}eleQ?oGRw&_JARDPmbWx6GQ25AH#XWhjYQ)D0Y1r z%9@ZM<~jy)b4Cc4U5eyS9l`nanZ$vIrc+8MktsVy@#yX0OstM$jO{4qtQ^BX&0{G) zdmJw=9mmfcCp>TQ{4GC}@5S|M&I^rFc;LLWeYmnqADUUXQ?HAo_%@yClhc7+%7l+w zc=A1!{zBJN)S#@bg~5y}DCm_VrSJv9>jXZ!P=GN@i=e%`0GrkGa4}c#EuHGnS73<i z-DEh*T9!WN<R~w^tGE7WGvk~-C%o5T;&C-*PgG*@69rMvAbi7j+i)dEn&o<GeDK78 zRk?zva5Co2g_=xzs6f@v(%iSG9p$MFs1Ev!<v*)&*!U+ZHp_5+l`4xHbT~=W9!PeX za%-d!L*DAMB-VgI1;*^S(ui(d47gTsUdcD~xc`POO%`c!(REcSUy<Xiy{*`FryfcH z6>v;`j=ddn@b=<!{0+#*aJ_ug=jTBxzX1J(cV^<$S}dB^hMh4YXKGPmU!g79_fzIZ zWi{^2(52r@V_IukP}SLrPc1t!=UHcldUj%<V@EEFx1v;@HQlyZv&PzzzaGc2@KgkY zm4dlK)UgfOL~bq&;7jzUTkJs2s}JMA&={T<Uh^fBB6;cMAdV{UE9&S(U0P89zw`}d z`K<_c=@!qt<B2TGPoQr@9Hj<E@w~_nzfO)}7)G!|=}6XRjN#ab@tj~Vj*{9Dw6Tfg z)6`&EZw}yvseX)n;>G9dU0EaTNRz;B9Mas8f4>`Y*jS;Tx2rN%cu9K-p1VV3J@Us_ z!#B19!2%=2iTrSKsK}QxDlpHyT;QqKcx(4b)G4;YceDau9Z;pqTy>gW)nu})9<MDh z<?{p!?%Qp`t>g7sV4=rZVw|O%RHw73CFv>jJ?A_nKKQH6J6Fy5k7`FgJ!!;cVqT|w zR;Fc{0#Er$^X;fc<VF2JKur@C3UARWq1}Wl>vEut8TTEsrcAUo_wBHxweUwbC0J79 zN@vFHv!?SrEB@2jl4;r&G#xB-_!Bzx4pZZ(k%~MfG{y4nU*Y9ZiWuQZ{juRW)~Mvc zZ9+c2EPa7e$xCeQA#{<U?@(jWgs>&jH1QH^%p4i63lihOO=!X8!t<}J&#s4zX(-i! z?LUPtcTGon?XqI?x(>YAU_{$iV>X$XGIE3=1GbN%!jUNMdKSWtLj&lf?9FuhKI|L@ zwtVW(r8~lDd^U!`TJcP}Ka9FU18gh^pw4eE&fVZi&DH=O3=L(5eKd>KkK%;<kxaLX z;*;P|4s9IDlu5(5|3@^Z1`g->wvpWSb`+mpkLP1?O^tJdxhW@vc1!v**Q+m=%J^{n zFc)sS*@cN8Eg0~{m?JyuFh5z9HuDrYY_KeC727b%rXEM_s|B}Sj)NJmaYe-AO%-oo zU-b^nqAp;UsDJIhpawezw?gHd$Sa2mO}3M+&_fK_<E%M*d0BIS#EvuUY<N1<iVdaK z)N8Zkt~W;9YOKjhdsRAoQ|5LnZ4Qg;z}j`4IC#7nP3m+x*+hd;2FkqqRF*aJEjY7P ziqYxvEPJNNi(7<7Yop7|Yo<&v?aWCxZ0KHM%}*8<9Qw(Wi^9#hY+^^AIntR+Ev(6O zOHP?;Mw!P3T<NF9dr~S)6L{0{w-{5+!jmh!xwE#u5NlMvzzO;AQ7c5AX)y{kN^pF~ zTeze&AgQGl3L3w0@^1@P^pxhUIC)NasKj-rG>CV){Gw~fwh`i4x0v%>YzGc{W=aF0 zDVvyU@qDZf`<>9F{(@1wIW3yLlS8?wq#vh#?ZbZ*L@ko652wuy;6~v$Tt6;?iq0cA zvL=>#PlwWE*#Ius?aSIO?)>)7o4?tg_x6Nv%JN7S`wgSstHD&14&uV*!5p!AD4V(q zO?p`rOKW3TBoSNHP#P<Sazbkm+jj=gtuTm<Vtw(r>ccwWqf2_+iEC?3SUpaMJsngz zEJU7OLO+*V`y1{Z8{qZ)GyW)6W4^;1$Q>`mgJR*^eNv4~!LzRzRu47r2CR<!hI`6C zFvCW|Eh2_%Owizuz6QLzvjfvE2;Z_>H#!A5a#6kTE5+I~V?bA$`dd)i-h{dD3|KTt zn+sF5cw5(;+eHm%wsQxL%h#iZtp;Q3lt>L(#+gaDeTo8Ki~11hN?k4yzKU`4OoZm$ zfuDPH=E-4}Og1y)#)U@Aan<3qI(@-;8FSoPGaj36!8GCR^%Z_l&kuUk|1I(#4@G9j z3r~RSPXu1979RaF+|w$-z^$S_)8r*eV#FATdxg)DCD{AtEfxgSp*g1>g`GdaX<;Ms z9sb}`r101tmJvFR0-w%OW2bSN+;LO*Py|MpP^ZVW1v=FIDe{AAWezP>q)uNY8qFWh zZo`HO|7tKB>-w^9xfcWDUFmhWH-8%Wa<<L@zKjj0@3mo6?ikAt?Ski@GKib4{RED8 zV}VOAW>kT#Uj4Z!CYTd+1~H*Jkk^CzQn5LZ`<(`I&#hoCu?S=Bt1zxQ7E0;E1NiV^ zKMw!v%ON|wnQuoPvlafOP;f$#6MMyVroM@&IdIqF@y)_JE;x-mmo~w%HNxcmH<*>z zLigE6gxz_AO_rhv&*v@lHho6d>%y;X+=N5@{@~_pDOxE?Gf-%1FKp#_WVkY`1a8h4 zZN~9igkROfo(|vL*iz)lpoJbxO6$pAle+TBbQ|vbEj-N&Ot@BFpChN5P^z^HXC-%H z$CKs^?P|c8nd;oJLDY%eS75fZz<E0QJRoB#^biZ?ORRZB)`n>_I?+yOo|;j*)cT@9 zvlvl}lc>ykKXsyuF6kz4rl?!KFY4IcerVBruL`>>$a2h?W{h#H#fO(wa9LA^&GW^& zwzULDn~QN$)UGXlFL=THVrYhyB6xiz@*Cbj?O-`{hkeGj9YTYaZpJ;OcC_V6bCbwN zLIuCJrA>*I8<f~Ap8I-HAKIsz0t4&iShGQ3ko5|zPKxH}!QqUt3guU&0G^*FYErtp z@c9xK8jtXzt!Y1c8-{S>t_V&kiR732Lzvq*h)x6i*}az=U&J}`(Nj_XRO`nyQRh^0 z479%3hXYUeaKlk@^q;<Twg_V4w1Hf#G=Mo?fgJY4kHtCOJTB9l32`peTJ6pccf8p! z$@hOzbmnnAr{5cH5eXqmO8ZJhn|3YF)uL3gv?Eg5k)@EOz3kgyFc^$67&G=|W_-so zW*El4@B6L@A>?;{fB0iwUW3o4_xpLyxzBxHhrVBWljd$u$_Qghb=p%{ugm@zZGw9@ zt3?asjJ({Sat73^|DAlM`YwB<zJ9r{=>9|<iF~PilEl-V^if4#_@X?!Yf@9*f{z>I zGbXpezpfplz8K5BU`5CCjtrgdO3W5-x<3l$h+ioCA_8#z;>}>0lbWA(<+QSAgm}4z zN0`xYt2?V?E`H#MJ@%5zSUagR!LDs+2<psbovz&8Z;Hz~OBP74)yAy{S=!FHEw{m6 z+l;G5UGe&@6Sj}q@^ETPCjO|+f5TfbHL^Xs#7A1@)`bQm@dc-}Vz290Ww79lx}^13 z{T6>ml}Yb8$?m!e{Pu=2YIjowyu6{>ZM~+FL$0dO#n;uK8`o9(jO)sD>vg3w{<;b( ze54xmU#XuO8r6|szo;LIG_aN2h3ySZdYWi5NAhsT&uDT$Tbr<MEeJT%f-3Qt1P8{` zqHTZF^+?vO2xUsGpX5E=c{bV=%MM;V{Zo9N0sYu!KA0sX@eF$yNB*^b+^P?y__P;h z#jY&1^pgJFhpA=W{B_Nje>V2vyWXMPSRP3Wofy(fVyTFT#X#nRb=46(NrMR805l6c z8CTYmb>`0ep5R7O-`?!~*OP4x_S6pULNEVzL_KZEZ=w$ks+C%BM3ZW9p;28HKaS(e zI@PuBQ#C^JTmNalRNn->Qq2$Fs3pI@S8>r_)Y@`Qmip>2SGzT9BifNt(UCUU#`q1h zVr17ItW9^P`i?($(nFblt1qrU%dA`GrRI)(sP&Z`&vqBq&T!z=a2p0Lb0)~jgM!K) zIDNLj^MiQvP8x7K(_B0})@Vi8Vq+y|OAjY@I=WI{+e`c{j@YNz5V+HV>TM=G9NL-e z{d(BjYLb0Zg9))MS=GJ`drI07>)D32p5l#iYEtJUgO+doNDUBQ++Q*q&3q==HH%wn z>*?F7GWxb!HR*=Bb?v&USGUxn#lr7szNx&r+*IS%-&BdFj}*c>2v2*XOf%jqJNqW} zr1-NMa^{QrciR`Wd7b!4+%>4(r^))uS`7GC3q5%z_s1q;tv`@C8)Er)VFZ0A1!5EB zfy+}TzIo%uxK;ifkBs1lwQ;Nui(~hdevG)^mxB0E{&8`m^533(Npr)p#vM)3`dT~- zpkZei$KS+pwnZ`{9}U6nTq-*(lWFovVEE(#j2_;P^j2Zadl`U3mK$y4{fa+j&FeZF z7W`q&_LnAj*&3i7tcRs!IHJTKF;RSYhvYnHl4twWrH|@H<{PzqRh^0-^it_&)~j*0 z4XTCDTh&wiIIAu;s|$TK>E@_IMqVqLbKBz8!hl^4U5Vdq%`?gF70UZQ{!1WVXNPf0 zGWl1uV@O%pkH#)xWQw2Vn>ug0*tv7fPk#O}J()Y+o%36|vwy7>)gdN?<aOoR9ZRwf zbZ5Lg$BUM`;uGP?%JtryO?Bt;PtIH$V#f|2$yN9piVskq+?duVS54-<exstgHL4jW zKC7=wzp5dY&FYTF2i4m4rK&IyCQ8L)<sS1yExz?g4ejwjU7B=H&6eET^29sp@~xXn zf5R>H^Sj&Xeba4qEcv!_tiG*=JiM<SR6S8mQ=hATQ{;X4U239F@6?8~@6~qoK~44) z4MMVwb2@%iO}8c2+g`jQl6|&K(qf0{0M@LCCGk^#>bFEoeH+5cPQAJDxjSd7T-bj} za?90WxZjB-?rAKAb7AfGeb{r%3k$jPhQ{`wZ&z2Ic>0R3Jp==nXfjU^r2WcdnL(uE zTb0WSuRJz1r_=gOJm*%#(EMXKCH;cAwayod$*%kwYlqh`Gfo6`#d41!VQ)JU-l`og zmF*}pHNe@j6I<sSkUy^jizl?EOf>MTUX5z<+XmGjo}v>2CF_^<PPG<~)Yc3QzRqny zN67<b>b2(0owjWD(<gg|Xf)4^*kxkLWPM?L$c(y&_}TC54&`ESUw+#VgPrs!Z-noV zxUDbtyF;jN=}%OEHy=lO(L2bSlt>Sn0-czuXHV!)_EHZy&_1ju-*@(r9H1|u!9GMh z^5Cy$J-LzY$Zt2zu?p<M?|V8h@Q+qZ)7E6;l+P+6^@GYSd!w$^*D24X^~$<`z3Nf& zOs!h~R2^9GT=}i7Q`4<w&J+DY<pc=XAmOpfy75pYZ+@VXUByfP_P+Z1;l8@t?Y@d0 zc2|6Dca+I@57fnp&(zHEFO=Q7I%PBOwVEY!qA8JYRdw?_^|JPZiktIM-5dW&X@1|V z<_^-}(NrzE3pZuUix}GMSM+TKxtGHje=CSSyFEy>b-<;!qi`@h(ccrqf6_Nv{~67$ z2*s;gZhZU6mdoj)<>mAsUe5>fD8-tDXe#{0lTthkr_~uSBaaWu#&cwAJ{kSQGxYC3 zR_aFboz$A=2YR#c$DTw!u}Ay11q-C6y4hXwPb<6NH>3+I#6Pku*Ot)(9XV~{K>z=& znfy~%Ry^oHo#<?yLqDmq(zj~woHy!^F7MPezfbB{Psz0w>C)Gv9Sf^EP?l;y#aa0? z51Qk(-jb!CEV%W(1y7xA@X>H)*x$m`Fbbr0S}6G!`=T4(pL@Sb&O$T~lQaD|)>~LE zkx<x1q3NQCyA{ZWy<QCZ<c3kG2fxbCd&#`sqLqnfeo-KOL%i8vBXz?8$<8e`XXFw& zFAf<Hc)ATcD|86nDd+IdS{O*yUURn0K##vu3l27@PupLszk}sD?)pZB|NKt9%m1YQ z2>GaT>R&5QGx3+Td9IQjpQz>!k5$W*7b;eM*3OzwR6xWdbx!6SmmKe_ZRYos`=iGy z$?Lhg6ZKLR9H>`n+-vp8?~S@(^-e7u+NdU|cdF{`2lc=5uj;m`HUrFbxp!Zmyzm$@ zq#k$j^k>rN-uxTk&eCBnME_w+VU;yTSGu!8$BV_y!L%&t%d$1WI45++^Q;Anw%Bla zR!=6I_F<k=1eTBcGiZGxllP|4$~%{gzbB&qx`=v>TwbINBUpGhdk6RBZbks_n%oKa zUw4*!I?_DZ9<6RY$=v5cpHbb>v3Ftp05|S_l3L@xUL1PpjMrE@?j1BGx1<w=b99+6 z?|b7y@xs`=R~mWm)x_XtwW?N!tzPn(wsaQHQCEIUG^SMtD>g25BDTFNLD{aD`@3R4 zy%&4xd$Bjbo%_p#t06hc^BNKK*w>G4#=>@K9?ZWp2eVJSQCm{`GqX09MYp5r<t)sf z5O`G?NJ(=bD*}V4=pM}2PN9Tm1d}k`hax98;{SFc`8PZArAO>*X2ir|$;wX<4~$J~ z+R#>*8f~dbY|V}jI&9O?rsR$$l_lCVc<FHcmh|^#Ejcazo=3vT+LlwNmVSMryw5#W zQG4o?xza-GkOqH?FD!fM6BX(4SUrq=sD8eDUnQ-2sD2vyO#M*uLZwZwQ~iH^rJOSx z)aY4n)XhzA)yeK3)YuJQRi@IWXlzT)WVe&7Y-jeTiI=#K_;}>A<mv=qzqmIimi3f? zfgP_!zc|@SGLT<-aY=G((TyQ!obu+|4Q6Ddn-N)VN%bu!9NT*m@w+d5azgp>*Z>ZG zo5IImvN)bJk#-K__&zxkt;i&FKKElnLLgOxz4*POD~6RG^k3^q#?jvVZ*?Dr>Gffe zyEhkBc(e7P7rtFQS#Iab4_&&W{m}x4j>7&jG@#j8m<`@K=zg!s!Bfp@{E;TL>q@ig z`@Igw=jrq1qxcU`o3qQ%nj0H>5WC8QKm$J>*9Nh7Z7>CQg1NCY1h<}w)MCZ1cS`Ob zxbm_uM?xisy(*rY%ZKvxLYm}qhEnxB73cRUq)$sET>9K`#!+N$?aPeXz7&6n;J$YR zJL*CS9NC9_doOe)+co@+J)Q2FW9edqT}nIJ-qL5nDFf188PX-c3)fAI=%v}2#kV^W z_O2r~Upv$LnIZp6>`0&0x}5p^RsA0PPE8;FTp49QQ5|DnDI2Np{Z_Q$!pAm5ShS$T zzEO3yc&b7}#FHw|!NZ{s)%K#NO6$mTwRYW0b*IHE_4R0j`u53NHOAnh>LotYpMMZ- z>!vP#&iZUz)Sj}Cj;xf=RXBYB)>0GNO^Rg0pU||>k9-?vDo=>UIlzopVGex!%Y%zn zy*c03mUbJB*g2>hm+NgQ5vGCFS*e9?_+xt^f`ymjSh+ftd*`yK>^G6}Sq0pAJc3F4 z;?b6Rvd@4JM)dXJfrj`--i6|y9gSz(SkCQ;L2p?!19wDlCnki*ByTpqbz|r5o}`*e zF0smryS+{6d$lv2Znh`vbsPFrOOL)>OJ<c{Re^lI%ko~eiD=K$24h~HvSoOf<gH>o z2>Iwu)OyJ`Z4aVd|4@p~g;5?NHOW`$Z|8>7{&s}iJ$*SG5lK#qC~kZl$n7yhxP4Om z4_SHqcq4}#@k@mNJd)Xx&8?Xg&-=<a7UjkA)HE8qJCT_GFO2tp1TxLoo6*Z%$XjQ_ zqQxd?b`fn+=0}NZOn5fig3a5l`17ze-OpKZ^P*%ww+qWC&=?JwAGm(of#2u0<<y-P zSh;^v8z#O{ufyt;UfwH}(NT*NAKGw#eP{l8V#pd>eH<jmKmF|+)nU;SRqOOvdEI}g z_KtcY+W9jTy6m}f{H;zkc77xN=|;8uc9XLDUV}-SbU2vZn&@IZx?R;}v1kS*KMX@J zFNK7}M2z|mWT1XuN`m}3x5=4-8J6fvwlFK!nrSu8bU4|At+8DQZ*9cAvEBG!;w)Jo z9}Wr=<zqo4&*t{yL0AI$ndv0#EhPC?5&4%2*nesiF)qUyKRbc(dXen22_UsFnC(fz zK3bGQSkf>opQli2oxr#uQk$D9<~4ZJ?}IBvdtBJNyF2qg+OR3koPTZ_6Ba4V4*d>f zt!#s(aN`n&YjN;zO<aRp<14jeie5K{6nE!-vOD|3Jej!P8)r>_w5JMR>rn{9wuPc* ziN@706btuoerXj&!?=FJi0a2sy=dlijw3K21(lM?=YwMy+F}BZYYV9_&*u-z3=aIA zip9=Byy+87iftr2M}=`?vz#xx{P4?jXOWg8XSZ4MYqlBl>`eIKu*{sAZ1`=S6D`iU zuymU<PnJ3GG}MedGnpM-*5|hdU34GmuxN@lJdkJlmE`%Y8dUzi*GeZy1MB^5IFc;y z-g^tYT3YdQiQIGM?U|LU%~zjSYWSKbYS;Y7s&DpVwdvp!Wu_slj3+OJf%IC1`wRPL z;z#A_)2#L#)?}fT=qB4*uuif%@d+)d8I_LN;bCmrn!=-^LG+v3myn_UGFx)y!X_&m z!;M+iWQ@rUb8;nH_Ap4E!MDN=@in8rcz~;3_u&_f0oZ&_Bx+GAtq+Xgy+a;bohI>i z|6~?+9M6k6dGubIflGD@&IPedTM)w3&2sMc8X%mrp)}@a)8R}y``0Jn^irOIQ=%8% z@a5bu?);bDi&fp6F{yVXLf@7(4Wir2a~S1gK*@}D{N$s{lzBRgysE>XpCo(szB9|Z zTX66<;W9V~!z0`s&vssvyZW-e*`KxtgvoR^h!c{b7$OX|n5a-p>mrzNSZ1a#qOlE* zW8Hs)Nst-I{kT!AK3d3<Ig==vSA_kgu@va!u()C<F~bLmeky#oAV~i{5W~Ixw0`MD z>M{@d;Ks}n7yg#4^*Yg{+Dd<5`FjtJb(4E9MS89?a!#b$Fm6*9dXAF}mDFZE>U2m7 zYsu52+PI3}@6dyH>g~XH>Oypr>aSWd?8i>*JYz=IVPQ`!?15jXt@!@CvZF&MoIP4$ zI9#$;L!Ky?4NuhHx=)mjp|Bz?Un;}duhd-0r+o5lQ~?v^ENIuPUQ}psKwlI8V;XQ- zo&ndP+;9``*pg&o(&PAMaTrrmec4&#MA8*Y{+67NevbGN<V;KMWx#X!)&7<d&ckf+ zki2->E5(6s!b;1GVRolDnUyAB>XpIuY2)#VolHd91jdS&Xz#d@j2DgIpxilAk-4Ph z07@4o$qaoYGdkoEWs*UkA&D%z9mCq#a7JVW;&jxT5KS*GhkKG2?}o{`?pTenB-gJi zmxgu1{;)m)C-o@$r4{>5>u^ry%dI|kV!4YM%U9ZvveALnPkM5$vnQ|3eV7p8$CCkm zEWR%1bthk{ehK8xc*y%Lj24xBsaO+5^bc{;-^n~{*+}N3<uYpc1dhL&OwSdQx%z$_ zYEBMEkEJnemUyOz$8x<noToz-8bN`)ofybsnYSId>c@#0URb8NawD}ncl$d?zQ&bE zJ0D)Uh%P3+>7#4AF;TwDjb80|(kSzy*M_9)$@hDrCEM10RW^}LDrDjpb>^rhUE~g! zvrgvCcP*)rdNWa;>phu0@rZRG>Y#8^+lkLbyA7W%eNb;6JW=1@exkO`e4^aCK2sTP z^=g-R%70n<R{e7Cy~>o@Df0Fg)zLtMpQ5!G^0N;AY)HVkI0>zv60kWJ$?51II^J_< zVkbvdMOe~C&arv#I<vB=J^B&C-Z|ZYY75cPCCl7U<xIG%JJ0)iGiyx{9||M6Gdvkj zIYT$PkK?zLDUw4ON7V3K4t*X%&$aRBg$*P`>Z;RQ2h$-fjqSH`=p7(lGx>k?mDF8l z`*Z0@1TU^DE{_c&c~$_MC;LjK+DCF~ZaiLL&-XpdxR`FluW225R4H?>FT%766YW-V zNMEk#@ok|2zo@P(`pXjcHcot8?~dMJ$w3u*)9sdInan&nI@BBQ6M^{Nfa&Jp#P~!B z6DO9WuY>u{XBY-ogxB|5KJ(8_;Jf@{23Ss}vZ#oJ^J8dpeH7`3hB8+Ahjnw~(CQLJ z>cwy#oeZODU?|6{gQ=+UV^v#sk|jTBd*78Mt)&iL*_$1QdUDLnj!nmeZzvhMd2-hd zzGlJdnr;*<GN5Q!OQ{jRD#xBu-`vz<*8^SQbatdeNH^@>+j0C{FV-eXrdu@HUYp&y zzQBc{QFc7^Fy{4|RutE~RrkBqsi`BMiP|k1YTQeeI_;H;{Mw+do4->x&b?FTSA9`$ z!?ai@y^6tqdQ3YhXYbKCjOydCGVjZ^F9B?7<Hngjj+pPZ;?8Lk0^K{|J)<=*|82vx z<sHz`HRO@ZM@RIsWA1ua5;goWXb5NEp#&^{NMrt+94H^h+C}4-e{wXNUu09<CWAI1 zBQVGr!oInQM9fQOr>}TR&y1n!ULlQFvUn6Sghc-V#9Wsdwv1J#%?YGXc#8YWMTcJG zjrJT5Vc7NHXE_U2m~~~A<WEfHd3+>uncI8BNAp_vueNRZGO-Oi4!7m7mm!BoTk}Jf zux&QFaxBE1SsUGP-0I3AnNOY%^r3EHplCRu#ENdw|9BiD`Xq=qDg}LubcQ_2;?1iu zr2aOMZjDoDaGEOI+DZJiw2;(SS%ir1HcIB>lj;U=eRB-QrbVII96@4&+%I<nXrJlF z>n30R3-_12rym7A?o3+iz;Inlwu_hRj*$&os~orzXoY_#V>}$%@m6NiE{i08I=uyr zhPwC&vuEiQQx4XP*TcFy=O(yQdflIGa;Jqh`x3OqlX%gn^A?y&Ca@ho!gdV%(x|%V zHmJo{>r}q<2fe4&sc*7htDWDyRi`_DP>)A9t1Z*D#lPR0!+*6WqQI9op`rNbMNr!^ zgeObA(Xs7Ca*_it%gpf>UyRG~mYmqvl0-Rs3v7)jPLWzb&f4VR&MeFmHbr_cCI->s zu}I+W6T{_h&tqx+7y{Qy&Tvr{FJ@-&-K$X?8InzG*eKG@4JY^IaK25+l{#tyTeXUW z&zetycvfdxCU8meCzcyRx%VlMEA#yD+2_Ui(B6doB%l984+fmHB;u<nKW3Tp>0fhJ zJ~0trhzUn!ezU^Oh+Fp!a5d@3(Jmd??{C2Pk7l$qbzpnG%!`M+;2Q5l|2?8{H@j2$ zy^oytfo#`R;<pGV>2M@3#|%LKW(t2;k7P?>0XgR;5<Po5>paSEu`I>)-V}10#*?{9 zJaoI#g&UB{;^FZu2#@1rVKmbW`m$EuiI#QYgiMnB=0wF_<<ByAcU%_>XXarq-n4c{ zf1VqE&T*tM&w`()7&11vEt_<7XucsHLA_R7S*%Bmu-`V{H^uFOHDz0RFzlr}4(>jj zF!U#Mgy<1dgzYignH#UnS!LLPs$DvaUel}&c{HlS7aPQL^-BGmA@k+2^{Us*H|pnZ zA5?6jaI+J&L^o;4v$S@2=L^56Yj0-%DSUx|-Yk65iz`3&piIM>>w~)Tu27E!`*aBP z&_$zvd;D&h^7ytREj3+P-`E?&I{{b?45KnJj{CuqQ;5mHe^0J>=&}f`7JqW<R5q8U zG5oJgy4}d*iBmqQv$E;FGK(ciV;DVYB7gKA&+$=Xc<z`*mACZe{o^^_DuzWp!_hnt z#4g(aB8+^o+U7yt#U5newi0c@j#&x4So)_k`Bps$@^!?*){c}xR`~guGU}MrF)_wi zCUhoxYiB+zHQ~0a4XZobV|UY*2G<^>$@6eUco|*Sd7`7`%c0y*-t~*&SDhrB|Ch$$ zQ(3|h9nDONsQz&}UjLNS@lqvwn#yU2oX&TXi$oJH5N>-WNq2@3)hCHh?*~%WGoHCS z62x;fm{9xv7=DUij#UUta{bYlzWeu80eD~WV?v-OUw(CD>}oSwyLQ5Iq@H+tTGOed zEq>p$ry{u{H*OlRpo=m7!bab@%8_NKTsh(BMbE<CXr6SV+}N3}@;+847<2QUut~PG z;N8uS>h!+1Dnv4e%^w=nz8@QudiP3c8@*O#GFv^~>4Tc~!xuH8on+CyCBtcK#j}e} zbUV|F+>t$aCft{=t1Vf#)|5{7+fv?38~cemX!Xz|H>V@H;*l6I&w*H9VajX{!1_xR z9{m$}-DW5!_GjRFJ_j9>QM?(HN|VQ6{G$i+<@gX<dq|DYdNeUVkLE<bJbs^_L&&>4 zmUYNy&3N&bjmjbJSg!Dma@ewV1iPju;(E0|XO{LOOf)PlBPFv&FZ_kI<1xja*P7xt zOABGqIEA)k;6H8kVN97Te~MSqp^rTujk{AF<;b6dg>(70c&Hn@U_8>4ZI}}$yo9Wa zwtP9|NYFkf>Sw!h)uA`LwL_>o8pUYWIEo}^<9mJtT+3nR<*{5{JBhx7%lIe0n!RZ? zq#UZG&&*PeT21ES*s&Ol&tl)y;n+$xBh)Daw~HAJf0oAam5J<o6wAt-e(3%lLHj}S zJh&=;O!MbwXHTw6|8ljhIU6p^9UIq9W^wHqsc(o?x2{;6F~K^-O#D|CObxI{f2%W3 zi`~gs=t@&R7h=}gaiho_n-F8+&2`}8AgL!UzNn$o8r9zV_iBh}(UylA)ur=|YRB!j z>hSpn^{33%ie9{tJK~*c+v~Hcw2+_gcoTvLif>0)Q6ryNlG4fqKMf<+)e3*oR|~(f z8a)1_&G3-cte@3Ucy^|AzGa8UL08g+XMMtb5JMlP@+N&G^HQ^zJS&shh7p**N<fvy zaC_MRy824SbYmtr3UV3Xl1r)cC;~>O(<&!}u46MuG8>7-z)S{d<dgn*Jl#(gkfA+_ z_$R~g{xgxYW20%S6T(FgFE*c%`)6QJZvWv+#iA&h&JUnwdK8rlLUGs<fM=sC?ruFv zSlwH4&%U(rbHV4G@Xwkp(2_g#zOvw$n<e+`Y`HG?sOsW@&ShW9;`}I+duQXhV4hEn zqQl66G+s?6K0O`7{9OJwdmLR&XYh7%6)*K>lJcq+gR51v8(YTf&yz9uQSx+`vU%;7 z&*zil(Qh8dqqUO7+%SYcMkiB0C7$mi;$-F)$*G0Gd=%YE>xT4;((C^&jIi~Z2J&4R za4591Z~{$)0b)%npY9yWb0U3?6P@-61Lj39qBD9CdE0??>+P6cWx>ru9ogxwhu&f> z8pJ>OwX9h^dZtN9gxm?V5`Kd=A8t3RrvEjmbv-^Pmrjl9l<!-0&GfBudGS^~*K1Pm z=Zeo|U^fu{u=Af?*qvd(nqA_*6g_*(EAhfFl^Naa7Q)iiBU!wP8!vU^WxYMKKe;ot zHjM2v63JeYN}zEf=HfLEk4<6K(g9?|M-x>N#pLCKc_Fparod6cRnFnBVyO>Wjlj}2 zg(Yi~>3=1Ox}+f#4$F{vZ5|y<iumV2A=$opxZO<0F(-+r>L`47EAn^vu~O=~6X%50 z`E3AhUm}?+x|2y=66SBB$?B*WYT`wR)ZkrP2MO<7ylD^IS@@R&JuK}QHPe|}k30!# z=|cWhdqS*aet5no`hEQwoDxpfyMBxs9K~AyNYcNH=Ih2m7+McwZCo}!8w=^(YZ`rw zD+#cji8P70ADxB2S2enuOL=QLnew9((U?_)S^X4-3@yekE{|{QGw7u!=ffw_;I_r! zTO@hRa9?bKdJ!+PrFSjNI6JW`z1_R=%>yF}cL+mdh$+T<92oG-l{Gg#xX{9bx58?> z>gmLZG<&{tvmjpP>*M-#A>c?GhDCi<bJ}WfX;Dkow{L?}ZhNlnGr(|dC;nQ}5hwA| z#R|V<@cYjy*0o6m*L_f*Z@gEI&W&nI<a>3#Ogs#Y2E4gpK&Q?f(67}aPrO$ZlE2;T z{6+PVXUbGqIcr|%k*{xn_OxzzG}$xfx;yR`!Hn?;BV<50e_MpnCoh82Qz9`KE}Fqe znIp$UQ6zPuO;kFcu1YSgF`vd(QWJE}V6jOu<8Q`cIWUeJ1}Pkyk<P=wY?)UTve0`B zlMiGuC2Kf)eoDdPYyuw^#B%>WbWHYPM~N54Z~cXz7RIQa14%nDgk33v(9H{{lgt6l zbHQ;>lyGceSZiVaw)0@)hMw$uDXc#mA7MfT@~^ii=Ixv*N)SHUColBl!U%02N5kiM z4w|IVXLc$&#R+`eo64AHqqs9`9LuLoV@8h(%AQyAd+}^CR?g*S(JXRKR!V<b%7fO^ z+5cb~`(kHc;!?t@qvP0KoG(2>rs$W_^DOAk&>v*(`i-AtE_zbYXiwim4wMhGC%f4S zBhlr*TA4FU>bomfd!W;?H)rnpaz~giTRfd9JY*?8Oj8_ZcVhcGJ-+m5MV+s(St47} z=X!f|E*kRpm2L#zvSd+|c(N~Blcr-zv#_X=?OU<oZ+Q-8e^HsjLfV<yq}KNMsJ49b zUUlEr5?xbW0ux&EqqQ!hJ+!$I*{FV={7!Xo)DVqLn}-IH^*Ys-^+!7MQoPogqTe6g z;>x*B9&GpVBzu7;JJP+F+QJXZ^?pp<=gYstg}0v~+R=k}9;T#=XFUf!yU~0%uz(8@ znT-1*MRvi&(sVe2BQFN<-@75K^vxpKQs&J+70}-zkJ6+pI{J>}{D>i3e;!8<;c{0; z$Xw>UqA)p>OPk=PmhiMcq@uMyi5)i44B8XHv+rU_JsnTttZ055uV~X-JWad(IVgQ> zUVk6fu8g3qO%T0rdQvgNl~IizEUgM+icUX#-^sjae>$TiFOgZCi@t7#{C);q9*ia` zXflr)OX>b?CG&J@IqWbO&&avL&zZ^hBder8DkptQ8N1h&)7r9(n}?_JdRY-&lJe1! zo;gl(8<Q<UseSJ+tWF;e9QG#dp@(SNJtgDnK=WM(p0{&i_9F)(|8=G0p*I<(evG~# zobc23%-GzOd?y3Ors+#>u7{y(D{RlU;gGHYi_*IBt*<>!C!M*I;flVN8y7k`vuukk zMGsB*PgsJNHfk{LtK=<cR$1cDbm;n7<@z+q<^>JPCutBV{-&ieS3WjC@;GbXsBbJk zsv~Qg)%QPYqI;$#fBc}2(Ig}G2U{|tyDg=A?6@ia?u`N6@jK9iq3d0EZ|I7SnL8Uc zd6P3W2!pt2{uq?Vs~*E?SC>hpaUQXA^MqTG$s+NhXAX{`qA7%RGD8TNnnLjFVR)R8 z-g09WhE4g{wwL;FKspNoQ^+=q#n3mL@y%frP8C+d^*H*CjHUGjVPZt3GWY0E{tO&U z%fDlp^E8o(1LW@<8_&t|{><ATdHQ}4q}lqgJxpewKgeE&M^UuX4W^`^H!+`jlhP%C z?JL7%9vMrlLn3!m(>doho?|A(xL+&ey8#nuxo?u_b2F$3sbKulTFx(=OZbijM2(&+ z4EI@_eo;;E%1Zj(kY6E{JkBpC=-hOEubfEF`YaBgPi1;w4D;<n$ten_aGPSPc-L+> zd$Rhq8*}bS-cIJW2ZYJ9D>{HR%Z1fuCLBL8-5N{Xa8YLAUWbJ(>u*dqGpQdQwqwHp zL(rExSI>ca`&`L<?nx(KckJSO;2dd9!vb@1P8i`dy$y|$*SkMPlUj34v}MNj?tHTv z9P>qK`3T=g=dJ9Ud8;P26EA~!vv>UZPEB+Aq#Cuqs%tyMm%Bihyh-iZZfZ#9TJd=J zNgq;X!nc-YTv%X%pNFl?k{y}W(*-LVch-xy@VR&fkF@X4!8P%GI-MkUw&YpQX7F;v zD5g9e!PeSDejneLL;nS^TJ8>ClSp>E#qm}RVSqs{zXXlpx^^}}n#0H#70<#yqA<S| zBj>^ZjyET>dG0Wdbs9=wy=eCnhO;DZBncHs+%Zn(o>eAOOLHjsXBZbw3?bV#mEqfE z7IF@LHxivXB%aY0iNv}`vFlm@zpnPePxO}67U5h?6|YoglI)Gi<X`8}j9NIAQ*TQ7 z+HD3GW>rX*rka(rYPcUZTk`w!S+IIBJBBX8v&TG!ESiN|O$}*XYB+hdnw=}E(D<dC zvOXnzcvir|mQvqHjcX`#nXARJ7a~<WIs3)C^EH@spFmbG3ZdnvU}3L>;7}Aw!%RiE z@aV5y>4~0&4SzR@FW$ihb7w2+UYU?{s0)h?&4?{=U{J2`XkU4=EY*jm6}@l_a=<Cc zjLiO>@p;^qB~x^W9HPPMTe|cYO~C${E^Qx+N5M*iw!hY?bnzS9{r#mf33#r4lsyb* zyNK6d{ufoVNfRycK6aWcKA2<rxOMHw@i7Mcy3LTa#$B1W%nUuzV~2jUl`~EFsOwyr zf4w&aqPavl3u8#;!bS&T(Em|(C>6*(>z~9;n-r1^lZ8_^KxSwma!+`}Z6B_^kayxr ze;)llgpJ)qr>_{p7s;ruIyHo~QV*;;mBeye$*+A#W81qC<Sopi)sh^7()0MozJQzB zd6+C3$!`-!@U_ht>1oDe*Ep7Q7YlfECX0uXadg}v8Ohwi7(E_NUEAT@_-P<pJIl=X zy6Djl0+@bUQD7d;8H)rw>V=syb1Vr@r!!l-hUq5N{PVJ!@b70)F?}u;Mf2!qzJT00 z3rVY6#N{*dY58&vt72wReyWyV_ttQHU=2sFRq@OGGUmiiVw`pX%O!_%F>55x0*14$ zcOo`FiAV21KYs5ViOaBl{A4f8ANPJ7|6eqb1H-v_S%y-g-Pe{$MoDUi)d5ay@E1+N z+M50&t@!0qcRK62abSfHLAQJvTGE@opL<~OjUA4yE!n(4`b)14B#Gv9DZC|{?&{-n z)QB7NjWJH@B>6Tyei-*mH7$9nPQMcNuk|x^=thGI@cpQaVl`NHp#`5rgTK79EzcLW zMMpfapQp$fRNRGytIc`R#|G^z2d@3?jOGG&MsD?%yk#JswNk?e$?lvXp=|dHA#10? zb&zP%llxIPKa!EYksJ|^;<y=pv^DaiXrFk|bRwWAks)3qMaPx8(Yb)|rz80`DGk$3 z!^v(GZ{pEW%o&i!AvKoU`4c!ba1w(8r!q8eIw=OzDET~*jQ!)-J*0@JxKc8rOT`OO zLf@$c_{EJNs5FIf<j_26EG}lFc=b{Cx_uHp>#Y#N<*PpTS0wqn1~Dl~^qql2I6YSU zPgkb!uWl8~57n|edKPV;%_g$LTuxWc<yh;v{1ZBlP9_Vu+HD?>zRse}t{V19uMnqE z&4DY`T$x|P;Or{?ccm1=)|2R#JQhu#F$}X2oow=Od5>jJ!0*yqSq)~w(?RThHjvc~ z1K4<7yg0|Am@62<OX90}oa)4shMt6ax$?(Z7j&OH;w*LU`y?M)KlNev2T!`Kk&HxI z4@Sk>(4^UoylzHxA83H)An`5jXo-G*J#L2>v7pvMw0}EB9<e6KL-f|bhpKnlBlYLJ zCu&Z8z4|optqQMhR?8~1*t1ynGz`~8`<~3Ud$z%1jy_j*3Qu>I<S!bm*`UOut>eZL zZBLFk_z;pEK&H&j7L*0>{EIKO+5S`nd-0#-4eSj=85SENwO}9FMH4{eFkjA$^Q7QP zFF8NFxMC`v^DptNuo=nS3%T+<jUwpSFz(b3;r`r_WaMVEivl?_#$%H;nIrqA@vntw zHX|x2IxXL`X)TT|Yd9qL@QJu`8eddmp;w7n*$nphPoOqBj~kt`SrsygoS{>3w;RJe znR9>cJcx$X;oM%-mt31TvRV)2;qwf#e$A4ZdM*wJ#!;eO%8k5QytHOvo<EZg&t_un zH;eqjnH-3njq#6j8F^(6%Q9!O;C>a~_N_o)>cXoImEudSrd6!m58qXCTK>HS^(7=N zn!=2pqLIgp#?3Grr%fYJQWM{lb8?As99Ki4i2OSe%NOAsITFks@jpD5v%o;hOX}s` zESc&~TAUm0*86hpskit!+{oVMD1Dcuco$8XEc&R=f1TMO`N<1wW#5Z<k96x>ll)g( z#!fWC?1^}+_Sv)B*^aF_*39kvQca6}sis!csjsmO%3W9qLk+Z9{<S4Td+V}SygIM1 zN!IIe8!k)!y3>DM*|^7=Zo3?r@Po7DCR|vh@5;rauAFgq<Mb;}&N|4fc2iF}csaA{ z|Gg(8{fJ7Cy*efVn5^{TM_&)@MhK&Rdrvf4I^lg-bk7r^Oeh|J@xCN}|2GA1vt;_U zPhjiMLot%<a>|ixcC;VOp;_Zmi;5YyXEJ}TnL_>JY5csmk}*Lu`FL@z<fG@aqI4cV zFP=^3BQ?aIuVBsV={R{8p)a$E>940!y<rM3pBA7m-+ktVK?Kk0$NRiE+V_^6+=Eeg z_8rT`xy77qDwb!sl$Scyl%1X_ET)-^kE<fHRSi#jRnz@t6<w2SIlF8&TYjBIM>+rP z|EOf@!%`Ob&tR2K8By=bS^TJylEYOD++E4`!xb3Dl=JvTDgTY1&V=EUNW50SAnOcX zM5J>6<v=<V#?objaDBfCAvGz0?!~^e_|=b5gZz0Qde)UX>1BueaPzn?KMGU6*uT4E zpsc9*%S`-jrgYmaEcEM!91;$}^VrVRT8Uq+P<BXsW59}VQy#eq`!UysD)BWrUom6K zqUUO&jqGlE|3rO|T42t<O;U(xOK&W>{JIuguhOFZK^<yGwx#U65q-Xs{Nx~eR0l_r za%A_&E^8jFx8-7Qdtwea(q4LlN#~p~7SGu=$@Yc!bs$vc{~ctHMxQ6%L=W&JXLv6@ zSUWLle|K{K=+4EZ?sTgS#Qk0b|2q<mndnRX7RJ!UDuD{A`M=qp$~buz%yWj*=X3`3 z+4&rAH<~1iu?+sHn3e5IF}JJYoXc#!317(Q%}c1-xES|!vx)zyhKV^995$bZcbifM zWR#LNwS+l+#;`hSBzrnaZpLOHSEWYnH+?j#S5IbR*bMPlRp5|Y&DD&V{8TrKrSjfK zuC797dMPP?RZu;@9KWB+nQ)?p-fL%ZYe6k-mQ->sshowUW{^8^GV9)z;8QpQ%`0WH zGqi%W8C9e{tfs?+8ZN}w2uh-gN2O&1v@K@m-CUwdM^LzE2+kdod7L$n=f>h!92d;i z)F9ft4r2bOAR4>%VS9KV=?4QTclMQCKfQR8-h<=-XSz5!^Ws_$G{?*A<X`dYpRi({ zsq9Ql>BK)bI&#d`7_$LZWbCkKzVsQo1}3!m(SS>4kCm>|BX#PZ$13*x3$-QtojPQ$ zf%yha2CUKG`|mYaE;A!9v-Z?#8}nhSHKV3F2vgmf%`;6|v7-yqXLluSPFHRSU-ovR zBU68~;`tF1;>^2Zn{UlOrcNySwila5y3whBFKS|)c-GmDgo!pdU$kbyXD7A|aOZ2J zHzlclEP58im-<M~MfPX@k~r!f#ZtN@j?~D3tTjtwUuv4@VI$}{EQ`4h3)xULnQd-m z46Ccc<iIR`?LME{?-$Z}+B|Bm&Ln@Z+|4a3`Psi*_G5^C6EYdoulYEMzCWT@65&fy zgpZNKpo)ofI#bRk`x+wun#r+SvsiL`CJ*n|@KVnB5#N+^>tqR`Ix;7iJ%c0R<;0$; zA$fHzA403R*0+rJIwkzzIF*IL6WIA|0$&GBqW_(#Jepoce|dI}`&Ht2r;?v+s!7SM zmFKRScXF29aU4s!YYx%r8IrA#rs{ek=Xb|4;+XhV$A;0fMJVIMe<ckQuNH<79T<#$ zpdZIIWbc_|8@gop^1#yv|FNF3AIg>S{hb&v!J5mLOz0&nk{7K^N#9`3x7}=rDYxPN zcuTfcc4fnn4s85<N45CxuKM))f!c5QM74FQS98Q`;J03OkGV9e<C06c8LorbCw+D= z>Pn|sR{T57hIgr^9ADLm;m6yNd#XLR_IKe(w59ARkn?DL7j|ql;4jHny?<|lu9dKb zj$2a~V~cUJ4bOtj`Du(igTkMSJlKuD@7R#`S9emxGj?#dD`!u8b5i^xJy62LfLj%z z{1z3-*j91UZ^v`DoA8x?$sk7Z3%%0Dk)AY}J(1HHU0cS(8CAHu%w(*=9L}AbgYA}C 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 literal 0 HcmV?d00001 diff --git a/test/data/dem_unfinished.tif b/test/data/dem_unfinished.tif new file mode 100644 index 0000000000000000000000000000000000000000..3e7b0b65a35a15848b6985a524829842fe4528f6 GIT binary patch literal 5144 zcmcgu&u>&!6u#3UqSgwDqQM^-F&ZSH3>`YHrotH*Ad^rwQ-wtpCeoV5mKYdzCcdai zT_ADg#u(p%n79%WmnOZgT$%VMbmh{8YZrdsdFNd2R4l{*C;8@l_nhzic=x>~?RNKv z9U+9>A=E}g4eVv0mhlneb;L)FQ@1_iPu51lKEz%_VjO%N{0#W6+BWU^^k@jrWcuC4 zIqO-|Y}*yWp4ua--;LVmjlTr`LRP!a_y}ry#?d~Ee>N8A2S|MS`B>NvehvJ`wb4)q z{~7$|+E`%S-}t$;Hlj~HhN9xeNO%r&7695sfHe6x7e2h&zqD}W@?dqLef7%Va(`vH zztC&WoNXLxp8sIw{iTV)@>1w_PS@wVCr{RwmRA<T?5R%s^xWd0f3ZL4A9=i9pY0A7 zSL>JhtBY^#?ajC6yS@4D@!t8l_POrd+jD#CSNf|TtsvLfdt|aP*_=H{{Z@r1+GmEU z4$Mq7S`*Wg%|nxKG#XQPZ_qvSugM3Rlhdu4yO#FmJDn5n3{5|DxH&yF(P}jt)6LdY z%UjGI9KMI}?oVHRb7B0uqwaa*TiNf+qu;i|{&?-x^>crHaxA*Grtj#{5VrAcjRbs1 z@OW?dpljieowXge){qU`^?d!6$9CLYWBv*CA$+kq`1-{gmjx2}e*Rqh?5SRT=J3Zn zB37&e%+X>9rI5e`@uL-ZOdN3<Yl&P(4bL8<7dyLWjFxL9A^>O%zTO5G#Ap#5pjW_Y z52<?ReG@m0_Ani5Jnzrqo^o0#x1V3{CBGZw8DkI4*|To$30d0j`ms<<bV7Iv(A}ka zu6(XOGvYKpxAqqt0Om?^TC}-R#Tjx9Y2L><ddYj8Q2yBo7rw*}KOCnr(~2H-CbW9z ztc~CjGaY0lV!=R->fsB-c=i}I<f?_+*$(mbPAHZze-G~gc>!qZMQPG|AMFuu_x64% zkGeF6JvN=$n|X!h>&L2@-otCO4_dfs?K*0s>B+5^*HGhJJ<h3*@l*pTHI5W#4CZJ5 zz8H(KdJp7$_YUqv9jy?XX<pz7_H#}jHo;@=saFl0f7{-Jb2ZN#bfr|jfTuA=E(VQ* zhYYH*8Q$OX+8f$Cd5xi!=Qv}C-#!<=;oD}8ni8OQy?f>z9t+SVfTp{pcHQ*Q_}n7n zCAa`u4;Oyr&+y+0^A76B>2*%#5v}63BQ*-fX;Q)W*B;QSN3Qfdya0uPd4e$qdz2RU z=c0z@=QO7ZSHIEr&UBg(`~u!L^{^P{s=*fk&+Y>_&1-m0+~R(w*V=U?Ovig<ObuQ+ zd;w77V4UEYeF}QOV~jiez3aEnSrNz$@7doUYYIRNsRw5OJTvEeMsUVTK;x!!t?tG; zSmL6`^gZf{-<o}IJnPQuAX4>Zf7YwFn9gI|&H<iaoIc+nosk;iJktd59e5wyIl|ix z`R=+K^%)A|0`GH`TU=|{Gt)6oB#U6#4v8bKdzg?lC6J8V;Cp&s^~m{7)G0@anhf{W z*qwH;JJH$*mDQE>fEv62J}Yr1E$+E=#{H(diP<jyv4h@;_hK#X)O*r%CVRVQZ}O6H zS~M;;3unJu?E{JKgSvG8TkPVy>m2mrY$EN2qsHLyzk^y4v4$WF@4M%9D#DNEwwOJ% zpX=$ly8tw)W^KR=;PZ4poY|v*XI^s%X+1sellL_==N|U)=kh+KR6C%P&eGY@<{-z} zk!Q|>d7XO=-oxC@dlpeE)BYmW9YlKM`2Q()qppBggLkfb@-Art{Er>(R3qrcZ-Ku4 z3;Ggn0ut?gfKx-`UFdz>ryaQ0h5)hZ%lnAN0}VU~;1(-#zjyHaDbZh_RWJvfCXqh? zOur2=4FmV_9`arrk<F`l`u_1v>RyQXKDtXp-~sKxz9st$0PpX<Fs^ZE3g#c+4%(YD z`FDwLlz%U@4Z#o2oUgeDy@U1VJ(QdYPa_YGhqQy<3GV^(`0RrDx)bl{VeWugoUP9v H?VZR!uwoxB literal 0 HcmV?d00001 From e0a5490f379147fb1a1d62d84143e832f61ea2a8 Mon Sep 17 00:00:00 2001 From: Steve Peters <scpeters@openrobotics.org> Date: Wed, 19 Jan 2022 09:47:39 -0800 Subject: [PATCH 118/219] Move geospatial headers to subfolder (#289) This simplifies the logic required for packaging. Update Migration guide Signed-off-by: Steve Peters <scpeters@openrobotics.org> --- Migration.md | 3 ++- .../include/ignition/common/{ => geospatial}/Dem.hh | 10 +++++----- .../ignition/common/{ => geospatial}/HeightmapData.hh | 8 ++++---- .../ignition/common/{ => geospatial}/ImageHeightmap.hh | 10 +++++----- geospatial/src/Dem.cc | 2 +- geospatial/src/Dem_TEST.cc | 2 +- geospatial/src/ImageHeightmap.cc | 2 +- geospatial/src/ImageHeightmap_TEST.cc | 2 +- 8 files changed, 20 insertions(+), 19 deletions(-) rename geospatial/include/ignition/common/{ => geospatial}/Dem.hh (95%) rename geospatial/include/ignition/common/{ => geospatial}/HeightmapData.hh (92%) rename geospatial/include/ignition/common/{ => geospatial}/ImageHeightmap.hh (94%) diff --git a/Migration.md b/Migration.md index 7b9385355..16477163e 100644 --- a/Migration.md +++ b/Migration.md @@ -17,7 +17,8 @@ release will remove the deprecated code. 1. `HeightmapData.hh` and `ImageHeightmap.hh` have been moved out of the `graphics` component and into the new `geospatial` component + To use the heightmap features, users must add the `geospatial` component - to the `find_package` call + to the `find_package` call and update the include paths to use + the geospatial subfolder (`#include <ignition/common/geospatial/HeightmapData.hh>`) ## Ignition Common 3.X to 4.X diff --git a/geospatial/include/ignition/common/Dem.hh b/geospatial/include/ignition/common/geospatial/Dem.hh similarity index 95% rename from geospatial/include/ignition/common/Dem.hh rename to geospatial/include/ignition/common/geospatial/Dem.hh index 2d251b7ec..927076b11 100644 --- a/geospatial/include/ignition/common/Dem.hh +++ b/geospatial/include/ignition/common/geospatial/Dem.hh @@ -14,8 +14,8 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_DEM_HH_ -#define IGNITION_COMMON_DEM_HH_ +#ifndef IGNITION_COMMON_GEOSPATIAL_DEM_HH_ +#define IGNITION_COMMON_GEOSPATIAL_DEM_HH_ #include <memory> #include <string> @@ -24,8 +24,8 @@ #include <ignition/math/Vector3.hh> #include <ignition/math/Angle.hh> -#include <ignition/common/HeightmapData.hh> -#include <ignition/common/graphics/Export.hh> +#include <ignition/common/geospatial/Export.hh> +#include <ignition/common/geospatial/HeightmapData.hh> #include <ignition/utils/ImplPtr.hh> @@ -36,7 +36,7 @@ namespace ignition { /// \class DEM DEM.hh common/common.hh /// \brief Encapsulates a DEM (Digital Elevation Model) file. - class IGNITION_COMMON_GRAPHICS_VISIBLE Dem : public HeightmapData + class IGNITION_COMMON_GEOSPATIAL_VISIBLE Dem : public HeightmapData { /// \brief Constructor. public: Dem(); diff --git a/geospatial/include/ignition/common/HeightmapData.hh b/geospatial/include/ignition/common/geospatial/HeightmapData.hh similarity index 92% rename from geospatial/include/ignition/common/HeightmapData.hh rename to geospatial/include/ignition/common/geospatial/HeightmapData.hh index a67b1135a..16acb544e 100644 --- a/geospatial/include/ignition/common/HeightmapData.hh +++ b/geospatial/include/ignition/common/geospatial/HeightmapData.hh @@ -14,20 +14,20 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_HEIGHTMAPDATA_HH_ -#define IGNITION_COMMON_HEIGHTMAPDATA_HH_ +#ifndef IGNITION_COMMON_GEOSPATIAL_HEIGHTMAPDATA_HH_ +#define IGNITION_COMMON_GEOSPATIAL_HEIGHTMAPDATA_HH_ #include <string> #include <vector> #include <ignition/math/Vector3.hh> -#include <ignition/common/graphics/Export.hh> +#include <ignition/common/geospatial/Export.hh> namespace ignition { namespace common { /// \brief Encapsulates a generic heightmap data file. - class IGNITION_COMMON_GRAPHICS_VISIBLE HeightmapData + class IGNITION_COMMON_GEOSPATIAL_VISIBLE HeightmapData { /// \brief Destructor. public: virtual ~HeightmapData() = default; diff --git a/geospatial/include/ignition/common/ImageHeightmap.hh b/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh similarity index 94% rename from geospatial/include/ignition/common/ImageHeightmap.hh rename to geospatial/include/ignition/common/geospatial/ImageHeightmap.hh index 5ee7431e8..98b3095ce 100644 --- a/geospatial/include/ignition/common/ImageHeightmap.hh +++ b/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh @@ -14,16 +14,16 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_IMAGEHEIGHTMAPDATA_HH_ -#define IGNITION_COMMON_IMAGEHEIGHTMAPDATA_HH_ +#ifndef IGNITION_COMMON_GEOSPATIAL_IMAGEHEIGHTMAPDATA_HH_ +#define IGNITION_COMMON_GEOSPATIAL_IMAGEHEIGHTMAPDATA_HH_ #include <limits> #include <string> #include <vector> #include <ignition/math/Vector3.hh> -#include <ignition/common/graphics/Export.hh> -#include <ignition/common/HeightmapData.hh> +#include <ignition/common/geospatial/Export.hh> +#include <ignition/common/geospatial/HeightmapData.hh> #include <ignition/common/Image.hh> namespace ignition @@ -31,7 +31,7 @@ namespace ignition namespace common { /// \brief Encapsulates an image that will be interpreted as a heightmap. - class IGNITION_COMMON_GRAPHICS_VISIBLE ImageHeightmap + class IGNITION_COMMON_GEOSPATIAL_VISIBLE ImageHeightmap : public ignition::common::HeightmapData { /// \brief Constructor diff --git a/geospatial/src/Dem.cc b/geospatial/src/Dem.cc index eb9318555..d25b1c909 100644 --- a/geospatial/src/Dem.cc +++ b/geospatial/src/Dem.cc @@ -21,7 +21,7 @@ #include <ogr_spatialref.h> #include "ignition/common/Console.hh" -#include "ignition/common/Dem.hh" +#include "ignition/common/geospatial/Dem.hh" #include "ignition/math/SphericalCoordinates.hh" using namespace ignition; diff --git a/geospatial/src/Dem_TEST.cc b/geospatial/src/Dem_TEST.cc index 5a8fcde20..248ce255e 100644 --- a/geospatial/src/Dem_TEST.cc +++ b/geospatial/src/Dem_TEST.cc @@ -20,7 +20,7 @@ #include <ignition/math/Angle.hh> #include <ignition/math/Vector3.hh> -#include "ignition/common/Dem.hh" +#include "ignition/common/geospatial/Dem.hh" #include "test_config.h" using namespace ignition; diff --git a/geospatial/src/ImageHeightmap.cc b/geospatial/src/ImageHeightmap.cc index 6c8630835..4dcf9bc32 100644 --- a/geospatial/src/ImageHeightmap.cc +++ b/geospatial/src/ImageHeightmap.cc @@ -15,7 +15,7 @@ * */ #include "ignition/common/Console.hh" -#include "ignition/common/ImageHeightmap.hh" +#include "ignition/common/geospatial/ImageHeightmap.hh" using namespace ignition; using namespace common; diff --git a/geospatial/src/ImageHeightmap_TEST.cc b/geospatial/src/ImageHeightmap_TEST.cc index 2b93f845a..3fc52788a 100644 --- a/geospatial/src/ImageHeightmap_TEST.cc +++ b/geospatial/src/ImageHeightmap_TEST.cc @@ -16,7 +16,7 @@ */ #include <gtest/gtest.h> -#include "ignition/common/ImageHeightmap.hh" +#include "ignition/common/geospatial/ImageHeightmap.hh" #include "test_config.h" #define ELEVATION_TOL 1e-8 From 68ba882c9de56b7a2cd330c4639035f1584681ae Mon Sep 17 00:00:00 2001 From: Steve Peters <scpeters@openrobotics.org> Date: Wed, 19 Jan 2022 12:32:59 -0800 Subject: [PATCH 119/219] Revert geospatial component for now (#291) * Revert "Move geospatial headers to subfolder (#289)" This reverts commit e0a5490f379147fb1a1d62d84143e832f61ea2a8. Signed-off-by: Steve Peters <scpeters@openrobotics.org> * Revert "Geospatial component for heightmap & DEMs (#267)" This reverts commit 28eb6c7fb564f612a7c7d9a60b11fb9ad8da52b8. Signed-off-by: Steve Peters <scpeters@openrobotics.org> --- .github/ci/packages.apt | 1 - CMakeLists.txt | 11 +- Migration.md | 16 +- .../include/ignition/common/CMakeLists.txt | 2 - geospatial/src/CMakeLists.txt | 22 --- .../include/ignition/common}/Dem.hh | 30 ++-- .../include/ignition/common}/HeightmapData.hh | 20 +-- .../ignition/common}/ImageHeightmap.hh | 13 +- {geospatial => graphics}/src/Dem.cc | 148 ++++++------------ {geospatial => graphics}/src/Dem_TEST.cc | 112 +++++-------- .../src/ImageHeightmap.cc | 2 +- .../src/ImageHeightmap_TEST.cc | 7 +- test/data/dem_landscape.tif | Bin 100487 -> 0 bytes test/data/dem_nodata.dem | Bin 9441 -> 0 bytes test/data/dem_portrait.tif | Bin 100487 -> 0 bytes test/data/dem_squared.tif | Bin 67701 -> 0 bytes test/data/dem_unfinished.tif | Bin 5144 -> 0 bytes 17 files changed, 118 insertions(+), 266 deletions(-) delete mode 100644 geospatial/include/ignition/common/CMakeLists.txt delete mode 100644 geospatial/src/CMakeLists.txt rename {geospatial/include/ignition/common/geospatial => graphics/include/ignition/common}/Dem.hh (87%) rename {geospatial/include/ignition/common/geospatial => graphics/include/ignition/common}/HeightmapData.hh (77%) rename {geospatial/include/ignition/common/geospatial => graphics/include/ignition/common}/ImageHeightmap.hh (93%) rename {geospatial => graphics}/src/Dem.cc (68%) rename {geospatial => graphics}/src/Dem_TEST.cc (51%) rename {geospatial => graphics}/src/ImageHeightmap.cc (98%) rename {geospatial => graphics}/src/ImageHeightmap_TEST.cc (95%) delete mode 100644 test/data/dem_landscape.tif delete mode 100644 test/data/dem_nodata.dem delete mode 100644 test/data/dem_portrait.tif delete mode 100644 test/data/dem_squared.tif delete mode 100644 test/data/dem_unfinished.tif diff --git a/.github/ci/packages.apt b/.github/ci/packages.apt index f9908b5f4..9bfe4b327 100644 --- a/.github/ci/packages.apt +++ b/.github/ci/packages.apt @@ -3,7 +3,6 @@ libavdevice-dev libavformat-dev libavutil-dev libfreeimage-dev -libgdal-dev libgts-dev libignition-cmake2-dev libignition-math7-dev diff --git a/CMakeLists.txt b/CMakeLists.txt index a9d507c8e..da71892bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,7 +48,7 @@ message(STATUS "\n\n-- ====== Finding Dependencies ======") #-------------------------------------- # Find ignition-math -ign_find_package(ignition-math7 REQUIRED_BY geospatial graphics events) +ign_find_package(ignition-math7 REQUIRED_BY graphics events) set(IGN_MATH_VER ${ignition-math7_VERSION_MAJOR}) #-------------------------------------- @@ -94,13 +94,6 @@ ign_find_package( REQUIRED_BY graphics PRIVATE_FOR graphics) -#------------------------------------ -# Find GDAL -ign_find_package(GDAL VERSION 3.0 - PKGCONFIG gdal - PRIVATE_FOR geospatial - REQUIRED_BY geospatial) - #------------------------------------ # Find libswscale ign_find_package(SWSCALE REQUIRED_BY av PRETTY libswscale) @@ -132,7 +125,7 @@ configure_file("${PROJECT_SOURCE_DIR}/cppcheck.suppress.in" ${PROJECT_BINARY_DIR}/cppcheck.suppress) ign_configure_build(QUIT_IF_BUILD_ERRORS - COMPONENTS av events geospatial graphics profiler) + COMPONENTS av events graphics profiler) #============================================================================ # Create package information diff --git a/Migration.md b/Migration.md index 16477163e..69f1bb4bb 100644 --- a/Migration.md +++ b/Migration.md @@ -5,21 +5,6 @@ Deprecated code produces compile-time warnings. These warning serve as notification to users that their code should be upgraded. The next major release will remove the deprecated code. -## Ignition Common 4.X to 5.X - -### Additions - -1. **geospatial** component that loads heightmap images and DEMs - + Depends on the ign-common's `graphics` component and the `gdal` library - -### Modifications - -1. `HeightmapData.hh` and `ImageHeightmap.hh` have been moved out of the -`graphics` component and into the new `geospatial` component - + To use the heightmap features, users must add the `geospatial` component - to the `find_package` call and update the include paths to use - the geospatial subfolder (`#include <ignition/common/geospatial/HeightmapData.hh>`) - ## Ignition Common 3.X to 4.X ### Modifications @@ -87,3 +72,4 @@ release will remove the deprecated code. 1. **ignition-cmake** + Ignition-math now has a build dependency on ignition-cmake, which allows cmake scripts to be shared across all the ignition packages. + diff --git a/geospatial/include/ignition/common/CMakeLists.txt b/geospatial/include/ignition/common/CMakeLists.txt deleted file mode 100644 index 7155438eb..000000000 --- a/geospatial/include/ignition/common/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ - -ign_install_all_headers(COMPONENT geospatial) diff --git a/geospatial/src/CMakeLists.txt b/geospatial/src/CMakeLists.txt deleted file mode 100644 index 6975e86fc..000000000 --- a/geospatial/src/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ - -ign_get_libsources_and_unittests(sources gtest_sources) - -ign_add_component(geospatial - SOURCES ${sources} - DEPENDS_ON_COMPONENTS graphics - GET_TARGET_NAME geospatial_target) - -target_link_libraries(${geospatial_target} - PUBLIC - ${PROJECT_LIBRARY_TARGET_NAME}-graphics - ignition-math${IGN_MATH_VER}::ignition-math${IGN_MATH_VER} - ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER} - PRIVATE - ${GDAL_LIBRARY}) - -target_include_directories(${geospatial_target} - PRIVATE - ${GDAL_INCLUDE_DIR}) - -ign_build_tests(TYPE UNIT SOURCES ${gtest_sources} - LIB_DEPS ${geospatial_target}) diff --git a/geospatial/include/ignition/common/geospatial/Dem.hh b/graphics/include/ignition/common/Dem.hh similarity index 87% rename from geospatial/include/ignition/common/geospatial/Dem.hh rename to graphics/include/ignition/common/Dem.hh index 927076b11..ff83c0dd8 100644 --- a/geospatial/include/ignition/common/geospatial/Dem.hh +++ b/graphics/include/ignition/common/Dem.hh @@ -14,21 +14,22 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_GEOSPATIAL_DEM_HH_ -#define IGNITION_COMMON_GEOSPATIAL_DEM_HH_ +#ifndef IGNITION_COMMON_DEM_HH_ +#define IGNITION_COMMON_DEM_HH_ #include <memory> -#include <string> -#include <vector> - #include <ignition/math/Vector3.hh> #include <ignition/math/Angle.hh> -#include <ignition/common/geospatial/Export.hh> -#include <ignition/common/geospatial/HeightmapData.hh> +#include <ignition/common/graphics/Export.hh> #include <ignition/utils/ImplPtr.hh> +#ifdef HAVE_GDAL +# include <string> +# include <vector> + +# include <ignition/common/HeightmapData.hh> namespace ignition { @@ -36,7 +37,7 @@ namespace ignition { /// \class DEM DEM.hh common/common.hh /// \brief Encapsulates a DEM (Digital Elevation Model) file. - class IGNITION_COMMON_GEOSPATIAL_VISIBLE Dem : public HeightmapData + class IGNITION_COMMON_GRAPHICS_VISIBLE Dem : public HeightmapData { /// \brief Constructor. public: Dem(); @@ -52,8 +53,7 @@ namespace ignition /// \brief Get the elevation of a terrain's point in meters. /// \param[in] _x X coordinate of the terrain. /// \param[in] _y Y coordinate of the terrain. - /// \return Terrain's elevation at (x,y) in meters or infinity if illegal - /// coordinates were provided. + /// \return Terrain's elevation at (x,y) in meters. public: double Elevation(double _x, double _y); /// \brief Get the terrain's minimum elevation in meters. @@ -68,8 +68,7 @@ namespace ignition /// origin in WGS84. /// \param[out] _latitude Georeferenced latitude. /// \param[out] _longitude Georeferenced longitude. - /// \return True if able to retrieve origin coordinates. False otherwise. - public: bool GeoReferenceOrigin(ignition::math::Angle &_latitude, + public: void GeoReferenceOrigin(ignition::math::Angle &_latitude, ignition::math::Angle &_longitude) const; /// \brief Get the terrain's height. Due to the Ogre constrains, this @@ -121,8 +120,7 @@ namespace ignition /// \param[in] _y Y coordinate of the terrain. /// \param[out] _latitude Georeferenced latitude. /// \param[out] _longitude Georeferenced longitude. - /// \return True if able to retrieve coordinates. False otherwise. - private: bool GeoReference(double _x, double _y, + private: void GeoReference(double _x, double _y, ignition::math::Angle &_latitude, ignition::math::Angle &_longitude) const; @@ -132,9 +130,6 @@ namespace ignition /// \return 0 when the operation succeeds to open a file. private: int LoadData(); - // Documentation inherited. - public: std::string Filename() const; - /// internal /// \brief Pointer to the private data. IGN_UTILS_IMPL_PTR(dataPtr) @@ -142,3 +137,4 @@ namespace ignition } } #endif +#endif diff --git a/geospatial/include/ignition/common/geospatial/HeightmapData.hh b/graphics/include/ignition/common/HeightmapData.hh similarity index 77% rename from geospatial/include/ignition/common/geospatial/HeightmapData.hh rename to graphics/include/ignition/common/HeightmapData.hh index 16acb544e..22eeb4945 100644 --- a/geospatial/include/ignition/common/geospatial/HeightmapData.hh +++ b/graphics/include/ignition/common/HeightmapData.hh @@ -14,20 +14,19 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_GEOSPATIAL_HEIGHTMAPDATA_HH_ -#define IGNITION_COMMON_GEOSPATIAL_HEIGHTMAPDATA_HH_ +#ifndef IGNITION_COMMON_HEIGHTMAPDATA_HH_ +#define IGNITION_COMMON_HEIGHTMAPDATA_HH_ -#include <string> #include <vector> #include <ignition/math/Vector3.hh> -#include <ignition/common/geospatial/Export.hh> +#include <ignition/common/graphics/Export.hh> namespace ignition { namespace common { /// \brief Encapsulates a generic heightmap data file. - class IGNITION_COMMON_GEOSPATIAL_VISIBLE HeightmapData + class IGNITION_COMMON_GRAPHICS_VISIBLE HeightmapData { /// \brief Destructor. public: virtual ~HeightmapData() = default; @@ -58,17 +57,6 @@ namespace ignition /// \brief Get the maximum terrain's elevation. /// \return The maximum terrain's elevation. public: virtual float MaxElevation() const = 0; - - /// \brief Get the min terrain's elevation. - /// \return The min terrain's elevation. - public: virtual float MinElevation() const - { - return 0.0f; - } - - /// \brief Get the full filename of loaded heightmap image/dem - /// \return The filename used to load the heightmap image/dem - public: virtual std::string Filename() const = 0; }; } } diff --git a/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh b/graphics/include/ignition/common/ImageHeightmap.hh similarity index 93% rename from geospatial/include/ignition/common/geospatial/ImageHeightmap.hh rename to graphics/include/ignition/common/ImageHeightmap.hh index 98b3095ce..43a1bccc8 100644 --- a/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh +++ b/graphics/include/ignition/common/ImageHeightmap.hh @@ -14,16 +14,16 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_GEOSPATIAL_IMAGEHEIGHTMAPDATA_HH_ -#define IGNITION_COMMON_GEOSPATIAL_IMAGEHEIGHTMAPDATA_HH_ +#ifndef IGNITION_COMMON_IMAGEHEIGHTMAPDATA_HH_ +#define IGNITION_COMMON_IMAGEHEIGHTMAPDATA_HH_ #include <limits> #include <string> #include <vector> #include <ignition/math/Vector3.hh> -#include <ignition/common/geospatial/Export.hh> -#include <ignition/common/geospatial/HeightmapData.hh> +#include <ignition/common/graphics/Export.hh> +#include <ignition/common/HeightmapData.hh> #include <ignition/common/Image.hh> namespace ignition @@ -31,7 +31,7 @@ namespace ignition namespace common { /// \brief Encapsulates an image that will be interpreted as a heightmap. - class IGNITION_COMMON_GEOSPATIAL_VISIBLE ImageHeightmap + class IGNITION_COMMON_GRAPHICS_VISIBLE ImageHeightmap : public ignition::common::HeightmapData { /// \brief Constructor @@ -49,7 +49,8 @@ namespace ignition const ignition::math::Vector3d &_scale, bool _flipY, std::vector<float> &_heights); - // Documentation inherited. + /// \brief Get the full filename of the image + /// \return The filename used to load the image public: std::string Filename() const; // Documentation inherited. diff --git a/geospatial/src/Dem.cc b/graphics/src/Dem.cc similarity index 68% rename from geospatial/src/Dem.cc rename to graphics/src/Dem.cc index d25b1c909..ad52f023c 100644 --- a/geospatial/src/Dem.cc +++ b/graphics/src/Dem.cc @@ -15,18 +15,23 @@ * */ #include <algorithm> -#include <limits> -#include <gdal_priv.h> -#include <ogr_spatialref.h> +#ifdef HAVE_GDAL +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wfloat-equal" +# include <ogr_spatialref.h> +# pragma GCC diagnostic pop +#endif #include "ignition/common/Console.hh" -#include "ignition/common/geospatial/Dem.hh" +#include "ignition/common/Dem.hh" #include "ignition/math/SphericalCoordinates.hh" using namespace ignition; using namespace common; +#ifdef HAVE_GDAL + class ignition::common::Dem::Implementation { /// \brief A set of associated raster bands. @@ -52,9 +57,6 @@ class ignition::common::Dem::Implementation /// \brief DEM data converted to be OGRE-compatible. public: std::vector<float> demData; - - /// \brief Full filename used to load the dem. - public: std::string filename; }; ////////////////////////////////////////////////// @@ -87,13 +89,12 @@ int Dem::Load(const std::string &_filename) // Sanity check std::string fullName = _filename; if (!exists(findFilePath(fullName))) - fullName = common::findFile(_filename); - - this->dataPtr->filename = fullName; + fullName = common::find_file(_filename); if (!exists(findFilePath(fullName))) { - ignerr << "Unable to find DEM file[" << _filename << "]." << std::endl; + gzerr << "Unable to open DEM file[" << _filename + << "], check your GAZEBO_RESOURCE_PATH settings." << std::endl; return -1; } @@ -102,25 +103,25 @@ int Dem::Load(const std::string &_filename) if (this->dataPtr->dataSet == nullptr) { - ignerr << "Unable to open DEM file[" << fullName - << "]. Format not recognized as a supported dataset." << std::endl; + gzerr << "Unable to open DEM file[" << fullName + << "]. Format not recognised as a supported dataset." << std::endl; return -1; } - int nBands = this->dataPtr->dataSet->GetRasterCount(); + int nBands = this->dataPtr->dataSet->RasterCount(); if (nBands != 1) { - ignerr << "Unsupported number of bands in file [" << fullName + "]. Found " + gzerr << "Unsupported number of bands in file [" << fullName + "]. Found " << nBands << " but only 1 is a valid value." << std::endl; return -1; } // Set the pointer to the band - this->dataPtr->band = this->dataPtr->dataSet->GetRasterBand(1); + this->dataPtr->band = this->dataPtr->dataSet->RasterBand(1); // Raster width and height - xSize = this->dataPtr->dataSet->GetRasterXSize(); - ySize = this->dataPtr->dataSet->GetRasterYSize(); + xSize = this->dataPtr->dataSet->RasterXSize(); + ySize = this->dataPtr->dataSet->RasterYSize(); // Corner coordinates upLeftX = 0.0; @@ -131,15 +132,9 @@ int Dem::Load(const std::string &_filename) lowLeftY = ySize; // Calculate the georeferenced coordinates of the terrain corners - if (!this->GeoReference(upLeftX, upLeftY, upLeftLat, upLeftLong) - || !this->GeoReference(upRightX, upRightY, upRightLat, upRightLong) - || !this->GeoReference(lowLeftX, lowLeftY, lowLeftLat, lowLeftLong)) - { - ignerr << "Failed to automatically compute DEM size. " - << "Please use the <size> element to manually set DEM size." - << std::endl; - return -1; - } + this->GeoReference(upLeftX, upLeftY, upLeftLat, upLeftLong); + this->GeoReference(upRightX, upRightY, upRightLat, upRightLong); + this->GeoReference(lowLeftX, lowLeftY, lowLeftLat, lowLeftLong); // Set the world width and height this->dataPtr->worldWidth = @@ -166,38 +161,12 @@ int Dem::Load(const std::string &_filename) if (this->LoadData() != 0) return -1; - // Check for nodata value in dem data. This is used when computing the - // min elevation. If nodata value is not defined, we assume it will be one - // of the commonly used values such as -9999, -32768, etc. - // See https://desktop.arcgis.com/en/arcmap/10.8/manage-data/raster-and-images/nodata-in-raster-datasets.htm - // For simplicity, we will treat values <= -9999 as nodata values and - // ignore them when computing the min elevation. - int validNoData = 0; - const double defaultNoDataValue = -9999; - double noDataValue = this->dataPtr->band->GetNoDataValue(&validNoData); - if (validNoData <= 0) - noDataValue = defaultNoDataValue; - - double min = ignition::math::MAX_D; - double max = -ignition::math::MAX_D; - for (auto d : this->dataPtr->demData) - { - if (d > noDataValue) - { - if (d < min) - min = d; - if (d > max) - max = d; - } - } - if (ignition::math::equal(min, ignition::math::MAX_D) || - ignition::math::equal(max, -ignition::math::MAX_D)) - { - ignwarn << "DEM is composed of 'nodata' values!" << std::endl; - } + // Set the min/max heights + this->dataPtr->minElevation = *std::min_element(&this->dataPtr->demData[0], + &this->dataPtr->demData[0] + this->dataPtr->side * this->dataPtr->side); + this->dataPtr->maxElevation = *std::max_element(&this->dataPtr->demData[0], + &this->dataPtr->demData[0] + this->dataPtr->side * this->dataPtr->side); - this->dataPtr->minElevation = min; - this->dataPtr->maxElevation = max; return 0; } @@ -206,10 +175,9 @@ double Dem::Elevation(double _x, double _y) { if (_x >= this->Width() || _y >= this->Height()) { - ignerr << "Illegal coordinates. You are asking for the elevation in (" - << _x << "," << _y << ") but the terrain is [" - << this->Width() << " x " << this->Height() << "]" << std::endl; - return std::numeric_limits<double>::infinity(); + gzthrow("Illegal coordinates. You are asking for the elevation in (" << + _x << "," << _y << ") but the terrain is [" << this->Width() << + " x " << this->Height() << "]\n"); } return this->dataPtr->demData.at(_y * this->Width() + _x); @@ -228,11 +196,11 @@ float Dem::MaxElevation() const } ////////////////////////////////////////////////// -bool Dem::GeoReference(double _x, double _y, +void Dem::GeoReference(double _x, double _y, ignition::math::Angle &_latitude, ignition::math::Angle &_longitude) const { double geoTransf[6]; - if (this->dataPtr->dataSet->GetGeoTransform(geoTransf) == CE_None) + if (this->dataPtr->dataSet->GeoTransform(geoTransf) == CE_None) { OGRSpatialReference sourceCs; OGRSpatialReference targetCs; @@ -240,40 +208,26 @@ bool Dem::GeoReference(double _x, double _y, double xGeoDeg, yGeoDeg; // Transform the terrain's coordinate system to WGS84 - const char *importString - = strdup(this->dataPtr->dataSet->GetProjectionRef()); + char *importString = strdup(this->dataPtr->dataSet->ProjectionRef()); sourceCs.importFromWkt(&importString); targetCs.SetWellKnownGeogCS("WGS84"); cT = OGRCreateCoordinateTransformation(&sourceCs, &targetCs); - if (nullptr == cT) - { - ignerr << "Unable to transform terrain coordinate system to WGS84 for " - << "coordinates (" << _x << "," << _y << ")" << std::endl; - OCTDestroyCoordinateTransformation(cT); - return false; - } xGeoDeg = geoTransf[0] + _x * geoTransf[1] + _y * geoTransf[2]; yGeoDeg = geoTransf[3] + _x * geoTransf[4] + _y * geoTransf[5]; cT->Transform(1, &xGeoDeg, &yGeoDeg); - _latitude.SetDegree(yGeoDeg); - _longitude.SetDegree(xGeoDeg); - - OCTDestroyCoordinateTransformation(cT); + _latitude.Degree(yGeoDeg); + _longitude.Degree(xGeoDeg); } else - { - ignerr << "Unable to obtain the georeferenced values for coordinates (" - << _x << "," << _y << ")" << std::endl; - return false; - } - return true; + gzthrow("Unable to obtain the georeferenced values for coordinates (" + << _x << "," << _y << ")\n"); } ////////////////////////////////////////////////// -bool Dem::GeoReferenceOrigin(ignition::math::Angle &_latitude, +void Dem::GeoReferenceOrigin(ignition::math::Angle &_latitude, ignition::math::Angle &_longitude) const { return this->GeoReference(0, 0, _latitude, _longitude); @@ -311,7 +265,7 @@ void Dem::FillHeightMap(int _subSampling, unsigned int _vertSize, { if (_subSampling <= 0) { - ignerr << "Illegal subsampling value (" << _subSampling << ")\n"; + gzerr << "Illegal subsampling value (" << _subSampling << ")\n"; return; } @@ -345,8 +299,8 @@ void Dem::FillHeightMap(int _subSampling, unsigned int _vertSize, double px4 = this->dataPtr->demData[y2 * this->dataPtr->side + x2]; float h2 = (px3 - ((px3 - px4) * dx)); - float h = this->dataPtr->minElevation + - (h1 - ((h1 - h2) * dy) - this->dataPtr->minElevation) * _scale.Z(); + float h = (h1 - ((h1 - h2) * dy) - std::max(0.0f, + this->MinElevation())) * _scale.Z(); // Invert pixel definition so 1=ground, 0=full height, // if the terrain size has a negative z component @@ -354,9 +308,9 @@ void Dem::FillHeightMap(int _subSampling, unsigned int _vertSize, if (_size.Z() < 0) h *= -1; - // Convert to minElevation if a NODATA value is found - if (_size.Z() >= 0 && h < this->dataPtr->minElevation) - h = this->dataPtr->minElevation; + // Convert to 0 if a NODATA value is found + if (_size.Z() >= 0 && h < 0) + h = 0; // Store the height for future use if (!_flipY) @@ -372,14 +326,14 @@ int Dem::LoadData() { unsigned int destWidth; unsigned int destHeight; - unsigned int nXSize = this->dataPtr->dataSet->GetRasterXSize(); - unsigned int nYSize = this->dataPtr->dataSet->GetRasterYSize(); + unsigned int nXSize = this->dataPtr->dataSet->RasterXSize(); + unsigned int nYSize = this->dataPtr->dataSet->RasterYSize(); float ratio; std::vector<float> buffer; if (nXSize == 0 || nYSize == 0) { - ignerr << "Illegal size loading a DEM file (" << nXSize << "," + gzerr << "Illegal size loading a DEM file (" << nXSize << "," << nYSize << ")\n"; return -1; } @@ -406,7 +360,7 @@ int Dem::LoadData() if (this->dataPtr->band->RasterIO(GF_Read, 0, 0, nXSize, nYSize, &buffer[0], destWidth, destHeight, GDT_Float32, 0, 0) != CE_None) { - ignerr << "Failure calling RasterIO while loading a DEM file\n"; + gzerr << "Failure calling RasterIO while loading a DEM file\n"; return -1; } @@ -424,8 +378,4 @@ int Dem::LoadData() return 0; } -////////////////////////////////////////////////// -std::string Dem::Filename() const -{ - return this->dataPtr->filename; -} +#endif diff --git a/geospatial/src/Dem_TEST.cc b/graphics/src/Dem_TEST.cc similarity index 51% rename from geospatial/src/Dem_TEST.cc rename to graphics/src/Dem_TEST.cc index 248ce255e..bc39e7248 100644 --- a/geospatial/src/Dem_TEST.cc +++ b/graphics/src/Dem_TEST.cc @@ -16,19 +16,20 @@ */ #include <gtest/gtest.h> -#include <limits> #include <ignition/math/Angle.hh> #include <ignition/math/Vector3.hh> -#include "ignition/common/geospatial/Dem.hh" +#include "ignition/common/Dem.hh" #include "test_config.h" using namespace ignition; class DemTest : public common::testing::AutoLogFixture { }; +#ifdef HAVE_GDAL + ///////////////////////////////////////////////// -TEST_F(DemTest, MissingFile) +TEST_F(DemTest, MisingFile) { common::Dem dem; EXPECT_NE(dem.Load("/file/shouldn/never/exist.png"), 0); @@ -38,7 +39,9 @@ TEST_F(DemTest, MissingFile) TEST_F(DemTest, NotDem) { common::Dem dem; - const auto path = common::testing::TestFile("CMakeLists.txt"); + std::string path; + + path = "file://media/materials/scripts/CMakeLists.txt"; EXPECT_NE(dem.Load(path), 0); } @@ -46,7 +49,9 @@ TEST_F(DemTest, NotDem) TEST_F(DemTest, UnsupportedDem) { common::Dem dem; - const auto path = common::testing::TestFile("data", "heightmap_bowl.png"); + std::string path; + + path = "file://media/materials/textures/wood.jpg"; EXPECT_NE(dem.Load(path), 0); } @@ -81,34 +86,30 @@ TEST_F(DemTest, BasicAPI) const auto path = common::testing::TestFile("data", "dem_squared.tif"); EXPECT_EQ(dem.Load(path), 0); - // Check filename - EXPECT_EQ(path, dem.Filename()); - // Check the heights and widths - EXPECT_EQ(129, static_cast<int>(dem.Height())); - EXPECT_EQ(129, static_cast<int>(dem.Width())); - EXPECT_FLOAT_EQ(3984.4849, dem.WorldHeight()); - EXPECT_FLOAT_EQ(3139.7456, dem.WorldWidth()); - EXPECT_FLOAT_EQ(65.3583, dem.MinElevation()); - EXPECT_FLOAT_EQ(318.441, dem.MaxElevation()); - - // Check Elevation() - unsigned int width = dem.Width(); - unsigned int height = dem.Height(); - EXPECT_FLOAT_EQ(215.82324, dem.Elevation(0, 0)); - EXPECT_FLOAT_EQ(216.04961, dem.Elevation(width - 1, 0)); - EXPECT_FLOAT_EQ(142.2274, dem.Elevation(0, height - 1)); - EXPECT_FLOAT_EQ(209.14784, dem.Elevation(width - 1, height - 1)); + EXPECT_EQ(129, static_cast<int>(dem.GetHeight())); + EXPECT_EQ(129, static_cast<int>(dem.GetWidth())); + EXPECT_FLOAT_EQ(3984.4849, dem.GetWorldHeight()); + EXPECT_FLOAT_EQ(3139.7456, dem.GetWorldWidth()); + EXPECT_FLOAT_EQ(65.3583, dem.GetMinElevation()); + EXPECT_FLOAT_EQ(318.441, dem.GetMaxElevation()); + + // Check GetElevation() + unsigned int width = dem.GetWidth(); + unsigned int height = dem.GetHeight(); + EXPECT_FLOAT_EQ(215.82324, dem.GetElevation(0, 0)); + EXPECT_FLOAT_EQ(216.04961, dem.GetElevation(width - 1, 0)); + EXPECT_FLOAT_EQ(142.2274, dem.GetElevation(0, height - 1)); + EXPECT_FLOAT_EQ(209.14784, dem.GetElevation(width - 1, height - 1)); // Illegal coordinates - double inf = std::numeric_limits<double>::infinity(); - EXPECT_DOUBLE_EQ(inf, dem.Elevation(0, height)); - EXPECT_DOUBLE_EQ(inf, dem.Elevation(width, 0)); - EXPECT_DOUBLE_EQ(inf, dem.Elevation(width, height)); + ASSERT_ANY_THROW(dem.GetElevation(0, height)); + ASSERT_ANY_THROW(dem.GetElevation(width, 0)); + ASSERT_ANY_THROW(dem.GetElevation(width, height)); - // Check GeoReferenceOrigin() + // Check GetGeoReferenceOrigin() ignition::math::Angle latitude, longitude; - EXPECT_TRUE(dem.GeoReferenceOrigin(latitude, longitude)); + dem.GetGeoReferenceOrigin(latitude, longitude); EXPECT_FLOAT_EQ(38.001667, latitude.Degree()); EXPECT_FLOAT_EQ(-122.22278, longitude.Degree()); } @@ -129,17 +130,17 @@ TEST_F(DemTest, FillHeightmap) std::vector<float> elevations; subsampling = 2; - vertSize = (dem.Width() * subsampling) - 1; - size.X(dem.WorldWidth()); - size.Y(dem.WorldHeight()); - size.Z(dem.MaxElevation() - dem.MinElevation()); + vertSize = (dem.GetWidth() * subsampling) - 1; + size.X(dem.GetWorldWidth()); + size.Y(dem.GetWorldHeight()); + size.Z(dem.GetMaxElevation() - dem.GetMinElevation()); scale.X(size.X() / vertSize); scale.Y(size.Y() / vertSize); - if (ignition::math::equal(dem.MaxElevation(), 0.0f)) + if (ignition::math::equal(dem.GetMaxElevation(), 0.0f)) scale.Z(fabs(size.Z())); else - scale.Z(fabs(size.Z()) / dem.MaxElevation()); + scale.Z(fabs(size.Z()) / dem.GetMaxElevation()); flipY = false; dem.FillHeightMap(subsampling, vertSize, size, scale, flipY, elevations); @@ -148,46 +149,11 @@ TEST_F(DemTest, FillHeightmap) EXPECT_EQ(vertSize * vertSize, elevations.size()); // Check the elevation of some control points - EXPECT_FLOAT_EQ(184.94113, elevations.at(0)); - EXPECT_FLOAT_EQ(179.63583, elevations.at(elevations.size() - 1)); - EXPECT_FLOAT_EQ(213.42966, elevations.at(elevations.size() / 2)); -} - -///////////////////////////////////////////////// -TEST_F(DemTest, UnfinishedDem) -{ - common::Dem dem; - auto path = common::testing::TestFile("data", "dem_unfinished.tif"); - EXPECT_EQ(dem.Load(path), 0); - - // Check that the min and max elevations are valid for an unfinished - // and unfilled dem. - EXPECT_EQ(33, static_cast<int>(dem.Height())); - EXPECT_EQ(33, static_cast<int>(dem.Width())); - EXPECT_FLOAT_EQ(111287.59, dem.WorldHeight()); - EXPECT_FLOAT_EQ(88878.297, dem.WorldWidth()); - // gdal reports min elevation as -32768 but this is treated as a nodata - // by our dem class and ignored when computing the min elevation - EXPECT_FLOAT_EQ(-10, dem.MinElevation()); - EXPECT_FLOAT_EQ(1909, dem.MaxElevation()); - - // test another dem file with multiple nodata values - common::Dem demNoData; - - path = common::testing::TestFile("data", "dem_nodata.dem"); - EXPECT_EQ(demNoData.Load(path), 0); - - // Check that the min and max elevations are valid for a dem with multiple - // nodata values - EXPECT_EQ(65, static_cast<int>(demNoData.Height())); - EXPECT_EQ(65, static_cast<int>(demNoData.Width())); - EXPECT_FLOAT_EQ(7499.8281, demNoData.WorldHeight()); - EXPECT_FLOAT_EQ(14150.225, demNoData.WorldWidth()); - // gdal reports min elevation as -32767 but this is treated as a nodata - // by our dem class and ignored when computing the min elevation - EXPECT_FLOAT_EQ(682, demNoData.MinElevation()); - EXPECT_FLOAT_EQ(2932, demNoData.MaxElevation()); + EXPECT_FLOAT_EQ(119.58285, elevations.at(0)); + EXPECT_FLOAT_EQ(114.27753, elevations.at(elevations.size() - 1)); + EXPECT_FLOAT_EQ(148.07137, elevations.at(elevations.size() / 2)); } +#endif ///////////////////////////////////////////////// int main(int argc, char **argv) diff --git a/geospatial/src/ImageHeightmap.cc b/graphics/src/ImageHeightmap.cc similarity index 98% rename from geospatial/src/ImageHeightmap.cc rename to graphics/src/ImageHeightmap.cc index 4dcf9bc32..6c8630835 100644 --- a/geospatial/src/ImageHeightmap.cc +++ b/graphics/src/ImageHeightmap.cc @@ -15,7 +15,7 @@ * */ #include "ignition/common/Console.hh" -#include "ignition/common/geospatial/ImageHeightmap.hh" +#include "ignition/common/ImageHeightmap.hh" using namespace ignition; using namespace common; diff --git a/geospatial/src/ImageHeightmap_TEST.cc b/graphics/src/ImageHeightmap_TEST.cc similarity index 95% rename from geospatial/src/ImageHeightmap_TEST.cc rename to graphics/src/ImageHeightmap_TEST.cc index 3fc52788a..b40880879 100644 --- a/geospatial/src/ImageHeightmap_TEST.cc +++ b/graphics/src/ImageHeightmap_TEST.cc @@ -16,7 +16,7 @@ */ #include <gtest/gtest.h> -#include "ignition/common/geospatial/ImageHeightmap.hh" +#include "ignition/common/ImageHeightmap.hh" #include "test_config.h" #define ELEVATION_TOL 1e-8 @@ -28,7 +28,7 @@ class ImageHeightmapTest : public common::testing::AutoLogFixture { }; class DemTest : public common::testing::AutoLogFixture { }; ///////////////////////////////////////////////// -TEST_F(DemTest, MissingFile) +TEST_F(DemTest, MisingFile) { common::ImageHeightmap img; EXPECT_EQ(-1, img.Load("/file/shouldn/never/exist.png")); @@ -51,9 +51,6 @@ TEST_F(ImageHeightmapTest, BasicAPI) std::cout << "PATH[" << path << "]\n"; EXPECT_EQ(0, img.Load(path)); - // Check filename - EXPECT_EQ(path, img.Filename()); - // Check the heights and widths EXPECT_EQ(129, static_cast<int>(img.Height())); EXPECT_EQ(129, static_cast<int>(img.Width())); diff --git a/test/data/dem_landscape.tif b/test/data/dem_landscape.tif deleted file mode 100644 index b8602372826264dc6772da19b88b719d10975533..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100487 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 diff --git a/test/data/dem_nodata.dem b/test/data/dem_nodata.dem deleted file mode 100644 index 60b04bf4c2edb74b203dbeda0e0d11842d60ae0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9441 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 diff --git a/test/data/dem_portrait.tif b/test/data/dem_portrait.tif deleted file mode 100644 index bc8034221535fcc4c2853b02dfd5b427c066a633..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100487 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 Q<-L)l9qD1MT-?I?A0rVC&j0`b diff --git a/test/data/dem_squared.tif b/test/data/dem_squared.tif deleted file mode 100644 index dcb8dd082844c6bc1c50177ee966bccf9e70db69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67701 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%0Dk)AY}J(1HHU0cS(8CAHu%w(*=9L}AbgYA}C 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 diff --git a/test/data/dem_unfinished.tif b/test/data/dem_unfinished.tif deleted file mode 100644 index 3e7b0b65a35a15848b6985a524829842fe4528f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5144 zcmcgu&u>&!6u#3UqSgwDqQM^-F&ZSH3>`YHrotH*Ad^rwQ-wtpCeoV5mKYdzCcdai zT_ADg#u(p%n79%WmnOZgT$%VMbmh{8YZrdsdFNd2R4l{*C;8@l_nhzic=x>~?RNKv z9U+9>A=E}g4eVv0mhlneb;L)FQ@1_iPu51lKEz%_VjO%N{0#W6+BWU^^k@jrWcuC4 zIqO-|Y}*yWp4ua--;LVmjlTr`LRP!a_y}ry#?d~Ee>N8A2S|MS`B>NvehvJ`wb4)q z{~7$|+E`%S-}t$;Hlj~HhN9xeNO%r&7695sfHe6x7e2h&zqD}W@?dqLef7%Va(`vH zztC&WoNXLxp8sIw{iTV)@>1w_PS@wVCr{RwmRA<T?5R%s^xWd0f3ZL4A9=i9pY0A7 zSL>JhtBY^#?ajC6yS@4D@!t8l_POrd+jD#CSNf|TtsvLfdt|aP*_=H{{Z@r1+GmEU z4$Mq7S`*Wg%|nxKG#XQPZ_qvSugM3Rlhdu4yO#FmJDn5n3{5|DxH&yF(P}jt)6LdY z%UjGI9KMI}?oVHRb7B0uqwaa*TiNf+qu;i|{&?-x^>crHaxA*Grtj#{5VrAcjRbs1 z@OW?dpljieowXge){qU`^?d!6$9CLYWBv*CA$+kq`1-{gmjx2}e*Rqh?5SRT=J3Zn zB37&e%+X>9rI5e`@uL-ZOdN3<Yl&P(4bL8<7dyLWjFxL9A^>O%zTO5G#Ap#5pjW_Y z52<?ReG@m0_Ani5Jnzrqo^o0#x1V3{CBGZw8DkI4*|To$30d0j`ms<<bV7Iv(A}ka zu6(XOGvYKpxAqqt0Om?^TC}-R#Tjx9Y2L><ddYj8Q2yBo7rw*}KOCnr(~2H-CbW9z ztc~CjGaY0lV!=R->fsB-c=i}I<f?_+*$(mbPAHZze-G~gc>!qZMQPG|AMFuu_x64% zkGeF6JvN=$n|X!h>&L2@-otCO4_dfs?K*0s>B+5^*HGhJJ<h3*@l*pTHI5W#4CZJ5 zz8H(KdJp7$_YUqv9jy?XX<pz7_H#}jHo;@=saFl0f7{-Jb2ZN#bfr|jfTuA=E(VQ* zhYYH*8Q$OX+8f$Cd5xi!=Qv}C-#!<=;oD}8ni8OQy?f>z9t+SVfTp{pcHQ*Q_}n7n zCAa`u4;Oyr&+y+0^A76B>2*%#5v}63BQ*-fX;Q)W*B;QSN3Qfdya0uPd4e$qdz2RU z=c0z@=QO7ZSHIEr&UBg(`~u!L^{^P{s=*fk&+Y>_&1-m0+~R(w*V=U?Ovig<ObuQ+ zd;w77V4UEYeF}QOV~jiez3aEnSrNz$@7doUYYIRNsRw5OJTvEeMsUVTK;x!!t?tG; zSmL6`^gZf{-<o}IJnPQuAX4>Zf7YwFn9gI|&H<iaoIc+nosk;iJktd59e5wyIl|ix z`R=+K^%)A|0`GH`TU=|{Gt)6oB#U6#4v8bKdzg?lC6J8V;Cp&s^~m{7)G0@anhf{W z*qwH;JJH$*mDQE>fEv62J}Yr1E$+E=#{H(diP<jyv4h@;_hK#X)O*r%CVRVQZ}O6H zS~M;;3unJu?E{JKgSvG8TkPVy>m2mrY$EN2qsHLyzk^y4v4$WF@4M%9D#DNEwwOJ% zpX=$ly8tw)W^KR=;PZ4poY|v*XI^s%X+1sellL_==N|U)=kh+KR6C%P&eGY@<{-z} zk!Q|>d7XO=-oxC@dlpeE)BYmW9YlKM`2Q()qppBggLkfb@-Art{Er>(R3qrcZ-Ku4 z3;Ggn0ut?gfKx-`UFdz>ryaQ0h5)hZ%lnAN0}VU~;1(-#zjyHaDbZh_RWJvfCXqh? zOur2=4FmV_9`arrk<F`l`u_1v>RyQXKDtXp-~sKxz9st$0PpX<Fs^ZE3g#c+4%(YD z`FDwLlz%U@4Z#o2oUgeDy@U1VJ(QdYPa_YGhqQy<3GV^(`0RrDx)bl{VeWugoUP9v H?VZR!uwoxB From 212d00c4a5e05b5efce9a5ec4b0634842d04d228 Mon Sep 17 00:00:00 2001 From: Steve Peters <scpeters@openrobotics.org> Date: Thu, 20 Jan 2022 14:46:30 -0800 Subject: [PATCH 120/219] README: update badge (#290) Signed-off-by: Steve Peters <scpeters@openrobotics.org> Co-authored-by: Jenn Nguyen <jenn@openrobotics.org> Co-authored-by: Michael Carroll <michael@openrobotics.org> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b2cd727a..f20e31311 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Build | Status -- | -- Test coverage | [![codecov](https://codecov.io/gh/ignitionrobotics/ign-common/branch/main/graph/badge.svg)](https://codecov.io/gh/ignitionrobotics/ign-common) -Ubuntu Bionic | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-main-bionic-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-main-bionic-amd64) +Ubuntu Focal | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-main-focal-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-main-focal-amd64) Homebrew | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-main-homebrew-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-main-homebrew-amd64) Windows | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-main-windows7-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-main-windows7-amd64) From d5261a828fba6400b5815b4d48253c46a9545bb7 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Tue, 25 Jan 2022 13:23:39 -0600 Subject: [PATCH 121/219] Move performance test to examples (#294) Signed-off-by: Michael Carroll <michael@openrobotics.org> --- examples/CMakeLists.txt | 4 ++ .../logging_performance.cc | 39 +++++++++---------- 2 files changed, 22 insertions(+), 21 deletions(-) rename test/performance/logging.cc => examples/logging_performance.cc (92%) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 570041193..4e2b19c10 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -16,3 +16,7 @@ target_link_libraries(events_example ignition-common${IGN_COMMON_VER}::events) add_executable(profiler_example profiler.cc) target_link_libraries(profiler_example ignition-common${IGN_COMMON_VER}::profiler) target_compile_definitions(profiler_example PUBLIC "IGN_PROFILER_ENABLE=1") + +add_executable(logging_performance logging_performance.cc) +target_link_libraries(logging_performance ignition-common${IGN_COMMON_VER}::core) + diff --git a/test/performance/logging.cc b/examples/logging_performance.cc similarity index 92% rename from test/performance/logging.cc rename to examples/logging_performance.cc index d06868a23..c9c88a6d0 100644 --- a/test/performance/logging.cc +++ b/examples/logging_performance.cc @@ -13,8 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. * -*/ -#include <gtest/gtest.h> + */ + +/* This code is originally from: + * https://gist.github.com/KjellKod/0fde0d2564e2eb1b3560 + * For testing worst-case console logging latency with a variable number of + * threads. + */ #include <atomic> #include <map> @@ -23,8 +28,7 @@ #include <ignition/common/Console.hh> namespace { -// Lower value than spdlog to keep CI from flaking -const uint64_t g_iterations{10000}; +const uint64_t g_iterations{1000000}; std::atomic<size_t> g_counter = {0}; @@ -184,24 +188,17 @@ void run(size_t number_of_threads) SaveResultToBucketFile(filename_result, threads_result); } -class LoggingTest: - public ::testing::TestWithParam<std::size_t> -{ -}; - -TEST_P(LoggingTest, RunThreads) -{ - run(GetParam()); - SUCCEED(); -} - -INSTANTIATE_TEST_SUITE_P(LoggingTest, LoggingTest, - ::testing::Values(1, 2, 4, 8, 16, 32)); - ///////////////////////////////////////////////// -// This test is valid (passes) if it runs without segfaults. int main(int argc, char **argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + size_t number_of_threads {0}; + if (argc == 2) { + number_of_threads = atoi(argv[1]); + } + if (argc != 2 || number_of_threads == 0) { + std::cerr << "USAGE is: " << argv[0] << " number_threads" << std::endl; + return 1; + } + + run(number_of_threads); } From daf976d25c198fec7d1d2ffe1fc8fb284760326d Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Tue, 25 Jan 2022 13:24:34 -0600 Subject: [PATCH 122/219] Use SuppressWarning from ign-utils (#295) * Remove SuppressWarning and switch to utils variant * Add aliased version of SuppressWarning Signed-off-by: Michael Carroll <michael@openrobotics.org> --- av/include/ignition/common/AudioDecoder.hh | 6 +- av/include/ignition/common/HWEncoder.hh | 1 - av/include/ignition/common/Video.hh | 6 +- av/include/ignition/common/VideoEncoder.hh | 6 +- events/include/ignition/common/KeyEvent.hh | 6 +- events/include/ignition/common/MouseEvent.hh | 6 +- graphics/include/ignition/common/SubMesh.hh | 1 - include/ignition/common/Console.hh | 14 +- include/ignition/common/Plugin.hh | 6 +- include/ignition/common/PluginLoader.hh | 6 +- include/ignition/common/SuppressWarning.hh | 21 ++- include/ignition/common/Timer.hh | 6 +- .../ignition/common/detail/PluginMacros.hh | 6 +- .../ignition/common/detail/SuppressWarning.hh | 154 ------------------ src/CMakeLists.txt | 1 - test/plugins/CMakeLists.txt | 5 + test/static_assertions/CMakeLists.txt | 3 + 17 files changed, 52 insertions(+), 202 deletions(-) delete mode 100644 include/ignition/common/detail/SuppressWarning.hh diff --git a/av/include/ignition/common/AudioDecoder.hh b/av/include/ignition/common/AudioDecoder.hh index da9479a87..470cb9d6b 100644 --- a/av/include/ignition/common/AudioDecoder.hh +++ b/av/include/ignition/common/AudioDecoder.hh @@ -22,7 +22,7 @@ #include <memory> #include <ignition/common/av/Export.hh> -#include <ignition/common/SuppressWarning.hh> +#include <ignition/utils/SuppressWarning.hh> namespace ignition { @@ -66,10 +66,10 @@ namespace ignition /// \brief Free audio object, close files, streams. private: void Cleanup(); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief Private data pointer private: std::unique_ptr<AudioDecoderPrivate> data; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING }; } } diff --git a/av/include/ignition/common/HWEncoder.hh b/av/include/ignition/common/HWEncoder.hh index 2353a9528..519841627 100644 --- a/av/include/ignition/common/HWEncoder.hh +++ b/av/include/ignition/common/HWEncoder.hh @@ -22,7 +22,6 @@ #include <ignition/common/FlagSet.hh> #include <ignition/common/av/Export.hh> -#include <ignition/common/SuppressWarning.hh> #include <ignition/common/HWVideo.hh> #include <ignition/common/ffmpeg_inc.hh> diff --git a/av/include/ignition/common/Video.hh b/av/include/ignition/common/Video.hh index ee5fe14a6..d01cf6929 100644 --- a/av/include/ignition/common/Video.hh +++ b/av/include/ignition/common/Video.hh @@ -21,7 +21,7 @@ #include <memory> #include <ignition/common/av/Export.hh> -#include <ignition/common/SuppressWarning.hh> +#include <ignition/utils/SuppressWarning.hh> struct AVFormatContext; struct AVCodecContext; @@ -76,10 +76,10 @@ namespace ignition /// \brief free up open Video object, close files, streams private: void Cleanup(); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief Private data pointer private: std::unique_ptr<VideoPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING }; } } diff --git a/av/include/ignition/common/VideoEncoder.hh b/av/include/ignition/common/VideoEncoder.hh index 9c838e8c9..a8c9ee941 100644 --- a/av/include/ignition/common/VideoEncoder.hh +++ b/av/include/ignition/common/VideoEncoder.hh @@ -24,8 +24,8 @@ #include <ignition/common/FlagSet.hh> #include <ignition/common/av/Export.hh> -#include <ignition/common/SuppressWarning.hh> #include <ignition/common/HWVideo.hh> +#include <ignition/utils/SuppressWarning.hh> // Default bitrate (0) indicates that a bitrate should be calculated when // Start is called. @@ -221,11 +221,11 @@ namespace ignition /// memory. This will also delete any temporary files. public: void Reset(); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \internal /// \brief Private data pointer private: std::unique_ptr<VideoEncoderPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING }; } } diff --git a/events/include/ignition/common/KeyEvent.hh b/events/include/ignition/common/KeyEvent.hh index a318cb2d0..765614210 100644 --- a/events/include/ignition/common/KeyEvent.hh +++ b/events/include/ignition/common/KeyEvent.hh @@ -21,7 +21,7 @@ #include <string> #include <ignition/common/events/Export.hh> -#include <ignition/common/SuppressWarning.hh> +#include <ignition/utils/SuppressWarning.hh> namespace ignition { @@ -110,10 +110,10 @@ namespace ignition /// \return this public: KeyEvent& operator=(KeyEvent&& other); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief Private data pointer private: std::unique_ptr<KeyEventPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING }; } } diff --git a/events/include/ignition/common/MouseEvent.hh b/events/include/ignition/common/MouseEvent.hh index b57ad5c4d..98cc5ed7e 100644 --- a/events/include/ignition/common/MouseEvent.hh +++ b/events/include/ignition/common/MouseEvent.hh @@ -21,7 +21,7 @@ #include <ignition/math/Vector2.hh> #include <ignition/common/events/Export.hh> -#include <ignition/common/SuppressWarning.hh> +#include <ignition/utils/SuppressWarning.hh> namespace ignition { @@ -203,11 +203,11 @@ namespace ignition /// \return this public: MouseEvent &operator=(const MouseEvent &_other); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \internal /// \brief Private data pointer private: std::unique_ptr<MouseEventPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING }; } } diff --git a/graphics/include/ignition/common/SubMesh.hh b/graphics/include/ignition/common/SubMesh.hh index 3b4c7721c..10878b653 100644 --- a/graphics/include/ignition/common/SubMesh.hh +++ b/graphics/include/ignition/common/SubMesh.hh @@ -28,7 +28,6 @@ #include <ignition/common/graphics/Types.hh> #include <ignition/common/graphics/Export.hh> -#include <ignition/common/SuppressWarning.hh> namespace ignition { diff --git a/include/ignition/common/Console.hh b/include/ignition/common/Console.hh index 7cd89cb97..e5245fbbf 100644 --- a/include/ignition/common/Console.hh +++ b/include/ignition/common/Console.hh @@ -25,7 +25,7 @@ #include <ignition/common/Util.hh> #include <ignition/common/Export.hh> -#include <ignition/common/SuppressWarning.hh> +#include <ignition/utils/SuppressWarning.hh> namespace ignition { @@ -123,11 +123,11 @@ namespace ignition public: std::ofstream *stream; }; - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief Stores the full path of the directory where all the log files /// are stored. private: std::string logDirectory; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING /// \brief True if initialized. private: bool initialized; @@ -212,10 +212,10 @@ namespace ignition public: std::mutex syncMutex; }; - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief Prefix to use when logging to file. private: std::string prefix; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING }; /// \class Console Console.hh common/common.hh @@ -275,10 +275,10 @@ namespace ignition /// \brief The level of verbosity, the default level is 1. private: static int verbosity; - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief A custom prefix. See SetPrefix(). private: static std::string customPrefix; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING }; } } diff --git a/include/ignition/common/Plugin.hh b/include/ignition/common/Plugin.hh index 92294d511..ee8352576 100644 --- a/include/ignition/common/Plugin.hh +++ b/include/ignition/common/Plugin.hh @@ -24,7 +24,7 @@ #include <string> #include <ignition/common/Export.hh> -#include <ignition/common/SuppressWarning.hh> +#include <ignition/utils/SuppressWarning.hh> namespace ignition { @@ -180,10 +180,10 @@ namespace ignition private: InterfaceMap::iterator PrivateGetOrCreateIterator( const std::string &_interfaceName); - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief PIMPL pointer to the implementation of this class. private: const std::unique_ptr<PluginPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING /// \brief Virtual destructor public: virtual ~Plugin(); diff --git a/include/ignition/common/PluginLoader.hh b/include/ignition/common/PluginLoader.hh index dee83d7ee..8b3b5b642 100644 --- a/include/ignition/common/PluginLoader.hh +++ b/include/ignition/common/PluginLoader.hh @@ -25,8 +25,8 @@ #include <unordered_set> #include <ignition/common/Export.hh> -#include <ignition/common/SuppressWarning.hh> #include <ignition/common/PluginPtr.hh> +#include <ignition/utils/SuppressWarning.hh> namespace ignition { @@ -91,10 +91,10 @@ namespace ignition private: const PluginInfo *PrivateGetPluginInfo( const std::string &_pluginName) const; - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief PIMPL pointer to class implementation private: std::unique_ptr<PluginLoaderPrivate> dataPtr; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING }; } } diff --git a/include/ignition/common/SuppressWarning.hh b/include/ignition/common/SuppressWarning.hh index d989fec29..a4e00c8db 100644 --- a/include/ignition/common/SuppressWarning.hh +++ b/include/ignition/common/SuppressWarning.hh @@ -15,11 +15,15 @@ * */ - #ifndef IGNITION_COMMON_SUPPRESSWARNING_HH_ #define IGNITION_COMMON_SUPPRESSWARNING_HH_ -#include <ignition/common/detail/SuppressWarning.hh> +#include <ignition/utils/SuppressWarning.hh> + +#pragma message("ign-common SuppressWarning is deprecated, use ign-utils") +// These macros have been moved to ign-utils so they may be more broadly used. +// The implementations are aliases to those implementations and are deprecated +// in ign-common5 and are to be removed in ign-common6 // This header contains cross-platform macros for suppressing warnings. Please // only use these macros responsibly when you are certain that the compiler is @@ -50,10 +54,10 @@ /// of our implementation) that the pointer is definitely not pointing to a more /// derived type. #define IGN_COMMON_WARN_IGNORE__DELETE_NON_VIRTUAL_DESTRUCTOR \ - DETAIL_IGN_COMMON_WARN_IGNORE__DELETE_NON_VIRTUAL_DESTRUCTOR + IGN_UTILS_WARN_IGNORE__NON_VIRTUAL_DESTRUCTOR #define IGN_COMMON_WARN_RESUME__DELETE_NON_VIRTUAL_DESTRUCTOR \ - DETAIL_IGN_COMMON_WARN_RESUME__DELETE_NON_VIRTUAL_DESTRUCTOR + IGN_UTILS_WARN_RESUME__NON_VIRTUAL_DESTRUCTOR /// \brief Microsoft Visual Studio does not automatically export the interface @@ -62,14 +66,9 @@ /// choose to suppress the warning instead of needlessly adding the class /// information to the DLL interface. #define IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING \ - DETAIL_IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING #define IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING \ - DETAIL_IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING - - -// TODO(anyone): Add more warning types as they become relevant. -// Do not add warning -// types to suppress unless they are genuinely necessary. + IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING #endif diff --git a/include/ignition/common/Timer.hh b/include/ignition/common/Timer.hh index 7fda12dba..f53dfa0a9 100644 --- a/include/ignition/common/Timer.hh +++ b/include/ignition/common/Timer.hh @@ -18,7 +18,7 @@ #define IGNITION_COMMON_TIMER_HH_ #include <ignition/common/Export.hh> -#include <ignition/common/SuppressWarning.hh> +#include <ignition/utils/SuppressWarning.hh> #include <chrono> #include <iostream> @@ -59,13 +59,13 @@ namespace ignition return out; } - IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief The time of the last call to Start private: std::chrono::steady_clock::time_point start; /// \brief The time when Stop was called. private: std::chrono::steady_clock::time_point stop; - IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING /// \brief True if the timer is running. private: bool running; diff --git a/include/ignition/common/detail/PluginMacros.hh b/include/ignition/common/detail/PluginMacros.hh index 5e1312cce..733c91938 100644 --- a/include/ignition/common/detail/PluginMacros.hh +++ b/include/ignition/common/detail/PluginMacros.hh @@ -25,7 +25,7 @@ #include <unordered_set> #include <utility> #include "ignition/common/PluginInfo.hh" -#include "ignition/common/SuppressWarning.hh" +#include "ignition/utils/SuppressWarning.hh" #if defined _WIN32 || defined __CYGWIN__ @@ -63,7 +63,7 @@ #define DETAIL_IGN_COMMON_BEGIN_ADDING_PLUGINS \ DETAIL_IGN_COMMON_REGISTER_PLUGININFO_META_DATA \ -IGN_COMMON_WARN_IGNORE__DELETE_NON_VIRTUAL_DESTRUCTOR \ +IGN_UTILS_WARN_IGNORE__NON_VIRTUAL_DESTRUCTOR \ /* This struct attempts to make sure that the macro is being called from */ \ /* a global namespace */ \ struct IGN_macro_must_be_used_in_global_namespace; \ @@ -172,7 +172,7 @@ IGN_COMMON_WARN_IGNORE__DELETE_NON_VIRTUAL_DESTRUCTOR \ } \ return visitedPlugins.size() - _pluginId; \ } \ -IGN_COMMON_WARN_RESUME__DELETE_NON_VIRTUAL_DESTRUCTOR +IGN_UTILS_WARN_RESUME__NON_VIRTUAL_DESTRUCTOR #endif diff --git a/include/ignition/common/detail/SuppressWarning.hh b/include/ignition/common/detail/SuppressWarning.hh deleted file mode 100644 index 535e7fa34..000000000 --- a/include/ignition/common/detail/SuppressWarning.hh +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2017 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - - -#ifndef IGNITION_COMMON_DETAIL_SUPPRESSWARNING_HH_ -#define IGNITION_COMMON_DETAIL_SUPPRESSWARNING_HH_ - -#define DETAIL_IGN_COMMON_STRINGIFY(x) #x - -/* cppcheck-suppress */ - -// BEGIN / FINISH Macros - -#if defined __clang__ - - #define DETAIL_IGN_COMMON_BEGIN_WARN_SUP_PUSH \ - _Pragma("clang diagnostic push") - - - #define DETAIL_IGN_COMMON_WARN_SUP_HELPER_2(w) \ - DETAIL_IGN_COMMON_STRINGIFY(clang diagnostic ignored w) - - - #define DETAIL_IGN_COMMON_WARN_SUP_HELPER(w) \ - _Pragma(DETAIL_IGN_COMMON_WARN_SUP_HELPER_2(w)) - - - #define DETAIL_IGN_COMMON_WARN_RESUME \ - _Pragma("clang diagnostic pop") - - -#elif defined __GNUC__ - - // NOTE: clang will define both __clang__ and __GNUC__, and it seems that - // clang will gladly accept GCC pragmas. Even so, if we want the pragmas to - // target the "correct" compiler, we should check if __clang__ is defined - // before checking whether __GNUC__ is defined. - - #define DETAIL_IGN_COMMON_BEGIN_WARN_SUP_PUSH \ - _Pragma("GCC diagnostic push") - - - #define DETAIL_IGN_COMMON_WARN_SUP_HELPER_2(w) \ - DETAIL_IGN_COMMON_STRINGIFY(GCC diagnostic ignored w) - - - #define DETAIL_IGN_COMMON_WARN_SUP_HELPER(w) \ - _Pragma(DETAIL_IGN_COMMON_WARN_SUP_HELPER_2(w)) - - - #define DETAIL_IGN_COMMON_WARN_RESUME \ - _Pragma("GCC diagnostic pop") - - -#elif defined _MSC_VER - - - #define DETAIL_IGN_COMMON_BEGIN_WARN_SUP_PUSH \ - __pragma(warning(push)) - - - #define DETAIL_IGN_COMMON_WARN_SUP_HELPER(w) \ - __pragma(warning(disable: w)) - - - #define DETAIL_IGN_COMMON_WARN_RESUME \ - __pragma(warning(pop)) - - -#else - - // Make these into no-ops if we don't know the type of compiler - - #define DETAIL_IGN_COMMON_BEGIN_WARN_SUP_PUSH - - - #define DETAIL_IGN_COMMON_WARN_SUP_HELPER(w) - - - #define DETAIL_IGN_COMMON_WARN_RESUME - - -#endif - - -#define DETAIL_IGN_COMMON_BEGIN_WARNING_SUPPRESSION(warning_token) \ - DETAIL_IGN_COMMON_BEGIN_WARN_SUP_PUSH \ - DETAIL_IGN_COMMON_WARN_SUP_HELPER(warning_token) - - - -// Warning Tokens -#if defined __GNUC__ || defined __clang__ - - #define DETAIL_IGN_COMMON_WARN_IGNORE__DELETE_NON_VIRTUAL_DESTRUCTOR \ - DETAIL_IGN_COMMON_BEGIN_WARNING_SUPPRESSION("-Wdelete-non-virtual-dtor") - - #define DETAIL_IGN_COMMON_WARN_RESUME__DELETE_NON_VIRTUAL_DESTRUCTOR \ - DETAIL_IGN_COMMON_WARN_RESUME - - - // There is no analogous warning for this in GCC or Clang so we just make - // blank macros for this warning type. - #define DETAIL_IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - #define DETAIL_IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING - - -#elif defined _MSC_VER - - #define DETAIL_IGN_COMMON_WARN_IGNORE__DELETE_NON_VIRTUAL_DESTRUCTOR \ - DETAIL_IGN_COMMON_BEGIN_WARNING_SUPPRESSION(4265) - - #define DETAIL_IGN_COMMON_WARN_RESUME__DELETE_NON_VIRTUAL_DESTRUCTOR \ - DETAIL_IGN_COMMON_WARN_RESUME - - - #define DETAIL_IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING \ - DETAIL_IGN_COMMON_BEGIN_WARNING_SUPPRESSION(4251) - - #define DETAIL_IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING \ - DETAIL_IGN_COMMON_WARN_RESUME - - -#else - - // If the compiler is unknown, we simply leave these macros blank to avoid - // compilation errors. - - #define DETAIL_IGN_COMMON_WARN_IGNORE__DELETE_NON_VIRTUAL_DESTRUCTOR - #define DETAIL_IGN_COMMON_WARN_RESUME__DELETE_NON_VIRTUAL_DESTRUCTOR - - - #define DETAIL_IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING - #define DETAIL_IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING - - -#endif - - -#endif diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b36e0af24..ca25e7ff6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,7 +16,6 @@ target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER} ) - # This is required by the WorkerPool::WaitForResults(const Time &_timeout) # TODO(anyone): IGN_DEPRECATED(4). Remove this part when the method is removed target_include_directories(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE diff --git a/test/plugins/CMakeLists.txt b/test/plugins/CMakeLists.txt index 63e24a7e3..9c82a014c 100644 --- a/test/plugins/CMakeLists.txt +++ b/test/plugins/CMakeLists.txt @@ -1,8 +1,13 @@ add_library(IGNBadPluginAlign SHARED BadPluginAlign.cc) +target_link_libraries(IGNBadPluginAlign PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) add_library(IGNBadPluginAPIVersionNew SHARED BadPluginAPIVersionNew.cc) +target_link_libraries(IGNBadPluginAPIVersionNew PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) add_library(IGNBadPluginAPIVersionOld SHARED BadPluginAPIVersionOld.cc) +target_link_libraries(IGNBadPluginAPIVersionOld PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) add_library(IGNBadPluginSize SHARED BadPluginSize.cc) +target_link_libraries(IGNBadPluginSize PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) add_library(IGNDummyPlugins SHARED DummyPlugins.cc) +target_link_libraries(IGNDummyPlugins PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) set_property(TARGET IGNBadPluginAlign PROPERTY CXX_STANDARD 11) set_property(TARGET IGNBadPluginAPIVersionNew PROPERTY CXX_STANDARD 11) diff --git a/test/static_assertions/CMakeLists.txt b/test/static_assertions/CMakeLists.txt index 4a71272b8..b3ba61b29 100644 --- a/test/static_assertions/CMakeLists.txt +++ b/test/static_assertions/CMakeLists.txt @@ -18,6 +18,9 @@ if (UNIX) set_target_properties(${test} PROPERTIES EXCLUDE_FROM_ALL TRUE EXCLUDE_FROM_DEFAULT_BUILD TRUE) + target_link_libraries(${test} PRIVATE + ${PROJECT_LIBRARY_TARGET_NAME} + ) if (Rflag) target_compile_options(${test} PRIVATE ${flag}) endif() From f22ef93c6b51628eb7a9ba19e449a2e12d860bff Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Tue, 1 Feb 2022 14:44:06 -0600 Subject: [PATCH 123/219] Fix out-of-bound access in URI (#304) Signed-off-by: Michael Carroll <michael@openrobotics.org> --- src/URI.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/URI.cc b/src/URI.cc index 81ab22c2c..67a09203d 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -667,7 +667,7 @@ bool URIPath::Parse(const std::string &_str) // explicitly check for it this->dataPtr->isAbsolute = this->dataPtr->IsStringAbsolute(_str); this->dataPtr->trailingSlash = - _str.back() == '/' && _str.size() != 1; + _str.size() > 1 &&_str.back() == '/'; return true; } @@ -1199,14 +1199,16 @@ bool URI::Parse(const std::string &_str) size_t authEndPos = str.find_first_of("/?#", authDelimPos + std::strlen(kAuthDelim)); + if (authEndPos != std::string::npos && + (str[authEndPos-1] == ':' && str[authEndPos] == '/')) + { // This could be a windows file path of the form file://D:/path/to/file // In this case, the authority is not present. - if (str[authEndPos-1] == ':' && str[authEndPos] == '/') - { str.erase(0, std::strlen(kAuthDelim)); authorityPresent = false; } - else if (localScheme != "file" && authEndPos == authDelimPos+2) + else if (localScheme != "file" && + authEndPos == authDelimPos + std::strlen(kAuthDelim)) { ignerr << "A host is manadatory when using a scheme other than file\n"; return false; From fdcb378b262b93ebb603bcc1b6de98e79a037939 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Fri, 4 Feb 2022 07:06:23 -0600 Subject: [PATCH 124/219] Update to use std::filesystem rather than Boost (#238) This is intended to be a drop-in replacement for the functionality that is currently in FilesystemBoost, as is demonstrated via no test updates. Signed-off-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Louise Poubel <louise@openrobotics.org> Co-authored-by: Steve Peters <scpeters@openrobotics.org> --- examples/logging_performance.cc | 2 +- include/ignition/common/Filesystem.hh | 12 - include/ignition/common/SystemPaths.hh | 13 - src/CMakeLists.txt | 7 + src/DirIter.cc | 75 +++ src/Filesystem.cc | 570 ++++++++-------------- src/FilesystemBoost.cc | 638 ------------------------- src/SystemPaths.cc | 19 +- src/TempDirectory.cc | 63 +-- src/Util.cc | 27 +- 10 files changed, 325 insertions(+), 1101 deletions(-) create mode 100644 src/DirIter.cc delete mode 100644 src/FilesystemBoost.cc diff --git a/examples/logging_performance.cc b/examples/logging_performance.cc index c9c88a6d0..f92fa0fdb 100644 --- a/examples/logging_performance.cc +++ b/examples/logging_performance.cc @@ -42,7 +42,7 @@ void WriteToFile(std::string result_filename, std::string content) std::cerr << "Error writing to " << result_filename << std::endl; } out << content << std::flush; - std::cout << content; + //std::cout << content; } void MeasurePeakDuringLogWrites(const size_t id, std::vector<uint64_t> &result) diff --git a/include/ignition/common/Filesystem.hh b/include/ignition/common/Filesystem.hh index aa36f0a6f..fb765d523 100644 --- a/include/ignition/common/Filesystem.hh +++ b/include/ignition/common/Filesystem.hh @@ -264,9 +264,6 @@ namespace ignition /// \param[in] _in Directory to iterate over. public: explicit DirIter(const std::string &_in); - /// \brief Destructor - public: ~DirIter(); - /// \brief Dereference operator; returns current directory record. /// \return A string representing the entire path of the directory /// record. @@ -282,15 +279,6 @@ namespace ignition /// \return true if the iterators are equal, false otherwise. public: bool operator!=(const DirIter &_other) const; - /// \brief Move to the next directory record, skipping . and .. records. - private: void Next(); - - /// \brief Set the internal variable to the empty string. - private: void SetInternalEmpty(); - - /// \brief Close an open directory handle. - private: void CloseHandle(); - /// \brief Pointer to private data. IGN_UTILS_IMPL_PTR(dataPtr) }; diff --git a/include/ignition/common/SystemPaths.hh b/include/ignition/common/SystemPaths.hh index 9b8224525..d368dc737 100644 --- a/include/ignition/common/SystemPaths.hh +++ b/include/ignition/common/SystemPaths.hh @@ -17,16 +17,6 @@ #ifndef IGNITION_COMMON_SYSTEMPATHS_HH_ #define IGNITION_COMMON_SYSTEMPATHS_HH_ -#include <stdio.h> - -#ifdef _WIN32 - #include <direct.h> - #define GetCurrentDir _getcwd -#else - #include <unistd.h> - #define GetCurrentDir getcwd -#endif - #include <functional> #include <list> #include <string> @@ -41,9 +31,6 @@ namespace ignition { namespace common { - // Forward declare private data class - class SystemPathsPrivate; - /// \class SystemPaths SystemPaths.hh ignition/common/SystemPaths.hh /// \brief Functions to handle getting system paths, keeps track of: /// \li SystemPaths#pluginPaths - plugin library paths diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ca25e7ff6..62cc2ef15 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,10 +8,17 @@ ign_create_core_library( SOURCES ${sources} CXX_STANDARD 17) +if (CMAKE_CXX_COMPILER_ID STREQUAL GNU) + set(CXX_FILESYSTEM_LIBRARIES stdc++fs) +else() + set(CXX_FILESYSTEM_LIBRARIES) +endif() + # Link the libraries that we always need target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE ${DL_TARGET} + ${CXX_FILESYSTEM_LIBRARIES} PUBLIC ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER} ) diff --git a/src/DirIter.cc b/src/DirIter.cc new file mode 100644 index 000000000..d8b19ab90 --- /dev/null +++ b/src/DirIter.cc @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2021 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ + +#include <filesystem> + +#include "ignition/common/Filesystem.hh" + +namespace fs = std::filesystem; + +namespace ignition +{ +namespace common +{ + +class DirIter::Implementation +{ + /// \brief Filesystem iterator that this class is wrapping + public: fs::directory_iterator it; +}; + +////////////////////////////////////////////////// +DirIter::DirIter(): + dataPtr(ignition::utils::MakeImpl<Implementation>()) +{ + this->dataPtr->it = fs::directory_iterator(); +} + +////////////////////////////////////////////////// +DirIter::DirIter(const std::string &_in): + DirIter() +{ + try + { + this->dataPtr->it = fs::directory_iterator(_in); + } + catch (const fs::filesystem_error &ex) + { + } +} + +////////////////////////////////////////////////// +std::string DirIter::operator*() const +{ + return this->dataPtr->it->path().string(); +} + +////////////////////////////////////////////////// +const DirIter &DirIter::operator++() +{ + this->dataPtr->it++; + return *this; +} + +////////////////////////////////////////////////// +bool DirIter::operator!=(const DirIter &_other) const +{ + return (this->dataPtr->it != _other.dataPtr->it); +} + +} // namespace common +} // namespace ignition diff --git a/src/Filesystem.cc b/src/Filesystem.cc index 107b2ca7d..ba4fda7e8 100644 --- a/src/Filesystem.cc +++ b/src/Filesystem.cc @@ -15,16 +15,10 @@ * */ -#include <sys/stat.h> - -#ifdef __linux__ -#include <sys/sendfile.h> -#endif - -#include <iomanip> #include <array> #include <algorithm> #include <sstream> +#include <filesystem> #include <fstream> #include <cstdlib> #include <cstring> @@ -36,466 +30,292 @@ #include <ignition/common/Util.hh> #include <ignition/common/Uuid.hh> #include <ignition/common/Console.hh> - -#ifndef _WIN32 -#include <dirent.h> -#include <limits.h> -#include <climits> -#else -#include <shlwapi.h> -#include <io.h> -#include "win_dirent.h" -#include "PrintWindowsSystemWarning.hh" -#endif - #include "ignition/common/Filesystem.hh" -#ifdef _WIN32 -# define IGN_PATH_MAX _MAX_PATH -#elif defined(PATH_MAX) -# define IGN_PATH_MAX PATH_MAX -#elif defined(_XOPEN_PATH_MAX) -# define IGN_PATH_MAX _XOPEN_PATH_MAX -#else -# define IGN_PATH_MAX _POSIX_PATH_MAX -#endif - -namespace igncmn = ignition::common; -using namespace ignition; -using namespace igncmn; - -///////////////////////////////////////////////// -bool ignition::common::isFile(const std::string &_path) -{ - std::ifstream f(_path); - return (!isDirectory(_path)) && f.good(); -} +namespace fs = std::filesystem; ///////////////////////////////////////////////// -bool ignition::common::removeDirectory(const std::string &_path, - const FilesystemWarningOp _warningOp) +// Return true if success, false if error +inline bool fsWarn(const std::string &_fcn, + const std::error_code &_ec, + const ignition::common::FilesystemWarningOp &_warningOp = + ignition::common::FSWO_LOG_WARNINGS) { - bool removed = false; - if (ignition::common::isDirectory(_path)) + if (_ec) { -#ifdef _WIN32 - removed = RemoveDirectory(_path.c_str()); - if (!removed && FSWO_LOG_WARNINGS == _warningOp) + if (ignition::common::FSWO_LOG_WARNINGS == _warningOp) { - ignition::common::PrintWindowsSystemWarning( - "Failed to remove directory [" + _path + "]"); + ignwarn << "Failed ignition::common::" << _fcn + << " (ec: " << _ec << " " << _ec.message() << ")\n"; } -#else - removed = (rmdir(_path.c_str()) == 0); - if (!removed) - { - // A sym link would end up here - removed = (std::remove(_path.c_str()) == 0); - } - - if (!removed && FSWO_LOG_WARNINGS == _warningOp) - { - ignwarn << "Failed to remove directory [" + _path + "]: " - << std::strerror(errno) << "\n"; - } -#endif - } - else if (_warningOp) - { - ignwarn << "The path [" << _path << "] does not refer to a directory\n"; + return false; } - - return removed; + return true; } ///////////////////////////////////////////////// -bool ignition::common::removeFile(const std::string &_existingFilename, - const FilesystemWarningOp _warningOp) +bool ignition::common::exists(const std::string &_path) { - const bool removed = (std::remove(_existingFilename.c_str()) == 0); - if (!removed && FSWO_LOG_WARNINGS == _warningOp) - { - ignwarn << "Failed to remove file [" << _existingFilename << "]: " - << std::strerror(errno) << "\n"; - } + return fs::exists(_path); +} - return removed; +///////////////////////////////////////////////// +bool ignition::common::isDirectory(const std::string &_path) +{ + return fs::is_directory(_path); } ///////////////////////////////////////////////// -bool ignition::common::removeDirectoryOrFile( - const std::string &_path, - const FilesystemWarningOp _warningOp) +bool ignition::common::isFile(const std::string &_path) { - if (ignition::common::isDirectory(_path)) - { - return ignition::common::removeDirectory(_path, _warningOp); - } - else if (ignition::common::isFile(_path)) - { - return ignition::common::removeFile(_path, _warningOp); - } - else if (FSWO_LOG_WARNINGS == _warningOp) - { - ignwarn << "The path [" << _path << "] does not refer to a " - << "directory nor to a file\n"; - } - return false; + return fs::is_regular_file(_path); } ///////////////////////////////////////////////// -bool ignition::common::removeAll(const std::string &_path, - const FilesystemWarningOp _warningOp) +bool ignition::common::createDirectory(const std::string &_path) { - if (ignition::common::isDirectory(_path)) - { - DIR *dir = opendir(_path.c_str()); - if (dir) - { - struct dirent *p; - while ((p=readdir(dir))) - { - // Skip special files. - if (!std::strcmp(p->d_name, ".") || !std::strcmp(p->d_name, "..")) - continue; - - const auto removed = ignition::common::removeAll( - ignition::common::joinPaths(_path, p->d_name), _warningOp); - if (!removed) - return false; - } - } - closedir(dir); - } + std::error_code ec; + fs::create_directory(_path, ec); + return fsWarn("createDirectory", ec); +} - return ignition::common::removeDirectoryOrFile(_path, _warningOp); +///////////////////////////////////////////////// +bool ignition::common::createDirectories(const std::string &_path) +{ + std::error_code ec; + // Disregard return of create_directories, because it may return false if the + // directory is not actually created (already exists) + bool created = fs::create_directories(_path, ec); + (void) created; + return fsWarn("createDirectories", ec); } ///////////////////////////////////////////////// -bool ignition::common::moveFile(const std::string &_existingFilename, - const std::string &_newFilename, - const FilesystemWarningOp _warningOp) +std::string const ignition::common::separator(std::string const &_s) { - if (!copyFile(_existingFilename, _newFilename, _warningOp)) - return false; + fs::path path(_s); + return (_s / fs::path("")).string(); +} - if (removeFile(_existingFilename, _warningOp)) - return true; +///////////////////////////////////////////////// +void ignition::common::changeFromUnixPath(std::string &_path) { + std::replace(_path.begin(), _path.end(), '/', + static_cast<char>(fs::path::preferred_separator)); +} - // The original file could not be removed, which means we are not - // able to "move" it (we can only copy it, apparently). Since this - // function is meant to move files, and we have failed to move the - // file, we should remove the copy that we made earlier. - removeFile(_newFilename, _warningOp); +///////////////////////////////////////////////// +std::string ignition::common::copyFromUnixPath(const std::string &_path) +{ + std::string copy = _path; + changeFromUnixPath(copy); + return copy; +} - return false; +///////////////////////////////////////////////// +void ignition::common::changeToUnixPath(std::string &_path) { + std::replace(_path.begin(), _path.end(), + static_cast<char>(fs::path::preferred_separator), '/'); } ///////////////////////////////////////////////// -std::string ignition::common::absPath(const std::string &_path) +std::string ignition::common::copyToUnixPath(const std::string &_path) { - std::string result; - - // cppcheck-suppress ConfigurationNotChecked - char path[IGN_PATH_MAX] = ""; -#ifdef _WIN32 - if (GetFullPathName(_path.c_str(), IGN_PATH_MAX, &path[0], nullptr) != 0) -#else - if (realpath(_path.c_str(), &path[0]) != nullptr) -#endif - result = path; - else if (!_path.empty()) - { - // If _path is an absolute path, then return _path. - // An absolute path on Windows is a character followed by a colon and a - // backslash. - if (_path.compare(0, 1, "/") == 0 || _path.compare(1, 3, ":\\") == 0) - result = _path; - // Otherwise return the current working directory with _path appended. - else - result = joinPaths(ignition::common::cwd(), _path); - } - - ignition::common::replaceAll(result, result, "//", "/"); + std::string copy = _path; + changeToUnixPath(copy); + return copy;; +} - return result; +///////////////////////////////////////////////// +std::string ignition::common::absPath(const std::string &_path) +{ + return fs::absolute(_path).string(); } -// This is help function to handle windows paths, there are a mix between '/' -// and backslashes. -// joinPaths uses the system separator, in Windows this generate some issues -// with URIs -std::string checkWindowsPath(const std::string _path) +///////////////////////////////////////////////// +std::string ignition::common::joinPaths( + const std::string &_path1, const std::string &_path2) { - if (_path.empty()) - return _path; + fs::path p1{_path1}; + fs::path p2{_path2}; - // Check if this is a http or https, if so change backslashes generated by - // jointPaths to '/' - if ((_path.size() > 7 && 0 == _path.compare(0, 7, "http://")) || - (_path.size() > 8 && 0 == _path.compare(0, 8, "https://"))) - { - return std::regex_replace(_path, std::regex(R"(\\)"), "/"); - } + bool is_url = false; + + if (_path1.find("://") == std::string::npos) + p1 = p1.lexically_normal(); + else + is_url = true; - // This is a Windows path, convert all '/' into backslashes - std::string result = std::regex_replace(_path, std::regex(R"(/)"), "\\"); - std::string drive_letters; + // TODO(mjcarroll) Address the case that path2 is also a URI. + // It's likely not a valid scenario, but not currently covered by our test + // suite and doesn't return an error. + if (_path2.find("://") == std::string::npos) + p2 = p2.lexically_normal(); + else + is_url = true; - // only Windows contains absolute paths starting with drive letters - if (result.length() > 3 && 0 == result.compare(1, 2, ":\\")) + if (p2.string()[0] == fs::path::preferred_separator) { - drive_letters = result.substr(0, 3); - result = result.substr(3); + p2 = fs::path{p2.string().substr(1)}; } - result = drive_letters + std::regex_replace( - result, std::regex("[<>:\"|?*]"), ""); - return result; -} -////////////////////////////////////////////////// -std::string ignition::common::joinPaths(const std::string &_path1, - const std::string &_path2) -{ - - /// This function is used to avoid duplicated path separators at the - /// beginning/end of the string, and between the two paths being joined. - /// \param[in] _path This is the string to sanitize. - /// \param[in] _stripLeading True if the leading separator should be - /// removed. - auto sanitizeSlashes = [](const std::string &_path, - bool _stripLeading = false) - { - // Shortcut - if (_path.empty()) - return _path; - - std::string result = _path; - - // Use the appropriate character for each platform. -#ifndef _WIN32 - char replacement = '/'; -#else - char replacement = '\\'; -#endif - - // Sanitize the start of the path. - size_t index = 0; - size_t leadingIndex = _stripLeading ? 0 : 1; - for (; index < result.length() && result[index] == replacement; ++index) - { - } - if (index > leadingIndex) - result.erase(leadingIndex, index-leadingIndex); + auto ret = (p1 / p2); - // Sanitize the end of the path. - index = result.length()-1; - for (; index < result.length() && result[index] == replacement; --index) - { - } - index += 1; - if (index < result.length()-1) - result.erase(index+1); - return result; - }; - - std::string path; -#ifndef _WIN32 - path = sanitizeSlashes(sanitizeSlashes(separator(_path1)) + - sanitizeSlashes(_path2, true)); -#else // _WIN32 - std::string path1 = sanitizeSlashes(checkWindowsPath(_path1)); - std::string path2 = sanitizeSlashes(checkWindowsPath(_path2), true); - std::vector<CHAR> combined(path1.length() + path2.length() + 2); - if (::PathCombineA(combined.data(), path1.c_str(), path2.c_str()) != NULL) + if (is_url) { - path = sanitizeSlashes(checkWindowsPath(std::string(combined.data()))); + return copyToUnixPath(ret.string()); } else { - path = sanitizeSlashes(checkWindowsPath(separator(path1) + path2)); + return ret.lexically_normal().string(); } -#endif // _WIN32 - return path; } ///////////////////////////////////////////////// -std::string ignition::common::parentPath(const std::string &_path) +std::string ignition::common::cwd() { - std::string result; + std::error_code ec; + auto curdir = fs::current_path(ec); - size_t last_sep = _path.find_last_of(separator("")); - // If slash is the last character, find its parent directory - if (last_sep == _path.length() - 1) - last_sep = _path.substr(0, last_sep).find_last_of(separator("")); - - result = _path.substr(0, last_sep); + if (!fsWarn("cwd", ec)) + { + curdir = ""; + } - return result; + return curdir.string(); } ///////////////////////////////////////////////// -bool ignition::common::copyFile(const std::string &_existingFilename, - const std::string &_newFilename, - const FilesystemWarningOp _warningOp) +bool ignition::common::chdir(const std::string &_dir) { - std::string absExistingFilename = - ignition::common::absPath(_existingFilename); - std::string absNewFilename = ignition::common::absPath(_newFilename); + std::error_code ec; + fs::current_path(_dir, ec); + return fsWarn("chdir", ec); +} - if (absExistingFilename == absNewFilename) - return false; +///////////////////////////////////////////////// +std::string ignition::common::basename(const std::string &_path) +{ + fs::path p(_path); + // Maintain compatibility with ign-common + if (*_path.rbegin() == fs::path::preferred_separator) + p = fs::path(_path.substr(0, _path.size()-1)); + return p.filename().string(); +} -#ifdef _WIN32 - const bool copied = CopyFile(absExistingFilename.c_str(), - absNewFilename.c_str(), false); +///////////////////////////////////////////////// +std::string ignition::common::parentPath(const std::string &_path) +{ + fs::path p(_path); + // Maintain compatibility with ign-common + if (*_path.rbegin() == fs::path::preferred_separator) + p = fs::path(_path.substr(0, _path.size()-1)); + return p.parent_path().string(); +} - if (!copied && FSWO_LOG_WARNINGS == _warningOp) - { - ignition::common::PrintWindowsSystemWarning( - "Failed to copy file [" + absExistingFilename - + "] to [" + absNewFilename + "]"); - } +///////////////////////////////////////////////// +bool ignition::common::copyFile( + const std::string &_existingFilename, + const std::string &_newFilename, + const FilesystemWarningOp _warningOp) +{ + const auto copyOptions = fs::copy_options::overwrite_existing; + std::error_code ec; + auto ret = fs::copy_file(_existingFilename, _newFilename, copyOptions, ec); + return ret && fsWarn("copyFile", ec, _warningOp); +} - return copied; -#else - bool result = false; - std::ifstream in(absExistingFilename.c_str(), std::ifstream::binary); +///////////////////////////////////////////////// +bool ignition::common::copyDirectory( + const std::string &_existingDirname, + const std::string &_newDirname, + const FilesystemWarningOp _warningOp) +{ + const auto copyOptions = fs::copy_options::recursive + | fs::copy_options::overwrite_existing; - if (in.good()) - { - std::ofstream out(absNewFilename.c_str(), - std::ifstream::trunc | std::ifstream::binary); - if (out.good()) - { - out << in.rdbuf(); - result = ignition::common::isFile(absNewFilename); - } - else if (FSWO_LOG_WARNINGS == _warningOp) - { - ignwarn << "Failed to create file [" << absNewFilename << "]: " - << std::strerror(errno) << "\n"; - } - out.close(); - } - else if (FSWO_LOG_WARNINGS == _warningOp) + // std::filesystem won't create intermediate directories + // before copying, this maintains compatibility with ignition behavior. + if (!ignition::common::createDirectories(_newDirname)) { - ignwarn << "Failed to open file [" << absExistingFilename << "]: " - << std::strerror(errno) << "\n"; + return false; } - in.close(); - return result; -#endif + std::error_code ec; + fs::copy(_existingDirname, _newDirname, copyOptions, ec); + return fsWarn("copyDirectory", ec, _warningOp); } ///////////////////////////////////////////////// -bool ignition::common::copyDirectory(const std::string &_existingDirname, - const std::string &_newDirname, - const FilesystemWarningOp _warningOp) +bool ignition::common::moveFile( + const std::string &_existingFilename, + const std::string &_newFilename, + const FilesystemWarningOp _warningOp) { - // Check whether source directory exists - if (!exists(_existingDirname) || !isDirectory(_existingDirname)) + std::error_code ec; + fs::rename(_existingFilename, _newFilename, ec); + return fsWarn("moveFile", ec, _warningOp); +} + +///////////////////////////////////////////////// +bool ignition::common::removeDirectory( + const std::string &_path, + const FilesystemWarningOp _warningOp) +{ + if (!isDirectory(_path)) { if (FSWO_LOG_WARNINGS == _warningOp) { - ignwarn << "Source directory [" << _existingDirname - << "] does not exist or is not a directory" << std::endl; + ignwarn << "Cannot remove, not a directory [" << _path << "]\n"; } + return false; } - if (exists(_newDirname)) - { - if (!removeAll(_newDirname, _warningOp)) - { - if (FSWO_LOG_WARNINGS == _warningOp) - { - ignwarn << "Unable to remove existing destination directory [" - << _newDirname << "]\n"; - } - return false; - } - } - // Create the destination directory - if (!createDirectories(_newDirname)) + return removeDirectoryOrFile(_path, _warningOp); +} + +///////////////////////////////////////////////// +bool ignition::common::removeFile( + const std::string &_existingFilename, + const FilesystemWarningOp _warningOp) +{ + if (!isFile(_existingFilename)) { if (FSWO_LOG_WARNINGS == _warningOp) { - ignwarn << "Unable to create the destination directory [" - << _newDirname << "], please check the permission\n"; + ignwarn << "Cannot remove, not a file [" << _existingFilename << "]\n"; } return false; } - // Start copy from source to destination directory - for (DirIter file(_existingDirname); file != DirIter(); ++file) - { - std::string current(*file); - if (isDirectory(current)) - { - // Copy recursively - if (!copyDirectory(current, joinPaths(_newDirname, basename(current)), - _warningOp)) - { - if (FSWO_LOG_WARNINGS == _warningOp) - { - ignwarn << "Unable to copy directory to [" - << joinPaths(_newDirname, basename(current)) << "]\n"; - } - return false; - } - } - else - { - if (!copyFile(current, joinPaths(_newDirname, basename(current)), - _warningOp)) - { - if (FSWO_LOG_WARNINGS == _warningOp) - { - ignwarn << "Unable to copy file to [" - << joinPaths(_newDirname, basename(current)) << "]\n"; - } - return false; - } - } - } - return true; + return removeDirectoryOrFile(_existingFilename, _warningOp); } ///////////////////////////////////////////////// -bool ignition::common::createDirectories(const std::string &_path) +bool ignition::common::removeDirectoryOrFile( + const std::string &_path, + const FilesystemWarningOp _warningOp) { - size_t index = 0; - while (index < _path.size()) - { - size_t end = _path.find(separator(""), index+1); - std::string dir = _path.substr(0, end); - if (!exists(dir)) - { -#ifdef _WIN32 - dir = checkWindowsPath(dir); - if (_mkdir(dir.c_str()) != 0) - { -#else - // cppcheck-suppress ConfigurationNotChecked - if (mkdir(dir.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) - { -#endif - ignerr << "Failed to create directory [" + dir + "]: " - << std::strerror(errno) << std::endl; - return false; - } - } - index = end; - } + std::error_code ec; + auto ret = fs::remove(_path, ec); + fsWarn("removeDirectoryOrFile", ec, _warningOp); + return ret; +} - return true; +///////////////////////////////////////////////// +bool ignition::common::removeAll( + const std::string &_path, + const FilesystemWarningOp _warningOp) +{ + std::error_code ec; + fs::remove_all(_path, ec); + return fsWarn("removeAll", ec, _warningOp); } -////////////////////////////////////////////////// -std::string ignition::common::uniqueFilePath(const std::string &_pathAndName, - const std::string &_extension) +///////////////////////////////////////////////// +std::string ignition::common::uniqueFilePath( + const std::string &_pathAndName, + const std::string &_extension) { std::string result = _pathAndName + "." + _extension; int count = 1; @@ -510,7 +330,7 @@ std::string ignition::common::uniqueFilePath(const std::string &_pathAndName, return result; } -////////////////////////////////////////////////// +///////////////////////////////////////////////// std::string ignition::common::uniqueDirectoryPath(const std::string &_dir) { std::string result = _dir; diff --git a/src/FilesystemBoost.cc b/src/FilesystemBoost.cc deleted file mode 100644 index 12e5cabc5..000000000 --- a/src/FilesystemBoost.cc +++ /dev/null @@ -1,638 +0,0 @@ -/* - * Copyright 2002-2009, 2014 Beman Dawes - * Copyright 2001 Dietmar Kuehl - * - * Distributed under the Boost Software License, Version 1.0. - * - * Boost Software License - Version 1.0 - August 17th, 2003 - * - * Permission is hereby granted, free of charge, to any person or organization - * obtaining a copy of the software and accompanying documentation covered by - * this license (the "Software") to use, reproduce, display, distribute, - * execute, and transmit the Software, and to prepare derivative works of the - * Software, and to permit third-parties to whom the Software is furnished to - * do so, all subject to the following: - * - * The copyright notices in the Software and this entire statement, including - * the above license grant, this restriction and the following disclaimer, - * must be included in all copies of the Software, in whole or in part, and - * all derivative works of the Software, unless such copies or derivative - * works are solely in the form of machine-executable object code generated by - * a source language processor. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT - * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE - * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -/* - * Most of this code was borrowed from Boost in - * libs/filesystem/src/operations.cpp and - * libs/filesystem/include/boost/filesystem/operations.hpp. - */ - -#include <sstream> -#include <string> -#include <vector> -#include <algorithm> - -#ifndef _WIN32 -#include <dirent.h> -#include <errno.h> -#include <limits.h> -#include <stdlib.h> -#include <string.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <unistd.h> -#else -#include <windows.h> -#include <winioctl.h> -#include <winnt.h> -#endif - -#include "ignition/common/Console.hh" -#include "ignition/common/Filesystem.hh" - -namespace ignition -{ - namespace common - { - /// \internal - /// \brief Private data for the DirIter class. - class DirIter::Implementation - { - /// \def current - /// \brief The current directory item. - public: std::string current; - - /// \def dirname - /// \brief The original path to the directory. - public: std::string dirname; - - /// \def handle - /// \brief Opaque handle for holding the directory iterator. - public: void *handle; - - /// \def end - /// \brief Private variable to indicate whether the iterator has reached - /// the end. - public: bool end; - }; - -#ifndef _WIN32 - - static const char preferred_separator = '/'; - - ////////////////////////////////////////////////// - bool exists(const std::string &_path) - { - struct stat path_stat; - return ::stat(_path.c_str(), &path_stat) == 0; - } - - ////////////////////////////////////////////////// - bool isDirectory(const std::string &_path) - { - struct stat path_stat; - - if (::stat(_path.c_str(), &path_stat) != 0) - { - return false; - } - - return S_ISDIR(path_stat.st_mode); - } - - ////////////////////////////////////////////////// - bool createDirectory(const std::string &_path) - { - return ::mkdir(_path.c_str(), S_IRWXU|S_IRWXG|S_IRWXO) == 0; - } - - ////////////////////////////////////////////////// - std::string cwd() - { - std::string cur; - // loop 'til buffer large enough - for (int32_t path_max = 128;; path_max *= 2) - { - std::vector<char> buf(path_max); - - if (::getcwd(buf.data(), buf.size()) == 0) - { - if (errno != ERANGE) - { - break; - } - } - else - { - char resolved[PATH_MAX]; - - if (realpath(buf.data(), resolved) != nullptr) - { - cur = std::string(resolved); - } - break; - } - } - return cur; - } - - ////////////////////////////////////////////////// - bool chdir(const std::string& _dir) - { - return ::chdir(_dir.c_str()) == 0; - } - - ////////////////////////////////////////////////// - DirIter::DirIter(const std::string &_in) - : dataPtr(ignition::utils::MakeImpl<Implementation>()) - { - this->dataPtr->dirname = _in; - - this->dataPtr->current = ""; - - this->dataPtr->handle = opendir(_in.c_str()); - - this->dataPtr->end = false; - - if (this->dataPtr->handle == nullptr) - { - this->dataPtr->end = true; - } - else - { - Next(); - } - } - - ////////////////////////////////////////////////// - void DirIter::Next() - { - while (true) - { - struct dirent *entry = - readdir(reinterpret_cast<DIR*>(this->dataPtr->handle)); // NOLINT - if (!entry) - { - this->dataPtr->end = true; - this->dataPtr->current = ""; - break; - } - - if ((strcmp(entry->d_name, ".") != 0) - && (strcmp(entry->d_name, "..") != 0)) - { - this->dataPtr->current = std::string(entry->d_name); - break; - } - } - } - - ////////////////////////////////////////////////// - void DirIter::CloseHandle() - { - closedir(reinterpret_cast<DIR*>(this->dataPtr->handle)); - } - -#else // Windows - - static const char preferred_separator = '\\'; - - ////////////////////////////////////////////////// - static bool not_found_error(int _errval) - { - return _errval == ERROR_FILE_NOT_FOUND - || _errval == ERROR_PATH_NOT_FOUND - || _errval == ERROR_INVALID_NAME // "tools/src/:sys:stat.h", "//foo" - || _errval == ERROR_INVALID_DRIVE // USB card reader with no card - || _errval == ERROR_NOT_READY // CD/DVD drive with no disc inserted - || _errval == ERROR_INVALID_PARAMETER // ":sys:stat.h" - || _errval == ERROR_BAD_PATHNAME // "//nosuch" on Win64 - || _errval == ERROR_BAD_NETPATH; // "//nosuch" on Win32 - } - - ////////////////////////////////////////////////// - static bool process_status_failure() - { - int errval(::GetLastError()); - - if (not_found_error(errval)) - { - return false; - } - else if ((errval == ERROR_SHARING_VIOLATION)) - { - return true; // odd, but this is what boost does - } - return false; - } - - struct handle_wrapper - { - HANDLE handle; - explicit handle_wrapper(HANDLE h) - : handle(h) {} - ~handle_wrapper() - { - if (handle != INVALID_HANDLE_VALUE) - { - ::CloseHandle(handle); - } - } - }; - - // REPARSE_DATA_BUFFER related definitions are in ntifs.h, which is part of - // the Windows Device Driver Kit. Since it's inconvenient, the definitions - // are provided here. http://msdn.microsoft.com/en-us/library/ms791514.aspx - - typedef struct _REPARSE_DATA_BUFFER { - ULONG ReparseTag; - USHORT ReparseDataLength; - USHORT Reserved; - union { - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - ULONG Flags; - WCHAR PathBuffer[1]; - /* Example of distinction between substitute and print names: - mklink /d ldrive c:\ - SubstituteName: c:\\??\ - PrintName: c:\ - */ - } SymbolicLinkReparseBuffer; - struct { - USHORT SubstituteNameOffset; - USHORT SubstituteNameLength; - USHORT PrintNameOffset; - USHORT PrintNameLength; - WCHAR PathBuffer[1]; - } MountPointReparseBuffer; - struct { - UCHAR DataBuffer[1]; - } GenericReparseBuffer; - }; - } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; - - ////////////////////////////////////////////////// - HANDLE create_file_handle(const std::string &_path, DWORD _dwDesiredAccess, - DWORD _dwShareMode, - LPSECURITY_ATTRIBUTES _lpSecurityAttributes, - DWORD _dwCreationDisposition, - DWORD _dwFlagsAndAttributes, - HANDLE _hTemplateFile) - { - return ::CreateFileA(_path.c_str(), _dwDesiredAccess, - _dwShareMode, _lpSecurityAttributes, - _dwCreationDisposition, _dwFlagsAndAttributes, - _hTemplateFile); - } - -#ifndef MAXIMUM_REPARSE_DATA_BUFFER_SIZE -#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE (16 * 1024) -#endif - - ////////////////////////////////////////////////// - bool is_reparse_point_a_symlink(const std::string &_path) - { - handle_wrapper h(create_file_handle(_path, FILE_READ_EA, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - nullptr, OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, - nullptr)); - if (h.handle == INVALID_HANDLE_VALUE) - { - return false; - } - - std::vector<wchar_t> buf(MAXIMUM_REPARSE_DATA_BUFFER_SIZE); - - // Query the reparse data - DWORD dwRetLen; - BOOL result = ::DeviceIoControl(h.handle, FSCTL_GET_REPARSE_POINT, - nullptr, 0, buf.data(), (DWORD)buf.size(), &dwRetLen, nullptr); - if (!result) - { - return false; - } - - return reinterpret_cast<const REPARSE_DATA_BUFFER*>(&buf[0])->ReparseTag - == IO_REPARSE_TAG_SYMLINK - // Issue 9016 asked that NTFS directory junctions be recognized as - // directories. That is equivalent to recognizing them as symlinks, and - // then the normal symlink mechanism will recognize them as directories. - // - // Directory junctions are very similar to symlinks, but have some - // performance and other advantages over symlinks. They can be created - // from the command line with "mklink /j junction-name target-path". - || reinterpret_cast<const REPARSE_DATA_BUFFER*>(&buf[0])->ReparseTag - == IO_REPARSE_TAG_MOUNT_POINT; // "directory junction" or "junction" - } - - ////////////////////////////////////////////////// - bool internal_check_path(const std::string &_path, DWORD &attr) - { - attr = ::GetFileAttributesA(_path.c_str()); - if (attr == INVALID_FILE_ATTRIBUTES) - { - return process_status_failure(); - } - - // reparse point handling; - // since GetFileAttributesW does not resolve symlinks, try to open file - // handle to discover if the file exists - if (attr & FILE_ATTRIBUTE_REPARSE_POINT) - { - handle_wrapper h( - create_file_handle( - _path, - 0, // dwDesiredAccess; attributes only - FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, - 0, // lpSecurityAttributes - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, - 0)); // hTemplateFile - if (h.handle == INVALID_HANDLE_VALUE) - { - return process_status_failure(); - } - - if (!is_reparse_point_a_symlink(_path)) - { - return true; - } - } - - return true; - } - - ////////////////////////////////////////////////// - bool exists(const std::string &_path) - { - DWORD attr; - return internal_check_path(_path, attr); - } - - ////////////////////////////////////////////////// - bool isDirectory(const std::string &_path) - { - DWORD attr; - - if (internal_check_path(_path, attr)) - { - return (attr & FILE_ATTRIBUTE_DIRECTORY) != 0; - } - - return false; - } - - ////////////////////////////////////////////////// - bool createDirectory(const std::string &_path) - { - return ::CreateDirectoryA(_path.c_str(), 0) != 0; - } - - ////////////////////////////////////////////////// - std::string cwd() - { - DWORD sz; - if ((sz = ::GetCurrentDirectoryA(0, nullptr)) == 0) - { - sz = 1; - } - - std::vector<char> buf(sz); - - if (::GetCurrentDirectoryA(sz, buf.data()) == 0) - { - // error - return std::string(""); - } - else - { - return buf.data(); - } - } - - ///////////////////////////////////////////////// - bool chdir(const std::string& _dir) - { - return ::SetCurrentDirectoryA(_dir.c_str()); - } - - ////////////////////////////////////////////////// - DirIter::DirIter(const std::string &_in) - : dataPtr(ignition::utils::MakeImpl<Implementation>()) - { - // use a form of search Sebastian Martel reports will work with Win98 - this->dataPtr->dirname = _in; - - this->dataPtr->current = ""; - - this->dataPtr->end = false; - - if (_in.empty()) - { - // To be compatible with Unix, if given an empty string, assume this - // is the end. - this->dataPtr->end = true; - return; - } - - std::string dirpath(_in); - dirpath += (dirpath.empty() - || (dirpath[dirpath.size()-1] != '\\' - && dirpath[dirpath.size()-1] != '/' - && dirpath[dirpath.size()-1] != ':'))? "\\*" : "*"; - - WIN32_FIND_DATAA data; - this->dataPtr->handle = ::FindFirstFileA(dirpath.c_str(), &data); - - // Signal EOF - if (this->dataPtr->handle == INVALID_HANDLE_VALUE) - { - this->dataPtr->handle = nullptr; - this->dataPtr->end = true; - return; - } - - this->dataPtr->current = std::string(data.cFileName); - - // Skip "." and ".." - while (this->dataPtr->current == "." || - this->dataPtr->current == "..") - { - this->Next(); - } - } - - ////////////////////////////////////////////////// - void DirIter::Next() - { - WIN32_FIND_DATAA data; - data.cFileName[0] = 0; - while (data.cFileName[0] == 0 || - std::string(data.cFileName) == "." || - std::string(data.cFileName) == "..") - { - auto found = ::FindNextFileA(this->dataPtr->handle, &data); - // Signal EOF - if (!found) - { - this->dataPtr->end = true; - this->dataPtr->current = ""; - return; - } - } - - this->dataPtr->current = std::string(data.cFileName); - } - - ////////////////////////////////////////////////// - void DirIter::CloseHandle() - { - ::FindClose(this->dataPtr->handle); - } - -#endif // _WIN32 - - ////////////////////////////////////////////////// - const std::string separator(const std::string &_p) - { - return _p + preferred_separator; - } - - ////////////////////////////////////////////////// - void changeFromUnixPath(std::string &_path) - { - // cppcheck-suppress knownConditionTrueFalse - // cppcheck-suppress unmatchedSuppression - if ('/' == preferred_separator) - return; - - std::replace(_path.begin(), _path.end(), '/', preferred_separator); - } - - ////////////////////////////////////////////////// - std::string copyFromUnixPath(const std::string &_path) - { - std::string copy = _path; - changeFromUnixPath(copy); - return copy; - } - - ////////////////////////////////////////////////// - void changeToUnixPath(std::string &_path) - { - // cppcheck-suppress knownConditionTrueFalse - // cppcheck-suppress unmatchedSuppression - if ('/' == preferred_separator) - return; - - std::replace(_path.begin(), _path.end(), preferred_separator, '/'); - } - - ////////////////////////////////////////////////// - std::string copyToUnixPath(const std::string &_path) - { - std::string copy = _path; - changeToUnixPath(copy); - return copy; - } - - ////////////////////////////////////////////////// - std::string basename(const std::string &_path) - { - bool last_was_slash = false; - std::string basename; - - basename.reserve(_path.length()); - - for (size_t i = 0; i < _path.length(); ++i) - { - if (_path[i] == preferred_separator) - { - if (i == (_path.length() - 1)) - { - // if this is the last character, then according to basename we - // should return the portion of the path *before* the slash, i.e. - // the one we were just building. However, as a special case, if - // basename is empty, we return just a "/". - if (basename.size() == 0) - { - basename.push_back(preferred_separator); - } - break; - } - - last_was_slash = true; - } - else - { - if (last_was_slash) - { - last_was_slash = false; - basename.clear(); - } - - basename.push_back(_path[i]); - } - } - - return basename; - } - - ////////////////////////////////////////////////// - DirIter::DirIter() : dataPtr(ignition::utils::MakeImpl<Implementation>()) - { - this->dataPtr->current = ""; - - this->dataPtr->dirname = ""; - - this->dataPtr->handle = nullptr; - - this->dataPtr->end = true; - } - - ////////////////////////////////////////////////// - std::string DirIter::operator*() const - { - return this->dataPtr->dirname + preferred_separator + - this->dataPtr->current; - } - - ////////////////////////////////////////////////// - // prefix operator; note that we don't support the postfix operator - // because it is complicated to do so - const DirIter& DirIter::operator++() - { - Next(); - return *this; - } - - ////////////////////////////////////////////////// - bool DirIter::operator!=(const DirIter &_other) const - { - return this->dataPtr->end != _other.dataPtr->end; - } - - ////////////////////////////////////////////////// - DirIter::~DirIter() - { - if (this->dataPtr->handle != nullptr) - { - CloseHandle(); - this->dataPtr->handle = nullptr; - } - } - } -} diff --git a/src/SystemPaths.cc b/src/SystemPaths.cc index 20ed8db4c..a8393d3eb 100644 --- a/src/SystemPaths.cc +++ b/src/SystemPaths.cc @@ -25,12 +25,6 @@ #include <string> #include <vector> -#ifndef _WIN32 -#include <dirent.h> -#else -#include "win_dirent.h" -#endif - #include "ignition/common/Console.hh" #include "ignition/common/StringUtils.hh" #include "ignition/common/SystemPaths.hh" @@ -101,18 +95,11 @@ SystemPaths::SystemPaths() else fullPath = path; - DIR *dir = opendir(fullPath.c_str()); - if (!dir) + if (!exists(fullPath)) { -#ifdef _WIN32 - mkdir(fullPath.c_str()); -#else - // cppcheck-suppress ConfigurationNotChecked - mkdir(fullPath.c_str(), S_IRWXU | S_IRGRP | S_IROTH); -#endif + createDirectories(fullPath); } - else - closedir(dir); + this->dataPtr->logPath = fullPath; // Populate this->dataPtr->filePaths with values from the default diff --git a/src/TempDirectory.cc b/src/TempDirectory.cc index bdc8a3840..cf65b3a64 100644 --- a/src/TempDirectory.cc +++ b/src/TempDirectory.cc @@ -19,13 +19,20 @@ #include <ignition/common/Console.hh> +#include <filesystem> + #ifdef _WIN32 #include <windows.h> #include <direct.h> #include <fileapi.h> #include <io.h> +#else +#include <stdlib.h> +#include <unistd.h> #endif +namespace fs = std::filesystem; + using namespace ignition; using namespace common; @@ -47,43 +54,18 @@ inline bool fs_warn(const std::string &_fcn, return true; } -///////////////////////////////////////////////// -// Helper implementation of std::filesystem::temp_directory_path -// https://en.cppreference.com/w/cpp/filesystem/temp_directory_path -// \TODO(anyone) remove when using `std::filesystem` in C++17 and greater. -std::string temp_directory_path(std::error_code& _err) -{ - _err = std::error_code(); -#ifdef _WIN32 - TCHAR temp_path[MAX_PATH]; - DWORD size = GetTempPathA(MAX_PATH, temp_path); - if (size > MAX_PATH || size == 0) { - _err = std::error_code( - static_cast<int>(GetLastError()), std::system_category()); - } - temp_path[size] = '\0'; -#else - std::string temp_path; - if(!ignition::common::env("TMPDIR", temp_path)) - { - temp_path = "/tmp"; - } -#endif - return std::string(temp_path); -} - ///////////////////////////////////////////////// std::string ignition::common::tempDirectoryPath() { std::error_code ec; - auto ret = temp_directory_path(ec); + auto ret = fs::temp_directory_path(ec); if (!fs_warn("tempDirectoryPath", ec)) { ret = ""; } - return ret; + return ret.string(); } ///////////////////////////////////////////////// @@ -95,11 +77,11 @@ std::string createTempDirectory( const std::string &_baseName, const std::string &_parentPath) { - std::string parentPath(_parentPath); - std::string templatePath = _baseName + "XXXXXX"; + fs::path parentPath(_parentPath); + fs::path templatePath = _baseName + "XXXXXX"; - std::string fullTemplateStr = joinPaths(parentPath, templatePath); - if (!createDirectories(parentPath)) + std::string fullTemplateStr = (parentPath / templatePath).string(); + if (!createDirectories(parentPath.string())) { std::error_code ec{errno, std::system_category()}; errno = 0; @@ -108,29 +90,32 @@ std::string createTempDirectory( #ifdef _WIN32 errno_t errcode = _mktemp_s(&fullTemplateStr[0], fullTemplateStr.size() + 1); - if (errcode) { + if (errcode) + { std::error_code ec(static_cast<int>(errcode), std::system_category()); throw std::system_error(ec, "could not format the temp directory name template"); } - const std::string finalPath{fullTemplateStr}; - if (!createDirectories(finalPath)) { + const fs::path finalPath{fullTemplateStr}; + if (!createDirectories(finalPath.string())) + { std::error_code ec(static_cast<int>(GetLastError()), std::system_category()); throw std::system_error(ec, "could not create the temp directory"); } #else const char * dirName = mkdtemp(&fullTemplateStr[0]); - if (dirName == nullptr) { + if (dirName == nullptr) + { std::error_code ec{errno, std::system_category()}; errno = 0; throw std::system_error(ec, "could not format or create the temp directory"); } - const std::string finalPath{dirName}; + const fs::path finalPath{dirName}; #endif - return finalPath; + return finalPath.string(); } ///////////////////////////////////////////////// @@ -140,7 +125,8 @@ std::string ignition::common::createTempDirectory( const FilesystemWarningOp _warningOp) { std::string ret; - try { + try + { ret = ::createTempDirectory(_baseName, _parentPath); } catch (const std::system_error &ex) @@ -192,6 +178,7 @@ TempDirectory::TempDirectory(const std::string &_prefix, this->dataPtr->isValid = true; common::chdir(this->dataPtr->path); } + this->dataPtr->path = common::cwd(); } ///////////////////////////////////////////////// diff --git a/src/Util.cc b/src/Util.cc index de13ac071..d22ba30e1 100644 --- a/src/Util.cc +++ b/src/Util.cc @@ -36,6 +36,8 @@ #include <ignition/common/Util.hh> #include <ignition/common/Uuid.hh> +#include <ignition/utils/NeverDestroyed.hh> + #ifndef _WIN32 #include <dirent.h> #include <limits.h> @@ -55,8 +57,17 @@ static const auto &ignstrtok = strtok_r; #endif -static std::unique_ptr<ignition::common::SystemPaths> gSystemPaths( - new ignition::common::SystemPaths); +///////////////////////////////////////////////// +/// \brief Global instance of system paths for helper functions below +/// +/// This uses the NeverDestroyed pattern to prevent static initialization and +/// destruction order fiasco issues. +ignition::common::SystemPaths& GetSystemPaths() +{ + static + ignition::utils::NeverDestroyed<ignition::common::SystemPaths> paths; + return paths.Access(); +} ///////////////////////////////////////////////// // Internal class for SHA1 computation @@ -286,26 +297,26 @@ std::string ignition::common::timeToIso( ///////////////////////////////////////////////// std::string ignition::common::logPath() { - return gSystemPaths->LogPath(); + return GetSystemPaths().LogPath(); } ///////////////////////////////////////////////// void ignition::common::addSearchPathSuffix(const std::string &_suffix) { - gSystemPaths->AddSearchPathSuffix(_suffix); + GetSystemPaths().AddSearchPathSuffix(_suffix); } ///////////////////////////////////////////////// std::string ignition::common::findFile(const std::string &_file) { - return gSystemPaths->FindFile(_file, true); + return GetSystemPaths().FindFile(_file, true); } ///////////////////////////////////////////////// std::string ignition::common::findFile(const std::string &_file, const bool _searchLocalPath) { - return gSystemPaths->FindFile(_file, _searchLocalPath); + return GetSystemPaths().FindFile(_file, _searchLocalPath); } ///////////////////////////////////////////////// @@ -328,13 +339,13 @@ std::string ignition::common::findFilePath(const std::string &_file) void ignition::common::addFindFileURICallback( std::function<std::string(const ignition::common::URI &)> _cb) { - gSystemPaths->AddFindFileURICallback(_cb); + GetSystemPaths().AddFindFileURICallback(_cb); } ///////////////////////////////////////////////// ignition::common::SystemPaths *ignition::common::systemPaths() { - return gSystemPaths.get(); + return &GetSystemPaths(); } ///////////////////////////////////////////////// From e79b31fe398356f19462399ddb3579da24de302a Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Tue, 8 Feb 2022 17:16:29 -0600 Subject: [PATCH 125/219] Utilize ImplPtr for Timer (#299) * Use ImplPtr in Timer * Add unittests for Timer Signed-off-by: Michael Carroll <michael@openrobotics.org> --- include/ignition/common/Timer.hh | 17 ++----- src/Timer.cc | 35 ++++++++----- src/Timer_TEST.cc | 85 ++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+), 27 deletions(-) create mode 100644 src/Timer_TEST.cc diff --git a/include/ignition/common/Timer.hh b/include/ignition/common/Timer.hh index f53dfa0a9..098c31680 100644 --- a/include/ignition/common/Timer.hh +++ b/include/ignition/common/Timer.hh @@ -18,7 +18,7 @@ #define IGNITION_COMMON_TIMER_HH_ #include <ignition/common/Export.hh> -#include <ignition/utils/SuppressWarning.hh> +#include <ignition/utils/ImplPtr.hh> #include <chrono> #include <iostream> @@ -34,9 +34,6 @@ namespace ignition /// \brief Constructor public: Timer(); - /// \brief Destructor - public: virtual ~Timer(); - /// \brief Start the timer public: virtual void Start(); @@ -59,16 +56,8 @@ namespace ignition return out; } - IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \brief The time of the last call to Start - private: std::chrono::steady_clock::time_point start; - - /// \brief The time when Stop was called. - private: std::chrono::steady_clock::time_point stop; - IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING - - /// \brief True if the timer is running. - private: bool running; + /// \brief Private data pointer + IGN_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/src/Timer.cc b/src/Timer.cc index 5ea717770..f1c9add33 100644 --- a/src/Timer.cc +++ b/src/Timer.cc @@ -20,50 +20,59 @@ using namespace ignition; using namespace common; -////////////////////////////////////////////////// -Timer::Timer() - : running(false) +/// \brief Private data for the Timer class +class ignition::common::Timer::Implementation { -} + /// \brief The time of the last call to Start + public: std::chrono::steady_clock::time_point start; + + /// \brief The time when Stop was called. + public: std::chrono::steady_clock::time_point stop; + + /// \brief True if the timer is running. + public: bool running {false}; +}; ////////////////////////////////////////////////// -Timer::~Timer() +Timer::Timer() + : dataPtr(ignition::utils::MakeImpl<Implementation>()) { } ////////////////////////////////////////////////// void Timer::Start() { - this->start = std::chrono::steady_clock::now(); - this->running = true; + this->dataPtr->start = std::chrono::steady_clock::now(); + this->dataPtr->running = true; } ////////////////////////////////////////////////// void Timer::Stop() { - this->stop = std::chrono::steady_clock::now(); - this->running = false; + this->dataPtr->stop = std::chrono::steady_clock::now(); + this->dataPtr->running = false; } ////////////////////////////////////////////////// bool Timer::Running() const { - return this->running; + return this->dataPtr->running; } ////////////////////////////////////////////////// std::chrono::duration<double> Timer::ElapsedTime() const { - if (this->running) + if (this->dataPtr->running) { std::chrono::steady_clock::time_point currentTime; currentTime = std::chrono::steady_clock::now(); - std::chrono::duration<double> diff = currentTime - this->start; + std::chrono::duration<double> diff = currentTime - this->dataPtr->start; return diff; } else { - std::chrono::duration<double> diff = this->stop - this->start; + std::chrono::duration<double> diff = + this->dataPtr->stop - this->dataPtr->start; return diff; } } diff --git a/src/Timer_TEST.cc b/src/Timer_TEST.cc new file mode 100644 index 000000000..7dad64c1b --- /dev/null +++ b/src/Timer_TEST.cc @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gtest/gtest.h> + +#include <thread> + +#include <ignition/common/Console.hh> +#include <ignition/common/Timer.hh> + +///////////////////////////////////////////////// +TEST(Timer_TEST, Sequence) +{ + ignition::common::Timer t; + EXPECT_FALSE(t.Running()); + EXPECT_DOUBLE_EQ(0.0, t.ElapsedTime().count()); + + // Call stop on a timer that hasn't been started + t.Stop(); + EXPECT_FALSE(t.Running()); + + // Start the timer + t.Start(); + EXPECT_TRUE(t.Running()); + EXPECT_LT(0.0, t.ElapsedTime().count()); + + t.Stop(); + EXPECT_FALSE(t.Running()); + EXPECT_LT(0.0, t.ElapsedTime().count()); +} + +///////////////////////////////////////////////// +TEST(Timer_TEST, Elapsed) +{ + ignition::common::Timer t; + t.Start(); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + t.Stop(); + + // Loose margin just to make sure it is close without being flaky + EXPECT_LT(0.0, t.ElapsedTime().count()); + igndbg << "Actual Elapsed: " << t.ElapsedTime().count() << std::endl; +} + +///////////////////////////////////////////////// +TEST(Timer_TEST, Copy) +{ + ignition::common::Timer t1; + t1.Start(); + EXPECT_TRUE(t1.Running()); + + ignition::common::Timer t2 = t1; + EXPECT_TRUE(t2.Running()); + + // Stop the original + t1.Stop(); + EXPECT_FALSE(t1.Running()); + EXPECT_TRUE(t2.Running()); + + // Stop the copy + t2.Stop(); + EXPECT_FALSE(t1.Running()); + EXPECT_FALSE(t2.Running()); +} + +///////////////////////////////////////////////// +int main(int argc, char **argv) +{ + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} From ef9e3a0dd01bb74c5d9a212b7366f6854fefb845 Mon Sep 17 00:00:00 2001 From: Jenn Nguyen <jenn@openrobotics.org> Date: Wed, 9 Feb 2022 06:38:09 -0800 Subject: [PATCH 126/219] Fixed parentPath() return when input has no parent (#307) Signed-off-by: Jenn Nguyen <jenn@openrobotics.org> --- src/Filesystem.cc | 4 ++++ src/Filesystem_TEST.cc | 3 +++ src/Timer.cc | 6 +++--- src/Timer_TEST.cc | 2 +- src/Util.cc | 2 +- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Filesystem.cc b/src/Filesystem.cc index ba4fda7e8..ce66d6d6f 100644 --- a/src/Filesystem.cc +++ b/src/Filesystem.cc @@ -209,6 +209,10 @@ std::string ignition::common::parentPath(const std::string &_path) // Maintain compatibility with ign-common if (*_path.rbegin() == fs::path::preferred_separator) p = fs::path(_path.substr(0, _path.size()-1)); + + if (!p.has_parent_path()) + return _path; + return p.parent_path().string(); } diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index a193767f6..64b9899c3 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -473,6 +473,9 @@ TEST_F(FilesystemTest, parentPath) child_with_slash = separator(child_with_slash); std::string parent2 = parentPath(child_with_slash); EXPECT_EQ(parent, parent2); + + std::string childOnly = "child"; + EXPECT_EQ(childOnly, parentPath(childOnly)); } ///////////////////////////////////////////////// diff --git a/src/Timer.cc b/src/Timer.cc index f1c9add33..4fa56f85b 100644 --- a/src/Timer.cc +++ b/src/Timer.cc @@ -24,10 +24,10 @@ using namespace common; class ignition::common::Timer::Implementation { /// \brief The time of the last call to Start - public: std::chrono::steady_clock::time_point start; + public: std::chrono::steady_clock::time_point start; /// \brief The time when Stop was called. - public: std::chrono::steady_clock::time_point stop; + public: std::chrono::steady_clock::time_point stop; /// \brief True if the timer is running. public: bool running {false}; @@ -71,7 +71,7 @@ std::chrono::duration<double> Timer::ElapsedTime() const } else { - std::chrono::duration<double> diff = + std::chrono::duration<double> diff = this->dataPtr->stop - this->dataPtr->start; return diff; } diff --git a/src/Timer_TEST.cc b/src/Timer_TEST.cc index 7dad64c1b..7f2e79446 100644 --- a/src/Timer_TEST.cc +++ b/src/Timer_TEST.cc @@ -66,7 +66,7 @@ TEST(Timer_TEST, Copy) ignition::common::Timer t2 = t1; EXPECT_TRUE(t2.Running()); - // Stop the original + // Stop the original t1.Stop(); EXPECT_FALSE(t1.Running()); EXPECT_TRUE(t2.Running()); diff --git a/src/Util.cc b/src/Util.cc index d22ba30e1..b713b20a6 100644 --- a/src/Util.cc +++ b/src/Util.cc @@ -64,7 +64,7 @@ /// destruction order fiasco issues. ignition::common::SystemPaths& GetSystemPaths() { - static + static ignition::utils::NeverDestroyed<ignition::common::SystemPaths> paths; return paths.Access(); } From 86388ebf579c4f1cd25448f8cc8fe72ee1f33038 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 10 Feb 2022 07:10:00 -0600 Subject: [PATCH 127/219] Update tests to use more STL functionality (#282) Since we can now use std::filesystem, there are some helper functions that are no longer necessary. Signed-off-by: Michael Carroll <michael@openrobotics.org> --- src/Filesystem_TEST.cc | 289 +++++++++++++---------------------------- 1 file changed, 88 insertions(+), 201 deletions(-) diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index 64b9899c3..0f77e3ee5 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -17,205 +17,97 @@ #include <gtest/gtest.h> -#ifndef _WIN32 -#include <fcntl.h> -#include <limits.h> -#include <stdlib.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <unistd.h> +#include <ignition/utilities/ExtraTestMacros.hh> + +#include <ignition/common/Console.hh> +#include <ignition/common/Filesystem.hh> +#include <ignition/common/TempDirectory.hh> +#include <ignition/common/Util.hh> -#include "ignition/common/Util.hh" +#include <filesystem> +#include <fstream> // The symlink tests should always work on UNIX systems +#ifndef _WIN32 #define BUILD_SYMLINK_TESTS +#endif // _WIN32 + +using namespace ignition; +using namespace common; + +namespace fs = std::filesystem; ///////////////////////////////////////////////// -bool create_and_switch_to_temp_dir(std::string &_new_temp_path) +class TestTempDirectory : public TempDirectory { - std::string tmppath; - - if (!ignition::common::env("TMPDIR", tmppath)) + public: TestTempDirectory(): + TempDirectory("filesystem", "ign_common", true) { - tmppath = std::string("/tmp"); } +}; - tmppath += "/XXXXXX"; - - char *dtemp = mkdtemp(const_cast<char *>(tmppath.c_str())); - if (dtemp == nullptr) - { - return false; - } - if (chdir(dtemp) < 0) +///////////////////////////////////////////////// +bool create_new_empty_file(const std::string &_filename) +{ + try { - return false; + std::fstream fs(_filename, std::ios::out); } - - char resolved[PATH_MAX]; - if (realpath(dtemp, resolved) == nullptr) + catch(...) { return false; } - - _new_temp_path = std::string(resolved); - return true; } ///////////////////////////////////////////////// -bool create_new_empty_file(const std::string &_filename) +bool create_new_file_symlink(const std::string &_symlink, + const std::string &_target) { - int fd = open(_filename.c_str(), O_RDWR | O_CREAT, 0644); - if (fd < 0) + try { + fs::create_symlink(_target, _symlink); + } + catch(const std::exception& e) + { + ignerr << "Failed to create link: " << e.what() << '\n'; return false; } - - close(fd); - return true; } -///////////////////////////////////////////////// -bool create_new_file_symlink(const std::string &_symlink, - const std::string &_target) -{ - return symlink(_target.c_str(), _symlink.c_str()) == 0; -} - ///////////////////////////////////////////////// bool create_new_dir_symlink(const std::string &_symlink, const std::string &_target) { - return symlink(_target.c_str(), _symlink.c_str()) == 0; -} - -///////////////////////////////////////////////// -bool create_new_file_hardlink(const std::string &_hardlink, - const std::string &_target) -{ - return link(_target.c_str(), _hardlink.c_str()) == 0; -} - -#else -#include <windows.h> -#include <winnt.h> -#include <cstdint> -#include "PrintWindowsSystemWarning.hh" - -#ifdef IGN_BUILD_SYMLINK_TESTS_ON_WINDOWS -// The symlink tests require special permissions to work on Windows, -// so they will be disabled by default. For more information, see: -// https://github.com/ignitionrobotics/ign-common/issues/21 -#define BUILD_SYMLINK_TESTS -#endif - -///////////////////////////////////////////////// -bool create_and_switch_to_temp_dir(std::string &_new_temp_path) -{ - char temp_path[MAX_PATH + 1]; - DWORD path_len = ::GetTempPathA(MAX_PATH, temp_path); - if (path_len >= MAX_PATH || path_len <= 0) + try { - return false; + fs::create_directory_symlink(_target, _symlink); } - std::string path_to_create(temp_path); - srand(static_cast<uint32_t>(time(nullptr))); - - for (int count = 0; count < 50; ++count) + catch(const std::exception& e) { - // Try creating a new temporary directory with a randomly generated name. - // If the one we chose exists, keep trying another path name until we reach - // some limit. - std::string new_dir_name; - new_dir_name.append(std::to_string(::GetCurrentProcessId())); - new_dir_name.push_back('_'); - // On Windows, rand_r() doesn't exist as an alternative to rand(), so the - // cpplint warning is spurious. This program is not multi-threaded, so - // it is safe to suppress the threadsafe_fn warning here. - new_dir_name.append( - std::to_string(rand() // NOLINT(runtime/threadsafe_fn) - % ((int16_t)0x7fff))); - - path_to_create += new_dir_name; - if (::CreateDirectoryA(path_to_create.c_str(), nullptr)) - { - _new_temp_path = path_to_create; - return ::SetCurrentDirectoryA(_new_temp_path.c_str()) != 0; - } + ignerr << "Failed to create link: " << e.what() << '\n'; + return false; } - - return false; + return true; } ///////////////////////////////////////////////// -bool create_new_empty_file(const std::string &_filename) +bool create_new_file_hardlink(const std::string &_hardlink, + const std::string &_target) { - const auto handle = ::CreateFileA(_filename.c_str(), - FILE_READ_DATA, - FILE_SHARE_READ, - nullptr, - OPEN_ALWAYS, - 0, - nullptr); - if (handle != INVALID_HANDLE_VALUE) + try { - ::CloseHandle(handle); - return true; + fs::create_hard_link(_target, _hardlink); } - return false; -} - -///////////////////////////////////////////////// -bool create_new_file_symlink(const std::string &_symlink, - const std::string &_target) -{ - const bool linked = ::CreateSymbolicLinkA( - _symlink.c_str(), _target.c_str(), 0); - - if (!linked) + catch(const std::exception& e) { - ignition::common::PrintWindowsSystemWarning( - "Failed to create file symlink from [" + _target - + "] to [" + _symlink + "]"); - } - - return linked; -} - -///////////////////////////////////////////////// -bool create_new_dir_symlink(const std::string &_symlink, - const std::string &_target) -{ - const bool linked = ::CreateSymbolicLinkA(_symlink.c_str(), _target.c_str(), - SYMBOLIC_LINK_FLAG_DIRECTORY); - if (!linked) - { - ignition::common::PrintWindowsSystemWarning( - "Failed to create directory symlink from [" + _target - + "] to [" + _symlink + "]"); + ignerr << "Failed to create link: " << e.what() << '\n'; + return false; } - - return linked; -} - -///////////////////////////////////////////////// -bool create_new_file_hardlink(const std::string &_hardlink, - const std::string &_target) -{ - return ::CreateHardLinkA(_hardlink.c_str(), _target.c_str(), nullptr) == TRUE; + return true; } -#endif // _WIN32 - -#include <fstream> // NOLINT -#include "ignition/common/Console.hh" -#include "ignition/common/Filesystem.hh" - -using namespace ignition; -using namespace common; - /// \brief Test Filesystem class FilesystemTest : public ::testing::Test { @@ -223,7 +115,16 @@ class FilesystemTest : public ::testing::Test protected: void SetUp() override { Console::SetVerbosity(4); + this->temp = std::make_unique<TestTempDirectory>(); + ASSERT_TRUE(this->temp->Valid()); + } + + protected: void TearDown() override + { + this->temp.reset(); } + + protected: std::unique_ptr<TestTempDirectory> temp; }; ///////////////////////////////////////////////// @@ -275,14 +176,20 @@ TEST_F(FilesystemTest, fileOps) EXPECT_EQ(testInContent, test3InContent); - EXPECT_FALSE(common::copyFile("test3.tmp", "test3.tmp")); - EXPECT_FALSE(common::copyFile("test3.tmp", "./test3.tmp")); + // Suppress warnings on the next two, as they are expected to warn when + // trying to copy from/to the same file + EXPECT_FALSE(common::copyFile("test3.tmp", "test3.tmp", + common::FSWO_SUPPRESS_WARNINGS)); + EXPECT_FALSE(common::copyFile("test3.tmp", "./test3.tmp", + common::FSWO_SUPPRESS_WARNINGS)); std::remove("test.tmp"); // This file shouldn't exist, but we'll try to remove just in case the // test failed. - EXPECT_FALSE(common::removeFile("test2.tmp")); + // Suppress warnings since we expect this to be false + EXPECT_FALSE(common::removeFile("test2.tmp", + common::FSWO_SUPPRESS_WARNINGS)); EXPECT_TRUE(common::removeFile("test3.tmp")); @@ -293,27 +200,29 @@ TEST_F(FilesystemTest, fileOps) /// \brief Test file operations TEST_F(FilesystemTest, moreFileOps) { - EXPECT_FALSE(common::copyFile("__wrong__.tmp", "test2.tmp")); - EXPECT_TRUE(!common::exists("test2.tmp")); - EXPECT_FALSE(common::copyFile("test.tmp", "__wrong_dir__/__wrong__.tmp")); - EXPECT_TRUE(!common::exists("__wrong_dir__")); - - EXPECT_FALSE(common::moveFile("__wrong__.tmp", "test3.tmp")); - EXPECT_TRUE(!common::exists("test3.tmp")); - EXPECT_FALSE(common::moveFile("test2.tmp", "__wrong_dir__/__wrong__.tmp")); - EXPECT_TRUE(!common::exists("__wrong_dir__")); + EXPECT_FALSE(common::copyFile("__wrong__.tmp", "test2.tmp", + common::FSWO_SUPPRESS_WARNINGS)); + EXPECT_FALSE(common::exists("test2.tmp")); + EXPECT_FALSE(common::copyFile("test.tmp", "__wrong_dir__/__wrong__.tmp", + common::FSWO_SUPPRESS_WARNINGS)); + EXPECT_FALSE(common::exists("__wrong_dir__")); + + EXPECT_FALSE(common::moveFile("__wrong__.tmp", "test3.tmp", + common::FSWO_SUPPRESS_WARNINGS)); + EXPECT_FALSE(common::exists("test3.tmp")); + EXPECT_FALSE(common::moveFile("test2.tmp", "__wrong_dir__/__wrong__.tmp", + common::FSWO_SUPPRESS_WARNINGS)); + EXPECT_FALSE(common::exists("__wrong_dir__")); } ///////////////////////////////////////////////// TEST_F(FilesystemTest, exists) { - std::string new_temp_dir; - ASSERT_TRUE(create_and_switch_to_temp_dir(new_temp_dir)); ASSERT_TRUE(create_new_empty_file("newfile")); ASSERT_TRUE(createDirectory("fstestexists")); const auto &relativeSubdir = joinPaths("fstestexists", "newfile2"); - const auto &absoluteSubdir = joinPaths(new_temp_dir, relativeSubdir); + const auto &absoluteSubdir = joinPaths(cwd(), relativeSubdir); ASSERT_TRUE(create_new_empty_file(relativeSubdir)); EXPECT_TRUE(exists("fstestexists")); @@ -350,8 +259,6 @@ TEST_F(FilesystemTest, symlink_exists) // 3. symbolic link to existing directory // 4. symbolic link to non-existent directory // 5. hard link to existing file - std::string new_temp_dir; - ASSERT_TRUE(create_and_switch_to_temp_dir(new_temp_dir)); ASSERT_TRUE(create_new_empty_file("newfile")); ASSERT_TRUE(createDirectory("newdir")); @@ -385,11 +292,11 @@ TEST_F(FilesystemTest, cwd) { const auto origCwd = cwd(); - std::string new_temp_dir; - ASSERT_TRUE(create_and_switch_to_temp_dir(new_temp_dir)); + TestTempDirectory new_temp_dir; + ASSERT_TRUE(new_temp_dir.Valid()); std::string path = cwd(); - EXPECT_EQ(path, new_temp_dir); + EXPECT_EQ(path, new_temp_dir.Path()); EXPECT_TRUE(common::chdir(origCwd)); EXPECT_EQ(origCwd, cwd()); @@ -479,20 +386,16 @@ TEST_F(FilesystemTest, parentPath) } ///////////////////////////////////////////////// -TEST_F(FilesystemTest, cwd_error) +TEST_F(FilesystemTest, IGN_UTILS_TEST_DISABLED_ON_WIN32(cwd_error)) { // This test intentionally creates a directory, switches to it, removes // the directory, and then tries to call cwd() on it to cause // cwd() to fail. Windows does not allow you to remove an // in-use directory, so this test is restricted to Unix. -#ifndef _WIN32 - std::string new_temp_dir; - ASSERT_TRUE(create_and_switch_to_temp_dir(new_temp_dir)); - - ASSERT_EQ(rmdir(new_temp_dir.c_str()), 0); - + TestTempDirectory new_temp_dir; + ASSERT_TRUE(new_temp_dir.Valid()); + ASSERT_EQ(rmdir(new_temp_dir.Path().c_str()), 0); EXPECT_EQ(cwd(), ""); -#endif } ///////////////////////////////////////////////// @@ -533,8 +436,6 @@ TEST_F(FilesystemTest, basename) ///////////////////////////////////////////////// TEST_F(FilesystemTest, directory_iterator) { - std::string new_temp_dir; - ASSERT_TRUE(create_and_switch_to_temp_dir(new_temp_dir)); ASSERT_TRUE(create_new_empty_file("newfile")); ASSERT_TRUE(createDirectory("newdir")); #ifdef BUILD_SYMLINK_TESTS @@ -585,9 +486,6 @@ TEST_F(FilesystemTest, directory_iterator) ///////////////////////////////////////////////// TEST_F(FilesystemTest, createDirectories) { - std::string new_temp_dir; - ASSERT_TRUE(create_and_switch_to_temp_dir(new_temp_dir)); - // test creating directories using relative path std::string rel_dir = separator("rel_dir") + "subdir"; ASSERT_TRUE(createDirectories(rel_dir)); @@ -596,7 +494,7 @@ TEST_F(FilesystemTest, createDirectories) // test creating directories using abs path std::string path = cwd(); - EXPECT_EQ(path, new_temp_dir); + EXPECT_EQ(path, this->temp->Path()); std::string abs_dir = separator(cwd()) + separator("abs_dir") + "subdir"; ASSERT_TRUE(createDirectories(abs_dir)); @@ -607,10 +505,6 @@ TEST_F(FilesystemTest, createDirectories) ///////////////////////////////////////////////// TEST_F(FilesystemTest, copyDirectories) { - const auto origCwd = ignition::common::cwd(); - std::string newTempDir; - ASSERT_TRUE(create_and_switch_to_temp_dir(newTempDir)); - // Create an empty directory std::string dirToBeCopied = "dir_to_be_copied"; EXPECT_FALSE(exists(dirToBeCopied)); @@ -657,19 +551,12 @@ TEST_F(FilesystemTest, copyDirectories) EXPECT_TRUE(isDirectory(recDirCopied)); // Non-existent source directory - EXPECT_FALSE(copyDirectory("fake_dir", dirCopied)); - - // Cleanup - ignition::common::chdir(origCwd); - EXPECT_TRUE(removeAll(newTempDir)); + EXPECT_FALSE(copyDirectory("fake_dir", dirCopied, FSWO_SUPPRESS_WARNINGS)); } ///////////////////////////////////////////////// TEST_F(FilesystemTest, uniquePaths) { - std::string newTempDir; - ASSERT_TRUE(create_and_switch_to_temp_dir(newTempDir)); - // Directory std::string dir = "uniqueDirectory"; EXPECT_FALSE(exists(dir)); From 47e6a3af72bacf0ce66ab7e4a3e8334da489e528 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 10 Feb 2022 09:52:45 -0600 Subject: [PATCH 128/219] Utilize ImplPtr in AV component (#296) Signed-off-by: Michael Carroll <michael@openrobotics.org> --- av/include/ignition/common/AudioDecoder.hh | 16 +-- av/include/ignition/common/HWEncoder.hh | 8 +- av/include/ignition/common/Video.hh | 10 +- av/include/ignition/common/VideoEncoder.hh | 11 +- av/src/AudioDecoder.cc | 124 ++++++++++----------- av/src/HWEncoder.cc | 20 +++- av/src/Video.cc | 4 +- av/src/VideoEncoder.cc | 10 +- 8 files changed, 92 insertions(+), 111 deletions(-) diff --git a/av/include/ignition/common/AudioDecoder.hh b/av/include/ignition/common/AudioDecoder.hh index 470cb9d6b..830f3ead9 100644 --- a/av/include/ignition/common/AudioDecoder.hh +++ b/av/include/ignition/common/AudioDecoder.hh @@ -19,18 +19,14 @@ #include <stdint.h> #include <string> -#include <memory> #include <ignition/common/av/Export.hh> -#include <ignition/utils/SuppressWarning.hh> +#include <ignition/utils/ImplPtr.hh> namespace ignition { namespace common { - /// \brief Forward declaration of private data class - class AudioDecoderPrivate; - /// \class AudioDecoder AudioDecoder.hh ignition/common/common.hh /// \brief An audio decoder based on FFMPEG. class IGNITION_COMMON_AV_VISIBLE AudioDecoder @@ -38,9 +34,6 @@ namespace ignition /// \brief Constructor. public: AudioDecoder(); - /// \brief Destructor. - public: virtual ~AudioDecoder(); - /// \brief Set the file to decode. /// \param[in] _filename Path to an audio file. /// \return True if the file was successfull opened. @@ -63,13 +56,8 @@ namespace ignition /// If no file is decoded, -1 is returned. public: int SampleRate(); - /// \brief Free audio object, close files, streams. - private: void Cleanup(); - - IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief Private data pointer - private: std::unique_ptr<AudioDecoderPrivate> data; - IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/av/include/ignition/common/HWEncoder.hh b/av/include/ignition/common/HWEncoder.hh index 519841627..4eeed1f8b 100644 --- a/av/include/ignition/common/HWEncoder.hh +++ b/av/include/ignition/common/HWEncoder.hh @@ -16,7 +16,6 @@ #ifndef IGNITION_COMMON_HWENCODER_HH #define IGNITION_COMMON_HWENCODER_HH -#include <memory> #include <string> #include <optional> @@ -24,14 +23,12 @@ #include <ignition/common/av/Export.hh> #include <ignition/common/HWVideo.hh> #include <ignition/common/ffmpeg_inc.hh> +#include <ignition/utils/ImplPtr.hh> /// This is an internal-use only class encapsulating HW video encoding. All /// symbols defined here are hidden from the public API. namespace ignition::common { - // Forward declare private data class - class HWVideoPrivate; - /// \brief Representation of a GPU video encoder and its configuration. /// \note This class is intentionally hidden as it provides highly customized /// behavior tailored just for the use with VideoEncoder. @@ -81,7 +78,8 @@ namespace ignition::common /// The value will be NONE until ConfigHWAccel() successfully finishes. public: HWEncoderType GetEncoderType() const; - private: std::unique_ptr<HWVideoPrivate> dataPtr; + /// \brief Private data pointer + IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } diff --git a/av/include/ignition/common/Video.hh b/av/include/ignition/common/Video.hh index d01cf6929..b186e51a3 100644 --- a/av/include/ignition/common/Video.hh +++ b/av/include/ignition/common/Video.hh @@ -18,10 +18,9 @@ #define IGNITION_COMMON_VIDEO_HH_ #include <string> -#include <memory> #include <ignition/common/av/Export.hh> -#include <ignition/utils/SuppressWarning.hh> +#include <ignition/utils/ImplPtr.hh> struct AVFormatContext; struct AVCodecContext; @@ -33,9 +32,6 @@ namespace ignition { namespace common { - // Forward declare private data class - class VideoPrivate; - /// \brief Handle video encoding and decoding using libavcodec class IGNITION_COMMON_AV_VISIBLE Video { @@ -76,10 +72,8 @@ namespace ignition /// \brief free up open Video object, close files, streams private: void Cleanup(); - IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief Private data pointer - private: std::unique_ptr<VideoPrivate> dataPtr; - IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/av/include/ignition/common/VideoEncoder.hh b/av/include/ignition/common/VideoEncoder.hh index a8c9ee941..3b40dfc23 100644 --- a/av/include/ignition/common/VideoEncoder.hh +++ b/av/include/ignition/common/VideoEncoder.hh @@ -19,13 +19,12 @@ #include <chrono> #include <string> -#include <memory> #include <optional> #include <ignition/common/FlagSet.hh> #include <ignition/common/av/Export.hh> #include <ignition/common/HWVideo.hh> -#include <ignition/utils/SuppressWarning.hh> +#include <ignition/utils/ImplPtr.hh> // Default bitrate (0) indicates that a bitrate should be calculated when // Start is called. @@ -39,9 +38,6 @@ namespace ignition { namespace common { - // Forward declare private data class - class VideoEncoderPrivate; - /// \brief The VideoEncoder class supports encoding a series of images /// to a video format, and then writing the video to disk. class IGNITION_COMMON_AV_VISIBLE VideoEncoder @@ -221,11 +217,8 @@ namespace ignition /// memory. This will also delete any temporary files. public: void Reset(); - IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING - /// \internal /// \brief Private data pointer - private: std::unique_ptr<VideoEncoderPrivate> dataPtr; - IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING + IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/av/src/AudioDecoder.cc b/av/src/AudioDecoder.cc index ad73e48b8..b639317c5 100644 --- a/av/src/AudioDecoder.cc +++ b/av/src/AudioDecoder.cc @@ -26,52 +26,44 @@ using namespace ignition; using namespace common; -class ignition::common::AudioDecoderPrivate +class ignition::common::AudioDecoder::Implementation { + /// \brief Destructor + public: ~Implementation(); + /// \brief libav Format I/O context. - public: AVFormatContext *formatCtx; + public: AVFormatContext *formatCtx {nullptr}; /// \brief libav main external API structure. - public: AVCodecContext *codecCtx; + public: AVCodecContext *codecCtx {nullptr}; /// \brief libavcodec audio codec. - public: AVCodec *codec; + public: AVCodec *codec {nullptr}; /// \brief Index of the audio stream. - public: int audioStream; + public: int audioStream {0}; /// \brief Audio file to decode. public: std::string filename; }; ///////////////////////////////////////////////// -AudioDecoder::AudioDecoder() - : data(new AudioDecoderPrivate) +ignition::common::AudioDecoder::Implementation::~Implementation() { - ignition::common::load(); - - this->data->formatCtx = nullptr; - this->data->codecCtx = nullptr; - this->data->codec = nullptr; - this->data->audioStream = 0; -} + // Close the codec + if (this->codecCtx) + avcodec_close(this->codecCtx); -///////////////////////////////////////////////// -AudioDecoder::~AudioDecoder() -{ - this->Cleanup(); + // Close the audio file + if (this->formatCtx) + avformat_close_input(&this->formatCtx); } ///////////////////////////////////////////////// -void AudioDecoder::Cleanup() +AudioDecoder::AudioDecoder() + : dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { - // Close the codec - if (this->data->codecCtx) - avcodec_close(this->data->codecCtx); - - // Close the audio file - if (this->data->formatCtx) - avformat_close_input(&this->data->formatCtx); + ignition::common::load(); } ///////////////////////////////////////////////// @@ -82,7 +74,7 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) unsigned int maxBufferSize = 0; AVFrame *decodedFrame = nullptr; - if (this->data->codec == nullptr) + if (this->dataPtr->codec == nullptr) { ignerr << "Set an audio file before decoding.\n"; return false; @@ -117,9 +109,9 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) return false; } - while (av_read_frame(this->data->formatCtx, packet) == 0) + while (av_read_frame(this->dataPtr->formatCtx, packet) == 0) { - if (packet->stream_index == this->data->audioStream) + if (packet->stream_index == this->dataPtr->audioStream) { int gotFrame = 0; @@ -132,8 +124,8 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif - bytesDecoded = avcodec_decode_audio4(this->data->codecCtx, decodedFrame, - &gotFrame, &packet1); + bytesDecoded = avcodec_decode_audio4( + this->dataPtr->codecCtx, decodedFrame, &gotFrame, &packet1); #ifndef _WIN32 # pragma GCC diagnostic pop #endif @@ -144,8 +136,8 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) // decodedFrame->data[0], which is why we can't use // decodedFrame->linesize[0]. int size = decodedFrame->nb_samples * - av_get_bytes_per_sample(this->data->codecCtx->sample_fmt) * - this->data->codecCtx->channels; + av_get_bytes_per_sample(this->dataPtr->codecCtx->sample_fmt) * + this->dataPtr->codecCtx->channels; // Resize the audio buffer as necessary if (*_outBufferSize + size > maxBufferSize) @@ -170,7 +162,7 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) av_packet_unref(packet); // Seek to the beginning so that it can be decoded again, if necessary. - av_seek_frame(this->data->formatCtx, this->data->audioStream, 0, 0); + av_seek_frame(this->dataPtr->formatCtx, this->dataPtr->audioStream, 0, 0); return result; } @@ -178,8 +170,8 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) ///////////////////////////////////////////////// int AudioDecoder::SampleRate() { - if (this->data->codecCtx) - return this->data->codecCtx->sample_rate; + if (this->dataPtr->codecCtx) + return this->dataPtr->codecCtx->sample_rate; return -1; } @@ -189,14 +181,14 @@ bool AudioDecoder::SetFile(const std::string &_filename) { unsigned int i; - this->data->formatCtx = avformat_alloc_context(); + this->dataPtr->formatCtx = avformat_alloc_context(); // Open file - if (avformat_open_input(&this->data->formatCtx, + if (avformat_open_input(&this->dataPtr->formatCtx, _filename.c_str(), nullptr, nullptr) < 0) { ignerr << "Unable to open audio file[" << _filename << "]\n"; - this->data->formatCtx = nullptr; + this->dataPtr->formatCtx = nullptr; return false; } @@ -204,42 +196,42 @@ bool AudioDecoder::SetFile(const std::string &_filename) av_log_set_level(0); // Retrieve some information - if (avformat_find_stream_info(this->data->formatCtx, nullptr) < 0) + if (avformat_find_stream_info(this->dataPtr->formatCtx, nullptr) < 0) { ignerr << "Unable to find stream info.\n"; - avformat_close_input(&this->data->formatCtx); - this->data->formatCtx = nullptr; + avformat_close_input(&this->dataPtr->formatCtx); + this->dataPtr->formatCtx = nullptr; return false; } // Dump information about file onto standard error. - // dump_format(this->data->formatCtx, 0, "dump.txt", false); + // dump_format(this->dataPtr->formatCtx, 0, "dump.txt", false); // Find audio stream; - this->data->audioStream = -1; - for (i = 0; i < this->data->formatCtx->nb_streams; ++i) + this->dataPtr->audioStream = -1; + for (i = 0; i < this->dataPtr->formatCtx->nb_streams; ++i) { #ifndef _WIN32 # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif - if (this->data->formatCtx->streams[i]->codec->codec_type == // NOLINT(*) + if (this->dataPtr->formatCtx->streams[i]->codec->codec_type == // NOLINT(*) AVMEDIA_TYPE_AUDIO) #ifndef _WIN32 # pragma GCC diagnostic pop #endif { - this->data->audioStream = i; + this->dataPtr->audioStream = i; break; } } - if (this->data->audioStream == -1) + if (this->dataPtr->audioStream == -1) { ignerr << "Couldn't find audio stream.\n"; - avformat_close_input(&this->data->formatCtx); - this->data->formatCtx = nullptr; + avformat_close_input(&this->dataPtr->formatCtx); + this->dataPtr->formatCtx = nullptr; return false; } @@ -249,43 +241,45 @@ bool AudioDecoder::SetFile(const std::string &_filename) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif - this->data->codecCtx = this->data->formatCtx->streams[ - this->data->audioStream]->codec; + this->dataPtr->codecCtx = this->dataPtr->formatCtx->streams[ + this->dataPtr->audioStream]->codec; #ifndef _WIN32 # pragma GCC diagnostic pop #endif // Find a decoder - this->data->codec = avcodec_find_decoder(this->data->codecCtx->codec_id); + this->dataPtr->codec = avcodec_find_decoder( + this->dataPtr->codecCtx->codec_id); - if (this->data->codec == nullptr) + if (this->dataPtr->codec == nullptr) { ignerr << "Couldn't find codec for audio stream.\n"; - avformat_close_input(&this->data->formatCtx); - this->data->formatCtx = nullptr; + avformat_close_input(&this->dataPtr->formatCtx); + this->dataPtr->formatCtx = nullptr; return false; } #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(56, 60, 100) - if (this->data->codec->capabilities & AV_CODEC_CAP_TRUNCATED) - this->data->codecCtx->flags |= AV_CODEC_FLAG_TRUNCATED; + if (this->dataPtr->codec->capabilities & AV_CODEC_CAP_TRUNCATED) + this->dataPtr->codecCtx->flags |= AV_CODEC_FLAG_TRUNCATED; #else - if (this->data->codec->capabilities & CODEC_CAP_TRUNCATED) - this->data->codecCtx->flags |= CODEC_FLAG_TRUNCATED; + if (this->dataPtr->codec->capabilities & CODEC_CAP_TRUNCATED) + this->dataPtr->codecCtx->flags |= CODEC_FLAG_TRUNCATED; #endif // Open codec - if (avcodec_open2(this->data->codecCtx, this->data->codec, nullptr) < 0) + if (avcodec_open2(this->dataPtr->codecCtx, + this->dataPtr->codec, nullptr) < 0) { ignerr << "Couldn't open audio codec.\n"; - avformat_close_input(&this->data->formatCtx); - this->data->formatCtx = nullptr; + avformat_close_input(&this->dataPtr->formatCtx); + this->dataPtr->formatCtx = nullptr; return false; } - this->data->filename = _filename; + this->dataPtr->filename = _filename; return true; } @@ -293,5 +287,5 @@ bool AudioDecoder::SetFile(const std::string &_filename) ///////////////////////////////////////////////// std::string AudioDecoder::File() const { - return this->data->filename; + return this->dataPtr->filename; } diff --git a/av/src/HWEncoder.cc b/av/src/HWEncoder.cc index 046714a46..63e4dbc20 100644 --- a/av/src/HWEncoder.cc +++ b/av/src/HWEncoder.cc @@ -29,7 +29,7 @@ using namespace ignition; using namespace common; using namespace std; -class ignition::common::HWVideoPrivate +class ignition::common::HWEncoder::Implementation { /// \brief Device reference for HW-accelerated encoding. public: AVBufferRef* hwDevice = nullptr; @@ -83,6 +83,7 @@ const map<pair<string, bool>, HWEncoderType> HW_ENCODER_MATCHERS = { {make_pair("dxva2_", true), HWEncoderType::DXVA2}, }; +///////////////////////////////////////////////// /// Detect the type of HW encoder the given codec uses. /// \param[in] _codecName The codec to examine. /// \return The HW encoder type, or NONE for software encoders. @@ -106,6 +107,7 @@ HWEncoderType DetectHWEncoderType(const std::string& _codecName) return HWEncoderType::NONE; } +///////////////////////////////////////////////// /// \brief Try if the given device can be opened as the given HW encoder type. /// \param _deviceName File name of the device, if it has any, or a pretty name. /// \param _deviceType Libav type of the acceleration device to try. @@ -170,6 +172,7 @@ bool ProbeDevice(const std::string& _deviceName, return true; } +///////////////////////////////////////////////// bool ProbeDevice(const std::string& _deviceName, const AVHWDeviceType _deviceType, const HWEncoderType _encoderType, @@ -181,6 +184,7 @@ bool ProbeDevice(const std::string& _deviceName, _warnIfNoMatch, _deviceName, nullptr); } +///////////////////////////////////////////////// AVCodec* HWEncoder::FindEncoder(AVCodecID _codecId) { AVCodec* foundEncoder = nullptr; @@ -398,6 +402,7 @@ AVCodec* HWEncoder::FindEncoder(AVCodecID _codecId) // however it is not possible to get lambdas with C linkage. extern "C" { +///////////////////////////////////////////////// static enum AVPixelFormat GetFormat(AVCodecContext*, const enum AVPixelFormat* _formats, const enum AVPixelFormat _format) { @@ -410,18 +415,21 @@ static enum AVPixelFormat GetFormat(AVCodecContext*, return AV_PIX_FMT_NONE; } +///////////////////////////////////////////////// static enum AVPixelFormat GetFormatVAAPI( AVCodecContext* _codec, const enum AVPixelFormat *_formats) { return GetFormat(_codec, _formats, AV_PIX_FMT_VAAPI); // lavu54.31.100 } +///////////////////////////////////////////////// static enum AVPixelFormat GetFormatQSV( AVCodecContext* _codec, const enum AVPixelFormat *_formats) { return GetFormat(_codec, _formats, AV_PIX_FMT_QSV); // lavu 54.19.100 } +///////////////////////////////////////////////// static enum AVPixelFormat GetFormatCUDA( AVCodecContext* _codec, const enum AVPixelFormat *_formats) { @@ -430,6 +438,7 @@ static enum AVPixelFormat GetFormatCUDA( } +///////////////////////////////////////////////// void HWEncoder::ConfigHWAccel(AVCodecContext* _encoderContext) { int ret; // used for libav return codes @@ -584,7 +593,8 @@ void HWEncoder::ConfigHWAccel(AVCodecContext* _encoderContext) } } -bool HWVideoPrivate::ConfigHWSurface(AVCodecContext* _encoderContext) +///////////////////////////////////////////////// +bool HWEncoder::Implementation::ConfigHWSurface(AVCodecContext* _encoderContext) { int ret; @@ -653,6 +663,7 @@ bool HWVideoPrivate::ConfigHWSurface(AVCodecContext* _encoderContext) return true; } +///////////////////////////////////////////////// AVFrame* HWEncoder::GetFrameForEncoder(AVFrame* _inFrame) { auto result = _inFrame; @@ -664,16 +675,18 @@ AVFrame* HWEncoder::GetFrameForEncoder(AVFrame* _inFrame) return result; } +///////////////////////////////////////////////// HWEncoder::HWEncoder(const FlagSet<HWEncoderType> _allowedHwEncoders, const std::string& _hwAccelDevice, std::optional<bool> _useHwSurface) -: dataPtr(new HWVideoPrivate) + : dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { this->dataPtr->initHwEncoders = _allowedHwEncoders; this->dataPtr->initHwDevice = _hwAccelDevice; this->dataPtr->initUseHwSurface = _useHwSurface; } +///////////////////////////////////////////////// HWEncoder::~HWEncoder() { this->dataPtr->initHwEncoders.Set(); @@ -686,6 +699,7 @@ HWEncoder::~HWEncoder() av_frame_free(&this->dataPtr->avOutHwFrame); // lavc 55.45.101 } +///////////////////////////////////////////////// HWEncoderType HWEncoder::GetEncoderType() const { return this->dataPtr->hwEncoderType; diff --git a/av/src/Video.cc b/av/src/Video.cc index d53f56fe8..3810fc8ce 100644 --- a/av/src/Video.cc +++ b/av/src/Video.cc @@ -24,7 +24,7 @@ using namespace ignition; using namespace common; // Private data structure for the Video class -class ignition::common::VideoPrivate +class ignition::common::Video::Implementation { /// \brief libav Format I/O context public: AVFormatContext *formatCtx = nullptr; @@ -61,7 +61,7 @@ class ignition::common::VideoPrivate ///////////////////////////////////////////////// Video::Video() -: dataPtr(new VideoPrivate) + : dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { // Make sure libav is loaded. ignition::common::load(); diff --git a/av/src/VideoEncoder.cc b/av/src/VideoEncoder.cc index cd6449df7..ef460d082 100644 --- a/av/src/VideoEncoder.cc +++ b/av/src/VideoEncoder.cc @@ -34,7 +34,7 @@ using namespace std; // Private data class // hidden visibility specifier has to be explicitly set to silent a gcc warning -class IGNITION_COMMON_AV_HIDDEN ignition::common::VideoEncoderPrivate +class IGNITION_COMMON_AV_HIDDEN ignition::common::VideoEncoder::Implementation { /// \brief Name of the file which stores the video while it is being /// recorded. @@ -123,7 +123,7 @@ class IGNITION_COMMON_AV_HIDDEN ignition::common::VideoEncoderPrivate }; ///////////////////////////////////////////////// -AVCodec* VideoEncoderPrivate::FindEncoder(AVCodecID _codecId) +AVCodec* VideoEncoder::Implementation::FindEncoder(AVCodecID _codecId) { #ifdef IGN_COMMON_BUILD_HW_VIDEO if (this->hwEncoder) @@ -133,7 +133,7 @@ AVCodec* VideoEncoderPrivate::FindEncoder(AVCodecID _codecId) } ///////////////////////////////////////////////// -AVFrame* VideoEncoderPrivate::GetFrameForEncoder(AVFrame* _inFrame) +AVFrame* VideoEncoder::Implementation::GetFrameForEncoder(AVFrame* _inFrame) { #ifdef IGN_COMMON_BUILD_HW_VIDEO if (this->hwEncoder) @@ -144,7 +144,7 @@ AVFrame* VideoEncoderPrivate::GetFrameForEncoder(AVFrame* _inFrame) ///////////////////////////////////////////////// VideoEncoder::VideoEncoder() -: dataPtr(new VideoEncoderPrivate) + : dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) { // Make sure libav is loaded. ignition::common::load(); @@ -823,7 +823,7 @@ bool VideoEncoder::AddFrame(const unsigned char *_frame, } ///////////////////////////////////////////////// -int VideoEncoderPrivate::ProcessPacket(AVPacket* avPacket) +int VideoEncoder::Implementation::ProcessPacket(AVPacket* avPacket) { avPacket->stream_index = this->videoStream->index; From 4256a572c8b1bfde356de9d341d26cfeff19bfb0 Mon Sep 17 00:00:00 2001 From: Steve Peters <scpeters@openrobotics.org> Date: Thu, 10 Feb 2022 13:21:48 -0800 Subject: [PATCH 129/219] Image: make several methods const (#310) The Data, RGBData, and AvgColor methods do not modify any object data but are not marked as const, which prevents other const methods from calling them. This change API, so it must be done on the main branch. Signed-off-by: Steve Peters <scpeters@openrobotics.org> --- Migration.md | 6 ++++++ graphics/include/ignition/common/Image.hh | 6 +++--- graphics/src/Image.cc | 10 +++++----- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Migration.md b/Migration.md index 69f1bb4bb..4bc21f0bb 100644 --- a/Migration.md +++ b/Migration.md @@ -5,6 +5,12 @@ Deprecated code produces compile-time warnings. These warning serve as notification to users that their code should be upgraded. The next major release will remove the deprecated code. +## Ignition Common 4.X to 5.X + +### Modifications + +1. `Image::AvgColor`, `Image::Data` and `Image::RGBData` methods are now `const`. + ## Ignition Common 3.X to 4.X ### Modifications diff --git a/graphics/include/ignition/common/Image.hh b/graphics/include/ignition/common/Image.hh index d17700311..91ac1ad60 100644 --- a/graphics/include/ignition/common/Image.hh +++ b/graphics/include/ignition/common/Image.hh @@ -125,13 +125,13 @@ namespace ignition /// \brief Get the image as a data array /// \param[out] _data Pointer to a NULL array of char. /// \param[out] _count The resulting data array size - public: void Data(unsigned char **_data, unsigned int &_count); + public: void Data(unsigned char **_data, unsigned int &_count) const; /// \brief Get only the RGB data from the image. This will drop the /// alpha channel if one is present. /// \param[out] _data Pointer to a NULL array of char. /// \param[out] _count The resulting data array size - public: void RGBData(unsigned char **_data, unsigned int &_count); + public: void RGBData(unsigned char **_data, unsigned int &_count) const; /// \brief Get the width /// \return The image width @@ -166,7 +166,7 @@ namespace ignition /// \brief Get the average color /// \return The average color - public: math::Color AvgColor(); + public: math::Color AvgColor() const; /// \brief Get the max color /// \return The max color diff --git a/graphics/src/Image.cc b/graphics/src/Image.cc index c200fff74..87547f489 100644 --- a/graphics/src/Image.cc +++ b/graphics/src/Image.cc @@ -61,7 +61,7 @@ namespace ignition /// \param[in] _height Height of the image /// \return bitmap data with red and blue pixels swapped public: FIBITMAP* SwapRedBlue(const unsigned int &_width, - const unsigned int &_height); + const unsigned int &_height) const; }; } } @@ -249,7 +249,7 @@ int Image::Pitch() const } ////////////////////////////////////////////////// -void Image::RGBData(unsigned char **_data, unsigned int &_count) +void Image::RGBData(unsigned char **_data, unsigned int &_count) const { FIBITMAP *tmp = this->dataPtr->bitmap; FIBITMAP *tmp2 = nullptr; @@ -266,7 +266,7 @@ void Image::RGBData(unsigned char **_data, unsigned int &_count) } ////////////////////////////////////////////////// -void Image::Data(unsigned char **_data, unsigned int &_count) +void Image::Data(unsigned char **_data, unsigned int &_count) const { if (this->dataPtr->ShouldSwapRedBlue()) { @@ -398,7 +398,7 @@ math::Color Image::Pixel(unsigned int _x, unsigned int _y) const } ////////////////////////////////////////////////// -math::Color Image::AvgColor() +math::Color Image::AvgColor() const { unsigned int x, y; double rsum, gsum, bsum; @@ -582,7 +582,7 @@ bool Image::Implementation::CanSwapRedBlue() const ////////////////////////////////////////////////// FIBITMAP* Image::Implementation::SwapRedBlue(const unsigned int &_width, - const unsigned int &_height) + const unsigned int &_height) const { FIBITMAP *copy = FreeImage_Copy(this->bitmap, 0, 0, _width, _height); From 7bb95dc7a5d096be8c13e57cea394d2cff726d83 Mon Sep 17 00:00:00 2001 From: Arjo Chakravarty <arjo129@gmail.com> Date: Thu, 17 Feb 2022 01:07:04 +0800 Subject: [PATCH 130/219] Adds an `isRelativePath` to determine if path is relative (#312) This PR adds an `isRelativePath` function to ign-common Filesystem.hh. It is a simple wrapper around `std::filesystem`. The rationale for this is so we can remove `std::Filesystem` from ign-gazebo as this is causing other issues such as https://github.com/ignition-tooling/release-tools/issues/639. Signed-off-by: Arjo Chakravarty <arjo@openrobotics.org> --- include/ignition/common/Filesystem.hh | 5 +++++ src/Filesystem.cc | 6 ++++++ src/Filesystem_TEST.cc | 14 ++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/include/ignition/common/Filesystem.hh b/include/ignition/common/Filesystem.hh index fb765d523..af835d52f 100644 --- a/include/ignition/common/Filesystem.hh +++ b/include/ignition/common/Filesystem.hh @@ -57,6 +57,11 @@ namespace ignition /// \return True if _path is a file. bool IGNITION_COMMON_VISIBLE isFile(const std::string &_path); + /// \brief Check if the given path is relative. + /// \param[in] _path Path. + /// \return True if _path is relative. + bool IGNITION_COMMON_VISIBLE isRelativePath(const std::string &_path); + /// \brief Create a new directory on the filesystem. Intermediate /// directories must already exist. /// \param[in] _path The new directory path to create diff --git a/src/Filesystem.cc b/src/Filesystem.cc index ce66d6d6f..99cc9094b 100644 --- a/src/Filesystem.cc +++ b/src/Filesystem.cc @@ -71,6 +71,12 @@ bool ignition::common::isFile(const std::string &_path) return fs::is_regular_file(_path); } +///////////////////////////////////////////////// +bool ignition::common::isRelativePath(const std::string &_path) +{ + return fs::path(_path).is_relative(); +} + ///////////////////////////////////////////////// bool ignition::common::createDirectory(const std::string &_path) { diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index 0f77e3ee5..ebe39d698 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -245,6 +245,20 @@ TEST_F(FilesystemTest, exists) EXPECT_FALSE(isDirectory(absoluteSubdir)); } +///////////////////////////////////////////////// +TEST_F(FilesystemTest, relative) +{ + #ifndef _WIN32 + std::string absPath {"/tmp/fstest"}; + std::string relPath {"../fstest"}; + #else + std::string absPath {"C:\\Users\\user\\Desktop\\test.txt"}; + std::string relPath {"user\\Desktop\\test.txt"}; + #endif + EXPECT_FALSE(isRelativePath(absPath)); + EXPECT_TRUE(isRelativePath(relPath)); +} + // The symlink tests require special permissions to work on Windows, // so they will be disabled by default. For more information, see: // https://github.com/ignitionrobotics/ign-common/issues/21 From ce7cb4ad161b32249919ec31bf71946a49bee50e Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Wed, 16 Feb 2022 12:17:11 -0600 Subject: [PATCH 131/219] Miscellaneous cleanup of Events API (#297) * Remove `const` primitve values * Remove const from SetX functions Signed-off-by: Michael Carroll <michael@openrobotics.org> --- events/include/ignition/common/Event.hh | 6 ++--- events/include/ignition/common/KeyEvent.hh | 10 ++++---- events/include/ignition/common/MouseEvent.hh | 24 ++++++++++---------- events/src/Event.cc | 4 ++-- events/src/KeyEvent.cc | 12 +++++----- events/src/MouseEvent.cc | 24 ++++++++++---------- 6 files changed, 40 insertions(+), 40 deletions(-) diff --git a/events/include/ignition/common/Event.hh b/events/include/ignition/common/Event.hh index d1097613b..5095d39a0 100644 --- a/events/include/ignition/common/Event.hh +++ b/events/include/ignition/common/Event.hh @@ -53,7 +53,7 @@ namespace ignition /// \brief Set whether this event has been signaled. /// \param[in] _sig True if the event has been signaled. - public: void SetSignaled(const bool _sig); + public: void SetSignaled(bool _sig); /// \brief True if the event has been signaled. private: bool signaled; @@ -65,7 +65,7 @@ namespace ignition /// \brief Constructor. /// \param[in] _e Event pointer to connect with. /// \param[in] _i Unique id. - public: Connection(Event *_e, const int _i); + public: Connection(Event *_e, int _i); /// \brief Destructor. public: ~Connection(); @@ -156,7 +156,7 @@ namespace ignition private: class EventConnection { /// \brief Constructor - public: EventConnection(const bool _on, const std::function<T> &_cb, + public: EventConnection(bool _on, const std::function<T> &_cb, const ConnectionPtr &_publicConn) : callback(_cb), publicConnection(_publicConn) { diff --git a/events/include/ignition/common/KeyEvent.hh b/events/include/ignition/common/KeyEvent.hh index 765614210..c9eb84ce6 100644 --- a/events/include/ignition/common/KeyEvent.hh +++ b/events/include/ignition/common/KeyEvent.hh @@ -57,7 +57,7 @@ namespace ignition /// \brief Set the event type /// \param[in] _type Event type - public: void SetType(const EventType _type); + public: void SetType(EventType _type); /// \brief Get the key number /// \return The key number @@ -65,7 +65,7 @@ namespace ignition /// \brief Set the key /// \param[in] _key The key number - public: void SetKey(const int _key); + public: void SetKey(int _key); /// \brief Get the formatted string of the key pressed (could be /// uppercase). @@ -82,7 +82,7 @@ namespace ignition /// \brief Set whether the control key was held during this key event /// \param[in] _control Status of the control key - public: void SetControl(const bool _control); + public: void SetControl(bool _control); /// \brief Get whether the shift key was held during this key event /// \return True if the shift key was pressed @@ -90,7 +90,7 @@ namespace ignition /// \brief Set whether the shift key was held during this key event /// \param[in] _shift Status of the shift key - public: void SetShift(const bool _shift); + public: void SetShift(bool _shift); /// \brief Get whether the alt key was held during this key event /// \return True if the alt key was pressed @@ -98,7 +98,7 @@ namespace ignition /// \brief Set whether the alt key was held during this key event /// \param[in] _alt Status of the alt key - public: void SetAlt(const bool _alt); + public: void SetAlt(bool _alt); /// \brief Assignment operator /// \param[in] _other Other key event diff --git a/events/include/ignition/common/MouseEvent.hh b/events/include/ignition/common/MouseEvent.hh index 98cc5ed7e..b76826e0f 100644 --- a/events/include/ignition/common/MouseEvent.hh +++ b/events/include/ignition/common/MouseEvent.hh @@ -90,7 +90,7 @@ namespace ignition /// \brief Set mouse pointer position on the screen. /// \param[in] _x Mouse pointer X position on the screen. /// \param[in] _y Mouse pointer Y position on the screen. - public: void SetPos(const int _x, const int _y); + public: void SetPos(int _x, int _y); /// \brief Get the previous position. /// \return The previous mouse position. @@ -103,7 +103,7 @@ namespace ignition /// \brief Set the previous position. /// \param[in] _x Previous mouse pointer X position on the screen. /// \param[in] _y Previous mouse pointer Y position on the screen. - public: void SetPrevPos(const int _x, const int _y); + public: void SetPrevPos(int _x, int _y); /// \brief Get the position of button press. /// \return Screen position of a button press. @@ -116,7 +116,7 @@ namespace ignition /// \brief Set the position of button press. /// \param[in] _x Mouse pointer X position on the screen. /// \param[in] _y Mouse pointer Y position on the screen. - public: void SetPressPos(const int _x, const int _y); + public: void SetPressPos(int _x, int _y); /// \brief Get the scroll position. /// \return The scroll position. @@ -129,7 +129,7 @@ namespace ignition /// \brief Set the scroll position. /// \param[in] _x Scroll X position. /// \param[in] _y Scroll Y position. - public: void SetScroll(const int _x, const int _y); + public: void SetScroll(int _x, int _y); /// \brief Get the scaling factor. /// \return The move scaling factor. @@ -137,7 +137,7 @@ namespace ignition /// \brief Set the scaling factor. /// \param[in] _scale The move scaling factor. - public: void SetMoveScale(const float _scale); + public: void SetMoveScale(float _scale); /// \brief Get the flag for mouse drag motion /// \return True if dragging, usually indicating a mouse move with @@ -146,7 +146,7 @@ namespace ignition /// \brief Set the flag for mouse drag motion /// \param[in] _dragging The dragging flag. - public: void SetDragging(const bool _dragging); + public: void SetDragging(bool _dragging); /// \brief Get the event type. /// \return The EventType. @@ -154,7 +154,7 @@ namespace ignition /// \brief Set the event type. /// \param[in] _type The EventType. - public: void SetType(const EventType _type) const; + public: void SetType(MouseEvent::EventType _type); /// \brief Get the button which caused this event. /// \return The button which caused this event. @@ -162,7 +162,7 @@ namespace ignition /// \brief Set the button which caused the event. /// \param[in] _button The button which caused this event. - public: void SetButton(const MouseEvent::MouseButton _button) const; + public: void SetButton(MouseEvent::MouseButton _button); /// \brief Get the state of the buttons when the event was generated. /// \return The state of the buttons, which can be a bitwise @@ -172,7 +172,7 @@ namespace ignition /// \brief Set the state of the buttons when the event was generated. /// \param[in] _buttons The state of the buttons, which can be a bitwise /// combination of MouseEvent::MouseButton. - public: void SetButtons(const unsigned int &_buttons); + public: void SetButtons(unsigned int _buttons); /// \brief Get the shift key press flag. /// \return True if the shift key is pressed. @@ -180,7 +180,7 @@ namespace ignition /// \brief Set the shift key press flag. /// \param[in] _shift The shift key press flag. - public: void SetShift(const bool _shift) const; + public: void SetShift(bool _shift); /// \brief Get the alt key press flag. /// \return True if the alt key is pressed. @@ -188,7 +188,7 @@ namespace ignition /// \brief Set the alt key press flag. /// \param[in] _alt The alt key flag. - public: void SetAlt(const bool _alt); + public: void SetAlt(bool _alt); /// \brief Get the control key press flag. /// \return True if the control key is pressed. @@ -196,7 +196,7 @@ namespace ignition /// \brief Set the control key press flag. /// \param[in] _control The control key flag. - public: void SetControl(const bool _control) const; + public: void SetControl(bool _control); /// \brief Assignment operator /// \param[in] _other Other mouse event diff --git a/events/src/Event.cc b/events/src/Event.cc index 62b5f058b..b4a24a71d 100644 --- a/events/src/Event.cc +++ b/events/src/Event.cc @@ -39,13 +39,13 @@ bool Event::Signaled() const } ////////////////////////////////////////////////// -void Event::SetSignaled(const bool _sig) +void Event::SetSignaled(bool _sig) { this->signaled = _sig; } ////////////////////////////////////////////////// -Connection::Connection(Event *_e, const int _i) +Connection::Connection(Event *_e, int _i) : event(_e), id(_i) { this->creationTime = IGN_SYSTEM_TIME(); diff --git a/events/src/KeyEvent.cc b/events/src/KeyEvent.cc index feeb9096e..8686600cd 100644 --- a/events/src/KeyEvent.cc +++ b/events/src/KeyEvent.cc @@ -25,7 +25,7 @@ class ignition::common::KeyEventPrivate public: KeyEvent::EventType type = KeyEvent::NO_EVENT; /// \brief The raw value of the key pressed. - public: int key = 0; + public: int key = 0; /// \brief Formatted string of the key pressed (could be uppercase). public: std::string text = ""; @@ -72,7 +72,7 @@ KeyEvent::EventType KeyEvent::Type() const } ///////////////////////////////////////////////// -void KeyEvent::SetType(const KeyEvent::EventType _type) +void KeyEvent::SetType(KeyEvent::EventType _type) { this->dataPtr->type = _type; } @@ -84,7 +84,7 @@ int KeyEvent::Key() const } ///////////////////////////////////////////////// -void KeyEvent::SetKey(const int _key) +void KeyEvent::SetKey(int _key) { this->dataPtr->key = _key; } @@ -108,7 +108,7 @@ bool KeyEvent::Control() const } ///////////////////////////////////////////////// -void KeyEvent::SetControl(const bool _control) +void KeyEvent::SetControl(bool _control) { this->dataPtr->control = _control; } @@ -120,7 +120,7 @@ bool KeyEvent::Shift() const } ///////////////////////////////////////////////// -void KeyEvent::SetShift(const bool _shift) +void KeyEvent::SetShift(bool _shift) { this->dataPtr->shift = _shift; } @@ -132,7 +132,7 @@ bool KeyEvent::Alt() const } ///////////////////////////////////////////////// -void KeyEvent::SetAlt(const bool _alt) +void KeyEvent::SetAlt(bool _alt) { this->dataPtr->alt = _alt; } diff --git a/events/src/MouseEvent.cc b/events/src/MouseEvent.cc index fc3359e77..4d9628401 100644 --- a/events/src/MouseEvent.cc +++ b/events/src/MouseEvent.cc @@ -100,7 +100,7 @@ void MouseEvent::SetPos(const ignition::math::Vector2i &_pos) } ///////////////////////////////////////////////// -void MouseEvent::SetPos(const int _x, const int _y) +void MouseEvent::SetPos(int _x, int _y) { this->dataPtr->pos.Set(_x, _y); } @@ -118,7 +118,7 @@ void MouseEvent::SetPrevPos(const ignition::math::Vector2i &_pos) } ///////////////////////////////////////////////// -void MouseEvent::SetPrevPos(const int _x, const int _y) +void MouseEvent::SetPrevPos(int _x, int _y) { this->dataPtr->prevPos.Set(_x, _y); } @@ -136,7 +136,7 @@ void MouseEvent::SetPressPos(const ignition::math::Vector2i &_pos) } ///////////////////////////////////////////////// -void MouseEvent::SetPressPos(const int _x, const int _y) +void MouseEvent::SetPressPos(int _x, int _y) { this->dataPtr->pressPos.Set(_x, _y); } @@ -154,7 +154,7 @@ void MouseEvent::SetScroll(const ignition::math::Vector2i &_scroll) } ///////////////////////////////////////////////// -void MouseEvent::SetScroll(const int _x, const int _y) +void MouseEvent::SetScroll(int _x, int _y) { this->dataPtr->scroll.Set(_x, _y); } @@ -166,7 +166,7 @@ float MouseEvent::MoveScale() const } ///////////////////////////////////////////////// -void MouseEvent::SetMoveScale(const float _scale) +void MouseEvent::SetMoveScale(float _scale) { this->dataPtr->moveScale = _scale; } @@ -178,7 +178,7 @@ bool MouseEvent::Dragging() const } ///////////////////////////////////////////////// -void MouseEvent::SetDragging(const bool _dragging) +void MouseEvent::SetDragging(bool _dragging) { this->dataPtr->dragging = _dragging; } @@ -190,7 +190,7 @@ MouseEvent::EventType MouseEvent::Type() const } ///////////////////////////////////////////////// -void MouseEvent::SetType(const EventType _type) const +void MouseEvent::SetType(MouseEvent::EventType _type) { this->dataPtr->type = _type; } @@ -202,7 +202,7 @@ MouseEvent::MouseButton MouseEvent::Button() const } ///////////////////////////////////////////////// -void MouseEvent::SetButton(const MouseEvent::MouseButton _button) const +void MouseEvent::SetButton(MouseEvent::MouseButton _button) { this->dataPtr->button = _button; } @@ -214,7 +214,7 @@ unsigned int MouseEvent::Buttons() const } ///////////////////////////////////////////////// -void MouseEvent::SetButtons(const unsigned int &_buttons) +void MouseEvent::SetButtons(unsigned int _buttons) { this->dataPtr->buttons = _buttons; } @@ -226,7 +226,7 @@ bool MouseEvent::Shift() const } ///////////////////////////////////////////////// -void MouseEvent::SetShift(const bool _shift) const +void MouseEvent::SetShift(bool _shift) { this->dataPtr->shift = _shift; } @@ -238,7 +238,7 @@ bool MouseEvent::Alt() const } ///////////////////////////////////////////////// -void MouseEvent::SetAlt(const bool _alt) +void MouseEvent::SetAlt(bool _alt) { this->dataPtr->alt = _alt; } @@ -250,7 +250,7 @@ bool MouseEvent::Control() const } ///////////////////////////////////////////////// -void MouseEvent::SetControl(const bool _control) const +void MouseEvent::SetControl(bool _control) { this->dataPtr->control = _control; } From 0ca84e3bc4bbaf49995dc5ca749e9f3a908b21c7 Mon Sep 17 00:00:00 2001 From: Nate Koenig <nkoenig@users.noreply.github.com> Date: Fri, 18 Feb 2022 10:34:03 -0800 Subject: [PATCH 132/219] Minor typo in filesystem documentation (#313) Signed-off-by: Nate Koenig <nate@openrobotics.org> --- include/ignition/common/Filesystem.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ignition/common/Filesystem.hh b/include/ignition/common/Filesystem.hh index 42e95b327..71a2a4d83 100644 --- a/include/ignition/common/Filesystem.hh +++ b/include/ignition/common/Filesystem.hh @@ -241,7 +241,7 @@ namespace ignition /// files, by appending numbers to it (i.e. (0), (1), ...) /// \param[in] _pathAndName Full absolute path and file name up to the /// file extension. - /// \param[in] _extension File extension, such as "ddf". + /// \param[in] _extension File extension, such as "sdf". /// \return Full path with name and extension, which doesn't collide with /// existing files std::string IGNITION_COMMON_VISIBLE uniqueFilePath( From bde2937cb527d5f4a1a83a23f7bfc72ed050b8a8 Mon Sep 17 00:00:00 2001 From: Steve Peters <scpeters@openrobotics.org> Date: Fri, 25 Feb 2022 11:00:38 -0800 Subject: [PATCH 133/219] Add CI support for Jammy (#316) Signed-off-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Michael Carroll <michael@openrobotics.org> --- .github/workflows/ci.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e36175c3a..b2e5e6fff 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,3 +23,13 @@ jobs: - name: Compile and test id: ci uses: ignition-tooling/action-ignition-ci@focal + jammy-ci: + runs-on: ubuntu-latest + name: Ubuntu Jammy CI + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Compile and test + id: ci + uses: ignition-tooling/action-ignition-ci@jammy + From ad0fc881354d4322ae1f8b61e806ee4e5fd39bc2 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 3 Mar 2022 12:30:16 -0600 Subject: [PATCH 134/219] Add some tests for parentPath/basename (#309) Signed-off-by: Michael Carroll <michael@openrobotics.org> Signed-off-by: Louise Poubel <louise@openrobotics.org> Co-authored-by: Louise Poubel <louise@openrobotics.org> --- src/Filesystem_TEST.cc | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index a193767f6..261621fd0 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -493,38 +493,71 @@ TEST_F(FilesystemTest, cwd_error) } ///////////////////////////////////////////////// -TEST_F(FilesystemTest, basename) +TEST_F(FilesystemTest, decomposition) { std::string absolute = joinPaths("", "home", "bob", "foo"); EXPECT_EQ(basename(absolute), "foo"); +#ifndef _WIN32 + EXPECT_EQ(parentPath(absolute), "/home/bob"); +#else + EXPECT_EQ(parentPath(absolute), "home\\bob"); +#endif std::string relative = joinPaths("baz", "foobar"); EXPECT_EQ(basename(relative), "foobar"); + EXPECT_EQ(parentPath(relative), "baz"); std::string bname = "bzzz"; EXPECT_EQ(basename(bname), "bzzz"); + EXPECT_EQ(parentPath(bname), "bzzz"); std::string nobase = joinPaths("baz", ""); EXPECT_EQ(basename(nobase), "baz"); +#ifndef _WIN32 + EXPECT_EQ(parentPath(nobase), "baz/"); +#else + EXPECT_EQ(parentPath(nobase), "baz"); +#endif std::string multiple_slash = separator("baz") + separator("") + separator("") + separator(""); EXPECT_EQ(basename(multiple_slash), "baz"); +#ifndef _WIN32 + EXPECT_EQ(parentPath(multiple_slash), "baz//"); +#else + EXPECT_EQ(parentPath(multiple_slash), "baz\\\\"); +#endif std::string multiple_slash_middle = separator("") + separator("home") + separator("") + separator("") + separator("bob") + separator("foo"); EXPECT_EQ(basename(multiple_slash_middle), "foo"); +#ifndef _WIN32 + EXPECT_EQ(parentPath(multiple_slash_middle), "/home///bob"); +#else + EXPECT_EQ(parentPath(multiple_slash_middle), "\\home\\\\\\bob"); +#endif std::string multiple_slash_start = separator("") + separator("") + separator("") + separator("home") + separator("bob") + separator("foo"); EXPECT_EQ(basename(multiple_slash_start), "foo"); +#ifndef _WIN32 + EXPECT_EQ(parentPath(multiple_slash_start), "///home/bob"); +#else + EXPECT_EQ(parentPath(multiple_slash_start), "\\\\\\home\\bob"); +#endif std::string slash_only = separator("") + separator(""); EXPECT_EQ(basename(slash_only), separator("")); + EXPECT_EQ(parentPath(slash_only), ""); std::string multiple_slash_only = separator("") + separator("") + separator("") + separator(""); EXPECT_EQ(basename(multiple_slash_only), separator("")); +#ifndef _WIN32 + EXPECT_EQ(parentPath(multiple_slash_only), "//"); +#else + EXPECT_EQ(parentPath(multiple_slash_only), "\\\\"); +#endif } ///////////////////////////////////////////////// From b960986d612f3c5ddd30e47cdc8d2b9450ba9220 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Fri, 4 Mar 2022 18:20:56 -0600 Subject: [PATCH 135/219] Fix filesystem::separator, parentPath and basename behavior (#308) * Separator with an emptry string argument should return the preferred separator for that platform * Basename should return basename in the case with multiple trailing slashes Signed-off-by: Michael Carroll <michael@openrobotics.org> Signed-off-by: Louise Poubel <louise@openrobotics.org> Co-authored-by: Louise Poubel <louise@openrobotics.org> --- src/Filesystem.cc | 33 +++++++++++++++++-------------- src/Filesystem_TEST.cc | 45 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 62 insertions(+), 16 deletions(-) diff --git a/src/Filesystem.cc b/src/Filesystem.cc index 99cc9094b..2b1b26f68 100644 --- a/src/Filesystem.cc +++ b/src/Filesystem.cc @@ -99,8 +99,7 @@ bool ignition::common::createDirectories(const std::string &_path) ///////////////////////////////////////////////// std::string const ignition::common::separator(std::string const &_s) { - fs::path path(_s); - return (_s / fs::path("")).string(); + return _s + std::string{fs::path::preferred_separator}; } ///////////////////////////////////////////////// @@ -144,6 +143,11 @@ std::string ignition::common::joinPaths( fs::path p1{_path1}; fs::path p2{_path2}; + if (p1.empty()) + { + p1 = ignition::common::separator(""); + } + bool is_url = false; if (_path1.find("://") == std::string::npos) @@ -202,24 +206,23 @@ bool ignition::common::chdir(const std::string &_dir) std::string ignition::common::basename(const std::string &_path) { fs::path p(_path); - // Maintain compatibility with ign-common - if (*_path.rbegin() == fs::path::preferred_separator) - p = fs::path(_path.substr(0, _path.size()-1)); - return p.filename().string(); + p /= "FOO.TXT"; + p = p.lexically_normal(); + p = p.parent_path(); + return p.filename().string().empty() ? + std::string{fs::path::preferred_separator} : p.filename().string(); } ///////////////////////////////////////////////// std::string ignition::common::parentPath(const std::string &_path) { - fs::path p(_path); - // Maintain compatibility with ign-common - if (*_path.rbegin() == fs::path::preferred_separator) - p = fs::path(_path.substr(0, _path.size()-1)); - - if (!p.has_parent_path()) - return _path; - - return p.parent_path().string(); + std::string result; + size_t last_sep = _path.find_last_of(separator("")); + // If slash is the last character, find its parent directory + if (last_sep == _path.length() - 1) + last_sep = _path.substr(0, last_sep).find_last_of(separator("")); + result = _path.substr(0, last_sep); + return result; } ///////////////////////////////////////////////// diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index ebe39d698..2fce02751 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -413,38 +413,71 @@ TEST_F(FilesystemTest, IGN_UTILS_TEST_DISABLED_ON_WIN32(cwd_error)) } ///////////////////////////////////////////////// -TEST_F(FilesystemTest, basename) +TEST_F(FilesystemTest, decomposition) { std::string absolute = joinPaths("", "home", "bob", "foo"); EXPECT_EQ(basename(absolute), "foo"); +#ifndef _WIN32 + EXPECT_EQ(parentPath(absolute), "/home/bob"); +#else + EXPECT_EQ(parentPath(absolute), "\\home\\bob"); +#endif std::string relative = joinPaths("baz", "foobar"); EXPECT_EQ(basename(relative), "foobar"); + EXPECT_EQ(parentPath(relative), "baz"); std::string bname = "bzzz"; EXPECT_EQ(basename(bname), "bzzz"); + EXPECT_EQ(parentPath(bname), "bzzz"); std::string nobase = joinPaths("baz", ""); EXPECT_EQ(basename(nobase), "baz"); +#ifndef _WIN32 + EXPECT_EQ(parentPath(nobase), "baz/"); +#else + EXPECT_EQ(parentPath(nobase), "baz\\"); +#endif std::string multiple_slash = separator("baz") + separator("") + separator("") + separator(""); EXPECT_EQ(basename(multiple_slash), "baz"); +#ifndef _WIN32 + EXPECT_EQ(parentPath(multiple_slash), "baz//"); +#else + EXPECT_EQ(parentPath(multiple_slash), "baz\\\\"); +#endif std::string multiple_slash_middle = separator("") + separator("home") + separator("") + separator("") + separator("bob") + separator("foo"); EXPECT_EQ(basename(multiple_slash_middle), "foo"); +#ifndef _WIN32 + EXPECT_EQ(parentPath(multiple_slash_middle), "/home///bob"); +#else + EXPECT_EQ(parentPath(multiple_slash_middle), "\\home\\\\\\bob"); +#endif std::string multiple_slash_start = separator("") + separator("") + separator("") + separator("home") + separator("bob") + separator("foo"); EXPECT_EQ(basename(multiple_slash_start), "foo"); +#ifndef _WIN32 + EXPECT_EQ(parentPath(multiple_slash_start), "///home/bob"); +#else + EXPECT_EQ(parentPath(multiple_slash_start), "\\\\\\home\\bob"); +#endif std::string slash_only = separator("") + separator(""); EXPECT_EQ(basename(slash_only), separator("")); + EXPECT_EQ(parentPath(slash_only), ""); std::string multiple_slash_only = separator("") + separator("") + separator("") + separator(""); EXPECT_EQ(basename(multiple_slash_only), separator("")); +#ifndef _WIN32 + EXPECT_EQ(parentPath(multiple_slash_only), "//"); +#else + EXPECT_EQ(parentPath(multiple_slash_only), "\\\\"); +#endif } ///////////////////////////////////////////////// @@ -611,6 +644,16 @@ TEST_F(FilesystemTest, uniquePaths) EXPECT_TRUE(removeDirectory(dirExistingRt)) << dirExistingRt; } +///////////////////////////////////////////////// +TEST_F(FilesystemTest, separator) +{ +#ifndef _WIN32 + EXPECT_EQ("/", ignition::common::separator("")); +#else + EXPECT_EQ("\\", ignition::common::separator("")); +#endif +} + ///////////////////////////////////////////////// /// Main int main(int argc, char **argv) From af583c93987f96b985914df25780c8ea7c642364 Mon Sep 17 00:00:00 2001 From: Steve Peters <scpeters@openrobotics.org> Date: Mon, 14 Mar 2022 17:53:34 -0700 Subject: [PATCH 136/219] Geospatial component for heightmaps and DEM support (#292) Signed-off-by: Jenn Nguyen <jenn@openrobotics.org> Signed-off-by: Steve Peters <scpeters@openrobotics.org> Co-authored-by: Steve Peters <scpeters@openrobotics.org> Co-authored-by: Jenn Nguyen <jenn@openrobotics.org> Co-authored-by: Ian Chen <ichen@osrfoundation.org> Co-authored-by: Louise Poubel <louise@openrobotics.org> --- .github/ci/packages.apt | 1 + CMakeLists.txt | 11 +- Migration.md | 13 + .../include/ignition/common/CMakeLists.txt | 2 + .../ignition/common/geospatial}/Dem.hh | 32 +-- .../common/geospatial}/HeightmapData.hh | 22 +- .../common/geospatial}/ImageHeightmap.hh | 17 +- geospatial/src/CMakeLists.txt | 22 ++ {graphics => geospatial}/src/Dem.cc | 211 ++++++++++++----- geospatial/src/Dem_TEST.cc | 222 ++++++++++++++++++ .../src/ImageHeightmap.cc | 4 +- .../src/ImageHeightmap_TEST.cc | 7 +- graphics/src/Dem_TEST.cc | 163 ------------- test/data/dem_landscape.tif | Bin 0 -> 100487 bytes test/data/dem_moon.tif | Bin 0 -> 4987 bytes test/data/dem_nodata.dem | Bin 0 -> 9441 bytes test/data/dem_portrait.tif | Bin 0 -> 100487 bytes test/data/dem_squared.tif | Bin 0 -> 67701 bytes test/data/dem_unfinished.tif | Bin 0 -> 5144 bytes 19 files changed, 465 insertions(+), 262 deletions(-) create mode 100644 geospatial/include/ignition/common/CMakeLists.txt rename {graphics/include/ignition/common => geospatial/include/ignition/common/geospatial}/Dem.hh (86%) rename {graphics/include/ignition/common => geospatial/include/ignition/common/geospatial}/HeightmapData.hh (75%) rename {graphics/include/ignition/common => geospatial/include/ignition/common/geospatial}/ImageHeightmap.hh (91%) create mode 100644 geospatial/src/CMakeLists.txt rename {graphics => geospatial}/src/Dem.cc (58%) create mode 100644 geospatial/src/Dem_TEST.cc rename {graphics => geospatial}/src/ImageHeightmap.cc (97%) rename {graphics => geospatial}/src/ImageHeightmap_TEST.cc (95%) delete mode 100644 graphics/src/Dem_TEST.cc create mode 100644 test/data/dem_landscape.tif create mode 100644 test/data/dem_moon.tif create mode 100644 test/data/dem_nodata.dem create mode 100644 test/data/dem_portrait.tif create mode 100644 test/data/dem_squared.tif create mode 100644 test/data/dem_unfinished.tif diff --git a/.github/ci/packages.apt b/.github/ci/packages.apt index 9bfe4b327..f9908b5f4 100644 --- a/.github/ci/packages.apt +++ b/.github/ci/packages.apt @@ -3,6 +3,7 @@ libavdevice-dev libavformat-dev libavutil-dev libfreeimage-dev +libgdal-dev libgts-dev libignition-cmake2-dev libignition-math7-dev diff --git a/CMakeLists.txt b/CMakeLists.txt index da71892bb..a9d507c8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,7 +48,7 @@ message(STATUS "\n\n-- ====== Finding Dependencies ======") #-------------------------------------- # Find ignition-math -ign_find_package(ignition-math7 REQUIRED_BY graphics events) +ign_find_package(ignition-math7 REQUIRED_BY geospatial graphics events) set(IGN_MATH_VER ${ignition-math7_VERSION_MAJOR}) #-------------------------------------- @@ -94,6 +94,13 @@ ign_find_package( REQUIRED_BY graphics PRIVATE_FOR graphics) +#------------------------------------ +# Find GDAL +ign_find_package(GDAL VERSION 3.0 + PKGCONFIG gdal + PRIVATE_FOR geospatial + REQUIRED_BY geospatial) + #------------------------------------ # Find libswscale ign_find_package(SWSCALE REQUIRED_BY av PRETTY libswscale) @@ -125,7 +132,7 @@ configure_file("${PROJECT_SOURCE_DIR}/cppcheck.suppress.in" ${PROJECT_BINARY_DIR}/cppcheck.suppress) ign_configure_build(QUIT_IF_BUILD_ERRORS - COMPONENTS av events graphics profiler) + COMPONENTS av events geospatial graphics profiler) #============================================================================ # Create package information diff --git a/Migration.md b/Migration.md index 4bc21f0bb..1aa67f3a1 100644 --- a/Migration.md +++ b/Migration.md @@ -7,8 +7,21 @@ release will remove the deprecated code. ## Ignition Common 4.X to 5.X +### Additions + +1. **geospatial** component that loads heightmap images and DEMs + + Depends on the ign-common's `graphics` component and the `gdal` library + ### Modifications +1. `HeightmapData.hh` and `ImageHeightmap.hh` have been moved out of the +`graphics` component and into the new `geospatial` component + + To use the heightmap features, users must add the `geospatial` component + to the `find_package` call and update the include paths to use + the geospatial subfolder (`#include <ignition/common/geospatial/HeightmapData.hh>`) + +1. `HeightmapData::FillHeightmap` method is now `const`. + 1. `Image::AvgColor`, `Image::Data` and `Image::RGBData` methods are now `const`. ## Ignition Common 3.X to 4.X diff --git a/geospatial/include/ignition/common/CMakeLists.txt b/geospatial/include/ignition/common/CMakeLists.txt new file mode 100644 index 000000000..7155438eb --- /dev/null +++ b/geospatial/include/ignition/common/CMakeLists.txt @@ -0,0 +1,2 @@ + +ign_install_all_headers(COMPONENT geospatial) diff --git a/graphics/include/ignition/common/Dem.hh b/geospatial/include/ignition/common/geospatial/Dem.hh similarity index 86% rename from graphics/include/ignition/common/Dem.hh rename to geospatial/include/ignition/common/geospatial/Dem.hh index ff83c0dd8..7169db216 100644 --- a/graphics/include/ignition/common/Dem.hh +++ b/geospatial/include/ignition/common/geospatial/Dem.hh @@ -14,22 +14,21 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_DEM_HH_ -#define IGNITION_COMMON_DEM_HH_ +#ifndef IGNITION_COMMON_GEOSPATIAL_DEM_HH_ +#define IGNITION_COMMON_GEOSPATIAL_DEM_HH_ #include <memory> +#include <string> +#include <vector> + #include <ignition/math/Vector3.hh> #include <ignition/math/Angle.hh> -#include <ignition/common/graphics/Export.hh> +#include <ignition/common/geospatial/Export.hh> +#include <ignition/common/geospatial/HeightmapData.hh> #include <ignition/utils/ImplPtr.hh> -#ifdef HAVE_GDAL -# include <string> -# include <vector> - -# include <ignition/common/HeightmapData.hh> namespace ignition { @@ -37,7 +36,7 @@ namespace ignition { /// \class DEM DEM.hh common/common.hh /// \brief Encapsulates a DEM (Digital Elevation Model) file. - class IGNITION_COMMON_GRAPHICS_VISIBLE Dem : public HeightmapData + class IGNITION_COMMON_GEOSPATIAL_VISIBLE Dem : public HeightmapData { /// \brief Constructor. public: Dem(); @@ -53,7 +52,8 @@ namespace ignition /// \brief Get the elevation of a terrain's point in meters. /// \param[in] _x X coordinate of the terrain. /// \param[in] _y Y coordinate of the terrain. - /// \return Terrain's elevation at (x,y) in meters. + /// \return Terrain's elevation at (x,y) in meters or infinity if illegal + /// coordinates were provided. public: double Elevation(double _x, double _y); /// \brief Get the terrain's minimum elevation in meters. @@ -68,7 +68,8 @@ namespace ignition /// origin in WGS84. /// \param[out] _latitude Georeferenced latitude. /// \param[out] _longitude Georeferenced longitude. - public: void GeoReferenceOrigin(ignition::math::Angle &_latitude, + /// \return True if able to retrieve origin coordinates. False otherwise. + public: bool GeoReferenceOrigin(ignition::math::Angle &_latitude, ignition::math::Angle &_longitude) const; /// \brief Get the terrain's height. Due to the Ogre constrains, this @@ -112,7 +113,7 @@ namespace ignition const ignition::math::Vector3d &_size, const ignition::math::Vector3d &_scale, const bool _flipY, - std::vector<float> &_heights); + std::vector<float> &_heights) const; /// \brief Get the georeferenced coordinates (lat, long) of a terrain's /// pixel in WGS84. @@ -120,7 +121,8 @@ namespace ignition /// \param[in] _y Y coordinate of the terrain. /// \param[out] _latitude Georeferenced latitude. /// \param[out] _longitude Georeferenced longitude. - private: void GeoReference(double _x, double _y, + /// \return True if able to retrieve coordinates. False otherwise. + private: bool GeoReference(double _x, double _y, ignition::math::Angle &_latitude, ignition::math::Angle &_longitude) const; @@ -130,6 +132,9 @@ namespace ignition /// \return 0 when the operation succeeds to open a file. private: int LoadData(); + // Documentation inherited. + public: std::string Filename() const; + /// internal /// \brief Pointer to the private data. IGN_UTILS_IMPL_PTR(dataPtr) @@ -137,4 +142,3 @@ namespace ignition } } #endif -#endif diff --git a/graphics/include/ignition/common/HeightmapData.hh b/geospatial/include/ignition/common/geospatial/HeightmapData.hh similarity index 75% rename from graphics/include/ignition/common/HeightmapData.hh rename to geospatial/include/ignition/common/geospatial/HeightmapData.hh index 22eeb4945..e161b5b62 100644 --- a/graphics/include/ignition/common/HeightmapData.hh +++ b/geospatial/include/ignition/common/geospatial/HeightmapData.hh @@ -14,19 +14,20 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_HEIGHTMAPDATA_HH_ -#define IGNITION_COMMON_HEIGHTMAPDATA_HH_ +#ifndef IGNITION_COMMON_GEOSPATIAL_HEIGHTMAPDATA_HH_ +#define IGNITION_COMMON_GEOSPATIAL_HEIGHTMAPDATA_HH_ +#include <string> #include <vector> #include <ignition/math/Vector3.hh> -#include <ignition/common/graphics/Export.hh> +#include <ignition/common/geospatial/Export.hh> namespace ignition { namespace common { /// \brief Encapsulates a generic heightmap data file. - class IGNITION_COMMON_GRAPHICS_VISIBLE HeightmapData + class IGNITION_COMMON_GEOSPATIAL_VISIBLE HeightmapData { /// \brief Destructor. public: virtual ~HeightmapData() = default; @@ -44,7 +45,7 @@ namespace ignition public: virtual void FillHeightMap(int _subSampling, unsigned int _vertSize, const ignition::math::Vector3d &_size, const ignition::math::Vector3d &_scale, bool _flipY, - std::vector<float> &_heights) = 0; + std::vector<float> &_heights) const = 0; /// \brief Get the terrain's height. /// \return The terrain's height. @@ -57,6 +58,17 @@ namespace ignition /// \brief Get the maximum terrain's elevation. /// \return The maximum terrain's elevation. public: virtual float MaxElevation() const = 0; + + /// \brief Get the min terrain's elevation. + /// \return The min terrain's elevation. + public: virtual float MinElevation() const + { + return 0.0f; + } + + /// \brief Get the full filename of loaded heightmap image/dem + /// \return The filename used to load the heightmap image/dem + public: virtual std::string Filename() const = 0; }; } } diff --git a/graphics/include/ignition/common/ImageHeightmap.hh b/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh similarity index 91% rename from graphics/include/ignition/common/ImageHeightmap.hh rename to geospatial/include/ignition/common/geospatial/ImageHeightmap.hh index 43a1bccc8..35cabb870 100644 --- a/graphics/include/ignition/common/ImageHeightmap.hh +++ b/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh @@ -14,16 +14,16 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_IMAGEHEIGHTMAPDATA_HH_ -#define IGNITION_COMMON_IMAGEHEIGHTMAPDATA_HH_ +#ifndef IGNITION_COMMON_GEOSPATIAL_IMAGEHEIGHTMAPDATA_HH_ +#define IGNITION_COMMON_GEOSPATIAL_IMAGEHEIGHTMAPDATA_HH_ #include <limits> #include <string> #include <vector> #include <ignition/math/Vector3.hh> -#include <ignition/common/graphics/Export.hh> -#include <ignition/common/HeightmapData.hh> +#include <ignition/common/geospatial/Export.hh> +#include <ignition/common/geospatial/HeightmapData.hh> #include <ignition/common/Image.hh> namespace ignition @@ -31,7 +31,7 @@ namespace ignition namespace common { /// \brief Encapsulates an image that will be interpreted as a heightmap. - class IGNITION_COMMON_GRAPHICS_VISIBLE ImageHeightmap + class IGNITION_COMMON_GEOSPATIAL_VISIBLE ImageHeightmap : public ignition::common::HeightmapData { /// \brief Constructor @@ -47,10 +47,9 @@ namespace ignition public: void FillHeightMap(int _subSampling, unsigned int _vertSize, const ignition::math::Vector3d &_size, const ignition::math::Vector3d &_scale, bool _flipY, - std::vector<float> &_heights); + std::vector<float> &_heights) const; - /// \brief Get the full filename of the image - /// \return The filename used to load the image + // Documentation inherited. public: std::string Filename() const; // Documentation inherited. @@ -80,7 +79,7 @@ namespace ignition unsigned int _pitch, int _subSampling, unsigned int _vertSize, const ignition::math::Vector3d &_size, const ignition::math::Vector3d &_scale, - bool _flipY, std::vector<float> &_heights) + bool _flipY, std::vector<float> &_heights) const { // bytes per pixel const unsigned int bpp = _pitch / _imgWidth; diff --git a/geospatial/src/CMakeLists.txt b/geospatial/src/CMakeLists.txt new file mode 100644 index 000000000..6975e86fc --- /dev/null +++ b/geospatial/src/CMakeLists.txt @@ -0,0 +1,22 @@ + +ign_get_libsources_and_unittests(sources gtest_sources) + +ign_add_component(geospatial + SOURCES ${sources} + DEPENDS_ON_COMPONENTS graphics + GET_TARGET_NAME geospatial_target) + +target_link_libraries(${geospatial_target} + PUBLIC + ${PROJECT_LIBRARY_TARGET_NAME}-graphics + ignition-math${IGN_MATH_VER}::ignition-math${IGN_MATH_VER} + ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER} + PRIVATE + ${GDAL_LIBRARY}) + +target_include_directories(${geospatial_target} + PRIVATE + ${GDAL_INCLUDE_DIR}) + +ign_build_tests(TYPE UNIT SOURCES ${gtest_sources} + LIB_DEPS ${geospatial_target}) diff --git a/graphics/src/Dem.cc b/geospatial/src/Dem.cc similarity index 58% rename from graphics/src/Dem.cc rename to geospatial/src/Dem.cc index ad52f023c..f3e3d1e20 100644 --- a/graphics/src/Dem.cc +++ b/geospatial/src/Dem.cc @@ -15,23 +15,18 @@ * */ #include <algorithm> +#include <limits> -#ifdef HAVE_GDAL -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wfloat-equal" -# include <ogr_spatialref.h> -# pragma GCC diagnostic pop -#endif +#include <gdal_priv.h> +#include <ogr_spatialref.h> #include "ignition/common/Console.hh" -#include "ignition/common/Dem.hh" +#include "ignition/common/geospatial/Dem.hh" #include "ignition/math/SphericalCoordinates.hh" using namespace ignition; using namespace common; -#ifdef HAVE_GDAL - class ignition::common::Dem::Implementation { /// \brief A set of associated raster bands. @@ -57,6 +52,14 @@ class ignition::common::Dem::Implementation /// \brief DEM data converted to be OGRE-compatible. public: std::vector<float> demData; + + /// \brief Full filename used to load the dem. + public: std::string filename; + + /// \brief Whether the DEM will be handled as from non-Earth. + /// If true, worldWidth & worldHeight = -1 + /// and GeoReference[Origin] can not be used (will return false) + public: bool isNonEarthDem = false; }; ////////////////////////////////////////////////// @@ -89,12 +92,13 @@ int Dem::Load(const std::string &_filename) // Sanity check std::string fullName = _filename; if (!exists(findFilePath(fullName))) - fullName = common::find_file(_filename); + fullName = common::findFile(_filename); + + this->dataPtr->filename = fullName; if (!exists(findFilePath(fullName))) { - gzerr << "Unable to open DEM file[" << _filename - << "], check your GAZEBO_RESOURCE_PATH settings." << std::endl; + ignerr << "Unable to find DEM file[" << _filename << "]." << std::endl; return -1; } @@ -103,25 +107,25 @@ int Dem::Load(const std::string &_filename) if (this->dataPtr->dataSet == nullptr) { - gzerr << "Unable to open DEM file[" << fullName - << "]. Format not recognised as a supported dataset." << std::endl; + ignerr << "Unable to open DEM file[" << fullName + << "]. Format not recognized as a supported dataset." << std::endl; return -1; } - int nBands = this->dataPtr->dataSet->RasterCount(); + int nBands = this->dataPtr->dataSet->GetRasterCount(); if (nBands != 1) { - gzerr << "Unsupported number of bands in file [" << fullName + "]. Found " + ignerr << "Unsupported number of bands in file [" << fullName + "]. Found " << nBands << " but only 1 is a valid value." << std::endl; return -1; } // Set the pointer to the band - this->dataPtr->band = this->dataPtr->dataSet->RasterBand(1); + this->dataPtr->band = this->dataPtr->dataSet->GetRasterBand(1); // Raster width and height - xSize = this->dataPtr->dataSet->RasterXSize(); - ySize = this->dataPtr->dataSet->RasterYSize(); + xSize = this->dataPtr->dataSet->GetRasterXSize(); + ySize = this->dataPtr->dataSet->GetRasterYSize(); // Corner coordinates upLeftX = 0.0; @@ -132,17 +136,28 @@ int Dem::Load(const std::string &_filename) lowLeftY = ySize; // Calculate the georeferenced coordinates of the terrain corners - this->GeoReference(upLeftX, upLeftY, upLeftLat, upLeftLong); - this->GeoReference(upRightX, upRightY, upRightLat, upRightLong); - this->GeoReference(lowLeftX, lowLeftY, lowLeftLat, lowLeftLong); - - // Set the world width and height - this->dataPtr->worldWidth = - math::SphericalCoordinates::Distance(upLeftLat, upLeftLong, - upRightLat, upRightLong); - this->dataPtr->worldHeight = - math::SphericalCoordinates::Distance(upLeftLat, upLeftLong, - lowLeftLat, lowLeftLong); + if (this->GeoReference(upLeftX, upLeftY, upLeftLat, upLeftLong) + && this->GeoReference(upRightX, upRightY, upRightLat, upRightLong) + && this->GeoReference(lowLeftX, lowLeftY, lowLeftLat, lowLeftLong)) + { + // If successful, set the world width and height + this->dataPtr->worldWidth = + math::SphericalCoordinates::Distance(upLeftLat, upLeftLong, + upRightLat, upRightLong); + this->dataPtr->worldHeight = + math::SphericalCoordinates::Distance(upLeftLat, upLeftLong, + lowLeftLat, lowLeftLong); + } + // Assume non-Earth DEM (e.g., moon) + else + { + ignwarn << "Failed to automatically compute DEM size. " + << "Assuming non-Earth DEM. " + << std::endl; + + this->dataPtr->worldWidth = this->dataPtr->worldHeight = -1; + this->dataPtr->isNonEarthDem = true; + } // Set the terrain's side (the terrain will be squared after the padding) if (ignition::math::isPowerOfTwo(ySize - 1)) @@ -161,12 +176,38 @@ int Dem::Load(const std::string &_filename) if (this->LoadData() != 0) return -1; - // Set the min/max heights - this->dataPtr->minElevation = *std::min_element(&this->dataPtr->demData[0], - &this->dataPtr->demData[0] + this->dataPtr->side * this->dataPtr->side); - this->dataPtr->maxElevation = *std::max_element(&this->dataPtr->demData[0], - &this->dataPtr->demData[0] + this->dataPtr->side * this->dataPtr->side); + // Check for nodata value in dem data. This is used when computing the + // min elevation. If nodata value is not defined, we assume it will be one + // of the commonly used values such as -9999, -32768, etc. + // See https://desktop.arcgis.com/en/arcmap/10.8/manage-data/raster-and-images/nodata-in-raster-datasets.htm + // For simplicity, we will treat values <= -9999 as nodata values and + // ignore them when computing the min elevation. + int validNoData = 0; + const double defaultNoDataValue = -9999; + double noDataValue = this->dataPtr->band->GetNoDataValue(&validNoData); + if (validNoData <= 0) + noDataValue = defaultNoDataValue; + + double min = ignition::math::MAX_D; + double max = -ignition::math::MAX_D; + for (auto d : this->dataPtr->demData) + { + if (d > noDataValue) + { + if (d < min) + min = d; + if (d > max) + max = d; + } + } + if (ignition::math::equal(min, ignition::math::MAX_D) || + ignition::math::equal(max, -ignition::math::MAX_D)) + { + ignwarn << "DEM is composed of 'nodata' values!" << std::endl; + } + this->dataPtr->minElevation = min; + this->dataPtr->maxElevation = max; return 0; } @@ -175,12 +216,15 @@ double Dem::Elevation(double _x, double _y) { if (_x >= this->Width() || _y >= this->Height()) { - gzthrow("Illegal coordinates. You are asking for the elevation in (" << - _x << "," << _y << ") but the terrain is [" << this->Width() << - " x " << this->Height() << "]\n"); + ignerr << "Illegal coordinates. You are asking for the elevation in (" + << _x << "," << _y << ") but the terrain is [" + << this->Width() << " x " << this->Height() << "]" << std::endl; + return std::numeric_limits<double>::infinity(); } - return this->dataPtr->demData.at(_y * this->Width() + _x); + auto idx = static_cast<unsigned int>(_y) * this->Width() + + static_cast<unsigned int>(_x); + return this->dataPtr->demData.at(idx); } ////////////////////////////////////////////////// @@ -196,11 +240,18 @@ float Dem::MaxElevation() const } ////////////////////////////////////////////////// -void Dem::GeoReference(double _x, double _y, +bool Dem::GeoReference(double _x, double _y, ignition::math::Angle &_latitude, ignition::math::Angle &_longitude) const { + if (this->dataPtr->isNonEarthDem) + { + ignerr << "Can not retrieve WGS84 coordinates from non-Earth DEM." + << std::endl; + return false; + } + double geoTransf[6]; - if (this->dataPtr->dataSet->GeoTransform(geoTransf) == CE_None) + if (this->dataPtr->dataSet->GetGeoTransform(geoTransf) == CE_None) { OGRSpatialReference sourceCs; OGRSpatialReference targetCs; @@ -208,26 +259,40 @@ void Dem::GeoReference(double _x, double _y, double xGeoDeg, yGeoDeg; // Transform the terrain's coordinate system to WGS84 - char *importString = strdup(this->dataPtr->dataSet->ProjectionRef()); + const char *importString + = strdup(this->dataPtr->dataSet->GetProjectionRef()); sourceCs.importFromWkt(&importString); targetCs.SetWellKnownGeogCS("WGS84"); cT = OGRCreateCoordinateTransformation(&sourceCs, &targetCs); + if (nullptr == cT) + { + ignerr << "Unable to transform terrain coordinate system to WGS84 for " + << "coordinates (" << _x << "," << _y << ")" << std::endl; + OCTDestroyCoordinateTransformation(cT); + return false; + } xGeoDeg = geoTransf[0] + _x * geoTransf[1] + _y * geoTransf[2]; yGeoDeg = geoTransf[3] + _x * geoTransf[4] + _y * geoTransf[5]; cT->Transform(1, &xGeoDeg, &yGeoDeg); - _latitude.Degree(yGeoDeg); - _longitude.Degree(xGeoDeg); + _latitude.SetDegree(yGeoDeg); + _longitude.SetDegree(xGeoDeg); + + OCTDestroyCoordinateTransformation(cT); } else - gzthrow("Unable to obtain the georeferenced values for coordinates (" - << _x << "," << _y << ")\n"); + { + ignerr << "Unable to obtain the georeferenced values for coordinates (" + << _x << "," << _y << ")" << std::endl; + return false; + } + return true; } ////////////////////////////////////////////////// -void Dem::GeoReferenceOrigin(ignition::math::Angle &_latitude, +bool Dem::GeoReferenceOrigin(ignition::math::Angle &_latitude, ignition::math::Angle &_longitude) const { return this->GeoReference(0, 0, _latitude, _longitude); @@ -248,12 +313,22 @@ unsigned int Dem::Width() const ////////////////////////////////////////////////// double Dem::WorldWidth() const { + if (this->dataPtr->isNonEarthDem) + { + ignwarn << "Unable to determine world width of non-Earth DEM." + << std::endl; + } return this->dataPtr->worldWidth; } ////////////////////////////////////////////////// double Dem::WorldHeight() const { + if (this->dataPtr->isNonEarthDem) + { + ignwarn << "Unable to determine world height of non-Earth DEM." + << std::endl; + } return this->dataPtr->worldHeight; } @@ -261,11 +336,11 @@ double Dem::WorldHeight() const void Dem::FillHeightMap(int _subSampling, unsigned int _vertSize, const ignition::math::Vector3d &_size, const ignition::math::Vector3d &_scale, - bool _flipY, std::vector<float> &_heights) + bool _flipY, std::vector<float> &_heights) const { if (_subSampling <= 0) { - gzerr << "Illegal subsampling value (" << _subSampling << ")\n"; + ignerr << "Illegal subsampling value (" << _subSampling << ")\n"; return; } @@ -276,8 +351,8 @@ void Dem::FillHeightMap(int _subSampling, unsigned int _vertSize, for (unsigned int y = 0; y < _vertSize; ++y) { double yf = y / static_cast<double>(_subSampling); - unsigned int y1 = floor(yf); - unsigned int y2 = ceil(yf); + unsigned int y1 = static_cast<unsigned int>(floor(yf)); + unsigned int y2 = static_cast<unsigned int>(ceil(yf)); if (y2 >= this->dataPtr->side) y2 = this->dataPtr->side - 1; double dy = yf - y1; @@ -285,8 +360,8 @@ void Dem::FillHeightMap(int _subSampling, unsigned int _vertSize, for (unsigned int x = 0; x < _vertSize; ++x) { double xf = x / static_cast<double>(_subSampling); - unsigned int x1 = floor(xf); - unsigned int x2 = ceil(xf); + unsigned int x1 = static_cast<unsigned int>(floor(xf)); + unsigned int x2 = static_cast<unsigned int>(ceil(xf)); if (x2 >= this->dataPtr->side) x2 = this->dataPtr->side - 1; double dx = xf - x1; @@ -299,8 +374,8 @@ void Dem::FillHeightMap(int _subSampling, unsigned int _vertSize, double px4 = this->dataPtr->demData[y2 * this->dataPtr->side + x2]; float h2 = (px3 - ((px3 - px4) * dx)); - float h = (h1 - ((h1 - h2) * dy) - std::max(0.0f, - this->MinElevation())) * _scale.Z(); + float h = this->dataPtr->minElevation + + (h1 - ((h1 - h2) * dy) - this->dataPtr->minElevation) * _scale.Z(); // Invert pixel definition so 1=ground, 0=full height, // if the terrain size has a negative z component @@ -308,9 +383,9 @@ void Dem::FillHeightMap(int _subSampling, unsigned int _vertSize, if (_size.Z() < 0) h *= -1; - // Convert to 0 if a NODATA value is found - if (_size.Z() >= 0 && h < 0) - h = 0; + // Convert to minElevation if a NODATA value is found + if (_size.Z() >= 0 && h < this->dataPtr->minElevation) + h = this->dataPtr->minElevation; // Store the height for future use if (!_flipY) @@ -326,14 +401,14 @@ int Dem::LoadData() { unsigned int destWidth; unsigned int destHeight; - unsigned int nXSize = this->dataPtr->dataSet->RasterXSize(); - unsigned int nYSize = this->dataPtr->dataSet->RasterYSize(); + unsigned int nXSize = this->dataPtr->dataSet->GetRasterXSize(); + unsigned int nYSize = this->dataPtr->dataSet->GetRasterYSize(); float ratio; std::vector<float> buffer; if (nXSize == 0 || nYSize == 0) { - gzerr << "Illegal size loading a DEM file (" << nXSize << "," + ignerr << "Illegal size loading a DEM file (" << nXSize << "," << nYSize << ")\n"; return -1; } @@ -344,14 +419,16 @@ int Dem::LoadData() ratio = static_cast<float>(nXSize) / static_cast<float>(nYSize); destWidth = this->dataPtr->side; // The decimal part is discarted for interpret the result as pixels - destHeight = static_cast<float>(destWidth) / static_cast<float>(ratio); + float h = static_cast<float>(destWidth) / static_cast<float>(ratio); + destHeight = static_cast<unsigned int>(h); } else { ratio = static_cast<float>(nYSize) / static_cast<float>(nXSize); destHeight = this->dataPtr->side; // The decimal part is discarted for interpret the result as pixels - destWidth = static_cast<float>(destHeight) / static_cast<float>(ratio); + float w = static_cast<float>(destHeight) / static_cast<float>(ratio); + destWidth = static_cast<unsigned int>(w); } // Read the whole raster data and convert it to a GDT_Float32 array. @@ -360,7 +437,7 @@ int Dem::LoadData() if (this->dataPtr->band->RasterIO(GF_Read, 0, 0, nXSize, nYSize, &buffer[0], destWidth, destHeight, GDT_Float32, 0, 0) != CE_None) { - gzerr << "Failure calling RasterIO while loading a DEM file\n"; + ignerr << "Failure calling RasterIO while loading a DEM file\n"; return -1; } @@ -378,4 +455,8 @@ int Dem::LoadData() return 0; } -#endif +////////////////////////////////////////////////// +std::string Dem::Filename() const +{ + return this->dataPtr->filename; +} diff --git a/geospatial/src/Dem_TEST.cc b/geospatial/src/Dem_TEST.cc new file mode 100644 index 000000000..a62fa1e90 --- /dev/null +++ b/geospatial/src/Dem_TEST.cc @@ -0,0 +1,222 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ + +#include <gtest/gtest.h> +#include <limits> +#include <ignition/math/Angle.hh> +#include <ignition/math/Vector3.hh> + +#include "ignition/common/geospatial/Dem.hh" +#include "test_config.h" + +using namespace ignition; + +class DemTest : public common::testing::AutoLogFixture { }; + +///////////////////////////////////////////////// +TEST_F(DemTest, MissingFile) +{ + common::Dem dem; + EXPECT_NE(dem.Load("/file/shouldn/never/exist.png"), 0); +} + +///////////////////////////////////////////////// +TEST_F(DemTest, NotDem) +{ + common::Dem dem; + const auto path = common::testing::TestFile("CMakeLists.txt"); + EXPECT_NE(dem.Load(path), 0); +} + +///////////////////////////////////////////////// +TEST_F(DemTest, UnsupportedDem) +{ + common::Dem dem; + const auto path = common::testing::TestFile("data", "heightmap_bowl.png"); + EXPECT_NE(dem.Load(path), 0); +} + +///////////////////////////////////////////////// +TEST_F(DemTest, NonSquaredDemPortrait) +{ + common::Dem dem; + const auto path = common::testing::TestFile("data", "dem_portrait.tif"); + EXPECT_EQ(dem.Load(path), 0); +} + +///////////////////////////////////////////////// +TEST_F(DemTest, NonSquaredDemLandscape) +{ + common::Dem dem; + const auto path = common::testing::TestFile("data", "dem_landscape.tif"); + EXPECT_EQ(dem.Load(path), 0); +} + +///////////////////////////////////////////////// +TEST_F(DemTest, SquaredDem) +{ + common::Dem dem; + const auto path = common::testing::TestFile("data", "dem_squared.tif"); + EXPECT_EQ(dem.Load(path), 0); +} + +///////////////////////////////////////////////// +TEST_F(DemTest, BasicAPI) +{ + common::Dem dem; + const auto path = common::testing::TestFile("data", "dem_squared.tif"); + EXPECT_EQ(dem.Load(path), 0); + + // Check filename + EXPECT_EQ(path, dem.Filename()); + + // Check the heights and widths + EXPECT_EQ(129, static_cast<int>(dem.Height())); + EXPECT_EQ(129, static_cast<int>(dem.Width())); + EXPECT_FLOAT_EQ(3984.4849f, dem.WorldHeight()); + EXPECT_FLOAT_EQ(3139.7456f, dem.WorldWidth()); + EXPECT_FLOAT_EQ(65.3583f, dem.MinElevation()); + EXPECT_FLOAT_EQ(318.441f, dem.MaxElevation()); + + // Check Elevation() + unsigned int width = dem.Width(); + unsigned int height = dem.Height(); + EXPECT_FLOAT_EQ(215.82324f, dem.Elevation(0, 0)); + EXPECT_FLOAT_EQ(216.04961f, dem.Elevation(width - 1, 0)); + EXPECT_FLOAT_EQ(142.2274f, dem.Elevation(0, height - 1)); + EXPECT_FLOAT_EQ(209.14784f, dem.Elevation(width - 1, height - 1)); + + // Illegal coordinates + double inf = std::numeric_limits<double>::infinity(); + EXPECT_DOUBLE_EQ(inf, dem.Elevation(0, height)); + EXPECT_DOUBLE_EQ(inf, dem.Elevation(width, 0)); + EXPECT_DOUBLE_EQ(inf, dem.Elevation(width, height)); + + // Check GeoReferenceOrigin() + ignition::math::Angle latitude, longitude; + EXPECT_TRUE(dem.GeoReferenceOrigin(latitude, longitude)); + EXPECT_FLOAT_EQ(38.001667f, latitude.Degree()); + EXPECT_FLOAT_EQ(-122.22278f, longitude.Degree()); +} + +///////////////////////////////////////////////// +TEST_F(DemTest, FillHeightmap) +{ + common::Dem dem; + const auto path = common::testing::TestFile("data", "dem_squared.tif"); + EXPECT_EQ(dem.Load(path), 0); + + // Use FillHeightMap() to retrieve a vector<float> after some transformations + int subsampling; + unsigned vertSize; + ignition::math::Vector3d size; + ignition::math::Vector3d scale; + bool flipY; + std::vector<float> elevations; + + subsampling = 2; + vertSize = (dem.Width() * subsampling) - 1; + size.X(dem.WorldWidth()); + size.Y(dem.WorldHeight()); + size.Z(dem.MaxElevation() - dem.MinElevation()); + scale.X(size.X() / vertSize); + scale.Y(size.Y() / vertSize); + + if (ignition::math::equal(dem.MaxElevation(), 0.0f)) + scale.Z(fabs(size.Z())); + else + scale.Z(fabs(size.Z()) / dem.MaxElevation()); + flipY = false; + + dem.FillHeightMap(subsampling, vertSize, size, scale, flipY, elevations); + + // Check the size of the returned vector + EXPECT_EQ(vertSize * vertSize, elevations.size()); + + // Check the elevation of some control points + EXPECT_FLOAT_EQ(184.94113f, elevations.at(0)); + EXPECT_FLOAT_EQ(179.63583f, elevations.at(elevations.size() - 1)); + EXPECT_FLOAT_EQ(213.42966f, elevations.at(elevations.size() / 2)); +} + +///////////////////////////////////////////////// +TEST_F(DemTest, UnfinishedDem) +{ + common::Dem dem; + auto path = common::testing::TestFile("data", "dem_unfinished.tif"); + EXPECT_EQ(dem.Load(path), 0); + + // Check that the min and max elevations are valid for an unfinished + // and unfilled dem. + EXPECT_EQ(33, static_cast<int>(dem.Height())); + EXPECT_EQ(33, static_cast<int>(dem.Width())); + EXPECT_FLOAT_EQ(111287.59f, dem.WorldHeight()); + EXPECT_FLOAT_EQ(88878.297f, dem.WorldWidth()); + // gdal reports min elevation as -32768 but this is treated as a nodata + // by our dem class and ignored when computing the min elevation + EXPECT_FLOAT_EQ(-10.0f, dem.MinElevation()); + EXPECT_FLOAT_EQ(1909.0f, dem.MaxElevation()); + + // test another dem file with multiple nodata values + common::Dem demNoData; + + path = common::testing::TestFile("data", "dem_nodata.dem"); + EXPECT_EQ(demNoData.Load(path), 0); + + // Check that the min and max elevations are valid for a dem with multiple + // nodata values + EXPECT_EQ(65, static_cast<int>(demNoData.Height())); + EXPECT_EQ(65, static_cast<int>(demNoData.Width())); + + // relaxed tolerances for macOS & windows + EXPECT_NEAR(7499.8281, demNoData.WorldHeight(), 0.1); + EXPECT_NEAR(14150.225, demNoData.WorldWidth(), 0.1); + + // gdal reports min elevation as -32767 but this is treated as a nodata + // by our dem class and ignored when computing the min elevation + EXPECT_FLOAT_EQ(682.0f, demNoData.MinElevation()); + EXPECT_FLOAT_EQ(2932.0f, demNoData.MaxElevation()); +} + +///////////////////////////////////////////////// +TEST_F(DemTest, NonEarthDem) +{ + // moon + common::Dem dem; + auto path = common::testing::TestFile("data", "dem_moon.tif"); + EXPECT_EQ(dem.Load(path), 0); + + EXPECT_EQ(33, static_cast<int>(dem.Height())); + EXPECT_EQ(33, static_cast<int>(dem.Width())); + EXPECT_FLOAT_EQ(-212.29616f, dem.MinElevation()); + EXPECT_FLOAT_EQ(-205.44009f, dem.MaxElevation()); + + // unable to determne world width/height of non earth DEM + EXPECT_FLOAT_EQ(-1, dem.WorldHeight()); + EXPECT_FLOAT_EQ(-1, dem.WorldWidth()); + + // unable to get coordinates in WGS84 + ignition::math::Angle latitude, longitude; + EXPECT_FALSE(dem.GeoReferenceOrigin(latitude, longitude)); +} + +///////////////////////////////////////////////// +int main(int argc, char **argv) +{ + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/graphics/src/ImageHeightmap.cc b/geospatial/src/ImageHeightmap.cc similarity index 97% rename from graphics/src/ImageHeightmap.cc rename to geospatial/src/ImageHeightmap.cc index 6c8630835..3dc30cf30 100644 --- a/graphics/src/ImageHeightmap.cc +++ b/geospatial/src/ImageHeightmap.cc @@ -15,7 +15,7 @@ * */ #include "ignition/common/Console.hh" -#include "ignition/common/ImageHeightmap.hh" +#include "ignition/common/geospatial/ImageHeightmap.hh" using namespace ignition; using namespace common; @@ -41,7 +41,7 @@ int ImageHeightmap::Load(const std::string &_filename) void ImageHeightmap::FillHeightMap(int _subSampling, unsigned int _vertSize, const ignition::math::Vector3d &_size, const ignition::math::Vector3d &_scale, bool _flipY, - std::vector<float> &_heights) + std::vector<float> &_heights) const { // Resize the vector to match the size of the vertices. _heights.resize(_vertSize * _vertSize); diff --git a/graphics/src/ImageHeightmap_TEST.cc b/geospatial/src/ImageHeightmap_TEST.cc similarity index 95% rename from graphics/src/ImageHeightmap_TEST.cc rename to geospatial/src/ImageHeightmap_TEST.cc index b40880879..3fc52788a 100644 --- a/graphics/src/ImageHeightmap_TEST.cc +++ b/geospatial/src/ImageHeightmap_TEST.cc @@ -16,7 +16,7 @@ */ #include <gtest/gtest.h> -#include "ignition/common/ImageHeightmap.hh" +#include "ignition/common/geospatial/ImageHeightmap.hh" #include "test_config.h" #define ELEVATION_TOL 1e-8 @@ -28,7 +28,7 @@ class ImageHeightmapTest : public common::testing::AutoLogFixture { }; class DemTest : public common::testing::AutoLogFixture { }; ///////////////////////////////////////////////// -TEST_F(DemTest, MisingFile) +TEST_F(DemTest, MissingFile) { common::ImageHeightmap img; EXPECT_EQ(-1, img.Load("/file/shouldn/never/exist.png")); @@ -51,6 +51,9 @@ TEST_F(ImageHeightmapTest, BasicAPI) std::cout << "PATH[" << path << "]\n"; EXPECT_EQ(0, img.Load(path)); + // Check filename + EXPECT_EQ(path, img.Filename()); + // Check the heights and widths EXPECT_EQ(129, static_cast<int>(img.Height())); EXPECT_EQ(129, static_cast<int>(img.Width())); diff --git a/graphics/src/Dem_TEST.cc b/graphics/src/Dem_TEST.cc deleted file mode 100644 index bc39e7248..000000000 --- a/graphics/src/Dem_TEST.cc +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (C) 2016 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * -*/ - -#include <gtest/gtest.h> -#include <ignition/math/Angle.hh> -#include <ignition/math/Vector3.hh> - -#include "ignition/common/Dem.hh" -#include "test_config.h" - -using namespace ignition; - -class DemTest : public common::testing::AutoLogFixture { }; - -#ifdef HAVE_GDAL - -///////////////////////////////////////////////// -TEST_F(DemTest, MisingFile) -{ - common::Dem dem; - EXPECT_NE(dem.Load("/file/shouldn/never/exist.png"), 0); -} - -///////////////////////////////////////////////// -TEST_F(DemTest, NotDem) -{ - common::Dem dem; - std::string path; - - path = "file://media/materials/scripts/CMakeLists.txt"; - EXPECT_NE(dem.Load(path), 0); -} - -///////////////////////////////////////////////// -TEST_F(DemTest, UnsupportedDem) -{ - common::Dem dem; - std::string path; - - path = "file://media/materials/textures/wood.jpg"; - EXPECT_NE(dem.Load(path), 0); -} - -///////////////////////////////////////////////// -TEST_F(DemTest, NonSquaredDemPortrait) -{ - common::Dem dem; - const auto path = common::testing::TestFile("data", "dem_portrait.tif"); - EXPECT_EQ(dem.Load(path), 0); -} - -///////////////////////////////////////////////// -TEST_F(DemTest, NonSquaredDemLandscape) -{ - common::Dem dem; - const auto path = common::testing::TestFile("data", "dem_landscape.tif"); - EXPECT_EQ(dem.Load(path), 0); -} - -///////////////////////////////////////////////// -TEST_F(DemTest, SquaredDem) -{ - common::Dem dem; - const auto path = common::testing::TestFile("data", "dem_squared.tif"); - EXPECT_EQ(dem.Load(path), 0); -} - -///////////////////////////////////////////////// -TEST_F(DemTest, BasicAPI) -{ - common::Dem dem; - const auto path = common::testing::TestFile("data", "dem_squared.tif"); - EXPECT_EQ(dem.Load(path), 0); - - // Check the heights and widths - EXPECT_EQ(129, static_cast<int>(dem.GetHeight())); - EXPECT_EQ(129, static_cast<int>(dem.GetWidth())); - EXPECT_FLOAT_EQ(3984.4849, dem.GetWorldHeight()); - EXPECT_FLOAT_EQ(3139.7456, dem.GetWorldWidth()); - EXPECT_FLOAT_EQ(65.3583, dem.GetMinElevation()); - EXPECT_FLOAT_EQ(318.441, dem.GetMaxElevation()); - - // Check GetElevation() - unsigned int width = dem.GetWidth(); - unsigned int height = dem.GetHeight(); - EXPECT_FLOAT_EQ(215.82324, dem.GetElevation(0, 0)); - EXPECT_FLOAT_EQ(216.04961, dem.GetElevation(width - 1, 0)); - EXPECT_FLOAT_EQ(142.2274, dem.GetElevation(0, height - 1)); - EXPECT_FLOAT_EQ(209.14784, dem.GetElevation(width - 1, height - 1)); - - // Illegal coordinates - ASSERT_ANY_THROW(dem.GetElevation(0, height)); - ASSERT_ANY_THROW(dem.GetElevation(width, 0)); - ASSERT_ANY_THROW(dem.GetElevation(width, height)); - - // Check GetGeoReferenceOrigin() - ignition::math::Angle latitude, longitude; - dem.GetGeoReferenceOrigin(latitude, longitude); - EXPECT_FLOAT_EQ(38.001667, latitude.Degree()); - EXPECT_FLOAT_EQ(-122.22278, longitude.Degree()); -} - -///////////////////////////////////////////////// -TEST_F(DemTest, FillHeightmap) -{ - common::Dem dem; - const auto path = common::testing::TestFile("data", "dem_squared.tif"); - EXPECT_EQ(dem.Load(path), 0); - - // Use FillHeightMap() to retrieve a vector<float> after some transformations - int subsampling; - unsigned vertSize; - ignition::math::Vector3d size; - ignition::math::Vector3d scale; - bool flipY; - std::vector<float> elevations; - - subsampling = 2; - vertSize = (dem.GetWidth() * subsampling) - 1; - size.X(dem.GetWorldWidth()); - size.Y(dem.GetWorldHeight()); - size.Z(dem.GetMaxElevation() - dem.GetMinElevation()); - scale.X(size.X() / vertSize); - scale.Y(size.Y() / vertSize); - - if (ignition::math::equal(dem.GetMaxElevation(), 0.0f)) - scale.Z(fabs(size.Z())); - else - scale.Z(fabs(size.Z()) / dem.GetMaxElevation()); - flipY = false; - - dem.FillHeightMap(subsampling, vertSize, size, scale, flipY, elevations); - - // Check the size of the returned vector - EXPECT_EQ(vertSize * vertSize, elevations.size()); - - // Check the elevation of some control points - EXPECT_FLOAT_EQ(119.58285, elevations.at(0)); - EXPECT_FLOAT_EQ(114.27753, elevations.at(elevations.size() - 1)); - EXPECT_FLOAT_EQ(148.07137, elevations.at(elevations.size() / 2)); -} -#endif - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/test/data/dem_landscape.tif b/test/data/dem_landscape.tif new file mode 100644 index 0000000000000000000000000000000000000000..b8602372826264dc6772da19b88b719d10975533 GIT binary patch literal 100487 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 literal 0 HcmV?d00001 diff --git a/test/data/dem_moon.tif b/test/data/dem_moon.tif new file mode 100644 index 0000000000000000000000000000000000000000..955f14da88227b70ae82a61bcf6ddbaee6607989 GIT binary patch literal 4987 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 F{TC%IGC2SM literal 0 HcmV?d00001 diff --git a/test/data/dem_nodata.dem b/test/data/dem_nodata.dem new file mode 100644 index 0000000000000000000000000000000000000000..60b04bf4c2edb74b203dbeda0e0d11842d60ae0e GIT binary patch literal 9441 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 literal 0 HcmV?d00001 diff --git a/test/data/dem_portrait.tif b/test/data/dem_portrait.tif new file mode 100644 index 0000000000000000000000000000000000000000..bc8034221535fcc4c2853b02dfd5b427c066a633 GIT binary patch literal 100487 zcmd>{30#idy8oZjK!rl3l0;<=MdMS?TGy{KlT<X46p}*8tWl*&0}&#XP*H|N^FU<E zkXdA&XPJlpqqFVv?)|=d?{}Z``R{Yie(%rcX<hfa*Yn)>y}s*O!?mup8ac9`pshe4 zP!tFx+6W}X(sJ=f;!pB1u`Kx~xrbP8^C$U7I+<U{N)l3n_N{3J0_9)CtNck8|GGf+ zPianz<!--7Gx1My8*zMxa0S7S&`5lPum}Z#j94BgmJ6cV2zrR+6=JzCN<kngmMg^a zo+wFynpi$9mVX>f>!15%bQB04h`-xgTOgRh1cL2T#OEu-=bOdn<>K?};`7hqa}5c> z3^NJAb|(qJgGCYoZQIOuBj$#P1b0Ubb%_fUwch;i{OM8=I!>d?y=u<PHt9wJi0||t zheT_R%L)Wi;yf3>l{kyUq4<HsNF)Ti6eZg3iRvm&D${zN(5qeB!l)nD<y%96V8_QN zYc#XxGjS4@V?UV>$HXb){O1SGoWkdL&7bAz;WuT7sfpn-fzjLsIyWklX1&p>daNb1 zc)4P;#eY1)fBkRa)8&GPo6{*G*aH`CD#Bw#9O>N{hjv%?LwEE_j9Aeg@lmU(XFoY? zH6DgRhu5Me>lltr--<Q~RWxayGh(XMVC*^#-XphQ(w)6n^YI)$tv-&m-8SMz^>|!r z+>Ni}yW{eZwpcc%o*s|t1fMVFNDp+T*E<H&$pU4p%KygqMc4DCL$<T3`VubOxt^bB z7zW*T-B9(pA9hNdBjuAGRIz9nO=PmPac6^wuZ|Pr{e8!}&_=#Lm2=(hPF#D)TXs|R zBr`Vo%EmvL#1$nu4Su$ldJgxbH$6Xb+lBr#cUv84Y$>4?0am0w^Z*I$q)`9N33F=t z<JMX!M72FkXWwe$O_3UeH}xPDGZ@1!o+m{?CJm9SqY1_`kTI|39z*6(p^-W9wPxfT zvWqJ?_o5ZK#q{>(SiUJegI$+<%sdqe*{RnW{7J3{U)6Uf-+cEue-t^KGBmYl#IQ}g z_U1umnZAw6<To<G(-}flbEA^q_tw9iDynas<$&EwEl=&gNfFo1@k@fva9<?EkSV!1 zbfy$bN+h5jv5!(y8t8Gj33`|YpsxEq=q2T$P|^WaLcrU*g=90nlKt8daGM+oP2C6# zQ7u7fT?5kg<st4?E^N$JVwUZ69Nm&i>jp5I(f0sNJ+h4kC_bhcJJr#wsf~(E9de*a zJVSmTcRv(Gt4plVXQl<h9kv46TDbk>37NfApqBO;qWELuSg(Sh-_88T+q-Sr#_hj; z;Dr<W@EHl8`KnuTyrx=?%EMJC#&INhhOOaCj;WC7qXuRNC;(SFqr-LuxEg1Zsp$dA zTrI>y+flG_X^Xn!sz|MRK@WAb@%f4uW;%x>yvz=o&6>z@i=@{9?NN2-C9nCulBUyq zQivEu4<_}Z#-R~ZG{ll*g?7Ae8d&m>LKYLhl26gv!qo<@;DM(Kxmxr^zIVDDHFdS3 ztJO6Yl2gx@SD#%}X|?pdrDx|SEGQ(=<hN=5bFuSV8aVqf07eosk=WY|4>qjFvK#rZ ztoFf*K|PUaRzNb>_2Jmk2cN&jV)wbjI8r+hUtg=>_-RKhUgU#rRpA)#?1TkXNf>T& z1s6uv!oxQKkDt!PDX&E6%glnsYCD8=UP9K_4CwxA0}?4rraL<pQ(vPLdL8|l!kcs{ z$f24P+fS#9l2_=MerF^eTZ@_du2EIHPSjH3POs$MMeL{!e_x|U|IAxnv3kLVjnk*| z8pFvpU7e;eM*0)h)0U`QQk2c38!h>CHPoL6=B%U2#z$mOevl4DD#ER8Z>$Y$p>=L| zXrZ$v&RY#bSx-;wl$OThDeZCl?GP-F3qg?0TwshAq|^&&b*2>+uSll)Kpkoro=^J~ zHc`@4N4j@*H1*S1MvX^od5T{)Ys}ff{BpOl;ZmG;usY7|j}`H&#+Uew6bbrRtU<bl zGh6wpq*awDC8wFs&J7kyJn=R9XWsj7rG3!6Qsm|^o31aKh4U$4unvuf)cQcYeYXu? z%fhj}xI2c9`$&Et`yy;vB&=T*L+V}yY!gSd>iMn3tI&65C1ftg;MKDROff$Xb>BOX zJDdi+^-HkF^CeB~8V*;pr5MpYkOtU0(5Tbb_$TeX{Fs6yIog~j2MI+gUp9p#j8)+8 zbc?5G7}IFGZDg&!6z1pk5T=|)x|Gi}Y9?9)v`b?Z_R9Qkz0YsOcQ=&g7bQEBs!R-B ze(`~el9Om*-6rZFNFvXm5;FVHLQ$W$l7WRj#U>mi%Vp`bWmN%{cIk!GoentYR!v*4 z%i>=Ca0EAnVX@zQe5mXK!?r_FyLkz$9;F~4Ed&m_qj7eUES`laLB8IMy2aR&N9YSG zpA|s*pWNw<zA{Pm-@+@sdh)R7o9uPKUbfZUn&U|d_d8w9Z*O?T<=e}VR8X&fs!adZ zJO917L-yTEY&%~w>0I=MoMd9*YVC^}rv%8Yiihl(Ol)$Ui?!2wLpq=j3S2Z`eR?Ba zcQ}gTmVFpGzz8pz3AMwvqBiRR_9(x>xq>%f?VC_l6N?%9CP9n(BY*l?de^=U?!S(v zv3+x>$yyN+1M|3PpCq18IE6a;uBNYVbNQF6`^Zo*jB4t0c)#~qbU#s!><@IH-jUnM zV#6vHyKhUGt6^7Rr#-3_fA5`sUi-4EN#uWE35!j?!tR*Y^JZ0F`u5U}1eM$9vuq?; z80@82hto;cZ#8vGl|;&WZP<kMp!RW!B$Kv=iV7dmqi$U=ZDJms=ilkR&=675Uf3Tn z3%%ZiB3mgCPjkYs;dUB^-w%ONcmU>h{ze<}wD3`DDk;c#(fH5L>D}Q>>cpo~!@B-7 zvqLiPf9L^|xG&G0V|BSku?H_y-o~AB&vKc5UwQwkt~5-u-~U(UKl4W*2odo1Qg}D9 z3v%-o!}L%#+Su(z*`rl>x>O$Rk3FZzCL?HXb%CA3YFvMC9dV<RTXjA0%>>*n&BXHW zg}5lJMzLxh%*UL>LHhuR>pJ8=(?wQ(0oBb~LjFR33UM0<i*+NZ#ww6!mhYy?l|GcR za54{e@#EEf->@51?|6BFCmq<fo+Z7%!<TxFW&in{zfbZV*eKe)`jcpR^fcB~+r;9! z4dUnb%G1*B(Pa8MofL-dqqgTZ)A7?ndhDA;(Zw0md-*GR*I<u+DqSF4nM|)Ua%i$u zCRMJwN%N1Lr#!`eFic#8rRP=A=_G?mav<zuy`U48f?3MCcp~2(jR)*tHRv5}(UHRa zOC>bH;WXXQK1@~TBFID8go2gYQ`)TVeCAzcZk^hjN1xH)ZG@Zo(pRVXkcw}7+YNn6 z8*KV7VlEI&t@ENc9eUvE3l#)jUWd*H^6_ozK5QRsi`k9>Y%A)58wm!uSu+oBBeO9j zv>JPNMkCSA5o^2ZplE9_!sJ}AW^F7QJ=S5;=0e1baD!TjEy%(i&$f3&DL9;?S7GY) zlQii-9N!!wq7_TeP(twxTB@^<ZHrT8_v=KW6ouD3Z0~u?9Z$YiNV_MN3tU%~UpjK| zANJky(=Uq-c2{PmO`Tayw^7Wqyn-b?li?1^<9U$6YF?;jNoA%JX?{QgwKeEKgZ=uG zp3s<H>+YsY-MXP@zAyC98+@NMHdV#aBJEPjoze!nR6zY6AEuHoidc7NA`G4{z$0@v zl;0kV(TTI*erzaaWy|7)v?d}=uTt-qd+FE>z~AsPReU)@$Icz0-B$9HyYD97G2<#r z9-zrH5BKLYx9Ia%52kR%@(WzfUV^%-Xi|qA^e<yRukR?)_!9?6R&bpzYT2Rq$v&92 z+k>i?tFgJF2V%<<aX#A$DrtsrdA1c_-FBeH>O5ZCXSeG6t2RBbGcFNJ_SfQC%yx9O zUI3q}OnfXEi@po&u+vf-yM-;3J}nZ<YF5$JiS4MUOrHndn@Tgr?xWtZ@%)OU67!Kd zQQ@)XuqY(-j_Bj@C#{2N+ud>%j}9&RRXe`K@y4&>Uf(>>%3W{TN+un5lnuGm%n~G= zxwmZ$PaU_NE3#%j!AXuxd$y;>l7VDAM45s-Y-wbI9Nz71hliE>$!gdUk}hqe`k0}Z zV#lyKtvepXbj66eTeP{hBYKY;42gBCvD{${f^YjEInE2Px=HO5OX<;={iGwAO>0}8 zP*%eiQrYNE`=;!rF~M;(PPm>+9&5v|^f2KEBTRXx9%g)bQZWBephk0Uf8>cnbm)`H zzm9ompC{$%7Zotst``>Ep9t6Ve5`1bjy%7;STscvV`J{q4&NGD)aNU`dF6+4n*vNr zdW>R<#;C$5#2G81^zC{$EI5H8=~6U3aRvn>K_IY(=-fgK+wO_zs~ObcoElEWm+?Sd z2O2r1gcZcvQ~y5uc%-u*-L*MG0|)!_4Knvdu?EUaC?iv;e0IIr->cCJ@?&Yl(4;@t z|4K&JTbXBMhp|rCmsq!N`rJ$_oTs?u@aX$}Xv3#wx^edr$(=q+z6RH+df!7*S9hhH zt<$N8FoZ~ZAS#?XArO6V=!+x{E%3no2|h4xQNqH^C$w#uDa-~hMTlf9&YnwwSwsSq zFZv^jiHCW{PB_`63+$8IflLljK(}a`dE1ZrUK>cOb^DX@o{v1`i!wjl!}iY~$phY8 z53zh9OQ-j`jMj{D|Ci}`jVvl^guO}Qp)wvx$-``FBCPKPz;$UF?5^%WV6_6yAM&Qz zr5zCQ)&W!$iVpVsk#y-9Hh<X<Q9E}e95;r$b{!fwPJ{8fIpVS3bQC}I7jt((;IVL2 z@BK>N-i~A(a)#~<l*IZyr)lccg^V9eU|DaT^ZTcF(5^xC)Z=m#?`zwQIThBh<3=9l ze~-B^^NMKkxxo}uUfIh12XpKDo7nDlW^CDuXYA4O3H);B4P0wpCD*s=Lc3>pP^D%Q zrHI>Jsc}O<+lIlsSsKv?#?r35BUBdrfE=IAL(!t8*r<4k6#8|?``f9An>-2qx3z(? zQG3j6Hy$0mM?z-NXv}|-jLdN!nB|;-YioL8)=LMNZs`Xd!=8u|<x<827YbZ6fCK}p z`MkBO`Pd@j_Lsc*rqC7KsU?Ij+`pKgN?FH0Z}T8=Ye({zqW@*gnOmFk5woJG_H!gn z>vx}YrOffzZy_dDOvjw84RD*{iy*a3id0Fan+1}X9qfpwsnL*WK8!6#-(xq5a5mW< zi>EQjS|+yYcjnp*4BoN7mAUPJxfr-98y^eRaX>sK9?&R3ihd$a-%g9VO_O7qgL3%x zgc{yuv=s5Hu3SN}Ey-OQ&N3=5{@r%G@%eRjE@G{CJlUP@_VH}x-fm(Ck@Ot}wom6d z8!G3(b)7cw(8SZc>2OEt9o(N%b&{ypG$mYl)*1JgPRF4hgCI;iO-bQCWO9E1ob`mr z7hmrj|B;f?+9CHuI082sW8NnVIJu34tgbqwCr!d7Ip9`)7Gm{FAm6V7osPu9Ja{r5 zZXJnid1X}Z?12wz3rWv&2p!>)q!1s+FD3Z#n{yZQJnLA#)NC!+|C+!nuWaI>6RNmv z%pU5m)$%W6{zI3{52jRF&N)`K-$oYWBWL4Scp`!?m}0qF7_1~#;kx;38lz%G#`<fh zLgp&1^pC^0%`tf6QVh$`yAU7^4cc>YMs^d5swbe?I2A{b4?VL@s1XF=QGPJ8c5Z>| z=r2^dxf=?eE~n=mGx@CrrmSH{Fq_qh*nS%$mUercsA+j0D%jVKW<%#6=7Hq91MHst zL)sX1lPBh6v8#0f%we4i+yCksn>KP3uWek*i!$oCbm$BI;J`b6dr|>))!a%7_Y6?k zITE?vX&8Kw<6ZtK3eK&j!+{;qZ+9&<>~h6^9}9%s55<ayQLr58fRWv@uw{}P>cfn1 z@m2zw#%#j!tGRfQaRQ5;?!yJ2bQH72;yzC&I4`cC>2K<2(c7i8=vsSvkW<6`#r1fN zMhef`oz9ESXY(wVY(A)|kWY0v&WDdPr2GTj#5(e?J4|&7EVR$=DSsopPMt{;Nip^i zn-|em%-el7gNnKu>cews!=3R|q4$)0?!Bj1_3l^_<&6VM=TSc)6Mmj6&|l6P!=K0E zMfDC?>YYXW%iCDrHVXq?N<nvzLH2th<VTN#M1}<7)!V^UPDrW!H?#dah%HopCVF|~ zv*>O>CyN`?<XQH$U<*g{ofiKn7cTRM<lsJ@PFSZh-msi`6(%#Ac6Zrg4Re0kJd8JY z%;!T_*7F$_A9(tteA=^L7t#kRXqstXJe(a2-ErbFZK;n_zSX2&P)!Sj<B;X$f=Nq5 zp%ah-kMoI`V>}<##>psGT?#paZJ2yH6AN!|MpgC}%wAQ4aU=3kc)tqDJt7hBZ3O!f zU63bpn7#}>Nlng@)Nbw(p4V?JzvGz66IAkeKeu9DHK>%^zCX>M-nh*}WWI4{>C%5# z#{W@X{8z5mEqYw36uYXb`m--hnQVdW^E6>|G=*lRh0t88qchX8dESj@yz|`xDt@(_ z475UUo{RM$rwNy@HY40>CW6|YfxXOO>>T+R+pbGnMU@DwEbKa1Ih1_B-M!5SyBdbH ziE$Klu$*4M@T8NhiCJ#BCt9JZ#59v9vDfn@%6(ot34ibNH+x0%Go$m^nF|T*bnz1Q zCMTGU>2!m|Wp(CbpV{+A9<kix%vPRPS<Y=E11Zf@9SI?}_}u@xxULz5wnvAfP?&-} zPJQu%dG|xo7-VUTD$`)RnmrRugYA(2&>DfGCd0tp7Kxujuxa8JL>m;sDQGK_a>7xv zCjoQa>ySFE62q&FaqQqb@@rQ@5^t_jTdqP~YO1;SxUGD*Tp_n!SHqX)9pQ_=-{nrq zxA`zBNqTg!1BLTd|0B$Q=5uqehRQS5VHBv+K%H(5N82(F%zUw%#+gr`kO%T2$0#|` z>M7?ay)2qKCj?^b$z&`V`5yl40^S`xhpXLR<MwnVtMF0<t1H&pR?bI^tzM|<T3LQq zvO2Ih8N+W|pq=3zveb;Ai<H1s5BFy6<+h7<vah0UisvmxPLMDA`7FODths!X35K6z zPv(WPq>K9O!@+Q-rPavv#~N_AHJ<$ThzOpreka#cSWLTo?~u8J9fsI@qKAqK`s>DH zYuixV(+O#1eqdiUMUPWLgMtAfpQ#}*(-NGiwSHtWry#e(EHwN2V;p9{L^}Y98p+5u z+JtS6IY_8jhr8aBaICv2;+n2g!F+c*zEzpt#ER!%iZ1ep#mD%kLD%?;{a3k}+6P_} z-G;6Qb)ctxv}uk1zpfAWTX|Z0G@>j+YhXp?=O`+)c}nt2I-~x98f@;q<P)?vie_bw z60LY0CR)3?g*<O}1|K*Xhmvo=&_G}%Cn>P{sHtit8=+=3Qf-jcR~=aO>8fjWRkx4T z=$p+juJpjtgmxIiLZP7O4d1V;Nx5M<-+D}o<?d?FJnP%DxA$&Vs9$jZo3>U(zpU0e zf5fN+_Vf9TuQT#LQox!YYq6W-7qAG$C?=75mBj`0;1jlv=8~qa;`Xzids`Y(%R&Pz zZ}x|8+CT&^^+e^QE%-7q9{ZPD;s^74z3b`JEFIKGDZ*cGQY-Im$<D1|k3$CV)G&ik z#R_`IVlmEo1=_n+VobX#T!`{VU4k8Ar8(MEpQhrcvuVvT3%Y(umB!!hLL0*$@cN+V z+~4yXZ@k=r%pY{6Hg9z($ZsgcYR3ML>iN%nOsF_mxxj@;<H|02SA2r>3x@J4$q?4h zdAq14-b3_wgDmM8v`5mNh1fUeAXXhb2aCu~R&6e*Sf#A&XBBSV$0|Nu*(&vcz$)4F zDyHwu$6k3~#6`U)>x9vGGXDyl!BgrhcZ+&`D5q`Z-$iFdvV6qdCRWoUjJt9<%b(Bk zd%|AMWxOCfm@OM4&-TVHVE%sdSz$ym3tXhm2U>h%Cp?09;LEo>xxX!0Y#IdV+F+=R zF~mltaJbLifRMJSIFZz)m3!ZLwbUh1sg<+NKs}^SorBCS^RZer9=75!nv<U!o~;VO zj<94nYVJcz>I6JJH5t3UjfP907Pe~jL}<)O%21t7*7>@$x{VPX81|hj*_zPOVFH@e zqdR?e96$>%nbG+&8+wsE|9=JZ2$POghkCe@ZCrnnpEjRXjax>UdzWyHTv?W5*(CD3 zvRbs1ZJ<$Y24K;K6XgGK52}aBTJ`W#w3_CuZsij%VYU0vO?Vy4N7tS^ku>rdeP2{T zU81_e$2*5+cN0K)-Ud=1_Dwvm_K=j`8uEQcyJ*p?7V@_`NZ&NuvdIgc|J`x=&$3Wr zHILo8ETE|c-mNyeuIj4n$F&LDrm(_|xorJ|NOt{b8``5#%#9;#DCl(q6(2M}hKdJj z7g=MZ?|fvw%E7W6AvCm9Te*7%4#vhH0q$I~729FlVSFeE0|T5fIBgX^=&!}G<}_Gu zPQ$U$acHqi!^e~{@bDAco>(Vzs_TfG@!cVL{R1u2@uH_{Vw<|M0(nN-l2+_YTA*h@ z{iGRnd^4Wj=DX3fbBq30Fdv$%S+OQ#0ImBriQ)~dX?@dd>i)=va_igDbDI#+vAnaQ znYyz?-!*PCj}g59%e|;Nehe{r-K^9e$y@C^CuL>#r~q1z6A*kxfS7qg%#G2+`;Hsv zLF{AxxGaep2DHHjKRy0H&4B#A%_g-WtLTvRMH2P<MqVZ<ET*x`@9NK;JCwu>8Yf$> zou1js`Uh`Wr!Ie%zZq*VVO}MRPIKVZ;oo`l^F&JOE)PSWDL6aB4mvgq(S<ESp0gu9 zZBuGxUS-%wXNF&*gR0%2*Jy{e4+)m818_QPCf3vi;ho1^R68xkjgomNT;`6duJM?g zHyh)8l@Ru_iP-r5*eI=z&YKTX+=9_0p{PTJ%~rI)RotGXZ=p86;WS8MF&S<RrANmj z{#P(>x#3rCHbb7uW^@$Kk4>P{Prc~#78`QWFA$l$D5*HwCcR?f>C={vMLH}otcb3M zz9tom6g&;R4V_cZk)M1U$@QC1aNs&Eke5bCVhDz2jKG8GuSmWmf~MyM^Ai$Rd5n`M z+xc0QcdkD|SsQA3bM6T~Gi@m~zrDwGzH9zn8|)9ZzvuAKz9iJy=E1+o58->3`}4u0 zWN2C2%T!x92=7xPVA@4IFAi_GiRT-%F4<#ghz3-;2=MXcW!fm7JG;Di0#=L|h^R?^ zSnN0#Z6d|?D#tOf4inpQN;*Q-%mB%CN?6=E1hY#QLfx)`5@$Eim@b1*xcMX1sajBN ztqwVj7W+nAnn-E;^XSs7b_jeZi)qqlY52hZ*?#*k^KjDrri%AdUQ{|d74!Br_SA7& zeZ|TyIR^^eRvM|hxf{<N`>C{dfJeFAes^|Z<#s-1-XN%stc37X7Mv=Z(IOttgsoTr zX`v$a3lCB1l4z`zeM-eyVWc;16lJ8!umTn0GiPsL&O!M+P4}TF<w6l3yv~REo;XD1 zqmr0+4-bpxj18r~e6D{aD^C8%ewoJR;bwN|af8V7dlG9{%X#IaTfE(fcxty!1x8)x zf$dC%v}FJq*5>2M^vy8UOF+~p5pu4!$AGd&<X3A1tr633H6RRUT9(2xWC`L_IZk}i zfk(L~?2Dyv;cOQmUk5{<J|ztOK-=A~lVagT%I=>@37$68$={9M57npJ!;5LM#7au4 zRfScG4s7=JgZtU-|10$Tmw9I0*{9M#;9a@&h5pcA#{ZD78fPBx9^O-U^?4;5eX<L( zPEJ8ob|x-lZh_C>Ol-a5fa6RLUmiNqTL(q#)tro~?O9|#eJ9tqH(|3|5-ck|a8}*6 z7riU%%EB|l%j}<=<g9!Zy+2t;bF4d4<itb&RDbTTpYg}}?%qc&C+~^m4?4N<uG1QM z<_%XGU$uvP-<e@VODY-%CZh4nN?hFX5J9=62)P^y`|L$vgPW-#MG=YjMqz_!7;cOp zcq^O1%ts4n2EHSkjLGo-Bm=9cYou|ll15zELg%N-qiRDQNnUTHn%66c2S7ZJZb09I zLa1!;TpDLtOvWh!1Qki4$7}K2#Dg~fQajvl<<DQo-S5xK_G<F-Esiz6>7SMSM%hg1 zi=xHw&z&J0HXhX%BJtGO8RNHahl18{ROsI(f$Rse$=yi`uidfyd0%|AK1TU-){sl( zXOZ3@O_tNskN4YiMC7HJD?B&ilhF2I2!Hmff*y+f&X`Ezzm+F`#~+Ehr;lXMuI8}q zG?IHolyhxQBYG5-LvOE3L(6m)mfb3ZOxYG3xseBt1@|%X@Gg9uy9#S>cg4%t&y-Lx z8w(xA!R%Z(^aeS><4}8a9;F7Wg?DL}@Cfx@wV&pDXVT0YH>q#_c6xsyoJ64usQ&XP z>aSoyqg<_M*tTd&eYA!?emp=b-wu(cWdk|R7=Wq*%m3E<{WY(D<+)6-IX@h)jJp9} z=slLeTxJ~F`p&`1tRoaL?g=m2^qG|A49A_5%c!S#K5to3IC*&75)FITsq|2DEDO%q zW!Y`m@N(yS&L$sRhL(j48blAI3aQ`PE>LcI{i}KN-}`RWwF50GJ9M*@o*lzJUKq$- zALVh&qr<7^hCrIHR8Gft4@HK}R*V{2irpWs;roz>*x1qnDL=8t$EqZJ>^~IV=e4kW zVPBj)Fd6-&Y!M_b+j}y^_K7O7PtnFHa41ng<mn?czP^Uy!=y0U@+#TM&ZBPQW{~{K zXma(np(Seelz23jD*7f;2kRr$qp>@#uhE88q2d2o=9~O`R36^?iq|!Cr^Sxt^tE6Z zGE6p;X@Wcj^-ZViFO<Qe$3uJ29?DtRnK~Yxz%IshV!2;Nu>41c78$1^xn$^oR(nj( zvHi-HC!31=H}&T?tnSl?5o;|M*t-5h8~ksTgL(Hp34btu;;G8J?C!{o?6djmml||a z$%`@;=g=7!DabBzMY&}WtOWa!^70Yt#eM?wy<cLXL=~=|3c?Dm0j4k*D<7D^=7u-A zyZYc`x;*l3n_#BE89P+&5!1U*l~eTbJ?8?|Ug?YE9dAkSF;48`n?ob>+^D%*Angd2 z#P(@1wDV8_eSWQuCWU^GkTU*1%Y1{fjPUH%!xgLJI#fpHoT`}fY$m1qZ6k%bhiRK& z3T7XhfV08F(7dFSM&FTxy!;+A)w|2@3BL1b_Z^r?`|`hNw~u5h(B&=0>|MoPzNUNI z@*g}yzG$_Ezs2@%#l?Hdupi7HNNs0t2G_8l1u^_!qZA$eHi~=<Ln%q4j3#^=gp{r} zn0g@|sZu9Uu<H$0_uPUjq8$i*xf2Gv4Kcu`6IQOA4_}+n82fSp>bx}Yae6pjdO0IO zdN9(Sxj`vR7um-oF>(J8Of+kvX94MS+I9y`c(#!2Vp7Os<W-7eXDLYG4b3=nlb%m# zi)p39{?9VEQMpz0Gv6!puauO|FD#X+6Tta#7hY#rMLk>A5PLodFU5Y9mk&+E=-p9d zxh<A9tPLOy4F!%dy6j^8-an7Y4Z2+8r%UT9YPqS!^AEA*3nJQ9#tOn|;J)Sm6!!}$ zA6xbONM|8?Hm;N@YR2-0*pK{P!vN~o#hb3_X3?_DN0g?t5Od!bB46y+|6*q)T>YM4 zu6Qhd&te=dj@<*bO+rlRJq;0&rf`l7LNJepp0v0QSV537a6wFr3%-cw=3;fe)6(ZX zQD#3DMIrlX+3U8LYtsdH-#1avp~ckcfiw&cz9kLGcci+#A3Or||Iaf2$@^z$Gf=zy z_4O&#;9pL!@)T$|rc>t-cPtjl<D<JIbd*ZyW%MU%$S$X0PlHHij2!9RHxl`Fp7-ZE z{Q3}s)^SXu!_$hp--^hwOcxGaYb$@=<M)KQb_N!Q-*0Kv^;54tFgwKam4|Qg6N8oM zyVpc2aau*oG%M+b?`W*LWR7EJx1gM^V#3`lj1Srk_iwAvam)gEuQh^WZ6D|lScUNt z$*{N=kKBoFa9%$fp2L7$64ppRtOobWHhADB4-L=paGxgwVb)d3-rWx)PdMVDRswyL z+)4FuCn(@Rqu3u;7B~7X__txc&e!PRp)pMrEqTsWOD}s-GP8vF_$9D^tcN*<TWN^K zZR*}_3haBE<5gR8(BT{Oc1a}->uANoSEsh>yZg!Kt@ZtY@x_%(P0HweQ!S;fcK@fC zTYY#X>^WTB@<;uC`0PrNoQ8P5t^Z!`?JY%L*9;@!f#qb~oK3yQUnbS-Vmtcsy=eZN z2FbtzEbo6Fld>*h!G}bIn)|`AdmKIoPQZfc-e@jNMUBE5JTdXW9t_9)xAWnDeK@4V z{=WAe2VnIP6NKzAL-t1*_>7+l#rd<*;<$|t+osa_{$;eu;TWYF-lZ7-PX9K{f9Rm6 z;x%FH{acpb+z(VdS#Lt-K86_d{W#ewPNH^^mQcJIgN5%+a4B2722OH51Z~?QyZdDt z_%OY-FZWZA<AWqy*{e<{vJ`ZZ{ipiy=XUnDV9UC;GWQ;uCK{VDm=}7diPxCj<R#X9 zDdpHS+E|f9`*zmSoEkl3t0rOM;W@|(IE$o$O!SLAA)Z4j#?ece@OO;EzAaI>={6r1 z2T#Q3HOcVLS^&v=BYyY};`Treli0~9@Uq3|C?~8@U5;~w17TaBi(u{1P_S0Q;rp9N zl(&;!npV=>&FAPzU+I4<=0BM=6+4#ae>_yNbC(A0k4mG%S1<6!XYc5Sp&4#2{6gM+ z&l2Xu!EjCjcC3`7`qh=cYO~*s9$v2OT36~bsQ<67{k+d_g()jO2xS9REk~znSk8X3 znLScf<@MvjxTMK(e#cpf(&I;xR{3(8FTI9F9eYnkLwlg}jCuGTn1uZfmr$j94X;=& z%*6gbcS{l>nP`PGrVcPVZh>T%sSq3>ObQ>4S<&KpKF}Jquco4>&w5mb#=w7e46@?V z#ACq;_|kqhZUi>awc1?zYVw7O+jqkk87cU?z5iclhx@I3{IA4?OBY-8i0i>e*{9Gn zi>XMPXOD1M4fw3qrUl=tDQJB!B-nhT+Vw-wDd|+JpZkC1K7aikz2#~a+j~cg>xmHY zr4T_;zdY8((3&sWna|g2O3<3~LugbxSF-ZTppT=j(Bn5!FqJld<LML_%wLJp-L?2q zy9T*>DVR-3a2Xtl+LOR1IbFosIbgZC9-nJ642_$uuxFDI-mP1LZVQ&6hwM?bUA+|+ z^AoUcNh;WxdD!ZujM(QjbY}K;aucXw%)p-bzDo1oQqO;KsIbwmoYEnOdX#;m!A8Si zAG(%gluq*Ce*ID5yNpyb15k51mQ)u-QQ``nKlkB(e*bTUho1~E>DEX3H|>OpJMIXt z8CkIxeb1Xr@knRsO-XFW(t&&iW%9XaTDVhyHVteUL`HLxDZ}~^NnAEWpDZ)+I=nH^ zAG94>F1v8ZwF;k2L$S#u8n)vTuvtG6pL_>mke3$jz0-r-PJIk8oR5vq$70`^K?swY zfo|i=Fl*^m#GX9~(bgt3Id4F&n?DAnbwi2zaT@2phc>EfV9lI=ulD@67&T7bA*$=; z#fKld!r5$X-tJ5S*EUq43&SL^uZ=OX`_$9KN6Hl=1{D3d|NdLQ^UFA$!y}8|ZBlJ* z^M4utLr#f(E}ZM|QT$sWg7s@ZTaL-|V)|aa`406getK3jxBDhVr&9Fk^KK97>avqw z+l<HgcH=NO!yYH+7UN(+GS+u5!B?|gn0$2<>K-JZ&1XAQomqv4McU{j*9AU#qhLF9 zyV&=6EgtqrhUW2U(0`kR@Q_?QwQpnP+Ek3`_0jOSl7T@jp0Hm3m~=XxrfiQ><m2`4 z&s<Vtx6n4)*rIUcbSe*8MS~AU)8vavP=7oJ`rohc#EWsn-15xkrBC=3^WqGJiV9)g zZ~9U!t2bmndE3V|3gwqx70y0BUg$f%yD*9wSgz7M)$__g6Ol#R!EBSiEZ6HC!HZ7a z7q64P&ch_NsYW<}mU>iDd!~;bLuX=QsR;A7&lUSK??u1nD@ZL%L(`xfG|!!cesQUY z7&Qbl3`1ddvkRIg3`bJDGe&j_f~#&ArsZvfX8C^XH_HYWul4J>_%UpI-@v>t*O4z5 z58WsIV6yQJsl+r;X7SB`+xGk?j~`*X?Y%9Fu2|CT&yA&l@y{w_f-h7)T_%f4heV5h zPa6O3Sgb`c`Zt-cu{LJmWfNJ}{vz|-le;bMS(RFtIm(Lrdm#ePds7&b>%uk{OlR$g zvyb@)nQA@p@0IKMp)SQd=VeC{22}B&0eQ4P;~iBE(#6d-qwrqF0xiv17~*{v-#2Z? zXXQA&Y4pdz91b@=4`btvu_>YpoF0hRH48&w@GS_cJ2P<bQx3dUcA}-<1FV1b2vZx6 zLCN?zE?zr;v$rcC<1-a^=gT8&?G;L;(|-u&o4el<jv1@UWOr>7W*QGJk-BrHJhCwK zH|yqKmX*IJKNR}0m7O{Z;|}*R3w2j&9h<SPlUnQaAKbOpOk?S;MyzGVGREJ8Gt=%0 zyeQC-*H)e3r8VDq=-F+Y#C{?<TlUb`%sZ6vM7-uSfZ^U#@%oNFmryz34hqKBV%oK3 z2%Q&%K0{TI*M6$lZZ{Z{E@&b+xG&;@0x)FUUhEv7jn0Z8_;#QUad#E1oE7fCReK-! z(_669dx@*+oA7a$BYybX8B0I<LoolrZv7(Xp;u-V{boPSv8=c}t<<ONuNnJ?)tFB% zn`gc?qrU8usoY=a`{MR${B@s2oXwIdw{C0EYH$6)`p2hY%WO7j-~zVe`FCa~yMT?` z62_`?kF#|fud;`N-JB}QxK5i7Tz=VTdMdG#+$A>Cq`n=|f5CK^^j(R*#p|&9`xUg; zuSReC6fEc&gX`TA;Js!TT#Jk#Wzi2K%7??h+7@>=Erg@ZNL>6dAD!#U@V-Xcs#9+{ ztEk<@P<+1wN{3HEa^G91OKyQ`(O6_(R{Xc_xBrr1%LMU;V>Z8x`44$>Sg-QAE5^~# z-K#CDR``nR=Knl$ho+Zpob^#CFw|qEbMF4COw?LW{Ikx?vI!Qb7&tJ8aU0m3FEOlL zuLx%Ad6X@Dcazx;dcivO?#F}mvY17m>+Gd(7E4)L!Y95~B12sz`l4A*iHi%#LR}pJ zzE+6on~3}UiZH!#Kdk%iMrn#KLLa&yUDO_i)=N+wmxSf=gQ2ry8XW32;Fx%w&sIS; z0#(*x(Wj#*`_jg0@tpIp@X3I&MjFPftA^X4yBLB5)Vln8kJbK@-rtrS#e2&+eO^a7 z<zY-!-Iskj<;tQv#Iwh0$5?e!u6S*qAGu7t&aS$;@U_A1{zBJ%J@Q)Hhbvd51STrM z;+upB!o8E2=i?lfUL4A#XBsngy*W%|_Jx&4bKdE_37^?BLR4TD$u-}}Qv1VQ>7}YS znXM0_1tZg_dGvAGxA+8wCYoc$$4wZ}B?@JS5-^}~8|L=0!hP|&?25JhvCBC|ytYF; z1`F(qy`R%DXI&_6b;`o|W*;0XO2WdMkFc+Idn@(n<+!XIf#L`2VWU<j-g_+{w_HR2 zFnaz=>TOnZJ@E5fBW7deoZ>@tVT2W>nBC>cTetCcUHbEZeiQlFf_mN{-nV1i97~#V z_B>B9>QwRbdw(68?x?otdb-|BM=OCHHQL0^M`bhX3Kyoj%!GxHiDoaQU$XXQ1{}+6 zS+{wnT(qW{Hy7zsZhL#WJ7f~A?XrTJ^*2!N0`Xc%Svjcou!CGdDrU&%;kv|3e6kD2 zDuD&6p@2`re9%(ofn`Z?kog9v-JK4Xm~A-T29OZ%+cICb0PQ8)T0L8K3+hgrvB)+C zWh)}^?9N$KpIq~YWG*!<Nw|7`l<>q@4dMIyyF_|THDp{|NCR#}ke~b@8oufvm3&-7 z<(Kp6T2=%V)UBuLY<WJnavV#l%o3hl+_m(tnIC!e)MCjUL!tS5##WTnitTzK;v|3h zSvlRGMfKjqQWG@!1<ORPvR|K^R2-<2swVlpH>C4>1E|gVIC2-ylWZQ|9$sldc<H?! zy2ktA5U~=&o=2fXZ$vBi?H8BeXlXc1R@%X3=5So4a4hMv9_YCd>t)5|#IX{(Yp!8w zWfRKFQgG>^HzMQ1@o;?OACCDn$z=jTU2n6<hK-^<MMAdf!xp}Ntrz(;n$z0iHI&kB z51mIesh$~0OP!Jli-eT2M326U_oqnOc9OO6o52pg3HnvrKK8{zi-+0Ugvt&&Onr?L zoBo`bey%3#YN*M)+`U<#e<b@+25ODuL~8FH**MQBJkLIv$Gs9zWu*~)Q|v*hheuJ? zSyx&Y8b|pLOUc50G<@$yBS5_GMBf9&SSDVlxx<jqYr3I$hSm#*^i;9#3lLu48z<-a zK<3yi-1Fa!i`}!t^E1V$s7pexqGvdH`Y7~*3(?`E3*JeG{h^p^ENUw#w)3^P-fa)f z?$}6EIt0*cMLk+C(jz4wcN(uchYogFL#gllX{JVBGO-qt01_1GHj}HYQ0I2b<GHt5 znt6!*z`yA0i4|J#HSU>3?#m903pvy77sWI~9hv#e>Fmk;Hf+$Ll}t*ZXDjm`+&4zY zv(>gvZ0}fUen5E(?=>%j?<g>&?tbdjJ9HyyUm==wB!)sldgA%nHAsHsf`eL#s1&!^ z8TKLAY$9yc^*63D7}Z|^eOHgbF72II5SNKZKF%1sJ_$Le^07E=E;1U|;6krzM4YU^ z7mal|ILiGG#eC4<JEq@6MwNj^G4v>WJw1J%N&AKy(cuGD^lrdHdMLSs1Q%Y=?sMCz z)2r!}dj2+F5we~KY#Yu$U-e+YemShf!;d*%6Z}fgclS!QnB0^v?&F0B`ZtaLGhfR& z?kue!j>XnbWrblbthjb%>$PT|EKx=LbCwY}jhFj`a{CkSx&L_$3L80uo?h%oCo2}x zvPT=J`-)FARc#fvbQ_EgQZbNT<bq};#a8C0Hdvxm(+*B;lCb579lCv5j{{f4w%pm< zFkntB>^CMM_p^Ad?~ct_vv4mWTlS0jd;Fo83&h8Z!ae0~GhF%CE?VSya~M5;GMc`Y z#8ZV!0&Pr*Bop6ET3;7U$D<~Zo!5ApA-Ry3Dh%Sc&L3n?hfQYlOstseYRO;O?rxN= zwJ_N8(Zb8-lDIsCi0>34h}jd)lshb7&wK1=PnBy~S-2GM<sje^*2h`Lz%+K~YzW)# zDaSW0)ZvY1jd-ACEPws2oM(3`;l{mNxO3_;@~*f+Yc8Fm=byic_lTH|?y@n+NU>>U zek`{;Cik^KbHWr@b=60Kc#Zmwo}=OF=79Kaxp-u4gN{=cLAyB&2Kk9tA-NG1){cKT z=3n+-FRz~B!KFN(^10NTI)(Yure_~%m+?Bfth0&YJ-5;Gp?Adlbc*fp>!fMdUa?(8 zr;)9i?!^LA<}xj@zV0@W{*|8pC{Nv0d@O!^BEPH<n6}Ij9G<_yT(l^!)i(F>%>d>f zrNFm|wD^Jx{rFrDX<l)21B=s0Vv!lgS<|(XET0YHm)$0Eh5PY5CeE9eWSr%9^e@vq zIz)|fb);IPg*EeCajwP&Gb6%q`&w_b^LNHteObWF6rQ`hp-Og`o)9YDN6{N~1A}0_ z&Jw4VufUcl2Xs+#L*<=Ce>moJePg-SzP>zNPLgIna-gguE2u^?j=VZ<rtcXy$Y$Xg zk}Hr!O^+Fr=W&8hAEm=>Wc%{o;{Ep4R_*0SB|};E+3>O>H>-?)aQ<6|yrGt0u(G^` zT7MM_+rbt>v$%MRnPo2Q-N|vx>8pSTMQZbY&9B+CSO<3N;auhr>BE#?Ze(Hg5?p<U zkS|KL<mox_Tv=%(IqrT&K1w@i*8LCEaX=3^iPvg$m3GAN*`}@f?j&lU$wT9jqq`DQ zx`=J8lNUjydNK6Iu7siLR5S_4qHUoAWRIue`TWIyIOb=Lx|Qp#ROjYXJCXOrO%%0o zBR%%MNF&!hqDvFT;)*sPqjaA1qdX|rw<kF~j^etH+w=OyV4AP`nU9qKk8s>qx^IN5 z>EGi0GhQWcySde{JHlgY&I>P(T+piTpR7i+;Knd^tNnTAF#Z~=wVl9DA660xPR(Im z_swGNg$b-m?-IMvLx&%dkKp^<_waGeoYdc^kng~UbfoGFjeIo)%3ZtSv-4C8N$d>e z)3tPS@<_;K0?8*=LteK(%4a2^C@ux=iX*W^(j9M4XP{nvJG@+0{o$Bfdap0Ld0LJi zPkF`D?IP)5`cYc0bC(v58w$H(Bjn!^Z-x9(2S&bUNw@cW^8Q@KO<Dr^n4X3F(%yOG z;&G5&%dHhgN_F^&_IHIVnvYv}n|HOWl4)-_#XQUM(~4Ztn+S8}qPMQK-}m-~1S_!? zvhUurSlfmI)?vE}HyZ2C=O(Y>rN>i9>!}a<RTv^i?912nnFf+%-;#F6*+>oz0{=b{ z(<Ugw*~0-!G2z&6uPxqd&=?giS@1|OMbl<4*j!kOLfJK_IW+4J$Nae~H(zdXmu+DW zd7YLoZCd@6(yvHk`pBs;Xi-46(*)d`JOsV8tErj~q3@<eTq)6%doF8a8u>-cYQq3l zpuAS};ynp}7wkVJ^6ymJx~A!eKdj85X3IQ<NYTv2y~MWL5OInS!49LPY~{BJZ1c-0 zEYB>0O+R*v#g%Ds+ueisRt*d4>|RZFf%5QtFc1cP)o`hNFb?iC!I&+HX!CA7cFJhs zzDgCHSfPZ+;yIVT?dN03-c{&sXNsIT(Wo4;QoL;c44!))`ol3_<<&+|P<@X@`6^Jg z!dU8+oK0bQXDRu(6c*QT=m-q){GmKf#(trti~CTYu{xyFbeg_i2xc2J#U9kbBbig= zQ>LY?&i;h+cLhI~^OUZZ#RHSsl^vT|_u0nc?}rH7a{DmmmLaOXEiY;bvu1nxd$Y{a zt*npKV>Y9pAIDW&9?fF;%IYV4NQWj;8>5Sy1HF+qza7rk4a6m}@8hYb^P%kLfll%J zNqIsNw96)A%S1;sdxv7svhG+C?}`qNk=XI+5^9w`{Nb4Y0K`^DFxS#Nenh+<XmuMW z>LI<864Q^<rABkqFZDuy#Q|6*p3(T4vxlYzi1$~waw2{0IyPfQFTQI;E%%c>!d!&W zqA!bP{=+u?XMs4r{IG>jZ*|M*^*t<Kj7nv;J)GE$ZxefUDt;uIk-tQAfAR>n$H;?u z>bS8>E*UIeUy>ivH{)&9eYoANNUm{XFLzt4Ms}l(ajWSJy&RiC%}aZtw_qH4ex3n= zbZ3l8-A~gTR%5<+-mThYH1y7|#O|{i=-;*r`cDvIrRM=usXqBbGS`?H$sTy>aED7W zwBz#-+ENrM_8U4v9W4jIt4t2tHhiNFPh!Zbj|nw+Z{cHS>F};L4cwcrprZ<diTS9L z^@OeLy5{w=2NrhXzS%!Mrgti}2!5bp88KGF@={$CTTnKY-7YZ^j|1OYmJE5_TF2jv zpTo)?*)r4b8BBe;3bzp3g64e-<qNG7`6RRb+;m+(I{&hq&$^IAcgs`B{_!vbE30E> zFD2x;A0$I<U+icMfbYFHB-wU?@Ln>?o=c+5pjo)vc`@G33BlEQf4sW=2c1`k6GR)* zcCw1)WBCr(<J{7ABuSMP690CS9`C6oi^+k+ytHY^u2qzHKAo07?oMN7W$}Vuz4#Y% zZGKqMjE{P&Oqc6dF}eM^t@Ek>h<dZkQi~GhGK<_!>n)N4-xMtf*w37AuVf>G#xPP} zEy}De7D?U-WpM>_m~^`=HZ0~DOI%^X%iNZ7-@8kBq3<3(C+rsAcBP3Lq}*xS{8;jm zRK<_*B;BW-R*m#xycs;jdrp1KUM}8uV>CLl+31k;mL5D0#=g7=jFp`Qk4H=Xka}+I zW+Aqt?O@?!Gx*#U5BLz5VI*lDPjfwYP{&K<6l~^6Qs*X-_w)ub@H;@2y(ZAr5re5> zba%en(1A60=`gY!%T|hP*f*icZ`x=6x(xU?#R~8Byd>P=9UvTI*S2hHLti#0Ad0QB zXYBalM3M1^bD~S<%S3z6%wbjW>zG$`3tKj{4_9mP;S{lw54w}eORWld)5#iol+YKm zvwFAkz9`;5XrG#lc>h#IH2FTHfpbKV+C35VZ_RN3F-Ku9WwcDOf!WJMB!nkp`>{Ws z9qtE<+Gp97nM<<8Ym#;_nNkUwrD;nGz2DNrmD0E+-Z#>1j3@c5DWW3_j?&_xop7w@ z6O!FlLLc%)v|-FDrqp4R=!3eYsKjL!+jpCO)6e~{ng2Y$)90XYy=0r#y8K*GaO<4w zrLhB8ht0j&NQLFBV?!ycv6#d<Ec(ElZs_yA*FAX8eUaQOegj|CDTR9$nUkk#HMzDK zF8;qWg=EmD8*XT;;MIE-?7c66rw5cVzLNoVnhZkGRWHmr>V@|U;}EoEGKRljg0~++ z{*Zd^(2!DLW$#J5yA0v(EywxFvtsYmiQ=_<PKT)1f^_<xpGM<`ZlnP#5-7ZVZ>sYY zP#f1Le9<DYO=iSuzI1aOvoXpN(%O>W)t3L{{UfyXN)&eXZTsgjT1{As<)Am;L@opF ziY~<Xiwsp`S<-?z?E7^oekMkpPu-}`M_NqcFFgYJj(H)x&xCM(;k<bNZp-f!C4ZeZ z-akMiT%S`r=Nr`PzzM32c}P9_bcC9UF+T3GMn}B~&=*-DQT#uA&Z*gASk%lvB=hOf zzGX%|T}UNCmS$ZU#d9`WQ0V6zQcyle7cx$g@7niNxbP#Duv@hFj0%0I8p>UtN3g)l zZ`r1fxgxL108#7}mw#$}{*(Lj8*_vQTS_ftOI};FM7$Qa3n7BhUL8brp$@Hfx^z!J zUcYM{o4(}<`?TN_TX&-~zcCp6#huaI<hnag_87}G)j97!#+(c?+M#3rt3)X=WYRy4 z)*GZzlUpGzjCnye?|b63lPq>MOhElzee|jCfYHw!;Zr&o^N()$U44+B&;0KYp1c`U z`l<O87wXTXNn--|YkL!lG1x`BKj>iRadq*UHfy}q^}(i5hPb=<6o2qIo29OIWGQ3S zxcwPRi%|D6q0E*qf8iVVd-LVRl1THY_C^*D3`SYBe{rmpbDe>j$Ru;J(9nCe@Uxr@ z`?`J|>)o`E^>V9aelH7HPw_q_<(Kt%cRf$>|AL&z&ARIHbtB|yvv3V%dKOU2=}`K< zaSlbD45u$*zq)Nxs_A|9I#Rp&kanfMrAqOhB#Bpgq2aCyD%AR6mi8w0d!P5;C0+j! z4W_Jf1M4;}np!+1>CIyyMZVo6-tVOYUW(_g{HFE9`W2(_==LZ~(zr!@(k5Ck%#77N z59EC`n_BDhcVE1R{de=@ko__X4JT<!74aNwonn;5vPCyq%K*0%Fk7)3bz)02tL+uQ z`m3E_8<`IGOxNQ<>*fC+dv5|))7SR@pGM84c@P>TN~jdoIeV?^+C-rwWGrbgL_&n5 zK@&<y6DqSxgG8e;L?OvgG#HYpObtSb{wM$6egE#^dq2;8KhJZ&UccXu{d%p}*?XPN zX`l68*IsL1`&yri#s(`>AzO1QoT3Y5MlCQzbrVPi&j%*L6Gnvvz`2-cSkKQ9Id{oT zP#-o8L+3QZ-lgNw%6J3D8}T)v9mFsGchCL*#?Koqw!757I2FvC7ejuz8FVp$AS8SY zn!lT(ZMhrD#D<`3aRuyXoe0O9b3o+27HlbZqE@TC|3|Nj?=zjace@sIC1M?|j%{7= zlX?HJZ>A!zSt4z`gtWQ1kW{B+a%xaNsd_Sqezeh}?HxvR_IFp>y)%d=svZV;@daT1 z3_(xI4qi5_g#MX9z<bNrOYRlIL#u7kzfKu%>FDE!#08jCn*2+S=L3Co$tm?qd+der z-TQn9@z?<B_A6meRS<OP)xi6gmY5w{g6H@HsoH{IIJoTuU1oTgY^h#F%+C+_PyT(I z?<aH1u-JK)L5Ca2^tvX-X;~P#DY=DM2xpSHQtc!n*o4Z?09xd~oKD*jMX&pAg;u{f z7<y<DBs`b|ZC6*p=for6#n+YS)_4cfMW&b)8i*O1Dro3E2Uk0!{Ibl~9SJT=U_|g~ zfh0<3-va^OQdsWm2iCdAVRFVO%vc|XT1LsZQQZ{pjo$-bR5#G`IbTVs!dm9(x6ehF zF!w)ve*RzW70Jfp+~R#Q{C*Y4(M_*p(){a~%q{DQGh4>@$^IZ5BU7sQfzqco>*(lj z$#lWae0o;(E!{RU47w%E;8xI7zCSSy>J??Muu~Gvd~Gpt{Cqrj=p*E(@SnF`{x##< z2Y5K~T+1w;sNquAcM#F~1dJ<VK%_?rOmGL-X7t0llOh;;aV@^zeiCm<Y``%7y{}Ng zG!Tl~%{*xkHuIdg>d!Iq|5d(!^todT#krUJC3)$Kg{(4{2{T51!^y+gm1KoR78%lg zh3u^sr?ET}dW7RoHP0QS3)RljF~RrgPO1t5O{3wq%YN9`SO5!W4#NH40E_P<zUf+x zM~-{q$wxfgWd3W$w-2=S(%${09&c|!;k&_j#q&NS%svbg*DQi(gY<!~77XWh6hK3Q zHQGDMqxvl!G&{W)Un>8A_$T*>`BtZkis{h>f5hy+TQ_pmQmYE<Sgu;)0dBWc1aHi- zW+v<T0<z>r1gS61Ce1NobcB#OeYj)^?edMM$<9Ue^xH@L9NzLU<gyL)sPBQ&rPo1Q zPZ&S#Fv5DBt%!0C7{t$4k<zGyhZh<Ave$M&a<x=ZXg!?QN37VVfZuvcAZk`Ha2kh$ zk^Dq3-8Ki}9G=1X$<d&py&6L0Rnfb`gkBGu%UfL~&y*?J<o|d1{?X^f)_Pm`?XI+x zORuxsSo4v0^5zvr+Ico%^|zB|yB%b!aVH72<59~k%jt%z(X=SAkgCv!bXrR%Eu0kv zob+N?wYC@3eEB+J`IB*1++xh->%AWo+JzIGlQ1`D@-NHW(@eWmqShP6-%&v?$q~5f z;v1;m;0Os9)xos<1{JP<Mc-%vJez$Kc0S~<BTN^7=T)bPN9Jhy^x|B`R`BT0d$vE~ z_CHbg{Je0WWW7AEv{-~WI`kFOZ!AN`Ki*2dRDLDOJaw9oJ%z4R2<7`}&d`q=tEqP3 zW9s}-0hX?+hY{v7sL`Q`Vxr6NZL|vx{dNp3gaa_6_!#cAIrPgi|6uu~u*#Ex#jT&f zn=!+Ht0S>VE)D2WXBgA22z9DlT03VWO@C8J$4Z^1)3;R-<>z5k+FXgsze^$9{saFd zKit349~K7e_<8TP)%!J5+5VbY7Z*yZBx;E1E?HW8b|HQEEruF-=h8hPSE$LGi_|W? zjFxJa!0T#N{2HT&X(r40T4J_%D<B-%$2q9bpO5=u9{#e-wIqTHt&2a=i1veUt;hnC z#!SGGxkGSIMFjL#Hc`czT<XA;py9F)$&IAdRJF*DD9~f%_~@h5!!e#VJWTqxGcS`l z^pkmmh8H9CQJkC(3?x5ZUnZf$H0UmMS331fC_VWxfetB8pz+UAs94)>dOWU~W;Y1n z?I42so0j1vpB+f9#`AMDoX0KBxAE!rhF_NX-B*hzawip2H-$`)RGxvlHRkxCRvzzk z=0NTF!SHZ(Cw+QwH&rW4Bdtm9Wcegp@){?T*tX&1!B??DlVJ0I%Xt2`*8xkO94}B$ zlpG9tNw(T2k#Sc=X``|-ZBMhM!aG;ep(_v36{9!OnseLf>#S`w&9IVAy1Nvl1D?T& zA|sqBz{Qa+3vt$sG;G$XK&^d`ep%)((ob4SXr7>6<>{ayatj3C&cL-2a%dZS8QfPK zfM&^NYO8*n8mUj9Z8yBh%<tjk%7!rJu%$OI{hSPMe8{waJM#%Nmg`<8&Fc)v;BBkf z#f-Vn&p+mSl9bvCQdN!~oqNZT`lbZX{GoGbR){6NU};Y~!uHVEq&zC0@EK;NFT>n| zNYwM*i{0-+QEuZ|y!++KFUwqX{9LPyk5g#L1tXB{u*BdkV=#665WJr)fIOE6ps6?w z)N5bTaW9wBfQ(XdUP*zrfAt~Pyk9V>qK4eNt>*u2fBWCs^xqy2FdvAM{bC-?oh|i) zneZ`&x#JZ^c*?Jc!%P#}_;xhCCGSAn_d3y@kRkNiI|WL&=+XLxmUQUwO)z_=1}-RA zhoS)!Q2q+R*-v)k-EU`qS>}gRc3DlhDNGGsdBC=IOZ+4_1E06^@Y)$8{N{WMdh3^f zI_C$yw!MswH18!Z<}D#pTYDJ&b6<Fir-bvEC%u+tjY5Bm>3{V2%=+D2gNj?+NS_;4 zmgP5@QRfSoJ7UvG8K;Wm@otivj5IabFGGb-o6>v-Ihq#toy?4SPO$O~+1w>WmmYV9 z>IOAT_Iv|c+xYPkQTF&Wde<+@e9e_ZR%`AoCTp(OLvq_e2(scoXD*+JrJu&*_&ynY z_<bSVtF(q>{m1kgTqoQ+q9oDnDbuz45>qpnLn4l}F%rY`|E<3F0p=UdO7V6dNU<zx zxWZg0eZpM6{hb+8T1qZNTqEgM8p)}fC1h9mcM=~_ODxuv5Y{fA<a|mZ=?9OJ_jrJA zS;^NIZT<$QC(EPE^duZFf9{uM{_L?|NkZT{;;`&A?Tg8TbbkEk^B0JDWeZWIwGV8L zmOzh32%PD^NG%e0G&S6dtR1aFyk%>dBcVe{X~r|g;*kee{K5aIY5&!i4d_wvs0i=8 z#|q1XbK;p|Ck`2R&YIkCAVip*PIkf)qBAFi9Dxdw@hps-dKgFwBUg|!Is3`w9CK=6 z_?1kZb%BO1I19SU9Go^a8l^{__+^<7?_W_Syx0Z;CRl-YurAsuhM?=y!)Rw@i_%mU z%b<p@iF^tIIy7N=={Y(+RgUbfkRb7K3y9oXO2jv7lAX_|6O|<bfn(+h{1vPJsRQkk zJGe`m)p$p;3U~u{ZWmg?C@p%(MAx)11AV|(r-)ILk|o))p=8JmHzHRRMJkPUlP90X zl9G>+BwS36b_=^xkx2=_G^N8@XM3#S{#rT{f63yOUs9QG>}=Y9Qxq=h&4CeDr=pix zDPNZ(6elHE;pk2kJUzG@wyhrxtD9PAq%V)^+;Jdnnn3RQ84(V%g_&OTnRzs(szf&P z-@|<Rl_2h8H!+^t?#Q3l_Po6}8K<HKW{K@3{<!jpDafp44(9hV#yf4uLg8p4Kz5Mx zYaGevEGJT}l}wV;?C1xvo%FPL8MU8M0^R&rs?Ou4zoeZfCT+I3%8xr~s^0^hFZFQN zQd7)d%)v7v$IyT*!qFgy9v))Y{h<Y{njgdQ%?hwMAcA_F`bIiN1GyM5g*fg%#}j$1 z%4>Ui>)+;^3A9q@-Wa7kpfSk}d#T8cIP#J4PI|!DwzV;3hfgrCzoqf~zeg}B!x%Ec z(wq3W`4SJ;DAIg3k}R&dL*{wTp+Z5sX_aFYt&fud`Mgcg{{8TuHSPY=2L4~&uWa2p zsYAu9r0%|JN!IojX6>RJ*xHZ}6*?if^zu$D-IR%8SK}~wq}osB`p&XApDh8I@JW!g z>;VlPX-K!rE+Cq5ubAzF^oY!|H&%Jw-v74y^!*>sSh^fjw+dKt*|N0o5id$kkQ_2; zV4Qadk&CYR%-n^?m>&=PnB`Y$nd#AUNS%Eu8TREQnKNQH$q(kxN;NOq)e}w6E9KLJ z<T<UYh=EUIe=SYG1oKfPZ*QOHB?SfZHWW=IJ}<K1ewP5QoAwY?$4<eD_46>-Is>Qc z_+eJijGx@M9#O^pSNS^F&x|1Gx*{B(q)p$y@gVtqUzpE{M$9KYIS#}ZSl->Dz?t|= zgd-g$%DHx0f+Mv4f7WtdY6>y~yhn`eX3jP@Gt*Y>W*RqIk^$yxT$G7O_X?t`7E4xG zog`14T1m+43q(6xp7ykDqz|4))3=^^G_&Uv&3e4^m$LI1XS=empGM$Sz1Orr<~R{h zI7}nvet;VhDd5fRg>ik#*t;$hPkze8p>LPqnN1dm*A?&>tAaj<&VatBAQ(i%P|@7g zL@RwIF?~0OWckiz+}p*Noh3OXq-PiR#9*0HswHGO=Jthudi~;m);pXm<vGKeWl4Ib z60_$+JEJ;MjK~})`01m0VJ%6DPmUpTpLmhHxARH*$ONJlmP#Ib)RXUyd@Yj=ly3I( zpimG-k4uHp%_naCOZjE~vvd1D{rwclPz$G+gW%TO0GcBW=z;Slur@;!kF3ap<$Gd4 zPlkg+4>E95W()>u9Ki#_bbi`;q{BoUcc%{=JfdO5YgI@*c7S$0J5J=|V#&hAq9pg! z2j0nDK}_ezMkcnjpKN)p%VfS6{X5;j|7!cVSPbR7+PIrn94JF3e5~QKuK77{9}`u@ z1SZrm;nVjpGU!N5qsEeq72(9r`4m}L{F(HGCX$(xCsO|>)->qd9J(QTHJwTQe<|hz zZN4o$3DUOhg8scW5aINk?nv&Tn~V4pvwktm*}4-iS>>b0#-q5;ayQ03a6{&a!%yyy zo|<Cu)R&NZWCq;W^@aMJ4x&|`2)!BCOr}J3ke#=Ch)9$-DOdzdg2f?T$0NlOMpcH> zS0ur)m-z3^>qjlRQ>x|Q$a8s_!~ChN?W<>`C0dxR2W~L|m2r$o)-7h{@_D4v+=rOE z=MwkKW@0i=o_-9~r9JvH=)A^7)SA13$_4oTQq1+<SCyPvp@etM+;G)R4cujS3eG*# zLU&(p*#F`TTu;$JU%OQ(IQk)~w}#>CLt*H{*V+tE9*%{Z%`n_g5<5n}g&|AKp<YWI z8bgXHsh&<Pv&`w*ZyHo#+#o8@c$*Py&1WRuzUM8k_vE%&Pvx3rJm%hIg*l(&#W^Nk zLV-{2{A+z+im71Wtwj63Vm`pW_UHvh^Tjh}mg{rI_y&(GOtUA9*K`tiHjkWfzCw<~ ztI$ySarCK)GySZ)oN7AxQ;Cd_Uy6D9Hv_A0GjBl0kvNRlvIW2L*Jw99^~G(Uwei*0 zH=z8=6zfHOaM|fn3{T8KapA?d?@~67-!~qucie}#Wux)LsYY15tq$h8P2uNk5`$aW z2dUt-NNTjzje<=I>An<8yiah+w5n9bvTixqd-4mjx#j`cGC7PR+v3dWxbDq4m^SEN zy37lyNpc)k?a)pVOaIAz8GmeNmxz)#x9S<8_f^apk6OmbuA31YHI3}4TSyv$a!6)G z8F7)8qAfB;^ni#h%|CBX*NSOURfl1}6!U?G7FO1T_Sij8<C%eyqaNV#?o0S=!aDSi zkHK8EJt)rCL0A8li-#H_aLuwPbkW&|)#btHwo({fH>u*ob7OJueN_xLm<2YHGhw-n z6ioD}qC;n<()9ak)a|-B9Z{J@bgkYp=VqibFTT&`J$6wfQzl3fwvt0W5BtcRaeDtR z#Z}pT6ygZI+r~N5x{ueeMVO4qeas9LXRi)szv>HSIK9D)^#8(Kf3%Mzo#D{pmM}85 zsEW*A@Pt%P9Yzmk7}MkPooLYMEp$!OxL=OBb*JJb)i=8Q+<LQc)S5Fma*HUNQ}F>G z)?{MT@LgzfG#1T<2I7tb$yncd1SiQjqf|-;&OacBpCZfo`S&K_R9S75m?VuHiNnx- zIuKTj7zzg~_S1FkAIY?`Nwn;378%<Afw5gy%A9?AmpPvkMYerWAg6D3Fy7~GF(&id z7`eUYiVB_-8b{v{`loE(Q2qor^i7q;%!@C$e`0>~<~b(7@e#vIlO;NfCKER~b>dfR zM+P(JiD^$dxi;<#Ieu7^AM;~Md4g_KTr!YqFWUFZF>kiJSZY;r3WgbQu+%CUXPkJ5 z0!Ibea)WMc9CHT~$EIMAs~>i1dm_FFM6s|b=yfw4Z{69A*~Us}ttyA+X)`d($^wIj zYhz6N1t@Ia4ac$-Vcgggbi3|&x<e<MtnU{kLB4~?r*tJU@q!$=RwPEa1rh{mZZb)a zo-$tfuDLfx${MRS32|yp3je3v53kzBo$7wqvS-vS-k+G;wzczpa_vk)<bJYos2XXR zF^Xgdt|aU94v<Io7m1*N3^my>lr~gMpu1%j&>%^Fy0Y)r8qWtBR!gg}3{UWLA|JQ{ z7XudKT$xLF>GBN}8q|ig?iq&cX+-^qGiZKp3nnExB5&kMtT0=Q*2#zP`6CuhOfn%# znj$|O7T=}3g4UP)@ILb{jN5pWK6D~5rFJ}3E&V{;Cl9AadzH!jr5y}cVjfSM?Pk>F z${3qB4a|)1vSe0w9&cRiI-aRrA}`>u2`7H=o?^}o5l+W&fj{J57>wL>?O4lO;--IQ zKEQr}`PrM^wDLtK)6zeJ9BcF;r+c+14$CGbO10!^T_d^SWkQn$=h3gv+^G?NjoTmo zga3ysjcOBl!Eyp%El~$`i^cGp+eEav8;W^HPT-cM7x4|J5buQ7qNH>g9uD1yjN)u; zQQV12H{DT^7mnixNuu!bp%`?;3fB#pfY&DLqQa*h+W0sEB6Mxx;+EUA^s5!stmErA zix)F(C-ukx^F!l4F_Aj`Ojpy5pV|`dW)<*q+mAE1#ttGC*Zn!uR!p+Wp2Ko(9##3n z)_*nmiA9Wm0N>9O$Vp$n{m<M7m`iJBQ>R1$BIYxkjJvy=%!mpnka&a$@na{7r6uXO zN?mG@W<iV2xzOaijlUdo`tAcikD?j)`W=GvqvUYvTm{tLKN{Qp*I?$JaX4M^7QQ2* zY=TM+X2xaU{(xotwE?L(W@Q+vciLlD_JW_bu4gn3KX_5xyi^Bk9#038nU%06=s3(* z)B}fA8>!H9VVan5jf^_RBO^neF*eC6WdHpO%z86LlI5|CX>_P(!dE|HX6&B8Sb;e+ zD%qIZue^=Z_Ezo>ng3;F&aiLXbzQP#VE*=}@@eJ{x^eVqqGA|KjNk7hZevr)UYj!V zb@qF5TwRlXoX(@Yo1CcRu6e&4^I0XsA(9{C=wEjV66Yx6zB~Eg|871S+Dl;Ea%ZfE zGVH$JgyrRf*uvz?X#eQ|u1Yt+oBZ4;leE_I^Xa|<o$IwAc<K@ya36uw&kx4jG3Ox7 zaTE##@}JFoP6Nd+opfT=Dk|AIly(~1l85GZ81>$-%=`V)Wc~1&<U(~3^VGSQNgZ>I z$-NTJ4C;K#*gu{~b`J|8S;0Z3>bI;+{*v)u?jP;6u<-kqRy3UR*UX2%41jgcQRML| zRbmj}PnJ|g5G&skB&zc^nQ~o`c2Clw!Us%gY%%<D%rEPXgUOF}K~dsm$PYXQvNa}{ zl@$#Oum|>jo`uFrC0Os9f*UG7;;hI)?AWFY==dQ7{d{$hlbnikD^$?wST+od>*rMk z(M$b4)Q)`*olZumA|Q-5d%NIx%y2k(Ih~$L;p@apttVdPbID0X0W#h1BlAjOF)4X% zz^h!`%M2cLl9yf=$n>u0VQ!{N5Zhbr%zQyfW>`^d5l`nYN&oNtFWCWBv8P9rRJpC< z{mI4$Uj3Td7^^r#?FG9(G3O<R5YH1K<k{hD;?0kpyH_YkrS}L^1tAUUnri&ZF<0<d zM5E<c*w(KH0>gS?YS|I^Iz$`IWkOJipVw-cMk!kOCgSym668&iU=Kd#=NWFjjMaWo zsAIkr6K#(2^Bu0o!~JJ}a!+A2vB0SqzSwnvOra28dodfbj)(&Dz!z2*?gSNsO6tmy zr-Qrf$hD7;nXQUOyxMD@nQQOoF+S><jN9F-3|IdR;~OPTR3CZ}=c_`+qZB=g{x{{n z-djJp*eY<H0B>EXLGhoMkM2|=y#Z~^KoP4^CWjn%Gn!W-$>s$+Nv-l-@<jV4DINKk z+|iP!uOH6(<(P*UCebq$h4cqM4~Dbzd5HDpYqk42;Pd!kycxa|eJc-Rr0p`?cZ#or zKJ7M|)wE(+Y&)L1cLww0CSbf@97cag#t|Ddeva#BT_v#l`!s%j;&S*tOBBa$+zZB! zIQSu016N;cfotqTaJZff5AKLliw#_|G5b36eMlG6`*IK|bxCLL%|F5{t-Qy3?=DFO z=4T>pJm!LA0Oz*T>c58lzm68(2(d~j7vo)2H<>iR+`e3#lx%4E$=gOskPMXWXeDx_ zXeaS@NF<V7r%2GC0^(JCp9F<<5aD>?Uyk`e(_L*zq0>)pq&s@6X_blvMD3PEo;$@i z(Y`1hor)Shd$9GCAg=e_i?%+=c;e-L>^k!UJtwTdr@^1V`rr{<rRk0I*m+ndT@IY} zhUgfqf~A!s(0cY4NSfUOLbZyxp-T$S_%DW=Lx#b)W<P4`^_slt5hK}tmzk-9_&&M` z@w~*O3rwEQEYVI~V=}<J-%|SL>%jh3b2W|$SA5`<ISIRjI7)$%93pebYQ@Md?vAfp zEC-mY3BUST25h_-Rf&xMJ;p}LmE1cqlT>R*kwYQYq_*N5xm=x0mVdiUKAn5S|NdWZ z`ye?I=3bdWdtZl9g)47pV9`FXVh_NBuMT+n=5$<CABU>GBaj66VMz9F+~QD*yOz~r zmu)gS`vzip*ABcOza95UzWI55|8}?w<W>zw>FENvpl$>f<>_HZL?5WEsRWxTd>`GV zwcvRq6HX|NpyS@^5J&yPOz@Hv##AVPc`vEOY&<)J&moZWqJGBD*E(}4vP*O_??QkN zM`_A(&bYdfd`N_2dD+rZ;GwnE*PN%^9XlGW{={1VmC2kAM`q7qGg8-ON>rxm5}Y4M zZdVzSrN)!V)%&4jZ-6&B!`GPIEw+dMKYqRKkkIoo+mmmJXQvV!l%z@zSM<>_OZI?d z>2=7f)5DYrTr5tF1TVF4OpRHOXEN6z#ztXY%QlRhUk@5Lw6XQeF%;jXgiGm{pWNjp zeuW1GJUo4522Kyv#ja2KIR9xItd@6x^JjL!s6B%Cx?vbxZ01mh1(S)`mC^jR59B=6 z3}UuSlO!~5CfVn)lL;7R#PktS5}qXT^ZkLpF?hO)le^fT^TI34vb!Xi>vLP5D{cIa zJHR|<k}Pr0P$FAAq{vz?HL|)<oCJ(BBpVM&6RlxV<kXu2rl`S;thU)m?r8jAPNdlI zzxUVMMj!7eX<gUGJYMTaR?t{R;r38^e8GIGd@T!n#CJo+v8kANBOfLR>_qz!a;RCk z1*g;m<GZ&hc$S~5ykJluzV|$iT}lfvS^E7?<^%J1CRq$C?5E@C*E6uD-vy6;>Vt7B z_-n!QdSUkHaqwJU9lVGsUGEi5>ZLr%`U#CXGa@p14`&;amEMNr%{O=Ef^;2oTU&`) zA^DIg)m0#CW**@ktUtrObGV$5S(wY{c3orwUdt7A1ZrDGpMA+J9WO^B6dy7s=CZ`a zQI4dpF()71tB`G%29piv-!nE_B}o$BUz4+rLte}%Wi}-x@O?tR-j*9R%wnF|1W>&% z%T4&C!(G#;S@O`U{Gze=DtepBLD$#QP*G$HmYYZ6#Q59r_4NXr9_)ppyC-6EqbQDd zGe)5y3HX_x?_&Cak5Fe)@@MWf0ZMo@O$VtX7ng1KL;)=mbaPJx#exoSy{Q0Qa+~Qz zaRFM`v4Gs28q4IJA5I2rIeEk;#<$vu8Id!HR0fI=uPLHLr$~mlT4phKyH7AS6_=PQ zf%D9_tHERtN0s*>tj)sz#o9u<_jSBci|oq!)=Du&?Gu<h&NAl2MP>fHPLd4p9w;6j zANV@f&CDx*O>#GfpZnz(-UcmIzWA3ve@^8FqH-pP3U2U)h@l2B_1h?vYZ`*bQ|>{9 z=w|FQkin*+{SfJU4^Gq&wCdf1*IZ{Jb~XK(IjFvZtS8c#nmQg&YOccIDci7e)nH65 zl1BMqGeK_GX?i6RsCPv#8LnhO%vQV<@kqBK@#7;Iu>*ljMsP19A2yf_lsg69)TOY1 zNr=g2ro`4UdL~?=l$p)=m6h>Y!^=$n^4!bCi@6~l!+C`rN{m%0WA%L6WF}4SGZPvj z|7YexUrsU(1y6oy=6~5{f7(}4G@&xWCA8?uP!N4I2=zt=fuj8#*nhtO(kHmW4t_km zUv~(W?$W|u^>o~76oVf%^e{)Y5Gw7<ezJE^7DWB6#%N<<fiup}$0VWYxP3%497>)J z!!*ahy5p|&tcwv9Pe>uu&5k74n~?^7KAuPyYa+kioG3OgBB#S2F@5)Qe)1M8&1Ni` zE;GF$XBnA!!^jt>eqJFX`lnO=`Fbi-lDk!DxYeohWZu0cs(iby|5=><lz%c`KY0*2 zT&_TVGykh*`+1<@Zb}!wO{J<2%4pi{)9~SHBkX(M4-pk<@Z9|=XpJ_)(wE*i+G+{9 ze=NjMuM?O%Zv~zhIs$L*<e<HAJ~R|u0;NT-;mxF}c*OZD^fqf?UEEZhdt*1ecvwyE z4vnCM9Zr=iGl)ZND(Tr6M+PrVBwA5>NssXsV&fA^^sKg#R((_A*kVJ>coWIjr#8%- z=0POy`RAYg;BU`-MdwtDfjXak!n|pP;(um7z<%J`{-F5(=lz@c-?kiw(`wtty*JU2 zs=95aeQ^fxeS8C)oIDsVjXMAl$1Lz;|0Gm>7mMcaZ=&~(Jj|rGuy{lkCP@cjhU7S$ zP}T-^lglB#^%d+LJQW+oxM*FT2hMz*@cluxaQFQ}5D3{xzqgI2=bybLn^#qk&r|M_ zO>(dK5+JQ)lWhx8WqL^BrMu*7TLxLX*PX;|oIrYHc*JO&J$Vo?fxOE~X1cZLAI94B zOLKTvLyCESvh#u0%2@^4idnB2;|;Hwdj6W)zyH<0cFpxmJ1^dEmZ5>fopx?ihTB7K z({%^FL%fp*czkMt@2dsyP~~F$TI7n6+f&icwh`x#y@yx7p2OvFyRcb;VEcj^kaem7 zJ*A<z;NfH}b=Ad`%PmmB9)p!G4p6jG4)*Q|rzye{={*r~`ZZaOpEq$Bbr~{(s!Y+O z`@X7C_N_L>Ey6Um?gg2qT1X0gj+0@rSI9&<ji}DP%!L0i<87<_W;Jh#Am>i0HmCZC z-cN85{u)*zbx!hzrVl0smGzAHj(R4+_!Tq2e4tpwiT`H)H(h+htivUnH&3Pk+G{9s zn`kyO5pJan!PRdRu;+v^8X2#{OR3rTmYI$6?NvB9z8s6<zu{}?CwPC&UNm!yM*meZ zC>quU+|?YM&@u*_%%@=0gj<k0{VupIoesHTBf!5Tj26hQpwF}I>GGO6^!XNhI<4NG zo=<V6K2wkmtz1GgQ&_sHWfa}e_Jy=f6QrXxBZ;(^6*=DW>F4!*{@gp<{!v9%U#_g= zbg6rB(%!G(x>(j)8Hp?K`ZH8WW1uE!AFW1|!_~>hzQIIlYXdJeqyFEzX8v!Q^Z$y& zA@63F91C%ywNI1yxok_QHrE9r$K3^!5pO~Aq#O3%U60+9lrXDU57!3nM5D%IsF1;7 zTf#nL-@Y~!y0;nU)H&hQvm)3YERI@MBk_rf4PH-Lfj(m_P*Xq*ufL1|;oe$$dHEiC zz<(1B-w;X%Is4P#p&@jFaTtBQJ(%8i2&EgU*3t1~4m~+og<hBKC2dPHiA@SaOx}zn zPyFo3z<hpD(>?Cs6FuD1(h|H6S4Z)tpU$=5K5#9znmLS@H0=Y=%Bzq!z<QvRPn}Kl z$?@Ow_CM%}iVnM|d1n#T9Qlea+Uf}x>V$EA?mSdC^Tji7g)zF+6T7q`alguGT;<k{ zy-jb?YqbLV?Mo|mF1d}trxP*7d=~EXoQ{j_G_Xf#K8A$_V|x~heF2K-vHA$KZ0(~; zoE-XS{XzP&W;cD#Nu-%$(`Z0u5`Dk=5RDj>Kvzrcq{FAIrPjBQGRbDNXonEZb6!tY zmyIG);QrIr?d2r-zLz}=e~~43&I5Vg(s2iP<+mJo4Vx61zQeLiNyjGUliwC*-0TyK zRlo)2+4~c}ng0Rv@O$y}ly43VcKS#U?o)&2YY{+uC!)vvckqPy4u)y2ICbkOeEcI1 zXI)Ih&ztMeqF9aX_}YbwH8^Z^ZWb~oJ8`Q%L9b7)cx&}YELl1YQ+rL(W!DRk-+C6T zFGYZ&<45{s*;#61e1d+8I72CuOK<pGpvy;}r<*SvrBxk~)O2ACjaxE@YI;i0SMy$w zu9zHBDYAk%JvS$7nq*0;)O+4;{TwFWKZ9AjFPkxXV#X{KTEZyI8^bjFUHfU@1I+Wb zb~6Ju{@c#~064!&>EV1j+wD9(b+4WFRi}aJp;xf*MG?@fkDzAcgCF~N*idJK>rX$x zRFa4LA2y)eDj~K;LxYX2Zo#kNW!O=Zj_EdGxL|}G?tkKfNy~@eY&#P)y=j28e(E^J zs~8q<5P-b?Z&bRefnxeiI+m|j<ZMtwn=fCdu?-pY(uzW=>%E8WG;^S>92Gi#L<!%2 zx}4kub24>@3iG-ygl@R4%`{m~CUQxOnNe33GBTM%82{W1#_{ofX8D5>-ar{(US2<h zeD)Oo&HRs%b0*nOrW0i@&}U*z)Oh7R7{yaZ)r?rEjTnPEJx@X8q9<lP$-s=6%h2g< zCcbfK!uf;m<6%JwHosPlojIu<i%rhs)5Lf@cWec2IOdA0&YIw6V;Pj;YNLgV3cfCS z1NYUrpi$=psrM8>&8C~0`aGeoW-q9X<|EqBc9}YD%B4jQPtg2B^C<OJrCVF>lU&^h za_yo3Q5PP~ESX`(80yIkuw|y^E&IuRfc1vW3O||0Dt_jzl}F}J#Z8RMq${bAfAF(^ z>FUSDw$#AlE-je&j22s7g8PnMFin?(cl?^b@~9c^tJcE))L}UP%tSmSZ-b8O&Y<e3 zGL)Bmj*YjJScsBjzZdo5_=-ZDsThH?qtvj#-wK~>8-y!{cY;h$C2V`|3H7t<pe>^u zOr6)m18Z5>J?T3=TK=8hH+xR!PJT$uCS0a<&WEUq+)64jZ6bf%e?&Zu_K--ku|!)( zh_v67Ve}OAf3hC1^MNwJd!XdJ-^)0eeB+Hf+w)i4PfA(+9?$<l?|yQ-m3n;<g)PaW z;6}A1uFtf<!US)Oiyn-w(a#{sFBb2I6yq1;LNtrqi&y*hVD_m-oRcKNZkVaTj!5IM z`i{*wUS<a_(;SZ`?HbseEQdoP+d=!LAWle@L9>b9VCRJW;L|h=*!d@+v`+=JC8XgJ zGYCfObWr!0OY~vNAsUbqOs{QasIXce=^mO(OzS)exiN&4L}@a8&1NLOMu{lgOeWSQ zR@BeCiZ@VB`xY?~OTPbP9=rJ*vtg_@<0+>|25kNx{N!K0dTdh$wbOn<n`WPaTb|!w zS<zQ`VX_tjy6%8(yb`+dW8XW^yu%Y6qU?v5i%4u+&_S^Ty|N!*4v}H|uc@(Tw0p5L zI1}fKxuUP8Aii+^3_ckzV844cJiaE1^XKP)&;<|38L=L+`SBIWxeMU-egZOD`ta3O z4KBQEqFuH*v~F$y{hEq2bb=C1t!XDQ;-|=&-lb&2B>~cNM}w&BiYE`f*U%V?twgG0 z0rSFt33I9a!%wzO3u~CE3-g#Yf_aR}jChh)J(B$LaQ{IA^ra7@iE`R-b8-lD)E2{- zMN_du-2g>YJD_KXBj#viq3*C(Si3@jmC|~QQ`|domTfos=nrP)+()qDDH^Qd12J~% z$5t$KJBlkM9kIaX8(dEnMZ>)J@bSxA2=w~_%}Xo5>PZ2>g>sNwlM7-WHv%bI0!E_@ zV84P29E*HLTW9Q{ybreY(8n?K>qiADm-CTKo_UxYGMr6be$gRIie1RF!a7ndw}411 zgpoJVPZ=xGb&MnJV}?wgO$0=x$)Zi?7=63vyh{70zkM?QfcZf6=`2~W&prV$?p7%O zrX42OB)}RY1GFz%j_uM*asStRjLWY>^X?1S*dxN;S0BoD@aOL5+efprR*AB8L&aG2 zonmZOS2Mb;O~rNte#~61DE7y4a57(`=0sZu3~smwWzw0jZN^o&{JaQqv#!C@Oh=IX zmI@n#z2J4WG<eLbrg|&+zTg)N=~zEXOD2z?9$MdsSkyVvryoa#PB}=<aZi!d5833~ z=;I`4Od2uWw}EKTAmX-qGs)R7gJ_1Elj`lkMC@DXZ|462^IF+HYHYFtV%Cku@L78y zW%h8?pEv`L*v`lL3JZMil82^GYq5IQ1FV?ZguCM<Sgm4Rwn<r)y(BP(eQ@U$*5Bzv z)!-}W5VZ;CI&DMK+n+)EwHU6hErJP~@}WwSf3LnX9mXGO1ef85K+R_d+)d1fHRc># z;l2mx;c1{KFb1xT91I$4G@bP=n08dHp_?q`&~AMx8nf>e5#20E?HVO$mZ2nlULZ`Z zOuNZ8&jzwDE1SrTj3rYx_>!p_-Aq~ia8jOf<o9^~A28RuY)wzUcL6^$X*4#ffarxR z4%vk$uh;=ivNJGFKMj+85-^jSjkf(2IK)$w?KIM1FFBgBbBB*)k8;#mm5L%9Rg#Ea zoq0HMZz9^bAnpz50Pm@<pkl#L{3K$G7u}wMM!X*=N^OJJxEIvkR6%g(aI7mUg|?Ls zz~2zSW%@UIH>aM??m0pA<{zXhd)879lf`uZdP;|G8cPqHw4%EnP|6*#i)!C9rh{!Y z=&S@W%1sxg+ddVN<Ker>P2pMOLaHYD4}S9RxA-mKUupwUP7W~nfHt-~cEaUR_o1Mt z5tg_wz>?%OSl_l2qqLha?|2uE)DU1@90s%1)<fB~O0w+SW_|WdoEU4}B*-4!{{;IY zu43~YGd#Zd6`T%w0twu=&=kqV8<|`*n$rSe)h8f)B0mSW@MVa#6hhyV3g|Q88BDy! zg{9o7P=2zND)W5?E(Moq^|mwAqbz~C8%9yDxq&ox>lV6U(^fk8ehB3bT}gWlr_ntr zNFQw0rzPLN5nJ;HGBqxVm|ctf&HO*<*<;ge!BBe>i1YK&?UIy1>y$w_V$(<zYSlnZ zIepZYJA~(Ao}n!J8WZPtVPC;#tS=K~Pw(u;Iz0(C*LgI1<Dn|s_xvp~8{^PNEFRMy z*rTXq9aI*!K!)ZQkaf4jcX{J+_9P>`c<Kd2RJDMIT_YT={R~pF*)VylFXX4Ez|}%= zxM?W~<sRQ@-GP_%wrnNUJ6uX-l(J}C!6_QhkxDCVPSZO#lBnaF2+FzOL-Qi+=<Gcj zRN$pN73!%crPnV1X8xZr&#Bac$vR8m2Rwj$r5iBTN)<OxU4XfkLvYtANtDvrg+n?I zW8da;xM*@WO6Zs4n#S)qwBrlDY#+=Tj#Xi2>{e&HJ-(vL@di}qp2EpB^RQ1!42R58 zK#$4NcyP1=4*NO+_wI7U6&)(5U;G;G8oh$FnoP*~5(MTiGQfKKDku(^4mt{+P#LBP zFBZ!{)>u&(Kld};Ip!%{A$*NqO{$<9v+mN_=dRJtqm6V-TO8egFpLgcZ9`3djH5UD z73qTtnO|}p%YTCT@7~TjItE_PEr3m24qBXaM^m9~7-zxPd>3@Vb;Tk4^$S7x=FB7h z^VM>U^bE#NV*ByNtU8<-sKWBfwAt}#LTsLN501pAxbwq#%v9TgJ5%Rixy=tK>-_;2 za<%Y9yA2i{Sb_f1Mi}Gt83Y>c!zP^u&{Izbzp`|g5p@mTUfBw%tJ7drj0LPLHw6c8 z9Vq>x2+0*f(7Lyq#&~zo3G+VDfB<C>3A;lL953_dd#9+vqEK36@63<3u%tor#{6df zcZC1Gg1tQyvTvI}#L@y-d3!wC^=(GtG#HP_4#UPd<MH6bG3cTeg$^sWVXIO)E;g(~ zGx0YVF+`Bv>o$xfYc<)Vt*WfetS@+kKhN*t`)Z$6?m)$nCa85z6HhtuwZqNK(TTWY z_iYYN88j68v;}b)rvtu3UjThCSuC*=#TK_%e$MU?$f@)ICSVp=&qH`zZNR^ul!FP$ zlF)fq29`{cgEfs3U>wN-?%-DXrtAg{jyg-n8}FmlOE*!m8%usO|9ixLSW{Q$2_r-# z@Z6kia4pG(wZ=!meUJuTUT%eX(mQZ=K|U&FxZsYi<JejJ4(|;YWtj=e>?Y-YG<8;G z3uh>@S5`ko-RVN?G^Z9E*%FD~<85%PfGW;$9El_N@f3aG+9<kQ7j1x_pMInO8n-Fq z+((VD)=v=eW+}W;Y=CF}XTeW98k9uW0sY|$4vabUN9ll3;}Br_hl3dCfS3I+ShhqF znxaME+Oy9zcxMBZy_ZQHWA@X<O*?)w|3kumUwO$X1ZF;}g}E)K;nsmjC@+5xyRG%G zs=yT!%3@IR@nM{|Z5%pI+RxV?x`H>J_2QQj1=iT+F?#NkW=HenSn0QSG1cNLHu(NP z-Hc2;b}a=@-JXXtPmIKuu|_y@hzXWonv6yw_E^$sj`6%nxLsZs`&G1Ygug654_FIy zSc@Wf<bd4END#ff9zLD7hMw8Ru%u}mOuJzMJ3J=>uhR@}CmTRhvnu%Cmw-#-KhRrx zx9Q588MIdF&~N5{kM|F2CVS0*Mchv?x?T;A*Zlxqw?59BC4w@6x|mbC2TOgI;*WEq z(BixUYFtUge3vWeY2Jx>A}{gS-4?u7){BbUaxgEs1vRHivz?=VAoq9~K3x-w%Z;Yv z)x9(EY@8X+zGjPp5rJ5zwHn>aeNakl9%jF@#ez-^Y|RwHN%0?GVrCmSYo@>=n@AY9 z(-CH_ng(%CtiffkHGrWl%)Vj+>kYUtNOm+#an*#{%Y&eDLMOGnevj_bJ@=dW9}@oi zO6{3^J?z20aPad!xL~1-0s>bd?Cxc7i8jO?C${2&HO{#8sxs<yZ^8Y?<50-^49fZ! z<EV^ND08<O_b)t)Yb6ikv$6U3P^$|!9(a!lisw<*dLM3|vm3vhosBiZ1{i@MXsGCp zOEuTwQH2=X^U)uV&hW-34=K9hVC<7_0rl2gFp0?qp%t0%#Lyk$^_GF!ITx^<zYxxh zb^)2pMWAJ42M6^np)X7ih6F1>yWAkSVAVm**s9;m{~qr@tfB9<AgjFr46i!EbWRxz zEwMl&?m~3?;)Itc@nhxQNFv?liDL()Vg(a~p~=}e$|e()By-T;FajqSCSz9jEsS5^ ziO%x!?3<@oFpeojUCvg#xB39CQQd-bR1<JiZz|5)8H{Q2xhQ*-MWKgNv8r)0Y9AEC z1D~s5w#hrN=y?n-W742<#x|I;cN;87^N00Y*1!neHK3Bc7JMcxhVeO5VWF=%)E?4< z!v?Cbd|We45NrL-{2vnj`#0k2df`~;1IV~Ruy2Vy-ko8JE0-x^^@$ZI$0c|*vlSk% zw?nhri*VDuSWNg_idTDlu<c#}Zf{(Tb^)O{LN*t-gf^pWw+L&KB*4y;tVHXR1^B8x z9JjyTiDoyWG3;e6&dfQ5W`=t(RNfusXD`5BDG9u+tbqj!%+Wwz3>SG`hb8OJK-7$r zaBli;xXoWr`ygf;taT5DgKnF^CVCmX+3N%~t8Bq{trd7~)`i`Bl_ASd_?Ob`|9gu6 zT8*mXcj!+aiYGtVV~AQ1R*R|O-BXH~!5_nQo`~Sk*F(`i(*;j1-+@(32yWwRz*jz+ zfpRX17`=EhHZ`xqI;m1rId%a9s%x<}O_Eg#m1VCuin40w@{##|9yLmK;N!eEnD|4O zZRD1qYmOOOEKbBbf`{<ZjdZM9<BR*h>!KO{0M!roVaduocqMll%-xdVLwG2B9Ty3j zk0M~=%I)y(yC*DdbcHGX)1XI|2M?TvLWS?(-^~97>|4)%fR#cN2TdG{)@yaKo`gY) zS3N8oy9j-RhNACoOSGwr!U^3TILz)aZr<vEHVgRcnW9qh;w>+9vkKw&k0_*<<FI|! z9h^5rhP}|I%GTvevg?{};cE3vjGIx0%N3sCicksm7++tyP~#9r2A#mS+mGRv1M4ww zQ#j6ccSpk%Yn(n_9fjA6qgq=g9ABFZ?<MxZC!Kh3-@FgXn|4FAd<ZO0_k}~Rm%za= zghls_VYSKd-^~97=C8VyP}J}$l&|i9Q}u&Tg$)Et35x0loscH3i$c35VYr418Xr(X z9sZbp<Mmp6GIu6c9p8bHQzEfE-Hop|coH|(K1A8hHq?IAgN~zR+2YeWY^9VC``-Eq zUe;*GRa5KHzfX$ob`W7-s&QER`wduV`Wkodx{MlA646CI6q^Oq@wK52Hp*DyHMs{c z^I$z>zq$^NgHD6%!GjQSISI_~?twj-L7-#j4TIVFpuENsB(50!X8tcQUtlVTs^P)V zp?Qvu)D4FhUpGL^u-8C*qoB8rpO?=<2!qaafn@YhG|1uG;}3b%JmrDc>wQtJf}+XO z{ixLN1gnheafqHa+heKA*7PZ`KJ}Vx)m$xB@`?oOmeP;6J`ZM#J0w{9QZ@GUMSb@4 zp@%5rIGl|h)q&L$N|56kjBgEBpydrNrnPm0i<AtG*&vC7+l29nz(shLnFDG;r{UFs z1kg5#g6SoJpufxw4pvSD!vOAY=KliorrKAu{L^0g#D6o5KV||iu4}*sO;K>2d=%QQ zjK*sHPaq_g0^h9-(05TNy3F#&QG6fmsC;wWR&9&RZ+qh|<s2-#*o}fO`Tn>`UvR9+ zcWhEoVsE*bu|DH9*l&8WtnP~8tl-&^tfq(oTeory+woC`W%S0fPYYDoj8-Z3`RrcY za_ue}ZZ5=Q=Ha+Ra6aB{9)#smf++6S32XS=g+~<tv+Oviecunt7eZk{?<zPldJz;K zw)xHcpJcxHL@b$jDU7cCBmx-$GT<(l5AR&RLEGB}kUOn{>QpX)p5F7&rKpT!`D+;V z2rk4*Lw;N%F++2kKvc94$HIJy3upM?&J(v#Y*01c&^d-Pz0RY8xFGAZR-G+&;;~Kh z^w}luqgX<<S(PkZcH?ax%T|qJ7y40_3D9PxXG^iwTcug~1J6-zc_0dWIg5dT{CM1c zLu`rv0%lqtU<|h!JRe?y%||j|vU@zdy0Zfslr}<}`EoF5TJ)RwKgm3L(-`oqD~BNQ z4%n5Vh^A^uFz1jqHph;^Y`J_mIz$yTW}AcW!Ygo%e-D=&dJAG!-i42MZ-cVZcvQC* z#5YIB;eETKcuuAe!zPttSadB42Xfe}Q(G~C@26dM)RdKKn!r8~*Jlqbl4i4?3$Y@v zhp?&dtl5VJj_mHo25hXS8k;q*2HzDFW5A%}$n_4xdJ!&aue8CGAF`Nyqyy}28sWH4 z6~x~;2Zyd5ghI_-pjNU2Hg;@<m?+QR%>PN|0gN&Do_hiMQlDTFOy=uMT!sCQ6!9dT zgn7BMQQUt6whQqYSF+IXbrp20zk)JmF6xYx#R&8J5FgzKnQJ%WX5TZ|6nUKgT;>Sw zz97P8_A9Vzi-p<V?ZT|XRULM*^+-0vz<}kQ9nDVJq036Ta@fs9>TKFwU~lS8W^>O@ zVhdUZv!C8_*sWF~tkBhCxU6Reo`~IrBz-0tOz8l(O>ZGwrUnj(@}K`6Jqockd%!b0 z3XW!nLXGC8-^~9><_jilf~TT`;oh4gaQHsO7OO^>ey0Xp!@42nWHZ>EAC8LUThK0X zCR#{dhXU*2I4N@jJ_*^6Mg}`@N`MNwMYHJO;f*3L+Yv_P<M;Uu_%7iUx=3BbN5flD z3&q*+^+xRd>&onXDI>Py)=0KjRfTm9@57@V+N{i16E=6}6!ya~E%tQed;W8p+bCD{ z5y{29D8Vzpep^NC7}5=gXL68R{1lEHs(|X^3|QO9&nfrl0Ia(b1$olJznTA&%-`RX zqGLV<@vqb6^oimb=!yLT>z(D1-F^>p9(01MZWBbE(?Q{dd$7%N8Xg`#2)oCRLSeCF zY@K@mUmn?q^9@9>H{BPPzu=<YgKenAkDc6PAA^IgUBUK+cd&P+BI`z_*s8;g_;iK< z+j&QtP3_QSv0s=is_I1lHM*=uwhmjDYsn_P(PcBkpYZjJl5n}NFUI*f;IdN!nAS4} z541AqZ`KJfzutpKPtQYKObWD_BtuX8UXZ@M>o@a%lKGT_tKlN&5wv}8g+zXChWcUd zSZ}`ouW0#VPqQ?xxMYsWF83jr>xjm_PWW=g5&YJ20DGKWarVMV{B><%xI8=@r=L~C zX9wq?n)iA%I^>6kgc8tednH~D6=0KZ3bD^CYH{9|OX!m$&L+(utidZ?HfSGzTo2?k zU;hv@%_P{2>tk5%JuP;{>hCCEavKAMx1+A2G0vSi4L5&Vi~Hjc0}rZTq(lQ)rj&qh zdo~D6ISwON9tM-=@xPh>lg!_}GXurRMd0o{2p_N<)N*<c3mU{x@WF2M3v<W3yRNue z*A&l<?1msyO|0wPhzt5W(ceWGA8Cxh<CEM`y*UBH6caIg^hrFqU<bY~+kl%2^HJ5N z9PJD{aM-9u4BxvS7swsMBPP`-9wWt0Nz`S_=j*c$T_Wt^>%#1aX?(3JTM2gaeJ$23 zei%DT{s#_%WBf5<Iu@FQp!K)C$h3suAvH&oD(Qpb;!>E{dI2_sWWXBv)1a+$<Tvww zlKD&(HMm?;35hD|*m8M16qgRhN)IJmJ4XkHrG?-baL2Sw2eC|<hfkgnzVB@@&Z?h{ zj!!$FuvHN`6XxJ_wOP2&H4$y+#iNMZC43~4gRWZf_`dKFHm7%@#ISSdljey9SFht_ zH&HfMT#~)&HiW(T)_`@cQ)Kf4CE5NFZMaga2_3ye*)&%Xws437>sVEXnnCmNd(1>s z-5-rdeHLNqva$HCSP3t8Rf3e#C8*Xff}qGOh~l&VCx7xU|7Ra6mV+I6!(Uri50MMT zfWn7ps6Anc8z!2e-aUKVW)_4)ckRJ<Q)5tNr!>~ICF3e}HJnpC7zHwK!J9(<HCJLV zx?cpGC$|On^6#-a^cSJVh6I#fa1b9lT*HeWPT{g8$5ErE0fS$@!tm4P?3biTti8k- z*5;TYdsTf1+iEAnI&H2%$)pC%AJ&K+r{r0?-23>-rwDayjZkKH0uCD;fzRG8#4*>E za2D?w4EJ~dU3NGAzxK{Ns;2hs<B3L5A<?9fG|5=z&i%b3luDB(<w1r-10hqBN~KXn zhBQwiNu|;}M@dmMkVFw>DiPlO{_+0vuIIOYJdZ!mS*vx{+55Wh)!Co3&)NIFuIu|H z7Oi>Y`QsaG=D+x9Uf57gw8FWOI9x_*Vq}O|T?q-3oq-+v#>g5|g}=#J<hJ_4E6NS8 zZB>!8_7TbY>kav!nMn3;jwjm)#f+b|#3gA90;_%CYq|vX0(0Rg>V<(thf(s^bzH3r zgG{*_o@G4)>%<7GM<!9LLTP&b`$~Fm>1vv|X#utUIfEKmeS}YUF;Z_=L38B?L~R{| zxOf>pHCW^42Vd-;;tMWuPZ+KoC2x<tCK(U<$rQCm#GtE^7)st|Gyg^A!d(|gAWs#E zSh$h+^gJaqepC~oWHGEd-AwMKAB1IH3}B{?Lvu7Bro<27!+K=mf*4}o_lB$teo1lz z&XTo}nS^fPL!qN1G_<#1#@4yu9XpR58vy-N`!G@lm<Z-U#GnR|iziSW<3{8PF>5fL zOX=-^<@7|w3Tj`eKz|;XM7bBg!(Ug^F@0_x92$~wL}e!y8Qnue$Pw6i*&$|N5po0O z;)4t?=7fxqCl{U&OUs9(#j2Fe{1=&jAFkDUcaxWFKYf^txa}lwie8glyCxz#J)LMw z-it*G)gYv@6w3u)u?&-MlCKQ+xB)B7uLpwKj^n)XZd@CZhJs-@<IA-Gb8fjp>Ae_+ zWX*8W&=Ue$>tIo)i=enn+-ZA`(#QwcW&Ht-V>9V!yf_Vbw}gf@EvK#bCFnQV#gu!( z2yBkM#AsmzI#REq&5WN8U3-s5T8ZfKRK{WsHQcnZg8D}$|02K*wX_dJYkxcWex-`d z{1=!{vfj@cs;|{5y=hFQj6X&kDzjMJq>Y?-l1V%Q`bYue%_rUBMfN}AC3-fFL|yPU zdA@5CqdgId2-_qazZC_ECq8(owGSSjH(=lFQPO9WPfYKABWn)Xz$8l#VLme$pEgtc zFuH)G)L6`(eHCxdanhZ-PvN8S1kw}7Q_jP4Y19=>DqFFZx<8&sjrk_gw481<7C%K^ zr!d{t$3y4K)Isxu8SWQ{f)%NU!&9eYVHzKXSB=AcCjY;5eF>ZSFEEd~lghF@QmduZ zyMeX9xt~?I$CNedaG7;MxRYgejSIa@j@98>8Ed<EH~BgEg21qZ%<|p=xqy4<Ti=1P zD_`(-ZYrGSS74X6IdTTK<6V{}rWOv7o2!JOqAG<*4Nqvd2g7x1GH$2D!MCdiTVBP2 z=Rg@)iCi>ANP;?r@KL`+1$wcbMSrYWN9(>SQuE01wEFTBEW9j4-{0V%rlaYY6c!23 zE?4M^S|hb+CSJ~DYBq-i5xtHB6A$#Vng0TFlLieEGgXpU>(62x-Y}1Kh$mj_yzUIr zvTZpT*1teTGjFp}g`!B~hY{jyWeJ0_y=c=9gu^Wl<m^kvN8LPpy7dem{qIl`S&h3z zHRyR8fZg8fa5{PlvLu+^=3TCsFK5O00C^zHwgTExsW2S7g?t%Kx_r_Ux=vk)j{41` z$+s1$fQlCF6fvSJ7H*`G+|qQVaw|&LRANs2TYP?e1a-T0G4t~>Bs%ZF9OkpNwRH}3 zSu)^`lfo6hZZ`A(!rUcd>z%nvR}xQOQPTX_mZW^iWSME(k>lAl#MIY=B}6^R9ln)_ zcUHz`?Okx|hz0*-NAQ*fK%b~Hx{-F+csUxELP8N6Sc-idW9U-+fuaxPkXd^H)(@H7 zjOKi7e8PA#x&wYmHfZ>M7?1qpVbN0q@|uHAy+4(X3C^bi1zOa;k)N(`(x4L-Z=|IX zt7zytX*%<b5S6_;gtW2iNL(0-d&loWyC5CDtufGL^0<lLR>9@KQlx6k#m2O$_%Cmn zy_-1#)4p>N!S()xyJ<05=Pklo_Ctz%JEcqxFU?_<XTB#NEX)zk_;IP|T|yIQIEuFx zkfC>K*tF>s8g_+&>$o0jD;B{(?lg3d7D0il8xQnEXzY=P5UY;G3PmTF=<pzEkv@+1 z+99x+sijKmfU0sQ@+Ln(O!ZWnYcidB6iCzPjY9O*^Tjm(<yvZg%aoq8FsEm(OVjl# zBamM302<8+$S@y(;*3Vbm~hi<<5*~)@<Estllx)313Bs$-*)!nza9bWm~X77JdsR) zXcSqhEyA*FuwhLT^Jb-&YZ0qwH;AIcEMzDJVEYDl`1?O2M#nr6Zx+M!xu_#X*#n2p z-av0)D&{!*;9lNtRCnIOnYFxhjlDRnUGxqvXA)ul%^%&Is<>b2i#Rn)EL@g=s}AMh z``80P{xL)aO{FEm!|3XNg6qC2bjETWy6KK34OBFtxAyDOWvcV3vd9R8IIDprk8pY3 z6uNJt1nvCJNe?O);@IgR=)5OzZ`WWm|F6V3IJEmiSpzeVkSWF$WV%=(`P_Ds@bmW( zAF(FZ+FQot%!y)heHGJ#)T)VV-eqK#KmerFO0m-JDkS}{qH#+BGDFTGX=yH`h0+n< zn1H$qtsqiUsdUavx^%+`p69zFBEtngi`U{DV_(kCTLi^-spza8M!9J_L|%=;z@QW< z^=<GG5T}O?*3%YsJ37z#FRFjsn5H%^qT{B_rgJX!;lYk!#LS#TLu2Mqzc3NHruiz; zEs{~vwI8lu4cN?of%*T2y!knf+-TXya`w5viV3YDFJ9)77umI}bosx?YF}wY7w*C2 zGuk9qbpxjNq~Z}@J|4gMgm&jA_^SB<Mf%y8pv%-Tn|5Nv@HM#ZR6@7@HOg~EXiY%} zzR!Pv=ICIkc&|nKt{u?49D@PAOl-5shR2Doc=!4R25iI7>E8p9^OLD|(*mmYl|?l- zTGNil7F0RSfNnmhL-%xwQ=gFu)b=R{-B-VW)@ID2X7hz<SvVJ!9V-TZ<ykiKUu3@K zy%f2T=0mg(d?2js3Q{ZCLYfDzlNayC6aRZ6csb!PS?S1RT9#R(ef4eJk-q|o`}HWf z)PT^yZ?Gu+h>ykN>6-)f;M&DW)0gql_H8_rm&uXrxc&p5o(R*gvYFtY=8SRje__lb z0eulC@N<?QOiUW_Ah#R`F9srW;1i6_euHx@KRs19jmAppP?7$vbcK~A{czcUMlW7R zp9@OUTva}ra7~&HURgndPb$&<CuY$DA35o!3-xT~zsP(~XA?_B-J5KfGC~$OePQVf z^ph_kgT(7_Aeo+hj!d>0hZ&+K_|Ux$JDSaqJzWD$+x_svDh;Y)CAbmt0ORss!SpsK zz5HrCJy|S6>)h4odTVK_$TN@1l?hPAE8Mg*KMf7%Y@of-5iJrvNHRPRMZLTDay<)* z{zt$Ps06oWCgjwf;8EQyx~W&2X7=k+uZIeB+&<8a#ha-$|2#TNaWXw~XF5&sQKJ=# zt7z}RX*5{%D-4!?XEXmr<~vsjGSa<zWJxsRxutiL9G|5_tex6OdsYaUmUWHT3s}Hw z{X?=bn<C`<0rb61#xBj%2+Z^Z|B)cPV)Eu=)+NXve2)44+;rrtBn?|Nhkiabo&Ggf zicUGKMn|N$=!LVl(3{8n_6qqSD#-y)r^h1e<ZZN{3}I?-d?8v;0<WNJ*zC_mt7^HZ zq2o$wzk3yJ7@R`4+e*@&S%!4d!%g(&R!OQ+z)8cT#?dQkQuL#ZEPcUfo2-4;!)E@A z%>BDOS=FVJ$r$S%k&zR?n0O7bnHxZSzkMX#8lJ>s(sEpyD~o|nXY`PAn2+3qhMN$k zKbV0F=Q8klK@Bojy+*Y1D_CpxLVh}PUF|4J_w4@(t{>y*%WE^~fm6a%|86IudcWbb zJ=3!?_bQw`V^Op&4U#Vp!`AL1ipI5~rZ5*t4(X^a`-%1_X1%70kM=l^rz$t4=-!3; zwA5x9ZSPr5H=a?Tjg_4AV(uNtj2EHdOTI&N)SJ!x7nxgWShI%0Rfs@p0+}c}0iQBN zn3}~T(z?8xoM^Wq(~tO&C#&}2?4&Rp($~k!XF*8pP{rrqPsFC@4A$%AVYkC;tg+yy z^4V|k<$WKcS1_Im?0w02EH@&@oR1#dD@$(<PNZ@5OdZ7PUhFsM#JEqLnBsjI%~v<W zEV&#f_i@p@$~2sGXu^w%W|V9hPnTD`#FwB6R9aDo_VTZx4sKFZRzidh`fAbjHo|ng z<U<@vyoSRoJ0Wgg%x3<J%r6_;vBD~(iAtRpS@*D;*op`ti6#)emtiEWERfiL=qFtY zr(k?{14`;75$Ebo+Ndvi)TN1_TPZLbbjOHfE+mg|(C*BKNH}*BYwRAN)b%Mm?&m?* zd<ZM2a?%xFCR6@+F8X3rkd~%$QPGx97>$d<Sb;7Qhps_x`wJX*xQMD%HE^w9y3m4T z>BJr$8fx_zo1f35+m|k*O9CfRvR;f%4Vq7NvYER1gdrHb&V=rk<LG*`oz46gng4It zsp~#0OD3<zwWgZvRG5nI&JrjCAKu>J!;-tDWO9lb++8-28s&3Pn{AJ630|1sJrh%m z!_jD0j-rBV$cVm!=*Kr;awryCmw!R36*o1mNkDSW6SP^s#q+llXqrVc?hJkdy~JGW z7gl2HVL#Xonn6a|3zzR*$GR;MkPz)d#?WgVF!+MbQ<BvGWCP^(G($6e45f@hp?UmA zM4ghN<(Jgygsv%6X7gj1Ipku=_X}+1zrp-Cml><XfrkhR`jfkLJaDfJB9ko|$c$1? zvb$WIRD9Y>R01cX%`Ox_qVwRoyb>$h&f?h4Fl;?_4xw`rQFSr~yNmbZC~pS7<aXlx z&d1Q58-uNvN)UDD5qkdm1aq2$OX39>UC{~jHNtRV3AQF~M!>N^%yTV()iHO}d8D8! z@D@INeT}hxAv*EWGdSLC#_0q7XtM6d!C4dNgbX!0Jhqbdne)<_??+Lnl!AN>e>U^q zVE%uhr`-)%y5d3P-0}vp@YN(FO)Dd7ERGUxsZpY&Yk;ie`B3dRi&LZ>bpcl~ly?=W zRe`vbb{V0o^AKRIgUum{Xws~}<t@dSXPAJ84w=|DH3wll_u%I<f)UFoSpSTN%BmP- z-A~2Cdx210YJy?OYnWo{gaTGE4hXkkZ1GF9&f}!ZE<Qk0ZXcd@)}WI%<A`t*-rVD( z{Ie8jd6NP)G~%OE2JVAXK8(%$|3Lo6^SjE5I~V7LvaEO5lIcIc67ES{m@7U&N~}_d z&5V<1o)(9}?Kkk9$$#I<_rjoZGCubOL!wU~twZNgEUf}+6N!+>EX*}7!nVnmq4F^i zQ9AMP^?d||1@9r<7KNmpS1_5Wt2DMQz`39;*gBuU?@Tay<N~4M<%XSSn0t5m6ilyb z#72>16g|j?y-PjbMHHZF%Vhd#^DsEwL}}pqh4h9J4;@$94!yNWZ05hg`u~UOoUCMh zvLmby)tsm|mBb!vY4ixVK)75V@uN$iZ?+jNogR=ePr+HHk5G~6BXz$MgAewSxUljJ zRN_Jr)1L(kseIg@8iz>9PAoV7fHp>7pdzReE)h&lOg0Qz`wP)HsK<D6F2c|v8yv|9 zMx(wRd?c^K#QZv@c*aA=p$wx{dr_-V2gZ+;@-Gvm8t!8BJ9CdF;-^44uL{znw)+^o zQO#!l|3Uu7>k@}}txe`@NcE04q>N=xXzF=lsg+KS{xHHe`6#@9a2e?<d@<eM18*7q z)<8z@tM$DLc5`Rr_0>W&L>1#vX&!>T6R^hZ5^P7yVV_!ttzSCe(EAAA-kgO+lrLK5 z<-_1?DrV1HjYF*)Fu!LhsM7^F7@tABdI&NE$}yGK7Y){%!Mp1rWCd$s{fU<z9}uNk zObz8sRXKX-u{1Sx<EN`Ocd(iN2IIdAy(HMln$Vg{=6-uh=#&=XR;7zKeT**Ta2uYV zF2-WUo975qv;OLt688NxL_$IlrjGU?_vkl>wr1f~UJ*82?_#_<ejul}8M~P^ce&VS zj2~w;BzKnL>{oX@&WXahh#c&6(qMEU?eMgP1^wGPDF1X6(b;zpbF3A?yPUyy{Un0T z?;wl22IHOYA+qZ+c-$t^!#8DVIC+DRO;R+#M3(;D`(SVT^&_BclgnBkv5?64pCFIV z)Dah&PtKIOK_?&u!}0!*<fy=;h64~+N+pMgG&I*GA$TksKP4{UtfN0%sUYo|_61dA zFJUj#g68`}_|*Iy>ta(7KN1G_LoT>F<0>Y6j==oaJ7JVH2d}nmMg*rRGPwiMW1IwS zq$9!I0WvlPnEbUIyAAF$nv|JH3dn=+_BQyNiPGa@oK&H16kiTVu$lil-oK5^+ZV_x z*5D<IEL~#MAWmZB>xl(N3wa}T0=1(d_$l@Ph5}2lD7}f~$;e~g?L-tSNn&WnUa0eY z!#+tN8uqvzIz}x}lo?MmHH2y4!B;5K%t2{x3C0<FGI}A=IAQ69jE}3Kv+pz}UDt$k zkrPgwIfw1ZMKG$`f>(MQ5hKRr=y&-d$@MKFUPXfy8i*Fvw=h4z^sr|Q<LZZD2%QvR zGyhwXzqj$O>^v6d(hOGKWf5|k(Q2|E5l2PL1PJAX;`EL)$eOhX`zwr~#gj$!{f@#h zoFASU-iT%HpG=!X>B+H&I2a*BA2f(jvtf1m_NX{LGss2b>K-z6%7KWR=!^N90T78^ z3oR+&WMvfimU=<;oj-IR#XvgJ8X9UYSkjV@ES+??wO_{*l}b#tj6q#(DTda(gpU(* z{qRkMCeNG1X8wD4|6}xXOJ|m>R0%8iiU=uTG@IU39K}0(PmH89GTg7X!JsY}rn`#B zT6qbm*hj!qI2`YIJ0Q;2h4&6)*vdDHep8rF>!sxBy#aMPQa_h=FPlzv+Xtb#&>MrX zCQx<?#D*J6I3jO^lRIp2Zqy5_$Gc&bjw(LnL}S6Jc$gor#*`3$Na;JlC@BWRHrH{? zpak_3iji+}9j*<v>}$CHNb&b~h~GcQ%1)U?IO13&sOttf&aAt0IIhO{=cU;05eM-f z$4IgCH<I&G8+J<P!Qt^5A6r7OYTHa&wpo>ibE?pe`I=NjQJz^dpG(K;SI|`VpU8<# z!$WyrxKuMfF1LZ$ydaqLMj^a$4Td0xe(3;M*IYr@>sY9sNWp2bU65ny=??YeBX!zm z*uJa8%b)~sOgM|t+f8idzmN7mj_4jc$Xa)*jTMw9Pn>Uuklkv$sNr6Lw>7D-CnYf2 zSID|3uZo1~^We#N0HxyN&|A_3;|CLIMCMGIXD>rVdsS%EI(53pU6#hIVrpKb7En{y z?`Zm70mp75Smn4w*hd;0l-6LRbQ*TXYhwqqUZ3deg|fLG=odH+`%P}>ZjQyWE7xIg z@jjkkDS~$Abv!DGgT<#xHuL{T@b`BZy|raMm>9!47V(}n+fk9|4s;NXQV*yH*kYVY z04iL)SiySQ_%hEMNtWKQj?2b{S6>mQGle=w3(=aDk~D5uf;Jmz(DrZz>g2nUYP(SC zWF}3cykEoeMFz?yDnfX&Fht_@@%U2!ERDmkz&U~Od%6r47iPUL${+J;)FJmc7$#zo za65V%=Al8DKH!g_M#d*#@DZE&@1y<O5!W-+ijG`zV40alu(mQ@ST+p`#JaYItOylG zLVFWw{^W<V9}lxMW0%0y-UIJ~Cg4V4Jn~KZvEG%B3JSgkYx^Kd)ud@np919|l5|Vu zLhABdlXhHOM!i0^LhRrO`d?&W=#?xam~|N+qd0i+dcry93Ov92LvKO?Vr%>{_Tm^c zCm#jA$6?#lZZv!iM%&0*sIE!I>1%h{%>S0)Ki_yLYzIr@++wZ&ouR658rk+FnAC;^ zA(v|&7TkQsQVjLSlQ0Rq6jsFfwJDI>&q-yrbs?p^AE$d;U@}#NDmA@^hVo1*a9o;J zx2RID`ZZLYrA}Q|i_-B0{jkhigOY1vFj^dq^{S`fVi5;vnKLN0y$s>{^)Thx0nxep zP^FZC)cSaY6`e)5@nXDcU~;gs?Dh74PWRVFI>>z`9dSF*)IEoIxXnRr&S_}<xJEb{ zbzx_mg$|)MoE|R4XS_k7ax-LaaMRg+9kAe^L5YO`C3TDF_HiuQu~dtqj+dJEGqqL9 z*D%U_zl%xEgG<Lb98#SFb@d2@aYi89PYqo@9thZAk7#ROJkQ&M)<P%n8vli>=6RTT zBAR`k{~Ee~9EEs07Jv6fl(%-VuGcPwfZ-wh73)i+dM6@bPB;S3y~Sed2;AN}0(V-E z_)re&Km9xW&k8U#=`*P7B}v-pIG-Lp4f_6&B)xK_8pe)U__D(ZVQRwo(!K$`=a(U^ zpTLp(IM&K}Vb;<sa5rCwOpZ+W>v&-DUJA?6mG~g$hdt73+06ej&0inr7@0$~JbSgY zn0u;qno6+$aDtQ_w*seS9G;1sftX`8CVMv^d3G~0?mUBeM*;lI+fn;s0K4Z4(w$B7 z=$!J!biMj&I;1g)&VEq>OGZz!b(s#h8C_vMUf|{zBh<)pz?;Vt9JL8J65tIv-gBtg zz7QYJ`$6NjFK)ISLEvjAHuGOc_pc&(lbTry2fblnWrzq>N)~J|fTqbZJT2lyviv<v z-}eSG4wW$e{1mRkW9Td4qdVVy#i1Ahs!^>(`9f8w(+toMNq)*w>4sr=E|NX{z&go` zeI~1sX)1(`>-h1?&J9~X1ta#8D<u0j!X<#wrJ8md9fu#lTKFzb7VKp+|5qe`eXvb| zAIl+P1seFw;qKK=Ou6S`{E1O=nYf@-r3*XuNMXrP2kLM2z$5(|#vkIQfs7{PTE@fS z%o{N}(|bO(-=ax<R|`|V+!6S2`k`WpJ6>hYgtJ2%QD!^@rrmf+xcHbJc4HHK_uGvA zY+j@s&B9iu&ffCadF<a8fJpr)HuGP{_OBz=tG1AYm8x)z4<ti(DoMPWG8T#MMAb}B zhz|H*BToz5_O&C;o`Z5ka?pv)pNu}!laM!wE}11yi)SsOwS&`X!1s6X8GVjo_e8`7 z88coVy(E=mfP``IqAw2!pJND%ZAzd~PPnik9kYl0Aa-^?Q=hRMO37^I{~F|POrZTP zgC%>M4_Pgh<nY_`BvywDx-b3la<U<5*%$(M@yE!nzl9_H_c0PP0LP#vWL18}8|yAi zTQQ3Yw8&Dc9C;cQ{1`#0qtLpPkAc>U*cPab$gd4VWS1yf{p=9Fa1lC{2S~cH2PE~v zF|RWK_KY5Bkhv`M7!R=D_?OwCf8Yq1>9vzXZR6lbg@|>`DN?ajlj&{pC4&2y9&tqr zre-w_c}<Mp=H?nGJS;#E=Mc>OYj8zi8XX@ui#B+RQ%*h(D!0A{Ub$^(y}BPwJ1ijm zw3gh<mI4P<@G$oS>5~{C()nSK7}W;l@x>-R6%0hGfJca3-~I<M{?-&T&c|q_F#27g zuUd(z|5aAp(P}d6V+u*`gDCO|Vf290;D7%M1SQH5&e?-Ej30wh!gFv}a?^*hTy*!a z2tB~`FUvd`gn0i2%x^2g@>FLO<lH2+w^=yPtj9c(?IHSuJCL{36#=obP#rXapr<@8 z4%?$IQJ;OD{}!=76MWX{E-|rC#OrMuI7F1mIHgdMG2RZF8)FbWF%?p@467w$n3~8o zoVs0$@N^CuwMBqNbPG`bWs|6~q6l5C@QKl%>H~k3CuA0AVaE1e5>lv$;$;+TgR99Z zUJ>l}U5JxTDiB>ShO@gw7%jUkh^FlO^FKrJ_h#X*wIRp6x=BZZIcRwmi|4&KJRF0N zrjZ1`i{4o9{yYx!`eIehb-28Hj7`~Jk&w$x734W+`L1Db=nGJfCA@UqcE*Q^I};aH z+rc2Df%N#Q;QLp7)Or+>P=%$i+U|;m3=XKjQ-=P+$!KjPu>G-$eV+dwu0Iy-))q$& z7f2yka3Smc^4Fx7V+Z&uGVmnQ5gpZG(5{Y#($RAKuziBL0v(9mJ)Y)X<fOA+Jc6wj z9~IppKxZ@FYq!O2!f_L$G0AAt+0ZLwVvh{W>K+qYDMc(C;zr-MM`Wm`pUmL!hPZ+X zQr26ung210zduotd?_&yuhn|$-9|R8<wKWB7#j1P@TBk>L?s!Y+`2+sOKgC@{zFtQ z7(h(MM_AnW3X@t+x-^25mJNKt)#Zg)bmRykvc|*p{Y~=l$W;=y_#=tDqlA&$OBiou zIhbb1AXa@36lB$L{?cJK^WR7H$3|px+LOhbzp&Ps<&lLtpU9fW1ktg2=rs(7Qj!JM zrI~`5T?UUw1y-mvqr$Qqd)x*vVcRR%?c${i&yS;;f!R2)(F6D24w9n58>A&Rjy#(u z4^?pojL5Bk{eUElc1fckZ!u22wL*HP1Dp9DBlyoIvT@>IZ57BRy45q_oT3X~)@+2{ zI0(M|S{N}}3=J`3G}R|!Fr)$e%O8PHwhQ(1zro$%1A276VEWq<+_`cX@@E*0{smP; zus4e2g$g15i5(6<1TyMZLLx~VMypkj%=EnJ&D_Ff{?AbTu~Cts_gI_dlSp269l4*m z0!t>FA+LWI5|25P&wCFc^mHQLS>Hf%=WRr!6+^Z@7lm0}=<TjX^~_GJ7Kp-GcP&)5 z3nOG&6$!l2L)Mffl0!`Glxp(|ILA0c*4h?#J0uV>c|EqQvS2g+WAy&{MAb*8lEU?o zWcv{w2>7TYGhPul?<&EL-v|!5+hH1W8E?}w;o+8tNj?#XeOQW-7va!je&_LUJMzEl z!h6?Jw49a1$J3*vL?(+oj}^k2YrvM_{n(kf9tM|YBga`9+KP^B=Kmbk9~)V<Dw%b& zYBGs4jwOxUvvAOU9Lj4nAi9)bQ<FK){@f0}IYG#y7qEqA6O#R+(dZtGk2@o9q3sHm zdEG+v#aP%pI|(1AchPC&1(DmSi%ToCVXfec3ipNZV``+Uxg>C{g|eCdF>?QIqG!_G zEKS2z<juTDV*9O>rC&20nne^{U!IdSvrN%@$Ox;4&trN266QKS5IkC^F(%;wzZfSd zx5S_<It$06lkjoQ8LV@aK>nraq^p<WNx^btm+&IoKn~%%YRF>&em3)ehw6`xmJZ2h z-O2GLksWG8&RPwdwSJH{W~*`i#u#~gb2cVjI|`XmOPI&{qgQ(mIxKw{&t-qu>^cAr zw={5CrQm^+2lhVMN`|{Hl52SrvFMlxCO()7kugaeI9f>T8k5;t-hY(Zzn{#%vVj$m zaf+mr<`O@>BqAaHkv#f%hZu4RVsYgRteJWO@+=Rioic^_)D(;|y^b}bXOJKl49ET$ zbdfl`7;pvQsV5m{q{x(yT(H$%hg<wLWOP9d>2=%4X8!Ln{qY&}e$=sw9-Sv`_bQ0q zgSj~WEtA-pd?F|HjB#0U21Jx~&>6Z3;`5Iq@2(3fQ^PTVBLFqJp>R_VMoUc?rZV3T z0o%rr6~{-&+hktU-^gb1J=G#jsk&_Df1KE#nUMF$eXUt(m&pb}9}?UaMiyB7ASL+^ zN!6$lE<az1M_ziEVzw6DYY#A9Y(Cib*#kOFyOEi95c=<3vER=O_a?QHoQ%UH??4_o Q<-L)l9qD1MT-?I?A0rVC&j0`b literal 0 HcmV?d00001 diff --git a/test/data/dem_squared.tif b/test/data/dem_squared.tif new file mode 100644 index 0000000000000000000000000000000000000000..dcb8dd082844c6bc1c50177ee966bccf9e70db69 GIT binary patch literal 67701 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%0Dk)AY}J(1HHU0cS(8CAHu%w(*=9L}AbgYA}C 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 literal 0 HcmV?d00001 diff --git a/test/data/dem_unfinished.tif b/test/data/dem_unfinished.tif new file mode 100644 index 0000000000000000000000000000000000000000..3e7b0b65a35a15848b6985a524829842fe4528f6 GIT binary patch literal 5144 zcmcgu&u>&!6u#3UqSgwDqQM^-F&ZSH3>`YHrotH*Ad^rwQ-wtpCeoV5mKYdzCcdai zT_ADg#u(p%n79%WmnOZgT$%VMbmh{8YZrdsdFNd2R4l{*C;8@l_nhzic=x>~?RNKv z9U+9>A=E}g4eVv0mhlneb;L)FQ@1_iPu51lKEz%_VjO%N{0#W6+BWU^^k@jrWcuC4 zIqO-|Y}*yWp4ua--;LVmjlTr`LRP!a_y}ry#?d~Ee>N8A2S|MS`B>NvehvJ`wb4)q z{~7$|+E`%S-}t$;Hlj~HhN9xeNO%r&7695sfHe6x7e2h&zqD}W@?dqLef7%Va(`vH zztC&WoNXLxp8sIw{iTV)@>1w_PS@wVCr{RwmRA<T?5R%s^xWd0f3ZL4A9=i9pY0A7 zSL>JhtBY^#?ajC6yS@4D@!t8l_POrd+jD#CSNf|TtsvLfdt|aP*_=H{{Z@r1+GmEU z4$Mq7S`*Wg%|nxKG#XQPZ_qvSugM3Rlhdu4yO#FmJDn5n3{5|DxH&yF(P}jt)6LdY z%UjGI9KMI}?oVHRb7B0uqwaa*TiNf+qu;i|{&?-x^>crHaxA*Grtj#{5VrAcjRbs1 z@OW?dpljieowXge){qU`^?d!6$9CLYWBv*CA$+kq`1-{gmjx2}e*Rqh?5SRT=J3Zn zB37&e%+X>9rI5e`@uL-ZOdN3<Yl&P(4bL8<7dyLWjFxL9A^>O%zTO5G#Ap#5pjW_Y z52<?ReG@m0_Ani5Jnzrqo^o0#x1V3{CBGZw8DkI4*|To$30d0j`ms<<bV7Iv(A}ka zu6(XOGvYKpxAqqt0Om?^TC}-R#Tjx9Y2L><ddYj8Q2yBo7rw*}KOCnr(~2H-CbW9z ztc~CjGaY0lV!=R->fsB-c=i}I<f?_+*$(mbPAHZze-G~gc>!qZMQPG|AMFuu_x64% zkGeF6JvN=$n|X!h>&L2@-otCO4_dfs?K*0s>B+5^*HGhJJ<h3*@l*pTHI5W#4CZJ5 zz8H(KdJp7$_YUqv9jy?XX<pz7_H#}jHo;@=saFl0f7{-Jb2ZN#bfr|jfTuA=E(VQ* zhYYH*8Q$OX+8f$Cd5xi!=Qv}C-#!<=;oD}8ni8OQy?f>z9t+SVfTp{pcHQ*Q_}n7n zCAa`u4;Oyr&+y+0^A76B>2*%#5v}63BQ*-fX;Q)W*B;QSN3Qfdya0uPd4e$qdz2RU z=c0z@=QO7ZSHIEr&UBg(`~u!L^{^P{s=*fk&+Y>_&1-m0+~R(w*V=U?Ovig<ObuQ+ zd;w77V4UEYeF}QOV~jiez3aEnSrNz$@7doUYYIRNsRw5OJTvEeMsUVTK;x!!t?tG; zSmL6`^gZf{-<o}IJnPQuAX4>Zf7YwFn9gI|&H<iaoIc+nosk;iJktd59e5wyIl|ix z`R=+K^%)A|0`GH`TU=|{Gt)6oB#U6#4v8bKdzg?lC6J8V;Cp&s^~m{7)G0@anhf{W z*qwH;JJH$*mDQE>fEv62J}Yr1E$+E=#{H(diP<jyv4h@;_hK#X)O*r%CVRVQZ}O6H zS~M;;3unJu?E{JKgSvG8TkPVy>m2mrY$EN2qsHLyzk^y4v4$WF@4M%9D#DNEwwOJ% zpX=$ly8tw)W^KR=;PZ4poY|v*XI^s%X+1sellL_==N|U)=kh+KR6C%P&eGY@<{-z} zk!Q|>d7XO=-oxC@dlpeE)BYmW9YlKM`2Q()qppBggLkfb@-Art{Er>(R3qrcZ-Ku4 z3;Ggn0ut?gfKx-`UFdz>ryaQ0h5)hZ%lnAN0}VU~;1(-#zjyHaDbZh_RWJvfCXqh? zOur2=4FmV_9`arrk<F`l`u_1v>RyQXKDtXp-~sKxz9st$0PpX<Fs^ZE3g#c+4%(YD z`FDwLlz%U@4Z#o2oUgeDy@U1VJ(QdYPa_YGhqQy<3GV^(`0RrDx)bl{VeWugoUP9v H?VZR!uwoxB literal 0 HcmV?d00001 From 7fad0b46319e4030f072d0d985789587c967e498 Mon Sep 17 00:00:00 2001 From: Steve Peters <scpeters@openrobotics.org> Date: Tue, 15 Mar 2022 21:25:30 -0700 Subject: [PATCH 137/219] packages.apt: don't install ruby-ronn (#324) This isn't needed anymore and has issues on Jammy. Signed-off-by: Steve Peters <scpeters@openrobotics.org> --- .github/ci/packages.apt | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/ci/packages.apt b/.github/ci/packages.apt index 764e85842..6c56e05b9 100644 --- a/.github/ci/packages.apt +++ b/.github/ci/packages.apt @@ -10,5 +10,4 @@ libignition-utils1-dev libswscale-dev libtinyxml2-dev pkg-config -ruby-ronn uuid-dev From 71f0d6cf0bf3d91a7fceb13acb5b5692abd899df Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Fri, 18 Mar 2022 10:43:09 -0500 Subject: [PATCH 138/219] Class with final destructor should be final (#323) Signed-off-by: Michael Carroll <michael@openrobotics.org> --- profiler/src/RemoteryProfilerImpl.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/profiler/src/RemoteryProfilerImpl.hh b/profiler/src/RemoteryProfilerImpl.hh index a614ff20c..9c271feda 100644 --- a/profiler/src/RemoteryProfilerImpl.hh +++ b/profiler/src/RemoteryProfilerImpl.hh @@ -44,7 +44,7 @@ namespace ignition /// * RMT_QUEUE_SIZE: Size of the internal message queues /// * RMT_MSGS_PER_UPDATE: Upper limit on messages consumed per loop /// * RMT_SLEEP_BETWEEN_UPDATES: Controls profile server update rate. - class RemoteryProfilerImpl: public ProfilerImpl + class RemoteryProfilerImpl final: public ProfilerImpl { /// \brief Constructor. public: RemoteryProfilerImpl(); From b91608b6c3d89abb19f20273d2d6237aec690e46 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Mon, 21 Mar 2022 15:36:42 -0500 Subject: [PATCH 139/219] Fixes for main branch Signed-off-by: Michael Carroll <michael@openrobotics.org> --- av/src/AudioDecoder.cc | 32 ++++++++++++++++---------------- av/src/VideoEncoder.cc | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/av/src/AudioDecoder.cc b/av/src/AudioDecoder.cc index 2d71cf71b..561ce4544 100644 --- a/av/src/AudioDecoder.cc +++ b/av/src/AudioDecoder.cc @@ -122,7 +122,7 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) // https://github.com/FFmpeg/FFmpeg/blob/n5.0/doc/examples/decode_audio.c#L71 // send the packet with the compressed data to the decoder - int ret = avcodec_send_packet(this->data->codecCtx, packet); + int ret = avcodec_send_packet(this->dataPtr->codecCtx, packet); if (ret < 0) { ignerr << "Error submitting the packet to the decoder" << std::endl; @@ -133,7 +133,7 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) // (in general there may be any number of them) while (ret >= 0) { - ret = avcodec_receive_frame(this->data->codecCtx, decodedFrame); + ret = avcodec_receive_frame(this->dataPtr->codecCtx, decodedFrame); if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) { break; @@ -148,8 +148,8 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) // decodedFrame->data[0], which is why we can't use // decodedFrame->linesize[0]. int size = decodedFrame->nb_samples * - av_get_bytes_per_sample(this->data->codecCtx->sample_fmt) * - this->data->codecCtx->channels; + av_get_bytes_per_sample(this->dataPtr->codecCtx->sample_fmt) * + this->dataPtr->codecCtx->channels; // Resize the audio buffer as necessary if (*_outBufferSize + size > maxBufferSize) @@ -269,10 +269,10 @@ bool AudioDecoder::SetFile(const std::string &_filename) # pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif #if LIBAVFORMAT_VERSION_MAJOR >= 59 - if (this->data->formatCtx->streams[i]->codecpar->codec_type == // NOLINT(*) + if (this->dataPtr->formatCtx->streams[i]->codecpar->codec_type == // NOLINT(*) AVMEDIA_TYPE_AUDIO) #else - if (this->data->formatCtx->streams[i]->codec->codec_type == // NOLINT(*) + if (this->dataPtr->formatCtx->streams[i]->codec->codec_type == // NOLINT(*) AVMEDIA_TYPE_AUDIO) #endif #ifndef _WIN32 @@ -299,8 +299,8 @@ bool AudioDecoder::SetFile(const std::string &_filename) # pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif #if LIBAVFORMAT_VERSION_MAJOR < 59 - this->data->codecCtx = this->data->formatCtx->streams[ - this->data->audioStream]->codec; + this->dataPtr->codecCtx = this->dataPtr->formatCtx->streams[ + this->dataPtr->audioStream]->codec; #endif #ifndef _WIN32 # pragma GCC diagnostic pop @@ -308,24 +308,24 @@ bool AudioDecoder::SetFile(const std::string &_filename) // Find a decoder #if LIBAVFORMAT_VERSION_MAJOR >= 59 - this->data->codec = avcodec_find_decoder(this->data->formatCtx->streams[ - this->data->audioStream]->codecpar->codec_id); - if (!this->data->codec) + this->dataPtr->codec = avcodec_find_decoder(this->dataPtr->formatCtx->streams[ + this->dataPtr->audioStream]->codecpar->codec_id); + if (!this->dataPtr->codec) { ignerr << "Failed to find the codec" << std::endl; return false; } - this->data->codecCtx = avcodec_alloc_context3(this->data->codec); - if (!this->data->codecCtx) + this->dataPtr->codecCtx = avcodec_alloc_context3(this->dataPtr->codec); + if (!this->dataPtr->codecCtx) { ignerr << "Failed to allocate the codec context" << std::endl; return false; } // Copy all relevant parameters from codepar to codecCtx - avcodec_parameters_to_context(this->data->codecCtx, - this->data->formatCtx->streams[this->data->audioStream]->codecpar); + avcodec_parameters_to_context(this->dataPtr->codecCtx, + this->dataPtr->formatCtx->streams[this->dataPtr->audioStream]->codecpar); #else - this->data->codec = avcodec_find_decoder(this->data->codecCtx->codec_id); + this->dataPtr->codec = avcodec_find_decoder(this->dataPtr->codecCtx->codec_id); #endif if (this->dataPtr->codec == nullptr) diff --git a/av/src/VideoEncoder.cc b/av/src/VideoEncoder.cc index 23ae20ff8..05a26c911 100644 --- a/av/src/VideoEncoder.cc +++ b/av/src/VideoEncoder.cc @@ -123,7 +123,7 @@ class IGNITION_COMMON_AV_HIDDEN ignition::common::VideoEncoder::Implementation }; ///////////////////////////////////////////////// -const AVCodec* VideoEncoderPrivate::FindEncoder(AVCodecID _codecId) +const AVCodec* VideoEncoder::Implementation::FindEncoder(AVCodecID _codecId) { #ifdef IGN_COMMON_BUILD_HW_VIDEO if (this->hwEncoder) From c06cbb66c109bffed8746b5a03c15fb0de3c2149 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Tue, 29 Mar 2022 07:46:26 -0500 Subject: [PATCH 140/219] =?UTF-8?q?=F0=9F=A7=B9=20Drop=20all=20test=20main?= =?UTF-8?q?=20functions=20from=20gtest=20files=20(#322)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Carroll <michael@openrobotics.org> --- av/src/AudioDecoder_TEST.cc | 7 ------- events/src/Event_TEST.cc | 7 ------- events/src/MouseEvent_TEST.cc | 7 ------- geospatial/src/Dem_TEST.cc | 7 ------- geospatial/src/ImageHeightmap_TEST.cc | 7 ------- graphics/src/Animation_TEST.cc | 7 ------- graphics/src/ColladaExporter_TEST.cc | 7 ------- graphics/src/ColladaLoader_TEST.cc | 7 ------- graphics/src/GTSMeshUtils_TEST.cc | 7 ------- graphics/src/Image_TEST.cc | 7 ------- graphics/src/Material_TEST.cc | 7 ------- graphics/src/MeshManager_TEST.cc | 7 ------- graphics/src/Mesh_TEST.cc | 7 ------- graphics/src/OBJLoader_TEST.cc | 7 ------- graphics/src/SVGLoader_TEST.cc | 7 ------- graphics/src/SubMesh_TEST.cc | 7 ------- src/Base64_TEST.cc | 7 ------- src/Battery_TEST.cc | 6 ------ src/Console_TEST.cc | 7 ------- src/Filesystem_TEST.cc | 8 -------- src/MaterialDensity_TEST.cc | 7 ------- src/MovingWindowFilter_TEST.cc | 6 ------ src/PluginLoader_TEST.cc | 7 ------- src/PluginUtils_TEST.cc | 8 -------- src/StringUtils_TEST.cc | 8 -------- src/SystemPaths_TEST.cc | 7 ------- src/TempDirectory_TEST.cc | 1 - src/TemplateHelpers_TEST.cc | 6 ------ src/Timer_TEST.cc | 7 ------- src/URI_TEST.cc | 7 ------- src/Util_TEST.cc | 7 ------- src/Uuid_TEST.cc | 7 ------- src/WorkerPool_TEST.cc | 7 ------- test/integration/mesh.cc | 7 ------- test/integration/plugin.cc | 7 ------- test/integration/video_encoder.cc | 1 - test/performance/plugin_specialization.cc | 7 ------- 37 files changed, 247 deletions(-) diff --git a/av/src/AudioDecoder_TEST.cc b/av/src/AudioDecoder_TEST.cc index 91562d42e..cb5d09b87 100644 --- a/av/src/AudioDecoder_TEST.cc +++ b/av/src/AudioDecoder_TEST.cc @@ -152,10 +152,3 @@ TEST(AudioDecoder, IGN_UTILS_TEST_DISABLED_ON_WIN32(CheerFile)) dataBufferSize == 4987612u * 2); } } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/events/src/Event_TEST.cc b/events/src/Event_TEST.cc index 388bd6b0d..4a94d5450 100644 --- a/events/src/Event_TEST.cc +++ b/events/src/Event_TEST.cc @@ -297,10 +297,3 @@ TEST_F(EventTest, DestructionOrder) conn.reset(); SUCCEED(); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/events/src/MouseEvent_TEST.cc b/events/src/MouseEvent_TEST.cc index e954a6eec..43c3edb37 100644 --- a/events/src/MouseEvent_TEST.cc +++ b/events/src/MouseEvent_TEST.cc @@ -268,10 +268,3 @@ TEST_F(MouseEvent, Assignment) EXPECT_EQ(otherEvent.Alt(), alt); EXPECT_EQ(otherEvent.Control(), control); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/geospatial/src/Dem_TEST.cc b/geospatial/src/Dem_TEST.cc index a62fa1e90..ff62ef1cd 100644 --- a/geospatial/src/Dem_TEST.cc +++ b/geospatial/src/Dem_TEST.cc @@ -213,10 +213,3 @@ TEST_F(DemTest, NonEarthDem) ignition::math::Angle latitude, longitude; EXPECT_FALSE(dem.GeoReferenceOrigin(latitude, longitude)); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/geospatial/src/ImageHeightmap_TEST.cc b/geospatial/src/ImageHeightmap_TEST.cc index 3fc52788a..53ce7a9f7 100644 --- a/geospatial/src/ImageHeightmap_TEST.cc +++ b/geospatial/src/ImageHeightmap_TEST.cc @@ -99,10 +99,3 @@ TEST_F(ImageHeightmapTest, FillHeightmap) EXPECT_NEAR(10.0, elevations.at(elevations.size() - 1), ELEVATION_TOL); EXPECT_NEAR(5.0, elevations.at(elevations.size() / 2), ELEVATION_TOL); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/graphics/src/Animation_TEST.cc b/graphics/src/Animation_TEST.cc index 3ad3c5496..58513b4b1 100644 --- a/graphics/src/Animation_TEST.cc +++ b/graphics/src/Animation_TEST.cc @@ -272,10 +272,3 @@ TEST_F(AnimationTest, TrajectoryInfo) EXPECT_DOUBLE_EQ(0.0, trajInfo4.DistanceSoFar(2000ms)); EXPECT_DOUBLE_EQ(0.0, trajInfo4.DistanceSoFar(3000ms)); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/graphics/src/ColladaExporter_TEST.cc b/graphics/src/ColladaExporter_TEST.cc index 5d1af1b8c..0f4c3b20d 100644 --- a/graphics/src/ColladaExporter_TEST.cc +++ b/graphics/src/ColladaExporter_TEST.cc @@ -443,10 +443,3 @@ TEST_F(ColladaExporter, ExportLights) } EXPECT_EQ(node_with_light_count, 3); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/graphics/src/ColladaLoader_TEST.cc b/graphics/src/ColladaLoader_TEST.cc index 0936e9ed4..9f6103ccc 100644 --- a/graphics/src/ColladaLoader_TEST.cc +++ b/graphics/src/ColladaLoader_TEST.cc @@ -487,10 +487,3 @@ TEST_F(ColladaLoader, LoadCylinderAnimatedFrom3dsMax) EXPECT_EQ(1u, anim->NodeCount()); EXPECT_TRUE(anim->HasNode("Bone02")); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/graphics/src/GTSMeshUtils_TEST.cc b/graphics/src/GTSMeshUtils_TEST.cc index b9d8a0f96..d082e33e8 100644 --- a/graphics/src/GTSMeshUtils_TEST.cc +++ b/graphics/src/GTSMeshUtils_TEST.cc @@ -77,10 +77,3 @@ TEST_F(GTSMeshUtils, DelaunayTriangulation) // there should be 8 triangles. EXPECT_EQ(subMesh.IndexCount() / 3u, 8u); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/graphics/src/Image_TEST.cc b/graphics/src/Image_TEST.cc index 7b9837c2e..0e27a48fe 100644 --- a/graphics/src/Image_TEST.cc +++ b/graphics/src/Image_TEST.cc @@ -561,10 +561,3 @@ INSTANTIATE_TEST_SUITE_P(FlatHeightmaps, ImagePerformanceTest, std::make_tuple("heightmap_flat_257x257.png", 257u, 257u), std::make_tuple("heightmap_flat_513x513.png", 513u, 513u), std::make_tuple("heightmap_flat_1025x1025.png", 1025u, 1025u))); - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/graphics/src/Material_TEST.cc b/graphics/src/Material_TEST.cc index add9e417f..dc1c24a74 100644 --- a/graphics/src/Material_TEST.cc +++ b/graphics/src/Material_TEST.cc @@ -97,10 +97,3 @@ TEST_F(MaterialTest, Material) EXPECT_NE(nullptr, mat.PbrMaterial()); EXPECT_EQ(pbr, *mat.PbrMaterial()); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/graphics/src/MeshManager_TEST.cc b/graphics/src/MeshManager_TEST.cc index 76b198d3d..35b1d6413 100644 --- a/graphics/src/MeshManager_TEST.cc +++ b/graphics/src/MeshManager_TEST.cc @@ -288,11 +288,4 @@ TEST_F(MeshManager, Remove) mgr->RemoveAll(); EXPECT_FALSE(mgr->HasMesh("sphere")); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} #endif diff --git a/graphics/src/Mesh_TEST.cc b/graphics/src/Mesh_TEST.cc index e714c317a..9e246207a 100644 --- a/graphics/src/Mesh_TEST.cc +++ b/graphics/src/Mesh_TEST.cc @@ -151,10 +151,3 @@ TEST_F(MeshTest, Mesh) EXPECT_TRUE(math::equal(vertices[2], submesh.lock()->Vertex(0).Z())); EXPECT_EQ(indices[0], submesh.lock()->Index(0)); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/graphics/src/OBJLoader_TEST.cc b/graphics/src/OBJLoader_TEST.cc index 26625c51b..4fce91465 100644 --- a/graphics/src/OBJLoader_TEST.cc +++ b/graphics/src/OBJLoader_TEST.cc @@ -131,10 +131,3 @@ TEST_F(OBJLoaderTest, PBR) EXPECT_EQ("mesh_Normal.png", pbr->NormalMap()); } } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/graphics/src/SVGLoader_TEST.cc b/graphics/src/SVGLoader_TEST.cc index 37d79ba0b..189881cad 100644 --- a/graphics/src/SVGLoader_TEST.cc +++ b/graphics/src/SVGLoader_TEST.cc @@ -359,10 +359,3 @@ TEST_F(SVGLoaderTest, MultipleFiles) out.close(); } } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/graphics/src/SubMesh_TEST.cc b/graphics/src/SubMesh_TEST.cc index 69992a749..20772cf49 100644 --- a/graphics/src/SubMesh_TEST.cc +++ b/graphics/src/SubMesh_TEST.cc @@ -501,10 +501,3 @@ TEST_F(SubMeshTest, Volume) boxSub.AddIndex(1); EXPECT_DOUBLE_EQ(0.0, boxSub.Volume()); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/Base64_TEST.cc b/src/Base64_TEST.cc index 4aed870d0..b27046f99 100644 --- a/src/Base64_TEST.cc +++ b/src/Base64_TEST.cc @@ -49,10 +49,3 @@ TEST_F(Base64, EncodeDecode) } EXPECT_EQ(original, common::Base64::Decode(encoded)); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/Battery_TEST.cc b/src/Battery_TEST.cc index 6584fc5e2..30b9e9b9c 100644 --- a/src/Battery_TEST.cc +++ b/src/Battery_TEST.cc @@ -254,9 +254,3 @@ TEST_F(BatteryTest, SetUpdateFunc) EXPECT_DOUBLE_EQ(battery->Voltage(), origVolt); } - -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/Console_TEST.cc b/src/Console_TEST.cc index e946ffce7..e85a4b84b 100644 --- a/src/Console_TEST.cc +++ b/src/Console_TEST.cc @@ -539,10 +539,3 @@ TEST_F(Console_TEST, LogDirectory) EXPECT_EQ(logDir, absPath); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index 2fce02751..a3db203bb 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -653,11 +653,3 @@ TEST_F(FilesystemTest, separator) EXPECT_EQ("\\", ignition::common::separator("")); #endif } - -///////////////////////////////////////////////// -/// Main -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/MaterialDensity_TEST.cc b/src/MaterialDensity_TEST.cc index 184c7b9fc..55b0f5d43 100644 --- a/src/MaterialDensity_TEST.cc +++ b/src/MaterialDensity_TEST.cc @@ -67,10 +67,3 @@ TEST_F(MaterialDensityTest, Accessors) EXPECT_DOUBLE_EQ(density, 19300); } } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/MovingWindowFilter_TEST.cc b/src/MovingWindowFilter_TEST.cc index c3a026372..1c8955cd9 100644 --- a/src/MovingWindowFilter_TEST.cc +++ b/src/MovingWindowFilter_TEST.cc @@ -69,9 +69,3 @@ TEST(MovingWindowFilterTest, FilterSomething) 3.0*static_cast<double>(i)); EXPECT_EQ(vectorMWF.Value(), vsum / 20.0); } - -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/PluginLoader_TEST.cc b/src/PluginLoader_TEST.cc index 12e4d2994..dc11d198c 100644 --- a/src/PluginLoader_TEST.cc +++ b/src/PluginLoader_TEST.cc @@ -73,10 +73,3 @@ TEST(PluginLoader, InstantiateUnloadedPlugin) pm.Instantiate("plugin::that::is::not::loaded"); EXPECT_FALSE(plugin); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/PluginUtils_TEST.cc b/src/PluginUtils_TEST.cc index 4dfca4eba..5ef99d121 100644 --- a/src/PluginUtils_TEST.cc +++ b/src/PluginUtils_TEST.cc @@ -33,11 +33,3 @@ TEST(PluginUtils, NormalizeName) EXPECT_EQ("::ignition::math", common::NormalizeName("ignition::math")); EXPECT_EQ("::ignition::math", common::NormalizeName("::ignition::math")); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} - diff --git a/src/StringUtils_TEST.cc b/src/StringUtils_TEST.cc index 5c7b31b48..aa3ad29d0 100644 --- a/src/StringUtils_TEST.cc +++ b/src/StringUtils_TEST.cc @@ -210,11 +210,3 @@ TEST(EndsWith, PluralCast) EXPECT_EQ("oxen", common::PluralCast("ox", "oxen", -3)); EXPECT_EQ("oxen", common::PluralCast("ox", "oxen", -4)); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} - diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index dd31cfcb8..19b8623c4 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -424,10 +424,3 @@ TEST_F(SystemPathsFixture, PathsFromEnv) ++count; } } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/TempDirectory_TEST.cc b/src/TempDirectory_TEST.cc index a0c3ad7bb..14af3aff5 100644 --- a/src/TempDirectory_TEST.cc +++ b/src/TempDirectory_TEST.cc @@ -110,4 +110,3 @@ TEST(TempDirectory, TempDirectoryNoCleanLater) EXPECT_TRUE(ignition::common::exists(path)); EXPECT_TRUE(ignition::common::removeDirectory(path)); } - diff --git a/src/TemplateHelpers_TEST.cc b/src/TemplateHelpers_TEST.cc index 91580a1db..dd2fa4b0f 100644 --- a/src/TemplateHelpers_TEST.cc +++ b/src/TemplateHelpers_TEST.cc @@ -48,9 +48,3 @@ TEST(TemplateHelpers, ConstCompatible) EXPECT_TRUE((ConstCompatible<SomeAliasedType, SomeType>::value)); EXPECT_FALSE((ConstCompatible<SomeType, SomeAliasedType>::value)); } - -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/Timer_TEST.cc b/src/Timer_TEST.cc index 7f2e79446..70628df24 100644 --- a/src/Timer_TEST.cc +++ b/src/Timer_TEST.cc @@ -76,10 +76,3 @@ TEST(Timer_TEST, Copy) EXPECT_FALSE(t1.Running()); EXPECT_FALSE(t2.Running()); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/URI_TEST.cc b/src/URI_TEST.cc index 4b2301bc3..f321ed66c 100644 --- a/src/URI_TEST.cc +++ b/src/URI_TEST.cc @@ -1006,10 +1006,3 @@ TEST(URITEST, Resource) EXPECT_TRUE(uri.Path().IsAbsolute()); } } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/Util_TEST.cc b/src/Util_TEST.cc index f01c9e41e..15cf1c864 100644 --- a/src/Util_TEST.cc +++ b/src/Util_TEST.cc @@ -314,10 +314,3 @@ TEST(Util_TEST, findFile) ignition::common::addFindFileURICallback(fileCb); EXPECT_EQ(tmpDir, ignition::common::findFile("model://banana")); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/Uuid_TEST.cc b/src/Uuid_TEST.cc index 37a2ba7af..f0cc3a011 100644 --- a/src/Uuid_TEST.cc +++ b/src/Uuid_TEST.cc @@ -51,10 +51,3 @@ TEST(UuidTest, testToString) for (auto i = 24; i < 36; ++i) EXPECT_GT(isxdigit(output.str()[i]), 0); } - -////////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/WorkerPool_TEST.cc b/src/WorkerPool_TEST.cc index 5dbec7989..eddfe95fc 100644 --- a/src/WorkerPool_TEST.cc +++ b/src/WorkerPool_TEST.cc @@ -146,10 +146,3 @@ TEST(WorkerPool, } EXPECT_EQ(2, sentinel); } - -////////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/test/integration/mesh.cc b/test/integration/mesh.cc index a966dd5c8..ff4eaecf4 100644 --- a/test/integration/mesh.cc +++ b/test/integration/mesh.cc @@ -296,10 +296,3 @@ TEST_F(MeshTest, SubMeshCenter) EXPECT_EQ(ignition::math::Vector3d(5.46554, 2.18039, 4.8431), mesh->Max()); EXPECT_EQ(ignition::math::Vector3d(3.46555, 0.180391, 2.8431), mesh->Min()); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/test/integration/plugin.cc b/test/integration/plugin.cc index 74e0b850a..3c12bedb8 100644 --- a/test/integration/plugin.cc +++ b/test/integration/plugin.cc @@ -435,10 +435,3 @@ TEST(PluginPtr, QueryInterfaceSharedPtr) SetSomeValues(setter); CheckSomeValues(getInt, getDouble, getName); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/test/integration/video_encoder.cc b/test/integration/video_encoder.cc index 7368abb6c..922ea1c58 100644 --- a/test/integration/video_encoder.cc +++ b/test/integration/video_encoder.cc @@ -138,4 +138,3 @@ TEST_F(EncoderDecoderTest, DecodeEncodeDecode) delete[] buf; } - diff --git a/test/performance/plugin_specialization.cc b/test/performance/plugin_specialization.cc index aca48c858..bab559c31 100644 --- a/test/performance/plugin_specialization.cc +++ b/test/performance/plugin_specialization.cc @@ -228,10 +228,3 @@ TEST(PluginSpecialization, AccessTime) << "ns\n" << std::endl; } } - - -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} From d2660533903f5c90559e53e772ca23429d3a5108 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Wed, 30 Mar 2022 09:40:54 -0700 Subject: [PATCH 141/219] DEM improvements to nodata, buffer and other corner cases (#321) Signed-off-by: Louise Poubel <louise@openrobotics.org> Co-authored-by: Michael Carroll <michael@openrobotics.org> --- .../include/ignition/common/geospatial/Dem.hh | 12 +- geospatial/src/Dem.cc | 141 +++++++++++------- geospatial/src/Dem_TEST.cc | 41 ++++- test/data/dem_nodata_nan.nc | Bin 0 -> 18856 bytes 4 files changed, 125 insertions(+), 69 deletions(-) create mode 100644 test/data/dem_nodata_nan.nc diff --git a/geospatial/include/ignition/common/geospatial/Dem.hh b/geospatial/include/ignition/common/geospatial/Dem.hh index 7169db216..18813bd0e 100644 --- a/geospatial/include/ignition/common/geospatial/Dem.hh +++ b/geospatial/include/ignition/common/geospatial/Dem.hh @@ -58,11 +58,11 @@ namespace ignition /// \brief Get the terrain's minimum elevation in meters. /// \return The minimum elevation (meters). - public: float MinElevation() const; + public: float MinElevation() const override; /// \brief Get the terrain's maximum elevation in meters. /// \return The maximum elevation (meters). - public: float MaxElevation() const; + public: float MaxElevation() const override; /// \brief Get the georeferenced coordinates (lat, long) of the terrain's /// origin in WGS84. @@ -79,7 +79,7 @@ namespace ignition /// \return The terrain's height (points) satisfying the ogre constrains /// (squared terrain with a height value that must be a power of two plus /// one). - public: unsigned int Height() const; + public: unsigned int Height() const override; /// \brief Get the terrain's width. Due to the Ogre constrains, this /// value will be a power of two plus one. The value returned might be @@ -88,7 +88,7 @@ namespace ignition /// \return The terrain's width (points) satisfying the ogre constrains /// (squared terrain with a width value that must be a power of two plus /// one). - public: unsigned int Width() const; + public: unsigned int Width() const override; /// \brief Get the real world width in meters. /// \return Terrain's real world width in meters. @@ -113,7 +113,7 @@ namespace ignition const ignition::math::Vector3d &_size, const ignition::math::Vector3d &_scale, const bool _flipY, - std::vector<float> &_heights) const; + std::vector<float> &_heights) const override; /// \brief Get the georeferenced coordinates (lat, long) of a terrain's /// pixel in WGS84. @@ -133,7 +133,7 @@ namespace ignition private: int LoadData(); // Documentation inherited. - public: std::string Filename() const; + public: std::string Filename() const override; /// internal /// \brief Pointer to the private data. diff --git a/geospatial/src/Dem.cc b/geospatial/src/Dem.cc index f3e3d1e20..1e3234683 100644 --- a/geospatial/src/Dem.cc +++ b/geospatial/src/Dem.cc @@ -50,6 +50,9 @@ class ignition::common::Dem::Implementation /// \brief Maximum elevation in meters. public: double maxElevation; + /// \brief Value used to mark padding buffer data. + public: float bufferVal{std::numeric_limits<float>::max()}; + /// \brief DEM data converted to be OGRE-compatible. public: std::vector<float> demData; @@ -184,21 +187,31 @@ int Dem::Load(const std::string &_filename) // ignore them when computing the min elevation. int validNoData = 0; const double defaultNoDataValue = -9999; - double noDataValue = this->dataPtr->band->GetNoDataValue(&validNoData); + float noDataValue = this->dataPtr->band->GetNoDataValue(&validNoData); + if (validNoData <= 0) noDataValue = defaultNoDataValue; double min = ignition::math::MAX_D; double max = -ignition::math::MAX_D; - for (auto d : this->dataPtr->demData) + for (const auto &d : this->dataPtr->demData) { - if (d > noDataValue) + if (math::equal(d, this->dataPtr->bufferVal)) + continue; + + // All comparisons to NaN return false, so guard against NaN NoData + if (!std::isnan(noDataValue) && math::equal(d, noDataValue)) + continue; + + if (!std::isfinite(d)) { - if (d < min) - min = d; - if (d > max) - max = d; + continue; } + + if (d < min) + min = d; + if (d > max) + max = d; } if (ignition::math::equal(min, ignition::math::MAX_D) || ignition::math::equal(max, -ignition::math::MAX_D)) @@ -208,6 +221,13 @@ int Dem::Load(const std::string &_filename) this->dataPtr->minElevation = min; this->dataPtr->maxElevation = max; + + // Buffer to min elevation + for (auto &d : this->dataPtr->demData) + { + if (math::equal(d, this->dataPtr->bufferVal)) + d = this->dataPtr->minElevation; + } return 0; } @@ -261,6 +281,11 @@ bool Dem::GeoReference(double _x, double _y, // Transform the terrain's coordinate system to WGS84 const char *importString = strdup(this->dataPtr->dataSet->GetProjectionRef()); + if (importString == nullptr || importString[0] == '\0') + { + igndbg << "Projection coordinate system undefined." << std::endl; + return false; + } sourceCs.importFromWkt(&importString); targetCs.SetWellKnownGeogCS("WGS84"); cT = OGRCreateCoordinateTransformation(&sourceCs, &targetCs); @@ -284,7 +309,7 @@ bool Dem::GeoReference(double _x, double _y, } else { - ignerr << "Unable to obtain the georeferenced values for coordinates (" + igndbg << "Unable to obtain the georeferenced values for coordinates (" << _x << "," << _y << ")" << std::endl; return false; } @@ -399,60 +424,60 @@ void Dem::FillHeightMap(int _subSampling, unsigned int _vertSize, ////////////////////////////////////////////////// int Dem::LoadData() { - unsigned int destWidth; - unsigned int destHeight; - unsigned int nXSize = this->dataPtr->dataSet->GetRasterXSize(); - unsigned int nYSize = this->dataPtr->dataSet->GetRasterYSize(); - float ratio; - std::vector<float> buffer; - - if (nXSize == 0 || nYSize == 0) - { - ignerr << "Illegal size loading a DEM file (" << nXSize << "," - << nYSize << ")\n"; - return -1; - } + unsigned int nXSize = this->dataPtr->dataSet->GetRasterXSize(); + unsigned int nYSize = this->dataPtr->dataSet->GetRasterYSize(); + if (nXSize == 0 || nYSize == 0) + { + ignerr << "Illegal size loading a DEM file (" << nXSize << "," + << nYSize << ")\n"; + return -1; + } - // Scale the terrain keeping the same ratio between width and height - if (nXSize > nYSize) - { - ratio = static_cast<float>(nXSize) / static_cast<float>(nYSize); - destWidth = this->dataPtr->side; - // The decimal part is discarted for interpret the result as pixels - float h = static_cast<float>(destWidth) / static_cast<float>(ratio); - destHeight = static_cast<unsigned int>(h); - } - else - { - ratio = static_cast<float>(nYSize) / static_cast<float>(nXSize); - destHeight = this->dataPtr->side; - // The decimal part is discarted for interpret the result as pixels - float w = static_cast<float>(destHeight) / static_cast<float>(ratio); - destWidth = static_cast<unsigned int>(w); - } + // Scale the terrain keeping the same ratio between width and height + unsigned int destWidth; + unsigned int destHeight; + float ratio; + if (nXSize > nYSize) + { + ratio = static_cast<float>(nXSize) / static_cast<float>(nYSize); + destWidth = this->dataPtr->side; + // The decimal part is discarted for interpret the result as pixels + float h = static_cast<float>(destWidth) / static_cast<float>(ratio); + destHeight = static_cast<unsigned int>(h); + } + else + { + ratio = static_cast<float>(nYSize) / static_cast<float>(nXSize); + destHeight = this->dataPtr->side; + // The decimal part is discarted for interpret the result as pixels + float w = static_cast<float>(destHeight) / static_cast<float>(ratio); + destWidth = static_cast<unsigned int>(w); + } - // Read the whole raster data and convert it to a GDT_Float32 array. - // In this step the DEM is scaled to destWidth x destHeight - buffer.resize(destWidth * destHeight); - if (this->dataPtr->band->RasterIO(GF_Read, 0, 0, nXSize, nYSize, &buffer[0], - destWidth, destHeight, GDT_Float32, 0, 0) != CE_None) - { - ignerr << "Failure calling RasterIO while loading a DEM file\n"; - return -1; - } + // Read the whole raster data and convert it to a GDT_Float32 array. + // In this step the DEM is scaled to destWidth x destHeight + std::vector<float> buffer; + buffer.resize(destWidth * destHeight); + if (this->dataPtr->band->RasterIO(GF_Read, 0, 0, nXSize, nYSize, &buffer[0], + destWidth, destHeight, GDT_Float32, 0, 0) != CE_None) + { + ignerr << "Failure calling RasterIO while loading a DEM file\n"; + return -1; + } - // Copy and align 'buffer' into the target vector. The destination vector is - // initialized to 0, so all the points not contained in 'buffer' will be - // extra padding - this->dataPtr->demData.resize(this->Width() * this->Height()); - for (unsigned int y = 0; y < destHeight; ++y) - { - std::copy(&buffer[destWidth * y], &buffer[destWidth * y] + destWidth, - this->dataPtr->demData.begin() + this->Width() * y); - } - buffer.clear(); + // Copy and align 'buffer' into the target vector. The destination vector is + // initialized to max() and later converted to the minimum elevation, so all + // the points not contained in 'buffer' will be extra padding + this->dataPtr->demData.resize(this->Width() * this->Height(), + this->dataPtr->bufferVal); + for (unsigned int y = 0; y < destHeight; ++y) + { + std::copy(&buffer[destWidth * y], &buffer[destWidth * y] + destWidth, + this->dataPtr->demData.begin() + this->Width() * y); + } + buffer.clear(); - return 0; + return 0; } ////////////////////////////////////////////////// diff --git a/geospatial/src/Dem_TEST.cc b/geospatial/src/Dem_TEST.cc index ff62ef1cd..95174f8c0 100644 --- a/geospatial/src/Dem_TEST.cc +++ b/geospatial/src/Dem_TEST.cc @@ -56,6 +56,13 @@ TEST_F(DemTest, NonSquaredDemPortrait) common::Dem dem; const auto path = common::testing::TestFile("data", "dem_portrait.tif"); EXPECT_EQ(dem.Load(path), 0); + EXPECT_DOUBLE_EQ(dem.Width(), dem.Height()); + EXPECT_DOUBLE_EQ(257, dem.Height()); + EXPECT_DOUBLE_EQ(257, dem.Width()); + EXPECT_DOUBLE_EQ(111565.57640012962, dem.WorldHeight()); + EXPECT_DOUBLE_EQ(87912.450080798269, dem.WorldWidth()); + EXPECT_DOUBLE_EQ(-6.2633352279663086, dem.MinElevation()); + EXPECT_DOUBLE_EQ(920.762939453125, dem.MaxElevation()); } ///////////////////////////////////////////////// @@ -64,6 +71,13 @@ TEST_F(DemTest, NonSquaredDemLandscape) common::Dem dem; const auto path = common::testing::TestFile("data", "dem_landscape.tif"); EXPECT_EQ(dem.Load(path), 0); + EXPECT_DOUBLE_EQ(dem.Width(), dem.Height()); + EXPECT_DOUBLE_EQ(257, dem.Height()); + EXPECT_DOUBLE_EQ(257, dem.Width()); + EXPECT_DOUBLE_EQ(111565.57640012962, dem.WorldHeight()); + EXPECT_DOUBLE_EQ(87912.450080798269, dem.WorldWidth()); + EXPECT_DOUBLE_EQ(-4.7324686050415039, dem.MinElevation()); + EXPECT_DOUBLE_EQ(921.4481201171875, dem.MaxElevation()); } ///////////////////////////////////////////////// @@ -166,9 +180,7 @@ TEST_F(DemTest, UnfinishedDem) EXPECT_EQ(33, static_cast<int>(dem.Width())); EXPECT_FLOAT_EQ(111287.59f, dem.WorldHeight()); EXPECT_FLOAT_EQ(88878.297f, dem.WorldWidth()); - // gdal reports min elevation as -32768 but this is treated as a nodata - // by our dem class and ignored when computing the min elevation - EXPECT_FLOAT_EQ(-10.0f, dem.MinElevation()); + EXPECT_FLOAT_EQ(-32768.0f, dem.MinElevation()); EXPECT_FLOAT_EQ(1909.0f, dem.MaxElevation()); // test another dem file with multiple nodata values @@ -186,12 +198,31 @@ TEST_F(DemTest, UnfinishedDem) EXPECT_NEAR(7499.8281, demNoData.WorldHeight(), 0.1); EXPECT_NEAR(14150.225, demNoData.WorldWidth(), 0.1); - // gdal reports min elevation as -32767 but this is treated as a nodata - // by our dem class and ignored when computing the min elevation + // -32767 is the nodata value, so it's ignored when computing the min + // elevation EXPECT_FLOAT_EQ(682.0f, demNoData.MinElevation()); EXPECT_FLOAT_EQ(2932.0f, demNoData.MaxElevation()); } +///////////////////////////////////////////////// +TEST_F(DemTest, NaNNoData) +{ + common::Dem dem; + auto path = common::testing::TestFile("data", "dem_nodata_nan.nc"); + EXPECT_EQ(dem.Load(path), 0); + + // Check that the min and max elevations are valid for a DEM with NaN + // nodata values + EXPECT_EQ(129, static_cast<int>(dem.Height())); + EXPECT_EQ(129, static_cast<int>(dem.Width())); + + EXPECT_NEAR(7464.7589424555326, dem.WorldHeight(), 0.1); + EXPECT_NEAR(14244.280980717675, dem.WorldWidth(), 0.1); + + EXPECT_FLOAT_EQ(682.0f, dem.MinElevation()); + EXPECT_FLOAT_EQ(2932.0f, dem.MaxElevation()); +} + ///////////////////////////////////////////////// TEST_F(DemTest, NonEarthDem) { diff --git a/test/data/dem_nodata_nan.nc b/test/data/dem_nodata_nan.nc new file mode 100644 index 0000000000000000000000000000000000000000..5b9048a478cc092874bd59a0c31a4ca3744f2f73 GIT binary patch literal 18856 zcmds;d3aXU_3yV@tpi#dYOB_I-dJ0$h#|;iZQZY&S43qDj)<HH0m6`kBp@?81W1^} z7-kML$mjr6EOk>+sZ_=3SFO|OptV+8)DGJ5e%4tp4!z#{+}=OU^L+WPwa&D^d#%0p zdBdBI;kCyY{W%#r792B5{WfBcR{I9188{A{(y^j^WNCR#Sw(rZ9F=QM=y>gAty;<z z#(b$$n7t8}_yuAIty>nhyrM-=RXVh^q`I_!P*hk{czI!~%Zu8}`ClGXR$Wt3l|D(X zvAsr=23<<3f}##VQL8IkwZ5`7MqyFWl|g#9j#Z^4HKi8^{Y!`SEwAWbQd82myrjIS zWqH3ALCcmcgG;!_Dd0=s_-jha`?td2C)K9r$68JrT2Vfb%ZHWf0XgT4^eJ*-&~?PH zyGpA9y}`+SuPqxo^yZSGBlP6sIro@}KE1Hnz^bzTeTS7)R+g0yBqH}Yv!<$~yn1A5 zRds3KVWn05N)Rb0bKMWVf$WC=%Q<qM%(vk5Pv84L#`=GH#`&VFtY$?2(!Lb~`t~DR zRV71Z6lML(O3LN#<P03+@AP8J)ShB8!ARHGt@rRQY7IoV;$&uMy2c|}#tpra?H z=jh?|-}8r-)O`Ht%BqUNrTwH<`c_nx4J`Zgvp;oBP~ER&XldU8CH<JBz9luEH{|p= zSO4)J4_>%txs>SV<?ghOJ&P%f0cGW7^33!J=Y3`_DyzzdrTO@HCjN8$U#Tt~Rz@xd z%Sc9*r8TbeaBHtUOO`BI%3aSWV+lxN2OzelwEQ!3VXG=OJv`#3dd@qgx{}FY>Z?iz z$Y7|8V=KG&>~?*};@$;avtd!Y;PT+6UR{DQ73HNttHQ1YEjs18b^7>dL5nck>!vQ8 zD>L3VD;expQr<T#sTnb>Z>tVP?Fw2HcfT&zvs>q|cR|OYB~?SXP5ZWO3tF^o-L8F6 zVOthnQHLv9c4*hWZHM+nty;J5(7r|Xre4=|>)E;2ZM_R}-HSUFv?yp-SlGUxPoK{@ z(zd8=J2}$5XXh?C2GXgjw6y&0vVMaKS`>cH>Fqldwvy9t>e{(i?}GlN138^DTNbuz zcSW1lMIDOTwCd2|iq@?^=h6<Xii$pe3|D+ShHlsAI`-<^t!wXsUY{(kF8Re(z$mjl zvt4q%ay@$&e7Xv?^ccry&iKz|QPASDRz<BpbIPa7Qe<@K(4p;TPWa54DQMBAP<}q= zjH4?i9fMBJu+o|;=BCx>O+}&3V)oX~)JaZPWI>BuwzwBLN`q-ZP<90^x_0Z?>$=ZN z9kbS|kQt@!nsq9zNM~$7Mb$8^L({%Zn|AFB+eo>zY+ZCk+xD%CTD5A|woRL$Fla+A z3OQC7T=u^o&R<V|&8@>ex?ddKM~?0jr&ia{Lrbdq|3}aI+NXNLsJ{IwDysUImDAC= z)#tA1b4LZAoD@_H2tK)9E-}ZCV6msGG~eSzAU~|xV>U5H@bNw-V-);1V;ueeGRD#W z-(x)XR%1GKmwhB;=LoB<35UY;uCUyha2&p14E6|b!eQVF?C)C>{s8`gG2u1X9X&RD zl`~->xCUgwb)I9^gx3li6I#$3`wH+~XTtXI_dqM`5Xe0`fPr37hCK+ow=?1O&d50b z8-$g{gk!mWEZ0xK9wR=O6qv9!G2uk)8ppUTW5&*T6L!Lvv2@11-Y71|zQ&>l|3+uR zuHXiIxhC|gzdf-ca3wLB2Ww5(4#+%o0L9ony$NrHOW>QG-dpa+8&24R*kCXQjKi;j zhguU>3a|(GRC_oUzt)-11u${p$zW1!!a6X~nQ*i*;q9QSH(__Ui{lxf3%)=!UT4W8 zoP*`rz2F;RIrlnnjbYsQSAn+JqUTy5*9oq5nlG6vnYYeHpLg`$;&-!*8y@aWSOz4Q zw>cB`GbZc{->x|g$773z$$75xCY*^s-Jl6uG>&r24}N6PB*5<hdSc7m_5h-{lR*Qv zoFmWb18(*@M#;nXuzvuuRyAISeWOwBVvClJPUq!XY|$xNu7{68=1`v5i&!7HH@-aU zCP02CdPALA6HbMvfrh|@Gn@(MMEEgrxE6n$<sOFXz%8C}ik)Y<x5PW)3l|HV>W_%Y zxgFuFg{{`3%t?1*N9Vp9$7IYhC)WzR-cRz^8T$s82fmyu^O@?xm+{D0(sAT#Z@4kx zcu?=iPh`SbR$1~Sx+dd`E}4tlu~UfcnIps8U<-Ezy|JZ6<y@(S0oc7Q<M8AK$nhbD zo&?JAJ6oLtsnxF7*TI6$?o&FjWj)FLrS^J)kLQ>8E%>*2U4u7&fi(?6<6!hkACa|F zhd(Q(2J!3Q3j6`qgm>WI>8N4&4o@CHAFHuDVVSSU5Qim4cVd@;0obKh`$i4^cx>Sj za2H42fS&kLkJrP38@)pEE9<nY(_Htk`5eKlo$ywpH6df8Kghk(^>hcv1b2EJ`*@DY zdYX=Zx7GUThb{dfa>_F1{>FrN!Tl`kwfC07{RPBCO9dE$FWO}u#v9c%1|I8l-SsAZ z7rxZ*t;Bl3qCx6WY+0MKetP2f0<u0ui)gqVzc(!RxZR{kHQk9V_Y{_Vjra5lSe`i$ z48Sinj2*iKmhp?mQv5P7(CT?*#0G;Q#6-tnL%#&o_@aNP*S(?+zZTm8xwnj~4;bp0 zL&G|=JOjv@zXksm_%?Wu)wpQ6LxA50mbwuCPM^+Os!3up))H98I{>>HTgFrd%e~TZ z;}7&4&-*g&q1eL=`G5tLUaytwhl9Hv`#3DRCK~1{G2s*ecD>cTuf%I!<=*4KXvciP zw}3uI>v#|`nIF;6+cJI-fppydlN#%r?-7z8(IMA~u5#?**fL*3vCFXsdmVo{Tp=+a zbu}Dc&aDwx6OP0m1CP#Q1b%Ij-zQ?$DE>67bucZ^eWcWIe_}&`%*9wBW52^N9=O`; zy=4rdL-INh7Cn;xQm6GVIqzq6Jq;ix;~q*(bcikEtil#l8|EKh^vK$l@yb~57T=)* zj1gFJ0=pOlnuBrpld)$dCY&7s{MnwhYSEXFV_0%6^COVC5?y_O<WF)o35+nRS!$sS zh(5`~Kmm5zi?I8Dfi(?sT4OS2k|UWfssE!nA3<DlaW_2H1EYOp0_=d~Le@%c%$$1q zKmKIwI_%nrb%Q-OpqCmGHYNa`6S1$yJlBx}fmMw3x?Y*@v<4<8nsa%!oHyQRUZqaU z@Fib^Veton(tMr<V-GX>c|uq;NsW!PszcWKC?I-jgFF((4{9B36q6&~r2>7wnnrAf z)jFH!OgIl;FgH?eBsR-)Pk20#-Z0*3Pmy&gb6aK5<GDA!JVVx*jAgiIE#S*I<-Bry z8TSxuv`zHbtSiwM4j?94hj=u=ql~T{(IU^QjhK6QGMHjO3>-SVzAsKqbe+sJ<bc>5 zFb_02I5yz|tA1mk?_bmKCju99Z&)C?m-&;N$T%m(ns3R!*p65YcD2o~ckJO#`)vg= zu1PhO5+7jlYYiK%X-}wex<<zn6FrlSYN(I%eT!H_0=)7p;<Jg(w&)2|$0BFKr5;_0 z2^U%F4tqNGRBVCN*5n8TjMuBKREO0XmflmBpoe1&Htj)@+X>h*=aRP(*wt{AO~;*T zD#IUWR8yKi>`G#HdtE0k;+_e5@aqE||8%3ZH49D=>spzMKQ}SqLT|#w@Nx^Vmk0Rp zG>0ba>6Ysa_X1NL9O*ms)EIpppIE)&Sl$=ilkg=^&Z;J<*Rj~5Z6wI&FV!^6X>LT1 z)TZbi1<N&)uqP+z0rGqq(+n^x&~+~LC38RD0(e0}KERT|gsZIySH&h==`~ji@J0Vj zr~P3zJj3g~W(Ud*v9g>e$7gwTB|JaYeAdCW#A*%N9Dv6G>045>BlGL&i>RsEYTvH% z%A?UMb0PVzkI7F$ega(wGRLzcauc&&uooEW3|s1IaYR0_mnY-~z6V|tkuM<YDXm9K zZGuMp1&-Vr?i1l-&q~OBjBkL|8kX~>0jbTYf<Svl9d;e|Bx6En^R<Z0*wfk@>Bt*# z$=zt;vKL5>rPgK!S_3mZ&&8jU@GQqz;6(vr_0*X$;W9^^;Y+Qpfkn#>i!Nir^$EuV zj={0l+FTH;&L)Relb@GJk1Zx9kXoHfY&tw6(0OfuMcWj|oP)F$@m)X-+O$unnnZ{6 zlCi|bdw^euFPhSvB+MIF5b<oV$nwm9oFuyTR}xztn{XXiZ%nuue=GLA*!Ow0?{VlP zwh>-sm<L#LD)(6C(Hans@Eth@i!GXA$#0`)4zXv0Y1j?1*3VRUilwGtSzF_=M|sWD z1Vb$17;zVKe!}%$=cvh|!vSJ)|E1o9D*~Pi;)ro3=)m6O$%!-J7Hh(7*bl@e+=c&O z0vi)<$KGZ+FV?)Rhu3=5vKrnHFeeUOU@i9A1REB;OC7*&0+PGg3EB+f#GV@HxJgbp z&XJeAris{+!zlsq)V0-n%JVm1FOGE1mUx~+Oth>88}K)Rd$6||6W*W4eb$7#!B6lX zfgc1v^u!YCG0=M4ihqwqUyM#-JK)V=jpx4RQ@Zd)^BM<;ud>uXzT~O_`=}=8&}Py- z9C@s>m}3d&1n76#OV@j?oox|yBCy;u;JHShz1dS!iRNT`#JP^K!#^VSaA3my@FDQC z*n|i14>=S1NVV-Ts!wuxe`3Ntmb`j$j4wGBt=k;)6`>E7yooMZkIUhiM*G#YSjRjC zo<vM^)FxVc5}WDCsc?iQu-r2CMDM*e)_K}$&=K)$iG%wBU;y?W&zRvyz@Z2PCVat| z@I`0B*Q^Pjh9&-JY{CPH2_FLwgZ+l<ELt7Fz87r6e*k|6*cMY4o_dcMlVNVL=UDBL zGw`P+`JNHv_pj)St4Zo|mZK*a-7DtAnwK4(^&L<j_}hWZnbg^ig!#nY1@8fS!9Hig zpTbXi6Fy_eQDDMX;9r8@fLE;vUy4omoHyaK@Y4x3X*Hh*h&>#UCt?pfY8dRn-vvv~ zWDTwG<S5oY(P;8DMSME32K;)j>t~A9JWUTYmyMD3xF*h7Mr@s9{epX9?hSAECfu25 zf0p{+YtaHf5>QLnPr=V6j6E{p%g%(a!@o5qd>i}iz=Xf{#PDB<(FOlcz%_{p4?DD3 z6FvdFG2uh8>UjWri=&TN?GG!6FHX>f-{jd-obKB*u&0A*27US3n;EeO#OwiJA@ODS zu~V$`tkXc(?e-WwR@d`G#69sxj0qoypS0x0laGYlfH&~pj!pOn?7svi{44gm;CJ9R z_^&5u#1@S&dGuLw2g`cfhb{S+XKjPm#JcybhF3Z56U!|99W0Kt#%2a--;kas2xoI_ z9>?Y<=m(1(_we)`qx;QP{A~d_0=p7=o7ee#)H1&@bMEK`kqO@nO!#|)4r{^>us=+I zGvPn^-#9}|?DvTMF#y;{u;0K=A`|`s{2cp<m^~n&294JAPOtrcTg2RgwNCfs<=9Is zc?vWibKqG)swdSnhvN%4z6f6IwZE*!UKh~kzz%Sq)BHS`pvSXzz*B}=iy4n&T=;(k ze-6k?gpS1IjswT;G`TN1P-wz`Ydrj$<9Mu^-^G3l{2IJO>>0~EVebd~z=M(IYkQ(= zKs2oiG*?SGCiOQDztNy6{zQ}HXc4g`F>4X5^jwd>Dax-U?E4bxA=c+ShJPs1T9N!D z0X3CSU&e(03eZsqyvdy?h)wP!VkcpLxjQ-=(bwGMj!DR!GvP<E3E$`1-+AtX|1|zj z!6V>d%i40<kG4j-zpqPlpIQnpA=U)uTlyQAZNJ!>7A9JAOC9|o);(^E(e){7XlFz} zhxf)N{Bc5$!+!$*7Z%{Z;aMBx;h2aV#F~#2$wf13a;GLH_mxVMYi_VT`EukA|Aa!V z$A3oYwc%Taei57Sd8@T|(6g?v_Xhg>ZTK5v)`MYuiPqDyK*zm+*j!?BG*9UoY9h82 zEO+G9(`O>`jJ*|X$KP#r@7SMc&;A)KHS&@%;jb*~0e&xHjE#&JK6$5(|8#3|XT&CV zR(F&8YIBo2lVe|T96JIG=QU@IIo4mS{qZfY``VL{&f9)Ny*quM*pleG(?)nTSZQ_s z7khevVNC(n)I<+22y~r^o|V|r8`i`3z_KpywfWu<vqutp((qjPm4N&>6TSofg#V#u zjFl#L8sk2l@t?(*&#@+VF7~+`JFh#OnB3QheHA_f|I|v>*G?1u!=lM+|NlAnI*fgY z*nyb32=w_o9d(1h8N`-6C8}wO(>-;5K(4%MY9hA8a-7)e7%li)@wbEfzymRP3N%lT z;~&O<DIz~c`|+O*YduQqD0hlytUFEa?7-x{PV9oiCYON=ENE1|03GKwM;HESo@>1c z|CTT(-0z5Ee~WkqIGB*D7)_3G!1uvB;LR3I0W}p-TVQd5rda#-{Jf^cPWzqYDE9i< zW}D$25n3F*l-Q3F`ghFSVL$75M}U8c|6as+0(u-cA!f}aT4U!h-fu=G_wAh~ckvOE z`>r#&O9NogMf@C(cH*ZNvi7i#vzn{-jJ`v?5TFbDr;c2~dp+Z@%qzGz(s8bG)Kv@& zdc3|{ED!RvXVL1k?$$;6&ajzt<l0@Z-0xvWZ^eH)(08BLtnROW!T)zmjx1w?rRL6# zOz!+Z$9|bNxx&LHS7d=Rxyu^Ko1q4=zs9*=-ANzm&b3F-#oGF(XU}%@iiqbJeQ!Jj zKWLfbKx<}aqCI_mte@dxN4`93DM&xx>w2<ZJWWmLTnv^Q-JjP+`nhwvr-#Pm3V&Zf zU&VjQ(H{(Zqovp3f5d#7M)Gu+eusTVLR~TM7sMua5q9gy<l2&hc7-O_#*nk-)Z$@| zflPPS73WB9n-x;Kmc5`+->cq8sBfO}B6v1nZ8_>C(Vn#x-V$qXUS;SNmL85j$)~?h zN%J%>(*1Z9yvFGJ(0c4mvEJi>ME3{}KV^6)^V;v;cdRAGnQ98q)To-izLT}&88?3G zBdVtz;}vaf;LC|$vXk0$)MzFBJ*HO_>U+kQxc7%v-+g}_=sVz(JZB&A`y=ha+ws?f zbur_GH+lLt_Vj??8RdJ#f<)ghRz&29W2^BufSrMUu6_{Shri#V3A`Ai$?#myzT#K| zj8l5V@rUUVjPYz4Yh-fYGK~Kyyven)Xk_e{#pDWHcm(a>%<klg<0o?LxWZ4~YhUF# zFGPIy547jrhrJzp3)mRz{=31bwz;0q7{nU#nx+t+fiK#YfHhv%;EsqjY4siNA!7US z4>|e~u~*<<#q@H+JFBN>CFlaD1?)?W^l|L-57YN5P3}A0K}>G&FKt9Cu?*))E~QsA zhfn6%@vuqso-$`IJAJ1(NbHB$yFI-eY_U4N4H0_q*W<4>^f-qGr+se>u{vUnK>GbE zuY0bnr)|XKKKBOte*8qNz3At}Unc&BWzUV!Wf)I)t)J5v^BIlwHO6@X<IF@Lrq+lR zz=6{>cXlEA6XpT`#3QW9Abpn)f9KdIfYkVN#6;7NjP6leiQR+05lAhqclbts2eTZ1 zzEMpsq85oa5?d6r<^t8d!c(hG`@|24J#6^AmgsxlVeBV?)W@6P51u+Sj4MJ{a~-Gj zi?1`@^BMbjjQPAu@)Dz!_*nt(NZ^!+x;u;}&zx|dzef5w|D}Mr15YIS8F3e!)?Tdd zYnwc}0(3>Np|&hz_n*8QO~4mj^~C1I`dMTlyxgMAkt<l<OLoVstBAc9`$6#IfZB*z z$KY2s-B;3m>V%jvg3}o1>ENu0HRC{_`8%x<E#SoN)Eh9B^t&S_{CmP$3iuoaehy^q z9*p#PyFF_g><qN$ZH6}i(X+{tD~~>SNvwJLB5E3qz6t281(K@<Fas=hx?jZ!xs7x^ zZnn&m(f7ZfU_XZ~c}hILYakcqaQdE;e(w8nOfGh6jY&T|h2y-3=T0=bpB-DtJ4nF$ zuhn<pBk)_Xz8k-g@XiwHd+Z}{nj>P{9kquqdD(=&5#DMT8}|AL<nvTdY^KxSzs~Wj zEer7H8vRVtgue<~uGtBGnCRyksllf#bx-W2Sl?;i!)9HDe+U1zj2$f}1*+%xgx+`r z-Hy+~mbC-F4~vdBjed52-Rt|Y)b!H<?|TuoN9=xhJJ^~qr}&#=fWO7j!xHW5GR6h@ zzBkvhKjANosK)?!?di*~S0`GtTi_i|-~U9@Zm`GbXPlqL^b7DDc-`?C9K0RTlM{Np zQEkTSJL*UH?_<AXwO_sszv}3rhJ0f`4?hE*Owa=!13&i6rDa{iTVk}pn<9X{C14y0 zbp$U2jb7K&e6PPRLSwiXdx>yBzmGT<djpU>Z!z2(mO9vK`8@%?Jntuw_QQk3evbW8 zLj8E1_jinb*84+1ZANHy<OF`%^8045d-uyR?>~w5o2OvW@u(p`vEKJbUOzwWfVW1P zpACk&#+JSy^Su<z^`B@$TR1n?TAOd_iNUAV5_Zh7^-+Fa5^Tqu1?*W~-~IO*`aHgj z<4LRUPcq;ClaPZz`~7RN?$a+iG!qjIKO^?M)z1_My}r{uN?f$;i?p}yvAQpbu3e62 z8qL>+IKPJQHzzvhD}uD%CVFDCt^VF+me*ds(CNF<a*iz}7F*rZMAsVpwfLLh9foH_ z%puql=;wj`*pGSrz0Z?|vEx4*14m84Pvaj-*mvMZ-~%28`@xR`kg&hT`rhyWu^kcp z!09vY4YWQs8~yCM((1c|j7i421~lc@(-%?GoQPbZaYjHr##)05;Q3&w<GsSu_bf>8 zW99~I2GW1FJLVF8AkdyDb+|9lc|QOjjDgQ{L=N#EGy3^*AND@%y^cJ4a)bR4ygQ-Z zfZTg)%(LM20ltS5{medx*tCefCt%z*eJ2WMCh0qCT6+z#{_cF5qo)Vx0yBv%vf2xq z68c8O8pB`awf@$@vaU80yC>p#!iN44>)y3DpoWM^Z9nX(sThuc)8h|e?*Y5K&d2@4 zMaM3S4q{utra=3^MmUaGKkzcE@7tooc|J2m{J$oc<@Eod>+<{4WR6XV^<7=oRDGiP zYJ}$nXphsrAI`V=oZ-jVs{?(`x<q^8`bgKW=-cUad@}bk@4JcZg2k6(_r~Nmz;?_B z_O?Xxy*<)iw81cE*c+_oXgT&uulwX|?2*K44d0CdW!Pij5pcEDUS8+*9ik!P|JjJo zGN1fk;mkzmK;~fq#}>m&;Z*^;jA~p<Oll*B*Cv|3O@{d<w!;IfTDK&`4Ee;DoNg8b z+HYj+a?QF3V6Vkqolq0_YaGvnWe(R{?O&6yD-7Sa#P8wsyRf%lm*;!L1dh3g{KRMj z4IU(l>4v(*o=I%BQ(a5o<*}}{<yP0)iiB8z?RYkjajeJR6e~6+_}J?Nf%4i&?X_NO zYYlO^b`|kB$<JF18|D&T>6GVVPbD@AKZ3h>{eFEH{M)_eX$-NkR=+DX37!&j4LlXD zhwBq+*l3?$7O=MBv}dNje_9ez<9RH0nnS7i6+rZ@iB;cfI0maC*yQU7f2G8{j$3js z<6e<~7+^2PUS{BcdxLq7Ikx&exEiD1hb@LX0_)Phi<s!KzlfSfpzChn68Z?J3$&lq zdHsLv$uYT#_}z@tx}I<J_cYUqFCw-$B6orIk%g96tg)qzdh}YSvc{!nE={y|Es=Pj zv1Jky-vFz}mpRTQwkXm2t%$VlXTXy|rPuFR4mW(C&GGjFR{yr;s{DFlU8UzZ;u8%$ z5r3RVBYrJ@Exy$6teCMUdhcnTdW`7x1~~2cvlD&Cng=fkh=C>xVqMoM=VObAFY<bP zv4Ne|muO895W|-HEQncW5pk#Yk$Ia5W)Z75j4#l?ZRqaPzrRUqZ;;D>SCr$Ui3`SH zi>?Vazs>^fhf>o`M)gdC=O%!d=$j6U?m3ozk`Q;g7tAxdC(iS*Kzy6$Kx66HBgXG_ zeij(6x2j3<xq<lF2*9fxYYmn;61}r+`hA?R622>+r$I))H(En%B#=53jLl<|rxvki z#yn3Dpdrz<Dr2AJIA(Nzn;Gb5FF8Jon9SuISe`3d=Xh*Ege^$e3mw{x&d<C+wMuMm zOdTd#lN+%&5?f>Fqr}#G&D~P$#n_FotefFR``%qvzi(b;_<p6=?>~<qHWF03PxMX2 zPRA8%f1ebPdt%eU4D2Z}aZjCs2K@R&bx)5pk28qR6x-??%rY>s*|B1lg9S-G7H~Xf zUhvl%G+6Qzk*8SSTh<d3&GUg=BlFl0tEM|G`>|(D8P**<-0|ICP=PNj+UmeG{Mtmn zYvsfiL}(z^V2L|)!BYY~XNpl>G8gq;^Vonb=S~Yi%zPw_#WQvbI~ZT)DD`7v20ube zp!t&=ON}=fVu|hri(<X!6xc;yTuptw{vAh|BR7`!3osOWFg(np-&+hPC(J#NH8;Ui zj}Bmu0g|)Hf%cO+xYnohmBy!H%dyFp{6)%guPL7V6046jf76`SspPRf(OgI!H$>zN zNG}pw?k(e(jlBr0wAy1Nmy&;;k@mgbp1=11gPr!jA#fS~08nA{JNK-;aERDogwww# z5Iv*u$9k>LQTP*`?%`vIjR%urMQxxu>l|akmT^rrs&h)L<DEjR-sab%)0(aiRQF`B zb?##BXX$rFd;3b_D~U;u5M7)vn*JN4e@8IT>e?HU=izX**Zy+1(K#4_KM{L^gDrXj zG~(Ar*iN<ACghEnjCV4zI_xxmL0&JhG{^8H4~WY>CxJ%ng<vU|=QXeOF5QPjkNjja zCoCxbW@VJkoOt3#y?X@N%t_-{EpC-$Gbg{Fd*O`L*-Wzm@0|WYNj7up%k#QEpUGyv z(!KqR2Y#8&G(Yg#!G#<@qr;TrN8XjqoVoqdYi=pXX1-eR%*1xT%4W`Py8B08Uz5#z zz1jI6e#G%}+<`W~xG<YJ_s@f?_WnAX`NrVpJC?1@X3l?Y_dDbIWiuBP_qn7G$Ag2% z4fsCC3$EI{_M7XnnG5gj_WHm3XEPUF^p|fW-^ymby>$6){x{jo#b3E*(Q1xgQuo$# zlS;Fh?|wL^dB2OYnHIy^bm{m;Hgnl8U!MN0_1VnjH`hLXJjV+UU3}b|951^1Df`%) z*-YyPYQ}Hekj=EY<lMat1G1U6EBs%}zMajqKV#q(ojKm2{?y^$-I&c>`S<&`pE59; zxvKKEx8M0rHuL>A%y)kF+id3Q+cxyy#&P@9jjLx5%4V*)=Ka?yF3x5;?pbnPx3{vH zT#Ku3E!>pNTpPc!@N|w}_thECywCB@(~C}f_IKIL_5XVDhWj^XGdEUGXjo8|&2)L| zTaS*oB%A4W$Dw0y;&}IGhF{(Go@}P)wO<?ewZYlqaRWa1-I>S23mbOsI2S%}{-_&@ z;P>yl`nT6-i^pd=eYx%~xZBH5UoZxqP`T)#dGNO5@4V$6_~oS+eejcP@r09GzB}g^ zaQjDgUHU#e@YZn$Plgx18}=`N4@_!iu7p20`?=*kv&9oLTb8xw`4hX_yPlr}Pk7<G zl}q7mW$!n;4}SSy4{mxQTkKArUmN}k?r`yS$=~3C`<jnG6JFHg#d9u&54^c*S4a4R zu>*Vb&KB1eG;jHCHQasOU#87~CwBPpMQh=0PfgkX5d2ENE`6TM7Ee0)!?Qm6J=|gD zD~pbU2W8e3od+-4J>;p@@S``h9()7*!RvoNp<lMRuAt^8YsSJoPMZFM`S8S*J$|tT z-roA0k&nQyJpRiwUd|RzKIM*0+dqIiyjOX{De$1F?S6Y9+;r~0>%Ip+y5sQ+is3(n zvmY9gEuK>F(#^Nj!9B{)|6m#Hj(ua!{qXjtZI>Q`Uu{wI_^-3YQ%~7{RlmQ(SKj<3 zb0$3K?L*5ig_|bMZ{HDq?5x|L?+yQHb3tWwwz&Sn@4ww_2HfM>dpE6x-N4b|L-6*0 z*yK6*)ww5*`+c^!q1i=;&p8gha&ObFZ@^{U`u4a2Zu-r)-@OrjY}6m7^@sm_>h6oi oWs9d>xMuwR1#r)HxjtKA_p@dn9e{U4&o6uhe)Z4GTm9*O0jb%%761SM literal 0 HcmV?d00001 From 123df4913f453cd4dc2c5df281785b8085812cf2 Mon Sep 17 00:00:00 2001 From: Nate Koenig <nate@openrobotics.org> Date: Thu, 31 Mar 2022 13:41:12 -0700 Subject: [PATCH 142/219] Fix spelling Signed-off-by: Nate Koenig <nate@openrobotics.org> --- src/URI.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/URI.cc b/src/URI.cc index 67a09203d..7b38e93cc 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -1122,7 +1122,7 @@ bool URI::Valid(const std::string &_str) if (localScheme != "file" && authEndPos == authDelimPos+2) { - ignerr << "A host is manadatory when using a scheme other than file\n"; + ignerr << "A host is mandatory when using a scheme other than file\n"; return false; } else From 2a262029fa5d22a895f2f7ee485fbca17dad0d45 Mon Sep 17 00:00:00 2001 From: Ashton Larkin <42042756+adlarkin@users.noreply.github.com> Date: Tue, 5 Apr 2022 11:02:34 -0600 Subject: [PATCH 143/219] Fix edge case handling for SubMesh::MaterialIndex (#319) Signed-off-by: Ashton Larkin <42042756+adlarkin@users.noreply.github.com> --- Migration.md | 6 ++++++ graphics/include/ignition/common/SubMesh.hh | 12 +++++++++-- graphics/src/ColladaExporter.cc | 22 +++++++++++---------- graphics/src/ColladaExporter_TEST.cc | 16 +++++++++------ graphics/src/SubMesh.cc | 13 +++++++++++- graphics/src/SubMesh_TEST.cc | 10 ++++++---- 6 files changed, 56 insertions(+), 23 deletions(-) diff --git a/Migration.md b/Migration.md index 1aa67f3a1..8b121ade8 100644 --- a/Migration.md +++ b/Migration.md @@ -7,6 +7,12 @@ release will remove the deprecated code. ## Ignition Common 4.X to 5.X +### Deprecations + +1. `Submesh::MaterialIndex` is deprecated. `SubMesh::GetMaterialIndex` should + be used instead, which properly handles submeshes having no material index + applied to them. + ### Additions 1. **geospatial** component that loads heightmap images and DEMs diff --git a/graphics/include/ignition/common/SubMesh.hh b/graphics/include/ignition/common/SubMesh.hh index 10878b653..d0ccd5062 100644 --- a/graphics/include/ignition/common/SubMesh.hh +++ b/graphics/include/ignition/common/SubMesh.hh @@ -18,6 +18,7 @@ #define IGNITION_COMMON_SUBMESH_HH_ #include <memory> +#include <optional> #include <string> #include <vector> @@ -284,8 +285,15 @@ namespace ignition public: void SetMaterialIndex(const unsigned int _index); /// \brief Get the material index - /// \return The assigned material index. - public: unsigned int MaterialIndex() const; + /// \return The assigned material index. If no material index is assigned + /// to this submesh, std::numeric_limits<unsigned int>::max() is returned. + /// \note This method is deprecated, use GetMaterialIndex instead + public: unsigned int IGN_DEPRECATED(5) MaterialIndex() const; + + /// \brief Get the material index + /// \return The assigned material index. Nullopt is returned if the + /// submesh has no assigned material index + public: std::optional<unsigned int> GetMaterialIndex() const; /// \brief Return true if this submesh has the vertex /// \param[in] _v Vertex coordinate diff --git a/graphics/src/ColladaExporter.cc b/graphics/src/ColladaExporter.cc index 731cc010c..726639820 100644 --- a/graphics/src/ColladaExporter.cc +++ b/graphics/src/ColladaExporter.cc @@ -488,12 +488,17 @@ void ColladaExporter::Implementation::ExportGeometries( { for (unsigned int i = 0; i < this->subMeshCount; ++i) { - unsigned int materialIndex = - this->mesh->SubMeshByIndex(i).lock()->MaterialIndex(); + std::shared_ptr<SubMesh> subMesh = this->mesh->SubMeshByIndex(i).lock(); + if (!subMesh) + continue; char meshId[100], materialId[100]; snprintf(meshId, sizeof(meshId), "mesh_%u", i); - snprintf(materialId, sizeof(materialId), "material_%u", materialIndex); + if (subMesh->GetMaterialIndex()) + { + snprintf(materialId, sizeof(materialId), "material_%u", + subMesh->GetMaterialIndex().value()); + } tinyxml2::XMLElement *geometryXml = _libraryGeometriesXml->GetDocument()->NewElement("geometry"); @@ -504,10 +509,6 @@ void ColladaExporter::Implementation::ExportGeometries( _libraryGeometriesXml->GetDocument()->NewElement("mesh"); geometryXml->LinkEndChild(meshXml); - std::shared_ptr<SubMesh> subMesh = this->mesh->SubMeshByIndex(i).lock(); - if (!subMesh) - continue; - this->ExportGeometrySource(subMesh.get(), meshXml, POSITION, meshId); this->ExportGeometrySource(subMesh.get(), meshXml, NORMAL, meshId); if (subMesh->TexCoordCountBySet(0) != 0) @@ -887,9 +888,10 @@ void ColladaExporter::Implementation::ExportVisualScenes( snprintf(attributeValue, sizeof(attributeValue), "#%s", meshId); instanceGeometryXml->SetAttribute("url", attributeValue); - unsigned int materialIndex = - this->mesh->SubMeshByIndex(i).lock()->MaterialIndex(); - + const auto subMesh = this->mesh->SubMeshByIndex(i).lock(); + if (!subMesh->GetMaterialIndex()) + continue; + const auto materialIndex = subMesh->GetMaterialIndex().value(); const ignition::common::MaterialPtr material = this->mesh->MaterialByIndex(materialIndex); diff --git a/graphics/src/ColladaExporter_TEST.cc b/graphics/src/ColladaExporter_TEST.cc index 0f4c3b20d..b82f29831 100644 --- a/graphics/src/ColladaExporter_TEST.cc +++ b/graphics/src/ColladaExporter_TEST.cc @@ -227,20 +227,24 @@ TEST_F(ColladaExporter, ExportMeshWithSubmeshes) std::vector<math::Matrix4d> subMeshMatrix; math::Pose3d localPose = math::Pose3d::Zero; + const auto subMesh = boxMesh->SubMeshByIndex(0).lock(); + ASSERT_NE(nullptr, subMesh); + ASSERT_TRUE(subMesh->GetMaterialIndex().has_value()); int i = outMesh.AddMaterial( - boxMesh->MaterialByIndex( - boxMesh->SubMeshByIndex(0).lock()->MaterialIndex())); - subm = outMesh.AddSubMesh(*boxMesh->SubMeshByIndex(0).lock().get()); + boxMesh->MaterialByIndex(subMesh->GetMaterialIndex().value())); + subm = outMesh.AddSubMesh(*subMesh.get()); subm.lock()->SetMaterialIndex(i); localPose.SetX(10); math::Matrix4d matrix(localPose); subMeshMatrix.push_back(matrix); + const auto drillSubMesh = drillMesh->SubMeshByIndex(0).lock(); + ASSERT_NE(nullptr, drillSubMesh); + ASSERT_TRUE(drillSubMesh->GetMaterialIndex().has_value()); i = outMesh.AddMaterial( - drillMesh->MaterialByIndex( - drillMesh->SubMeshByIndex(0).lock()->MaterialIndex())); - subm = outMesh.AddSubMesh(*drillMesh->SubMeshByIndex(0).lock().get()); + drillMesh->MaterialByIndex(drillSubMesh->GetMaterialIndex().value())); + subm = outMesh.AddSubMesh(*drillSubMesh.get()); subm.lock()->SetMaterialIndex(i); localPose.SetX(-10); diff --git a/graphics/src/SubMesh.cc b/graphics/src/SubMesh.cc index 35fa615d9..8baf80466 100644 --- a/graphics/src/SubMesh.cc +++ b/graphics/src/SubMesh.cc @@ -16,7 +16,9 @@ */ #include <algorithm> +#include <limits> #include <map> +#include <optional> #include <string> #include "ignition/math/Helpers.hh" @@ -52,7 +54,7 @@ class ignition::common::SubMesh::Implementation /// \brief The material index for this mesh. Relates to the parent /// mesh material list. - public: int materialIndex = -1; + public: std::optional<unsigned int> materialIndex = std::nullopt; /// \brief The name of the sub-mesh public: std::string name; @@ -493,6 +495,15 @@ void SubMesh::SetMaterialIndex(const unsigned int _index) ////////////////////////////////////////////////// unsigned int SubMesh::MaterialIndex() const +{ + if (this-dataPtr->materialIndex.has_value()) + return this->dataPtr->materialIndex.value(); + + return std::numeric_limits<unsigned int>::max(); +} + +////////////////////////////////////////////////// +std::optional<unsigned int> SubMesh::GetMaterialIndex() const { return this->dataPtr->materialIndex; } diff --git a/graphics/src/SubMesh_TEST.cc b/graphics/src/SubMesh_TEST.cc index 20772cf49..d36173ed7 100644 --- a/graphics/src/SubMesh_TEST.cc +++ b/graphics/src/SubMesh_TEST.cc @@ -31,7 +31,7 @@ class SubMeshTest : public common::testing::AutoLogFixture { }; TEST_F(SubMeshTest, SubMesh) { common::SubMeshPtr submesh(new common::SubMesh()); - EXPECT_TRUE(submesh != NULL); + ASSERT_NE(nullptr, submesh); submesh->SetName("new_submesh"); EXPECT_EQ(submesh->Name(), "new_submesh"); @@ -39,8 +39,10 @@ TEST_F(SubMeshTest, SubMesh) submesh->SetPrimitiveType(common::SubMesh::TRIANGLES); EXPECT_EQ(submesh->SubMeshPrimitiveType(), common::SubMesh::TRIANGLES); + EXPECT_FALSE(submesh->GetMaterialIndex().has_value()); submesh->SetMaterialIndex(3u); - EXPECT_EQ(submesh->MaterialIndex(), 3u); + ASSERT_TRUE(submesh->GetMaterialIndex().has_value()); + EXPECT_EQ(submesh->GetMaterialIndex(), 3u); // verify empty submesh EXPECT_EQ(submesh->Min(), math::Vector3d::Zero); @@ -238,9 +240,9 @@ TEST_F(SubMeshTest, SubMesh) // copy constructor common::SubMeshPtr submeshCopy(new common::SubMesh(*(submesh.get()))); - EXPECT_TRUE(submeshCopy != NULL); + ASSERT_NE(nullptr, submeshCopy); EXPECT_EQ(submeshCopy->Name(), submesh->Name()); - EXPECT_EQ(submeshCopy->MaterialIndex(), submesh->MaterialIndex()); + EXPECT_EQ(submeshCopy->GetMaterialIndex(), submesh->GetMaterialIndex()); EXPECT_EQ(submeshCopy->SubMeshPrimitiveType(), submesh->SubMeshPrimitiveType()); EXPECT_EQ(submeshCopy->VertexCount(), submesh->VertexCount()); From 8761b6f66efe0b75393f10a6cf35efc1a54e8e42 Mon Sep 17 00:00:00 2001 From: "Addisu Z. Taddese" <addisu@openrobotics.org> Date: Thu, 7 Apr 2022 14:40:56 -0500 Subject: [PATCH 144/219] Fix typo bug in MaterialIndex (#338) Signed-off-by: Addisu Z. Taddese <addisu@openrobotics.org> --- graphics/src/SubMesh.cc | 6 ++---- graphics/src/SubMesh_TEST.cc | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/graphics/src/SubMesh.cc b/graphics/src/SubMesh.cc index 8baf80466..28bb83fee 100644 --- a/graphics/src/SubMesh.cc +++ b/graphics/src/SubMesh.cc @@ -496,10 +496,8 @@ void SubMesh::SetMaterialIndex(const unsigned int _index) ////////////////////////////////////////////////// unsigned int SubMesh::MaterialIndex() const { - if (this-dataPtr->materialIndex.has_value()) - return this->dataPtr->materialIndex.value(); - - return std::numeric_limits<unsigned int>::max(); + return this->dataPtr->materialIndex.value_or( + std::numeric_limits<unsigned int>::max()); } ////////////////////////////////////////////////// diff --git a/graphics/src/SubMesh_TEST.cc b/graphics/src/SubMesh_TEST.cc index d36173ed7..9f3604e9c 100644 --- a/graphics/src/SubMesh_TEST.cc +++ b/graphics/src/SubMesh_TEST.cc @@ -39,6 +39,22 @@ TEST_F(SubMeshTest, SubMesh) submesh->SetPrimitiveType(common::SubMesh::TRIANGLES); EXPECT_EQ(submesh->SubMeshPrimitiveType(), common::SubMesh::TRIANGLES); + { + // Test deprecated API + // TODO(azeey) Remove this scope block when MaterialIndex is removed + IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION + EXPECT_EQ(submesh->MaterialIndex(), + std::numeric_limits<unsigned int>::max()); + submesh->SetMaterialIndex(3u); + EXPECT_EQ(submesh->MaterialIndex(), 3u); + // Recreate submesh to so test expectations following this block won't + // break. + submesh = std::make_shared<common::SubMesh>(); + ASSERT_NE(nullptr, submesh); + IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + } + + // Use new API EXPECT_FALSE(submesh->GetMaterialIndex().has_value()); submesh->SetMaterialIndex(3u); ASSERT_TRUE(submesh->GetMaterialIndex().has_value()); From 96df813adb979faf1406bc016db0a0e14b336a1c Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Mon, 11 Apr 2022 07:32:26 -0500 Subject: [PATCH 145/219] Add common::testing module (#314) This introduces ignition::common::testing, a component to hold all of our testing support functionality. Signed-off-by: Michael Carroll <michael@openrobotics.org> --- CMakeLists.txt | 2 +- av/src/AudioDecoder.cc | 5 +- events/src/Event_TEST.cc | 1 + include/ignition/common/TempDirectory.hh | 16 ++ src/TempDirectory.cc | 22 +- src/TempDirectory_TEST.cc | 56 +++++ test/integration/video_encoder.cc | 1 + .../include/ignition/common/CMakeLists.txt | 1 + .../ignition/common/testing/AutoLogFixture.hh | 59 +++++ .../ignition/common/testing/BazelTestPaths.hh | 58 +++++ .../ignition/common/testing/CMakeTestPaths.hh | 48 +++++ .../ignition/common/testing/TestPaths.hh | 201 ++++++++++++++++++ .../include/ignition/common/testing/Utils.hh | 40 ++++ .../common/testing/detail/AutoLogFixture.hh | 120 +++++++++++ testing/src/AutoLogFixture_TEST.cc | 34 +++ testing/src/BazelTestPaths.cc | 55 +++++ testing/src/BazelTestPaths_TEST.cc | 69 ++++++ testing/src/CMakeLists.txt | 17 ++ testing/src/CMakeTestPaths.cc | 46 ++++ testing/src/CMakeTestPaths_TEST.cc | 98 +++++++++ testing/src/TestPaths.cc | 101 +++++++++ testing/src/Utils.cc | 53 +++++ testing/src/Utils_TEST.cc | 38 ++++ testing/test_files/example.txt | 0 24 files changed, 1135 insertions(+), 6 deletions(-) create mode 100644 testing/include/ignition/common/CMakeLists.txt create mode 100644 testing/include/ignition/common/testing/AutoLogFixture.hh create mode 100644 testing/include/ignition/common/testing/BazelTestPaths.hh create mode 100644 testing/include/ignition/common/testing/CMakeTestPaths.hh create mode 100644 testing/include/ignition/common/testing/TestPaths.hh create mode 100644 testing/include/ignition/common/testing/Utils.hh create mode 100644 testing/include/ignition/common/testing/detail/AutoLogFixture.hh create mode 100644 testing/src/AutoLogFixture_TEST.cc create mode 100644 testing/src/BazelTestPaths.cc create mode 100644 testing/src/BazelTestPaths_TEST.cc create mode 100644 testing/src/CMakeLists.txt create mode 100644 testing/src/CMakeTestPaths.cc create mode 100644 testing/src/CMakeTestPaths_TEST.cc create mode 100644 testing/src/TestPaths.cc create mode 100644 testing/src/Utils.cc create mode 100644 testing/src/Utils_TEST.cc create mode 100644 testing/test_files/example.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index a9d507c8e..4bbaba937 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,7 +132,7 @@ configure_file("${PROJECT_SOURCE_DIR}/cppcheck.suppress.in" ${PROJECT_BINARY_DIR}/cppcheck.suppress) ign_configure_build(QUIT_IF_BUILD_ERRORS - COMPONENTS av events geospatial graphics profiler) + COMPONENTS av events geospatial graphics profiler testing) #============================================================================ # Create package information diff --git a/av/src/AudioDecoder.cc b/av/src/AudioDecoder.cc index 561ce4544..4ff2b237f 100644 --- a/av/src/AudioDecoder.cc +++ b/av/src/AudioDecoder.cc @@ -325,7 +325,8 @@ bool AudioDecoder::SetFile(const std::string &_filename) avcodec_parameters_to_context(this->dataPtr->codecCtx, this->dataPtr->formatCtx->streams[this->dataPtr->audioStream]->codecpar); #else - this->dataPtr->codec = avcodec_find_decoder(this->dataPtr->codecCtx->codec_id); + this->dataPtr->codec = avcodec_find_decoder( + this->dataPtr->codecCtx->codec_id); #endif if (this->dataPtr->codec == nullptr) @@ -346,7 +347,7 @@ bool AudioDecoder::SetFile(const std::string &_filename) #endif // Open codec - if (avcodec_open2(this->dataPtr->codecCtx, + if (avcodec_open2(this->dataPtr->codecCtx, this->dataPtr->codec, nullptr) < 0) { ignerr << "Couldn't open audio codec.\n"; diff --git a/events/src/Event_TEST.cc b/events/src/Event_TEST.cc index 4a94d5450..34cb76cbe 100644 --- a/events/src/Event_TEST.cc +++ b/events/src/Event_TEST.cc @@ -21,6 +21,7 @@ #include <functional> #include <ignition/common/Event.hh> +#include <ignition/common/Util.hh> using namespace ignition; diff --git a/include/ignition/common/TempDirectory.hh b/include/ignition/common/TempDirectory.hh index a23c3eab3..259acdf1f 100644 --- a/include/ignition/common/TempDirectory.hh +++ b/include/ignition/common/TempDirectory.hh @@ -74,6 +74,22 @@ namespace ignition const std::string &_subDir = "ignition", bool _cleanup = true); + /// \brief Create a directory in the tempDirectoryPath by expanding + /// a name template. This directory can also be automatically cleaned + /// up when the object goes out of scope. + /// + /// The TempDirectory will have the form _root/_subdir/_prefixXXXXX/ + /// + /// \param[in[ _root Explicitly set the root directory + /// \param[in] _prefix String to be expanded for the template + /// \param[in] _subDir Subdirectory in OS _root, if desired + /// \param[in] _cleanup True to indicate that the filesystem should + /// be cleaned as part of the destructor + public: explicit TempDirectory(const std::string &_root, + const std::string &_prefix = "temp_dir", + const std::string &_subDir = "ignition", + bool _cleanup = true); + /// \brief Destroy the temporary directory, removing from filesystem /// if cleanup is true. public: ~TempDirectory(); diff --git a/src/TempDirectory.cc b/src/TempDirectory.cc index cf65b3a64..7f3809b30 100644 --- a/src/TempDirectory.cc +++ b/src/TempDirectory.cc @@ -161,16 +161,31 @@ class ignition::common::TempDirectory::Implementation TempDirectory::TempDirectory(const std::string &_prefix, const std::string &_subDir, bool _cleanup): - dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) + TempDirectory(common::tempDirectoryPath(), _prefix, _subDir, _cleanup) { +} +///////////////////////////////////////////////// +TempDirectory::TempDirectory(const std::string &_root, + const std::string &_prefix, + const std::string &_subDir, + bool _cleanup): + dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) +{ this->dataPtr->oldPath = common::cwd(); this->dataPtr->doCleanup = _cleanup; - auto tempPath = common::tempDirectoryPath(); + if (_root.empty()) + { + this->dataPtr->isValid = false; + ignwarn << "Failed to create temp directory: _root was empty\n"; + return; + } + + auto tempPath = _root; if (!_subDir.empty()) { - tempPath = common::joinPaths(tempPath, _subDir); + tempPath = common::joinPaths(_root, _subDir); } this->dataPtr->path = common::createTempDirectory(_prefix, tempPath); if (!this->dataPtr->path.empty()) @@ -181,6 +196,7 @@ TempDirectory::TempDirectory(const std::string &_prefix, this->dataPtr->path = common::cwd(); } + ///////////////////////////////////////////////// TempDirectory::~TempDirectory() { diff --git a/src/TempDirectory_TEST.cc b/src/TempDirectory_TEST.cc index 14af3aff5..4fde626d6 100644 --- a/src/TempDirectory_TEST.cc +++ b/src/TempDirectory_TEST.cc @@ -66,14 +66,60 @@ TEST(TempDirectory, createTempDirectoryEmptyBase) TEST(TempDirectory, TempDirectory) { std::string path; + auto curDir = ignition::common::cwd(); { ignition::common::TempDirectory tmp("temp_dir", "ignition", true); EXPECT_TRUE(tmp.Valid()); EXPECT_TRUE(tmp.DoCleanup()); + // Current directory changed to tempdir + EXPECT_NE(curDir, ignition::common::cwd()); path = tmp.Path(); EXPECT_FALSE(path.empty()); EXPECT_TRUE(ignition::common::exists(path)); + EXPECT_EQ(path, ignition::common::cwd()); } + // Current directory changed back to previous + EXPECT_EQ(curDir, ignition::common::cwd()); + EXPECT_FALSE(ignition::common::exists(path)); +} + +///////////////////////////////////////////////// +TEST(TempDirectory, TempDirectoryRoot) +{ + std::string path; + auto curDir = ignition::common::cwd(); + { + auto p = ignition::common::tempDirectoryPath(); + ignition::common::TempDirectory tmp(p, "temp_dir", "ignition", true); + EXPECT_TRUE(tmp.Valid()); + EXPECT_TRUE(tmp.DoCleanup()); + EXPECT_NE(curDir, ignition::common::cwd()); + path = tmp.Path(); + EXPECT_FALSE(path.empty()); + EXPECT_TRUE(ignition::common::exists(path)); + EXPECT_EQ(path, ignition::common::cwd()); + } + // Current directory changed back to previous + EXPECT_EQ(curDir, ignition::common::cwd()); + EXPECT_FALSE(ignition::common::exists(path)); +} + +///////////////////////////////////////////////// +TEST(TempDirectory, TempDirectoryEmptyRoot) +{ + std::string path; + auto curDir = ignition::common::cwd(); + { + ignition::common::TempDirectory tmp("", "temp_dir", "ignition", true); + EXPECT_FALSE(tmp.Valid()); + EXPECT_TRUE(tmp.DoCleanup()); + // Since not successfully created, no update + EXPECT_EQ(curDir, ignition::common::cwd()); + path = tmp.Path(); + EXPECT_TRUE(path.empty()); + EXPECT_FALSE(ignition::common::exists(path)); + } + EXPECT_EQ(curDir, ignition::common::cwd()); EXPECT_FALSE(ignition::common::exists(path)); } @@ -81,14 +127,19 @@ TEST(TempDirectory, TempDirectory) TEST(TempDirectory, TempDirectoryNoClean) { std::string path; + auto curDir = ignition::common::cwd(); { ignition::common::TempDirectory tmp("temp_dir", "ignition", false); EXPECT_TRUE(tmp.Valid()); EXPECT_FALSE(tmp.DoCleanup()); + EXPECT_NE(curDir, ignition::common::cwd()); path = tmp.Path(); EXPECT_FALSE(path.empty()); EXPECT_TRUE(ignition::common::exists(path)); + EXPECT_EQ(path, ignition::common::cwd()); } + // Current directory always changes back, regardless of doClean + EXPECT_EQ(curDir, ignition::common::cwd()); EXPECT_TRUE(ignition::common::exists(path)); EXPECT_TRUE(ignition::common::removeDirectory(path)); } @@ -97,16 +148,21 @@ TEST(TempDirectory, TempDirectoryNoClean) TEST(TempDirectory, TempDirectoryNoCleanLater) { std::string path; + auto curDir = ignition::common::cwd(); { ignition::common::TempDirectory tmp("temp_dir", "ignition", true); EXPECT_TRUE(tmp.Valid()); EXPECT_TRUE(tmp.DoCleanup()); + EXPECT_NE(curDir, ignition::common::cwd()); path = tmp.Path(); EXPECT_FALSE(path.empty()); EXPECT_TRUE(ignition::common::exists(path)); + EXPECT_EQ(path, ignition::common::cwd()); tmp.DoCleanup(false); EXPECT_FALSE(tmp.DoCleanup()); } + // Current directory always changes back, regardless of doClean + EXPECT_EQ(curDir, ignition::common::cwd()); EXPECT_TRUE(ignition::common::exists(path)); EXPECT_TRUE(ignition::common::removeDirectory(path)); } diff --git a/test/integration/video_encoder.cc b/test/integration/video_encoder.cc index 922ea1c58..4ebe8dd8d 100644 --- a/test/integration/video_encoder.cc +++ b/test/integration/video_encoder.cc @@ -18,6 +18,7 @@ // needed on MacOS #include <cmath> +#include "ignition/common/Console.hh" #include "ignition/common/VideoEncoder.hh" #include "ignition/common/Video.hh" #include "ignition/common/ffmpeg_inc.hh" diff --git a/testing/include/ignition/common/CMakeLists.txt b/testing/include/ignition/common/CMakeLists.txt new file mode 100644 index 000000000..027bd91ff --- /dev/null +++ b/testing/include/ignition/common/CMakeLists.txt @@ -0,0 +1 @@ +ign_install_all_headers(COMPONENT testing) diff --git a/testing/include/ignition/common/testing/AutoLogFixture.hh b/testing/include/ignition/common/testing/AutoLogFixture.hh new file mode 100644 index 000000000..c685723f9 --- /dev/null +++ b/testing/include/ignition/common/testing/AutoLogFixture.hh @@ -0,0 +1,59 @@ +/* +* Copyright (C) 2022 Open Source Robotics Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ +#ifndef IGNITION_COMMON_TESTING_AUTOLOGFIXTURE_HH_ +#define IGNITION_COMMON_TESTING_AUTOLOGFIXTURE_HH_ + +#include <gtest/gtest.h> + +#include <memory> +#include <string> + +#include <ignition/utils/ImplPtr.hh> + +namespace ignition::common::testing +{ +/// \brief A utility class that stores test logs in ~/.ignition/test_logs. +/// This functionality is needed to keep all the log information reported +/// by ignition during continuous integration. Without this, debugging +/// failing tests is significantly more difficult. +class AutoLogFixture : public ::testing::Test +{ + /// \brief Constructor + public: AutoLogFixture(); + + /// \brief Destructor + public: virtual ~AutoLogFixture(); + + /// \brief Setup the test fixture. This gets called by gtest. + protected: virtual void SetUp() override; + + /// \brief Get a string with the full log file path. + /// \return The full log file path as a string. + protected: std::string FullLogPath() const; + + /// \brief Get a string with all the log content loaded from the disk. + /// \return A string with all the log content. + protected: std::string LogContent() const; + + /// \brief Pointer to private data. + IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) +}; +} // namespace ignition::common::testing + +#include <ignition/common/testing/detail/AutoLogFixture.hh> + +#endif // IGNITION_COMMON_TESTING_AUTOLOGFIXTURE_HH_ diff --git a/testing/include/ignition/common/testing/BazelTestPaths.hh b/testing/include/ignition/common/testing/BazelTestPaths.hh new file mode 100644 index 000000000..b8927a86f --- /dev/null +++ b/testing/include/ignition/common/testing/BazelTestPaths.hh @@ -0,0 +1,58 @@ +/* +* Copyright (C) 2022 Open Source Robotics Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ +#ifndef IGNITION_COMMON_TESTING_BAZELTESTPATHS_HH_ +#define IGNITION_COMMON_TESTING_BAZELTESTPATHS_HH_ + +#include <string> + +#include "ignition/common/testing/TestPaths.hh" +#include "ignition/common/testing/Export.hh" + +namespace ignition::common::testing +{ + +/// \brief Implementation of TestPaths interface for Bazel +/// +/// It is not intended that users will directly construct this, but rather +/// utilize the TestPathFactory. +/// +/// The main mechanism for detecting a bazel build is via the presence of the +/// TEST_SRCDIR and TEST_UNDECLARED_OUTPUTS_DIR environment variables. +/// Additionally, tests built via ign-bazel should set IGN_BAZEL_DIR. +/// +/// For source files to be available for bazel builds, they need to be set in +/// the "data" section of the relevant cc_library or cc_test call. +class BazelTestPaths: public TestPaths +{ + /// \brief Constructor from TestPaths + public: using TestPaths::TestPaths; + + /// \brief Destructor + public: IGNITION_COMMON_TESTING_VISIBLE ~BazelTestPaths() override; + + /// Documentation inherited + public: bool IGNITION_COMMON_TESTING_VISIBLE + ProjectSourcePath(std::string &_sourceDir) override; + + /// Documentation inherited + public: bool IGNITION_COMMON_TESTING_VISIBLE + TestTmpPath(std::string &_tmpDir) override; +}; + +} // namespace ignition::common::testing + +#endif // IGNITION_COMMON_TESTING_AUTOLOGFIXTURE_HH_ diff --git a/testing/include/ignition/common/testing/CMakeTestPaths.hh b/testing/include/ignition/common/testing/CMakeTestPaths.hh new file mode 100644 index 000000000..9b18dd10c --- /dev/null +++ b/testing/include/ignition/common/testing/CMakeTestPaths.hh @@ -0,0 +1,48 @@ +/* +* Copyright (C) 2022 Open Source Robotics Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ +#ifndef IGNITION_COMMON_TESTING_CMAKETESTPATHS_HH_ +#define IGNITION_COMMON_TESTING_CMAKETESTPATHS_HH_ + +#include <string> + +#include "ignition/common/testing/TestPaths.hh" +#include "ignition/common/testing/Export.hh" + +namespace ignition::common::testing +{ +/// \brief Implementation of TestPaths interface for CMake +/// +/// It is not intended that users will directly construct this, but rather +/// utilize the TestPathFactory. +class CMakeTestPaths: public TestPaths +{ + /// \brief Constructor from TestPaths + public: using TestPaths::TestPaths; + + /// \brief Destructor + public: IGNITION_COMMON_TESTING_VISIBLE ~CMakeTestPaths() override; + + /// Documentation inherited + public: bool IGNITION_COMMON_TESTING_VISIBLE + ProjectSourcePath(std::string &_sourceDir) override; + + /// Documentation inherited + public: bool IGNITION_COMMON_TESTING_VISIBLE + TestTmpPath(std::string &_tmpDir) override; +}; +} // namespace ignition::common::testing +#endif // IGNITION_COMMON_TESTING_CMAKETESTPATHS_HH_ diff --git a/testing/include/ignition/common/testing/TestPaths.hh b/testing/include/ignition/common/testing/TestPaths.hh new file mode 100644 index 000000000..da20fb214 --- /dev/null +++ b/testing/include/ignition/common/testing/TestPaths.hh @@ -0,0 +1,201 @@ +/* +* Copyright (C) 2022 Open Source Robotics Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ +#ifndef IGNITION_COMMON_TESTING_TESTPATHS_HH_ +#define IGNITION_COMMON_TESTING_TESTPATHS_HH_ + +#include <memory> +#include <string> + +#include "ignition/common/Filesystem.hh" +#include "ignition/common/TempDirectory.hh" +#include "ignition/common/Util.hh" + +#include "ignition/common/testing/Export.hh" + +#ifndef TESTING_PROJECT_SOURCE_DIR +#define TESTING_PROJECT_SOURCE_DIR "" +#endif + +namespace ignition::common::testing +{ + +////////////////////////////////////////////////// +/// \brief Constant referring to the project source dir of the current +/// project. +/// +/// For CMake builds, it is expected that this is injected via a +/// buildsystem define of TESTING_PROJECT_SOURCE_DIR. +/// This is done automatically for tests using ign-cmake's ign_build_tests +/// +/// For Bazel builds, it is expected to be empty +constexpr char kTestingProjectSourceDir[] = TESTING_PROJECT_SOURCE_DIR; + +////////////////////////////////////////////////// +/// \brief List of buildsystem types +enum class IGNITION_COMMON_TESTING_VISIBLE BuildType +{ + kUnknown, + kCMake, + kBazel +}; + +////////////////////////////////////////////////// +/// \brief Helper interface to generate path information to support +/// test access to source/data files +/// +/// It is intended that there is an implementation of this interface for +/// each relevant buildsystem. +class TestPaths +{ + /// \brief Constructor + /// \param[in] _projectSourcePath Path to the root of the project source + public: IGNITION_COMMON_TESTING_VISIBLE + explicit TestPaths(const std::string &_projectSourcePath = + kTestingProjectSourceDir); + + /// \brief Destructor + public: IGNITION_COMMON_TESTING_VISIBLE + virtual ~TestPaths() = 0; + + /// brief Populate the path to the root project source directory + /// \param[out] _sourceDir path to the root project source directory + /// \return True if path successfully found and set, false otherwise + public: virtual bool IGNITION_COMMON_TESTING_VISIBLE + ProjectSourcePath(std::string &_sourceDir) = 0; + + /// \brief Populate the path to a temporary directory + /// \param[out] _tmpDir path to the root temporary directory + /// \return True if path successfully found and set, false otherwise + public: virtual bool IGNITION_COMMON_TESTING_VISIBLE + TestTmpPath(std::string &_tmpDir) = 0; + + /// \brief Path to the root of the project source + protected: std::string projectSourcePath; +}; + +////////////////////////////////////////////////// +/// \brief Implementation of MakeTestTempDirectory +/// +/// The TempDirectory will have the form $TMPDIR/_subdir/_prefixXXXXX/ +/// +/// \param[in] _projectSourcePath Root of project source or empty +/// \param[in] _prefix Prefix of the temporary directory +/// \param[in] _subDir Additional subdirectory for temporary directory +/// \param[in] _cleanup True to indicate that the filesystem should +/// be cleaned as part of the destructor +/// \return Shared pointer to TempDirectory +std::shared_ptr<ignition::common::TempDirectory> +IGNITION_COMMON_TESTING_VISIBLE +MakeTestTempDirectoryImpl(const std::string &_projectSourcePath, + const std::string &_prefix = "test", + const std::string &_subDir = "ignition", + bool _cleanup = true); + + +////////////////////////////////////////////////// +/// \brief Create a temporary directory for test output in an OS and build +/// appropriate location +/// +/// The TempDirectory will have the form $TMPDIR/_subdir/_prefixXXXXX/ +/// +/// \param[in] _prefix Prefix of the temporary directory +/// \param[in] _subDir Additional subdirectory for temporary directory +/// \param[in] _cleanup True to indicate that the filesystem should +/// be cleaned as part of the destructor +/// \return Shared pointer to TempDirectory +inline std::shared_ptr<ignition::common::TempDirectory> +MakeTestTempDirectory(const std::string &_prefix = "test", + const std::string &_subDir = "ignition", + bool _cleanup = true) +{ + return MakeTestTempDirectoryImpl(kTestingProjectSourceDir, + _prefix, + _subDir, + _cleanup); +} + +////////////////////////////////////////////////// +/// \brief Return the current build type +/// +/// \param[in] _projectSourcePath Root of project source or empty +/// \return The current build type +BuildType +IGNITION_COMMON_TESTING_VISIBLE +TestBuildType( + const std::string &_projectSourcePath = kTestingProjectSourceDir); + +////////////////////////////////////////////////// +/// \brief Get a TestPaths object for the current build type +/// +/// \param[in] _projectSourcePath Root of project source or empty +/// \return TestPaths implementation for the current build type +std::unique_ptr<TestPaths> +IGNITION_COMMON_TESTING_VISIBLE +TestPathFactory( + const std::string &_projectSourcePath = kTestingProjectSourceDir); + +////////////////////////////////////////////////// +/// \brief Get the path to a file in the project source tree +/// +/// Example: to get ign-common/test/data/box.dae +/// SourceFile("test", "data", "box.dae"); +/// +/// \param[in] args Relative path to the source file +/// \return Full path to the source file +template <typename... Args> +std::string SourceFile(Args const &... args) +{ + auto testPaths = TestPathFactory(kTestingProjectSourceDir); + assert(nullptr != testPaths); + + std::string dataDir; + testPaths->ProjectSourcePath(dataDir); + return common::joinPaths(dataDir, args...); +} + +////////////////////////////////////////////////// +/// \brief Get the path to a file in the project test directory tree +/// +/// Example: to get ign-common/test/data/box.dae +/// TestFile("data", "box.dae"); +/// +/// \param[in] args Path to the file, relative to the test directory +/// \return Full path to the source file +template <typename... Args> +std::string TestFile(Args const &... args) +{ + return SourceFile("test", args...); +} + +////////////////////////////////////////////////// +/// \brief Get the path to a file in a temporary directory +/// +/// Example: to get ${TMP}/.ignition/foo.log +/// TempPath(".ignition", "foo.log"); +/// +/// \param[in] args Path to the file, relative to the temporary directory +/// \return Full path to the temporary directory +template <typename... Args> +std::string TempPath(Args const &... args) +{ + auto testPaths = TestPathFactory(kTestingProjectSourceDir); + std::string dataDir; + testPaths->TestTmpPath(dataDir); + return common::joinPaths(dataDir, args...); +} +} // namespace ignition::common::testing +#endif // IGNITION_COMMON_TESTING_TESTPATHS_HH_ diff --git a/testing/include/ignition/common/testing/Utils.hh b/testing/include/ignition/common/testing/Utils.hh new file mode 100644 index 000000000..a4ae24c1a --- /dev/null +++ b/testing/include/ignition/common/testing/Utils.hh @@ -0,0 +1,40 @@ +/* +* Copyright (C) 2022 Open Source Robotics Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ +#ifndef IGNITION_COMMON_TESTING_UTILS_HH_ +#define IGNITION_COMMON_TESTING_UTILS_HH_ + +#include <climits> +#include <cstdint> +#include <string> + +#include "ignition/common/testing/Export.hh" + +namespace ignition::common::testing +{ + +///////////////////////////////////////////////// +/// \brief Create an empty file with no content +/// +/// \param[in] _filename Filename of the file to be created +/// \return true if file successfully created, false otherwise +bool +IGNITION_COMMON_TESTING_VISIBLE +createNewEmptyFile(const std::string &_filename); + +} // namespace ignition::common::testing + +#endif // IGNITION_COMMON_TESTING_TESTPATHS_HH_ diff --git a/testing/include/ignition/common/testing/detail/AutoLogFixture.hh b/testing/include/ignition/common/testing/detail/AutoLogFixture.hh new file mode 100644 index 000000000..e44914590 --- /dev/null +++ b/testing/include/ignition/common/testing/detail/AutoLogFixture.hh @@ -0,0 +1,120 @@ +/* +* Copyright (C) 2022 Open Source Robotics Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ +#ifndef IGNITION_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ +#define IGNITION_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ + +#include "ignition/common/testing/AutoLogFixture.hh" + +#include <memory> +#include <string> + +#include <ignition/common/Console.hh> +#include <ignition/common/Filesystem.hh> +#include <ignition/common/TempDirectory.hh> +#include <ignition/common/Util.hh> + +namespace ignition::common::testing +{ + +////////////////////////////////////////////////// +class AutoLogFixture::Implementation +{ + /// \brief String with the full path of the logfile + public: std::string logFilename; + + /// \brief String with the full path to log directory + public: std::string logDirectory; + + /// \brief String with the base path to log directory + public: std::string logBasePath; + + /// \brief Temporary directory to run test in + public: std::unique_ptr<common::TempDirectory> temp; +}; + + +////////////////////////////////////////////////// +AutoLogFixture::AutoLogFixture(): + dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) +{ +} + +////////////////////////////////////////////////// +AutoLogFixture::~AutoLogFixture() +{ + ignLogClose(); + EXPECT_TRUE(ignition::common::unsetenv(IGN_HOMEDIR)); +} + +////////////////////////////////////////////////// +void AutoLogFixture::SetUp() +{ + const ::testing::TestInfo *const testInfo = + ::testing::UnitTest::GetInstance()->current_test_info(); + + std::string testName = testInfo->name(); + std::string testCaseName = testInfo->test_case_name(); + this->dataPtr->logFilename = testCaseName + "_" + testName + ".log"; + + this->dataPtr->temp = std::make_unique<TempDirectory>( + "test", "ign_common", false); + ASSERT_TRUE(this->dataPtr->temp->Valid()); + common::setenv(IGN_HOMEDIR, this->dataPtr->temp->Path()); + + // Initialize Console + auto logPath = common::joinPaths(this->dataPtr->temp->Path(), "test_logs"); + ignLogInit(logPath, this->dataPtr->logFilename); + + ASSERT_FALSE(logPath.empty()); + ASSERT_TRUE(common::exists( + common::joinPaths(logPath, this->dataPtr->logFilename))); + + ignition::common::Console::SetVerbosity(4); + + // Read the full path to the log directory. + this->dataPtr->logDirectory = ignLogDirectory(); + ASSERT_FALSE(this->dataPtr->logDirectory.empty()); + ASSERT_TRUE(ignition::common::exists(this->dataPtr->logDirectory)); +} + +////////////////////////////////////////////////// +std::string AutoLogFixture::FullLogPath() const +{ + return ignition::common::joinPaths( + this->dataPtr->logDirectory, this->dataPtr->logFilename); +} + +////////////////////////////////////////////////// +std::string AutoLogFixture::LogContent() const +{ + std::string loggedString; + // Open the log file, and read back the string + std::ifstream ifs(this->FullLogPath().c_str(), std::ios::in); + + while (!ifs.eof()) + { + std::string line; + std::getline(ifs, line); + loggedString += line; + } + return loggedString; +} + +} // namespace ignition::common::testing + +#endif // IGNITION_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ + diff --git a/testing/src/AutoLogFixture_TEST.cc b/testing/src/AutoLogFixture_TEST.cc new file mode 100644 index 000000000..c2118c695 --- /dev/null +++ b/testing/src/AutoLogFixture_TEST.cc @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#include <gtest/gtest.h> + +#include <ignition/common/Console.hh> +#include <ignition/common/testing/AutoLogFixture.hh> + +using namespace ignition::common; +using namespace ignition::common::testing; + +///////////////////////////////////////////////// +TEST_F(AutoLogFixture, AutoLogFixture) +{ + EXPECT_FALSE(this->FullLogPath().empty()); + EXPECT_TRUE(this->LogContent().empty()); + + Console::SetVerbosity(0); + igndbg << "This is a debug" << std::endl; + EXPECT_FALSE(this->LogContent().empty()); +} diff --git a/testing/src/BazelTestPaths.cc b/testing/src/BazelTestPaths.cc new file mode 100644 index 000000000..c355df0f0 --- /dev/null +++ b/testing/src/BazelTestPaths.cc @@ -0,0 +1,55 @@ +/* +* Copyright (C) 2022 Open Source Robotics Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include "ignition/common/testing/BazelTestPaths.hh" + +#include <ignition/common/Console.hh> +#include <ignition/common/Util.hh> + +namespace ignition::common::testing +{ + +////////////////////////////////////////////////// +BazelTestPaths::~BazelTestPaths() = default; + +////////////////////////////////////////////////// +bool BazelTestPaths::ProjectSourcePath(std::string &_sourceDir) +{ + std::string test_srcdir, bazel_path; + + if (common::env("TEST_SRCDIR", test_srcdir) && + common::env("IGN_BAZEL_PATH", bazel_path)) + { + _sourceDir = ignition::common::joinPaths(test_srcdir, + "ignition", + bazel_path); + return true; + } + else + { + return false; + } +} + +////////////////////////////////////////////////// +bool BazelTestPaths::TestTmpPath(std::string &_tmpDir) +{ + return common::env("TEST_UNDECLARED_OUTPUTS_DIR", _tmpDir); +} + +} // namespace ignition::common::testing + diff --git a/testing/src/BazelTestPaths_TEST.cc b/testing/src/BazelTestPaths_TEST.cc new file mode 100644 index 000000000..f0ea20a6a --- /dev/null +++ b/testing/src/BazelTestPaths_TEST.cc @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#include <gtest/gtest.h> + +#include "ignition/common/Filesystem.hh" +#include "ignition/common/testing/TestPaths.hh" +#include "ignition/common/testing/BazelTestPaths.hh" + +using namespace ignition::common; + +///////////////////////////////////////////////// +TEST(BazelTestPaths, ProjectSourcePath) +{ + ignition::common::testing::BazelTestPaths testPaths; + + std::string sourceDir; + ASSERT_TRUE(testPaths.ProjectSourcePath(sourceDir)); + ASSERT_FALSE(sourceDir.empty()); + ASSERT_TRUE(exists(sourceDir)) << sourceDir; + ASSERT_TRUE(isDirectory(sourceDir)); + + auto installedDir = joinPaths(sourceDir, "testing", "test_files"); + EXPECT_TRUE(exists(installedDir)) << installedDir; + EXPECT_TRUE(isDirectory(installedDir)); + + auto installedFile = joinPaths(installedDir, "example.txt"); + EXPECT_TRUE(exists(installedFile)); + EXPECT_TRUE(isFile(installedFile)); +} + +///////////////////////////////////////////////// +TEST(BazelTestPaths, TestTmpPath) +{ + ignition::common::testing::BazelTestPaths testPaths; + + std::string tmpDir; + ASSERT_TRUE(testPaths.TestTmpPath(tmpDir)); + ASSERT_FALSE(tmpDir.empty()); + ASSERT_TRUE(exists(tmpDir)) << tmpDir; + ASSERT_TRUE(isDirectory(tmpDir)); +} + +///////////////////////////////////////////////// +TEST(BazelTestPaths, TestBuildType) +{ + using BuildType = ignition::common::testing::BuildType; + ASSERT_EQ(BuildType::kBazel, ignition::common::testing::TestBuildType()); +} + +///////////////////////////////////////////////// +TEST(BazelTestPaths, TestPathFactory) +{ + auto testPaths = ignition::common::testing::TestPathFactory(); + ASSERT_NE(nullptr, testPaths); +} diff --git a/testing/src/CMakeLists.txt b/testing/src/CMakeLists.txt new file mode 100644 index 000000000..970bd7a81 --- /dev/null +++ b/testing/src/CMakeLists.txt @@ -0,0 +1,17 @@ +set(sources + BazelTestPaths.cc + CMakeTestPaths.cc + TestPaths.cc + Utils.cc +) + +set(test_sources + AutoLogFixture_TEST.cc + CMakeTestPaths_TEST.cc + Utils_TEST.cc +) + +ign_add_component(testing SOURCES ${sources} GET_TARGET_NAME testing_target) + +ign_build_tests(TYPE UNIT SOURCES ${test_sources} + LIB_DEPS ${testing_target}) diff --git a/testing/src/CMakeTestPaths.cc b/testing/src/CMakeTestPaths.cc new file mode 100644 index 000000000..cf9f69c1f --- /dev/null +++ b/testing/src/CMakeTestPaths.cc @@ -0,0 +1,46 @@ +/* +* Copyright (C) 2022 Open Source Robotics Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include "ignition/common/testing/CMakeTestPaths.hh" + +namespace ignition::common::testing +{ + +////////////////////////////////////////////////// +CMakeTestPaths::~CMakeTestPaths() = default; + +////////////////////////////////////////////////// +bool CMakeTestPaths::ProjectSourcePath(std::string &_sourceDir) +{ + + if (!this->projectSourcePath.empty()) + { + _sourceDir = this->projectSourcePath; + return true; + } + + return false; +} + +////////////////////////////////////////////////// +bool CMakeTestPaths::TestTmpPath(std::string &_tmpDir) +{ + _tmpDir = ignition::common::tempDirectoryPath(); + return true; +} + +} // namespace ignition::common::testing diff --git a/testing/src/CMakeTestPaths_TEST.cc b/testing/src/CMakeTestPaths_TEST.cc new file mode 100644 index 000000000..f18aa0a8e --- /dev/null +++ b/testing/src/CMakeTestPaths_TEST.cc @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#include <gtest/gtest.h> + +#include "ignition/common/Filesystem.hh" +#include "ignition/common/testing/TestPaths.hh" +#include "ignition/common/testing/CMakeTestPaths.hh" + +using namespace ignition::common; +using namespace ignition::common::testing; + +constexpr char kFakeTestPaths[] = ""; + +///////////////////////////////////////////////// +TEST(TestPaths, ProjectSourcePathUnset) +{ + EXPECT_EQ(BuildType::kUnknown, TestBuildType(kFakeTestPaths)); + + auto testPaths = TestPathFactory(kFakeTestPaths); + EXPECT_EQ(nullptr, testPaths); + + auto tempDir = MakeTestTempDirectoryImpl(kFakeTestPaths); + EXPECT_EQ(nullptr, tempDir); +} + +///////////////////////////////////////////////// +TEST(CMakeTestPaths, TestingProjectSourceDir) +{ + ASSERT_NE(0u, strlen(ignition::common::testing::kTestingProjectSourceDir)); +} + +///////////////////////////////////////////////// +TEST(CMakeTestPaths, ProjectSourcePathUnset) +{ + ignition::common::testing::CMakeTestPaths testPaths(kFakeTestPaths); + std::string sourceDir; + EXPECT_FALSE(testPaths.ProjectSourcePath(sourceDir)); + EXPECT_TRUE(sourceDir.empty()); +} + +///////////////////////////////////////////////// +TEST(CMakeTestPaths, TestBuildType) +{ + ASSERT_EQ(BuildType::kCMake, ignition::common::testing::TestBuildType()); +} + +///////////////////////////////////////////////// +TEST(CMakeTestPaths, ProjectSourcePath) +{ + ignition::common::testing::CMakeTestPaths testPaths; + + std::string sourceDir; + ASSERT_TRUE(testPaths.ProjectSourcePath(sourceDir)); + ASSERT_FALSE(sourceDir.empty()); + ASSERT_TRUE(exists(sourceDir)) << sourceDir; + ASSERT_TRUE(isDirectory(sourceDir)); + + auto installedDir = joinPaths(sourceDir, "testing", "test_files"); + EXPECT_TRUE(exists(installedDir)) << installedDir; + EXPECT_TRUE(isDirectory(installedDir)); + + auto installedFile = joinPaths(installedDir, "example.txt"); + EXPECT_TRUE(exists(installedFile)); + EXPECT_TRUE(isFile(installedFile)); +} + +///////////////////////////////////////////////// +TEST(CMakeTestPaths, TestTmpPath) +{ + ignition::common::testing::CMakeTestPaths testPaths; + + std::string tmpDir; + ASSERT_TRUE(testPaths.TestTmpPath(tmpDir)); + ASSERT_FALSE(tmpDir.empty()); + ASSERT_TRUE(exists(tmpDir)) << tmpDir; + ASSERT_TRUE(isDirectory(tmpDir)); +} + +///////////////////////////////////////////////// +int main(int argc, char **argv) +{ + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/testing/src/TestPaths.cc b/testing/src/TestPaths.cc new file mode 100644 index 000000000..54854ddac --- /dev/null +++ b/testing/src/TestPaths.cc @@ -0,0 +1,101 @@ +/* +* Copyright (C) 2022 Open Source Robotics Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ +#include "ignition/common/testing/TestPaths.hh" +#include "ignition/common/testing/BazelTestPaths.hh" +#include "ignition/common/testing/CMakeTestPaths.hh" + +#include <ignition/common/Console.hh> +#include <ignition/common/Util.hh> + +namespace ignition::common::testing +{ +////////////////////////////////////////////////// +TestPaths::TestPaths(const std::string &_projectSourcePath) + : projectSourcePath(_projectSourcePath) +{ +} + +////////////////////////////////////////////////// +TestPaths::~TestPaths() = default; + +////////////////////////////////////////////////// +BuildType TestBuildType(const std::string &_projectSourcePath) +{ + std::string ign_bazel; + bool ign_bazel_set = common::env("IGN_BAZEL", ign_bazel); + bool ign_cmake_set = !_projectSourcePath.empty(); + + if (ign_bazel_set && ign_cmake_set) + { + ignwarn << "Detected settings from Bazel and CMake, preferring CMake\n"; + } + + if (ign_cmake_set) + return BuildType::kCMake; + else if (ign_bazel_set) + return BuildType::kBazel; + else + return BuildType::kUnknown; +} + +////////////////////////////////////////////////// +std::unique_ptr<TestPaths> +TestPathFactory(const std::string &_projectSourcePath) +{ + std::unique_ptr<TestPaths> ret {nullptr}; + + switch(TestBuildType(_projectSourcePath)) + { + case BuildType::kBazel: + ret = std::make_unique<BazelTestPaths>(_projectSourcePath); + break; + case BuildType::kCMake: + ret = std::make_unique<CMakeTestPaths>(_projectSourcePath); + break; + case BuildType::kUnknown: + ret = nullptr; + break; + default: + ret = nullptr; + break; + } + return ret; +} + +////////////////////////////////////////////////// +std::shared_ptr<ignition::common::TempDirectory> +MakeTestTempDirectoryImpl(const std::string &_projectSourcePath, + const std::string &_prefix, + const std::string &_subDir, + bool _cleanup) +{ + auto testPaths = TestPathFactory(_projectSourcePath); + + if (!testPaths) + return nullptr; + + std::string dataDir; + testPaths->TestTmpPath(dataDir); + + if (dataDir.empty()) + return nullptr; + + return std::make_shared<ignition::common::TempDirectory>( + dataDir, _prefix, _subDir, _cleanup); +} + +} // namespace ignition::common::testing diff --git a/testing/src/Utils.cc b/testing/src/Utils.cc new file mode 100644 index 000000000..311853484 --- /dev/null +++ b/testing/src/Utils.cc @@ -0,0 +1,53 @@ +/* +* Copyright (C) 2022 Open Source Robotics Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include "ignition/common/testing/Utils.hh" + +#include <fstream> +#include <random> + +namespace ignition::common::testing +{ + +///////////////////////////////////////////////// +std::string getRandomNumber(int32_t _min, int32_t _max) +{ + // Initialize random number generator. + uint32_t seed = std::random_device {}(); + std::mt19937 randGenerator(seed); + + // Create a random number based on an integer converted to string. + std::uniform_int_distribution<int32_t> d(_min, _max); + + return std::to_string(d(randGenerator)); +} + +///////////////////////////////////////////////// +bool createNewEmptyFile(const std::string &_filename) +{ + try + { + std::fstream fs(_filename, std::ios::out); + } + catch(...) + { + return false; + } + return true; +} + +} // namespace ignition::common::testing diff --git a/testing/src/Utils_TEST.cc b/testing/src/Utils_TEST.cc new file mode 100644 index 000000000..5a484a52f --- /dev/null +++ b/testing/src/Utils_TEST.cc @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#include <gtest/gtest.h> + +#include <ignition/common/testing/TestPaths.hh> +#include <ignition/common/testing/Utils.hh> + +using namespace ignition::common; +using namespace ignition::common::testing; + +///////////////////////////////////////////////// +TEST(Utils, CreateNewEmptyFile) +{ + auto tmpDir = MakeTestTempDirectory(); + auto path = joinPaths(tmpDir->Path(), "foobar.txt"); + + ASSERT_TRUE(tmpDir->Valid()); + ASSERT_FALSE(exists(path)); + + EXPECT_TRUE(createNewEmptyFile(path)); + EXPECT_TRUE(exists(path)) << path; + EXPECT_TRUE(removeFile(path)); +} + diff --git a/testing/test_files/example.txt b/testing/test_files/example.txt new file mode 100644 index 000000000..e69de29bb From 181e6eec1b06e42992d94f4d840bd25e1b6ad125 Mon Sep 17 00:00:00 2001 From: Steve Peters <scpeters@openrobotics.org> Date: Mon, 11 Apr 2022 18:41:05 -0700 Subject: [PATCH 146/219] examples/CMakeLists.txt: fix find version variable (#339) Use ignition-common5_VERSION_MAJOR to aid search/replace scripts. Signed-off-by: Steve Peters <scpeters@openrobotics.org> --- examples/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index a2e45eb68..efea4b831 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 2.8 FATAL_ERROR) # Find the ignition-common library -set(IGN_COMMON_VER 5) -find_package(ignition-common${IGN_COMMON_VER} QUIET REQUIRED COMPONENTS events profiler) +find_package(ignition-common5 QUIET REQUIRED COMPONENTS events profiler) +set(IGN_COMMON_VER ${ignition-common5_VERSION_MAJOR}) add_executable(assert_example assert_example.cc) target_link_libraries(assert_example ignition-common${IGN_COMMON_VER}::core) From ae90d80437318fbbda8d09a514990a38e210b27d Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Wed, 13 Apr 2022 17:11:37 -0700 Subject: [PATCH 147/219] Bumps in garden : ign-common5 (#340) Signed-off-by: methylDragon <methylDragon@gmail.com> --- .github/ci/packages.apt | 2 +- CMakeLists.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/ci/packages.apt b/.github/ci/packages.apt index ce21ee2b1..c5d9e1c0e 100644 --- a/.github/ci/packages.apt +++ b/.github/ci/packages.apt @@ -7,7 +7,7 @@ libgdal-dev libgts-dev libignition-cmake2-dev libignition-math7-dev -libignition-utils1-dev +libignition-utils2-dev libswscale-dev libtinyxml2-dev pkg-config diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bbaba937..1b0ba9ec0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,8 +53,8 @@ set(IGN_MATH_VER ${ignition-math7_VERSION_MAJOR}) #-------------------------------------- # Find ignition-utils -ign_find_package(ignition-utils1 REQUIRED VERSION 1.0) -set(IGN_UTILS_VER ${ignition-utils1_VERSION_MAJOR}) +ign_find_package(ignition-utils2 REQUIRED) +set(IGN_UTILS_VER ${ignition-utils2_VERSION_MAJOR}) #-------------------------------------- # Find Tinyxml2 From c2a34dd4c584f06ec6e3b1fa865aadafa9c5c49b Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Wed, 13 Apr 2022 22:25:17 -0700 Subject: [PATCH 148/219] Use ign-utils instead of ign-cmake utilities (#341) * Use ign-utils instead of ign-cmake utilities Signed-off-by: Louise Poubel <louise@openrobotics.org> * Dummy commit * Dummy commit Co-authored-by: methylDragon <methylDragon@gmail.com> --- CMakeLists.txt | 2 +- av/src/AudioDecoder_TEST.cc | 2 +- av/src/CMakeLists.txt | 1 - src/CMakeLists.txt | 6 ++---- src/Filesystem_TEST.cc | 2 +- src/TempDirectory_TEST.cc | 2 +- src/WorkerPool_TEST.cc | 2 +- 7 files changed, 7 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b0ba9ec0..7a6672325 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ project(ignition-common5 VERSION 5.0.0) #============================================================================ # Find ignition-cmake #============================================================================ -find_package(ignition-cmake2 2.8.0 REQUIRED COMPONENTS utilities) +find_package(ignition-cmake2 2.8.0 REQUIRED) set(IGN_CMAKE_VER ${ignition-cmake2_VERSION_MAJOR}) #============================================================================ diff --git a/av/src/AudioDecoder_TEST.cc b/av/src/AudioDecoder_TEST.cc index cb5d09b87..c8331cc7f 100644 --- a/av/src/AudioDecoder_TEST.cc +++ b/av/src/AudioDecoder_TEST.cc @@ -17,7 +17,7 @@ #include <gtest/gtest.h> #include <ignition/common/AudioDecoder.hh> -#include <ignition/utilities/ExtraTestMacros.hh> +#include <ignition/utils/ExtraTestMacros.hh> #include "test_config.h" diff --git a/av/src/CMakeLists.txt b/av/src/CMakeLists.txt index ff959e31a..941e46384 100644 --- a/av/src/CMakeLists.txt +++ b/av/src/CMakeLists.txt @@ -24,6 +24,5 @@ endif() ign_build_tests(TYPE UNIT SOURCES ${gtest_sources} LIB_DEPS ${av_target} - ignition-cmake${IGN_CMAKE_VER}::utilities ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 62cc2ef15..81d70c5ef 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -15,8 +15,8 @@ else() endif() # Link the libraries that we always need -target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} - PRIVATE +target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} + PRIVATE ${DL_TARGET} ${CXX_FILESYSTEM_LIBRARIES} PUBLIC @@ -48,8 +48,6 @@ endif() ign_build_tests( TYPE UNIT SOURCES ${gtest_sources} - LIB_DEPS - ignition-cmake${IGN_CMAKE_VER}::utilities INCLUDE_DIRS # Used to make internal source file headers visible to the unit tests ${CMAKE_CURRENT_SOURCE_DIR} diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index a3db203bb..22e9fc1f9 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -17,7 +17,7 @@ #include <gtest/gtest.h> -#include <ignition/utilities/ExtraTestMacros.hh> +#include <ignition/utils/ExtraTestMacros.hh> #include <ignition/common/Console.hh> #include <ignition/common/Filesystem.hh> diff --git a/src/TempDirectory_TEST.cc b/src/TempDirectory_TEST.cc index 4fde626d6..77c3f56c5 100644 --- a/src/TempDirectory_TEST.cc +++ b/src/TempDirectory_TEST.cc @@ -18,7 +18,7 @@ #include <gtest/gtest.h> #include <ignition/common/TempDirectory.hh> -#include <ignition/utilities/ExtraTestMacros.hh> +#include <ignition/utils/ExtraTestMacros.hh> ///////////////////////////////////////////////// TEST(TempDirectory, tempDirectoryPath) diff --git a/src/WorkerPool_TEST.cc b/src/WorkerPool_TEST.cc index eddfe95fc..7d2f8252a 100644 --- a/src/WorkerPool_TEST.cc +++ b/src/WorkerPool_TEST.cc @@ -21,7 +21,7 @@ #include "ignition/common/Console.hh" #include "ignition/common/WorkerPool.hh" -#include "ignition/utilities/ExtraTestMacros.hh" +#include "ignition/utils/ExtraTestMacros.hh" namespace igncmn = ignition::common; using namespace igncmn; From 0eafe48a84416f13550da4dfb0dbca277afdef39 Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Thu, 14 Apr 2022 16:10:42 -0700 Subject: [PATCH 149/219] Bumps in garden : ign-common5 (#342) Signed-off-by: methylDragon <methylDragon@gmail.com> --- .github/ci/packages.apt | 2 +- CMakeLists.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/ci/packages.apt b/.github/ci/packages.apt index c5d9e1c0e..7f937f3e6 100644 --- a/.github/ci/packages.apt +++ b/.github/ci/packages.apt @@ -5,7 +5,7 @@ libavutil-dev libfreeimage-dev libgdal-dev libgts-dev -libignition-cmake2-dev +libignition-cmake3-dev libignition-math7-dev libignition-utils2-dev libswscale-dev diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a6672325..7e59b49b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,8 +8,8 @@ project(ignition-common5 VERSION 5.0.0) #============================================================================ # Find ignition-cmake #============================================================================ -find_package(ignition-cmake2 2.8.0 REQUIRED) -set(IGN_CMAKE_VER ${ignition-cmake2_VERSION_MAJOR}) +find_package(ignition-cmake3 REQUIRED) +set(IGN_CMAKE_VER ${ignition-cmake3_VERSION_MAJOR}) #============================================================================ # Configure the project From 153ce13f024f4c09ead70911c6e43e91236f5efd Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Fri, 15 Apr 2022 09:02:58 -0700 Subject: [PATCH 150/219] Make Timer_TEST more robust (#343) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Louise Poubel <louise@openrobotics.org> Co-authored-by: Alejandro HernΓ‘ndez Cordero <ahcorde@gmail.com> --- src/Timer_TEST.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Timer_TEST.cc b/src/Timer_TEST.cc index 70628df24..651ae8e5d 100644 --- a/src/Timer_TEST.cc +++ b/src/Timer_TEST.cc @@ -36,6 +36,7 @@ TEST(Timer_TEST, Sequence) // Start the timer t.Start(); EXPECT_TRUE(t.Running()); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); EXPECT_LT(0.0, t.ElapsedTime().count()); t.Stop(); From 1b1ad37b31be684b3679d8b92cca957addeaab2f Mon Sep 17 00:00:00 2001 From: Kenji Brameld <kenjibrameld@gmail.com> Date: Tue, 19 Apr 2022 00:10:56 +0900 Subject: [PATCH 151/219] prevent switch case statement fall through. (#345) Signed-off-by: Kenji Brameld <kenjibrameld@gmail.com> --- graphics/src/SVGLoader.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/graphics/src/SVGLoader.cc b/graphics/src/SVGLoader.cc index 88328f765..c81129910 100644 --- a/graphics/src/SVGLoader.cc +++ b/graphics/src/SVGLoader.cc @@ -597,6 +597,7 @@ ignition::math::Vector2d SVGLoader::Implementation::SubpathToPolyline( _last = pEnd; i += 7; } + break; // Z and z indicate closed path. // just add the first point to the list case 'Z': From 3490cee15c170e52fd52e8ac6e0eaa05a1f9ca4b Mon Sep 17 00:00:00 2001 From: Onur Berk Tore <otore19@ku.edu.tr> Date: Tue, 26 Apr 2022 23:38:18 +0300 Subject: [PATCH 152/219] [DOCUMENTATION] Adds full path for the profiler Signed-off by: Onur Berk Tore otore19@ku.edu.tr --- tutorials/profiler.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tutorials/profiler.md b/tutorials/profiler.md index 2d2059d20..231b9f8f1 100644 --- a/tutorials/profiler.md +++ b/tutorials/profiler.md @@ -118,9 +118,9 @@ When compiling with ``colcon``: colcon build --cmake-args -DENABLE_PROFILER=1 ``` -Run your Ignition library then open the profiler browser using: +Run your Ignition library then go to your ignition installation path and open the profiler browser using: ``` -ign_remotery_vis +libexec/ignition/ignition-common<N>/ign_remotery_vis ``` If the profiler is run successfully, you should see output in a browser. Similar to this From 81c655426e2f4c84703c963448688effc8c900ea Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Thu, 28 Apr 2022 00:21:02 -0700 Subject: [PATCH 153/219] Move header files with git mv Signed-off-by: methylDragon <methylDragon@gmail.com> --- av/include/{ignition => gz}/common/AudioDecoder.hh | 0 av/include/{ignition => gz}/common/CMakeLists.txt | 0 av/include/{ignition => gz}/common/HWEncoder.hh | 0 av/include/{ignition => gz}/common/HWVideo.hh | 0 av/include/{ignition => gz}/common/Video.hh | 0 av/include/{ignition => gz}/common/VideoEncoder.hh | 0 av/include/{ignition => gz}/common/av/Util.hh | 0 av/include/{ignition => gz}/common/ffmpeg_inc.hh | 0 events/include/{ignition => gz}/common/CMakeLists.txt | 0 events/include/{ignition => gz}/common/Event.hh | 0 events/include/{ignition => gz}/common/KeyEvent.hh | 0 events/include/{ignition => gz}/common/MouseEvent.hh | 0 events/include/{ignition => gz}/common/events/Types.hh | 0 geospatial/include/{ignition => gz}/common/CMakeLists.txt | 0 geospatial/include/{ignition => gz}/common/geospatial/Dem.hh | 0 .../include/{ignition => gz}/common/geospatial/HeightmapData.hh | 0 .../include/{ignition => gz}/common/geospatial/ImageHeightmap.hh | 0 graphics/include/{ignition => gz}/common/Animation.hh | 0 graphics/include/{ignition => gz}/common/BVHLoader.hh | 0 graphics/include/{ignition => gz}/common/CMakeLists.txt | 0 graphics/include/{ignition => gz}/common/ColladaExporter.hh | 0 graphics/include/{ignition => gz}/common/ColladaLoader.hh | 0 graphics/include/{ignition => gz}/common/GTSMeshUtils.hh | 0 graphics/include/{ignition => gz}/common/Image.hh | 0 graphics/include/{ignition => gz}/common/KeyFrame.hh | 0 graphics/include/{ignition => gz}/common/Material.hh | 0 graphics/include/{ignition => gz}/common/Mesh.hh | 0 graphics/include/{ignition => gz}/common/MeshCSG.hh | 0 graphics/include/{ignition => gz}/common/MeshExporter.hh | 0 graphics/include/{ignition => gz}/common/MeshLoader.hh | 0 graphics/include/{ignition => gz}/common/MeshManager.hh | 0 graphics/include/{ignition => gz}/common/NodeAnimation.hh | 0 graphics/include/{ignition => gz}/common/NodeTransform.hh | 0 graphics/include/{ignition => gz}/common/OBJLoader.hh | 0 graphics/include/{ignition => gz}/common/Pbr.hh | 0 graphics/include/{ignition => gz}/common/STLLoader.hh | 0 graphics/include/{ignition => gz}/common/SVGLoader.hh | 0 graphics/include/{ignition => gz}/common/Skeleton.hh | 0 graphics/include/{ignition => gz}/common/SkeletonAnimation.hh | 0 graphics/include/{ignition => gz}/common/SkeletonNode.hh | 0 graphics/include/{ignition => gz}/common/SubMesh.hh | 0 graphics/include/{ignition => gz}/common/graphics/Types.hh | 0 include/{ignition => gz}/CMakeLists.txt | 0 include/{ignition => gz}/common/Base64.hh | 0 include/{ignition => gz}/common/Battery.hh | 0 include/{ignition => gz}/common/CMakeLists.txt | 0 include/{ignition => gz}/common/Console.hh | 0 include/{ignition => gz}/common/EnumIface.hh | 0 include/{ignition => gz}/common/Filesystem.hh | 0 include/{ignition => gz}/common/FlagSet.hh | 0 include/{ignition => gz}/common/MaterialDensity.hh | 0 include/{ignition => gz}/common/MovingWindowFilter.hh | 0 include/{ignition => gz}/common/Plugin.hh | 0 include/{ignition => gz}/common/PluginInfo.hh | 0 include/{ignition => gz}/common/PluginLoader.hh | 0 include/{ignition => gz}/common/PluginMacros.hh | 0 include/{ignition => gz}/common/PluginPtr.hh | 0 include/{ignition => gz}/common/SignalHandler.hh | 0 include/{ignition => gz}/common/SingletonT.hh | 0 include/{ignition => gz}/common/SpecializedPlugin.hh | 0 include/{ignition => gz}/common/SpecializedPluginPtr.hh | 0 include/{ignition => gz}/common/StringUtils.hh | 0 include/{ignition => gz}/common/SuppressWarning.hh | 0 include/{ignition => gz}/common/SystemPaths.hh | 0 include/{ignition => gz}/common/TempDirectory.hh | 0 include/{ignition => gz}/common/TemplateHelpers.hh | 0 include/{ignition => gz}/common/Timer.hh | 0 include/{ignition => gz}/common/URI.hh | 0 include/{ignition => gz}/common/Util.hh | 0 include/{ignition => gz}/common/Uuid.hh | 0 include/{ignition => gz}/common/WorkerPool.hh | 0 include/{ignition => gz}/common/config.hh.in | 0 include/{ignition => gz}/common/detail/Plugin.hh | 0 include/{ignition => gz}/common/detail/PluginLoader.hh | 0 include/{ignition => gz}/common/detail/PluginMacros.hh | 0 include/{ignition => gz}/common/detail/PluginPtr.hh | 0 include/{ignition => gz}/common/detail/SpecializedPlugin.hh | 0 include/{ignition => gz}/common/detail/TemplateHelpers.hh | 0 profiler/include/{ignition => gz}/common/Profiler.hh | 0 testing/include/{ignition => gz}/common/CMakeLists.txt | 0 testing/include/{ignition => gz}/common/testing/AutoLogFixture.hh | 0 testing/include/{ignition => gz}/common/testing/BazelTestPaths.hh | 0 testing/include/{ignition => gz}/common/testing/CMakeTestPaths.hh | 0 testing/include/{ignition => gz}/common/testing/TestPaths.hh | 0 testing/include/{ignition => gz}/common/testing/Utils.hh | 0 .../{ignition => gz}/common/testing/detail/AutoLogFixture.hh | 0 86 files changed, 0 insertions(+), 0 deletions(-) rename av/include/{ignition => gz}/common/AudioDecoder.hh (100%) rename av/include/{ignition => gz}/common/CMakeLists.txt (100%) rename av/include/{ignition => gz}/common/HWEncoder.hh (100%) rename av/include/{ignition => gz}/common/HWVideo.hh (100%) rename av/include/{ignition => gz}/common/Video.hh (100%) rename av/include/{ignition => gz}/common/VideoEncoder.hh (100%) rename av/include/{ignition => gz}/common/av/Util.hh (100%) rename av/include/{ignition => gz}/common/ffmpeg_inc.hh (100%) rename events/include/{ignition => gz}/common/CMakeLists.txt (100%) rename events/include/{ignition => gz}/common/Event.hh (100%) rename events/include/{ignition => gz}/common/KeyEvent.hh (100%) rename events/include/{ignition => gz}/common/MouseEvent.hh (100%) rename events/include/{ignition => gz}/common/events/Types.hh (100%) rename geospatial/include/{ignition => gz}/common/CMakeLists.txt (100%) rename geospatial/include/{ignition => gz}/common/geospatial/Dem.hh (100%) rename geospatial/include/{ignition => gz}/common/geospatial/HeightmapData.hh (100%) rename geospatial/include/{ignition => gz}/common/geospatial/ImageHeightmap.hh (100%) rename graphics/include/{ignition => gz}/common/Animation.hh (100%) rename graphics/include/{ignition => gz}/common/BVHLoader.hh (100%) rename graphics/include/{ignition => gz}/common/CMakeLists.txt (100%) rename graphics/include/{ignition => gz}/common/ColladaExporter.hh (100%) rename graphics/include/{ignition => gz}/common/ColladaLoader.hh (100%) rename graphics/include/{ignition => gz}/common/GTSMeshUtils.hh (100%) rename graphics/include/{ignition => gz}/common/Image.hh (100%) rename graphics/include/{ignition => gz}/common/KeyFrame.hh (100%) rename graphics/include/{ignition => gz}/common/Material.hh (100%) rename graphics/include/{ignition => gz}/common/Mesh.hh (100%) rename graphics/include/{ignition => gz}/common/MeshCSG.hh (100%) rename graphics/include/{ignition => gz}/common/MeshExporter.hh (100%) rename graphics/include/{ignition => gz}/common/MeshLoader.hh (100%) rename graphics/include/{ignition => gz}/common/MeshManager.hh (100%) rename graphics/include/{ignition => gz}/common/NodeAnimation.hh (100%) rename graphics/include/{ignition => gz}/common/NodeTransform.hh (100%) rename graphics/include/{ignition => gz}/common/OBJLoader.hh (100%) rename graphics/include/{ignition => gz}/common/Pbr.hh (100%) rename graphics/include/{ignition => gz}/common/STLLoader.hh (100%) rename graphics/include/{ignition => gz}/common/SVGLoader.hh (100%) rename graphics/include/{ignition => gz}/common/Skeleton.hh (100%) rename graphics/include/{ignition => gz}/common/SkeletonAnimation.hh (100%) rename graphics/include/{ignition => gz}/common/SkeletonNode.hh (100%) rename graphics/include/{ignition => gz}/common/SubMesh.hh (100%) rename graphics/include/{ignition => gz}/common/graphics/Types.hh (100%) rename include/{ignition => gz}/CMakeLists.txt (100%) rename include/{ignition => gz}/common/Base64.hh (100%) rename include/{ignition => gz}/common/Battery.hh (100%) rename include/{ignition => gz}/common/CMakeLists.txt (100%) rename include/{ignition => gz}/common/Console.hh (100%) rename include/{ignition => gz}/common/EnumIface.hh (100%) rename include/{ignition => gz}/common/Filesystem.hh (100%) rename include/{ignition => gz}/common/FlagSet.hh (100%) rename include/{ignition => gz}/common/MaterialDensity.hh (100%) rename include/{ignition => gz}/common/MovingWindowFilter.hh (100%) rename include/{ignition => gz}/common/Plugin.hh (100%) rename include/{ignition => gz}/common/PluginInfo.hh (100%) rename include/{ignition => gz}/common/PluginLoader.hh (100%) rename include/{ignition => gz}/common/PluginMacros.hh (100%) rename include/{ignition => gz}/common/PluginPtr.hh (100%) rename include/{ignition => gz}/common/SignalHandler.hh (100%) rename include/{ignition => gz}/common/SingletonT.hh (100%) rename include/{ignition => gz}/common/SpecializedPlugin.hh (100%) rename include/{ignition => gz}/common/SpecializedPluginPtr.hh (100%) rename include/{ignition => gz}/common/StringUtils.hh (100%) rename include/{ignition => gz}/common/SuppressWarning.hh (100%) rename include/{ignition => gz}/common/SystemPaths.hh (100%) rename include/{ignition => gz}/common/TempDirectory.hh (100%) rename include/{ignition => gz}/common/TemplateHelpers.hh (100%) rename include/{ignition => gz}/common/Timer.hh (100%) rename include/{ignition => gz}/common/URI.hh (100%) rename include/{ignition => gz}/common/Util.hh (100%) rename include/{ignition => gz}/common/Uuid.hh (100%) rename include/{ignition => gz}/common/WorkerPool.hh (100%) rename include/{ignition => gz}/common/config.hh.in (100%) rename include/{ignition => gz}/common/detail/Plugin.hh (100%) rename include/{ignition => gz}/common/detail/PluginLoader.hh (100%) rename include/{ignition => gz}/common/detail/PluginMacros.hh (100%) rename include/{ignition => gz}/common/detail/PluginPtr.hh (100%) rename include/{ignition => gz}/common/detail/SpecializedPlugin.hh (100%) rename include/{ignition => gz}/common/detail/TemplateHelpers.hh (100%) rename profiler/include/{ignition => gz}/common/Profiler.hh (100%) rename testing/include/{ignition => gz}/common/CMakeLists.txt (100%) rename testing/include/{ignition => gz}/common/testing/AutoLogFixture.hh (100%) rename testing/include/{ignition => gz}/common/testing/BazelTestPaths.hh (100%) rename testing/include/{ignition => gz}/common/testing/CMakeTestPaths.hh (100%) rename testing/include/{ignition => gz}/common/testing/TestPaths.hh (100%) rename testing/include/{ignition => gz}/common/testing/Utils.hh (100%) rename testing/include/{ignition => gz}/common/testing/detail/AutoLogFixture.hh (100%) diff --git a/av/include/ignition/common/AudioDecoder.hh b/av/include/gz/common/AudioDecoder.hh similarity index 100% rename from av/include/ignition/common/AudioDecoder.hh rename to av/include/gz/common/AudioDecoder.hh diff --git a/av/include/ignition/common/CMakeLists.txt b/av/include/gz/common/CMakeLists.txt similarity index 100% rename from av/include/ignition/common/CMakeLists.txt rename to av/include/gz/common/CMakeLists.txt diff --git a/av/include/ignition/common/HWEncoder.hh b/av/include/gz/common/HWEncoder.hh similarity index 100% rename from av/include/ignition/common/HWEncoder.hh rename to av/include/gz/common/HWEncoder.hh diff --git a/av/include/ignition/common/HWVideo.hh b/av/include/gz/common/HWVideo.hh similarity index 100% rename from av/include/ignition/common/HWVideo.hh rename to av/include/gz/common/HWVideo.hh diff --git a/av/include/ignition/common/Video.hh b/av/include/gz/common/Video.hh similarity index 100% rename from av/include/ignition/common/Video.hh rename to av/include/gz/common/Video.hh diff --git a/av/include/ignition/common/VideoEncoder.hh b/av/include/gz/common/VideoEncoder.hh similarity index 100% rename from av/include/ignition/common/VideoEncoder.hh rename to av/include/gz/common/VideoEncoder.hh diff --git a/av/include/ignition/common/av/Util.hh b/av/include/gz/common/av/Util.hh similarity index 100% rename from av/include/ignition/common/av/Util.hh rename to av/include/gz/common/av/Util.hh diff --git a/av/include/ignition/common/ffmpeg_inc.hh b/av/include/gz/common/ffmpeg_inc.hh similarity index 100% rename from av/include/ignition/common/ffmpeg_inc.hh rename to av/include/gz/common/ffmpeg_inc.hh diff --git a/events/include/ignition/common/CMakeLists.txt b/events/include/gz/common/CMakeLists.txt similarity index 100% rename from events/include/ignition/common/CMakeLists.txt rename to events/include/gz/common/CMakeLists.txt diff --git a/events/include/ignition/common/Event.hh b/events/include/gz/common/Event.hh similarity index 100% rename from events/include/ignition/common/Event.hh rename to events/include/gz/common/Event.hh diff --git a/events/include/ignition/common/KeyEvent.hh b/events/include/gz/common/KeyEvent.hh similarity index 100% rename from events/include/ignition/common/KeyEvent.hh rename to events/include/gz/common/KeyEvent.hh diff --git a/events/include/ignition/common/MouseEvent.hh b/events/include/gz/common/MouseEvent.hh similarity index 100% rename from events/include/ignition/common/MouseEvent.hh rename to events/include/gz/common/MouseEvent.hh diff --git a/events/include/ignition/common/events/Types.hh b/events/include/gz/common/events/Types.hh similarity index 100% rename from events/include/ignition/common/events/Types.hh rename to events/include/gz/common/events/Types.hh diff --git a/geospatial/include/ignition/common/CMakeLists.txt b/geospatial/include/gz/common/CMakeLists.txt similarity index 100% rename from geospatial/include/ignition/common/CMakeLists.txt rename to geospatial/include/gz/common/CMakeLists.txt diff --git a/geospatial/include/ignition/common/geospatial/Dem.hh b/geospatial/include/gz/common/geospatial/Dem.hh similarity index 100% rename from geospatial/include/ignition/common/geospatial/Dem.hh rename to geospatial/include/gz/common/geospatial/Dem.hh diff --git a/geospatial/include/ignition/common/geospatial/HeightmapData.hh b/geospatial/include/gz/common/geospatial/HeightmapData.hh similarity index 100% rename from geospatial/include/ignition/common/geospatial/HeightmapData.hh rename to geospatial/include/gz/common/geospatial/HeightmapData.hh diff --git a/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh b/geospatial/include/gz/common/geospatial/ImageHeightmap.hh similarity index 100% rename from geospatial/include/ignition/common/geospatial/ImageHeightmap.hh rename to geospatial/include/gz/common/geospatial/ImageHeightmap.hh diff --git a/graphics/include/ignition/common/Animation.hh b/graphics/include/gz/common/Animation.hh similarity index 100% rename from graphics/include/ignition/common/Animation.hh rename to graphics/include/gz/common/Animation.hh diff --git a/graphics/include/ignition/common/BVHLoader.hh b/graphics/include/gz/common/BVHLoader.hh similarity index 100% rename from graphics/include/ignition/common/BVHLoader.hh rename to graphics/include/gz/common/BVHLoader.hh diff --git a/graphics/include/ignition/common/CMakeLists.txt b/graphics/include/gz/common/CMakeLists.txt similarity index 100% rename from graphics/include/ignition/common/CMakeLists.txt rename to graphics/include/gz/common/CMakeLists.txt diff --git a/graphics/include/ignition/common/ColladaExporter.hh b/graphics/include/gz/common/ColladaExporter.hh similarity index 100% rename from graphics/include/ignition/common/ColladaExporter.hh rename to graphics/include/gz/common/ColladaExporter.hh diff --git a/graphics/include/ignition/common/ColladaLoader.hh b/graphics/include/gz/common/ColladaLoader.hh similarity index 100% rename from graphics/include/ignition/common/ColladaLoader.hh rename to graphics/include/gz/common/ColladaLoader.hh diff --git a/graphics/include/ignition/common/GTSMeshUtils.hh b/graphics/include/gz/common/GTSMeshUtils.hh similarity index 100% rename from graphics/include/ignition/common/GTSMeshUtils.hh rename to graphics/include/gz/common/GTSMeshUtils.hh diff --git a/graphics/include/ignition/common/Image.hh b/graphics/include/gz/common/Image.hh similarity index 100% rename from graphics/include/ignition/common/Image.hh rename to graphics/include/gz/common/Image.hh diff --git a/graphics/include/ignition/common/KeyFrame.hh b/graphics/include/gz/common/KeyFrame.hh similarity index 100% rename from graphics/include/ignition/common/KeyFrame.hh rename to graphics/include/gz/common/KeyFrame.hh diff --git a/graphics/include/ignition/common/Material.hh b/graphics/include/gz/common/Material.hh similarity index 100% rename from graphics/include/ignition/common/Material.hh rename to graphics/include/gz/common/Material.hh diff --git a/graphics/include/ignition/common/Mesh.hh b/graphics/include/gz/common/Mesh.hh similarity index 100% rename from graphics/include/ignition/common/Mesh.hh rename to graphics/include/gz/common/Mesh.hh diff --git a/graphics/include/ignition/common/MeshCSG.hh b/graphics/include/gz/common/MeshCSG.hh similarity index 100% rename from graphics/include/ignition/common/MeshCSG.hh rename to graphics/include/gz/common/MeshCSG.hh diff --git a/graphics/include/ignition/common/MeshExporter.hh b/graphics/include/gz/common/MeshExporter.hh similarity index 100% rename from graphics/include/ignition/common/MeshExporter.hh rename to graphics/include/gz/common/MeshExporter.hh diff --git a/graphics/include/ignition/common/MeshLoader.hh b/graphics/include/gz/common/MeshLoader.hh similarity index 100% rename from graphics/include/ignition/common/MeshLoader.hh rename to graphics/include/gz/common/MeshLoader.hh diff --git a/graphics/include/ignition/common/MeshManager.hh b/graphics/include/gz/common/MeshManager.hh similarity index 100% rename from graphics/include/ignition/common/MeshManager.hh rename to graphics/include/gz/common/MeshManager.hh diff --git a/graphics/include/ignition/common/NodeAnimation.hh b/graphics/include/gz/common/NodeAnimation.hh similarity index 100% rename from graphics/include/ignition/common/NodeAnimation.hh rename to graphics/include/gz/common/NodeAnimation.hh diff --git a/graphics/include/ignition/common/NodeTransform.hh b/graphics/include/gz/common/NodeTransform.hh similarity index 100% rename from graphics/include/ignition/common/NodeTransform.hh rename to graphics/include/gz/common/NodeTransform.hh diff --git a/graphics/include/ignition/common/OBJLoader.hh b/graphics/include/gz/common/OBJLoader.hh similarity index 100% rename from graphics/include/ignition/common/OBJLoader.hh rename to graphics/include/gz/common/OBJLoader.hh diff --git a/graphics/include/ignition/common/Pbr.hh b/graphics/include/gz/common/Pbr.hh similarity index 100% rename from graphics/include/ignition/common/Pbr.hh rename to graphics/include/gz/common/Pbr.hh diff --git a/graphics/include/ignition/common/STLLoader.hh b/graphics/include/gz/common/STLLoader.hh similarity index 100% rename from graphics/include/ignition/common/STLLoader.hh rename to graphics/include/gz/common/STLLoader.hh diff --git a/graphics/include/ignition/common/SVGLoader.hh b/graphics/include/gz/common/SVGLoader.hh similarity index 100% rename from graphics/include/ignition/common/SVGLoader.hh rename to graphics/include/gz/common/SVGLoader.hh diff --git a/graphics/include/ignition/common/Skeleton.hh b/graphics/include/gz/common/Skeleton.hh similarity index 100% rename from graphics/include/ignition/common/Skeleton.hh rename to graphics/include/gz/common/Skeleton.hh diff --git a/graphics/include/ignition/common/SkeletonAnimation.hh b/graphics/include/gz/common/SkeletonAnimation.hh similarity index 100% rename from graphics/include/ignition/common/SkeletonAnimation.hh rename to graphics/include/gz/common/SkeletonAnimation.hh diff --git a/graphics/include/ignition/common/SkeletonNode.hh b/graphics/include/gz/common/SkeletonNode.hh similarity index 100% rename from graphics/include/ignition/common/SkeletonNode.hh rename to graphics/include/gz/common/SkeletonNode.hh diff --git a/graphics/include/ignition/common/SubMesh.hh b/graphics/include/gz/common/SubMesh.hh similarity index 100% rename from graphics/include/ignition/common/SubMesh.hh rename to graphics/include/gz/common/SubMesh.hh diff --git a/graphics/include/ignition/common/graphics/Types.hh b/graphics/include/gz/common/graphics/Types.hh similarity index 100% rename from graphics/include/ignition/common/graphics/Types.hh rename to graphics/include/gz/common/graphics/Types.hh diff --git a/include/ignition/CMakeLists.txt b/include/gz/CMakeLists.txt similarity index 100% rename from include/ignition/CMakeLists.txt rename to include/gz/CMakeLists.txt diff --git a/include/ignition/common/Base64.hh b/include/gz/common/Base64.hh similarity index 100% rename from include/ignition/common/Base64.hh rename to include/gz/common/Base64.hh diff --git a/include/ignition/common/Battery.hh b/include/gz/common/Battery.hh similarity index 100% rename from include/ignition/common/Battery.hh rename to include/gz/common/Battery.hh diff --git a/include/ignition/common/CMakeLists.txt b/include/gz/common/CMakeLists.txt similarity index 100% rename from include/ignition/common/CMakeLists.txt rename to include/gz/common/CMakeLists.txt diff --git a/include/ignition/common/Console.hh b/include/gz/common/Console.hh similarity index 100% rename from include/ignition/common/Console.hh rename to include/gz/common/Console.hh diff --git a/include/ignition/common/EnumIface.hh b/include/gz/common/EnumIface.hh similarity index 100% rename from include/ignition/common/EnumIface.hh rename to include/gz/common/EnumIface.hh diff --git a/include/ignition/common/Filesystem.hh b/include/gz/common/Filesystem.hh similarity index 100% rename from include/ignition/common/Filesystem.hh rename to include/gz/common/Filesystem.hh diff --git a/include/ignition/common/FlagSet.hh b/include/gz/common/FlagSet.hh similarity index 100% rename from include/ignition/common/FlagSet.hh rename to include/gz/common/FlagSet.hh diff --git a/include/ignition/common/MaterialDensity.hh b/include/gz/common/MaterialDensity.hh similarity index 100% rename from include/ignition/common/MaterialDensity.hh rename to include/gz/common/MaterialDensity.hh diff --git a/include/ignition/common/MovingWindowFilter.hh b/include/gz/common/MovingWindowFilter.hh similarity index 100% rename from include/ignition/common/MovingWindowFilter.hh rename to include/gz/common/MovingWindowFilter.hh diff --git a/include/ignition/common/Plugin.hh b/include/gz/common/Plugin.hh similarity index 100% rename from include/ignition/common/Plugin.hh rename to include/gz/common/Plugin.hh diff --git a/include/ignition/common/PluginInfo.hh b/include/gz/common/PluginInfo.hh similarity index 100% rename from include/ignition/common/PluginInfo.hh rename to include/gz/common/PluginInfo.hh diff --git a/include/ignition/common/PluginLoader.hh b/include/gz/common/PluginLoader.hh similarity index 100% rename from include/ignition/common/PluginLoader.hh rename to include/gz/common/PluginLoader.hh diff --git a/include/ignition/common/PluginMacros.hh b/include/gz/common/PluginMacros.hh similarity index 100% rename from include/ignition/common/PluginMacros.hh rename to include/gz/common/PluginMacros.hh diff --git a/include/ignition/common/PluginPtr.hh b/include/gz/common/PluginPtr.hh similarity index 100% rename from include/ignition/common/PluginPtr.hh rename to include/gz/common/PluginPtr.hh diff --git a/include/ignition/common/SignalHandler.hh b/include/gz/common/SignalHandler.hh similarity index 100% rename from include/ignition/common/SignalHandler.hh rename to include/gz/common/SignalHandler.hh diff --git a/include/ignition/common/SingletonT.hh b/include/gz/common/SingletonT.hh similarity index 100% rename from include/ignition/common/SingletonT.hh rename to include/gz/common/SingletonT.hh diff --git a/include/ignition/common/SpecializedPlugin.hh b/include/gz/common/SpecializedPlugin.hh similarity index 100% rename from include/ignition/common/SpecializedPlugin.hh rename to include/gz/common/SpecializedPlugin.hh diff --git a/include/ignition/common/SpecializedPluginPtr.hh b/include/gz/common/SpecializedPluginPtr.hh similarity index 100% rename from include/ignition/common/SpecializedPluginPtr.hh rename to include/gz/common/SpecializedPluginPtr.hh diff --git a/include/ignition/common/StringUtils.hh b/include/gz/common/StringUtils.hh similarity index 100% rename from include/ignition/common/StringUtils.hh rename to include/gz/common/StringUtils.hh diff --git a/include/ignition/common/SuppressWarning.hh b/include/gz/common/SuppressWarning.hh similarity index 100% rename from include/ignition/common/SuppressWarning.hh rename to include/gz/common/SuppressWarning.hh diff --git a/include/ignition/common/SystemPaths.hh b/include/gz/common/SystemPaths.hh similarity index 100% rename from include/ignition/common/SystemPaths.hh rename to include/gz/common/SystemPaths.hh diff --git a/include/ignition/common/TempDirectory.hh b/include/gz/common/TempDirectory.hh similarity index 100% rename from include/ignition/common/TempDirectory.hh rename to include/gz/common/TempDirectory.hh diff --git a/include/ignition/common/TemplateHelpers.hh b/include/gz/common/TemplateHelpers.hh similarity index 100% rename from include/ignition/common/TemplateHelpers.hh rename to include/gz/common/TemplateHelpers.hh diff --git a/include/ignition/common/Timer.hh b/include/gz/common/Timer.hh similarity index 100% rename from include/ignition/common/Timer.hh rename to include/gz/common/Timer.hh diff --git a/include/ignition/common/URI.hh b/include/gz/common/URI.hh similarity index 100% rename from include/ignition/common/URI.hh rename to include/gz/common/URI.hh diff --git a/include/ignition/common/Util.hh b/include/gz/common/Util.hh similarity index 100% rename from include/ignition/common/Util.hh rename to include/gz/common/Util.hh diff --git a/include/ignition/common/Uuid.hh b/include/gz/common/Uuid.hh similarity index 100% rename from include/ignition/common/Uuid.hh rename to include/gz/common/Uuid.hh diff --git a/include/ignition/common/WorkerPool.hh b/include/gz/common/WorkerPool.hh similarity index 100% rename from include/ignition/common/WorkerPool.hh rename to include/gz/common/WorkerPool.hh diff --git a/include/ignition/common/config.hh.in b/include/gz/common/config.hh.in similarity index 100% rename from include/ignition/common/config.hh.in rename to include/gz/common/config.hh.in diff --git a/include/ignition/common/detail/Plugin.hh b/include/gz/common/detail/Plugin.hh similarity index 100% rename from include/ignition/common/detail/Plugin.hh rename to include/gz/common/detail/Plugin.hh diff --git a/include/ignition/common/detail/PluginLoader.hh b/include/gz/common/detail/PluginLoader.hh similarity index 100% rename from include/ignition/common/detail/PluginLoader.hh rename to include/gz/common/detail/PluginLoader.hh diff --git a/include/ignition/common/detail/PluginMacros.hh b/include/gz/common/detail/PluginMacros.hh similarity index 100% rename from include/ignition/common/detail/PluginMacros.hh rename to include/gz/common/detail/PluginMacros.hh diff --git a/include/ignition/common/detail/PluginPtr.hh b/include/gz/common/detail/PluginPtr.hh similarity index 100% rename from include/ignition/common/detail/PluginPtr.hh rename to include/gz/common/detail/PluginPtr.hh diff --git a/include/ignition/common/detail/SpecializedPlugin.hh b/include/gz/common/detail/SpecializedPlugin.hh similarity index 100% rename from include/ignition/common/detail/SpecializedPlugin.hh rename to include/gz/common/detail/SpecializedPlugin.hh diff --git a/include/ignition/common/detail/TemplateHelpers.hh b/include/gz/common/detail/TemplateHelpers.hh similarity index 100% rename from include/ignition/common/detail/TemplateHelpers.hh rename to include/gz/common/detail/TemplateHelpers.hh diff --git a/profiler/include/ignition/common/Profiler.hh b/profiler/include/gz/common/Profiler.hh similarity index 100% rename from profiler/include/ignition/common/Profiler.hh rename to profiler/include/gz/common/Profiler.hh diff --git a/testing/include/ignition/common/CMakeLists.txt b/testing/include/gz/common/CMakeLists.txt similarity index 100% rename from testing/include/ignition/common/CMakeLists.txt rename to testing/include/gz/common/CMakeLists.txt diff --git a/testing/include/ignition/common/testing/AutoLogFixture.hh b/testing/include/gz/common/testing/AutoLogFixture.hh similarity index 100% rename from testing/include/ignition/common/testing/AutoLogFixture.hh rename to testing/include/gz/common/testing/AutoLogFixture.hh diff --git a/testing/include/ignition/common/testing/BazelTestPaths.hh b/testing/include/gz/common/testing/BazelTestPaths.hh similarity index 100% rename from testing/include/ignition/common/testing/BazelTestPaths.hh rename to testing/include/gz/common/testing/BazelTestPaths.hh diff --git a/testing/include/ignition/common/testing/CMakeTestPaths.hh b/testing/include/gz/common/testing/CMakeTestPaths.hh similarity index 100% rename from testing/include/ignition/common/testing/CMakeTestPaths.hh rename to testing/include/gz/common/testing/CMakeTestPaths.hh diff --git a/testing/include/ignition/common/testing/TestPaths.hh b/testing/include/gz/common/testing/TestPaths.hh similarity index 100% rename from testing/include/ignition/common/testing/TestPaths.hh rename to testing/include/gz/common/testing/TestPaths.hh diff --git a/testing/include/ignition/common/testing/Utils.hh b/testing/include/gz/common/testing/Utils.hh similarity index 100% rename from testing/include/ignition/common/testing/Utils.hh rename to testing/include/gz/common/testing/Utils.hh diff --git a/testing/include/ignition/common/testing/detail/AutoLogFixture.hh b/testing/include/gz/common/testing/detail/AutoLogFixture.hh similarity index 100% rename from testing/include/ignition/common/testing/detail/AutoLogFixture.hh rename to testing/include/gz/common/testing/detail/AutoLogFixture.hh From b06be248791c4f0f03b63be5628e61d40578647e Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Mon, 2 May 2022 20:58:45 -0700 Subject: [PATCH 154/219] Create redirection aliases Signed-off-by: methylDragon <methylDragon@gmail.com> --- av/include/ignition/common/AudioDecoder.hh | 18 ++++++++++++++++++ av/include/ignition/common/HWEncoder.hh | 18 ++++++++++++++++++ av/include/ignition/common/HWVideo.hh | 18 ++++++++++++++++++ av/include/ignition/common/Video.hh | 18 ++++++++++++++++++ av/include/ignition/common/VideoEncoder.hh | 18 ++++++++++++++++++ av/include/ignition/common/av.hh | 18 ++++++++++++++++++ av/include/ignition/common/av/Export.hh | 18 ++++++++++++++++++ av/include/ignition/common/av/Util.hh | 18 ++++++++++++++++++ av/include/ignition/common/av/detail/Export.hh | 18 ++++++++++++++++++ av/include/ignition/common/ffmpeg_inc.hh | 18 ++++++++++++++++++ events/include/ignition/common/Event.hh | 18 ++++++++++++++++++ events/include/ignition/common/KeyEvent.hh | 18 ++++++++++++++++++ events/include/ignition/common/MouseEvent.hh | 18 ++++++++++++++++++ events/include/ignition/common/events.hh | 18 ++++++++++++++++++ .../include/ignition/common/events/Export.hh | 18 ++++++++++++++++++ events/include/ignition/common/events/Types.hh | 18 ++++++++++++++++++ .../ignition/common/events/detail/Export.hh | 18 ++++++++++++++++++ .../include/ignition/common/geospatial.hh | 18 ++++++++++++++++++ .../include/ignition/common/geospatial/Dem.hh | 18 ++++++++++++++++++ .../ignition/common/geospatial/Export.hh | 18 ++++++++++++++++++ .../common/geospatial/HeightmapData.hh | 18 ++++++++++++++++++ .../common/geospatial/ImageHeightmap.hh | 18 ++++++++++++++++++ .../common/geospatial/detail/Export.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/Animation.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/BVHLoader.hh | 18 ++++++++++++++++++ .../include/ignition/common/ColladaExporter.hh | 18 ++++++++++++++++++ .../include/ignition/common/ColladaLoader.hh | 18 ++++++++++++++++++ .../include/ignition/common/GTSMeshUtils.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/Image.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/KeyFrame.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/Material.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/Mesh.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/MeshCSG.hh | 18 ++++++++++++++++++ .../include/ignition/common/MeshExporter.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/MeshLoader.hh | 18 ++++++++++++++++++ .../include/ignition/common/MeshManager.hh | 18 ++++++++++++++++++ .../include/ignition/common/NodeAnimation.hh | 18 ++++++++++++++++++ .../include/ignition/common/NodeTransform.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/OBJLoader.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/Pbr.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/STLLoader.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/SVGLoader.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/Skeleton.hh | 18 ++++++++++++++++++ .../ignition/common/SkeletonAnimation.hh | 18 ++++++++++++++++++ .../include/ignition/common/SkeletonNode.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/SubMesh.hh | 18 ++++++++++++++++++ graphics/include/ignition/common/graphics.hh | 18 ++++++++++++++++++ .../include/ignition/common/graphics/Export.hh | 18 ++++++++++++++++++ .../include/ignition/common/graphics/Types.hh | 18 ++++++++++++++++++ .../ignition/common/graphics/detail/Export.hh | 18 ++++++++++++++++++ include/ignition/common.hh | 18 ++++++++++++++++++ include/ignition/common/Base64.hh | 18 ++++++++++++++++++ include/ignition/common/Battery.hh | 18 ++++++++++++++++++ include/ignition/common/Console.hh | 18 ++++++++++++++++++ include/ignition/common/EnumIface.hh | 18 ++++++++++++++++++ include/ignition/common/Export.hh | 18 ++++++++++++++++++ include/ignition/common/Filesystem.hh | 18 ++++++++++++++++++ include/ignition/common/FlagSet.hh | 18 ++++++++++++++++++ include/ignition/common/MaterialDensity.hh | 18 ++++++++++++++++++ include/ignition/common/MovingWindowFilter.hh | 18 ++++++++++++++++++ include/ignition/common/Plugin.hh | 18 ++++++++++++++++++ include/ignition/common/PluginInfo.hh | 18 ++++++++++++++++++ include/ignition/common/PluginLoader.hh | 18 ++++++++++++++++++ include/ignition/common/PluginMacros.hh | 18 ++++++++++++++++++ include/ignition/common/PluginPtr.hh | 18 ++++++++++++++++++ include/ignition/common/SignalHandler.hh | 18 ++++++++++++++++++ include/ignition/common/SingletonT.hh | 18 ++++++++++++++++++ include/ignition/common/SpecializedPlugin.hh | 18 ++++++++++++++++++ .../ignition/common/SpecializedPluginPtr.hh | 18 ++++++++++++++++++ include/ignition/common/StringUtils.hh | 18 ++++++++++++++++++ include/ignition/common/SuppressWarning.hh | 18 ++++++++++++++++++ include/ignition/common/SystemPaths.hh | 18 ++++++++++++++++++ include/ignition/common/TempDirectory.hh | 18 ++++++++++++++++++ include/ignition/common/TemplateHelpers.hh | 18 ++++++++++++++++++ include/ignition/common/Timer.hh | 18 ++++++++++++++++++ include/ignition/common/URI.hh | 18 ++++++++++++++++++ include/ignition/common/Util.hh | 18 ++++++++++++++++++ include/ignition/common/Uuid.hh | 18 ++++++++++++++++++ include/ignition/common/WorkerPool.hh | 18 ++++++++++++++++++ include/ignition/common/config.hh | 18 ++++++++++++++++++ include/ignition/common/detail/Export.hh | 18 ++++++++++++++++++ include/ignition/common/detail/Plugin.hh | 18 ++++++++++++++++++ include/ignition/common/detail/PluginLoader.hh | 18 ++++++++++++++++++ include/ignition/common/detail/PluginMacros.hh | 18 ++++++++++++++++++ include/ignition/common/detail/PluginPtr.hh | 18 ++++++++++++++++++ .../common/detail/SpecializedPlugin.hh | 18 ++++++++++++++++++ .../ignition/common/detail/TemplateHelpers.hh | 18 ++++++++++++++++++ profiler/include/ignition/common/Profiler.hh | 18 ++++++++++++++++++ .../include/ignition/common/profiler/Export.hh | 18 ++++++++++++++++++ .../ignition/common/profiler/detail/Export.hh | 18 ++++++++++++++++++ testing/include/ignition/common/testing.hh | 18 ++++++++++++++++++ .../ignition/common/testing/AutoLogFixture.hh | 18 ++++++++++++++++++ .../ignition/common/testing/BazelTestPaths.hh | 18 ++++++++++++++++++ .../ignition/common/testing/CMakeTestPaths.hh | 18 ++++++++++++++++++ .../include/ignition/common/testing/Export.hh | 18 ++++++++++++++++++ .../ignition/common/testing/TestPaths.hh | 18 ++++++++++++++++++ .../include/ignition/common/testing/Utils.hh | 18 ++++++++++++++++++ .../common/testing/detail/AutoLogFixture.hh | 18 ++++++++++++++++++ .../ignition/common/testing/detail/Export.hh | 18 ++++++++++++++++++ 99 files changed, 1782 insertions(+) create mode 100644 av/include/ignition/common/AudioDecoder.hh create mode 100644 av/include/ignition/common/HWEncoder.hh create mode 100644 av/include/ignition/common/HWVideo.hh create mode 100644 av/include/ignition/common/Video.hh create mode 100644 av/include/ignition/common/VideoEncoder.hh create mode 100644 av/include/ignition/common/av.hh create mode 100644 av/include/ignition/common/av/Export.hh create mode 100644 av/include/ignition/common/av/Util.hh create mode 100644 av/include/ignition/common/av/detail/Export.hh create mode 100644 av/include/ignition/common/ffmpeg_inc.hh create mode 100644 events/include/ignition/common/Event.hh create mode 100644 events/include/ignition/common/KeyEvent.hh create mode 100644 events/include/ignition/common/MouseEvent.hh create mode 100644 events/include/ignition/common/events.hh create mode 100644 events/include/ignition/common/events/Export.hh create mode 100644 events/include/ignition/common/events/Types.hh create mode 100644 events/include/ignition/common/events/detail/Export.hh create mode 100644 geospatial/include/ignition/common/geospatial.hh create mode 100644 geospatial/include/ignition/common/geospatial/Dem.hh create mode 100644 geospatial/include/ignition/common/geospatial/Export.hh create mode 100644 geospatial/include/ignition/common/geospatial/HeightmapData.hh create mode 100644 geospatial/include/ignition/common/geospatial/ImageHeightmap.hh create mode 100644 geospatial/include/ignition/common/geospatial/detail/Export.hh create mode 100644 graphics/include/ignition/common/Animation.hh create mode 100644 graphics/include/ignition/common/BVHLoader.hh create mode 100644 graphics/include/ignition/common/ColladaExporter.hh create mode 100644 graphics/include/ignition/common/ColladaLoader.hh create mode 100644 graphics/include/ignition/common/GTSMeshUtils.hh create mode 100644 graphics/include/ignition/common/Image.hh create mode 100644 graphics/include/ignition/common/KeyFrame.hh create mode 100644 graphics/include/ignition/common/Material.hh create mode 100644 graphics/include/ignition/common/Mesh.hh create mode 100644 graphics/include/ignition/common/MeshCSG.hh create mode 100644 graphics/include/ignition/common/MeshExporter.hh create mode 100644 graphics/include/ignition/common/MeshLoader.hh create mode 100644 graphics/include/ignition/common/MeshManager.hh create mode 100644 graphics/include/ignition/common/NodeAnimation.hh create mode 100644 graphics/include/ignition/common/NodeTransform.hh create mode 100644 graphics/include/ignition/common/OBJLoader.hh create mode 100644 graphics/include/ignition/common/Pbr.hh create mode 100644 graphics/include/ignition/common/STLLoader.hh create mode 100644 graphics/include/ignition/common/SVGLoader.hh create mode 100644 graphics/include/ignition/common/Skeleton.hh create mode 100644 graphics/include/ignition/common/SkeletonAnimation.hh create mode 100644 graphics/include/ignition/common/SkeletonNode.hh create mode 100644 graphics/include/ignition/common/SubMesh.hh create mode 100644 graphics/include/ignition/common/graphics.hh create mode 100644 graphics/include/ignition/common/graphics/Export.hh create mode 100644 graphics/include/ignition/common/graphics/Types.hh create mode 100644 graphics/include/ignition/common/graphics/detail/Export.hh create mode 100644 include/ignition/common.hh create mode 100644 include/ignition/common/Base64.hh create mode 100644 include/ignition/common/Battery.hh create mode 100644 include/ignition/common/Console.hh create mode 100644 include/ignition/common/EnumIface.hh create mode 100644 include/ignition/common/Export.hh create mode 100644 include/ignition/common/Filesystem.hh create mode 100644 include/ignition/common/FlagSet.hh create mode 100644 include/ignition/common/MaterialDensity.hh create mode 100644 include/ignition/common/MovingWindowFilter.hh create mode 100644 include/ignition/common/Plugin.hh create mode 100644 include/ignition/common/PluginInfo.hh create mode 100644 include/ignition/common/PluginLoader.hh create mode 100644 include/ignition/common/PluginMacros.hh create mode 100644 include/ignition/common/PluginPtr.hh create mode 100644 include/ignition/common/SignalHandler.hh create mode 100644 include/ignition/common/SingletonT.hh create mode 100644 include/ignition/common/SpecializedPlugin.hh create mode 100644 include/ignition/common/SpecializedPluginPtr.hh create mode 100644 include/ignition/common/StringUtils.hh create mode 100644 include/ignition/common/SuppressWarning.hh create mode 100644 include/ignition/common/SystemPaths.hh create mode 100644 include/ignition/common/TempDirectory.hh create mode 100644 include/ignition/common/TemplateHelpers.hh create mode 100644 include/ignition/common/Timer.hh create mode 100644 include/ignition/common/URI.hh create mode 100644 include/ignition/common/Util.hh create mode 100644 include/ignition/common/Uuid.hh create mode 100644 include/ignition/common/WorkerPool.hh create mode 100644 include/ignition/common/config.hh create mode 100644 include/ignition/common/detail/Export.hh create mode 100644 include/ignition/common/detail/Plugin.hh create mode 100644 include/ignition/common/detail/PluginLoader.hh create mode 100644 include/ignition/common/detail/PluginMacros.hh create mode 100644 include/ignition/common/detail/PluginPtr.hh create mode 100644 include/ignition/common/detail/SpecializedPlugin.hh create mode 100644 include/ignition/common/detail/TemplateHelpers.hh create mode 100644 profiler/include/ignition/common/Profiler.hh create mode 100644 profiler/include/ignition/common/profiler/Export.hh create mode 100644 profiler/include/ignition/common/profiler/detail/Export.hh create mode 100644 testing/include/ignition/common/testing.hh create mode 100644 testing/include/ignition/common/testing/AutoLogFixture.hh create mode 100644 testing/include/ignition/common/testing/BazelTestPaths.hh create mode 100644 testing/include/ignition/common/testing/CMakeTestPaths.hh create mode 100644 testing/include/ignition/common/testing/Export.hh create mode 100644 testing/include/ignition/common/testing/TestPaths.hh create mode 100644 testing/include/ignition/common/testing/Utils.hh create mode 100644 testing/include/ignition/common/testing/detail/AutoLogFixture.hh create mode 100644 testing/include/ignition/common/testing/detail/Export.hh diff --git a/av/include/ignition/common/AudioDecoder.hh b/av/include/ignition/common/AudioDecoder.hh new file mode 100644 index 000000000..4fe88b03d --- /dev/null +++ b/av/include/ignition/common/AudioDecoder.hh @@ -0,0 +1,18 @@ +/* +* Copyright (C) 2016 Open Source Robotics Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include <gz/common/AudioDecoder.hh> diff --git a/av/include/ignition/common/HWEncoder.hh b/av/include/ignition/common/HWEncoder.hh new file mode 100644 index 000000000..265e0bfc4 --- /dev/null +++ b/av/include/ignition/common/HWEncoder.hh @@ -0,0 +1,18 @@ +/* + * Copyright 2020 Martin Pecka + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/HWEncoder.hh> diff --git a/av/include/ignition/common/HWVideo.hh b/av/include/ignition/common/HWVideo.hh new file mode 100644 index 000000000..0aab109ad --- /dev/null +++ b/av/include/ignition/common/HWVideo.hh @@ -0,0 +1,18 @@ +/* + * Copyright 2020 Martin Pecka + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/HWVideo.hh> diff --git a/av/include/ignition/common/Video.hh b/av/include/ignition/common/Video.hh new file mode 100644 index 000000000..32d257a22 --- /dev/null +++ b/av/include/ignition/common/Video.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Video.hh> diff --git a/av/include/ignition/common/VideoEncoder.hh b/av/include/ignition/common/VideoEncoder.hh new file mode 100644 index 000000000..b7ab032bd --- /dev/null +++ b/av/include/ignition/common/VideoEncoder.hh @@ -0,0 +1,18 @@ +/* + * Copyright 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/VideoEncoder.hh> diff --git a/av/include/ignition/common/av.hh b/av/include/ignition/common/av.hh new file mode 100644 index 000000000..6c4c5ac5c --- /dev/null +++ b/av/include/ignition/common/av.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/av.hh> diff --git a/av/include/ignition/common/av/Export.hh b/av/include/ignition/common/av/Export.hh new file mode 100644 index 000000000..bc7a8fe13 --- /dev/null +++ b/av/include/ignition/common/av/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/av/Export.hh> diff --git a/av/include/ignition/common/av/Util.hh b/av/include/ignition/common/av/Util.hh new file mode 100644 index 000000000..cb6c2d914 --- /dev/null +++ b/av/include/ignition/common/av/Util.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2018 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/av/Util.hh> diff --git a/av/include/ignition/common/av/detail/Export.hh b/av/include/ignition/common/av/detail/Export.hh new file mode 100644 index 000000000..10c594289 --- /dev/null +++ b/av/include/ignition/common/av/detail/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/av/detail/Export.hh> diff --git a/av/include/ignition/common/ffmpeg_inc.hh b/av/include/ignition/common/ffmpeg_inc.hh new file mode 100644 index 000000000..9b94f9eba --- /dev/null +++ b/av/include/ignition/common/ffmpeg_inc.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/ffmpeg_inc.hh> diff --git a/events/include/ignition/common/Event.hh b/events/include/ignition/common/Event.hh new file mode 100644 index 000000000..7824cb7bd --- /dev/null +++ b/events/include/ignition/common/Event.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Event.hh> diff --git a/events/include/ignition/common/KeyEvent.hh b/events/include/ignition/common/KeyEvent.hh new file mode 100644 index 000000000..0f4b956e9 --- /dev/null +++ b/events/include/ignition/common/KeyEvent.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/KeyEvent.hh> diff --git a/events/include/ignition/common/MouseEvent.hh b/events/include/ignition/common/MouseEvent.hh new file mode 100644 index 000000000..3eb0b4a70 --- /dev/null +++ b/events/include/ignition/common/MouseEvent.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/MouseEvent.hh> diff --git a/events/include/ignition/common/events.hh b/events/include/ignition/common/events.hh new file mode 100644 index 000000000..7301375ec --- /dev/null +++ b/events/include/ignition/common/events.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/events.hh> diff --git a/events/include/ignition/common/events/Export.hh b/events/include/ignition/common/events/Export.hh new file mode 100644 index 000000000..ad7ef3813 --- /dev/null +++ b/events/include/ignition/common/events/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/events/Export.hh> diff --git a/events/include/ignition/common/events/Types.hh b/events/include/ignition/common/events/Types.hh new file mode 100644 index 000000000..665871374 --- /dev/null +++ b/events/include/ignition/common/events/Types.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2018 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/events/Types.hh> diff --git a/events/include/ignition/common/events/detail/Export.hh b/events/include/ignition/common/events/detail/Export.hh new file mode 100644 index 000000000..02551dd85 --- /dev/null +++ b/events/include/ignition/common/events/detail/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/events/detail/Export.hh> diff --git a/geospatial/include/ignition/common/geospatial.hh b/geospatial/include/ignition/common/geospatial.hh new file mode 100644 index 000000000..226fdda11 --- /dev/null +++ b/geospatial/include/ignition/common/geospatial.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/geospatial.hh> diff --git a/geospatial/include/ignition/common/geospatial/Dem.hh b/geospatial/include/ignition/common/geospatial/Dem.hh new file mode 100644 index 000000000..100ac6190 --- /dev/null +++ b/geospatial/include/ignition/common/geospatial/Dem.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/geospatial/Dem.hh> diff --git a/geospatial/include/ignition/common/geospatial/Export.hh b/geospatial/include/ignition/common/geospatial/Export.hh new file mode 100644 index 000000000..e6553162e --- /dev/null +++ b/geospatial/include/ignition/common/geospatial/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/geospatial/Export.hh> diff --git a/geospatial/include/ignition/common/geospatial/HeightmapData.hh b/geospatial/include/ignition/common/geospatial/HeightmapData.hh new file mode 100644 index 000000000..db7742b6c --- /dev/null +++ b/geospatial/include/ignition/common/geospatial/HeightmapData.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/geospatial/HeightmapData.hh> diff --git a/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh b/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh new file mode 100644 index 000000000..59a228565 --- /dev/null +++ b/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/geospatial/ImageHeightmap.hh> diff --git a/geospatial/include/ignition/common/geospatial/detail/Export.hh b/geospatial/include/ignition/common/geospatial/detail/Export.hh new file mode 100644 index 000000000..c04a752e2 --- /dev/null +++ b/geospatial/include/ignition/common/geospatial/detail/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/geospatial/detail/Export.hh> diff --git a/graphics/include/ignition/common/Animation.hh b/graphics/include/ignition/common/Animation.hh new file mode 100644 index 000000000..82b4aa259 --- /dev/null +++ b/graphics/include/ignition/common/Animation.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Animation.hh> diff --git a/graphics/include/ignition/common/BVHLoader.hh b/graphics/include/ignition/common/BVHLoader.hh new file mode 100644 index 000000000..522738cc6 --- /dev/null +++ b/graphics/include/ignition/common/BVHLoader.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/BVHLoader.hh> diff --git a/graphics/include/ignition/common/ColladaExporter.hh b/graphics/include/ignition/common/ColladaExporter.hh new file mode 100644 index 000000000..42a3ff4be --- /dev/null +++ b/graphics/include/ignition/common/ColladaExporter.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/ColladaExporter.hh> diff --git a/graphics/include/ignition/common/ColladaLoader.hh b/graphics/include/ignition/common/ColladaLoader.hh new file mode 100644 index 000000000..d805bc8bf --- /dev/null +++ b/graphics/include/ignition/common/ColladaLoader.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/ColladaLoader.hh> diff --git a/graphics/include/ignition/common/GTSMeshUtils.hh b/graphics/include/ignition/common/GTSMeshUtils.hh new file mode 100644 index 000000000..8c8948ec9 --- /dev/null +++ b/graphics/include/ignition/common/GTSMeshUtils.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/GTSMeshUtils.hh> diff --git a/graphics/include/ignition/common/Image.hh b/graphics/include/ignition/common/Image.hh new file mode 100644 index 000000000..14c34b496 --- /dev/null +++ b/graphics/include/ignition/common/Image.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Image.hh> diff --git a/graphics/include/ignition/common/KeyFrame.hh b/graphics/include/ignition/common/KeyFrame.hh new file mode 100644 index 000000000..5616b7192 --- /dev/null +++ b/graphics/include/ignition/common/KeyFrame.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/KeyFrame.hh> diff --git a/graphics/include/ignition/common/Material.hh b/graphics/include/ignition/common/Material.hh new file mode 100644 index 000000000..262b2f102 --- /dev/null +++ b/graphics/include/ignition/common/Material.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Material.hh> diff --git a/graphics/include/ignition/common/Mesh.hh b/graphics/include/ignition/common/Mesh.hh new file mode 100644 index 000000000..081b63507 --- /dev/null +++ b/graphics/include/ignition/common/Mesh.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Mesh.hh> diff --git a/graphics/include/ignition/common/MeshCSG.hh b/graphics/include/ignition/common/MeshCSG.hh new file mode 100644 index 000000000..761d209e0 --- /dev/null +++ b/graphics/include/ignition/common/MeshCSG.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/MeshCSG.hh> diff --git a/graphics/include/ignition/common/MeshExporter.hh b/graphics/include/ignition/common/MeshExporter.hh new file mode 100644 index 000000000..ef31676c1 --- /dev/null +++ b/graphics/include/ignition/common/MeshExporter.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/MeshExporter.hh> diff --git a/graphics/include/ignition/common/MeshLoader.hh b/graphics/include/ignition/common/MeshLoader.hh new file mode 100644 index 000000000..e513e2a3e --- /dev/null +++ b/graphics/include/ignition/common/MeshLoader.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/MeshLoader.hh> diff --git a/graphics/include/ignition/common/MeshManager.hh b/graphics/include/ignition/common/MeshManager.hh new file mode 100644 index 000000000..c3b371692 --- /dev/null +++ b/graphics/include/ignition/common/MeshManager.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/MeshManager.hh> diff --git a/graphics/include/ignition/common/NodeAnimation.hh b/graphics/include/ignition/common/NodeAnimation.hh new file mode 100644 index 000000000..e4c0efdab --- /dev/null +++ b/graphics/include/ignition/common/NodeAnimation.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/NodeAnimation.hh> diff --git a/graphics/include/ignition/common/NodeTransform.hh b/graphics/include/ignition/common/NodeTransform.hh new file mode 100644 index 000000000..48e5d3ced --- /dev/null +++ b/graphics/include/ignition/common/NodeTransform.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/NodeTransform.hh> diff --git a/graphics/include/ignition/common/OBJLoader.hh b/graphics/include/ignition/common/OBJLoader.hh new file mode 100644 index 000000000..0859dd13a --- /dev/null +++ b/graphics/include/ignition/common/OBJLoader.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/OBJLoader.hh> diff --git a/graphics/include/ignition/common/Pbr.hh b/graphics/include/ignition/common/Pbr.hh new file mode 100644 index 000000000..e614ccba4 --- /dev/null +++ b/graphics/include/ignition/common/Pbr.hh @@ -0,0 +1,18 @@ +/* + * Copyright 2020 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Pbr.hh> diff --git a/graphics/include/ignition/common/STLLoader.hh b/graphics/include/ignition/common/STLLoader.hh new file mode 100644 index 000000000..cf66d1aaa --- /dev/null +++ b/graphics/include/ignition/common/STLLoader.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/STLLoader.hh> diff --git a/graphics/include/ignition/common/SVGLoader.hh b/graphics/include/ignition/common/SVGLoader.hh new file mode 100644 index 000000000..6cd8bcf29 --- /dev/null +++ b/graphics/include/ignition/common/SVGLoader.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/SVGLoader.hh> diff --git a/graphics/include/ignition/common/Skeleton.hh b/graphics/include/ignition/common/Skeleton.hh new file mode 100644 index 000000000..b626a984f --- /dev/null +++ b/graphics/include/ignition/common/Skeleton.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Skeleton.hh> diff --git a/graphics/include/ignition/common/SkeletonAnimation.hh b/graphics/include/ignition/common/SkeletonAnimation.hh new file mode 100644 index 000000000..15b11e8e8 --- /dev/null +++ b/graphics/include/ignition/common/SkeletonAnimation.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/SkeletonAnimation.hh> diff --git a/graphics/include/ignition/common/SkeletonNode.hh b/graphics/include/ignition/common/SkeletonNode.hh new file mode 100644 index 000000000..028ebb04a --- /dev/null +++ b/graphics/include/ignition/common/SkeletonNode.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/SkeletonNode.hh> diff --git a/graphics/include/ignition/common/SubMesh.hh b/graphics/include/ignition/common/SubMesh.hh new file mode 100644 index 000000000..99627f022 --- /dev/null +++ b/graphics/include/ignition/common/SubMesh.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/SubMesh.hh> diff --git a/graphics/include/ignition/common/graphics.hh b/graphics/include/ignition/common/graphics.hh new file mode 100644 index 000000000..479012f22 --- /dev/null +++ b/graphics/include/ignition/common/graphics.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/graphics.hh> diff --git a/graphics/include/ignition/common/graphics/Export.hh b/graphics/include/ignition/common/graphics/Export.hh new file mode 100644 index 000000000..11fb43152 --- /dev/null +++ b/graphics/include/ignition/common/graphics/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/graphics/Export.hh> diff --git a/graphics/include/ignition/common/graphics/Types.hh b/graphics/include/ignition/common/graphics/Types.hh new file mode 100644 index 000000000..b241035a6 --- /dev/null +++ b/graphics/include/ignition/common/graphics/Types.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2018 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/graphics/Types.hh> diff --git a/graphics/include/ignition/common/graphics/detail/Export.hh b/graphics/include/ignition/common/graphics/detail/Export.hh new file mode 100644 index 000000000..d613f0bc1 --- /dev/null +++ b/graphics/include/ignition/common/graphics/detail/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/graphics/detail/Export.hh> diff --git a/include/ignition/common.hh b/include/ignition/common.hh new file mode 100644 index 000000000..1c258c592 --- /dev/null +++ b/include/ignition/common.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common.hh> diff --git a/include/ignition/common/Base64.hh b/include/ignition/common/Base64.hh new file mode 100644 index 000000000..c0eab4705 --- /dev/null +++ b/include/ignition/common/Base64.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Base64.hh> diff --git a/include/ignition/common/Battery.hh b/include/ignition/common/Battery.hh new file mode 100644 index 000000000..cf0552653 --- /dev/null +++ b/include/ignition/common/Battery.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Battery.hh> diff --git a/include/ignition/common/Console.hh b/include/ignition/common/Console.hh new file mode 100644 index 000000000..572323350 --- /dev/null +++ b/include/ignition/common/Console.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Console.hh> diff --git a/include/ignition/common/EnumIface.hh b/include/ignition/common/EnumIface.hh new file mode 100644 index 000000000..0a7a09313 --- /dev/null +++ b/include/ignition/common/EnumIface.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/EnumIface.hh> diff --git a/include/ignition/common/Export.hh b/include/ignition/common/Export.hh new file mode 100644 index 000000000..a85faac65 --- /dev/null +++ b/include/ignition/common/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Export.hh> diff --git a/include/ignition/common/Filesystem.hh b/include/ignition/common/Filesystem.hh new file mode 100644 index 000000000..ac4537f7f --- /dev/null +++ b/include/ignition/common/Filesystem.hh @@ -0,0 +1,18 @@ +/* + * Copyright 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Filesystem.hh> diff --git a/include/ignition/common/FlagSet.hh b/include/ignition/common/FlagSet.hh new file mode 100644 index 000000000..db2f5e830 --- /dev/null +++ b/include/ignition/common/FlagSet.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/FlagSet.hh> diff --git a/include/ignition/common/MaterialDensity.hh b/include/ignition/common/MaterialDensity.hh new file mode 100644 index 000000000..d0461ff1d --- /dev/null +++ b/include/ignition/common/MaterialDensity.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/MaterialDensity.hh> diff --git a/include/ignition/common/MovingWindowFilter.hh b/include/ignition/common/MovingWindowFilter.hh new file mode 100644 index 000000000..462654c47 --- /dev/null +++ b/include/ignition/common/MovingWindowFilter.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/MovingWindowFilter.hh> diff --git a/include/ignition/common/Plugin.hh b/include/ignition/common/Plugin.hh new file mode 100644 index 000000000..6a463e61e --- /dev/null +++ b/include/ignition/common/Plugin.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Plugin.hh> diff --git a/include/ignition/common/PluginInfo.hh b/include/ignition/common/PluginInfo.hh new file mode 100644 index 000000000..3496c90fd --- /dev/null +++ b/include/ignition/common/PluginInfo.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/PluginInfo.hh> diff --git a/include/ignition/common/PluginLoader.hh b/include/ignition/common/PluginLoader.hh new file mode 100644 index 000000000..3b4922e41 --- /dev/null +++ b/include/ignition/common/PluginLoader.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/PluginLoader.hh> diff --git a/include/ignition/common/PluginMacros.hh b/include/ignition/common/PluginMacros.hh new file mode 100644 index 000000000..ca9da7675 --- /dev/null +++ b/include/ignition/common/PluginMacros.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/PluginMacros.hh> diff --git a/include/ignition/common/PluginPtr.hh b/include/ignition/common/PluginPtr.hh new file mode 100644 index 000000000..c308952d0 --- /dev/null +++ b/include/ignition/common/PluginPtr.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/PluginPtr.hh> diff --git a/include/ignition/common/SignalHandler.hh b/include/ignition/common/SignalHandler.hh new file mode 100644 index 000000000..bb6c160bc --- /dev/null +++ b/include/ignition/common/SignalHandler.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2018 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/SignalHandler.hh> diff --git a/include/ignition/common/SingletonT.hh b/include/ignition/common/SingletonT.hh new file mode 100644 index 000000000..efea6e58f --- /dev/null +++ b/include/ignition/common/SingletonT.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/SingletonT.hh> diff --git a/include/ignition/common/SpecializedPlugin.hh b/include/ignition/common/SpecializedPlugin.hh new file mode 100644 index 000000000..95373b8f6 --- /dev/null +++ b/include/ignition/common/SpecializedPlugin.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/SpecializedPlugin.hh> diff --git a/include/ignition/common/SpecializedPluginPtr.hh b/include/ignition/common/SpecializedPluginPtr.hh new file mode 100644 index 000000000..948becf66 --- /dev/null +++ b/include/ignition/common/SpecializedPluginPtr.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/SpecializedPluginPtr.hh> diff --git a/include/ignition/common/StringUtils.hh b/include/ignition/common/StringUtils.hh new file mode 100644 index 000000000..3c13cc94d --- /dev/null +++ b/include/ignition/common/StringUtils.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/StringUtils.hh> diff --git a/include/ignition/common/SuppressWarning.hh b/include/ignition/common/SuppressWarning.hh new file mode 100644 index 000000000..84f6b7eec --- /dev/null +++ b/include/ignition/common/SuppressWarning.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/SuppressWarning.hh> diff --git a/include/ignition/common/SystemPaths.hh b/include/ignition/common/SystemPaths.hh new file mode 100644 index 000000000..9d138a40b --- /dev/null +++ b/include/ignition/common/SystemPaths.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/SystemPaths.hh> diff --git a/include/ignition/common/TempDirectory.hh b/include/ignition/common/TempDirectory.hh new file mode 100644 index 000000000..17ea86f8e --- /dev/null +++ b/include/ignition/common/TempDirectory.hh @@ -0,0 +1,18 @@ +/* + * Copyright 2021 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/TempDirectory.hh> diff --git a/include/ignition/common/TemplateHelpers.hh b/include/ignition/common/TemplateHelpers.hh new file mode 100644 index 000000000..5f2d84082 --- /dev/null +++ b/include/ignition/common/TemplateHelpers.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/TemplateHelpers.hh> diff --git a/include/ignition/common/Timer.hh b/include/ignition/common/Timer.hh new file mode 100644 index 000000000..7f3eb7149 --- /dev/null +++ b/include/ignition/common/Timer.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Timer.hh> diff --git a/include/ignition/common/URI.hh b/include/ignition/common/URI.hh new file mode 100644 index 000000000..eddddf732 --- /dev/null +++ b/include/ignition/common/URI.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/URI.hh> diff --git a/include/ignition/common/Util.hh b/include/ignition/common/Util.hh new file mode 100644 index 000000000..28627d411 --- /dev/null +++ b/include/ignition/common/Util.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Util.hh> diff --git a/include/ignition/common/Uuid.hh b/include/ignition/common/Uuid.hh new file mode 100644 index 000000000..7a9db5b0e --- /dev/null +++ b/include/ignition/common/Uuid.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2016 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Uuid.hh> diff --git a/include/ignition/common/WorkerPool.hh b/include/ignition/common/WorkerPool.hh new file mode 100644 index 000000000..bd48b0b39 --- /dev/null +++ b/include/ignition/common/WorkerPool.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/WorkerPool.hh> diff --git a/include/ignition/common/config.hh b/include/ignition/common/config.hh new file mode 100644 index 000000000..390857008 --- /dev/null +++ b/include/ignition/common/config.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/config.hh> diff --git a/include/ignition/common/detail/Export.hh b/include/ignition/common/detail/Export.hh new file mode 100644 index 000000000..2628774af --- /dev/null +++ b/include/ignition/common/detail/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/detail/Export.hh> diff --git a/include/ignition/common/detail/Plugin.hh b/include/ignition/common/detail/Plugin.hh new file mode 100644 index 000000000..1d56b8c97 --- /dev/null +++ b/include/ignition/common/detail/Plugin.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/detail/Plugin.hh> diff --git a/include/ignition/common/detail/PluginLoader.hh b/include/ignition/common/detail/PluginLoader.hh new file mode 100644 index 000000000..f3a4f3221 --- /dev/null +++ b/include/ignition/common/detail/PluginLoader.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/detail/PluginLoader.hh> diff --git a/include/ignition/common/detail/PluginMacros.hh b/include/ignition/common/detail/PluginMacros.hh new file mode 100644 index 000000000..b9f2717be --- /dev/null +++ b/include/ignition/common/detail/PluginMacros.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/detail/PluginMacros.hh> diff --git a/include/ignition/common/detail/PluginPtr.hh b/include/ignition/common/detail/PluginPtr.hh new file mode 100644 index 000000000..915c6b72d --- /dev/null +++ b/include/ignition/common/detail/PluginPtr.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/detail/PluginPtr.hh> diff --git a/include/ignition/common/detail/SpecializedPlugin.hh b/include/ignition/common/detail/SpecializedPlugin.hh new file mode 100644 index 000000000..fc799a441 --- /dev/null +++ b/include/ignition/common/detail/SpecializedPlugin.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/detail/SpecializedPlugin.hh> diff --git a/include/ignition/common/detail/TemplateHelpers.hh b/include/ignition/common/detail/TemplateHelpers.hh new file mode 100644 index 000000000..5b8927205 --- /dev/null +++ b/include/ignition/common/detail/TemplateHelpers.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2017 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/detail/TemplateHelpers.hh> diff --git a/profiler/include/ignition/common/Profiler.hh b/profiler/include/ignition/common/Profiler.hh new file mode 100644 index 000000000..4205134f9 --- /dev/null +++ b/profiler/include/ignition/common/Profiler.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2018 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/Profiler.hh> diff --git a/profiler/include/ignition/common/profiler/Export.hh b/profiler/include/ignition/common/profiler/Export.hh new file mode 100644 index 000000000..5f69bb544 --- /dev/null +++ b/profiler/include/ignition/common/profiler/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/profiler/Export.hh> diff --git a/profiler/include/ignition/common/profiler/detail/Export.hh b/profiler/include/ignition/common/profiler/detail/Export.hh new file mode 100644 index 000000000..911e1c844 --- /dev/null +++ b/profiler/include/ignition/common/profiler/detail/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/profiler/detail/Export.hh> diff --git a/testing/include/ignition/common/testing.hh b/testing/include/ignition/common/testing.hh new file mode 100644 index 000000000..d12f9f1d4 --- /dev/null +++ b/testing/include/ignition/common/testing.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/testing.hh> diff --git a/testing/include/ignition/common/testing/AutoLogFixture.hh b/testing/include/ignition/common/testing/AutoLogFixture.hh new file mode 100644 index 000000000..d1373f729 --- /dev/null +++ b/testing/include/ignition/common/testing/AutoLogFixture.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/testing/AutoLogFixture.hh> diff --git a/testing/include/ignition/common/testing/BazelTestPaths.hh b/testing/include/ignition/common/testing/BazelTestPaths.hh new file mode 100644 index 000000000..1501e7e84 --- /dev/null +++ b/testing/include/ignition/common/testing/BazelTestPaths.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/testing/BazelTestPaths.hh> diff --git a/testing/include/ignition/common/testing/CMakeTestPaths.hh b/testing/include/ignition/common/testing/CMakeTestPaths.hh new file mode 100644 index 000000000..0c69d6259 --- /dev/null +++ b/testing/include/ignition/common/testing/CMakeTestPaths.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/testing/CMakeTestPaths.hh> diff --git a/testing/include/ignition/common/testing/Export.hh b/testing/include/ignition/common/testing/Export.hh new file mode 100644 index 000000000..342716546 --- /dev/null +++ b/testing/include/ignition/common/testing/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/testing/Export.hh> diff --git a/testing/include/ignition/common/testing/TestPaths.hh b/testing/include/ignition/common/testing/TestPaths.hh new file mode 100644 index 000000000..194364e33 --- /dev/null +++ b/testing/include/ignition/common/testing/TestPaths.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/testing/TestPaths.hh> diff --git a/testing/include/ignition/common/testing/Utils.hh b/testing/include/ignition/common/testing/Utils.hh new file mode 100644 index 000000000..7101accd4 --- /dev/null +++ b/testing/include/ignition/common/testing/Utils.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/testing/Utils.hh> diff --git a/testing/include/ignition/common/testing/detail/AutoLogFixture.hh b/testing/include/ignition/common/testing/detail/AutoLogFixture.hh new file mode 100644 index 000000000..93d35731a --- /dev/null +++ b/testing/include/ignition/common/testing/detail/AutoLogFixture.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/testing/detail/AutoLogFixture.hh> diff --git a/testing/include/ignition/common/testing/detail/Export.hh b/testing/include/ignition/common/testing/detail/Export.hh new file mode 100644 index 000000000..660f38422 --- /dev/null +++ b/testing/include/ignition/common/testing/detail/Export.hh @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <gz/common/testing/detail/Export.hh> From 070a6c861f24015e100644a3e0c121451dc4928a Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Thu, 28 Apr 2022 00:26:46 -0700 Subject: [PATCH 155/219] Migrate sources in src, test, examples, and include Signed-off-by: methylDragon <methylDragon@gmail.com> --- av/include/gz/common/AudioDecoder.hh | 10 +++---- av/include/gz/common/HWEncoder.hh | 14 +++++----- av/include/gz/common/HWVideo.hh | 6 ++--- av/include/gz/common/Video.hh | 8 +++--- av/include/gz/common/VideoEncoder.hh | 12 ++++----- av/include/gz/common/av/Util.hh | 4 +-- av/include/gz/common/ffmpeg_inc.hh | 8 +++--- events/include/gz/common/Event.hh | 12 ++++----- events/include/gz/common/KeyEvent.hh | 10 +++---- events/include/gz/common/MouseEvent.hh | 12 ++++----- events/include/gz/common/events/Types.hh | 4 +-- examples/assert_example.cc | 2 +- examples/console.cc | 2 +- examples/events.cc | 2 +- examples/logging_performance.cc | 2 +- examples/profiler.cc | 6 ++--- .../include/gz/common/geospatial/Dem.hh | 14 +++++----- .../gz/common/geospatial/HeightmapData.hh | 8 +++--- .../gz/common/geospatial/ImageHeightmap.hh | 12 ++++----- graphics/include/gz/common/Animation.hh | 16 ++++++------ graphics/include/gz/common/BVHLoader.hh | 10 +++---- graphics/include/gz/common/ColladaExporter.hh | 14 +++++----- graphics/include/gz/common/ColladaLoader.hh | 12 ++++----- graphics/include/gz/common/GTSMeshUtils.hh | 10 +++---- graphics/include/gz/common/Image.hh | 12 ++++----- graphics/include/gz/common/KeyFrame.hh | 14 +++++----- graphics/include/gz/common/Material.hh | 14 +++++----- graphics/include/gz/common/Mesh.hh | 16 ++++++------ graphics/include/gz/common/MeshCSG.hh | 10 +++---- graphics/include/gz/common/MeshExporter.hh | 6 ++--- graphics/include/gz/common/MeshLoader.hh | 8 +++--- graphics/include/gz/common/MeshManager.hh | 26 +++++++++---------- graphics/include/gz/common/NodeAnimation.hh | 14 +++++----- graphics/include/gz/common/NodeTransform.hh | 16 ++++++------ graphics/include/gz/common/OBJLoader.hh | 10 +++---- graphics/include/gz/common/Pbr.hh | 8 +++--- graphics/include/gz/common/STLLoader.hh | 12 ++++----- graphics/include/gz/common/SVGLoader.hh | 14 +++++----- graphics/include/gz/common/Skeleton.hh | 14 +++++----- .../include/gz/common/SkeletonAnimation.hh | 16 ++++++------ graphics/include/gz/common/SkeletonNode.hh | 12 ++++----- graphics/include/gz/common/SubMesh.hh | 14 +++++----- graphics/include/gz/common/graphics/Types.hh | 4 +-- include/gz/common/Base64.hh | 6 ++--- include/gz/common/Battery.hh | 8 +++--- include/gz/common/Console.hh | 10 +++---- include/gz/common/EnumIface.hh | 8 +++--- include/gz/common/Filesystem.hh | 8 +++--- include/gz/common/FlagSet.hh | 4 +-- include/gz/common/MaterialDensity.hh | 6 ++--- include/gz/common/MovingWindowFilter.hh | 4 +-- include/gz/common/Plugin.hh | 10 +++---- include/gz/common/PluginInfo.hh | 4 +-- include/gz/common/PluginLoader.hh | 12 ++++----- include/gz/common/PluginMacros.hh | 6 ++--- include/gz/common/PluginPtr.hh | 8 +++--- include/gz/common/SignalHandler.hh | 6 ++--- include/gz/common/SingletonT.hh | 4 +-- include/gz/common/SpecializedPlugin.hh | 10 +++---- include/gz/common/SpecializedPluginPtr.hh | 10 +++---- include/gz/common/StringUtils.hh | 6 ++--- include/gz/common/SuppressWarning.hh | 6 ++--- include/gz/common/SystemPaths.hh | 12 ++++----- include/gz/common/TempDirectory.hh | 12 ++++----- include/gz/common/TemplateHelpers.hh | 6 ++--- include/gz/common/Timer.hh | 8 +++--- include/gz/common/URI.hh | 8 +++--- include/gz/common/Util.hh | 12 ++++----- include/gz/common/Uuid.hh | 6 ++--- include/gz/common/WorkerPool.hh | 8 +++--- include/gz/common/detail/Plugin.hh | 6 ++--- include/gz/common/detail/PluginLoader.hh | 6 ++--- include/gz/common/detail/PluginMacros.hh | 8 +++--- include/gz/common/detail/PluginPtr.hh | 8 +++--- include/gz/common/detail/SpecializedPlugin.hh | 6 ++--- include/gz/common/detail/TemplateHelpers.hh | 4 +-- profiler/include/gz/common/Profiler.hh | 12 ++++----- .../gz/common/testing/AutoLogFixture.hh | 10 +++---- .../gz/common/testing/BazelTestPaths.hh | 10 +++---- .../gz/common/testing/CMakeTestPaths.hh | 10 +++---- .../include/gz/common/testing/TestPaths.hh | 14 +++++----- testing/include/gz/common/testing/Utils.hh | 8 +++--- .../common/testing/detail/AutoLogFixture.hh | 16 ++++++------ 83 files changed, 388 insertions(+), 388 deletions(-) diff --git a/av/include/gz/common/AudioDecoder.hh b/av/include/gz/common/AudioDecoder.hh index 830f3ead9..d6a864ee1 100644 --- a/av/include/gz/common/AudioDecoder.hh +++ b/av/include/gz/common/AudioDecoder.hh @@ -14,20 +14,20 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_AUDIO_DECODER_HH_ -#define IGNITION_COMMON_AUDIO_DECODER_HH_ +#ifndef GZ_COMMON_AUDIO_DECODER_HH_ +#define GZ_COMMON_AUDIO_DECODER_HH_ #include <stdint.h> #include <string> -#include <ignition/common/av/Export.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/common/av/Export.hh> +#include <gz/utils/ImplPtr.hh> namespace ignition { namespace common { - /// \class AudioDecoder AudioDecoder.hh ignition/common/common.hh + /// \class AudioDecoder AudioDecoder.hh gz/common/common.hh /// \brief An audio decoder based on FFMPEG. class IGNITION_COMMON_AV_VISIBLE AudioDecoder { diff --git a/av/include/gz/common/HWEncoder.hh b/av/include/gz/common/HWEncoder.hh index 4eeed1f8b..8a857434b 100644 --- a/av/include/gz/common/HWEncoder.hh +++ b/av/include/gz/common/HWEncoder.hh @@ -13,17 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef IGNITION_COMMON_HWENCODER_HH -#define IGNITION_COMMON_HWENCODER_HH +#ifndef GZ_COMMON_HWENCODER_HH +#define GZ_COMMON_HWENCODER_HH #include <string> #include <optional> -#include <ignition/common/FlagSet.hh> -#include <ignition/common/av/Export.hh> -#include <ignition/common/HWVideo.hh> -#include <ignition/common/ffmpeg_inc.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/common/FlagSet.hh> +#include <gz/common/av/Export.hh> +#include <gz/common/HWVideo.hh> +#include <gz/common/ffmpeg_inc.hh> +#include <gz/utils/ImplPtr.hh> /// This is an internal-use only class encapsulating HW video encoding. All /// symbols defined here are hidden from the public API. diff --git a/av/include/gz/common/HWVideo.hh b/av/include/gz/common/HWVideo.hh index 1d3da6491..3576b1ae5 100644 --- a/av/include/gz/common/HWVideo.hh +++ b/av/include/gz/common/HWVideo.hh @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef IGNITION_COMMON_HWVIDEO_HH -#define IGNITION_COMMON_HWVIDEO_HH +#ifndef GZ_COMMON_HWVIDEO_HH +#define GZ_COMMON_HWVIDEO_HH -#include <ignition/common/EnumIface.hh> +#include <gz/common/EnumIface.hh> namespace ignition::common { diff --git a/av/include/gz/common/Video.hh b/av/include/gz/common/Video.hh index b186e51a3..a6857d369 100644 --- a/av/include/gz/common/Video.hh +++ b/av/include/gz/common/Video.hh @@ -14,13 +14,13 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_VIDEO_HH_ -#define IGNITION_COMMON_VIDEO_HH_ +#ifndef GZ_COMMON_VIDEO_HH_ +#define GZ_COMMON_VIDEO_HH_ #include <string> -#include <ignition/common/av/Export.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/common/av/Export.hh> +#include <gz/utils/ImplPtr.hh> struct AVFormatContext; struct AVCodecContext; diff --git a/av/include/gz/common/VideoEncoder.hh b/av/include/gz/common/VideoEncoder.hh index 3b40dfc23..acc60b2c4 100644 --- a/av/include/gz/common/VideoEncoder.hh +++ b/av/include/gz/common/VideoEncoder.hh @@ -14,17 +14,17 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_VIDEOENCODER_HH_ -#define IGNITION_COMMON_VIDEOENCODER_HH_ +#ifndef GZ_COMMON_VIDEOENCODER_HH_ +#define GZ_COMMON_VIDEOENCODER_HH_ #include <chrono> #include <string> #include <optional> -#include <ignition/common/FlagSet.hh> -#include <ignition/common/av/Export.hh> -#include <ignition/common/HWVideo.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/common/FlagSet.hh> +#include <gz/common/av/Export.hh> +#include <gz/common/HWVideo.hh> +#include <gz/utils/ImplPtr.hh> // Default bitrate (0) indicates that a bitrate should be calculated when // Start is called. diff --git a/av/include/gz/common/av/Util.hh b/av/include/gz/common/av/Util.hh index e8aabc9e2..58d3ad756 100644 --- a/av/include/gz/common/av/Util.hh +++ b/av/include/gz/common/av/Util.hh @@ -15,8 +15,8 @@ * */ -#ifndef IGNITION_COMMON_AV_UTIL_HH_ -#define IGNITION_COMMON_AV_UTIL_HH_ +#ifndef GZ_COMMON_AV_UTIL_HH_ +#define GZ_COMMON_AV_UTIL_HH_ namespace ignition { diff --git a/av/include/gz/common/ffmpeg_inc.hh b/av/include/gz/common/ffmpeg_inc.hh index be0c07124..5ca16c5a9 100644 --- a/av/include/gz/common/ffmpeg_inc.hh +++ b/av/include/gz/common/ffmpeg_inc.hh @@ -14,12 +14,12 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_FFMPEG_INC_HH_ -#define IGNITION_COMMON_FFMPEG_INC_HH_ +#ifndef GZ_COMMON_FFMPEG_INC_HH_ +#define GZ_COMMON_FFMPEG_INC_HH_ #include <string> -#include <ignition/common/config.hh> +#include <gz/common/config.hh> #ifndef _WIN32 #pragma GCC system_header @@ -49,7 +49,7 @@ extern "C" { #endif } -#include <ignition/common/av/Export.hh> +#include <gz/common/av/Export.hh> namespace ignition { diff --git a/events/include/gz/common/Event.hh b/events/include/gz/common/Event.hh index 5095d39a0..d814b445e 100644 --- a/events/include/gz/common/Event.hh +++ b/events/include/gz/common/Event.hh @@ -14,8 +14,8 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_EVENT_HH_ -#define IGNITION_COMMON_EVENT_HH_ +#ifndef GZ_COMMON_EVENT_HH_ +#define GZ_COMMON_EVENT_HH_ #include <atomic> #include <functional> @@ -25,15 +25,15 @@ #include <mutex> #include <utility> -#include <ignition/common/config.hh> -#include <ignition/common/events/Export.hh> -#include <ignition/common/events/Types.hh> +#include <gz/common/config.hh> +#include <gz/common/events/Export.hh> +#include <gz/common/events/Types.hh> namespace ignition { namespace common { - /// \class Event Event.hh ignition/common/Event.hh + /// \class Event Event.hh gz/common/Event.hh /// \brief Base class for all events class IGNITION_COMMON_EVENTS_VISIBLE Event { diff --git a/events/include/gz/common/KeyEvent.hh b/events/include/gz/common/KeyEvent.hh index c9eb84ce6..0b1c2297b 100644 --- a/events/include/gz/common/KeyEvent.hh +++ b/events/include/gz/common/KeyEvent.hh @@ -14,14 +14,14 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_KEYEVENT_HH_ -#define IGNITION_COMMON_KEYEVENT_HH_ +#ifndef GZ_COMMON_KEYEVENT_HH_ +#define GZ_COMMON_KEYEVENT_HH_ #include <memory> #include <string> -#include <ignition/common/events/Export.hh> -#include <ignition/utils/SuppressWarning.hh> +#include <gz/common/events/Export.hh> +#include <gz/utils/SuppressWarning.hh> namespace ignition { @@ -30,7 +30,7 @@ namespace ignition // Forward declare private data class class KeyEventPrivate; - /// \class KeyEvent KeyEvent.hh ignition/common/KeyEvent.hh + /// \class KeyEvent KeyEvent.hh gz/common/KeyEvent.hh /// \brief Generic description of a keyboard event. class IGNITION_COMMON_EVENTS_VISIBLE KeyEvent { diff --git a/events/include/gz/common/MouseEvent.hh b/events/include/gz/common/MouseEvent.hh index b76826e0f..c31e3097a 100644 --- a/events/include/gz/common/MouseEvent.hh +++ b/events/include/gz/common/MouseEvent.hh @@ -14,14 +14,14 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_MOUSEEVENT_HH_ -#define IGNITION_COMMON_MOUSEEVENT_HH_ +#ifndef GZ_COMMON_MOUSEEVENT_HH_ +#define GZ_COMMON_MOUSEEVENT_HH_ #include <memory> -#include <ignition/math/Vector2.hh> +#include <gz/math/Vector2.hh> -#include <ignition/common/events/Export.hh> -#include <ignition/utils/SuppressWarning.hh> +#include <gz/common/events/Export.hh> +#include <gz/utils/SuppressWarning.hh> namespace ignition { @@ -30,7 +30,7 @@ namespace ignition /// Forward declare private data class MouseEventPrivate; - /// \class MouseEvent MouseEvent.hh ignition/common/MouseEvent.hh + /// \class MouseEvent MouseEvent.hh gz/common/MouseEvent.hh /// \brief Generic description of a mouse event. class IGNITION_COMMON_EVENTS_VISIBLE MouseEvent { diff --git a/events/include/gz/common/events/Types.hh b/events/include/gz/common/events/Types.hh index 114e0d7ab..f1ba2544f 100644 --- a/events/include/gz/common/events/Types.hh +++ b/events/include/gz/common/events/Types.hh @@ -15,8 +15,8 @@ * */ -#ifndef IGNITION_COMMON_EVENTS_TYPES_HH_ -#define IGNITION_COMMON_EVENTS_TYPES_HH_ +#ifndef GZ_COMMON_EVENTS_TYPES_HH_ +#define GZ_COMMON_EVENTS_TYPES_HH_ #include <memory> diff --git a/examples/assert_example.cc b/examples/assert_example.cc index 2fa852de3..99c5a1896 100644 --- a/examples/assert_example.cc +++ b/examples/assert_example.cc @@ -1,4 +1,4 @@ -#include <ignition/common.hh> +#include <gz/common.hh> int main(int argc, char **argv) { diff --git a/examples/console.cc b/examples/console.cc index 0fe561a48..7b5194c57 100644 --- a/examples/console.cc +++ b/examples/console.cc @@ -14,7 +14,7 @@ * limitations under the License. * */ -#include <ignition/common.hh> +#include <gz/common.hh> int main(int argc, char **argv) { diff --git a/examples/events.cc b/examples/events.cc index 62e7bf22f..82276813c 100644 --- a/examples/events.cc +++ b/examples/events.cc @@ -17,7 +17,7 @@ #include <functional> #include <iostream> -#include <ignition/common/Event.hh> +#include <gz/common/Event.hh> using namespace ignition; diff --git a/examples/logging_performance.cc b/examples/logging_performance.cc index f92fa0fdb..d72bc6558 100644 --- a/examples/logging_performance.cc +++ b/examples/logging_performance.cc @@ -25,7 +25,7 @@ #include <map> #include <thread> -#include <ignition/common/Console.hh> +#include <gz/common/Console.hh> namespace { const uint64_t g_iterations{1000000}; diff --git a/examples/profiler.cc b/examples/profiler.cc index f37bda37c..b2c41e3ef 100644 --- a/examples/profiler.cc +++ b/examples/profiler.cc @@ -18,9 +18,9 @@ #include <atomic> #include <thread> -#include "ignition/common/Console.hh" -#include "ignition/common/Profiler.hh" -#include "ignition/common/SignalHandler.hh" +#include "gz/common/Console.hh" +#include "gz/common/Profiler.hh" +#include "gz/common/SignalHandler.hh" std::atomic<bool> running; diff --git a/geospatial/include/gz/common/geospatial/Dem.hh b/geospatial/include/gz/common/geospatial/Dem.hh index 18813bd0e..b22b4e5a0 100644 --- a/geospatial/include/gz/common/geospatial/Dem.hh +++ b/geospatial/include/gz/common/geospatial/Dem.hh @@ -14,20 +14,20 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_GEOSPATIAL_DEM_HH_ -#define IGNITION_COMMON_GEOSPATIAL_DEM_HH_ +#ifndef GZ_COMMON_GEOSPATIAL_DEM_HH_ +#define GZ_COMMON_GEOSPATIAL_DEM_HH_ #include <memory> #include <string> #include <vector> -#include <ignition/math/Vector3.hh> -#include <ignition/math/Angle.hh> +#include <gz/math/Vector3.hh> +#include <gz/math/Angle.hh> -#include <ignition/common/geospatial/Export.hh> -#include <ignition/common/geospatial/HeightmapData.hh> +#include <gz/common/geospatial/Export.hh> +#include <gz/common/geospatial/HeightmapData.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> namespace ignition diff --git a/geospatial/include/gz/common/geospatial/HeightmapData.hh b/geospatial/include/gz/common/geospatial/HeightmapData.hh index e161b5b62..9d261f946 100644 --- a/geospatial/include/gz/common/geospatial/HeightmapData.hh +++ b/geospatial/include/gz/common/geospatial/HeightmapData.hh @@ -14,13 +14,13 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_GEOSPATIAL_HEIGHTMAPDATA_HH_ -#define IGNITION_COMMON_GEOSPATIAL_HEIGHTMAPDATA_HH_ +#ifndef GZ_COMMON_GEOSPATIAL_HEIGHTMAPDATA_HH_ +#define GZ_COMMON_GEOSPATIAL_HEIGHTMAPDATA_HH_ #include <string> #include <vector> -#include <ignition/math/Vector3.hh> -#include <ignition/common/geospatial/Export.hh> +#include <gz/math/Vector3.hh> +#include <gz/common/geospatial/Export.hh> namespace ignition { diff --git a/geospatial/include/gz/common/geospatial/ImageHeightmap.hh b/geospatial/include/gz/common/geospatial/ImageHeightmap.hh index 35cabb870..4144371c1 100644 --- a/geospatial/include/gz/common/geospatial/ImageHeightmap.hh +++ b/geospatial/include/gz/common/geospatial/ImageHeightmap.hh @@ -14,17 +14,17 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_GEOSPATIAL_IMAGEHEIGHTMAPDATA_HH_ -#define IGNITION_COMMON_GEOSPATIAL_IMAGEHEIGHTMAPDATA_HH_ +#ifndef GZ_COMMON_GEOSPATIAL_IMAGEHEIGHTMAPDATA_HH_ +#define GZ_COMMON_GEOSPATIAL_IMAGEHEIGHTMAPDATA_HH_ #include <limits> #include <string> #include <vector> -#include <ignition/math/Vector3.hh> +#include <gz/math/Vector3.hh> -#include <ignition/common/geospatial/Export.hh> -#include <ignition/common/geospatial/HeightmapData.hh> -#include <ignition/common/Image.hh> +#include <gz/common/geospatial/Export.hh> +#include <gz/common/geospatial/HeightmapData.hh> +#include <gz/common/Image.hh> namespace ignition { diff --git a/graphics/include/gz/common/Animation.hh b/graphics/include/gz/common/Animation.hh index 7ef0b9952..6a7cb9944 100644 --- a/graphics/include/gz/common/Animation.hh +++ b/graphics/include/gz/common/Animation.hh @@ -14,20 +14,20 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_ANIMATION_HH_ -#define IGNITION_COMMON_ANIMATION_HH_ +#ifndef GZ_COMMON_ANIMATION_HH_ +#define GZ_COMMON_ANIMATION_HH_ #include <map> #include <string> #include <vector> -#include <ignition/math/Pose3.hh> -#include <ignition/math/Spline.hh> -#include <ignition/math/RotationSpline.hh> +#include <gz/math/Pose3.hh> +#include <gz/math/Spline.hh> +#include <gz/math/RotationSpline.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { @@ -37,7 +37,7 @@ namespace ignition class PoseKeyFrame; class NumericKeyFrame; - /// \class Animation Animation.hh ignition/common/Animation.hh + /// \class Animation Animation.hh gz/common/Animation.hh /// \brief Manages an animation, which is a collection of keyframes and /// the ability to interpolate between the keyframes class IGNITION_COMMON_GRAPHICS_VISIBLE Animation diff --git a/graphics/include/gz/common/BVHLoader.hh b/graphics/include/gz/common/BVHLoader.hh index b8c10e997..98d7660ab 100644 --- a/graphics/include/gz/common/BVHLoader.hh +++ b/graphics/include/gz/common/BVHLoader.hh @@ -14,14 +14,14 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_BVHLOADER_HH_ -#define IGNITION_COMMON_BVHLOADER_HH_ +#ifndef GZ_COMMON_BVHLOADER_HH_ +#define GZ_COMMON_BVHLOADER_HH_ #include <memory> #include <string> -#include <ignition/math/Pose3.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/math/Pose3.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { @@ -29,7 +29,7 @@ namespace ignition { class Skeleton; - /// \class BVHLoader BVHLoader.hh ignition/common/BVHLoader.hh + /// \class BVHLoader BVHLoader.hh gz/common/BVHLoader.hh /// \brief Handles loading BVH animation files class IGNITION_COMMON_GRAPHICS_VISIBLE BVHLoader { diff --git a/graphics/include/gz/common/ColladaExporter.hh b/graphics/include/gz/common/ColladaExporter.hh index 5add1a5cb..4f59dd933 100644 --- a/graphics/include/gz/common/ColladaExporter.hh +++ b/graphics/include/gz/common/ColladaExporter.hh @@ -14,20 +14,20 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_COLLADAEXPORTER_HH_ -#define IGNITION_COMMON_COLLADAEXPORTER_HH_ +#ifndef GZ_COMMON_COLLADAEXPORTER_HH_ +#define GZ_COMMON_COLLADAEXPORTER_HH_ #include <memory> #include <string> #include <vector> -#include <ignition/common/MeshExporter.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/MeshExporter.hh> +#include <gz/common/graphics/Export.hh> -#include <ignition/math/Color.hh> -#include <ignition/math/Matrix4.hh> +#include <gz/math/Color.hh> +#include <gz/math/Matrix4.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> namespace ignition { diff --git a/graphics/include/gz/common/ColladaLoader.hh b/graphics/include/gz/common/ColladaLoader.hh index 199212f3b..a0dd39748 100644 --- a/graphics/include/gz/common/ColladaLoader.hh +++ b/graphics/include/gz/common/ColladaLoader.hh @@ -14,20 +14,20 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_COLLADALOADER_HH_ -#define IGNITION_COMMON_COLLADALOADER_HH_ +#ifndef GZ_COMMON_COLLADALOADER_HH_ +#define GZ_COMMON_COLLADALOADER_HH_ #include <string> -#include <ignition/common/graphics/Export.hh> -#include <ignition/common/MeshLoader.hh> +#include <gz/common/graphics/Export.hh> +#include <gz/common/MeshLoader.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> namespace ignition { namespace common { - /// \class ColladaLoader ColladaLoader.hh ignition/common/ColladaLoader.hh + /// \class ColladaLoader ColladaLoader.hh gz/common/ColladaLoader.hh /// \brief Class used to load Collada mesh files class IGNITION_COMMON_GRAPHICS_VISIBLE ColladaLoader : public MeshLoader { diff --git a/graphics/include/gz/common/GTSMeshUtils.hh b/graphics/include/gz/common/GTSMeshUtils.hh index 7dc3a0d19..a14bdec87 100644 --- a/graphics/include/gz/common/GTSMeshUtils.hh +++ b/graphics/include/gz/common/GTSMeshUtils.hh @@ -15,13 +15,13 @@ * */ -#ifndef IGNITION_COMMON_GTSMESHUTILS_HH_ -#define IGNITION_COMMON_GTSMESHUTILS_HH_ +#ifndef GZ_COMMON_GTSMESHUTILS_HH_ +#define GZ_COMMON_GTSMESHUTILS_HH_ #include <vector> -#include <ignition/math/Vector2.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/math/Vector2.hh> +#include <gz/common/graphics/Export.hh> struct _GtsSurface; @@ -33,7 +33,7 @@ namespace ignition { class SubMesh; - /// \class GTSMeshUtils GTSMeshUtils.hh ignition/common/GTSMeshUtils.hh + /// \class GTSMeshUtils GTSMeshUtils.hh gz/common/GTSMeshUtils.hh /// \brief Creates GTS utilities for meshes class IGNITION_COMMON_GRAPHICS_VISIBLE GTSMeshUtils { diff --git a/graphics/include/gz/common/Image.hh b/graphics/include/gz/common/Image.hh index 91ac1ad60..fabc61f23 100644 --- a/graphics/include/gz/common/Image.hh +++ b/graphics/include/gz/common/Image.hh @@ -14,18 +14,18 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_IMAGE_HH_ -#define IGNITION_COMMON_IMAGE_HH_ +#ifndef GZ_COMMON_IMAGE_HH_ +#define GZ_COMMON_IMAGE_HH_ #include <cstring> #include <limits> #include <memory> #include <string> #include <vector> -#include <ignition/math/Color.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/math/Color.hh> +#include <gz/common/graphics/Export.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> namespace ignition { @@ -56,7 +56,7 @@ namespace ignition "BAYER_GRBG8" }; - /// \class Image Image.hh ignition/common/common.hh + /// \class Image Image.hh gz/common/common.hh /// \brief Encapsulates an image class IGNITION_COMMON_GRAPHICS_VISIBLE Image { diff --git a/graphics/include/gz/common/KeyFrame.hh b/graphics/include/gz/common/KeyFrame.hh index 6dfbc6354..e7829221e 100644 --- a/graphics/include/gz/common/KeyFrame.hh +++ b/graphics/include/gz/common/KeyFrame.hh @@ -14,22 +14,22 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_KEYFRAME_HH_ -#define IGNITION_COMMON_KEYFRAME_HH_ +#ifndef GZ_COMMON_KEYFRAME_HH_ +#define GZ_COMMON_KEYFRAME_HH_ -#include <ignition/math/Vector3.hh> -#include <ignition/math/Quaternion.hh> +#include <gz/math/Vector3.hh> +#include <gz/math/Quaternion.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { namespace common { - /// \class KeyFrame KeyFrame.hh ignition/common/KeyFrame.hh + /// \class KeyFrame KeyFrame.hh gz/common/KeyFrame.hh /// \brief A key frame in an animation class IGNITION_COMMON_GRAPHICS_VISIBLE KeyFrame { diff --git a/graphics/include/gz/common/Material.hh b/graphics/include/gz/common/Material.hh index 4f438d59a..a5285f7e3 100644 --- a/graphics/include/gz/common/Material.hh +++ b/graphics/include/gz/common/Material.hh @@ -14,19 +14,19 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_MATERIAL_HH_ -#define IGNITION_COMMON_MATERIAL_HH_ +#ifndef GZ_COMMON_MATERIAL_HH_ +#define GZ_COMMON_MATERIAL_HH_ #include <iostream> #include <memory> #include <string> -#include <ignition/math/Color.hh> -#include <ignition/common/graphics/Export.hh> -#include <ignition/common/EnumIface.hh> -#include <ignition/common/Pbr.hh> +#include <gz/math/Color.hh> +#include <gz/common/graphics/Export.hh> +#include <gz/common/EnumIface.hh> +#include <gz/common/Pbr.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> namespace ignition { diff --git a/graphics/include/gz/common/Mesh.hh b/graphics/include/gz/common/Mesh.hh index 733a3e212..391d82bd7 100644 --- a/graphics/include/gz/common/Mesh.hh +++ b/graphics/include/gz/common/Mesh.hh @@ -14,20 +14,20 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_MESH_HH_ -#define IGNITION_COMMON_MESH_HH_ +#ifndef GZ_COMMON_MESH_HH_ +#define GZ_COMMON_MESH_HH_ #include <memory> #include <string> #include <vector> -#include <ignition/math/Vector3.hh> -#include <ignition/math/Vector2.hh> +#include <gz/math/Vector3.hh> +#include <gz/math/Vector2.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include <ignition/common/graphics/Types.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/graphics/Types.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { @@ -36,7 +36,7 @@ namespace ignition class Material; class Skeleton; - /// \class Mesh Mesh.hh ignition/common/Mesh.hh + /// \class Mesh Mesh.hh gz/common/Mesh.hh /// \brief A 3D mesh class IGNITION_COMMON_GRAPHICS_VISIBLE Mesh { diff --git a/graphics/include/gz/common/MeshCSG.hh b/graphics/include/gz/common/MeshCSG.hh index a2d445a0a..56be57029 100644 --- a/graphics/include/gz/common/MeshCSG.hh +++ b/graphics/include/gz/common/MeshCSG.hh @@ -14,12 +14,12 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_MESHCSG_HH_ -#define IGNITION_COMMON_MESHCSG_HH_ +#ifndef GZ_COMMON_MESHCSG_HH_ +#define GZ_COMMON_MESHCSG_HH_ -#include <ignition/math/Pose3.hh> +#include <gz/math/Pose3.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/graphics/Export.hh> struct _GtsSurface; typedef _GtsSurface GtsSurface; @@ -32,7 +32,7 @@ namespace ignition { class Mesh; - /// \class MeshCSG MeshCSG.hh ignition/common/MeshCSG.hh + /// \class MeshCSG MeshCSG.hh gz/common/MeshCSG.hh /// \brief Creates CSG meshes class IGNITION_COMMON_GRAPHICS_VISIBLE MeshCSG { diff --git a/graphics/include/gz/common/MeshExporter.hh b/graphics/include/gz/common/MeshExporter.hh index a1e54e3aa..2372b14a1 100644 --- a/graphics/include/gz/common/MeshExporter.hh +++ b/graphics/include/gz/common/MeshExporter.hh @@ -14,11 +14,11 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_MESHEXPORTER_HH_ -#define IGNITION_COMMON_MESHEXPORTER_HH_ +#ifndef GZ_COMMON_MESHEXPORTER_HH_ +#define GZ_COMMON_MESHEXPORTER_HH_ #include <string> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { diff --git a/graphics/include/gz/common/MeshLoader.hh b/graphics/include/gz/common/MeshLoader.hh index 4a7dd4a59..598feda61 100644 --- a/graphics/include/gz/common/MeshLoader.hh +++ b/graphics/include/gz/common/MeshLoader.hh @@ -14,12 +14,12 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_MESHLOADER_HH_ -#define IGNITION_COMMON_MESHLOADER_HH_ +#ifndef GZ_COMMON_MESHLOADER_HH_ +#define GZ_COMMON_MESHLOADER_HH_ #include <string> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { @@ -27,7 +27,7 @@ namespace ignition { class Mesh; - /// \class MeshLoader MeshLoader.hh ignition/common/MeshLoader.hh + /// \class MeshLoader MeshLoader.hh gz/common/MeshLoader.hh /// \brief Base class for loading meshes class IGNITION_COMMON_GRAPHICS_VISIBLE MeshLoader { diff --git a/graphics/include/gz/common/MeshManager.hh b/graphics/include/gz/common/MeshManager.hh index f7dc59ff5..ecdb51e4e 100644 --- a/graphics/include/gz/common/MeshManager.hh +++ b/graphics/include/gz/common/MeshManager.hh @@ -14,8 +14,8 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_MESHMANAGER_HH_ -#define IGNITION_COMMON_MESHMANAGER_HH_ +#ifndef GZ_COMMON_MESHMANAGER_HH_ +#define GZ_COMMON_MESHMANAGER_HH_ #include <map> #include <utility> @@ -23,18 +23,18 @@ #include <vector> #include <memory> -#include <ignition/math/Plane.hh> -#include <ignition/math/Matrix3.hh> -#include <ignition/math/Matrix4.hh> -#include <ignition/math/Vector2.hh> -#include <ignition/math/Vector3.hh> -#include <ignition/math/Pose3.hh> +#include <gz/math/Plane.hh> +#include <gz/math/Matrix3.hh> +#include <gz/math/Matrix4.hh> +#include <gz/math/Vector2.hh> +#include <gz/math/Vector3.hh> +#include <gz/math/Pose3.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include <ignition/common/graphics/Types.hh> -#include <ignition/common/SingletonT.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/graphics/Types.hh> +#include <gz/common/SingletonT.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { @@ -44,7 +44,7 @@ namespace ignition class Mesh; class SubMesh; - /// \class MeshManager MeshManager.hh ignition/common/MeshManager.hh + /// \class MeshManager MeshManager.hh gz/common/MeshManager.hh /// \brief Maintains and manages all meshes class IGNITION_COMMON_GRAPHICS_VISIBLE MeshManager : public SingletonT<MeshManager> diff --git a/graphics/include/gz/common/NodeAnimation.hh b/graphics/include/gz/common/NodeAnimation.hh index dd92ba528..48d3048a8 100644 --- a/graphics/include/gz/common/NodeAnimation.hh +++ b/graphics/include/gz/common/NodeAnimation.hh @@ -14,24 +14,24 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_NODE_ANIMATION_HH_ -#define IGNITION_COMMON_NODE_ANIMATION_HH_ +#ifndef GZ_COMMON_NODE_ANIMATION_HH_ +#define GZ_COMMON_NODE_ANIMATION_HH_ #include <string> #include <utility> -#include <ignition/math/Matrix4.hh> -#include <ignition/math/Pose3.hh> +#include <gz/math/Matrix4.hh> +#include <gz/math/Pose3.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { namespace common { - /// \class NodeAnimation NodeAnimation.hh ignition/common/NodeAnimation.hh + /// \class NodeAnimation NodeAnimation.hh gz/common/NodeAnimation.hh /// \brief Node animation class IGNITION_COMMON_GRAPHICS_VISIBLE NodeAnimation { diff --git a/graphics/include/gz/common/NodeTransform.hh b/graphics/include/gz/common/NodeTransform.hh index 62136d18d..26b0e691a 100644 --- a/graphics/include/gz/common/NodeTransform.hh +++ b/graphics/include/gz/common/NodeTransform.hh @@ -14,24 +14,24 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_NODE_TRANSFORM_HH_ -#define IGNITION_COMMON_NODE_TRANSFORM_HH_ +#ifndef GZ_COMMON_NODE_TRANSFORM_HH_ +#define GZ_COMMON_NODE_TRANSFORM_HH_ #include <memory> #include <string> -#include <ignition/math/Matrix4.hh> -#include <ignition/math/Vector3.hh> +#include <gz/math/Matrix4.hh> +#include <gz/math/Vector3.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include <ignition/common/graphics/Export.hh> -#include <ignition/common/Util.hh> +#include <gz/common/graphics/Export.hh> +#include <gz/common/Util.hh> namespace ignition { namespace common { - /// \class NodeTransform NodeTransform.hh ignition/common/NodeTransform.hh + /// \class NodeTransform NodeTransform.hh gz/common/NodeTransform.hh /// \brief A transformation node class IGNITION_COMMON_GRAPHICS_VISIBLE NodeTransform { diff --git a/graphics/include/gz/common/OBJLoader.hh b/graphics/include/gz/common/OBJLoader.hh index 7267b8558..4018d714a 100644 --- a/graphics/include/gz/common/OBJLoader.hh +++ b/graphics/include/gz/common/OBJLoader.hh @@ -15,16 +15,16 @@ * */ -#ifndef IGNITION_COMMON_OBJLOADER_HH_ -#define IGNITION_COMMON_OBJLOADER_HH_ +#ifndef GZ_COMMON_OBJLOADER_HH_ +#define GZ_COMMON_OBJLOADER_HH_ #include <string> #include <memory> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include <ignition/common/MeshLoader.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/MeshLoader.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { diff --git a/graphics/include/gz/common/Pbr.hh b/graphics/include/gz/common/Pbr.hh index 516cbe6a4..00768a6c9 100644 --- a/graphics/include/gz/common/Pbr.hh +++ b/graphics/include/gz/common/Pbr.hh @@ -14,14 +14,14 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_PBR_HH_ -#define IGNITION_COMMON_PBR_HH_ +#ifndef GZ_COMMON_PBR_HH_ +#define GZ_COMMON_PBR_HH_ #include <string> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { diff --git a/graphics/include/gz/common/STLLoader.hh b/graphics/include/gz/common/STLLoader.hh index 021c3205f..ab243ca3d 100644 --- a/graphics/include/gz/common/STLLoader.hh +++ b/graphics/include/gz/common/STLLoader.hh @@ -14,16 +14,16 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_STLLOADER_HH_ -#define IGNITION_COMMON_STLLOADER_HH_ +#ifndef GZ_COMMON_STLLOADER_HH_ +#define GZ_COMMON_STLLOADER_HH_ #include <stdint.h> #include <string> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include "ignition/common/MeshLoader.hh" -#include "ignition/common/graphics/Export.hh" +#include "gz/common/MeshLoader.hh" +#include "gz/common/graphics/Export.hh" #define LINE_MAX_LEN 256 #define COR3_MAX 200000 @@ -34,7 +34,7 @@ namespace ignition { namespace common { - /// \class STLLoader STLLoader.hh ignition/common/STLLoader.hh + /// \class STLLoader STLLoader.hh gz/common/STLLoader.hh /// \brief Class used to load STL mesh files class IGNITION_COMMON_GRAPHICS_VISIBLE STLLoader : public MeshLoader { diff --git a/graphics/include/gz/common/SVGLoader.hh b/graphics/include/gz/common/SVGLoader.hh index 429286a1d..88af0d17e 100644 --- a/graphics/include/gz/common/SVGLoader.hh +++ b/graphics/include/gz/common/SVGLoader.hh @@ -14,20 +14,20 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_SVGLOADER_HH_ -#define IGNITION_COMMON_SVGLOADER_HH_ +#ifndef GZ_COMMON_SVGLOADER_HH_ +#define GZ_COMMON_SVGLOADER_HH_ #include <memory> #include <string> #include <vector> -#include <ignition/math/Vector2.hh> -#include <ignition/math/Matrix3.hh> +#include <gz/math/Vector2.hh> +#include <gz/math/Matrix3.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include <ignition/common/graphics/Export.hh> -#include <ignition/common/Console.hh> +#include <gz/common/graphics/Export.hh> +#include <gz/common/Console.hh> namespace ignition { diff --git a/graphics/include/gz/common/Skeleton.hh b/graphics/include/gz/common/Skeleton.hh index 015f33485..939efaeb6 100644 --- a/graphics/include/gz/common/Skeleton.hh +++ b/graphics/include/gz/common/Skeleton.hh @@ -14,20 +14,20 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_SKELETON_HH_ -#define IGNITION_COMMON_SKELETON_HH_ +#ifndef GZ_COMMON_SKELETON_HH_ +#define GZ_COMMON_SKELETON_HH_ #include <vector> #include <string> #include <map> #include <utility> -#include <ignition/math/Matrix4.hh> +#include <gz/math/Matrix4.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include <ignition/common/SkeletonNode.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/SkeletonNode.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { @@ -35,7 +35,7 @@ namespace ignition { class SkeletonAnimation; - /// \class Skeleton Skeleton.hh ignition/common/Skeleton.hh + /// \class Skeleton Skeleton.hh gz/common/Skeleton.hh /// \brief A skeleton, usually used for animation purposes. class IGNITION_COMMON_GRAPHICS_VISIBLE Skeleton { diff --git a/graphics/include/gz/common/SkeletonAnimation.hh b/graphics/include/gz/common/SkeletonAnimation.hh index ca096bc35..ceab7e362 100644 --- a/graphics/include/gz/common/SkeletonAnimation.hh +++ b/graphics/include/gz/common/SkeletonAnimation.hh @@ -14,27 +14,27 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_SKELETONANIMATION_HH_ -#define IGNITION_COMMON_SKELETONANIMATION_HH_ +#ifndef GZ_COMMON_SKELETONANIMATION_HH_ +#define GZ_COMMON_SKELETONANIMATION_HH_ #include <map> #include <utility> #include <string> -#include <ignition/math/Matrix4.hh> -#include <ignition/math/Pose3.hh> +#include <gz/math/Matrix4.hh> +#include <gz/math/Pose3.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include <ignition/common/NodeAnimation.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/NodeAnimation.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { namespace common { /// \class SkeletonAnimation SkeletonAnimation.hh - /// ignition/common/SkeletonAnimation.hh + /// gz/common/SkeletonAnimation.hh /// \brief Skeleton animation class IGNITION_COMMON_GRAPHICS_VISIBLE SkeletonAnimation { diff --git a/graphics/include/gz/common/SkeletonNode.hh b/graphics/include/gz/common/SkeletonNode.hh index 3983f5e0f..df18bf3d9 100644 --- a/graphics/include/gz/common/SkeletonNode.hh +++ b/graphics/include/gz/common/SkeletonNode.hh @@ -14,23 +14,23 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_SKELETON_NODE_HH_ -#define IGNITION_COMMON_SKELETON_NODE_HH_ +#ifndef GZ_COMMON_SKELETON_NODE_HH_ +#define GZ_COMMON_SKELETON_NODE_HH_ #include <map> #include <string> #include <vector> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include <ignition/common/NodeTransform.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/NodeTransform.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { namespace common { - /// \class SkeletonNode Skeleton.hh ignition/common/SkeletonNode.hh + /// \class SkeletonNode Skeleton.hh gz/common/SkeletonNode.hh /// \brief A skeleton node class IGNITION_COMMON_GRAPHICS_VISIBLE SkeletonNode { diff --git a/graphics/include/gz/common/SubMesh.hh b/graphics/include/gz/common/SubMesh.hh index d0ccd5062..25eb31fd4 100644 --- a/graphics/include/gz/common/SubMesh.hh +++ b/graphics/include/gz/common/SubMesh.hh @@ -14,21 +14,21 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_SUBMESH_HH_ -#define IGNITION_COMMON_SUBMESH_HH_ +#ifndef GZ_COMMON_SUBMESH_HH_ +#define GZ_COMMON_SUBMESH_HH_ #include <memory> #include <optional> #include <string> #include <vector> -#include <ignition/math/Vector3.hh> -#include <ignition/math/Vector2.hh> +#include <gz/math/Vector3.hh> +#include <gz/math/Vector2.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> -#include <ignition/common/graphics/Types.hh> -#include <ignition/common/graphics/Export.hh> +#include <gz/common/graphics/Types.hh> +#include <gz/common/graphics/Export.hh> namespace ignition { diff --git a/graphics/include/gz/common/graphics/Types.hh b/graphics/include/gz/common/graphics/Types.hh index bf0d619d1..f1202d2ea 100644 --- a/graphics/include/gz/common/graphics/Types.hh +++ b/graphics/include/gz/common/graphics/Types.hh @@ -15,8 +15,8 @@ * */ -#ifndef IGNITION_COMMON_GRAPHICS_TYPES_HH_ -#define IGNITION_COMMON_GRAPHICS_TYPES_HH_ +#ifndef GZ_COMMON_GRAPHICS_TYPES_HH_ +#define GZ_COMMON_GRAPHICS_TYPES_HH_ #include <memory> diff --git a/include/gz/common/Base64.hh b/include/gz/common/Base64.hh index e362a497c..2f128c543 100644 --- a/include/gz/common/Base64.hh +++ b/include/gz/common/Base64.hh @@ -14,11 +14,11 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_BASE64_HH_ -#define IGNITION_COMMON_BASE64_HH_ +#ifndef GZ_COMMON_BASE64_HH_ +#define GZ_COMMON_BASE64_HH_ #include <string> -#include <ignition/common/Export.hh> +#include <gz/common/Export.hh> namespace ignition { diff --git a/include/gz/common/Battery.hh b/include/gz/common/Battery.hh index 87cbb7dc6..fd5e042b2 100644 --- a/include/gz/common/Battery.hh +++ b/include/gz/common/Battery.hh @@ -14,17 +14,17 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_BATTERY_HH_ -#define IGNITION_COMMON_BATTERY_HH_ +#ifndef GZ_COMMON_BATTERY_HH_ +#define GZ_COMMON_BATTERY_HH_ #include <functional> #include <map> #include <memory> #include <string> -#include <ignition/common/Export.hh> +#include <gz/common/Export.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> namespace ignition { diff --git a/include/gz/common/Console.hh b/include/gz/common/Console.hh index e5245fbbf..6a1f423d6 100644 --- a/include/gz/common/Console.hh +++ b/include/gz/common/Console.hh @@ -14,8 +14,8 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_CONSOLE_HH_ -#define IGNITION_COMMON_CONSOLE_HH_ +#ifndef GZ_COMMON_CONSOLE_HH_ +#define GZ_COMMON_CONSOLE_HH_ #include <iostream> #include <fstream> @@ -23,9 +23,9 @@ #include <sstream> #include <string> -#include <ignition/common/Util.hh> -#include <ignition/common/Export.hh> -#include <ignition/utils/SuppressWarning.hh> +#include <gz/common/Util.hh> +#include <gz/common/Export.hh> +#include <gz/utils/SuppressWarning.hh> namespace ignition { diff --git a/include/gz/common/EnumIface.hh b/include/gz/common/EnumIface.hh index 898eeea70..b95ce1b39 100644 --- a/include/gz/common/EnumIface.hh +++ b/include/gz/common/EnumIface.hh @@ -14,14 +14,14 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_ENUMITERATOR_HH_ -#define IGNITION_COMMON_ENUMITERATOR_HH_ +#ifndef GZ_COMMON_ENUMITERATOR_HH_ +#define GZ_COMMON_ENUMITERATOR_HH_ #include <string> #include <vector> #include <algorithm> -#include <ignition/common/Util.hh> -#include <ignition/common/Export.hh> +#include <gz/common/Util.hh> +#include <gz/common/Export.hh> namespace ignition { diff --git a/include/gz/common/Filesystem.hh b/include/gz/common/Filesystem.hh index 6948a2df0..a859a6af1 100644 --- a/include/gz/common/Filesystem.hh +++ b/include/gz/common/Filesystem.hh @@ -15,14 +15,14 @@ * */ -#ifndef IGNITION_COMMON_FILESYSTEM_HH_ -#define IGNITION_COMMON_FILESYSTEM_HH_ +#ifndef GZ_COMMON_FILESYSTEM_HH_ +#define GZ_COMMON_FILESYSTEM_HH_ #include <string> -#include <ignition/common/Export.hh> +#include <gz/common/Export.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> namespace ignition { diff --git a/include/gz/common/FlagSet.hh b/include/gz/common/FlagSet.hh index 30e1d1c18..1c4e88bf1 100644 --- a/include/gz/common/FlagSet.hh +++ b/include/gz/common/FlagSet.hh @@ -22,8 +22,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef IGNITION_COMMON_FLAGSET_HH -#define IGNITION_COMMON_FLAGSET_HH +#ifndef GZ_COMMON_FLAGSET_HH +#define GZ_COMMON_FLAGSET_HH // FlagSet is a type-safe class for using enums as flags in C++14 with an // underlying std::bitset. diff --git a/include/gz/common/MaterialDensity.hh b/include/gz/common/MaterialDensity.hh index 95de5e7d3..7dfa3f089 100644 --- a/include/gz/common/MaterialDensity.hh +++ b/include/gz/common/MaterialDensity.hh @@ -14,14 +14,14 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_MATERIALDENSITY_HH_ -#define IGNITION_COMMON_MATERIALDENSITY_HH_ +#ifndef GZ_COMMON_MATERIALDENSITY_HH_ +#define GZ_COMMON_MATERIALDENSITY_HH_ #include <string> #include <limits> #include <map> #include <tuple> -#include "ignition/common/Export.hh" +#include "gz/common/Export.hh" namespace ignition { diff --git a/include/gz/common/MovingWindowFilter.hh b/include/gz/common/MovingWindowFilter.hh index dc16df24f..83938e495 100644 --- a/include/gz/common/MovingWindowFilter.hh +++ b/include/gz/common/MovingWindowFilter.hh @@ -14,8 +14,8 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_MOVINGWINDOWFILTER_HH_ -#define IGNITION_COMMON_MOVINGWINDOWFILTER_HH_ +#ifndef GZ_COMMON_MOVINGWINDOWFILTER_HH_ +#define GZ_COMMON_MOVINGWINDOWFILTER_HH_ #include <memory> #include <vector> diff --git a/include/gz/common/Plugin.hh b/include/gz/common/Plugin.hh index ee8352576..51cad8beb 100644 --- a/include/gz/common/Plugin.hh +++ b/include/gz/common/Plugin.hh @@ -16,15 +16,15 @@ */ -#ifndef IGNITION_COMMON_PLUGIN_HH_ -#define IGNITION_COMMON_PLUGIN_HH_ +#ifndef GZ_COMMON_PLUGIN_HH_ +#define GZ_COMMON_PLUGIN_HH_ #include <memory> #include <map> #include <string> -#include <ignition/common/Export.hh> -#include <ignition/utils/SuppressWarning.hh> +#include <gz/common/Export.hh> +#include <gz/utils/SuppressWarning.hh> namespace ignition { @@ -191,6 +191,6 @@ namespace ignition } } -#include "ignition/common/detail/Plugin.hh" +#include "gz/common/detail/Plugin.hh" #endif diff --git a/include/gz/common/PluginInfo.hh b/include/gz/common/PluginInfo.hh index c819c4a19..4ae4941b6 100644 --- a/include/gz/common/PluginInfo.hh +++ b/include/gz/common/PluginInfo.hh @@ -16,8 +16,8 @@ */ -#ifndef IGNITION_COMMON_PLUGININFO_HH_ -#define IGNITION_COMMON_PLUGININFO_HH_ +#ifndef GZ_COMMON_PLUGININFO_HH_ +#define GZ_COMMON_PLUGININFO_HH_ #include <functional> #include <string> diff --git a/include/gz/common/PluginLoader.hh b/include/gz/common/PluginLoader.hh index 8b3b5b642..3f696c660 100644 --- a/include/gz/common/PluginLoader.hh +++ b/include/gz/common/PluginLoader.hh @@ -16,17 +16,17 @@ */ -#ifndef IGNITION_COMMON_PLUGINLOADER_HH_ -#define IGNITION_COMMON_PLUGINLOADER_HH_ +#ifndef GZ_COMMON_PLUGINLOADER_HH_ +#define GZ_COMMON_PLUGINLOADER_HH_ #include <memory> #include <string> #include <typeinfo> #include <unordered_set> -#include <ignition/common/Export.hh> -#include <ignition/common/PluginPtr.hh> -#include <ignition/utils/SuppressWarning.hh> +#include <gz/common/Export.hh> +#include <gz/common/PluginPtr.hh> +#include <gz/utils/SuppressWarning.hh> namespace ignition { @@ -99,6 +99,6 @@ namespace ignition } } -#include "ignition/common/detail/PluginLoader.hh" +#include "gz/common/detail/PluginLoader.hh" #endif diff --git a/include/gz/common/PluginMacros.hh b/include/gz/common/PluginMacros.hh index ecc9b677f..ce293e193 100644 --- a/include/gz/common/PluginMacros.hh +++ b/include/gz/common/PluginMacros.hh @@ -16,10 +16,10 @@ */ -#ifndef IGNITION_COMMON_REGISTERMACROS_HH_ -#define IGNITION_COMMON_REGISTERMACROS_HH_ +#ifndef GZ_COMMON_REGISTERMACROS_HH_ +#define GZ_COMMON_REGISTERMACROS_HH_ -#include "ignition/common/detail/PluginMacros.hh" +#include "gz/common/detail/PluginMacros.hh" // --------------- Specialize a plugin interface (optional) ------------------- diff --git a/include/gz/common/PluginPtr.hh b/include/gz/common/PluginPtr.hh index c202b84c0..0cc07abda 100644 --- a/include/gz/common/PluginPtr.hh +++ b/include/gz/common/PluginPtr.hh @@ -16,14 +16,14 @@ */ -#ifndef IGNITION_COMMON_PLUGINPTR_HH_ -#define IGNITION_COMMON_PLUGINPTR_HH_ +#ifndef GZ_COMMON_PLUGINPTR_HH_ +#define GZ_COMMON_PLUGINPTR_HH_ #include <map> #include <string> #include <memory> -#include "ignition/common/Plugin.hh" +#include "gz/common/Plugin.hh" namespace ignition { @@ -226,6 +226,6 @@ namespace ignition } } -#include "ignition/common/detail/PluginPtr.hh" +#include "gz/common/detail/PluginPtr.hh" #endif diff --git a/include/gz/common/SignalHandler.hh b/include/gz/common/SignalHandler.hh index 5452eb094..a8476de44 100644 --- a/include/gz/common/SignalHandler.hh +++ b/include/gz/common/SignalHandler.hh @@ -14,12 +14,12 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_SIGNALHANDLER_HH_ -#define IGNITION_COMMON_SIGNALHANDLER_HH_ +#ifndef GZ_COMMON_SIGNALHANDLER_HH_ +#define GZ_COMMON_SIGNALHANDLER_HH_ #include <functional> -#include <ignition/common/Export.hh> +#include <gz/common/Export.hh> namespace ignition { diff --git a/include/gz/common/SingletonT.hh b/include/gz/common/SingletonT.hh index 61127f957..c7a556299 100644 --- a/include/gz/common/SingletonT.hh +++ b/include/gz/common/SingletonT.hh @@ -14,8 +14,8 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_SINGLETONT_HH_ -#define IGNITION_COMMON_SINGLETONT_HH_ +#ifndef GZ_COMMON_SINGLETONT_HH_ +#define GZ_COMMON_SINGLETONT_HH_ namespace ignition { diff --git a/include/gz/common/SpecializedPlugin.hh b/include/gz/common/SpecializedPlugin.hh index 8f4c86a8a..910ec9742 100644 --- a/include/gz/common/SpecializedPlugin.hh +++ b/include/gz/common/SpecializedPlugin.hh @@ -14,12 +14,12 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_SPECIALIZEDPLUGIN_HH_ -#define IGNITION_COMMON_SPECIALIZEDPLUGIN_HH_ +#ifndef GZ_COMMON_SPECIALIZEDPLUGIN_HH_ +#define GZ_COMMON_SPECIALIZEDPLUGIN_HH_ #include <memory> -#include "ignition/common/Plugin.hh" +#include "gz/common/Plugin.hh" namespace ignition { @@ -62,7 +62,7 @@ namespace ignition /// Only interfaces that have been "specialized" can be passed as arguments /// to the SpecializedPlugin template. To specialize an interface, simply /// put the macro IGN_COMMON_SPECIALIZE_INTERFACE(~) from - /// ignition/common/PluginMacros.hh into a public location of its class + /// gz/common/PluginMacros.hh into a public location of its class /// definition. template <class SpecInterface> class SpecializedPlugin<SpecInterface> : public virtual Plugin @@ -165,6 +165,6 @@ namespace ignition } } -#include "ignition/common/detail/SpecializedPlugin.hh" +#include "gz/common/detail/SpecializedPlugin.hh" #endif diff --git a/include/gz/common/SpecializedPluginPtr.hh b/include/gz/common/SpecializedPluginPtr.hh index b09702f81..a27253aba 100644 --- a/include/gz/common/SpecializedPluginPtr.hh +++ b/include/gz/common/SpecializedPluginPtr.hh @@ -16,11 +16,11 @@ */ -#ifndef IGNITION_COMMON_SPECIALIZEDPLUGINPTR_HH_ -#define IGNITION_COMMON_SPECIALIZEDPLUGINPTR_HH_ +#ifndef GZ_COMMON_SPECIALIZEDPLUGINPTR_HH_ +#define GZ_COMMON_SPECIALIZEDPLUGINPTR_HH_ -#include "ignition/common/PluginPtr.hh" -#include "ignition/common/SpecializedPlugin.hh" +#include "gz/common/PluginPtr.hh" +#include "gz/common/SpecializedPlugin.hh" namespace ignition { @@ -64,7 +64,7 @@ namespace ignition /// Only interfaces that have been "specialized" can be passed as arguments /// to the SpecializedPluginPtr template. To specialize an interface, simply /// put the macro IGN_COMMON_SPECIALIZE_INTERFACE(~) from - /// ignition/common/PluginMacros.hh into a public location of its class + /// gz/common/PluginMacros.hh into a public location of its class /// definition. template <typename... SpecInterfaces> using SpecializedPluginPtr = diff --git a/include/gz/common/StringUtils.hh b/include/gz/common/StringUtils.hh index 6075fc935..cf0b601b0 100644 --- a/include/gz/common/StringUtils.hh +++ b/include/gz/common/StringUtils.hh @@ -14,13 +14,13 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_STRINGUTILS_HH_ -#define IGNITION_COMMON_STRINGUTILS_HH_ +#ifndef GZ_COMMON_STRINGUTILS_HH_ +#define GZ_COMMON_STRINGUTILS_HH_ #include <string> #include <vector> -#include <ignition/common/Export.hh> +#include <gz/common/Export.hh> namespace ignition { diff --git a/include/gz/common/SuppressWarning.hh b/include/gz/common/SuppressWarning.hh index a4e00c8db..cc2f0b93d 100644 --- a/include/gz/common/SuppressWarning.hh +++ b/include/gz/common/SuppressWarning.hh @@ -15,10 +15,10 @@ * */ -#ifndef IGNITION_COMMON_SUPPRESSWARNING_HH_ -#define IGNITION_COMMON_SUPPRESSWARNING_HH_ +#ifndef GZ_COMMON_SUPPRESSWARNING_HH_ +#define GZ_COMMON_SUPPRESSWARNING_HH_ -#include <ignition/utils/SuppressWarning.hh> +#include <gz/utils/SuppressWarning.hh> #pragma message("ign-common SuppressWarning is deprecated, use ign-utils") // These macros have been moved to ign-utils so they may be more broadly used. diff --git a/include/gz/common/SystemPaths.hh b/include/gz/common/SystemPaths.hh index d368dc737..19ba715f0 100644 --- a/include/gz/common/SystemPaths.hh +++ b/include/gz/common/SystemPaths.hh @@ -14,24 +14,24 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_SYSTEMPATHS_HH_ -#define IGNITION_COMMON_SYSTEMPATHS_HH_ +#ifndef GZ_COMMON_SYSTEMPATHS_HH_ +#define GZ_COMMON_SYSTEMPATHS_HH_ #include <functional> #include <list> #include <string> #include <vector> -#include <ignition/common/Export.hh> -#include <ignition/common/URI.hh> +#include <gz/common/Export.hh> +#include <gz/common/URI.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> namespace ignition { namespace common { - /// \class SystemPaths SystemPaths.hh ignition/common/SystemPaths.hh + /// \class SystemPaths SystemPaths.hh gz/common/SystemPaths.hh /// \brief Functions to handle getting system paths, keeps track of: /// \li SystemPaths#pluginPaths - plugin library paths /// for common::WorldPlugin diff --git a/include/gz/common/TempDirectory.hh b/include/gz/common/TempDirectory.hh index 259acdf1f..36a5d3a02 100644 --- a/include/gz/common/TempDirectory.hh +++ b/include/gz/common/TempDirectory.hh @@ -15,15 +15,15 @@ * */ -#ifndef IGNITION_COMMON_TEMPDIRECTORY_HH_ -#define IGNITION_COMMON_TEMPDIRECTORY_HH_ +#ifndef GZ_COMMON_TEMPDIRECTORY_HH_ +#define GZ_COMMON_TEMPDIRECTORY_HH_ #include <string> -#include <ignition/common/Export.hh> -#include <ignition/common/Filesystem.hh> +#include <gz/common/Export.hh> +#include <gz/common/Filesystem.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> namespace ignition { @@ -120,5 +120,5 @@ namespace ignition }; } // namespace common } // namespace ignition -#endif // IGNITION_COMMON_TEMPDIRECTORY_HH_ +#endif // GZ_COMMON_TEMPDIRECTORY_HH_ diff --git a/include/gz/common/TemplateHelpers.hh b/include/gz/common/TemplateHelpers.hh index 1dd9be5c1..f85d44d88 100644 --- a/include/gz/common/TemplateHelpers.hh +++ b/include/gz/common/TemplateHelpers.hh @@ -16,11 +16,11 @@ */ -#ifndef IGNITION_COMMON_TEMPLATEHELPERS_HH_ -#define IGNITION_COMMON_TEMPLATEHELPERS_HH_ +#ifndef GZ_COMMON_TEMPLATEHELPERS_HH_ +#define GZ_COMMON_TEMPLATEHELPERS_HH_ -#include "ignition/common/detail/TemplateHelpers.hh" +#include "gz/common/detail/TemplateHelpers.hh" namespace ignition { diff --git a/include/gz/common/Timer.hh b/include/gz/common/Timer.hh index 098c31680..e155fe56c 100644 --- a/include/gz/common/Timer.hh +++ b/include/gz/common/Timer.hh @@ -14,11 +14,11 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_TIMER_HH_ -#define IGNITION_COMMON_TIMER_HH_ +#ifndef GZ_COMMON_TIMER_HH_ +#define GZ_COMMON_TIMER_HH_ -#include <ignition/common/Export.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/common/Export.hh> +#include <gz/utils/ImplPtr.hh> #include <chrono> #include <iostream> diff --git a/include/gz/common/URI.hh b/include/gz/common/URI.hh index a03904071..c0b7e3ee2 100644 --- a/include/gz/common/URI.hh +++ b/include/gz/common/URI.hh @@ -14,15 +14,15 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_URI_HH_ -#define IGNITION_COMMON_URI_HH_ +#ifndef GZ_COMMON_URI_HH_ +#define GZ_COMMON_URI_HH_ #include <optional> #include <string> -#include <ignition/common/Export.hh> +#include <gz/common/Export.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> namespace ignition { diff --git a/include/gz/common/Util.hh b/include/gz/common/Util.hh index 5390d08ca..f6055b6b1 100644 --- a/include/gz/common/Util.hh +++ b/include/gz/common/Util.hh @@ -14,8 +14,8 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_UTIL_HH_ -#define IGNITION_COMMON_UTIL_HH_ +#ifndef GZ_COMMON_UTIL_HH_ +#define GZ_COMMON_UTIL_HH_ #include <cassert> #include <chrono> @@ -25,10 +25,10 @@ #include <thread> #include <vector> -#include <ignition/common/Export.hh> -#include <ignition/common/Filesystem.hh> -#include <ignition/common/SystemPaths.hh> -#include <ignition/common/URI.hh> +#include <gz/common/Export.hh> +#include <gz/common/Filesystem.hh> +#include <gz/common/SystemPaths.hh> +#include <gz/common/URI.hh> ///////////////////////////////////////////////// // Defines diff --git a/include/gz/common/Uuid.hh b/include/gz/common/Uuid.hh index d9718951f..48a648c43 100644 --- a/include/gz/common/Uuid.hh +++ b/include/gz/common/Uuid.hh @@ -14,13 +14,13 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_UUID_HH_INCLUDED_ -#define IGNITION_COMMON_UUID_HH_INCLUDED_ +#ifndef GZ_COMMON_UUID_HH_INCLUDED_ +#define GZ_COMMON_UUID_HH_INCLUDED_ #include <iostream> #include <string> -#include <ignition/common/Export.hh> +#include <gz/common/Export.hh> #ifdef _WIN32 #include <Rpc.h> diff --git a/include/gz/common/WorkerPool.hh b/include/gz/common/WorkerPool.hh index d7f5aeebc..6220cd0d8 100644 --- a/include/gz/common/WorkerPool.hh +++ b/include/gz/common/WorkerPool.hh @@ -15,14 +15,14 @@ * */ -#ifndef IGNITION_COMMON_WORKER_POOL_HH_ -#define IGNITION_COMMON_WORKER_POOL_HH_ +#ifndef GZ_COMMON_WORKER_POOL_HH_ +#define GZ_COMMON_WORKER_POOL_HH_ #include <functional> -#include <ignition/common/Export.hh> +#include <gz/common/Export.hh> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> namespace ignition { diff --git a/include/gz/common/detail/Plugin.hh b/include/gz/common/detail/Plugin.hh index a7d2d2c22..3a8a048c1 100644 --- a/include/gz/common/detail/Plugin.hh +++ b/include/gz/common/detail/Plugin.hh @@ -16,12 +16,12 @@ */ -#ifndef IGNITION_COMMON_DETAIL_PLUGIN_HH_ -#define IGNITION_COMMON_DETAIL_PLUGIN_HH_ +#ifndef GZ_COMMON_DETAIL_PLUGIN_HH_ +#define GZ_COMMON_DETAIL_PLUGIN_HH_ #include <memory> #include <string> -#include "ignition/common/Plugin.hh" +#include "gz/common/Plugin.hh" namespace ignition { diff --git a/include/gz/common/detail/PluginLoader.hh b/include/gz/common/detail/PluginLoader.hh index 84504470a..2ef11c625 100644 --- a/include/gz/common/detail/PluginLoader.hh +++ b/include/gz/common/detail/PluginLoader.hh @@ -16,11 +16,11 @@ */ -#ifndef IGNITION_COMMON_DETAIL_PLUGINLOADER_HH_ -#define IGNITION_COMMON_DETAIL_PLUGINLOADER_HH_ +#ifndef GZ_COMMON_DETAIL_PLUGINLOADER_HH_ +#define GZ_COMMON_DETAIL_PLUGINLOADER_HH_ #include <string> -#include "ignition/common/PluginLoader.hh" +#include "gz/common/PluginLoader.hh" namespace ignition { diff --git a/include/gz/common/detail/PluginMacros.hh b/include/gz/common/detail/PluginMacros.hh index 733c91938..4e93ae447 100644 --- a/include/gz/common/detail/PluginMacros.hh +++ b/include/gz/common/detail/PluginMacros.hh @@ -16,16 +16,16 @@ */ -#ifndef IGNITION_COMMON_DETAIL_PLUGINMACROS_HH_ -#define IGNITION_COMMON_DETAIL_PLUGINMACROS_HH_ +#ifndef GZ_COMMON_DETAIL_PLUGINMACROS_HH_ +#define GZ_COMMON_DETAIL_PLUGINMACROS_HH_ #include <string> #include <typeinfo> #include <type_traits> #include <unordered_set> #include <utility> -#include "ignition/common/PluginInfo.hh" -#include "ignition/utils/SuppressWarning.hh" +#include "gz/common/PluginInfo.hh" +#include "gz/utils/SuppressWarning.hh" #if defined _WIN32 || defined __CYGWIN__ diff --git a/include/gz/common/detail/PluginPtr.hh b/include/gz/common/detail/PluginPtr.hh index 133bb2764..93952868e 100644 --- a/include/gz/common/detail/PluginPtr.hh +++ b/include/gz/common/detail/PluginPtr.hh @@ -16,13 +16,13 @@ */ -#ifndef IGNITION_COMMON_DETAIL_PLUGINPTR_HH_ -#define IGNITION_COMMON_DETAIL_PLUGINPTR_HH_ +#ifndef GZ_COMMON_DETAIL_PLUGINPTR_HH_ +#define GZ_COMMON_DETAIL_PLUGINPTR_HH_ #include <memory> #include <utility> -#include "ignition/common/PluginPtr.hh" -#include "ignition/common/TemplateHelpers.hh" +#include "gz/common/PluginPtr.hh" +#include "gz/common/TemplateHelpers.hh" namespace ignition { diff --git a/include/gz/common/detail/SpecializedPlugin.hh b/include/gz/common/detail/SpecializedPlugin.hh index 7c6bf31d2..dff284cca 100644 --- a/include/gz/common/detail/SpecializedPlugin.hh +++ b/include/gz/common/detail/SpecializedPlugin.hh @@ -16,10 +16,10 @@ */ -#ifndef IGNITION_COMMON_DETAIL_SPECIALIZEDPLUGIN_HH_ -#define IGNITION_COMMON_DETAIL_SPECIALIZEDPLUGIN_HH_ +#ifndef GZ_COMMON_DETAIL_SPECIALIZEDPLUGIN_HH_ +#define GZ_COMMON_DETAIL_SPECIALIZEDPLUGIN_HH_ -#include "ignition/common/SpecializedPlugin.hh" +#include "gz/common/SpecializedPlugin.hh" #include <memory> // This preprocessor token should only be used by the unittest that is diff --git a/include/gz/common/detail/TemplateHelpers.hh b/include/gz/common/detail/TemplateHelpers.hh index 7cecae948..332755ed8 100644 --- a/include/gz/common/detail/TemplateHelpers.hh +++ b/include/gz/common/detail/TemplateHelpers.hh @@ -16,8 +16,8 @@ */ -#ifndef IGNITION_COMMON_DETAIL_TEMPLATEHELPERS_HH_ -#define IGNITION_COMMON_DETAIL_TEMPLATEHELPERS_HH_ +#ifndef GZ_COMMON_DETAIL_TEMPLATEHELPERS_HH_ +#define GZ_COMMON_DETAIL_TEMPLATEHELPERS_HH_ #include <type_traits> diff --git a/profiler/include/gz/common/Profiler.hh b/profiler/include/gz/common/Profiler.hh index 8190a113b..c2d0e9dac 100644 --- a/profiler/include/gz/common/Profiler.hh +++ b/profiler/include/gz/common/Profiler.hh @@ -15,15 +15,15 @@ * */ -#ifndef IGNITION_COMMON_PROFILER_HH_ -#define IGNITION_COMMON_PROFILER_HH_ +#ifndef GZ_COMMON_PROFILER_HH_ +#define GZ_COMMON_PROFILER_HH_ #include <memory> #include <string> -#include <ignition/common/profiler/Export.hh> -#include <ignition/common/SingletonT.hh> -#include <ignition/common/config.hh> +#include <gz/common/profiler/Export.hh> +#include <gz/common/SingletonT.hh> +#include <gz/common/config.hh> namespace ignition { @@ -162,4 +162,4 @@ ignition::common::ScopedProfile __profile##line(name, &__hash##line); #define IGN_PROFILER_VALID \ IGN_PROFILER_ENABLE && ignition::common::Profiler::Instance()->Valid() -#endif // IGNITION_COMMON_PROFILER_HH_ +#endif // GZ_COMMON_PROFILER_HH_ diff --git a/testing/include/gz/common/testing/AutoLogFixture.hh b/testing/include/gz/common/testing/AutoLogFixture.hh index c685723f9..204b3107b 100644 --- a/testing/include/gz/common/testing/AutoLogFixture.hh +++ b/testing/include/gz/common/testing/AutoLogFixture.hh @@ -14,15 +14,15 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_TESTING_AUTOLOGFIXTURE_HH_ -#define IGNITION_COMMON_TESTING_AUTOLOGFIXTURE_HH_ +#ifndef GZ_COMMON_TESTING_AUTOLOGFIXTURE_HH_ +#define GZ_COMMON_TESTING_AUTOLOGFIXTURE_HH_ #include <gtest/gtest.h> #include <memory> #include <string> -#include <ignition/utils/ImplPtr.hh> +#include <gz/utils/ImplPtr.hh> namespace ignition::common::testing { @@ -54,6 +54,6 @@ class AutoLogFixture : public ::testing::Test }; } // namespace ignition::common::testing -#include <ignition/common/testing/detail/AutoLogFixture.hh> +#include <gz/common/testing/detail/AutoLogFixture.hh> -#endif // IGNITION_COMMON_TESTING_AUTOLOGFIXTURE_HH_ +#endif // GZ_COMMON_TESTING_AUTOLOGFIXTURE_HH_ diff --git a/testing/include/gz/common/testing/BazelTestPaths.hh b/testing/include/gz/common/testing/BazelTestPaths.hh index b8927a86f..f50ff7718 100644 --- a/testing/include/gz/common/testing/BazelTestPaths.hh +++ b/testing/include/gz/common/testing/BazelTestPaths.hh @@ -14,13 +14,13 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_TESTING_BAZELTESTPATHS_HH_ -#define IGNITION_COMMON_TESTING_BAZELTESTPATHS_HH_ +#ifndef GZ_COMMON_TESTING_BAZELTESTPATHS_HH_ +#define GZ_COMMON_TESTING_BAZELTESTPATHS_HH_ #include <string> -#include "ignition/common/testing/TestPaths.hh" -#include "ignition/common/testing/Export.hh" +#include "gz/common/testing/TestPaths.hh" +#include "gz/common/testing/Export.hh" namespace ignition::common::testing { @@ -55,4 +55,4 @@ class BazelTestPaths: public TestPaths } // namespace ignition::common::testing -#endif // IGNITION_COMMON_TESTING_AUTOLOGFIXTURE_HH_ +#endif // GZ_COMMON_TESTING_AUTOLOGFIXTURE_HH_ diff --git a/testing/include/gz/common/testing/CMakeTestPaths.hh b/testing/include/gz/common/testing/CMakeTestPaths.hh index 9b18dd10c..1ce948bc4 100644 --- a/testing/include/gz/common/testing/CMakeTestPaths.hh +++ b/testing/include/gz/common/testing/CMakeTestPaths.hh @@ -14,13 +14,13 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_TESTING_CMAKETESTPATHS_HH_ -#define IGNITION_COMMON_TESTING_CMAKETESTPATHS_HH_ +#ifndef GZ_COMMON_TESTING_CMAKETESTPATHS_HH_ +#define GZ_COMMON_TESTING_CMAKETESTPATHS_HH_ #include <string> -#include "ignition/common/testing/TestPaths.hh" -#include "ignition/common/testing/Export.hh" +#include "gz/common/testing/TestPaths.hh" +#include "gz/common/testing/Export.hh" namespace ignition::common::testing { @@ -45,4 +45,4 @@ class CMakeTestPaths: public TestPaths TestTmpPath(std::string &_tmpDir) override; }; } // namespace ignition::common::testing -#endif // IGNITION_COMMON_TESTING_CMAKETESTPATHS_HH_ +#endif // GZ_COMMON_TESTING_CMAKETESTPATHS_HH_ diff --git a/testing/include/gz/common/testing/TestPaths.hh b/testing/include/gz/common/testing/TestPaths.hh index da20fb214..1fb7b3894 100644 --- a/testing/include/gz/common/testing/TestPaths.hh +++ b/testing/include/gz/common/testing/TestPaths.hh @@ -14,17 +14,17 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_TESTING_TESTPATHS_HH_ -#define IGNITION_COMMON_TESTING_TESTPATHS_HH_ +#ifndef GZ_COMMON_TESTING_TESTPATHS_HH_ +#define GZ_COMMON_TESTING_TESTPATHS_HH_ #include <memory> #include <string> -#include "ignition/common/Filesystem.hh" -#include "ignition/common/TempDirectory.hh" -#include "ignition/common/Util.hh" +#include "gz/common/Filesystem.hh" +#include "gz/common/TempDirectory.hh" +#include "gz/common/Util.hh" -#include "ignition/common/testing/Export.hh" +#include "gz/common/testing/Export.hh" #ifndef TESTING_PROJECT_SOURCE_DIR #define TESTING_PROJECT_SOURCE_DIR "" @@ -198,4 +198,4 @@ std::string TempPath(Args const &... args) return common::joinPaths(dataDir, args...); } } // namespace ignition::common::testing -#endif // IGNITION_COMMON_TESTING_TESTPATHS_HH_ +#endif // GZ_COMMON_TESTING_TESTPATHS_HH_ diff --git a/testing/include/gz/common/testing/Utils.hh b/testing/include/gz/common/testing/Utils.hh index a4ae24c1a..44ca5132c 100644 --- a/testing/include/gz/common/testing/Utils.hh +++ b/testing/include/gz/common/testing/Utils.hh @@ -14,14 +14,14 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_TESTING_UTILS_HH_ -#define IGNITION_COMMON_TESTING_UTILS_HH_ +#ifndef GZ_COMMON_TESTING_UTILS_HH_ +#define GZ_COMMON_TESTING_UTILS_HH_ #include <climits> #include <cstdint> #include <string> -#include "ignition/common/testing/Export.hh" +#include "gz/common/testing/Export.hh" namespace ignition::common::testing { @@ -37,4 +37,4 @@ createNewEmptyFile(const std::string &_filename); } // namespace ignition::common::testing -#endif // IGNITION_COMMON_TESTING_TESTPATHS_HH_ +#endif // GZ_COMMON_TESTING_TESTPATHS_HH_ diff --git a/testing/include/gz/common/testing/detail/AutoLogFixture.hh b/testing/include/gz/common/testing/detail/AutoLogFixture.hh index e44914590..4d19ebb8f 100644 --- a/testing/include/gz/common/testing/detail/AutoLogFixture.hh +++ b/testing/include/gz/common/testing/detail/AutoLogFixture.hh @@ -14,18 +14,18 @@ * limitations under the License. * */ -#ifndef IGNITION_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ -#define IGNITION_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ +#ifndef GZ_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ +#define GZ_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ -#include "ignition/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/AutoLogFixture.hh" #include <memory> #include <string> -#include <ignition/common/Console.hh> -#include <ignition/common/Filesystem.hh> -#include <ignition/common/TempDirectory.hh> -#include <ignition/common/Util.hh> +#include <gz/common/Console.hh> +#include <gz/common/Filesystem.hh> +#include <gz/common/TempDirectory.hh> +#include <gz/common/Util.hh> namespace ignition::common::testing { @@ -116,5 +116,5 @@ std::string AutoLogFixture::LogContent() const } // namespace ignition::common::testing -#endif // IGNITION_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ +#endif // GZ_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ From 3aadb66ca61149e398a14558a8e5fd7a7a148e5d Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Fri, 29 Apr 2022 18:03:53 -0700 Subject: [PATCH 156/219] Migrate build files Signed-off-by: methylDragon <methylDragon@gmail.com> --- BUILD.bazel | 20 ++++++++++---------- CMakeLists.txt | 4 +++- av/BUILD.bazel | 14 +++++++------- av/include/CMakeLists.txt | 2 ++ av/include/gz/CMakeLists.txt | 1 + events/include/CMakeLists.txt | 2 ++ events/include/gz/CMakeLists.txt | 1 + geospatial/include/CMakeLists.txt | 2 ++ geospatial/include/gz/CMakeLists.txt | 1 + graphics/BUILD.bazel | 14 +++++++------- graphics/include/CMakeLists.txt | 2 ++ graphics/include/gz/CMakeLists.txt | 1 + include/CMakeLists.txt | 3 ++- profiler/BUILD.bazel | 12 ++++++------ profiler/CMakeLists.txt | 7 +++++-- testing/include/CMakeLists.txt | 2 ++ testing/include/gz/CMakeLists.txt | 1 + 17 files changed, 55 insertions(+), 34 deletions(-) create mode 100644 av/include/CMakeLists.txt create mode 100644 av/include/gz/CMakeLists.txt create mode 100644 events/include/CMakeLists.txt create mode 100644 events/include/gz/CMakeLists.txt create mode 100644 geospatial/include/CMakeLists.txt create mode 100644 geospatial/include/gz/CMakeLists.txt create mode 100644 graphics/include/CMakeLists.txt create mode 100644 graphics/include/gz/CMakeLists.txt create mode 100644 testing/include/CMakeLists.txt create mode 100644 testing/include/gz/CMakeLists.txt diff --git a/BUILD.bazel b/BUILD.bazel index 742ac0441..d193ffd3c 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -28,22 +28,22 @@ PROJECT_PATCH = 0 # Generates config.hh based on the version numbers in CMake code. ign_config_header( name = "config", - src = "include/ignition/common/config.hh.in", + src = "include/gz/common/config.hh.in", cmakelists = ["CMakeLists.txt"], project_name = PROJECT_NAME, project_version = (PROJECT_MAJOR, PROJECT_MINOR, PROJECT_PATCH), ) ign_export_header( - name = "include/ignition/common/Export.hh", + name = "include/gz/common/Export.hh", export_base = "IGNITION_COMMON", lib_name = "ignition-common", visibility = ["//visibility:private"], ) public_headers_no_gen = glob([ - "include/ignition/common/*.hh", - "include/ignition/common/detail/*.hh", + "include/gz/common/*.hh", + "include/gz/common/detail/*.hh", ]) private_headers = [ @@ -58,17 +58,17 @@ sources = glob( generate_include_header( name = "commonhh_genrule", - out = "include/ignition/common.hh", + out = "include/gz/common.hh", hdrs = public_headers_no_gen + [ - "include/ignition/common/config.hh", - "include/ignition/common/Export.hh", + "include/gz/common/config.hh", + "include/gz/common/Export.hh", ], ) public_headers = public_headers_no_gen + [ - "include/ignition/common/config.hh", - "include/ignition/common/Export.hh", - "include/ignition/common.hh", + "include/gz/common/config.hh", + "include/gz/common/Export.hh", + "include/gz/common.hh", ] cc_library( diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e59b49b9..d3b2d78ea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,9 @@ set(IGN_CMAKE_VER ${ignition-cmake3_VERSION_MAJOR}) #============================================================================ # Configure the project #============================================================================ -ign_configure_project(VERSION_SUFFIX pre1) +ign_configure_project( + REPLACE_IGNITION_INCLUDE_PATH gz/common + VERSION_SUFFIX pre1) #============================================================================ # Set project-specific options diff --git a/av/BUILD.bazel b/av/BUILD.bazel index b17154f2b..ebe284e46 100644 --- a/av/BUILD.bazel +++ b/av/BUILD.bazel @@ -15,8 +15,8 @@ package( ) public_headers_no_gen = glob([ - "include/ignition/common/*.hh", - "include/ignition/common/**/*.hh", + "include/gz/common/*.hh", + "include/gz/common/**/*.hh", ]) sources = glob( @@ -30,7 +30,7 @@ sources = glob( test_sources = glob(["src/*_TEST.cc"]) ign_export_header( - name = "include/ignition/common/av/Export.hh", + name = "include/gz/common/av/Export.hh", export_base = "IGNITION_COMMON_AV", lib_name = "ignition-common-av", visibility = ["//visibility:private"], @@ -38,15 +38,15 @@ ign_export_header( generate_include_header( name = "eventshh_genrule", - out = "include/ignition/common/av.hh", + out = "include/gz/common/av.hh", hdrs = public_headers_no_gen + [ - "include/ignition/common/av/Export.hh", + "include/gz/common/av/Export.hh", ], ) public_headers = public_headers_no_gen + [ - "include/ignition/common/av/Export.hh", - "include/ignition/common/av.hh", + "include/gz/common/av/Export.hh", + "include/gz/common/av.hh", ] cc_library( diff --git a/av/include/CMakeLists.txt b/av/include/CMakeLists.txt new file mode 100644 index 000000000..f16a51743 --- /dev/null +++ b/av/include/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(gz) +install(DIRECTORY ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL} PATTERN "HWEncoder\.hh" EXCLUDE) diff --git a/av/include/gz/CMakeLists.txt b/av/include/gz/CMakeLists.txt new file mode 100644 index 000000000..e4717b2d6 --- /dev/null +++ b/av/include/gz/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(common) diff --git a/events/include/CMakeLists.txt b/events/include/CMakeLists.txt new file mode 100644 index 000000000..4b2bdd7bb --- /dev/null +++ b/events/include/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(gz) +install(DIRECTORY ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) diff --git a/events/include/gz/CMakeLists.txt b/events/include/gz/CMakeLists.txt new file mode 100644 index 000000000..e4717b2d6 --- /dev/null +++ b/events/include/gz/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(common) diff --git a/geospatial/include/CMakeLists.txt b/geospatial/include/CMakeLists.txt new file mode 100644 index 000000000..4b2bdd7bb --- /dev/null +++ b/geospatial/include/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(gz) +install(DIRECTORY ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) diff --git a/geospatial/include/gz/CMakeLists.txt b/geospatial/include/gz/CMakeLists.txt new file mode 100644 index 000000000..e4717b2d6 --- /dev/null +++ b/geospatial/include/gz/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(common) diff --git a/graphics/BUILD.bazel b/graphics/BUILD.bazel index c8d39fafc..8567eeceb 100644 --- a/graphics/BUILD.bazel +++ b/graphics/BUILD.bazel @@ -15,8 +15,8 @@ package( ) public_headers_no_gen = glob([ - "include/ignition/common/*.hh", - "include/ignition/common/**/*.hh", + "include/gz/common/*.hh", + "include/gz/common/**/*.hh", ]) sources = glob( @@ -27,7 +27,7 @@ sources = glob( test_sources = glob(["src/*_TEST.cc"]) ign_export_header( - name = "include/ignition/common/graphics/Export.hh", + name = "include/gz/common/graphics/Export.hh", export_base = "IGNITION_COMMON_GRAPHICS", lib_name = "ignition-common-graphics", visibility = ["//visibility:private"], @@ -35,15 +35,15 @@ ign_export_header( generate_include_header( name = "graphics_hh_genrule", - out = "include/ignition/common/graphics.hh", + out = "include/gz/common/graphics.hh", hdrs = public_headers_no_gen + [ - "include/ignition/common/graphics/Export.hh", + "include/gz/common/graphics/Export.hh", ], ) public_headers = public_headers_no_gen + [ - "include/ignition/common/graphics/Export.hh", - "include/ignition/common/graphics.hh", + "include/gz/common/graphics/Export.hh", + "include/gz/common/graphics.hh", "src/tiny_obj_loader.h", ] diff --git a/graphics/include/CMakeLists.txt b/graphics/include/CMakeLists.txt new file mode 100644 index 000000000..4b2bdd7bb --- /dev/null +++ b/graphics/include/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(gz) +install(DIRECTORY ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) diff --git a/graphics/include/gz/CMakeLists.txt b/graphics/include/gz/CMakeLists.txt new file mode 100644 index 000000000..e4717b2d6 --- /dev/null +++ b/graphics/include/gz/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(common) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 25ec89762..4b2bdd7bb 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1 +1,2 @@ -add_subdirectory(ignition) +add_subdirectory(gz) +install(DIRECTORY ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) diff --git a/profiler/BUILD.bazel b/profiler/BUILD.bazel index 6fc5ce419..d0d159bd8 100644 --- a/profiler/BUILD.bazel +++ b/profiler/BUILD.bazel @@ -16,7 +16,7 @@ package( ) public_headers_no_gen = [ - "include/ignition/common/Profiler.hh", + "include/gz/common/Profiler.hh", ] sources = [ @@ -54,7 +54,7 @@ cmake_configure_file( ) ign_export_header( - name = "include/ignition/common/profiler/Export.hh", + name = "include/gz/common/profiler/Export.hh", export_base = "IGNITION_COMMON_PROFILER", lib_name = "ignition-common-profiler", visibility = ["//visibility:private"], @@ -62,16 +62,16 @@ ign_export_header( generate_include_header( name = "profiler_hh_genrule", - out = "include/ignition/common/profiler.hh", + out = "include/gz/common/profiler.hh", hdrs = public_headers_no_gen + [ - "include/ignition/common/profiler/Export.hh", + "include/gz/common/profiler/Export.hh", "include/RemoteryConfig.h", ], ) public_headers = public_headers_no_gen + [ - "include/ignition/common/profiler/Export.hh", - "include/ignition/common/profiler.hh", + "include/gz/common/profiler/Export.hh", + "include/gz/common/profiler.hh", "src/ProfilerImpl.hh", "src/RemoteryProfilerImpl.hh", "include/RemoteryConfig.h", diff --git a/profiler/CMakeLists.txt b/profiler/CMakeLists.txt index 8ad3c2f9e..3eb7edf1b 100644 --- a/profiler/CMakeLists.txt +++ b/profiler/CMakeLists.txt @@ -1,7 +1,10 @@ - add_subdirectory(src) +# add_subdirectory(include) install( - DIRECTORY include/ + DIRECTORY include/ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) +install( + DIRECTORY include/gz + DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) diff --git a/testing/include/CMakeLists.txt b/testing/include/CMakeLists.txt new file mode 100644 index 000000000..4b2bdd7bb --- /dev/null +++ b/testing/include/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(gz) +install(DIRECTORY ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) diff --git a/testing/include/gz/CMakeLists.txt b/testing/include/gz/CMakeLists.txt new file mode 100644 index 000000000..e4717b2d6 --- /dev/null +++ b/testing/include/gz/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(common) From b87a28e20db8a876ef06c57914314996dcd66884 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 5 May 2022 09:14:26 -0500 Subject: [PATCH 157/219] Test updates for common::testing module. (#315) Update common tests to make use of the new common::testing module Signed-off-by: Michael Carroll <michael@openrobotics.org> --- CMakeLists.txt | 1 + av/src/AudioDecoder_TEST.cc | 3 +- av/src/CMakeLists.txt | 5 +- av/src/VideoEncoder_TEST.cc | 8 +- events/src/CMakeLists.txt | 9 +- events/src/Event_TEST.cc | 2 +- events/src/MouseEvent_TEST.cc | 2 +- geospatial/src/CMakeLists.txt | 5 +- geospatial/src/Dem_TEST.cc | 4 +- geospatial/src/ImageHeightmap_TEST.cc | 4 +- graphics/src/Animation_TEST.cc | 4 +- graphics/src/CMakeLists.txt | 9 +- graphics/src/ColladaExporter_TEST.cc | 6 +- graphics/src/ColladaLoader_TEST.cc | 4 +- graphics/src/GTSMeshUtils_TEST.cc | 3 +- graphics/src/Image_TEST.cc | 4 +- graphics/src/Material_TEST.cc | 4 +- graphics/src/MeshManager_TEST.cc | 3 +- graphics/src/Mesh_TEST.cc | 3 +- graphics/src/OBJLoader_TEST.cc | 4 +- graphics/src/SVGLoader_TEST.cc | 9 +- graphics/src/SubMesh_TEST.cc | 3 +- profiler/src/CMakeLists.txt | 8 +- src/Base64_TEST.cc | 2 +- src/Battery_TEST.cc | 5 +- src/CMakeLists.txt | 9 +- src/Console_TEST.cc | 3 +- src/EnumIface_TEST.cc | 3 +- src/Filesystem_TEST.cc | 30 +- src/MaterialDensity_TEST.cc | 4 +- src/PluginLoader_TEST.cc | 43 ++- src/Util_TEST.cc | 4 +- test/CMakeLists.txt | 2 - test/integration/CMakeLists.txt | 11 +- test/integration/console.cc | 56 ++- test/integration/encoder_timing.cc | 1 - test/integration/mesh.cc | 355 ++++++++---------- test/integration/plugin.cc | 1 - test/integration/video_encoder.cc | 3 +- test/performance/plugin_specialization.cc | 1 - test/test_config.h.in | 184 --------- .../common/testing/detail/AutoLogFixture.hh | 10 +- 42 files changed, 341 insertions(+), 493 deletions(-) delete mode 100644 test/test_config.h.in diff --git a/CMakeLists.txt b/CMakeLists.txt index d3b2d78ea..09ba32e36 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) # Initialize the project #============================================================================ project(ignition-common5 VERSION 5.0.0) +set(IGN_COMMON_VER ${PROJECT_VERSION_MAJOR}) #============================================================================ # Find ignition-cmake diff --git a/av/src/AudioDecoder_TEST.cc b/av/src/AudioDecoder_TEST.cc index c8331cc7f..367eefd6e 100644 --- a/av/src/AudioDecoder_TEST.cc +++ b/av/src/AudioDecoder_TEST.cc @@ -18,8 +18,7 @@ #include <ignition/common/AudioDecoder.hh> #include <ignition/utils/ExtraTestMacros.hh> - -#include "test_config.h" +#include <ignition/common/testing/TestPaths.hh> using namespace ignition; diff --git a/av/src/CMakeLists.txt b/av/src/CMakeLists.txt index 941e46384..294c37993 100644 --- a/av/src/CMakeLists.txt +++ b/av/src/CMakeLists.txt @@ -21,8 +21,11 @@ if(IGN_COMMON_BUILD_HW_VIDEO) target_compile_definitions(${av_target} PRIVATE IGN_COMMON_BUILD_HW_VIDEO) endif() -ign_build_tests(TYPE UNIT SOURCES ${gtest_sources} +ign_build_tests( + TYPE UNIT + SOURCES ${gtest_sources} LIB_DEPS ${av_target} + ignition-common${IGN_COMMON_VER}-testing ) diff --git a/av/src/VideoEncoder_TEST.cc b/av/src/VideoEncoder_TEST.cc index 495b11a7d..8f376edef 100644 --- a/av/src/VideoEncoder_TEST.cc +++ b/av/src/VideoEncoder_TEST.cc @@ -17,7 +17,9 @@ #include "ignition/common/Console.hh" #include "ignition/common/VideoEncoder.hh" -#include "test_config.h" + +#include "ignition/common/testing/AutoLogFixture.hh" +#include "ignition/common/testing/TestPaths.hh" using namespace ignition; using namespace common; @@ -28,7 +30,11 @@ class VideoEncoderTest : public common::testing::AutoLogFixture protected: void SetUp() override { Console::SetVerbosity(4); + tempDir = common::testing::MakeTestTempDirectory(); + ASSERT_TRUE(tempDir->Valid()) << tempDir->Path(); } + + public: std::shared_ptr<ignition::common::TempDirectory> tempDir; }; ///////////////////////////////////////////////// diff --git a/events/src/CMakeLists.txt b/events/src/CMakeLists.txt index 3947ce68c..350d010e0 100644 --- a/events/src/CMakeLists.txt +++ b/events/src/CMakeLists.txt @@ -7,5 +7,10 @@ target_link_libraries(${events_target} PUBLIC ignition-math${IGN_MATH_VER}::ignition-math${IGN_MATH_VER}) -ign_build_tests(TYPE UNIT SOURCES ${gtest_sources} - LIB_DEPS ${events_target}) +ign_build_tests( + TYPE UNIT + SOURCES ${gtest_sources} + LIB_DEPS + ${events_target} + ignition-common${IGN_COMMON_VER}-testing +) diff --git a/events/src/Event_TEST.cc b/events/src/Event_TEST.cc index 34cb76cbe..a3ee29e96 100644 --- a/events/src/Event_TEST.cc +++ b/events/src/Event_TEST.cc @@ -17,7 +17,7 @@ #include <gtest/gtest.h> -#include "test_config.h" +#include "ignition/common/testing/AutoLogFixture.hh" #include <functional> #include <ignition/common/Event.hh> diff --git a/events/src/MouseEvent_TEST.cc b/events/src/MouseEvent_TEST.cc index 43c3edb37..59db03c12 100644 --- a/events/src/MouseEvent_TEST.cc +++ b/events/src/MouseEvent_TEST.cc @@ -17,7 +17,7 @@ #include <gtest/gtest.h> -#include "test_config.h" +#include "ignition/common/testing/AutoLogFixture.hh" #include "ignition/common/MouseEvent.hh" #include "ignition/common/config.hh" diff --git a/geospatial/src/CMakeLists.txt b/geospatial/src/CMakeLists.txt index 6975e86fc..d752e6450 100644 --- a/geospatial/src/CMakeLists.txt +++ b/geospatial/src/CMakeLists.txt @@ -19,4 +19,7 @@ target_include_directories(${geospatial_target} ${GDAL_INCLUDE_DIR}) ign_build_tests(TYPE UNIT SOURCES ${gtest_sources} - LIB_DEPS ${geospatial_target}) + LIB_DEPS + ${geospatial_target} + ignition-common${IGN_COMMON_VER}-testing +) diff --git a/geospatial/src/Dem_TEST.cc b/geospatial/src/Dem_TEST.cc index 95174f8c0..6ab69cdaa 100644 --- a/geospatial/src/Dem_TEST.cc +++ b/geospatial/src/Dem_TEST.cc @@ -21,7 +21,9 @@ #include <ignition/math/Vector3.hh> #include "ignition/common/geospatial/Dem.hh" -#include "test_config.h" + +#include "ignition/common/testing/AutoLogFixture.hh" +#include "ignition/common/testing/TestPaths.hh" using namespace ignition; diff --git a/geospatial/src/ImageHeightmap_TEST.cc b/geospatial/src/ImageHeightmap_TEST.cc index 53ce7a9f7..ab14d197b 100644 --- a/geospatial/src/ImageHeightmap_TEST.cc +++ b/geospatial/src/ImageHeightmap_TEST.cc @@ -17,7 +17,9 @@ #include <gtest/gtest.h> #include "ignition/common/geospatial/ImageHeightmap.hh" -#include "test_config.h" + +#include "ignition/common/testing/AutoLogFixture.hh" +#include "ignition/common/testing/TestPaths.hh" #define ELEVATION_TOL 1e-8 diff --git a/graphics/src/Animation_TEST.cc b/graphics/src/Animation_TEST.cc index 58513b4b1..216bb43c8 100644 --- a/graphics/src/Animation_TEST.cc +++ b/graphics/src/Animation_TEST.cc @@ -17,13 +17,13 @@ #include <gtest/gtest.h> -#include "test_config.h" - #include <ignition/math/Vector3.hh> #include <ignition/math/Quaternion.hh> #include <ignition/common/KeyFrame.hh> #include <ignition/common/Animation.hh> +#include "ignition/common/testing/AutoLogFixture.hh" + using namespace ignition; class AnimationTest : public common::testing::AutoLogFixture { }; diff --git a/graphics/src/CMakeLists.txt b/graphics/src/CMakeLists.txt index 461c993a2..85e5b19a5 100644 --- a/graphics/src/CMakeLists.txt +++ b/graphics/src/CMakeLists.txt @@ -20,8 +20,13 @@ target_link_libraries(${graphics_target} GTS::GTS FreeImage::FreeImage) -ign_build_tests(TYPE UNIT SOURCES ${gtest_sources} - LIB_DEPS ${graphics_target}) +ign_build_tests( + TYPE UNIT + SOURCES ${gtest_sources} + LIB_DEPS + ${graphics_target} + ignition-common${IGN_COMMON_VER}-testing +) if(USE_EXTERNAL_TINYXML2) diff --git a/graphics/src/ColladaExporter_TEST.cc b/graphics/src/ColladaExporter_TEST.cc index b82f29831..d71e403a8 100644 --- a/graphics/src/ColladaExporter_TEST.cc +++ b/graphics/src/ColladaExporter_TEST.cc @@ -17,13 +17,15 @@ #include <gtest/gtest.h> #include "tinyxml2.h" -#include "test_config.h" #include "ignition/common/ColladaLoader.hh" #include "ignition/common/ColladaExporter.hh" #include "ignition/common/Filesystem.hh" #include "ignition/common/Mesh.hh" #include "ignition/common/SubMesh.hh" +#include "ignition/common/testing/AutoLogFixture.hh" +#include "ignition/common/testing/TestPaths.hh" + #ifdef _WIN32 #define snprintf _snprintf #endif @@ -36,7 +38,7 @@ class ColladaExporter : public common::testing::AutoLogFixture { { // Call superclass to make sure that logging is initialized this->common::testing::AutoLogFixture::SetUp(); - ASSERT_TRUE(common::testing::TestTmpPath(this->pathOut)); + this->pathOut = common::testing::TempPath(); common::createDirectories(this->pathOut); } diff --git a/graphics/src/ColladaLoader_TEST.cc b/graphics/src/ColladaLoader_TEST.cc index 9f6103ccc..ee8eee0bb 100644 --- a/graphics/src/ColladaLoader_TEST.cc +++ b/graphics/src/ColladaLoader_TEST.cc @@ -16,7 +16,6 @@ */ #include <gtest/gtest.h> -#include "test_config.h" #include "ignition/common/Mesh.hh" #include "ignition/common/SubMesh.hh" #include "ignition/common/Material.hh" @@ -24,6 +23,9 @@ #include "ignition/common/Skeleton.hh" #include "ignition/common/SkeletonAnimation.hh" +#include "ignition/common/testing/AutoLogFixture.hh" +#include "ignition/common/testing/TestPaths.hh" + using namespace ignition; class ColladaLoader : public common::testing::AutoLogFixture { }; diff --git a/graphics/src/GTSMeshUtils_TEST.cc b/graphics/src/GTSMeshUtils_TEST.cc index d082e33e8..31c9114d2 100644 --- a/graphics/src/GTSMeshUtils_TEST.cc +++ b/graphics/src/GTSMeshUtils_TEST.cc @@ -18,11 +18,12 @@ #include <gtest/gtest.h> #include <memory> -#include "test_config.h" #include "ignition/common/GTSMeshUtils.hh" #include "ignition/common/Mesh.hh" #include "ignition/common/SubMesh.hh" +#include "ignition/common/testing/AutoLogFixture.hh" + using namespace ignition; class GTSMeshUtils : public common::testing::AutoLogFixture { }; diff --git a/graphics/src/Image_TEST.cc b/graphics/src/Image_TEST.cc index 0e27a48fe..8efe14b8d 100644 --- a/graphics/src/Image_TEST.cc +++ b/graphics/src/Image_TEST.cc @@ -18,7 +18,9 @@ #include <gtest/gtest.h> #include <ignition/common/Image.hh> -#include "test_config.h" + +#include "ignition/common/testing/AutoLogFixture.hh" +#include "ignition/common/testing/TestPaths.hh" using namespace ignition; diff --git a/graphics/src/Material_TEST.cc b/graphics/src/Material_TEST.cc index dc1c24a74..3b9df9a63 100644 --- a/graphics/src/Material_TEST.cc +++ b/graphics/src/Material_TEST.cc @@ -16,10 +16,12 @@ #include <gtest/gtest.h> -#include "test_config.h" #include "ignition/common/Material.hh" #include "ignition/common/Pbr.hh" +#include "ignition/common/testing/AutoLogFixture.hh" +#include "ignition/common/testing/TestPaths.hh" + using namespace ignition; class MaterialTest : public common::testing::AutoLogFixture { }; diff --git a/graphics/src/MeshManager_TEST.cc b/graphics/src/MeshManager_TEST.cc index 35b1d6413..5fe50d929 100644 --- a/graphics/src/MeshManager_TEST.cc +++ b/graphics/src/MeshManager_TEST.cc @@ -17,12 +17,13 @@ #include <gtest/gtest.h> -#include "test_config.h" #include "ignition/common/Mesh.hh" #include "ignition/common/SubMesh.hh" #include "ignition/common/MeshManager.hh" #include "ignition/common/config.hh" +#include "ignition/common/testing/AutoLogFixture.hh" + using namespace ignition; #ifndef _WIN32 diff --git a/graphics/src/Mesh_TEST.cc b/graphics/src/Mesh_TEST.cc index 9e246207a..06f46a15f 100644 --- a/graphics/src/Mesh_TEST.cc +++ b/graphics/src/Mesh_TEST.cc @@ -17,13 +17,14 @@ #include <gtest/gtest.h> -#include "test_config.h" #include "ignition/common/Material.hh" #include "ignition/common/Mesh.hh" #include "ignition/common/Skeleton.hh" #include "ignition/common/SubMesh.hh" #include "ignition/math/Vector3.hh" +#include "ignition/common/testing/AutoLogFixture.hh" + using namespace ignition; class MeshTest : public common::testing::AutoLogFixture { }; diff --git a/graphics/src/OBJLoader_TEST.cc b/graphics/src/OBJLoader_TEST.cc index 4fce91465..eb2dd52bf 100644 --- a/graphics/src/OBJLoader_TEST.cc +++ b/graphics/src/OBJLoader_TEST.cc @@ -16,12 +16,14 @@ */ #include <gtest/gtest.h> -#include "test_config.h" #include "ignition/common/Mesh.hh" #include "ignition/common/SubMesh.hh" #include "ignition/common/Material.hh" #include "ignition/common/OBJLoader.hh" +#include "ignition/common/testing/AutoLogFixture.hh" +#include "ignition/common/testing/TestPaths.hh" + using namespace ignition; class OBJLoaderTest : public common::testing::AutoLogFixture { }; diff --git a/graphics/src/SVGLoader_TEST.cc b/graphics/src/SVGLoader_TEST.cc index 189881cad..aa2ed934c 100644 --- a/graphics/src/SVGLoader_TEST.cc +++ b/graphics/src/SVGLoader_TEST.cc @@ -17,10 +17,11 @@ #include <gtest/gtest.h> -#include "test_config.h" - #include "ignition/common/SVGLoader.hh" +#include "ignition/common/testing/AutoLogFixture.hh" +#include "ignition/common/testing/TestPaths.hh" + using namespace ignition; using namespace common; @@ -36,7 +37,9 @@ double tol = 0.05; /// \brief return path to svg file in test/data/svg std::string testSvg(const std::string &_filename) { - return common::testing::TestFile("data", "svg", _filename); + std::string file = common::testing::TestFile("data", "svg", _filename); + EXPECT_TRUE(exists(file)); + return file; } ///////////////////////////////////////////////// diff --git a/graphics/src/SubMesh_TEST.cc b/graphics/src/SubMesh_TEST.cc index 9f3604e9c..951fb9cba 100644 --- a/graphics/src/SubMesh_TEST.cc +++ b/graphics/src/SubMesh_TEST.cc @@ -17,12 +17,13 @@ #include <gtest/gtest.h> -#include "test_config.h" #include "ignition/math/Vector3.hh" #include "ignition/common/Mesh.hh" #include "ignition/common/SubMesh.hh" #include "ignition/common/MeshManager.hh" +#include "ignition/common/testing/AutoLogFixture.hh" + using namespace ignition; class SubMeshTest : public common::testing::AutoLogFixture { }; diff --git a/profiler/src/CMakeLists.txt b/profiler/src/CMakeLists.txt index 239611b6d..3874cb0fb 100644 --- a/profiler/src/CMakeLists.txt +++ b/profiler/src/CMakeLists.txt @@ -79,8 +79,12 @@ if(IGN_PROFILER_REMOTERY) endif() endif() -ign_build_tests(TYPE UNIT SOURCES ${PROFILER_TESTS} - LIB_DEPS ${profiler_target} +ign_build_tests( + TYPE UNIT + SOURCES ${PROFILER_TESTS} + LIB_DEPS + ${profiler_target} + ignition-common${IGN_COMMON_VER}-testing TEST_LIST profiler_tests) if(TARGET UNIT_Profiler_Remotery_TEST) diff --git a/src/Base64_TEST.cc b/src/Base64_TEST.cc index b27046f99..214bcd356 100644 --- a/src/Base64_TEST.cc +++ b/src/Base64_TEST.cc @@ -18,7 +18,7 @@ #include <string> #include <ignition/common/Base64.hh> -#include "test_config.h" +#include "ignition/common/testing/AutoLogFixture.hh" using namespace ignition; diff --git a/src/Battery_TEST.cc b/src/Battery_TEST.cc index 30b9e9b9c..718f89b3e 100644 --- a/src/Battery_TEST.cc +++ b/src/Battery_TEST.cc @@ -14,9 +14,12 @@ * limitations under the License. * */ +#include <gtest/gtest.h> + #include <memory> + #include "ignition/common/Battery.hh" -#include "test_config.h" +#include "ignition/common/testing/AutoLogFixture.hh" using namespace ignition; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 81d70c5ef..ba3999469 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -48,13 +48,12 @@ endif() ign_build_tests( TYPE UNIT SOURCES ${gtest_sources} + LIB_DEPS + ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER} + ignition-common${IGN_COMMON_VER}-testing INCLUDE_DIRS # Used to make internal source file headers visible to the unit tests - ${CMAKE_CURRENT_SOURCE_DIR} - # Used to make test-directory headers visible to the unit tests - ${PROJECT_SOURCE_DIR} - # Used to make test_config.h visible to the unit tests - ${PROJECT_BINARY_DIR}) + ${CMAKE_CURRENT_SOURCE_DIR}) if(TARGET UNIT_MovingWindowFilter_TEST) target_include_directories(UNIT_MovingWindowFilter_TEST PRIVATE diff --git a/src/Console_TEST.cc b/src/Console_TEST.cc index e85a4b84b..d00e93eaa 100644 --- a/src/Console_TEST.cc +++ b/src/Console_TEST.cc @@ -20,10 +20,9 @@ #include "ignition/common/Console.hh" #include "ignition/common/Filesystem.hh" +#include "ignition/common/TempDirectory.hh" #include "ignition/common/Util.hh" -#include "test_config.h" - using namespace ignition; using namespace ignition::common; diff --git a/src/EnumIface_TEST.cc b/src/EnumIface_TEST.cc index 90e68d5f7..b5287736d 100644 --- a/src/EnumIface_TEST.cc +++ b/src/EnumIface_TEST.cc @@ -18,7 +18,8 @@ #include <gtest/gtest.h> #include "ignition/common/EnumIface.hh" -#include "test_config.h" + +#include "ignition/common/testing/AutoLogFixture.hh" using namespace ignition; diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index 22e9fc1f9..2b0eb13c2 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -24,6 +24,8 @@ #include <ignition/common/TempDirectory.hh> #include <ignition/common/Util.hh> +#include <ignition/common/testing/Utils.hh> + #include <filesystem> #include <fstream> @@ -46,20 +48,6 @@ class TestTempDirectory : public TempDirectory } }; -///////////////////////////////////////////////// -bool create_new_empty_file(const std::string &_filename) -{ - try - { - std::fstream fs(_filename, std::ios::out); - } - catch(...) - { - return false; - } - return true; -} - ///////////////////////////////////////////////// bool create_new_file_symlink(const std::string &_symlink, const std::string &_target) @@ -218,12 +206,12 @@ TEST_F(FilesystemTest, moreFileOps) ///////////////////////////////////////////////// TEST_F(FilesystemTest, exists) { - ASSERT_TRUE(create_new_empty_file("newfile")); + ASSERT_TRUE(common::testing::createNewEmptyFile("newfile")); ASSERT_TRUE(createDirectory("fstestexists")); const auto &relativeSubdir = joinPaths("fstestexists", "newfile2"); const auto &absoluteSubdir = joinPaths(cwd(), relativeSubdir); - ASSERT_TRUE(create_new_empty_file(relativeSubdir)); + ASSERT_TRUE(common::testing::createNewEmptyFile(relativeSubdir)); EXPECT_TRUE(exists("fstestexists")); EXPECT_TRUE(isDirectory("fstestexists")); @@ -273,7 +261,7 @@ TEST_F(FilesystemTest, symlink_exists) // 3. symbolic link to existing directory // 4. symbolic link to non-existent directory // 5. hard link to existing file - ASSERT_TRUE(create_new_empty_file("newfile")); + ASSERT_TRUE(common::testing::createNewEmptyFile("newfile")); ASSERT_TRUE(createDirectory("newdir")); // Case 1 @@ -483,7 +471,7 @@ TEST_F(FilesystemTest, decomposition) ///////////////////////////////////////////////// TEST_F(FilesystemTest, directory_iterator) { - ASSERT_TRUE(create_new_empty_file("newfile")); + ASSERT_TRUE(common::testing::createNewEmptyFile("newfile")); ASSERT_TRUE(createDirectory("newdir")); #ifdef BUILD_SYMLINK_TESTS ASSERT_TRUE(create_new_file_symlink("symlink-file", "newfile")); @@ -589,7 +577,7 @@ TEST_F(FilesystemTest, copyDirectories) std::string subFile = joinPaths(subDir, "sub_file"); EXPECT_FALSE(exists(subFile)); - EXPECT_TRUE(create_new_empty_file(subFile)); + EXPECT_TRUE(common::testing::createNewEmptyFile(subFile)); EXPECT_TRUE(exists(subFile)); std::string recDirCopied = "rec_dir_copied"; @@ -627,12 +615,12 @@ TEST_F(FilesystemTest, uniquePaths) std::string fileRt = uniqueFilePath(newFile, "txt"); EXPECT_EQ(newFileWithExt, fileRt); - ASSERT_TRUE(create_new_empty_file(newFileWithExt)); + ASSERT_TRUE(common::testing::createNewEmptyFile(newFileWithExt)); EXPECT_TRUE(exists(newFileWithExt)); std::string fileExistingRt = uniqueFilePath(newFile, "txt"); EXPECT_EQ(fileExistingRt, newFile + "(1).txt"); - ASSERT_TRUE(create_new_empty_file(fileExistingRt)); + ASSERT_TRUE(common::testing::createNewEmptyFile(fileExistingRt)); EXPECT_TRUE(exists(fileExistingRt)); std::string fileExistingRt2 = uniqueFilePath(newFile, "txt"); EXPECT_EQ(fileExistingRt2, newFile + "(2).txt"); diff --git a/src/MaterialDensity_TEST.cc b/src/MaterialDensity_TEST.cc index 55b0f5d43..b364e3a67 100644 --- a/src/MaterialDensity_TEST.cc +++ b/src/MaterialDensity_TEST.cc @@ -14,10 +14,10 @@ * limitations under the License. * */ - #include <gtest/gtest.h> + #include "ignition/common/MaterialDensity.hh" -#include "test_config.h" +#include "ignition/common/testing/AutoLogFixture.hh" using namespace ignition; using namespace common; diff --git a/src/PluginLoader_TEST.cc b/src/PluginLoader_TEST.cc index dc11d198c..913a81451 100644 --- a/src/PluginLoader_TEST.cc +++ b/src/PluginLoader_TEST.cc @@ -18,15 +18,23 @@ #include <gtest/gtest.h> #include <algorithm> +#include <fstream> + +#include "ignition/common/config.hh" #include "ignition/common/PluginLoader.hh" #include "ignition/common/SystemPaths.hh" +#include "ignition/common/TempDirectory.hh" -#include "ignition/common/config.hh" -#include "test_config.h" +#include "ignition/common/testing/Utils.hh" -#ifndef IGN_COMMON_LIB_PATH -#define IGN_COMMON_LIB_PATH "./ign_common" -#endif +///////////////////////////////////////////////// +class TestTempDirectory : public ignition::common::TempDirectory +{ + public: TestTempDirectory(): + ignition::common::TempDirectory("plugin_loader", "ign_common", true) + { + } +}; ///////////////////////////////////////////////// TEST(PluginLoader, InitialNoInterfacesImplemented) @@ -45,20 +53,33 @@ TEST(PluginLoader, LoadNonexistantLibrary) ///////////////////////////////////////////////// TEST(PluginLoader, LoadNonLibrary) { - std::string projectPath(IGN_COMMON_LIB_PATH); + TestTempDirectory tempDir; + ignition::common::testing::createNewEmptyFile("not_a_library.txt"); + ignition::common::PluginLoader pm; - EXPECT_TRUE(pm.LoadLibrary(projectPath + "/test_config.h").empty()); + EXPECT_TRUE(pm.LoadLibrary("not_a_library.txt").empty()); } ///////////////////////////////////////////////// TEST(PluginLoader, LoadNonPluginLibrary) { - std::string libraryName("ignition-common"); - libraryName += std::to_string(IGNITION_COMMON_MAJOR_VERSION); + std::string libDir = "lib_dir"; + std::string libName = "foobar"; + + TestTempDirectory tempDir; + ignition::common::createDirectory(libDir); + ignition::common::testing::createNewEmptyFile( + ignition::common::joinPaths(libDir, "lib" + libName + ".so")); ignition::common::SystemPaths sp; - sp.AddPluginPaths(IGN_COMMON_LIB_PATH); - std::string path = sp.FindSharedLibrary(libraryName); + + // Fails without plugin dirs setup + std::string path = sp.FindSharedLibrary("foo"); + ASSERT_TRUE(path.empty()); + + sp.AddPluginPaths( + ignition::common::joinPaths(ignition::common::cwd(), libDir)); + path = sp.FindSharedLibrary(libName); ASSERT_FALSE(path.empty()); ignition::common::PluginLoader pm; diff --git a/src/Util_TEST.cc b/src/Util_TEST.cc index 15cf1c864..407a40cc2 100644 --- a/src/Util_TEST.cc +++ b/src/Util_TEST.cc @@ -14,13 +14,13 @@ * limitations under the License. * */ +#include <gtest/gtest.h> +#include <fstream> #include <stdlib.h> -#include <gtest/gtest.h> #include <string> #include <ignition/common/Util.hh> -#include "test_config.h" using namespace ignition; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ff32b05f3..307dcf48f 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -17,5 +17,3 @@ add_subdirectory(performance) add_subdirectory(regression) add_subdirectory(plugins) add_subdirectory(static_assertions) - -configure_file(test_config.h.in ${PROJECT_BINARY_DIR}/test_config.h) diff --git a/test/integration/CMakeLists.txt b/test/integration/CMakeLists.txt index 1aa52c366..a699fb6d6 100644 --- a/test/integration/CMakeLists.txt +++ b/test/integration/CMakeLists.txt @@ -1,11 +1,5 @@ -# This is to make test_config.h visible -include_directories("${CMAKE_BINARY_DIR}") - ign_get_sources(tests) -# FIXME the mesh test does not work -list(REMOVE_ITEM tests mesh.cc) - if (SKIP_av OR INTERNAL_SKIP_av) list(REMOVE_ITEM tests encoder_timing.cc) list(REMOVE_ITEM tests video_encoder.cc) @@ -14,6 +8,7 @@ endif() ign_build_tests( TYPE INTEGRATION SOURCES ${tests} + LIB_DEPS ignition-common${IGN_COMMON_VER}-testing ) if(TARGET INTEGRATION_plugin) @@ -23,6 +18,10 @@ if(TARGET INTEGRATION_plugin) add_dependencies(INTEGRATION_plugin IGNDummyPlugins) endif() +if(TARGET INTEGRATION_mesh) + target_link_libraries(INTEGRATION_mesh ${PROJECT_LIBRARY_TARGET_NAME}-graphics) +endif() + if(TARGET INTEGRATION_encoder_timing) target_link_libraries(INTEGRATION_encoder_timing ${PROJECT_LIBRARY_TARGET_NAME}-av) endif() diff --git a/test/integration/console.cc b/test/integration/console.cc index 267e0020f..e3f7c2313 100644 --- a/test/integration/console.cc +++ b/test/integration/console.cc @@ -17,32 +17,54 @@ #include <gtest/gtest.h> -#include "ignition/common/Console.hh" -#include "test_config.h" - -using namespace ignition; +#include <ignition/common/Console.hh> +#include <ignition/common/testing/TestPaths.hh> +////////////////////////////////////////////////// TEST(Console_TEST, LogInitAfterConsoleOut) { std::string logFilename = "uri.log"; - std::string logDir = common::joinPaths(PROJECT_BINARY_PATH, "test", "uri"); - std::string logFile = common::joinPaths(logDir, logFilename); + auto tempDir = ignition::common::testing::MakeTestTempDirectory(); + ASSERT_TRUE(tempDir->Valid()); + + ignition::common::setenv(IGN_HOMEDIR, tempDir->Path()); + std::string home; + ASSERT_TRUE(ignition::common::env(IGN_HOMEDIR, home)); + + auto logDir = tempDir->Path(); + std::string logFile = ignition::common::joinPaths(logDir, logFilename); + + ignition::common::Console::SetVerbosity(4); - common::Console::SetVerbosity(4); + // Before console is initialized, logs go to default file location + ignerr << "Error before logging initialized" << std::endl; - // We are not logging to a file yet. - ignerr << "This is an error" << std::endl; + { + auto defaultPath = ignition::common::joinPaths(home, + ".ignition", "auto_default.log"); + + std::ifstream t(defaultPath); + std::string buffer((std::istreambuf_iterator<char>(t)), + std::istreambuf_iterator<char>()); + + EXPECT_NE( + std::string::npos, buffer.find("Error before logging initialized")) + << "Log file content[" << buffer << "]\n"; + } // Initialize the log file. ignLogInit(logDir, logFilename); - // Run the same console output, which should output the message to the log - // file. - ignerr << "This is an error" << std::endl; - std::ifstream t(logFile); - std::string buffer((std::istreambuf_iterator<char>(t)), - std::istreambuf_iterator<char>()); + // After consolie is initialized, logs go to designated location + ignerr << "Error after logging initialized" << std::endl; + + { + std::ifstream t(logFile); + std::string buffer((std::istreambuf_iterator<char>(t)), + std::istreambuf_iterator<char>()); - EXPECT_TRUE(buffer.find("This is an error") != std::string::npos) - << "Log file content[" << buffer << "]\n"; + EXPECT_NE( + std::string::npos, buffer.find("Error after logging initialized")) + << "Log file content[" << buffer << "]\n"; + } } diff --git a/test/integration/encoder_timing.cc b/test/integration/encoder_timing.cc index dfef1147f..13cc11461 100644 --- a/test/integration/encoder_timing.cc +++ b/test/integration/encoder_timing.cc @@ -17,7 +17,6 @@ #include <array> #include "ignition/common/VideoEncoder.hh" #include "ignition/common/Video.hh" -#include "test_config.h" using namespace ignition; using namespace common; diff --git a/test/integration/mesh.cc b/test/integration/mesh.cc index ff4eaecf4..2db604f00 100644 --- a/test/integration/mesh.cc +++ b/test/integration/mesh.cc @@ -17,8 +17,6 @@ #include <gtest/gtest.h> -#include "test_config.h" -#include "ignition/common/ColladaLoader.hh" #include "ignition/common/Material.hh" #include "ignition/common/Mesh.hh" #include "ignition/common/Skeleton.hh" @@ -27,119 +25,131 @@ #include "ignition/common/SystemPaths.hh" #include "ignition/math/Vector3.hh" +#include <ignition/common/testing/AutoLogFixture.hh> +#include <ignition/common/testing/TestPaths.hh> + using namespace ignition; -using TestFile = common::testing::TestFile; class MeshTest : public common::testing::AutoLogFixture { }; -char asciiSTLBox[] = -"solid MYSOLID\n" + -" facet normal 0.0 0.0 -1.0\n" + -" outer loop\n" + -" vertex 0.0 0.0 0.0\n" -" vertex 1.0 1.0 0.0\n" + -" vertex 1.0 0.0 0.0\n" + -" endloop\n" + -" endfacet\n" + -" facet normal 0.0 0.0 -1.0\n" + -" outer loop\n" + -" vertex 0.0 0.0 0.0\n" + -" vertex 0.0 1.0 0.0\n" + -" vertex 1.0 1.0 0.0\n" + -" endloop\n" + -" endfacet\n" + -" facet normal -1.0 0.0 0.0\n" + -" outer loop\n" + -" vertex 0.0 0.0 0.0\n" + -" vertex 0.0 1.0 1.0\n" + -" vertex 0.0 1.0 0.0\n" + -" endloop\n" + -" endfacet\n" + -" facet normal -1.0 0.0 0.0\n" + -" outer loop\n" + -" vertex 0.0 0.0 0.0\n" + -" vertex 0.0 0.0 1.0\n" + -" vertex 0.0 1.0 1.0\n" + -" endloop\n" + -" endfacet\n" + -" facet normal 0.0 1.0 0.0\n" + -" outer loop\n" + -" vertex 0.0 1.0 0.0\n" + -" vertex 1.0 1.0 1.0\n" + -" vertex 1.0 1.0 0.0\n" + -" endloop\n" + -" endfacet\n" + -" facet normal 0.0 1.0 0.0\n" + -" outer loop\n" + -" vertex 0.0 1.0 0.0\n" + -" vertex 0.0 1.0 1.0\n" + -" vertex 1.0 1.0 1.0\n" + -" endloop\n" + -" endfacet\n" + -" facet normal 1.0 0.0 0.0\n" + -" outer loop\n" + -" vertex 1.0 0.0 0.0\n" + -" vertex 1.0 1.0 0.0\n" + -" vertex 1.0 1.0 1.0\n" + -" endloop\n" + -" endfacet\n" + -" facet normal 1.0 0.0 0.0\n" + -" outer loop\n" + -" vertex 1.0 0.0 0.0\n" + -" vertex 1.0 1.0 1.0\n" + -" vertex 1.0 0.0 1.0\n" + -" endloop\n" + -" endfacet\n" + -" facet normal 0.0 -1.0 0.0\n" + -" outer loop\n" + -" vertex 0.0 0.0 0.0\n" + -" vertex 1.0 0.0 0.0\n" + -" vertex 1.0 0.0 1.0\n" + -" endloop\n" + -" endfacet\n" + -" facet normal 0.0 -1.0 0.0\n" + -" outer loop\n" + -" vertex 0.0 0.0 0.0\n" + -" vertex 1.0 0.0 1.0\n" + -" vertex 0.0 0.0 1.0\n" + -" endloop\n" + -" endfacet\n" + -" facet normal 0.0 0.0 1.0\n" + -" outer loop\n" + -" vertex 0.0 0.0 1.0\n" + -" vertex 1.0 0.0 1.0\n" + -" vertex 1.0 1.0 1.0\n" + -" endloop\n" + -" endfacet\n" + -" facet normal 0.0 0.0 1.0\n" + -" outer loop\n" + -" vertex 0.0 0.0 1.0\n" + -" vertex 1.0 1.0 1.0\n" + -" vertex 0.0 1.0 1.0\n" + -" endloop\n" + -" endfacet\n" + -"endsolid MYSOLID"; +constexpr const char asciiSTLBox[] = +R"(solid MYSOLID + facet normal 0.0 0.0 -1.0 + outer loop + vertex 0.0 0.0 0.0 + vertex 1.0 1.0 0.0 + vertex 1.0 0.0 0.0 + endloop + endfacet + facet normal 0.0 0.0 -1.0 + outer loop + vertex 0.0 0.0 0.0 + vertex 0.0 1.0 0.0 + vertex 1.0 1.0 0.0 + endloop + endfacet + facet normal -1.0 0.0 0.0 + outer loop + vertex 0.0 0.0 0.0 + vertex 0.0 1.0 1.0 + vertex 0.0 1.0 0.0 + endloop + endfacet + facet normal -1.0 0.0 0.0 + outer loop + vertex 0.0 0.0 0.0 + vertex 0.0 0.0 1.0 + vertex 0.0 1.0 1.0 + endloop + endfacet + facet normal 0.0 1.0 0.0 + outer loop + vertex 0.0 1.0 0.0 + vertex 1.0 1.0 1.0 + vertex 1.0 1.0 0.0 + endloop + endfacet + facet normal 0.0 1.0 0.0 + outer loop + vertex 0.0 1.0 0.0 + vertex 0.0 1.0 1.0 + vertex 1.0 1.0 1.0 + endloop + endfacet + facet normal 1.0 0.0 0.0 + outer loop + vertex 1.0 0.0 0.0 + vertex 1.0 1.0 0.0 + vertex 1.0 1.0 1.0 + endloop + endfacet + facet normal 1.0 0.0 0.0 + outer loop + vertex 1.0 0.0 0.0 + vertex 1.0 1.0 1.0 + vertex 1.0 0.0 1.0 + endloop + endfacet + facet normal 0.0 -1.0 0.0 + outer loop + vertex 0.0 0.0 0.0 + vertex 1.0 0.0 0.0 + vertex 1.0 0.0 1.0 + endloop + endfacet + facet normal 0.0 -1.0 0.0 + outer loop + vertex 0.0 0.0 0.0 + vertex 1.0 0.0 1.0 + vertex 0.0 0.0 1.0 + endloop + endfacet + facet normal 0.0 0.0 1.0 + outer loop + vertex 0.0 0.0 1.0 + vertex 1.0 0.0 1.0 + vertex 1.0 1.0 1.0 + endloop + endfacet + facet normal 0.0 0.0 1.0 + outer loop + vertex 0.0 0.0 1.0 + vertex 1.0 1.0 1.0 + vertex 0.0 1.0 1.0 + endloop + endfacet +endsolid MYSOLID)"; ///////////////////////////////////////////////// -TEST_F(MeshTest, Mesh) +TEST_F(MeshTest, Load) { - // Cleanup test directory. - common::SystemPaths *paths = common::SystemPaths::Instance(); - ignition::common::removeAll(paths->DefaultTestPath()); - ignition::common::createDirectories(paths->DefaultTestPath()); - - EXPECT_EQ(NULL, common::MeshManager::Instance()->Load("break.mesh")); - EXPECT_EQ(NULL, common::MeshManager::Instance()->Load("break.3ds")); - EXPECT_EQ(NULL, common::MeshManager::Instance()->Load("break.xml")); - - const common::Mesh *mesh = - common::MeshManager::Instance()->Mesh("unit_box"); - EXPECT_EQ(static_cast<unsigned int>(24), mesh->VertexCount()); - EXPECT_EQ(static_cast<unsigned int>(24), mesh->NormalCount()); - EXPECT_EQ(static_cast<unsigned int>(36), mesh->IndexCount()); - EXPECT_EQ(static_cast<unsigned int>(24), mesh->TexCoordCount()); - EXPECT_EQ(static_cast<unsigned int>(0), mesh->MaterialCount()); + // Load things that we know are invalid extensions + EXPECT_EQ(nullptr, common::MeshManager::Instance()->Load("break.mesh")); + EXPECT_EQ(nullptr, common::MeshManager::Instance()->Load("break.3ds")); + EXPECT_EQ(nullptr, common::MeshManager::Instance()->Load("break.xml")); + + common::systemPaths()->AddFilePaths(common::testing::TestFile("data")); + + // Loading should be successful + EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.dae")); + EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.obj")); + + // Reloading should not cause errors + EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.dae")); + EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.obj")); +} + +///////////////////////////////////////////////// +TEST_F(MeshTest, Access) +{ + auto mesh = common::MeshManager::Instance()->MeshByName("unit_box"); + ASSERT_NE(nullptr, mesh); + EXPECT_EQ(24u, mesh->VertexCount()); + EXPECT_EQ(24u, mesh->NormalCount()); + EXPECT_EQ(36u, mesh->IndexCount()); + EXPECT_EQ(24u, mesh->TexCoordCount()); + EXPECT_EQ(0u, mesh->MaterialCount()); ignition::math::Vector3d center, min, max; mesh->AABB(center, min, max); @@ -147,8 +157,8 @@ TEST_F(MeshTest, Mesh) EXPECT_TRUE(min == ignition::math::Vector3d(-.5, -.5, -.5)); EXPECT_TRUE(max == ignition::math::Vector3d(.5, .5, .5)); - float *vertArray = NULL; - int *indArray = NULL; + double *vertArray = nullptr; + int *indArray = nullptr; mesh->FillArrays(&vertArray, &indArray); int i = 0; @@ -184,115 +194,58 @@ TEST_F(MeshTest, Mesh) EXPECT_FLOAT_EQ(.5, vertArray[i++]); EXPECT_FLOAT_EQ(-.5, vertArray[i++]); - common::Mesh *newMesh = new common::Mesh(); - newMesh->SetName("testBox"); - common::SubMesh *subMesh = new common::SubMesh(); - newMesh->AddSubMesh(subMesh); - - std::vector<ignition::math::Vector3d> verts; - std::vector<ignition::math::Vector3d> norms; - - EXPECT_THROW(mesh->SubMesh(1), common::Exception); - - for (i = 0; i < 24; ++i) - { - verts.push_back(mesh->SubMesh(0)->Vertex(i)); - norms.push_back(mesh->SubMesh(0)->Normal(i)); - } - - subMesh->CopyVertices(verts); - subMesh->CopyNormals(norms); - EXPECT_TRUE(subMesh->HasVertex(ignition::math::Vector3d(-.5, -.5, -.5))); - EXPECT_FALSE(subMesh->HasVertex(ignition::math::Vector3d(0, 0, 0))); - - newMesh->AABB(center, min, max); - EXPECT_TRUE(center == ignition::math::Vector3d(0, 0, 0)); - EXPECT_TRUE(min == ignition::math::Vector3d(-.5, -.5, -.5)); - EXPECT_TRUE(max == ignition::math::Vector3d(.5, .5, .5)); - - subMesh->SetVertexCount(1); - subMesh->SetIndexCount(1); - subMesh->SetNormalCount(1); - subMesh->SetTexCoordCount(1); - - EXPECT_EQ(static_cast<unsigned int>(1), subMesh->VertexCount()); - EXPECT_EQ(static_cast<unsigned int>(1), subMesh->IndexCount()); - EXPECT_EQ(static_cast<unsigned int>(1), subMesh->NormalCount()); - EXPECT_EQ(static_cast<unsigned int>(1), subMesh->TexCoordCount()); + delete vertArray; + delete indArray; - subMesh->SetVertex(0, ignition::math::Vector3d(1, 2, 3)); - EXPECT_TRUE(subMesh->Vertex(0) == ignition::math::Vector3d(1, 2, 3)); + EXPECT_FALSE(common::MeshManager::Instance()->HasMesh("")); + EXPECT_TRUE(common::MeshManager::Instance()->HasMesh("unit_box")); - subMesh->SetTexCoord(0, ignition::math::Vector2d(.1, .2)); - EXPECT_TRUE(subMesh->TexCoord(0) == ignition::math::Vector2d(.1, .2)); - - newMesh->GenSphericalTexCoord(ignition::math::Vector3d(0, 0, 0)); - delete newMesh; + mesh = common::MeshManager::Instance()->MeshByName("foo_box_doesnt_exist"); + EXPECT_EQ(nullptr, mesh); + EXPECT_FALSE( + common::MeshManager::Instance()->RemoveMesh("foo_box_doesnt_exist")); + EXPECT_TRUE(common::MeshManager::Instance()->RemoveMesh("unit_box")); +} - std::ofstream stlFile((paths->DefaultTestPath() + - "/ignition_stl_test.stl").c_str(), std::ios::out); +///////////////////////////////////////////////// +TEST_F(MeshTest, RoundtripStl) +{ + std::ofstream stlFile("ignition_stl_test.stl", std::ios::out); stlFile << asciiSTLBox; stlFile.close(); - mesh = common::MeshManager::Instance()->Load( - paths->DefaultTestPath() + "/ignition_stl_test-bad.stl"); - EXPECT_EQ(NULL, mesh); + auto mesh = + common::MeshManager::Instance()->Load("ignition_stl_test-bad.stl"); + EXPECT_EQ(nullptr, mesh); + + common::systemPaths()->AddFilePaths(common::cwd()); + mesh = common::MeshManager::Instance()->Load("ignition_stl_test.stl"); + ASSERT_NE(nullptr, mesh); - mesh = common::MeshManager::Instance()->Load( - paths->DefaultTestPath() + "/ignition_stl_test.stl"); + math::Vector3d center, min, max; mesh->AABB(center, min, max); EXPECT_TRUE(center == ignition::math::Vector3d(0.5, 0.5, 0.5)); EXPECT_TRUE(min == ignition::math::Vector3d(0, 0, 0)); EXPECT_TRUE(max == ignition::math::Vector3d(1, 1, 1)); - - // Cleanup test directory. - igntion::common::removeAll(paths->DefaultTestPath()); } ///////////////////////////////////////////////// -// Test centering a submesh. -TEST_F(MeshTest, MeshMove) +TEST_F(MeshTest, Export) { - common::ColladaLoader loader; - common::Mesh *mesh = loader.Load(TestFile("data", "box_offset.dae")); - - // The default location of the box_offset is not centered - EXPECT_EQ(ignition::math::Vector3d(5.46554, 2.18039, 4.8431), mesh->Max()); - EXPECT_EQ(ignition::math::Vector3d(3.46555, 0.180391, 2.8431), mesh->Min()); + std::ofstream stlFile("ignition_stl_test.stl", std::ios::out); + stlFile << asciiSTLBox; + stlFile.close(); - mesh->Center(ignition::math::Vector3d::Zero); + common::systemPaths()->AddFilePaths(common::cwd()); + auto mesh = common::MeshManager::Instance()->Load("ignition_stl_test.stl"); - EXPECT_EQ(ignition::math::Vector3d(1.0, 1.0, 1.0), mesh->Max()); - EXPECT_EQ(ignition::math::Vector3d(-1.0, -1.0, -1.0), mesh->Min()); + ASSERT_NE(nullptr, mesh); + common::MeshManager::Instance()->Export(mesh, + common::joinPaths(common::cwd(), "ignition_stl_test2"), "stl", false); + common::MeshManager::Instance()->Export(mesh, + common::joinPaths(common::cwd(), "ignition_stl_test2"), "dae", false); - mesh->Translate(ignition::math::Vector3d(1, 2, 3)); - EXPECT_EQ(ignition::math::Vector3d(2.0, 3.0, 4.0), mesh->Max()); - EXPECT_EQ(ignition::math::Vector3d(0.0, 1.0, 2.0), mesh->Min()); + EXPECT_FALSE(common::exists("ignition_stl_test2.stl")); + EXPECT_TRUE(common::exists("ignition_stl_test2.dae")); } -///////////////////////////////////////////////// -// Test centering a submesh. -TEST_F(MeshTest, SubMeshCenter) -{ - common::ColladaLoader loader; - common::Mesh *mesh = loader.Load(TestFile("data", "box_offset.dae")); - - // The default location of the box_offest is not centered - EXPECT_EQ(ignition::math::Vector3d(5.46554, 2.18039, 4.8431), mesh->Max()); - EXPECT_EQ(ignition::math::Vector3d(3.46555, 0.180391, 2.8431), mesh->Min()); - - // Get the Cube submesh - common::SubMesh submesh(mesh->SubMesh("Cube")); - - submesh.Center(ignition::math::Vector3d(1, 2, 3)); - EXPECT_EQ(ignition::math::Vector3d(0, 1, 2), submesh.Min()); - EXPECT_EQ(ignition::math::Vector3d(2, 3, 4), submesh.Max()); - - submesh.Translate(ignition::math::Vector3d(1, 2, 3)); - EXPECT_EQ(ignition::math::Vector3d(1, 3, 5), submesh.Min()); - EXPECT_EQ(ignition::math::Vector3d(3, 5, 7), submesh.Max()); - - // The original mesh should not change - EXPECT_EQ(ignition::math::Vector3d(5.46554, 2.18039, 4.8431), mesh->Max()); - EXPECT_EQ(ignition::math::Vector3d(3.46555, 0.180391, 2.8431), mesh->Min()); -} diff --git a/test/integration/plugin.cc b/test/integration/plugin.cc index 3c12bedb8..a8ee39e5d 100644 --- a/test/integration/plugin.cc +++ b/test/integration/plugin.cc @@ -32,7 +32,6 @@ #include "ignition/common/PluginPtr.hh" #include "ignition/common/SpecializedPluginPtr.hh" -#include "test_config.h" #include "DummyPluginsPath.h" #include "plugins/DummyPlugins.hh" diff --git a/test/integration/video_encoder.cc b/test/integration/video_encoder.cc index 4ebe8dd8d..a833c2c13 100644 --- a/test/integration/video_encoder.cc +++ b/test/integration/video_encoder.cc @@ -23,7 +23,8 @@ #include "ignition/common/Video.hh" #include "ignition/common/ffmpeg_inc.hh" -#include "test_config.h" +#include <ignition/common/testing/AutoLogFixture.hh> +#include <ignition/common/testing/TestPaths.hh> using namespace ignition; using namespace common; diff --git a/test/performance/plugin_specialization.cc b/test/performance/plugin_specialization.cc index bab559c31..9e33a7b87 100644 --- a/test/performance/plugin_specialization.cc +++ b/test/performance/plugin_specialization.cc @@ -25,7 +25,6 @@ #include "ignition/common/SpecializedPluginPtr.hh" #include "ignition/common/Console.hh" -#include "test_config.h" #include "DummyPluginsPath.h" #include "plugins/DummyPlugins.hh" diff --git a/test/test_config.h.in b/test/test_config.h.in deleted file mode 100644 index aea2bf931..000000000 --- a/test/test_config.h.in +++ /dev/null @@ -1,184 +0,0 @@ -/* THIS HEADER WAS AUTOMATICALLY GENERATED - * AND SHOULD NOT BE DIRECTLY MODIFIED. - * - * See test/test_config.h.in in the ignition-common - * repo for the original source of this header. -*/ - -#ifndef IGNITION_TESTING__TEST_CONFIG_H_ -#define IGNITION_TESTING__TEST_CONFIG_H_ - -#include <gtest/gtest.h> - -#include <string> -#include "ignition/common/Console.hh" -#include "ignition/common/Filesystem.hh" -#include "ignition/common/TempDirectory.hh" -#include "ignition/common/Util.hh" - -#define PROJECT_BINARY_PATH "${PROJECT_BINARY_DIR}" -#define PROJECT_SOURCE_PATH "${PROJECT_SOURCE_DIR}" - -namespace ignition -{ - namespace common - { - namespace testing - { - /// \brief Method to retrieve root directory of project source - /// - /// This is used to get various test files - /// \param[inout] _sourceDir Full path to the source directory - /// \return True if directory is set correctly, false otherwise - bool ProjectSourcePath(std::string &_sourceDir) - { - // Bazel builds set TEST_SRCDIR - if (common::env("TEST_SRCDIR", _sourceDir)) - { - _sourceDir = common::joinPaths( - _sourceDir, "__main__", "ign_common"); - return true; - } - else - { - // CMake builds set PROJECT_SOURCE_DIR - _sourceDir = "${PROJECT_SOURCE_DIR}"; - return true; - } - } - - /// \brief Method to retrieve temporary directory for test outputs - /// - /// \param[inout] _tmpDir Full path to the temp directory - /// \return True if directory is set correctly, false otherwise - bool TestTmpPath(std::string &_tmpDir) - { - // Bazel builds set TEST_UNDECLARED_OUTPUTS_DIR - if (common::env("TEST_UNDECLARED_OUTPUTS_DIR", _tmpDir)) - { - return true; - } - else - { - _tmpDir = common::createTempDirectory("ignition", - common::tempDirectoryPath()); - return !_tmpDir.empty(); - } - } - - /// \brief Retrieve a file from the project source directory - /// \param[in] variable length of arguments relative to the - /// repository source directory - /// \return Full path to requested file - template <typename... Args> - std::string SourceFile(Args const &... args) - { - std::string dataDir; - ProjectSourcePath(dataDir); - return common::joinPaths(dataDir, args...); - } - - /// \brief Retrieve a file from the test directory - /// \param[in] variable length of arguments relative to the - /// repository test directory - /// \return Full path to requested test file - template <typename... Args> - std::string TestFile(Args const &... args) - { - return SourceFile("test", args...); - } - - /// \brief Retrieve a file from the project temporary directory - /// \param[in] variable length of arguments relative to the - /// temporary test directory - /// \return Full path to requested file - template <typename... Args> - std::string TempPath(Args const &... args) - { - std::string dataDir; - TestTmpPath(dataDir); - return common::joinPaths(dataDir, args...); - } - - /// \brief A utility class that stores test logs in ~/.ignition/test_logs. - /// This functionality is needed to keep all the log information reported - /// by ignition during continuous integration. Without this, debugging - /// failing tests is significantly more difficult. - class AutoLogFixture : public ::testing::Test - { - /// \brief Setup the test fixture. This gets called by gtest. - protected: virtual void SetUp() - { - const ::testing::TestInfo *const testInfo = - ::testing::UnitTest::GetInstance()->current_test_info(); - - std::string testName = testInfo->name(); - std::string testCaseName = testInfo->test_case_name(); - this->logFilename = testCaseName + "_" + testName + ".log"; - - this->temp = std::make_unique<TempDirectory>( - "test", "ign_common", true); - ASSERT_TRUE(this->temp->Valid()); - common::setenv(IGN_HOMEDIR, this->temp->Path()); - - // Initialize Console - ignLogInit(common::joinPaths(this->temp->Path(), "test_logs"), - this->logFilename); - - ignition::common::Console::SetVerbosity(4); - - // Read the full path to the log directory. - this->logDirectory = ignLogDirectory(); - } - - /// \brief Get a string with the full log file path. - /// \return The full log file path as a string. - protected: std::string FullLogPath() const - { - return ignition::common::joinPaths( - this->logDirectory, this->logFilename); - } - - /// \brief Get a string with all the log content loaded from the disk. - /// \return A string with all the log content. - protected: std::string LogContent() const - { - std::string loggedString; - // Open the log file, and read back the string - std::ifstream ifs(this->FullLogPath().c_str(), std::ios::in); - - while (!ifs.eof()) - { - std::string line; - std::getline(ifs, line); - loggedString += line; - } - return loggedString; - } - - /// \brief Default destructor. - public: virtual ~AutoLogFixture() - { - ignLogClose(); - EXPECT_TRUE(ignition::common::unsetenv(IGN_HOMEDIR)); - } - - /// \brief String with the full path of the logfile - private: std::string logFilename; - - /// \brief String with the full path to log directory - private: std::string logDirectory; - - /// \brief String with the base path to log directory - private: std::string logBasePath; - - /// \brief Temporary directory to run test in - private: std::unique_ptr<common::TempDirectory> temp; - }; - } // namespace testing - } // namespace common -} // namespace ignition - - - -#endif // IGNITION_TESTING__TEST_CONFIG_H_ diff --git a/testing/include/gz/common/testing/detail/AutoLogFixture.hh b/testing/include/gz/common/testing/detail/AutoLogFixture.hh index 4d19ebb8f..5c648a0bf 100644 --- a/testing/include/gz/common/testing/detail/AutoLogFixture.hh +++ b/testing/include/gz/common/testing/detail/AutoLogFixture.hh @@ -70,8 +70,12 @@ void AutoLogFixture::SetUp() std::string testCaseName = testInfo->test_case_name(); this->dataPtr->logFilename = testCaseName + "_" + testName + ".log"; + std::replace(this->dataPtr->logFilename.begin(), + this->dataPtr->logFilename.end(), + '/', '_'); + this->dataPtr->temp = std::make_unique<TempDirectory>( - "test", "ign_common", false); + "test", "ign_common", true); ASSERT_TRUE(this->dataPtr->temp->Valid()); common::setenv(IGN_HOMEDIR, this->dataPtr->temp->Path()); @@ -83,12 +87,12 @@ void AutoLogFixture::SetUp() ASSERT_TRUE(common::exists( common::joinPaths(logPath, this->dataPtr->logFilename))); - ignition::common::Console::SetVerbosity(4); - // Read the full path to the log directory. this->dataPtr->logDirectory = ignLogDirectory(); ASSERT_FALSE(this->dataPtr->logDirectory.empty()); ASSERT_TRUE(ignition::common::exists(this->dataPtr->logDirectory)); + + ignition::common::Console::SetVerbosity(4); } ////////////////////////////////////////////////// From aeff91008ca45f59a037fa97df74c33b93c88391 Mon Sep 17 00:00:00 2001 From: Aditya <aditya050995@gmail.com> Date: Mon, 9 May 2022 17:54:27 -0700 Subject: [PATCH 158/219] Expose API to set non earth dem flag to heightmaps Signed-off-by: Aditya <aditya050995@gmail.com> --- geospatial/include/gz/common/geospatial/Dem.hh | 5 +++++ geospatial/src/Dem.cc | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/geospatial/include/gz/common/geospatial/Dem.hh b/geospatial/include/gz/common/geospatial/Dem.hh index b22b4e5a0..102b29b76 100644 --- a/geospatial/include/gz/common/geospatial/Dem.hh +++ b/geospatial/include/gz/common/geospatial/Dem.hh @@ -49,6 +49,11 @@ namespace ignition /// \return 0 when the operation succeeds to open a file. public: int Load(const std::string &_filename = ""); + /// \brief Indicate that this is a non Earth DEM. + /// \param[in] isNonEarthDem Should be true if this is a + /// non earth DEM, otherwise false. + public: void SetNonEarthDEM(bool isNonEarthDem); + /// \brief Get the elevation of a terrain's point in meters. /// \param[in] _x X coordinate of the terrain. /// \param[in] _y Y coordinate of the terrain. diff --git a/geospatial/src/Dem.cc b/geospatial/src/Dem.cc index 1e3234683..15e2dc356 100644 --- a/geospatial/src/Dem.cc +++ b/geospatial/src/Dem.cc @@ -82,6 +82,12 @@ Dem::~Dem() GDALClose(reinterpret_cast<GDALDataset *>(this->dataPtr->dataSet)); } +////////////////////////////////////////////////// +void Dem::SetNonEarthDEM(bool isNonEarthDem) +{ + this->dataPtr->isNonEarthDem = isNonEarthDem; +} + ////////////////////////////////////////////////// int Dem::Load(const std::string &_filename) { From d5f1c97f5a74e8c6703399b65109331252146edc Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Fri, 13 May 2022 07:26:57 -0500 Subject: [PATCH 159/219] Fix console bug when IGN_HOMEDIR is unset (#346) Signed-off-by: Michael Carroll <michael@openrobotics.org> --- src/Console.cc | 6 ++++-- src/Console_TEST.cc | 11 +++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Console.cc b/src/Console.cc index 0e27c41dd..2f81fdcef 100644 --- a/src/Console.cc +++ b/src/Console.cc @@ -243,8 +243,10 @@ void FileLogger::Init(const std::string &_directory, { if (!env(IGN_HOMEDIR, logPath)) { - ignerr << "Missing HOME environment variable." - << "No log file will be generated."; + // Use stderr here to prevent infinite recursion + // trying to get the log initialized + std::cerr << "Missing HOME environment variable." + << "No log file will be generated." << std::endl; return; } logPath = joinPaths(logPath, _directory); diff --git a/src/Console_TEST.cc b/src/Console_TEST.cc index d00e93eaa..7f13ab89a 100644 --- a/src/Console_TEST.cc +++ b/src/Console_TEST.cc @@ -538,3 +538,14 @@ TEST_F(Console_TEST, LogDirectory) EXPECT_EQ(logDir, absPath); } + +///////////////////////////////////////////////// +/// \brief Test Console::Init and Console::Log +/// This specifically tests with an unset HOME variable +TEST_F(Console_TEST, NoInitAndLogNoHome) +{ + ignLogClose(); + EXPECT_TRUE(ignition::common::unsetenv(IGN_HOMEDIR)); + // This should not throw + ignlog << "this is a test" << std::endl; +} From 4370ef6ddb55616033a254879d9af455f98dbc05 Mon Sep 17 00:00:00 2001 From: Aditya <aditya050995@gmail.com> Date: Fri, 13 May 2022 12:13:44 -0700 Subject: [PATCH 160/219] Added test case Signed-off-by: Aditya <aditya050995@gmail.com> --- geospatial/include/gz/common/geospatial/Dem.hh | 7 ++++++- geospatial/src/Dem.cc | 10 ++++++++-- geospatial/src/Dem_TEST.cc | 8 ++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/geospatial/include/gz/common/geospatial/Dem.hh b/geospatial/include/gz/common/geospatial/Dem.hh index 102b29b76..2393f4579 100644 --- a/geospatial/include/gz/common/geospatial/Dem.hh +++ b/geospatial/include/gz/common/geospatial/Dem.hh @@ -52,7 +52,12 @@ namespace ignition /// \brief Indicate that this is a non Earth DEM. /// \param[in] isNonEarthDem Should be true if this is a /// non earth DEM, otherwise false. - public: void SetNonEarthDEM(bool isNonEarthDem); + public: void SetNonEarthDEM(bool _isNonEarthDem); + + /// \brief Check if the loaded DEM is not from the Earth. + /// \return True if the loaded DEM is from the Earth, otherwise + /// returns False. + public: bool GetNonEarthDEM(); /// \brief Get the elevation of a terrain's point in meters. /// \param[in] _x X coordinate of the terrain. diff --git a/geospatial/src/Dem.cc b/geospatial/src/Dem.cc index 15e2dc356..f004d7e7b 100644 --- a/geospatial/src/Dem.cc +++ b/geospatial/src/Dem.cc @@ -83,9 +83,15 @@ Dem::~Dem() } ////////////////////////////////////////////////// -void Dem::SetNonEarthDEM(bool isNonEarthDem) +void Dem::SetNonEarthDEM(bool _isNonEarthDem) { - this->dataPtr->isNonEarthDem = isNonEarthDem; + this->dataPtr->isNonEarthDem = _isNonEarthDem; +} + +////////////////////////////////////////////////// +bool Dem::GetNonEarthDEM() +{ + return this->dataPtr->isNonEarthDem; } ////////////////////////////////////////////////// diff --git a/geospatial/src/Dem_TEST.cc b/geospatial/src/Dem_TEST.cc index 6ab69cdaa..69b2cbe61 100644 --- a/geospatial/src/Dem_TEST.cc +++ b/geospatial/src/Dem_TEST.cc @@ -245,4 +245,12 @@ TEST_F(DemTest, NonEarthDem) // unable to get coordinates in WGS84 ignition::math::Angle latitude, longitude; EXPECT_FALSE(dem.GeoReferenceOrigin(latitude, longitude)); + + // The Load() method in Dem.cc should set the + // isNonEarthDEM flag. + EXPECT_TRUE(dem.GetNonEarthDEM()); + + // This flag can be overridden externally. + dem.SetNonEarthDEM(false); + EXPECT_FALSE(dem.GetNonEarthDEM()); } From 8bcc9d0ea068aa8992a9e0061ceedd43af7e95fd Mon Sep 17 00:00:00 2001 From: Aditya <aditya050995@gmail.com> Date: Tue, 17 May 2022 06:24:36 -0700 Subject: [PATCH 161/219] Typo in header file Signed-off-by: Aditya <aditya050995@gmail.com> --- geospatial/include/gz/common/geospatial/Dem.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geospatial/include/gz/common/geospatial/Dem.hh b/geospatial/include/gz/common/geospatial/Dem.hh index 2393f4579..c992cf49a 100644 --- a/geospatial/include/gz/common/geospatial/Dem.hh +++ b/geospatial/include/gz/common/geospatial/Dem.hh @@ -50,7 +50,7 @@ namespace ignition public: int Load(const std::string &_filename = ""); /// \brief Indicate that this is a non Earth DEM. - /// \param[in] isNonEarthDem Should be true if this is a + /// \param[in] _isNonEarthDem Should be true if this is a /// non earth DEM, otherwise false. public: void SetNonEarthDEM(bool _isNonEarthDem); From d36b23d79205d1e58aa947934dcb4adcc5d03147 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Tue, 24 May 2022 12:53:39 -0700 Subject: [PATCH 162/219] Remove ignition redirection headers for Plugin (#350) Signed-off-by: Louise Poubel <louise@openrobotics.org> --- include/ignition/common/Plugin.hh | 18 ------------------ include/ignition/common/PluginInfo.hh | 18 ------------------ include/ignition/common/PluginLoader.hh | 18 ------------------ include/ignition/common/PluginMacros.hh | 18 ------------------ include/ignition/common/PluginPtr.hh | 18 ------------------ include/ignition/common/SpecializedPlugin.hh | 18 ------------------ .../ignition/common/SpecializedPluginPtr.hh | 18 ------------------ include/ignition/common/detail/Plugin.hh | 18 ------------------ include/ignition/common/detail/PluginLoader.hh | 18 ------------------ include/ignition/common/detail/PluginMacros.hh | 18 ------------------ include/ignition/common/detail/PluginPtr.hh | 18 ------------------ .../common/detail/SpecializedPlugin.hh | 18 ------------------ 12 files changed, 216 deletions(-) delete mode 100644 include/ignition/common/Plugin.hh delete mode 100644 include/ignition/common/PluginInfo.hh delete mode 100644 include/ignition/common/PluginLoader.hh delete mode 100644 include/ignition/common/PluginMacros.hh delete mode 100644 include/ignition/common/PluginPtr.hh delete mode 100644 include/ignition/common/SpecializedPlugin.hh delete mode 100644 include/ignition/common/SpecializedPluginPtr.hh delete mode 100644 include/ignition/common/detail/Plugin.hh delete mode 100644 include/ignition/common/detail/PluginLoader.hh delete mode 100644 include/ignition/common/detail/PluginMacros.hh delete mode 100644 include/ignition/common/detail/PluginPtr.hh delete mode 100644 include/ignition/common/detail/SpecializedPlugin.hh diff --git a/include/ignition/common/Plugin.hh b/include/ignition/common/Plugin.hh deleted file mode 100644 index 6a463e61e..000000000 --- a/include/ignition/common/Plugin.hh +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2017 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <gz/common/Plugin.hh> diff --git a/include/ignition/common/PluginInfo.hh b/include/ignition/common/PluginInfo.hh deleted file mode 100644 index 3496c90fd..000000000 --- a/include/ignition/common/PluginInfo.hh +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2017 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <gz/common/PluginInfo.hh> diff --git a/include/ignition/common/PluginLoader.hh b/include/ignition/common/PluginLoader.hh deleted file mode 100644 index 3b4922e41..000000000 --- a/include/ignition/common/PluginLoader.hh +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2017 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <gz/common/PluginLoader.hh> diff --git a/include/ignition/common/PluginMacros.hh b/include/ignition/common/PluginMacros.hh deleted file mode 100644 index ca9da7675..000000000 --- a/include/ignition/common/PluginMacros.hh +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2017 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <gz/common/PluginMacros.hh> diff --git a/include/ignition/common/PluginPtr.hh b/include/ignition/common/PluginPtr.hh deleted file mode 100644 index c308952d0..000000000 --- a/include/ignition/common/PluginPtr.hh +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2017 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <gz/common/PluginPtr.hh> diff --git a/include/ignition/common/SpecializedPlugin.hh b/include/ignition/common/SpecializedPlugin.hh deleted file mode 100644 index 95373b8f6..000000000 --- a/include/ignition/common/SpecializedPlugin.hh +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2017 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <gz/common/SpecializedPlugin.hh> diff --git a/include/ignition/common/SpecializedPluginPtr.hh b/include/ignition/common/SpecializedPluginPtr.hh deleted file mode 100644 index 948becf66..000000000 --- a/include/ignition/common/SpecializedPluginPtr.hh +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2017 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <gz/common/SpecializedPluginPtr.hh> diff --git a/include/ignition/common/detail/Plugin.hh b/include/ignition/common/detail/Plugin.hh deleted file mode 100644 index 1d56b8c97..000000000 --- a/include/ignition/common/detail/Plugin.hh +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2017 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <gz/common/detail/Plugin.hh> diff --git a/include/ignition/common/detail/PluginLoader.hh b/include/ignition/common/detail/PluginLoader.hh deleted file mode 100644 index f3a4f3221..000000000 --- a/include/ignition/common/detail/PluginLoader.hh +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2017 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <gz/common/detail/PluginLoader.hh> diff --git a/include/ignition/common/detail/PluginMacros.hh b/include/ignition/common/detail/PluginMacros.hh deleted file mode 100644 index b9f2717be..000000000 --- a/include/ignition/common/detail/PluginMacros.hh +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2017 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <gz/common/detail/PluginMacros.hh> diff --git a/include/ignition/common/detail/PluginPtr.hh b/include/ignition/common/detail/PluginPtr.hh deleted file mode 100644 index 915c6b72d..000000000 --- a/include/ignition/common/detail/PluginPtr.hh +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2017 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <gz/common/detail/PluginPtr.hh> diff --git a/include/ignition/common/detail/SpecializedPlugin.hh b/include/ignition/common/detail/SpecializedPlugin.hh deleted file mode 100644 index fc799a441..000000000 --- a/include/ignition/common/detail/SpecializedPlugin.hh +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2017 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <gz/common/detail/SpecializedPlugin.hh> From 57132ad085604c9ecd05e18cb8fb904693b39cc2 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Tue, 24 May 2022 12:55:29 -0700 Subject: [PATCH 163/219] Move Plugin headers back from gz to ignition (#350) Signed-off-by: Louise Poubel <louise@openrobotics.org> --- include/{gz => ignition}/common/Plugin.hh | 0 include/{gz => ignition}/common/PluginInfo.hh | 0 include/{gz => ignition}/common/PluginLoader.hh | 0 include/{gz => ignition}/common/PluginMacros.hh | 0 include/{gz => ignition}/common/PluginPtr.hh | 0 include/{gz => ignition}/common/SpecializedPlugin.hh | 0 include/{gz => ignition}/common/SpecializedPluginPtr.hh | 0 include/{gz => ignition}/common/detail/Plugin.hh | 0 include/{gz => ignition}/common/detail/PluginLoader.hh | 0 include/{gz => ignition}/common/detail/PluginMacros.hh | 0 include/{gz => ignition}/common/detail/PluginPtr.hh | 0 include/{gz => ignition}/common/detail/SpecializedPlugin.hh | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename include/{gz => ignition}/common/Plugin.hh (100%) rename include/{gz => ignition}/common/PluginInfo.hh (100%) rename include/{gz => ignition}/common/PluginLoader.hh (100%) rename include/{gz => ignition}/common/PluginMacros.hh (100%) rename include/{gz => ignition}/common/PluginPtr.hh (100%) rename include/{gz => ignition}/common/SpecializedPlugin.hh (100%) rename include/{gz => ignition}/common/SpecializedPluginPtr.hh (100%) rename include/{gz => ignition}/common/detail/Plugin.hh (100%) rename include/{gz => ignition}/common/detail/PluginLoader.hh (100%) rename include/{gz => ignition}/common/detail/PluginMacros.hh (100%) rename include/{gz => ignition}/common/detail/PluginPtr.hh (100%) rename include/{gz => ignition}/common/detail/SpecializedPlugin.hh (100%) diff --git a/include/gz/common/Plugin.hh b/include/ignition/common/Plugin.hh similarity index 100% rename from include/gz/common/Plugin.hh rename to include/ignition/common/Plugin.hh diff --git a/include/gz/common/PluginInfo.hh b/include/ignition/common/PluginInfo.hh similarity index 100% rename from include/gz/common/PluginInfo.hh rename to include/ignition/common/PluginInfo.hh diff --git a/include/gz/common/PluginLoader.hh b/include/ignition/common/PluginLoader.hh similarity index 100% rename from include/gz/common/PluginLoader.hh rename to include/ignition/common/PluginLoader.hh diff --git a/include/gz/common/PluginMacros.hh b/include/ignition/common/PluginMacros.hh similarity index 100% rename from include/gz/common/PluginMacros.hh rename to include/ignition/common/PluginMacros.hh diff --git a/include/gz/common/PluginPtr.hh b/include/ignition/common/PluginPtr.hh similarity index 100% rename from include/gz/common/PluginPtr.hh rename to include/ignition/common/PluginPtr.hh diff --git a/include/gz/common/SpecializedPlugin.hh b/include/ignition/common/SpecializedPlugin.hh similarity index 100% rename from include/gz/common/SpecializedPlugin.hh rename to include/ignition/common/SpecializedPlugin.hh diff --git a/include/gz/common/SpecializedPluginPtr.hh b/include/ignition/common/SpecializedPluginPtr.hh similarity index 100% rename from include/gz/common/SpecializedPluginPtr.hh rename to include/ignition/common/SpecializedPluginPtr.hh diff --git a/include/gz/common/detail/Plugin.hh b/include/ignition/common/detail/Plugin.hh similarity index 100% rename from include/gz/common/detail/Plugin.hh rename to include/ignition/common/detail/Plugin.hh diff --git a/include/gz/common/detail/PluginLoader.hh b/include/ignition/common/detail/PluginLoader.hh similarity index 100% rename from include/gz/common/detail/PluginLoader.hh rename to include/ignition/common/detail/PluginLoader.hh diff --git a/include/gz/common/detail/PluginMacros.hh b/include/ignition/common/detail/PluginMacros.hh similarity index 100% rename from include/gz/common/detail/PluginMacros.hh rename to include/ignition/common/detail/PluginMacros.hh diff --git a/include/gz/common/detail/PluginPtr.hh b/include/ignition/common/detail/PluginPtr.hh similarity index 100% rename from include/gz/common/detail/PluginPtr.hh rename to include/ignition/common/detail/PluginPtr.hh diff --git a/include/gz/common/detail/SpecializedPlugin.hh b/include/ignition/common/detail/SpecializedPlugin.hh similarity index 100% rename from include/gz/common/detail/SpecializedPlugin.hh rename to include/ignition/common/detail/SpecializedPlugin.hh From d985e69f9cbb43f3d43dbe7633942ff59eb714d3 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Tue, 3 May 2022 09:19:59 -0700 Subject: [PATCH 164/219] Use ignition headers for plugin (#350) Signed-off-by: Louise Poubel <louise@openrobotics.org> --- include/ignition/common/Plugin.hh | 2 +- include/ignition/common/PluginLoader.hh | 4 ++-- include/ignition/common/PluginMacros.hh | 2 +- include/ignition/common/PluginPtr.hh | 4 ++-- include/ignition/common/SpecializedPlugin.hh | 6 +++--- include/ignition/common/SpecializedPluginPtr.hh | 6 +++--- include/ignition/common/detail/Plugin.hh | 2 +- include/ignition/common/detail/PluginLoader.hh | 2 +- include/ignition/common/detail/PluginMacros.hh | 2 +- include/ignition/common/detail/PluginPtr.hh | 2 +- include/ignition/common/detail/SpecializedPlugin.hh | 2 +- 11 files changed, 17 insertions(+), 17 deletions(-) diff --git a/include/ignition/common/Plugin.hh b/include/ignition/common/Plugin.hh index 51cad8beb..c89fb67ca 100644 --- a/include/ignition/common/Plugin.hh +++ b/include/ignition/common/Plugin.hh @@ -191,6 +191,6 @@ namespace ignition } } -#include "gz/common/detail/Plugin.hh" +#include "ignition/common/detail/Plugin.hh" #endif diff --git a/include/ignition/common/PluginLoader.hh b/include/ignition/common/PluginLoader.hh index 3f696c660..c4d1c507c 100644 --- a/include/ignition/common/PluginLoader.hh +++ b/include/ignition/common/PluginLoader.hh @@ -25,7 +25,7 @@ #include <unordered_set> #include <gz/common/Export.hh> -#include <gz/common/PluginPtr.hh> +#include <ignition/common/PluginPtr.hh> #include <gz/utils/SuppressWarning.hh> namespace ignition @@ -99,6 +99,6 @@ namespace ignition } } -#include "gz/common/detail/PluginLoader.hh" +#include "ignition/common/detail/PluginLoader.hh" #endif diff --git a/include/ignition/common/PluginMacros.hh b/include/ignition/common/PluginMacros.hh index ce293e193..cbaaede90 100644 --- a/include/ignition/common/PluginMacros.hh +++ b/include/ignition/common/PluginMacros.hh @@ -19,7 +19,7 @@ #ifndef GZ_COMMON_REGISTERMACROS_HH_ #define GZ_COMMON_REGISTERMACROS_HH_ -#include "gz/common/detail/PluginMacros.hh" +#include "ignition/common/detail/PluginMacros.hh" // --------------- Specialize a plugin interface (optional) ------------------- diff --git a/include/ignition/common/PluginPtr.hh b/include/ignition/common/PluginPtr.hh index 0cc07abda..1ea2f3874 100644 --- a/include/ignition/common/PluginPtr.hh +++ b/include/ignition/common/PluginPtr.hh @@ -23,7 +23,7 @@ #include <string> #include <memory> -#include "gz/common/Plugin.hh" +#include "ignition/common/Plugin.hh" namespace ignition { @@ -226,6 +226,6 @@ namespace ignition } } -#include "gz/common/detail/PluginPtr.hh" +#include "ignition/common/detail/PluginPtr.hh" #endif diff --git a/include/ignition/common/SpecializedPlugin.hh b/include/ignition/common/SpecializedPlugin.hh index 910ec9742..3c53b59f1 100644 --- a/include/ignition/common/SpecializedPlugin.hh +++ b/include/ignition/common/SpecializedPlugin.hh @@ -19,7 +19,7 @@ #include <memory> -#include "gz/common/Plugin.hh" +#include "ignition/common/Plugin.hh" namespace ignition { @@ -62,7 +62,7 @@ namespace ignition /// Only interfaces that have been "specialized" can be passed as arguments /// to the SpecializedPlugin template. To specialize an interface, simply /// put the macro IGN_COMMON_SPECIALIZE_INTERFACE(~) from - /// gz/common/PluginMacros.hh into a public location of its class + /// ignition/common/PluginMacros.hh into a public location of its class /// definition. template <class SpecInterface> class SpecializedPlugin<SpecInterface> : public virtual Plugin @@ -165,6 +165,6 @@ namespace ignition } } -#include "gz/common/detail/SpecializedPlugin.hh" +#include "ignition/common/detail/SpecializedPlugin.hh" #endif diff --git a/include/ignition/common/SpecializedPluginPtr.hh b/include/ignition/common/SpecializedPluginPtr.hh index a27253aba..664744dc5 100644 --- a/include/ignition/common/SpecializedPluginPtr.hh +++ b/include/ignition/common/SpecializedPluginPtr.hh @@ -19,8 +19,8 @@ #ifndef GZ_COMMON_SPECIALIZEDPLUGINPTR_HH_ #define GZ_COMMON_SPECIALIZEDPLUGINPTR_HH_ -#include "gz/common/PluginPtr.hh" -#include "gz/common/SpecializedPlugin.hh" +#include "ignition/common/PluginPtr.hh" +#include "ignition/common/SpecializedPlugin.hh" namespace ignition { @@ -64,7 +64,7 @@ namespace ignition /// Only interfaces that have been "specialized" can be passed as arguments /// to the SpecializedPluginPtr template. To specialize an interface, simply /// put the macro IGN_COMMON_SPECIALIZE_INTERFACE(~) from - /// gz/common/PluginMacros.hh into a public location of its class + /// ignition/common/PluginMacros.hh into a public location of its class /// definition. template <typename... SpecInterfaces> using SpecializedPluginPtr = diff --git a/include/ignition/common/detail/Plugin.hh b/include/ignition/common/detail/Plugin.hh index 3a8a048c1..7614addb1 100644 --- a/include/ignition/common/detail/Plugin.hh +++ b/include/ignition/common/detail/Plugin.hh @@ -21,7 +21,7 @@ #include <memory> #include <string> -#include "gz/common/Plugin.hh" +#include "ignition/common/Plugin.hh" namespace ignition { diff --git a/include/ignition/common/detail/PluginLoader.hh b/include/ignition/common/detail/PluginLoader.hh index 2ef11c625..cb916d5ce 100644 --- a/include/ignition/common/detail/PluginLoader.hh +++ b/include/ignition/common/detail/PluginLoader.hh @@ -20,7 +20,7 @@ #define GZ_COMMON_DETAIL_PLUGINLOADER_HH_ #include <string> -#include "gz/common/PluginLoader.hh" +#include "ignition/common/PluginLoader.hh" namespace ignition { diff --git a/include/ignition/common/detail/PluginMacros.hh b/include/ignition/common/detail/PluginMacros.hh index 4e93ae447..552fbf1e7 100644 --- a/include/ignition/common/detail/PluginMacros.hh +++ b/include/ignition/common/detail/PluginMacros.hh @@ -24,7 +24,7 @@ #include <type_traits> #include <unordered_set> #include <utility> -#include "gz/common/PluginInfo.hh" +#include "ignition/common/PluginInfo.hh" #include "gz/utils/SuppressWarning.hh" diff --git a/include/ignition/common/detail/PluginPtr.hh b/include/ignition/common/detail/PluginPtr.hh index 93952868e..5066679a4 100644 --- a/include/ignition/common/detail/PluginPtr.hh +++ b/include/ignition/common/detail/PluginPtr.hh @@ -21,7 +21,7 @@ #include <memory> #include <utility> -#include "gz/common/PluginPtr.hh" +#include "ignition/common/PluginPtr.hh" #include "gz/common/TemplateHelpers.hh" namespace ignition diff --git a/include/ignition/common/detail/SpecializedPlugin.hh b/include/ignition/common/detail/SpecializedPlugin.hh index dff284cca..eab28e87e 100644 --- a/include/ignition/common/detail/SpecializedPlugin.hh +++ b/include/ignition/common/detail/SpecializedPlugin.hh @@ -19,7 +19,7 @@ #ifndef GZ_COMMON_DETAIL_SPECIALIZEDPLUGIN_HH_ #define GZ_COMMON_DETAIL_SPECIALIZEDPLUGIN_HH_ -#include "gz/common/SpecializedPlugin.hh" +#include "ignition/common/SpecializedPlugin.hh" #include <memory> // This preprocessor token should only be used by the unittest that is From 6fa6fda7a75b035d8d28b7efe4b36b9308390a00 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Tue, 3 May 2022 10:04:17 -0700 Subject: [PATCH 165/219] Deprecation warnings for Plugin (#350) Signed-off-by: Louise Poubel <louise@openrobotics.org> --- Migration.md | 3 +++ include/ignition/common/Plugin.hh | 2 +- include/ignition/common/PluginInfo.hh | 3 ++- include/ignition/common/PluginLoader.hh | 2 +- include/ignition/common/PluginMacros.hh | 2 ++ include/ignition/common/PluginPtr.hh | 12 +++++++----- include/ignition/common/SpecializedPlugin.hh | 2 +- include/ignition/common/SpecializedPluginPtr.hh | 2 ++ src/Plugin.cc | 5 ++++- src/PluginLoader.cc | 8 ++++++-- src/PluginLoader_TEST.cc | 7 ++++++- src/PluginUtils.hh | 3 ++- src/PluginUtils_TEST.cc | 3 +++ test/integration/plugin.cc | 10 +++++++--- test/performance/plugin_specialization.cc | 11 +++++++++-- test/plugins/BadPluginAPIVersionNew.cc | 5 +++++ test/plugins/BadPluginAPIVersionOld.cc | 4 ++++ test/plugins/BadPluginAlign.cc | 4 ++++ test/plugins/BadPluginSize.cc | 4 ++++ test/plugins/DummyPlugins.cc | 4 ++++ .../static_assertions/plugin_bad_const_assignment.cc | 4 ++++ test/static_assertions/plugin_bad_const_construct.cc | 4 ++++ test/static_assertions/plugin_no_base_class.cc | 5 +++++ .../plugin_not_fully_qualified_base.cc | 6 ++++++ .../plugin_not_fully_qualified_class.cc | 5 +++++ test/static_assertions/plugin_not_global_ns.cc | 5 ++++- test/static_assertions/plugin_wrong_base_class.cc | 5 +++++ 27 files changed, 110 insertions(+), 20 deletions(-) diff --git a/Migration.md b/Migration.md index 8b121ade8..94b3e71b9 100644 --- a/Migration.md +++ b/Migration.md @@ -13,6 +13,9 @@ release will remove the deprecated code. be used instead, which properly handles submeshes having no material index applied to them. +1. All the plugin APIs are deprecated, use the gz-plugin library instead. See + the [migration guide](https://github.com/ignitionrobotics/ign-plugin/blob/ign-plugin1/MIGRATION.md). + ### Additions 1. **geospatial** component that loads heightmap images and DEMs diff --git a/include/ignition/common/Plugin.hh b/include/ignition/common/Plugin.hh index c89fb67ca..a7f976dcd 100644 --- a/include/ignition/common/Plugin.hh +++ b/include/ignition/common/Plugin.hh @@ -153,7 +153,7 @@ namespace ignition /// \brief Default constructor. This is kept private to ensure that /// Plugins are always managed by a PluginPtr object. - private: Plugin(); + private: GZ_DEPRECATED(5) Plugin(); /// \brief Type-agnostic retriever for interfaces private: void *PrivateGetInterface( diff --git a/include/ignition/common/PluginInfo.hh b/include/ignition/common/PluginInfo.hh index 4ae4941b6..aed2e3d1a 100644 --- a/include/ignition/common/PluginInfo.hh +++ b/include/ignition/common/PluginInfo.hh @@ -22,6 +22,7 @@ #include <functional> #include <string> #include <unordered_map> +#include <gz/common/Export.hh> namespace ignition { @@ -35,7 +36,7 @@ namespace ignition /// \brief Holds info required to construct a plugin - struct PluginInfo + struct GZ_DEPRECATED(5) PluginInfo { /// \brief The name of the plugin std::string name; diff --git a/include/ignition/common/PluginLoader.hh b/include/ignition/common/PluginLoader.hh index c4d1c507c..e9c957479 100644 --- a/include/ignition/common/PluginLoader.hh +++ b/include/ignition/common/PluginLoader.hh @@ -40,7 +40,7 @@ namespace ignition class IGNITION_COMMON_VISIBLE PluginLoader { /// \brief Constructor - public: PluginLoader(); + public: GZ_DEPRECATED(5) PluginLoader(); /// \brief Destructor public: ~PluginLoader(); diff --git a/include/ignition/common/PluginMacros.hh b/include/ignition/common/PluginMacros.hh index cbaaede90..0b3ba7eeb 100644 --- a/include/ignition/common/PluginMacros.hh +++ b/include/ignition/common/PluginMacros.hh @@ -21,6 +21,8 @@ #include "ignition/common/detail/PluginMacros.hh" +// Deprecated, use gz-plugin + // --------------- Specialize a plugin interface (optional) ------------------- /// \brief Call this macro inside a public scope of an interface in order to get diff --git a/include/ignition/common/PluginPtr.hh b/include/ignition/common/PluginPtr.hh index 1ea2f3874..269c36460 100644 --- a/include/ignition/common/PluginPtr.hh +++ b/include/ignition/common/PluginPtr.hh @@ -60,19 +60,20 @@ namespace ignition /// \brief Default constructor. Creates a PluginPtr object that does not /// point to any plugin instance. IsEmpty() will return true until a /// plugin instance is provided. - public: TemplatePluginPtr(); + public: GZ_DEPRECATED(5) TemplatePluginPtr(); /// \brief Copy constructor. This PluginPtr will now point at the same /// plugin instance as _other, and they will share ownership. /// \param[in] _other Pointer to plugin being copied. - public: TemplatePluginPtr(const TemplatePluginPtr &_other); + public: GZ_DEPRECATED(5) TemplatePluginPtr( + const TemplatePluginPtr &_other); /// \brief Move constructor. This PluginPtr will take ownership of the /// plugin instance held by _other. If this PluginPtr was holding an /// instance to another plugin, that instance will be deleted if no other /// PluginPtr is referencing it. /// \param[in] _other Pointer to plugin being moved. - public: TemplatePluginPtr(TemplatePluginPtr &&_other); + public: GZ_DEPRECATED(5) TemplatePluginPtr(TemplatePluginPtr &&_other); /// \brief Casting constructor. This PluginPtr will now point at the same /// plugin instance as _other, and they will share ownership. This @@ -83,7 +84,7 @@ namespace ignition /// \param[in] _other Another PluginPtr object. It may have a different /// kind of specialization. public: template <typename OtherPluginType> - TemplatePluginPtr( + GZ_DEPRECATED(5) TemplatePluginPtr( const TemplatePluginPtr<OtherPluginType> &_other); /// \brief Copy assignment operator. This PluginPtr will now point at the @@ -206,7 +207,8 @@ namespace ignition /// \param[in] _info A PluginInfo instance that was generated by /// PluginLoader. Alternatively, this can take a nullptr to create an /// empty PluginPtr. - private: explicit TemplatePluginPtr(const PluginInfo *_info); + private: explicit GZ_DEPRECATED(5) TemplatePluginPtr( + const PluginInfo *_info); /// \brief Pointer to the plugin wrapper that this PluginPtr is managing. private: std::unique_ptr<PluginType> dataPtr; diff --git a/include/ignition/common/SpecializedPlugin.hh b/include/ignition/common/SpecializedPlugin.hh index 3c53b59f1..3b4674ce4 100644 --- a/include/ignition/common/SpecializedPlugin.hh +++ b/include/ignition/common/SpecializedPlugin.hh @@ -103,7 +103,7 @@ namespace ignition template <class> friend class TemplatePluginPtr; /// \brief Default constructor - private: SpecializedPlugin(); + private: GZ_DEPRECATED(5) SpecializedPlugin(); /// \brief type is an empty placeholder class which is used by the private /// member functions to provide two overloads: a high-performance one for diff --git a/include/ignition/common/SpecializedPluginPtr.hh b/include/ignition/common/SpecializedPluginPtr.hh index 664744dc5..0a56dd3ab 100644 --- a/include/ignition/common/SpecializedPluginPtr.hh +++ b/include/ignition/common/SpecializedPluginPtr.hh @@ -66,12 +66,14 @@ namespace ignition /// put the macro IGN_COMMON_SPECIALIZE_INTERFACE(~) from /// ignition/common/PluginMacros.hh into a public location of its class /// definition. + /// \deprecated Use gz-plugin template <typename... SpecInterfaces> using SpecializedPluginPtr = TemplatePluginPtr< SpecializedPlugin<SpecInterfaces...> >; /// \brief This alias creates a specialized PluginPtr whose interfaces are /// all const-qualified. + /// \deprecated Use gz-plugin template <typename... SpecInterfaces> using ConstSpecializedPluginPtr = TemplatePluginPtr< const SpecializedPlugin<SpecInterfaces...> >; diff --git a/src/Plugin.cc b/src/Plugin.cc index 6fbfc21a6..54bf85e12 100644 --- a/src/Plugin.cc +++ b/src/Plugin.cc @@ -15,10 +15,12 @@ * */ +#include "gz/utils/SuppressWarning.hh" +#include "ignition/common/Console.hh" +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #include "ignition/common/Plugin.hh" #include "ignition/common/PluginInfo.hh" -#include "ignition/common/Console.hh" #include "PluginUtils.hh" namespace ignition @@ -184,3 +186,4 @@ namespace ignition } } } +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/src/PluginLoader.cc b/src/PluginLoader.cc index 230947407..401341e3e 100644 --- a/src/PluginLoader.cc +++ b/src/PluginLoader.cc @@ -23,12 +23,15 @@ #include <sstream> #include <unordered_map> +#include "gz/utils/SuppressWarning.hh" #include "ignition/common/Console.hh" +#include "ignition/common/StringUtils.hh" +#include "ignition/common/Util.hh" + +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #include "ignition/common/PluginInfo.hh" #include "ignition/common/PluginLoader.hh" #include "ignition/common/PluginPtr.hh" -#include "ignition/common/StringUtils.hh" -#include "ignition/common/Util.hh" #include "PluginUtils.hh" @@ -315,3 +318,4 @@ namespace ignition } } } +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/src/PluginLoader_TEST.cc b/src/PluginLoader_TEST.cc index 913a81451..fc7e69031 100644 --- a/src/PluginLoader_TEST.cc +++ b/src/PluginLoader_TEST.cc @@ -20,8 +20,9 @@ #include <algorithm> #include <fstream> +#include <gz/utils/SuppressWarning.hh> + #include "ignition/common/config.hh" -#include "ignition/common/PluginLoader.hh" #include "ignition/common/SystemPaths.hh" #include "ignition/common/TempDirectory.hh" @@ -36,6 +37,9 @@ class TestTempDirectory : public ignition::common::TempDirectory } }; +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#include "ignition/common/PluginLoader.hh" + ///////////////////////////////////////////////// TEST(PluginLoader, InitialNoInterfacesImplemented) { @@ -94,3 +98,4 @@ TEST(PluginLoader, InstantiateUnloadedPlugin) pm.Instantiate("plugin::that::is::not::loaded"); EXPECT_FALSE(plugin); } +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/src/PluginUtils.hh b/src/PluginUtils.hh index 4c1284592..9a65494e9 100644 --- a/src/PluginUtils.hh +++ b/src/PluginUtils.hh @@ -19,6 +19,7 @@ #define IGNITION_COMMON_PLUGINUTILS_HH_ #include <string> +#include "ignition/common/Export.hh" #include "ignition/common/StringUtils.hh" namespace ignition @@ -28,7 +29,7 @@ namespace ignition /// \brief Format the name to start with "::" /// \param[in] _name The name of a plugin or interface /// \return The input, but with "::" prepended if it was not there already. - inline std::string NormalizeName(const std::string &_name) + inline std::string IGN_DEPRECATED(5) NormalizeName(const std::string &_name) { std::string name = _name; if (!StartsWith(_name, "::")) diff --git a/src/PluginUtils_TEST.cc b/src/PluginUtils_TEST.cc index 5ef99d121..ee2690767 100644 --- a/src/PluginUtils_TEST.cc +++ b/src/PluginUtils_TEST.cc @@ -16,11 +16,13 @@ */ #include <gtest/gtest.h> #include <string> +#include "gz/utils/SuppressWarning.hh" #include "PluginUtils.hh" using namespace ignition; +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION ///////////////////////////////////////////////// TEST(PluginUtils, NormalizeName) { @@ -33,3 +35,4 @@ TEST(PluginUtils, NormalizeName) EXPECT_EQ("::ignition::math", common::NormalizeName("ignition::math")); EXPECT_EQ("::ignition::math", common::NormalizeName("::ignition::math")); } +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/test/integration/plugin.cc b/test/integration/plugin.cc index a8ee39e5d..a2fecdc4c 100644 --- a/test/integration/plugin.cc +++ b/test/integration/plugin.cc @@ -27,14 +27,17 @@ #include <iostream> #include "ignition/common/Console.hh" #include "ignition/common/Filesystem.hh" -#include "ignition/common/PluginLoader.hh" #include "ignition/common/SystemPaths.hh" -#include "ignition/common/PluginPtr.hh" -#include "ignition/common/SpecializedPluginPtr.hh" +#include "gz/utils/SuppressWarning.hh" #include "DummyPluginsPath.h" #include "plugins/DummyPlugins.hh" +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#include "ignition/common/PluginLoader.hh" +#include "ignition/common/PluginPtr.hh" +#include "ignition/common/SpecializedPluginPtr.hh" + ///////////////////////////////////////////////// TEST(PluginLoader, LoadBadPlugins) { @@ -434,3 +437,4 @@ TEST(PluginPtr, QueryInterfaceSharedPtr) SetSomeValues(setter); CheckSomeValues(getInt, getDouble, getName); } +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/test/performance/plugin_specialization.cc b/test/performance/plugin_specialization.cc index 9e33a7b87..a508154fc 100644 --- a/test/performance/plugin_specialization.cc +++ b/test/performance/plugin_specialization.cc @@ -20,15 +20,20 @@ #include <iomanip> #include <cmath> -#include "ignition/common/PluginLoader.hh" +#include "gz/utils/SuppressWarning.hh" + #include "ignition/common/SystemPaths.hh" -#include "ignition/common/SpecializedPluginPtr.hh" #include "ignition/common/Console.hh" #include "DummyPluginsPath.h" #include "plugins/DummyPlugins.hh" +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#include "ignition/common/PluginLoader.hh" +#include "ignition/common/SpecializedPluginPtr.hh" + + #define IGN_CREATE_SPEC_INTERFACE(name)\ class name { public: IGN_COMMON_SPECIALIZE_INTERFACE(name) }; @@ -227,3 +232,5 @@ TEST(PluginSpecialization, AccessTime) << "ns\n" << std::endl; } } + +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/test/plugins/BadPluginAPIVersionNew.cc b/test/plugins/BadPluginAPIVersionNew.cc index 681feca0e..12ca82911 100644 --- a/test/plugins/BadPluginAPIVersionNew.cc +++ b/test/plugins/BadPluginAPIVersionNew.cc @@ -17,6 +17,9 @@ #include <limits> #include "ignition/common/PluginMacros.hh" +#include "gz/utils/SuppressWarning.hh" + +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION extern "C" { std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoSize = @@ -35,3 +38,5 @@ extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( return 0u; } +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + diff --git a/test/plugins/BadPluginAPIVersionOld.cc b/test/plugins/BadPluginAPIVersionOld.cc index 342286789..9fad92792 100644 --- a/test/plugins/BadPluginAPIVersionOld.cc +++ b/test/plugins/BadPluginAPIVersionOld.cc @@ -16,6 +16,9 @@ */ #include "ignition/common/PluginMacros.hh" +#include "gz/utils/SuppressWarning.hh" + +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION extern "C" { std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoSize = @@ -33,3 +36,4 @@ extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( return 0u; } +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/test/plugins/BadPluginAlign.cc b/test/plugins/BadPluginAlign.cc index 2d3607158..78d12a3c4 100644 --- a/test/plugins/BadPluginAlign.cc +++ b/test/plugins/BadPluginAlign.cc @@ -16,6 +16,9 @@ */ #include "ignition/common/PluginMacros.hh" +#include "gz/utils/SuppressWarning.hh" + +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION extern "C" { std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoSize = @@ -34,3 +37,4 @@ extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( return 0u; } +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/test/plugins/BadPluginSize.cc b/test/plugins/BadPluginSize.cc index 82e5deb54..ede97286f 100644 --- a/test/plugins/BadPluginSize.cc +++ b/test/plugins/BadPluginSize.cc @@ -16,6 +16,9 @@ */ #include "ignition/common/PluginMacros.hh" +#include "gz/utils/SuppressWarning.hh" + +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION extern "C" { std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoSize = @@ -34,3 +37,4 @@ extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( return 0u; } +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/test/plugins/DummyPlugins.cc b/test/plugins/DummyPlugins.cc index 3f10594df..91c603984 100644 --- a/test/plugins/DummyPlugins.cc +++ b/test/plugins/DummyPlugins.cc @@ -16,8 +16,10 @@ */ #include "ignition/common/PluginMacros.hh" +#include "gz/utils/SuppressWarning.hh" #include "DummyPlugins.hh" +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION namespace test { @@ -87,3 +89,5 @@ IGN_COMMON_BEGIN_ADDING_PLUGINS IGN_COMMON_ADD_PLUGIN(test::util::DummyMultiPlugin, test::util::DummySetterBase) IGN_COMMON_ADD_PLUGIN(test::util::DummyMultiPlugin, test::util::DummyGetSomeObjectBase) IGN_COMMON_FINISH_ADDING_PLUGINS + +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/test/static_assertions/plugin_bad_const_assignment.cc b/test/static_assertions/plugin_bad_const_assignment.cc index ddab315db..46282a6f1 100644 --- a/test/static_assertions/plugin_bad_const_assignment.cc +++ b/test/static_assertions/plugin_bad_const_assignment.cc @@ -15,6 +15,9 @@ * */ +#include <gz/utils/SuppressWarning.hh> + +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #include "ignition/common/PluginPtr.hh" int main() @@ -23,3 +26,4 @@ int main() ignition::common::PluginPtr ptr; ptr = const_ptr; } +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/test/static_assertions/plugin_bad_const_construct.cc b/test/static_assertions/plugin_bad_const_construct.cc index 2d7375234..50757befe 100644 --- a/test/static_assertions/plugin_bad_const_construct.cc +++ b/test/static_assertions/plugin_bad_const_construct.cc @@ -15,9 +15,13 @@ * */ +#include <gz/utils/SuppressWarning.hh> + +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #include "ignition/common/PluginPtr.hh" int main() { ignition::common::PluginPtr ptr{ignition::common::ConstPluginPtr()}; } +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/test/static_assertions/plugin_no_base_class.cc b/test/static_assertions/plugin_no_base_class.cc index d1a7622e9..62958c0b5 100644 --- a/test/static_assertions/plugin_no_base_class.cc +++ b/test/static_assertions/plugin_no_base_class.cc @@ -15,6 +15,10 @@ * */ +#include <gz/utils/SuppressWarning.hh> + +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION + #include "ignition/common/PluginMacros.hh" class A @@ -30,3 +34,4 @@ class NotBase IGN_COMMON_REGISTER_SINGLE_PLUGIN(A, NotBase) +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/test/static_assertions/plugin_not_fully_qualified_base.cc b/test/static_assertions/plugin_not_fully_qualified_base.cc index 2e16293ac..90d402519 100644 --- a/test/static_assertions/plugin_not_fully_qualified_base.cc +++ b/test/static_assertions/plugin_not_fully_qualified_base.cc @@ -15,6 +15,10 @@ * */ +#include <gz/utils/SuppressWarning.hh> + +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION + #include "ignition/common/PluginMacros.hh" namespace ns @@ -36,3 +40,5 @@ class A : public Base using ns::Base; IGN_COMMON_REGISTER_SINGLE_PLUGIN(ns::A, Base) + +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/test/static_assertions/plugin_not_fully_qualified_class.cc b/test/static_assertions/plugin_not_fully_qualified_class.cc index 7e0d65572..4de493564 100644 --- a/test/static_assertions/plugin_not_fully_qualified_class.cc +++ b/test/static_assertions/plugin_not_fully_qualified_class.cc @@ -15,6 +15,9 @@ * */ +#include <gz/utils/SuppressWarning.hh> + +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #include "ignition/common/PluginMacros.hh" namespace ns @@ -36,3 +39,5 @@ class A : public Base using ns::A; IGN_COMMON_REGISTER_SINGLE_PLUGIN(A, ns::Base) + +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/test/static_assertions/plugin_not_global_ns.cc b/test/static_assertions/plugin_not_global_ns.cc index e97ed0738..4250c4055 100644 --- a/test/static_assertions/plugin_not_global_ns.cc +++ b/test/static_assertions/plugin_not_global_ns.cc @@ -14,6 +14,9 @@ * limitations under the License. * */ +#include <gz/utils/SuppressWarning.hh> + +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #include "ignition/common/PluginMacros.hh" @@ -34,4 +37,4 @@ class A : public Base IGN_COMMON_REGISTER_SINGLE_PLUGIN(ns::A, ns::Base) } - +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION diff --git a/test/static_assertions/plugin_wrong_base_class.cc b/test/static_assertions/plugin_wrong_base_class.cc index 1134a3641..1816b1b62 100644 --- a/test/static_assertions/plugin_wrong_base_class.cc +++ b/test/static_assertions/plugin_wrong_base_class.cc @@ -15,6 +15,10 @@ * */ +#include <gz/utils/SuppressWarning.hh> + +IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION + #include "ignition/common/PluginMacros.hh" namespace ns @@ -41,3 +45,4 @@ class A : public Base IGN_COMMON_REGISTER_SINGLE_PLUGIN(ns::A, ns::WrongBase) +IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION From c0215820a5a0e0eb55d2a279553b80df359d50a6 Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Sat, 28 May 2022 14:08:10 -0700 Subject: [PATCH 166/219] ign -> gz: namespaces and logging functions (#356) Signed-off-by: methylDragon <methylDragon@gmail.com> Co-authored-by: Louise Poubel <louise@openrobotics.org> --- CONTRIBUTING.md | 2 +- Changelog.md | 338 ++++++++-------- Migration.md | 20 +- README.md | 28 +- api.md.in | 2 +- av/include/gz/common/AudioDecoder.hh | 4 +- av/include/gz/common/HWEncoder.hh | 6 +- av/include/gz/common/HWVideo.hh | 4 +- av/include/gz/common/Video.hh | 4 +- av/include/gz/common/VideoEncoder.hh | 4 +- av/include/gz/common/av/Util.hh | 2 +- av/include/gz/common/ffmpeg_inc.hh | 10 +- av/include/ignition/common/AudioDecoder.hh | 1 + av/include/ignition/common/HWEncoder.hh | 1 + av/include/ignition/common/HWVideo.hh | 1 + av/include/ignition/common/Video.hh | 1 + av/include/ignition/common/VideoEncoder.hh | 1 + av/include/ignition/common/av.hh | 1 + av/include/ignition/common/av/Export.hh | 1 + av/include/ignition/common/av/Util.hh | 1 + .../ignition/common/av/detail/Export.hh | 1 + av/include/ignition/common/ffmpeg_inc.hh | 1 + av/src/AudioDecoder.cc | 44 +- av/src/AudioDecoder_TEST.cc | 8 +- av/src/HWEncoder.cc | 50 +-- av/src/Util.cc | 14 +- av/src/Video.cc | 40 +- av/src/VideoEncoder.cc | 68 ++-- av/src/VideoEncoder_TEST.cc | 12 +- av/src/ffmpeg_inc.cc | 4 +- events/include/gz/common/Event.hh | 6 +- events/include/gz/common/KeyEvent.hh | 4 +- events/include/gz/common/MouseEvent.hh | 20 +- events/include/gz/common/events/Types.hh | 2 +- events/include/ignition/common/Event.hh | 1 + events/include/ignition/common/KeyEvent.hh | 1 + events/include/ignition/common/MouseEvent.hh | 1 + events/include/ignition/common/events.hh | 1 + .../include/ignition/common/events/Export.hh | 1 + .../include/ignition/common/events/Types.hh | 1 + .../ignition/common/events/detail/Export.hh | 1 + events/src/Event.cc | 8 +- events/src/Event_TEST.cc | 8 +- events/src/KeyEvent.cc | 6 +- events/src/KeyEvent_TEST.cc | 4 +- events/src/MouseEvent.cc | 32 +- events/src/MouseEvent_TEST.cc | 40 +- examples/README.md | 6 +- examples/console.cc | 18 +- examples/events.cc | 2 +- examples/logging_performance.cc | 4 +- examples/profiler.cc | 8 +- .../include/gz/common/geospatial/Dem.hh | 16 +- .../gz/common/geospatial/HeightmapData.hh | 8 +- .../gz/common/geospatial/ImageHeightmap.hh | 16 +- .../include/ignition/common/geospatial.hh | 1 + .../include/ignition/common/geospatial/Dem.hh | 1 + .../ignition/common/geospatial/Export.hh | 1 + .../common/geospatial/HeightmapData.hh | 1 + .../common/geospatial/ImageHeightmap.hh | 1 + .../common/geospatial/detail/Export.hh | 1 + geospatial/src/Dem.cc | 72 ++-- geospatial/src/Dem_TEST.cc | 22 +- geospatial/src/ImageHeightmap.cc | 44 +- geospatial/src/ImageHeightmap_TEST.cc | 14 +- graphics/include/gz/common/Animation.hh | 10 +- graphics/include/gz/common/BVHLoader.hh | 4 +- graphics/include/gz/common/ColladaExporter.hh | 4 +- graphics/include/gz/common/ColladaLoader.hh | 4 +- graphics/include/gz/common/GTSMeshUtils.hh | 12 +- graphics/include/gz/common/Image.hh | 6 +- graphics/include/gz/common/KeyFrame.hh | 8 +- graphics/include/gz/common/Material.hh | 6 +- graphics/include/gz/common/Mesh.hh | 26 +- graphics/include/gz/common/MeshCSG.hh | 6 +- graphics/include/gz/common/MeshExporter.hh | 4 +- graphics/include/gz/common/MeshLoader.hh | 4 +- graphics/include/gz/common/MeshManager.hh | 48 +-- graphics/include/gz/common/NodeAnimation.hh | 6 +- graphics/include/gz/common/NodeTransform.hh | 4 +- graphics/include/gz/common/OBJLoader.hh | 4 +- graphics/include/gz/common/Pbr.hh | 4 +- graphics/include/gz/common/STLLoader.hh | 4 +- graphics/include/gz/common/SVGLoader.hh | 16 +- graphics/include/gz/common/Skeleton.hh | 4 +- .../include/gz/common/SkeletonAnimation.hh | 4 +- graphics/include/gz/common/SkeletonNode.hh | 4 +- graphics/include/gz/common/SubMesh.hh | 60 +-- graphics/include/gz/common/graphics/Types.hh | 2 +- graphics/include/ignition/common/Animation.hh | 1 + graphics/include/ignition/common/BVHLoader.hh | 1 + .../ignition/common/ColladaExporter.hh | 1 + .../include/ignition/common/ColladaLoader.hh | 1 + .../include/ignition/common/GTSMeshUtils.hh | 1 + graphics/include/ignition/common/Image.hh | 1 + graphics/include/ignition/common/KeyFrame.hh | 1 + graphics/include/ignition/common/Material.hh | 1 + graphics/include/ignition/common/Mesh.hh | 1 + graphics/include/ignition/common/MeshCSG.hh | 1 + .../include/ignition/common/MeshExporter.hh | 1 + .../include/ignition/common/MeshLoader.hh | 1 + .../include/ignition/common/MeshManager.hh | 1 + .../include/ignition/common/NodeAnimation.hh | 1 + .../include/ignition/common/NodeTransform.hh | 1 + graphics/include/ignition/common/OBJLoader.hh | 1 + graphics/include/ignition/common/Pbr.hh | 1 + graphics/include/ignition/common/STLLoader.hh | 1 + graphics/include/ignition/common/SVGLoader.hh | 1 + graphics/include/ignition/common/Skeleton.hh | 1 + .../ignition/common/SkeletonAnimation.hh | 1 + .../include/ignition/common/SkeletonNode.hh | 1 + graphics/include/ignition/common/SubMesh.hh | 1 + graphics/include/ignition/common/graphics.hh | 1 + .../ignition/common/graphics/Export.hh | 1 + .../include/ignition/common/graphics/Types.hh | 1 + .../ignition/common/graphics/detail/Export.hh | 1 + graphics/src/Animation.cc | 30 +- graphics/src/Animation_TEST.cc | 12 +- graphics/src/BVHLoader.cc | 16 +- graphics/src/CMakeLists.txt | 2 +- graphics/src/ColladaExporter.cc | 46 +-- graphics/src/ColladaExporter_TEST.cc | 16 +- graphics/src/ColladaLoader.cc | 380 +++++++++--------- graphics/src/ColladaLoader_TEST.cc | 26 +- graphics/src/GTSMeshUtils.cc | 20 +- graphics/src/GTSMeshUtils_TEST.cc | 46 +-- graphics/src/Image.cc | 30 +- graphics/src/Image_TEST.cc | 12 +- graphics/src/KeyFrame.cc | 12 +- graphics/src/Material.cc | 16 +- graphics/src/Material_TEST.cc | 10 +- graphics/src/Mesh.cc | 70 ++-- graphics/src/MeshCSG.cc | 24 +- graphics/src/MeshExporter.cc | 4 +- graphics/src/MeshManager.cc | 218 +++++----- graphics/src/MeshManager_TEST.cc | 160 ++++---- graphics/src/Mesh_TEST.cc | 14 +- graphics/src/NodeAnimation.cc | 14 +- graphics/src/NodeTransform.cc | 10 +- graphics/src/OBJLoader.cc | 32 +- graphics/src/OBJLoader_TEST.cc | 28 +- graphics/src/Pbr.cc | 16 +- graphics/src/Pbr_TEST.cc | 70 ++-- graphics/src/STLLoader.cc | 30 +- graphics/src/SVGLoader.cc | 198 ++++----- graphics/src/SVGLoader_TEST.cc | 46 +-- graphics/src/Skeleton.cc | 18 +- graphics/src/SkeletonAnimation.cc | 14 +- graphics/src/SkeletonNode.cc | 14 +- graphics/src/SubMesh.cc | 146 +++---- graphics/src/SubMesh_TEST.cc | 22 +- graphics/src/tiny_obj_loader.h | 14 +- graphics/src/tinyxml2/tinyxml2.cpp | 2 +- graphics/src/tinyxml2/tinyxml2.h | 2 +- include/gz/common/Base64.hh | 4 +- include/gz/common/Battery.hh | 4 +- include/gz/common/Console.hh | 39 +- include/gz/common/EnumIface.hh | 4 +- include/gz/common/Filesystem.hh | 58 +-- include/gz/common/FlagSet.hh | 12 +- include/gz/common/MaterialDensity.hh | 4 +- include/gz/common/MovingWindowFilter.hh | 2 +- include/gz/common/SignalHandler.hh | 6 +- include/gz/common/SingletonT.hh | 2 +- include/gz/common/StringUtils.hh | 16 +- include/gz/common/SystemPaths.hh | 10 +- include/gz/common/TempDirectory.hh | 10 +- include/gz/common/TemplateHelpers.hh | 2 +- include/gz/common/Timer.hh | 6 +- include/gz/common/URI.hh | 12 +- include/gz/common/Util.hh | 66 +-- include/gz/common/Uuid.hh | 6 +- include/gz/common/WorkerPool.hh | 4 +- include/gz/common/config.hh.in | 34 +- include/gz/common/detail/TemplateHelpers.hh | 2 +- include/ignition/common.hh | 1 + include/ignition/common/Base64.hh | 1 + include/ignition/common/Battery.hh | 1 + include/ignition/common/Console.hh | 1 + include/ignition/common/EnumIface.hh | 1 + include/ignition/common/Export.hh | 1 + include/ignition/common/Filesystem.hh | 1 + include/ignition/common/FlagSet.hh | 1 + include/ignition/common/MaterialDensity.hh | 1 + include/ignition/common/MovingWindowFilter.hh | 1 + include/ignition/common/Plugin.hh | 8 +- include/ignition/common/PluginInfo.hh | 9 +- include/ignition/common/PluginLoader.hh | 8 +- include/ignition/common/PluginMacros.hh | 5 +- include/ignition/common/PluginPtr.hh | 10 +- include/ignition/common/SignalHandler.hh | 1 + include/ignition/common/SingletonT.hh | 1 + include/ignition/common/SpecializedPlugin.hh | 9 +- .../ignition/common/SpecializedPluginPtr.hh | 8 +- include/ignition/common/StringUtils.hh | 1 + include/ignition/common/SuppressWarning.hh | 1 + include/ignition/common/SystemPaths.hh | 1 + include/ignition/common/TempDirectory.hh | 1 + include/ignition/common/TemplateHelpers.hh | 1 + include/ignition/common/Timer.hh | 1 + include/ignition/common/URI.hh | 1 + include/ignition/common/Util.hh | 1 + include/ignition/common/Uuid.hh | 1 + include/ignition/common/WorkerPool.hh | 1 + include/ignition/common/config.hh | 26 ++ include/ignition/common/detail/Export.hh | 1 + include/ignition/common/detail/Plugin.hh | 8 +- .../ignition/common/detail/PluginLoader.hh | 8 +- .../ignition/common/detail/PluginMacros.hh | 22 +- include/ignition/common/detail/PluginPtr.hh | 12 +- .../common/detail/SpecializedPlugin.hh | 10 +- .../ignition/common/detail/TemplateHelpers.hh | 1 + profiler/include/gz/common/Profiler.hh | 18 +- profiler/include/ignition/common/Profiler.hh | 1 + .../ignition/common/profiler/Export.hh | 1 + .../ignition/common/profiler/detail/Export.hh | 1 + profiler/src/Profiler.cc | 10 +- profiler/src/ProfilerImpl.hh | 8 +- profiler/src/Profiler_Disabled_TEST.cc | 6 +- profiler/src/Profiler_Remotery_TEST.cc | 6 +- profiler/src/RemoteryProfilerImpl.cc | 12 +- profiler/src/RemoteryProfilerImpl.hh | 8 +- src/Base64.cc | 4 +- src/Base64_TEST.cc | 6 +- src/Battery.cc | 16 +- src/Battery_TEST.cc | 6 +- src/CMakeLists.txt | 4 +- src/Console.cc | 16 +- src/Console_TEST.cc | 196 ++++----- src/DirIter.cc | 8 +- src/EnumIface_TEST.cc | 6 +- src/Filesystem.cc | 80 ++-- src/Filesystem_TEST.cc | 26 +- src/FlagSet_TEST.cc | 40 +- src/MaterialDensity.cc | 6 +- src/MaterialDensity_TEST.cc | 6 +- src/MovingWindowFilter_TEST.cc | 14 +- src/Plugin.cc | 8 +- src/PluginLoader.cc | 28 +- src/PluginLoader_TEST.cc | 34 +- src/PluginUtils.hh | 9 +- src/PluginUtils_TEST.cc | 11 +- src/PrintWindowsSystemWarning.hh | 12 +- src/SignalHandler.cc | 16 +- src/SignalHandler_TEST.cc | 6 +- src/StringUtils.cc | 4 +- src/StringUtils_TEST.cc | 4 +- src/SystemPaths.cc | 46 +-- src/SystemPaths_TEST.cc | 86 ++-- src/TempDirectory.cc | 20 +- src/TempDirectory_TEST.cc | 92 ++--- src/TemplateHelpers_TEST.cc | 4 +- src/Timer.cc | 8 +- src/Timer_TEST.cc | 14 +- src/URI.cc | 52 +-- src/URI_TEST.cc | 8 +- src/Util.cc | 94 ++--- src/Util_TEST.cc | 24 +- src/Uuid.cc | 4 +- src/Uuid_TEST.cc | 4 +- src/WorkerPool.cc | 8 +- src/WorkerPool_TEST.cc | 16 +- test/integration/CMakeLists.txt | 2 +- test/integration/console.cc | 22 +- test/integration/deprecated_TEST.cc | 32 ++ test/integration/encoder_timing.cc | 6 +- test/integration/mesh.cc | 34 +- test/integration/plugin.cc | 82 ++-- test/integration/video_encoder.cc | 16 +- test/performance/CMakeLists.txt | 2 +- test/performance/plugin_specialization.cc | 26 +- test/plugins/BadPluginAPIVersionNew.cc | 7 +- test/plugins/BadPluginAPIVersionOld.cc | 8 +- test/plugins/BadPluginAlign.cc | 10 +- test/plugins/BadPluginSize.cc | 10 +- test/plugins/CMakeLists.txt | 22 +- test/plugins/DummyPlugins.cc | 4 + test/plugins/DummyPlugins.hh | 9 +- .../plugin_bad_const_assignment.cc | 8 +- .../plugin_bad_const_construct.cc | 6 +- .../static_assertions/plugin_no_base_class.cc | 3 + .../plugin_not_fully_qualified_base.cc | 3 + .../plugin_not_fully_qualified_class.cc | 4 + .../static_assertions/plugin_not_global_ns.cc | 2 + .../plugin_wrong_base_class.cc | 2 + .../gz/common/testing/AutoLogFixture.hh | 4 +- .../gz/common/testing/BazelTestPaths.hh | 10 +- .../gz/common/testing/CMakeTestPaths.hh | 10 +- .../include/gz/common/testing/TestPaths.hh | 24 +- testing/include/gz/common/testing/Utils.hh | 6 +- .../common/testing/detail/AutoLogFixture.hh | 20 +- testing/include/ignition/common/testing.hh | 1 + .../ignition/common/testing/AutoLogFixture.hh | 1 + .../ignition/common/testing/BazelTestPaths.hh | 1 + .../ignition/common/testing/CMakeTestPaths.hh | 1 + .../include/ignition/common/testing/Export.hh | 1 + .../ignition/common/testing/TestPaths.hh | 1 + .../include/ignition/common/testing/Utils.hh | 1 + .../common/testing/detail/AutoLogFixture.hh | 1 + .../ignition/common/testing/detail/Export.hh | 1 + testing/src/AutoLogFixture_TEST.cc | 10 +- testing/src/BazelTestPaths.cc | 12 +- testing/src/BazelTestPaths_TEST.cc | 18 +- testing/src/CMakeTestPaths.cc | 8 +- testing/src/CMakeTestPaths_TEST.cc | 20 +- testing/src/TestPaths.cc | 20 +- testing/src/Utils.cc | 6 +- testing/src/Utils_TEST.cc | 8 +- tutorials/hw-encoding.md | 10 +- tutorials/install.md | 24 +- tutorials/profiler.md | 10 +- 311 files changed, 2778 insertions(+), 2526 deletions(-) create mode 100644 test/integration/deprecated_TEST.cc diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 147239ce5..a1c121ea4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1 +1 @@ -See the [Ignition Robotics contributing guide](https://ignitionrobotics.org/docs/all/contributing). +See the [Gazebo contributing guide](https://gazebosim.org/docs/all/contributing). diff --git a/Changelog.md b/Changelog.md index 433cd7664..21832841f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,170 +1,170 @@ -## Ignition Common 5.x +## Gazebo Common 5.x -## Ignition Common 5.0.0 (20XX-XX-XX) +## Gazebo Common 5.0.0 (20XX-XX-XX) -## Ignition Common 4.x +## Gazebo Common 4.x -## Ignition Common 4.5.0 (2022-01-12) +## Gazebo Common 4.5.0 (2022-01-12) 1. Fixed crash when a Collada file has an empty normal vector - * [Pull request #280](https://github.com/ignitionrobotics/ign-common/pull/280) + * [Pull request #280](https://github.com/gazebosim/gz-common/pull/280) 1. Support 16 bit heightmaps - * [Pull request #266](https://github.com/ignitionrobotics/ign-common/pull/266) + * [Pull request #266](https://github.com/gazebosim/gz-common/pull/266) 1. Fix bug in URIPath assignment operator - * [Pull request #275](https://github.com/ignitionrobotics/ign-common/pull/275) + * [Pull request #275](https://github.com/gazebosim/gz-common/pull/275) 1. Use `libexec` to install binary `remotery_vis` - * [Pull request #272](https://github.com/ignitionrobotics/ign-common/pull/272) + * [Pull request #272](https://github.com/gazebosim/gz-common/pull/272) 1. Normalize normal vectors from OBJ. - * [Pull request #269](https://github.com/ignitionrobotics/ign-common/pull/269) + * [Pull request #269](https://github.com/gazebosim/gz-common/pull/269) 1. Synchronize console writes - * [Pull request #227](https://github.com/ignitionrobotics/ign-common/pull/227) + * [Pull request #227](https://github.com/gazebosim/gz-common/pull/227) 1. Added method to remove meshes from the `MeshManager` - * [Pull request #222](https://github.com/ignitionrobotics/ign-common/pull/222) + * [Pull request #222](https://github.com/gazebosim/gz-common/pull/222) 1. Fixed macOS symbol in `common::Profiler` - * [Pull request #262](https://github.com/ignitionrobotics/ign-common/pull/262) + * [Pull request #262](https://github.com/gazebosim/gz-common/pull/262) 1. Fix skip logic for integration tests - * [Pull request #264](https://github.com/ignitionrobotics/ign-common/pull/264) + * [Pull request #264](https://github.com/gazebosim/gz-common/pull/264) 1. Use direct evaluation for SKIP_av. - * [Pull request #250](https://github.com/ignitionrobotics/ign-common/pull/250) + * [Pull request #250](https://github.com/gazebosim/gz-common/pull/250) -## Ignition Common 4.4.0 (2021-10-15) +## Gazebo Common 4.4.0 (2021-10-15) 1. Add support for animation tension - * [Pull request #256](https://github.com/ignitionrobotics/ign-common/pull/256) + * [Pull request #256](https://github.com/gazebosim/gz-common/pull/256) -## Ignition Common 4.3.0 (2021-09-27) +## Gazebo Common 4.3.0 (2021-09-27) 1. Remove ign-utils from TempDirectory - * [Pull request #248](https://github.com/ignitionrobotics/ign-common/pull/248) + * [Pull request #248](https://github.com/gazebosim/gz-common/pull/248) 1. Add functions and objects for Temporary Directories - * [Pull request #244](https://github.com/ignitionrobotics/ign-common/pull/244) + * [Pull request #244](https://github.com/gazebosim/gz-common/pull/244) 1. Fix memory corruption & leaks in Image - * [Pull request #240](https://github.com/ignitionrobotics/ign-common/pull/240) + * [Pull request #240](https://github.com/gazebosim/gz-common/pull/240) 1. Fix a typo in VideoEncoder_TEST. - * [Pull request #231](https://github.com/ignitionrobotics/ign-common/pull/231) + * [Pull request #231](https://github.com/gazebosim/gz-common/pull/231) 1. Fix segfault caused by destruction order of Event and Connection - * [Pull request #234](https://github.com/ignitionrobotics/ign-common/pull/234) + * [Pull request #234](https://github.com/gazebosim/gz-common/pull/234) 1. Infrastructure - * [Pull request #62](https://github.com/ignitionrobotics/ign-common/pull/62) - * [Pull request #55](https://github.com/ignitionrobotics/ign-common/pull/55) - * [Pull request #241](https://github.com/ignitionrobotics/ign-common/pull/241) + * [Pull request #62](https://github.com/gazebosim/gz-common/pull/62) + * [Pull request #55](https://github.com/gazebosim/gz-common/pull/55) + * [Pull request #241](https://github.com/gazebosim/gz-common/pull/241) 1. Documentation - * [Pull request #252](https://github.com/ignitionrobotics/ign-common/pull/252) - * [Pull request #253](https://github.com/ignitionrobotics/ign-common/pull/253) + * [Pull request #252](https://github.com/gazebosim/gz-common/pull/252) + * [Pull request #253](https://github.com/gazebosim/gz-common/pull/253) -## Ignition Common 4.2.0 (2021-08-02) +## Gazebo Common 4.2.0 (2021-08-02) 1. Export lights to dae - * [Pull request #228](https://github.com/ignitionrobotics/ign-common/pull/228) + * [Pull request #228](https://github.com/gazebosim/gz-common/pull/228) 1. Add cstring for std::memcpy - * [Pull request #230](https://github.com/ignitionrobotics/ign-common/pull/230) + * [Pull request #230](https://github.com/gazebosim/gz-common/pull/230) -## Ignition Common 4.1.0 (2021-06-22) +## Gazebo Common 4.1.0 (2021-06-22) 1. Make KeyEvent rule-of-five compliant - * [Pull request #224](https://github.com/ignitionrobotics/ign-common/pull/224) + * [Pull request #224](https://github.com/gazebosim/gz-common/pull/224) 1. Fix `av_*` API usage for deprecations - * [Pull request #220](https://github.com/ignitionrobotics/ign-common/pull/220) + * [Pull request #220](https://github.com/gazebosim/gz-common/pull/220) 1. Set project-wide standard to C++17 - * [Pull request #221](https://github.com/ignitionrobotics/ign-common/pull/221) + * [Pull request #221](https://github.com/gazebosim/gz-common/pull/221) 1. Remove `CMAKE_CXX_FLAGS` from test targets - * [Pull request #214](https://github.com/ignitionrobotics/ign-common/pull/214) + * [Pull request #214](https://github.com/gazebosim/gz-common/pull/214) 1. Support loading PBR textures in OBJLoader - * [Pull request #216](https://github.com/ignitionrobotics/ign-common/pull/216) + * [Pull request #216](https://github.com/gazebosim/gz-common/pull/216) 1. Remove `tools/code_check` and update codecov - * [Pull request #219](https://github.com/ignitionrobotics/ign-common/pull/219) + * [Pull request #219](https://github.com/gazebosim/gz-common/pull/219) 1. Port codecov to new configuration - * [Pull request #212](https://github.com/ignitionrobotics/ign-common/pull/212) + * [Pull request #212](https://github.com/gazebosim/gz-common/pull/212) 1. Fix loading collada files with multiple texcoord sets using the same offset - * [Pull request #208](https://github.com/ignitionrobotics/ign-common/pull/208) + * [Pull request #208](https://github.com/gazebosim/gz-common/pull/208) 1. Add function to convert single channel image data to RGB image - * [Pull request #205](https://github.com/ignitionrobotics/ign-common/pull/205) + * [Pull request #205](https://github.com/gazebosim/gz-common/pull/205) 1. Remove ColladaExporter path constraint - * [Pull request #204](https://github.com/ignitionrobotics/ign-common/pull/204) + * [Pull request #204](https://github.com/gazebosim/gz-common/pull/204) 1. Avoid duplication of / in joinPaths (Windows) - * [Pull request #201](https://github.com/ignitionrobotics/ign-common/pull/201) - * [Pull request #209](https://github.com/ignitionrobotics/ign-common/pull/209) - * [Pull request #215](https://github.com/ignitionrobotics/ign-common/pull/215) + * [Pull request #201](https://github.com/gazebosim/gz-common/pull/201) + * [Pull request #209](https://github.com/gazebosim/gz-common/pull/209) + * [Pull request #215](https://github.com/gazebosim/gz-common/pull/215) 1. Fixed colladaLoader on Windows - * [Pull request #200](https://github.com/ignitionrobotics/ign-common/pull/200) + * [Pull request #200](https://github.com/gazebosim/gz-common/pull/200) 1. Improved Windows support - * [Pull request #197](https://github.com/ignitionrobotics/ign-common/pull/197) + * [Pull request #197](https://github.com/gazebosim/gz-common/pull/197) 1. Function to serialize compressed image to buffer - * [Pull request #139](https://github.com/ignitionrobotics/ign-common/pull/139) + * [Pull request #139](https://github.com/gazebosim/gz-common/pull/139) 1. Fixed tutorial link - * [Pull request #194](https://github.com/ignitionrobotics/ign-common/pull/194) + * [Pull request #194](https://github.com/gazebosim/gz-common/pull/194) 1. Use matching malloc/free for AudioDecoder. - * [Pull request #192](https://github.com/ignitionrobotics/ign-common/pull/192) + * [Pull request #192](https://github.com/gazebosim/gz-common/pull/192) 1. Add bazel buildsystem support - * [Pull request #123](https://github.com/ignitionrobotics/ign-common/pull/123) + * [Pull request #123](https://github.com/gazebosim/gz-common/pull/123) >>>>>>> ign-common4 -## Ignition Common 4.0.0 (2021-03-30) +## Gazebo Common 4.0.0 (2021-03-30) 1. Include windows instructions in examples README.md - * [Pull request #190](https://github.com/ignitionrobotics/ign-common/pull/190) + * [Pull request #190](https://github.com/gazebosim/gz-common/pull/190) 1. Fix crash when using BVH animations - * [Pull request #188](https://github.com/ignitionrobotics/ign-common/pull/188) + * [Pull request #188](https://github.com/gazebosim/gz-common/pull/188) 1. Rotate capsule to Z-up - * [Pull request #186](https://github.com/ignitionrobotics/ign-common/pull/186) + * [Pull request #186](https://github.com/gazebosim/gz-common/pull/186) 1. Add implementation pointer to ign-common classes - * [Pull request #163](https://github.com/ignitionrobotics/ign-common/pull/163) + * [Pull request #163](https://github.com/gazebosim/gz-common/pull/163) 1. Cleanup and add implementation pointer to Animation classes - * [Pull request #160](https://github.com/ignitionrobotics/ign-common/pull/160) + * [Pull request #160](https://github.com/gazebosim/gz-common/pull/160) 1. Install the profiler in a version-safe manner - * [Pull request #170](https://github.com/ignitionrobotics/ign-common/pull/170) + * [Pull request #170](https://github.com/gazebosim/gz-common/pull/170) 1. Restore support for model:// URIs - * [Pull request #172](https://github.com/ignitionrobotics/ign-common/pull/172) + * [Pull request #172](https://github.com/gazebosim/gz-common/pull/172) 1. Deprecated common::Time - * [Pull request #90](https://github.com/ignitionrobotics/ign-common/pull/90) + * [Pull request #90](https://github.com/gazebosim/gz-common/pull/90) 1. Update codeowners - * [Pull request #88](https://github.com/ignitionrobotics/ign-common/pull/88) + * [Pull request #88](https://github.com/gazebosim/gz-common/pull/88) 1. Workflow updates - * [Pull request #64](https://github.com/ignitionrobotics/ign-common/pull/64) + * [Pull request #64](https://github.com/gazebosim/gz-common/pull/64) 1. Update BitBucket Links - * [Pull request #58](https://github.com/ignitionrobotics/ign-common/pull/58) + * [Pull request #58](https://github.com/gazebosim/gz-common/pull/58) 1. Corrected `BAYER_RGGR8` to `BAYER_BGGR8` in `PixelFormatName` and `PixelFormatType` located in `graphics/include/ignition/common/Image.hh`. @@ -174,242 +174,242 @@ be found [here](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Generic_syntax). This update also caused some formally valid syntax to become invalid, and some formally invalid syntax to become valid. See the migration guide. * [BitBucket pull request xxx](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/213) -## Ignition Common 3.x +## Gazebo Common 3.x -## Ignition Common 3.X.X +## Gazebo Common 3.X.X -## Ignition Common 3.14.0 (2021-10-12) +## Gazebo Common 3.14.0 (2021-10-12) 1. Support loading PBR textures in OBJLoader - * [Pull request #216](https://github.com/ignitionrobotics/ign-common/pull/216) + * [Pull request #216](https://github.com/gazebosim/gz-common/pull/216) 1. Remove CMAKE_CXX_FLAGS from test targetrs - * [Pull request #214](https://github.com/ignitionrobotics/ign-common/pull/214) + * [Pull request #214](https://github.com/gazebosim/gz-common/pull/214) 1. Set project-wide standard to C++17 - * [Pull request #221](https://github.com/ignitionrobotics/ign-common/pull/221) + * [Pull request #221](https://github.com/gazebosim/gz-common/pull/221) 1. Fix av_* API usage for deprecations - * [Pull request #220](https://github.com/ignitionrobotics/ign-common/pull/220) + * [Pull request #220](https://github.com/gazebosim/gz-common/pull/220) 1. Make KeyEvent rule-of-five compliant - * [Pull request #224](https://github.com/ignitionrobotics/ign-common/pull/224) + * [Pull request #224](https://github.com/gazebosim/gz-common/pull/224) 1. Fix segfault caused by destructionb order of Event and Connection - * [Pull request #234](https://github.com/ignitionrobotics/ign-common/pull/234) + * [Pull request #234](https://github.com/gazebosim/gz-common/pull/234) 1. Fix a typo in VideoEncoder_TEST - * [Pull request #231](https://github.com/ignitionrobotics/ign-common/pull/231) + * [Pull request #231](https://github.com/gazebosim/gz-common/pull/231) 1. Use direct evaluation for SKIP_av - * [Pull request #250](https://github.com/ignitionrobotics/ign-common/pull/250) + * [Pull request #250](https://github.com/gazebosim/gz-common/pull/250) -## Ignition Common 3.13.2 (2021-05-11) +## Gazebo Common 3.13.2 (2021-05-11) 1. Backport collada fixes (Backport #204) - * [Pull request #211](https://github.com/ignitionrobotics/ign-common/pull/211) + * [Pull request #211](https://github.com/gazebosim/gz-common/pull/211) 1. Fix join paths again - * [Pull request #215](https://github.com/ignitionrobotics/ign-common/pull/215) + * [Pull request #215](https://github.com/gazebosim/gz-common/pull/215) -## Ignition Common 3.13.1 (2021-05-03) +## Gazebo Common 3.13.1 (2021-05-03) 1. Fix join paths to remove duplicate separators - * [Pull request #205](https://github.com/ignitionrobotics/ign-common/pull/209) + * [Pull request #205](https://github.com/gazebosim/gz-common/pull/209) 1. Fix loading collada files with multiple texcoord sets using the same offset. - * [Pull request #208](https://github.com/ignitionrobotics/ign-common/pull/208) + * [Pull request #208](https://github.com/gazebosim/gz-common/pull/208) -## Ignition Common 3.13.0 (2021-04-27) +## Gazebo Common 3.13.0 (2021-04-27) 1. Add function to convert single channel image data to RGB image - * [Pull request #205](https://github.com/ignitionrobotics/ign-common/pull/205) + * [Pull request #205](https://github.com/gazebosim/gz-common/pull/205) 1. Avoid duplication of / in joinPaths (Windows) - * [Pull request #201](https://github.com/ignitionrobotics/ign-common/pull/201) + * [Pull request #201](https://github.com/gazebosim/gz-common/pull/201) 1. Fix colladaLoader on Windows - * [Pull request #200](https://github.com/ignitionrobotics/ign-common/pull/200) + * [Pull request #200](https://github.com/gazebosim/gz-common/pull/200) 1. Backport #188: Fix crash when using BVH animations. - * [Pull request #199](https://github.com/ignitionrobotics/ign-common/pull/199) + * [Pull request #199](https://github.com/gazebosim/gz-common/pull/199) 1. Improved Windows support - * [Pull request #197](https://github.com/ignitionrobotics/ign-common/pull/197) + * [Pull request #197](https://github.com/gazebosim/gz-common/pull/197) -## Ignition Common 3.12.0 (2021-04-06) +## Gazebo Common 3.12.0 (2021-04-06) 1. Remove use of _SOURCE and _BINARY dirs in tests. - * [Pull request #158](https://github.com/ignitionrobotics/ign-common/pull/158) + * [Pull request #158](https://github.com/gazebosim/gz-common/pull/158) 1. Add bazel buildsystem support. - * [Pull request #123](https://github.com/ignitionrobotics/ign-common/pull/123) + * [Pull request #123](https://github.com/gazebosim/gz-common/pull/123) 1. Use matching malloc/free for AudioDecoder. - * [Pull request #192](https://github.com/ignitionrobotics/ign-common/pull/192) + * [Pull request #192](https://github.com/gazebosim/gz-common/pull/192) 1. Fixed tutorial link in the README.md. - * [Pull request #194](https://github.com/ignitionrobotics/ign-common/pull/194) + * [Pull request #194](https://github.com/gazebosim/gz-common/pull/194) 1. Function to serialize compressed image to buffer - * [Pull request #139](https://github.com/ignitionrobotics/ign-common/pull/139) + * [Pull request #139](https://github.com/gazebosim/gz-common/pull/139) -## Ignition Common 3.11.1 (2021-03-08) +## Gazebo Common 3.11.1 (2021-03-08) 1. Relax expectation so encoder test passes on ARM - * [Pull request #183](https://github.com/ignitionrobotics/ign-common/pull/183) + * [Pull request #183](https://github.com/gazebosim/gz-common/pull/183) 1. Revert "Associate library materials effect with meshes (#151)" - * [Pull request #182](https://github.com/ignitionrobotics/ign-common/pull/182) + * [Pull request #182](https://github.com/gazebosim/gz-common/pull/182) -## Ignition Common 3.11.0 (2021-03-05) +## Gazebo Common 3.11.0 (2021-03-05) 1. Fix image red and blue swapping - * [Pull request #162](https://github.com/ignitionrobotics/ign-common/pull/162) + * [Pull request #162](https://github.com/gazebosim/gz-common/pull/162) 1. Remove issue & PR templates - * [Pull request #174](https://github.com/ignitionrobotics/ign-common/pull/174) + * [Pull request #174](https://github.com/gazebosim/gz-common/pull/174) 1. Prevent console spamming when exporting a mesh that has multiple texture coordinates - * [Pull request #171](https://github.com/ignitionrobotics/ign-common/pull/171) + * [Pull request #171](https://github.com/gazebosim/gz-common/pull/171) 1. Associate library materials effect with meshes - * [Pull request #151](https://github.com/ignitionrobotics/ign-common/pull/151) + * [Pull request #151](https://github.com/gazebosim/gz-common/pull/151) * Reverted in 3.11.1 1. Added issue & PR templates - * [Pull request #166](https://github.com/ignitionrobotics/ign-common/pull/166) + * [Pull request #166](https://github.com/gazebosim/gz-common/pull/166) 1. Added support for HW-accelerated video encoding. - * [Pull request #125](https://github.com/ignitionrobotics/ign-common/pull/125) - * [Pull request #169](https://github.com/ignitionrobotics/ign-common/pull/169) - * [Pull request #175](https://github.com/ignitionrobotics/ign-common/pull/175) + * [Pull request #125](https://github.com/gazebosim/gz-common/pull/125) + * [Pull request #169](https://github.com/gazebosim/gz-common/pull/169) + * [Pull request #175](https://github.com/gazebosim/gz-common/pull/175) 1. Added FlagSet utility class - * [Pull request #118](https://github.com/ignitionrobotics/ign-common/pull/118) + * [Pull request #118](https://github.com/gazebosim/gz-common/pull/118) 1. Disable failing VideoEncoder and Audioecoder tests on Windows - * [Pull request #149](https://github.com/ignitionrobotics/ign-common/pull/149) + * [Pull request #149](https://github.com/gazebosim/gz-common/pull/149) 1. Added ellipsoid mesh - * [Pull request #154](https://github.com/ignitionrobotics/ign-common/pull/154) - * [Pull request #159](https://github.com/ignitionrobotics/ign-common/pull/159) + * [Pull request #154](https://github.com/gazebosim/gz-common/pull/154) + * [Pull request #159](https://github.com/gazebosim/gz-common/pull/159) 1. Added capsule mesh - * [Pull request #155](https://github.com/ignitionrobotics/ign-common/pull/155) + * [Pull request #155](https://github.com/gazebosim/gz-common/pull/155) -## Ignition Common 3.10.1 (2021-01-20) +## Gazebo Common 3.10.1 (2021-01-20) 1. Fix transparency tag in the Collada exporter. - * [Pull Request 152](https://github.com/ignitionrobotics/ign-common/pull/152) + * [Pull Request 152](https://github.com/gazebosim/gz-common/pull/152) -## Ignition Common 3.10.0 (2021-01-05) +## Gazebo Common 3.10.0 (2021-01-05) 1. Added render order to material class - * [Pull Request 142](https://github.com/ignitionrobotics/ign-common/pull/142) + * [Pull Request 142](https://github.com/gazebosim/gz-common/pull/142) 1. Fix memory leak in Pbr.cc - * [Pull Request 147](https://github.com/ignitionrobotics/ign-common/pull/147) + * [Pull Request 147](https://github.com/gazebosim/gz-common/pull/147) -## Ignition Common 3.9.0 (2020-12-21) +## Gazebo Common 3.9.0 (2020-12-21) 1. Support multiple texture coordinate sets - * [Pull Request 131](https://github.com/ignitionrobotics/ign-common/pull/131) + * [Pull Request 131](https://github.com/gazebosim/gz-common/pull/131) 1. Add Lightmap to material - * [Pull Request 132](https://github.com/ignitionrobotics/ign-common/pull/132) + * [Pull Request 132](https://github.com/gazebosim/gz-common/pull/132) -## Ignition Common 3.8.0 (2020-12-08) +## Gazebo Common 3.8.0 (2020-12-08) -1. Call ignition::common::load() from Video constructor - * [Pull Request 111](https://github.com/ignitionrobotics/ign-common/pull/111) +1. Call gz::common::load() from Video constructor + * [Pull Request 111](https://github.com/gazebosim/gz-common/pull/111) 1. Cleanup - * Drop unused forward declaration: [Pull Request 113](https://github.com/ignitionrobotics/ign-common/pull/113) - * Remove two known flaky tests from Windows CI: [Pull Request 119](https://github.com/ignitionrobotics/ign-common/pull/119) - * Make ignstrtok private to Util.cc: [Pull Request 134](https://github.com/ignitionrobotics/ign-common/pull/134) - * Fix memory leaks [Pull Request 136](https://github.com/ignitionrobotics/ign-common/pull/136) + * Drop unused forward declaration: [Pull Request 113](https://github.com/gazebosim/gz-common/pull/113) + * Remove two known flaky tests from Windows CI: [Pull Request 119](https://github.com/gazebosim/gz-common/pull/119) + * Make ignstrtok private to Util.cc: [Pull Request 134](https://github.com/gazebosim/gz-common/pull/134) + * Fix memory leaks [Pull Request 136](https://github.com/gazebosim/gz-common/pull/136) 1. Windows - * Do not hardcode USE_EXTERNAL_TINYXML2 to OFF: [Pull Request 116](https://github.com/ignitionrobotics/ign-common/pull/116) - * Fix IGN_HOMEDIR on Windows: [Pull Request 127](https://github.com/ignitionrobotics/ign-common/pull/127) - * Improve Windows support: [Pull Request 128](https://github.com/ignitionrobotics/ign-common/pull/128) - * Fix Windows AV CI warnings and test failures: [Pull Request 135](https://github.com/ignitionrobotics/ign-common/pull/135) + * Do not hardcode USE_EXTERNAL_TINYXML2 to OFF: [Pull Request 116](https://github.com/gazebosim/gz-common/pull/116) + * Fix IGN_HOMEDIR on Windows: [Pull Request 127](https://github.com/gazebosim/gz-common/pull/127) + * Improve Windows support: [Pull Request 128](https://github.com/gazebosim/gz-common/pull/128) + * Fix Windows AV CI warnings and test failures: [Pull Request 135](https://github.com/gazebosim/gz-common/pull/135) 1. Fix video encoder timing - * [Pull Request 105](https://github.com/ignitionrobotics/ign-common/pull/105) + * [Pull Request 105](https://github.com/gazebosim/gz-common/pull/105) 1. Feature: Add transformation matrix to ColladaExport - * [Pull Request 100](https://github.com/ignitionrobotics/ign-common/pull/100) - * Fix: [Pull Request 133](https://github.com/ignitionrobotics/ign-common/pull/133) + * [Pull Request 100](https://github.com/gazebosim/gz-common/pull/100) + * Fix: [Pull Request 133](https://github.com/gazebosim/gz-common/pull/133) -## Ignition Common 3.7.0 (2020-10-21) +## Gazebo Common 3.7.0 (2020-10-21) 1. Miscellaneous Cleanups * Feature: Join function for combining strings with a delimiter - * [Pull Request 107](https://github.com/ignitionrobotics/ign-common/pull/107) + * [Pull Request 107](https://github.com/gazebosim/gz-common/pull/107) 1. Improve fork experience - * [Pull Request 103](https://github.com/ignitionrobotics/ign-common/pull/103) + * [Pull Request 103](https://github.com/gazebosim/gz-common/pull/103) 1. Add Console example - * [Pull Request 106](https://github.com/ignitionrobotics/ign-common/pull/106) + * [Pull Request 106](https://github.com/gazebosim/gz-common/pull/106) 1. Support fuel URLs for textures - * [Pull Request 102](https://github.com/ignitionrobotics/ign-common/pull/102) + * [Pull Request 102](https://github.com/gazebosim/gz-common/pull/102) 1. Fix loading dae file with hierarchical node that does not have a name - * [Pull Request 101](https://github.com/ignitionrobotics/ign-common/pull/101) + * [Pull Request 101](https://github.com/gazebosim/gz-common/pull/101) 1. Fix more Animation memory leaks - * [Pull Request 98](https://github.com/ignitionrobotics/ign-common/pull/98) + * [Pull Request 98](https://github.com/gazebosim/gz-common/pull/98) 1. Fix env behavior to return true on empty vars * Feature: Add setenv for setting environment variables * Feature: Add unsetenv for clearing environment variables * Feature: Add alternative env implementation that respects empty variables - * [Pull Request 97](https://github.com/ignitionrobotics/ign-common/pull/97) + * [Pull Request 97](https://github.com/gazebosim/gz-common/pull/97) -## Ignition Common 3.6.1 (2020-09-16) +## Gazebo Common 3.6.1 (2020-09-16) 1. Fix hierarchical submesh processing in the ColladaLoader. - * [Pull Request 78](https://github.com/ignitionrobotics/ign-common/pull/78) + * [Pull Request 78](https://github.com/gazebosim/gz-common/pull/78) 1. Tutorial updates - * [Pull Request 86](https://github.com/ignitionrobotics/ign-common/pull/86) - * [Pull Request 87](https://github.com/ignitionrobotics/ign-common/pull/87) - * [Pull Request 92](https://github.com/ignitionrobotics/ign-common/pull/92) + * [Pull Request 86](https://github.com/gazebosim/gz-common/pull/86) + * [Pull Request 87](https://github.com/gazebosim/gz-common/pull/87) + * [Pull Request 92](https://github.com/gazebosim/gz-common/pull/92) 1. Fix the AudioDecoder class - * [Pull Request 81](https://github.com/ignitionrobotics/ign-common/pull/81) + * [Pull Request 81](https://github.com/gazebosim/gz-common/pull/81) 1. Fix actions CI - * [Pull Request 83](https://github.com/ignitionrobotics/ign-common/pull/83) + * [Pull Request 83](https://github.com/gazebosim/gz-common/pull/83) 1. Fix trajectory info memory leak - * [Pull Request 93](https://github.com/ignitionrobotics/ign-common/pull/93) + * [Pull Request 93](https://github.com/gazebosim/gz-common/pull/93) 1. Remove URI warning on constructor - * [Pull Request 94](https://github.com/ignitionrobotics/ign-common/pull/94) + * [Pull Request 94](https://github.com/gazebosim/gz-common/pull/94) -## Ignition Common 3.6.0 (2020-06-09) +## Gazebo Common 3.6.0 (2020-06-09) 1. Refactor Image::MaxColor to reduce computation time - * [Pull request 66](https://github.com/ignitionrobotics/ign-common/pull/66) + * [Pull request 66](https://github.com/gazebosim/gz-common/pull/66) 1. Update to gtest 1.10.0 with patch for gcc warnings - * [Pull request 67](https://github.com/ignitionrobotics/ign-common/pull/67) + * [Pull request 67](https://github.com/gazebosim/gz-common/pull/67) 1. Fix ColladaLoader loading <transparent> tag when <transparency> does not exist - * [Pull request 68](https://github.com/ignitionrobotics/ign-common/pull/68) + * [Pull request 68](https://github.com/gazebosim/gz-common/pull/68) 1. Remove unused included headers - * [Pull request 71](https://github.com/ignitionrobotics/ign-common/pull/71) + * [Pull request 71](https://github.com/gazebosim/gz-common/pull/71) 1. More file path APIs - * [Pull request 70](https://github.com/ignitionrobotics/ign-common/pull/70) + * [Pull request 70](https://github.com/gazebosim/gz-common/pull/70) -## Ignition Common 3.5.0 (2020-04-09) +## Gazebo Common 3.5.0 (2020-04-09) 1. Add interpolate\_x property to actor animations * [BitBucket pull request 232](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/232) @@ -420,7 +420,7 @@ 1. Fix crash when loading OBJ meshes with invalid materials * [BitBucket pull request 230](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/230) -## Ignition Common 3.4.0 (2020-02-20) +## Gazebo Common 3.4.0 (2020-02-20) 1. Add PBR material class * [BitBucket pull request 227](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/227) @@ -462,7 +462,7 @@ 1. Support custom callbacks to find files on global interface * [BitBucket pull request 226](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/226) -## Ignition Common 3.3.0 (2019-08-27) +## Gazebo Common 3.3.0 (2019-08-27) 1. skip GTSMeshUtils test on Windows due to issue #50 * [BitBucket pull request 205](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/205) @@ -476,15 +476,15 @@ 1. Filesystem copy directory and parentpath * [BitBucket pull request 200](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/200) -## Ignition Common 3.2.0 (2019-08-07) +## Gazebo Common 3.2.0 (2019-08-07) -1. Allow ignLogInit to use an absolute path. Added a timeToIso that converts a given time to an ISO string. Some console timestamps were using `IGN_SYSTEM_TIME_NS()` and others `ignition::common::systemTimeISO()`. Switched all to use `ignition::common::systemTimeISO()`. +1. Allow gzLogInit to use an absolute path. Added a timeToIso that converts a given time to an ISO string. Some console timestamps were using `IGN_SYSTEM_TIME_NS()` and others `gz::common::systemTimeISO()`. Switched all to use `gz::common::systemTimeISO()`. * [BitBucket pull request 203](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/203) 1. Port ColladaLoader fix: use default value of 1 for stride parameter when unset. * [BitBucket pull request 196](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/196) -## Ignition Common 3.1.0 (2019-05-17) +## Gazebo Common 3.1.0 (2019-05-17) 1. Image::PixelFormatType: append `BAYER_BGGR8` instead of replacing `BAYER_RGGR8` * [BitBucket pull request 192](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/192) @@ -506,13 +506,13 @@ 1. Consolidate Console::log streams to reduce colored log size * [BitBucket pull request 185](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/185) - * [Issue 47](https://github.com/ignitionrobotics/ign-common/issues/47) + * [Issue 47](https://github.com/gazebosim/gz-common/issues/47) 1. Fix ColladaLoader to support mixamo models and fix skeleton animation loading * [BitBucket pull request 179](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/179) * [BitBucket osrf/gazebo pull request 3071](https://osrf-migration.github.io/gazebo-gh-pages/#!/osrf/gazebo/pull-requests/3071) -## Ignition Common 3.0.0 (2019-02-28) +## Gazebo Common 3.0.0 (2019-02-28) 1. Use ign-cmake2 and support Ubuntu Bionic (18.04). * [BitBucket pull request 131](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/131) @@ -545,16 +545,16 @@ 1. `Time::Sleep`: return amount of time actually slept * [BitBucket pull request 175](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/176) - * [Issue 44](https://github.com/ignitionrobotics/ign-common/issues/44) + * [Issue 44](https://github.com/gazebosim/gz-common/issues/44) 1. NodeTransform: use unique_ptr for private data, add copy constructor/assignment * [BitBucket pull request 181](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/181) -## Ignition Common 2.x +## Gazebo Common 2.x -## Ignition Common 2.x.x (2018-XX-XX) +## Gazebo Common 2.x.x (2018-XX-XX) -## Ignition Common 2.0.0 (2018-02-11) +## Gazebo Common 2.0.0 (2018-02-11) 1. Use ignition-cmake1 and components for av, events, and graphics * [BitBucket pull request 102](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/102) @@ -574,16 +574,16 @@ 1. Update tinyobjloader to version that supports triangulating meshes with concave polygons. * [BitBucket pull request 160](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/160) -## Ignition Common 1.x.x (2018-XX-XX) +## Gazebo Common 1.x.x (2018-XX-XX) -## Ignition Common 1.X.X (20XX-XX-XX) +## Gazebo Common 1.X.X (20XX-XX-XX) 1. Time::Sleep: use CLOCK_MONOTONIC on Linux * [BitBucket pull request 159](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/159) -## Ignition Common 1.1.1 (2018-05-23) +## Gazebo Common 1.1.1 (2018-05-23) 1. Documentation upload improvements * [BitBucket pull request 117](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/117) @@ -595,7 +595,7 @@ * [BitBucket pull request 124](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/124) -## Ignition Common 1.1.0 (2018-04-16) +## Gazebo Common 1.1.0 (2018-04-16) 1. Accept spaces on URI path * [BitBucket pull request 110](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/110) diff --git a/Migration.md b/Migration.md index 94b3e71b9..097cf589f 100644 --- a/Migration.md +++ b/Migration.md @@ -5,13 +5,19 @@ Deprecated code produces compile-time warnings. These warning serve as notification to users that their code should be upgraded. The next major release will remove the deprecated code. -## Ignition Common 4.X to 5.X +## Gazebo Common 4.X to 5.X ### Deprecations 1. `Submesh::MaterialIndex` is deprecated. `SubMesh::GetMaterialIndex` should be used instead, which properly handles submeshes having no material index applied to them. +2. The `ignition` namespace is deprecated and will be removed in future versions. Use `gz` instead. +3. Header files under `ignition/...` are deprecated and will be removed in future versions. + Use `gz/...` instead. +4. The logging macros (`ignmsg`, `ignwarn`, `ignerr`, etc.) and logging function macros + (`ignLogInit()`, etc.) are deprecated and will be removed in future versions. Use `gz` instead + (e.g. `gzmsg`, `gzwarn`, `gzLogInit()`) 1. All the plugin APIs are deprecated, use the gz-plugin library instead. See the [migration guide](https://github.com/ignitionrobotics/ign-plugin/blob/ign-plugin1/MIGRATION.md). @@ -33,7 +39,7 @@ release will remove the deprecated code. 1. `Image::AvgColor`, `Image::Data` and `Image::RGBData` methods are now `const`. -## Ignition Common 3.X to 4.X +## Gazebo Common 3.X to 4.X ### Modifications @@ -47,10 +53,9 @@ release will remove the deprecated code. * A URI Query does not require a `key=value` format. For example a valid query can be "?aquery", "?aquery?", and `??`. * A URI authority is optional. If present, then a URI authority begins - with two forward slashes and immediately follows the URI scheme. A host - must be present if an authority is present and the scheme != 'file'. + with two forward slashes and immediately follows the URI scheme. A host must be present if an authority is present and the scheme != 'file'. -## Ignition Common 2.X to 3.X +## Gazebo Common 2.X to 3.X ### Additions @@ -77,7 +82,7 @@ release will remove the deprecated code. 1. (New in 3.8.0) On Windows, the value of C++ macro `IGN_HOMEDIR` changed from `HOMEPATH` to `USERPROFILE`. It is usually used to read the path to the user's home from environment. The old value pointed to a path relative to the (a) current drive letter as reported by `pwd`, not the system drive letter. The new value correctly points to an environment variable that contains the full absolute path to the user's profile. If the code did not use the macro in some unexpected way, the new behavior should work either the same or even better (it would work even when the current directory is on a non-system drive). If the code relied on this value to be relative to the current drive letter, it needs to be changed to use `HOMEPATH` directly. -## Ignition Common 1.X to 2.X +## Gazebo Common 1.X to 2.X ### Modifications @@ -93,11 +98,10 @@ release will remove the deprecated code. - events: registering and handling event callbacks - graphics: animation, images, and triangle meshes -## Ignition Common 0.X to 1.X +## Gazebo Common 0.X to 1.X ### Added dependencies 1. **ignition-cmake** + Ignition-math now has a build dependency on ignition-cmake, which allows cmake scripts to be shared across all the ignition packages. - diff --git a/README.md b/README.md index f20e31311..0e1271522 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,25 @@ -# Ignition Common : AV, Graphics, Events, and much more. +# Gazebo Common : AV, Graphics, Events, and much more. **Maintainer:** nate AT openrobotics DOT org -[![GitHub open issues](https://img.shields.io/github/issues-raw/ignitionrobotics/ign-common.svg)](https://github.com/ignitionrobotics/ign-common/issues) -[![GitHub open pull requests](https://img.shields.io/github/issues-pr-raw/ignitionrobotics/ign-common.svg)](https://github.com/ignitionrobotics/ign-common/pulls) +[![GitHub open issues](https://img.shields.io/github/issues-raw/gazebosim/gz-common.svg)](https://github.com/gazebosim/gz-common/issues) +[![GitHub open pull requests](https://img.shields.io/github/issues-pr-raw/gazebosim/gz-common.svg)](https://github.com/gazebosim/gz-common/pulls) [![Discourse topics](https://img.shields.io/discourse/https/community.gazebosim.org/topics.svg)](https://community.gazebosim.org) [![Hex.pm](https://img.shields.io/hexpm/l/plug.svg)](https://www.apache.org/licenses/LICENSE-2.0) Build | Status -- | -- -Test coverage | [![codecov](https://codecov.io/gh/ignitionrobotics/ign-common/branch/main/graph/badge.svg)](https://codecov.io/gh/ignitionrobotics/ign-common) +Test coverage | [![codecov](https://codecov.io/gh/gazebosim/gz-common/branch/main/graph/badge.svg)](https://codecov.io/gh/gazebosim/gz-common) Ubuntu Focal | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-main-focal-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-main-focal-amd64) Homebrew | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-main-homebrew-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-main-homebrew-amd64) Windows | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-main-windows7-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-main-windows7-amd64) -Ignition Common, a component of [Ignition -Robotics](https://ignitionrobotics.org), provides a set of libraries that +Gazebo Common, a component of [Ignition +Robotics](https://gazebosim.org), provides a set of libraries that cover many different use cases. An audio-visual library supports processing audio and video files, a graphics library can load a variety 3D mesh file formats into a generic in-memory representation, and the core -library of Ignition Common contains functionality that spans Base64 +library of Gazebo Common contains functionality that spans Base64 encoding/decoding to thread pools. # Table of Contents @@ -42,7 +42,7 @@ encoding/decoding to thread pools. # Features -Some of the many capabilities contained in Ignition Common are: +Some of the many capabilities contained in Gazebo Common are: * **AV**: FFMpeg based audio decoder, and video encoder and decoder. * **Core**: Base64 encoding and decoding, battery model, console logging, @@ -56,11 +56,11 @@ callback system. # Install -See the [installation tutorial](https://ignitionrobotics.org/api/common/4.0/tutorials.html). +See the [installation tutorial](https://gazebosim.org/api/common/4.0/tutorials.html). # Usage -Please refer to the [examples directory](https://github.com/ignitionrobotics/ign-common/raw/main/examples/). +Please refer to the [examples directory](https://github.com/gazebosim/gz-common/raw/main/examples/). # Folder Structure @@ -88,18 +88,18 @@ Refer to the following table for information about important directories and fil # Contributing Please see -[CONTRIBUTING.md](https://ignitionrobotics.org/docs/all/contributing). +[CONTRIBUTING.md](https://gazebosim.org/docs/all/contributing). # Code of Conduct Please see -[CODE_OF_CONDUCT.md](https://github.com/ignitionrobotics/ign-gazebo/blob/main/CODE_OF_CONDUCT.md). +[CODE_OF_CONDUCT.md](https://github.com/gazebosim/gz-sim/blob/main/CODE_OF_CONDUCT.md). # Versioning -This library uses [Semantic Versioning](https://semver.org/). Additionally, this library is part of the [Ignition Robotics project](https://ignitionrobotics.org) which periodically releases a versioned set of compatible and complimentary libraries. See the [Ignition Robotics website](https://ignitionrobotics.org) for version and release information. +This library uses [Semantic Versioning](https://semver.org/). Additionally, this library is part of the [Gazebo project](https://gazebosim.org) which periodically releases a versioned set of compatible and complimentary libraries. See the [Gazebo website](https://gazebosim.org) for version and release information. # License -This library is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). See also the [LICENSE](https://github.com/ignitionrobotics/ign-common/blob/main/LICENSE) file. +This library is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). See also the [LICENSE](https://github.com/gazebosim/gz-common/blob/main/LICENSE) file. diff --git a/api.md.in b/api.md.in index d25ca9164..e73693e30 100644 --- a/api.md.in +++ b/api.md.in @@ -1,6 +1,6 @@ ## Ignition @IGN_DESIGNATION_CAP@ -Ignition @IGN_DESIGNATION_CAP@ is a component in Ignition Robotics, a set of libraries +Ignition @IGN_DESIGNATION_CAP@ is a component in Gazebo, a set of libraries designed to rapidly develop robot and simulation applications. ## License diff --git a/av/include/gz/common/AudioDecoder.hh b/av/include/gz/common/AudioDecoder.hh index d6a864ee1..2bd9abd9d 100644 --- a/av/include/gz/common/AudioDecoder.hh +++ b/av/include/gz/common/AudioDecoder.hh @@ -23,13 +23,13 @@ #include <gz/common/av/Export.hh> #include <gz/utils/ImplPtr.hh> -namespace ignition +namespace gz { namespace common { /// \class AudioDecoder AudioDecoder.hh gz/common/common.hh /// \brief An audio decoder based on FFMPEG. - class IGNITION_COMMON_AV_VISIBLE AudioDecoder + class GZ_COMMON_AV_VISIBLE AudioDecoder { /// \brief Constructor. public: AudioDecoder(); diff --git a/av/include/gz/common/HWEncoder.hh b/av/include/gz/common/HWEncoder.hh index 8a857434b..742e8e18a 100644 --- a/av/include/gz/common/HWEncoder.hh +++ b/av/include/gz/common/HWEncoder.hh @@ -27,12 +27,12 @@ /// This is an internal-use only class encapsulating HW video encoding. All /// symbols defined here are hidden from the public API. -namespace ignition::common +namespace gz::common { /// \brief Representation of a GPU video encoder and its configuration. /// \note This class is intentionally hidden as it provides highly customized /// behavior tailored just for the use with VideoEncoder. - class IGNITION_COMMON_AV_HIDDEN HWEncoder + class GZ_COMMON_AV_HIDDEN HWEncoder { /// \brief Set up the HW encoder configurator. /// \param[in] _allowedHwEncoders HW encoders to try. @@ -62,7 +62,7 @@ namespace ignition::common /// \param[in] _encoderContext Context of the encoder for which hardware /// acceleration should be set up. /// \note If the configuration fails, the codec will be left configured for - /// software encoding and an error will be written to ignerr describing what + /// software encoding and an error will be written to gzerr describing what /// failed. public: void ConfigHWAccel(AVCodecContext* _encoderContext); diff --git a/av/include/gz/common/HWVideo.hh b/av/include/gz/common/HWVideo.hh index 3576b1ae5..feb8d61c8 100644 --- a/av/include/gz/common/HWVideo.hh +++ b/av/include/gz/common/HWVideo.hh @@ -18,9 +18,9 @@ #include <gz/common/EnumIface.hh> -namespace ignition::common +namespace gz::common { - enum class IGNITION_COMMON_AV_VISIBLE HWEncoderType + enum class GZ_COMMON_AV_VISIBLE HWEncoderType { NONE, NVENC, // Linux device is /dev/nvidia* diff --git a/av/include/gz/common/Video.hh b/av/include/gz/common/Video.hh index a6857d369..28cf50033 100644 --- a/av/include/gz/common/Video.hh +++ b/av/include/gz/common/Video.hh @@ -28,12 +28,12 @@ struct AVFrame; struct AVPicture; struct SwsContext; -namespace ignition +namespace gz { namespace common { /// \brief Handle video encoding and decoding using libavcodec - class IGNITION_COMMON_AV_VISIBLE Video + class GZ_COMMON_AV_VISIBLE Video { /// \brief Constructor public: Video(); diff --git a/av/include/gz/common/VideoEncoder.hh b/av/include/gz/common/VideoEncoder.hh index acc60b2c4..e0507923d 100644 --- a/av/include/gz/common/VideoEncoder.hh +++ b/av/include/gz/common/VideoEncoder.hh @@ -34,13 +34,13 @@ #define VIDEO_ENCODER_FPS_DEFAULT 25 #define VIDEO_ENCODER_FORMAT_DEFAULT "mp4" -namespace ignition +namespace gz { namespace common { /// \brief The VideoEncoder class supports encoding a series of images /// to a video format, and then writing the video to disk. - class IGNITION_COMMON_AV_VISIBLE VideoEncoder + class GZ_COMMON_AV_VISIBLE VideoEncoder { /// \brief Constructor public: VideoEncoder(); diff --git a/av/include/gz/common/av/Util.hh b/av/include/gz/common/av/Util.hh index 58d3ad756..8bc433b28 100644 --- a/av/include/gz/common/av/Util.hh +++ b/av/include/gz/common/av/Util.hh @@ -18,7 +18,7 @@ #ifndef GZ_COMMON_AV_UTIL_HH_ #define GZ_COMMON_AV_UTIL_HH_ -namespace ignition +namespace gz { namespace common { diff --git a/av/include/gz/common/ffmpeg_inc.hh b/av/include/gz/common/ffmpeg_inc.hh index 5ca16c5a9..faced0002 100644 --- a/av/include/gz/common/ffmpeg_inc.hh +++ b/av/include/gz/common/ffmpeg_inc.hh @@ -51,21 +51,21 @@ extern "C" { #include <gz/common/av/Export.hh> -namespace ignition +namespace gz { namespace common { /// \brief Helper function to avoid deprecation warnings. - IGNITION_COMMON_AV_VISIBLE + GZ_COMMON_AV_VISIBLE AVFrame *AVFrameAlloc(void); /// \brief Helper function to avoid deprecation warnings. - IGNITION_COMMON_AV_VISIBLE + GZ_COMMON_AV_VISIBLE void AVFrameUnref(AVFrame *_frame); /// \brief Helper function to avoid deprecation warnings. /// \param[in] _packet AVPacket structure that stores compressed data - IGNITION_COMMON_AV_VISIBLE + GZ_COMMON_AV_VISIBLE void AVPacketUnref(AVPacket *_packet); /// \brief Helper function to avoid deprecation warnings @@ -79,7 +79,7 @@ namespace ignition /// the number of bytes used. /// \note If the codec is in draining mode, _packet can be null. The return /// value on success will then be 0, but _gotFrame will be non-zero. - IGNITION_COMMON_AV_VISIBLE + GZ_COMMON_AV_VISIBLE int AVCodecDecode(AVCodecContext *_codecCtx, AVFrame *_frame, int *_gotFrame, AVPacket *_packet); diff --git a/av/include/ignition/common/AudioDecoder.hh b/av/include/ignition/common/AudioDecoder.hh index 4fe88b03d..485ab0970 100644 --- a/av/include/ignition/common/AudioDecoder.hh +++ b/av/include/ignition/common/AudioDecoder.hh @@ -16,3 +16,4 @@ */ #include <gz/common/AudioDecoder.hh> +#include <ignition/common/config.hh> diff --git a/av/include/ignition/common/HWEncoder.hh b/av/include/ignition/common/HWEncoder.hh index 265e0bfc4..10cd0246c 100644 --- a/av/include/ignition/common/HWEncoder.hh +++ b/av/include/ignition/common/HWEncoder.hh @@ -16,3 +16,4 @@ */ #include <gz/common/HWEncoder.hh> +#include <ignition/common/config.hh> diff --git a/av/include/ignition/common/HWVideo.hh b/av/include/ignition/common/HWVideo.hh index 0aab109ad..ef59102b5 100644 --- a/av/include/ignition/common/HWVideo.hh +++ b/av/include/ignition/common/HWVideo.hh @@ -16,3 +16,4 @@ */ #include <gz/common/HWVideo.hh> +#include <ignition/common/config.hh> diff --git a/av/include/ignition/common/Video.hh b/av/include/ignition/common/Video.hh index 32d257a22..db062d2d0 100644 --- a/av/include/ignition/common/Video.hh +++ b/av/include/ignition/common/Video.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Video.hh> +#include <ignition/common/config.hh> diff --git a/av/include/ignition/common/VideoEncoder.hh b/av/include/ignition/common/VideoEncoder.hh index b7ab032bd..409858e7e 100644 --- a/av/include/ignition/common/VideoEncoder.hh +++ b/av/include/ignition/common/VideoEncoder.hh @@ -16,3 +16,4 @@ */ #include <gz/common/VideoEncoder.hh> +#include <ignition/common/config.hh> diff --git a/av/include/ignition/common/av.hh b/av/include/ignition/common/av.hh index 6c4c5ac5c..e31d7dc42 100644 --- a/av/include/ignition/common/av.hh +++ b/av/include/ignition/common/av.hh @@ -16,3 +16,4 @@ */ #include <gz/common/av.hh> +#include <ignition/common/config.hh> diff --git a/av/include/ignition/common/av/Export.hh b/av/include/ignition/common/av/Export.hh index bc7a8fe13..c51d279e4 100644 --- a/av/include/ignition/common/av/Export.hh +++ b/av/include/ignition/common/av/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/av/Export.hh> +#include <ignition/common/config.hh> diff --git a/av/include/ignition/common/av/Util.hh b/av/include/ignition/common/av/Util.hh index cb6c2d914..2bedd213f 100644 --- a/av/include/ignition/common/av/Util.hh +++ b/av/include/ignition/common/av/Util.hh @@ -16,3 +16,4 @@ */ #include <gz/common/av/Util.hh> +#include <ignition/common/config.hh> diff --git a/av/include/ignition/common/av/detail/Export.hh b/av/include/ignition/common/av/detail/Export.hh index 10c594289..d1d5bac60 100644 --- a/av/include/ignition/common/av/detail/Export.hh +++ b/av/include/ignition/common/av/detail/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/av/detail/Export.hh> +#include <ignition/common/config.hh> diff --git a/av/include/ignition/common/ffmpeg_inc.hh b/av/include/ignition/common/ffmpeg_inc.hh index 9b94f9eba..811e466d1 100644 --- a/av/include/ignition/common/ffmpeg_inc.hh +++ b/av/include/ignition/common/ffmpeg_inc.hh @@ -16,3 +16,4 @@ */ #include <gz/common/ffmpeg_inc.hh> +#include <ignition/common/config.hh> diff --git a/av/src/AudioDecoder.cc b/av/src/AudioDecoder.cc index 4ff2b237f..4a99a0912 100644 --- a/av/src/AudioDecoder.cc +++ b/av/src/AudioDecoder.cc @@ -15,18 +15,18 @@ * */ -#include <ignition/common/av/Util.hh> -#include <ignition/common/ffmpeg_inc.hh> -#include <ignition/common/AudioDecoder.hh> -#include <ignition/common/Console.hh> +#include <gz/common/av/Util.hh> +#include <gz/common/ffmpeg_inc.hh> +#include <gz/common/AudioDecoder.hh> +#include <gz/common/Console.hh> #define AUDIO_INBUF_SIZE (20480 * 2) #define AUDIO_REFILL_THRESH 4096 -using namespace ignition; +using namespace gz; using namespace common; -class ignition::common::AudioDecoder::Implementation +class gz::common::AudioDecoder::Implementation { /// \brief Destructor public: ~Implementation(); @@ -48,7 +48,7 @@ class ignition::common::AudioDecoder::Implementation }; ///////////////////////////////////////////////// -ignition::common::AudioDecoder::Implementation::~Implementation() +gz::common::AudioDecoder::Implementation::~Implementation() { // Close the codec if (this->codecCtx) @@ -61,9 +61,9 @@ ignition::common::AudioDecoder::Implementation::~Implementation() ///////////////////////////////////////////////// AudioDecoder::AudioDecoder() - : dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) + : dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { - ignition::common::load(); + gz::common::load(); } ///////////////////////////////////////////////// @@ -80,13 +80,13 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) if (this->dataPtr->codec == nullptr) { - ignerr << "Set an audio file before decoding.\n"; + gzerr << "Set an audio file before decoding.\n"; return false; } if (_outBufferSize == nullptr) { - ignerr << "outBufferSize is null!!\n"; + gzerr << "outBufferSize is null!!\n"; return false; } @@ -102,14 +102,14 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) if (!(decodedFrame = common::AVFrameAlloc())) { - ignerr << "Audio decoder out of memory\n"; + gzerr << "Audio decoder out of memory\n"; result = false; } packet = av_packet_alloc(); if (!packet) { - ignerr << "Failed to allocate AVPacket" << std::endl; + gzerr << "Failed to allocate AVPacket" << std::endl; return false; } @@ -125,7 +125,7 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) int ret = avcodec_send_packet(this->dataPtr->codecCtx, packet); if (ret < 0) { - ignerr << "Error submitting the packet to the decoder" << std::endl; + gzerr << "Error submitting the packet to the decoder" << std::endl; return false; } @@ -140,7 +140,7 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) } else if (ret < 0) { - ignerr << "Error during decoding" << std::endl; + gzerr << "Error during decoding" << std::endl; return false; } @@ -239,7 +239,7 @@ bool AudioDecoder::SetFile(const std::string &_filename) if (avformat_open_input(&this->dataPtr->formatCtx, _filename.c_str(), nullptr, nullptr) < 0) { - ignerr << "Unable to open audio file[" << _filename << "]\n"; + gzerr << "Unable to open audio file[" << _filename << "]\n"; this->dataPtr->formatCtx = nullptr; return false; } @@ -250,7 +250,7 @@ bool AudioDecoder::SetFile(const std::string &_filename) // Retrieve some information if (avformat_find_stream_info(this->dataPtr->formatCtx, nullptr) < 0) { - ignerr << "Unable to find stream info.\n"; + gzerr << "Unable to find stream info.\n"; avformat_close_input(&this->dataPtr->formatCtx); this->dataPtr->formatCtx = nullptr; @@ -286,7 +286,7 @@ bool AudioDecoder::SetFile(const std::string &_filename) if (this->dataPtr->audioStream == -1) { - ignerr << "Couldn't find audio stream.\n"; + gzerr << "Couldn't find audio stream.\n"; avformat_close_input(&this->dataPtr->formatCtx); this->dataPtr->formatCtx = nullptr; @@ -312,13 +312,13 @@ bool AudioDecoder::SetFile(const std::string &_filename) this->dataPtr->audioStream]->codecpar->codec_id); if (!this->dataPtr->codec) { - ignerr << "Failed to find the codec" << std::endl; + gzerr << "Failed to find the codec" << std::endl; return false; } this->dataPtr->codecCtx = avcodec_alloc_context3(this->dataPtr->codec); if (!this->dataPtr->codecCtx) { - ignerr << "Failed to allocate the codec context" << std::endl; + gzerr << "Failed to allocate the codec context" << std::endl; return false; } // Copy all relevant parameters from codepar to codecCtx @@ -331,7 +331,7 @@ bool AudioDecoder::SetFile(const std::string &_filename) if (this->dataPtr->codec == nullptr) { - ignerr << "Couldn't find codec for audio stream.\n"; + gzerr << "Couldn't find codec for audio stream.\n"; avformat_close_input(&this->dataPtr->formatCtx); this->dataPtr->formatCtx = nullptr; @@ -350,7 +350,7 @@ bool AudioDecoder::SetFile(const std::string &_filename) if (avcodec_open2(this->dataPtr->codecCtx, this->dataPtr->codec, nullptr) < 0) { - ignerr << "Couldn't open audio codec.\n"; + gzerr << "Couldn't open audio codec.\n"; avformat_close_input(&this->dataPtr->formatCtx); this->dataPtr->formatCtx = nullptr; diff --git a/av/src/AudioDecoder_TEST.cc b/av/src/AudioDecoder_TEST.cc index 367eefd6e..c63eb48a1 100644 --- a/av/src/AudioDecoder_TEST.cc +++ b/av/src/AudioDecoder_TEST.cc @@ -16,11 +16,11 @@ */ #include <gtest/gtest.h> -#include <ignition/common/AudioDecoder.hh> -#include <ignition/utils/ExtraTestMacros.hh> -#include <ignition/common/testing/TestPaths.hh> +#include <gz/common/AudioDecoder.hh> +#include <gz/utils/ExtraTestMacros.hh> +#include <gz/common/testing/TestPaths.hh> -using namespace ignition; +using namespace gz; ///////////////////////////////////////////////// TEST(AudioDecoder, FileNotSet) diff --git a/av/src/HWEncoder.cc b/av/src/HWEncoder.cc index 63e4dbc20..6964afd50 100644 --- a/av/src/HWEncoder.cc +++ b/av/src/HWEncoder.cc @@ -20,16 +20,16 @@ #include <map> #include <utility> -#include "ignition/common/ffmpeg_inc.hh" -#include "ignition/common/HWEncoder.hh" -#include "ignition/common/StringUtils.hh" -#include "ignition/common/Console.hh" +#include "gz/common/ffmpeg_inc.hh" +#include "gz/common/HWEncoder.hh" +#include "gz/common/StringUtils.hh" +#include "gz/common/Console.hh" -using namespace ignition; +using namespace gz; using namespace common; using namespace std; -class ignition::common::HWEncoder::Implementation +class gz::common::HWEncoder::Implementation { /// \brief Device reference for HW-accelerated encoding. public: AVBufferRef* hwDevice = nullptr; @@ -142,7 +142,7 @@ bool ProbeDevice(const std::string& _deviceName, else { if (_warnIfNotFile) - ignwarn << "Device " << _deviceName << " can't be used with " + gzwarn << "Device " << _deviceName << " can't be used with " << HWEncoderTypeParser.Str(_encoderType) <<" (aren't write " << "permissions for the device missing?)" << std::endl; return false; @@ -159,14 +159,14 @@ bool ProbeDevice(const std::string& _deviceName, if (ret < 0) { - ignerr << "Could not initialize " << deviceStr << " for " + gzerr << "Could not initialize " << deviceStr << " for " << HWEncoderTypeParser.Str(_encoderType) << ", skipping.\n"; return false; } av_buffer_unref(&tmpHwDevice); - ignmsg << "Initialized " << HWEncoderTypeParser.Str(_encoderType) + gzmsg << "Initialized " << HWEncoderTypeParser.Str(_encoderType) << " on " << deviceStr << std::endl; return true; @@ -211,7 +211,7 @@ AVCodec* HWEncoder::FindEncoder(AVCodecID _codecId) // if we only search for software encoders, happily return the first one if (this->dataPtr->initHwEncoders == HWEncoderType::NONE) { - ignmsg << "Compatible SW encoder: " << codec->name << std::endl; + gzmsg << "Compatible SW encoder: " << codec->name << std::endl; foundEncoder = const_cast<AVCodec*>(codec); break; } @@ -221,11 +221,11 @@ AVCodec* HWEncoder::FindEncoder(AVCodecID _codecId) } else { - ignmsg << "Found known HW encoder: " << codec->name << std::endl; + gzmsg << "Found known HW encoder: " << codec->name << std::endl; if (!this->dataPtr->initHwEncoders[hwEncoderType]) { - ignmsg << "Encoder " << codec->name << " is not allowed, skipping.\n"; + gzmsg << "Encoder " << codec->name << " is not allowed, skipping.\n"; continue; } @@ -375,7 +375,7 @@ AVCodec* HWEncoder::FindEncoder(AVCodecID _codecId) { // This is an encoder that is compiled into libavcodec, but we do // not (yet) support it. - ignmsg << "Encoder " << codec->name << " is not yet supported.\n"; + gzmsg << "Encoder " << codec->name << " is not yet supported.\n"; break; } } @@ -386,7 +386,7 @@ AVCodec* HWEncoder::FindEncoder(AVCodecID _codecId) if (foundEncoder == nullptr && this->dataPtr->initHwEncoders != HWEncoderType::NONE) { - ignwarn << "No hardware-accelerated encoder found, falling back to " + gzwarn << "No hardware-accelerated encoder found, falling back to " "software encoders" << std::endl; this->dataPtr->initHwEncoders = HWEncoderType::NONE; return this->FindEncoder(_codecId); @@ -456,7 +456,7 @@ void HWEncoder::ConfigHWAccel(AVCodecContext* _encoderContext) if (ret < 0) { - ignerr << "Could not initialize HW encoding device using " + gzerr << "Could not initialize HW encoding device using " << HWEncoderTypeParser.Str(this->dataPtr->hwEncoderType) << ". " << av_err2str_cpp(ret) << ". Video encoding will use a software encoder instead.\n"; @@ -468,12 +468,12 @@ void HWEncoder::ConfigHWAccel(AVCodecContext* _encoderContext) ret = av_opt_set(_encoderContext->priv_data, "rc", "vbr", AV_OPT_SEARCH_CHILDREN); if (ret == AVERROR_OPTION_NOT_FOUND) - ignerr << "Codec " << _encoderContext->codec->name << " does not " + gzerr << "Codec " << _encoderContext->codec->name << " does not " << "support option 'rc' which is required for setting bitrate " << "of the encoded video. The video will have some default " << "bitrate.\n"; else if (ret == AVERROR(EINVAL)) - ignerr << "Codec " << _encoderContext->codec->name << " does not " + gzerr << "Codec " << _encoderContext->codec->name << " does not " << "support 'vbr' mode for option 'rc' which is required for " << "setting bitrate of the encoded video. The video will have " << "some default bitrate.\n"; @@ -502,7 +502,7 @@ void HWEncoder::ConfigHWAccel(AVCodecContext* _encoderContext) this->dataPtr->hwDeviceName.c_str(), nullptr, 0); if (ret < 0) { - ignerr << "Could not initialize HW encoding device using " + gzerr << "Could not initialize HW encoding device using " << HWEncoderTypeParser.Str(this->dataPtr->hwEncoderType) << ". " << av_err2str_cpp(ret) << ". Video encoding will use a software encoder instead.\n"; @@ -546,7 +546,7 @@ void HWEncoder::ConfigHWAccel(AVCodecContext* _encoderContext) if (ret < 0) { - ignerr << "Could not initialize HW encoding device using " + gzerr << "Could not initialize HW encoding device using " << HWEncoderTypeParser.Str(this->dataPtr->hwEncoderType) << ". " << av_err2str_cpp(ret) << ". Video encoding will use a software encoder instead.\n"; @@ -601,7 +601,7 @@ bool HWEncoder::Implementation::ConfigHWSurface(AVCodecContext* _encoderContext) auto* hw_frames_ref = av_hwframe_ctx_alloc(this->hwDevice); // lavu 55.6.0 if (hw_frames_ref == nullptr) { - ignerr << "Could not allocate hardware surface for format " + gzerr << "Could not allocate hardware surface for format " << av_get_pix_fmt_name(_encoderContext->pix_fmt) // lavu 51.3.0 << " and HW encoder " << HWEncoderTypeParser.Str(this->hwEncoderType) << ". Encoder will use a software surface.\n"; @@ -619,7 +619,7 @@ bool HWEncoder::Implementation::ConfigHWSurface(AVCodecContext* _encoderContext) if (ret < 0) { av_buffer_unref(&hw_frames_ref); - ignerr << "Could not initialize hardware surface for format " + gzerr << "Could not initialize hardware surface for format " << av_get_pix_fmt_name(_encoderContext->pix_fmt) // lavu 51.3.0 << " and HW encoder " << HWEncoderTypeParser.Str(this->hwEncoderType) @@ -637,7 +637,7 @@ bool HWEncoder::Implementation::ConfigHWSurface(AVCodecContext* _encoderContext) { av_buffer_unref(&_encoderContext->hw_frames_ctx); - ignerr << "Could not allocate frame for format " + gzerr << "Could not allocate frame for format " << av_get_pix_fmt_name(_encoderContext->pix_fmt) // lavu 51.3.0 << " and HW encoder " << HWEncoderTypeParser.Str(this->hwEncoderType) << ". Encoder will use a software surface.\n"; @@ -651,7 +651,7 @@ bool HWEncoder::Implementation::ConfigHWSurface(AVCodecContext* _encoderContext) av_frame_free(&this->avOutHwFrame); // lavc 55.45.101 av_buffer_unref(&_encoderContext->hw_frames_ctx); - ignerr << "Could not initialize hardware frame for format " + gzerr << "Could not initialize hardware frame for format " << av_get_pix_fmt_name(_encoderContext->pix_fmt) // lavu 51.3.0 << " and HW encoder " << HWEncoderTypeParser.Str(this->hwEncoderType) << ". Encoder will use a software surface. The reason is: " @@ -659,7 +659,7 @@ bool HWEncoder::Implementation::ConfigHWSurface(AVCodecContext* _encoderContext) return false; } - ignmsg << "Using HW surface for the encoder." << std::endl; + gzmsg << "Using HW surface for the encoder." << std::endl; return true; } @@ -679,7 +679,7 @@ AVFrame* HWEncoder::GetFrameForEncoder(AVFrame* _inFrame) HWEncoder::HWEncoder(const FlagSet<HWEncoderType> _allowedHwEncoders, const std::string& _hwAccelDevice, std::optional<bool> _useHwSurface) - : dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) + : dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { this->dataPtr->initHwEncoders = _allowedHwEncoders; this->dataPtr->initHwDevice = _hwAccelDevice; diff --git a/av/src/Util.cc b/av/src/Util.cc index 1cf75596b..543379e57 100644 --- a/av/src/Util.cc +++ b/av/src/Util.cc @@ -17,9 +17,9 @@ #include <string> -#include <ignition/common/Console.hh> -#include <ignition/common/av/Util.hh> -#include <ignition/common/ffmpeg_inc.hh> +#include <gz/common/Console.hh> +#include <gz/common/av/Util.hh> +#include <gz/common/ffmpeg_inc.hh> ///////////////////////////////////////////////// // avcodec log callback. We use this to redirect message to gazebo's console @@ -55,19 +55,19 @@ void logCallback(void *_ptr, int _level, const char *_fmt, va_list _args) case AV_LOG_PANIC: case AV_LOG_FATAL: case AV_LOG_ERROR: - ignerr << msg << std::endl; + gzerr << msg << std::endl; break; case AV_LOG_WARNING: - ignwarn << msg << std::endl; + gzwarn << msg << std::endl; break; default: - ignmsg << msg << std::endl; + gzmsg << msg << std::endl; break; } } ///////////////////////////////////////////////// -void ignition::common::load() +void gz::common::load() { static bool first = true; if (first) diff --git a/av/src/Video.cc b/av/src/Video.cc index 68fb469f6..872a6af29 100644 --- a/av/src/Video.cc +++ b/av/src/Video.cc @@ -14,17 +14,17 @@ * limitations under the License. * */ -#include "ignition/common/config.hh" -#include "ignition/common/Console.hh" -#include "ignition/common/ffmpeg_inc.hh" -#include "ignition/common/Video.hh" -#include "ignition/common/av/Util.hh" +#include "gz/common/config.hh" +#include "gz/common/Console.hh" +#include "gz/common/ffmpeg_inc.hh" +#include "gz/common/Video.hh" +#include "gz/common/av/Util.hh" -using namespace ignition; +using namespace gz; using namespace common; // Private data structure for the Video class -class ignition::common::Video::Implementation +class gz::common::Video::Implementation { /// \brief libav Format I/O context public: AVFormatContext *formatCtx = nullptr; @@ -61,10 +61,10 @@ class ignition::common::Video::Implementation ///////////////////////////////////////////////// Video::Video() - : dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) + : dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { // Make sure libav is loaded. - ignition::common::load(); + gz::common::load(); } ///////////////////////////////////////////////// @@ -106,14 +106,14 @@ bool Video::Load(const std::string &_filename) if (avformat_open_input(&this->dataPtr->formatCtx, _filename.c_str(), nullptr, nullptr) < 0) { - ignerr << "Unable to read video file[" << _filename << "]\n"; + gzerr << "Unable to read video file[" << _filename << "]\n"; return false; } // Retrieve stream information if (avformat_find_stream_info(this->dataPtr->formatCtx, nullptr) < 0) { - ignerr << "Couldn't find stream information\n"; + gzerr << "Couldn't find stream information\n"; return false; } @@ -137,7 +137,7 @@ bool Video::Load(const std::string &_filename) if (this->dataPtr->videoStream == -1) { - ignerr << "Unable to find a video stream\n"; + gzerr << "Unable to find a video stream\n"; return false; } @@ -150,7 +150,7 @@ bool Video::Load(const std::string &_filename) #endif if (codec == nullptr) { - ignerr << "Codec not found\n"; + gzerr << "Codec not found\n"; return false; } @@ -161,7 +161,7 @@ bool Video::Load(const std::string &_filename) this->dataPtr->codecCtx = avcodec_alloc_context3(codec); if (!this->dataPtr->codecCtx) { - ignerr << "Failed to allocate the codec context" << std::endl; + gzerr << "Failed to allocate the codec context" << std::endl; return false; } @@ -169,7 +169,7 @@ bool Video::Load(const std::string &_filename) if (avcodec_parameters_to_context(this->dataPtr->codecCtx, stream->codecpar) < 0) { - ignerr << "Failed to copy codec parameters to decoder context" + gzerr << "Failed to copy codec parameters to decoder context" << std::endl; return false; } @@ -192,7 +192,7 @@ bool Video::Load(const std::string &_filename) // Open codec if (avcodec_open2(this->dataPtr->codecCtx, codec, nullptr) < 0) { - ignerr << "Could not open codec\n"; + gzerr << "Could not open codec\n"; return false; } @@ -207,7 +207,7 @@ bool Video::Load(const std::string &_filename) if (this->dataPtr->swsCtx == nullptr) { - ignerr << "Error while calling sws_getContext\n"; + gzerr << "Error while calling sws_getContext\n"; return false; } @@ -254,7 +254,7 @@ bool Video::NextFrame(unsigned char **_buffer) packet = av_packet_alloc(); if (!packet) { - ignerr << "Failed to allocate AVPacket" << std::endl; + gzerr << "Failed to allocate AVPacket" << std::endl; return false; } @@ -277,7 +277,7 @@ bool Video::NextFrame(unsigned char **_buffer) } else { - ignerr << "Error reading packet: " << av_err2str_cpp(ret) + gzerr << "Error reading packet: " << av_err2str_cpp(ret) << ". Stopped reading the file." << std::endl; return false; } @@ -303,7 +303,7 @@ bool Video::NextFrame(unsigned char **_buffer) } else if (ret < 0) { - ignerr << "Error while processing packet data: " + gzerr << "Error while processing packet data: " << av_err2str_cpp(ret) << std::endl; // continue processing data } diff --git a/av/src/VideoEncoder.cc b/av/src/VideoEncoder.cc index 05a26c911..c89e201a7 100644 --- a/av/src/VideoEncoder.cc +++ b/av/src/VideoEncoder.cc @@ -18,23 +18,23 @@ #include <mutex> -#include <ignition/common/av/Util.hh> -#include "ignition/common/ffmpeg_inc.hh" -#include "ignition/common/Console.hh" -#include "ignition/common/VideoEncoder.hh" -#include "ignition/common/StringUtils.hh" +#include <gz/common/av/Util.hh> +#include "gz/common/ffmpeg_inc.hh" +#include "gz/common/Console.hh" +#include "gz/common/VideoEncoder.hh" +#include "gz/common/StringUtils.hh" #ifdef IGN_COMMON_BUILD_HW_VIDEO -#include "ignition/common/HWEncoder.hh" +#include "gz/common/HWEncoder.hh" #endif -using namespace ignition; +using namespace gz; using namespace common; using namespace std; // Private data class // hidden visibility specifier has to be explicitly set to silent a gcc warning -class IGNITION_COMMON_AV_HIDDEN ignition::common::VideoEncoder::Implementation +class GZ_COMMON_AV_HIDDEN gz::common::VideoEncoder::Implementation { /// \brief Name of the file which stores the video while it is being /// recorded. @@ -144,10 +144,10 @@ AVFrame* VideoEncoder::Implementation::GetFrameForEncoder(AVFrame* _inFrame) ///////////////////////////////////////////////// VideoEncoder::VideoEncoder() - : dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) + : dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { // Make sure libav is loaded. - ignition::common::load(); + gz::common::load(); } ///////////////////////////////////////////////// @@ -216,7 +216,7 @@ bool VideoEncoder::Start(const std::string &_format, #ifndef IGN_COMMON_BUILD_HW_VIDEO if (allowedEncoders != HWEncoderType::NONE) { - ignwarn << "Hardware encoding with encoders " << allowedEncodersStr + gzwarn << "Hardware encoding with encoders " << allowedEncodersStr << " was requested, but ignition-common is built without HW " << "encoding support. A software encoder will be used instead." << std::endl; @@ -270,7 +270,7 @@ bool VideoEncoder::Start( auto success = removeFile(this->dataPtr->filename.c_str()); if (!success) { - ignerr << "Failed to remove temp file [" << this->dataPtr->filename + gzerr << "Failed to remove temp file [" << this->dataPtr->filename << "]" << std::endl; } } @@ -316,7 +316,7 @@ bool VideoEncoder::Start( { if (this->dataPtr->format.compare("v4l2") == 0) { - ignerr << "A video4linux loopback device filename must be specified on " + gzerr << "A video4linux loopback device filename must be specified on " << "Start\n"; this->Reset(); return false; @@ -353,14 +353,14 @@ bool VideoEncoder::Start( outputFormat, nullptr, this->dataPtr->filename.c_str()); if (result < 0) { - ignerr << "Failed to allocate AV context [" << av_err2str_cpp(result) + gzerr << "Failed to allocate AV context [" << av_err2str_cpp(result) << "]" << std::endl; } break; } } #else - ignerr << "libavdevice version >= 56.4.100 is required for v4l2 recording. " + gzerr << "libavdevice version >= 56.4.100 is required for v4l2 recording. " << "This version is available on Ubuntu Xenial or greater.\n"; return false; #endif @@ -372,7 +372,7 @@ bool VideoEncoder::Start( if (!outputFormat) { - ignwarn << "Could not deduce output format from file extension." + gzwarn << "Could not deduce output format from file extension." << "Using MPEG.\n"; } @@ -402,7 +402,7 @@ bool VideoEncoder::Start( nullptr, nullptr, this->dataPtr->filename.c_str()); if (result < 0) { - ignerr << "Failed to allocate AV context [" << av_err2str_cpp(result) + gzerr << "Failed to allocate AV context [" << av_err2str_cpp(result) << "]" << std::endl; } #endif @@ -411,7 +411,7 @@ bool VideoEncoder::Start( // Make sure allocation occurred. if (!this->dataPtr->formatCtx) { - ignerr << "Unable to allocate format context. Video encoding not started\n"; + gzerr << "Unable to allocate format context. Video encoding not started\n"; this->Reset(); return false; } @@ -427,7 +427,7 @@ bool VideoEncoder::Start( auto* encoder = this->dataPtr->FindEncoder(codecId); if (!encoder) { - ignerr << "Codec for[" + gzerr << "Codec for[" #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 24, 1) << this->dataPtr->formatCtx->oformat->name #else @@ -438,7 +438,7 @@ bool VideoEncoder::Start( return false; } - ignmsg << "Using encoder " << encoder->name << std::endl; + gzmsg << "Using encoder " << encoder->name << std::endl; // Create a new video stream #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 24, 1) @@ -451,7 +451,7 @@ bool VideoEncoder::Start( if (!this->dataPtr->videoStream) { - ignerr << "Could not allocate stream. Video encoding is not started\n"; + gzerr << "Could not allocate stream. Video encoding is not started\n"; this->Reset(); return false; } @@ -466,7 +466,7 @@ bool VideoEncoder::Start( if (!this->dataPtr->codecCtx) { - ignerr << "Could not allocate an encoding context." + gzerr << "Could not allocate an encoding context." << "Video encoding is not started\n"; this->Reset(); return false; @@ -538,13 +538,13 @@ bool VideoEncoder::Start( int ret = avcodec_open2(this->dataPtr->codecCtx, encoder, 0); if (ret < 0) { - ignerr << "Could not open video codec: " << av_err2str_cpp(ret) + gzerr << "Could not open video codec: " << av_err2str_cpp(ret) << ". Video encoding is not started\n"; #ifdef IGN_COMMON_BUILD_HW_VIDEO if (AVUNERROR(ret) == ENOMEM && this->dataPtr->hwEncoder->GetEncoderType() == HWEncoderType::NVENC) { - ignwarn << "If this computer has non-server-class GPUs (like GeForce), " + gzwarn << "If this computer has non-server-class GPUs (like GeForce), " << "it is possible that you have reached the maximum number of " << "simultaneous NVENC sessions (most probably 3). This limit is " << "not per GPU, but per the whole computer regardless of the " @@ -568,7 +568,7 @@ bool VideoEncoder::Start( if (!this->dataPtr->avOutFrame) { - ignerr << "Could not allocate video frame. Video encoding is not started\n"; + gzerr << "Could not allocate video frame. Video encoding is not started\n"; this->Reset(); return false; } @@ -582,7 +582,7 @@ bool VideoEncoder::Start( // allocates a refcounted buffer, which is easier to manage if (av_frame_get_buffer(this->dataPtr->avOutFrame, 32) > 0) { - ignerr << "Could not allocate raw picture buffer. " + gzerr << "Could not allocate raw picture buffer. " << "Video encoding is not started\n"; this->Reset(); return false; @@ -599,7 +599,7 @@ bool VideoEncoder::Start( #endif if (ret < 0) { - ignerr << "Could not copy the stream parameters:" << av_err2str_cpp(ret) + gzerr << "Could not copy the stream parameters:" << av_err2str_cpp(ret) << ". Video encoding not started\n"; return false; } @@ -618,7 +618,7 @@ bool VideoEncoder::Start( if (ret < 0) { - ignerr << "Could not open '" << this->dataPtr->filename << "'. " + gzerr << "Could not open '" << this->dataPtr->filename << "'. " << av_err2str_cpp(ret) << ". Video encoding is not started\n"; this->Reset(); return false; @@ -629,7 +629,7 @@ bool VideoEncoder::Start( ret = avformat_write_header(this->dataPtr->formatCtx, nullptr); if (ret < 0) { - ignerr << "Error occured when opening output file: " << av_err2str_cpp(ret) + gzerr << "Error occured when opening output file: " << av_err2str_cpp(ret) << ". Video encoding is not started\n"; this->Reset(); return false; @@ -665,7 +665,7 @@ bool VideoEncoder::AddFrame(const unsigned char *_frame, if (!this->dataPtr->encoding) { - ignerr << "Start encoding before adding a frame\n"; + gzerr << "Start encoding before adding a frame\n"; return false; } @@ -736,7 +736,7 @@ bool VideoEncoder::AddFrame(const unsigned char *_frame, if (this->dataPtr->swsCtx == nullptr) { - ignerr << "Error while calling sws_getContext\n"; + gzerr << "Error while calling sws_getContext\n"; return false; } } @@ -848,7 +848,7 @@ int VideoEncoder::Implementation::ProcessPacket(AVPacket* avPacket) int ret = av_interleaved_write_frame(this->formatCtx, avPacket); if (ret < 0) - ignerr << "Error writing frame: " << av_err2str_cpp(ret) << std::endl; + gzerr << "Error writing frame: " << av_err2str_cpp(ret) << std::endl; return ret; } @@ -965,7 +965,7 @@ bool VideoEncoder::SaveToFile(const std::string &_filename) if (!result) { - ignerr << "Unable to rename file from[" << this->dataPtr->filename + gzerr << "Unable to rename file from[" << this->dataPtr->filename << "] to [" << _filename << "]\n"; } } @@ -989,7 +989,7 @@ void VideoEncoder::Reset() auto success = removeFile(this->dataPtr->filename.c_str()); if (!success) { - ignerr << "Failed to remove temp file [" << this->dataPtr->filename + gzerr << "Failed to remove temp file [" << this->dataPtr->filename << "]" << std::endl; } } diff --git a/av/src/VideoEncoder_TEST.cc b/av/src/VideoEncoder_TEST.cc index 8f376edef..3e04763e2 100644 --- a/av/src/VideoEncoder_TEST.cc +++ b/av/src/VideoEncoder_TEST.cc @@ -15,13 +15,13 @@ */ #include <gtest/gtest.h> -#include "ignition/common/Console.hh" -#include "ignition/common/VideoEncoder.hh" +#include "gz/common/Console.hh" +#include "gz/common/VideoEncoder.hh" -#include "ignition/common/testing/AutoLogFixture.hh" -#include "ignition/common/testing/TestPaths.hh" +#include "gz/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/TestPaths.hh" -using namespace ignition; +using namespace gz; using namespace common; class VideoEncoderTest : public common::testing::AutoLogFixture @@ -34,7 +34,7 @@ class VideoEncoderTest : public common::testing::AutoLogFixture ASSERT_TRUE(tempDir->Valid()) << tempDir->Path(); } - public: std::shared_ptr<ignition::common::TempDirectory> tempDir; + public: std::shared_ptr<gz::common::TempDirectory> tempDir; }; ///////////////////////////////////////////////// diff --git a/av/src/ffmpeg_inc.cc b/av/src/ffmpeg_inc.cc index 2899b2ca9..2fdfe1f13 100644 --- a/av/src/ffmpeg_inc.cc +++ b/av/src/ffmpeg_inc.cc @@ -14,9 +14,9 @@ * limitations under the License. * */ -#include "ignition/common/ffmpeg_inc.hh" +#include "gz/common/ffmpeg_inc.hh" -using namespace ignition; +using namespace gz; ////////////////////////////////////////////////// AVFrame *common::AVFrameAlloc(void) diff --git a/events/include/gz/common/Event.hh b/events/include/gz/common/Event.hh index d814b445e..a86c3ac07 100644 --- a/events/include/gz/common/Event.hh +++ b/events/include/gz/common/Event.hh @@ -29,13 +29,13 @@ #include <gz/common/events/Export.hh> #include <gz/common/events/Types.hh> -namespace ignition +namespace gz { namespace common { /// \class Event Event.hh gz/common/Event.hh /// \brief Base class for all events - class IGNITION_COMMON_EVENTS_VISIBLE Event + class GZ_COMMON_EVENTS_VISIBLE Event { /// \brief Constructor public: Event(); @@ -60,7 +60,7 @@ namespace ignition }; /// \brief A class that encapsulates a connection. - class IGNITION_COMMON_EVENTS_VISIBLE Connection + class GZ_COMMON_EVENTS_VISIBLE Connection { /// \brief Constructor. /// \param[in] _e Event pointer to connect with. diff --git a/events/include/gz/common/KeyEvent.hh b/events/include/gz/common/KeyEvent.hh index 0b1c2297b..5b3c1f757 100644 --- a/events/include/gz/common/KeyEvent.hh +++ b/events/include/gz/common/KeyEvent.hh @@ -23,7 +23,7 @@ #include <gz/common/events/Export.hh> #include <gz/utils/SuppressWarning.hh> -namespace ignition +namespace gz { namespace common { @@ -32,7 +32,7 @@ namespace ignition /// \class KeyEvent KeyEvent.hh gz/common/KeyEvent.hh /// \brief Generic description of a keyboard event. - class IGNITION_COMMON_EVENTS_VISIBLE KeyEvent + class GZ_COMMON_EVENTS_VISIBLE KeyEvent { /// \brief Key event types enumeration. public: enum EventType {NO_EVENT, PRESS, RELEASE}; diff --git a/events/include/gz/common/MouseEvent.hh b/events/include/gz/common/MouseEvent.hh index c31e3097a..8c73206ad 100644 --- a/events/include/gz/common/MouseEvent.hh +++ b/events/include/gz/common/MouseEvent.hh @@ -23,7 +23,7 @@ #include <gz/common/events/Export.hh> #include <gz/utils/SuppressWarning.hh> -namespace ignition +namespace gz { namespace common { @@ -32,7 +32,7 @@ namespace ignition /// \class MouseEvent MouseEvent.hh gz/common/MouseEvent.hh /// \brief Generic description of a mouse event. - class IGNITION_COMMON_EVENTS_VISIBLE MouseEvent + class GZ_COMMON_EVENTS_VISIBLE MouseEvent { /// \brief Standard mouse buttons enumeration. public: enum MouseButton @@ -81,11 +81,11 @@ namespace ignition /// \brief Get mouse pointer position on the screen. /// \return Mouse pointer position on the screen. - public: ignition::math::Vector2i Pos() const; + public: gz::math::Vector2i Pos() const; /// \brief Set mouse pointer position on the screen. /// \param[in] _pos Mouse pointer position on the screen. - public: void SetPos(const ignition::math::Vector2i &_pos); + public: void SetPos(const gz::math::Vector2i &_pos); /// \brief Set mouse pointer position on the screen. /// \param[in] _x Mouse pointer X position on the screen. @@ -94,11 +94,11 @@ namespace ignition /// \brief Get the previous position. /// \return The previous mouse position. - public: ignition::math::Vector2i PrevPos() const; + public: gz::math::Vector2i PrevPos() const; /// \brief Set the previous position. /// \param[in] _pos Previous mouse pointer position on the screen. - public: void SetPrevPos(const ignition::math::Vector2i &_pos); + public: void SetPrevPos(const gz::math::Vector2i &_pos); /// \brief Set the previous position. /// \param[in] _x Previous mouse pointer X position on the screen. @@ -107,11 +107,11 @@ namespace ignition /// \brief Get the position of button press. /// \return Screen position of a button press. - public: ignition::math::Vector2i PressPos() const; + public: gz::math::Vector2i PressPos() const; /// \brief Set the position of button press. /// \param[in] _pos Mouse pointer position on the screen. - public: void SetPressPos(const ignition::math::Vector2i &_pos); + public: void SetPressPos(const gz::math::Vector2i &_pos); /// \brief Set the position of button press. /// \param[in] _x Mouse pointer X position on the screen. @@ -120,11 +120,11 @@ namespace ignition /// \brief Get the scroll position. /// \return The scroll position. - public: ignition::math::Vector2i Scroll() const; + public: gz::math::Vector2i Scroll() const; /// \brief Set the scroll position. /// \param[in] _scroll Scroll position. - public: void SetScroll(const ignition::math::Vector2i &_scroll); + public: void SetScroll(const gz::math::Vector2i &_scroll); /// \brief Set the scroll position. /// \param[in] _x Scroll X position. diff --git a/events/include/gz/common/events/Types.hh b/events/include/gz/common/events/Types.hh index f1ba2544f..39aacfef6 100644 --- a/events/include/gz/common/events/Types.hh +++ b/events/include/gz/common/events/Types.hh @@ -21,7 +21,7 @@ #include <memory> // This header contains forward declarations for some event types -namespace ignition +namespace gz { namespace common { diff --git a/events/include/ignition/common/Event.hh b/events/include/ignition/common/Event.hh index 7824cb7bd..8340f2eed 100644 --- a/events/include/ignition/common/Event.hh +++ b/events/include/ignition/common/Event.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Event.hh> +#include <ignition/common/config.hh> diff --git a/events/include/ignition/common/KeyEvent.hh b/events/include/ignition/common/KeyEvent.hh index 0f4b956e9..4fd2d79b7 100644 --- a/events/include/ignition/common/KeyEvent.hh +++ b/events/include/ignition/common/KeyEvent.hh @@ -16,3 +16,4 @@ */ #include <gz/common/KeyEvent.hh> +#include <ignition/common/config.hh> diff --git a/events/include/ignition/common/MouseEvent.hh b/events/include/ignition/common/MouseEvent.hh index 3eb0b4a70..ed1a11748 100644 --- a/events/include/ignition/common/MouseEvent.hh +++ b/events/include/ignition/common/MouseEvent.hh @@ -16,3 +16,4 @@ */ #include <gz/common/MouseEvent.hh> +#include <ignition/common/config.hh> diff --git a/events/include/ignition/common/events.hh b/events/include/ignition/common/events.hh index 7301375ec..cecf803e1 100644 --- a/events/include/ignition/common/events.hh +++ b/events/include/ignition/common/events.hh @@ -16,3 +16,4 @@ */ #include <gz/common/events.hh> +#include <ignition/common/config.hh> diff --git a/events/include/ignition/common/events/Export.hh b/events/include/ignition/common/events/Export.hh index ad7ef3813..b2711adf6 100644 --- a/events/include/ignition/common/events/Export.hh +++ b/events/include/ignition/common/events/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/events/Export.hh> +#include <ignition/common/config.hh> diff --git a/events/include/ignition/common/events/Types.hh b/events/include/ignition/common/events/Types.hh index 665871374..158129e35 100644 --- a/events/include/ignition/common/events/Types.hh +++ b/events/include/ignition/common/events/Types.hh @@ -16,3 +16,4 @@ */ #include <gz/common/events/Types.hh> +#include <ignition/common/config.hh> diff --git a/events/include/ignition/common/events/detail/Export.hh b/events/include/ignition/common/events/detail/Export.hh index 02551dd85..1e8e23733 100644 --- a/events/include/ignition/common/events/detail/Export.hh +++ b/events/include/ignition/common/events/detail/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/events/detail/Export.hh> +#include <ignition/common/config.hh> diff --git a/events/src/Event.cc b/events/src/Event.cc index b4a24a71d..a0e3cc61d 100644 --- a/events/src/Event.cc +++ b/events/src/Event.cc @@ -15,10 +15,10 @@ * */ -#include "ignition/common/Console.hh" -#include "ignition/common/Event.hh" +#include "gz/common/Console.hh" +#include "gz/common/Event.hh" -using namespace ignition; +using namespace gz; using namespace common; ////////////////////////////////////////////////// @@ -58,7 +58,7 @@ Connection::~Connection() if ((this->event && !this->event->Signaled()) && diffTime < std::chrono::nanoseconds(10000)) { - ignwarn << "Warning: Deleting a connection right after creation. " + gzwarn << "Warning: Deleting a connection right after creation. " << "Make sure to save the ConnectionPtr from a Connect call\n"; } diff --git a/events/src/Event_TEST.cc b/events/src/Event_TEST.cc index a3ee29e96..cf4db4172 100644 --- a/events/src/Event_TEST.cc +++ b/events/src/Event_TEST.cc @@ -17,13 +17,13 @@ #include <gtest/gtest.h> -#include "ignition/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/AutoLogFixture.hh" #include <functional> -#include <ignition/common/Event.hh> -#include <ignition/common/Util.hh> +#include <gz/common/Event.hh> +#include <gz/common/Util.hh> -using namespace ignition; +using namespace gz; class EventTest : public common::testing::AutoLogFixture { }; diff --git a/events/src/KeyEvent.cc b/events/src/KeyEvent.cc index 8686600cd..03340c81a 100644 --- a/events/src/KeyEvent.cc +++ b/events/src/KeyEvent.cc @@ -14,12 +14,12 @@ * limitations under the License. * */ -#include "ignition/common/KeyEvent.hh" +#include "gz/common/KeyEvent.hh" -using namespace ignition; +using namespace gz; using namespace common; -class ignition::common::KeyEventPrivate +class gz::common::KeyEventPrivate { /// \brief Event type. public: KeyEvent::EventType type = KeyEvent::NO_EVENT; diff --git a/events/src/KeyEvent_TEST.cc b/events/src/KeyEvent_TEST.cc index cd9d1fe60..c622cda5d 100644 --- a/events/src/KeyEvent_TEST.cc +++ b/events/src/KeyEvent_TEST.cc @@ -16,9 +16,9 @@ */ #include <gtest/gtest.h> -#include "ignition/common/KeyEvent.hh" +#include "gz/common/KeyEvent.hh" -using namespace ignition; +using namespace gz; using namespace common; ///////////////////////////////////////////////// diff --git a/events/src/MouseEvent.cc b/events/src/MouseEvent.cc index 4d9628401..e11dd1a31 100644 --- a/events/src/MouseEvent.cc +++ b/events/src/MouseEvent.cc @@ -15,14 +15,14 @@ * */ -#include <ignition/math/Vector2.hh> -#include "ignition/common/MouseEvent.hh" +#include <gz/math/Vector2.hh> +#include "gz/common/MouseEvent.hh" -using namespace ignition; +using namespace gz; using namespace common; /// \brief Mouse event private data -class ignition::common::MouseEventPrivate +class gz::common::MouseEventPrivate { /// \brief Constructor. public: MouseEventPrivate() @@ -33,16 +33,16 @@ class ignition::common::MouseEventPrivate {} /// \brief Mouse pointer position on the screen. - public: ignition::math::Vector2i pos; + public: gz::math::Vector2i pos; /// \brief Previous position. - public: ignition::math::Vector2i prevPos; + public: gz::math::Vector2i prevPos; /// \brief Position of button press. - public: ignition::math::Vector2i pressPos; + public: gz::math::Vector2i pressPos; /// \brief Scroll position. - public: ignition::math::Vector2i scroll; + public: gz::math::Vector2i scroll; /// \brief Scaling factor. public: float moveScale; @@ -88,13 +88,13 @@ MouseEvent::~MouseEvent() } ///////////////////////////////////////////////// -ignition::math::Vector2i MouseEvent::Pos() const +gz::math::Vector2i MouseEvent::Pos() const { return this->dataPtr->pos; } ///////////////////////////////////////////////// -void MouseEvent::SetPos(const ignition::math::Vector2i &_pos) +void MouseEvent::SetPos(const gz::math::Vector2i &_pos) { this->dataPtr->pos = _pos; } @@ -106,13 +106,13 @@ void MouseEvent::SetPos(int _x, int _y) } ///////////////////////////////////////////////// -ignition::math::Vector2i MouseEvent::PrevPos() const +gz::math::Vector2i MouseEvent::PrevPos() const { return this->dataPtr->prevPos; } ///////////////////////////////////////////////// -void MouseEvent::SetPrevPos(const ignition::math::Vector2i &_pos) +void MouseEvent::SetPrevPos(const gz::math::Vector2i &_pos) { this->dataPtr->prevPos = _pos; } @@ -124,13 +124,13 @@ void MouseEvent::SetPrevPos(int _x, int _y) } ///////////////////////////////////////////////// -ignition::math::Vector2i MouseEvent::PressPos() const +gz::math::Vector2i MouseEvent::PressPos() const { return this->dataPtr->pressPos; } ///////////////////////////////////////////////// -void MouseEvent::SetPressPos(const ignition::math::Vector2i &_pos) +void MouseEvent::SetPressPos(const gz::math::Vector2i &_pos) { this->dataPtr->pressPos = _pos; } @@ -142,13 +142,13 @@ void MouseEvent::SetPressPos(int _x, int _y) } ///////////////////////////////////////////////// -ignition::math::Vector2i MouseEvent::Scroll() const +gz::math::Vector2i MouseEvent::Scroll() const { return this->dataPtr->scroll; } ///////////////////////////////////////////////// -void MouseEvent::SetScroll(const ignition::math::Vector2i &_scroll) +void MouseEvent::SetScroll(const gz::math::Vector2i &_scroll) { this->dataPtr->scroll = _scroll; } diff --git a/events/src/MouseEvent_TEST.cc b/events/src/MouseEvent_TEST.cc index 59db03c12..93f4f0d6c 100644 --- a/events/src/MouseEvent_TEST.cc +++ b/events/src/MouseEvent_TEST.cc @@ -17,21 +17,21 @@ #include <gtest/gtest.h> -#include "ignition/common/testing/AutoLogFixture.hh" -#include "ignition/common/MouseEvent.hh" -#include "ignition/common/config.hh" +#include "gz/common/testing/AutoLogFixture.hh" +#include "gz/common/MouseEvent.hh" +#include "gz/common/config.hh" -using namespace ignition; +using namespace gz; class MouseEvent : public common::testing::AutoLogFixture { }; ///////////////////////////////////////////////// TEST_F(MouseEvent, CopyConstructor) { - ignition::math::Vector2i pos(1, 25); - ignition::math::Vector2i prevPos(2, 26); - ignition::math::Vector2i pressPos(3, 24); - ignition::math::Vector2i scroll(2, 3); + gz::math::Vector2i pos(1, 25); + gz::math::Vector2i prevPos(2, 26); + gz::math::Vector2i pressPos(3, 24); + gz::math::Vector2i scroll(2, 3); float moveScale = 0.3f; bool dragging = true; common::MouseEvent::EventType type = common::MouseEvent::PRESS; @@ -95,10 +95,10 @@ TEST_F(MouseEvent, CopyConstructor) EXPECT_EQ(otherEvent2.Control(), control); // update the original mouse event values - ignition::math::Vector2i newPos(3, 18); - ignition::math::Vector2i newPrevPos(2, 17); - ignition::math::Vector2i newPressPos(3, 16); - ignition::math::Vector2i newScroll(1, 2); + gz::math::Vector2i newPos(3, 18); + gz::math::Vector2i newPrevPos(2, 17); + gz::math::Vector2i newPressPos(3, 16); + gz::math::Vector2i newScroll(1, 2); float newMoveScale = 0.4f; bool newDragging = false; common::MouseEvent::EventType newType = common::MouseEvent::RELEASE; @@ -162,10 +162,10 @@ TEST_F(MouseEvent, CopyConstructor) ///////////////////////////////////////////////// TEST_F(MouseEvent, Assignment) { - ignition::math::Vector2i pos(1, 25); - ignition::math::Vector2i prevPos(2, 26); - ignition::math::Vector2i pressPos(3, 24); - ignition::math::Vector2i scroll(2, 3); + gz::math::Vector2i pos(1, 25); + gz::math::Vector2i prevPos(2, 26); + gz::math::Vector2i pressPos(3, 24); + gz::math::Vector2i scroll(2, 3); float moveScale = 0.3f; bool dragging = true; common::MouseEvent::EventType type = common::MouseEvent::PRESS; @@ -217,10 +217,10 @@ TEST_F(MouseEvent, Assignment) EXPECT_EQ(otherEvent.Control(), control); // update the original mouse event values - ignition::math::Vector2i newPos(3, 18); - ignition::math::Vector2i newPrevPos(2, 17); - ignition::math::Vector2i newPressPos(3, 16); - ignition::math::Vector2i newScroll(1, 2); + gz::math::Vector2i newPos(3, 18); + gz::math::Vector2i newPrevPos(2, 17); + gz::math::Vector2i newPressPos(3, 16); + gz::math::Vector2i newScroll(1, 2); float newMoveScale = 0.4f; bool newDragging = false; common::MouseEvent::EventType newType = common::MouseEvent::RELEASE; diff --git a/examples/README.md b/examples/README.md index 84917e754..1b5596454 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,13 +1,13 @@ # Examples -These examples demonstrate various Ignition Common features. +These examples demonstrate various Gazebo Common features. ## Build -After installing Ignition Common, from source or from binaries, build with: +After installing Gazebo Common, from source or from binaries, build with: ``` -git clone https://github.com/ignitionrobotics/ign-common/ +git clone https://github.com/gazebosim/gz-common/ cd ign-common/examples mkdir build cd build diff --git a/examples/console.cc b/examples/console.cc index 7b5194c57..0faf26593 100644 --- a/examples/console.cc +++ b/examples/console.cc @@ -19,17 +19,17 @@ int main(int argc, char **argv) { // Default verbosity is 1, only error messages show - igndbg << "This is a debug message" << std::endl; - ignmsg << "This is an informational message" << std::endl; - ignwarn << "This is a warning" << std::endl; - ignerr << "This is an error" << std::endl; + gzdbg << "This is a debug message" << std::endl; + gzmsg << "This is an informational message" << std::endl; + gzwarn << "This is a warning" << std::endl; + gzerr << "This is an error" << std::endl; // Change verbosity to level 4, all messages show - ignition::common::Console::SetVerbosity(4); - igndbg << "This is a debug message" << std::endl; - ignmsg << "This is an informational message" << std::endl; - ignwarn << "This is a warning" << std::endl; - ignerr << "This is an error" << std::endl; + gz::common::Console::SetVerbosity(4); + gzdbg << "This is a debug message" << std::endl; + gzmsg << "This is an informational message" << std::endl; + gzwarn << "This is a warning" << std::endl; + gzerr << "This is an error" << std::endl; return 0; } diff --git a/examples/events.cc b/examples/events.cc index 82276813c..ddba9b85c 100644 --- a/examples/events.cc +++ b/examples/events.cc @@ -19,7 +19,7 @@ #include <iostream> #include <gz/common/Event.hh> -using namespace ignition; +using namespace gz; int g_callback = 0; common::EventT<void ()> g_event; diff --git a/examples/logging_performance.cc b/examples/logging_performance.cc index d72bc6558..b06f58490 100644 --- a/examples/logging_performance.cc +++ b/examples/logging_performance.cc @@ -57,7 +57,7 @@ void MeasurePeakDuringLogWrites(const size_t id, std::vector<uint64_t> &result) std::stringstream ss; ss << "Some text to log for thread: " << id << "\n"; auto start_time = std::chrono::high_resolution_clock::now(); - ignmsg << ss.str(); + gzmsg << ss.str(); auto stop_time = std::chrono::high_resolution_clock::now(); uint64_t time_us = std::chrono::duration_cast<std::chrono::microseconds>( stop_time - start_time) @@ -145,7 +145,7 @@ void SaveResultToBucketFile( void run(size_t number_of_threads) { g_counter = 0; - ignition::common::Console::SetVerbosity(4); + gz::common::Console::SetVerbosity(4); std::vector<std::thread> threads(number_of_threads); std::map<size_t, std::vector<uint64_t>> threads_result; diff --git a/examples/profiler.cc b/examples/profiler.cc index b2c41e3ef..e6eafd1dc 100644 --- a/examples/profiler.cc +++ b/examples/profiler.cc @@ -109,19 +109,19 @@ void thread(const char *_thread_name) void sigHandler(int _signal) { - ignmsg << "Received signal: " << _signal << std::endl; + gzmsg << "Received signal: " << _signal << std::endl; running = false; } int main(int argc, char** argv) { - ignition::common::Console::SetVerbosity(4); + gz::common::Console::SetVerbosity(4); IGN_PROFILE_THREAD_NAME("main"); running = true; // Connect signal handler - ignition::common::SignalHandler handler; + gz::common::SignalHandler handler; handler.AddCallback(sigHandler); // Spin up a couple threads with interesting content. @@ -129,7 +129,7 @@ int main(int argc, char** argv) auto t2 = std::thread([](){thread("thread2");}); auto t3 = std::thread([](){thread("thread3");}); - ignmsg << "All threads started, now connect with visualizer" << std::endl; + gzmsg << "All threads started, now connect with visualizer" << std::endl; size_t ii = 0; while(running) diff --git a/geospatial/include/gz/common/geospatial/Dem.hh b/geospatial/include/gz/common/geospatial/Dem.hh index c992cf49a..70fe693b1 100644 --- a/geospatial/include/gz/common/geospatial/Dem.hh +++ b/geospatial/include/gz/common/geospatial/Dem.hh @@ -30,13 +30,13 @@ #include <gz/utils/ImplPtr.hh> -namespace ignition +namespace gz { namespace common { /// \class DEM DEM.hh common/common.hh /// \brief Encapsulates a DEM (Digital Elevation Model) file. - class IGNITION_COMMON_GEOSPATIAL_VISIBLE Dem : public HeightmapData + class GZ_COMMON_GEOSPATIAL_VISIBLE Dem : public HeightmapData { /// \brief Constructor. public: Dem(); @@ -79,8 +79,8 @@ namespace ignition /// \param[out] _latitude Georeferenced latitude. /// \param[out] _longitude Georeferenced longitude. /// \return True if able to retrieve origin coordinates. False otherwise. - public: bool GeoReferenceOrigin(ignition::math::Angle &_latitude, - ignition::math::Angle &_longitude) const; + public: bool GeoReferenceOrigin(gz::math::Angle &_latitude, + gz::math::Angle &_longitude) const; /// \brief Get the terrain's height. Due to the Ogre constrains, this /// value will be a power of two plus one. The value returned might be @@ -120,8 +120,8 @@ namespace ignition /// \param[out] _heights Vector containing the terrain heights. public: void FillHeightMap(const int _subSampling, const unsigned int _vertSize, - const ignition::math::Vector3d &_size, - const ignition::math::Vector3d &_scale, + const gz::math::Vector3d &_size, + const gz::math::Vector3d &_scale, const bool _flipY, std::vector<float> &_heights) const override; @@ -133,8 +133,8 @@ namespace ignition /// \param[out] _longitude Georeferenced longitude. /// \return True if able to retrieve coordinates. False otherwise. private: bool GeoReference(double _x, double _y, - ignition::math::Angle &_latitude, - ignition::math::Angle &_longitude) const; + gz::math::Angle &_latitude, + gz::math::Angle &_longitude) const; /// \brief Get the terrain file as a data array. Due to the Ogre /// constrains, the data might be stored in a bigger vector representing diff --git a/geospatial/include/gz/common/geospatial/HeightmapData.hh b/geospatial/include/gz/common/geospatial/HeightmapData.hh index 9d261f946..d16d4a1a1 100644 --- a/geospatial/include/gz/common/geospatial/HeightmapData.hh +++ b/geospatial/include/gz/common/geospatial/HeightmapData.hh @@ -22,12 +22,12 @@ #include <gz/math/Vector3.hh> #include <gz/common/geospatial/Export.hh> -namespace ignition +namespace gz { namespace common { /// \brief Encapsulates a generic heightmap data file. - class IGNITION_COMMON_GEOSPATIAL_VISIBLE HeightmapData + class GZ_COMMON_GEOSPATIAL_VISIBLE HeightmapData { /// \brief Destructor. public: virtual ~HeightmapData() = default; @@ -43,8 +43,8 @@ namespace ignition /// is filled. /// \param[out] _heights Vector containing the terrain heights. public: virtual void FillHeightMap(int _subSampling, - unsigned int _vertSize, const ignition::math::Vector3d &_size, - const ignition::math::Vector3d &_scale, bool _flipY, + unsigned int _vertSize, const gz::math::Vector3d &_size, + const gz::math::Vector3d &_scale, bool _flipY, std::vector<float> &_heights) const = 0; /// \brief Get the terrain's height. diff --git a/geospatial/include/gz/common/geospatial/ImageHeightmap.hh b/geospatial/include/gz/common/geospatial/ImageHeightmap.hh index 4144371c1..b828eab1f 100644 --- a/geospatial/include/gz/common/geospatial/ImageHeightmap.hh +++ b/geospatial/include/gz/common/geospatial/ImageHeightmap.hh @@ -26,13 +26,13 @@ #include <gz/common/geospatial/HeightmapData.hh> #include <gz/common/Image.hh> -namespace ignition +namespace gz { namespace common { /// \brief Encapsulates an image that will be interpreted as a heightmap. - class IGNITION_COMMON_GEOSPATIAL_VISIBLE ImageHeightmap - : public ignition::common::HeightmapData + class GZ_COMMON_GEOSPATIAL_VISIBLE ImageHeightmap + : public gz::common::HeightmapData { /// \brief Constructor /// \param[in] _filename the path to the image @@ -45,8 +45,8 @@ namespace ignition // Documentation inherited. public: void FillHeightMap(int _subSampling, unsigned int _vertSize, - const ignition::math::Vector3d &_size, - const ignition::math::Vector3d &_scale, bool _flipY, + const gz::math::Vector3d &_size, + const gz::math::Vector3d &_scale, bool _flipY, std::vector<float> &_heights) const; // Documentation inherited. @@ -62,7 +62,7 @@ namespace ignition public: float MaxElevation() const; /// \brief Image containing the heightmap data. - private: ignition::common::Image img; + private: gz::common::Image img; /// \brief Get Heightmap heights given the image /// \param[in] _data Image data @@ -77,8 +77,8 @@ namespace ignition private: template <typename T> void FillHeights(T *_data, int _imgHeight, int _imgWidth, unsigned int _pitch, int _subSampling, unsigned int _vertSize, - const ignition::math::Vector3d &_size, - const ignition::math::Vector3d &_scale, + const gz::math::Vector3d &_size, + const gz::math::Vector3d &_scale, bool _flipY, std::vector<float> &_heights) const { // bytes per pixel diff --git a/geospatial/include/ignition/common/geospatial.hh b/geospatial/include/ignition/common/geospatial.hh index 226fdda11..c085a207b 100644 --- a/geospatial/include/ignition/common/geospatial.hh +++ b/geospatial/include/ignition/common/geospatial.hh @@ -16,3 +16,4 @@ */ #include <gz/common/geospatial.hh> +#include <ignition/common/config.hh> diff --git a/geospatial/include/ignition/common/geospatial/Dem.hh b/geospatial/include/ignition/common/geospatial/Dem.hh index 100ac6190..c1ea4c986 100644 --- a/geospatial/include/ignition/common/geospatial/Dem.hh +++ b/geospatial/include/ignition/common/geospatial/Dem.hh @@ -16,3 +16,4 @@ */ #include <gz/common/geospatial/Dem.hh> +#include <ignition/common/config.hh> diff --git a/geospatial/include/ignition/common/geospatial/Export.hh b/geospatial/include/ignition/common/geospatial/Export.hh index e6553162e..c37df6602 100644 --- a/geospatial/include/ignition/common/geospatial/Export.hh +++ b/geospatial/include/ignition/common/geospatial/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/geospatial/Export.hh> +#include <ignition/common/config.hh> diff --git a/geospatial/include/ignition/common/geospatial/HeightmapData.hh b/geospatial/include/ignition/common/geospatial/HeightmapData.hh index db7742b6c..22b5a3a44 100644 --- a/geospatial/include/ignition/common/geospatial/HeightmapData.hh +++ b/geospatial/include/ignition/common/geospatial/HeightmapData.hh @@ -16,3 +16,4 @@ */ #include <gz/common/geospatial/HeightmapData.hh> +#include <ignition/common/config.hh> diff --git a/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh b/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh index 59a228565..05b819c39 100644 --- a/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh +++ b/geospatial/include/ignition/common/geospatial/ImageHeightmap.hh @@ -16,3 +16,4 @@ */ #include <gz/common/geospatial/ImageHeightmap.hh> +#include <ignition/common/config.hh> diff --git a/geospatial/include/ignition/common/geospatial/detail/Export.hh b/geospatial/include/ignition/common/geospatial/detail/Export.hh index c04a752e2..38c2e359c 100644 --- a/geospatial/include/ignition/common/geospatial/detail/Export.hh +++ b/geospatial/include/ignition/common/geospatial/detail/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/geospatial/detail/Export.hh> +#include <ignition/common/config.hh> diff --git a/geospatial/src/Dem.cc b/geospatial/src/Dem.cc index f004d7e7b..664737e4c 100644 --- a/geospatial/src/Dem.cc +++ b/geospatial/src/Dem.cc @@ -20,14 +20,14 @@ #include <gdal_priv.h> #include <ogr_spatialref.h> -#include "ignition/common/Console.hh" -#include "ignition/common/geospatial/Dem.hh" -#include "ignition/math/SphericalCoordinates.hh" +#include "gz/common/Console.hh" +#include "gz/common/geospatial/Dem.hh" +#include "gz/math/SphericalCoordinates.hh" -using namespace ignition; +using namespace gz; using namespace common; -class ignition::common::Dem::Implementation +class gz::common::Dem::Implementation { /// \brief A set of associated raster bands. public: GDALDataset *dataSet; @@ -67,7 +67,7 @@ class ignition::common::Dem::Implementation ////////////////////////////////////////////////// Dem::Dem() -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->dataSet = nullptr; GDALAllRegister(); @@ -101,8 +101,8 @@ int Dem::Load(const std::string &_filename) unsigned int height; int xSize, ySize; double upLeftX, upLeftY, upRightX, upRightY, lowLeftX, lowLeftY; - ignition::math::Angle upLeftLat, upLeftLong, upRightLat, upRightLong; - ignition::math::Angle lowLeftLat, lowLeftLong; + gz::math::Angle upLeftLat, upLeftLong, upRightLat, upRightLong; + gz::math::Angle lowLeftLat, lowLeftLong; // Sanity check std::string fullName = _filename; @@ -113,7 +113,7 @@ int Dem::Load(const std::string &_filename) if (!exists(findFilePath(fullName))) { - ignerr << "Unable to find DEM file[" << _filename << "]." << std::endl; + gzerr << "Unable to find DEM file[" << _filename << "]." << std::endl; return -1; } @@ -122,7 +122,7 @@ int Dem::Load(const std::string &_filename) if (this->dataPtr->dataSet == nullptr) { - ignerr << "Unable to open DEM file[" << fullName + gzerr << "Unable to open DEM file[" << fullName << "]. Format not recognized as a supported dataset." << std::endl; return -1; } @@ -130,7 +130,7 @@ int Dem::Load(const std::string &_filename) int nBands = this->dataPtr->dataSet->GetRasterCount(); if (nBands != 1) { - ignerr << "Unsupported number of bands in file [" << fullName + "]. Found " + gzerr << "Unsupported number of bands in file [" << fullName + "]. Found " << nBands << " but only 1 is a valid value." << std::endl; return -1; } @@ -166,7 +166,7 @@ int Dem::Load(const std::string &_filename) // Assume non-Earth DEM (e.g., moon) else { - ignwarn << "Failed to automatically compute DEM size. " + gzwarn << "Failed to automatically compute DEM size. " << "Assuming non-Earth DEM. " << std::endl; @@ -175,15 +175,15 @@ int Dem::Load(const std::string &_filename) } // Set the terrain's side (the terrain will be squared after the padding) - if (ignition::math::isPowerOfTwo(ySize - 1)) + if (gz::math::isPowerOfTwo(ySize - 1)) height = ySize; else - height = ignition::math::roundUpPowerOfTwo(ySize) + 1; + height = gz::math::roundUpPowerOfTwo(ySize) + 1; - if (ignition::math::isPowerOfTwo(xSize - 1)) + if (gz::math::isPowerOfTwo(xSize - 1)) width = xSize; else - width = ignition::math::roundUpPowerOfTwo(xSize) + 1; + width = gz::math::roundUpPowerOfTwo(xSize) + 1; this->dataPtr->side = std::max(width, height); @@ -204,8 +204,8 @@ int Dem::Load(const std::string &_filename) if (validNoData <= 0) noDataValue = defaultNoDataValue; - double min = ignition::math::MAX_D; - double max = -ignition::math::MAX_D; + double min = gz::math::MAX_D; + double max = -gz::math::MAX_D; for (const auto &d : this->dataPtr->demData) { if (math::equal(d, this->dataPtr->bufferVal)) @@ -225,10 +225,10 @@ int Dem::Load(const std::string &_filename) if (d > max) max = d; } - if (ignition::math::equal(min, ignition::math::MAX_D) || - ignition::math::equal(max, -ignition::math::MAX_D)) + if (gz::math::equal(min, gz::math::MAX_D) || + gz::math::equal(max, -gz::math::MAX_D)) { - ignwarn << "DEM is composed of 'nodata' values!" << std::endl; + gzwarn << "DEM is composed of 'nodata' values!" << std::endl; } this->dataPtr->minElevation = min; @@ -248,7 +248,7 @@ double Dem::Elevation(double _x, double _y) { if (_x >= this->Width() || _y >= this->Height()) { - ignerr << "Illegal coordinates. You are asking for the elevation in (" + gzerr << "Illegal coordinates. You are asking for the elevation in (" << _x << "," << _y << ") but the terrain is [" << this->Width() << " x " << this->Height() << "]" << std::endl; return std::numeric_limits<double>::infinity(); @@ -273,11 +273,11 @@ float Dem::MaxElevation() const ////////////////////////////////////////////////// bool Dem::GeoReference(double _x, double _y, - ignition::math::Angle &_latitude, ignition::math::Angle &_longitude) const + gz::math::Angle &_latitude, gz::math::Angle &_longitude) const { if (this->dataPtr->isNonEarthDem) { - ignerr << "Can not retrieve WGS84 coordinates from non-Earth DEM." + gzerr << "Can not retrieve WGS84 coordinates from non-Earth DEM." << std::endl; return false; } @@ -295,7 +295,7 @@ bool Dem::GeoReference(double _x, double _y, = strdup(this->dataPtr->dataSet->GetProjectionRef()); if (importString == nullptr || importString[0] == '\0') { - igndbg << "Projection coordinate system undefined." << std::endl; + gzdbg << "Projection coordinate system undefined." << std::endl; return false; } sourceCs.importFromWkt(&importString); @@ -303,7 +303,7 @@ bool Dem::GeoReference(double _x, double _y, cT = OGRCreateCoordinateTransformation(&sourceCs, &targetCs); if (nullptr == cT) { - ignerr << "Unable to transform terrain coordinate system to WGS84 for " + gzerr << "Unable to transform terrain coordinate system to WGS84 for " << "coordinates (" << _x << "," << _y << ")" << std::endl; OCTDestroyCoordinateTransformation(cT); return false; @@ -321,7 +321,7 @@ bool Dem::GeoReference(double _x, double _y, } else { - igndbg << "Unable to obtain the georeferenced values for coordinates (" + gzdbg << "Unable to obtain the georeferenced values for coordinates (" << _x << "," << _y << ")" << std::endl; return false; } @@ -329,8 +329,8 @@ bool Dem::GeoReference(double _x, double _y, } ////////////////////////////////////////////////// -bool Dem::GeoReferenceOrigin(ignition::math::Angle &_latitude, - ignition::math::Angle &_longitude) const +bool Dem::GeoReferenceOrigin(gz::math::Angle &_latitude, + gz::math::Angle &_longitude) const { return this->GeoReference(0, 0, _latitude, _longitude); } @@ -352,7 +352,7 @@ double Dem::WorldWidth() const { if (this->dataPtr->isNonEarthDem) { - ignwarn << "Unable to determine world width of non-Earth DEM." + gzwarn << "Unable to determine world width of non-Earth DEM." << std::endl; } return this->dataPtr->worldWidth; @@ -363,7 +363,7 @@ double Dem::WorldHeight() const { if (this->dataPtr->isNonEarthDem) { - ignwarn << "Unable to determine world height of non-Earth DEM." + gzwarn << "Unable to determine world height of non-Earth DEM." << std::endl; } return this->dataPtr->worldHeight; @@ -371,13 +371,13 @@ double Dem::WorldHeight() const ////////////////////////////////////////////////// void Dem::FillHeightMap(int _subSampling, unsigned int _vertSize, - const ignition::math::Vector3d &_size, - const ignition::math::Vector3d &_scale, + const gz::math::Vector3d &_size, + const gz::math::Vector3d &_scale, bool _flipY, std::vector<float> &_heights) const { if (_subSampling <= 0) { - ignerr << "Illegal subsampling value (" << _subSampling << ")\n"; + gzerr << "Illegal subsampling value (" << _subSampling << ")\n"; return; } @@ -440,7 +440,7 @@ int Dem::LoadData() unsigned int nYSize = this->dataPtr->dataSet->GetRasterYSize(); if (nXSize == 0 || nYSize == 0) { - ignerr << "Illegal size loading a DEM file (" << nXSize << "," + gzerr << "Illegal size loading a DEM file (" << nXSize << "," << nYSize << ")\n"; return -1; } @@ -473,7 +473,7 @@ int Dem::LoadData() if (this->dataPtr->band->RasterIO(GF_Read, 0, 0, nXSize, nYSize, &buffer[0], destWidth, destHeight, GDT_Float32, 0, 0) != CE_None) { - ignerr << "Failure calling RasterIO while loading a DEM file\n"; + gzerr << "Failure calling RasterIO while loading a DEM file\n"; return -1; } diff --git a/geospatial/src/Dem_TEST.cc b/geospatial/src/Dem_TEST.cc index 69b2cbe61..c35a49be4 100644 --- a/geospatial/src/Dem_TEST.cc +++ b/geospatial/src/Dem_TEST.cc @@ -17,15 +17,15 @@ #include <gtest/gtest.h> #include <limits> -#include <ignition/math/Angle.hh> -#include <ignition/math/Vector3.hh> +#include <gz/math/Angle.hh> +#include <gz/math/Vector3.hh> -#include "ignition/common/geospatial/Dem.hh" +#include "gz/common/geospatial/Dem.hh" -#include "ignition/common/testing/AutoLogFixture.hh" -#include "ignition/common/testing/TestPaths.hh" +#include "gz/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/TestPaths.hh" -using namespace ignition; +using namespace gz; class DemTest : public common::testing::AutoLogFixture { }; @@ -123,7 +123,7 @@ TEST_F(DemTest, BasicAPI) EXPECT_DOUBLE_EQ(inf, dem.Elevation(width, height)); // Check GeoReferenceOrigin() - ignition::math::Angle latitude, longitude; + gz::math::Angle latitude, longitude; EXPECT_TRUE(dem.GeoReferenceOrigin(latitude, longitude)); EXPECT_FLOAT_EQ(38.001667f, latitude.Degree()); EXPECT_FLOAT_EQ(-122.22278f, longitude.Degree()); @@ -139,8 +139,8 @@ TEST_F(DemTest, FillHeightmap) // Use FillHeightMap() to retrieve a vector<float> after some transformations int subsampling; unsigned vertSize; - ignition::math::Vector3d size; - ignition::math::Vector3d scale; + gz::math::Vector3d size; + gz::math::Vector3d scale; bool flipY; std::vector<float> elevations; @@ -152,7 +152,7 @@ TEST_F(DemTest, FillHeightmap) scale.X(size.X() / vertSize); scale.Y(size.Y() / vertSize); - if (ignition::math::equal(dem.MaxElevation(), 0.0f)) + if (gz::math::equal(dem.MaxElevation(), 0.0f)) scale.Z(fabs(size.Z())); else scale.Z(fabs(size.Z()) / dem.MaxElevation()); @@ -243,7 +243,7 @@ TEST_F(DemTest, NonEarthDem) EXPECT_FLOAT_EQ(-1, dem.WorldWidth()); // unable to get coordinates in WGS84 - ignition::math::Angle latitude, longitude; + gz::math::Angle latitude, longitude; EXPECT_FALSE(dem.GeoReferenceOrigin(latitude, longitude)); // The Load() method in Dem.cc should set the diff --git a/geospatial/src/ImageHeightmap.cc b/geospatial/src/ImageHeightmap.cc index 3dc30cf30..852aece63 100644 --- a/geospatial/src/ImageHeightmap.cc +++ b/geospatial/src/ImageHeightmap.cc @@ -14,10 +14,10 @@ * limitations under the License. * */ -#include "ignition/common/Console.hh" -#include "ignition/common/geospatial/ImageHeightmap.hh" +#include "gz/common/Console.hh" +#include "gz/common/geospatial/ImageHeightmap.hh" -using namespace ignition; +using namespace gz; using namespace common; ////////////////////////////////////////////////// @@ -30,7 +30,7 @@ int ImageHeightmap::Load(const std::string &_filename) { if (this->img.Load(_filename) != 0) { - ignerr << "Unable to load image file as a terrain [" << _filename << "]\n"; + gzerr << "Unable to load image file as a terrain [" << _filename << "]\n"; return -1; } @@ -39,8 +39,8 @@ int ImageHeightmap::Load(const std::string &_filename) ////////////////////////////////////////////////// void ImageHeightmap::FillHeightMap(int _subSampling, - unsigned int _vertSize, const ignition::math::Vector3d &_size, - const ignition::math::Vector3d &_scale, bool _flipY, + unsigned int _vertSize, const gz::math::Vector3d &_size, + const gz::math::Vector3d &_scale, bool _flipY, std::vector<float> &_heights) const { // Resize the vector to match the size of the vertices. @@ -62,25 +62,25 @@ void ImageHeightmap::FillHeightMap(int _subSampling, unsigned int count; this->img.Data(&data, count); - if (imgFormat == ignition::common::Image::PixelFormatType::L_INT8 || - imgFormat == ignition::common::Image::PixelFormatType::RGB_INT8 || - imgFormat == ignition::common::Image::PixelFormatType::RGBA_INT8 || - imgFormat == ignition::common::Image::PixelFormatType::BAYER_BGGR8 || - imgFormat == ignition::common::Image::PixelFormatType::BAYER_GBRG8 || - imgFormat == ignition::common::Image::PixelFormatType::BAYER_GRBG8 || - imgFormat == ignition::common::Image::PixelFormatType::BAYER_GRBG8 || - imgFormat == ignition::common::Image::PixelFormatType::BAYER_RGGB8 || - imgFormat == ignition::common::Image::PixelFormatType::BGR_INT8 || - imgFormat == ignition::common::Image::PixelFormatType::BGRA_INT8) + if (imgFormat == gz::common::Image::PixelFormatType::L_INT8 || + imgFormat == gz::common::Image::PixelFormatType::RGB_INT8 || + imgFormat == gz::common::Image::PixelFormatType::RGBA_INT8 || + imgFormat == gz::common::Image::PixelFormatType::BAYER_BGGR8 || + imgFormat == gz::common::Image::PixelFormatType::BAYER_GBRG8 || + imgFormat == gz::common::Image::PixelFormatType::BAYER_GRBG8 || + imgFormat == gz::common::Image::PixelFormatType::BAYER_GRBG8 || + imgFormat == gz::common::Image::PixelFormatType::BAYER_RGGB8 || + imgFormat == gz::common::Image::PixelFormatType::BGR_INT8 || + imgFormat == gz::common::Image::PixelFormatType::BGRA_INT8) { this->FillHeights<unsigned char>(data, imgHeight, imgWidth, pitch, _subSampling, _vertSize, _size, _scale, _flipY, _heights); } - else if (imgFormat == ignition::common::Image::PixelFormatType::BGR_INT16 || - imgFormat == ignition::common::Image::PixelFormatType::L_INT16 || - imgFormat == ignition::common::Image::PixelFormatType::RGB_FLOAT16 || - imgFormat == ignition::common::Image::PixelFormatType::RGB_INT16 || - imgFormat == ignition::common::Image::PixelFormatType::R_FLOAT16) + else if (imgFormat == gz::common::Image::PixelFormatType::BGR_INT16 || + imgFormat == gz::common::Image::PixelFormatType::L_INT16 || + imgFormat == gz::common::Image::PixelFormatType::RGB_FLOAT16 || + imgFormat == gz::common::Image::PixelFormatType::RGB_INT16 || + imgFormat == gz::common::Image::PixelFormatType::R_FLOAT16) { uint16_t *dataShort = reinterpret_cast<uint16_t *>(data); this->FillHeights<uint16_t>(dataShort, imgHeight, imgWidth, pitch, @@ -88,7 +88,7 @@ void ImageHeightmap::FillHeightMap(int _subSampling, } else { - ignerr << "Unsupported image format, " + gzerr << "Unsupported image format, " "heightmap will not be loaded" << std::endl; return; } diff --git a/geospatial/src/ImageHeightmap_TEST.cc b/geospatial/src/ImageHeightmap_TEST.cc index ab14d197b..c32912fe5 100644 --- a/geospatial/src/ImageHeightmap_TEST.cc +++ b/geospatial/src/ImageHeightmap_TEST.cc @@ -16,14 +16,14 @@ */ #include <gtest/gtest.h> -#include "ignition/common/geospatial/ImageHeightmap.hh" +#include "gz/common/geospatial/ImageHeightmap.hh" -#include "ignition/common/testing/AutoLogFixture.hh" -#include "ignition/common/testing/TestPaths.hh" +#include "gz/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/TestPaths.hh" #define ELEVATION_TOL 1e-8 -using namespace ignition; +using namespace gz; class ImageHeightmapTest : public common::testing::AutoLogFixture { }; @@ -73,8 +73,8 @@ TEST_F(ImageHeightmapTest, FillHeightmap) // Use FillHeightMap() to retrieve a vector<float> after some transformations int subsampling; unsigned vertSize; - ignition::math::Vector3d size; - ignition::math::Vector3d scale; + gz::math::Vector3d size; + gz::math::Vector3d scale; bool flipY; std::vector<float> elevations; @@ -85,7 +85,7 @@ TEST_F(ImageHeightmapTest, FillHeightmap) size.Z(10); scale.X(size.X() / vertSize); scale.Y(size.Y() / vertSize); - if (ignition::math::equal(img.MaxElevation(), 0.0f)) + if (gz::math::equal(img.MaxElevation(), 0.0f)) scale.Z(fabs(size.Z())); else scale.Z(fabs(size.Z()) / img.MaxElevation()); diff --git a/graphics/include/gz/common/Animation.hh b/graphics/include/gz/common/Animation.hh index 6a7cb9944..97ec0e564 100644 --- a/graphics/include/gz/common/Animation.hh +++ b/graphics/include/gz/common/Animation.hh @@ -29,7 +29,7 @@ #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { @@ -40,7 +40,7 @@ namespace ignition /// \class Animation Animation.hh gz/common/Animation.hh /// \brief Manages an animation, which is a collection of keyframes and /// the ability to interpolate between the keyframes - class IGNITION_COMMON_GRAPHICS_VISIBLE Animation + class GZ_COMMON_GRAPHICS_VISIBLE Animation { /// \brief Constructor /// \param[in] _name Name of the animation, should be unique @@ -108,7 +108,7 @@ namespace ignition }; /// \brief A pose animation. - class IGNITION_COMMON_GRAPHICS_VISIBLE PoseAnimation : public Animation + class GZ_COMMON_GRAPHICS_VISIBLE PoseAnimation : public Animation { /// \brief Constructor /// \param[in] _name String name of the animation. This should be unique. @@ -146,7 +146,7 @@ namespace ignition }; /// \brief A numeric animation. - class IGNITION_COMMON_GRAPHICS_VISIBLE NumericAnimation : public Animation + class GZ_COMMON_GRAPHICS_VISIBLE NumericAnimation : public Animation { /// \brief Constructor /// \param[in] _name String name of the animation. This should be unique. @@ -171,7 +171,7 @@ namespace ignition /// \brief Information about a trajectory for an animation (e.g., Actor) /// This contains the keyframe information. - class IGNITION_COMMON_GRAPHICS_VISIBLE TrajectoryInfo + class GZ_COMMON_GRAPHICS_VISIBLE TrajectoryInfo { /// \brief Constructor public: TrajectoryInfo(); diff --git a/graphics/include/gz/common/BVHLoader.hh b/graphics/include/gz/common/BVHLoader.hh index 98d7660ab..655f119ba 100644 --- a/graphics/include/gz/common/BVHLoader.hh +++ b/graphics/include/gz/common/BVHLoader.hh @@ -23,7 +23,7 @@ #include <gz/math/Pose3.hh> #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { @@ -31,7 +31,7 @@ namespace ignition /// \class BVHLoader BVHLoader.hh gz/common/BVHLoader.hh /// \brief Handles loading BVH animation files - class IGNITION_COMMON_GRAPHICS_VISIBLE BVHLoader + class GZ_COMMON_GRAPHICS_VISIBLE BVHLoader { /// \brief Constructor public: BVHLoader(); diff --git a/graphics/include/gz/common/ColladaExporter.hh b/graphics/include/gz/common/ColladaExporter.hh index 4f59dd933..83d1defab 100644 --- a/graphics/include/gz/common/ColladaExporter.hh +++ b/graphics/include/gz/common/ColladaExporter.hh @@ -29,7 +29,7 @@ #include <gz/utils/ImplPtr.hh> -namespace ignition +namespace gz { namespace common { @@ -69,7 +69,7 @@ namespace ignition }; /// \brief Class used to export Collada mesh files - class IGNITION_COMMON_GRAPHICS_VISIBLE ColladaExporter : public MeshExporter + class GZ_COMMON_GRAPHICS_VISIBLE ColladaExporter : public MeshExporter { /// \brief Constructor public: ColladaExporter(); diff --git a/graphics/include/gz/common/ColladaLoader.hh b/graphics/include/gz/common/ColladaLoader.hh index a0dd39748..9b2ca5404 100644 --- a/graphics/include/gz/common/ColladaLoader.hh +++ b/graphics/include/gz/common/ColladaLoader.hh @@ -23,13 +23,13 @@ #include <gz/utils/ImplPtr.hh> -namespace ignition +namespace gz { namespace common { /// \class ColladaLoader ColladaLoader.hh gz/common/ColladaLoader.hh /// \brief Class used to load Collada mesh files - class IGNITION_COMMON_GRAPHICS_VISIBLE ColladaLoader : public MeshLoader + class GZ_COMMON_GRAPHICS_VISIBLE ColladaLoader : public MeshLoader { /// \brief Constructor public: ColladaLoader(); diff --git a/graphics/include/gz/common/GTSMeshUtils.hh b/graphics/include/gz/common/GTSMeshUtils.hh index a14bdec87..59c320a89 100644 --- a/graphics/include/gz/common/GTSMeshUtils.hh +++ b/graphics/include/gz/common/GTSMeshUtils.hh @@ -27,7 +27,7 @@ struct _GtsSurface; typedef _GtsSurface GtsSurface; -namespace ignition +namespace gz { namespace common { @@ -35,7 +35,7 @@ namespace ignition /// \class GTSMeshUtils GTSMeshUtils.hh gz/common/GTSMeshUtils.hh /// \brief Creates GTS utilities for meshes - class IGNITION_COMMON_GRAPHICS_VISIBLE GTSMeshUtils + class GZ_COMMON_GRAPHICS_VISIBLE GTSMeshUtils { /// \brief Perform delaunay triangulation on input vertices. /// \param[in] _vertices A list of all vertices @@ -45,8 +45,8 @@ namespace ignition /// resulting triangles. /// \return True on success. public: static bool DelaunayTriangulation( - const std::vector<ignition::math::Vector2d> &_vertices, - const std::vector<ignition::math::Vector2i> &_edges, + const std::vector<gz::math::Vector2d> &_vertices, + const std::vector<gz::math::Vector2i> &_edges, SubMesh *_submesh); /// \brief Perform delaunay triangulation on input vertices. @@ -55,8 +55,8 @@ namespace ignition /// indices from _vertices /// \return Triangulated GTS surface. private: static GtsSurface *DelaunayTriangulation( - const std::vector<ignition::math::Vector2d> &_vertices, - const std::vector<ignition::math::Vector2i> &_edges); + const std::vector<gz::math::Vector2d> &_vertices, + const std::vector<gz::math::Vector2i> &_edges); }; } } diff --git a/graphics/include/gz/common/Image.hh b/graphics/include/gz/common/Image.hh index fabc61f23..052b43e6c 100644 --- a/graphics/include/gz/common/Image.hh +++ b/graphics/include/gz/common/Image.hh @@ -27,7 +27,7 @@ #include <gz/utils/ImplPtr.hh> -namespace ignition +namespace gz { namespace common { @@ -58,7 +58,7 @@ namespace ignition /// \class Image Image.hh gz/common/common.hh /// \brief Encapsulates an image - class IGNITION_COMMON_GRAPHICS_VISIBLE Image + class GZ_COMMON_GRAPHICS_VISIBLE Image { /// \brief Pixel formats enumeration public: enum PixelFormatType @@ -234,7 +234,7 @@ namespace ignition // convert to rgb image // color is grayscale, i.e. r == b == g double range = static_cast<double>(max - min); - if (ignition::math::equal(range, 0.0)) + if (gz::math::equal(range, 0.0)) range = 1.0; unsigned int idx = 0; for (unsigned int j = 0; j < _height; ++j) diff --git a/graphics/include/gz/common/KeyFrame.hh b/graphics/include/gz/common/KeyFrame.hh index e7829221e..909b391d8 100644 --- a/graphics/include/gz/common/KeyFrame.hh +++ b/graphics/include/gz/common/KeyFrame.hh @@ -25,13 +25,13 @@ #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { /// \class KeyFrame KeyFrame.hh gz/common/KeyFrame.hh /// \brief A key frame in an animation - class IGNITION_COMMON_GRAPHICS_VISIBLE KeyFrame + class GZ_COMMON_GRAPHICS_VISIBLE KeyFrame { /// \brief Constructor /// \param[in] _time Time of the keyframe in seconds @@ -49,7 +49,7 @@ namespace ignition }; /// \brief A keyframe for a PoseAnimation - class IGNITION_COMMON_GRAPHICS_VISIBLE PoseKeyFrame : public KeyFrame + class GZ_COMMON_GRAPHICS_VISIBLE PoseKeyFrame : public KeyFrame { /// \brief Constructor /// \param[in] _time of the keyframe @@ -79,7 +79,7 @@ namespace ignition }; /// \brief A keyframe for a NumericAnimation - class IGNITION_COMMON_GRAPHICS_VISIBLE NumericKeyFrame : public KeyFrame + class GZ_COMMON_GRAPHICS_VISIBLE NumericKeyFrame : public KeyFrame { /// \brief Constructor /// \param[in] _time Time of the keyframe diff --git a/graphics/include/gz/common/Material.hh b/graphics/include/gz/common/Material.hh index a5285f7e3..5a1d68e47 100644 --- a/graphics/include/gz/common/Material.hh +++ b/graphics/include/gz/common/Material.hh @@ -28,12 +28,12 @@ #include <gz/utils/ImplPtr.hh> -namespace ignition +namespace gz { namespace common { /// \brief Encapsulates description of a material - class IGNITION_COMMON_GRAPHICS_VISIBLE Material + class GZ_COMMON_GRAPHICS_VISIBLE Material { /// \def Shade modes /// \brief Enumeration of shade mode types @@ -263,7 +263,7 @@ namespace ignition /// param[in] _out the output stream to extract from /// param[out] _m the material information public: friend std::ostream &operator<<(std::ostream &_out, - const ignition::common::Material &_m) + const gz::common::Material &_m) { _out << "Material:\n"; _out << " Name: " << _m.Name() << "\n"; diff --git a/graphics/include/gz/common/Mesh.hh b/graphics/include/gz/common/Mesh.hh index 391d82bd7..1bdd62669 100644 --- a/graphics/include/gz/common/Mesh.hh +++ b/graphics/include/gz/common/Mesh.hh @@ -29,7 +29,7 @@ #include <gz/common/graphics/Types.hh> #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { @@ -38,7 +38,7 @@ namespace ignition /// \class Mesh Mesh.hh gz/common/Mesh.hh /// \brief A 3D mesh - class IGNITION_COMMON_GRAPHICS_VISIBLE Mesh + class GZ_COMMON_GRAPHICS_VISIBLE Mesh { /// \brief Constructor public: Mesh(); @@ -64,11 +64,11 @@ namespace ignition /// \brief Get the maximun X, Y, Z values /// \return The upper bounds of the bounding box - public: ignition::math::Vector3d Max() const; + public: gz::math::Vector3d Max() const; /// \brief Get the minimum X, Y, Z values /// \return The lower bounds of the bounding box - public: ignition::math::Vector3d Min() const; + public: gz::math::Vector3d Min() const; /// \brief Get the number of vertices /// \return The number of vertices @@ -149,15 +149,15 @@ namespace ignition /// \param[out] _center Center of the bounding box /// \param[out] _minXYZ Bounding box minimum values /// \param[out] _maxXYZ Bounding box maximum values - public: void AABB(ignition::math::Vector3d &_center, - ignition::math::Vector3d &_minXYZ, - ignition::math::Vector3d &_maxXYZ) const; + public: void AABB(gz::math::Vector3d &_center, + gz::math::Vector3d &_minXYZ, + gz::math::Vector3d &_maxXYZ) const; /// \brief Generate texture coordinates using spherical projection /// from center /// \param[in] _center Center of the projection public: void GenSphericalTexCoord( - const ignition::math::Vector3d &_center); + const gz::math::Vector3d &_center); /// \brief Get the skeleton to which this mesh is attached. /// \return Pointer to skeleton or nullptr if none is present. @@ -173,21 +173,21 @@ namespace ignition /// \brief Scale all vertices by _factor /// \param _factor Scaling factor - public: void Scale(const ignition::math::Vector3d &_factor); + public: void Scale(const gz::math::Vector3d &_factor); /// \brief Set the scale all vertices /// \param[in] _factor Scaling vector - public: void SetScale(const ignition::math::Vector3d &_factor); + public: void SetScale(const gz::math::Vector3d &_factor); /// \brief Move the center of the mesh to the given coordinate in the /// mesh frame. This will move all the vertices in all submeshes. /// \param[in] _center Location of the mesh center. - public: void Center(const ignition::math::Vector3d &_center = - ignition::math::Vector3d::Zero); + public: void Center(const gz::math::Vector3d &_center = + gz::math::Vector3d::Zero); /// \brief Move all vertices in all submeshes by _vec. /// \param[in] _vec Amount to translate vertices. - public: void Translate(const ignition::math::Vector3d &_vec); + public: void Translate(const gz::math::Vector3d &_vec); /// \brief Compute the volume of this mesh. The primitive type /// must be TRIANGLES. diff --git a/graphics/include/gz/common/MeshCSG.hh b/graphics/include/gz/common/MeshCSG.hh index 56be57029..fe2d64723 100644 --- a/graphics/include/gz/common/MeshCSG.hh +++ b/graphics/include/gz/common/MeshCSG.hh @@ -26,7 +26,7 @@ typedef _GtsSurface GtsSurface; struct _GPtrArray; typedef _GPtrArray GPtrArray; -namespace ignition +namespace gz { namespace common { @@ -34,7 +34,7 @@ namespace ignition /// \class MeshCSG MeshCSG.hh gz/common/MeshCSG.hh /// \brief Creates CSG meshes - class IGNITION_COMMON_GRAPHICS_VISIBLE MeshCSG + class GZ_COMMON_GRAPHICS_VISIBLE MeshCSG { /// \brief An enumeration of the boolean operations public: enum BooleanOperation {UNION, INTERSECTION, DIFFERENCE}; @@ -53,7 +53,7 @@ namespace ignition /// \return a pointer to the created mesh public: Mesh *CreateBoolean(const Mesh *_m1, const Mesh *_m2, const int _operation, - const ignition::math::Pose3d &_offset = ignition::math::Pose3d::Zero); + const gz::math::Pose3d &_offset = gz::math::Pose3d::Zero); /// \brief Helper method for converting Mesh to GTS Surface private: void ConvertMeshToGTS(const Mesh *mesh, GtsSurface *surface); diff --git a/graphics/include/gz/common/MeshExporter.hh b/graphics/include/gz/common/MeshExporter.hh index 2372b14a1..476046247 100644 --- a/graphics/include/gz/common/MeshExporter.hh +++ b/graphics/include/gz/common/MeshExporter.hh @@ -20,14 +20,14 @@ #include <string> #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { class Mesh; /// \brief Base class for exporting meshes - class IGNITION_COMMON_GRAPHICS_VISIBLE MeshExporter + class GZ_COMMON_GRAPHICS_VISIBLE MeshExporter { /// \brief Constructor public: MeshExporter(); diff --git a/graphics/include/gz/common/MeshLoader.hh b/graphics/include/gz/common/MeshLoader.hh index 598feda61..31f1a66fd 100644 --- a/graphics/include/gz/common/MeshLoader.hh +++ b/graphics/include/gz/common/MeshLoader.hh @@ -21,7 +21,7 @@ #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { @@ -29,7 +29,7 @@ namespace ignition /// \class MeshLoader MeshLoader.hh gz/common/MeshLoader.hh /// \brief Base class for loading meshes - class IGNITION_COMMON_GRAPHICS_VISIBLE MeshLoader + class GZ_COMMON_GRAPHICS_VISIBLE MeshLoader { /// \brief Constructor public: MeshLoader() = default; diff --git a/graphics/include/gz/common/MeshManager.hh b/graphics/include/gz/common/MeshManager.hh index ecdb51e4e..39931b101 100644 --- a/graphics/include/gz/common/MeshManager.hh +++ b/graphics/include/gz/common/MeshManager.hh @@ -36,7 +36,7 @@ #include <gz/common/SingletonT.hh> #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { @@ -46,7 +46,7 @@ namespace ignition /// \class MeshManager MeshManager.hh gz/common/MeshManager.hh /// \brief Maintains and manages all meshes - class IGNITION_COMMON_GRAPHICS_VISIBLE MeshManager + class GZ_COMMON_GRAPHICS_VISIBLE MeshManager : public SingletonT<MeshManager> { /// \brief Constructor @@ -83,15 +83,15 @@ namespace ignition /// \param[out] _min_xyz the bounding box minimum /// \param[out] _max_xyz the bounding box maximum public: void MeshAABB(const Mesh *_mesh, - ignition::math::Vector3d &_center, - ignition::math::Vector3d &_min_xyz, - ignition::math::Vector3d &_max_xyz); + gz::math::Vector3d &_center, + gz::math::Vector3d &_min_xyz, + gz::math::Vector3d &_max_xyz); /// \brief generate spherical texture coordinates /// \param[in] _mesh Pointer to the mesh /// \param[in] _center Center of the mesh public: void GenSphericalTexCoord(const Mesh *_mesh, - const ignition::math::Vector3d &_center); + const gz::math::Vector3d &_center); /// \brief Add a mesh to the manager. /// @@ -112,7 +112,7 @@ namespace ignition /// \brief Get a mesh by name. /// \param[in] _name the name of the mesh to look for /// \return the mesh or nullptr if not found - public: const ignition::common::Mesh *MeshByName( + public: const gz::common::Mesh *MeshByName( const std::string &_name) const; /// \brief Return true if the mesh exists. @@ -132,8 +132,8 @@ namespace ignition /// \param[in] _sides the x y x dimentions of eah side in meter /// \param[in] _uvCoords the texture coordinates public: void CreateBox(const std::string &_name, - const ignition::math::Vector3d &_sides, - const ignition::math::Vector2d &_uvCoords); + const gz::math::Vector3d &_sides, + const gz::math::Vector2d &_uvCoords); /// \brief Create an extruded mesh from polylines. The polylines are /// assumed to be closed and non-intersecting. Delaunay triangulation is @@ -148,7 +148,7 @@ namespace ignition /// edges and remove the holes in the shape. /// \param[in] _height the height of extrusion public: void CreateExtrudedPolyline(const std::string &_name, - const std::vector<std::vector<ignition::math::Vector2d> > + const std::vector<std::vector<gz::math::Vector2d> > &_vertices, const double _height); /// \brief Create a cylinder mesh @@ -169,7 +169,7 @@ namespace ignition /// \param[in] _rings the number of circles along the height /// \param[in] _segments the number of segment per circle public: void CreateEllipsoid(const std::string &_name, - const ignition::math::Vector3d &_radii, + const gz::math::Vector3d &_radii, const unsigned int _rings, const unsigned int _segments); @@ -222,9 +222,9 @@ namespace ignition /// \param[in] _segments number of segments in x and y /// \param[in] _uvTile the texture tile size in x and y public: void CreatePlane(const std::string &_name, - const ignition::math::Planed &_plane, - const ignition::math::Vector2d &_segments, - const ignition::math::Vector2d &_uvTile); + const gz::math::Planed &_plane, + const gz::math::Vector2d &_segments, + const gz::math::Vector2d &_uvTile); /// \brief Create mesh for a plane /// \param[in] _name the name of the new mesh @@ -234,11 +234,11 @@ namespace ignition /// \param[in] _segments the number of segments in x and y /// \param[in] _uvTile the texture tile size in x and y public: void CreatePlane(const std::string &_name, - const ignition::math::Vector3d &_normal, + const gz::math::Vector3d &_normal, const double _d, - const ignition::math::Vector2d &_size, - const ignition::math::Vector2d &_segments, - const ignition::math::Vector2d &_uvTile); + const gz::math::Vector2d &_size, + const gz::math::Vector2d &_segments, + const gz::math::Vector2d &_uvTile); /// \brief Tesselate a 2D mesh /// @@ -265,7 +265,7 @@ namespace ignition /// \param[in] _offset _m2's pose offset from _m1 public: void CreateBoolean(const std::string &_name, const Mesh *_m1, const Mesh *_m2, const int _operation, - const ignition::math::Pose3d &_offset = ignition::math::Pose3d::Zero); + const gz::math::Pose3d &_offset = gz::math::Pose3d::Zero); /// \brief Converts a vector of polylines into a table of vertices and /// a list of edges (each made of 2 points from the table of vertices. @@ -275,11 +275,11 @@ namespace ignition /// \param[out] _edges a list of edges (made of start/end point indices /// from the vertex table) private: static void ConvertPolylinesToVerticesAndEdges( - const std::vector<std::vector<ignition::math::Vector2d> > + const std::vector<std::vector<gz::math::Vector2d> > &_polys, const double _tol, - std::vector<ignition::math::Vector2d> &_vertices, - std::vector<ignition::math::Vector2i> &_edges); + std::vector<gz::math::Vector2d> &_vertices, + std::vector<gz::math::Vector2i> &_edges); /// \brief Check a point againts a list, and only adds it to the list /// if it is not there already. @@ -289,8 +289,8 @@ namespace ignition /// considered to be the same point. /// \return the index of the point. private: static size_t AddUniquePointToVerticesTable( - std::vector<ignition::math::Vector2d> &_vertices, - const ignition::math::Vector2d &_p, + std::vector<gz::math::Vector2d> &_vertices, + const gz::math::Vector2d &_p, const double _tol); /// \brief Private data pointer. diff --git a/graphics/include/gz/common/NodeAnimation.hh b/graphics/include/gz/common/NodeAnimation.hh index 48d3048a8..8662b74c0 100644 --- a/graphics/include/gz/common/NodeAnimation.hh +++ b/graphics/include/gz/common/NodeAnimation.hh @@ -27,13 +27,13 @@ #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { /// \class NodeAnimation NodeAnimation.hh gz/common/NodeAnimation.hh /// \brief Node animation - class IGNITION_COMMON_GRAPHICS_VISIBLE NodeAnimation + class GZ_COMMON_GRAPHICS_VISIBLE NodeAnimation { /// \brief constructor /// \param[in] _name the name of the node @@ -92,7 +92,7 @@ namespace ignition /// \param[in] _time the time /// \param[in] _loop when true, the time is divided by the duration /// (see GetLength) - public: ignition::math::Matrix4d FrameAt(const double _time, + public: gz::math::Matrix4d FrameAt(const double _time, const bool _loop = true) const; /// \brief Scales each transformation in the key frames. This only affects diff --git a/graphics/include/gz/common/NodeTransform.hh b/graphics/include/gz/common/NodeTransform.hh index 26b0e691a..ba35204d7 100644 --- a/graphics/include/gz/common/NodeTransform.hh +++ b/graphics/include/gz/common/NodeTransform.hh @@ -27,13 +27,13 @@ #include <gz/common/graphics/Export.hh> #include <gz/common/Util.hh> -namespace ignition +namespace gz { namespace common { /// \class NodeTransform NodeTransform.hh gz/common/NodeTransform.hh /// \brief A transformation node - class IGNITION_COMMON_GRAPHICS_VISIBLE NodeTransform + class GZ_COMMON_GRAPHICS_VISIBLE NodeTransform { /// \brief Constructor /// \param[in] _type the type of transform diff --git a/graphics/include/gz/common/OBJLoader.hh b/graphics/include/gz/common/OBJLoader.hh index 4018d714a..da2b895ba 100644 --- a/graphics/include/gz/common/OBJLoader.hh +++ b/graphics/include/gz/common/OBJLoader.hh @@ -26,7 +26,7 @@ #include <gz/common/MeshLoader.hh> #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { @@ -34,7 +34,7 @@ namespace ignition class OBJLoaderPrivate; /// \brief Class used to load obj mesh files - class IGNITION_COMMON_GRAPHICS_VISIBLE OBJLoader : public MeshLoader + class GZ_COMMON_GRAPHICS_VISIBLE OBJLoader : public MeshLoader { /// \brief Constructor public: OBJLoader(); diff --git a/graphics/include/gz/common/Pbr.hh b/graphics/include/gz/common/Pbr.hh index 00768a6c9..485adbe03 100644 --- a/graphics/include/gz/common/Pbr.hh +++ b/graphics/include/gz/common/Pbr.hh @@ -23,7 +23,7 @@ #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { @@ -52,7 +52,7 @@ namespace common /// \brief This class contains Physically-Based-Rendering (PBR) workflow /// properties. - class IGNITION_COMMON_GRAPHICS_VISIBLE Pbr + class GZ_COMMON_GRAPHICS_VISIBLE Pbr { /// \brief Default constructor public: Pbr(); diff --git a/graphics/include/gz/common/STLLoader.hh b/graphics/include/gz/common/STLLoader.hh index ab243ca3d..9ae0b4bfc 100644 --- a/graphics/include/gz/common/STLLoader.hh +++ b/graphics/include/gz/common/STLLoader.hh @@ -30,13 +30,13 @@ #define ORDER_MAX 10 #define FACE_MAX 200000 -namespace ignition +namespace gz { namespace common { /// \class STLLoader STLLoader.hh gz/common/STLLoader.hh /// \brief Class used to load STL mesh files - class IGNITION_COMMON_GRAPHICS_VISIBLE STLLoader : public MeshLoader + class GZ_COMMON_GRAPHICS_VISIBLE STLLoader : public MeshLoader { /// \brief Constructor public: STLLoader(); diff --git a/graphics/include/gz/common/SVGLoader.hh b/graphics/include/gz/common/SVGLoader.hh index 88af0d17e..ff49075dd 100644 --- a/graphics/include/gz/common/SVGLoader.hh +++ b/graphics/include/gz/common/SVGLoader.hh @@ -29,12 +29,12 @@ #include <gz/common/graphics/Export.hh> #include <gz/common/Console.hh> -namespace ignition +namespace gz { namespace common { /// \brief SVG command data structure - class IGNITION_COMMON_GRAPHICS_VISIBLE SVGCommand + class GZ_COMMON_GRAPHICS_VISIBLE SVGCommand { /// \brief Constructor public: SVGCommand() : cmd(' ') {} @@ -58,7 +58,7 @@ namespace ignition }; /// \brief An SVG path element data structure - struct IGNITION_COMMON_GRAPHICS_VISIBLE SVGPath + struct GZ_COMMON_GRAPHICS_VISIBLE SVGPath { #ifdef _WIN32 // Disable warning C4251 @@ -73,20 +73,20 @@ namespace ignition std::string style; /// \brief A 2D transform (or a list of transforms) - ignition::math::Matrix3d transform; + gz::math::Matrix3d transform; /// \brief A list of subpaths (as lists of commands) std::vector< std::vector<SVGCommand> > subpaths; /// \brief The polylines described by the commands - std::vector< std::vector<ignition::math::Vector2d> > polylines; + std::vector< std::vector<gz::math::Vector2d> > polylines; #ifdef _WIN32 #pragma warning(pop) #endif }; /// \brief A loader for SVG files - class IGNITION_COMMON_GRAPHICS_VISIBLE SVGLoader + class GZ_COMMON_GRAPHICS_VISIBLE SVGLoader { /// \brief Constructor /// \param[in] _samples The number of points for cubic spline segments @@ -112,8 +112,8 @@ namespace ignition public: static void PathsToClosedPolylines( const std::vector<common::SVGPath> &_paths, const double _tol, - std::vector< std::vector<ignition::math::Vector2d> > &_closedPolys, - std::vector< std::vector<ignition::math::Vector2d> > &_openPolys); + std::vector< std::vector<gz::math::Vector2d> > &_closedPolys, + std::vector< std::vector<gz::math::Vector2d> > &_openPolys); /// \brief Outputs the content of the paths to file (or console) /// \param[in] _paths The paths diff --git a/graphics/include/gz/common/Skeleton.hh b/graphics/include/gz/common/Skeleton.hh index 939efaeb6..bdfaa04ce 100644 --- a/graphics/include/gz/common/Skeleton.hh +++ b/graphics/include/gz/common/Skeleton.hh @@ -29,7 +29,7 @@ #include <gz/common/SkeletonNode.hh> #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { @@ -37,7 +37,7 @@ namespace ignition /// \class Skeleton Skeleton.hh gz/common/Skeleton.hh /// \brief A skeleton, usually used for animation purposes. - class IGNITION_COMMON_GRAPHICS_VISIBLE Skeleton + class GZ_COMMON_GRAPHICS_VISIBLE Skeleton { /// \brief Constructor public: Skeleton(); diff --git a/graphics/include/gz/common/SkeletonAnimation.hh b/graphics/include/gz/common/SkeletonAnimation.hh index ceab7e362..1900735a8 100644 --- a/graphics/include/gz/common/SkeletonAnimation.hh +++ b/graphics/include/gz/common/SkeletonAnimation.hh @@ -29,14 +29,14 @@ #include <gz/common/NodeAnimation.hh> #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { /// \class SkeletonAnimation SkeletonAnimation.hh /// gz/common/SkeletonAnimation.hh /// \brief Skeleton animation - class IGNITION_COMMON_GRAPHICS_VISIBLE SkeletonAnimation + class GZ_COMMON_GRAPHICS_VISIBLE SkeletonAnimation { /// \brief The Constructor /// \param[in] _name the name of the animation diff --git a/graphics/include/gz/common/SkeletonNode.hh b/graphics/include/gz/common/SkeletonNode.hh index df18bf3d9..83de81580 100644 --- a/graphics/include/gz/common/SkeletonNode.hh +++ b/graphics/include/gz/common/SkeletonNode.hh @@ -26,13 +26,13 @@ #include <gz/common/NodeTransform.hh> #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { /// \class SkeletonNode Skeleton.hh gz/common/SkeletonNode.hh /// \brief A skeleton node - class IGNITION_COMMON_GRAPHICS_VISIBLE SkeletonNode + class GZ_COMMON_GRAPHICS_VISIBLE SkeletonNode { /// \brief enumeration of node types public: enum SkeletonNodeType {NODE, JOINT}; diff --git a/graphics/include/gz/common/SubMesh.hh b/graphics/include/gz/common/SubMesh.hh index 25eb31fd4..fab8019d7 100644 --- a/graphics/include/gz/common/SubMesh.hh +++ b/graphics/include/gz/common/SubMesh.hh @@ -30,7 +30,7 @@ #include <gz/common/graphics/Types.hh> #include <gz/common/graphics/Export.hh> -namespace ignition +namespace gz { namespace common { @@ -38,7 +38,7 @@ namespace ignition class NodeAssignment; /// \brief A child mesh - class IGNITION_COMMON_GRAPHICS_VISIBLE SubMesh + class GZ_COMMON_GRAPHICS_VISIBLE SubMesh { /// \brief An enumeration of the geometric mesh primitives public: enum PrimitiveType @@ -94,7 +94,7 @@ namespace ignition /// \brief Add a vertex to the mesh /// \param[in] _v The new position - public: void AddVertex(const ignition::math::Vector3d &_v); + public: void AddVertex(const gz::math::Vector3d &_v); /// \brief Add a vertex to the mesh /// \param[in] _x Position along x @@ -104,7 +104,7 @@ namespace ignition /// \brief Add a normal to the mesh /// \param[in] _n The normal - public: void AddNormal(const ignition::math::Vector3d &_n); + public: void AddNormal(const gz::math::Vector3d &_n); /// \brief Add a normal to the mesh /// \param[in] _x Position along x @@ -127,7 +127,7 @@ namespace ignition /// exist, it is added to set 0. /// \param[in] _uv The texture coordinate /// \sa AddTexCoordBySet - public: void AddTexCoord(const ignition::math::Vector2d &_uv); + public: void AddTexCoord(const gz::math::Vector2d &_uv); /// \brief Add a texture coord to a texture coordinate set of the mesh /// \param[in] _u Position along u @@ -140,7 +140,7 @@ namespace ignition /// \param[in] _u Position along u /// \param[in] _v Position along v /// \param[in] _setIndex Texture coordinate set index - public: void AddTexCoordBySet(const ignition::math::Vector2d &_uv, + public: void AddTexCoordBySet(const gz::math::Vector2d &_uv, unsigned int _setIndex); /// \brief Add a vertex - skeleton node assignment @@ -152,46 +152,46 @@ namespace ignition const float _weight); /// \brief Get a vertex /// \param[in] _index Index of the vertex - /// \return Coordinates of the vertex or ignition::math::Vector3d::Zero + /// \return Coordinates of the vertex or gz::math::Vector3d::Zero /// if the index is out of bounds. /// \sa bool HasVertex(const unsigned int) const - public: ignition::math::Vector3d Vertex(const unsigned int _index) const; + public: gz::math::Vector3d Vertex(const unsigned int _index) const; /// \brief Set a vertex /// \param[in] _index Index of the vertex /// \param[in] _v The new vertex coordinate public: void SetVertex(const unsigned int _index, - const ignition::math::Vector3d &_v); + const gz::math::Vector3d &_v); /// \brief Get a normal /// \param[in] _index The normal index - /// \return The normal direction or ignition::math::Vector3d::Zero + /// \return The normal direction or gz::math::Vector3d::Zero /// if index is out of bounds. /// \sa bool HasNormal(const unsigned int _index); - public: ignition::math::Vector3d Normal(const unsigned int _index) const; + public: gz::math::Vector3d Normal(const unsigned int _index) const; /// \brief Set a normal /// \param[in] _index Index of the normal that will be set. /// \param[in] _n The new normal direction public: void SetNormal(const unsigned int _index, - const ignition::math::Vector3d &_n); + const gz::math::Vector3d &_n); /// \brief Get a texture coordinate /// \param[in] _index the texture index - /// \return The texture coordinate or ignition::math::Vector2d::Zero + /// \return The texture coordinate or gz::math::Vector2d::Zero /// if index is out of bounds. /// \sa bool HasTexCoord(const unsigned int _index) const - public: ignition::math::Vector2d TexCoord( + public: gz::math::Vector2d TexCoord( const unsigned int _index) const; /// \brief Get a texture coordinate for a texture coordinate set /// \param[in] _index the texture index - /// \return The texture coordinate or ignition::math::Vector2d::Zero + /// \return The texture coordinate or gz::math::Vector2d::Zero /// if index is out of bounds. /// \param[in] _setIndex Texture coordinate set index /// \sa bool HasTexCoordBySet(unsigned int _index, unsigned int _setIndex) /// const - public: ignition::math::Vector2d TexCoordBySet( + public: gz::math::Vector2d TexCoordBySet( unsigned int _index, unsigned int _setIndex) const; @@ -202,14 +202,14 @@ namespace ignition /// \param[in] _uv The new texture coordinate /// \sa SetTexCoordBySet public: void SetTexCoord(const unsigned int _index, - const ignition::math::Vector2d &_uv); + const gz::math::Vector2d &_uv); /// \brief Set a texture coordinate for a texture coordinate set /// \param[in] _index Index of the texture coordinate that will be set. /// \param[in] _uv The new texture coordinate /// \param[in] _setIndex Texture coordinate set index public: void SetTexCoordBySet(unsigned int _index, - const ignition::math::Vector2d &_uv, + const gz::math::Vector2d &_uv, unsigned int _setIdex); /// \brief Get an index value from the index array @@ -234,11 +234,11 @@ namespace ignition /// \brief Get the maximum X, Y, Z values from all the vertices /// \return Max X,Y,Z values from all vertices in submesh - public: ignition::math::Vector3d Max() const; + public: gz::math::Vector3d Max() const; /// \brief Get the minimum X, Y, Z values from all the vertices /// \return Min X,Y,Z values from all vertices in submesh - public: ignition::math::Vector3d Min() const; + public: gz::math::Vector3d Min() const; /// \brief Get the number of vertices /// \return The number of vertices. @@ -288,7 +288,7 @@ namespace ignition /// \return The assigned material index. If no material index is assigned /// to this submesh, std::numeric_limits<unsigned int>::max() is returned. /// \note This method is deprecated, use GetMaterialIndex instead - public: unsigned int IGN_DEPRECATED(5) MaterialIndex() const; + public: unsigned int GZ_DEPRECATED(5) MaterialIndex() const; /// \brief Get the material index /// \return The assigned material index. Nullopt is returned if the @@ -298,7 +298,7 @@ namespace ignition /// \brief Return true if this submesh has the vertex /// \param[in] _v Vertex coordinate /// \return Return true if this submesh has the vertex - public: bool HasVertex(const ignition::math::Vector3d &_v) const; + public: bool HasVertex(const gz::math::Vector3d &_v) const; /// \brief Return true if this submesh has the vertex with the given /// index @@ -345,7 +345,7 @@ namespace ignition /// \brief Get the index of the vertex /// \param[in] _v Vertex to check /// \return Index of the vertex that matches _v. - public: int IndexOfVertex(const ignition::math::Vector3d &_v) const; + public: int IndexOfVertex(const gz::math::Vector3d &_v) const; /// \brief Put all the data into flat arrays /// \param[in] _verArr The vertex array to be filled. @@ -359,19 +359,19 @@ namespace ignition /// from center /// \param[in] _center Center of the projection. public: void GenSphericalTexCoord( - const ignition::math::Vector3d &_center); + const gz::math::Vector3d &_center); /// \brief Generate texture coordinates for a texture coordinate set /// using spherical projection from center /// \param[in] _center Center of the projection. /// \param[in] _setIndex Texture coordinate set index public: void GenSphericalTexCoordBySet( - const ignition::math::Vector3d &_center, + const gz::math::Vector3d &_center, unsigned int _setIndex); /// \brief Scale all vertices by _factor /// \param[in] _factor Scaling factor - public: void Scale(const ignition::math::Vector3d &_factor); + public: void Scale(const gz::math::Vector3d &_factor); /// \brief Scale all vertices by _factor /// \param[in] _factor Scaling factor @@ -380,12 +380,12 @@ namespace ignition /// \brief Move the center of the submesh to the given coordinate. This /// will move all the vertices. /// \param[in] _center Location of the mesh center. - public: void Center(const ignition::math::Vector3d &_center = - ignition::math::Vector3d::Zero); + public: void Center(const gz::math::Vector3d &_center = + gz::math::Vector3d::Zero); /// \brief Move all vertices by _vec. /// \param[in] _vec Amount to translate vertices. - public: void Translate(const ignition::math::Vector3d &_vec); + public: void Translate(const gz::math::Vector3d &_vec); /// \brief Compute the volume of this submesh. The primitive type /// must be TRIANGLES. @@ -406,7 +406,7 @@ namespace ignition /// \brief Vertex to node weighted assignement for skeleton animation /// visualization - class IGNITION_COMMON_GRAPHICS_VISIBLE NodeAssignment + class GZ_COMMON_GRAPHICS_VISIBLE NodeAssignment { /// \brief Constructor. public: NodeAssignment(); diff --git a/graphics/include/gz/common/graphics/Types.hh b/graphics/include/gz/common/graphics/Types.hh index f1202d2ea..569639007 100644 --- a/graphics/include/gz/common/graphics/Types.hh +++ b/graphics/include/gz/common/graphics/Types.hh @@ -21,7 +21,7 @@ #include <memory> // This header contains forward declarations for some graphics types -namespace ignition +namespace gz { namespace common { diff --git a/graphics/include/ignition/common/Animation.hh b/graphics/include/ignition/common/Animation.hh index 82b4aa259..91e4aff18 100644 --- a/graphics/include/ignition/common/Animation.hh +++ b/graphics/include/ignition/common/Animation.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Animation.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/BVHLoader.hh b/graphics/include/ignition/common/BVHLoader.hh index 522738cc6..657ded317 100644 --- a/graphics/include/ignition/common/BVHLoader.hh +++ b/graphics/include/ignition/common/BVHLoader.hh @@ -16,3 +16,4 @@ */ #include <gz/common/BVHLoader.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/ColladaExporter.hh b/graphics/include/ignition/common/ColladaExporter.hh index 42a3ff4be..fa11be10f 100644 --- a/graphics/include/ignition/common/ColladaExporter.hh +++ b/graphics/include/ignition/common/ColladaExporter.hh @@ -16,3 +16,4 @@ */ #include <gz/common/ColladaExporter.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/ColladaLoader.hh b/graphics/include/ignition/common/ColladaLoader.hh index d805bc8bf..c4cce2db1 100644 --- a/graphics/include/ignition/common/ColladaLoader.hh +++ b/graphics/include/ignition/common/ColladaLoader.hh @@ -16,3 +16,4 @@ */ #include <gz/common/ColladaLoader.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/GTSMeshUtils.hh b/graphics/include/ignition/common/GTSMeshUtils.hh index 8c8948ec9..b25552dcd 100644 --- a/graphics/include/ignition/common/GTSMeshUtils.hh +++ b/graphics/include/ignition/common/GTSMeshUtils.hh @@ -16,3 +16,4 @@ */ #include <gz/common/GTSMeshUtils.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/Image.hh b/graphics/include/ignition/common/Image.hh index 14c34b496..7d4b606ba 100644 --- a/graphics/include/ignition/common/Image.hh +++ b/graphics/include/ignition/common/Image.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Image.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/KeyFrame.hh b/graphics/include/ignition/common/KeyFrame.hh index 5616b7192..8cfbdc68d 100644 --- a/graphics/include/ignition/common/KeyFrame.hh +++ b/graphics/include/ignition/common/KeyFrame.hh @@ -16,3 +16,4 @@ */ #include <gz/common/KeyFrame.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/Material.hh b/graphics/include/ignition/common/Material.hh index 262b2f102..dbaf08dcd 100644 --- a/graphics/include/ignition/common/Material.hh +++ b/graphics/include/ignition/common/Material.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Material.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/Mesh.hh b/graphics/include/ignition/common/Mesh.hh index 081b63507..85b836090 100644 --- a/graphics/include/ignition/common/Mesh.hh +++ b/graphics/include/ignition/common/Mesh.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Mesh.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/MeshCSG.hh b/graphics/include/ignition/common/MeshCSG.hh index 761d209e0..85d922b7a 100644 --- a/graphics/include/ignition/common/MeshCSG.hh +++ b/graphics/include/ignition/common/MeshCSG.hh @@ -16,3 +16,4 @@ */ #include <gz/common/MeshCSG.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/MeshExporter.hh b/graphics/include/ignition/common/MeshExporter.hh index ef31676c1..8103cf091 100644 --- a/graphics/include/ignition/common/MeshExporter.hh +++ b/graphics/include/ignition/common/MeshExporter.hh @@ -16,3 +16,4 @@ */ #include <gz/common/MeshExporter.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/MeshLoader.hh b/graphics/include/ignition/common/MeshLoader.hh index e513e2a3e..ff28f1724 100644 --- a/graphics/include/ignition/common/MeshLoader.hh +++ b/graphics/include/ignition/common/MeshLoader.hh @@ -16,3 +16,4 @@ */ #include <gz/common/MeshLoader.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/MeshManager.hh b/graphics/include/ignition/common/MeshManager.hh index c3b371692..15e47d109 100644 --- a/graphics/include/ignition/common/MeshManager.hh +++ b/graphics/include/ignition/common/MeshManager.hh @@ -16,3 +16,4 @@ */ #include <gz/common/MeshManager.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/NodeAnimation.hh b/graphics/include/ignition/common/NodeAnimation.hh index e4c0efdab..c49a9cd1c 100644 --- a/graphics/include/ignition/common/NodeAnimation.hh +++ b/graphics/include/ignition/common/NodeAnimation.hh @@ -16,3 +16,4 @@ */ #include <gz/common/NodeAnimation.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/NodeTransform.hh b/graphics/include/ignition/common/NodeTransform.hh index 48e5d3ced..aeb8bc62c 100644 --- a/graphics/include/ignition/common/NodeTransform.hh +++ b/graphics/include/ignition/common/NodeTransform.hh @@ -16,3 +16,4 @@ */ #include <gz/common/NodeTransform.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/OBJLoader.hh b/graphics/include/ignition/common/OBJLoader.hh index 0859dd13a..f7f617771 100644 --- a/graphics/include/ignition/common/OBJLoader.hh +++ b/graphics/include/ignition/common/OBJLoader.hh @@ -16,3 +16,4 @@ */ #include <gz/common/OBJLoader.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/Pbr.hh b/graphics/include/ignition/common/Pbr.hh index e614ccba4..c9eb85c48 100644 --- a/graphics/include/ignition/common/Pbr.hh +++ b/graphics/include/ignition/common/Pbr.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Pbr.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/STLLoader.hh b/graphics/include/ignition/common/STLLoader.hh index cf66d1aaa..73c411622 100644 --- a/graphics/include/ignition/common/STLLoader.hh +++ b/graphics/include/ignition/common/STLLoader.hh @@ -16,3 +16,4 @@ */ #include <gz/common/STLLoader.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/SVGLoader.hh b/graphics/include/ignition/common/SVGLoader.hh index 6cd8bcf29..28641a546 100644 --- a/graphics/include/ignition/common/SVGLoader.hh +++ b/graphics/include/ignition/common/SVGLoader.hh @@ -16,3 +16,4 @@ */ #include <gz/common/SVGLoader.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/Skeleton.hh b/graphics/include/ignition/common/Skeleton.hh index b626a984f..96b0e850e 100644 --- a/graphics/include/ignition/common/Skeleton.hh +++ b/graphics/include/ignition/common/Skeleton.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Skeleton.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/SkeletonAnimation.hh b/graphics/include/ignition/common/SkeletonAnimation.hh index 15b11e8e8..10fbadc72 100644 --- a/graphics/include/ignition/common/SkeletonAnimation.hh +++ b/graphics/include/ignition/common/SkeletonAnimation.hh @@ -16,3 +16,4 @@ */ #include <gz/common/SkeletonAnimation.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/SkeletonNode.hh b/graphics/include/ignition/common/SkeletonNode.hh index 028ebb04a..dbc19fe9b 100644 --- a/graphics/include/ignition/common/SkeletonNode.hh +++ b/graphics/include/ignition/common/SkeletonNode.hh @@ -16,3 +16,4 @@ */ #include <gz/common/SkeletonNode.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/SubMesh.hh b/graphics/include/ignition/common/SubMesh.hh index 99627f022..893ccf9cc 100644 --- a/graphics/include/ignition/common/SubMesh.hh +++ b/graphics/include/ignition/common/SubMesh.hh @@ -16,3 +16,4 @@ */ #include <gz/common/SubMesh.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/graphics.hh b/graphics/include/ignition/common/graphics.hh index 479012f22..f8ef1afa3 100644 --- a/graphics/include/ignition/common/graphics.hh +++ b/graphics/include/ignition/common/graphics.hh @@ -16,3 +16,4 @@ */ #include <gz/common/graphics.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/graphics/Export.hh b/graphics/include/ignition/common/graphics/Export.hh index 11fb43152..92aec884e 100644 --- a/graphics/include/ignition/common/graphics/Export.hh +++ b/graphics/include/ignition/common/graphics/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/graphics/Export.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/graphics/Types.hh b/graphics/include/ignition/common/graphics/Types.hh index b241035a6..d768670be 100644 --- a/graphics/include/ignition/common/graphics/Types.hh +++ b/graphics/include/ignition/common/graphics/Types.hh @@ -16,3 +16,4 @@ */ #include <gz/common/graphics/Types.hh> +#include <ignition/common/config.hh> diff --git a/graphics/include/ignition/common/graphics/detail/Export.hh b/graphics/include/ignition/common/graphics/detail/Export.hh index d613f0bc1..ea783ec12 100644 --- a/graphics/include/ignition/common/graphics/detail/Export.hh +++ b/graphics/include/ignition/common/graphics/detail/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/graphics/detail/Export.hh> +#include <ignition/common/config.hh> diff --git a/graphics/src/Animation.cc b/graphics/src/Animation.cc index ca4e762a1..d566dd537 100644 --- a/graphics/src/Animation.cc +++ b/graphics/src/Animation.cc @@ -17,14 +17,14 @@ #include <algorithm> #include <memory> -#include <ignition/math/Spline.hh> -#include <ignition/math/Vector2.hh> -#include <ignition/math/RotationSpline.hh> -#include <ignition/common/Console.hh> -#include <ignition/common/KeyFrame.hh> -#include <ignition/common/Animation.hh> - -using namespace ignition; +#include <gz/math/Spline.hh> +#include <gz/math/Vector2.hh> +#include <gz/math/RotationSpline.hh> +#include <gz/common/Console.hh> +#include <gz/common/KeyFrame.hh> +#include <gz/common/Animation.hh> + +using namespace gz; using namespace common; using KeyFrame_V = std::vector<std::shared_ptr<common::KeyFrame>>; @@ -56,7 +56,7 @@ namespace } ///////////////////////////////////////////////// -namespace ignition { +namespace gz { namespace common { class Animation::Implementation @@ -133,7 +133,7 @@ class TrajectoryInfo::Implementation ///////////////////////////////////////////////// Animation::Animation(const std::string &_name, const double _length, const bool _loop) -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->name = _name; this->dataPtr->length = _length; @@ -214,7 +214,7 @@ common::KeyFrame *Animation::KeyFrame(const unsigned int _index) const result = this->dataPtr->keyFrames[_index].get(); else { - ignerr << "Key frame index[" << _index + gzerr << "Key frame index[" << _index << "] is larger than key frame array size[" << this->dataPtr->keyFrames.size() << "]\n"; } @@ -289,7 +289,7 @@ double Animation::KeyFramesAtTime(double _time, common::KeyFrame **_kf1, PoseAnimation::PoseAnimation(const std::string &_name, const double _length, const bool _loop, double _tension) : Animation(_name, _length, _loop), - dataPtr(ignition::utils::MakeImpl<Implementation>()) + dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->tension = math::clamp(_tension, 0.0, 1.0); } @@ -367,7 +367,7 @@ void PoseAnimation::InterpolatedKeyFrame(const double _time, NumericAnimation::NumericAnimation(const std::string &_name, const double _length, const bool _loop) : Animation(_name, _length, _loop), - dataPtr(ignition::utils::MakeImpl<Implementation>()) + dataPtr(gz::utils::MakeImpl<Implementation>()) { } @@ -406,7 +406,7 @@ void NumericAnimation::InterpolatedKeyFrame(NumericKeyFrame &_kf) const ///////////////////////////////////////////////// TrajectoryInfo::TrajectoryInfo() - : dataPtr(ignition::utils::MakeImpl<Implementation>()) + : dataPtr(gz::utils::MakeImpl<Implementation>()) { } @@ -552,5 +552,5 @@ void TrajectoryInfo::SetWaypoints( this->dataPtr->waypoints = anim; this->dataPtr->translated = true; } -} // namespace ignition +} // namespace gz } // namespace common diff --git a/graphics/src/Animation_TEST.cc b/graphics/src/Animation_TEST.cc index 216bb43c8..11b84d1c2 100644 --- a/graphics/src/Animation_TEST.cc +++ b/graphics/src/Animation_TEST.cc @@ -17,14 +17,14 @@ #include <gtest/gtest.h> -#include <ignition/math/Vector3.hh> -#include <ignition/math/Quaternion.hh> -#include <ignition/common/KeyFrame.hh> -#include <ignition/common/Animation.hh> +#include <gz/math/Vector3.hh> +#include <gz/math/Quaternion.hh> +#include <gz/common/KeyFrame.hh> +#include <gz/common/Animation.hh> -#include "ignition/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/AutoLogFixture.hh" -using namespace ignition; +using namespace gz; class AnimationTest : public common::testing::AutoLogFixture { }; diff --git a/graphics/src/BVHLoader.cc b/graphics/src/BVHLoader.cc index 04866fadc..9d27d998e 100644 --- a/graphics/src/BVHLoader.cc +++ b/graphics/src/BVHLoader.cc @@ -18,13 +18,13 @@ #include <fstream> #include <sstream> -#include <ignition/common/SystemPaths.hh> -#include <ignition/common/Skeleton.hh> -#include <ignition/common/SkeletonAnimation.hh> -#include <ignition/common/Console.hh> -#include <ignition/common/BVHLoader.hh> +#include <gz/common/SystemPaths.hh> +#include <gz/common/Skeleton.hh> +#include <gz/common/SkeletonAnimation.hh> +#include <gz/common/Console.hh> +#include <gz/common/BVHLoader.hh> -using namespace ignition; +using namespace gz; using namespace common; ///////////////////////////////////////////////// @@ -192,7 +192,7 @@ std::unique_ptr<Skeleton> BVHLoader::Load(const std::string &_filename, words = split(line, " "); if (words.size() < totalChannels) { - ignwarn << "Frame " << frameNo << " invalid.\n"; + gzwarn << "Frame " << frameNo << " invalid.\n"; frameNo++; time += frameTime; continue; @@ -279,7 +279,7 @@ std::unique_ptr<Skeleton> BVHLoader::Load(const std::string &_filename, break; } if (frameNo < frameCount - 1) - ignwarn << "BVH file ended unexpectedly.\n"; + gzwarn << "BVH file ended unexpectedly.\n"; skeleton->AddAnimation(animation); diff --git a/graphics/src/CMakeLists.txt b/graphics/src/CMakeLists.txt index 85e5b19a5..06b6958ca 100644 --- a/graphics/src/CMakeLists.txt +++ b/graphics/src/CMakeLists.txt @@ -66,7 +66,7 @@ else() endif() # define of tinxml2 major version >= 6 -# https://github.com/ignitionrobotics/ign-common/issues/28 +# https://github.com/gazebosim/gz-common/issues/28 if (NOT TINYXML2_VERSION VERSION_LESS "6.0.0") message(STATUS "TINYXML2_VERSION ${TINYXML2_VERSION} >= 6.0.0") target_compile_definitions(${graphics_target} diff --git a/graphics/src/ColladaExporter.cc b/graphics/src/ColladaExporter.cc index 726639820..b4d1615ee 100644 --- a/graphics/src/ColladaExporter.cc +++ b/graphics/src/ColladaExporter.cc @@ -14,14 +14,14 @@ * limitations under the License. * */ -#include <ignition/math/Vector3.hh> +#include <gz/math/Vector3.hh> -#include <ignition/common/Material.hh> -#include <ignition/common/Mesh.hh> -#include <ignition/common/SubMesh.hh> -#include <ignition/common/Console.hh> -#include <ignition/common/ColladaExporter.hh> -#include <ignition/common/Filesystem.hh> +#include <gz/common/Material.hh> +#include <gz/common/Mesh.hh> +#include <gz/common/SubMesh.hh> +#include <gz/common/Console.hh> +#include <gz/common/ColladaExporter.hh> +#include <gz/common/Filesystem.hh> #include "tinyxml2.h" @@ -38,7 +38,7 @@ static const char pathSeparator = '/'; #endif -using namespace ignition; +using namespace gz; using namespace common; static void LogTinyXml2DocumentError( @@ -74,11 +74,11 @@ static void LogTinyXml2DocumentError( warning += "none)"; } - ignwarn << warning << "\n"; + gzwarn << warning << "\n"; } /// Private data for the ColladaExporter class -class ignition::common::ColladaExporter::Implementation +class gz::common::ColladaExporter::Implementation { /// \brief Geometry types public: enum GeometryType {POSITION, NORMAL, UVMAP}; @@ -151,7 +151,7 @@ class ignition::common::ColladaExporter::Implementation ////////////////////////////////////////////////// ColladaExporter::ColladaExporter() -: MeshExporter(), dataPtr(ignition::utils::MakeImpl<Implementation>()) +: MeshExporter(), dataPtr(gz::utils::MakeImpl<Implementation>()) { } @@ -187,7 +187,7 @@ void ColladaExporter::Export(const Mesh *_mesh, const std::string &_filename, if ( _submeshToMatrix.size() > 0 && (_mesh->SubMeshCount() != _submeshToMatrix.size()) ) { - ignerr << "_submeshToMatrix.size() : " << _mesh->SubMeshCount() + gzerr << "_submeshToMatrix.size() : " << _mesh->SubMeshCount() << " , must be equal to SubMeshCount() : " << _mesh->SubMeshCount() << std::endl; return; @@ -331,12 +331,12 @@ void ColladaExporter::Export(const Mesh *_mesh, const std::string &_filename, // Save file if (this->dataPtr->exportTextures) { - const std::string directory = ignition::common::joinPaths( + const std::string directory = gz::common::joinPaths( this->dataPtr->path, this->dataPtr->filename, "meshes"); createDirectories(directory); - const std::string finalFilename = ignition::common::joinPaths( + const std::string finalFilename = gz::common::joinPaths( this->dataPtr->path, this->dataPtr->filename, "meshes", this->dataPtr->filename + ".dae"); @@ -350,7 +350,7 @@ void ColladaExporter::Export(const Mesh *_mesh, const std::string &_filename, } else { - const std::string finalFilename = ignition::common::joinPaths( + const std::string finalFilename = gz::common::joinPaths( this->dataPtr->path, this->dataPtr->filename + std::string(".dae")); const tinyxml2::XMLError error = xmlDoc.SaveFile(finalFilename.c_str()); @@ -379,7 +379,7 @@ void ColladaExporter::Implementation::ExportAsset( ////////////////////////////////////////////////// void ColladaExporter::Implementation::ExportGeometrySource( - const ignition::common::SubMesh *_subMesh, + const gz::common::SubMesh *_subMesh, tinyxml2::XMLElement *_meshXml, GeometryType _type, const char *_meshID) { char sourceId[100], sourceArrayId[107]; @@ -394,7 +394,7 @@ void ColladaExporter::Implementation::ExportGeometrySource( snprintf(sourceId, sizeof(sourceId), "%s-Positions", _meshID); count = _subMesh->VertexCount(); stride = 3; - ignition::math::Vector3d vertex; + gz::math::Vector3d vertex; for (unsigned int i = 0; i < count; ++i) { vertex = _subMesh->Vertex(i); @@ -406,7 +406,7 @@ void ColladaExporter::Implementation::ExportGeometrySource( snprintf(sourceId, sizeof(sourceId), "%s-Normals", _meshID); count = _subMesh->NormalCount(); stride = 3; - ignition::math::Vector3d normal; + gz::math::Vector3d normal; for (unsigned int i = 0; i < count; ++i) { normal = _subMesh->Normal(i); @@ -418,7 +418,7 @@ void ColladaExporter::Implementation::ExportGeometrySource( snprintf(sourceId, sizeof(sourceId), "%s-UVMap", _meshID); count = _subMesh->VertexCount(); stride = 2; - ignition::math::Vector2d inTexCoord; + gz::math::Vector2d inTexCoord; for (unsigned int i = 0; i < count; ++i) { inTexCoord = _subMesh->TexCoordBySet(i, 0); @@ -592,7 +592,7 @@ int ColladaExporter::Implementation::ExportImages( int imageCount = 0; for (unsigned int i = 0; i < this->materialCount; ++i) { - const ignition::common::MaterialPtr material = + const gz::common::MaterialPtr material = this->mesh->MaterialByIndex(i); std::string imageString = material->TextureImage(); @@ -610,7 +610,7 @@ int ColladaExporter::Implementation::ExportImages( _libraryImagesXml->GetDocument()->NewElement("init_from"); const auto imageName = imageString.substr( imageString.rfind(pathSeparator)); - const auto imagePath = ignition::common::joinPaths("..", "materials", + const auto imagePath = gz::common::joinPaths("..", "materials", "textures", imageName); initFromXml->LinkEndChild( _libraryImagesXml->GetDocument()->NewText(imagePath.c_str())); @@ -674,7 +674,7 @@ void ColladaExporter::Implementation::ExportEffects( effectXml->LinkEndChild(profileCommonXml); // Image - const ignition::common::MaterialPtr material = + const gz::common::MaterialPtr material = this->mesh->MaterialByIndex(i); std::string imageString = material->TextureImage(); @@ -892,7 +892,7 @@ void ColladaExporter::Implementation::ExportVisualScenes( if (!subMesh->GetMaterialIndex()) continue; const auto materialIndex = subMesh->GetMaterialIndex().value(); - const ignition::common::MaterialPtr material = + const gz::common::MaterialPtr material = this->mesh->MaterialByIndex(materialIndex); if (material) diff --git a/graphics/src/ColladaExporter_TEST.cc b/graphics/src/ColladaExporter_TEST.cc index d71e403a8..a6c7eb134 100644 --- a/graphics/src/ColladaExporter_TEST.cc +++ b/graphics/src/ColladaExporter_TEST.cc @@ -17,20 +17,20 @@ #include <gtest/gtest.h> #include "tinyxml2.h" -#include "ignition/common/ColladaLoader.hh" -#include "ignition/common/ColladaExporter.hh" -#include "ignition/common/Filesystem.hh" -#include "ignition/common/Mesh.hh" -#include "ignition/common/SubMesh.hh" +#include "gz/common/ColladaLoader.hh" +#include "gz/common/ColladaExporter.hh" +#include "gz/common/Filesystem.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/SubMesh.hh" -#include "ignition/common/testing/AutoLogFixture.hh" -#include "ignition/common/testing/TestPaths.hh" +#include "gz/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/TestPaths.hh" #ifdef _WIN32 #define snprintf _snprintf #endif -using namespace ignition; +using namespace gz; class ColladaExporter : public common::testing::AutoLogFixture { /// \brief Setup the test fixture. This gets called by gtest. diff --git a/graphics/src/ColladaLoader.cc b/graphics/src/ColladaLoader.cc index 5018f0c3e..8c796f9d1 100644 --- a/graphics/src/ColladaLoader.cc +++ b/graphics/src/ColladaLoader.cc @@ -20,30 +20,30 @@ #include <vector> #include <set> -#include <ignition/math/Helpers.hh> -#include <ignition/math/Matrix4.hh> -#include <ignition/math/Vector2.hh> -#include <ignition/math/Vector3.hh> +#include <gz/math/Helpers.hh> +#include <gz/math/Matrix4.hh> +#include <gz/math/Vector2.hh> +#include <gz/math/Vector3.hh> #include "tinyxml2.h" -#include "ignition/common/graphics/Types.hh" -#include "ignition/common/Console.hh" -#include "ignition/common/Material.hh" -#include "ignition/common/SubMesh.hh" -#include "ignition/common/Mesh.hh" -#include "ignition/common/Skeleton.hh" -#include "ignition/common/SkeletonAnimation.hh" -#include "ignition/common/SystemPaths.hh" -#include "ignition/common/Util.hh" -#include "ignition/common/ColladaLoader.hh" - -using namespace ignition; +#include "gz/common/graphics/Types.hh" +#include "gz/common/Console.hh" +#include "gz/common/Material.hh" +#include "gz/common/SubMesh.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/Skeleton.hh" +#include "gz/common/SkeletonAnimation.hh" +#include "gz/common/SystemPaths.hh" +#include "gz/common/Util.hh" +#include "gz/common/ColladaLoader.hh" + +using namespace gz; using namespace common; using RawNodeAnim = std::map<double, std::vector<NodeTransform> >; using RawSkeletonAnim = std::map<std::string, RawNodeAnim>; -namespace ignition +namespace gz { namespace common { @@ -70,15 +70,15 @@ namespace ignition /// \brief Map of collada POSITION ids to list of vectors. public: std::map<std::string, - std::vector<ignition::math::Vector3d> > positionIds; + std::vector<gz::math::Vector3d> > positionIds; /// \brief Map of collada NORMAL ids to list of normals. public: std::map<std::string, - std::vector<ignition::math::Vector3d> > normalIds; + std::vector<gz::math::Vector3d> > normalIds; /// \brief Map of collada TEXCOORD ids to list of texture coordinates. public: std::map<std::string, - std::vector<ignition::math::Vector2d> >texcoordIds; + std::vector<gz::math::Vector2d> >texcoordIds; /// \brief Map of collada Material ids to Gazebo materials. public: std::map<std::string, MaterialPtr> materialIds; @@ -108,7 +108,7 @@ namespace ignition /// \param[in,out] _mesh The mesh being loaded public: void LoadController(tinyxml2::XMLElement *_contrXml, std::vector<tinyxml2::XMLElement*> _skelXmls, - const ignition::math::Matrix4d &_transform, + const gz::math::Matrix4d &_transform, Mesh *_mesh); /// \brief Load animations for a skeleton @@ -146,7 +146,7 @@ namespace ignition /// \param[in] _tranform Transform to apply to the loaded geometry /// \param[in,out] _mesh Pointer to the mesh currently being loaded public: void LoadGeometry(tinyxml2::XMLElement *_xml, - const ignition::math::Matrix4d &_transform, + const gz::math::Matrix4d &_transform, Mesh *_mesh); /// \brief Get an XML element by ID @@ -171,12 +171,12 @@ namespace ignition /// \param[in] _transform Transform to apply to the node public: void LoadNode(tinyxml2::XMLElement *_elem, Mesh *_mesh, - const ignition::math::Matrix4d &_transform); + const gz::math::Matrix4d &_transform); /// \brief Load a transform /// \param[in] _elem Pointer to the transform XML instance /// \return A Matrix4 transform - public: ignition::math::Matrix4d LoadNodeTransform( + public: gz::math::Matrix4d LoadNodeTransform( tinyxml2::XMLElement *_elem); /// \brief Load vertices @@ -185,9 +185,9 @@ namespace ignition /// \param[out] _verts Holds the resulting vertices /// \param[out] _norms Holds the resulting normals public: void LoadVertices(const std::string &_id, - const ignition::math::Matrix4d &_transform, - std::vector<ignition::math::Vector3d> &_verts, - std::vector<ignition::math::Vector3d> &_norms); + const gz::math::Matrix4d &_transform, + std::vector<gz::math::Vector3d> &_verts, + std::vector<gz::math::Vector3d> &_norms); /// \brief Load vertices /// \param[in] _id String id of the vertices XML node @@ -197,9 +197,9 @@ namespace ignition /// \param[out] _vertDup Holds a map of duplicate position indices /// \param[out] _normDup Holds a map of duplicate normal indices public: void LoadVertices(const std::string &_id, - const ignition::math::Matrix4d &_transform, - std::vector<ignition::math::Vector3d> &_verts, - std::vector<ignition::math::Vector3d> &_norms, + const gz::math::Matrix4d &_transform, + std::vector<gz::math::Vector3d> &_verts, + std::vector<gz::math::Vector3d> &_norms, std::map<unsigned int, unsigned int> &_vertDup, std::map<unsigned int, unsigned int> &_normDup); @@ -209,8 +209,8 @@ namespace ignition /// \param[out] _values Holds the resulting position values /// \param[out] _duplicates Holds a map of duplicate position indices public: void LoadPositions(const std::string &_id, - const ignition::math::Matrix4d &_transform, - std::vector<ignition::math::Vector3d> &_values, + const gz::math::Matrix4d &_transform, + std::vector<gz::math::Vector3d> &_values, std::map<unsigned int, unsigned int> &_duplicates); /// \brief Load normals @@ -219,8 +219,8 @@ namespace ignition /// \param[out] _values Holds the resulting normal values /// \param[out] _duplicates Holds a map of duplicate normal indices public: void LoadNormals(const std::string &_id, - const ignition::math::Matrix4d &_transform, - std::vector<ignition::math::Vector3d> &_values, + const gz::math::Matrix4d &_transform, + std::vector<gz::math::Vector3d> &_values, std::map<unsigned int, unsigned int> &_duplicates); /// \brief Load texture coordinates @@ -228,7 +228,7 @@ namespace ignition /// \param[out] _values Holds the resulting uv values /// \param[out] _duplicates Holds a map of duplicate uv indices public: void LoadTexCoords(const std::string &_id, - std::vector<ignition::math::Vector2d> &_values, + std::vector<gz::math::Vector2d> &_values, std::map<unsigned int, unsigned int> &_duplicates); /// \brief Load a material @@ -249,7 +249,7 @@ namespace ignition /// \param[in] _transform Transform to apply to all triangles /// \param[out] _mesh Mesh that is currently being loaded public: void LoadTriangles(tinyxml2::XMLElement *_trianglesXml, - const ignition::math::Matrix4d &_transform, + const gz::math::Matrix4d &_transform, Mesh *_mesh); /// \brief Load a polygon list @@ -257,7 +257,7 @@ namespace ignition /// \param[in] _transform Transform to apply to each polygon /// \param[out] _mesh Mesh that is currently being loaded public: void LoadPolylist(tinyxml2::XMLElement *_polylistXml, - const ignition::math::Matrix4d &_transform, + const gz::math::Matrix4d &_transform, Mesh *_mesh); /// \brief Load lines @@ -265,7 +265,7 @@ namespace ignition /// \param[in] _transform Transform to apply /// \param[out] _mesh Mesh that is currently being loaded public: void LoadLines(tinyxml2::XMLElement *_xml, - const ignition::math::Matrix4d &_transform, + const gz::math::Matrix4d &_transform, Mesh *_mesh); /// \brief Load an entire scene @@ -336,7 +336,7 @@ void hash_combine(std::size_t &_seed, const double &_v) ///////////////////////////////////////////////// struct Vector3Hash { - std::size_t operator()(const ignition::math::Vector3d &_v) const + std::size_t operator()(const gz::math::Vector3d &_v) const { std::size_t seed = 0; hash_combine(seed, _v.X()); @@ -349,7 +349,7 @@ struct Vector3Hash ///////////////////////////////////////////////// struct Vector2dHash { - std::size_t operator()(const ignition::math::Vector2d &_v) const + std::size_t operator()(const gz::math::Vector2d &_v) const { std::size_t seed = 0; hash_combine(seed, _v.X()); @@ -360,7 +360,7 @@ struct Vector2dHash ////////////////////////////////////////////////// ColladaLoader::ColladaLoader() -: MeshLoader(), dataPtr(ignition::utils::MakeImpl<Implementation>()) +: MeshLoader(), dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->meter = 1.0; } @@ -398,15 +398,15 @@ Mesh *ColladaLoader::Load(const std::string &_filename) this->dataPtr->filename = _filename; if (xmlDoc.LoadFile(_filename.c_str()) != tinyxml2::XML_SUCCESS) - ignerr << "Unable to load collada file[" << _filename << "]\n"; + gzerr << "Unable to load collada file[" << _filename << "]\n"; this->dataPtr->colladaXml = xmlDoc.FirstChildElement("COLLADA"); if (!this->dataPtr->colladaXml) - ignerr << "Missing COLLADA tag\n"; + gzerr << "Missing COLLADA tag\n"; if (std::string(this->dataPtr->colladaXml->Attribute("version")) != "1.4.0" && std::string(this->dataPtr->colladaXml->Attribute("version")) != "1.4.1") - ignerr << "Invalid collada file. Must be version 1.4.0 or 1.4.1\n"; + gzerr << "Invalid collada file. Must be version 1.4.0 or 1.4.1\n"; tinyxml2::XMLElement *assetXml = this->dataPtr->colladaXml->FirstChildElement("asset"); @@ -414,7 +414,7 @@ Mesh *ColladaLoader::Load(const std::string &_filename) { tinyxml2::XMLElement *unitXml = assetXml->FirstChildElement("unit"); if (unitXml && unitXml->Attribute("meter")) - this->dataPtr->meter = ignition::math::parseFloat( + this->dataPtr->meter = gz::math::parseFloat( unitXml->Attribute("meter")); } @@ -427,7 +427,7 @@ Mesh *ColladaLoader::Load(const std::string &_filename) this->dataPtr->ApplyInvBindTransform(mesh->MeshSkeleton()); // This will make the model the correct size. - mesh->Scale(ignition::math::Vector3d( + mesh->Scale(gz::math::Vector3d( this->dataPtr->meter, this->dataPtr->meter, this->dataPtr->meter)); if (mesh->HasSkeleton()) mesh->MeshSkeleton()->Scale(this->dataPtr->meter); @@ -447,14 +447,14 @@ void ColladaLoader::Implementation::LoadScene(Mesh *_mesh) if (!visSceneXml) { - ignerr << "Unable to find visual_scene id ='" << sceneURL << "'\n"; + gzerr << "Unable to find visual_scene id ='" << sceneURL << "'\n"; return; } tinyxml2::XMLElement *nodeXml = visSceneXml->FirstChildElement("node"); while (nodeXml) { - this->LoadNode(nodeXml, _mesh, ignition::math::Matrix4d::Identity); + this->LoadNode(nodeXml, _mesh, gz::math::Matrix4d::Identity); nodeXml = nodeXml->NextSiblingElement("node"); } } @@ -462,12 +462,12 @@ void ColladaLoader::Implementation::LoadScene(Mesh *_mesh) ///////////////////////////////////////////////// void ColladaLoader::Implementation::LoadNode( tinyxml2::XMLElement *_elem, Mesh *_mesh, - const ignition::math::Matrix4d &_transform) + const gz::math::Matrix4d &_transform) { tinyxml2::XMLElement *nodeXml; tinyxml2::XMLElement *instGeomXml; - ignition::math::Matrix4d transform = this->LoadNodeTransform(_elem); + gz::math::Matrix4d transform = this->LoadNodeTransform(_elem); transform = _transform * transform; nodeXml = _elem->FirstChildElement("node"); @@ -515,7 +515,7 @@ void ColladaLoader::Implementation::LoadNode( nodeXml = this->ElementId("node", nodeURLStr); if (!nodeXml) { - ignerr << "Unable to find node[" << nodeURLStr << "]\n"; + gzerr << "Unable to find node[" << nodeURLStr << "]\n"; return; } this->LoadNode(nodeXml, _mesh, transform); @@ -607,10 +607,10 @@ void ColladaLoader::Implementation::LoadNode( } ///////////////////////////////////////////////// -ignition::math::Matrix4d ColladaLoader::Implementation::LoadNodeTransform( +gz::math::Matrix4d ColladaLoader::Implementation::LoadNodeTransform( tinyxml2::XMLElement *_elem) { - ignition::math::Matrix4d transform(ignition::math::Matrix4d::Identity); + gz::math::Matrix4d transform(gz::math::Matrix4d::Identity); if (_elem->FirstChildElement("matrix")) { @@ -629,7 +629,7 @@ ignition::math::Matrix4d ColladaLoader::Implementation::LoadNodeTransform( if (_elem->FirstChildElement("translate")) { std::string transStr = _elem->FirstChildElement("translate")->GetText(); - ignition::math::Vector3d translate; + gz::math::Vector3d translate; std::istringstream stream(transStr); stream >> translate; // translate *= this->meter; @@ -639,8 +639,8 @@ ignition::math::Matrix4d ColladaLoader::Implementation::LoadNodeTransform( tinyxml2::XMLElement *rotateXml = _elem->FirstChildElement("rotate"); while (rotateXml) { - ignition::math::Matrix3d mat; - ignition::math::Vector3d axis; + gz::math::Matrix3d mat; + gz::math::Vector3d axis; double angle; std::string rotateStr = rotateXml->GetText(); @@ -649,7 +649,7 @@ ignition::math::Matrix4d ColladaLoader::Implementation::LoadNodeTransform( iss >> axis.X() >> axis.Y() >> axis.Z(); iss >> angle; mat.SetFromAxisAngle(axis, IGN_DTOR(angle)); - ignition::math::Matrix4d mat4(ignition::math::Matrix4d::Identity); + gz::math::Matrix4d mat4(gz::math::Matrix4d::Identity); mat4 = mat; transform = transform * mat4; @@ -660,10 +660,10 @@ ignition::math::Matrix4d ColladaLoader::Implementation::LoadNodeTransform( if (_elem->FirstChildElement("scale")) { std::string scaleStr = _elem->FirstChildElement("scale")->GetText(); - ignition::math::Vector3d scale; + gz::math::Vector3d scale; std::istringstream stream(scaleStr); stream >> scale; - ignition::math::Matrix4d scaleMat; + gz::math::Matrix4d scaleMat; scaleMat.Scale(scale); transform = transform * scaleMat; } @@ -676,19 +676,19 @@ ignition::math::Matrix4d ColladaLoader::Implementation::LoadNodeTransform( void ColladaLoader::Implementation::LoadController( tinyxml2::XMLElement *_contrXml, std::vector<tinyxml2::XMLElement *> _skelXmls, - const ignition::math::Matrix4d &_transform, + const gz::math::Matrix4d &_transform, Mesh *_mesh) { if (nullptr == _contrXml) { - ignerr << "Can't load null controller element." << std::endl; + gzerr << "Can't load null controller element." << std::endl; return; } tinyxml2::XMLElement *skinXml = _contrXml->FirstChildElement("skin"); if (nullptr == skinXml) { - ignerr << "Failed to find skin element" << std::endl; + gzerr << "Failed to find skin element" << std::endl; return; } @@ -697,7 +697,7 @@ void ColladaLoader::Implementation::LoadController( auto shapeMat = skinXml->FirstChildElement("bind_shape_matrix"); if (nullptr == shapeMat || nullptr == shapeMat->GetText()) { - ignerr << "Missing <bind_shape_matrix>" << std::endl; + gzerr << "Missing <bind_shape_matrix>" << std::endl; return; } std::string matrixStr = shapeMat->GetText(); @@ -706,7 +706,7 @@ void ColladaLoader::Implementation::LoadController( for (unsigned int i = 0; i < 16; ++i) iss >> values[i]; - ignition::math::Matrix4d bindTrans; + gz::math::Matrix4d bindTrans; bindTrans.Set(values[0], values[1], values[2], values[3], values[4], values[5], values[6], values[7], values[8], values[9], values[10], values[11], @@ -715,7 +715,7 @@ void ColladaLoader::Implementation::LoadController( tinyxml2::XMLElement *jointsXml = skinXml->FirstChildElement("joints"); if (nullptr == jointsXml) { - ignerr << "Failed to find <joints> element" << std::endl; + gzerr << "Failed to find <joints> element" << std::endl; return; } @@ -735,19 +735,19 @@ void ColladaLoader::Implementation::LoadController( if (jointsURL.empty()) { - ignwarn << "Missing semantic='JOINT' input source" << std::endl; + gzwarn << "Missing semantic='JOINT' input source" << std::endl; } if (invBindMatURL.empty()) { - ignwarn << "Missing semantic='INV__BIND_MATRIX' input source" << std::endl; + gzwarn << "Missing semantic='INV__BIND_MATRIX' input source" << std::endl; } jointsXml = this->ElementId("source", jointsURL); if (!jointsXml) { - ignerr << "Could not find node [" << jointsURL << "]. " + gzerr << "Could not find node [" << jointsURL << "]. " << "Failed to parse skinning information in Collada file." << std::endl; return; } @@ -755,7 +755,7 @@ void ColladaLoader::Implementation::LoadController( auto nameArray = jointsXml->FirstChildElement("Name_array"); if (nullptr == nameArray) { - ignerr << "Missing <Name_array>" << std::endl; + gzerr << "Missing <Name_array>" << std::endl; return; } @@ -782,7 +782,7 @@ void ColladaLoader::Implementation::LoadController( } if (nullptr == skeleton) { - ignerr << "Failed to create skeleton." << std::endl; + gzerr << "Failed to create skeleton." << std::endl; return; } skeleton->SetBindShapeTransform(bindTrans); @@ -798,7 +798,7 @@ void ColladaLoader::Implementation::LoadController( if (nullptr == invBMXml) { - ignerr << "Could not find node[" << invBindMatURL << "]. " + gzerr << "Could not find node[" << invBindMatURL << "]. " << "Faild to parse skinning information in Collada file." << std::endl; return; } @@ -812,28 +812,28 @@ void ColladaLoader::Implementation::LoadController( auto node = skeleton->NodeByName(joints[i]); if (nullptr == node) { - ignerr << "Node [" << joints[i] << "] is null." << std::endl; + gzerr << "Node [" << joints[i] << "] is null." << std::endl; continue; } unsigned int id = i * 16; - ignition::math::Matrix4d mat; - mat.Set(ignition::math::parseFloat(strs[id + 0]), - ignition::math::parseFloat(strs[id + 1]), - ignition::math::parseFloat(strs[id + 2]), - ignition::math::parseFloat(strs[id + 3]), - ignition::math::parseFloat(strs[id + 4]), - ignition::math::parseFloat(strs[id + 5]), - ignition::math::parseFloat(strs[id + 6]), - ignition::math::parseFloat(strs[id + 7]), - ignition::math::parseFloat(strs[id + 8]), - ignition::math::parseFloat(strs[id + 9]), - ignition::math::parseFloat(strs[id + 10]), - ignition::math::parseFloat(strs[id + 11]), - ignition::math::parseFloat(strs[id + 12]), - ignition::math::parseFloat(strs[id + 13]), - ignition::math::parseFloat(strs[id + 14]), - ignition::math::parseFloat(strs[id + 15])); + gz::math::Matrix4d mat; + mat.Set(gz::math::parseFloat(strs[id + 0]), + gz::math::parseFloat(strs[id + 1]), + gz::math::parseFloat(strs[id + 2]), + gz::math::parseFloat(strs[id + 3]), + gz::math::parseFloat(strs[id + 4]), + gz::math::parseFloat(strs[id + 5]), + gz::math::parseFloat(strs[id + 6]), + gz::math::parseFloat(strs[id + 7]), + gz::math::parseFloat(strs[id + 8]), + gz::math::parseFloat(strs[id + 9]), + gz::math::parseFloat(strs[id + 10]), + gz::math::parseFloat(strs[id + 11]), + gz::math::parseFloat(strs[id + 12]), + gz::math::parseFloat(strs[id + 13]), + gz::math::parseFloat(strs[id + 14]), + gz::math::parseFloat(strs[id + 15])); node->SetInverseBindTransform(mat); } @@ -842,7 +842,7 @@ void ColladaLoader::Implementation::LoadController( skinXml->FirstChildElement("vertex_weights"); if (nullptr == vertWeightsXml) { - ignerr << "Failed to find vertex_weights" << std::endl; + gzerr << "Failed to find vertex_weights" << std::endl; return; } @@ -986,11 +986,11 @@ void ColladaLoader::Implementation::LoadAnimationSet(tinyxml2::XMLElement *_xml, if (sep == '(') { std::string idx1Str = idxStr.substr(0, 1); - idx1 = ignition::math::parseInt(idx1Str); + idx1 = gz::math::parseInt(idx1Str); if (idxStr.length() > 4) { std::string idx2Str = idxStr.substr(3, 1); - idx2 = ignition::math::parseInt(idx2Str); + idx2 = gz::math::parseInt(idx2Str); } } } @@ -1042,7 +1042,7 @@ void ColladaLoader::Implementation::LoadAnimationSet(tinyxml2::XMLElement *_xml, if (strideAttribute) { stride = static_cast<unsigned int>( - ignition::math::parseInt(strideAttribute)); + gz::math::parseInt(strideAttribute)); } SkeletonNode *targetNode = _skel->NodeById(targetBone); @@ -1052,7 +1052,7 @@ void ColladaLoader::Implementation::LoadAnimationSet(tinyxml2::XMLElement *_xml, this->ElementId("node", targetBone); if (targetNodeXml == nullptr) { - ignerr << "Failed to load animation, [" << targetBone << "] not found" + gzerr << "Failed to load animation, [" << targetBone << "] not found" << std::endl; continue; } @@ -1061,7 +1061,7 @@ void ColladaLoader::Implementation::LoadAnimationSet(tinyxml2::XMLElement *_xml, } if (targetNode == nullptr) { - ignerr << "Failed to load bone [" << targetBone << "]." << std::endl; + gzerr << "Failed to load bone [" << targetBone << "]." << std::endl; continue; } @@ -1081,7 +1081,7 @@ void ColladaLoader::Implementation::LoadAnimationSet(tinyxml2::XMLElement *_xml, } else { - ignerr << "Failed to find node with ID [" << targetBone << "]" + gzerr << "Failed to find node with ID [" << targetBone << "]" << std::endl; } } @@ -1121,7 +1121,7 @@ void ColladaLoader::Implementation::LoadAnimationSet(tinyxml2::XMLElement *_xml, for (RawNodeAnim::iterator niter = iter->second.begin(); niter != iter->second.end(); ++niter) { - ignition::math::Matrix4d transform(ignition::math::Matrix4d::Identity); + gz::math::Matrix4d transform(gz::math::Matrix4d::Identity); for (unsigned int i = 0; i < niter->second.size(); ++i) { niter->second[i].RecalculateMatrix(); @@ -1139,7 +1139,7 @@ SkeletonNode *ColladaLoader::Implementation::LoadSingleSkeletonNode( { if (nullptr == _xml) { - ignerr << "Can't load single skeleton node from null XML." << std::endl; + gzerr << "Can't load single skeleton node from null XML." << std::endl; return nullptr; } @@ -1152,7 +1152,7 @@ SkeletonNode *ColladaLoader::Implementation::LoadSingleSkeletonNode( name = _xml->Attribute("id"); else { - ignerr << "Failed to create skeleton node without a name." << std::endl; + gzerr << "Failed to create skeleton node without a name." << std::endl; return nullptr; } @@ -1173,20 +1173,20 @@ SkeletonNode *ColladaLoader::Implementation::LoadSkeletonNodes( { if (nullptr == _xml) { - ignerr << "Can't load skeleton nodes from null XML element." << std::endl; + gzerr << "Can't load skeleton nodes from null XML element." << std::endl; return nullptr; } // Skip extras if (std::string(_xml->Value()) == "extra") { - ignwarn << "Skipping [extra] element." << std::endl; + gzwarn << "Skipping [extra] element." << std::endl; return nullptr; } if (std::string(_xml->Value()) != "node") { - ignwarn << "Failed to load element [" << _xml->Value() + gzwarn << "Failed to load element [" << _xml->Value() << "] as skeleton node." << std::endl; return nullptr; } @@ -1209,17 +1209,17 @@ void ColladaLoader::Implementation::SetSkeletonNodeTransform( { if (nullptr == _elem) { - ignerr << "Can't set transform from null XML." << std::endl; + gzerr << "Can't set transform from null XML." << std::endl; return; } if (nullptr == _node) { - ignerr << "Can't set transform to null skeleton node." << std::endl; + gzerr << "Can't set transform to null skeleton node." << std::endl; return; } - ignition::math::Matrix4d transform(ignition::math::Matrix4d::Identity); + gz::math::Matrix4d transform(gz::math::Matrix4d::Identity); if (_elem->FirstChildElement("matrix")) { @@ -1244,7 +1244,7 @@ void ColladaLoader::Implementation::SetSkeletonNodeTransform( if (_elem->FirstChildElement("translate")) { std::string transStr = _elem->FirstChildElement("translate")->GetText(); - ignition::math::Vector3d translate; + gz::math::Vector3d translate; std::istringstream stream(transStr); stream >> translate; // translate *= this->meter; @@ -1262,8 +1262,8 @@ void ColladaLoader::Implementation::SetSkeletonNodeTransform( tinyxml2::XMLElement *rotateXml = _elem->FirstChildElement("rotate"); while (rotateXml) { - ignition::math::Matrix3d mat; - ignition::math::Vector3d axis; + gz::math::Matrix3d mat; + gz::math::Vector3d axis; double angle; std::string rotateStr = rotateXml->GetText(); @@ -1273,7 +1273,7 @@ void ColladaLoader::Implementation::SetSkeletonNodeTransform( iss >> angle; mat.SetFromAxisAngle(axis, IGN_DTOR(angle)); - ignition::math::Matrix4d mat4(ignition::math::Matrix4d::Identity); + gz::math::Matrix4d mat4(gz::math::Matrix4d::Identity); mat4 = mat; NodeTransform nt(mat4); if (rotateXml->Attribute("sid")) @@ -1290,10 +1290,10 @@ void ColladaLoader::Implementation::SetSkeletonNodeTransform( if (_elem->FirstChildElement("scale")) { std::string scaleStr = _elem->FirstChildElement("scale")->GetText(); - ignition::math::Vector3d scale; + gz::math::Vector3d scale; std::istringstream stream(scaleStr); stream >> scale; - ignition::math::Matrix4d scaleMat; + gz::math::Matrix4d scaleMat; scaleMat.Scale(scale); NodeTransform nt(scaleMat); @@ -1313,7 +1313,7 @@ void ColladaLoader::Implementation::SetSkeletonNodeTransform( ///////////////////////////////////////////////// void ColladaLoader::Implementation::LoadGeometry(tinyxml2::XMLElement *_xml, - const ignition::math::Matrix4d &_transform, Mesh *_mesh) + const gz::math::Matrix4d &_transform, Mesh *_mesh) { tinyxml2::XMLElement *meshXml = _xml->FirstChildElement("mesh"); tinyxml2::XMLElement *childXml; @@ -1383,9 +1383,9 @@ tinyxml2::XMLElement *ColladaLoader::Implementation::ElementId( ///////////////////////////////////////////////// void ColladaLoader::Implementation::LoadVertices(const std::string &_id, - const ignition::math::Matrix4d &_transform, - std::vector<ignition::math::Vector3d> &_verts, - std::vector<ignition::math::Vector3d> &_norms) + const gz::math::Matrix4d &_transform, + std::vector<gz::math::Vector3d> &_verts, + std::vector<gz::math::Vector3d> &_norms) { std::map<unsigned int, unsigned int> vertDup; std::map<unsigned int, unsigned int> normDup; @@ -1394,9 +1394,9 @@ void ColladaLoader::Implementation::LoadVertices(const std::string &_id, ///////////////////////////////////////////////// void ColladaLoader::Implementation::LoadVertices(const std::string &_id, - const ignition::math::Matrix4d &_transform, - std::vector<ignition::math::Vector3d> &_verts, - std::vector<ignition::math::Vector3d> &_norms, + const gz::math::Matrix4d &_transform, + std::vector<gz::math::Vector3d> &_verts, + std::vector<gz::math::Vector3d> &_norms, std::map<unsigned int, unsigned int> &_vertDups, std::map<unsigned int, unsigned int> &_normDups) { @@ -1405,7 +1405,7 @@ void ColladaLoader::Implementation::LoadVertices(const std::string &_id, if (!verticesXml) { - ignerr << "Unable to find vertices[" << _id << "] in collada file\n"; + gzerr << "Unable to find vertices[" << _id << "] in collada file\n"; return; } @@ -1429,8 +1429,8 @@ void ColladaLoader::Implementation::LoadVertices(const std::string &_id, ///////////////////////////////////////////////// void ColladaLoader::Implementation::LoadPositions(const std::string &_id, - const ignition::math::Matrix4d &_transform, - std::vector<ignition::math::Vector3d> &_values, + const gz::math::Matrix4d &_transform, + std::vector<gz::math::Vector3d> &_values, std::map<unsigned int, unsigned int> &_duplicates) { if (this->positionIds.find(_id) != this->positionIds.end()) @@ -1443,7 +1443,7 @@ void ColladaLoader::Implementation::LoadPositions(const std::string &_id, tinyxml2::XMLElement *sourceXml = this->ElementId("source", _id); if (!sourceXml) { - ignerr << "Unable to find source\n"; + gzerr << "Unable to find source\n"; return; } @@ -1466,12 +1466,12 @@ void ColladaLoader::Implementation::LoadPositions(const std::string &_id, if (count) { - ignerr << "Vertex source missing float_array element, " + gzerr << "Vertex source missing float_array element, " << "or count is invalid.\n"; } else { - ignlog << "Vertex source has a float_array with a count of zero. " + gzlog << "Vertex source has a float_array with a count of zero. " << "This is likely not desired\n"; } @@ -1479,7 +1479,7 @@ void ColladaLoader::Implementation::LoadPositions(const std::string &_id, } std::string valueStr = floatArrayXml->GetText(); - std::unordered_map<ignition::math::Vector3d, + std::unordered_map<gz::math::Vector3d, unsigned int, Vector3Hash> unique; std::vector<std::string>::iterator iter, end; @@ -1487,9 +1487,9 @@ void ColladaLoader::Implementation::LoadPositions(const std::string &_id, end = strs.end(); for (iter = strs.begin(); iter != end; iter += 3) { - ignition::math::Vector3d vec(math::parseFloat(*iter), - ignition::math::parseFloat(*(iter+1)), - ignition::math::parseFloat(*(iter+2))); + gz::math::Vector3d vec(math::parseFloat(*iter), + gz::math::parseFloat(*(iter+1)), + gz::math::parseFloat(*(iter+2))); vec = _transform * vec; _values.push_back(vec); @@ -1507,8 +1507,8 @@ void ColladaLoader::Implementation::LoadPositions(const std::string &_id, ///////////////////////////////////////////////// void ColladaLoader::Implementation::LoadNormals(const std::string &_id, - const ignition::math::Matrix4d &_transform, - std::vector<ignition::math::Vector3d> &_values, + const gz::math::Matrix4d &_transform, + std::vector<gz::math::Vector3d> &_values, std::map<unsigned int, unsigned int> &_duplicates) { if (this->normalIds.find(_id) != this->normalIds.end()) @@ -1518,13 +1518,13 @@ void ColladaLoader::Implementation::LoadNormals(const std::string &_id, return; } - ignition::math::Matrix4d rotMat = _transform; - rotMat.SetTranslation(ignition::math::Vector3d::Zero); + gz::math::Matrix4d rotMat = _transform; + rotMat.SetTranslation(gz::math::Vector3d::Zero); tinyxml2::XMLElement *normalsXml = this->ElementId("source", _id); if (!normalsXml) { - ignerr << "Unable to find normals[" << _id << "] in collada file\n"; + gzerr << "Unable to find normals[" << _id << "] in collada file\n"; return; } @@ -1547,26 +1547,26 @@ void ColladaLoader::Implementation::LoadNormals(const std::string &_id, if (count) { - ignwarn << "Normal source missing float_array element, or count is " + gzwarn << "Normal source missing float_array element, or count is " << "invalid.\n"; } else { - ignlog << "Normal source has a float_array with a count of zero. " + gzlog << "Normal source has a float_array with a count of zero. " << "This is likely not desired\n"; } return; } - std::unordered_map<ignition::math::Vector3d, + std::unordered_map<gz::math::Vector3d, unsigned int, Vector3Hash> unique; std::string valueStr = floatArrayXml->GetText(); std::istringstream iss(valueStr); do { - ignition::math::Vector3d vec; + gz::math::Vector3d vec; iss >> vec.X() >> vec.Y() >> vec.Z(); if (iss) { @@ -1588,7 +1588,7 @@ void ColladaLoader::Implementation::LoadNormals(const std::string &_id, ///////////////////////////////////////////////// void ColladaLoader::Implementation::LoadTexCoords(const std::string &_id, - std::vector<ignition::math::Vector2d> &_values, + std::vector<gz::math::Vector2d> &_values, std::map<unsigned int, unsigned int> &_duplicates) { if (this->texcoordIds.find(_id) != this->texcoordIds.end()) @@ -1606,7 +1606,7 @@ void ColladaLoader::Implementation::LoadTexCoords(const std::string &_id, tinyxml2::XMLElement *xml = this->ElementId("source", _id); if (!xml) { - ignerr << "Unable to find tex coords[" << _id << "] in collada file\n"; + gzerr << "Unable to find tex coords[" << _id << "] in collada file\n"; return; } @@ -1630,12 +1630,12 @@ void ColladaLoader::Implementation::LoadTexCoords(const std::string &_id, if (count) { - ignerr << "Normal source missing float_array element, or count is " + gzerr << "Normal source missing float_array element, or count is " << "invalid.\n"; } else { - ignlog << "Normal source has a float_array with a count of zero. " + gzlog << "Normal source has a float_array with a count of zero. " << "This is likely not desired\n"; } @@ -1646,7 +1646,7 @@ void ColladaLoader::Implementation::LoadTexCoords(const std::string &_id, totCount = std::stoi(floatArrayXml->Attribute("count")); else { - ignerr << "<float_array> has no count attribute in texture coordinate " + gzerr << "<float_array> has no count attribute in texture coordinate " << "element with id[" << _id << "]\n"; return; } @@ -1656,7 +1656,7 @@ void ColladaLoader::Implementation::LoadTexCoords(const std::string &_id, xml = xml->FirstChildElement("technique_common"); if (!xml) { - ignerr << "Unable to find technique_common element for texture " + gzerr << "Unable to find technique_common element for texture " << "coordinates with id[" << _id << "]\n"; return; } @@ -1665,7 +1665,7 @@ void ColladaLoader::Implementation::LoadTexCoords(const std::string &_id, xml = xml->FirstChildElement("accessor"); if (!xml) { - ignerr << "Unable to find <accessor> as a child of <technique_common> " + gzerr << "Unable to find <accessor> as a child of <technique_common> " << "for texture coordinates with id[" << _id << "]\n"; return; } @@ -1679,7 +1679,7 @@ void ColladaLoader::Implementation::LoadTexCoords(const std::string &_id, } else { - ignerr << "<accessor> has no stride attribute in texture coordinate " + gzerr << "<accessor> has no stride attribute in texture coordinate " << "element with id[" << _id << "]\n"; return; } @@ -1689,7 +1689,7 @@ void ColladaLoader::Implementation::LoadTexCoords(const std::string &_id, texCount = std::stoi(xml->Attribute("count")); else { - ignerr << "<accessor> has no count attribute in texture coordinate element " + gzerr << "<accessor> has no count attribute in texture coordinate element " << "with id[" << _id << "]\n"; return; } @@ -1699,7 +1699,7 @@ void ColladaLoader::Implementation::LoadTexCoords(const std::string &_id, // by the number of texture coordinates. if (texCount * stride != totCount) { - ignerr << "Error reading texture coordinates. Coordinate counts in element " + gzerr << "Error reading texture coordinates. Coordinate counts in element " "with id[" << _id << "] do not add up correctly\n"; return; } @@ -1709,7 +1709,7 @@ void ColladaLoader::Implementation::LoadTexCoords(const std::string &_id, if (totCount == 0) return; - std::unordered_map<ignition::math::Vector2d, + std::unordered_map<gz::math::Vector2d, unsigned int, Vector2dHash> unique; // Read the raw texture values, and split them on spaces. @@ -1720,7 +1720,7 @@ void ColladaLoader::Implementation::LoadTexCoords(const std::string &_id, for (int i = 0; i < totCount; i += stride) { // We only handle 2D texture coordinates right now. - ignition::math::Vector2d vec(std::stod(values[i]), + gz::math::Vector2d vec(std::stod(values[i]), 1.0 - std::stod(values[i+1])); _values.push_back(vec); @@ -1848,11 +1848,11 @@ MaterialPtr ColladaLoader::Implementation::LoadMaterial( tinyxml2::XMLElement *glslXml = effectXml->FirstChildElement("profile_GLSL"); if (glslXml) - ignerr << "profile_GLSL unsupported\n"; + gzerr << "profile_GLSL unsupported\n"; tinyxml2::XMLElement *cgXml = effectXml->FirstChildElement("profile_CG"); if (cgXml) - ignerr << "profile_CG unsupported\n"; + gzerr << "profile_CG unsupported\n"; this->materialIds[_name] = mat; @@ -1886,17 +1886,17 @@ void ColladaLoader::Implementation::LoadColorOrTexture( { if (_type == "ambient") { - ignwarn << "ambient texture not supported" << std::endl; + gzwarn << "ambient texture not supported" << std::endl; return; } if (_type == "emission") { - ignwarn << "emission texture not supported" << std::endl; + gzwarn << "emission texture not supported" << std::endl; return; } if (_type == "specular") { - ignwarn << "specular texture not supported" << std::endl; + gzwarn << "specular texture not supported" << std::endl; return; } @@ -1959,7 +1959,7 @@ void ColladaLoader::Implementation::LoadColorOrTexture( ///////////////////////////////////////////////// void ColladaLoader::Implementation::LoadPolylist( tinyxml2::XMLElement *_polylistXml, - const ignition::math::Matrix4d &_transform, + const gz::math::Matrix4d &_transform, Mesh *_mesh) { // This function parses polylist types in collada into @@ -1989,7 +1989,7 @@ void ColladaLoader::Implementation::LoadPolylist( matIndex = _mesh->AddMaterial(mat); if (matIndex < 0) - ignwarn << "Unable to add material[" << matStr << "]\n"; + gzwarn << "Unable to add material[" << matStr << "]\n"; else subMesh->SetMaterialIndex(matIndex); } @@ -1997,9 +1997,9 @@ void ColladaLoader::Implementation::LoadPolylist( tinyxml2::XMLElement *polylistInputXml = _polylistXml->FirstChildElement("input"); - std::vector<ignition::math::Vector3d> verts; - std::vector<ignition::math::Vector3d> norms; - std::map<unsigned int, std::vector<ignition::math::Vector2d>> texcoords; + std::vector<gz::math::Vector3d> verts; + std::vector<gz::math::Vector3d> norms; + std::map<unsigned int, std::vector<gz::math::Vector2d>> texcoords; std::vector<std::pair<unsigned int, unsigned int>> texcoordsOffsetToSet; const unsigned int VERTEX = 0; @@ -2013,7 +2013,7 @@ void ColladaLoader::Implementation::LoadPolylist( std::map<unsigned int, unsigned int> normalDupMap; std::map<unsigned int, unsigned int> positionDupMap; - ignition::math::Matrix4d bindShapeMat(ignition::math::Matrix4d::Identity); + gz::math::Matrix4d bindShapeMat(gz::math::Matrix4d::Identity); if (_mesh->HasSkeleton()) bindShapeMat = _mesh->MeshSkeleton()->BindShapeTransform(); @@ -2033,29 +2033,29 @@ void ColladaLoader::Implementation::LoadPolylist( positionDupMap, normalDupMap); if (norms.size() > count) combinedVertNorms = true; - inputs[VERTEX].insert(ignition::math::parseInt(offset)); + inputs[VERTEX].insert(gz::math::parseInt(offset)); } else if (semantic == "NORMAL") { this->LoadNormals(source, _transform, norms, normalDupMap); combinedVertNorms = false; - inputs[NORMAL].insert(ignition::math::parseInt(offset)); + inputs[NORMAL].insert(gz::math::parseInt(offset)); } else if (semantic == "TEXCOORD") { - int offsetInt = ignition::math::parseInt(offset); + int offsetInt = gz::math::parseInt(offset); unsigned int set = 0u; auto setStr = polylistInputXml->Attribute("set"); if (setStr) - set = ignition::math::parseInt(setStr); + set = gz::math::parseInt(setStr); this->LoadTexCoords(source, texcoords[set], texDupMap[set]); inputs[TEXCOORD].insert(offsetInt); texcoordsOffsetToSet.push_back(std::make_pair(offsetInt, set)); } else { - inputs[otherSemantics++].insert(ignition::math::parseInt(offset)); - ignwarn << "Polylist input semantic: '" << semantic << "' is currently" + inputs[otherSemantics++].insert(gz::math::parseInt(offset)); + gzwarn << "Polylist input semantic: '" << semantic << "' is currently" << " not supported" << std::endl; } @@ -2113,7 +2113,7 @@ void ColladaLoader::Implementation::LoadPolylist( for (unsigned int i = 0; i < inputSize; ++i) { - values[i] = ignition::math::parseInt(strs_iter[triangle_index+i]); + values[i] = gz::math::parseInt(strs_iter[triangle_index+i]); } unsigned int daeVertIndex = 0; @@ -2297,7 +2297,7 @@ void ColladaLoader::Implementation::LoadPolylist( ///////////////////////////////////////////////// void ColladaLoader::Implementation::LoadTriangles( tinyxml2::XMLElement *_trianglesXml, - const ignition::math::Matrix4d &_transform, Mesh *_mesh) + const gz::math::Matrix4d &_transform, Mesh *_mesh) { std::unique_ptr<SubMesh> subMesh(new SubMesh); subMesh->SetName(this->currentNodeName); @@ -2321,7 +2321,7 @@ void ColladaLoader::Implementation::LoadTriangles( matIndex = _mesh->AddMaterial(mat); if (matIndex < 0) - ignwarn << "Unable to add material[" << matStr << "]\n"; + gzwarn << "Unable to add material[" << matStr << "]\n"; else subMesh->SetMaterialIndex(matIndex); } @@ -2329,9 +2329,9 @@ void ColladaLoader::Implementation::LoadTriangles( tinyxml2::XMLElement *trianglesInputXml = _trianglesXml->FirstChildElement("input"); - std::vector<ignition::math::Vector3d> verts; - std::vector<ignition::math::Vector3d> norms; - std::map<unsigned int, std::vector<ignition::math::Vector2d>> texcoords; + std::vector<gz::math::Vector3d> verts; + std::vector<gz::math::Vector3d> norms; + std::map<unsigned int, std::vector<gz::math::Vector2d>> texcoords; std::vector<std::pair<unsigned int, unsigned int>> texcoordsOffsetToSet; const unsigned int VERTEX = 0; @@ -2365,24 +2365,24 @@ void ColladaLoader::Implementation::LoadTriangles( positionDupMap, normalDupMap); if (norms.size() > count) combinedVertNorms = true; - inputs[VERTEX].insert(ignition::math::parseInt(offset)); + inputs[VERTEX].insert(gz::math::parseInt(offset)); hasVertices = true; } else if (semantic == "NORMAL") { this->LoadNormals(source, _transform, norms, normalDupMap); combinedVertNorms = false; - inputs[NORMAL].insert(ignition::math::parseInt(offset)); + inputs[NORMAL].insert(gz::math::parseInt(offset)); if (norms.size() > 0) hasNormals = true; } else if (semantic == "TEXCOORD") { - int offsetInt = ignition::math::parseInt(offset); + int offsetInt = gz::math::parseInt(offset); unsigned int set = 0u; auto setStr = trianglesInputXml->Attribute("set"); if (setStr) - set = ignition::math::parseInt(setStr); + set = gz::math::parseInt(setStr); this->LoadTexCoords(source, texcoords[set], texDupMap[set]); inputs[TEXCOORD].insert(offsetInt); texcoordsOffsetToSet.push_back(std::make_pair(offsetInt, set)); @@ -2390,8 +2390,8 @@ void ColladaLoader::Implementation::LoadTriangles( } else { - inputs[otherSemantics++].insert(ignition::math::parseInt(offset)); - ignwarn << "Triangle input semantic: '" << semantic << "' is currently" + inputs[otherSemantics++].insert(gz::math::parseInt(offset)); + gzwarn << "Triangle input semantic: '" << semantic << "' is currently" << " not supported" << std::endl; } trianglesInputXml = trianglesInputXml->NextSiblingElement("input"); @@ -2420,12 +2420,12 @@ void ColladaLoader::Implementation::LoadTriangles( // should not output an error message if (count) { - ignerr << "Collada file[" << this->filename + gzerr << "Collada file[" << this->filename << "] is invalid. Loading what we can...\n"; } else { - ignlog << "Triangle input has a count of zero. " + gzlog << "Triangle input has a count of zero. " << "This is likely not desired\n"; } @@ -2449,7 +2449,7 @@ void ColladaLoader::Implementation::LoadTriangles( for (unsigned int j = 0; j < strs.size(); j += offsetSize) { for (unsigned int i = 0; i < offsetSize; ++i) - values.at(i) = ignition::math::parseInt(strs[j+i]); + values.at(i) = gz::math::parseInt(strs[j+i]); unsigned int daeVertIndex = 0; bool addIndex = !hasVertices; @@ -2560,7 +2560,7 @@ void ColladaLoader::Implementation::LoadTriangles( _mesh->MeshSkeleton()->NodeByName(node_weight.first); if (nullptr == node) { - ignerr << "Failed to find skeleton node named [" + gzerr << "Failed to find skeleton node named [" << node_weight.first << "]" << std::endl; continue; } @@ -2617,7 +2617,7 @@ void ColladaLoader::Implementation::LoadTriangles( ///////////////////////////////////////////////// void ColladaLoader::Implementation::LoadLines(tinyxml2::XMLElement *_xml, - const ignition::math::Matrix4d &_transform, Mesh *_mesh) + const gz::math::Matrix4d &_transform, Mesh *_mesh) { std::unique_ptr<SubMesh> subMesh(new SubMesh); subMesh->SetName(this->currentNodeName); @@ -2627,8 +2627,8 @@ void ColladaLoader::Implementation::LoadLines(tinyxml2::XMLElement *_xml, // std::string semantic = inputXml->Attribute("semantic"); std::string source = inputXml->Attribute("source"); - std::vector<ignition::math::Vector3d> verts; - std::vector<ignition::math::Vector3d> norms; + std::vector<gz::math::Vector3d> verts; + std::vector<gz::math::Vector3d> norms; this->LoadVertices(source, _transform, verts, norms); tinyxml2::XMLElement *pXml = _xml->FirstChildElement("p"); @@ -2659,7 +2659,7 @@ float ColladaLoader::Implementation::LoadFloat(tinyxml2::XMLElement *_elem) if (_elem->FirstChildElement("float")) { value = - ignition::math::parseFloat(_elem->FirstChildElement("float")->GetText()); + gz::math::parseFloat(_elem->FirstChildElement("float")->GetText()); } return value; @@ -2690,7 +2690,7 @@ void ColladaLoader::Implementation::LoadTransparent(tinyxml2::XMLElement *_elem, const char *colorCStr = _elem->FirstChildElement("color")->GetText(); if (!colorCStr) { - ignerr << "No color string\n"; + gzerr << "No color string\n"; return; } @@ -2777,13 +2777,13 @@ void ColladaLoader::Implementation::MergeSkeleton(SkeletonPtr _skeleton, { if (nullptr == _skeleton) { - ignerr << "Fail to merge null skeleton." << std::endl; + gzerr << "Fail to merge null skeleton." << std::endl; return; } if (nullptr == _mergeNode) { - ignerr << "Fail to merge null skeleton node." << std::endl; + gzerr << "Fail to merge null skeleton node." << std::endl; return; } @@ -2792,7 +2792,7 @@ void ColladaLoader::Implementation::MergeSkeleton(SkeletonPtr _skeleton, if (nullptr == _skeleton->RootNode()) { - ignerr << "Skeleton missing root node." << std::endl; + gzerr << "Skeleton missing root node." << std::endl; return; } diff --git a/graphics/src/ColladaLoader_TEST.cc b/graphics/src/ColladaLoader_TEST.cc index ee8eee0bb..63e0fe75d 100644 --- a/graphics/src/ColladaLoader_TEST.cc +++ b/graphics/src/ColladaLoader_TEST.cc @@ -16,17 +16,17 @@ */ #include <gtest/gtest.h> -#include "ignition/common/Mesh.hh" -#include "ignition/common/SubMesh.hh" -#include "ignition/common/Material.hh" -#include "ignition/common/ColladaLoader.hh" -#include "ignition/common/Skeleton.hh" -#include "ignition/common/SkeletonAnimation.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/SubMesh.hh" +#include "gz/common/Material.hh" +#include "gz/common/ColladaLoader.hh" +#include "gz/common/Skeleton.hh" +#include "gz/common/SkeletonAnimation.hh" -#include "ignition/common/testing/AutoLogFixture.hh" -#include "ignition/common/testing/TestPaths.hh" +#include "gz/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/TestPaths.hh" -using namespace ignition; +using namespace gz; class ColladaLoader : public common::testing::AutoLogFixture { }; ///////////////////////////////////////////////// @@ -37,8 +37,8 @@ TEST_F(ColladaLoader, LoadBox) common::testing::TestFile("data", "box.dae")); EXPECT_STREQ("unknown", mesh->Name().c_str()); - EXPECT_EQ(ignition::math::Vector3d(1, 1, 1), mesh->Max()); - EXPECT_EQ(ignition::math::Vector3d(-1, -1, -1), mesh->Min()); + EXPECT_EQ(gz::math::Vector3d(1, 1, 1), mesh->Max()); + EXPECT_EQ(gz::math::Vector3d(-1, -1, -1), mesh->Min()); // 36 vertices, 24 unique, 12 shared. EXPECT_EQ(24u, mesh->VertexCount()); EXPECT_EQ(24u, mesh->NormalCount()); @@ -87,8 +87,8 @@ TEST_F(ColladaLoader, ShareVertices) mesh->SubMeshByIndex(i).lock(); for (unsigned int j = 0; j < subMesh->VertexCount(); ++j) { - ignition::math::Vector3d v = subMesh->Vertex(j); - ignition::math::Vector3d n = subMesh->Normal(j); + gz::math::Vector3d v = subMesh->Vertex(j); + gz::math::Vector3d n = subMesh->Normal(j); // Verify there is no other vertex with the same position AND normal for (unsigned int k = j+1; k < subMesh->VertexCount(); ++k) diff --git a/graphics/src/GTSMeshUtils.cc b/graphics/src/GTSMeshUtils.cc index bbbdfcd34..fbfdc72f9 100644 --- a/graphics/src/GTSMeshUtils.cc +++ b/graphics/src/GTSMeshUtils.cc @@ -18,12 +18,12 @@ #include <vector> -#include <ignition/common/Mesh.hh> -#include <ignition/common/SubMesh.hh> -#include <ignition/common/Console.hh> -#include <ignition/common/GTSMeshUtils.hh> +#include <gz/common/Mesh.hh> +#include <gz/common/SubMesh.hh> +#include <gz/common/Console.hh> +#include <gz/common/GTSMeshUtils.hh> -using namespace ignition; +using namespace gz; using namespace common; ////////////////////////////////////////////////// @@ -131,8 +131,8 @@ int TriangleIsHole(GtsTriangle *_t, GtsFifo *_edgeList) ////////////////////////////////////////////////// GtsSurface *GTSMeshUtils::DelaunayTriangulation( - const std::vector<ignition::math::Vector2d> &_vertices, - const std::vector<ignition::math::Vector2i> &_edges) + const std::vector<gz::math::Vector2d> &_vertices, + const std::vector<gz::math::Vector2i> &_edges) { GSList *l, *verticesList = nullptr; @@ -208,13 +208,13 @@ GtsSurface *GTSMeshUtils::DelaunayTriangulation( ////////////////////////////////////////////////// bool GTSMeshUtils::DelaunayTriangulation( - const std::vector<ignition::math::Vector2d> &_vertices, - const std::vector<ignition::math::Vector2i> &_edges, + const std::vector<gz::math::Vector2d> &_vertices, + const std::vector<gz::math::Vector2i> &_edges, SubMesh *_subMesh) { if (_edges.empty() || _vertices.empty()) { - ignerr << "Unable to create an extruded outline mesh with " + gzerr << "Unable to create an extruded outline mesh with " << "no paths\n"; return false; } diff --git a/graphics/src/GTSMeshUtils_TEST.cc b/graphics/src/GTSMeshUtils_TEST.cc index 31c9114d2..ed32d8cd4 100644 --- a/graphics/src/GTSMeshUtils_TEST.cc +++ b/graphics/src/GTSMeshUtils_TEST.cc @@ -18,13 +18,13 @@ #include <gtest/gtest.h> #include <memory> -#include "ignition/common/GTSMeshUtils.hh" -#include "ignition/common/Mesh.hh" -#include "ignition/common/SubMesh.hh" +#include "gz/common/GTSMeshUtils.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/SubMesh.hh" -#include "ignition/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/AutoLogFixture.hh" -using namespace ignition; +using namespace gz; class GTSMeshUtils : public common::testing::AutoLogFixture { }; @@ -40,28 +40,28 @@ TEST_F(GTSMeshUtils, DelaunayTriangulation) // a smaller square inside a bigger square. // The smaller square should be treated as a hole inside the bigger square. - std::vector<ignition::math::Vector2d> vertices; + std::vector<gz::math::Vector2d> vertices; // outside square - vertices.push_back(ignition::math::Vector2d(0, 0)); - vertices.push_back(ignition::math::Vector2d(1, 0)); - vertices.push_back(ignition::math::Vector2d(1, 1)); - vertices.push_back(ignition::math::Vector2d(0, 1)); + vertices.push_back(gz::math::Vector2d(0, 0)); + vertices.push_back(gz::math::Vector2d(1, 0)); + vertices.push_back(gz::math::Vector2d(1, 1)); + vertices.push_back(gz::math::Vector2d(0, 1)); // inside square - vertices.push_back(ignition::math::Vector2d(0.25, 0.25)); - vertices.push_back(ignition::math::Vector2d(0.25, 0.75)); - vertices.push_back(ignition::math::Vector2d(0.75, 0.75)); - vertices.push_back(ignition::math::Vector2d(0.75, 0.25)); + vertices.push_back(gz::math::Vector2d(0.25, 0.25)); + vertices.push_back(gz::math::Vector2d(0.25, 0.75)); + vertices.push_back(gz::math::Vector2d(0.75, 0.75)); + vertices.push_back(gz::math::Vector2d(0.75, 0.25)); - std::vector<ignition::math::Vector2i> edges; - edges.push_back(ignition::math::Vector2i(0, 1)); - edges.push_back(ignition::math::Vector2i(1, 2)); - edges.push_back(ignition::math::Vector2i(2, 3)); - edges.push_back(ignition::math::Vector2i(3, 0)); + std::vector<gz::math::Vector2i> edges; + edges.push_back(gz::math::Vector2i(0, 1)); + edges.push_back(gz::math::Vector2i(1, 2)); + edges.push_back(gz::math::Vector2i(2, 3)); + edges.push_back(gz::math::Vector2i(3, 0)); - edges.push_back(ignition::math::Vector2i(4, 5)); - edges.push_back(ignition::math::Vector2i(5, 6)); - edges.push_back(ignition::math::Vector2i(6, 7)); - edges.push_back(ignition::math::Vector2i(7, 4)); + edges.push_back(gz::math::Vector2i(4, 5)); + edges.push_back(gz::math::Vector2i(5, 6)); + edges.push_back(gz::math::Vector2i(6, 7)); + edges.push_back(gz::math::Vector2i(7, 4)); auto mesh = std::make_unique<common::Mesh>(); mesh->SetName("extruded"); diff --git a/graphics/src/Image.cc b/graphics/src/Image.cc index 87547f489..256bc565f 100644 --- a/graphics/src/Image.cc +++ b/graphics/src/Image.cc @@ -22,14 +22,14 @@ #include <cstring> #include <string> -#include <ignition/common/Console.hh> -#include <ignition/common/Util.hh> -#include <ignition/common/Image.hh> +#include <gz/common/Console.hh> +#include <gz/common/Util.hh> +#include <gz/common/Image.hh> -using namespace ignition; +using namespace gz; using namespace common; -namespace ignition +namespace gz { namespace common { @@ -70,7 +70,7 @@ static int count = 0; ////////////////////////////////////////////////// Image::Image(const std::string &_filename) -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { if (count == 0) FreeImage_Initialise(); @@ -80,11 +80,11 @@ Image::Image(const std::string &_filename) this->dataPtr->bitmap = NULL; if (!_filename.empty()) { - std::string filename = ignition::common::findFile(_filename); + std::string filename = gz::common::findFile(_filename); if (!filename.empty()) this->Load(filename); else - ignerr << "Unable to find image[" << _filename << "]\n"; + gzerr << "Unable to find image[" << _filename << "]\n"; } } @@ -137,14 +137,14 @@ int Image::Load(const std::string &_filename) } else { - ignerr << "Unknown image format[" << this->dataPtr->fullName << "]\n"; + gzerr << "Unknown image format[" << this->dataPtr->fullName << "]\n"; return -1; } return 0; } - ignerr << "Unable to open image file[" << this->dataPtr->fullName + gzerr << "Unable to open image file[" << this->dataPtr->fullName << "], check your IGNITION_RESOURCE_PATH settings.\n"; return -1; } @@ -226,7 +226,7 @@ void Image::SetFromData(const unsigned char *_data, } else { - ignerr << "Unable to handle format[" << _format << "]\n"; + gzerr << "Unable to handle format[" << _format << "]\n"; return; } @@ -374,7 +374,7 @@ math::Color Image::Pixel(unsigned int _x, unsigned int _y) const if (FreeImage_GetPixelColor(this->dataPtr->bitmap, _x, _y, &firgb) == FALSE) { - ignerr << "Image: Coordinates out of range[" + gzerr << "Image: Coordinates out of range[" << _x << " " << _y << "] \n"; return clr; } @@ -386,7 +386,7 @@ math::Color Image::Pixel(unsigned int _x, unsigned int _y) const if (FreeImage_GetPixelIndex( this->dataPtr->bitmap, _x, _y, &byteValue) == FALSE) { - ignerr << "Image: Coordinates out of range [" + gzerr << "Image: Coordinates out of range [" << _x << " " << _y << "] \n"; return clr; } @@ -450,7 +450,7 @@ math::Color Image::MaxColor() const if (FALSE == FreeImage_GetPixelColor(this->dataPtr->bitmap, x, y, &firgb)) { - ignerr << "Image: Coordinates out of range[" + gzerr << "Image: Coordinates out of range[" << x << " " << y << "] \n"; continue; } @@ -475,7 +475,7 @@ math::Color Image::MaxColor() const if (FreeImage_GetPixelIndex( this->dataPtr->bitmap, x, y, &byteValue) == FALSE) { - ignerr << "Image: Coordinates out of range [" + gzerr << "Image: Coordinates out of range [" << x << " " << y << "] \n"; continue; } diff --git a/graphics/src/Image_TEST.cc b/graphics/src/Image_TEST.cc index 8efe14b8d..478e22741 100644 --- a/graphics/src/Image_TEST.cc +++ b/graphics/src/Image_TEST.cc @@ -17,12 +17,12 @@ #include <gtest/gtest.h> -#include <ignition/common/Image.hh> +#include <gz/common/Image.hh> -#include "ignition/common/testing/AutoLogFixture.hh" -#include "ignition/common/testing/TestPaths.hh" +#include "gz/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/TestPaths.hh" -using namespace ignition; +using namespace gz; class ImageTest : public common::testing::AutoLogFixture { }; @@ -280,7 +280,7 @@ TEST_F(ImageTest, SetFromData) ///////////////////////////////////////////////// TEST_F(ImageTest, ConvertPixelFormat) { - using Image = ignition::common::Image; + using Image = gz::common::Image; EXPECT_EQ(Image::PixelFormatType::UNKNOWN_PIXEL_FORMAT, Image::ConvertPixelFormat("fake")); EXPECT_EQ(Image::PixelFormatType::UNKNOWN_PIXEL_FORMAT, @@ -553,7 +553,7 @@ void ImagePerformanceTest::MaxColor(const std::string &_filePath, EXPECT_EQ(0, img.Load(fileName)); EXPECT_EQ(_width, img.Width()); EXPECT_EQ(_height, img.Height()); - EXPECT_EQ(ignition::math::Color(0., 0., 0., 0), img.MaxColor()); + EXPECT_EQ(gz::math::Color(0., 0., 0., 0), img.MaxColor()); EXPECT_TRUE(img.Valid()); } diff --git a/graphics/src/KeyFrame.cc b/graphics/src/KeyFrame.cc index 1c3d87b3a..4fd628703 100644 --- a/graphics/src/KeyFrame.cc +++ b/graphics/src/KeyFrame.cc @@ -14,9 +14,9 @@ * limitations under the License. * */ -#include <ignition/common/KeyFrame.hh> +#include <gz/common/KeyFrame.hh> -namespace ignition { +namespace gz { namespace common { ///////////////////////////////////////////////// @@ -45,7 +45,7 @@ class NumericKeyFrame::Implementation ///////////////////////////////////////////////// KeyFrame::KeyFrame(const double _time) -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->time = _time; } @@ -65,7 +65,7 @@ double KeyFrame::Time() const ///////////////////////////////////////////////// PoseKeyFrame::PoseKeyFrame(const double _time) : KeyFrame(_time), - dataPtr(ignition::utils::MakeImpl<Implementation>()) + dataPtr(gz::utils::MakeImpl<Implementation>()) { } @@ -101,7 +101,7 @@ const math::Quaterniond &PoseKeyFrame::Rotation() const ///////////////////////////////////////////////// NumericKeyFrame::NumericKeyFrame(const double _time) : KeyFrame(_time), - dataPtr(ignition::utils::MakeImpl<Implementation>()) + dataPtr(gz::utils::MakeImpl<Implementation>()) { } @@ -121,5 +121,5 @@ const double &NumericKeyFrame::Value() const { return this->dataPtr->value; } -} // namespace ignition +} // namespace gz } // namespace common diff --git a/graphics/src/Material.cc b/graphics/src/Material.cc index 8c2f3a507..8df358fe9 100644 --- a/graphics/src/Material.cc +++ b/graphics/src/Material.cc @@ -15,12 +15,12 @@ * */ #include <algorithm> -#include <ignition/math/Color.hh> +#include <gz/math/Color.hh> -#include "ignition/common/Material.hh" -#include "ignition/common/Console.hh" +#include "gz/common/Material.hh" +#include "gz/common/Console.hh" -using namespace ignition; +using namespace gz; using namespace common; IGN_ENUM(shadeModeIface, Material::ShadeMode, @@ -32,7 +32,7 @@ IGN_ENUM(blendModeIface, Material::BlendMode, "ADD", "MODULATE", "REPLACE") /// \brief Private data for Material -class ignition::common::Material::Implementation +class gz::common::Material::Implementation { /// \brief the name of the material public: std::string name; @@ -102,7 +102,7 @@ unsigned int Material::Implementation::counter = 0; ////////////////////////////////////////////////// Material::Material() -: dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) +: dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { this->dataPtr->name = "ignition_material_" + std::to_string(this->dataPtr->counter++); @@ -116,7 +116,7 @@ Material::Material() ////////////////////////////////////////////////// Material::Material(const math::Color &_clr) -: dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) +: dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { this->dataPtr->name = "ignition_material_" + std::to_string(this->dataPtr->counter++); @@ -161,7 +161,7 @@ void Material::SetTextureImage(const std::string &_tex, "materials", "textures", _tex); if (!exists(this->dataPtr->texImage)) { - ignerr << "Unable to find texture [" << _tex << "] as a locally" + gzerr << "Unable to find texture [" << _tex << "] as a locally" " cached texture or in path ["<< _resourcePath << "]\n"; } } diff --git a/graphics/src/Material_TEST.cc b/graphics/src/Material_TEST.cc index 3b9df9a63..04d60447f 100644 --- a/graphics/src/Material_TEST.cc +++ b/graphics/src/Material_TEST.cc @@ -16,13 +16,13 @@ #include <gtest/gtest.h> -#include "ignition/common/Material.hh" -#include "ignition/common/Pbr.hh" +#include "gz/common/Material.hh" +#include "gz/common/Pbr.hh" -#include "ignition/common/testing/AutoLogFixture.hh" -#include "ignition/common/testing/TestPaths.hh" +#include "gz/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/TestPaths.hh" -using namespace ignition; +using namespace gz; class MaterialTest : public common::testing::AutoLogFixture { }; diff --git a/graphics/src/Mesh.cc b/graphics/src/Mesh.cc index e8b9708cc..003f25454 100644 --- a/graphics/src/Mesh.cc +++ b/graphics/src/Mesh.cc @@ -18,19 +18,19 @@ #include <string> #include <algorithm> -#include "ignition/math/Helpers.hh" +#include "gz/math/Helpers.hh" -#include "ignition/common/Console.hh" -#include "ignition/common/Material.hh" -#include "ignition/common/Skeleton.hh" -#include "ignition/common/SubMesh.hh" -#include "ignition/common/Mesh.hh" +#include "gz/common/Console.hh" +#include "gz/common/Material.hh" +#include "gz/common/Skeleton.hh" +#include "gz/common/SubMesh.hh" +#include "gz/common/Mesh.hh" -using namespace ignition; +using namespace gz; using namespace common; /// \brief Private data for Mesh -class ignition::common::Mesh::Implementation +class gz::common::Mesh::Implementation { /// \brief The name of the mesh public: std::string name; @@ -50,7 +50,7 @@ class ignition::common::Mesh::Implementation ////////////////////////////////////////////////// Mesh::Mesh() -: dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) +: dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { this->dataPtr->name = "unknown"; this->dataPtr->skeleton = NULL; @@ -86,20 +86,20 @@ std::string Mesh::Name() const } ////////////////////////////////////////////////// -ignition::math::Vector3d Mesh::Max() const +gz::math::Vector3d Mesh::Max() const { if (this->dataPtr->submeshes.empty()) - return ignition::math::Vector3d::Zero; + return gz::math::Vector3d::Zero; - ignition::math::Vector3d max; + gz::math::Vector3d max; - max.X(-ignition::math::MAX_F); - max.Y(-ignition::math::MAX_F); - max.Z(-ignition::math::MAX_F); + max.X(-gz::math::MAX_F); + max.Y(-gz::math::MAX_F); + max.Z(-gz::math::MAX_F); for (const auto &submesh : this->dataPtr->submeshes) { - ignition::math::Vector3d smax = submesh->Max(); + gz::math::Vector3d smax = submesh->Max(); max.X(std::max(max.X(), smax.X())); max.Y(std::max(max.Y(), smax.Y())); max.Z(std::max(max.Z(), smax.Z())); @@ -109,20 +109,20 @@ ignition::math::Vector3d Mesh::Max() const } ////////////////////////////////////////////////// -ignition::math::Vector3d Mesh::Min() const +gz::math::Vector3d Mesh::Min() const { if (this->dataPtr->submeshes.empty()) - return ignition::math::Vector3d::Zero; + return gz::math::Vector3d::Zero; - ignition::math::Vector3d min; + gz::math::Vector3d min; - min.X(ignition::math::MAX_F); - min.Y(ignition::math::MAX_F); - min.Z(ignition::math::MAX_F); + min.X(gz::math::MAX_F); + min.Y(gz::math::MAX_F); + min.Z(gz::math::MAX_F); for (const auto &submesh : this->dataPtr->submeshes) { - ignition::math::Vector3d smin = submesh->Min(); + gz::math::Vector3d smin = submesh->Min(); min.X(std::min(min.X(), smin.X())); min.Y(std::min(min.Y(), smin.Y())); min.Z(std::min(min.Z(), smin.Z())); @@ -203,7 +203,7 @@ std::weak_ptr<SubMesh> Mesh::SubMeshByIndex(unsigned int _index) const if (_index < this->dataPtr->submeshes.size()) return this->dataPtr->submeshes[_index]; - ignerr << "Invalid index: " << _index << " >= " << + gzerr << "Invalid index: " << _index << " >= " << this->dataPtr->submeshes.size() << std::endl; return std::shared_ptr<SubMesh>(nullptr); @@ -339,30 +339,30 @@ bool Mesh::HasSkeleton() const } ////////////////////////////////////////////////// -void Mesh::Scale(const ignition::math::Vector3d &_factor) +void Mesh::Scale(const gz::math::Vector3d &_factor) { for (auto &submesh : this->dataPtr->submeshes) submesh->Scale(_factor); } ////////////////////////////////////////////////// -void Mesh::SetScale(const ignition::math::Vector3d &_factor) +void Mesh::SetScale(const gz::math::Vector3d &_factor) { for (auto &submesh : this->dataPtr->submeshes) submesh->Scale(_factor); } ////////////////////////////////////////////////// -void Mesh::GenSphericalTexCoord(const ignition::math::Vector3d &_center) +void Mesh::GenSphericalTexCoord(const gz::math::Vector3d &_center) { for (auto &submesh : this->dataPtr->submeshes) submesh->GenSphericalTexCoord(_center); } ////////////////////////////////////////////////// -void Mesh::Center(const ignition::math::Vector3d &_center) +void Mesh::Center(const gz::math::Vector3d &_center) { - ignition::math::Vector3d min, max, half; + gz::math::Vector3d min, max, half; min = this->Min(); max = this->Max(); half = (max - min) * 0.5; @@ -371,16 +371,16 @@ void Mesh::Center(const ignition::math::Vector3d &_center) } ////////////////////////////////////////////////// -void Mesh::Translate(const ignition::math::Vector3d &_vec) +void Mesh::Translate(const gz::math::Vector3d &_vec) { for (auto &submesh : this->dataPtr->submeshes) submesh->Translate(_vec); } ////////////////////////////////////////////////// -void Mesh::AABB(ignition::math::Vector3d &_center, - ignition::math::Vector3d &_minXYZ, - ignition::math::Vector3d &_maxXYZ) const +void Mesh::AABB(gz::math::Vector3d &_center, + gz::math::Vector3d &_minXYZ, + gz::math::Vector3d &_maxXYZ) const { // find aabb center _minXYZ.X(1e15); @@ -395,8 +395,8 @@ void Mesh::AABB(ignition::math::Vector3d &_center, for (auto const &submesh : this->dataPtr->submeshes) { - ignition::math::Vector3d max = submesh->Max(); - ignition::math::Vector3d min = submesh->Min(); + gz::math::Vector3d max = submesh->Max(); + gz::math::Vector3d min = submesh->Min(); _minXYZ.X(std::min(_minXYZ.X(), min.X())); _maxXYZ.X(std::max(_maxXYZ.X(), max.X())); diff --git a/graphics/src/MeshCSG.cc b/graphics/src/MeshCSG.cc index f1e266dbb..91c6d937d 100644 --- a/graphics/src/MeshCSG.cc +++ b/graphics/src/MeshCSG.cc @@ -19,12 +19,12 @@ #include <string> -#include "ignition/common/Console.hh" -#include "ignition/common/Mesh.hh" -#include "ignition/common/SubMesh.hh" -#include "ignition/common/MeshCSG.hh" +#include "gz/common/Console.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/SubMesh.hh" +#include "gz/common/MeshCSG.hh" -using namespace ignition; +using namespace gz; using namespace common; ////////////////////////////////////////////////// @@ -144,7 +144,7 @@ static int TriangleRevert(GtsTriangle *_t, void *) ////////////////////////////////////////////////// Mesh *MeshCSG::CreateBoolean(const Mesh *_m1, const Mesh *_m2, int _operation, - const ignition::math::Pose3d &_offset) + const gz::math::Pose3d &_offset) { GtsSurface *s1, *s2, *s3; GtsSurfaceInter *si; @@ -163,7 +163,7 @@ Mesh *MeshCSG::CreateBoolean(const Mesh *_m1, const Mesh *_m2, int _operation, this->ConvertMeshToGTS(_m1, s1); - if (_offset != ignition::math::Pose3d::Zero) + if (_offset != gz::math::Pose3d::Zero) { Mesh *m2 = new Mesh(); for (unsigned int i = 0; i < _m2->SubMeshCount(); ++i) @@ -205,13 +205,13 @@ Mesh *MeshCSG::CreateBoolean(const Mesh *_m1, const Mesh *_m2, int _operation, isOpen1, isOpen2); if (!gts_surface_inter_check(si, &closed)) { - ignerr << "si is not an orientable manifold\n"; + gzerr << "si is not an orientable manifold\n"; return nullptr; } if (!closed) { - ignerr << "the intersection of " << _m1->Name() << " and " + gzerr << "the intersection of " << _m1->Name() << " and " << _m2->Name() << " is not a closed curve\n"; return nullptr; } @@ -284,7 +284,7 @@ void MeshCSG::ConvertMeshToGTS(const Mesh *_mesh, GtsSurface *_surface) { if (!_surface) { - ignerr << _mesh->Name() << ": Surface is null\n"; + gzerr << _mesh->Name() << ": Surface is null\n"; // _surface = gts_surface_new(gts_surface_class(), gts_face_class(), // gts_edge_class(), gts_vertex_class()); return; @@ -301,7 +301,7 @@ void MeshCSG::ConvertMeshToGTS(const Mesh *_mesh, GtsSurface *_surface) for (unsigned int j = 0; j < subMesh->VertexCount(); ++j) { - ignition::math::Vector3d vertex = subMesh->Vertex(j); + gz::math::Vector3d vertex = subMesh->Vertex(j); g_ptr_array_add(vertices, gts_vertex_new(gts_vertex_class(), vertex.X(), vertex.Y(), vertex.Z())); } @@ -350,7 +350,7 @@ void MeshCSG::ConvertMeshToGTS(const Mesh *_mesh, GtsSurface *_surface) } else { - ignwarn << _mesh->Name() << ": Ignoring degenerate facet!"; + gzwarn << _mesh->Name() << ": Ignoring degenerate facet!"; } } } diff --git a/graphics/src/MeshExporter.cc b/graphics/src/MeshExporter.cc index 5503b2d74..db5f2cbc3 100644 --- a/graphics/src/MeshExporter.cc +++ b/graphics/src/MeshExporter.cc @@ -14,9 +14,9 @@ * limitations under the License. * */ -#include "ignition/common/MeshExporter.hh" +#include "gz/common/MeshExporter.hh" -using namespace ignition; +using namespace gz; using namespace common; ////////////////////////////////////////////////// diff --git a/graphics/src/MeshManager.cc b/graphics/src/MeshManager.cc index bee5b581d..f32e5139a 100644 --- a/graphics/src/MeshManager.cc +++ b/graphics/src/MeshManager.cc @@ -22,24 +22,24 @@ #include <cctype> #ifndef _WIN32 - #include "ignition/common/GTSMeshUtils.hh" - #include "ignition/common/MeshCSG.hh" + #include "gz/common/GTSMeshUtils.hh" + #include "gz/common/MeshCSG.hh" #endif -#include "ignition/common/Console.hh" -#include "ignition/common/Mesh.hh" -#include "ignition/common/SubMesh.hh" -#include "ignition/common/ColladaLoader.hh" -#include "ignition/common/ColladaExporter.hh" -#include "ignition/common/OBJLoader.hh" -#include "ignition/common/STLLoader.hh" -#include "ignition/common/config.hh" +#include "gz/common/Console.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/SubMesh.hh" +#include "gz/common/ColladaLoader.hh" +#include "gz/common/ColladaExporter.hh" +#include "gz/common/OBJLoader.hh" +#include "gz/common/STLLoader.hh" +#include "gz/common/config.hh" -#include "ignition/common/MeshManager.hh" +#include "gz/common/MeshManager.hh" -using namespace ignition::common; +using namespace gz::common; -class ignition::common::MeshManager::Implementation +class gz::common::MeshManager::Implementation { #ifdef _WIN32 // Disable warning C4251 @@ -73,21 +73,21 @@ class ignition::common::MeshManager::Implementation ////////////////////////////////////////////////// MeshManager::MeshManager() -: dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) +: dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { // Create some basic shapes this->CreatePlane("unit_plane", - ignition::math::Planed( - ignition::math::Vector3d(0, 0, 1), ignition::math::Vector2d(1, 1), 0), - ignition::math::Vector2d(1, 1), - ignition::math::Vector2d(1, 1)); + gz::math::Planed( + gz::math::Vector3d(0, 0, 1), gz::math::Vector2d(1, 1), 0), + gz::math::Vector2d(1, 1), + gz::math::Vector2d(1, 1)); this->CreateSphere("unit_sphere", 0.5f, 32, 32); this->CreateSphere("joint_anchor", 0.01f, 32, 32); - this->CreateBox("body_cg", ignition::math::Vector3d(0.014, 0.014, 0.014), - ignition::math::Vector2d(0.014, 0.014)); - this->CreateBox("unit_box", ignition::math::Vector3d(1, 1, 1), - ignition::math::Vector2d(1, 1)); + this->CreateBox("body_cg", gz::math::Vector3d(0.014, 0.014, 0.014), + gz::math::Vector2d(0.014, 0.014)); + this->CreateBox("unit_box", gz::math::Vector3d(1, 1, 1), + gz::math::Vector2d(1, 1)); this->CreateCylinder("unit_cylinder", 0.5, 1.0, 1, 32); this->CreateCone("unit_cone", 0.5, 1.0, 5, 32); this->CreateCamera("unit_camera", 0.5); @@ -116,7 +116,7 @@ const Mesh *MeshManager::Load(const std::string &_filename) { if (!this->IsValidFilename(_filename)) { - ignerr << "Invalid mesh filename extension[" << _filename << "]\n"; + gzerr << "Invalid mesh filename extension[" << _filename << "]\n"; return nullptr; } @@ -146,7 +146,7 @@ const Mesh *MeshManager::Load(const std::string &_filename) loader = &this->dataPtr->objLoader; else { - ignerr << "Unsupported mesh format for file[" << _filename << "]\n"; + gzerr << "Unsupported mesh format for file[" << _filename << "]\n"; return nullptr; } @@ -161,7 +161,7 @@ const Mesh *MeshManager::Load(const std::string &_filename) this->dataPtr->meshes.insert(std::make_pair(_filename, mesh)); } else - ignerr << "Unable to load mesh[" << fullname << "]\n"; + gzerr << "Unable to load mesh[" << fullname << "]\n"; } else { @@ -169,7 +169,7 @@ const Mesh *MeshManager::Load(const std::string &_filename) } } else - ignerr << "Unable to find file[" << _filename << "]\n"; + gzerr << "Unable to find file[" << _filename << "]\n"; return mesh; } @@ -184,7 +184,7 @@ void MeshManager::Export(const Mesh *_mesh, const std::string &_filename, } else { - ignerr << "Unsupported mesh format for file[" << _filename << "]\n"; + gzerr << "Unsupported mesh format for file[" << _filename << "]\n"; } } @@ -206,8 +206,8 @@ bool MeshManager::IsValidFilename(const std::string &_filename) ////////////////////////////////////////////////// void MeshManager::MeshAABB(const Mesh *_mesh, - ignition::math::Vector3d &_center, - ignition::math::Vector3d &_minXYZ, ignition::math::Vector3d &_maxXYZ) + gz::math::Vector3d &_center, + gz::math::Vector3d &_minXYZ, gz::math::Vector3d &_maxXYZ) { if (this->HasMesh(_mesh->Name())) this->dataPtr->meshes[_mesh->Name()]->AABB(_center, _minXYZ, _maxXYZ); @@ -215,7 +215,7 @@ void MeshManager::MeshAABB(const Mesh *_mesh, ////////////////////////////////////////////////// void MeshManager::GenSphericalTexCoord(const Mesh *_mesh, - const ignition::math::Vector3d &_center) + const gz::math::Vector3d &_center) { if (this->HasMesh(_mesh->Name())) this->dataPtr->meshes[_mesh->Name()]->GenSphericalTexCoord(_center); @@ -292,7 +292,7 @@ void MeshManager::CreateSphere(const std::string &name, float radius, int ring, seg; float deltaSegAngle = (2.0 * IGN_PI / segments); float deltaRingAngle = (IGN_PI / rings); - ignition::math::Vector3d vert, norm; + gz::math::Vector3d vert, norm; unsigned int verticeIndex = 0; Mesh *mesh = new Mesh(); @@ -342,9 +342,9 @@ void MeshManager::CreateSphere(const std::string &name, float radius, ////////////////////////////////////////////////// void MeshManager::CreatePlane(const std::string &_name, - const ignition::math::Planed &_plane, - const ignition::math::Vector2d &_segments, - const ignition::math::Vector2d &_uvTile) + const gz::math::Planed &_plane, + const gz::math::Vector2d &_segments, + const gz::math::Vector2d &_uvTile) { this->CreatePlane(_name, _plane.Normal(), _plane.Offset(), _plane.Size(), _segments, _uvTile); @@ -352,11 +352,11 @@ void MeshManager::CreatePlane(const std::string &_name, ////////////////////////////////////////////////// void MeshManager::CreatePlane(const std::string &_name, - const ignition::math::Vector3d &_normal, + const gz::math::Vector3d &_normal, const double _d, - const ignition::math::Vector2d &_size, - const ignition::math::Vector2d &_segments, - const ignition::math::Vector2d &_uvTile) + const gz::math::Vector2d &_size, + const gz::math::Vector2d &_segments, + const gz::math::Vector2d &_uvTile) { if (this->HasMesh(_name)) { @@ -369,16 +369,16 @@ void MeshManager::CreatePlane(const std::string &_name, SubMesh subMesh; - ignition::math::Vector3d zAxis, yAxis, xAxis; + gz::math::Vector3d zAxis, yAxis, xAxis; zAxis = _normal; zAxis.Normalize(); yAxis = zAxis.Perpendicular(); xAxis = yAxis.Cross(zAxis); - ignition::math::Matrix4d xlate, xform, rot; - xlate = rot = ignition::math::Matrix4d::Identity; + gz::math::Matrix4d xlate, xform, rot; + xlate = rot = gz::math::Matrix4d::Identity; - ignition::math::Matrix3d rot3; + gz::math::Matrix3d rot3; rot3.SetAxes(xAxis, yAxis, zAxis); rot = rot3; @@ -386,8 +386,8 @@ void MeshManager::CreatePlane(const std::string &_name, xlate.SetTranslation(_normal * -_d); xform = xlate * rot; - ignition::math::Vector3d vec; - ignition::math::Vector3d norm(0, 0, 1); + gz::math::Vector3d vec; + gz::math::Vector3d norm(0, 0, 1); double xSpace = _size.X() / _segments.X(); double ySpace = _size.Y() / _segments.Y(); double halfWidth = _size.X() / 2.0; @@ -411,7 +411,7 @@ void MeshManager::CreatePlane(const std::string &_name, vec.Z() = -z; if (!xform.TransformAffine(vec, vec)) { - ignerr << "Unable tor transform matrix4d\n"; + gzerr << "Unable tor transform matrix4d\n"; continue; } subMesh.AddVertex(vec); @@ -419,7 +419,7 @@ void MeshManager::CreatePlane(const std::string &_name, // Compute the normal if (!xform.TransformAffine(norm, vec)) { - ignerr << "Unable to tranform matrix4d\n"; + gzerr << "Unable to tranform matrix4d\n"; continue; } @@ -439,8 +439,8 @@ void MeshManager::CreatePlane(const std::string &_name, ////////////////////////////////////////////////// void MeshManager::CreateBox(const std::string &_name, - const ignition::math::Vector3d &_sides, - const ignition::math::Vector2d &_uvCoords) + const gz::math::Vector3d &_sides, + const gz::math::Vector2d &_uvCoords) { int i, k; @@ -541,7 +541,7 @@ void MeshManager::CreateBox(const std::string &_name, ////////////////////////////////////////////////// void MeshManager::CreateExtrudedPolyline(const std::string &_name, - const std::vector<std::vector<ignition::math::Vector2d> > &_polys, + const std::vector<std::vector<gz::math::Vector2d> > &_polys, double _height) { #ifndef _WIN32 @@ -576,36 +576,36 @@ void MeshManager::CreateExtrudedPolyline(const std::string &_name, SubMesh subMesh; - std::vector<ignition::math::Vector2d> vertices; - std::vector<ignition::math::Vector2i> edges; + std::vector<gz::math::Vector2d> vertices; + std::vector<gz::math::Vector2i> edges; MeshManager::ConvertPolylinesToVerticesAndEdges(polys, tol, vertices, edges); if (!GTSMeshUtils::DelaunayTriangulation(vertices, edges, &subMesh)) { - ignerr << "Unable to triangulate polyline." << std::endl; + gzerr << "Unable to triangulate polyline." << std::endl; delete mesh; return; } - std::vector<ignition::math::Vector3d> normals; + std::vector<gz::math::Vector3d> normals; for (unsigned int i = 0; i < edges.size(); ++i) { // we retrieve each edge's coordinates int i0 = edges[i][0]; int i1 = edges[i][1]; - ignition::math::Vector2d edgeV0 = vertices[i0]; - ignition::math::Vector2d edgeV1 = vertices[i1]; + gz::math::Vector2d edgeV0 = vertices[i0]; + gz::math::Vector2d edgeV1 = vertices[i1]; // we look for those points in the subMesh (where indices may have changed) for (unsigned int j = 0; j < subMesh.IndexCount(); j+=3) { - ignition::math::Vector3d v0 = subMesh.Vertex(subMesh.Index(j)); - ignition::math::Vector3d v1 = subMesh.Vertex(subMesh.Index(j+1)); - ignition::math::Vector3d v2 = subMesh.Vertex(subMesh.Index(j+2)); + gz::math::Vector3d v0 = subMesh.Vertex(subMesh.Index(j)); + gz::math::Vector3d v1 = subMesh.Vertex(subMesh.Index(j+1)); + gz::math::Vector3d v2 = subMesh.Vertex(subMesh.Index(j+2)); - std::vector<ignition::math::Vector3d> triangle; + std::vector<gz::math::Vector3d> triangle; triangle.push_back(v0); triangle.push_back(v1); triangle.push_back(v2); @@ -613,7 +613,7 @@ void MeshManager::CreateExtrudedPolyline(const std::string &_name, int ev0 = -1; for (unsigned int k = 0; k < triangle.size(); ++k) { - if (ignition::math::Vector2d(triangle[k].X(), triangle[k].Y()) == + if (gz::math::Vector2d(triangle[k].X(), triangle[k].Y()) == edgeV0) { // found a vertex in triangle that matches the vertex of the edge @@ -628,7 +628,7 @@ void MeshManager::CreateExtrudedPolyline(const std::string &_name, for (unsigned int k = 0; k < triangle.size()-1; ++k) { int index = (ev0 + k + 1) % triangle.size(); - ignition::math::Vector3d triV = triangle[index]; + gz::math::Vector3d triV = triangle[index]; if (math::Vector2d(triV.X(), triV.Y()) == edgeV1) { // found another vertex in triangle that matches the vertex of the @@ -645,11 +645,11 @@ void MeshManager::CreateExtrudedPolyline(const std::string &_name, // Found an edge in triangle that matches the exterior edge. // Now find its normal. - ignition::math::Vector3d edgeVec = triangle[ev0] - triangle[ev1]; + gz::math::Vector3d edgeVec = triangle[ev0] - triangle[ev1]; edgeVec.Normalize(); - ignition::math::Vector3d normal(edgeVec.Y(), -edgeVec.X(), 0); + gz::math::Vector3d normal(edgeVec.Y(), -edgeVec.X(), 0); - ignition::math::Vector3d otherEdgeVec = triangle[ev0] - triangle[ev2]; + gz::math::Vector3d otherEdgeVec = triangle[ev0] - triangle[ev2]; otherEdgeVec.Normalize(); double angle0 = otherEdgeVec.Dot(normal); double angle1 = otherEdgeVec.Dot(-normal); @@ -673,7 +673,7 @@ void MeshManager::CreateExtrudedPolyline(const std::string &_name, // exterior edges if (normals.size() != edges.size()) { - ignerr << "Unable to extrude mesh. Triangulation failed" << std::endl; + gzerr << "Unable to extrude mesh. Triangulation failed" << std::endl; delete mesh; return; } @@ -682,14 +682,14 @@ void MeshManager::CreateExtrudedPolyline(const std::string &_name, // add normal for bottom face for (unsigned int i = 0; i < numVertices; ++i) - subMesh.AddNormal(-ignition::math::Vector3d::UnitZ); + subMesh.AddNormal(-gz::math::Vector3d::UnitZ); // create the top face for (unsigned int i = 0; i < numVertices; ++i) { - ignition::math::Vector3d v = subMesh.Vertex(i); + gz::math::Vector3d v = subMesh.Vertex(i); subMesh.AddVertex(v.X(), v.Y(), _height); - subMesh.AddNormal(ignition::math::Vector3d::UnitZ); + subMesh.AddNormal(gz::math::Vector3d::UnitZ); } unsigned int numIndices = subMesh.IndexCount(); for (unsigned int i = 0; i < numIndices; i+=3) @@ -708,36 +708,36 @@ void MeshManager::CreateExtrudedPolyline(const std::string &_name, // we retrieve each edge's coordinates int i0 = edges[i][0]; int i1 = edges[i][1]; - ignition::math::Vector2d v0 = vertices[i0]; - ignition::math::Vector2d v1 = vertices[i1]; + gz::math::Vector2d v0 = vertices[i0]; + gz::math::Vector2d v1 = vertices[i1]; - ignition::math::Vector2d edge2d = v1 - v0; - ignition::math::Vector3d edge(edge2d.X(), edge2d.Y(), 0); - ignition::math::Vector3d cross = edge.Cross(normals[i]); + gz::math::Vector2d edge2d = v1 - v0; + gz::math::Vector3d edge(edge2d.X(), edge2d.Y(), 0); + gz::math::Vector3d cross = edge.Cross(normals[i]); unsigned int vCount = subMesh.VertexCount(); - subMesh.AddVertex(ignition::math::Vector3d(v0.X(), v0.Y(), 0)); + subMesh.AddVertex(gz::math::Vector3d(v0.X(), v0.Y(), 0)); if (cross.Z() >0) { - subMesh.AddVertex(ignition::math::Vector3d(v0.X(), v0.Y(), _height)); - subMesh.AddVertex(ignition::math::Vector3d(v1.X(), v1.Y(), _height)); + subMesh.AddVertex(gz::math::Vector3d(v0.X(), v0.Y(), _height)); + subMesh.AddVertex(gz::math::Vector3d(v1.X(), v1.Y(), _height)); } else { - subMesh.AddVertex(ignition::math::Vector3d(v1.X(), v1.Y(), _height)); - subMesh.AddVertex(ignition::math::Vector3d(v0.X(), v0.Y(), _height)); + subMesh.AddVertex(gz::math::Vector3d(v1.X(), v1.Y(), _height)); + subMesh.AddVertex(gz::math::Vector3d(v0.X(), v0.Y(), _height)); } - subMesh.AddVertex(ignition::math::Vector3d(v0.X(), v0.Y(), 0)); + subMesh.AddVertex(gz::math::Vector3d(v0.X(), v0.Y(), 0)); if (cross.Z() >0) { - subMesh.AddVertex(ignition::math::Vector3d(v1.X(), v1.Y(), _height)); - subMesh.AddVertex(ignition::math::Vector3d(v1.X(), v1.Y(), 0)); + subMesh.AddVertex(gz::math::Vector3d(v1.X(), v1.Y(), _height)); + subMesh.AddVertex(gz::math::Vector3d(v1.X(), v1.Y(), 0)); } else { - subMesh.AddVertex(ignition::math::Vector3d(v1.X(), v1.Y(), 0)); - subMesh.AddVertex(ignition::math::Vector3d(v1.X(), v1.Y(), _height)); + subMesh.AddVertex(gz::math::Vector3d(v1.X(), v1.Y(), 0)); + subMesh.AddVertex(gz::math::Vector3d(v1.X(), v1.Y(), _height)); } for (unsigned int j = 0; j < 6; ++j) { @@ -851,7 +851,7 @@ void MeshManager::CreateCamera(const std::string &_name, float _scale) ////////////////////////////////////////////////// void MeshManager::CreateEllipsoid(const std::string &_name, - const ignition::math::Vector3d &_radii, + const gz::math::Vector3d &_radii, const unsigned int _rings, const unsigned int _segments) { @@ -887,22 +887,22 @@ void MeshManager::CreateEllipsoid(const std::string &_name, const auto s_phi = sin(phi); // Compute vertex - subMesh.AddVertex(ignition::math::Vector3d( + subMesh.AddVertex(gz::math::Vector3d( _radii.X() * c_phi * c_theta, _radii.Y() * c_phi * s_theta, _radii.Z() * s_phi)); // Compute unit normal at vertex - ignition::math::Vector3d du( + gz::math::Vector3d du( -(_radii.X() * c_phi) * s_theta, +(_radii.Y() * c_phi) * c_theta, 0.0); - ignition::math::Vector3d dv( + gz::math::Vector3d dv( -_radii.X() * s_phi * c_theta, -_radii.Y() * s_phi * s_theta, _radii.Z() * c_phi); - ignition::math::Vector3d normal = du.Cross(dv); + gz::math::Vector3d normal = du.Cross(dv); subMesh.AddNormal(normal); @@ -974,10 +974,10 @@ void MeshManager::CreateCapsule(const std::string &_name, x = -sin(u * (IGN_PI * 2.0)); y = cos(u * (IGN_PI * 2.0)); - ignition::math::Vector3d p(x * _radius * w, y * _radius * w, z); + gz::math::Vector3d p(x * _radius * w, y * _radius * w, z); // Compute vertex - subMesh.AddVertex(ignition::math::Vector3d( - p + ignition::math::Vector3d(0.0, 0.0, 0.5 * _length))); + subMesh.AddVertex(gz::math::Vector3d( + p + gz::math::Vector3d(0.0, 0.0, 0.5 * _length))); subMesh.AddTexCoord({u, v * oneThird}); subMesh.AddNormal(p.Normalize()); @@ -1017,12 +1017,12 @@ void MeshManager::CreateCapsule(const std::string &_name, x = -sin(u * (IGN_PI * 2.0)); y = cos(u * (IGN_PI * 2.0)); - ignition::math::Vector3d p(x * _radius, y * _radius, z); + gz::math::Vector3d p(x * _radius, y * _radius, z); // Compute vertex subMesh.AddVertex(p); subMesh.AddTexCoord({u, oneThird + (v * oneThird)}); - subMesh.AddNormal(ignition::math::Vector3d(x, y, 0.0)); + subMesh.AddNormal(gz::math::Vector3d(x, y, 0.0)); point++; if (i > 0 && j > 0) @@ -1060,10 +1060,10 @@ void MeshManager::CreateCapsule(const std::string &_name, x = -sin(u2 * (IGN_PI * 2.0)); y = cos(u2 * (IGN_PI * 2.0)); - ignition::math::Vector3d p(x * _radius * w, y * _radius * w, z); + gz::math::Vector3d p(x * _radius * w, y * _radius * w, z); // Compute vertex - subMesh.AddVertex(ignition::math::Vector3d( - p + ignition::math::Vector3d(0.0, 0.0, -0.5 * _length))); + subMesh.AddVertex(gz::math::Vector3d( + p + gz::math::Vector3d(0.0, 0.0, -0.5 * _length))); subMesh.AddTexCoord({u2, twoThirds + ((v - 1.0) * oneThird)}); subMesh.AddNormal(p.Normalize()); point++; @@ -1091,7 +1091,7 @@ void MeshManager::CreateCapsule(const std::string &_name, void MeshManager::CreateCylinder(const std::string &name, float radius, float height, int rings, int segments) { - ignition::math::Vector3d vert, norm; + gz::math::Vector3d vert, norm; unsigned int verticeIndex = 0; int ring, seg; float deltaSegAngle = (2.0 * IGN_PI / segments); @@ -1208,7 +1208,7 @@ void MeshManager::CreateCylinder(const std::string &name, float radius, void MeshManager::CreateCone(const std::string &name, float radius, float height, int rings, int segments) { - ignition::math::Vector3d vert, norm; + gz::math::Vector3d vert, norm; unsigned int verticeIndex = 0; unsigned int i, j; int ring, seg; @@ -1318,7 +1318,7 @@ void MeshManager::CreateCone(const std::string &name, float radius, void MeshManager::CreateTube(const std::string &_name, float _innerRadius, float _outerRadius, float _height, int _rings, int _segments, double _arc) { - ignition::math::Vector3d vert, norm; + gz::math::Vector3d vert, norm; unsigned int verticeIndex = 0; int ring, seg; @@ -1453,7 +1453,7 @@ void MeshManager::CreateTube(const std::string &_name, float _innerRadius, } // Close ends in case it's not a full circle - if (!ignition::math::equal(_arc, 2.0 * IGN_PI)) + if (!gz::math::equal(_arc, 2.0 * IGN_PI)) { for (ring = 0; ring < rings; ++ring) { @@ -1549,7 +1549,7 @@ void MeshManager::Tesselate2DMesh(SubMesh *sm, int meshWidth, int meshHeight, ////////////////////////////////////////////////// void MeshManager::CreateBoolean(const std::string &_name, const Mesh *_m1, - const Mesh *_m2, int _operation, const ignition::math::Pose3d &_offset) + const Mesh *_m2, int _operation, const gz::math::Pose3d &_offset) { if (this->HasMesh(_name)) return; @@ -1564,8 +1564,8 @@ void MeshManager::CreateBoolean(const std::string &_name, const Mesh *_m1, ////////////////////////////////////////////////// size_t MeshManager::AddUniquePointToVerticesTable( - std::vector<ignition::math::Vector2d> &_vertices, - const ignition::math::Vector2d &_p, + std::vector<gz::math::Vector2d> &_vertices, + const gz::math::Vector2d &_p, double _tol) { double sqrTol = _tol * _tol; @@ -1585,14 +1585,14 @@ size_t MeshManager::AddUniquePointToVerticesTable( ////////////////////////////////////////////////// void MeshManager::ConvertPolylinesToVerticesAndEdges( - const std::vector<std::vector<ignition::math::Vector2d> > &_polys, + const std::vector<std::vector<gz::math::Vector2d> > &_polys, double _tol, - std::vector<ignition::math::Vector2d> &_vertices, - std::vector<ignition::math::Vector2i> &edges) + std::vector<gz::math::Vector2d> &_vertices, + std::vector<gz::math::Vector2i> &edges) { for (auto poly : _polys) { - ignition::math::Vector2d previous = poly[0]; + gz::math::Vector2d previous = poly[0]; for (auto i = 1u; i != poly.size(); ++i) { auto p = poly[i]; @@ -1604,11 +1604,11 @@ void MeshManager::ConvertPolylinesToVerticesAndEdges( previous = p; if (startPointIndex == endPointIndex) { - ignwarn << "Ignoring edge without 2 distinct vertices" << std::endl; + gzwarn << "Ignoring edge without 2 distinct vertices" << std::endl; continue; } // add the new edge - ignition::math::Vector2i e(startPointIndex, endPointIndex); + gz::math::Vector2i e(startPointIndex, endPointIndex); edges.push_back(e); } } diff --git a/graphics/src/MeshManager_TEST.cc b/graphics/src/MeshManager_TEST.cc index 5fe50d929..fd6ff47bc 100644 --- a/graphics/src/MeshManager_TEST.cc +++ b/graphics/src/MeshManager_TEST.cc @@ -17,14 +17,14 @@ #include <gtest/gtest.h> -#include "ignition/common/Mesh.hh" -#include "ignition/common/SubMesh.hh" -#include "ignition/common/MeshManager.hh" -#include "ignition/common/config.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/SubMesh.hh" +#include "gz/common/MeshManager.hh" +#include "gz/common/config.hh" -#include "ignition/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/AutoLogFixture.hh" -using namespace ignition; +using namespace gz; #ifndef _WIN32 class MeshManager : public common::testing::AutoLogFixture { }; @@ -35,20 +35,20 @@ TEST_F(MeshManager, CreateExtrudedPolyline) // test extrusion of a path with two subpaths: // a smaller square inside a bigger square. // The smaller square should be treated as a hole inside the bigger square. - std::vector<std::vector<ignition::math::Vector2d> > path; - std::vector<ignition::math::Vector2d> subpath01; - subpath01.push_back(ignition::math::Vector2d(0, 0)); - subpath01.push_back(ignition::math::Vector2d(1, 0)); - subpath01.push_back(ignition::math::Vector2d(1, 1)); - subpath01.push_back(ignition::math::Vector2d(0, 1)); - subpath01.push_back(ignition::math::Vector2d(0, 0)); - - std::vector<ignition::math::Vector2d> subpath02; - subpath02.push_back(ignition::math::Vector2d(0.25, 0.25)); - subpath02.push_back(ignition::math::Vector2d(0.25, 0.75)); - subpath02.push_back(ignition::math::Vector2d(0.75, 0.75)); - subpath02.push_back(ignition::math::Vector2d(0.75, 0.25)); - subpath02.push_back(ignition::math::Vector2d(0.25, 0.25)); + std::vector<std::vector<gz::math::Vector2d> > path; + std::vector<gz::math::Vector2d> subpath01; + subpath01.push_back(gz::math::Vector2d(0, 0)); + subpath01.push_back(gz::math::Vector2d(1, 0)); + subpath01.push_back(gz::math::Vector2d(1, 1)); + subpath01.push_back(gz::math::Vector2d(0, 1)); + subpath01.push_back(gz::math::Vector2d(0, 0)); + + std::vector<gz::math::Vector2d> subpath02; + subpath02.push_back(gz::math::Vector2d(0.25, 0.25)); + subpath02.push_back(gz::math::Vector2d(0.25, 0.75)); + subpath02.push_back(gz::math::Vector2d(0.75, 0.75)); + subpath02.push_back(gz::math::Vector2d(0.75, 0.25)); + subpath02.push_back(gz::math::Vector2d(0.25, 0.25)); path.push_back(subpath01); path.push_back(subpath02); @@ -70,21 +70,21 @@ TEST_F(MeshManager, CreateExtrudedPolyline) // check submesh bounds auto submesh = mesh->SubMeshByIndex(0).lock(); EXPECT_TRUE(submesh != nullptr); - EXPECT_EQ(ignition::math::Vector3d(0, 0, 0), submesh->Min()); - EXPECT_EQ(ignition::math::Vector3d(1.0, 1.0, 10.0), submesh->Max()); + EXPECT_EQ(gz::math::Vector3d(0, 0, 0), submesh->Min()); + EXPECT_EQ(gz::math::Vector3d(1.0, 1.0, 10.0), submesh->Max()); // check vertices for (unsigned int i = 0; i < submesh->VertexCount(); ++i) { - ignition::math::Vector3d v = submesh->Vertex(i); + gz::math::Vector3d v = submesh->Vertex(i); // check no vertices are in the region of the hole EXPECT_FALSE((v.X() > 0.25 && v.X() < 0.75)); EXPECT_FALSE((v.Y() > 0.25 && v.Y() < 0.75)); // check extruded height - EXPECT_TRUE((ignition::math::equal(v.Z(), 0.0) || - ignition::math::equal(v.Z(), 10.0))); + EXPECT_TRUE((gz::math::equal(v.Z(), 0.0) || + gz::math::equal(v.Z(), 10.0))); } // verify same number of normals and vertices @@ -93,40 +93,40 @@ TEST_F(MeshManager, CreateExtrudedPolyline) // check normals for (unsigned int i = 0; i < submesh->NormalCount(); ++i) { - ignition::math::Vector3d v = submesh->Vertex(i); - ignition::math::Vector3d n = submesh->Normal(i); + gz::math::Vector3d v = submesh->Vertex(i); + gz::math::Vector3d n = submesh->Normal(i); // vertex at 0 could be a bottom face or side face - if (ignition::math::equal(v.Z(), 0.0)) + if (gz::math::equal(v.Z(), 0.0)) { - if (ignition::math::equal(n.Z(), 0.0)) + if (gz::math::equal(n.Z(), 0.0)) { // side face - check non-zero normal - EXPECT_TRUE(!(ignition::math::equal(n.X(), 0.0) && - ignition::math::equal(n.Y(), 0.0))); + EXPECT_TRUE(!(gz::math::equal(n.X(), 0.0) && + gz::math::equal(n.Y(), 0.0))); } else { // bottom face - normal in -z direction - EXPECT_TRUE((n == -ignition::math::Vector3d::UnitZ) || - (ignition::math::equal(n.Z(), 0.0))); + EXPECT_TRUE((n == -gz::math::Vector3d::UnitZ) || + (gz::math::equal(n.Z(), 0.0))); } } // vertex at height could be a top face or side face - if (ignition::math::equal(v.Z(), 10.0)) + if (gz::math::equal(v.Z(), 10.0)) { - if (ignition::math::equal(n.Z(), 0.0)) + if (gz::math::equal(n.Z(), 0.0)) { // side face - check non-zero normal - EXPECT_TRUE(!(ignition::math::equal(n.X(), 0.0) && - ignition::math::equal(n.Y(), 0.0))); + EXPECT_TRUE(!(gz::math::equal(n.X(), 0.0) && + gz::math::equal(n.Y(), 0.0))); } else { // top face - normal in +z direction - EXPECT_TRUE((n == ignition::math::Vector3d::UnitZ) || - (ignition::math::equal(n.Z(), 0.0))); + EXPECT_TRUE((n == gz::math::Vector3d::UnitZ) || + (gz::math::equal(n.Z(), 0.0))); } } } @@ -138,21 +138,21 @@ TEST_F(MeshManager, CreateExtrudedPolylineClosedPath) // test extrusion of a path that has two closed subpaths, i.e., // first and last vertices are the same. // The following two subpaths form the letter 'A'. - std::vector<std::vector<ignition::math::Vector2d> > path2; - std::vector<ignition::math::Vector2d> subpath03; - subpath03.push_back(ignition::math::Vector2d(2.27467, 1.0967)); - subpath03.push_back(ignition::math::Vector2d(1.81094, 2.35418)); - subpath03.push_back(ignition::math::Vector2d(2.74009, 2.35418)); - - std::vector<ignition::math::Vector2d> subpath04; - subpath04.push_back(ignition::math::Vector2d(2.08173, 0.7599)); - subpath04.push_back(ignition::math::Vector2d(2.4693, 0.7599)); - subpath04.push_back(ignition::math::Vector2d(3.4323, 3.28672)); - subpath04.push_back(ignition::math::Vector2d(3.07689, 3.28672)); - subpath04.push_back(ignition::math::Vector2d(2.84672, 2.63851)); - subpath04.push_back(ignition::math::Vector2d(1.7077, 2.63851)); - subpath04.push_back(ignition::math::Vector2d(1.47753, 3.28672)); - subpath04.push_back(ignition::math::Vector2d(1.11704, 3.28672)); + std::vector<std::vector<gz::math::Vector2d> > path2; + std::vector<gz::math::Vector2d> subpath03; + subpath03.push_back(gz::math::Vector2d(2.27467, 1.0967)); + subpath03.push_back(gz::math::Vector2d(1.81094, 2.35418)); + subpath03.push_back(gz::math::Vector2d(2.74009, 2.35418)); + + std::vector<gz::math::Vector2d> subpath04; + subpath04.push_back(gz::math::Vector2d(2.08173, 0.7599)); + subpath04.push_back(gz::math::Vector2d(2.4693, 0.7599)); + subpath04.push_back(gz::math::Vector2d(3.4323, 3.28672)); + subpath04.push_back(gz::math::Vector2d(3.07689, 3.28672)); + subpath04.push_back(gz::math::Vector2d(2.84672, 2.63851)); + subpath04.push_back(gz::math::Vector2d(1.7077, 2.63851)); + subpath04.push_back(gz::math::Vector2d(1.47753, 3.28672)); + subpath04.push_back(gz::math::Vector2d(1.11704, 3.28672)); path2.push_back(subpath03); path2.push_back(subpath04); @@ -174,12 +174,12 @@ TEST_F(MeshManager, CreateExtrudedPolylineClosedPath) // check submesh bounds auto submesh = mesh->SubMeshByIndex(0).lock(); EXPECT_TRUE(submesh != nullptr); - EXPECT_EQ(submesh->Min(), ignition::math::Vector3d(1.11704, 0.7599, 0)); - EXPECT_EQ(submesh->Max(), ignition::math::Vector3d(3.4323, 3.28672, 2.0)); + EXPECT_EQ(submesh->Min(), gz::math::Vector3d(1.11704, 0.7599, 0)); + EXPECT_EQ(submesh->Max(), gz::math::Vector3d(3.4323, 3.28672, 2.0)); for (unsigned int i = 0; i < submesh->VertexCount(); ++i) { - ignition::math::Vector3d v = submesh->Vertex(i); + gz::math::Vector3d v = submesh->Vertex(i); // check no vertices are in the region of the hole using a point-in-polygon // algorithm @@ -198,8 +198,8 @@ TEST_F(MeshManager, CreateExtrudedPolylineClosedPath) EXPECT_FALSE(pointInPolygon); // check extruded height - EXPECT_TRUE((ignition::math::equal(v.Z(), 0.0) || - ignition::math::equal(v.Z(), 2.0))); + EXPECT_TRUE((gz::math::equal(v.Z(), 0.0) || + gz::math::equal(v.Z(), 2.0))); } // verify same number of normals and vertices @@ -208,40 +208,40 @@ TEST_F(MeshManager, CreateExtrudedPolylineClosedPath) // check normals for (unsigned int i = 0; i < submesh->NormalCount(); ++i) { - ignition::math::Vector3d v = submesh->Vertex(i); - ignition::math::Vector3d n = submesh->Normal(i); + gz::math::Vector3d v = submesh->Vertex(i); + gz::math::Vector3d n = submesh->Normal(i); // vertex at 0 could be a bottom face or side face - if (ignition::math::equal(v.Z(), 0.0)) + if (gz::math::equal(v.Z(), 0.0)) { - if (ignition::math::equal(n.Z(), 0.0)) + if (gz::math::equal(n.Z(), 0.0)) { // side face - check non-zero normal - EXPECT_TRUE(!(ignition::math::equal(n.X(), 0.0) && - ignition::math::equal(n.Y(), 0.0))); + EXPECT_TRUE(!(gz::math::equal(n.X(), 0.0) && + gz::math::equal(n.Y(), 0.0))); } else { // bottom face - normal in -z direction - EXPECT_TRUE((n == -ignition::math::Vector3d::UnitZ) || - (ignition::math::equal(n.Z(), 0.0))); + EXPECT_TRUE((n == -gz::math::Vector3d::UnitZ) || + (gz::math::equal(n.Z(), 0.0))); } } // vertex at height could be a top face or side face - if (ignition::math::equal(v.Z(), 10.0)) + if (gz::math::equal(v.Z(), 10.0)) { - if (ignition::math::equal(n.Z(), 0.0)) + if (gz::math::equal(n.Z(), 0.0)) { // side face - check non-zero normal - EXPECT_TRUE(!(ignition::math::equal(n.X(), 0.0) && - ignition::math::equal(n.Y(), 0.0))); + EXPECT_TRUE(!(gz::math::equal(n.X(), 0.0) && + gz::math::equal(n.Y(), 0.0))); } else { // top face - normal in +z direction - EXPECT_TRUE((n == ignition::math::Vector3d::UnitZ) || - (ignition::math::equal(n.Z(), 0.0))); + EXPECT_TRUE((n == gz::math::Vector3d::UnitZ) || + (gz::math::equal(n.Z(), 0.0))); } } } @@ -251,11 +251,11 @@ TEST_F(MeshManager, CreateExtrudedPolylineClosedPath) TEST_F(MeshManager, CreateExtrudedPolylineInvalid) { // test extruding invalid polyline - std::vector<std::vector<ignition::math::Vector2d> > path; - std::vector<ignition::math::Vector2d> subpath01; - subpath01.push_back(ignition::math::Vector2d(0, 0)); - subpath01.push_back(ignition::math::Vector2d(0, 1)); - subpath01.push_back(ignition::math::Vector2d(0, 2)); + std::vector<std::vector<gz::math::Vector2d> > path; + std::vector<gz::math::Vector2d> subpath01; + subpath01.push_back(gz::math::Vector2d(0, 0)); + subpath01.push_back(gz::math::Vector2d(0, 1)); + subpath01.push_back(gz::math::Vector2d(0, 2)); path.push_back(subpath01); @@ -275,8 +275,8 @@ TEST_F(MeshManager, Remove) EXPECT_FALSE(mgr->HasMesh("box")); mgr->CreateBox("box", - ignition::math::Vector3d(1, 1, 1), - ignition::math::Vector2d(0, 0)); + gz::math::Vector3d(1, 1, 1), + gz::math::Vector2d(0, 0)); EXPECT_TRUE(mgr->HasMesh("box")); mgr->CreateSphere("sphere", 1.0, 1, 1); diff --git a/graphics/src/Mesh_TEST.cc b/graphics/src/Mesh_TEST.cc index 06f46a15f..7165c139a 100644 --- a/graphics/src/Mesh_TEST.cc +++ b/graphics/src/Mesh_TEST.cc @@ -17,15 +17,15 @@ #include <gtest/gtest.h> -#include "ignition/common/Material.hh" -#include "ignition/common/Mesh.hh" -#include "ignition/common/Skeleton.hh" -#include "ignition/common/SubMesh.hh" -#include "ignition/math/Vector3.hh" +#include "gz/common/Material.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/Skeleton.hh" +#include "gz/common/SubMesh.hh" +#include "gz/math/Vector3.hh" -#include "ignition/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/AutoLogFixture.hh" -using namespace ignition; +using namespace gz; class MeshTest : public common::testing::AutoLogFixture { }; diff --git a/graphics/src/NodeAnimation.cc b/graphics/src/NodeAnimation.cc index e5b526e17..98a196504 100644 --- a/graphics/src/NodeAnimation.cc +++ b/graphics/src/NodeAnimation.cc @@ -15,14 +15,14 @@ * */ #include <map> -#include "ignition/common/Console.hh" -#include "ignition/common/NodeAnimation.hh" +#include "gz/common/Console.hh" +#include "gz/common/NodeAnimation.hh" -using namespace ignition; +using namespace gz; using namespace common; /// \brief NodeAnimation private data -class ignition::common::NodeAnimation::Implementation +class gz::common::NodeAnimation::Implementation { /// \brief the name of the animation public: std::string name; @@ -36,7 +36,7 @@ class ignition::common::NodeAnimation::Implementation ////////////////////////////////////////////////// NodeAnimation::NodeAnimation(const std::string &_name) -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->name = _name; } @@ -89,7 +89,7 @@ void NodeAnimation::KeyFrame(const unsigned int _i, double &_time, { if (_i >= this->dataPtr->keyFrames.size()) { - ignerr << "Invalid key frame index " << _i << "\n"; + gzerr << "Invalid key frame index " << _i << "\n"; _time = -1.0; } else @@ -161,7 +161,7 @@ math::Matrix4d NodeAnimation::FrameAt(double _time, bool _loop) const if (t < 0.0 || t > 1.0) { - ignerr << "Invalid time range\n"; + gzerr << "Invalid time range\n"; return math::Matrix4d(); } diff --git a/graphics/src/NodeTransform.cc b/graphics/src/NodeTransform.cc index 79446f8af..b8109f58a 100644 --- a/graphics/src/NodeTransform.cc +++ b/graphics/src/NodeTransform.cc @@ -15,15 +15,15 @@ * */ -#include <ignition/common/NodeTransform.hh> +#include <gz/common/NodeTransform.hh> #include <iostream> -using namespace ignition; +using namespace gz; using namespace common; /// \brief Private data for NodeTransform -class ignition::common::NodeTransform::Implementation +class gz::common::NodeTransform::Implementation { /// \brief the sid public: std::string sid; @@ -40,7 +40,7 @@ class ignition::common::NodeTransform::Implementation ////////////////////////////////////////////////// NodeTransform::NodeTransform(const NodeTransformType _type) -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->sid = "_default_"; this->dataPtr->type = _type; @@ -50,7 +50,7 @@ NodeTransform::NodeTransform(const NodeTransformType _type) ////////////////////////////////////////////////// NodeTransform::NodeTransform(const math::Matrix4d &_mat, const std::string &_sid, const NodeTransformType _type) -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->sid = _sid; this->dataPtr->type = _type; diff --git a/graphics/src/OBJLoader.cc b/graphics/src/OBJLoader.cc index c1a92f164..013b3eba2 100644 --- a/graphics/src/OBJLoader.cc +++ b/graphics/src/OBJLoader.cc @@ -17,17 +17,17 @@ #include <memory> -#include "ignition/common/Console.hh" -#include "ignition/common/Filesystem.hh" -#include "ignition/common/Material.hh" -#include "ignition/common/Mesh.hh" -#include "ignition/common/SubMesh.hh" -#include "ignition/common/OBJLoader.hh" +#include "gz/common/Console.hh" +#include "gz/common/Filesystem.hh" +#include "gz/common/Material.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/SubMesh.hh" +#include "gz/common/OBJLoader.hh" #define IGNITION_COMMON_TINYOBJLOADER_IMPLEMENTATION #include "tiny_obj_loader.h" -namespace ignition +namespace gz { namespace common { @@ -39,12 +39,12 @@ namespace ignition } } -using namespace ignition; +using namespace gz; using namespace common; ////////////////////////////////////////////////// OBJLoader::OBJLoader() -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { } @@ -88,17 +88,17 @@ Mesh *OBJLoader::Load(const std::string &_filename) if (!warn.empty()) { - ignwarn << warn << std::endl; + gzwarn << warn << std::endl; } if (!err.empty()) { - ignerr << err << std::endl; + gzerr << err << std::endl; } if (!ret) { - ignerr << "Failed to load/parse " << _filename << std::endl; + gzerr << "Failed to load/parse " << _filename << std::endl; return nullptr; } @@ -199,7 +199,7 @@ Mesh *OBJLoader::Load(const std::string &_filename) } else { - ignwarn << "Missing material for shape[" << s.name << "] " + gzwarn << "Missing material for shape[" << s.name << "] " << "in OBJ file[" << _filename << "]" << std::endl; } mesh->AddSubMesh(std::move(subMesh)); @@ -222,7 +222,7 @@ Mesh *OBJLoader::Load(const std::string &_filename) // vertices int vIdx = i.vertex_index; - ignition::math::Vector3d vertex(attrib.vertices[3 * vIdx], + gz::math::Vector3d vertex(attrib.vertices[3 * vIdx], attrib.vertices[3 * vIdx + 1], attrib.vertices[3 * vIdx + 2]); subMesh->AddVertex(vertex); @@ -231,7 +231,7 @@ Mesh *OBJLoader::Load(const std::string &_filename) if (attrib.normals.size() > 0) { int nIdx = i.normal_index; - ignition::math::Vector3d normal(attrib.normals[3 * nIdx], + gz::math::Vector3d normal(attrib.normals[3 * nIdx], attrib.normals[3 * nIdx + 1], attrib.normals[3 * nIdx + 2]); normal.Normalize(); @@ -241,7 +241,7 @@ Mesh *OBJLoader::Load(const std::string &_filename) if (attrib.texcoords.size() > 0) { int tIdx = i.texcoord_index; - ignition::math::Vector2d uv(attrib.texcoords[2 * tIdx], + gz::math::Vector2d uv(attrib.texcoords[2 * tIdx], attrib.texcoords[2 * tIdx + 1]); subMesh->AddTexCoord(uv.X(), 1.0-uv.Y()); } diff --git a/graphics/src/OBJLoader_TEST.cc b/graphics/src/OBJLoader_TEST.cc index eb2dd52bf..aa2b79411 100644 --- a/graphics/src/OBJLoader_TEST.cc +++ b/graphics/src/OBJLoader_TEST.cc @@ -16,15 +16,15 @@ */ #include <gtest/gtest.h> -#include "ignition/common/Mesh.hh" -#include "ignition/common/SubMesh.hh" -#include "ignition/common/Material.hh" -#include "ignition/common/OBJLoader.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/SubMesh.hh" +#include "gz/common/Material.hh" +#include "gz/common/OBJLoader.hh" -#include "ignition/common/testing/AutoLogFixture.hh" -#include "ignition/common/testing/TestPaths.hh" +#include "gz/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/TestPaths.hh" -using namespace ignition; +using namespace gz; class OBJLoaderTest : public common::testing::AutoLogFixture { }; @@ -36,8 +36,8 @@ TEST_F(OBJLoaderTest, LoadObjBox) common::testing::TestFile("data", "box.obj")); EXPECT_STREQ("unknown", mesh->Name().c_str()); - EXPECT_EQ(ignition::math::Vector3d(1, 1, 1), mesh->Max()); - EXPECT_EQ(ignition::math::Vector3d(-1, -1, -1), mesh->Min()); + EXPECT_EQ(gz::math::Vector3d(1, 1, 1), mesh->Max()); + EXPECT_EQ(gz::math::Vector3d(-1, -1, -1), mesh->Min()); // 36 vertices EXPECT_EQ(36u, mesh->VertexCount()); EXPECT_EQ(36u, mesh->NormalCount()); @@ -65,12 +65,12 @@ TEST_F(OBJLoaderTest, LoadObjBox) // This tests opening an OBJ file that has an invalid material reference TEST_F(OBJLoaderTest, InvalidMaterial) { - ignition::common::OBJLoader objLoader; + gz::common::OBJLoader objLoader; std::string meshFilename = common::testing::TestFile("data", "invalid_material.obj"); - ignition::common::Mesh *mesh = objLoader.Load(meshFilename); + gz::common::Mesh *mesh = objLoader.Load(meshFilename); EXPECT_TRUE(mesh != nullptr); } @@ -79,14 +79,14 @@ TEST_F(OBJLoaderTest, InvalidMaterial) // This tests opening an OBJ file that has PBR fields TEST_F(OBJLoaderTest, PBR) { - ignition::common::OBJLoader objLoader; + gz::common::OBJLoader objLoader; // load obj file exported by 3ds max that has pbr extension { std::string meshFilename = common::testing::TestFile("data", "cube_pbr.obj"); - ignition::common::Mesh *mesh = objLoader.Load(meshFilename); + gz::common::Mesh *mesh = objLoader.Load(meshFilename); EXPECT_NE(nullptr, mesh); const common::MaterialPtr mat = mesh->MaterialByIndex(0u); @@ -112,7 +112,7 @@ TEST_F(OBJLoaderTest, PBR) std::string meshFilename = common::testing::TestFile("data", "blender_pbr.obj"); - ignition::common::Mesh *mesh = objLoader.Load(meshFilename); + gz::common::Mesh *mesh = objLoader.Load(meshFilename); EXPECT_NE(nullptr, mesh); const common::MaterialPtr mat = mesh->MaterialByIndex(0u); diff --git a/graphics/src/Pbr.cc b/graphics/src/Pbr.cc index a5d57cf15..6d84d8717 100644 --- a/graphics/src/Pbr.cc +++ b/graphics/src/Pbr.cc @@ -16,12 +16,12 @@ */ #include <string> #include <vector> -#include <ignition/math/Vector3.hh> +#include <gz/math/Vector3.hh> -#include "ignition/common/Pbr.hh" +#include "gz/common/Pbr.hh" /// \brief Private data for Pbr class -class ignition::common::Pbr::Implementation +class gz::common::Pbr::Implementation { /// \brief Workflow type public: PbrType type = PbrType::NONE; @@ -73,12 +73,12 @@ class ignition::common::Pbr::Implementation }; -using namespace ignition; +using namespace gz; using namespace common; ///////////////////////////////////////////////// Pbr::Pbr() - : dataPtr(ignition::utils::MakeImpl<Implementation>()) + : dataPtr(gz::utils::MakeImpl<Implementation>()) { } @@ -100,11 +100,11 @@ bool Pbr::operator==(const Pbr &_pbr) const && (this->dataPtr->emissiveMap == _pbr.dataPtr->emissiveMap) && (this->dataPtr->ambientOcclusionMap == _pbr.dataPtr->ambientOcclusionMap) - && (ignition::math::equal( + && (gz::math::equal( this->dataPtr->metalness, _pbr.dataPtr->metalness)) - && (ignition::math::equal( + && (gz::math::equal( this->dataPtr->roughness, _pbr.dataPtr->roughness)) - && (ignition::math::equal( + && (gz::math::equal( this->dataPtr->glossiness, _pbr.dataPtr->glossiness)); } diff --git a/graphics/src/Pbr_TEST.cc b/graphics/src/Pbr_TEST.cc index de9a923d2..361049d8c 100644 --- a/graphics/src/Pbr_TEST.cc +++ b/graphics/src/Pbr_TEST.cc @@ -17,18 +17,18 @@ #include <gtest/gtest.h> -#include <ignition/math/Color.hh> -#include "ignition/common/Pbr.hh" +#include <gz/math/Color.hh> +#include "gz/common/Pbr.hh" ///////////////////////////////////////////////// TEST(Pbr, BasicAPI) { // initial state - ignition::common::Pbr pbr; - EXPECT_EQ(ignition::common::PbrType::NONE, pbr.Type()); + gz::common::Pbr pbr; + EXPECT_EQ(gz::common::PbrType::NONE, pbr.Type()); EXPECT_EQ(std::string(), pbr.AlbedoMap()); EXPECT_EQ(std::string(), pbr.NormalMap()); - EXPECT_EQ(ignition::common::NormalMapSpace::TANGENT, pbr.NormalMapType()); + EXPECT_EQ(gz::common::NormalMapSpace::TANGENT, pbr.NormalMapType()); EXPECT_EQ(std::string(), pbr.RoughnessMap()); EXPECT_EQ(std::string(), pbr.MetalnessMap()); EXPECT_EQ(std::string(), pbr.EmissiveMap()); @@ -43,8 +43,8 @@ TEST(Pbr, BasicAPI) EXPECT_EQ(std::string(), pbr.AmbientOcclusionMap()); // set / get - pbr.SetType(ignition::common::PbrType::METAL); - EXPECT_EQ(ignition::common::PbrType::METAL, pbr.Type()); + pbr.SetType(gz::common::PbrType::METAL); + EXPECT_EQ(gz::common::PbrType::METAL, pbr.Type()); pbr.SetAlbedoMap("metal_albedo_map.png"); EXPECT_EQ("metal_albedo_map.png", pbr.AlbedoMap()); @@ -88,8 +88,8 @@ TEST(Pbr, MoveCopy) { // copy constructor { - ignition::common::Pbr pbr; - pbr.SetType(ignition::common::PbrType::SPECULAR); + gz::common::Pbr pbr; + pbr.SetType(gz::common::PbrType::SPECULAR); pbr.SetAlbedoMap("specular_albedo_map.png"); pbr.SetNormalMap("specular_normal_map.png"); pbr.SetEnvironmentMap("specular_env_map.png"); @@ -100,11 +100,11 @@ TEST(Pbr, MoveCopy) pbr.SetSpecularMap("specular_map.png"); pbr.SetGlossiness(0.1); - ignition::common::Pbr pbr2(pbr); - EXPECT_EQ(ignition::common::PbrType::SPECULAR, pbr2.Type()); + gz::common::Pbr pbr2(pbr); + EXPECT_EQ(gz::common::PbrType::SPECULAR, pbr2.Type()); EXPECT_EQ("specular_albedo_map.png", pbr2.AlbedoMap()); EXPECT_EQ("specular_normal_map.png", pbr2.NormalMap()); - EXPECT_EQ(ignition::common::NormalMapSpace::TANGENT, pbr2.NormalMapType()); + EXPECT_EQ(gz::common::NormalMapSpace::TANGENT, pbr2.NormalMapType()); EXPECT_EQ("specular_env_map.png", pbr2.EnvironmentMap()); EXPECT_EQ("specular_ambient_occlusion_map.png", pbr2.AmbientOcclusionMap()); @@ -123,11 +123,11 @@ TEST(Pbr, MoveCopy) // move { - ignition::common::Pbr pbr; - pbr.SetType(ignition::common::PbrType::METAL); + gz::common::Pbr pbr; + pbr.SetType(gz::common::PbrType::METAL); pbr.SetAlbedoMap("metal_albedo_map.png"); pbr.SetNormalMap("metal_normal_map.png", - ignition::common::NormalMapSpace::TANGENT); + gz::common::NormalMapSpace::TANGENT); pbr.SetEnvironmentMap("metal_env_map.png"); pbr.SetAmbientOcclusionMap("metal_ambient_occlusion_map.png"); pbr.SetEmissiveMap("metal_emissive_map.png"); @@ -137,11 +137,11 @@ TEST(Pbr, MoveCopy) pbr.SetRoughness(0.8); pbr.SetMetalness(0.3); - ignition::common::Pbr pbr2(std::move(pbr)); - EXPECT_EQ(ignition::common::PbrType::METAL, pbr2.Type()); + gz::common::Pbr pbr2(std::move(pbr)); + EXPECT_EQ(gz::common::PbrType::METAL, pbr2.Type()); EXPECT_EQ("metal_albedo_map.png", pbr2.AlbedoMap()); EXPECT_EQ("metal_normal_map.png", pbr2.NormalMap()); - EXPECT_EQ(ignition::common::NormalMapSpace::TANGENT, pbr2.NormalMapType()); + EXPECT_EQ(gz::common::NormalMapSpace::TANGENT, pbr2.NormalMapType()); EXPECT_EQ("metal_env_map.png", pbr2.EnvironmentMap()); EXPECT_EQ("metal_ambient_occlusion_map.png", pbr2.AmbientOcclusionMap()); @@ -160,11 +160,11 @@ TEST(Pbr, MoveCopy) // move assignment { - ignition::common::Pbr pbr; - pbr.SetType(ignition::common::PbrType::METAL); + gz::common::Pbr pbr; + pbr.SetType(gz::common::PbrType::METAL); pbr.SetAlbedoMap("metal_albedo_map.png"); pbr.SetNormalMap("metal_normal_map.png", - ignition::common::NormalMapSpace::TANGENT); + gz::common::NormalMapSpace::TANGENT); pbr.SetEnvironmentMap("metal_env_map.png"); pbr.SetAmbientOcclusionMap("metal_ambient_occlusion_map.png"); pbr.SetEmissiveMap("metal_emissive_map.png"); @@ -174,12 +174,12 @@ TEST(Pbr, MoveCopy) pbr.SetRoughness(0.8); pbr.SetMetalness(0.3); - ignition::common::Pbr pbr2; + gz::common::Pbr pbr2; pbr2 = std::move(pbr); - EXPECT_EQ(ignition::common::PbrType::METAL, pbr2.Type()); + EXPECT_EQ(gz::common::PbrType::METAL, pbr2.Type()); EXPECT_EQ("metal_albedo_map.png", pbr2.AlbedoMap()); EXPECT_EQ("metal_normal_map.png", pbr2.NormalMap()); - EXPECT_EQ(ignition::common::NormalMapSpace::TANGENT, pbr2.NormalMapType()); + EXPECT_EQ(gz::common::NormalMapSpace::TANGENT, pbr2.NormalMapType()); EXPECT_EQ("metal_env_map.png", pbr2.EnvironmentMap()); EXPECT_EQ("metal_ambient_occlusion_map.png", pbr2.AmbientOcclusionMap()); @@ -199,8 +199,8 @@ TEST(Pbr, MoveCopy) // assignment { - ignition::common::Pbr pbr; - pbr.SetType(ignition::common::PbrType::METAL); + gz::common::Pbr pbr; + pbr.SetType(gz::common::PbrType::METAL); pbr.SetAlbedoMap("metal_albedo_map.png"); pbr.SetNormalMap("metal_normal_map.png"); pbr.SetEnvironmentMap("metal_env_map.png"); @@ -212,9 +212,9 @@ TEST(Pbr, MoveCopy) pbr.SetRoughness(0.18); pbr.SetMetalness(0.13); - ignition::common::Pbr pbr2; + gz::common::Pbr pbr2; pbr2 = pbr; - EXPECT_EQ(ignition::common::PbrType::METAL, pbr2.Type()); + EXPECT_EQ(gz::common::PbrType::METAL, pbr2.Type()); EXPECT_EQ("metal_albedo_map.png", pbr2.AlbedoMap()); EXPECT_EQ("metal_normal_map.png", pbr2.NormalMap()); EXPECT_EQ("metal_env_map.png", pbr2.EnvironmentMap()); @@ -235,19 +235,19 @@ TEST(Pbr, MoveCopy) // copy assignment after move { - ignition::common::Pbr pbr1; - pbr1.SetType(ignition::common::PbrType::METAL); + gz::common::Pbr pbr1; + pbr1.SetType(gz::common::PbrType::METAL); - ignition::common::Pbr pbr2; - pbr2.SetType(ignition::common::PbrType::SPECULAR); + gz::common::Pbr pbr2; + pbr2.SetType(gz::common::PbrType::SPECULAR); // This is similar to what std::swap does except it uses std::move for each // assignment - ignition::common::Pbr tmp = std::move(pbr1); + gz::common::Pbr tmp = std::move(pbr1); pbr1 = pbr2; pbr2 = tmp; - EXPECT_EQ(ignition::common::PbrType::SPECULAR, pbr1.Type()); - EXPECT_EQ(ignition::common::PbrType::METAL, pbr2.Type()); + EXPECT_EQ(gz::common::PbrType::SPECULAR, pbr1.Type()); + EXPECT_EQ(gz::common::PbrType::METAL, pbr2.Type()); } } diff --git a/graphics/src/STLLoader.cc b/graphics/src/STLLoader.cc index cf4770a36..a13bd5f3d 100644 --- a/graphics/src/STLLoader.cc +++ b/graphics/src/STLLoader.cc @@ -19,25 +19,25 @@ #include <stdio.h> #include <memory> -#include "ignition/math/Helpers.hh" -#include "ignition/common/Console.hh" -#include "ignition/common/Mesh.hh" -#include "ignition/common/SubMesh.hh" -#include "ignition/common/STLLoader.hh" +#include "gz/math/Helpers.hh" +#include "gz/common/Console.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/SubMesh.hh" +#include "gz/common/STLLoader.hh" -using namespace ignition; +using namespace gz; using namespace common; ////////////////////////////////////////////////// -class ignition::common::STLLoader::Implementation +class gz::common::STLLoader::Implementation { }; ////////////////////////////////////////////////// STLLoader::STLLoader() : MeshLoader(), - dataPtr(ignition::utils::MakeImpl<Implementation>()) + dataPtr(gz::utils::MakeImpl<Implementation>()) { } @@ -53,7 +53,7 @@ Mesh *STLLoader::Load(const std::string &_filename) if (!file) { - ignerr << "Unable to open file[" << _filename << "]\n"; + gzerr << "Unable to open file[" << _filename << "]\n"; return nullptr; } @@ -65,7 +65,7 @@ Mesh *STLLoader::Load(const std::string &_filename) fclose(file); file = fopen(_filename.c_str(), "rb"); if (!this->ReadBinary(file, mesh)) - ignerr << "Unable to read STL[" << _filename << "]\n"; + gzerr << "Unable to read STL[" << _filename << "]\n"; } fclose(file); @@ -110,7 +110,7 @@ bool STLLoader::ReadAscii(FILE *_filein, Mesh *_mesh) // FACET if (this->Leqi(token, const_cast<char*>("facet"))) { - ignition::math::Vector3d normal; + gz::math::Vector3d normal; // Get the XYZ coordinates of the normal vector to the face. sscanf(next, "%*s %e %e %e", &r1, &r2, &r3); @@ -127,7 +127,7 @@ bool STLLoader::ReadAscii(FILE *_filein, Mesh *_mesh) for (; result; ) { - ignition::math::Vector3d vertex; + gz::math::Vector3d vertex; if (fgets (input, LINE_MAX_LEN, _filein) == nullptr) { result = false; @@ -203,8 +203,8 @@ bool STLLoader::ReadBinary(FILE *_filein, Mesh *_mesh) // Number of faces. face_num = this->LongIntRead(_filein); - ignition::math::Vector3d normal; - ignition::math::Vector3d vertex; + gz::math::Vector3d normal; + gz::math::Vector3d vertex; // For each (triangular) face, // components of normal vector, @@ -310,7 +310,7 @@ int STLLoader::RcolFind(float _a[][COR3_MAX], int _m, int _n, float _r[]) { for (i = 0; i < _m; ++i) { - if (!ignition::math::equal(_a[i][j], _r[i])) + if (!gz::math::equal(_a[i][j], _r[i])) break; if (i == _m-1) return j; diff --git a/graphics/src/SVGLoader.cc b/graphics/src/SVGLoader.cc index c81129910..56d53f56e 100644 --- a/graphics/src/SVGLoader.cc +++ b/graphics/src/SVGLoader.cc @@ -29,25 +29,25 @@ #endif #endif -#include "ignition/common/Console.hh" -#include "ignition/common/Util.hh" +#include "gz/common/Console.hh" +#include "gz/common/Util.hh" -#include "ignition/common/SVGLoader.hh" +#include "gz/common/SVGLoader.hh" -using namespace ignition; +using namespace gz; using namespace common; -class ignition::common::SVGLoader::Implementation +class gz::common::SVGLoader::Implementation { /// \brief Generates polylines for each SVG subpath /// \param[in] _subpath The subpath commands /// \param[in] _last The previous position (for relative path commands) /// \param[out] _polyline The polyline that receives the data /// \return The last point of the subpath - public: ignition::math::Vector2d SubpathToPolyline( + public: gz::math::Vector2d SubpathToPolyline( const std::vector<SVGCommand> &_subpath, - ignition::math::Vector2d _last, - std::vector<ignition::math::Vector2d> &_polyline); + gz::math::Vector2d _last, + std::vector<gz::math::Vector2d> &_polyline); /// \brief Splits a list of commands into subpaths /// \param[in] _cmds The flat list of commands for all the subpaths. @@ -94,14 +94,14 @@ class ignition::common::SVGLoader::Implementation ///////////////////////////////////////////////// // This local helper function takes in a SVG transformation string // and returns the corresponding transformation matrix -ignition::math::Matrix3d ParseTransformMatrixStr( +gz::math::Matrix3d ParseTransformMatrixStr( const std::string &_transformStr) { // check for transformation if (_transformStr.empty()) { - ignerr << "no data for ParseTransformMatrixStr"; - return ignition::math::Matrix3d::Identity; + gzerr << "no data for ParseTransformMatrixStr"; + return gz::math::Matrix3d::Identity; } // _transfromStr should not have a closing paren and look like this @@ -111,9 +111,9 @@ ignition::math::Matrix3d ParseTransformMatrixStr( if (tx.size() < 2) { - ignerr << "Invalid path transform: '" << &_transformStr << "'" + gzerr << "Invalid path transform: '" << &_transformStr << "'" << std::endl; - return ignition::math::Matrix3d::Identity; + return gz::math::Matrix3d::Identity; } std::string transform = tx[0]; std::vector<std::string> numbers = split(tx[1], ","); @@ -124,10 +124,10 @@ ignition::math::Matrix3d ParseTransformMatrixStr( { if (numbers.size() != 6) { - ignerr << "Unsupported matrix transform with " + gzerr << "Unsupported matrix transform with " << numbers.size() << " parameters. Should be 6." << std::endl; - return ignition::math::Matrix3d::Identity; + return gz::math::Matrix3d::Identity; } double a = stod(numbers[0]); // 00 double b = stod(numbers[1]); // 10 @@ -135,7 +135,7 @@ ignition::math::Matrix3d ParseTransformMatrixStr( double d = stod(numbers[3]); // 11 double e = stod(numbers[4]); // 02 double f = stod(numbers[5]); // 12 - ignition::math::Matrix3d m(a, c, e, b, d, f, 0, 0, 1); + gz::math::Matrix3d m(a, c, e, b, d, f, 0, 0, 1); return m; } @@ -143,16 +143,16 @@ ignition::math::Matrix3d ParseTransformMatrixStr( { if (numbers.size() != 1) { - ignerr << "Unsupported skewX transform. Needs 1 parameter only" + gzerr << "Unsupported skewX transform. Needs 1 parameter only" << std::endl; - return ignition::math::Matrix3d::Identity; + return gz::math::Matrix3d::Identity; } double deg = stod(numbers[0]); - ignition::math::Angle angle; + gz::math::Angle angle; angle.SetDegree(deg); // get the tangent of the angle double t = tan(angle.Radian()); - ignition::math::Matrix3d m(1, t, 0, 0, 1, 0, 0, 0, 1); + gz::math::Matrix3d m(1, t, 0, 0, 1, 0, 0, 0, 1); return m; } @@ -160,16 +160,16 @@ ignition::math::Matrix3d ParseTransformMatrixStr( { if (numbers.size() != 1) { - ignerr << "Unsupported skewY transform. Needs 1 parameter only" + gzerr << "Unsupported skewY transform. Needs 1 parameter only" << std::endl; - return ignition::math::Matrix3d::Identity; + return gz::math::Matrix3d::Identity; } double deg = stod(numbers[0]); - ignition::math::Angle angle; + gz::math::Angle angle; angle.SetDegree(deg); // get the tangent of the angle double t = tan(angle.Radian()); - ignition::math::Matrix3d m(1, 0, 0, t, 1, 0, 0, 0, 1); + gz::math::Matrix3d m(1, 0, 0, t, 1, 0, 0, 0, 1); return m; } @@ -179,9 +179,9 @@ ignition::math::Matrix3d ParseTransformMatrixStr( { if (numbers.size() == 0 || numbers.size() > 2) { - ignerr << "Unsupported scale transform with more than 2 parameters" + gzerr << "Unsupported scale transform with more than 2 parameters" << std::endl; - return ignition::math::Matrix3d::Identity; + return gz::math::Matrix3d::Identity; } double x = stod(numbers[0]); double y = x; @@ -189,7 +189,7 @@ ignition::math::Matrix3d ParseTransformMatrixStr( { y = stod(numbers[1]); } - ignition::math::Matrix3d m(x, 0, 0, 0, y, 0, 0, 0, 1); + gz::math::Matrix3d m(x, 0, 0, 0, y, 0, 0, 0, 1); return m; } // translate(<x> [<y>]) @@ -198,9 +198,9 @@ ignition::math::Matrix3d ParseTransformMatrixStr( { if (numbers.size() == 0 || numbers.size() > 2) { - ignerr << "Unsupported translate transform with more than 2 parameters" + gzerr << "Unsupported translate transform with more than 2 parameters" << std::endl; - return ignition::math::Matrix3d::Identity; + return gz::math::Matrix3d::Identity; } double x = stod(numbers[0]); double y = 0; @@ -208,7 +208,7 @@ ignition::math::Matrix3d ParseTransformMatrixStr( { y = stod(numbers[1]); } - ignition::math::Matrix3d m(1, 0, x, 0, 1, y, 0, 0, 1); + gz::math::Matrix3d m(1, 0, x, 0, 1, y, 0, 0, 1); return m; } // rotate(<a> [<x> <y>]) angle in degrees, center x and y @@ -217,12 +217,12 @@ ignition::math::Matrix3d ParseTransformMatrixStr( { if (numbers.size() ==0 || numbers.size() == 2 || numbers.size() > 3 ) { - ignerr << "Unsupported rotate transform. Only angle and optional x y" + gzerr << "Unsupported rotate transform. Only angle and optional x y" << " are supported" << std::endl; - return ignition::math::Matrix3d::Identity; + return gz::math::Matrix3d::Identity; } double deg = stod(numbers[0]); - ignition::math::Angle angle; + gz::math::Angle angle; angle.SetDegree(deg); double a = angle.Radian(); double sina = sin(a); @@ -235,25 +235,25 @@ ignition::math::Matrix3d ParseTransformMatrixStr( y = stod(numbers[2]); } // we apply a translation to x, y, the rotation and the translation -x,-y - ignition::math::Matrix3d transToXy(1, 0, x, 0, 1, y, 0, 0, 1); - ignition::math::Matrix3d transFromXy(1, 0, -x, 0, 1, -y, 0, 0, 1); - ignition::math::Matrix3d rotate(cosa, -sina, 0, sina, cosa, 0, 0, 0, 1); - ignition::math::Matrix3d m = transToXy * rotate * transFromXy; + gz::math::Matrix3d transToXy(1, 0, x, 0, 1, y, 0, 0, 1); + gz::math::Matrix3d transFromXy(1, 0, -x, 0, 1, -y, 0, 0, 1); + gz::math::Matrix3d rotate(cosa, -sina, 0, sina, cosa, 0, 0, 0, 1); + gz::math::Matrix3d m = transToXy * rotate * transFromXy; return m; } // we have no business being here - ignerr << "Unknown transformation: " << transform << std::endl; - ignition::math::Matrix3d m = ignition::math::Matrix3d::Identity; + gzerr << "Unknown transformation: " << transform << std::endl; + gz::math::Matrix3d m = gz::math::Matrix3d::Identity; return m; } ///////////////////////////////////////////////// // This local helper function interpolates a bezier curve at t (between 0 and 1) -ignition::math::Vector2d bezierInterpolate(double _t, - const ignition::math::Vector2d &_p0, - const ignition::math::Vector2d &_p1, - const ignition::math::Vector2d &_p2, - const ignition::math::Vector2d &_p3) +gz::math::Vector2d bezierInterpolate(double _t, + const gz::math::Vector2d &_p0, + const gz::math::Vector2d &_p1, + const gz::math::Vector2d &_p2, + const gz::math::Vector2d &_p3) { double t_1 = 1.0 - _t; double t_1_2 = t_1 * t_1; @@ -261,7 +261,7 @@ ignition::math::Vector2d bezierInterpolate(double _t, double t2 = _t * _t; double t3 = t2 * _t; - ignition::math::Vector2d p; + gz::math::Vector2d p; p.X(t_1_3 * _p0.X() + 3 * _t * t_1_2 * _p1.X() + 3 * t2 * t_1 * _p2.X() + t3 * _p3.X()); p.Y(t_1_3 * _p0.Y() + 3 * _t * t_1_2 * _p1.Y() + 3 * t2 * t_1 * _p2.Y() + @@ -271,12 +271,12 @@ ignition::math::Vector2d bezierInterpolate(double _t, ///////////////////////////////////////////////// // This helper function adds bezier interpolations to a list of points -void cubicBezier(const ignition::math::Vector2d &_p0, - const ignition::math::Vector2d &_p1, - const ignition::math::Vector2d &_p2, - const ignition::math::Vector2d &_p3, +void cubicBezier(const gz::math::Vector2d &_p0, + const gz::math::Vector2d &_p1, + const gz::math::Vector2d &_p2, + const gz::math::Vector2d &_p3, double _step, - std::vector<ignition::math::Vector2d> &_points) + std::vector<gz::math::Vector2d> &_points) { // we don't start at t = 0, but t = step... // so we assume that the first point is there (from the last move) @@ -334,15 +334,15 @@ static float VecAng(float _ux, float _uy, float _vx, float _vy) ///////////////////////////////////////////////// // This helper function adds arc interpolations to a list of points -void arcPath(const ignition::math::Vector2d &_p0, +void arcPath(const gz::math::Vector2d &_p0, const double _rx, const double _ry, const double _rotxDeg, const size_t _largeArc, const size_t _sweepDirection, - const ignition::math::Vector2d &_pEnd, + const gz::math::Vector2d &_pEnd, const double _step, - std::vector<ignition::math::Vector2d> &_points) + std::vector<gz::math::Vector2d> &_points) { // Ported from canvg (https://code.google.com/p/canvg/) double rx = _rx; @@ -471,10 +471,10 @@ void arcPath(const ignition::math::Vector2d &_p0, if (i > 0) { - ignition::math::Vector2d p0(px, py); - ignition::math::Vector2d p1(px + ptanx, py + ptany); - ignition::math::Vector2d p2(x - tanx, y - tany); - ignition::math::Vector2d p3(x, y); + gz::math::Vector2d p0(px, py); + gz::math::Vector2d p1(px + ptanx, py + ptany); + gz::math::Vector2d p2(x - tanx, y - tany); + gz::math::Vector2d p3(x, y); cubicBezier(p0, p1, p2, p3, _step, _points); } px = x; @@ -485,15 +485,15 @@ void arcPath(const ignition::math::Vector2d &_p0, } ///////////////////////////////////////////////// -ignition::math::Vector2d SVGLoader::Implementation::SubpathToPolyline( +gz::math::Vector2d SVGLoader::Implementation::SubpathToPolyline( const std::vector<SVGCommand> &_subpath, - ignition::math::Vector2d _last, - std::vector<ignition::math::Vector2d> &_polyline) + gz::math::Vector2d _last, + std::vector<gz::math::Vector2d> &_polyline) { if (!_polyline.empty()) { - ignerr << "polyline not empty"; - return ignition::math::Vector2d::Zero; + gzerr << "polyline not empty"; + return gz::math::Vector2d::Zero; } for (SVGCommand cmd : _subpath) @@ -507,7 +507,7 @@ ignition::math::Vector2d SVGLoader::Implementation::SubpathToPolyline( case 'l': while (i < count) { - ignition::math::Vector2d p; + gz::math::Vector2d p; p.X(cmd.numbers[i+0]); p.Y(cmd.numbers[i+1]); // m and l cmds are relative to the last point @@ -522,7 +522,7 @@ ignition::math::Vector2d SVGLoader::Implementation::SubpathToPolyline( case 'L': while (i < count) { - ignition::math::Vector2d p; + gz::math::Vector2d p; p.X(cmd.numbers[i+0]); p.Y(cmd.numbers[i+1]); _polyline.push_back(p); @@ -533,8 +533,8 @@ ignition::math::Vector2d SVGLoader::Implementation::SubpathToPolyline( case 'C': while (i < count) { - ignition::math::Vector2d p0 = _last; - ignition::math::Vector2d p1, p2, p3; + gz::math::Vector2d p0 = _last; + gz::math::Vector2d p1, p2, p3; p1.X(cmd.numbers[i+0]); p1.Y(cmd.numbers[i+1]); p2.X(cmd.numbers[i+2]); @@ -549,8 +549,8 @@ ignition::math::Vector2d SVGLoader::Implementation::SubpathToPolyline( case 'c': while (i < count) { - ignition::math::Vector2d p0 = _last; - ignition::math::Vector2d p1, p2, p3; + gz::math::Vector2d p0 = _last; + gz::math::Vector2d p1, p2, p3; p1.X(cmd.numbers[i+0] + _last.X()); p1.Y(cmd.numbers[i+1] + _last.Y()); p2.X(cmd.numbers[i+2] + _last.X()); @@ -565,13 +565,13 @@ ignition::math::Vector2d SVGLoader::Implementation::SubpathToPolyline( case 'A': while (i < count) { - ignition::math::Vector2d p0 = _last; + gz::math::Vector2d p0 = _last; double rx = cmd.numbers[i+0]; double ry = cmd.numbers[i+1]; double xRot = cmd.numbers[i+2]; unsigned int arc(static_cast<unsigned int>(cmd.numbers[i+3])); unsigned int sweep(static_cast<unsigned int>(cmd.numbers[i+4])); - ignition::math::Vector2d pEnd; + gz::math::Vector2d pEnd; pEnd.X(cmd.numbers[i+5]); pEnd.Y(cmd.numbers[i+6]); arcPath(p0, rx, ry, xRot, arc, sweep, pEnd, @@ -583,13 +583,13 @@ ignition::math::Vector2d SVGLoader::Implementation::SubpathToPolyline( case 'a': while (i < count) { - ignition::math::Vector2d p0 = _last; + gz::math::Vector2d p0 = _last; double rx = cmd.numbers[i+0]; double ry = cmd.numbers[i+1]; double xRot = cmd.numbers[i+2]; unsigned int arc(static_cast<unsigned int>(cmd.numbers[i+3])); unsigned int sweep(static_cast<unsigned int>(cmd.numbers[i+4])); - ignition::math::Vector2d pEnd; + gz::math::Vector2d pEnd; pEnd.X(cmd.numbers[i+5] + _last.X()); pEnd.Y(cmd.numbers[i+6] + _last.Y()); arcPath(p0, rx, ry, xRot, arc, sweep, pEnd, @@ -606,13 +606,13 @@ ignition::math::Vector2d SVGLoader::Implementation::SubpathToPolyline( auto &p = _polyline.front(); if (_polyline.back().Distance(p) > 1e-5) { - ignerr << "Zz" << _polyline.back().Distance(p) << std::endl; + gzerr << "Zz" << _polyline.back().Distance(p) << std::endl; _polyline.push_back(p); } break; } default: - ignerr << "Unexpected SVGCommand value: " << cmd.cmd << std::endl; + gzerr << "Unexpected SVGCommand value: " << cmd.cmd << std::endl; } } return _last; @@ -620,7 +620,7 @@ ignition::math::Vector2d SVGLoader::Implementation::SubpathToPolyline( ///////////////////////////////////////////////// SVGLoader::SVGLoader(const unsigned int _samples) -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->resolution = 1.0/std::max(1u, _samples); } @@ -637,7 +637,7 @@ bool SVGLoader::Implementation::SplitSubpaths( { if (_cmds.empty()) { - ignerr << "SVGPath has no commands"; + gzerr << "SVGPath has no commands"; return false; } @@ -760,17 +760,17 @@ bool SVGLoader::Implementation::PathCommands( // the starting point for the subpath // it is the end point of the previous one - ignition::math::Vector2d p; + gz::math::Vector2d p; for (std::vector<SVGCommand> subpath : subpaths) { - _path.polylines.push_back(std::vector<ignition::math::Vector2d>()); - std::vector<ignition::math::Vector2d> &polyline = _path.polylines.back(); + _path.polylines.push_back(std::vector<gz::math::Vector2d>()); + std::vector<gz::math::Vector2d> &polyline = _path.polylines.back(); p = this->SubpathToPolyline(subpath, p, polyline); } // if necessary, apply transform to p and polyline - if (_path.transform != ignition::math::Matrix3d::Identity) + if (_path.transform != gz::math::Matrix3d::Identity) { // we need to transform all the points in the path for (auto &polyline : _path.polylines) @@ -778,7 +778,7 @@ bool SVGLoader::Implementation::PathCommands( for (auto &polyPoint : polyline) { // make a 3d vector form the 2d point - ignition::math::Vector3d point3(polyPoint.X(), polyPoint.Y(), 1); + gz::math::Vector3d point3(polyPoint.X(), polyPoint.Y(), 1); // matrix multiply to get the new point, then save new coords in place auto transformed = _path.transform * point3; polyPoint.X(transformed.X()); @@ -796,11 +796,11 @@ bool SVGLoader::Implementation::PathAttribs(tinyxml2::XMLElement *_pElement, { if (!_pElement) { - ignerr << "empty XML element where a path was expected.\n"; + gzerr << "empty XML element where a path was expected.\n"; return false; } - _path.transform = ignition::math::Matrix3d::Identity; + _path.transform = gz::math::Matrix3d::Identity; const tinyxml2::XMLAttribute *pAttrib = _pElement->FirstAttribute(); // this attribute contains a list of coordinates @@ -828,7 +828,7 @@ bool SVGLoader::Implementation::PathAttribs(tinyxml2::XMLElement *_pElement, } else { - ignwarn << "Ignoring attribute \"" << name << "\" in path" << std::endl; + gzwarn << "Ignoring attribute \"" << name << "\" in path" << std::endl; } pAttrib = pAttrib->Next(); } @@ -895,7 +895,7 @@ bool SVGLoader::Parse(const std::string &_filename, std::string err1 = str1 ? str1 : "n/a"; std::string err2 = str2 ? str2 : "n/a"; - ignerr << "Failed to load file " << _filename << std::endl + gzerr << "Failed to load file " << _filename << std::endl << "XML error type " << doc.ErrorName() << "\n" << "XML error info 1 " << err1 << "\n" << "XML error info 2 " << err2 << "\n"; @@ -1072,11 +1072,11 @@ function draw(showCtrlPoints) for (unsigned int i = 0; i < path.polylines.size(); ++i) { - std::vector<ignition::math::Vector2d> poly = path.polylines[i]; + std::vector<gz::math::Vector2d> poly = path.polylines[i]; _out << psep << "[" << std::endl; psep = ','; char sep = ' '; - for (ignition::math::Vector2d p : poly) + for (gz::math::Vector2d p : poly) { _out << " " << sep << " [" << p.X() << ", " << p.Y() << "]" <<std::endl; @@ -1091,8 +1091,8 @@ function draw(showCtrlPoints) } ///////////////////////////////////////////////// -bool Vector2dCompare(const ignition::math::Vector2d &_a, - const ignition::math::Vector2d &_b, +bool Vector2dCompare(const gz::math::Vector2d &_a, + const gz::math::Vector2d &_b, double _tol) { double x = _a.X() - _b.X(); @@ -1105,25 +1105,25 @@ bool Vector2dCompare(const ignition::math::Vector2d &_a, void SVGLoader::PathsToClosedPolylines( const std::vector<common::SVGPath> &_paths, const double _tol, - std::vector< std::vector<ignition::math::Vector2d> > &_closedPolys, - std::vector< std::vector<ignition::math::Vector2d> > &_openPolys) + std::vector< std::vector<gz::math::Vector2d> > &_closedPolys, + std::vector< std::vector<gz::math::Vector2d> > &_openPolys) { // first we extract all polyline into a vector of line segments - std::list<std::pair<ignition::math::Vector2d, - ignition::math::Vector2d>> segments; + std::list<std::pair<gz::math::Vector2d, + gz::math::Vector2d>> segments; for (auto const &path : _paths) { for (auto const &poly : path.polylines) { - ignition::math::Vector2d startPoint = poly[0]; + gz::math::Vector2d startPoint = poly[0]; for (unsigned int i =1; i < poly.size(); ++i) { - const ignition::math::Vector2d &endPoint = poly[i]; + const gz::math::Vector2d &endPoint = poly[i]; double length = endPoint.Distance(startPoint); if (length < _tol) { - ignmsg << "Ignoring short segment (length: " + gzmsg << "Ignoring short segment (length: " << length << ")" <<std::endl; } else @@ -1140,7 +1140,7 @@ void SVGLoader::PathsToClosedPolylines( { // start a new polyline, made from the 2 points of // the next available segment. - std::vector<ignition::math::Vector2d> polyline; + std::vector<gz::math::Vector2d> polyline; auto &s = segments.front(); polyline.push_back(s.first); polyline.push_back(s.second); @@ -1158,7 +1158,7 @@ void SVGLoader::PathsToClosedPolylines( for (auto it = segments.begin(); it != segments.end(); ++it) { auto seg = *it; - ignition::math::Vector2d nextPoint; + gz::math::Vector2d nextPoint; if (Vector2dCompare(polyline.back(), seg.first, _tol)) { nextPoint = seg.second; @@ -1194,7 +1194,7 @@ void SVGLoader::PathsToClosedPolylines( } else { - ignmsg << "Line segments that are not part of a closed paths have" + gzmsg << "Line segments that are not part of a closed paths have" << " been found with the current minimum distance of " << _tol << " between 2 points." << std::endl << std::endl; _openPolys.push_back(polyline); diff --git a/graphics/src/SVGLoader_TEST.cc b/graphics/src/SVGLoader_TEST.cc index aa2ed934c..01cbf8893 100644 --- a/graphics/src/SVGLoader_TEST.cc +++ b/graphics/src/SVGLoader_TEST.cc @@ -17,12 +17,12 @@ #include <gtest/gtest.h> -#include "ignition/common/SVGLoader.hh" +#include "gz/common/SVGLoader.hh" -#include "ignition/common/testing/AutoLogFixture.hh" -#include "ignition/common/testing/TestPaths.hh" +#include "gz/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/TestPaths.hh" -using namespace ignition; +using namespace gz; using namespace common; @@ -207,8 +207,8 @@ TEST_F(SVGLoaderTest, ClosedLoops) out.close(); - std::vector< std::vector<ignition::math::Vector2d> > closedPolys; - std::vector< std::vector<ignition::math::Vector2d> > openPolys; + std::vector< std::vector<gz::math::Vector2d> > closedPolys; + std::vector< std::vector<gz::math::Vector2d> > openPolys; loader.PathsToClosedPolylines(paths, tol, closedPolys, openPolys); EXPECT_EQ(0u, openPolys.size()); @@ -231,8 +231,8 @@ TEST_F(SVGLoaderTest, Transforms) out.close(); - std::vector< std::vector<ignition::math::Vector2d> > closedPolys; - std::vector< std::vector<ignition::math::Vector2d> > openPolys; + std::vector< std::vector<gz::math::Vector2d> > closedPolys; + std::vector< std::vector<gz::math::Vector2d> > openPolys; loader.PathsToClosedPolylines(paths, tol, closedPolys, openPolys); @@ -267,8 +267,8 @@ TEST_F(SVGLoaderTest, Transforms2) out.close(); - std::vector< std::vector<ignition::math::Vector2d> > closedPolys; - std::vector< std::vector<ignition::math::Vector2d> > openPolys; + std::vector< std::vector<gz::math::Vector2d> > closedPolys; + std::vector< std::vector<gz::math::Vector2d> > openPolys; loader.PathsToClosedPolylines(paths, tol, closedPolys, openPolys); @@ -278,32 +278,32 @@ TEST_F(SVGLoaderTest, Transforms2) EXPECT_EQ("original", paths[0].id); double dxOriginal = fabs(closedPolys[0][0].X() - closedPolys[0][1].X() ); double dyOriginal = fabs(closedPolys[0][0].Y() - closedPolys[0][1].Y() ); - ignmsg << dxOriginal << " X original 0-1\n"; - ignmsg << dyOriginal << " Y original 0-1\n"; + gzmsg << dxOriginal << " X original 0-1\n"; + gzmsg << dyOriginal << " Y original 0-1\n"; // the sgment is vertical (dx = 0) EXPECT_DOUBLE_EQ(dxOriginal, 0); EXPECT_EQ("skewx", paths[1].id); double dxSkewX = fabs(closedPolys[1][0].X() - closedPolys[1][1].X() ); double dySkewX = fabs(closedPolys[1][0].Y() - closedPolys[1][1].Y() ); - ignmsg << dxSkewX << " X skewX 0-1\n"; - ignmsg << dySkewX << " Y skewX 0-1\n"; + gzmsg << dxSkewX << " X skewX 0-1\n"; + gzmsg << dySkewX << " Y skewX 0-1\n"; // the segment is 45 degree, hence dx = dy EXPECT_DOUBLE_EQ(dxSkewX, dySkewX); EXPECT_EQ("skewy", paths[2].id); double dxSkewY = fabs(closedPolys[2][0].X() - closedPolys[2][1].X() ); double dySkewY = fabs(closedPolys[2][0].Y() - closedPolys[2][1].Y() ); - ignmsg << dxSkewY << " X skewY 0-1\n"; - ignmsg << dySkewY << " Y skewY 0-1\n"; + gzmsg << dxSkewY << " X skewY 0-1\n"; + gzmsg << dySkewY << " Y skewY 0-1\n"; // the segment is vertical (dx = 0) EXPECT_DOUBLE_EQ(dxOriginal, dxSkewY); // segment is skewed 30 degrees double dxSkewYb = fabs(closedPolys[2][5].X() - closedPolys[2][4].X() ); double dySkewYb = fabs(closedPolys[2][5].Y() - closedPolys[2][4].Y() ); - ignmsg << dxSkewYb << " X skewY b\n"; - ignmsg << dySkewYb << " Y skewY b\n"; + gzmsg << dxSkewYb << " X skewY b\n"; + gzmsg << dySkewYb << " Y skewY b\n"; EXPECT_GT(dxSkewYb, 131.0); EXPECT_GT(dySkewYb, 35.0); } @@ -323,17 +323,17 @@ TEST_F(SVGLoaderTest, Transforms3) EXPECT_EQ("path_no_tx", paths[1].id); EXPECT_EQ("path_tx", paths[2].id); - ignerr << paths[0].id << " tx: " << paths[0].transform << std::endl; - ignerr << paths[1].id << " tx: " << paths[1].transform << std::endl; - ignerr << paths[2].id << " tx: " << paths[2].transform << std::endl; + gzerr << paths[0].id << " tx: " << paths[0].transform << std::endl; + gzerr << paths[1].id << " tx: " << paths[1].transform << std::endl; + gzerr << paths[2].id << " tx: " << paths[2].transform << std::endl; // save for inspection std::ofstream out("transform3.html"); loader.DumpPaths(paths, out); out.close(); - std::vector< std::vector<ignition::math::Vector2d> > closedPolys; - std::vector< std::vector<ignition::math::Vector2d> > openPolys; + std::vector< std::vector<gz::math::Vector2d> > closedPolys; + std::vector< std::vector<gz::math::Vector2d> > openPolys; loader.PathsToClosedPolylines(paths, tol, closedPolys, openPolys); EXPECT_EQ(0u, openPolys.size()); diff --git a/graphics/src/Skeleton.cc b/graphics/src/Skeleton.cc index dbb46b8a5..cf0bfb954 100644 --- a/graphics/src/Skeleton.cc +++ b/graphics/src/Skeleton.cc @@ -15,16 +15,16 @@ * */ #include <list> -#include <ignition/common/Console.hh> -#include <ignition/common/SkeletonAnimation.hh> -#include <ignition/common/Skeleton.hh> -#include <ignition/common/BVHLoader.hh> +#include <gz/common/Console.hh> +#include <gz/common/SkeletonAnimation.hh> +#include <gz/common/Skeleton.hh> +#include <gz/common/BVHLoader.hh> -using namespace ignition; +using namespace gz; using namespace common; /// Private data class -class ignition::common::Skeleton::Implementation +class gz::common::Skeleton::Implementation { typedef std::vector<std::vector<std::pair<std::string, double> > > RawNodeWeights; @@ -66,13 +66,13 @@ class ignition::common::Skeleton::Implementation ////////////////////////////////////////////////// Skeleton::Skeleton() -: dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) +: dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { } ////////////////////////////////////////////////// Skeleton::Skeleton(SkeletonNode *_root) -: dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) +: dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { this->dataPtr->root = _root; this->BuildNodeMap(); @@ -161,7 +161,7 @@ void Skeleton::Scale(const double _scale) { if (nullptr == this->dataPtr->root) { - ignerr << "Failed to scale skeleton, null root." << std::endl; + gzerr << "Failed to scale skeleton, null root." << std::endl; return; } diff --git a/graphics/src/SkeletonAnimation.cc b/graphics/src/SkeletonAnimation.cc index bf74a3cbd..cc6fd4fae 100644 --- a/graphics/src/SkeletonAnimation.cc +++ b/graphics/src/SkeletonAnimation.cc @@ -15,15 +15,15 @@ * */ -#include "ignition/common/Console.hh" -#include "ignition/common/NodeAnimation.hh" -#include "ignition/common/SkeletonAnimation.hh" +#include "gz/common/Console.hh" +#include "gz/common/NodeAnimation.hh" +#include "gz/common/SkeletonAnimation.hh" -using namespace ignition; +using namespace gz; using namespace common; /// Prvate data class -class ignition::common::SkeletonAnimation::Implementation +class gz::common::SkeletonAnimation::Implementation { /// \brief the node name public: std::string name; @@ -37,7 +37,7 @@ class ignition::common::SkeletonAnimation::Implementation ////////////////////////////////////////////////// SkeletonAnimation::SkeletonAnimation(const std::string &_name) -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->name = _name; } @@ -148,7 +148,7 @@ std::map<std::string, math::Matrix4d> SkeletonAnimation::PoseAtX( auto nodeAnim = this->dataPtr->animations.find(_node); if (nodeAnim == this->dataPtr->animations.end()) { - ignerr << "Can't find animation named [" << _node << "]" << std::endl; + gzerr << "Can't find animation named [" << _node << "]" << std::endl; return {}; } diff --git a/graphics/src/SkeletonNode.cc b/graphics/src/SkeletonNode.cc index 3b179a686..dc562acfa 100644 --- a/graphics/src/SkeletonNode.cc +++ b/graphics/src/SkeletonNode.cc @@ -17,14 +17,14 @@ #include <list> -#include "ignition/common/Console.hh" -#include "ignition/common/SkeletonNode.hh" +#include "gz/common/Console.hh" +#include "gz/common/SkeletonNode.hh" -using namespace ignition; +using namespace gz; using namespace common; /// \brief SkeletonNode private data -class ignition::common::SkeletonNode::Implementation +class gz::common::SkeletonNode::Implementation { /// \brief the name of the skeletal node public: std::string name; @@ -62,7 +62,7 @@ class ignition::common::SkeletonNode::Implementation ////////////////////////////////////////////////// SkeletonNode::SkeletonNode(SkeletonNode *_parent) -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->parent = _parent; @@ -74,7 +74,7 @@ SkeletonNode::SkeletonNode(SkeletonNode *_parent) SkeletonNode::SkeletonNode(SkeletonNode *_parent, const std::string &_name, const std::string &_id, const SkeletonNodeType _type) -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->parent = _parent; @@ -260,7 +260,7 @@ SkeletonNode *SkeletonNode::Child(const unsigned int _index) const SkeletonNode *result = NULL; if (_index >= this->dataPtr->children.size()) - ignerr << "Index out of range[" << _index << "]\n"; + gzerr << "Index out of range[" << _index << "]\n"; else result = this->dataPtr->children[_index]; diff --git a/graphics/src/SubMesh.cc b/graphics/src/SubMesh.cc index 28bb83fee..204a3f45f 100644 --- a/graphics/src/SubMesh.cc +++ b/graphics/src/SubMesh.cc @@ -21,26 +21,26 @@ #include <optional> #include <string> -#include "ignition/math/Helpers.hh" +#include "gz/math/Helpers.hh" -#include "ignition/common/Console.hh" -#include "ignition/common/Material.hh" -#include "ignition/common/SubMesh.hh" +#include "gz/common/Console.hh" +#include "gz/common/Material.hh" +#include "gz/common/SubMesh.hh" -using namespace ignition; +using namespace gz; using namespace common; /// \brief Private data for SubMesh -class ignition::common::SubMesh::Implementation +class gz::common::SubMesh::Implementation { /// \brief the vertex array - public: std::vector<ignition::math::Vector3d> vertices; + public: std::vector<gz::math::Vector3d> vertices; /// \brief the normal array - public: std::vector<ignition::math::Vector3d> normals; + public: std::vector<gz::math::Vector3d> normals; /// \brief A map of texcoord set index to texture coordinate array - public: std::map<unsigned int, std::vector<ignition::math::Vector2d>> + public: std::map<unsigned int, std::vector<gz::math::Vector2d>> texCoords; /// \brief the vertex index array @@ -62,13 +62,13 @@ class ignition::common::SubMesh::Implementation ////////////////////////////////////////////////// SubMesh::SubMesh() -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { } ////////////////////////////////////////////////// SubMesh::SubMesh(const std::string &_name) -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->name = _name; } @@ -97,7 +97,7 @@ void SubMesh::AddIndex(const unsigned int _index) } ////////////////////////////////////////////////// -void SubMesh::AddVertex(const ignition::math::Vector3d &_v) +void SubMesh::AddVertex(const gz::math::Vector3d &_v) { this->dataPtr->vertices.push_back(_v); } @@ -105,11 +105,11 @@ void SubMesh::AddVertex(const ignition::math::Vector3d &_v) ////////////////////////////////////////////////// void SubMesh::AddVertex(const double _x, const double _y, const double _z) { - this->AddVertex(ignition::math::Vector3d(_x, _y, _z)); + this->AddVertex(gz::math::Vector3d(_x, _y, _z)); } ////////////////////////////////////////////////// -void SubMesh::AddNormal(const ignition::math::Vector3d &_n) +void SubMesh::AddNormal(const gz::math::Vector3d &_n) { this->dataPtr->normals.push_back(_n); } @@ -117,7 +117,7 @@ void SubMesh::AddNormal(const ignition::math::Vector3d &_n) ////////////////////////////////////////////////// void SubMesh::AddNormal(const double _x, const double _y, const double _z) { - this->AddNormal(ignition::math::Vector3d(_x, _y, _z)); + this->AddNormal(gz::math::Vector3d(_x, _y, _z)); } ////////////////////////////////////////////////// @@ -130,7 +130,7 @@ void SubMesh::AddTexCoord(const double _u, const double _v) } ////////////////////////////////////////////////// -void SubMesh::AddTexCoord(const ignition::math::Vector2d &_uv) +void SubMesh::AddTexCoord(const gz::math::Vector2d &_uv) { this->AddTexCoord(_uv.X(), _uv.Y()); } @@ -139,11 +139,11 @@ void SubMesh::AddTexCoord(const ignition::math::Vector2d &_uv) void SubMesh::AddTexCoordBySet(double _u, double _v, unsigned int _setIndex) { this->dataPtr->texCoords[_setIndex].push_back( - ignition::math::Vector2d(_u, _v)); + gz::math::Vector2d(_u, _v)); } ////////////////////////////////////////////////// -void SubMesh::AddTexCoordBySet(const ignition::math::Vector2d &_uv, +void SubMesh::AddTexCoordBySet(const gz::math::Vector2d &_uv, unsigned int _setIndex) { this->AddTexCoordBySet(_uv.X(), _uv.Y(), _setIndex); @@ -162,11 +162,11 @@ void SubMesh::AddNodeAssignment(const unsigned int _vertex, } ////////////////////////////////////////////////// -ignition::math::Vector3d SubMesh::Vertex(const unsigned int _index) const +gz::math::Vector3d SubMesh::Vertex(const unsigned int _index) const { if (_index >= this->dataPtr->vertices.size()) { - ignerr << "Index too large" << std::endl; + gzerr << "Index too large" << std::endl; return math::Vector3d::Zero; } @@ -181,11 +181,11 @@ bool SubMesh::HasVertex(const unsigned int _index) const ////////////////////////////////////////////////// void SubMesh::SetVertex(const unsigned int _index, - const ignition::math::Vector3d &_v) + const gz::math::Vector3d &_v) { if (_index >= this->dataPtr->vertices.size()) { - ignerr << "Index too large" << std::endl; + gzerr << "Index too large" << std::endl; return; } @@ -193,11 +193,11 @@ void SubMesh::SetVertex(const unsigned int _index, } ////////////////////////////////////////////////// -ignition::math::Vector3d SubMesh::Normal(const unsigned int _index) const +gz::math::Vector3d SubMesh::Normal(const unsigned int _index) const { if (_index >= this->dataPtr->normals.size()) { - ignerr << "Index too large" << std::endl; + gzerr << "Index too large" << std::endl; return math::Vector3d::Zero; } @@ -220,7 +220,7 @@ bool SubMesh::HasTexCoord(const unsigned int _index) const if (this->dataPtr->texCoords.size() > 1u) { - ignwarn << "Multiple texture coordinate sets exist in submesh: " + gzwarn << "Multiple texture coordinate sets exist in submesh: " << this->dataPtr->name << ". Checking first set with index: " << firstSetIndex << std::endl; } @@ -246,11 +246,11 @@ bool SubMesh::HasNodeAssignment(const unsigned int _index) const ////////////////////////////////////////////////// void SubMesh::SetNormal(const unsigned int _index, - const ignition::math::Vector3d &_n) + const gz::math::Vector3d &_n) { if (_index >= this->dataPtr->normals.size()) { - ignerr << "Index too large" << std::endl; + gzerr << "Index too large" << std::endl; return; } @@ -258,18 +258,18 @@ void SubMesh::SetNormal(const unsigned int _index, } ////////////////////////////////////////////////// -ignition::math::Vector2d SubMesh::TexCoord(const unsigned int _index) const +gz::math::Vector2d SubMesh::TexCoord(const unsigned int _index) const { if (this->dataPtr->texCoords.empty()) { - ignerr << "Texture coordinate sets are empty" << std::endl; + gzerr << "Texture coordinate sets are empty" << std::endl; return math::Vector2d::Zero; } unsigned firstSetIndex = this->dataPtr->texCoords.begin()->first; if (this->dataPtr->texCoords.size() > 1u) { - ignwarn << "Multiple texture coordinate sets exist in submesh: " + gzwarn << "Multiple texture coordinate sets exist in submesh: " << this->dataPtr->name << ". Checking first set with index: " << firstSetIndex << std::endl; } @@ -278,20 +278,20 @@ ignition::math::Vector2d SubMesh::TexCoord(const unsigned int _index) const } ////////////////////////////////////////////////// -ignition::math::Vector2d SubMesh::TexCoordBySet(unsigned int _index, +gz::math::Vector2d SubMesh::TexCoordBySet(unsigned int _index, unsigned int _setIndex) const { auto it = this->dataPtr->texCoords.find(_setIndex); if (it == this->dataPtr->texCoords.end()) { - ignerr << "Texture coordinate set does not exist: " << _setIndex + gzerr << "Texture coordinate set does not exist: " << _setIndex << std::endl; return math::Vector2d::Zero; } if (_index >= it->second.size()) { - ignerr << "Index too large" << std::endl; + gzerr << "Index too large" << std::endl; return math::Vector2d::Zero; } @@ -300,7 +300,7 @@ ignition::math::Vector2d SubMesh::TexCoordBySet(unsigned int _index, ////////////////////////////////////////////////// void SubMesh::SetTexCoord(const unsigned int _index, - const ignition::math::Vector2d &_t) + const gz::math::Vector2d &_t) { unsigned firstSetIndex = 0u; if (!this->dataPtr->texCoords.empty()) @@ -308,7 +308,7 @@ void SubMesh::SetTexCoord(const unsigned int _index, if (this->dataPtr->texCoords.size() > 1u) { - ignwarn << "Multiple texture coordinate sets exist in submesh: " + gzwarn << "Multiple texture coordinate sets exist in submesh: " << this->dataPtr->name << ". Checking first set with index: " << firstSetIndex << std::endl; } @@ -318,19 +318,19 @@ void SubMesh::SetTexCoord(const unsigned int _index, ////////////////////////////////////////////////// void SubMesh::SetTexCoordBySet(unsigned int _index, - const ignition::math::Vector2d &_t, unsigned int _setIndex) + const gz::math::Vector2d &_t, unsigned int _setIndex) { auto it = this->dataPtr->texCoords.find(_setIndex); if (it == this->dataPtr->texCoords.end()) { - ignerr << "Texture coordinate set does not exist: " << _setIndex + gzerr << "Texture coordinate set does not exist: " << _setIndex << std::endl; return; } if (_index >= it->second.size()) { - ignerr << "Index too large" << std::endl; + gzerr << "Index too large" << std::endl; return; } @@ -342,7 +342,7 @@ int SubMesh::Index(const unsigned int _index) const { if (_index >= this->dataPtr->indices.size()) { - ignerr << "Index too large" << std::endl; + gzerr << "Index too large" << std::endl; return -1; } @@ -354,7 +354,7 @@ void SubMesh::SetIndex(const unsigned int _index, const unsigned int _i) { if (_index >= this->dataPtr->indices.size()) { - ignerr << "Index too large" << std::endl; + gzerr << "Index too large" << std::endl; return; } @@ -367,7 +367,7 @@ NodeAssignment SubMesh::NodeAssignmentByIndex( { if (_index >= this->dataPtr->nodeAssignments.size()) { - ignerr << "Index too large" << std::endl; + gzerr << "Index too large" << std::endl; return NodeAssignment(); } @@ -375,16 +375,16 @@ NodeAssignment SubMesh::NodeAssignmentByIndex( } ////////////////////////////////////////////////// -ignition::math::Vector3d SubMesh::Max() const +gz::math::Vector3d SubMesh::Max() const { if (this->dataPtr->vertices.empty()) - return ignition::math::Vector3d::Zero; + return gz::math::Vector3d::Zero; - ignition::math::Vector3d max; + gz::math::Vector3d max; - max.X(-ignition::math::MAX_F); - max.Y(-ignition::math::MAX_F); - max.Z(-ignition::math::MAX_F); + max.X(-gz::math::MAX_F); + max.Y(-gz::math::MAX_F); + max.Z(-gz::math::MAX_F); for (const auto &v : this->dataPtr->vertices) { @@ -397,16 +397,16 @@ ignition::math::Vector3d SubMesh::Max() const } ////////////////////////////////////////////////// -ignition::math::Vector3d SubMesh::Min() const +gz::math::Vector3d SubMesh::Min() const { if (this->dataPtr->vertices.empty()) - return ignition::math::Vector3d::Zero; + return gz::math::Vector3d::Zero; - ignition::math::Vector3d min; + gz::math::Vector3d min; - min.X(ignition::math::MAX_F); - min.Y(ignition::math::MAX_F); - min.Z(ignition::math::MAX_F); + min.X(gz::math::MAX_F); + min.Y(gz::math::MAX_F); + min.Z(gz::math::MAX_F); for (const auto &v : this->dataPtr->vertices) { @@ -445,7 +445,7 @@ unsigned int SubMesh::TexCoordCount() const if (this->dataPtr->texCoords.size() > 1u) { - ignwarn << "Multiple texture coordinate sets exist in submesh: " + gzwarn << "Multiple texture coordinate sets exist in submesh: " << this->dataPtr->name << ". Checking first set with index: " << firstSetIndex << std::endl; } @@ -507,7 +507,7 @@ std::optional<unsigned int> SubMesh::GetMaterialIndex() const } ////////////////////////////////////////////////// -bool SubMesh::HasVertex(const ignition::math::Vector3d &_v) const +bool SubMesh::HasVertex(const gz::math::Vector3d &_v) const { for (const auto &v : this->dataPtr->vertices) if (_v.Equal(v)) @@ -517,7 +517,7 @@ bool SubMesh::HasVertex(const ignition::math::Vector3d &_v) const } ////////////////////////////////////////////////// -int SubMesh::IndexOfVertex(const ignition::math::Vector3d &_v) const +int SubMesh::IndexOfVertex(const gz::math::Vector3d &_v) const { for (auto iter = this->dataPtr->vertices.begin(); iter != this->dataPtr->vertices.end(); ++iter) @@ -533,7 +533,7 @@ void SubMesh::FillArrays(double **_vertArr, int **_indArr) const { if (this->dataPtr->vertices.empty() || this->dataPtr->indices.empty()) { - ignerr << "No vertices or indices\n"; + gzerr << "No vertices or indices\n"; return; } @@ -577,17 +577,17 @@ void SubMesh::RecalculateNormals() // For each face, which is defined by three indices, calculate the normals for (unsigned int i = 0; i < this->dataPtr->indices.size(); i+= 3) { - ignition::math::Vector3d v1 = + gz::math::Vector3d v1 = this->dataPtr->vertices[this->dataPtr->indices[i]]; - ignition::math::Vector3d v2 = + gz::math::Vector3d v2 = this->dataPtr->vertices[this->dataPtr->indices[i+1]]; - ignition::math::Vector3d v3 = + gz::math::Vector3d v3 = this->dataPtr->vertices[this->dataPtr->indices[i+2]]; - ignition::math::Vector3d n = ignition::math::Vector3d::Normal(v1, v2, v3); + gz::math::Vector3d n = gz::math::Vector3d::Normal(v1, v2, v3); for (unsigned int j = 0; j < this->dataPtr->vertices.size(); ++j) { - ignition::math::Vector3d v = this->dataPtr->vertices[j]; + gz::math::Vector3d v = this->dataPtr->vertices[j]; if (v == v1 || v == v2 || v == v3) { this->dataPtr->normals[j] += n; @@ -603,7 +603,7 @@ void SubMesh::RecalculateNormals() } ////////////////////////////////////////////////// -void SubMesh::GenSphericalTexCoord(const ignition::math::Vector3d &_center) +void SubMesh::GenSphericalTexCoord(const gz::math::Vector3d &_center) { if (this->dataPtr->texCoords.empty()) return; @@ -613,7 +613,7 @@ void SubMesh::GenSphericalTexCoord(const ignition::math::Vector3d &_center) } ////////////////////////////////////////////////// -void SubMesh::GenSphericalTexCoordBySet(const ignition::math::Vector3d &_center, +void SubMesh::GenSphericalTexCoordBySet(const gz::math::Vector3d &_center, unsigned int _setIndex) { this->dataPtr->texCoords[_setIndex].clear(); @@ -636,7 +636,7 @@ void SubMesh::GenSphericalTexCoordBySet(const ignition::math::Vector3d &_center, } ////////////////////////////////////////////////// -void SubMesh::Scale(const ignition::math::Vector3d &_factor) +void SubMesh::Scale(const gz::math::Vector3d &_factor) { for (auto &v : this->dataPtr->vertices) v *= _factor; @@ -650,9 +650,9 @@ void SubMesh::Scale(const double &_factor) } ////////////////////////////////////////////////// -void SubMesh::Center(const ignition::math::Vector3d &_center) +void SubMesh::Center(const gz::math::Vector3d &_center) { - ignition::math::Vector3d min, max, half; + gz::math::Vector3d min, max, half; min = this->Min(); max = this->Max(); half = (max - min) * 0.5; @@ -661,7 +661,7 @@ void SubMesh::Center(const ignition::math::Vector3d &_center) } ////////////////////////////////////////////////// -void SubMesh::Translate(const ignition::math::Vector3d &_vec) +void SubMesh::Translate(const gz::math::Vector3d &_vec) { for (auto &v : this->dataPtr->vertices) v += _vec; @@ -689,11 +689,11 @@ double SubMesh::Volume() const { for (unsigned int idx = 0; idx < this->dataPtr->indices.size(); idx += 3) { - ignition::math::Vector3d v1 = + gz::math::Vector3d v1 = this->dataPtr->vertices[this->dataPtr->indices[idx]]; - ignition::math::Vector3d v2 = + gz::math::Vector3d v2 = this->dataPtr->vertices[this->dataPtr->indices[idx+1]]; - ignition::math::Vector3d v3 = + gz::math::Vector3d v3 = this->dataPtr->vertices[this->dataPtr->indices[idx+2]]; volume += std::abs(v1.Cross(v2).Dot(v3) / 6.0); @@ -701,12 +701,12 @@ double SubMesh::Volume() const } else { - ignerr << "The number of indices is not a multiple of three.\n"; + gzerr << "The number of indices is not a multiple of three.\n"; } } else { - ignerr << "Volume calculation can only be accomplished on a triangulated " + gzerr << "Volume calculation can only be accomplished on a triangulated " << " mesh.\n"; } diff --git a/graphics/src/SubMesh_TEST.cc b/graphics/src/SubMesh_TEST.cc index 951fb9cba..48df65849 100644 --- a/graphics/src/SubMesh_TEST.cc +++ b/graphics/src/SubMesh_TEST.cc @@ -17,14 +17,14 @@ #include <gtest/gtest.h> -#include "ignition/math/Vector3.hh" -#include "ignition/common/Mesh.hh" -#include "ignition/common/SubMesh.hh" -#include "ignition/common/MeshManager.hh" +#include "gz/math/Vector3.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/SubMesh.hh" +#include "gz/common/MeshManager.hh" -#include "ignition/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/AutoLogFixture.hh" -using namespace ignition; +using namespace gz; class SubMeshTest : public common::testing::AutoLogFixture { }; @@ -383,7 +383,7 @@ TEST_F(SubMeshTest, Volume) // Box mesh tests { common::MeshManager::Instance()->CreateBox("unit_box", - ignition::math::Vector3d::One, ignition::math::Vector2d::One); + gz::math::Vector3d::One, gz::math::Vector2d::One); const common::Mesh *unitBox = common::MeshManager::Instance()->MeshByName("unit_box"); @@ -391,7 +391,7 @@ TEST_F(SubMeshTest, Volume) EXPECT_DOUBLE_EQ(1.0, unitBox->Volume()); common::MeshManager::Instance()->CreateBox("other_box", - ignition::math::Vector3d(2, 3, 4), ignition::math::Vector2d::One); + gz::math::Vector3d(2, 3, 4), gz::math::Vector2d::One); const common::Mesh *otherBox = common::MeshManager::Instance()->MeshByName("other_box"); ASSERT_TRUE(otherBox != nullptr); @@ -423,7 +423,7 @@ TEST_F(SubMeshTest, Volume) // Ellipsoid mesh tests { common::MeshManager::Instance()->CreateEllipsoid("ellipsoid", - ignition::math::Vector3d(2, 1.4, 7), 10, 10); + gz::math::Vector3d(2, 1.4, 7), 10, 10); const common::Mesh *unitEllipsoid = common::MeshManager::Instance()->MeshByName("ellipsoid"); @@ -433,7 +433,7 @@ TEST_F(SubMeshTest, Volume) // Checking that we can not add or modify a new mesh with the name common::MeshManager::Instance()->CreateEllipsoid("ellipsoid", - ignition::math::Vector3d(2, 1.4, 7), 100, 100); + gz::math::Vector3d(2, 1.4, 7), 100, 100); const common::Mesh *unitEllipsoid2 = common::MeshManager::Instance()->MeshByName("ellipsoid"); @@ -446,7 +446,7 @@ TEST_F(SubMeshTest, Volume) // A larger cylinder needs to have higher resolution in order to get the // volume close to Pi * r^2 * h. common::MeshManager::Instance()->CreateEllipsoid("other_ellipsoid", - ignition::math::Vector3d(0.8, 2.4, 7.5), 10, 10); + gz::math::Vector3d(0.8, 2.4, 7.5), 10, 10); const common::Mesh *otherEllipsoid = common::MeshManager::Instance()->MeshByName("other_ellipsoid"); diff --git a/graphics/src/tiny_obj_loader.h b/graphics/src/tiny_obj_loader.h index a5859d128..f4be265fb 100644 --- a/graphics/src/tiny_obj_loader.h +++ b/graphics/src/tiny_obj_loader.h @@ -46,14 +46,14 @@ THE SOFTWARE. // #include "tiny_obj_loader.h" // -#ifndef IGNITION_COMMON_TINY_OBJ_LOADER_H_ -#define IGNITION_COMMON_TINY_OBJ_LOADER_H_ +#ifndef GZ_COMMON_TINY_OBJ_LOADER_H_ +#define GZ_COMMON_TINY_OBJ_LOADER_H_ #include <map> #include <string> #include <vector> -namespace ignition +namespace gz { namespace tinyobj { @@ -397,9 +397,9 @@ void LoadMtl(std::map<std::string, int> *material_map, bool ParseTextureNameAndOption(std::string *texname, texture_option_t *texopt, const char *linebuf); } // namespace tinyobj -} // namespace ignition +} // namespace gz -#endif // IGNITION_COMMON_TINY_OBJ_LOADER_H_ +#endif // GZ_COMMON_TINY_OBJ_LOADER_H_ #ifdef IGNITION_COMMON_TINYOBJLOADER_IMPLEMENTATION #include <cassert> @@ -414,7 +414,7 @@ bool ParseTextureNameAndOption(std::string *texname, texture_option_t *texopt, #include <fstream> #include <sstream> -namespace ignition +namespace gz { namespace tinyobj { MaterialReader::~MaterialReader() {} @@ -2578,6 +2578,6 @@ bool LoadObjWithCallback(std::istream &inStream, const callback_t &callback, #pragma clang diagnostic pop #endif } // namespace tinyobj -} // namespace ignition +} // namespace gz #endif diff --git a/graphics/src/tinyxml2/tinyxml2.cpp b/graphics/src/tinyxml2/tinyxml2.cpp index 751f52887..0b239be71 100755 --- a/graphics/src/tinyxml2/tinyxml2.cpp +++ b/graphics/src/tinyxml2/tinyxml2.cpp @@ -116,7 +116,7 @@ static const unsigned char TIXML_UTF_LEAD_0 = 0xefU; static const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; static const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; -namespace ignition +namespace gz { namespace tinyxml2 { diff --git a/graphics/src/tinyxml2/tinyxml2.h b/graphics/src/tinyxml2/tinyxml2.h index 188336280..d64cbde58 100755 --- a/graphics/src/tinyxml2/tinyxml2.h +++ b/graphics/src/tinyxml2/tinyxml2.h @@ -95,7 +95,7 @@ distribution. static const int TIXML2_MAJOR_VERSION = 3; static const int TIXML2_MINOR_VERSION = 0; static const int TIXML2_PATCH_VERSION = 0; -namespace ignition +namespace gz { namespace tinyxml2 { diff --git a/include/gz/common/Base64.hh b/include/gz/common/Base64.hh index 2f128c543..bb9484189 100644 --- a/include/gz/common/Base64.hh +++ b/include/gz/common/Base64.hh @@ -20,11 +20,11 @@ #include <string> #include <gz/common/Export.hh> -namespace ignition +namespace gz { namespace common { - class IGNITION_COMMON_VISIBLE Base64 + class GZ_COMMON_VISIBLE Base64 { /// \brief Encode a binary string into base 64, padded with '='. /// \param[in] _bytesToEncode String of bytes to encode. diff --git a/include/gz/common/Battery.hh b/include/gz/common/Battery.hh index fd5e042b2..3996a6cf6 100644 --- a/include/gz/common/Battery.hh +++ b/include/gz/common/Battery.hh @@ -26,7 +26,7 @@ #include <gz/utils/ImplPtr.hh> -namespace ignition +namespace gz { namespace common { @@ -40,7 +40,7 @@ namespace ignition /// simulation iteration. The update function takes the power loads for each /// consumer and current voltage value as inputs and returns a new voltage /// value. - class IGNITION_COMMON_VISIBLE Battery + class GZ_COMMON_VISIBLE Battery { /// \brief Typedef the powerload map. /// \sa SetUpdateFunc diff --git a/include/gz/common/Console.hh b/include/gz/common/Console.hh index 6a1f423d6..a623b75e1 100644 --- a/include/gz/common/Console.hh +++ b/include/gz/common/Console.hh @@ -27,24 +27,30 @@ #include <gz/common/Export.hh> #include <gz/utils/SuppressWarning.hh> -namespace ignition +namespace gz { namespace common { + // TODO(CH3): Deprecated. Remove all the ign macros on tock. /// \brief Output an error message, if the verbose level is >= 1 - #define ignerr (ignition::common::Console::err(__FILE__, __LINE__)) + #define gzerr (gz::common::Console::err(__FILE__, __LINE__)) + #define ignerr gzerr /// \brief Output a warning message, if the verbose level is >= 2 - #define ignwarn (ignition::common::Console::warn(__FILE__, __LINE__)) + #define gzwarn (gz::common::Console::warn(__FILE__, __LINE__)) + #define ignwarn gzwarn /// \brief Output a message, if the verbose level is >= 3 - #define ignmsg (ignition::common::Console::msg()) + #define gzmsg (gz::common::Console::msg()) + #define ignmsg gzmsg /// \brief Output a debug message, if the verbose level is >= 4 - #define igndbg (ignition::common::Console::dbg(__FILE__, __LINE__)) + #define gzdbg (gz::common::Console::dbg(__FILE__, __LINE__)) + #define igndbg gzdbg /// \brief Output a message to a log file, regardless of verbosity level - #define ignlog (ignition::common::Console::log()) + #define gzlog (gz::common::Console::log()) + #define ignlog gzlog /// \brief Initialize log file with filename given by _dir/_file. /// If called twice, it will close the file currently in use and open a new @@ -53,21 +59,24 @@ namespace ignition /// that if _dir is not an absolute path, then _dir will /// be relative to your home directory. /// \param[in] _file Name of log file for ignlog messages. - #define ignLogInit(_dir, _file)\ - ignition::common::Console::log.Init(_dir, _file) + #define gzLogInit(_dir, _file)\ + gz::common::Console::log.Init(_dir, _file) + #define ignLogInit(_dir, _file) gzLogInit(_dir, _file) /// \brief Close the file used for logging. - #define ignLogClose()\ - ignition::common::Console::log.Close() + #define gzLogClose()\ + gz::common::Console::log.Close() + #define ignLogClose() gzLogClose() /// \brief Get the full path of the directory where the log files are stored /// \return Full path of the directory - #define ignLogDirectory()\ - (ignition::common::Console::log.LogDirectory()) + #define gzLogDirectory()\ + (gz::common::Console::log.LogDirectory()) + #define ignLogDirectory() gzLogDirectory() /// \class FileLogger FileLogger.hh common/common.hh /// \brief A logger that outputs messages to a file. - class IGNITION_COMMON_VISIBLE FileLogger : public std::ostream + class GZ_COMMON_VISIBLE FileLogger : public std::ostream { /// \brief Constructor. /// \param[in] _filename Filename to write into. If empty, @@ -135,7 +144,7 @@ namespace ignition /// \class Logger Logger.hh common/common.hh /// \brief Terminal logger. - class IGNITION_COMMON_VISIBLE Logger : public std::ostream + class GZ_COMMON_VISIBLE Logger : public std::ostream { /// \enum LogType. /// \brief Output destination type. @@ -221,7 +230,7 @@ namespace ignition /// \class Console Console.hh common/common.hh /// \brief Container for loggers, and global logging options /// (such as verbose vs. quiet output). - class IGNITION_COMMON_VISIBLE Console + class GZ_COMMON_VISIBLE Console { /// \brief Set verbosity, where /// <= 0: No output, diff --git a/include/gz/common/EnumIface.hh b/include/gz/common/EnumIface.hh index b95ce1b39..24d0fae00 100644 --- a/include/gz/common/EnumIface.hh +++ b/include/gz/common/EnumIface.hh @@ -23,7 +23,7 @@ #include <gz/common/Util.hh> #include <gz/common/Export.hh> -namespace ignition +namespace gz { namespace common { @@ -38,7 +38,7 @@ namespace ignition /// \sa EnumIface /// \sa EnumIterator #define IGN_ENUM(name, enumType, begin, end, ...) \ - static ignition::common::EnumIface<enumType> name( \ + static gz::common::EnumIface<enumType> name( \ begin, end, {__VA_ARGS__}); /// \brief Enum interface. Use this interface to convert an enum to diff --git a/include/gz/common/Filesystem.hh b/include/gz/common/Filesystem.hh index a859a6af1..6799f2839 100644 --- a/include/gz/common/Filesystem.hh +++ b/include/gz/common/Filesystem.hh @@ -24,7 +24,7 @@ #include <gz/utils/ImplPtr.hh> -namespace ignition +namespace gz { namespace common { @@ -33,7 +33,7 @@ namespace ignition enum FilesystemWarningOp { /// \brief Errors that occur during filesystem manipulation should be - /// logged as warnings using ignwarn. (Recommended) + /// logged as warnings using gzwarn. (Recommended) FSWO_LOG_WARNINGS = 0, /// \brief Errors that occur during filesystem manipulation should @@ -45,39 +45,39 @@ namespace ignition /// \brief Determine whether the given path exists on the filesystem. /// \param[in] _path The path to check for existence /// \return True if the path exists on the filesystem, false otherwise. - bool IGNITION_COMMON_VISIBLE exists(const std::string &_path); + bool GZ_COMMON_VISIBLE exists(const std::string &_path); /// \brief Determine whether the given path is a directory. /// \param[in] _path The path to check /// \return True if given path exists and is a directory, false otherwise. - bool IGNITION_COMMON_VISIBLE isDirectory(const std::string &_path); + bool GZ_COMMON_VISIBLE isDirectory(const std::string &_path); /// \brief Check if the given path is a file. /// \param[in] _path Path to a file. /// \return True if _path is a file. - bool IGNITION_COMMON_VISIBLE isFile(const std::string &_path); + bool GZ_COMMON_VISIBLE isFile(const std::string &_path); /// \brief Check if the given path is relative. /// \param[in] _path Path. /// \return True if _path is relative. - bool IGNITION_COMMON_VISIBLE isRelativePath(const std::string &_path); + bool GZ_COMMON_VISIBLE isRelativePath(const std::string &_path); /// \brief Create a new directory on the filesystem. Intermediate /// directories must already exist. /// \param[in] _path The new directory path to create /// \return True if directory creation was successful, false otherwise. - bool IGNITION_COMMON_VISIBLE createDirectory(const std::string &_path); + bool GZ_COMMON_VISIBLE createDirectory(const std::string &_path); /// \brief Create directories for the given path /// \param[in] _path Path to create directories from /// \return true on success - bool IGNITION_COMMON_VISIBLE createDirectories(const std::string &_path); + bool GZ_COMMON_VISIBLE createDirectories(const std::string &_path); /// \brief Append the preferred path separator character for this platform /// onto the passed-in string. /// \param[in] _s The path to start with. /// \return The original path with the platform path separator appended. - std::string IGNITION_COMMON_VISIBLE const separator( + std::string GZ_COMMON_VISIBLE const separator( std::string const &_s); /// \brief Replace forward-slashes '/' with the preferred directory @@ -93,7 +93,7 @@ namespace ignition /// replacing its /// forward-slashes with the preferred directory separator of the current /// operating system. - void IGNITION_COMMON_VISIBLE changeFromUnixPath(std::string &_path); + void GZ_COMMON_VISIBLE changeFromUnixPath(std::string &_path); /// \brief Returns a copy of _path which has been passed through /// changeFromUnixPath. @@ -101,7 +101,7 @@ namespace ignition /// \param[in] _path The path to start with /// \return A modified path that uses the preferred directory separator of /// the current operating system. - std::string IGNITION_COMMON_VISIBLE copyFromUnixPath( + std::string GZ_COMMON_VISIBLE copyFromUnixPath( const std::string &_path); /// \brief Replace the preferred directory separator of the current @@ -110,7 +110,7 @@ namespace ignition /// /// \param[out] _path This string will be directly modified to use forward /// slashes to separate its directory names. - void IGNITION_COMMON_VISIBLE changeToUnixPath(std::string &_path); + void GZ_COMMON_VISIBLE changeToUnixPath(std::string &_path); /// \brief Returns a copy of _path which has been passed through /// changeToUnixPath. @@ -118,14 +118,14 @@ namespace ignition /// \param[in] _path The path to start with /// \return A modified path that uses forward slashes to separate /// directory names. - std::string IGNITION_COMMON_VISIBLE copyToUnixPath( + std::string GZ_COMMON_VISIBLE copyToUnixPath( const std::string &_path); /// \brief Get the absolute path of a provided path. Relative paths are /// resolved relative to the current working directory. /// \param[in] _path Relative or absolute path. /// \return Absolute path (with platform-dependent directory separators). - std::string IGNITION_COMMON_VISIBLE absPath(const std::string &_path); + std::string GZ_COMMON_VISIBLE absPath(const std::string &_path); /// \brief Join two strings together to form a path /// \param[in] _path1 the left portion of the path @@ -133,7 +133,7 @@ namespace ignition /// \return Joined path. The function can do simplifications such as /// elimination of ../ and removal of duplicate // (but is not guaranteed to /// do so). - std::string IGNITION_COMMON_VISIBLE joinPaths(const std::string &_path1, + std::string GZ_COMMON_VISIBLE joinPaths(const std::string &_path1, const std::string &_path2); /// \brief base case for joinPaths(...) below @@ -160,24 +160,24 @@ namespace ignition /// \brief Get the current working directory /// \return Name of the current directory - std::string IGNITION_COMMON_VISIBLE cwd(); + std::string GZ_COMMON_VISIBLE cwd(); /// \brief Change current working directory to _dir. /// \param[in] _dir The directory to change to. /// \return Whether the operation succeeded. - bool IGNITION_COMMON_VISIBLE chdir(const std::string &_dir); + bool GZ_COMMON_VISIBLE chdir(const std::string &_dir); /// \brief Given a path, get just the basename portion. /// \param[in] _path The full path. /// \return A new string with just the basename portion of the path. - std::string IGNITION_COMMON_VISIBLE basename( + std::string GZ_COMMON_VISIBLE basename( const std::string &_path); /// \brief Given a path, get just its parent path portion, without /// separator at the end. /// \param[in] _path Path of which to find parent path /// \return A new string with just the parent path of the path. - std::string IGNITION_COMMON_VISIBLE parentPath( + std::string GZ_COMMON_VISIBLE parentPath( const std::string &_path); /// \brief Copy a file. @@ -185,7 +185,7 @@ namespace ignition /// \param[in] _newFilename Path of the new file. /// \param[in] _warningOp Log or suppress warnings that may occur. /// \return True on success. - bool IGNITION_COMMON_VISIBLE copyFile( + bool GZ_COMMON_VISIBLE copyFile( const std::string &_existingFilename, const std::string &_newFilename, const FilesystemWarningOp _warningOp = FSWO_LOG_WARNINGS); @@ -194,7 +194,7 @@ namespace ignition /// \param[in] _source Path to an existing directory to copy from. /// \param[in] _destination Path to the destination directory. /// \return True on success. - bool IGNITION_COMMON_VISIBLE copyDirectory( + bool GZ_COMMON_VISIBLE copyDirectory( const std::string &_existingDirname, const std::string &_newDirname, const FilesystemWarningOp _warningOp = FSWO_LOG_WARNINGS); @@ -204,7 +204,7 @@ namespace ignition /// \param[in] _newFilename Full path of the new file. /// \param[in] _warningOp Log or suppress warnings that may occur. /// \return True on success. - bool IGNITION_COMMON_VISIBLE moveFile( + bool GZ_COMMON_VISIBLE moveFile( const std::string &_existingFilename, const std::string &_newFilename, const FilesystemWarningOp _warningOp = FSWO_LOG_WARNINGS); @@ -214,7 +214,7 @@ namespace ignition /// \param[in] _path Path to a directory. /// \param[in] _warningOp Log or suppress warnings that may occur. /// \return True if _path is a directory and was removed. - bool IGNITION_COMMON_VISIBLE removeDirectory( + bool GZ_COMMON_VISIBLE removeDirectory( const std::string &_path, const FilesystemWarningOp _warningOp = FSWO_LOG_WARNINGS); @@ -222,7 +222,7 @@ namespace ignition /// \param[in] _existingFilename Full path to an existing file. /// \param[in] _warningOp Log or suppress warnings that may occur. /// \return True on success. - bool IGNITION_COMMON_VISIBLE removeFile( + bool GZ_COMMON_VISIBLE removeFile( const std::string &_existingFilename, const FilesystemWarningOp _warningOp = FSWO_LOG_WARNINGS); @@ -230,7 +230,7 @@ namespace ignition /// \param[in] _path Path to a directory or file. /// \param[in] _warningOp Log or suppress warnings that may occur. /// \return True if _path was removed. - bool IGNITION_COMMON_VISIBLE removeDirectoryOrFile( + bool GZ_COMMON_VISIBLE removeDirectoryOrFile( const std::string &_path, const FilesystemWarningOp _warningOp = FSWO_LOG_WARNINGS); @@ -238,7 +238,7 @@ namespace ignition /// \param[in] _path Path to a directory or file. /// \param[in] _warningOp Log or suppress warnings that may occur. /// \return True if _path was removed. - bool IGNITION_COMMON_VISIBLE removeAll( + bool GZ_COMMON_VISIBLE removeAll( const std::string &_path, const FilesystemWarningOp _warningOp = FSWO_LOG_WARNINGS); @@ -249,18 +249,18 @@ namespace ignition /// \param[in] _extension File extension, such as "sdf". /// \return Full path with name and extension, which doesn't collide with /// existing files - std::string IGNITION_COMMON_VISIBLE uniqueFilePath( + std::string GZ_COMMON_VISIBLE uniqueFilePath( const std::string &_pathAndName, const std::string &_extension); /// \brief Unique directory path to not overwrite existing directory /// \param[in] _pathAndName Full absolute path /// \return Full path which doesn't collide with existing files - std::string IGNITION_COMMON_VISIBLE uniqueDirectoryPath( + std::string GZ_COMMON_VISIBLE uniqueDirectoryPath( const std::string &_dir); /// \class DirIter Filesystem.hh /// \brief A class for iterating over all items in a directory. - class IGNITION_COMMON_VISIBLE DirIter + class GZ_COMMON_VISIBLE DirIter { /// \brief Constructor for end element. public: DirIter(); diff --git a/include/gz/common/FlagSet.hh b/include/gz/common/FlagSet.hh index 1c4e88bf1..deed48890 100644 --- a/include/gz/common/FlagSet.hh +++ b/include/gz/common/FlagSet.hh @@ -35,7 +35,7 @@ #include <cassert> #include <string> -namespace ignition::common +namespace gz::common { /// \brief Set of flags defined by a C++11 enum class. @@ -371,12 +371,12 @@ struct IsEnumThatContainsSentinel<T, decltype(static_cast<void>(T::_))> // enumeration contains the sentinel `_`. template<typename T> std::enable_if_t< - ignition::common::IsEnumThatContainsSentinel<T>::value, - ignition::common::FlagSet<T> + gz::common::IsEnumThatContainsSentinel<T>::value, + gz::common::FlagSet<T> > operator|(const T& _lhs, const T& _rhs) { - ignition::common::FlagSet<T> fs; + gz::common::FlagSet<T> fs; fs |= _lhs; fs |= _rhs; @@ -386,10 +386,10 @@ operator|(const T& _lhs, const T& _rhs) namespace std { template<typename T, T LastElement, bool ExcludeLast> -struct hash<ignition::common::FlagSet<T, LastElement, ExcludeLast>> +struct hash<gz::common::FlagSet<T, LastElement, ExcludeLast>> { std::size_t operator()( - const ignition::common::FlagSet<T, LastElement, ExcludeLast>& _s) + const gz::common::FlagSet<T, LastElement, ExcludeLast>& _s) const noexcept { return _s.Hash(); diff --git a/include/gz/common/MaterialDensity.hh b/include/gz/common/MaterialDensity.hh index 7dfa3f089..f9d9ef52d 100644 --- a/include/gz/common/MaterialDensity.hh +++ b/include/gz/common/MaterialDensity.hh @@ -23,12 +23,12 @@ #include <tuple> #include "gz/common/Export.hh" -namespace ignition +namespace gz { namespace common { /// \brief Encapsulates density types. - class IGNITION_COMMON_VISIBLE MaterialDensity + class GZ_COMMON_VISIBLE MaterialDensity { /// \enum Type /// \brief Types of materials. diff --git a/include/gz/common/MovingWindowFilter.hh b/include/gz/common/MovingWindowFilter.hh index 83938e495..30d8f6af3 100644 --- a/include/gz/common/MovingWindowFilter.hh +++ b/include/gz/common/MovingWindowFilter.hh @@ -20,7 +20,7 @@ #include <memory> #include <vector> -namespace ignition +namespace gz { namespace common { diff --git a/include/gz/common/SignalHandler.hh b/include/gz/common/SignalHandler.hh index a8476de44..550550a13 100644 --- a/include/gz/common/SignalHandler.hh +++ b/include/gz/common/SignalHandler.hh @@ -21,7 +21,7 @@ #include <gz/common/Export.hh> -namespace ignition +namespace gz { namespace common { @@ -38,14 +38,14 @@ namespace ignition /// Example using a lambda callback: /// /// ~~~ - /// ignition::common::SignalHandler handler; + /// gz::common::SignalHandler handler; /// handler.AddCallback([] (int _sig) /// { /// printf("Signal[%d] received\n", _sig); /// }); /// ~~~ /// - class IGNITION_COMMON_VISIBLE SignalHandler + class GZ_COMMON_VISIBLE SignalHandler { /// \brief Constructor public: SignalHandler(); diff --git a/include/gz/common/SingletonT.hh b/include/gz/common/SingletonT.hh index c7a556299..ecde948d4 100644 --- a/include/gz/common/SingletonT.hh +++ b/include/gz/common/SingletonT.hh @@ -17,7 +17,7 @@ #ifndef GZ_COMMON_SINGLETONT_HH_ #define GZ_COMMON_SINGLETONT_HH_ -namespace ignition +namespace gz { namespace common { diff --git a/include/gz/common/StringUtils.hh b/include/gz/common/StringUtils.hh index cf0b601b0..22764d97c 100644 --- a/include/gz/common/StringUtils.hh +++ b/include/gz/common/StringUtils.hh @@ -22,7 +22,7 @@ #include <gz/common/Export.hh> -namespace ignition +namespace gz { namespace common { @@ -30,7 +30,7 @@ namespace ignition /// \param[in] _orig The string to split /// \param[in] _delim a character to split the string at /// \returns vector of split pieces of the string excluding the delimiter - std::vector<std::string> IGNITION_COMMON_VISIBLE Split( + std::vector<std::string> GZ_COMMON_VISIBLE Split( const std::string &_orig, char _delim); /// \brief Join a sequence of strings with a delimiter @@ -42,7 +42,7 @@ namespace ignition /// \param[in] _orig The input sequence of strings /// \param[in] _delim a string delimiter to join the string with /// \returns a single string composed of strings joined with the delimiter - std::string IGNITION_COMMON_VISIBLE Join( + std::string GZ_COMMON_VISIBLE Join( const std::vector<std::string> &_orig, const std::string &_delim); /// \brief Join a sequence of strings with a delimiter @@ -54,21 +54,21 @@ namespace ignition /// \param[in] _orig The input sequence of strings /// \param[in] _delim a character to join the string with /// \returns a single string composed of strings joined with the delimiter - std::string IGNITION_COMMON_VISIBLE Join( + std::string GZ_COMMON_VISIBLE Join( const std::vector<std::string> &_orig, char _delim); /// \brief return true if string starts with another string /// \param[in] _s1 the string to check /// \param[in] _s2 the possible prefix /// \returns true if _s1 starts with _s2 - bool IGNITION_COMMON_VISIBLE StartsWith(const std::string &_s1, + bool GZ_COMMON_VISIBLE StartsWith(const std::string &_s1, const std::string &_s2); /// \brief return true if string ends with another string /// \param[in] _s1 the string to check /// \param[in] _s2 the possible suffix /// \returns true if _s1 ends with _s2 - bool IGNITION_COMMON_VISIBLE EndsWith(const std::string &_s1, + bool GZ_COMMON_VISIBLE EndsWith(const std::string &_s1, const std::string &_s2); /// \brief Choose whether to use a singular or plural version of a noun @@ -78,7 +78,7 @@ namespace ignition /// \param[in] _baseWord the singular version of the word to return /// \param[in] _n the quantity that _baseWord is describing /// \return _baseWord if std::abs(_n)==1, otherwise return _baseWords - std::string IGNITION_COMMON_VISIBLE PluralCast( + std::string GZ_COMMON_VISIBLE PluralCast( const std::string &_baseWord, const int _n); /// \brief A version of PluralCast that works for irregular nouns. If @@ -87,7 +87,7 @@ namespace ignition /// \param[in] _singular the return value when std::abs(_n) == 1 /// \param[in] _plural the return value when std::abs(_n) != 1 /// \return _singular if std::abs(_n)==1, otherwise return _plural - std::string IGNITION_COMMON_VISIBLE PluralCast( + std::string GZ_COMMON_VISIBLE PluralCast( const std::string &_singular, const std::string &_plural, const int _n); diff --git a/include/gz/common/SystemPaths.hh b/include/gz/common/SystemPaths.hh index 19ba715f0..dc969772a 100644 --- a/include/gz/common/SystemPaths.hh +++ b/include/gz/common/SystemPaths.hh @@ -27,7 +27,7 @@ #include <gz/utils/ImplPtr.hh> -namespace ignition +namespace gz { namespace common { @@ -35,7 +35,7 @@ namespace ignition /// \brief Functions to handle getting system paths, keeps track of: /// \li SystemPaths#pluginPaths - plugin library paths /// for common::WorldPlugin - class IGNITION_COMMON_VISIBLE SystemPaths + class GZ_COMMON_VISIBLE SystemPaths { /// \brief Constructor for SystemPaths public: SystemPaths(); @@ -55,7 +55,7 @@ namespace ignition /// \param[in] _uri the uniform resource identifier /// \return Returns full path name to file with platform-specific /// directory separators, or an empty string if URI couldn't be found. - /// \sa FindFileURI(const ignition::common::URI &_uri) + /// \sa FindFileURI(const gz::common::URI &_uri) public: std::string FindFileURI(const std::string &_uri) const; /// \brief Find a file or path using a URI. @@ -65,7 +65,7 @@ namespace ignition /// \param[in] _uri the uniform resource identifier /// \return Returns full path name to file with platform-specific /// directory separators, or an empty string if URI couldn't be found. - public: std::string FindFileURI(const ignition::common::URI &_uri) const; + public: std::string FindFileURI(const gz::common::URI &_uri) const; /// \brief Set the plugin path environment variable to use /// \param [in] _env name of the environment variable @@ -156,7 +156,7 @@ namespace ignition /// \param[in] _cb The callback function, which takes a file path or URI /// and returns the full local path. public: void AddFindFileURICallback( - std::function<std::string(const ignition::common::URI &)> _cb); + std::function<std::string(const gz::common::URI &)> _cb); /// \brief look for a file in a set of search paths (not recursive) /// \description This method checks if a file exists in given directories. diff --git a/include/gz/common/TempDirectory.hh b/include/gz/common/TempDirectory.hh index 36a5d3a02..e54cbbaf1 100644 --- a/include/gz/common/TempDirectory.hh +++ b/include/gz/common/TempDirectory.hh @@ -25,7 +25,7 @@ #include <gz/utils/ImplPtr.hh> -namespace ignition +namespace gz { namespace common { @@ -34,7 +34,7 @@ namespace ignition /// Calls std::filesystem::temp_directory_path, refer to the standard /// documentation for your platform for behaviors. /// \return A directory suitable for temporary files. - std::string IGNITION_COMMON_VISIBLE tempDirectoryPath(); + std::string GZ_COMMON_VISIBLE tempDirectoryPath(); /// \brief Create a directory in the tempDirectoryPath by expanding /// a name template @@ -47,7 +47,7 @@ namespace ignition /// \param[in] _parentPath Location to create the directory /// \param[in] _warningOp Allow or suppress filesystem warnings /// \return Path to newly-created temporary directory - std::string IGNITION_COMMON_VISIBLE createTempDirectory( + std::string GZ_COMMON_VISIBLE createTempDirectory( const std::string &_baseName, const std::string &_parentPath, const FilesystemWarningOp _warningOp = FSWO_LOG_WARNINGS); @@ -58,7 +58,7 @@ namespace ignition /// new temporary directory. /// Upon destruction, the current working directory will be restored to the /// location when the TempDirectory object was constructed. - class IGNITION_COMMON_VISIBLE TempDirectory + class GZ_COMMON_VISIBLE TempDirectory { /// \brief Create a directory in the tempDirectoryPath by expanding /// a name template. This directory can also be automatically cleaned @@ -119,6 +119,6 @@ namespace ignition IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } // namespace common -} // namespace ignition +} // namespace gz #endif // GZ_COMMON_TEMPDIRECTORY_HH_ diff --git a/include/gz/common/TemplateHelpers.hh b/include/gz/common/TemplateHelpers.hh index f85d44d88..74f926c1d 100644 --- a/include/gz/common/TemplateHelpers.hh +++ b/include/gz/common/TemplateHelpers.hh @@ -22,7 +22,7 @@ #include "gz/common/detail/TemplateHelpers.hh" -namespace ignition +namespace gz { namespace common { diff --git a/include/gz/common/Timer.hh b/include/gz/common/Timer.hh index e155fe56c..3b057b9c8 100644 --- a/include/gz/common/Timer.hh +++ b/include/gz/common/Timer.hh @@ -23,13 +23,13 @@ #include <chrono> #include <iostream> -namespace ignition +namespace gz { namespace common { /// \class Timer Timer.hh common/common.hh /// \brief A timer class, used to time things in real world walltime - class IGNITION_COMMON_VISIBLE Timer + class GZ_COMMON_VISIBLE Timer { /// \brief Constructor public: Timer(); @@ -50,7 +50,7 @@ namespace ignition /// \brief Stream operator friendly public: friend std::ostream &operator<<(std::ostream &out, - const ignition::common::Timer &t) + const gz::common::Timer &t) { out << t.ElapsedTime().count(); return out; diff --git a/include/gz/common/URI.hh b/include/gz/common/URI.hh index c0b7e3ee2..1bb35dd8d 100644 --- a/include/gz/common/URI.hh +++ b/include/gz/common/URI.hh @@ -24,7 +24,7 @@ #include <gz/utils/ImplPtr.hh> -namespace ignition +namespace gz { namespace common { @@ -52,7 +52,7 @@ namespace ignition /// * `file:/abs/path` has the path `/abs/path` /// * `file://abs/path` has the path `abs/path` /// * `file:///abs/path` has the path `/abs/path` - class IGNITION_COMMON_VISIBLE URIAuthority + class GZ_COMMON_VISIBLE URIAuthority { /// \brief Constructor public: URIAuthority(); @@ -142,7 +142,7 @@ namespace ignition /// scheme://authority.com/seg1/seg2?query /// /// The path is `/seg1/seg2` - class IGNITION_COMMON_VISIBLE URIPath + class GZ_COMMON_VISIBLE URIPath { /// \brief Constructor public: URIPath(); @@ -239,7 +239,7 @@ namespace ignition }; /// \brief The query component of a URI - class IGNITION_COMMON_VISIBLE URIQuery + class GZ_COMMON_VISIBLE URIQuery { /// \brief Constructor public: URIQuery(); @@ -287,7 +287,7 @@ namespace ignition }; /// \brief The fragment component of a URI - class IGNITION_COMMON_VISIBLE URIFragment + class GZ_COMMON_VISIBLE URIFragment { /// \brief Constructor public: URIFragment(); @@ -336,7 +336,7 @@ namespace ignition /// scheme:[//authority]path[?query][#fragment] /// // cppcheck-suppress class_X_Y - class IGNITION_COMMON_VISIBLE URI + class GZ_COMMON_VISIBLE URI { /// \brief Default constructor public: URI(); diff --git a/include/gz/common/Util.hh b/include/gz/common/Util.hh index f6055b6b1..39369de2d 100644 --- a/include/gz/common/Util.hh +++ b/include/gz/common/Util.hh @@ -97,7 +97,7 @@ #define IGN_ASSERT(_expr, _msg) assert((_msg, _expr)) /// \brief Forward declarations for the common classes -namespace ignition +namespace gz { namespace common { @@ -108,49 +108,49 @@ namespace ignition typedef std::runtime_error exception; /// \brief Please use systemTimeIso() as this function will be deprecated - /// in Ignition Common 4. + /// in Gazebo Common 4. /// Get the wall time as an ISO string: YYYY-MM-DDTHH:MM:SS.NS /// \return The current wall time as an ISO string. /// \sa systemTimeIso(); - std::string IGNITION_COMMON_VISIBLE systemTimeISO(); + std::string GZ_COMMON_VISIBLE systemTimeISO(); /// \brief Get the wall time as an ISO string: YYYY-MM-DDTHH:MM:SS.NS /// \return The current wall time as an ISO string. - std::string IGNITION_COMMON_VISIBLE systemTimeIso(); + std::string GZ_COMMON_VISIBLE systemTimeIso(); /// \brief Converts a time point to an ISO string: YYYY-MM-DDTHH:MM:SS.NS /// \param[in] _time A time point, such as one created by /// IGN_SYSTEM_TIME(). /// \return An ISO string that represents the given _time. - std::string IGNITION_COMMON_VISIBLE timeToIso( + std::string GZ_COMMON_VISIBLE timeToIso( const std::chrono::time_point<std::chrono::system_clock> &_time); /// \brief Get the log path /// \return the log path - std::string IGNITION_COMMON_VISIBLE logPath(); + std::string GZ_COMMON_VISIBLE logPath(); /// \brief add path suffix to common::SystemPaths /// \param[in] _suffix The suffix to add. - void IGNITION_COMMON_VISIBLE addSearchPathSuffix( + void GZ_COMMON_VISIBLE addSearchPathSuffix( const std::string &_suffix); /// \brief search for file in common::SystemPaths /// \param[in] _file Name of the file to find. /// \return The path containing the file. - std::string IGNITION_COMMON_VISIBLE findFile(const std::string &_file); + std::string GZ_COMMON_VISIBLE findFile(const std::string &_file); /// \brief search for file in common::SystemPaths /// \param[in] _file Name of the file to find. /// \param[in] _searchLocalPath True to search in the current working /// directory. /// \return The path containing the file. - std::string IGNITION_COMMON_VISIBLE findFile(const std::string &_file, + std::string GZ_COMMON_VISIBLE findFile(const std::string &_file, bool _searchLocalPath); /// \brief search for a file in common::SystemPaths /// \param[in] _file the file name to look for. /// \return The path containing the file. - std::string IGNITION_COMMON_VISIBLE findFilePath(const std::string &_file); + std::string GZ_COMMON_VISIBLE findFilePath(const std::string &_file); /// \brief Add a callback to use when findFile() can't find a file that is /// a valid URI. @@ -160,7 +160,7 @@ namespace ignition /// found. /// \param[in] _cb The callback function, which takes a file path or URI /// and returns the full local path. - void IGNITION_COMMON_VISIBLE addFindFileURICallback( + void GZ_COMMON_VISIBLE addFindFileURICallback( std::function<std::string(const URI &)> _cb); /// \brief Get a pointer to the global system paths that is used by all @@ -169,7 +169,7 @@ namespace ignition /// Care should be taken when manipulating global system paths /// Caller should not assume ownership of the pointer. /// \return A mutable reference to the system paths object. - common::SystemPaths IGNITION_COMMON_VISIBLE *systemPaths(); + common::SystemPaths GZ_COMMON_VISIBLE *systemPaths(); /// \brief Compute the SHA1 hash of an array of bytes. /// \param[in] _buffer Input sequence. The permitted data types for this @@ -184,14 +184,14 @@ namespace ignition /// function are std::string and any STL container. /// \return The string representation (40 character) of the SHA1 hash. /// \sa sha1(const T &_buffer) - std::string IGNITION_COMMON_VISIBLE sha1( + std::string GZ_COMMON_VISIBLE sha1( void const *_buffer, std::size_t _byteCount); /// \brief fnv1a algorithm for 64-bit platforms. /// \param[in] _key The input string. /// \return A 64-bit unsigned hash value. /// \ref https://notes.underscorediscovery.com/constexpr-fnv1a/ - constexpr uint64_t IGNITION_COMMON_VISIBLE hash64(std::string_view _key) + constexpr uint64_t GZ_COMMON_VISIBLE hash64(std::string_view _key) { const char *data = _key.data(); const auto len = _key.size(); @@ -215,7 +215,7 @@ namespace ignition /// \param[in] _name Name of the environment variable. /// \param[out] _value Value if the variable was found. /// \return True if the variable was found or false otherwise. - bool IGNITION_COMMON_VISIBLE env( + bool GZ_COMMON_VISIBLE env( const std::string &_name, std::string &_value); /// \brief Find the environment variable '_name' and return its value. @@ -224,7 +224,7 @@ namespace ignition /// \param[in] _allowEmpty Allow set-but-empty variables. /// (Unsupported on Windows) /// \return True if the variable was found or false otherwise. - bool IGNITION_COMMON_VISIBLE env( + bool GZ_COMMON_VISIBLE env( const std::string &_name, std::string &_value, bool _allowEmpty); @@ -236,61 +236,61 @@ namespace ignition /// \param[in] _name Name of the environment variable. /// \param[in] _value Value of the variable to be set. /// \return True if the variable was set or false otherwise. - bool IGNITION_COMMON_VISIBLE setenv( + bool GZ_COMMON_VISIBLE setenv( const std::string &_name, const std::string &_value); /// \brief Unset the environment variable '_name'. /// \param[in] _name Name of the environment variable. /// \return True if the variable was unset or false otherwise. - bool IGNITION_COMMON_VISIBLE unsetenv(const std::string &_name); + bool GZ_COMMON_VISIBLE unsetenv(const std::string &_name); /// \brief Get a UUID /// \return A UUID string - std::string IGNITION_COMMON_VISIBLE uuid(); + std::string GZ_COMMON_VISIBLE uuid(); /// \brief Splits a string into tokens. /// \param[in] _str Input string. /// \param[in] _delim Token delimiter. /// \return Vector of tokens. - std::vector<std::string> IGNITION_COMMON_VISIBLE split( + std::vector<std::string> GZ_COMMON_VISIBLE split( const std::string &_str, const std::string &_delim); /// \brief In place left trim /// \param[in,out] _s String to trim - void IGNITION_COMMON_VISIBLE ltrim(std::string &_s); + void GZ_COMMON_VISIBLE ltrim(std::string &_s); /// \brief In place right trim /// \param[in,out] _s String to trim - void IGNITION_COMMON_VISIBLE rtrim(std::string &_s); + void GZ_COMMON_VISIBLE rtrim(std::string &_s); /// \brief In place trim from both ends /// \param[in,out] _s String to trim - void IGNITION_COMMON_VISIBLE trim(std::string &_s); + void GZ_COMMON_VISIBLE trim(std::string &_s); /// \brief Copying left trim /// \param[in] _s String to trim /// \return Trimmed string - std::string IGNITION_COMMON_VISIBLE ltrimmed(std::string _s); + std::string GZ_COMMON_VISIBLE ltrimmed(std::string _s); /// \brief Copying right trim /// \param[in] _s String to trim /// \return Trimmed string - std::string IGNITION_COMMON_VISIBLE rtrimmed(std::string _s); + std::string GZ_COMMON_VISIBLE rtrimmed(std::string _s); /// \brief Copying trim from both ends /// \param[in] _s String to trim /// \return Trimmed string - std::string IGNITION_COMMON_VISIBLE trimmed(std::string _s); + std::string GZ_COMMON_VISIBLE trimmed(std::string _s); /// \brief Transforms a string to its lowercase equivalent /// \param[in] _in String to convert to lowercase /// \return Lowercase equilvalent of _in. - std::string IGNITION_COMMON_VISIBLE lowercase(const std::string &_in); + std::string GZ_COMMON_VISIBLE lowercase(const std::string &_in); /// \brief Transforms a string to its lowercase equivalent /// \param[in] _in String to convert to lowercase /// \return Lowercase equilvalent of _in. - std::string IGNITION_COMMON_VISIBLE lowercase(const char *_in); + std::string GZ_COMMON_VISIBLE lowercase(const char *_in); /// \brief Replace all occurances of _key with _replacement. /// \param[out] _result The new string that has had _key replaced @@ -300,7 +300,7 @@ namespace ignition /// \param[in] _replacement The string that replaces _key. /// \sa std::string replaceAll(const std::string &_orig, /// const std::string &_key, const std::string &_replacement) - void IGNITION_COMMON_VISIBLE replaceAll(std::string &_result, + void GZ_COMMON_VISIBLE replaceAll(std::string &_result, const std::string &_orig, const std::string &_key, const std::string &_replacement); @@ -313,7 +313,7 @@ namespace ignition /// \sa void common::replaceAll(std::string &_result, /// const std::string &_orig, const std::string &_key, /// const std::string &_replacement) - std::string IGNITION_COMMON_VISIBLE replaceAll(const std::string &_orig, + std::string GZ_COMMON_VISIBLE replaceAll(const std::string &_orig, const std::string &_key, const std::string &_replacement); } @@ -322,13 +322,13 @@ namespace ignition /////////////////////////////////////////////// // Implementation of get_sha1 template<typename T> -std::string ignition::common::sha1(const T &_buffer) +std::string gz::common::sha1(const T &_buffer) { if (_buffer.size() == 0) - return ignition::common::sha1(NULL, 0); + return gz::common::sha1(NULL, 0); else { - return ignition::common::sha1( + return gz::common::sha1( &(_buffer[0]), _buffer.size() * sizeof(_buffer[0])); } } diff --git a/include/gz/common/Uuid.hh b/include/gz/common/Uuid.hh index 48a648c43..4eae6e934 100644 --- a/include/gz/common/Uuid.hh +++ b/include/gz/common/Uuid.hh @@ -32,12 +32,12 @@ using portable_uuid_t = uuid_t; #endif -namespace ignition +namespace gz { namespace common { /// \brief A portable class for representing a Universally Unique Identifier - class IGNITION_COMMON_VISIBLE Uuid + class GZ_COMMON_VISIBLE Uuid { /// \brief Constructor. public: Uuid(); @@ -53,7 +53,7 @@ namespace ignition /// \param[out] _out The output stream. /// \param[in] _msg AdvMsg to write to the stream. public: friend std::ostream &operator<<(std::ostream &_out, - const ignition::common::Uuid &_uuid) + const gz::common::Uuid &_uuid) { _out << _uuid.String(); return _out; diff --git a/include/gz/common/WorkerPool.hh b/include/gz/common/WorkerPool.hh index 6220cd0d8..43107f17c 100644 --- a/include/gz/common/WorkerPool.hh +++ b/include/gz/common/WorkerPool.hh @@ -24,7 +24,7 @@ #include <gz/utils/ImplPtr.hh> -namespace ignition +namespace gz { namespace common { @@ -32,7 +32,7 @@ namespace ignition class WorkerPoolPrivate; /// \brief A pool of worker threads that do stuff in parallel - class IGNITION_COMMON_VISIBLE WorkerPool + class GZ_COMMON_VISIBLE WorkerPool { /// \brief Creates worker threads. The number of worker threads is /// determined by max(std::thread::hardware_concurrency, _minThreadCount). diff --git a/include/gz/common/config.hh.in b/include/gz/common/config.hh.in index 8c408fde1..02415b0e5 100644 --- a/include/gz/common/config.hh.in +++ b/include/gz/common/config.hh.in @@ -1,13 +1,35 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + /* Config.hh. Generated by CMake for @PROJECT_NAME_NO_VERSION@. */ +#ifndef GZ_COMMON_CONFIG_HH_ +#define GZ_COMMON_CONFIG_HH_ + /* Version number */ -#define IGNITION_COMMON_MAJOR_VERSION ${PROJECT_VERSION_MAJOR} -#define IGNITION_COMMON_MINOR_VERSION ${PROJECT_VERSION_MINOR} -#define IGNITION_COMMON_PATCH_VERSION ${PROJECT_VERSION_PATCH} +#define GZ_COMMON_MAJOR_VERSION ${PROJECT_VERSION_MAJOR} +#define GZ_COMMON_MINOR_VERSION ${PROJECT_VERSION_MINOR} +#define GZ_COMMON_PATCH_VERSION ${PROJECT_VERSION_PATCH} -#define IGNITION_COMMON_VERSION "${PROJECT_VERSION}" -#define IGNITION_COMMON_VERSION_FULL "${PROJECT_VERSION_FULL}" +#define GZ_COMMON_VERSION "${PROJECT_VERSION}" +#define GZ_COMMON_VERSION_FULL "${PROJECT_VERSION_FULL}" -#define IGNITION_COMMON_VERSION_HEADER "Ignition common, version ${PROJECT_VERSION_FULL}\nCopyright (C) 2017 Open Source Robotics Foundation.\nReleased under the Apache 2.0 License.\n\n" +#define GZ_COMMON_VERSION_HEADER "Gazebo Common, version ${PROJECT_VERSION_FULL}\nCopyright (C) 2017 Open Source Robotics Foundation.\nReleased under the Apache 2.0 License.\n\n" #cmakedefine HAVE_AVDEVICE + +#endif diff --git a/include/gz/common/detail/TemplateHelpers.hh b/include/gz/common/detail/TemplateHelpers.hh index 332755ed8..954f53c43 100644 --- a/include/gz/common/detail/TemplateHelpers.hh +++ b/include/gz/common/detail/TemplateHelpers.hh @@ -22,7 +22,7 @@ #include <type_traits> -namespace ignition +namespace gz { namespace common { diff --git a/include/ignition/common.hh b/include/ignition/common.hh index 1c258c592..c97c90296 100644 --- a/include/ignition/common.hh +++ b/include/ignition/common.hh @@ -16,3 +16,4 @@ */ #include <gz/common.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/Base64.hh b/include/ignition/common/Base64.hh index c0eab4705..965123959 100644 --- a/include/ignition/common/Base64.hh +++ b/include/ignition/common/Base64.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Base64.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/Battery.hh b/include/ignition/common/Battery.hh index cf0552653..ba553f190 100644 --- a/include/ignition/common/Battery.hh +++ b/include/ignition/common/Battery.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Battery.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/Console.hh b/include/ignition/common/Console.hh index 572323350..51a4ae3bc 100644 --- a/include/ignition/common/Console.hh +++ b/include/ignition/common/Console.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Console.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/EnumIface.hh b/include/ignition/common/EnumIface.hh index 0a7a09313..69a3d3ba7 100644 --- a/include/ignition/common/EnumIface.hh +++ b/include/ignition/common/EnumIface.hh @@ -16,3 +16,4 @@ */ #include <gz/common/EnumIface.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/Export.hh b/include/ignition/common/Export.hh index a85faac65..bd4b88b6a 100644 --- a/include/ignition/common/Export.hh +++ b/include/ignition/common/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Export.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/Filesystem.hh b/include/ignition/common/Filesystem.hh index ac4537f7f..97561a9b8 100644 --- a/include/ignition/common/Filesystem.hh +++ b/include/ignition/common/Filesystem.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Filesystem.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/FlagSet.hh b/include/ignition/common/FlagSet.hh index db2f5e830..09c5c7b45 100644 --- a/include/ignition/common/FlagSet.hh +++ b/include/ignition/common/FlagSet.hh @@ -16,3 +16,4 @@ */ #include <gz/common/FlagSet.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/MaterialDensity.hh b/include/ignition/common/MaterialDensity.hh index d0461ff1d..6e68aedcc 100644 --- a/include/ignition/common/MaterialDensity.hh +++ b/include/ignition/common/MaterialDensity.hh @@ -16,3 +16,4 @@ */ #include <gz/common/MaterialDensity.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/MovingWindowFilter.hh b/include/ignition/common/MovingWindowFilter.hh index 462654c47..6f4414567 100644 --- a/include/ignition/common/MovingWindowFilter.hh +++ b/include/ignition/common/MovingWindowFilter.hh @@ -16,3 +16,4 @@ */ #include <gz/common/MovingWindowFilter.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/Plugin.hh b/include/ignition/common/Plugin.hh index a7f976dcd..d111fab5d 100644 --- a/include/ignition/common/Plugin.hh +++ b/include/ignition/common/Plugin.hh @@ -15,18 +15,18 @@ * */ - -#ifndef GZ_COMMON_PLUGIN_HH_ -#define GZ_COMMON_PLUGIN_HH_ +#ifndef IGNITION_COMMON_PLUGIN_HH_ +#define IGNITION_COMMON_PLUGIN_HH_ #include <memory> #include <map> #include <string> +#include <ignition/common/config.hh> #include <gz/common/Export.hh> #include <gz/utils/SuppressWarning.hh> -namespace ignition +namespace gz { namespace common { diff --git a/include/ignition/common/PluginInfo.hh b/include/ignition/common/PluginInfo.hh index aed2e3d1a..be8f060a7 100644 --- a/include/ignition/common/PluginInfo.hh +++ b/include/ignition/common/PluginInfo.hh @@ -15,16 +15,17 @@ * */ - -#ifndef GZ_COMMON_PLUGININFO_HH_ -#define GZ_COMMON_PLUGININFO_HH_ +#ifndef IGNITION_COMMON_PLUGININFO_HH_ +#define IGNITION_COMMON_PLUGININFO_HH_ #include <functional> #include <string> #include <unordered_map> + +#include <ignition/common/config.hh> #include <gz/common/Export.hh> -namespace ignition +namespace gz { namespace common { diff --git a/include/ignition/common/PluginLoader.hh b/include/ignition/common/PluginLoader.hh index e9c957479..ce19fd572 100644 --- a/include/ignition/common/PluginLoader.hh +++ b/include/ignition/common/PluginLoader.hh @@ -15,20 +15,20 @@ * */ - -#ifndef GZ_COMMON_PLUGINLOADER_HH_ -#define GZ_COMMON_PLUGINLOADER_HH_ +#ifndef IGNITION_COMMON_PLUGINLOADER_HH_ +#define IGNITION_COMMON_PLUGINLOADER_HH_ #include <memory> #include <string> #include <typeinfo> #include <unordered_set> +#include <ignition/common/config.hh> #include <gz/common/Export.hh> #include <ignition/common/PluginPtr.hh> #include <gz/utils/SuppressWarning.hh> -namespace ignition +namespace gz { namespace common { diff --git a/include/ignition/common/PluginMacros.hh b/include/ignition/common/PluginMacros.hh index 0b3ba7eeb..bb57121d1 100644 --- a/include/ignition/common/PluginMacros.hh +++ b/include/ignition/common/PluginMacros.hh @@ -16,9 +16,10 @@ */ -#ifndef GZ_COMMON_REGISTERMACROS_HH_ -#define GZ_COMMON_REGISTERMACROS_HH_ +#ifndef IGNITION_COMMON_REGISTERMACROS_HH_ +#define IGNITION_COMMON_REGISTERMACROS_HH_ +#include <ignition/common/config.hh> #include "ignition/common/detail/PluginMacros.hh" // Deprecated, use gz-plugin diff --git a/include/ignition/common/PluginPtr.hh b/include/ignition/common/PluginPtr.hh index 269c36460..97a697343 100644 --- a/include/ignition/common/PluginPtr.hh +++ b/include/ignition/common/PluginPtr.hh @@ -15,17 +15,17 @@ * */ - -#ifndef GZ_COMMON_PLUGINPTR_HH_ -#define GZ_COMMON_PLUGINPTR_HH_ +#ifndef IGNITION_COMMON_PLUGINPTR_HH_ +#define IGNITION_COMMON_PLUGINPTR_HH_ #include <map> #include <string> #include <memory> +#include <ignition/common/config.hh> #include "ignition/common/Plugin.hh" -namespace ignition +namespace gz { namespace common { @@ -34,7 +34,7 @@ namespace ignition namespace detail { template<class, class> class ComposePlugin; } /// \brief This class manages the lifecycle of a plugin instance. It can - /// receive a plugin instance from the ignition::common::PluginLoader class + /// receive a plugin instance from the gz::common::PluginLoader class /// or by copy-construction or assignment from another PluginPtr instance. /// /// This class behaves similarly to a std::shared_ptr where multiple diff --git a/include/ignition/common/SignalHandler.hh b/include/ignition/common/SignalHandler.hh index bb6c160bc..8c9fdcdb6 100644 --- a/include/ignition/common/SignalHandler.hh +++ b/include/ignition/common/SignalHandler.hh @@ -16,3 +16,4 @@ */ #include <gz/common/SignalHandler.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/SingletonT.hh b/include/ignition/common/SingletonT.hh index efea6e58f..4b5207ff0 100644 --- a/include/ignition/common/SingletonT.hh +++ b/include/ignition/common/SingletonT.hh @@ -16,3 +16,4 @@ */ #include <gz/common/SingletonT.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/SpecializedPlugin.hh b/include/ignition/common/SpecializedPlugin.hh index 3b4674ce4..1200e92fd 100644 --- a/include/ignition/common/SpecializedPlugin.hh +++ b/include/ignition/common/SpecializedPlugin.hh @@ -14,14 +14,13 @@ * limitations under the License. * */ -#ifndef GZ_COMMON_SPECIALIZEDPLUGIN_HH_ -#define GZ_COMMON_SPECIALIZEDPLUGIN_HH_ - -#include <memory> +#ifndef IGNITION_COMMON_SPECIALIZEDPLUGIN_HH_ +#define IGNITION_COMMON_SPECIALIZEDPLUGIN_HH_ +#include <ignition/common/config.hh> #include "ignition/common/Plugin.hh" -namespace ignition +namespace gz { namespace common { diff --git a/include/ignition/common/SpecializedPluginPtr.hh b/include/ignition/common/SpecializedPluginPtr.hh index 0a56dd3ab..938d92d86 100644 --- a/include/ignition/common/SpecializedPluginPtr.hh +++ b/include/ignition/common/SpecializedPluginPtr.hh @@ -15,14 +15,14 @@ * */ +#ifndef IGNITION_COMMON_SPECIALIZEDPLUGINPTR_HH_ +#define IGNITION_COMMON_SPECIALIZEDPLUGINPTR_HH_ -#ifndef GZ_COMMON_SPECIALIZEDPLUGINPTR_HH_ -#define GZ_COMMON_SPECIALIZEDPLUGINPTR_HH_ - +#include <ignition/common/config.hh> #include "ignition/common/PluginPtr.hh" #include "ignition/common/SpecializedPlugin.hh" -namespace ignition +namespace gz { namespace common { diff --git a/include/ignition/common/StringUtils.hh b/include/ignition/common/StringUtils.hh index 3c13cc94d..150263bca 100644 --- a/include/ignition/common/StringUtils.hh +++ b/include/ignition/common/StringUtils.hh @@ -16,3 +16,4 @@ */ #include <gz/common/StringUtils.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/SuppressWarning.hh b/include/ignition/common/SuppressWarning.hh index 84f6b7eec..c330c5f3c 100644 --- a/include/ignition/common/SuppressWarning.hh +++ b/include/ignition/common/SuppressWarning.hh @@ -16,3 +16,4 @@ */ #include <gz/common/SuppressWarning.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/SystemPaths.hh b/include/ignition/common/SystemPaths.hh index 9d138a40b..fd9a284c8 100644 --- a/include/ignition/common/SystemPaths.hh +++ b/include/ignition/common/SystemPaths.hh @@ -16,3 +16,4 @@ */ #include <gz/common/SystemPaths.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/TempDirectory.hh b/include/ignition/common/TempDirectory.hh index 17ea86f8e..33927ca6a 100644 --- a/include/ignition/common/TempDirectory.hh +++ b/include/ignition/common/TempDirectory.hh @@ -16,3 +16,4 @@ */ #include <gz/common/TempDirectory.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/TemplateHelpers.hh b/include/ignition/common/TemplateHelpers.hh index 5f2d84082..d0ec4c2c3 100644 --- a/include/ignition/common/TemplateHelpers.hh +++ b/include/ignition/common/TemplateHelpers.hh @@ -16,3 +16,4 @@ */ #include <gz/common/TemplateHelpers.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/Timer.hh b/include/ignition/common/Timer.hh index 7f3eb7149..60b28dba0 100644 --- a/include/ignition/common/Timer.hh +++ b/include/ignition/common/Timer.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Timer.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/URI.hh b/include/ignition/common/URI.hh index eddddf732..1c1544e4a 100644 --- a/include/ignition/common/URI.hh +++ b/include/ignition/common/URI.hh @@ -16,3 +16,4 @@ */ #include <gz/common/URI.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/Util.hh b/include/ignition/common/Util.hh index 28627d411..760930934 100644 --- a/include/ignition/common/Util.hh +++ b/include/ignition/common/Util.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Util.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/Uuid.hh b/include/ignition/common/Uuid.hh index 7a9db5b0e..b894b105b 100644 --- a/include/ignition/common/Uuid.hh +++ b/include/ignition/common/Uuid.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Uuid.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/WorkerPool.hh b/include/ignition/common/WorkerPool.hh index bd48b0b39..d77a01a41 100644 --- a/include/ignition/common/WorkerPool.hh +++ b/include/ignition/common/WorkerPool.hh @@ -16,3 +16,4 @@ */ #include <gz/common/WorkerPool.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/config.hh b/include/ignition/common/config.hh index 390857008..a4eeecbbb 100644 --- a/include/ignition/common/config.hh +++ b/include/ignition/common/config.hh @@ -15,4 +15,30 @@ * */ +#ifndef IGNITION_COMMON__CONFIG_HH_ +#define IGNITION_COMMON__CONFIG_HH_ + #include <gz/common/config.hh> + +#define IGNITION_COMMON_MAJOR_VERSION GZ_COMMON_MAJOR_VERSION +#define IGNITION_COMMON_MINOR_VERSION GZ_COMMON_MINOR_VERSION +#define IGNITION_COMMON_PATCH_VERSION GZ_COMMON_PATCH_VERSION + +#define IGNITION_COMMON_VERSION GZ_COMMON_VERSION +#define IGNITION_COMMON_VERSION_FULL GZ_COMMON_VERSION_FULL + +#define IGNITION_COMMON_VERSION_HEADER GZ_COMMON_VERSION_HEADER + +namespace gz +{ +} + +namespace ignition +{ + #ifndef SUPPRESS_IGNITION_HEADER_DEPRECATION + #pragma message("ignition namespace is deprecated! Use gz instead!") + #endif + using namespace gz; +} + +#endif diff --git a/include/ignition/common/detail/Export.hh b/include/ignition/common/detail/Export.hh index 2628774af..2a820a978 100644 --- a/include/ignition/common/detail/Export.hh +++ b/include/ignition/common/detail/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/detail/Export.hh> +#include <ignition/common/config.hh> diff --git a/include/ignition/common/detail/Plugin.hh b/include/ignition/common/detail/Plugin.hh index 7614addb1..3aa197b7e 100644 --- a/include/ignition/common/detail/Plugin.hh +++ b/include/ignition/common/detail/Plugin.hh @@ -15,15 +15,15 @@ * */ - -#ifndef GZ_COMMON_DETAIL_PLUGIN_HH_ -#define GZ_COMMON_DETAIL_PLUGIN_HH_ +#ifndef IGNITION_COMMON_DETAIL_PLUGIN_HH_ +#define IGNITION_COMMON_DETAIL_PLUGIN_HH_ #include <memory> #include <string> +#include <ignition/common/config.hh> #include "ignition/common/Plugin.hh" -namespace ignition +namespace gz { namespace common { diff --git a/include/ignition/common/detail/PluginLoader.hh b/include/ignition/common/detail/PluginLoader.hh index cb916d5ce..5e50cb28d 100644 --- a/include/ignition/common/detail/PluginLoader.hh +++ b/include/ignition/common/detail/PluginLoader.hh @@ -15,14 +15,14 @@ * */ - -#ifndef GZ_COMMON_DETAIL_PLUGINLOADER_HH_ -#define GZ_COMMON_DETAIL_PLUGINLOADER_HH_ +#ifndef IGNITION_COMMON_DETAIL_PLUGINLOADER_HH_ +#define IGNITION_COMMON_DETAIL_PLUGINLOADER_HH_ #include <string> +#include <ignition/common/config.hh> #include "ignition/common/PluginLoader.hh" -namespace ignition +namespace gz { namespace common { diff --git a/include/ignition/common/detail/PluginMacros.hh b/include/ignition/common/detail/PluginMacros.hh index 552fbf1e7..e185c4461 100644 --- a/include/ignition/common/detail/PluginMacros.hh +++ b/include/ignition/common/detail/PluginMacros.hh @@ -15,15 +15,15 @@ * */ - -#ifndef GZ_COMMON_DETAIL_PLUGINMACROS_HH_ -#define GZ_COMMON_DETAIL_PLUGINMACROS_HH_ +#ifndef IGNITION_COMMON_DETAIL_PLUGINMACROS_HH_ +#define IGNITION_COMMON_DETAIL_PLUGINMACROS_HH_ #include <string> #include <typeinfo> #include <type_traits> #include <unordered_set> #include <utility> +#include <ignition/common/config.hh> #include "ignition/common/PluginInfo.hh" #include "gz/utils/SuppressWarning.hh" @@ -51,13 +51,13 @@ #define DETAIL_IGN_COMMON_REGISTER_PLUGININFO_META_DATA \ extern "C" { \ std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoSize = \ - sizeof(ignition::common::PluginInfo); \ + sizeof(gz::common::PluginInfo); \ \ std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoAlignment = \ - alignof(ignition::common::PluginInfo); \ + alignof(gz::common::PluginInfo); \ \ int DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginAPIVersion = \ - ignition::common::PLUGIN_API_VERSION; \ + gz::common::PLUGIN_API_VERSION; \ } @@ -92,18 +92,18 @@ IGN_UTILS_WARN_IGNORE__NON_VIRTUAL_DESTRUCTOR \ const std::size_t _pluginId, \ const std::size_t _size) \ { \ - if (_size != sizeof(ignition::common::PluginInfo)) \ + if (_size != sizeof(gz::common::PluginInfo)) \ { \ return 0u; \ } \ std::unordered_set<std::string> visitedPlugins; \ - ignition::common::PluginInfo * * const ptrToPlugin = \ - reinterpret_cast<ignition::common::PluginInfo * *>(_outputInfo); \ + gz::common::PluginInfo * * const ptrToPlugin = \ + reinterpret_cast<gz::common::PluginInfo * *>(_outputInfo); \ if ( !(*ptrToPlugin) ) \ { \ - *ptrToPlugin = new ignition::common::PluginInfo; \ + *ptrToPlugin = new gz::common::PluginInfo; \ } \ - ignition::common::PluginInfo *plugin = *ptrToPlugin; \ + gz::common::PluginInfo *plugin = *ptrToPlugin; \ plugin->name.clear(); \ plugin->interfaces.clear(); \ plugin->factory = nullptr; \ diff --git a/include/ignition/common/detail/PluginPtr.hh b/include/ignition/common/detail/PluginPtr.hh index 5066679a4..533d95b29 100644 --- a/include/ignition/common/detail/PluginPtr.hh +++ b/include/ignition/common/detail/PluginPtr.hh @@ -15,16 +15,16 @@ * */ - -#ifndef GZ_COMMON_DETAIL_PLUGINPTR_HH_ -#define GZ_COMMON_DETAIL_PLUGINPTR_HH_ +#ifndef IGNITION_COMMON_DETAIL_PLUGINPTR_HH_ +#define IGNITION_COMMON_DETAIL_PLUGINPTR_HH_ #include <memory> #include <utility> +#include <ignition/common/config.hh> #include "ignition/common/PluginPtr.hh" #include "gz/common/TemplateHelpers.hh" -namespace ignition +namespace gz { namespace common { @@ -185,10 +185,10 @@ namespace std /// so that it can easily be used in STL objects like std::unordered_set and /// std::unordered_map template <typename PluginType> - struct hash<ignition::common::TemplatePluginPtr<PluginType>> + struct hash<gz::common::TemplatePluginPtr<PluginType>> { size_t operator()( - const ignition::common::TemplatePluginPtr<PluginType> &ptr) const + const gz::common::TemplatePluginPtr<PluginType> &ptr) const { return ptr.Hash(); } diff --git a/include/ignition/common/detail/SpecializedPlugin.hh b/include/ignition/common/detail/SpecializedPlugin.hh index eab28e87e..2a2e7ba6f 100644 --- a/include/ignition/common/detail/SpecializedPlugin.hh +++ b/include/ignition/common/detail/SpecializedPlugin.hh @@ -15,10 +15,10 @@ * */ +#ifndef IGNITION_COMMON_DETAIL_SPECIALIZEDPLUGIN_HH_ +#define IGNITION_COMMON_DETAIL_SPECIALIZEDPLUGIN_HH_ -#ifndef GZ_COMMON_DETAIL_SPECIALIZEDPLUGIN_HH_ -#define GZ_COMMON_DETAIL_SPECIALIZEDPLUGIN_HH_ - +#include <ignition/common/config.hh> #include "ignition/common/SpecializedPlugin.hh" #include <memory> @@ -30,7 +30,7 @@ bool usedSpecializedInterfaceAccess; #endif -namespace ignition +namespace gz { namespace common { @@ -253,7 +253,7 @@ namespace ignition // Declare friendship - template <class...> friend class ignition::common::SpecializedPlugin; + template <class...> friend class gz::common::SpecializedPlugin; template <class, class> friend class ComposePlugin; private: ComposePlugin() = default; diff --git a/include/ignition/common/detail/TemplateHelpers.hh b/include/ignition/common/detail/TemplateHelpers.hh index 5b8927205..e00285988 100644 --- a/include/ignition/common/detail/TemplateHelpers.hh +++ b/include/ignition/common/detail/TemplateHelpers.hh @@ -16,3 +16,4 @@ */ #include <gz/common/detail/TemplateHelpers.hh> +#include <ignition/common/config.hh> diff --git a/profiler/include/gz/common/Profiler.hh b/profiler/include/gz/common/Profiler.hh index c2d0e9dac..e5add1a03 100644 --- a/profiler/include/gz/common/Profiler.hh +++ b/profiler/include/gz/common/Profiler.hh @@ -25,7 +25,7 @@ #include <gz/common/SingletonT.hh> #include <gz/common/config.hh> -namespace ignition +namespace gz { namespace common { @@ -53,7 +53,7 @@ namespace ignition /// * IGN_PROFILE_END - End a named profile sample /// * IGN_PROFILE - RAII-style profile sample. The sample will end at the /// end of the current scope. - class IGNITION_COMMON_PROFILER_VISIBLE Profiler + class GZ_COMMON_PROFILER_VISIBLE Profiler : public virtual SingletonT<Profiler> { /// \brief Constructor @@ -102,7 +102,7 @@ namespace ignition /// \brief Used to provide C++ RAII-style profiling sample. /// The sample will start on the construction of the `ScopedProfile` object /// and stop when the object leaves scope. - class IGNITION_COMMON_PROFILER_VISIBLE ScopedProfile + class GZ_COMMON_PROFILER_VISIBLE ScopedProfile { /// \brief Constructor. Starts profile sample. /// \param[in] _name Name of the sample @@ -130,21 +130,21 @@ namespace ignition #if IGN_PROFILER_ENABLE /// \brief Set name of profiled thread #define IGN_PROFILE_THREAD_NAME(name) \ - ignition::common::Profiler::Instance()->SetThreadName(name); + gz::common::Profiler::Instance()->SetThreadName(name); /// \brief Log profiling text, if supported by implementation #define IGN_PROFILE_LOG_TEXT(name) \ - ignition::common::Profiler::Instance()->LogText(name); + gz::common::Profiler::Instance()->LogText(name); /// \brief Being profiling sample #define IGN_PROFILE_BEGIN(name) \ - ignition::common::Profiler::Instance()->BeginSample(name) + gz::common::Profiler::Instance()->BeginSample(name) /// \brief End profiling sample #define IGN_PROFILE_END() \ - ignition::common::Profiler::Instance()->EndSample() + gz::common::Profiler::Instance()->EndSample() /// \brief Convenience wrapper for scoped profiling sample. Use IGN_PROFILE #define IGN_PROFILE_L(name, line) \ static uint32_t __hash##line = 0; \ -ignition::common::ScopedProfile __profile##line(name, &__hash##line); +gz::common::ScopedProfile __profile##line(name, &__hash##line); /// \brief Scoped profiling sample. Sample will stop at end of scope. #define IGN_PROFILE(name) IGN_PROFILE_L(name, __LINE__); @@ -160,6 +160,6 @@ ignition::common::ScopedProfile __profile##line(name, &__hash##line); /// \brief Macro to determine if profiler is enabled and has an implementation. #define IGN_PROFILER_VALID \ - IGN_PROFILER_ENABLE && ignition::common::Profiler::Instance()->Valid() + IGN_PROFILER_ENABLE && gz::common::Profiler::Instance()->Valid() #endif // GZ_COMMON_PROFILER_HH_ diff --git a/profiler/include/ignition/common/Profiler.hh b/profiler/include/ignition/common/Profiler.hh index 4205134f9..6b35d68c5 100644 --- a/profiler/include/ignition/common/Profiler.hh +++ b/profiler/include/ignition/common/Profiler.hh @@ -16,3 +16,4 @@ */ #include <gz/common/Profiler.hh> +#include <ignition/common/config.hh> diff --git a/profiler/include/ignition/common/profiler/Export.hh b/profiler/include/ignition/common/profiler/Export.hh index 5f69bb544..a807b235c 100644 --- a/profiler/include/ignition/common/profiler/Export.hh +++ b/profiler/include/ignition/common/profiler/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/profiler/Export.hh> +#include <ignition/common/config.hh> diff --git a/profiler/include/ignition/common/profiler/detail/Export.hh b/profiler/include/ignition/common/profiler/detail/Export.hh index 911e1c844..d9c731ec8 100644 --- a/profiler/include/ignition/common/profiler/detail/Export.hh +++ b/profiler/include/ignition/common/profiler/detail/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/profiler/detail/Export.hh> +#include <ignition/common/config.hh> diff --git a/profiler/src/Profiler.cc b/profiler/src/Profiler.cc index 333eb13ef..f53cd6ef5 100644 --- a/profiler/src/Profiler.cc +++ b/profiler/src/Profiler.cc @@ -14,8 +14,8 @@ * limitations under the License. * */ -#include "ignition/common/Profiler.hh" // NOLINT(*) -#include "ignition/common/Console.hh" +#include "gz/common/Profiler.hh" // NOLINT(*) +#include "gz/common/Console.hh" #include "ProfilerImpl.hh" @@ -23,7 +23,7 @@ #include "RemoteryProfilerImpl.hh" #endif // IGN_PROFILER_REMOTERY -using namespace ignition; +using namespace gz; using namespace common; ////////////////////////////////////////////////// @@ -36,12 +36,12 @@ Profiler::Profiler(): if (this->impl == nullptr) { - ignwarn << "No profiler implementation detected, profiling is disabled" + gzwarn << "No profiler implementation detected, profiling is disabled" << std::endl; } else { - igndbg << "Ignition profiling with: " << impl->Name() << std::endl; + gzdbg << "Ignition profiling with: " << impl->Name() << std::endl; } } diff --git a/profiler/src/ProfilerImpl.hh b/profiler/src/ProfilerImpl.hh index 3d910fec6..1df029342 100644 --- a/profiler/src/ProfilerImpl.hh +++ b/profiler/src/ProfilerImpl.hh @@ -15,12 +15,12 @@ * */ -#ifndef IGNITION_COMMON_PROFILERIMPL_HH_ -#define IGNITION_COMMON_PROFILERIMPL_HH_ +#ifndef GZ_COMMON_PROFILERIMPL_HH_ +#define GZ_COMMON_PROFILERIMPL_HH_ #include <string> -namespace ignition +namespace gz { namespace common { @@ -61,4 +61,4 @@ namespace ignition } } -#endif // IGNITION_COMMON_PROFILERIMPL_HH_ +#endif // GZ_COMMON_PROFILERIMPL_HH_ diff --git a/profiler/src/Profiler_Disabled_TEST.cc b/profiler/src/Profiler_Disabled_TEST.cc index 2b8a53449..321b7c765 100644 --- a/profiler/src/Profiler_Disabled_TEST.cc +++ b/profiler/src/Profiler_Disabled_TEST.cc @@ -15,14 +15,14 @@ * */ -#include "ignition/common/Profiler.hh" // NOLINT(*) +#include "gz/common/Profiler.hh" // NOLINT(*) #include <gtest/gtest.h> // NOLINT(*) #include <atomic> // NOLINT(*) #include <thread> // NOLINT(*) -#include "ignition/common/Util.hh" // NOLINT(*) +#include "gz/common/Util.hh" // NOLINT(*) -using namespace ignition; +using namespace gz; using namespace common; ///////////////////////////////////////////////// diff --git a/profiler/src/Profiler_Remotery_TEST.cc b/profiler/src/Profiler_Remotery_TEST.cc index 36cef9ee5..e0b357655 100644 --- a/profiler/src/Profiler_Remotery_TEST.cc +++ b/profiler/src/Profiler_Remotery_TEST.cc @@ -15,14 +15,14 @@ * */ -#include "ignition/common/Profiler.hh" // NOLINT(*) +#include "gz/common/Profiler.hh" // NOLINT(*) #include <gtest/gtest.h> // NOLINT(*) #include <atomic> // NOLINT(*) #include <thread> // NOLINT(*) -#include "ignition/common/Util.hh" // NOLINT(*) +#include "gz/common/Util.hh" // NOLINT(*) -using namespace ignition; +using namespace gz; using namespace common; ///////////////////////////////////////////////// diff --git a/profiler/src/RemoteryProfilerImpl.cc b/profiler/src/RemoteryProfilerImpl.cc index c78bdf0a9..57b978ffe 100644 --- a/profiler/src/RemoteryProfilerImpl.cc +++ b/profiler/src/RemoteryProfilerImpl.cc @@ -15,13 +15,13 @@ * */ -#include "ignition/common/config.hh" +#include "gz/common/config.hh" #include "RemoteryProfilerImpl.hh" -#include "ignition/common/Console.hh" -#include "ignition/common/Util.hh" +#include "gz/common/Console.hh" +#include "gz/common/Util.hh" -using namespace ignition; +using namespace gz; using namespace common; std::string rmtErrorToString(rmtError error) { @@ -184,14 +184,14 @@ RemoteryProfilerImpl::RemoteryProfilerImpl() static_cast<RemoteryProfilerImpl *>(_context)->HandleInput(_text); }; - igndbg << "Starting ign-common profiler impl: Remotery" << + gzdbg << "Starting ign-common profiler impl: Remotery" << " (port: " << this->settings->port << ")" << std::endl; rmtError error; error = rmt_CreateGlobalInstance(&this->rmt); if (RMT_ERROR_NONE != error) { - ignerr << "Error launching Remotery: " << + gzerr << "Error launching Remotery: " << rmtErrorToString(error) << std::endl; this->rmt = nullptr; } diff --git a/profiler/src/RemoteryProfilerImpl.hh b/profiler/src/RemoteryProfilerImpl.hh index 9c271feda..bc262be5b 100644 --- a/profiler/src/RemoteryProfilerImpl.hh +++ b/profiler/src/RemoteryProfilerImpl.hh @@ -15,8 +15,8 @@ * */ -#ifndef IGNITION_COMMON_REMOTERYPROFILERIMPL_HH_ -#define IGNITION_COMMON_REMOTERYPROFILERIMPL_HH_ +#ifndef GZ_COMMON_REMOTERYPROFILERIMPL_HH_ +#define GZ_COMMON_REMOTERYPROFILERIMPL_HH_ #include <string> @@ -25,7 +25,7 @@ #include "ProfilerImpl.hh" -namespace ignition +namespace gz { namespace common { @@ -89,4 +89,4 @@ namespace ignition } } -#endif // IGNITION_COMMON_PROFILERIMPL_HH_ +#endif // GZ_COMMON_PROFILERIMPL_HH_ diff --git a/src/Base64.cc b/src/Base64.cc index d82905fda..c3bcc622d 100644 --- a/src/Base64.cc +++ b/src/Base64.cc @@ -39,12 +39,12 @@ RenΓ© Nyffenegger rene.nyffenegger@adp-gmbh.ch */ -#include "ignition/common/Base64.hh" +#include "gz/common/Base64.hh" #include <algorithm> #include <cstring> #include <iostream> -using namespace ignition; +using namespace gz; using namespace common; static const char base64Chars[] = diff --git a/src/Base64_TEST.cc b/src/Base64_TEST.cc index 214bcd356..273b79d38 100644 --- a/src/Base64_TEST.cc +++ b/src/Base64_TEST.cc @@ -16,11 +16,11 @@ */ #include <gtest/gtest.h> #include <string> -#include <ignition/common/Base64.hh> +#include <gz/common/Base64.hh> -#include "ignition/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/AutoLogFixture.hh" -using namespace ignition; +using namespace gz; class Base64 : public common::testing::AutoLogFixture { }; diff --git a/src/Battery.cc b/src/Battery.cc index a5530773e..2798fcf25 100644 --- a/src/Battery.cc +++ b/src/Battery.cc @@ -17,14 +17,14 @@ #include <cmath> -#include <ignition/common/Console.hh> -#include <ignition/common/Battery.hh> +#include <gz/common/Console.hh> +#include <gz/common/Battery.hh> -using namespace ignition; +using namespace gz; using namespace common; /// \brief Private data for the Battery class -class ignition::common::Battery::Implementation +class gz::common::Battery::Implementation { /// \brief Initial voltage in volts. public: double initVoltage = 0.0; @@ -51,7 +51,7 @@ class ignition::common::Battery::Implementation ///////////////////////////////////////////////// Battery::Battery() - : dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) + : dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { this->SetUpdateFunc(std::bind(&Battery::UpdateDefault, this, std::placeholders::_1)); @@ -199,7 +199,7 @@ bool Battery::RemoveConsumer(uint32_t _consumerId) } else { - ignerr << "Invalid battery consumer id[" << _consumerId << "]\n"; + gzerr << "Invalid battery consumer id[" << _consumerId << "]\n"; return false; } } @@ -211,7 +211,7 @@ bool Battery::SetPowerLoad(const uint32_t _consumerId, const double _powerLoad) auto iter = this->dataPtr->powerLoads.find(_consumerId); if (iter == this->dataPtr->powerLoads.end()) { - ignerr << "Invalid param value[_consumerId] : " << _consumerId << "\n"; + gzerr << "Invalid param value[_consumerId] : " << _consumerId << "\n"; return false; } @@ -226,7 +226,7 @@ bool Battery::PowerLoad(const uint32_t _consumerId, double &_powerLoad) const auto iter = this->dataPtr->powerLoads.find(_consumerId); if (iter == this->dataPtr->powerLoads.end()) { - ignerr << "Invalid param value[_consumerId] : " << _consumerId << "\n"; + gzerr << "Invalid param value[_consumerId] : " << _consumerId << "\n"; return false; } diff --git a/src/Battery_TEST.cc b/src/Battery_TEST.cc index 718f89b3e..d091bb1f1 100644 --- a/src/Battery_TEST.cc +++ b/src/Battery_TEST.cc @@ -18,10 +18,10 @@ #include <memory> -#include "ignition/common/Battery.hh" -#include "ignition/common/testing/AutoLogFixture.hh" +#include "gz/common/Battery.hh" +#include "gz/common/testing/AutoLogFixture.hh" -using namespace ignition; +using namespace gz; class BatteryTest : public common::testing::AutoLogFixture { }; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ba3999469..7573b5d35 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -24,7 +24,7 @@ target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} ) # This is required by the WorkerPool::WaitForResults(const Time &_timeout) -# TODO(anyone): IGN_DEPRECATED(4). Remove this part when the method is removed +# TODO(anyone): GZ_DEPRECATED(4). Remove this part when the method is removed target_include_directories(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE ${ignition-math${IGN_MATH_VER}_INCLUDE_DIRS}) @@ -74,7 +74,7 @@ if(WIN32) message(STATUS "You have opted to enable symlink tests on a Windows platform.") message(STATUS "The test UNIT_Filesystem_TEST will require elevated privileges") message(STATUS "in order to succeed. For more information, see the issue") - message(STATUS "https://github.com/ignitionrobotics/ign-common/issues/21") + message(STATUS "https://github.com/gazebosim/gz-common/issues/21") message(STATUS "") target_compile_definitions(UNIT_Filesystem_TEST PRIVATE IGN_BUILD_SYMLINK_TESTS_ON_WINDOWS) endif() diff --git a/src/Console.cc b/src/Console.cc index 2f81fdcef..7d4a1d476 100644 --- a/src/Console.cc +++ b/src/Console.cc @@ -17,18 +17,18 @@ #include <string> #include <sstream> -#include <ignition/common/Console.hh> -#include <ignition/common/config.hh> +#include <gz/common/Console.hh> +#include <gz/common/config.hh> #ifdef _WIN32 #include <Windows.h> #endif -using namespace ignition; +using namespace gz; using namespace common; -FileLogger ignition::common::Console::log(""); +FileLogger gz::common::Console::log(""); // On UNIX, these are ANSI-based color codes. On Windows, these are colors from // docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences . @@ -87,7 +87,7 @@ Logger::~Logger() ///////////////////////////////////////////////// Logger &Logger::operator()() { - Console::log() << "(" << ignition::common::systemTimeIso() << ") "; + Console::log() << "(" << gz::common::systemTimeIso() << ") "; (*this) << Console::Prefix() << this->prefix; return (*this); @@ -98,7 +98,7 @@ Logger &Logger::operator()(const std::string &_file, int _line) { int index = _file.find_last_of("/") + 1; - Console::log() << "(" << ignition::common::systemTimeIso() << ") "; + Console::log() << "(" << gz::common::systemTimeIso() << ") "; std::stringstream prefixString; prefixString << Console::Prefix() << this->prefix << "[" << _file.substr(index , _file.size() - index) << ":" @@ -306,7 +306,7 @@ FileLogger &FileLogger::operator()() if (!this->initialized) this->Init(".ignition", "auto_default.log"); - (*this) << "(" << ignition::common::systemTimeIso() << ") "; + (*this) << "(" << gz::common::systemTimeIso() << ") "; return (*this); } @@ -317,7 +317,7 @@ FileLogger &FileLogger::operator()(const std::string &_file, int _line) this->Init(".ignition", "auto_default.log"); int index = _file.find_last_of("/") + 1; - (*this) << "(" << ignition::common::systemTimeIso() << ") [" + (*this) << "(" << gz::common::systemTimeIso() << ") [" << _file.substr(index , _file.size() - index) << ":" << _line << "]"; return (*this); diff --git a/src/Console_TEST.cc b/src/Console_TEST.cc index 7f13ab89a..e8585a986 100644 --- a/src/Console_TEST.cc +++ b/src/Console_TEST.cc @@ -18,13 +18,13 @@ #include <gtest/gtest.h> #include <stdlib.h> -#include "ignition/common/Console.hh" -#include "ignition/common/Filesystem.hh" -#include "ignition/common/TempDirectory.hh" -#include "ignition/common/Util.hh" +#include "gz/common/Console.hh" +#include "gz/common/Filesystem.hh" +#include "gz/common/TempDirectory.hh" +#include "gz/common/Util.hh" -using namespace ignition; -using namespace ignition::common; +using namespace gz; +using namespace gz::common; const int g_messageRepeat = 4; @@ -40,8 +40,8 @@ class Console_TEST : public ::testing::Test { /// \brief Clear out all the directories we produced during this test. public: virtual void TearDown() { - ignLogClose(); - EXPECT_TRUE(ignition::common::unsetenv(IGN_HOMEDIR)); + gzLogClose(); + EXPECT_TRUE(gz::common::unsetenv(IGN_HOMEDIR)); } /// \brief Temporary directory to run test in @@ -52,9 +52,9 @@ std::string GetLogContent(const std::string &_filename) { // Get the absolute path std::string path; - EXPECT_TRUE(ignition::common::env(IGN_HOMEDIR, path)); - path = ignition::common::joinPaths(path, _filename); - EXPECT_TRUE(ignition::common::exists(path)); + EXPECT_TRUE(gz::common::env(IGN_HOMEDIR, path)); + path = gz::common::joinPaths(path, _filename); + EXPECT_TRUE(gz::common::exists(path)); // Open the log file, and read back the string std::ifstream ifs(path.c_str(), std::ios::in); @@ -76,7 +76,7 @@ TEST_F(Console_TEST, NoInitAndLog) { // Log the string std::string logString = "this is a test"; - ignlog << logString << std::endl; + gzlog << logString << std::endl; // Get the absolute log file path std::string logPath = ".ignition/auto_default.log"; @@ -85,11 +85,11 @@ TEST_F(Console_TEST, NoInitAndLog) EXPECT_TRUE(GetLogContent(logPath).find(logString) != std::string::npos); // Cleanup - ignLogClose(); + gzLogClose(); std::string path; - EXPECT_TRUE(ignition::common::env(IGN_HOMEDIR, path)); - path = ignition::common::joinPaths(path, logPath); - EXPECT_TRUE(ignition::common::removeAll(path)); + EXPECT_TRUE(gz::common::env(IGN_HOMEDIR, path)); + path = gz::common::joinPaths(path, logPath); + EXPECT_TRUE(gz::common::removeAll(path)); } ///////////////////////////////////////////////// @@ -97,29 +97,29 @@ TEST_F(Console_TEST, NoInitAndLog) TEST_F(Console_TEST, InitAndLog) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); // Log the string std::string logString = "this is a test"; - ignlog << logString << std::endl; + gzlog << logString << std::endl; // Get the absolute path std::string basePath; - EXPECT_TRUE(ignition::common::env(IGN_HOMEDIR, basePath)); - basePath = ignition::common::joinPaths(basePath, path); + EXPECT_TRUE(gz::common::env(IGN_HOMEDIR, basePath)); + basePath = gz::common::joinPaths(basePath, path); // Get the absolute log file path - std::string logPath = ignition::common::joinPaths(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); // Expect to find the string in the log file EXPECT_TRUE(GetLogContent(logPath).find(logString) != std::string::npos); // Cleanup - ignLogClose(); - EXPECT_TRUE(ignition::common::removeAll(basePath)); + gzLogClose(); + EXPECT_TRUE(gz::common::removeAll(basePath)); } ////////////////////////////////////////////////// @@ -127,19 +127,19 @@ TEST_F(Console_TEST, InitAndLog) TEST_F(Console_TEST, LogSlashN) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); // Get the absolute log file path - std::string logPath = ignition::common::joinPaths(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); std::string logString = "this is a log test"; for (int i = 0; i < g_messageRepeat; ++i) { - ignlog << logString << " _n__ " << i << '\n'; + gzlog << logString << " _n__ " << i << '\n'; } std::string logContent = GetLogContent(logPath); @@ -157,19 +157,19 @@ TEST_F(Console_TEST, LogSlashN) TEST_F(Console_TEST, LogStdEndl) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); // Get the absolute log file path - std::string logPath = ignition::common::joinPaths(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); std::string logString = "this is a log test"; for (int i = 0; i < g_messageRepeat; ++i) { - ignlog << logString << " endl " << i << std::endl; + gzlog << logString << " endl " << i << std::endl; } std::string logContent = GetLogContent(logPath); @@ -187,19 +187,19 @@ TEST_F(Console_TEST, LogStdEndl) TEST_F(Console_TEST, ColorWarnSlashN) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); // Get the absolute log file path - std::string logPath = ignition::common::joinPaths(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); std::string logString = "this is a warning test"; for (int i = 0; i < g_messageRepeat; ++i) { - ignwarn << logString << " _n__ " << i << '\n'; + gzwarn << logString << " _n__ " << i << '\n'; } std::string logContent = GetLogContent(logPath); @@ -217,19 +217,19 @@ TEST_F(Console_TEST, ColorWarnSlashN) TEST_F(Console_TEST, ColorWarnStdEndl) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); // Get the absolute log file path - std::string logPath = ignition::common::joinPaths(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); std::string logString = "this is a warning test"; for (int i = 0; i < g_messageRepeat; ++i) { - ignwarn << logString << " endl " << i << std::endl; + gzwarn << logString << " endl " << i << std::endl; } std::string logContent = GetLogContent(logPath); @@ -247,19 +247,19 @@ TEST_F(Console_TEST, ColorWarnStdEndl) TEST_F(Console_TEST, ColorDbgSlashN) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); // Get the absolute log file path - std::string logPath = ignition::common::joinPaths(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); std::string logString = "this is a dbg test"; for (int i = 0; i < g_messageRepeat; ++i) { - igndbg << logString << " _n__ " << i << '\n'; + gzdbg << logString << " _n__ " << i << '\n'; } std::string logContent = GetLogContent(logPath); @@ -277,19 +277,19 @@ TEST_F(Console_TEST, ColorDbgSlashN) TEST_F(Console_TEST, ColorDbgStdEndl) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); // Get the absolute log file path - std::string logPath = ignition::common::joinPaths(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); std::string logString = "this is a dbg test"; for (int i = 0; i < g_messageRepeat; ++i) { - igndbg << logString << " endl " << i << std::endl; + gzdbg << logString << " endl " << i << std::endl; } std::string logContent = GetLogContent(logPath); @@ -307,19 +307,19 @@ TEST_F(Console_TEST, ColorDbgStdEndl) TEST_F(Console_TEST, ColorMsgSlashN) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); // Get the absolute log file path - std::string logPath = ignition::common::joinPaths(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); std::string logString = "this is a msg test"; for (int i = 0; i < g_messageRepeat; ++i) { - ignmsg << logString << " _n__ " << i << '\n'; + gzmsg << logString << " _n__ " << i << '\n'; } std::string logContent = GetLogContent(logPath); @@ -337,19 +337,19 @@ TEST_F(Console_TEST, ColorMsgSlashN) TEST_F(Console_TEST, ColorMsgStdEndl) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); // Get the absolute log file path - std::string logPath = ignition::common::joinPaths(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); std::string logString = "this is a msg test"; for (int i = 0; i < g_messageRepeat; ++i) { - ignmsg << logString << " endl " << i << std::endl; + gzmsg << logString << " endl " << i << std::endl; } std::string logContent = GetLogContent(logPath); @@ -367,19 +367,19 @@ TEST_F(Console_TEST, ColorMsgStdEndl) TEST_F(Console_TEST, ColorErrSlashN) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); // Get the absolute log file path - std::string logPath = ignition::common::joinPaths(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); std::string logString = "this is an error test"; for (int i = 0; i < g_messageRepeat; ++i) { - ignerr << logString << " _n__ " << i << '\n'; + gzerr << logString << " _n__ " << i << '\n'; } std::string logContent = GetLogContent(logPath); @@ -397,19 +397,19 @@ TEST_F(Console_TEST, ColorErrSlashN) TEST_F(Console_TEST, ColorErrStdEndl) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); // Get the absolute log file path - std::string logPath = ignition::common::joinPaths(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); std::string logString = "this is an error test"; for (int i = 0; i < g_messageRepeat; ++i) { - ignerr << logString << " endl " << i << std::endl; + gzerr << logString << " endl " << i << std::endl; } std::string logContent = GetLogContent(logPath); @@ -427,17 +427,17 @@ TEST_F(Console_TEST, ColorErrStdEndl) TEST_F(Console_TEST, ColorMsg) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); // Get the absolute log file path - std::string logPath = ignition::common::joinPaths(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); std::string logString = "this is a msg test"; - ignmsg << logString << std::endl; + gzmsg << logString << std::endl; std::string logContent = GetLogContent(logPath); @@ -449,17 +449,17 @@ TEST_F(Console_TEST, ColorMsg) TEST_F(Console_TEST, ColorErr) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); // Get the absolute log file path - std::string logPath = ignition::common::joinPaths(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); std::string logString = "this is an error test"; - ignerr << logString << std::endl; + gzerr << logString << std::endl; std::string logContent = GetLogContent(logPath); @@ -470,13 +470,13 @@ TEST_F(Console_TEST, ColorErr) /// \brief Test Console::Verbosity TEST_F(Console_TEST, Verbosity) { - EXPECT_EQ(ignition::common::Console::Verbosity(), 1); + EXPECT_EQ(gz::common::Console::Verbosity(), 1); - ignition::common::Console::SetVerbosity(2); - EXPECT_EQ(ignition::common::Console::Verbosity(), 2); + gz::common::Console::SetVerbosity(2); + EXPECT_EQ(gz::common::Console::Verbosity(), 2); - ignition::common::Console::SetVerbosity(-1); - EXPECT_EQ(ignition::common::Console::Verbosity(), -1); + gz::common::Console::SetVerbosity(-1); + EXPECT_EQ(gz::common::Console::Verbosity(), -1); } ///////////////////////////////////////////////// @@ -484,26 +484,26 @@ TEST_F(Console_TEST, Verbosity) TEST_F(Console_TEST, Prefix) { // Max verbosity - ignition::common::Console::SetVerbosity(4); + gz::common::Console::SetVerbosity(4); // Path to log file - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); - ignLogInit(path, "test.log"); - std::string logPath = ignition::common::joinPaths(path, "test.log"); + gzLogInit(path, "test.log"); + std::string logPath = gz::common::joinPaths(path, "test.log"); // Check default prefix - EXPECT_EQ(ignition::common::Console::Prefix(), ""); + EXPECT_EQ(gz::common::Console::Prefix(), ""); // Set new prefix - ignition::common::Console::SetPrefix("**test** "); - EXPECT_EQ(ignition::common::Console::Prefix(), "**test** "); + gz::common::Console::SetPrefix("**test** "); + EXPECT_EQ(gz::common::Console::Prefix(), "**test** "); // Use the console - ignerr << "error" << std::endl; - ignwarn << "warning" << std::endl; - ignmsg << "message" << std::endl; - igndbg << "debug" << std::endl; + gzerr << "error" << std::endl; + gzwarn << "warning" << std::endl; + gzmsg << "message" << std::endl; + gzdbg << "debug" << std::endl; // Get the logged content std::string logContent = GetLogContent(logPath); @@ -515,8 +515,8 @@ TEST_F(Console_TEST, Prefix) EXPECT_TRUE(logContent.find("**test** [Dbg]") != std::string::npos); // Reset - ignition::common::Console::SetPrefix(""); - EXPECT_EQ(ignition::common::Console::Prefix(), ""); + gz::common::Console::SetPrefix(""); + EXPECT_EQ(gz::common::Console::Prefix(), ""); } ///////////////////////////////////////////////// @@ -524,17 +524,17 @@ TEST_F(Console_TEST, Prefix) TEST_F(Console_TEST, LogDirectory) { // Create a unique directory path - auto path = ignition::common::uuid(); + auto path = gz::common::uuid(); // Initialize logging - ignLogInit(path, "test.log"); + gzLogInit(path, "test.log"); - std::string logDir = ignLogDirectory(); + std::string logDir = gzLogDirectory(); // Get the absolute path std::string absPath; - EXPECT_TRUE(ignition::common::env(IGN_HOMEDIR, absPath)); - absPath = ignition::common::joinPaths(absPath, path); + EXPECT_TRUE(gz::common::env(IGN_HOMEDIR, absPath)); + absPath = gz::common::joinPaths(absPath, path); EXPECT_EQ(logDir, absPath); } @@ -544,8 +544,8 @@ TEST_F(Console_TEST, LogDirectory) /// This specifically tests with an unset HOME variable TEST_F(Console_TEST, NoInitAndLogNoHome) { - ignLogClose(); - EXPECT_TRUE(ignition::common::unsetenv(IGN_HOMEDIR)); + gzLogClose(); + EXPECT_TRUE(gz::common::unsetenv(IGN_HOMEDIR)); // This should not throw - ignlog << "this is a test" << std::endl; + gzlog << "this is a test" << std::endl; } diff --git a/src/DirIter.cc b/src/DirIter.cc index d8b19ab90..732722754 100644 --- a/src/DirIter.cc +++ b/src/DirIter.cc @@ -17,11 +17,11 @@ #include <filesystem> -#include "ignition/common/Filesystem.hh" +#include "gz/common/Filesystem.hh" namespace fs = std::filesystem; -namespace ignition +namespace gz { namespace common { @@ -34,7 +34,7 @@ class DirIter::Implementation ////////////////////////////////////////////////// DirIter::DirIter(): - dataPtr(ignition::utils::MakeImpl<Implementation>()) + dataPtr(gz::utils::MakeImpl<Implementation>()) { this->dataPtr->it = fs::directory_iterator(); } @@ -72,4 +72,4 @@ bool DirIter::operator!=(const DirIter &_other) const } } // namespace common -} // namespace ignition +} // namespace gz diff --git a/src/EnumIface_TEST.cc b/src/EnumIface_TEST.cc index b5287736d..ea20da1a2 100644 --- a/src/EnumIface_TEST.cc +++ b/src/EnumIface_TEST.cc @@ -17,11 +17,11 @@ #include <gtest/gtest.h> -#include "ignition/common/EnumIface.hh" +#include "gz/common/EnumIface.hh" -#include "ignition/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/AutoLogFixture.hh" -using namespace ignition; +using namespace gz; class EnumIfaceTest : public common::testing::AutoLogFixture { }; diff --git a/src/Filesystem.cc b/src/Filesystem.cc index 2b1b26f68..e9dfaf88d 100644 --- a/src/Filesystem.cc +++ b/src/Filesystem.cc @@ -25,12 +25,12 @@ #include <cctype> #include <regex> -#include <ignition/common/config.hh> -#include <ignition/common/SystemPaths.hh> -#include <ignition/common/Util.hh> -#include <ignition/common/Uuid.hh> -#include <ignition/common/Console.hh> -#include "ignition/common/Filesystem.hh" +#include <gz/common/config.hh> +#include <gz/common/SystemPaths.hh> +#include <gz/common/Util.hh> +#include <gz/common/Uuid.hh> +#include <gz/common/Console.hh> +#include "gz/common/Filesystem.hh" namespace fs = std::filesystem; @@ -38,14 +38,14 @@ namespace fs = std::filesystem; // Return true if success, false if error inline bool fsWarn(const std::string &_fcn, const std::error_code &_ec, - const ignition::common::FilesystemWarningOp &_warningOp = - ignition::common::FSWO_LOG_WARNINGS) + const gz::common::FilesystemWarningOp &_warningOp = + gz::common::FSWO_LOG_WARNINGS) { if (_ec) { - if (ignition::common::FSWO_LOG_WARNINGS == _warningOp) + if (gz::common::FSWO_LOG_WARNINGS == _warningOp) { - ignwarn << "Failed ignition::common::" << _fcn + gzwarn << "Failed gz::common::" << _fcn << " (ec: " << _ec << " " << _ec.message() << ")\n"; } return false; @@ -54,31 +54,31 @@ inline bool fsWarn(const std::string &_fcn, } ///////////////////////////////////////////////// -bool ignition::common::exists(const std::string &_path) +bool gz::common::exists(const std::string &_path) { return fs::exists(_path); } ///////////////////////////////////////////////// -bool ignition::common::isDirectory(const std::string &_path) +bool gz::common::isDirectory(const std::string &_path) { return fs::is_directory(_path); } ///////////////////////////////////////////////// -bool ignition::common::isFile(const std::string &_path) +bool gz::common::isFile(const std::string &_path) { return fs::is_regular_file(_path); } ///////////////////////////////////////////////// -bool ignition::common::isRelativePath(const std::string &_path) +bool gz::common::isRelativePath(const std::string &_path) { return fs::path(_path).is_relative(); } ///////////////////////////////////////////////// -bool ignition::common::createDirectory(const std::string &_path) +bool gz::common::createDirectory(const std::string &_path) { std::error_code ec; fs::create_directory(_path, ec); @@ -86,7 +86,7 @@ bool ignition::common::createDirectory(const std::string &_path) } ///////////////////////////////////////////////// -bool ignition::common::createDirectories(const std::string &_path) +bool gz::common::createDirectories(const std::string &_path) { std::error_code ec; // Disregard return of create_directories, because it may return false if the @@ -97,19 +97,19 @@ bool ignition::common::createDirectories(const std::string &_path) } ///////////////////////////////////////////////// -std::string const ignition::common::separator(std::string const &_s) +std::string const gz::common::separator(std::string const &_s) { return _s + std::string{fs::path::preferred_separator}; } ///////////////////////////////////////////////// -void ignition::common::changeFromUnixPath(std::string &_path) { +void gz::common::changeFromUnixPath(std::string &_path) { std::replace(_path.begin(), _path.end(), '/', static_cast<char>(fs::path::preferred_separator)); } ///////////////////////////////////////////////// -std::string ignition::common::copyFromUnixPath(const std::string &_path) +std::string gz::common::copyFromUnixPath(const std::string &_path) { std::string copy = _path; changeFromUnixPath(copy); @@ -117,13 +117,13 @@ std::string ignition::common::copyFromUnixPath(const std::string &_path) } ///////////////////////////////////////////////// -void ignition::common::changeToUnixPath(std::string &_path) { +void gz::common::changeToUnixPath(std::string &_path) { std::replace(_path.begin(), _path.end(), static_cast<char>(fs::path::preferred_separator), '/'); } ///////////////////////////////////////////////// -std::string ignition::common::copyToUnixPath(const std::string &_path) +std::string gz::common::copyToUnixPath(const std::string &_path) { std::string copy = _path; changeToUnixPath(copy); @@ -131,13 +131,13 @@ std::string ignition::common::copyToUnixPath(const std::string &_path) } ///////////////////////////////////////////////// -std::string ignition::common::absPath(const std::string &_path) +std::string gz::common::absPath(const std::string &_path) { return fs::absolute(_path).string(); } ///////////////////////////////////////////////// -std::string ignition::common::joinPaths( +std::string gz::common::joinPaths( const std::string &_path1, const std::string &_path2) { fs::path p1{_path1}; @@ -145,7 +145,7 @@ std::string ignition::common::joinPaths( if (p1.empty()) { - p1 = ignition::common::separator(""); + p1 = gz::common::separator(""); } bool is_url = false; @@ -181,7 +181,7 @@ std::string ignition::common::joinPaths( } ///////////////////////////////////////////////// -std::string ignition::common::cwd() +std::string gz::common::cwd() { std::error_code ec; auto curdir = fs::current_path(ec); @@ -195,7 +195,7 @@ std::string ignition::common::cwd() } ///////////////////////////////////////////////// -bool ignition::common::chdir(const std::string &_dir) +bool gz::common::chdir(const std::string &_dir) { std::error_code ec; fs::current_path(_dir, ec); @@ -203,7 +203,7 @@ bool ignition::common::chdir(const std::string &_dir) } ///////////////////////////////////////////////// -std::string ignition::common::basename(const std::string &_path) +std::string gz::common::basename(const std::string &_path) { fs::path p(_path); p /= "FOO.TXT"; @@ -214,7 +214,7 @@ std::string ignition::common::basename(const std::string &_path) } ///////////////////////////////////////////////// -std::string ignition::common::parentPath(const std::string &_path) +std::string gz::common::parentPath(const std::string &_path) { std::string result; size_t last_sep = _path.find_last_of(separator("")); @@ -226,7 +226,7 @@ std::string ignition::common::parentPath(const std::string &_path) } ///////////////////////////////////////////////// -bool ignition::common::copyFile( +bool gz::common::copyFile( const std::string &_existingFilename, const std::string &_newFilename, const FilesystemWarningOp _warningOp) @@ -238,7 +238,7 @@ bool ignition::common::copyFile( } ///////////////////////////////////////////////// -bool ignition::common::copyDirectory( +bool gz::common::copyDirectory( const std::string &_existingDirname, const std::string &_newDirname, const FilesystemWarningOp _warningOp) @@ -248,7 +248,7 @@ bool ignition::common::copyDirectory( // std::filesystem won't create intermediate directories // before copying, this maintains compatibility with ignition behavior. - if (!ignition::common::createDirectories(_newDirname)) + if (!gz::common::createDirectories(_newDirname)) { return false; } @@ -259,7 +259,7 @@ bool ignition::common::copyDirectory( } ///////////////////////////////////////////////// -bool ignition::common::moveFile( +bool gz::common::moveFile( const std::string &_existingFilename, const std::string &_newFilename, const FilesystemWarningOp _warningOp) @@ -270,7 +270,7 @@ bool ignition::common::moveFile( } ///////////////////////////////////////////////// -bool ignition::common::removeDirectory( +bool gz::common::removeDirectory( const std::string &_path, const FilesystemWarningOp _warningOp) { @@ -278,7 +278,7 @@ bool ignition::common::removeDirectory( { if (FSWO_LOG_WARNINGS == _warningOp) { - ignwarn << "Cannot remove, not a directory [" << _path << "]\n"; + gzwarn << "Cannot remove, not a directory [" << _path << "]\n"; } return false; @@ -288,7 +288,7 @@ bool ignition::common::removeDirectory( } ///////////////////////////////////////////////// -bool ignition::common::removeFile( +bool gz::common::removeFile( const std::string &_existingFilename, const FilesystemWarningOp _warningOp) { @@ -296,7 +296,7 @@ bool ignition::common::removeFile( { if (FSWO_LOG_WARNINGS == _warningOp) { - ignwarn << "Cannot remove, not a file [" << _existingFilename << "]\n"; + gzwarn << "Cannot remove, not a file [" << _existingFilename << "]\n"; } return false; } @@ -305,7 +305,7 @@ bool ignition::common::removeFile( } ///////////////////////////////////////////////// -bool ignition::common::removeDirectoryOrFile( +bool gz::common::removeDirectoryOrFile( const std::string &_path, const FilesystemWarningOp _warningOp) { @@ -316,7 +316,7 @@ bool ignition::common::removeDirectoryOrFile( } ///////////////////////////////////////////////// -bool ignition::common::removeAll( +bool gz::common::removeAll( const std::string &_path, const FilesystemWarningOp _warningOp) { @@ -326,7 +326,7 @@ bool ignition::common::removeAll( } ///////////////////////////////////////////////// -std::string ignition::common::uniqueFilePath( +std::string gz::common::uniqueFilePath( const std::string &_pathAndName, const std::string &_extension) { @@ -344,7 +344,7 @@ std::string ignition::common::uniqueFilePath( } ///////////////////////////////////////////////// -std::string ignition::common::uniqueDirectoryPath(const std::string &_dir) +std::string gz::common::uniqueDirectoryPath(const std::string &_dir) { std::string result = _dir; int count = 1; diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index 2b0eb13c2..8bf81b0fd 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -17,14 +17,14 @@ #include <gtest/gtest.h> -#include <ignition/utils/ExtraTestMacros.hh> +#include <gz/utils/ExtraTestMacros.hh> -#include <ignition/common/Console.hh> -#include <ignition/common/Filesystem.hh> -#include <ignition/common/TempDirectory.hh> -#include <ignition/common/Util.hh> +#include <gz/common/Console.hh> +#include <gz/common/Filesystem.hh> +#include <gz/common/TempDirectory.hh> +#include <gz/common/Util.hh> -#include <ignition/common/testing/Utils.hh> +#include <gz/common/testing/Utils.hh> #include <filesystem> #include <fstream> @@ -34,7 +34,7 @@ #define BUILD_SYMLINK_TESTS #endif // _WIN32 -using namespace ignition; +using namespace gz; using namespace common; namespace fs = std::filesystem; @@ -58,7 +58,7 @@ bool create_new_file_symlink(const std::string &_symlink, } catch(const std::exception& e) { - ignerr << "Failed to create link: " << e.what() << '\n'; + gzerr << "Failed to create link: " << e.what() << '\n'; return false; } return true; @@ -74,7 +74,7 @@ bool create_new_dir_symlink(const std::string &_symlink, } catch(const std::exception& e) { - ignerr << "Failed to create link: " << e.what() << '\n'; + gzerr << "Failed to create link: " << e.what() << '\n'; return false; } return true; @@ -90,7 +90,7 @@ bool create_new_file_hardlink(const std::string &_hardlink, } catch(const std::exception& e) { - ignerr << "Failed to create link: " << e.what() << '\n'; + gzerr << "Failed to create link: " << e.what() << '\n'; return false; } return true; @@ -249,7 +249,7 @@ TEST_F(FilesystemTest, relative) // The symlink tests require special permissions to work on Windows, // so they will be disabled by default. For more information, see: -// https://github.com/ignitionrobotics/ign-common/issues/21 +// https://github.com/gazebosim/gz-common/issues/21 #ifdef BUILD_SYMLINK_TESTS ///////////////////////////////////////////////// TEST_F(FilesystemTest, symlink_exists) @@ -636,8 +636,8 @@ TEST_F(FilesystemTest, uniquePaths) TEST_F(FilesystemTest, separator) { #ifndef _WIN32 - EXPECT_EQ("/", ignition::common::separator("")); + EXPECT_EQ("/", gz::common::separator("")); #else - EXPECT_EQ("\\", ignition::common::separator("")); + EXPECT_EQ("\\", gz::common::separator("")); #endif } diff --git a/src/FlagSet_TEST.cc b/src/FlagSet_TEST.cc index 047b8ad63..0ef213995 100644 --- a/src/FlagSet_TEST.cc +++ b/src/FlagSet_TEST.cc @@ -23,12 +23,12 @@ * SOFTWARE. */ -// ignition::common::FlagSet is a type-safe class for using enums as flags in +// gz::common::FlagSet is a type-safe class for using enums as flags in // C++14 with an underlying std::bitset. // See https://github.com/mrts/flag-set-cpp // Licence: MIT -#include <ignition/common/FlagSet.hh> +#include <gz/common/FlagSet.hh> #include <cstdint> #include <unordered_set> @@ -66,7 +66,7 @@ enum class OptionsNoEnd : uint8_t TEST(FlagSet, TestAnd) { - ignition::common::FlagSet<Options> red( + gz::common::FlagSet<Options> red( Options::RED_FOREGROUND | Options::RED_BACKGROUND); auto result = red & Options::RED_BACKGROUND; @@ -85,26 +85,26 @@ TEST(FlagSet, TestAnd) EXPECT_FALSE(result); EXPECT_EQ(result.Count(), 0u); - ignition::common::FlagSet<Options> red_foreground(Options::RED_FOREGROUND); + gz::common::FlagSet<Options> red_foreground(Options::RED_FOREGROUND); red &= Options::RED_FOREGROUND; EXPECT_TRUE(red == red_foreground); } TEST(FlagSet, TestOr) { - ignition::common::FlagSet<Options> red; + gz::common::FlagSet<Options> red; red |= Options::RED_FOREGROUND | Options::RED_BACKGROUND; EXPECT_TRUE(red); EXPECT_EQ(red.Count(), 2u); - ignition::common::FlagSet<Options> options; + gz::common::FlagSet<Options> options; options |= (Options::FULLSCREEN | Options::FLASH); auto result = options & (Options::FULLSCREEN | Options::FLASH | Options::RED_FOREGROUND); EXPECT_TRUE(result); - ignition::common::FlagSet<Options> expected; + gz::common::FlagSet<Options> expected; expected |= Options::FULLSCREEN; EXPECT_EQ(options & expected, expected); @@ -122,7 +122,7 @@ TEST(FlagSet, TestOr) TEST(FlagSet, TestSetReset) { - ignition::common::FlagSet<Options> options; + gz::common::FlagSet<Options> options; EXPECT_EQ(options.Count(), 0u); options.Set(); @@ -147,7 +147,7 @@ TEST(FlagSet, TestSetReset) TEST(FlagSet, TestAnyAllNone) { - ignition::common::FlagSet<Options> options; + gz::common::FlagSet<Options> options; EXPECT_TRUE(options.None()); EXPECT_FALSE(options.Any()); EXPECT_FALSE(options.All()); @@ -181,7 +181,7 @@ TEST(FlagSet, TestAnyAllNone) TEST(FlagSet, TestConstructors) { - using namespace ignition::common; + using namespace gz::common; ASSERT_EQ(5u, FlagSet<Options>::numElements); @@ -204,19 +204,19 @@ TEST(FlagSet, TestConstructors) TEST(FlagSet, TestStaticConstructors) { - EXPECT_TRUE(ignition::common::FlagSet<Options>::AllSet().All()); - EXPECT_FALSE(ignition::common::FlagSet<Options>::AllSet().None()); - EXPECT_TRUE(ignition::common::FlagSet<Options>::AllSet().Any()); + EXPECT_TRUE(gz::common::FlagSet<Options>::AllSet().All()); + EXPECT_FALSE(gz::common::FlagSet<Options>::AllSet().None()); + EXPECT_TRUE(gz::common::FlagSet<Options>::AllSet().Any()); - EXPECT_FALSE(ignition::common::FlagSet<Options>::NoneSet().All()); - EXPECT_TRUE(ignition::common::FlagSet<Options>::NoneSet().None()); - EXPECT_FALSE(ignition::common::FlagSet<Options>::NoneSet().Any()); + EXPECT_FALSE(gz::common::FlagSet<Options>::NoneSet().All()); + EXPECT_TRUE(gz::common::FlagSet<Options>::NoneSet().None()); + EXPECT_FALSE(gz::common::FlagSet<Options>::NoneSet().Any()); } TEST(FlagSet, TestHash) { - using namespace ignition::common; + using namespace gz::common; const auto options1 = FlagSet<Options>::AllSet(); const auto options2 = FlagSet<Options>::NoneSet(); @@ -237,7 +237,7 @@ TEST(FlagSet, TestEnumWithoutUnderscore) { using ONU = OptionsNoUnderscore; - using TestSet = ignition::common::FlagSet<ONU, ONU::END>; + using TestSet = gz::common::FlagSet<ONU, ONU::END>; ASSERT_EQ(5u, TestSet::numElements); @@ -272,7 +272,7 @@ TEST(FlagSet, TestEnumWithoutEnd) { using ONE = OptionsNoEnd; - using TestSet = ignition::common::FlagSet<ONE, ONE::RED_FOREGROUND, false>; + using TestSet = gz::common::FlagSet<ONE, ONE::RED_FOREGROUND, false>; ASSERT_EQ(5u, TestSet::numElements); @@ -366,7 +366,7 @@ TEST(FlagSet, TestUnderlyingTypes) _ }; - using namespace ignition::common; + using namespace gz::common; EXPECT_TRUE(FlagSet<CharEnum>(CharEnum::A).All()); EXPECT_TRUE(FlagSet<UCharEnum>(UCharEnum::A).All()); diff --git a/src/MaterialDensity.cc b/src/MaterialDensity.cc index 485f12376..e899103f6 100644 --- a/src/MaterialDensity.cc +++ b/src/MaterialDensity.cc @@ -16,10 +16,10 @@ */ #include <cmath> #include <limits> -#include "ignition/common/EnumIface.hh" -#include "ignition/common/MaterialDensity.hh" +#include "gz/common/EnumIface.hh" +#include "gz/common/MaterialDensity.hh" -using namespace ignition; +using namespace gz; using namespace common; // Initialize enum iterator, and string converter diff --git a/src/MaterialDensity_TEST.cc b/src/MaterialDensity_TEST.cc index b364e3a67..7c2cdc9e3 100644 --- a/src/MaterialDensity_TEST.cc +++ b/src/MaterialDensity_TEST.cc @@ -16,10 +16,10 @@ */ #include <gtest/gtest.h> -#include "ignition/common/MaterialDensity.hh" -#include "ignition/common/testing/AutoLogFixture.hh" +#include "gz/common/MaterialDensity.hh" +#include "gz/common/testing/AutoLogFixture.hh" -using namespace ignition; +using namespace gz; using namespace common; class MaterialDensityTest : public common::testing::AutoLogFixture { }; diff --git a/src/MovingWindowFilter_TEST.cc b/src/MovingWindowFilter_TEST.cc index 1c8955cd9..5e181f713 100644 --- a/src/MovingWindowFilter_TEST.cc +++ b/src/MovingWindowFilter_TEST.cc @@ -16,11 +16,11 @@ */ #include <gtest/gtest.h> -#include <ignition/math/Vector3.hh> +#include <gz/math/Vector3.hh> -#include "ignition/common/MovingWindowFilter.hh" +#include "gz/common/MovingWindowFilter.hh" -using namespace ignition; +using namespace gz; ///////////////////////////////////////////////// TEST(MovingWindowFilterTest, SetWindowSize) @@ -40,7 +40,7 @@ TEST(MovingWindowFilterTest, FilterSomething) { common::MovingWindowFilter<double> doubleMWF; common::MovingWindowFilter<double> doubleMWF2; - common::MovingWindowFilter<ignition::math::Vector3d> vectorMWF; + common::MovingWindowFilter<gz::math::Vector3d> vectorMWF; doubleMWF.SetWindowSize(10); doubleMWF2.SetWindowSize(2); @@ -50,7 +50,7 @@ TEST(MovingWindowFilterTest, FilterSomething) { doubleMWF.Update(static_cast<double>(i)); doubleMWF2.Update(static_cast<double>(i)); - ignition::math::Vector3d v(1.0*static_cast<double>(i), + gz::math::Vector3d v(1.0*static_cast<double>(i), 2.0*static_cast<double>(i), 3.0*static_cast<double>(i)); vectorMWF.Update(v); @@ -62,9 +62,9 @@ TEST(MovingWindowFilterTest, FilterSomething) EXPECT_DOUBLE_EQ(doubleMWF.Value(), sum/10.0); EXPECT_DOUBLE_EQ(doubleMWF2.Value(), (18.0+19.0)/2.0); - ignition::math::Vector3d vsum; + gz::math::Vector3d vsum; for (unsigned int i = 0; i < 20; ++i) - vsum += ignition::math::Vector3d(1.0*static_cast<double>(i), + vsum += gz::math::Vector3d(1.0*static_cast<double>(i), 2.0*static_cast<double>(i), 3.0*static_cast<double>(i)); EXPECT_EQ(vectorMWF.Value(), vsum / 20.0); diff --git a/src/Plugin.cc b/src/Plugin.cc index 54bf85e12..bf8acef27 100644 --- a/src/Plugin.cc +++ b/src/Plugin.cc @@ -15,6 +15,8 @@ * */ +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include "gz/utils/SuppressWarning.hh" #include "ignition/common/Console.hh" @@ -23,7 +25,7 @@ IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #include "ignition/common/PluginInfo.hh" #include "PluginUtils.hh" -namespace ignition +namespace gz { namespace common { @@ -79,7 +81,7 @@ namespace ignition if (!_other) { - ignerr << "Received a nullptr _other in the constructor " + gzerr << "Received a nullptr _other in the constructor " << "which uses `const PluginPrivate*`. This should " << "not be possible! Please report this bug." << std::endl; @@ -187,3 +189,5 @@ namespace ignition } } IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/src/PluginLoader.cc b/src/PluginLoader.cc index 401341e3e..5b156f3c2 100644 --- a/src/PluginLoader.cc +++ b/src/PluginLoader.cc @@ -23,6 +23,8 @@ #include <sstream> #include <unordered_map> +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include "gz/utils/SuppressWarning.hh" #include "ignition/common/Console.hh" #include "ignition/common/StringUtils.hh" @@ -35,7 +37,7 @@ IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #include "PluginUtils.hh" -namespace ignition +namespace gz { namespace common { @@ -110,7 +112,7 @@ namespace ignition if (!exists(_pathToLibrary)) { - ignerr << "Library [" << _pathToLibrary << "] does not exist!\n"; + gzerr << "Library [" << _pathToLibrary << "] does not exist!\n"; return newPlugins; } @@ -145,13 +147,13 @@ namespace ignition if (loadedPlugins.empty()) { - ignerr << "Failed to load plugins from library [" << _pathToLibrary << + gzerr << "Failed to load plugins from library [" << _pathToLibrary << "].\n"; } } else { - ignerr << "Library[" << _pathToLibrary << "] error: " << dlerror() + gzerr << "Library[" << _pathToLibrary << "] error: " << dlerror() << std::endl; } return newPlugins; @@ -203,7 +205,7 @@ namespace ignition if (this->dataPtr->plugins.end() == it) { - ignerr << "Failed to get info for plugin [" + gzerr << "Failed to get info for plugin [" << plugin << "] since it has not been loaded." << std::endl; @@ -229,7 +231,7 @@ namespace ignition if (nullptr == _dlHandle) { - ignerr << "Passed NULL handle.\n"; + gzerr << "Passed NULL handle.\n"; return loadedPlugins; } @@ -246,7 +248,7 @@ namespace ignition if (nullptr == versionPtr || nullptr == sizePtr || nullptr == multiInfoPtr || nullptr == alignPtr) { - ignerr << "Library [" << _pathToLibrary + gzerr << "Library [" << _pathToLibrary << "] doesn't have the right symbols:" << "\n -- version symbol -- " << versionPtr << "\n -- size symbol -- " << sizePtr @@ -263,16 +265,16 @@ namespace ignition if (version < PLUGIN_API_VERSION) { - ignwarn << "The library [" << _pathToLibrary <<"] is using an outdated " - << "version [" << version << "] of the ignition::common Plugin " + gzwarn << "The library [" << _pathToLibrary <<"] is using an outdated " + << "version [" << version << "] of the gz::common Plugin " << "API. The version in this library is [" << PLUGIN_API_VERSION << "].\n"; } if (version > PLUGIN_API_VERSION) { - ignerr << "The library [" << _pathToLibrary << "] is using a newer " - << "version [" << version << "] of the ignition::common Plugin " + gzerr << "The library [" << _pathToLibrary << "] is using a newer " + << "version [" << version << "] of the gz::common Plugin " << "API. The version in this library is [" << PLUGIN_API_VERSION << "].\n"; return loadedPlugins; @@ -305,7 +307,7 @@ namespace ignition const size_t expectedSize = sizeof(PluginInfo); const size_t expectedAlignment = alignof(PluginInfo); - ignerr << "The library [" << _pathToLibrary << "] has the wrong plugin " + gzerr << "The library [" << _pathToLibrary << "] has the wrong plugin " << "size or alignment for API version [" << PLUGIN_API_VERSION << "]. Expected size [" << expectedSize << "], got [" << size << "]. Expected alignment [" << expectedAlignment @@ -319,3 +321,5 @@ namespace ignition } } IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/src/PluginLoader_TEST.cc b/src/PluginLoader_TEST.cc index fc7e69031..5c466c3f6 100644 --- a/src/PluginLoader_TEST.cc +++ b/src/PluginLoader_TEST.cc @@ -17,6 +17,8 @@ #include <gtest/gtest.h> +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include <algorithm> #include <fstream> @@ -26,13 +28,13 @@ #include "ignition/common/SystemPaths.hh" #include "ignition/common/TempDirectory.hh" -#include "ignition/common/testing/Utils.hh" +#include "gz/common/testing/Utils.hh" ///////////////////////////////////////////////// -class TestTempDirectory : public ignition::common::TempDirectory +class TestTempDirectory : public gz::common::TempDirectory { public: TestTempDirectory(): - ignition::common::TempDirectory("plugin_loader", "ign_common", true) + gz::common::TempDirectory("plugin_loader", "ign_common", true) { } }; @@ -43,14 +45,14 @@ IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION ///////////////////////////////////////////////// TEST(PluginLoader, InitialNoInterfacesImplemented) { - ignition::common::PluginLoader pm; + gz::common::PluginLoader pm; EXPECT_EQ(0u, pm.InterfacesImplemented().size()); } ///////////////////////////////////////////////// TEST(PluginLoader, LoadNonexistantLibrary) { - ignition::common::PluginLoader pm; + gz::common::PluginLoader pm; EXPECT_TRUE(pm.LoadLibrary("/path/to/libDoesNotExist.so").empty()); } @@ -58,9 +60,9 @@ TEST(PluginLoader, LoadNonexistantLibrary) TEST(PluginLoader, LoadNonLibrary) { TestTempDirectory tempDir; - ignition::common::testing::createNewEmptyFile("not_a_library.txt"); + gz::common::testing::createNewEmptyFile("not_a_library.txt"); - ignition::common::PluginLoader pm; + gz::common::PluginLoader pm; EXPECT_TRUE(pm.LoadLibrary("not_a_library.txt").empty()); } @@ -71,31 +73,33 @@ TEST(PluginLoader, LoadNonPluginLibrary) std::string libName = "foobar"; TestTempDirectory tempDir; - ignition::common::createDirectory(libDir); - ignition::common::testing::createNewEmptyFile( - ignition::common::joinPaths(libDir, "lib" + libName + ".so")); + gz::common::createDirectory(libDir); + gz::common::testing::createNewEmptyFile( + gz::common::joinPaths(libDir, "lib" + libName + ".so")); - ignition::common::SystemPaths sp; + gz::common::SystemPaths sp; // Fails without plugin dirs setup std::string path = sp.FindSharedLibrary("foo"); ASSERT_TRUE(path.empty()); sp.AddPluginPaths( - ignition::common::joinPaths(ignition::common::cwd(), libDir)); + gz::common::joinPaths(gz::common::cwd(), libDir)); path = sp.FindSharedLibrary(libName); ASSERT_FALSE(path.empty()); - ignition::common::PluginLoader pm; + gz::common::PluginLoader pm; EXPECT_TRUE(pm.LoadLibrary(path).empty()); } ///////////////////////////////////////////////// TEST(PluginLoader, InstantiateUnloadedPlugin) { - ignition::common::PluginLoader pm; - ignition::common::PluginPtr plugin = + gz::common::PluginLoader pm; + gz::common::PluginPtr plugin = pm.Instantiate("plugin::that::is::not::loaded"); EXPECT_FALSE(plugin); } IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/src/PluginUtils.hh b/src/PluginUtils.hh index 9a65494e9..3d851a127 100644 --- a/src/PluginUtils.hh +++ b/src/PluginUtils.hh @@ -15,14 +15,16 @@ * */ -#ifndef IGNITION_COMMON_PLUGINUTILS_HH_ -#define IGNITION_COMMON_PLUGINUTILS_HH_ +#ifndef GZ_COMMON_PLUGINUTILS_HH_ +#define GZ_COMMON_PLUGINUTILS_HH_ + +#define SUPPRESS_IGNITION_HEADER_DEPRECATION #include <string> #include "ignition/common/Export.hh" #include "ignition/common/StringUtils.hh" -namespace ignition +namespace gz { namespace common { @@ -41,5 +43,6 @@ namespace ignition } } +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION #endif diff --git a/src/PluginUtils_TEST.cc b/src/PluginUtils_TEST.cc index ee2690767..17ac8d3df 100644 --- a/src/PluginUtils_TEST.cc +++ b/src/PluginUtils_TEST.cc @@ -15,12 +15,15 @@ * */ #include <gtest/gtest.h> + +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include <string> #include "gz/utils/SuppressWarning.hh" #include "PluginUtils.hh" -using namespace ignition; +using namespace gz; IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION ///////////////////////////////////////////////// @@ -32,7 +35,9 @@ TEST(PluginUtils, NormalizeName) EXPECT_EQ("::ignition", common::NormalizeName("ignition")); EXPECT_EQ("::ignition", common::NormalizeName("::ignition")); - EXPECT_EQ("::ignition::math", common::NormalizeName("ignition::math")); - EXPECT_EQ("::ignition::math", common::NormalizeName("::ignition::math")); + EXPECT_EQ("::gz::math", common::NormalizeName("gz::math")); + EXPECT_EQ("::gz::math", common::NormalizeName("::gz::math")); } IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/src/PrintWindowsSystemWarning.hh b/src/PrintWindowsSystemWarning.hh index a2b2326e9..1083a5ac8 100644 --- a/src/PrintWindowsSystemWarning.hh +++ b/src/PrintWindowsSystemWarning.hh @@ -15,23 +15,23 @@ * */ -#ifndef IGNITION_COMMON_PRINTWINDOWSSYSTEMWARNING_HH_ -#define IGNITION_COMMON_PRINTWINDOWSSYSTEMWARNING_HH_ +#ifndef GZ_COMMON_PRINTWINDOWSSYSTEMWARNING_HH_ +#define GZ_COMMON_PRINTWINDOWSSYSTEMWARNING_HH_ #ifdef _WIN32 #include <windows.h> #include <winnt.h> #include <string> #include <cstdint> -#include <ignition/common/Console.hh> +#include <gz/common/Console.hh> -namespace ignition +namespace gz { namespace common { /// \brief This is a Windows-specific function that prints warnings from the /// system in a pretty and convenient way. They get logged using the - /// ignition::common::Console. + /// gz::common::Console. inline void PrintWindowsSystemWarning(const std::string &_flavorText) { // Based on example code by Microsoft: "Retrieving the Last-Error Code" @@ -45,7 +45,7 @@ namespace ignition NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL); - ignwarn << _flavorText << ": " << static_cast<LPCTSTR>(lpMsgBuf) << "\n"; + gzwarn << _flavorText << ": " << static_cast<LPCTSTR>(lpMsgBuf) << "\n"; } } } diff --git a/src/SignalHandler.cc b/src/SignalHandler.cc index 4ea511546..68a71bfba 100644 --- a/src/SignalHandler.cc +++ b/src/SignalHandler.cc @@ -17,16 +17,16 @@ // Suppressing cpplint.py because tools/cpplint.py is old. Remove the NOLINT // comments when upgrading to ign-cmake's "make codecheck" -#include "ignition/common/SignalHandler.hh" // NOLINT(*) +#include "gz/common/SignalHandler.hh" // NOLINT(*) #include <csignal> // NOLINT(*) #include <functional> // NOLINT(*) #include <map> // NOLINT(*) #include <mutex> // NOLINT(*) #include <utility> // NOLINT(*) #include <vector> // NOLINT(*) -#include "ignition/common/Console.hh" // NOLINT(*) +#include "gz/common/Console.hh" // NOLINT(*) -using namespace ignition; +using namespace gz; using namespace common; // A wrapper for the sigaction sa_handler. @@ -47,7 +47,7 @@ void onSignal(int _value) } ///////////////////////////////////////////////// -class ignition::common::SignalHandlerPrivate +class gz::common::SignalHandlerPrivate { /// \brief Handle a signal. /// \param[in] _sig Signal number @@ -75,14 +75,14 @@ SignalHandler::SignalHandler() if (std::signal(SIGINT, onSignal) == SIG_ERR) { - ignerr << "Unable to catch SIGINT.\n" + gzerr << "Unable to catch SIGINT.\n" << " Please visit http://community.gazebosim.org for help.\n"; return; } if (std::signal(SIGTERM, onSignal) == SIG_ERR) { - ignerr << "Unable to catch SIGTERM.\n" + gzerr << "Unable to catch SIGTERM.\n" << " Please visit http://community.gazebosim.org for help.\n"; return; } @@ -128,7 +128,7 @@ bool SignalHandler::AddCallback(std::function<void(int)> _cb) } else { - ignerr << "The SignalHandler was not initialized. Adding a callback will " + gzerr << "The SignalHandler was not initialized. Adding a callback will " << "have no effect.\n"; } return result; @@ -138,7 +138,7 @@ bool SignalHandler::AddCallback(std::function<void(int)> _cb) void SignalHandlerPrivate::OnSignal(int _sig) { std::lock_guard<std::mutex> lock(this->cbMutex); - igndbg << "Received signal[" << _sig << "].\n"; + gzdbg << "Received signal[" << _sig << "].\n"; for (std::function<void(int)> cb : this->callbacks) cb(_sig); } diff --git a/src/SignalHandler_TEST.cc b/src/SignalHandler_TEST.cc index c44fbdbb2..90bbd27a5 100644 --- a/src/SignalHandler_TEST.cc +++ b/src/SignalHandler_TEST.cc @@ -17,16 +17,16 @@ // Suppressing cpplint.py because tools/cpplint.py is old. Remove the NOLINT // comments when upgrading to ign-cmake's "make codecheck" -#include "ignition/common/SignalHandler.hh" // NOLINT(*) +#include "gz/common/SignalHandler.hh" // NOLINT(*) #include <gtest/gtest.h> // NOLINT(*) #include <csignal> // NOLINT(*) #include <condition_variable> // NOLINT(*) #include <map> // NOLINT(*) #include <mutex> // NOLINT(*) #include <thread> // NOLINT(*) -#include "ignition/common/Util.hh" // NOLINT(*) +#include "gz/common/Util.hh" // NOLINT(*) -using namespace ignition; +using namespace gz; // Capture the gOnSignalWrappers map from SignalHandlers.cc #ifndef _WIN32 diff --git a/src/StringUtils.cc b/src/StringUtils.cc index ebd5562ba..be180f99a 100644 --- a/src/StringUtils.cc +++ b/src/StringUtils.cc @@ -16,9 +16,9 @@ */ #include <cstdlib> -#include "ignition/common/StringUtils.hh" +#include "gz/common/StringUtils.hh" -namespace ignition +namespace gz { namespace common { diff --git a/src/StringUtils_TEST.cc b/src/StringUtils_TEST.cc index aa3ad29d0..da78b0398 100644 --- a/src/StringUtils_TEST.cc +++ b/src/StringUtils_TEST.cc @@ -19,9 +19,9 @@ #include <vector> -#include "ignition/common/StringUtils.hh" +#include "gz/common/StringUtils.hh" -using namespace ignition; +using namespace gz; ///////////////////////////////////////////////// TEST(StringUtils, SplitNoDelimiterPresent) diff --git a/src/SystemPaths.cc b/src/SystemPaths.cc index a8393d3eb..676a10882 100644 --- a/src/SystemPaths.cc +++ b/src/SystemPaths.cc @@ -25,16 +25,16 @@ #include <string> #include <vector> -#include "ignition/common/Console.hh" -#include "ignition/common/StringUtils.hh" -#include "ignition/common/SystemPaths.hh" -#include "ignition/common/Util.hh" +#include "gz/common/Console.hh" +#include "gz/common/StringUtils.hh" +#include "gz/common/SystemPaths.hh" +#include "gz/common/Util.hh" -using namespace ignition; +using namespace gz; using namespace common; // Private data class -class ignition::common::SystemPaths::Implementation +class gz::common::SystemPaths::Implementation { /// \brief Name of the environment variable to check for plugin paths public: std::string pluginPathEnv = "IGN_PLUGIN_PATH"; @@ -60,7 +60,7 @@ class ignition::common::SystemPaths::Implementation /// \brief Callbacks to be called in order in case a file can't be found. public: std::vector <std::function <std::string( - const ignition::common::URI &)> > findFileURICbs; + const gz::common::URI &)> > findFileURICbs; /// \brief generates paths to try searching for the named library public: std::vector<std::string> GenerateLibraryPaths( @@ -79,7 +79,7 @@ void insertUnique(const std::string &_path, std::list<std::string> &_list) ////////////////////////////////////////////////// SystemPaths::SystemPaths() -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { std::string home, path, fullPath; if (!env(IGN_HOMEDIR, home)) @@ -279,19 +279,19 @@ std::vector<std::string> SystemPaths::Implementation::GenerateLibraryPaths( ////////////////////////////////////////////////// std::string SystemPaths::FindFileURI(const std::string &_uri) const { - if (!ignition::common::URI::Valid(_uri)) + if (!gz::common::URI::Valid(_uri)) { - ignerr << "The passed value [" << _uri << "] is not a valid URI, " + gzerr << "The passed value [" << _uri << "] is not a valid URI, " "trying as a file" << std::endl; return this->FindFile(_uri); } - const auto uri = ignition::common::URI(_uri); + const auto uri = gz::common::URI(_uri); return this->FindFileURI(uri); } ////////////////////////////////////////////////// -std::string SystemPaths::FindFileURI(const ignition::common::URI &_uri) const +std::string SystemPaths::FindFileURI(const gz::common::URI &_uri) const { std::string prefix = _uri.Scheme(); std::string suffix; @@ -313,7 +313,7 @@ std::string SystemPaths::FindFileURI(const ignition::common::URI &_uri) const std::string filename; // First try to find the file on the current system - filename = this->FindFile(ignition::common::copyFromUnixPath(suffix), + filename = this->FindFile(gz::common::copyFromUnixPath(suffix), true, false); // Look in custom paths. @@ -325,7 +325,7 @@ std::string SystemPaths::FindFileURI(const ignition::common::URI &_uri) const auto withSuffix = NormalizeDirectoryPath(filePath) + suffix; if (exists(withSuffix)) { - filename = ignition::common::copyFromUnixPath(withSuffix); + filename = gz::common::copyFromUnixPath(withSuffix); break; } } @@ -344,14 +344,14 @@ std::string SystemPaths::FindFileURI(const ignition::common::URI &_uri) const if (filename.empty()) { - ignerr << "Unable to find file with URI [" << _uri.Str() << "]" << + gzerr << "Unable to find file with URI [" << _uri.Str() << "]" << std::endl; return std::string(); } if (!exists(filename)) { - ignerr << "URI [" << _uri.Str() << "] resolved to path [" << filename << + gzerr << "URI [" << _uri.Str() << "] resolved to path [" << filename << "] but the path does not exist" << std::endl; return std::string(); } @@ -371,9 +371,9 @@ std::string SystemPaths::FindFile(const std::string &_filename, return path; // Handle as URI - if (ignition::common::URI::Valid(filename)) + if (gz::common::URI::Valid(filename)) { - path = this->FindFileURI(ignition::common::URI(filename)); + path = this->FindFileURI(gz::common::URI(filename)); } // Handle as local absolute path else if (filename[0] == '/') @@ -409,7 +409,7 @@ std::string SystemPaths::FindFile(const std::string &_filename, auto withSuffix = NormalizeDirectoryPath(filePath) + filename; if (exists(withSuffix)) { - path = ignition::common::copyFromUnixPath(withSuffix); + path = gz::common::copyFromUnixPath(withSuffix); break; } } @@ -430,7 +430,7 @@ std::string SystemPaths::FindFile(const std::string &_filename, { if (_verbose) { - ignerr << "Could not resolve file [" << _filename << "]" << std::endl; + gzerr << "Could not resolve file [" << _filename << "]" << std::endl; } return std::string(); } @@ -439,7 +439,7 @@ std::string SystemPaths::FindFile(const std::string &_filename, { if (_verbose) { - ignerr << "File [" << _filename << "] resolved to path [" << path << + gzerr << "File [" << _filename << "] resolved to path [" << path << "] but the path does not exist" << std::endl; } return std::string(); @@ -510,7 +510,7 @@ void SystemPaths::AddFindFileCallback( ///////////////////////////////////////////////// void SystemPaths::AddFindFileURICallback( - std::function<std::string(const ignition::common::URI &)> _cb) + std::function<std::string(const gz::common::URI &)> _cb) { this->dataPtr->findFileURICbs.push_back(_cb); } @@ -527,7 +527,7 @@ std::list<std::string> SystemPaths::PathsFromEnv(const std::string &_env) if (envPathsStr.empty()) return paths; - auto ps = ignition::common::Split(envPathsStr, Delimiter()); + auto ps = gz::common::Split(envPathsStr, Delimiter()); for (auto const &path : ps) { std::string normalPath = NormalizeDirectoryPath(path); diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index 19b8623c4..c03cce25a 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -23,24 +23,24 @@ #include <vector> #include <cstdio> -#include "ignition/common/Util.hh" -#include "ignition/common/StringUtils.hh" -#include "ignition/common/SystemPaths.hh" -#include "ignition/common/TempDirectory.hh" +#include "gz/common/Util.hh" +#include "gz/common/StringUtils.hh" +#include "gz/common/SystemPaths.hh" +#include "gz/common/TempDirectory.hh" #ifdef _WIN32 #define snprintf _snprintf #endif -using namespace ignition; +using namespace gz; const char kPluginPath[] = "IGN_PLUGIN_PATH"; const char kFilePath[] = "IGN_FILE_PATH"; -class TestTempDirectory : public ignition::common::TempDirectory +class TestTempDirectory : public gz::common::TempDirectory { public: TestTempDirectory(): - ignition::common::TempDirectory("systempaths", "ign_common", true) + gz::common::TempDirectory("systempaths", "ign_common", true) { } }; @@ -128,9 +128,9 @@ TEST_F(SystemPathsFixture, FileSystemPaths) EXPECT_EQ(static_cast<unsigned int>(0), paths.FilePaths().size()); std::string dir1 = "test_dir1"; - ignition::common::createDirectories(dir1); - auto file1 = ignition::common::copyFromUnixPath( - ignition::common::joinPaths(dir1, "test_f1")); + gz::common::createDirectories(dir1); + auto file1 = gz::common::copyFromUnixPath( + gz::common::joinPaths(dir1, "test_f1")); std::ofstream fout; fout.open(file1, std::ofstream::out); fout << "asdf"; @@ -200,14 +200,14 @@ TEST_F(SystemPathsFixture, SearchPathUsesForwardSlashes) ////////////////////////////////////////////////// TEST_F(SystemPathsFixture, FindFileURI) { - auto dir1 = ignition::common::absPath("test_dir1"); - auto dir2 = ignition::common::absPath("test_dir2"); - ignition::common::createDirectories(dir1); - ignition::common::createDirectories(dir2); - auto file1 = ignition::common::absPath( - ignition::common::joinPaths(dir1, "test_f1")); - auto file2 = ignition::common::absPath( - ignition::common::joinPaths(dir2, "test_f2")); + auto dir1 = gz::common::absPath("test_dir1"); + auto dir2 = gz::common::absPath("test_dir2"); + gz::common::createDirectories(dir1); + gz::common::createDirectories(dir2); + auto file1 = gz::common::absPath( + gz::common::joinPaths(dir1, "test_f1")); + auto file2 = gz::common::absPath( + gz::common::joinPaths(dir2, "test_f2")); std::ofstream fout; fout.open(file1, std::ofstream::out); @@ -218,13 +218,13 @@ TEST_F(SystemPathsFixture, FindFileURI) fout.close(); common::SystemPaths sp; - auto filesystemRootUnix = ignition::common::copyToUnixPath( + auto filesystemRootUnix = gz::common::copyToUnixPath( this->filesystemRoot); EXPECT_EQ("", sp.FindFileURI("file://no_such_file")); EXPECT_EQ(file1, sp.FindFileURI("file:test_dir1/test_f1")); EXPECT_EQ(file1, sp.FindFileURI("file://" + - ignition::common::copyToUnixPath(file1))); + gz::common::copyToUnixPath(file1))); EXPECT_EQ("", sp.FindFileURI("osrf://unknown.protocol")); EXPECT_EQ("", sp.FindFileURI(this->filesystemRoot + "no_such_file")); EXPECT_EQ("", sp.FindFileURI("file://" + filesystemRootUnix + @@ -242,21 +242,21 @@ TEST_F(SystemPathsFixture, FindFileURI) // sp.FindFileURI("file://" + this->filesystemRoot + "Windows")); #endif - auto robotCb = [dir1](const ignition::common::URI &_uri) + auto robotCb = [dir1](const gz::common::URI &_uri) { return _uri.Scheme() == "robot" ? - ignition::common::joinPaths(dir1, _uri.Path().Str()) : ""; + gz::common::joinPaths(dir1, _uri.Path().Str()) : ""; }; - auto osrfCb = [dir2](const ignition::common::URI &_uri) + auto osrfCb = [dir2](const gz::common::URI &_uri) { return _uri.Scheme() == "osrf" ? - ignition::common::joinPaths(dir2, ignition::common::copyFromUnixPath( + gz::common::joinPaths(dir2, gz::common::copyFromUnixPath( _uri.Path().Str())) : ""; }; - auto robot2Cb = [dir2](const ignition::common::URI &_uri) + auto robot2Cb = [dir2](const gz::common::URI &_uri) { return _uri.Scheme() == "robot" ? - ignition::common::joinPaths(dir2, _uri.Path().Str()) : ""; + gz::common::joinPaths(dir2, _uri.Path().Str()) : ""; }; EXPECT_EQ("", sp.FindFileURI("robot://test_f1")); @@ -294,14 +294,14 @@ TEST_F(SystemPathsFixture, FindFileURI) ////////////////////////////////////////////////// TEST_F(SystemPathsFixture, FindFile) { - auto dir1 = ignition::common::absPath("test_dir1"); - auto dir2 = ignition::common::absPath("test_dir2"); - ignition::common::createDirectories(dir1); - ignition::common::createDirectories(dir2); - auto file1 = ignition::common::absPath( - ignition::common::joinPaths(dir1, "test_f1")); - auto file2 = ignition::common::absPath( - ignition::common::joinPaths(dir2, "test_f2")); + auto dir1 = gz::common::absPath("test_dir1"); + auto dir2 = gz::common::absPath("test_dir2"); + gz::common::createDirectories(dir1); + gz::common::createDirectories(dir2); + auto file1 = gz::common::absPath( + gz::common::joinPaths(dir1, "test_f1")); + auto file2 = gz::common::absPath( + gz::common::joinPaths(dir2, "test_f2")); std::ofstream fout; fout.open(file1, std::ofstream::out); @@ -313,10 +313,10 @@ TEST_F(SystemPathsFixture, FindFile) // LocateLocalFile common::SystemPaths sp; - EXPECT_EQ(ignition::common::copyToUnixPath(file1), + EXPECT_EQ(gz::common::copyToUnixPath(file1), sp.LocateLocalFile("test_f1", {dir1, dir2})); - EXPECT_EQ(ignition::common::copyToUnixPath(file2), + EXPECT_EQ(gz::common::copyToUnixPath(file2), sp.LocateLocalFile("test_f2", {dir1, dir2})); EXPECT_EQ("", sp.LocateLocalFile("test_f3", {dir1, dir2})); @@ -381,17 +381,17 @@ TEST_F(SystemPathsFixture, FindFile) ////////////////////////////////////////////////// TEST_F(SystemPathsFixture, NormalizeDirectoryPath) { - EXPECT_EQ(ignition::common::SystemPaths::NormalizeDirectoryPath("a/b/c/"), + EXPECT_EQ(gz::common::SystemPaths::NormalizeDirectoryPath("a/b/c/"), "a/b/c/"); - EXPECT_EQ(ignition::common::SystemPaths::NormalizeDirectoryPath("a/b/c"), + EXPECT_EQ(gz::common::SystemPaths::NormalizeDirectoryPath("a/b/c"), "a/b/c/"); - EXPECT_EQ(ignition::common::SystemPaths::NormalizeDirectoryPath("/a/b/c/"), + EXPECT_EQ(gz::common::SystemPaths::NormalizeDirectoryPath("/a/b/c/"), "/a/b/c/"); - EXPECT_EQ(ignition::common::SystemPaths::NormalizeDirectoryPath("/a/b/c"), + EXPECT_EQ(gz::common::SystemPaths::NormalizeDirectoryPath("/a/b/c"), "/a/b/c/"); - EXPECT_EQ(ignition::common::SystemPaths::NormalizeDirectoryPath("a\\b\\c"), + EXPECT_EQ(gz::common::SystemPaths::NormalizeDirectoryPath("a\\b\\c"), "a/b/c/"); - EXPECT_EQ(ignition::common::SystemPaths::NormalizeDirectoryPath("a\\b\\c\\"), + EXPECT_EQ(gz::common::SystemPaths::NormalizeDirectoryPath("a\\b\\c\\"), "a/b/c/"); } @@ -401,7 +401,7 @@ TEST_F(SystemPathsFixture, PathsFromEnv) common::setenv(kPluginPath, SystemPathsJoin({"/tmp/plugin", "/test/plugin/now/", "/tmp/plugin"})); - auto paths = ignition::common::SystemPaths::PathsFromEnv(kPluginPath); + auto paths = gz::common::SystemPaths::PathsFromEnv(kPluginPath); EXPECT_EQ(paths.size(), 2u); diff --git a/src/TempDirectory.cc b/src/TempDirectory.cc index 7f3809b30..c65f1936d 100644 --- a/src/TempDirectory.cc +++ b/src/TempDirectory.cc @@ -15,9 +15,9 @@ * */ -#include <ignition/common/TempDirectory.hh> +#include <gz/common/TempDirectory.hh> -#include <ignition/common/Console.hh> +#include <gz/common/Console.hh> #include <filesystem> @@ -33,7 +33,7 @@ namespace fs = std::filesystem; -using namespace ignition; +using namespace gz; using namespace common; ///////////////////////////////////////////////// @@ -46,7 +46,7 @@ inline bool fs_warn(const std::string &_fcn, { if (FSWO_LOG_WARNINGS == _warningOp) { - ignwarn << "Failed ignition::common::" << _fcn + gzwarn << "Failed gz::common::" << _fcn << " (ec: " << _ec << " " << _ec.message() << ")\n"; } return false; @@ -55,7 +55,7 @@ inline bool fs_warn(const std::string &_fcn, } ///////////////////////////////////////////////// -std::string ignition::common::tempDirectoryPath() +std::string gz::common::tempDirectoryPath() { std::error_code ec; auto ret = fs::temp_directory_path(ec); @@ -119,7 +119,7 @@ std::string createTempDirectory( } ///////////////////////////////////////////////// -std::string ignition::common::createTempDirectory( +std::string gz::common::createTempDirectory( const std::string &_baseName, const std::string &_parentPath, const FilesystemWarningOp _warningOp) @@ -134,14 +134,14 @@ std::string ignition::common::createTempDirectory( ret = ""; if(FSWO_LOG_WARNINGS == _warningOp) { - ignwarn << "Failed to create temp directory: " << ex.what() << "\n"; + gzwarn << "Failed to create temp directory: " << ex.what() << "\n"; } } return ret; } -class ignition::common::TempDirectory::Implementation +class gz::common::TempDirectory::Implementation { /// \brief Current working directory before creation of temporary dir. public: std::string oldPath {""}; @@ -170,7 +170,7 @@ TempDirectory::TempDirectory(const std::string &_root, const std::string &_prefix, const std::string &_subDir, bool _cleanup): - dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) + dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { this->dataPtr->oldPath = common::cwd(); this->dataPtr->doCleanup = _cleanup; @@ -178,7 +178,7 @@ TempDirectory::TempDirectory(const std::string &_root, if (_root.empty()) { this->dataPtr->isValid = false; - ignwarn << "Failed to create temp directory: _root was empty\n"; + gzwarn << "Failed to create temp directory: _root was empty\n"; return; } diff --git a/src/TempDirectory_TEST.cc b/src/TempDirectory_TEST.cc index 77c3f56c5..4f8393cb5 100644 --- a/src/TempDirectory_TEST.cc +++ b/src/TempDirectory_TEST.cc @@ -17,34 +17,34 @@ #include <gtest/gtest.h> -#include <ignition/common/TempDirectory.hh> -#include <ignition/utils/ExtraTestMacros.hh> +#include <gz/common/TempDirectory.hh> +#include <gz/utils/ExtraTestMacros.hh> ///////////////////////////////////////////////// TEST(TempDirectory, tempDirectoryPath) { // OS TMPDIR should never be empty - ASSERT_FALSE(ignition::common::tempDirectoryPath().empty()); + ASSERT_FALSE(gz::common::tempDirectoryPath().empty()); } ///////////////////////////////////////////////// TEST(TempDirectory, createTempDirectory) { // OS TMPDIR should never be empty - auto tmpDir = ignition::common::tempDirectoryPath(); + auto tmpDir = gz::common::tempDirectoryPath(); ASSERT_FALSE(tmpDir.empty()); // Nominal case // eg /tmp/fooXXXXXX - auto tmp = ignition::common::createTempDirectory("foo", tmpDir); + auto tmp = gz::common::createTempDirectory("foo", tmpDir); ASSERT_FALSE(tmp.empty()); EXPECT_NE(std::string::npos, tmp.find("foo")); EXPECT_NE(std::string::npos, tmp.find(tmpDir)); // Should also work for subdirectories // eg /tmp/bar/fooXXXXXX - tmpDir = ignition::common::joinPaths(tmpDir, "bar"); - auto tmp2 = ignition::common::createTempDirectory("bar", tmpDir); + tmpDir = gz::common::joinPaths(tmpDir, "bar"); + auto tmp2 = gz::common::createTempDirectory("bar", tmpDir); ASSERT_FALSE(tmp2.empty()); } @@ -52,11 +52,11 @@ TEST(TempDirectory, createTempDirectory) TEST(TempDirectory, createTempDirectoryEmptyBase) { // OS TMPDIR should never be empty - auto tmpDir = ignition::common::tempDirectoryPath(); + auto tmpDir = gz::common::tempDirectoryPath(); ASSERT_FALSE(tmpDir.empty()); // Create with an empty basename (eg /tmp/XXXXXX) - auto tmp = ignition::common::createTempDirectory("", tmpDir); + auto tmp = gz::common::createTempDirectory("", tmpDir); ASSERT_FALSE(tmp.empty()); EXPECT_EQ(std::string::npos, tmp.find("foo")); EXPECT_NE(std::string::npos, tmp.find(tmpDir)); @@ -66,103 +66,103 @@ TEST(TempDirectory, createTempDirectoryEmptyBase) TEST(TempDirectory, TempDirectory) { std::string path; - auto curDir = ignition::common::cwd(); + auto curDir = gz::common::cwd(); { - ignition::common::TempDirectory tmp("temp_dir", "ignition", true); + gz::common::TempDirectory tmp("temp_dir", "ignition", true); EXPECT_TRUE(tmp.Valid()); EXPECT_TRUE(tmp.DoCleanup()); // Current directory changed to tempdir - EXPECT_NE(curDir, ignition::common::cwd()); + EXPECT_NE(curDir, gz::common::cwd()); path = tmp.Path(); EXPECT_FALSE(path.empty()); - EXPECT_TRUE(ignition::common::exists(path)); - EXPECT_EQ(path, ignition::common::cwd()); + EXPECT_TRUE(gz::common::exists(path)); + EXPECT_EQ(path, gz::common::cwd()); } // Current directory changed back to previous - EXPECT_EQ(curDir, ignition::common::cwd()); - EXPECT_FALSE(ignition::common::exists(path)); + EXPECT_EQ(curDir, gz::common::cwd()); + EXPECT_FALSE(gz::common::exists(path)); } ///////////////////////////////////////////////// TEST(TempDirectory, TempDirectoryRoot) { std::string path; - auto curDir = ignition::common::cwd(); + auto curDir = gz::common::cwd(); { - auto p = ignition::common::tempDirectoryPath(); - ignition::common::TempDirectory tmp(p, "temp_dir", "ignition", true); + auto p = gz::common::tempDirectoryPath(); + gz::common::TempDirectory tmp(p, "temp_dir", "ignition", true); EXPECT_TRUE(tmp.Valid()); EXPECT_TRUE(tmp.DoCleanup()); - EXPECT_NE(curDir, ignition::common::cwd()); + EXPECT_NE(curDir, gz::common::cwd()); path = tmp.Path(); EXPECT_FALSE(path.empty()); - EXPECT_TRUE(ignition::common::exists(path)); - EXPECT_EQ(path, ignition::common::cwd()); + EXPECT_TRUE(gz::common::exists(path)); + EXPECT_EQ(path, gz::common::cwd()); } // Current directory changed back to previous - EXPECT_EQ(curDir, ignition::common::cwd()); - EXPECT_FALSE(ignition::common::exists(path)); + EXPECT_EQ(curDir, gz::common::cwd()); + EXPECT_FALSE(gz::common::exists(path)); } ///////////////////////////////////////////////// TEST(TempDirectory, TempDirectoryEmptyRoot) { std::string path; - auto curDir = ignition::common::cwd(); + auto curDir = gz::common::cwd(); { - ignition::common::TempDirectory tmp("", "temp_dir", "ignition", true); + gz::common::TempDirectory tmp("", "temp_dir", "ignition", true); EXPECT_FALSE(tmp.Valid()); EXPECT_TRUE(tmp.DoCleanup()); // Since not successfully created, no update - EXPECT_EQ(curDir, ignition::common::cwd()); + EXPECT_EQ(curDir, gz::common::cwd()); path = tmp.Path(); EXPECT_TRUE(path.empty()); - EXPECT_FALSE(ignition::common::exists(path)); + EXPECT_FALSE(gz::common::exists(path)); } - EXPECT_EQ(curDir, ignition::common::cwd()); - EXPECT_FALSE(ignition::common::exists(path)); + EXPECT_EQ(curDir, gz::common::cwd()); + EXPECT_FALSE(gz::common::exists(path)); } ///////////////////////////////////////////////// TEST(TempDirectory, TempDirectoryNoClean) { std::string path; - auto curDir = ignition::common::cwd(); + auto curDir = gz::common::cwd(); { - ignition::common::TempDirectory tmp("temp_dir", "ignition", false); + gz::common::TempDirectory tmp("temp_dir", "ignition", false); EXPECT_TRUE(tmp.Valid()); EXPECT_FALSE(tmp.DoCleanup()); - EXPECT_NE(curDir, ignition::common::cwd()); + EXPECT_NE(curDir, gz::common::cwd()); path = tmp.Path(); EXPECT_FALSE(path.empty()); - EXPECT_TRUE(ignition::common::exists(path)); - EXPECT_EQ(path, ignition::common::cwd()); + EXPECT_TRUE(gz::common::exists(path)); + EXPECT_EQ(path, gz::common::cwd()); } // Current directory always changes back, regardless of doClean - EXPECT_EQ(curDir, ignition::common::cwd()); - EXPECT_TRUE(ignition::common::exists(path)); - EXPECT_TRUE(ignition::common::removeDirectory(path)); + EXPECT_EQ(curDir, gz::common::cwd()); + EXPECT_TRUE(gz::common::exists(path)); + EXPECT_TRUE(gz::common::removeDirectory(path)); } ///////////////////////////////////////////////// TEST(TempDirectory, TempDirectoryNoCleanLater) { std::string path; - auto curDir = ignition::common::cwd(); + auto curDir = gz::common::cwd(); { - ignition::common::TempDirectory tmp("temp_dir", "ignition", true); + gz::common::TempDirectory tmp("temp_dir", "ignition", true); EXPECT_TRUE(tmp.Valid()); EXPECT_TRUE(tmp.DoCleanup()); - EXPECT_NE(curDir, ignition::common::cwd()); + EXPECT_NE(curDir, gz::common::cwd()); path = tmp.Path(); EXPECT_FALSE(path.empty()); - EXPECT_TRUE(ignition::common::exists(path)); - EXPECT_EQ(path, ignition::common::cwd()); + EXPECT_TRUE(gz::common::exists(path)); + EXPECT_EQ(path, gz::common::cwd()); tmp.DoCleanup(false); EXPECT_FALSE(tmp.DoCleanup()); } // Current directory always changes back, regardless of doClean - EXPECT_EQ(curDir, ignition::common::cwd()); - EXPECT_TRUE(ignition::common::exists(path)); - EXPECT_TRUE(ignition::common::removeDirectory(path)); + EXPECT_EQ(curDir, gz::common::cwd()); + EXPECT_TRUE(gz::common::exists(path)); + EXPECT_TRUE(gz::common::removeDirectory(path)); } diff --git a/src/TemplateHelpers_TEST.cc b/src/TemplateHelpers_TEST.cc index dd2fa4b0f..46b8df20f 100644 --- a/src/TemplateHelpers_TEST.cc +++ b/src/TemplateHelpers_TEST.cc @@ -18,7 +18,7 @@ #include <gtest/gtest.h> #include <string> -#include "ignition/common/TemplateHelpers.hh" +#include "gz/common/TemplateHelpers.hh" struct SomeType { }; @@ -37,7 +37,7 @@ TEST(TemplateHelpers, ConstCompatible) // The extra pair of parentheses are so the comma between the template // arguments don't confuse the macro. - using namespace ignition::common; + using namespace gz::common; EXPECT_TRUE((ConstCompatible<const int, const double>::value)); EXPECT_FALSE((ConstCompatible<double, const int>::value)); EXPECT_TRUE((ConstCompatible<const float, std::string>::value)); diff --git a/src/Timer.cc b/src/Timer.cc index 4fa56f85b..a34a8e467 100644 --- a/src/Timer.cc +++ b/src/Timer.cc @@ -15,13 +15,13 @@ * */ -#include <ignition/common/Timer.hh> +#include <gz/common/Timer.hh> -using namespace ignition; +using namespace gz; using namespace common; /// \brief Private data for the Timer class -class ignition::common::Timer::Implementation +class gz::common::Timer::Implementation { /// \brief The time of the last call to Start public: std::chrono::steady_clock::time_point start; @@ -35,7 +35,7 @@ class ignition::common::Timer::Implementation ////////////////////////////////////////////////// Timer::Timer() - : dataPtr(ignition::utils::MakeImpl<Implementation>()) + : dataPtr(gz::utils::MakeImpl<Implementation>()) { } diff --git a/src/Timer_TEST.cc b/src/Timer_TEST.cc index 651ae8e5d..754f05aa3 100644 --- a/src/Timer_TEST.cc +++ b/src/Timer_TEST.cc @@ -19,13 +19,13 @@ #include <thread> -#include <ignition/common/Console.hh> -#include <ignition/common/Timer.hh> +#include <gz/common/Console.hh> +#include <gz/common/Timer.hh> ///////////////////////////////////////////////// TEST(Timer_TEST, Sequence) { - ignition::common::Timer t; + gz::common::Timer t; EXPECT_FALSE(t.Running()); EXPECT_DOUBLE_EQ(0.0, t.ElapsedTime().count()); @@ -47,24 +47,24 @@ TEST(Timer_TEST, Sequence) ///////////////////////////////////////////////// TEST(Timer_TEST, Elapsed) { - ignition::common::Timer t; + gz::common::Timer t; t.Start(); std::this_thread::sleep_for(std::chrono::milliseconds(100)); t.Stop(); // Loose margin just to make sure it is close without being flaky EXPECT_LT(0.0, t.ElapsedTime().count()); - igndbg << "Actual Elapsed: " << t.ElapsedTime().count() << std::endl; + gzdbg << "Actual Elapsed: " << t.ElapsedTime().count() << std::endl; } ///////////////////////////////////////////////// TEST(Timer_TEST, Copy) { - ignition::common::Timer t1; + gz::common::Timer t1; t1.Start(); EXPECT_TRUE(t1.Running()); - ignition::common::Timer t2 = t1; + gz::common::Timer t2 = t1; EXPECT_TRUE(t2.Running()); // Stop the original diff --git a/src/URI.cc b/src/URI.cc index 3f39b9600..33809371b 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -22,17 +22,17 @@ #include <regex> #include <string> -#include "ignition/common/Console.hh" -#include "ignition/common/URI.hh" +#include "gz/common/Console.hh" +#include "gz/common/URI.hh" -using namespace ignition; +using namespace gz; using namespace common; static const char kSchemeDelim[] = ":"; static const char kAuthDelim[] = "//"; /// \brief URIAuthority private data. -class ignition::common::URIAuthority::Implementation +class gz::common::URIAuthority::Implementation { /// \brief The user information. public: std::string userInfo; @@ -52,7 +52,7 @@ class ignition::common::URIAuthority::Implementation }; /// \brief URIPath private data. -class ignition::common::URIPath::Implementation +class gz::common::URIPath::Implementation { /// \brief A helper method to determine if the given string represents /// an absolute path starting segment or not. @@ -73,21 +73,21 @@ class ignition::common::URIPath::Implementation }; /// \brief URIQuery private data. -class ignition::common::URIQuery::Implementation +class gz::common::URIQuery::Implementation { /// \brief The key/value tuples that compose the query. public: std::vector<std::pair<std::string, std::string>> values; }; /// \brief URIFragment private data. -class ignition::common::URIFragment::Implementation +class gz::common::URIFragment::Implementation { /// \brief The value of the fragment. public: std::string value; }; /// \brief URI private data. -class ignition::common::URI::Implementation +class gz::common::URI::Implementation { /// \brief The URI scheme. public: std::string scheme; @@ -107,7 +107,7 @@ class ignition::common::URI::Implementation ////////////////////////////////////////////////// URIAuthority::URIAuthority() -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { } @@ -117,7 +117,7 @@ URIAuthority::URIAuthority(const std::string &_str) { if (!this->Parse(_str)) { - ignwarn << "Unable to parse URIAuthority [" << _str << "]. Ignoring." + gzwarn << "Unable to parse URIAuthority [" << _str << "]. Ignoring." << std::endl; } } @@ -362,7 +362,7 @@ bool URIAuthority::Parse(const std::string &_str, bool _emptyHostValid) ///////////////////////////////////////////////// URIPath::URIPath() -: dataPtr(ignition::utils::MakeImpl<Implementation>()) +: dataPtr(gz::utils::MakeImpl<Implementation>()) { } @@ -372,7 +372,7 @@ URIPath::URIPath(const std::string &_str) { if (!this->Parse(_str)) { - ignwarn << "Unable to parse URIPath [" << _str << "]. Ignoring." + gzwarn << "Unable to parse URIPath [" << _str << "]. Ignoring." << std::endl; } } @@ -390,7 +390,7 @@ void URIPath::SetAbsolute(const bool _absolute) this->dataPtr->path.front().length() >= 2 && this->dataPtr->path.front()[1] == ':') { - ignerr << "URIPath " << this->Str() << " cannot be set to represent a " + gzerr << "URIPath " << this->Str() << " cannot be set to represent a " "relative path because it starts with a Windows drive " "specifier." << std::endl; return; @@ -410,7 +410,7 @@ void URIPath::PushFront(const std::string &_part) { if (_part.empty()) { - ignwarn << "Adding empty path segment to URI " << this->Str() + gzwarn << "Adding empty path segment to URI " << this->Str() << " has no effect." << std::endl; return; } @@ -418,7 +418,7 @@ void URIPath::PushFront(const std::string &_part) auto part = _part; if (_part[0] == '/') { - ignwarn << "Instead of pushing a string starting with slash, call " + gzwarn << "Instead of pushing a string starting with slash, call " "SetAbsolute() instead." << std::endl; part = _part.substr(1); this->SetAbsolute(); @@ -434,7 +434,7 @@ void URIPath::PushFront(const std::string &_part) // TODO(anyone): Once URI encoding is implemented, // all invalid characters should be // encoded, not just slashes. - ignwarn << "Unencoded slashes in URI part, encoding them." << std::endl; + gzwarn << "Unencoded slashes in URI part, encoding them." << std::endl; part = common::replaceAll(part, "/", "%2F"); } @@ -447,7 +447,7 @@ void URIPath::PushBack(const std::string &_part) { if (_part.empty()) { - ignwarn << "Adding empty path segment to URI " << this->Str() + gzwarn << "Adding empty path segment to URI " << this->Str() << " has no effect." << std::endl; return; } @@ -455,7 +455,7 @@ void URIPath::PushBack(const std::string &_part) auto part = _part; if (this->dataPtr->path.size() == 0 && _part[0] == '/') { - ignwarn << "Instead of pushing a string starting with slash, call " + gzwarn << "Instead of pushing a string starting with slash, call " "SetAbsolute() instead." << std::endl; part = _part.substr(1); this->SetAbsolute(); @@ -471,7 +471,7 @@ void URIPath::PushBack(const std::string &_part) // TODO(anyone): Once URI encoding is implemented, // all invalid characters should be // encoded, not just slashes. - ignwarn << "Unencoded slashes in URI part, encoding them." << std::endl; + gzwarn << "Unencoded slashes in URI part, encoding them." << std::endl; part = common::replaceAll(part, "/", "%2F"); } @@ -629,7 +629,7 @@ bool URIPath::Parse(const std::string &_str) ///////////////////////////////////////////////// URIQuery::URIQuery() - : dataPtr(ignition::utils::MakeImpl<Implementation>()) + : dataPtr(gz::utils::MakeImpl<Implementation>()) { } @@ -639,7 +639,7 @@ URIQuery::URIQuery(const std::string &_str) { if (!this->Parse(_str)) { - ignwarn << "Unable to parse URIQuery [" << _str << "]. Ignoring." + gzwarn << "Unable to parse URIQuery [" << _str << "]. Ignoring." << std::endl; } } @@ -745,7 +745,7 @@ bool URIQuery::Parse(const std::string &_str) ///////////////////////////////////////////////// URIFragment::URIFragment() - : dataPtr(ignition::utils::MakeImpl<Implementation>()) + : dataPtr(gz::utils::MakeImpl<Implementation>()) { } @@ -755,7 +755,7 @@ URIFragment::URIFragment(const std::string &_str) { if (!this->Parse(_str)) { - ignwarn << "Unable to parse URIFragment [" << _str << "]. Ignoring." + gzwarn << "Unable to parse URIFragment [" << _str << "]. Ignoring." << std::endl; } } @@ -843,7 +843,7 @@ bool URIFragment::Parse(const std::string &_str) ///////////////////////////////////////////////// URI::URI() - : dataPtr(ignition::utils::MakeImpl<Implementation>()) + : dataPtr(gz::utils::MakeImpl<Implementation>()) { } @@ -1016,7 +1016,7 @@ bool URI::Valid(const std::string &_str) if (localScheme != "file" && authEndPos == authDelimPos+2) { - ignerr << "A host is mandatory when using a scheme other than file\n"; + gzerr << "A host is mandatory when using a scheme other than file\n"; return false; } else @@ -1104,7 +1104,7 @@ bool URI::Parse(const std::string &_str) else if (localScheme != "file" && authEndPos == authDelimPos + std::strlen(kAuthDelim)) { - ignerr << "A host is manadatory when using a scheme other than file\n"; + gzerr << "A host is manadatory when using a scheme other than file\n"; return false; } else diff --git a/src/URI_TEST.cc b/src/URI_TEST.cc index f321ed66c..ccaa17878 100644 --- a/src/URI_TEST.cc +++ b/src/URI_TEST.cc @@ -16,10 +16,10 @@ */ #include <gtest/gtest.h> -#include "ignition/common/Console.hh" -#include "ignition/common/URI.hh" +#include "gz/common/Console.hh" +#include "gz/common/URI.hh" -using namespace ignition; +using namespace gz; using namespace common; ///////////////////////////////////////////////// @@ -866,7 +866,7 @@ TEST(URITEST, File) TEST(URITEST, WinPath) { // Windows path requires authority - const auto uri = ignition::common::URI("file://D:/my/test/dir/world.sdf", + const auto uri = gz::common::URI("file://D:/my/test/dir/world.sdf", true); ASSERT_TRUE(uri.Authority()); EXPECT_EQ("file", uri.Scheme()); diff --git a/src/Util.cc b/src/Util.cc index b713b20a6..dd2e5cb79 100644 --- a/src/Util.cc +++ b/src/Util.cc @@ -30,13 +30,13 @@ #include <locale> #include <sstream> -#include <ignition/common/config.hh> -#include <ignition/common/Console.hh> -#include <ignition/common/SystemPaths.hh> -#include <ignition/common/Util.hh> -#include <ignition/common/Uuid.hh> +#include <gz/common/config.hh> +#include <gz/common/Console.hh> +#include <gz/common/SystemPaths.hh> +#include <gz/common/Util.hh> +#include <gz/common/Uuid.hh> -#include <ignition/utils/NeverDestroyed.hh> +#include <gz/utils/NeverDestroyed.hh> #ifndef _WIN32 #include <dirent.h> @@ -62,10 +62,10 @@ /// /// This uses the NeverDestroyed pattern to prevent static initialization and /// destruction order fiasco issues. -ignition::common::SystemPaths& GetSystemPaths() +gz::common::SystemPaths& GetSystemPaths() { static - ignition::utils::NeverDestroyed<ignition::common::SystemPaths> paths; + gz::utils::NeverDestroyed<gz::common::SystemPaths> paths; return paths.Access(); } @@ -249,13 +249,13 @@ bool Sha1::Digest(void const *_buffer, std::size_t _byteCount, } ///////////////////////////////////////////////// -std::string ignition::common::systemTimeISO() +std::string gz::common::systemTimeISO() { return timeToIso(IGN_SYSTEM_TIME()); } ///////////////////////////////////////////////// -std::string ignition::common::systemTimeIso() +std::string gz::common::systemTimeIso() { return timeToIso(IGN_SYSTEM_TIME()); } @@ -277,7 +277,7 @@ static bool PortableLocaltime(time_t seconds, struct tm* out) { } ///////////////////////////////////////////////// -std::string ignition::common::timeToIso( +std::string gz::common::timeToIso( const std::chrono::time_point<std::chrono::system_clock> &_time) { char isoStr[25]; @@ -295,32 +295,32 @@ std::string ignition::common::timeToIso( } ///////////////////////////////////////////////// -std::string ignition::common::logPath() +std::string gz::common::logPath() { return GetSystemPaths().LogPath(); } ///////////////////////////////////////////////// -void ignition::common::addSearchPathSuffix(const std::string &_suffix) +void gz::common::addSearchPathSuffix(const std::string &_suffix) { GetSystemPaths().AddSearchPathSuffix(_suffix); } ///////////////////////////////////////////////// -std::string ignition::common::findFile(const std::string &_file) +std::string gz::common::findFile(const std::string &_file) { return GetSystemPaths().FindFile(_file, true); } ///////////////////////////////////////////////// -std::string ignition::common::findFile(const std::string &_file, +std::string gz::common::findFile(const std::string &_file, const bool _searchLocalPath) { return GetSystemPaths().FindFile(_file, _searchLocalPath); } ///////////////////////////////////////////////// -std::string ignition::common::findFilePath(const std::string &_file) +std::string gz::common::findFilePath(const std::string &_file) { std::string filepath = findFile(_file); @@ -336,26 +336,26 @@ std::string ignition::common::findFilePath(const std::string &_file) } ///////////////////////////////////////////////// -void ignition::common::addFindFileURICallback( - std::function<std::string(const ignition::common::URI &)> _cb) +void gz::common::addFindFileURICallback( + std::function<std::string(const gz::common::URI &)> _cb) { GetSystemPaths().AddFindFileURICallback(_cb); } ///////////////////////////////////////////////// -ignition::common::SystemPaths *ignition::common::systemPaths() +gz::common::SystemPaths *gz::common::systemPaths() { return &GetSystemPaths(); } ///////////////////////////////////////////////// -bool ignition::common::env(const std::string &_name, std::string &_value) +bool gz::common::env(const std::string &_name, std::string &_value) { return env(_name, _value, false); } ///////////////////////////////////////////////// -bool ignition::common::env(const std::string &_name, +bool gz::common::env(const std::string &_name, std::string &_value, bool _allowEmpty) { @@ -376,7 +376,7 @@ bool ignition::common::env(const std::string &_name, if (_allowEmpty) { - ignwarn << "Reading environment variable with _allowEmpty==true" + gzwarn << "Reading environment variable with _allowEmpty==true" << " is unsupported on Windows.\n"; } @@ -402,13 +402,13 @@ bool ignition::common::env(const std::string &_name, } ///////////////////////////////////////////////// -bool ignition::common::setenv(const std::string &_name, +bool gz::common::setenv(const std::string &_name, const std::string &_value) { #ifdef _WIN32 if (0 != _putenv_s(_name.c_str(), _value.c_str())) { - ignwarn << "Failed to set environment variable: " + gzwarn << "Failed to set environment variable: " << "[" << _name << "]" << strerror(errno) << std::endl; return false; @@ -416,7 +416,7 @@ bool ignition::common::setenv(const std::string &_name, #else if (0 != ::setenv(_name.c_str(), _value.c_str(), true)) { - ignwarn << "Failed to set environment variable: " + gzwarn << "Failed to set environment variable: " << "[" << _name << "]" << strerror(errno) << std::endl; return false; @@ -425,12 +425,12 @@ bool ignition::common::setenv(const std::string &_name, return true; } ///////////////////////////////////////////////// -bool ignition::common::unsetenv(const std::string &_name) +bool gz::common::unsetenv(const std::string &_name) { #ifdef _WIN32 if (0 != _putenv_s(_name.c_str(), "")) { - ignwarn << "Failed to unset environment variable: " + gzwarn << "Failed to unset environment variable: " << "[" << _name << "]" << strerror(errno) << std::endl; return false; @@ -438,7 +438,7 @@ bool ignition::common::unsetenv(const std::string &_name) #else if (0 != ::unsetenv(_name.c_str())) { - ignwarn << "Failed to unset environment variable: " + gzwarn << "Failed to unset environment variable: " << "[" << _name << "]" << strerror(errno) << std::endl; return false; @@ -448,7 +448,7 @@ bool ignition::common::unsetenv(const std::string &_name) } ///////////////////////////////////////////////// -std::string ignition::common::sha1(void const *_buffer, std::size_t _byteCount) +std::string gz::common::sha1(void const *_buffer, std::size_t _byteCount) { Sha1 sha1; std::stringstream stream; @@ -464,14 +464,14 @@ std::string ignition::common::sha1(void const *_buffer, std::size_t _byteCount) } ///////////////////////////////////////////////// -std::string ignition::common::uuid() +std::string gz::common::uuid() { - ignition::common::Uuid uuid; + gz::common::Uuid uuid; return uuid.String(); } ///////////////////////////////////////////////// -std::vector<std::string> ignition::common::split(const std::string &_str, +std::vector<std::string> gz::common::split(const std::string &_str, const std::string &_delim) { std::vector<std::string> tokens; @@ -491,14 +491,14 @@ std::vector<std::string> ignition::common::split(const std::string &_str, } ///////////////////////////////////////////////// -void ignition::common::ltrim(std::string &_s) +void gz::common::ltrim(std::string &_s) { _s.erase(_s.begin(), std::find_if(_s.begin(), _s.end(), [](int c) {return !std::isspace(c);})); } ///////////////////////////////////////////////// -void ignition::common::rtrim(std::string &_s) +void gz::common::rtrim(std::string &_s) { _s.erase(std::find_if(_s.rbegin(), _s.rend(), [](int c) {return !std::isspace(c);}).base(), @@ -506,35 +506,35 @@ void ignition::common::rtrim(std::string &_s) } ///////////////////////////////////////////////// -void ignition::common::trim(std::string &_s) +void gz::common::trim(std::string &_s) { - ignition::common::ltrim(_s); - ignition::common::rtrim(_s); + gz::common::ltrim(_s); + gz::common::rtrim(_s); } ///////////////////////////////////////////////// -std::string ignition::common::ltrimmed(std::string _s) +std::string gz::common::ltrimmed(std::string _s) { - ignition::common::ltrim(_s); + gz::common::ltrim(_s); return _s; } ///////////////////////////////////////////////// -std::string ignition::common::rtrimmed(std::string _s) +std::string gz::common::rtrimmed(std::string _s) { - ignition::common::rtrim(_s); + gz::common::rtrim(_s); return _s; } ///////////////////////////////////////////////// -std::string ignition::common::trimmed(std::string _s) +std::string gz::common::trimmed(std::string _s) { - ignition::common::trim(_s); + gz::common::trim(_s); return _s; } ///////////////////////////////////////////////// -std::string ignition::common::lowercase(const std::string &_in) +std::string gz::common::lowercase(const std::string &_in) { std::string out = _in; for (size_t i = 0; i < out.size(); ++i) @@ -543,14 +543,14 @@ std::string ignition::common::lowercase(const std::string &_in) } ///////////////////////////////////////////////// -std::string ignition::common::lowercase(const char *_in) +std::string gz::common::lowercase(const char *_in) { std::string ins = _in; return lowercase(ins); } ///////////////////////////////////////////////// -void ignition::common::replaceAll(std::string &_result, +void gz::common::replaceAll(std::string &_result, const std::string &_orig, const std::string &_key, const std::string &_replacement) @@ -565,7 +565,7 @@ void ignition::common::replaceAll(std::string &_result, } ///////////////////////////////////////////////// -std::string ignition::common::replaceAll(const std::string &_orig, +std::string gz::common::replaceAll(const std::string &_orig, const std::string &_key, const std::string &_replacement) { diff --git a/src/Util_TEST.cc b/src/Util_TEST.cc index 407a40cc2..453ec1930 100644 --- a/src/Util_TEST.cc +++ b/src/Util_TEST.cc @@ -20,9 +20,9 @@ #include <stdlib.h> #include <string> -#include <ignition/common/Util.hh> +#include <gz/common/Util.hh> -using namespace ignition; +using namespace gz; ///////////////////////////////////////////////// /// \brief Test Util::SHA1 @@ -278,13 +278,13 @@ TEST(Util_TEST, envSetEmpty) ///////////////////////////////////////////////// TEST(Util_TEST, findFile) { - EXPECT_EQ("", ignition::common::findFile("no_such_file")); + EXPECT_EQ("", gz::common::findFile("no_such_file")); // Create file to find - auto dir1 = ignition::common::absPath("test_dir1"); - ignition::common::createDirectories(dir1); - auto file1 = ignition::common::absPath( - ignition::common::joinPaths(dir1, "test_f1")); + auto dir1 = gz::common::absPath("test_dir1"); + gz::common::createDirectories(dir1); + auto file1 = gz::common::absPath( + gz::common::joinPaths(dir1, "test_f1")); std::ofstream fout; fout.open(file1, std::ofstream::out); @@ -292,13 +292,13 @@ TEST(Util_TEST, findFile) fout.close(); // Relative path - auto systemPaths = ignition::common::systemPaths(); + auto systemPaths = gz::common::systemPaths(); ASSERT_NE(nullptr, systemPaths); EXPECT_EQ(file1, systemPaths->FindFile(common::joinPaths("test_dir1", "test_f1"), true)); // Relative prefixed by file: - EXPECT_EQ(file1, ignition::common::findFile("file:test_dir1/test_f1")); + EXPECT_EQ(file1, gz::common::findFile("file:test_dir1/test_f1")); // Custom callback #ifndef _WIN32 @@ -306,11 +306,11 @@ TEST(Util_TEST, findFile) #else const auto tmpDir = "C:\\Windows"; #endif - auto fileCb = [&tmpDir](const ignition::common::URI &) + auto fileCb = [&tmpDir](const gz::common::URI &) { return tmpDir; }; - ignition::common::addFindFileURICallback(fileCb); - EXPECT_EQ(tmpDir, ignition::common::findFile("model://banana")); + gz::common::addFindFileURICallback(fileCb); + EXPECT_EQ(tmpDir, gz::common::findFile("model://banana")); } diff --git a/src/Uuid.cc b/src/Uuid.cc index 46dac2872..9cce7d86e 100644 --- a/src/Uuid.cc +++ b/src/Uuid.cc @@ -18,9 +18,9 @@ #include <string> #include <vector> -#include "ignition/common/Uuid.hh" +#include "gz/common/Uuid.hh" -using namespace ignition; +using namespace gz; using namespace common; #ifdef _WIN32 diff --git a/src/Uuid_TEST.cc b/src/Uuid_TEST.cc index f0cc3a011..55c880483 100644 --- a/src/Uuid_TEST.cc +++ b/src/Uuid_TEST.cc @@ -19,10 +19,10 @@ #include <iostream> #include <string> -#include "ignition/common/Uuid.hh" +#include "gz/common/Uuid.hh" #include "gtest/gtest.h" -using namespace ignition; +using namespace gz; ////////////////////////////////////////////////// /// \brief Check the Uuid helper class. diff --git a/src/WorkerPool.cc b/src/WorkerPool.cc index ef096cd86..9418756ea 100644 --- a/src/WorkerPool.cc +++ b/src/WorkerPool.cc @@ -21,12 +21,12 @@ #include <thread> #include <utility> -#include "ignition/common/WorkerPool.hh" +#include "gz/common/WorkerPool.hh" -namespace igncmn = ignition::common; +namespace igncmn = gz::common; using namespace igncmn; -namespace ignition +namespace gz { namespace common { @@ -124,7 +124,7 @@ void WorkerPool::Implementation::Worker() ////////////////////////////////////////////////// WorkerPool::WorkerPool(const unsigned int _minThreadCount) - : dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) + : dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { unsigned int numWorkers = std::max(std::thread::hardware_concurrency(), std::max(_minThreadCount, 1u)); diff --git a/src/WorkerPool_TEST.cc b/src/WorkerPool_TEST.cc index 7d2f8252a..a1839c2e7 100644 --- a/src/WorkerPool_TEST.cc +++ b/src/WorkerPool_TEST.cc @@ -19,11 +19,11 @@ #include <atomic> -#include "ignition/common/Console.hh" -#include "ignition/common/WorkerPool.hh" -#include "ignition/utils/ExtraTestMacros.hh" +#include "gz/common/Console.hh" +#include "gz/common/WorkerPool.hh" +#include "gz/utils/ExtraTestMacros.hh" -namespace igncmn = ignition::common; +namespace igncmn = gz::common; using namespace igncmn; ////////////////////////////////////////////////// @@ -98,7 +98,7 @@ TEST(WorkerPool, WaitWithTimeout) ////////////////////////////////////////////////// // /TODO(anyone) Deflake this test -// ref: https://github.com/ignitionrobotics/ign-common/issues/52 +// ref: https://github.com/gazebosim/gz-common/issues/52 TEST(WorkerPool, IGN_UTILS_TEST_ENABLED_ONLY_ON_LINUX(WaitWithTimeoutThatTimesOut)) { @@ -112,14 +112,14 @@ TEST(WorkerPool, ////////////////////////////////////////////////// // /TODO(anyone) Deflake this test -// ref: https://github.com/ignitionrobotics/ign-common/issues/53 +// ref: https://github.com/gazebosim/gz-common/issues/53 TEST(WorkerPool, IGN_UTILS_TEST_ENABLED_ONLY_ON_LINUX(ThingsRunInParallel)) { const unsigned int hc = std::thread::hardware_concurrency(); if (2 > hc) { - igndbg << "Skipping the ThingsRunInParallel test because hardware " + gzdbg << "Skipping the ThingsRunInParallel test because hardware " << "concurrency (" << hc << ") is too low (min: 2), making the test " << "less likely to succeed.\n"; return; @@ -142,7 +142,7 @@ TEST(WorkerPool, EXPECT_TRUE(result); if (!result) { - igndbg << "WaitForResults failed" << std::endl; + gzdbg << "WaitForResults failed" << std::endl; } EXPECT_EQ(2, sentinel); } diff --git a/test/integration/CMakeLists.txt b/test/integration/CMakeLists.txt index a699fb6d6..696247eeb 100644 --- a/test/integration/CMakeLists.txt +++ b/test/integration/CMakeLists.txt @@ -15,7 +15,7 @@ if(TARGET INTEGRATION_plugin) # We add this dependency to make sure that DummyPlugins gets generated # before INTEGRATION_plugin so that its auto-generated header is available. # We do not want to link INTEGRATION_plugin to the DummyPlugins library. - add_dependencies(INTEGRATION_plugin IGNDummyPlugins) + add_dependencies(INTEGRATION_plugin GzDummyPlugins) endif() if(TARGET INTEGRATION_mesh) diff --git a/test/integration/console.cc b/test/integration/console.cc index e3f7c2313..f6b6bdccb 100644 --- a/test/integration/console.cc +++ b/test/integration/console.cc @@ -17,30 +17,30 @@ #include <gtest/gtest.h> -#include <ignition/common/Console.hh> -#include <ignition/common/testing/TestPaths.hh> +#include <gz/common/Console.hh> +#include <gz/common/testing/TestPaths.hh> ////////////////////////////////////////////////// TEST(Console_TEST, LogInitAfterConsoleOut) { std::string logFilename = "uri.log"; - auto tempDir = ignition::common::testing::MakeTestTempDirectory(); + auto tempDir = gz::common::testing::MakeTestTempDirectory(); ASSERT_TRUE(tempDir->Valid()); - ignition::common::setenv(IGN_HOMEDIR, tempDir->Path()); + gz::common::setenv(IGN_HOMEDIR, tempDir->Path()); std::string home; - ASSERT_TRUE(ignition::common::env(IGN_HOMEDIR, home)); + ASSERT_TRUE(gz::common::env(IGN_HOMEDIR, home)); auto logDir = tempDir->Path(); - std::string logFile = ignition::common::joinPaths(logDir, logFilename); + std::string logFile = gz::common::joinPaths(logDir, logFilename); - ignition::common::Console::SetVerbosity(4); + gz::common::Console::SetVerbosity(4); // Before console is initialized, logs go to default file location - ignerr << "Error before logging initialized" << std::endl; + gzerr << "Error before logging initialized" << std::endl; { - auto defaultPath = ignition::common::joinPaths(home, + auto defaultPath = gz::common::joinPaths(home, ".ignition", "auto_default.log"); std::ifstream t(defaultPath); @@ -53,10 +53,10 @@ TEST(Console_TEST, LogInitAfterConsoleOut) } // Initialize the log file. - ignLogInit(logDir, logFilename); + gzLogInit(logDir, logFilename); // After consolie is initialized, logs go to designated location - ignerr << "Error after logging initialized" << std::endl; + gzerr << "Error after logging initialized" << std::endl; { std::ifstream t(logFile); diff --git a/test/integration/deprecated_TEST.cc b/test/integration/deprecated_TEST.cc new file mode 100644 index 000000000..2e93a4e8d --- /dev/null +++ b/test/integration/deprecated_TEST.cc @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ + +#include <gtest/gtest.h> + +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + +#include <ignition/common/Battery.hh> +#include <ignition/utils/SuppressWarning.hh> + +///////////////////////////////////////////////// +// Make sure the ignition namespace still works +TEST(Deprecated, IgnitionNamespace) +{ + ignition::common::Battery battery; +} + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/integration/encoder_timing.cc b/test/integration/encoder_timing.cc index 13cc11461..4ac174d52 100644 --- a/test/integration/encoder_timing.cc +++ b/test/integration/encoder_timing.cc @@ -15,10 +15,10 @@ */ #include <gtest/gtest.h> #include <array> -#include "ignition/common/VideoEncoder.hh" -#include "ignition/common/Video.hh" +#include "gz/common/VideoEncoder.hh" +#include "gz/common/Video.hh" -using namespace ignition; +using namespace gz; using namespace common; const unsigned int kSize = 10; diff --git a/test/integration/mesh.cc b/test/integration/mesh.cc index 2db604f00..17d09ad79 100644 --- a/test/integration/mesh.cc +++ b/test/integration/mesh.cc @@ -17,18 +17,18 @@ #include <gtest/gtest.h> -#include "ignition/common/Material.hh" -#include "ignition/common/Mesh.hh" -#include "ignition/common/Skeleton.hh" -#include "ignition/common/SubMesh.hh" -#include "ignition/common/MeshManager.hh" -#include "ignition/common/SystemPaths.hh" -#include "ignition/math/Vector3.hh" +#include "gz/common/Material.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/Skeleton.hh" +#include "gz/common/SubMesh.hh" +#include "gz/common/MeshManager.hh" +#include "gz/common/SystemPaths.hh" +#include "gz/math/Vector3.hh" -#include <ignition/common/testing/AutoLogFixture.hh> -#include <ignition/common/testing/TestPaths.hh> +#include <gz/common/testing/AutoLogFixture.hh> +#include <gz/common/testing/TestPaths.hh> -using namespace ignition; +using namespace gz; class MeshTest : public common::testing::AutoLogFixture { }; @@ -151,11 +151,11 @@ TEST_F(MeshTest, Access) EXPECT_EQ(24u, mesh->TexCoordCount()); EXPECT_EQ(0u, mesh->MaterialCount()); - ignition::math::Vector3d center, min, max; + gz::math::Vector3d center, min, max; mesh->AABB(center, min, max); - EXPECT_TRUE(center == ignition::math::Vector3d(0, 0, 0)); - EXPECT_TRUE(min == ignition::math::Vector3d(-.5, -.5, -.5)); - EXPECT_TRUE(max == ignition::math::Vector3d(.5, .5, .5)); + EXPECT_TRUE(center == gz::math::Vector3d(0, 0, 0)); + EXPECT_TRUE(min == gz::math::Vector3d(-.5, -.5, -.5)); + EXPECT_TRUE(max == gz::math::Vector3d(.5, .5, .5)); double *vertArray = nullptr; int *indArray = nullptr; @@ -224,9 +224,9 @@ TEST_F(MeshTest, RoundtripStl) math::Vector3d center, min, max; mesh->AABB(center, min, max); - EXPECT_TRUE(center == ignition::math::Vector3d(0.5, 0.5, 0.5)); - EXPECT_TRUE(min == ignition::math::Vector3d(0, 0, 0)); - EXPECT_TRUE(max == ignition::math::Vector3d(1, 1, 1)); + EXPECT_TRUE(center == gz::math::Vector3d(0.5, 0.5, 0.5)); + EXPECT_TRUE(min == gz::math::Vector3d(0, 0, 0)); + EXPECT_TRUE(max == gz::math::Vector3d(1, 1, 1)); } ///////////////////////////////////////////////// diff --git a/test/integration/plugin.cc b/test/integration/plugin.cc index a2fecdc4c..2ce0ba919 100644 --- a/test/integration/plugin.cc +++ b/test/integration/plugin.cc @@ -22,6 +22,8 @@ #include <gtest/gtest.h> +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include <string> #include <vector> #include <iostream> @@ -42,9 +44,9 @@ IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION TEST(PluginLoader, LoadBadPlugins) { std::string dummyPath = - ignition::common::copyFromUnixPath(IGN_DUMMY_PLUGIN_PATH); + gz::common::copyFromUnixPath(IGN_DUMMY_PLUGIN_PATH); - ignition::common::SystemPaths sp; + gz::common::SystemPaths sp; sp.AddPluginPaths(dummyPath); std::vector<std::string> libraryNames = { @@ -57,10 +59,10 @@ TEST(PluginLoader, LoadBadPlugins) std::string path = sp.FindSharedLibrary(libraryName); ASSERT_FALSE(path.empty()); - ignition::common::PluginLoader pl; + gz::common::PluginLoader pl; // Make sure the expected plugins were loaded. - ignition::common::Console::SetVerbosity(2); + gz::common::Console::SetVerbosity(2); std::unordered_set<std::string> pluginNames = pl.LoadLibrary(path); EXPECT_TRUE(pluginNames.empty()); } @@ -70,15 +72,15 @@ TEST(PluginLoader, LoadBadPlugins) TEST(PluginLoader, LoadExistingLibrary) { std::string dummyPath = - ignition::common::copyFromUnixPath(IGN_DUMMY_PLUGIN_PATH); + gz::common::copyFromUnixPath(IGN_DUMMY_PLUGIN_PATH); - ignition::common::SystemPaths sp; + gz::common::SystemPaths sp; sp.AddPluginPaths(dummyPath); - std::string path = sp.FindSharedLibrary("IGNDummyPlugins"); + std::string path = sp.FindSharedLibrary("GzDummyPlugins"); ASSERT_FALSE(path.empty()); - ignition::common::PluginLoader pl; + gz::common::PluginLoader pl; // Make sure the expected plugins were loaded. std::unordered_set<std::string> pluginNames = pl.LoadLibrary(path); @@ -95,7 +97,7 @@ TEST(PluginLoader, LoadExistingLibrary) EXPECT_EQ(1u, pl.PluginsImplementing("::test::util::DummyDoubleBase").size()); - ignition::common::PluginPtr firstPlugin = + gz::common::PluginPtr firstPlugin = pl.Instantiate("test::util::DummySinglePlugin"); EXPECT_FALSE(firstPlugin.IsEmpty()); EXPECT_TRUE(firstPlugin->HasInterface("test::util::DummyNameBase")); @@ -103,7 +105,7 @@ TEST(PluginLoader, LoadExistingLibrary) EXPECT_FALSE(firstPlugin->HasInterface("test::util::DummyIntBase")); EXPECT_FALSE(firstPlugin->HasInterface("test::util::DummySetterBase")); - ignition::common::PluginPtr secondPlugin = + gz::common::PluginPtr secondPlugin = pl.Instantiate("test::util::DummyMultiPlugin"); EXPECT_FALSE(secondPlugin.IsEmpty()); EXPECT_TRUE(secondPlugin->HasInterface("test::util::DummyNameBase")); @@ -158,19 +160,19 @@ class SomeInterface }; using SomeSpecializedPluginPtr = - ignition::common::SpecializedPluginPtr< + gz::common::SpecializedPluginPtr< SomeInterface, test::util::DummyIntBase, test::util::DummySetterBase>; TEST(SpecializedPluginPtr, Construction) { - ignition::common::SystemPaths sp; + gz::common::SystemPaths sp; sp.AddPluginPaths(IGN_DUMMY_PLUGIN_PATH); - std::string path = sp.FindSharedLibrary("IGNDummyPlugins"); + std::string path = sp.FindSharedLibrary("GzDummyPlugins"); ASSERT_FALSE(path.empty()); - ignition::common::PluginLoader pl; + gz::common::PluginLoader pl; pl.LoadLibrary(path); SomeSpecializedPluginPtr plugin( @@ -225,8 +227,8 @@ TEST(SpecializedPluginPtr, Construction) template <typename PluginPtrType1, typename PluginPtrType2> void TestSetAndMapUsage( - const ignition::common::PluginLoader &loader, - const ignition::common::PluginPtr &plugin) + const gz::common::PluginLoader &loader, + const gz::common::PluginPtr &plugin) { PluginPtrType1 plugin1 = plugin; PluginPtrType2 plugin2 = plugin1; @@ -239,22 +241,22 @@ void TestSetAndMapUsage( EXPECT_TRUE(plugin2 == plugin1); EXPECT_FALSE(plugin2 != plugin1); - std::set<ignition::common::PluginPtr> orderedSet; + std::set<gz::common::PluginPtr> orderedSet; EXPECT_TRUE(orderedSet.insert(plugin1).second); EXPECT_FALSE(orderedSet.insert(plugin1).second); EXPECT_FALSE(orderedSet.insert(plugin2).second); - std::unordered_set<ignition::common::PluginPtr> unorderedSet; + std::unordered_set<gz::common::PluginPtr> unorderedSet; EXPECT_TRUE(unorderedSet.insert(plugin1).second); EXPECT_FALSE(unorderedSet.insert(plugin1).second); EXPECT_FALSE(unorderedSet.insert(plugin2).second); - std::map<ignition::common::PluginPtr, std::string> orderedMap; + std::map<gz::common::PluginPtr, std::string> orderedMap; EXPECT_TRUE(orderedMap.insert(std::make_pair(plugin1, "some string")).second); EXPECT_FALSE(orderedMap.insert(std::make_pair(plugin1, "a string")).second); EXPECT_FALSE(orderedMap.insert(std::make_pair(plugin2, "chars")).second); - std::unordered_map<ignition::common::PluginPtr, std::string> unorderedMap; + std::unordered_map<gz::common::PluginPtr, std::string> unorderedMap; EXPECT_TRUE(unorderedMap.insert(std::make_pair(plugin1, "strings")).second); EXPECT_FALSE(unorderedMap.insert(std::make_pair(plugin1, "letters")).second); EXPECT_FALSE(unorderedMap.insert(std::make_pair(plugin2, "")).second); @@ -280,30 +282,30 @@ void TestSetAndMapUsage( } using SingleSpecializedPluginPtr = - ignition::common::SpecializedPluginPtr<SomeInterface>; + gz::common::SpecializedPluginPtr<SomeInterface>; using AnotherSpecializedPluginPtr = - ignition::common::SpecializedPluginPtr< + gz::common::SpecializedPluginPtr< SomeInterface, test::util::DummyIntBase>; TEST(PluginPtr, CopyMoveSemantics) { - ignition::common::PluginPtr plugin; + gz::common::PluginPtr plugin; EXPECT_TRUE(plugin.IsEmpty()); - ignition::common::SystemPaths sp; + gz::common::SystemPaths sp; sp.AddPluginPaths(IGN_DUMMY_PLUGIN_PATH); - std::string path = sp.FindSharedLibrary("IGNDummyPlugins"); + std::string path = sp.FindSharedLibrary("GzDummyPlugins"); ASSERT_FALSE(path.empty()); - ignition::common::PluginLoader pl; + gz::common::PluginLoader pl; pl.LoadLibrary(path); plugin = pl.Instantiate("test::util::DummySinglePlugin"); EXPECT_FALSE(plugin.IsEmpty()); - ignition::common::PluginPtr otherPlugin = + gz::common::PluginPtr otherPlugin = pl.Instantiate("test::util::DummySinglePlugin"); EXPECT_FALSE(otherPlugin.IsEmpty()); @@ -314,34 +316,34 @@ TEST(PluginPtr, CopyMoveSemantics) EXPECT_TRUE(plugin == otherPlugin); EXPECT_FALSE(plugin != otherPlugin); - igndbg << "Testing sets and maps with PluginPtr and PluginPtr\n"; + gzdbg << "Testing sets and maps with PluginPtr and PluginPtr\n"; TestSetAndMapUsage< - ignition::common::PluginPtr, - ignition::common::PluginPtr>( + gz::common::PluginPtr, + gz::common::PluginPtr>( pl, plugin); - igndbg << "Testing sets and maps with PluginPtr and " + gzdbg << "Testing sets and maps with PluginPtr and " << "SomeSpecializedPluginPtr\n"; TestSetAndMapUsage< - ignition::common::PluginPtr, + gz::common::PluginPtr, SomeSpecializedPluginPtr>( pl, plugin); - igndbg << "Testing sets and maps with SomeSpecializedPluginPtr and " + gzdbg << "Testing sets and maps with SomeSpecializedPluginPtr and " << "AnotherSpecializedPluginPtr\n"; TestSetAndMapUsage< SomeSpecializedPluginPtr, AnotherSpecializedPluginPtr>( pl, plugin); - igndbg << "Testing sets and maps with AnotherSpecializedPluginPtr and " + gzdbg << "Testing sets and maps with AnotherSpecializedPluginPtr and " << "SingleSpecializedPluginPtr\n"; TestSetAndMapUsage< AnotherSpecializedPluginPtr, SingleSpecializedPluginPtr>( pl, plugin); - ignition::common::ConstPluginPtr c_plugin(plugin); + gz::common::ConstPluginPtr c_plugin(plugin); EXPECT_FALSE(c_plugin.IsEmpty()); EXPECT_TRUE(c_plugin == plugin); @@ -372,17 +374,17 @@ void CheckSomeValues( TEST(PluginPtr, QueryInterfaceSharedPtr) { - ignition::common::SystemPaths sp; + gz::common::SystemPaths sp; sp.AddPluginPaths(IGN_DUMMY_PLUGIN_PATH); - std::string path = sp.FindSharedLibrary("IGNDummyPlugins"); + std::string path = sp.FindSharedLibrary("GzDummyPlugins"); ASSERT_FALSE(path.empty()); - ignition::common::PluginLoader pl; + gz::common::PluginLoader pl; pl.LoadLibrary(path); // as_shared_pointer without specialization { - ignition::common::PluginPtr plugin = + gz::common::PluginPtr plugin = pl.Instantiate("test::util::DummyMultiPlugin"); std::shared_ptr<test::util::DummyIntBase> int_ptr = @@ -438,3 +440,5 @@ TEST(PluginPtr, QueryInterfaceSharedPtr) CheckSomeValues(getInt, getDouble, getName); } IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/integration/video_encoder.cc b/test/integration/video_encoder.cc index a833c2c13..13907d73e 100644 --- a/test/integration/video_encoder.cc +++ b/test/integration/video_encoder.cc @@ -18,15 +18,15 @@ // needed on MacOS #include <cmath> -#include "ignition/common/Console.hh" -#include "ignition/common/VideoEncoder.hh" -#include "ignition/common/Video.hh" -#include "ignition/common/ffmpeg_inc.hh" +#include "gz/common/Console.hh" +#include "gz/common/VideoEncoder.hh" +#include "gz/common/Video.hh" +#include "gz/common/ffmpeg_inc.hh" -#include <ignition/common/testing/AutoLogFixture.hh> -#include <ignition/common/testing/TestPaths.hh> +#include <gz/common/testing/AutoLogFixture.hh> +#include <gz/common/testing/TestPaths.hh> -using namespace ignition; +using namespace gz; using namespace common; using namespace std::chrono; auto Now = steady_clock::now; @@ -92,7 +92,7 @@ TEST_F(EncoderDecoderTest, DecodeEncodeDecode) if ((Now() - fps_start) > seconds(1)) { double dur = duration<double>(Now() - fps_start).count(); double currentFps = fps_frames / dur; - ignmsg << "FPS: " << currentFps << std::endl; + gzmsg << "FPS: " << currentFps << std::endl; fps_start = Now(); fps_frames = 0; } diff --git a/test/performance/CMakeLists.txt b/test/performance/CMakeLists.txt index 56babb295..bde3835bb 100644 --- a/test/performance/CMakeLists.txt +++ b/test/performance/CMakeLists.txt @@ -16,5 +16,5 @@ ign_build_tests( if(TARGET PERFORMANCE_plugin_specialization) # We add this dependency to make sure that DummyPlugins gets generated # before PERFORMANCE_plugin_specialization so that its auto-generated header is available. - add_dependencies(PERFORMANCE_plugin_specialization IGNDummyPlugins) + add_dependencies(PERFORMANCE_plugin_specialization GzDummyPlugins) endif() diff --git a/test/performance/plugin_specialization.cc b/test/performance/plugin_specialization.cc index a508154fc..16ac92923 100644 --- a/test/performance/plugin_specialization.cc +++ b/test/performance/plugin_specialization.cc @@ -16,6 +16,8 @@ */ #include <gtest/gtest.h> +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include <chrono> #include <iomanip> #include <cmath> @@ -59,26 +61,26 @@ IGN_CREATE_SPEC_INTERFACE(Interface19) // Specialize for only 1 type using Specialize1Type = - ignition::common::SpecializedPluginPtr<test::util::DummySetterBase>; + gz::common::SpecializedPluginPtr<test::util::DummySetterBase>; // Specialize for 3 different types, and put the type we care about first in // the list. using Specialize3Types_Leading = - ignition::common::SpecializedPluginPtr< + gz::common::SpecializedPluginPtr< test::util::DummySetterBase, Interface1, Interface2>; // Specialize for 3 different types, and put the type we care about last in // the list. using Specialize3Types_Trailing = - ignition::common::SpecializedPluginPtr< + gz::common::SpecializedPluginPtr< Interface1, Interface2, test::util::DummySetterBase>; // Specialize for 10 different types, and put the type we care about first in // the list. using Specialize10Types_Leading = - ignition::common::SpecializedPluginPtr< + gz::common::SpecializedPluginPtr< test::util::DummySetterBase, Interface1, Interface2, Interface3, Interface4, Interface5, Interface6, Interface7, Interface8, Interface9>; @@ -86,7 +88,7 @@ using Specialize10Types_Leading = // Specialize for 10 different types, and put the type we care about last in // the list. using Specialize10Types_Trailing = - ignition::common::SpecializedPluginPtr< + gz::common::SpecializedPluginPtr< Interface1, Interface2, Interface3, Interface4, Interface5, Interface6, Interface7, Interface8, Interface9, test::util::DummySetterBase>; @@ -94,7 +96,7 @@ using Specialize10Types_Trailing = // Specialize for 20 different types, and put the type we care about first in // the list. using Specialize20Types_Leading = - ignition::common::SpecializedPluginPtr< + gz::common::SpecializedPluginPtr< test::util::DummySetterBase, Interface1, Interface2, Interface3, Interface4, Interface5, Interface6, Interface7, Interface8, Interface9, Interface10, @@ -104,7 +106,7 @@ using Specialize20Types_Leading = // Specialize for 20 different types, and put the type we care about last in // the list. using Specialize20Types_Trailing = - ignition::common::SpecializedPluginPtr< + gz::common::SpecializedPluginPtr< Interface1, Interface2, Interface3, Interface4, Interface5, Interface6, Interface7, Interface8, Interface9, Interface10, Interface11, Interface12, Interface13, Interface14, Interface15, @@ -134,16 +136,16 @@ double RunPerformanceTest(const PluginType &plugin) ///////////////////////////////////////////////// TEST(PluginSpecialization, AccessTime) { - ignition::common::SystemPaths sp; + gz::common::SystemPaths sp; sp.AddPluginPaths(IGN_DUMMY_PLUGIN_PATH); - std::string path = sp.FindSharedLibrary("IGNDummyPlugins"); + std::string path = sp.FindSharedLibrary("GzDummyPlugins"); ASSERT_FALSE(path.empty()); - ignition::common::PluginLoader pl; + gz::common::PluginLoader pl; pl.LoadLibrary(path); // Load up the generic plugin - ignition::common::PluginPtr plugin = + gz::common::PluginPtr plugin = pl.Instantiate("::test::util::DummyMultiPlugin"); // Create specialized versions @@ -234,3 +236,5 @@ TEST(PluginSpecialization, AccessTime) } IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/plugins/BadPluginAPIVersionNew.cc b/test/plugins/BadPluginAPIVersionNew.cc index 12ca82911..9d981f6a8 100644 --- a/test/plugins/BadPluginAPIVersionNew.cc +++ b/test/plugins/BadPluginAPIVersionNew.cc @@ -15,6 +15,8 @@ * */ +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include <limits> #include "ignition/common/PluginMacros.hh" #include "gz/utils/SuppressWarning.hh" @@ -23,10 +25,10 @@ IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION extern "C" { std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoSize = - sizeof(ignition::common::PluginInfo); + sizeof(gz::common::PluginInfo); std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoAlignment = - alignof(ignition::common::PluginInfo); + alignof(gz::common::PluginInfo); int DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginAPIVersion = std::numeric_limits<int>::max(); @@ -40,3 +42,4 @@ extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/plugins/BadPluginAPIVersionOld.cc b/test/plugins/BadPluginAPIVersionOld.cc index 9fad92792..0d5f12c6f 100644 --- a/test/plugins/BadPluginAPIVersionOld.cc +++ b/test/plugins/BadPluginAPIVersionOld.cc @@ -15,6 +15,8 @@ * */ +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include "ignition/common/PluginMacros.hh" #include "gz/utils/SuppressWarning.hh" @@ -22,10 +24,10 @@ IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION extern "C" { std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoSize = - sizeof(ignition::common::PluginInfo); + sizeof(gz::common::PluginInfo); std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoAlignment = - alignof(ignition::common::PluginInfo); + alignof(gz::common::PluginInfo); int DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginAPIVersion = -1; } @@ -37,3 +39,5 @@ extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( } IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/plugins/BadPluginAlign.cc b/test/plugins/BadPluginAlign.cc index 78d12a3c4..40877371a 100644 --- a/test/plugins/BadPluginAlign.cc +++ b/test/plugins/BadPluginAlign.cc @@ -15,6 +15,8 @@ * */ +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include "ignition/common/PluginMacros.hh" #include "gz/utils/SuppressWarning.hh" @@ -22,13 +24,13 @@ IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION extern "C" { std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoSize = - sizeof(ignition::common::PluginInfo); + sizeof(gz::common::PluginInfo); std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoAlignment = - 1 + alignof(ignition::common::PluginInfo); + 1 + alignof(gz::common::PluginInfo); int DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginAPIVersion = - ignition::common::PLUGIN_API_VERSION; + gz::common::PLUGIN_API_VERSION; } extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( @@ -38,3 +40,5 @@ extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( } IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/plugins/BadPluginSize.cc b/test/plugins/BadPluginSize.cc index ede97286f..936a3a438 100644 --- a/test/plugins/BadPluginSize.cc +++ b/test/plugins/BadPluginSize.cc @@ -15,6 +15,8 @@ * */ +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include "ignition/common/PluginMacros.hh" #include "gz/utils/SuppressWarning.hh" @@ -22,13 +24,13 @@ IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION extern "C" { std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoSize = - 1 + sizeof(ignition::common::PluginInfo); + 1 + sizeof(gz::common::PluginInfo); std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoAlignment = - alignof(ignition::common::PluginInfo); + alignof(gz::common::PluginInfo); int DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginAPIVersion = - ignition::common::PLUGIN_API_VERSION; + gz::common::PLUGIN_API_VERSION; } extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( @@ -38,3 +40,5 @@ extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( } IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/plugins/CMakeLists.txt b/test/plugins/CMakeLists.txt index 9c82a014c..6655b4613 100644 --- a/test/plugins/CMakeLists.txt +++ b/test/plugins/CMakeLists.txt @@ -6,44 +6,44 @@ add_library(IGNBadPluginAPIVersionOld SHARED BadPluginAPIVersionOld.cc) target_link_libraries(IGNBadPluginAPIVersionOld PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) add_library(IGNBadPluginSize SHARED BadPluginSize.cc) target_link_libraries(IGNBadPluginSize PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) -add_library(IGNDummyPlugins SHARED DummyPlugins.cc) -target_link_libraries(IGNDummyPlugins PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) +add_library(GzDummyPlugins SHARED DummyPlugins.cc) +target_link_libraries(GzDummyPlugins PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) set_property(TARGET IGNBadPluginAlign PROPERTY CXX_STANDARD 11) set_property(TARGET IGNBadPluginAPIVersionNew PROPERTY CXX_STANDARD 11) set_property(TARGET IGNBadPluginAPIVersionOld PROPERTY CXX_STANDARD 11) set_property(TARGET IGNBadPluginSize PROPERTY CXX_STANDARD 11) -set_property(TARGET IGNDummyPlugins PROPERTY CXX_STANDARD 11) +set_property(TARGET GzDummyPlugins PROPERTY CXX_STANDARD 11) # Create a variable for the name of the header which will contain the dummy plugin path. # This variable gets put in the cache so that it is available at generation time. set(IGN_DUMMY_PLUGIN_PATH_HEADER "DummyPluginsPath.h" CACHE INTERNAL "Name of header which contains DummyPlugin library path") if(WIN32) - get_target_property(IGNDummyPluginsLocation IGNDummyPlugins RUNTIME_OUTPUT_DIRECTORY) + get_target_property(GzDummyPluginsLocation GzDummyPlugins RUNTIME_OUTPUT_DIRECTORY) else() - get_target_property(IGNDummyPluginsLocation IGNDummyPlugins LIBRARY_OUTPUT_DIRECTORY) + get_target_property(GzDummyPluginsLocation GzDummyPlugins LIBRARY_OUTPUT_DIRECTORY) endif() -set(header_text "#define IGN_DUMMY_PLUGIN_PATH \"${IGNDummyPluginsLocation}\"") +set(header_text "#define IGN_DUMMY_PLUGIN_PATH \"${GzDummyPluginsLocation}\"") # Pipe the header text into a header that will be placed in the project binary directory. # We need to use this approach instead of the usual configure_file, because we required a -# generator expression in order to locate the IGNDummyPlugins library on Windows. Generator +# generator expression in order to locate the GzDummyPlugins library on Windows. Generator # expressions can only be evaluated during generation (as opposed to during configuration), # so we must use add_custom_command in order to produce this header. -add_custom_target(IGNDummyPluginsPathHeader) +add_custom_target(GzDummyPluginsPathHeader) if(WIN32) # Including VERBATIM causes the wrong behavior on Windows, so we leave it out of the # custom command when compiling on Windows. - add_custom_command(TARGET IGNDummyPluginsPathHeader + add_custom_command(TARGET GzDummyPluginsPathHeader PRE_BUILD COMMAND echo ARGS "${header_text}" > ${PROJECT_BINARY_DIR}/${IGN_DUMMY_PLUGIN_PATH_HEADER}) else() - add_custom_command(TARGET IGNDummyPluginsPathHeader + add_custom_command(TARGET GzDummyPluginsPathHeader PRE_BUILD COMMAND echo ARGS "${header_text}" > ${PROJECT_BINARY_DIR}/${IGN_DUMMY_PLUGIN_PATH_HEADER} VERBATIM) endif() -add_dependencies(IGNDummyPlugins IGNDummyPluginsPathHeader) +add_dependencies(GzDummyPlugins GzDummyPluginsPathHeader) diff --git a/test/plugins/DummyPlugins.cc b/test/plugins/DummyPlugins.cc index 91c603984..798f2b06e 100644 --- a/test/plugins/DummyPlugins.cc +++ b/test/plugins/DummyPlugins.cc @@ -15,6 +15,8 @@ * */ +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include "ignition/common/PluginMacros.hh" #include "gz/utils/SuppressWarning.hh" #include "DummyPlugins.hh" @@ -91,3 +93,5 @@ IGN_COMMON_BEGIN_ADDING_PLUGINS IGN_COMMON_FINISH_ADDING_PLUGINS IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/plugins/DummyPlugins.hh b/test/plugins/DummyPlugins.hh index eaaf8db77..c8d70ba6a 100644 --- a/test/plugins/DummyPlugins.hh +++ b/test/plugins/DummyPlugins.hh @@ -16,8 +16,10 @@ */ -#ifndef IGNITION_COMMON_TEST_PLUGINS_DUMMY_PLUGINS_HH_ -#define IGNITION_COMMON_TEST_PLUGINS_DUMMY_PLUGINS_HH_ +#ifndef GZ_COMMON_TEST_PLUGINS_DUMMY_PLUGINS_HH_ +#define GZ_COMMON_TEST_PLUGINS_DUMMY_PLUGINS_HH_ + +#define SUPPRESS_IGNITION_HEADER_DEPRECATION #include <string> #include <memory> @@ -98,5 +100,6 @@ class DummyMultiPlugin } } - #endif + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_bad_const_assignment.cc b/test/static_assertions/plugin_bad_const_assignment.cc index 46282a6f1..dab667fcd 100644 --- a/test/static_assertions/plugin_bad_const_assignment.cc +++ b/test/static_assertions/plugin_bad_const_assignment.cc @@ -18,12 +18,16 @@ #include <gz/utils/SuppressWarning.hh> IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include "ignition/common/PluginPtr.hh" int main() { - ignition::common::ConstPluginPtr const_ptr; - ignition::common::PluginPtr ptr; + gz::common::ConstPluginPtr const_ptr; + gz::common::PluginPtr ptr; ptr = const_ptr; } IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_bad_const_construct.cc b/test/static_assertions/plugin_bad_const_construct.cc index 50757befe..f89119db6 100644 --- a/test/static_assertions/plugin_bad_const_construct.cc +++ b/test/static_assertions/plugin_bad_const_construct.cc @@ -18,10 +18,14 @@ #include <gz/utils/SuppressWarning.hh> IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include "ignition/common/PluginPtr.hh" int main() { - ignition::common::PluginPtr ptr{ignition::common::ConstPluginPtr()}; + gz::common::PluginPtr ptr{gz::common::ConstPluginPtr()}; } IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_no_base_class.cc b/test/static_assertions/plugin_no_base_class.cc index 62958c0b5..c7c931080 100644 --- a/test/static_assertions/plugin_no_base_class.cc +++ b/test/static_assertions/plugin_no_base_class.cc @@ -18,6 +18,7 @@ #include <gz/utils/SuppressWarning.hh> IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#define SUPPRESS_IGNITION_HEADER_DEPRECATION #include "ignition/common/PluginMacros.hh" @@ -35,3 +36,5 @@ class NotBase IGN_COMMON_REGISTER_SINGLE_PLUGIN(A, NotBase) IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_not_fully_qualified_base.cc b/test/static_assertions/plugin_not_fully_qualified_base.cc index 90d402519..7d44febb2 100644 --- a/test/static_assertions/plugin_not_fully_qualified_base.cc +++ b/test/static_assertions/plugin_not_fully_qualified_base.cc @@ -18,6 +18,7 @@ #include <gz/utils/SuppressWarning.hh> IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#define SUPPRESS_IGNITION_HEADER_DEPRECATION #include "ignition/common/PluginMacros.hh" @@ -42,3 +43,5 @@ using ns::Base; IGN_COMMON_REGISTER_SINGLE_PLUGIN(ns::A, Base) IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_not_fully_qualified_class.cc b/test/static_assertions/plugin_not_fully_qualified_class.cc index 4de493564..e00b8cce6 100644 --- a/test/static_assertions/plugin_not_fully_qualified_class.cc +++ b/test/static_assertions/plugin_not_fully_qualified_class.cc @@ -18,6 +18,8 @@ #include <gz/utils/SuppressWarning.hh> IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include "ignition/common/PluginMacros.hh" namespace ns @@ -41,3 +43,5 @@ using ns::A; IGN_COMMON_REGISTER_SINGLE_PLUGIN(A, ns::Base) IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_not_global_ns.cc b/test/static_assertions/plugin_not_global_ns.cc index 4250c4055..061fee0e6 100644 --- a/test/static_assertions/plugin_not_global_ns.cc +++ b/test/static_assertions/plugin_not_global_ns.cc @@ -17,6 +17,7 @@ #include <gz/utils/SuppressWarning.hh> IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#define SUPPRESS_IGNITION_HEADER_DEPRECATION #include "ignition/common/PluginMacros.hh" @@ -38,3 +39,4 @@ IGN_COMMON_REGISTER_SINGLE_PLUGIN(ns::A, ns::Base) } IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_wrong_base_class.cc b/test/static_assertions/plugin_wrong_base_class.cc index 1816b1b62..b4b2a2cf4 100644 --- a/test/static_assertions/plugin_wrong_base_class.cc +++ b/test/static_assertions/plugin_wrong_base_class.cc @@ -18,6 +18,7 @@ #include <gz/utils/SuppressWarning.hh> IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#define SUPPRESS_IGNITION_HEADER_DEPRECATION #include "ignition/common/PluginMacros.hh" @@ -46,3 +47,4 @@ class A : public Base IGN_COMMON_REGISTER_SINGLE_PLUGIN(ns::A, ns::WrongBase) IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +#undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/testing/include/gz/common/testing/AutoLogFixture.hh b/testing/include/gz/common/testing/AutoLogFixture.hh index 204b3107b..a63080279 100644 --- a/testing/include/gz/common/testing/AutoLogFixture.hh +++ b/testing/include/gz/common/testing/AutoLogFixture.hh @@ -24,7 +24,7 @@ #include <gz/utils/ImplPtr.hh> -namespace ignition::common::testing +namespace gz::common::testing { /// \brief A utility class that stores test logs in ~/.ignition/test_logs. /// This functionality is needed to keep all the log information reported @@ -52,7 +52,7 @@ class AutoLogFixture : public ::testing::Test /// \brief Pointer to private data. IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; -} // namespace ignition::common::testing +} // namespace gz::common::testing #include <gz/common/testing/detail/AutoLogFixture.hh> diff --git a/testing/include/gz/common/testing/BazelTestPaths.hh b/testing/include/gz/common/testing/BazelTestPaths.hh index f50ff7718..86440fb78 100644 --- a/testing/include/gz/common/testing/BazelTestPaths.hh +++ b/testing/include/gz/common/testing/BazelTestPaths.hh @@ -22,7 +22,7 @@ #include "gz/common/testing/TestPaths.hh" #include "gz/common/testing/Export.hh" -namespace ignition::common::testing +namespace gz::common::testing { /// \brief Implementation of TestPaths interface for Bazel @@ -42,17 +42,17 @@ class BazelTestPaths: public TestPaths public: using TestPaths::TestPaths; /// \brief Destructor - public: IGNITION_COMMON_TESTING_VISIBLE ~BazelTestPaths() override; + public: GZ_COMMON_TESTING_VISIBLE ~BazelTestPaths() override; /// Documentation inherited - public: bool IGNITION_COMMON_TESTING_VISIBLE + public: bool GZ_COMMON_TESTING_VISIBLE ProjectSourcePath(std::string &_sourceDir) override; /// Documentation inherited - public: bool IGNITION_COMMON_TESTING_VISIBLE + public: bool GZ_COMMON_TESTING_VISIBLE TestTmpPath(std::string &_tmpDir) override; }; -} // namespace ignition::common::testing +} // namespace gz::common::testing #endif // GZ_COMMON_TESTING_AUTOLOGFIXTURE_HH_ diff --git a/testing/include/gz/common/testing/CMakeTestPaths.hh b/testing/include/gz/common/testing/CMakeTestPaths.hh index 1ce948bc4..362ae2953 100644 --- a/testing/include/gz/common/testing/CMakeTestPaths.hh +++ b/testing/include/gz/common/testing/CMakeTestPaths.hh @@ -22,7 +22,7 @@ #include "gz/common/testing/TestPaths.hh" #include "gz/common/testing/Export.hh" -namespace ignition::common::testing +namespace gz::common::testing { /// \brief Implementation of TestPaths interface for CMake /// @@ -34,15 +34,15 @@ class CMakeTestPaths: public TestPaths public: using TestPaths::TestPaths; /// \brief Destructor - public: IGNITION_COMMON_TESTING_VISIBLE ~CMakeTestPaths() override; + public: GZ_COMMON_TESTING_VISIBLE ~CMakeTestPaths() override; /// Documentation inherited - public: bool IGNITION_COMMON_TESTING_VISIBLE + public: bool GZ_COMMON_TESTING_VISIBLE ProjectSourcePath(std::string &_sourceDir) override; /// Documentation inherited - public: bool IGNITION_COMMON_TESTING_VISIBLE + public: bool GZ_COMMON_TESTING_VISIBLE TestTmpPath(std::string &_tmpDir) override; }; -} // namespace ignition::common::testing +} // namespace gz::common::testing #endif // GZ_COMMON_TESTING_CMAKETESTPATHS_HH_ diff --git a/testing/include/gz/common/testing/TestPaths.hh b/testing/include/gz/common/testing/TestPaths.hh index 1fb7b3894..349da2448 100644 --- a/testing/include/gz/common/testing/TestPaths.hh +++ b/testing/include/gz/common/testing/TestPaths.hh @@ -30,7 +30,7 @@ #define TESTING_PROJECT_SOURCE_DIR "" #endif -namespace ignition::common::testing +namespace gz::common::testing { ////////////////////////////////////////////////// @@ -46,7 +46,7 @@ constexpr char kTestingProjectSourceDir[] = TESTING_PROJECT_SOURCE_DIR; ////////////////////////////////////////////////// /// \brief List of buildsystem types -enum class IGNITION_COMMON_TESTING_VISIBLE BuildType +enum class GZ_COMMON_TESTING_VISIBLE BuildType { kUnknown, kCMake, @@ -63,24 +63,24 @@ class TestPaths { /// \brief Constructor /// \param[in] _projectSourcePath Path to the root of the project source - public: IGNITION_COMMON_TESTING_VISIBLE + public: GZ_COMMON_TESTING_VISIBLE explicit TestPaths(const std::string &_projectSourcePath = kTestingProjectSourceDir); /// \brief Destructor - public: IGNITION_COMMON_TESTING_VISIBLE + public: GZ_COMMON_TESTING_VISIBLE virtual ~TestPaths() = 0; /// brief Populate the path to the root project source directory /// \param[out] _sourceDir path to the root project source directory /// \return True if path successfully found and set, false otherwise - public: virtual bool IGNITION_COMMON_TESTING_VISIBLE + public: virtual bool GZ_COMMON_TESTING_VISIBLE ProjectSourcePath(std::string &_sourceDir) = 0; /// \brief Populate the path to a temporary directory /// \param[out] _tmpDir path to the root temporary directory /// \return True if path successfully found and set, false otherwise - public: virtual bool IGNITION_COMMON_TESTING_VISIBLE + public: virtual bool GZ_COMMON_TESTING_VISIBLE TestTmpPath(std::string &_tmpDir) = 0; /// \brief Path to the root of the project source @@ -98,8 +98,8 @@ class TestPaths /// \param[in] _cleanup True to indicate that the filesystem should /// be cleaned as part of the destructor /// \return Shared pointer to TempDirectory -std::shared_ptr<ignition::common::TempDirectory> -IGNITION_COMMON_TESTING_VISIBLE +std::shared_ptr<gz::common::TempDirectory> +GZ_COMMON_TESTING_VISIBLE MakeTestTempDirectoryImpl(const std::string &_projectSourcePath, const std::string &_prefix = "test", const std::string &_subDir = "ignition", @@ -117,7 +117,7 @@ MakeTestTempDirectoryImpl(const std::string &_projectSourcePath, /// \param[in] _cleanup True to indicate that the filesystem should /// be cleaned as part of the destructor /// \return Shared pointer to TempDirectory -inline std::shared_ptr<ignition::common::TempDirectory> +inline std::shared_ptr<gz::common::TempDirectory> MakeTestTempDirectory(const std::string &_prefix = "test", const std::string &_subDir = "ignition", bool _cleanup = true) @@ -134,7 +134,7 @@ MakeTestTempDirectory(const std::string &_prefix = "test", /// \param[in] _projectSourcePath Root of project source or empty /// \return The current build type BuildType -IGNITION_COMMON_TESTING_VISIBLE +GZ_COMMON_TESTING_VISIBLE TestBuildType( const std::string &_projectSourcePath = kTestingProjectSourceDir); @@ -144,7 +144,7 @@ TestBuildType( /// \param[in] _projectSourcePath Root of project source or empty /// \return TestPaths implementation for the current build type std::unique_ptr<TestPaths> -IGNITION_COMMON_TESTING_VISIBLE +GZ_COMMON_TESTING_VISIBLE TestPathFactory( const std::string &_projectSourcePath = kTestingProjectSourceDir); @@ -197,5 +197,5 @@ std::string TempPath(Args const &... args) testPaths->TestTmpPath(dataDir); return common::joinPaths(dataDir, args...); } -} // namespace ignition::common::testing +} // namespace gz::common::testing #endif // GZ_COMMON_TESTING_TESTPATHS_HH_ diff --git a/testing/include/gz/common/testing/Utils.hh b/testing/include/gz/common/testing/Utils.hh index 44ca5132c..339509b6f 100644 --- a/testing/include/gz/common/testing/Utils.hh +++ b/testing/include/gz/common/testing/Utils.hh @@ -23,7 +23,7 @@ #include "gz/common/testing/Export.hh" -namespace ignition::common::testing +namespace gz::common::testing { ///////////////////////////////////////////////// @@ -32,9 +32,9 @@ namespace ignition::common::testing /// \param[in] _filename Filename of the file to be created /// \return true if file successfully created, false otherwise bool -IGNITION_COMMON_TESTING_VISIBLE +GZ_COMMON_TESTING_VISIBLE createNewEmptyFile(const std::string &_filename); -} // namespace ignition::common::testing +} // namespace gz::common::testing #endif // GZ_COMMON_TESTING_TESTPATHS_HH_ diff --git a/testing/include/gz/common/testing/detail/AutoLogFixture.hh b/testing/include/gz/common/testing/detail/AutoLogFixture.hh index 5c648a0bf..5263d67bf 100644 --- a/testing/include/gz/common/testing/detail/AutoLogFixture.hh +++ b/testing/include/gz/common/testing/detail/AutoLogFixture.hh @@ -27,7 +27,7 @@ #include <gz/common/TempDirectory.hh> #include <gz/common/Util.hh> -namespace ignition::common::testing +namespace gz::common::testing { ////////////////////////////////////////////////// @@ -49,15 +49,15 @@ class AutoLogFixture::Implementation ////////////////////////////////////////////////// AutoLogFixture::AutoLogFixture(): - dataPtr(ignition::utils::MakeUniqueImpl<Implementation>()) + dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { } ////////////////////////////////////////////////// AutoLogFixture::~AutoLogFixture() { - ignLogClose(); - EXPECT_TRUE(ignition::common::unsetenv(IGN_HOMEDIR)); + gzLogClose(); + EXPECT_TRUE(gz::common::unsetenv(IGN_HOMEDIR)); } ////////////////////////////////////////////////// @@ -81,24 +81,24 @@ void AutoLogFixture::SetUp() // Initialize Console auto logPath = common::joinPaths(this->dataPtr->temp->Path(), "test_logs"); - ignLogInit(logPath, this->dataPtr->logFilename); + gzLogInit(logPath, this->dataPtr->logFilename); ASSERT_FALSE(logPath.empty()); ASSERT_TRUE(common::exists( common::joinPaths(logPath, this->dataPtr->logFilename))); // Read the full path to the log directory. - this->dataPtr->logDirectory = ignLogDirectory(); + this->dataPtr->logDirectory = gzLogDirectory(); ASSERT_FALSE(this->dataPtr->logDirectory.empty()); - ASSERT_TRUE(ignition::common::exists(this->dataPtr->logDirectory)); + ASSERT_TRUE(gz::common::exists(this->dataPtr->logDirectory)); - ignition::common::Console::SetVerbosity(4); + gz::common::Console::SetVerbosity(4); } ////////////////////////////////////////////////// std::string AutoLogFixture::FullLogPath() const { - return ignition::common::joinPaths( + return gz::common::joinPaths( this->dataPtr->logDirectory, this->dataPtr->logFilename); } @@ -118,7 +118,7 @@ std::string AutoLogFixture::LogContent() const return loggedString; } -} // namespace ignition::common::testing +} // namespace gz::common::testing #endif // GZ_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ diff --git a/testing/include/ignition/common/testing.hh b/testing/include/ignition/common/testing.hh index d12f9f1d4..2f091ead7 100644 --- a/testing/include/ignition/common/testing.hh +++ b/testing/include/ignition/common/testing.hh @@ -16,3 +16,4 @@ */ #include <gz/common/testing.hh> +#include <ignition/common/config.hh> diff --git a/testing/include/ignition/common/testing/AutoLogFixture.hh b/testing/include/ignition/common/testing/AutoLogFixture.hh index d1373f729..5de1ec8b3 100644 --- a/testing/include/ignition/common/testing/AutoLogFixture.hh +++ b/testing/include/ignition/common/testing/AutoLogFixture.hh @@ -16,3 +16,4 @@ */ #include <gz/common/testing/AutoLogFixture.hh> +#include <ignition/common/config.hh> diff --git a/testing/include/ignition/common/testing/BazelTestPaths.hh b/testing/include/ignition/common/testing/BazelTestPaths.hh index 1501e7e84..a0baace32 100644 --- a/testing/include/ignition/common/testing/BazelTestPaths.hh +++ b/testing/include/ignition/common/testing/BazelTestPaths.hh @@ -16,3 +16,4 @@ */ #include <gz/common/testing/BazelTestPaths.hh> +#include <ignition/common/config.hh> diff --git a/testing/include/ignition/common/testing/CMakeTestPaths.hh b/testing/include/ignition/common/testing/CMakeTestPaths.hh index 0c69d6259..ba2b1287a 100644 --- a/testing/include/ignition/common/testing/CMakeTestPaths.hh +++ b/testing/include/ignition/common/testing/CMakeTestPaths.hh @@ -16,3 +16,4 @@ */ #include <gz/common/testing/CMakeTestPaths.hh> +#include <ignition/common/config.hh> diff --git a/testing/include/ignition/common/testing/Export.hh b/testing/include/ignition/common/testing/Export.hh index 342716546..9a2a67386 100644 --- a/testing/include/ignition/common/testing/Export.hh +++ b/testing/include/ignition/common/testing/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/testing/Export.hh> +#include <ignition/common/config.hh> diff --git a/testing/include/ignition/common/testing/TestPaths.hh b/testing/include/ignition/common/testing/TestPaths.hh index 194364e33..27dc2a9fe 100644 --- a/testing/include/ignition/common/testing/TestPaths.hh +++ b/testing/include/ignition/common/testing/TestPaths.hh @@ -16,3 +16,4 @@ */ #include <gz/common/testing/TestPaths.hh> +#include <ignition/common/config.hh> diff --git a/testing/include/ignition/common/testing/Utils.hh b/testing/include/ignition/common/testing/Utils.hh index 7101accd4..292c845f7 100644 --- a/testing/include/ignition/common/testing/Utils.hh +++ b/testing/include/ignition/common/testing/Utils.hh @@ -16,3 +16,4 @@ */ #include <gz/common/testing/Utils.hh> +#include <ignition/common/config.hh> diff --git a/testing/include/ignition/common/testing/detail/AutoLogFixture.hh b/testing/include/ignition/common/testing/detail/AutoLogFixture.hh index 93d35731a..87aa0e91f 100644 --- a/testing/include/ignition/common/testing/detail/AutoLogFixture.hh +++ b/testing/include/ignition/common/testing/detail/AutoLogFixture.hh @@ -16,3 +16,4 @@ */ #include <gz/common/testing/detail/AutoLogFixture.hh> +#include <ignition/common/config.hh> diff --git a/testing/include/ignition/common/testing/detail/Export.hh b/testing/include/ignition/common/testing/detail/Export.hh index 660f38422..6baae3605 100644 --- a/testing/include/ignition/common/testing/detail/Export.hh +++ b/testing/include/ignition/common/testing/detail/Export.hh @@ -16,3 +16,4 @@ */ #include <gz/common/testing/detail/Export.hh> +#include <ignition/common/config.hh> diff --git a/testing/src/AutoLogFixture_TEST.cc b/testing/src/AutoLogFixture_TEST.cc index c2118c695..1fc8cb49e 100644 --- a/testing/src/AutoLogFixture_TEST.cc +++ b/testing/src/AutoLogFixture_TEST.cc @@ -16,11 +16,11 @@ */ #include <gtest/gtest.h> -#include <ignition/common/Console.hh> -#include <ignition/common/testing/AutoLogFixture.hh> +#include <gz/common/Console.hh> +#include <gz/common/testing/AutoLogFixture.hh> -using namespace ignition::common; -using namespace ignition::common::testing; +using namespace gz::common; +using namespace gz::common::testing; ///////////////////////////////////////////////// TEST_F(AutoLogFixture, AutoLogFixture) @@ -29,6 +29,6 @@ TEST_F(AutoLogFixture, AutoLogFixture) EXPECT_TRUE(this->LogContent().empty()); Console::SetVerbosity(0); - igndbg << "This is a debug" << std::endl; + gzdbg << "This is a debug" << std::endl; EXPECT_FALSE(this->LogContent().empty()); } diff --git a/testing/src/BazelTestPaths.cc b/testing/src/BazelTestPaths.cc index c355df0f0..531d97ed1 100644 --- a/testing/src/BazelTestPaths.cc +++ b/testing/src/BazelTestPaths.cc @@ -15,12 +15,12 @@ * */ -#include "ignition/common/testing/BazelTestPaths.hh" +#include "gz/common/testing/BazelTestPaths.hh" -#include <ignition/common/Console.hh> -#include <ignition/common/Util.hh> +#include <gz/common/Console.hh> +#include <gz/common/Util.hh> -namespace ignition::common::testing +namespace gz::common::testing { ////////////////////////////////////////////////// @@ -34,7 +34,7 @@ bool BazelTestPaths::ProjectSourcePath(std::string &_sourceDir) if (common::env("TEST_SRCDIR", test_srcdir) && common::env("IGN_BAZEL_PATH", bazel_path)) { - _sourceDir = ignition::common::joinPaths(test_srcdir, + _sourceDir = gz::common::joinPaths(test_srcdir, "ignition", bazel_path); return true; @@ -51,5 +51,5 @@ bool BazelTestPaths::TestTmpPath(std::string &_tmpDir) return common::env("TEST_UNDECLARED_OUTPUTS_DIR", _tmpDir); } -} // namespace ignition::common::testing +} // namespace gz::common::testing diff --git a/testing/src/BazelTestPaths_TEST.cc b/testing/src/BazelTestPaths_TEST.cc index f0ea20a6a..c0d72e040 100644 --- a/testing/src/BazelTestPaths_TEST.cc +++ b/testing/src/BazelTestPaths_TEST.cc @@ -16,16 +16,16 @@ */ #include <gtest/gtest.h> -#include "ignition/common/Filesystem.hh" -#include "ignition/common/testing/TestPaths.hh" -#include "ignition/common/testing/BazelTestPaths.hh" +#include "gz/common/Filesystem.hh" +#include "gz/common/testing/TestPaths.hh" +#include "gz/common/testing/BazelTestPaths.hh" -using namespace ignition::common; +using namespace gz::common; ///////////////////////////////////////////////// TEST(BazelTestPaths, ProjectSourcePath) { - ignition::common::testing::BazelTestPaths testPaths; + gz::common::testing::BazelTestPaths testPaths; std::string sourceDir; ASSERT_TRUE(testPaths.ProjectSourcePath(sourceDir)); @@ -45,7 +45,7 @@ TEST(BazelTestPaths, ProjectSourcePath) ///////////////////////////////////////////////// TEST(BazelTestPaths, TestTmpPath) { - ignition::common::testing::BazelTestPaths testPaths; + gz::common::testing::BazelTestPaths testPaths; std::string tmpDir; ASSERT_TRUE(testPaths.TestTmpPath(tmpDir)); @@ -57,13 +57,13 @@ TEST(BazelTestPaths, TestTmpPath) ///////////////////////////////////////////////// TEST(BazelTestPaths, TestBuildType) { - using BuildType = ignition::common::testing::BuildType; - ASSERT_EQ(BuildType::kBazel, ignition::common::testing::TestBuildType()); + using BuildType = gz::common::testing::BuildType; + ASSERT_EQ(BuildType::kBazel, gz::common::testing::TestBuildType()); } ///////////////////////////////////////////////// TEST(BazelTestPaths, TestPathFactory) { - auto testPaths = ignition::common::testing::TestPathFactory(); + auto testPaths = gz::common::testing::TestPathFactory(); ASSERT_NE(nullptr, testPaths); } diff --git a/testing/src/CMakeTestPaths.cc b/testing/src/CMakeTestPaths.cc index cf9f69c1f..f17d26b89 100644 --- a/testing/src/CMakeTestPaths.cc +++ b/testing/src/CMakeTestPaths.cc @@ -15,9 +15,9 @@ * */ -#include "ignition/common/testing/CMakeTestPaths.hh" +#include "gz/common/testing/CMakeTestPaths.hh" -namespace ignition::common::testing +namespace gz::common::testing { ////////////////////////////////////////////////// @@ -39,8 +39,8 @@ bool CMakeTestPaths::ProjectSourcePath(std::string &_sourceDir) ////////////////////////////////////////////////// bool CMakeTestPaths::TestTmpPath(std::string &_tmpDir) { - _tmpDir = ignition::common::tempDirectoryPath(); + _tmpDir = gz::common::tempDirectoryPath(); return true; } -} // namespace ignition::common::testing +} // namespace gz::common::testing diff --git a/testing/src/CMakeTestPaths_TEST.cc b/testing/src/CMakeTestPaths_TEST.cc index f18aa0a8e..c0db4526b 100644 --- a/testing/src/CMakeTestPaths_TEST.cc +++ b/testing/src/CMakeTestPaths_TEST.cc @@ -16,12 +16,12 @@ */ #include <gtest/gtest.h> -#include "ignition/common/Filesystem.hh" -#include "ignition/common/testing/TestPaths.hh" -#include "ignition/common/testing/CMakeTestPaths.hh" +#include "gz/common/Filesystem.hh" +#include "gz/common/testing/TestPaths.hh" +#include "gz/common/testing/CMakeTestPaths.hh" -using namespace ignition::common; -using namespace ignition::common::testing; +using namespace gz::common; +using namespace gz::common::testing; constexpr char kFakeTestPaths[] = ""; @@ -40,13 +40,13 @@ TEST(TestPaths, ProjectSourcePathUnset) ///////////////////////////////////////////////// TEST(CMakeTestPaths, TestingProjectSourceDir) { - ASSERT_NE(0u, strlen(ignition::common::testing::kTestingProjectSourceDir)); + ASSERT_NE(0u, strlen(gz::common::testing::kTestingProjectSourceDir)); } ///////////////////////////////////////////////// TEST(CMakeTestPaths, ProjectSourcePathUnset) { - ignition::common::testing::CMakeTestPaths testPaths(kFakeTestPaths); + gz::common::testing::CMakeTestPaths testPaths(kFakeTestPaths); std::string sourceDir; EXPECT_FALSE(testPaths.ProjectSourcePath(sourceDir)); EXPECT_TRUE(sourceDir.empty()); @@ -55,13 +55,13 @@ TEST(CMakeTestPaths, ProjectSourcePathUnset) ///////////////////////////////////////////////// TEST(CMakeTestPaths, TestBuildType) { - ASSERT_EQ(BuildType::kCMake, ignition::common::testing::TestBuildType()); + ASSERT_EQ(BuildType::kCMake, gz::common::testing::TestBuildType()); } ///////////////////////////////////////////////// TEST(CMakeTestPaths, ProjectSourcePath) { - ignition::common::testing::CMakeTestPaths testPaths; + gz::common::testing::CMakeTestPaths testPaths; std::string sourceDir; ASSERT_TRUE(testPaths.ProjectSourcePath(sourceDir)); @@ -81,7 +81,7 @@ TEST(CMakeTestPaths, ProjectSourcePath) ///////////////////////////////////////////////// TEST(CMakeTestPaths, TestTmpPath) { - ignition::common::testing::CMakeTestPaths testPaths; + gz::common::testing::CMakeTestPaths testPaths; std::string tmpDir; ASSERT_TRUE(testPaths.TestTmpPath(tmpDir)); diff --git a/testing/src/TestPaths.cc b/testing/src/TestPaths.cc index 54854ddac..134fa77d1 100644 --- a/testing/src/TestPaths.cc +++ b/testing/src/TestPaths.cc @@ -14,14 +14,14 @@ * limitations under the License. * */ -#include "ignition/common/testing/TestPaths.hh" -#include "ignition/common/testing/BazelTestPaths.hh" -#include "ignition/common/testing/CMakeTestPaths.hh" +#include "gz/common/testing/TestPaths.hh" +#include "gz/common/testing/BazelTestPaths.hh" +#include "gz/common/testing/CMakeTestPaths.hh" -#include <ignition/common/Console.hh> -#include <ignition/common/Util.hh> +#include <gz/common/Console.hh> +#include <gz/common/Util.hh> -namespace ignition::common::testing +namespace gz::common::testing { ////////////////////////////////////////////////// TestPaths::TestPaths(const std::string &_projectSourcePath) @@ -41,7 +41,7 @@ BuildType TestBuildType(const std::string &_projectSourcePath) if (ign_bazel_set && ign_cmake_set) { - ignwarn << "Detected settings from Bazel and CMake, preferring CMake\n"; + gzwarn << "Detected settings from Bazel and CMake, preferring CMake\n"; } if (ign_cmake_set) @@ -77,7 +77,7 @@ TestPathFactory(const std::string &_projectSourcePath) } ////////////////////////////////////////////////// -std::shared_ptr<ignition::common::TempDirectory> +std::shared_ptr<gz::common::TempDirectory> MakeTestTempDirectoryImpl(const std::string &_projectSourcePath, const std::string &_prefix, const std::string &_subDir, @@ -94,8 +94,8 @@ MakeTestTempDirectoryImpl(const std::string &_projectSourcePath, if (dataDir.empty()) return nullptr; - return std::make_shared<ignition::common::TempDirectory>( + return std::make_shared<gz::common::TempDirectory>( dataDir, _prefix, _subDir, _cleanup); } -} // namespace ignition::common::testing +} // namespace gz::common::testing diff --git a/testing/src/Utils.cc b/testing/src/Utils.cc index 311853484..aacb9c2d6 100644 --- a/testing/src/Utils.cc +++ b/testing/src/Utils.cc @@ -15,12 +15,12 @@ * */ -#include "ignition/common/testing/Utils.hh" +#include "gz/common/testing/Utils.hh" #include <fstream> #include <random> -namespace ignition::common::testing +namespace gz::common::testing { ///////////////////////////////////////////////// @@ -50,4 +50,4 @@ bool createNewEmptyFile(const std::string &_filename) return true; } -} // namespace ignition::common::testing +} // namespace gz::common::testing diff --git a/testing/src/Utils_TEST.cc b/testing/src/Utils_TEST.cc index 5a484a52f..9f4af9211 100644 --- a/testing/src/Utils_TEST.cc +++ b/testing/src/Utils_TEST.cc @@ -16,11 +16,11 @@ */ #include <gtest/gtest.h> -#include <ignition/common/testing/TestPaths.hh> -#include <ignition/common/testing/Utils.hh> +#include <gz/common/testing/TestPaths.hh> +#include <gz/common/testing/Utils.hh> -using namespace ignition::common; -using namespace ignition::common::testing; +using namespace gz::common; +using namespace gz::common::testing; ///////////////////////////////////////////////// TEST(Utils, CreateNewEmptyFile) diff --git a/tutorials/hw-encoding.md b/tutorials/hw-encoding.md index adc2ee1e4..cdb6f7394 100644 --- a/tutorials/hw-encoding.md +++ b/tutorials/hw-encoding.md @@ -1,12 +1,12 @@ \page hw-encoding Hardware-accelerated Video Encoding -When recording video using the `ignition::common::VideoEncoder` class, you can +When recording video using the `gz::common::VideoEncoder` class, you can opt-in to use hardware (HW) acceleration for the encoding process. By default, only software encoders are used. This tutorial will show how to configure the encoder for HW acceleration and will present ready-made commandlines for some typical use-cases. You can either use the `VideoEncoder` class directly, or you can "meet it" in the -video recorder plugin in Ignition Gazebo. In both cases, HW-accelerated encoding +video recorder plugin in Gazebo. In both cases, HW-accelerated encoding can be set up. HW acceleration should provide you with higher encoding performance, potentially @@ -60,9 +60,9 @@ Here are some sample outputs: V..... nvenc_h264 NVIDIA NVENC H.264 encoder (codec h264) ``` -Ignition Common so far supports: +Gazebo Common so far supports: -| Encoder | Technology | Platforms | GPU vendors | Ignition Common name | +| Encoder | Technology | Platforms | GPU vendors | Gazebo Common name | | ------- | ---------- | --------- | ----------- | -------------------- | | `h264_nvenc` | [NVidia NVEnc](https://en.wikipedia.org/wiki/Nvidia_NVENC) | Windows + x86 Linux | NVidia GPUs | NVENC | | `h264_qsv` | [Intel QuickSync](https://en.wikipedia.org/wiki/Intel_Quick_Sync_Video) | Windows + x86 Linux | Intel GPUs | QSV | @@ -191,7 +191,7 @@ no effect then). This would be useful if you want to e.g. implement a GUI choose for the acceleration. The `FlagSet<HWEncoderType>` captures a set of allowed encoders. Its value may be -e.g. `ignition::Common::HWEncoderType::QSV | ignition::common::HWEncoderType::NVENC`. +e.g. `gz::Common::HWEncoderType::QSV | gz::common::HWEncoderType::NVENC`. ## How do I know it's working diff --git a/tutorials/install.md b/tutorials/install.md index 7838ad349..c7f6762e9 100644 --- a/tutorials/install.md +++ b/tutorials/install.md @@ -2,8 +2,8 @@ Next Tutorial: \ref profiler -These instructions are for installing only Ignition Common. -If you're interested in using all the Ignition libraries, check out this [Ignition installation](https://ignitionrobotics.org/docs/latest/install). +These instructions are for installing only Gazebo Common. +If you're interested in using all the Ignition libraries, check out this [Ignition installation](https://gazebosim.org/docs/latest/install). We recommend following the Binary Installation instructions to get up and running as quickly and painlessly as possible. @@ -29,7 +29,7 @@ On macOS, add OSRF packages: brew tap osrf/simulation ``` -Install Ignition Common: +Install Gazebo Common: ``` brew install ignition-common<#> ``` @@ -63,10 +63,10 @@ prerequisites followed by building from source. ## Prerequisites -Ignition Common requires: +Gazebo Common requires: - * [Ignition CMake](https://ignitionrobotics.org/libs/cmake) - * [Ignition Math](https://ignitionrobotics.org/libs/math). + * [Gazebo CMake](https://gazebosim.org/libs/cmake) + * [Gazebo Math](https://gazebosim.org/libs/math). The Graphics component requires: @@ -83,7 +83,7 @@ The AV component requires: ### Windows -First, follow the [ign-cmake](https://github.com/ignitionrobotics/ign-cmake) tutorial for installing Conda, Visual Studio, CMake, etc., prerequisites, and creating a Conda environment. +First, follow the [ign-cmake](https://github.com/gazebosim/gz-cmake) tutorial for installing Conda, Visual Studio, CMake, etc., prerequisites, and creating a Conda environment. Navigate to `condabin` if necessary to use the `conda` command (i.e., if Conda is not in your `PATH` environment variable. You can find the location of `condabin` in Anaconda Prompt, `where conda`). @@ -115,7 +115,7 @@ conda install libignition-cmake<#> libignition-math<#> --channel conda-forge 1. Clone the repository ``` - git clone https://github.com/ignitionrobotics/ign-common + git clone https://github.com/gazebosim/gz-common ``` 2. Configure and build @@ -136,7 +136,7 @@ conda install libignition-cmake<#> libignition-math<#> --channel conda-forge 1. Clone the repository ``` - git clone https://github.com/ignitionrobotics/ign-common -b ign-common<#> + git clone https://github.com/gazebosim/gz-common -b ign-common<#> ``` Be sure to replace `<#>` with a number value, such as 3 or 4, depending on which version you need. @@ -169,7 +169,7 @@ This assumes you have created and activated a Conda environment while installing 1. Navigate to where you would like to build the library, and clone the repository. ``` # Optionally, append `-b ign-common#` (replace # with a number) to check out a specific version - git clone https://github.com/ignitionrobotics/ign-common.git + git clone https://github.com/gazebosim/gz-common.git ``` 2. Configure and build @@ -188,7 +188,7 @@ This assumes you have created and activated a Conda environment while installing # Documentation -API and tutorials can be found at [https://ignitionrobotics.org/libs/common](https://ignitionrobotics.org/libs/common). +API and tutorials can be found at [https://gazebosim.org/libs/common](https://gazebosim.org/libs/common). You can also generate the documentation from a clone of this repository by following these steps. @@ -199,7 +199,7 @@ You can also generate the documentation from a clone of this repository by follo 2. Clone the repository ``` - git clone https://github.com/ignitionrobotics/ign-common + git clone https://github.com/gazebosim/gz-common ``` 3. Configure and build the documentation. diff --git a/tutorials/profiler.md b/tutorials/profiler.md index 231b9f8f1..d995849df 100644 --- a/tutorials/profiler.md +++ b/tutorials/profiler.md @@ -4,10 +4,10 @@ Next Tutorial: \ref hw-encoding ## Overview -This tutorial describes how to get started using the Ignition Common profiler +This tutorial describes how to get started using the Gazebo Common profiler to measure and visualize run-time performance of your software. -The `ignition::common::Profiler` provides a common interface that can allow for +The `gz::common::Profiler` provides a common interface that can allow for multiple underlying profiler implementations. Currently, the only available implementation is [Remotery](https://github.com/Celtoys/Remotery). @@ -25,13 +25,13 @@ In order to use the profiler, inspection points must be added to the source code and the application or library must be linked to the `ignition-common::profiler` component. -To start, download the [profiler.cc](https://github.com/ignitionrobotics/ign-common/raw/main/examples/profiler.cc) example. +To start, download the [profiler.cc](https://github.com/gazebosim/gz-common/raw/main/examples/profiler.cc) example. The relevant corresponding C++ would be as follows: ```{.cpp} // Add the profiler header -#include <ignition/common/Profiler.hh> +#include <gz/common/Profiler.hh> ... void thread(const char *_thread_name) @@ -125,7 +125,7 @@ libexec/ignition/ignition-common<N>/ign_remotery_vis If the profiler is run successfully, you should see output in a browser. Similar to this -<img src="https://raw.githubusercontent.com/ignitionrobotics/ign-common/main/tutorials/imgs/profiler_tutorial_example.png"> +<img src="https://raw.githubusercontent.com/gazebosim/gz-common/main/tutorials/imgs/profiler_tutorial_example.png"> ### Troubleshoot the web viewer From 6b749feda59d0c30373320f7ebbb58660decf669 Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Tue, 7 Jun 2022 21:07:06 -0700 Subject: [PATCH 167/219] ign -> gz Environment Variable Migration (#365) Signed-off-by: methylDragon <methylDragon@gmail.com> --- Migration.md | 14 ++++- av/include/gz/common/VideoEncoder.hh | 12 ++-- av/src/CMakeLists.txt | 19 ++++-- av/src/VideoEncoder.cc | 59 ++++++++++++++---- include/gz/common/SystemPaths.hh | 8 +-- src/SystemPaths.cc | 89 +++++++++++++++++++++++++--- src/SystemPaths_TEST.cc | 4 +- tutorials/hw-encoding.md | 28 ++++----- 8 files changed, 178 insertions(+), 55 deletions(-) diff --git a/Migration.md b/Migration.md index 097cf589f..0e4b7b601 100644 --- a/Migration.md +++ b/Migration.md @@ -19,9 +19,19 @@ release will remove the deprecated code. (`ignLogInit()`, etc.) are deprecated and will be removed in future versions. Use `gz` instead (e.g. `gzmsg`, `gzwarn`, `gzLogInit()`) -1. All the plugin APIs are deprecated, use the gz-plugin library instead. See +5. All the plugin APIs are deprecated, use the gz-plugin library instead. See the [migration guide](https://github.com/ignitionrobotics/ign-plugin/blob/ign-plugin1/MIGRATION.md). +6. The following `IGN_` prefixed environment variables are deprecated and will be removed. + Please use the `GZ_` prefixed versions instead! + 1. `IGN_VIDEO_ALLOWED_ENCODERS` -> `GZ_VIDEO_ALLOWED_ENCODERS` + 2. `IGN_VIDEO_ENCODER_DEVICE` -> `GZ_VIDEO_ENCODER_DEVICE` + 3. `IGN_VIDEO_USE_HW_SURFACE` -> `GZ_VIDEO_USE_HW_SURFACE` + 4. `IGN_FILE_PATH` -> `GZ_FILE_PATH` + 5. `IGN_LOG_PATH` -> `GZ_LOG_PATH` + 6. `IGN_PLUGIN_PATH` -> `GZ_PLUGIN_PATH` + + ### Additions 1. **geospatial** component that loads heightmap images and DEMs @@ -66,7 +76,7 @@ release will remove the deprecated code. 1. **profiler** component that helps measure software performance. 1. **SystemPaths.hh** - + Search paths specified in `IGN_FILE_PATH` environment variable when + + Search paths specified in `GZ_FILE_PATH` environment variable when finding files. 1. **Util.hh** diff --git a/av/include/gz/common/VideoEncoder.hh b/av/include/gz/common/VideoEncoder.hh index e0507923d..4b6f4a8bf 100644 --- a/av/include/gz/common/VideoEncoder.hh +++ b/av/include/gz/common/VideoEncoder.hh @@ -70,19 +70,19 @@ namespace gz /// failure isn't a result of faulty HW encoding (e.g. when NVENC sessions /// are exhausted). /// \note This will automatically select a HW-accelerated encoder based - /// on the values of environment variables IGN_VIDEO_ALLOWED_ENCODERS, - /// IGN_VIDEO_ENCODER_DEVICE and IGN_VIDEO_ENCODER_USE_HW_SURFACE. + /// on the values of environment variables GZ_VIDEO_ALLOWED_ENCODERS, + /// GZ_VIDEO_ENCODER_DEVICE and GZ_VIDEO_ENCODER_USE_HW_SURFACE. /// To completely avoid trying to set up HW accelerated encoding, - /// set IGN_VIDEO_ALLOWED_ENCODERS to value NONE or leave it empty or + /// set GZ_VIDEO_ALLOWED_ENCODERS to value NONE or leave it empty or /// unset. /// The meaning of these variables is the following: - /// - IGN_VIDEO_ALLOWED_ENCODERS is a colon-separated list of values of + /// - GZ_VIDEO_ALLOWED_ENCODERS is a colon-separated list of values of /// HWEncoderType enum, or ALL to allow all encoders. Default is NONE. - /// - IGN_VIDEO_ENCODER_DEVICE optionally specifies the HW device + /// - GZ_VIDEO_ENCODER_DEVICE optionally specifies the HW device /// to use for encoding (used only when a matching encoder is found /// first). By default, an empty string is used, which means to use /// whatever device is found to work first. - /// - IGN_VIDEO_USE_HW_SURFACE specifies whether the encoder should use + /// - GZ_VIDEO_USE_HW_SURFACE specifies whether the encoder should use /// an explicit GPU buffer for video frames. Some codecs do this /// implicitly, and then this setting has no meaning (setting it to 1 can /// actually decrease performance). For codecs that need to set this diff --git a/av/src/CMakeLists.txt b/av/src/CMakeLists.txt index 294c37993..e6d3c5a40 100644 --- a/av/src/CMakeLists.txt +++ b/av/src/CMakeLists.txt @@ -1,9 +1,17 @@ -option(IGN_COMMON_BUILD_HW_VIDEO +option(GZ_COMMON_BUILD_HW_VIDEO "Build support for HW-accelerated video encoding" ON) -ign_get_libsources_and_unittests(sources gtest_sources) +# TODO(CH3): Deprecated. Remove on tock. +option(IGN_COMMON_BUILD_HW_VIDEO + "Deprecated option for building support for HW-accelerated video encoding" ON) if(NOT IGN_COMMON_BUILD_HW_VIDEO) + set(GZ_COMMON_BUILD_HW_VIDEO IGN_COMMON_BUILD_HW_VIDEO) +endif() + +ign_get_libsources_and_unittests(sources gtest_sources) + +if(NOT GZ_COMMON_BUILD_HW_VIDEO) list(REMOVE_ITEM sources HWEncoder.cc) endif() @@ -17,15 +25,14 @@ target_link_libraries(${av_target} AVCODEC::AVCODEC AVUTIL::AVUTIL) -if(IGN_COMMON_BUILD_HW_VIDEO) - target_compile_definitions(${av_target} PRIVATE IGN_COMMON_BUILD_HW_VIDEO) +if(GZ_COMMON_BUILD_HW_VIDEO) + target_compile_definitions(${av_target} PRIVATE GZ_COMMON_BUILD_HW_VIDEO) endif() ign_build_tests( - TYPE UNIT + TYPE UNIT SOURCES ${gtest_sources} LIB_DEPS ${av_target} ignition-common${IGN_COMMON_VER}-testing ) - diff --git a/av/src/VideoEncoder.cc b/av/src/VideoEncoder.cc index c89e201a7..27252011f 100644 --- a/av/src/VideoEncoder.cc +++ b/av/src/VideoEncoder.cc @@ -24,7 +24,7 @@ #include "gz/common/VideoEncoder.hh" #include "gz/common/StringUtils.hh" -#ifdef IGN_COMMON_BUILD_HW_VIDEO +#ifdef GZ_COMMON_BUILD_HW_VIDEO #include "gz/common/HWEncoder.hh" #endif @@ -98,7 +98,7 @@ class GZ_COMMON_AV_HIDDEN gz::common::VideoEncoder::Implementation /// \brief Mutex for thread safety. public: std::mutex mutex; -#ifdef IGN_COMMON_BUILD_HW_VIDEO +#ifdef GZ_COMMON_BUILD_HW_VIDEO /// \brief The HW encoder configuration (optional). public: std::unique_ptr<HWEncoder> hwEncoder = nullptr; #endif @@ -125,7 +125,7 @@ class GZ_COMMON_AV_HIDDEN gz::common::VideoEncoder::Implementation ///////////////////////////////////////////////// const AVCodec* VideoEncoder::Implementation::FindEncoder(AVCodecID _codecId) { -#ifdef IGN_COMMON_BUILD_HW_VIDEO +#ifdef GZ_COMMON_BUILD_HW_VIDEO if (this->hwEncoder) return this->hwEncoder->FindEncoder(_codecId); #endif @@ -135,7 +135,7 @@ const AVCodec* VideoEncoder::Implementation::FindEncoder(AVCodecID _codecId) ///////////////////////////////////////////////// AVFrame* VideoEncoder::Implementation::GetFrameForEncoder(AVFrame* _inFrame) { -#ifdef IGN_COMMON_BUILD_HW_VIDEO +#ifdef GZ_COMMON_BUILD_HW_VIDEO if (this->hwEncoder) return this->hwEncoder->GetFrameForEncoder(_inFrame); #endif @@ -196,7 +196,18 @@ bool VideoEncoder::Start(const std::string &_format, if (_allowHwAccel) { std::string allowedEncodersStr; - env("IGN_VIDEO_ALLOWED_ENCODERS", allowedEncodersStr); + env("GZ_VIDEO_ALLOWED_ENCODERS", allowedEncodersStr); + + // TODO(CH3): Deprecated. Remove on tock. + if (allowedEncodersStr.empty()) + { + env("IGN_VIDEO_ALLOWED_ENCODERS", allowedEncodersStr); + if (!allowedEncodersStr.empty()) + { + gzwarn << "IGN_VIDEO_ALLOWED_ENCODERS is deprecated! " + << "Use GZ_VIDEO_ALLOWED_ENCODERS instead!" << std::endl; + } + } if (allowedEncodersStr == "ALL") { @@ -213,7 +224,7 @@ bool VideoEncoder::Start(const std::string &_format, } } -#ifndef IGN_COMMON_BUILD_HW_VIDEO +#ifndef GZ_COMMON_BUILD_HW_VIDEO if (allowedEncoders != HWEncoderType::NONE) { gzwarn << "Hardware encoding with encoders " << allowedEncodersStr @@ -223,10 +234,34 @@ bool VideoEncoder::Start(const std::string &_format, } #endif - env("IGN_VIDEO_ENCODER_DEVICE", device); + env("GZ_VIDEO_ENCODER_DEVICE", device); + + // TODO(CH3): Deprecated. Remove on tock. + if (device.empty()) + { + env("IGN_VIDEO_ENCODER_DEVICE", device); + + if (!device.empty()) + { + gzwarn << "IGN_VIDEO_ENCODER_DEVICE is deprecated! " + << "Use GZ_VIDEO_ENCODER_DEVICE instead!" << std::endl; + } + } std::string hwSurfaceStr; - env("IGN_VIDEO_USE_HW_SURFACE", hwSurfaceStr); + env("GZ_VIDEO_USE_HW_SURFACE", hwSurfaceStr); + + // TODO(CH3): Deprecated. Remove on tock. + if (hwSurfaceStr.empty()) + { + env("IGN_VIDEO_USE_HW_SURFACE", hwSurfaceStr); + + if (!hwSurfaceStr.empty()) + { + gzwarn << "IGN_VIDEO_USE_HW_SURFACE is deprecated! " + << "Use GZ_VIDEO_USE_HW_SURFACE instead!" << std::endl; + } + } if (!hwSurfaceStr.empty()) { @@ -416,7 +451,7 @@ bool VideoEncoder::Start( return false; } -#ifdef IGN_COMMON_BUILD_HW_VIDEO +#ifdef GZ_COMMON_BUILD_HW_VIDEO // HW encoder needs to be created before the call to FindEncoder() this->dataPtr->hwEncoder = std::make_unique<HWEncoder>( _allowedHwAccel, _hwAccelDevice, _useHwSurface); @@ -529,7 +564,7 @@ bool VideoEncoder::Start( // we misuse this field a bit, as docs say it is unused in encoders // here, it stores the input format of the encoder this->dataPtr->codecCtx->sw_pix_fmt = this->dataPtr->codecCtx->pix_fmt; -#ifdef IGN_COMMON_BUILD_HW_VIDEO +#ifdef GZ_COMMON_BUILD_HW_VIDEO if (this->dataPtr->hwEncoder) this->dataPtr->hwEncoder->ConfigHWAccel(this->dataPtr->codecCtx); #endif @@ -540,7 +575,7 @@ bool VideoEncoder::Start( { gzerr << "Could not open video codec: " << av_err2str_cpp(ret) << ". Video encoding is not started\n"; -#ifdef IGN_COMMON_BUILD_HW_VIDEO +#ifdef GZ_COMMON_BUILD_HW_VIDEO if (AVUNERROR(ret) == ENOMEM && this->dataPtr->hwEncoder->GetEncoderType() == HWEncoderType::NVENC) { @@ -1005,7 +1040,7 @@ void VideoEncoder::Reset() this->dataPtr->timePrev = std::chrono::steady_clock::time_point(); this->dataPtr->timeStart = std::chrono::steady_clock::time_point(); this->dataPtr->filename.clear(); -#ifdef IGN_COMMON_BUILD_HW_VIDEO +#ifdef GZ_COMMON_BUILD_HW_VIDEO if (this->dataPtr->hwEncoder) this->dataPtr->hwEncoder.reset(); #endif diff --git a/include/gz/common/SystemPaths.hh b/include/gz/common/SystemPaths.hh index dc969772a..02530692c 100644 --- a/include/gz/common/SystemPaths.hh +++ b/include/gz/common/SystemPaths.hh @@ -40,9 +40,9 @@ namespace gz /// \brief Constructor for SystemPaths public: SystemPaths(); - /// \brief Get the log path. If IGN_LOG_PATH environment variable is set, - /// then this path is used. If not, the path is $HOME/.ignition, and in - /// case even HOME is not set, /tmp/ignition is used. If the directory + /// \brief Get the log path. If GZ_LOG_PATH environment variable is set, + /// then this path is used. If not, the path is $HOME/.gz, and in + /// case even HOME is not set, /tmp/gz is used. If the directory /// does not exist, it is created in the constructor of SystemPaths. /// \return the path public: std::string LogPath() const; @@ -101,7 +101,7 @@ namespace gz /// \brief Set the file path environment variable to use, and clears /// any previously set file paths. The default - /// environment variable is IGN_FILE_PATH. The + /// environment variable is GZ_FILE_PATH. The /// environment variable should be a set of colon (semicolon on windows) /// delimited paths. These paths will be used with the FindFile function. /// \param [in] _env name of the environment variable diff --git a/src/SystemPaths.cc b/src/SystemPaths.cc index 676a10882..41a68284b 100644 --- a/src/SystemPaths.cc +++ b/src/SystemPaths.cc @@ -37,10 +37,16 @@ using namespace common; class gz::common::SystemPaths::Implementation { /// \brief Name of the environment variable to check for plugin paths - public: std::string pluginPathEnv = "IGN_PLUGIN_PATH"; + public: std::string pluginPathEnv = "GZ_PLUGIN_PATH"; + + // TODO(CH3): Deprecated. Remove on tock. + public: std::string pluginPathEnvDeprecated = "IGN_PLUGIN_PATH"; /// \brief Name of the environment variable to check for file paths - public: std::string filePathEnv = "IGN_FILE_PATH"; + public: std::string filePathEnv = "GZ_FILE_PATH"; + + // TODO(CH3): Deprecated. Remove on tock. + public: std::string filePathEnvDeprecated = "IGN_FILE_PATH"; /// \brief Paths to plugins public: std::list<std::string> pluginPaths; @@ -83,12 +89,23 @@ SystemPaths::SystemPaths() { std::string home, path, fullPath; if (!env(IGN_HOMEDIR, home)) - home = "/tmp/ignition"; + home = "/tmp/gz"; - if (!env("IGN_LOG_PATH", path)) + if (!env("GZ_LOG_PATH", path)) { - if (home != "/tmp/ignition") - fullPath = joinPaths(home, ".ignition"); + // TODO(CH3): Deprecated. Remove on tock. + if (env("IGN_LOG_PATH", path)) + { + gzwarn << "Setting log path to [" << path << "] using deprecated " + << "environment variable [IGN_LOG_PATH]. Please use " + << "[GZ_LOG_PATH] instead." << std::endl; + } + } + + if (path.empty()) + { + if (home != "/tmp/gz") + fullPath = joinPaths(home, ".gz"); else fullPath = home; } @@ -100,11 +117,23 @@ SystemPaths::SystemPaths() createDirectories(fullPath); } - this->dataPtr->logPath = fullPath; // Populate this->dataPtr->filePaths with values from the default // environment variable. - this->SetFilePathEnv(this->dataPtr->filePathEnv); + + if (this->dataPtr->filePathEnv.empty() && + !this->dataPtr->filePathEnvDeprecated.empty()) + { + gzwarn << "Setting file path using deprecated environment variable [" + << this->dataPtr->filePathEnvDeprecated + << "]. Please use " << this->dataPtr->filePathEnv + << " instead." << std::endl; + this->SetFilePathEnv(this->dataPtr->filePathEnvDeprecated); + } + else + { + this->SetFilePathEnv(this->dataPtr->filePathEnv); + } } ///////////////////////////////////////////////// @@ -117,6 +146,26 @@ std::string SystemPaths::LogPath() const void SystemPaths::SetPluginPathEnv(const std::string &_env) { this->dataPtr->pluginPathEnv = _env; + + // TODO(CH3): Deprecated. Remove on tock. + std::string result; + if (!this->dataPtr->pluginPathEnv.empty()) + { + if (env(this->dataPtr->pluginPathEnv, result)) + { + // TODO(CH3): Deprecated. Remove on tock. + std::string ignPrefix = "IGN_"; + + // Emit warning if env starts with IGN_ + if (_env.compare(0, ignPrefix.length(), ignPrefix) == 0) + { + gzwarn << "Finding plugins using deprecated IGN_ prefixed environment " + << "variable [" + << _env << "]. Please use the GZ_ prefix instead" + << std::endl; + } + } + } } ///////////////////////////////////////////////// @@ -129,6 +178,15 @@ const std::list<std::string> &SystemPaths::PluginPaths() { this->AddPluginPaths(result); } + // TODO(CH3): Deprecated. Remove on tock. + if (env(this->dataPtr->pluginPathEnvDeprecated, result)) + { + this->AddPluginPaths(result); + gzwarn << "Finding plugins using deprecated environment variable " + << "[" << this->dataPtr->pluginPathEnvDeprecated + << "]. Please use [" << this->dataPtr->pluginPathEnv + << "] instead." << std::endl; + } } return this->dataPtr->pluginPaths; } @@ -165,12 +223,25 @@ std::string SystemPaths::FindSharedLibrary(const std::string &_libName) void SystemPaths::SetFilePathEnv(const std::string &_env) { this->dataPtr->filePathEnv = _env; + std::string result; + if (!this->dataPtr->filePathEnv.empty()) { this->ClearFilePaths(); - std::string result; if (env(this->dataPtr->filePathEnv, result)) { + // TODO(CH3): Deprecated. Remove on tock. + std::string ignPrefix = "IGN_"; + + // Emit warning if env starts with IGN_ + if (_env.compare(0, ignPrefix.length(), ignPrefix) == 0) + { + gzwarn << "Finding files using deprecated IGN_ prefixed environment " + << "variable [" + << _env << "]. Please use the GZ_ prefix instead" + << std::endl; + } + this->AddFilePaths(result); } } diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index c03cce25a..a237de813 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -34,8 +34,8 @@ using namespace gz; -const char kPluginPath[] = "IGN_PLUGIN_PATH"; -const char kFilePath[] = "IGN_FILE_PATH"; +const char kPluginPath[] = "GZ_PLUGIN_PATH"; +const char kFilePath[] = "GZ_FILE_PATH"; class TestTempDirectory : public gz::common::TempDirectory { diff --git a/tutorials/hw-encoding.md b/tutorials/hw-encoding.md index cdb6f7394..50549b094 100644 --- a/tutorials/hw-encoding.md +++ b/tutorials/hw-encoding.md @@ -83,7 +83,7 @@ If your computer has more GPUs, it is important to specify which one to use. Here are some basic naming rules: - NVEnc - - Linux: Devices `/dev/nvidia0`, `/dev/nvidia1` etc. Beware that the numbers + - Linux: Devices `/dev/nvidia0`, `/dev/nvidia1` etc. Beware that the numbers in names of these devices can differ from the numbers CUDA assigns the GPUs (CUDA orders the GPUs according to their compute capability, whereas numbering of these devices is probably by the order on PCI bus). @@ -93,16 +93,16 @@ Here are some basic naming rules: - Windows: The devices are called just `0`, `1` and so on. - Linux: When using QSV on Linux, you can use VA-API device names. - VA-API - - Linux: + - Linux: - DRM: The devices are called `/dev/dri/renderD128`, `/dev/dri/renderD129` etc. DRM stands for Direct Rendering Manager, not Digital Rights Management - To use these devices, make sure your user has write permissions to the + To use these devices, make sure your user has write permissions to the device files. Ubuntu usually doesn't give write access to everybody, but just to members of the `video` group. - GLX: You can also pass an X-server string like `:0`, which means the encoder should use the GPU on which this X server is running (it needs to support the GLX extension). On headless machines, you should use DRM. - + ## 3. Using HW surface The last thing you need to decide is whether the selected encoder should use @@ -120,11 +120,11 @@ on implementing the recording procedure itself, and completely ignore any HW acceleration of the recording process. Users of the code can then enable the HW acceleration just using these 3 environment variables: -### `IGN_VIDEO_ALLOWED_ENCODERS` +### `GZ_VIDEO_ALLOWED_ENCODERS` This is the main variable that allows the `VideoEncoder` to probe for supported HW-accelerated encoders. It is a colon-separated list of names described in the -table above. Example: `IGN_VIDEO_ALLOWED_ENCODERS=NVENC:QSV`. Special value `ALL` +table above. Example: `GZ_VIDEO_ALLOWED_ENCODERS=NVENC:QSV`. Special value `ALL` means that all encoders should be tried. Special value `NONE` (or empty value) means that a SW encoder should be used. @@ -140,14 +140,14 @@ encoder is considered working. Sometimes, something can go wrong in a later stag (e.g. insufficient GPU memory), and that is a kind of thing you have to handle yourself. -### `IGN_VIDEO_ENCODER_DEVICE` +### `GZ_VIDEO_ENCODER_DEVICE` This is a name of the encoder device as specified in the "Device Names" section. If empty, first working device will be used. This auto detection should suffice on single-GPU systems or if you don't care which GPU will be used. If a device is specified, only encoders accepting this device name as an argument will be probed. -### `IGN_VIDEO_USE_HW_SURFACE` +### `GZ_VIDEO_USE_HW_SURFACE` This variable has three possible values: @@ -255,19 +255,19 @@ Just give them a try and dig deeper in the configuration if something is wrong. ## Linux/Win + Intel GPU - IGN_VIDEO_ALLOWED_ENCODERS=QSV + GZ_VIDEO_ALLOWED_ENCODERS=QSV ## Linux/Win + NVidia GPU - IGN_VIDEO_ALLOWED_ENCODERS=NVENC + GZ_VIDEO_ALLOWED_ENCODERS=NVENC ## Linux + Intel/NVidia GPU - IGN_VIDEO_ALLOWED_ENCODERS=VAAPI + GZ_VIDEO_ALLOWED_ENCODERS=VAAPI ## Linux NVidia Multi-GPU machine - IGN_VIDEO_ALLOWED_ENCODERS=NVENC IGN_VIDEO_ENCODER_DEVICE=/dev/nvidia2 + GZ_VIDEO_ALLOWED_ENCODERS=NVENC GZ_VIDEO_ENCODER_DEVICE=/dev/nvidia2 # Caveats @@ -290,6 +290,6 @@ This might be really troublesome on e.g. multi-user systems when you don't even which jobs of the other users are using NVEnc. There is a workaround removing this artificial limit - patching the binary blob -drivers using https://github.com/keylase/nvidia-patch . This is an unofficial -patch that is not supported by NVidia or the Ignition developers. It is up to +drivers using https://github.com/keylase/nvidia-patch . This is an unofficial +patch that is not supported by NVidia or the Ignition developers. It is up to you if you can and want to do that. And there is no guarantee it will work forever. From c97c92e0cd348190034dc46a6f6ea48c9a0194bf Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Fri, 17 Jun 2022 08:47:56 -0700 Subject: [PATCH 168/219] [ign -> gz] CMake functions (#370) Signed-off-by: Louise Poubel <louise@openrobotics.org> --- CMakeLists.txt | 34 ++++++++++----------- av/include/gz/common/CMakeLists.txt | 2 +- av/src/CMakeLists.txt | 6 ++-- events/include/gz/common/CMakeLists.txt | 3 +- events/src/CMakeLists.txt | 13 ++++---- geospatial/include/gz/common/CMakeLists.txt | 3 +- geospatial/src/CMakeLists.txt | 9 +++--- graphics/include/gz/common/CMakeLists.txt | 3 +- graphics/src/CMakeLists.txt | 11 +++---- include/gz/common/CMakeLists.txt | 3 +- profiler/src/CMakeLists.txt | 8 ++--- src/CMakeLists.txt | 7 ++--- test/integration/CMakeLists.txt | 4 +-- test/performance/CMakeLists.txt | 6 ++-- test/regression/CMakeLists.txt | 4 +-- testing/include/gz/common/CMakeLists.txt | 2 +- testing/src/CMakeLists.txt | 4 +-- 17 files changed, 57 insertions(+), 65 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 09ba32e36..9be7aca88 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ set(IGN_CMAKE_VER ${ignition-cmake3_VERSION_MAJOR}) #============================================================================ # Configure the project #============================================================================ -ign_configure_project( +gz_configure_project( REPLACE_IGNITION_INCLUDE_PATH gz/common VERSION_SUFFIX pre1) @@ -51,18 +51,18 @@ message(STATUS "\n\n-- ====== Finding Dependencies ======") #-------------------------------------- # Find ignition-math -ign_find_package(ignition-math7 REQUIRED_BY geospatial graphics events) +gz_find_package(ignition-math7 REQUIRED_BY geospatial graphics events) set(IGN_MATH_VER ${ignition-math7_VERSION_MAJOR}) #-------------------------------------- # Find ignition-utils -ign_find_package(ignition-utils2 REQUIRED) +gz_find_package(ignition-utils2 REQUIRED) set(IGN_UTILS_VER ${ignition-utils2_VERSION_MAJOR}) #-------------------------------------- # Find Tinyxml2 if(USE_EXTERNAL_TINYXML2) - ign_find_package(TINYXML2 PRETTY tinyxml2 + gz_find_package(TINYXML2 PRETTY tinyxml2 REQUIRED_BY graphics PRIVATE_FOR graphics) else() @@ -71,7 +71,7 @@ endif() #-------------------------------------- # Find libdl -ign_find_package( +gz_find_package( DL REQUIRED PRIVATE PRETTY libdl PURPOSE "Required for plugins") #-------------------------------------- @@ -80,49 +80,49 @@ if(NOT MSVC) #------------------------------------ # Find uuid - ign_find_package(UUID REQUIRED PRETTY uuid) + gz_find_package(UUID REQUIRED PRETTY uuid) endif() #------------------------------------ # Find Freeimage -ign_find_package(FreeImage VERSION 3.9 +gz_find_package(FreeImage VERSION 3.9 REQUIRED_BY graphics PRIVATE_FOR graphics) #------------------------------------ # Find GNU Triangulation Surface Library -ign_find_package( +gz_find_package( GTS PRETTY gts PURPOSE "GNU Triangulation Surface library" REQUIRED_BY graphics PRIVATE_FOR graphics) #------------------------------------ # Find GDAL -ign_find_package(GDAL VERSION 3.0 +gz_find_package(GDAL VERSION 3.0 PKGCONFIG gdal PRIVATE_FOR geospatial REQUIRED_BY geospatial) #------------------------------------ # Find libswscale -ign_find_package(SWSCALE REQUIRED_BY av PRETTY libswscale) +gz_find_package(SWSCALE REQUIRED_BY av PRETTY libswscale) #------------------------------------ # Find avdevice -ign_find_package(AVDEVICE VERSION 56.4.100 REQUIRED_BY av PRETTY libavdevice) +gz_find_package(AVDEVICE VERSION 56.4.100 REQUIRED_BY av PRETTY libavdevice) #------------------------------------ # Find avformat -ign_find_package(AVFORMAT REQUIRED_BY av PRETTY libavformat) +gz_find_package(AVFORMAT REQUIRED_BY av PRETTY libavformat) #------------------------------------ # Find avcodec -ign_find_package(AVCODEC REQUIRED_BY av PRETTY libavcodec) +gz_find_package(AVCODEC REQUIRED_BY av PRETTY libavcodec) #------------------------------------ # Find avutil -ign_find_package(AVUTIL REQUIRED_BY av PRETTY libavutil) +gz_find_package(AVUTIL REQUIRED_BY av PRETTY libavutil) message(STATUS "-------------------------------------------\n") @@ -134,13 +134,13 @@ message(STATUS "-------------------------------------------\n") configure_file("${PROJECT_SOURCE_DIR}/cppcheck.suppress.in" ${PROJECT_BINARY_DIR}/cppcheck.suppress) -ign_configure_build(QUIT_IF_BUILD_ERRORS +gz_configure_build(QUIT_IF_BUILD_ERRORS COMPONENTS av events geospatial graphics profiler testing) #============================================================================ # Create package information #============================================================================ -ign_create_packages() +gz_create_packages() #============================================================================ @@ -149,7 +149,7 @@ ign_create_packages() configure_file(${CMAKE_SOURCE_DIR}/api.md.in ${CMAKE_BINARY_DIR}/api.md) configure_file(${CMAKE_SOURCE_DIR}/tutorials.md.in ${CMAKE_BINARY_DIR}/tutorials.md) -ign_create_docs( +gz_create_docs( API_MAINPAGE_MD "${CMAKE_BINARY_DIR}/api.md" TUTORIALS_MAINPAGE_MD "${CMAKE_BINARY_DIR}/tutorials.md" TAGFILES diff --git a/av/include/gz/common/CMakeLists.txt b/av/include/gz/common/CMakeLists.txt index cf18581c4..b2ec8b8af 100644 --- a/av/include/gz/common/CMakeLists.txt +++ b/av/include/gz/common/CMakeLists.txt @@ -1,2 +1,2 @@ -ign_install_all_headers(COMPONENT av +gz_install_all_headers(COMPONENT av EXCLUDE_FILES HWEncoder.hh) diff --git a/av/src/CMakeLists.txt b/av/src/CMakeLists.txt index e6d3c5a40..c3d7c6429 100644 --- a/av/src/CMakeLists.txt +++ b/av/src/CMakeLists.txt @@ -9,13 +9,13 @@ if(NOT IGN_COMMON_BUILD_HW_VIDEO) set(GZ_COMMON_BUILD_HW_VIDEO IGN_COMMON_BUILD_HW_VIDEO) endif() -ign_get_libsources_and_unittests(sources gtest_sources) +gz_get_libsources_and_unittests(sources gtest_sources) if(NOT GZ_COMMON_BUILD_HW_VIDEO) list(REMOVE_ITEM sources HWEncoder.cc) endif() -ign_add_component(av SOURCES ${sources} GET_TARGET_NAME av_target) +gz_add_component(av SOURCES ${sources} GET_TARGET_NAME av_target) target_link_libraries(${av_target} PUBLIC @@ -29,7 +29,7 @@ if(GZ_COMMON_BUILD_HW_VIDEO) target_compile_definitions(${av_target} PRIVATE GZ_COMMON_BUILD_HW_VIDEO) endif() -ign_build_tests( +gz_build_tests( TYPE UNIT SOURCES ${gtest_sources} LIB_DEPS diff --git a/events/include/gz/common/CMakeLists.txt b/events/include/gz/common/CMakeLists.txt index e65853afa..74cee7bdc 100644 --- a/events/include/gz/common/CMakeLists.txt +++ b/events/include/gz/common/CMakeLists.txt @@ -1,2 +1 @@ - -ign_install_all_headers(COMPONENT events) +gz_install_all_headers(COMPONENT events) diff --git a/events/src/CMakeLists.txt b/events/src/CMakeLists.txt index 350d010e0..9678e32a1 100644 --- a/events/src/CMakeLists.txt +++ b/events/src/CMakeLists.txt @@ -1,16 +1,15 @@ +gz_get_libsources_and_unittests(sources gtest_sources) -ign_get_libsources_and_unittests(sources gtest_sources) - -ign_add_component(events SOURCES ${sources} GET_TARGET_NAME events_target) +gz_add_component(events SOURCES ${sources} GET_TARGET_NAME events_target) target_link_libraries(${events_target} PUBLIC ignition-math${IGN_MATH_VER}::ignition-math${IGN_MATH_VER}) -ign_build_tests( - TYPE UNIT +gz_build_tests( + TYPE UNIT SOURCES ${gtest_sources} - LIB_DEPS - ${events_target} + LIB_DEPS + ${events_target} ignition-common${IGN_COMMON_VER}-testing ) diff --git a/geospatial/include/gz/common/CMakeLists.txt b/geospatial/include/gz/common/CMakeLists.txt index 7155438eb..bb2e8ba69 100644 --- a/geospatial/include/gz/common/CMakeLists.txt +++ b/geospatial/include/gz/common/CMakeLists.txt @@ -1,2 +1 @@ - -ign_install_all_headers(COMPONENT geospatial) +gz_install_all_headers(COMPONENT geospatial) diff --git a/geospatial/src/CMakeLists.txt b/geospatial/src/CMakeLists.txt index d752e6450..8c9ecf088 100644 --- a/geospatial/src/CMakeLists.txt +++ b/geospatial/src/CMakeLists.txt @@ -1,7 +1,6 @@ +gz_get_libsources_and_unittests(sources gtest_sources) -ign_get_libsources_and_unittests(sources gtest_sources) - -ign_add_component(geospatial +gz_add_component(geospatial SOURCES ${sources} DEPENDS_ON_COMPONENTS graphics GET_TARGET_NAME geospatial_target) @@ -18,8 +17,8 @@ target_include_directories(${geospatial_target} PRIVATE ${GDAL_INCLUDE_DIR}) -ign_build_tests(TYPE UNIT SOURCES ${gtest_sources} - LIB_DEPS +gz_build_tests(TYPE UNIT SOURCES ${gtest_sources} + LIB_DEPS ${geospatial_target} ignition-common${IGN_COMMON_VER}-testing ) diff --git a/graphics/include/gz/common/CMakeLists.txt b/graphics/include/gz/common/CMakeLists.txt index e183ec917..5320035f8 100644 --- a/graphics/include/gz/common/CMakeLists.txt +++ b/graphics/include/gz/common/CMakeLists.txt @@ -1,2 +1 @@ - -ign_install_all_headers(COMPONENT graphics) +gz_install_all_headers(COMPONENT graphics) diff --git a/graphics/src/CMakeLists.txt b/graphics/src/CMakeLists.txt index 06b6958ca..735bdd37a 100644 --- a/graphics/src/CMakeLists.txt +++ b/graphics/src/CMakeLists.txt @@ -1,5 +1,4 @@ - -ign_get_libsources_and_unittests(sources gtest_sources) +gz_get_libsources_and_unittests(sources gtest_sources) if(NOT USE_EXTERNAL_TINYXML2) @@ -10,7 +9,7 @@ if(NOT USE_EXTERNAL_TINYXML2) endif() -ign_add_component(graphics SOURCES ${sources} GET_TARGET_NAME graphics_target) +gz_add_component(graphics SOURCES ${sources} GET_TARGET_NAME graphics_target) target_link_libraries(${graphics_target} PUBLIC @@ -20,10 +19,10 @@ target_link_libraries(${graphics_target} GTS::GTS FreeImage::FreeImage) -ign_build_tests( - TYPE UNIT +gz_build_tests( + TYPE UNIT SOURCES ${gtest_sources} - LIB_DEPS + LIB_DEPS ${graphics_target} ignition-common${IGN_COMMON_VER}-testing ) diff --git a/include/gz/common/CMakeLists.txt b/include/gz/common/CMakeLists.txt index c786bcee2..bf4411e89 100644 --- a/include/gz/common/CMakeLists.txt +++ b/include/gz/common/CMakeLists.txt @@ -1,2 +1 @@ - -ign_install_all_headers() +gz_install_all_headers() diff --git a/profiler/src/CMakeLists.txt b/profiler/src/CMakeLists.txt index 3874cb0fb..5dcfb794a 100644 --- a/profiler/src/CMakeLists.txt +++ b/profiler/src/CMakeLists.txt @@ -53,7 +53,7 @@ if(IGN_PROFILER_REMOTERY) list(APPEND PROFILER_TESTS Profiler_Remotery_TEST.cc) endif() -ign_add_component(profiler SOURCES ${PROFILER_SRCS} GET_TARGET_NAME profiler_target) +gz_add_component(profiler SOURCES ${PROFILER_SRCS} GET_TARGET_NAME profiler_target) # Always enable profiler so that it's built, but make it # private so that downstream users can still disable profiling @@ -79,10 +79,10 @@ if(IGN_PROFILER_REMOTERY) endif() endif() -ign_build_tests( - TYPE UNIT +gz_build_tests( + TYPE UNIT SOURCES ${PROFILER_TESTS} - LIB_DEPS + LIB_DEPS ${profiler_target} ignition-common${IGN_COMMON_VER}-testing TEST_LIST profiler_tests) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7573b5d35..23f48efb3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,10 +1,9 @@ - # Collect source files into the "sources" variable and unit test files into the # "gtest_sources" variable -ign_get_libsources_and_unittests(sources gtest_sources) +gz_get_libsources_and_unittests(sources gtest_sources) # Create the library target -ign_create_core_library( +gz_create_core_library( SOURCES ${sources} CXX_STANDARD 17) @@ -45,7 +44,7 @@ if(NOT ignition-math${IGN_MATH_VER}_FOUND) endif() # Build the unit tests -ign_build_tests( +gz_build_tests( TYPE UNIT SOURCES ${gtest_sources} LIB_DEPS diff --git a/test/integration/CMakeLists.txt b/test/integration/CMakeLists.txt index 696247eeb..f65f0a283 100644 --- a/test/integration/CMakeLists.txt +++ b/test/integration/CMakeLists.txt @@ -1,11 +1,11 @@ -ign_get_sources(tests) +gz_get_sources(tests) if (SKIP_av OR INTERNAL_SKIP_av) list(REMOVE_ITEM tests encoder_timing.cc) list(REMOVE_ITEM tests video_encoder.cc) endif() -ign_build_tests( +gz_build_tests( TYPE INTEGRATION SOURCES ${tests} LIB_DEPS ignition-common${IGN_COMMON_VER}-testing diff --git a/test/performance/CMakeLists.txt b/test/performance/CMakeLists.txt index bde3835bb..35de8f031 100644 --- a/test/performance/CMakeLists.txt +++ b/test/performance/CMakeLists.txt @@ -1,4 +1,4 @@ -ign_get_sources(tests) +gz_get_sources(tests) # plugin_specialization test causes lcov to hang # see ign-cmake issue 25 @@ -9,10 +9,10 @@ endif() link_directories(${PROJECT_BINARY_DIR}/test) -ign_build_tests( +gz_build_tests( TYPE PERFORMANCE SOURCES ${tests}) - + if(TARGET PERFORMANCE_plugin_specialization) # We add this dependency to make sure that DummyPlugins gets generated # before PERFORMANCE_plugin_specialization so that its auto-generated header is available. diff --git a/test/regression/CMakeLists.txt b/test/regression/CMakeLists.txt index 51b8bce5e..cdcf8c736 100644 --- a/test/regression/CMakeLists.txt +++ b/test/regression/CMakeLists.txt @@ -1,7 +1,7 @@ -ign_get_sources(tests) +gz_get_sources(tests) link_directories(${PROJECT_BINARY_DIR}/test) -ign_build_tests( +gz_build_tests( TYPE REGRESSION SOURCES ${tests}) diff --git a/testing/include/gz/common/CMakeLists.txt b/testing/include/gz/common/CMakeLists.txt index 027bd91ff..d95f821e0 100644 --- a/testing/include/gz/common/CMakeLists.txt +++ b/testing/include/gz/common/CMakeLists.txt @@ -1 +1 @@ -ign_install_all_headers(COMPONENT testing) +gz_install_all_headers(COMPONENT testing) diff --git a/testing/src/CMakeLists.txt b/testing/src/CMakeLists.txt index 970bd7a81..c1e0ebe6c 100644 --- a/testing/src/CMakeLists.txt +++ b/testing/src/CMakeLists.txt @@ -11,7 +11,7 @@ set(test_sources Utils_TEST.cc ) -ign_add_component(testing SOURCES ${sources} GET_TARGET_NAME testing_target) +gz_add_component(testing SOURCES ${sources} GET_TARGET_NAME testing_target) -ign_build_tests(TYPE UNIT SOURCES ${test_sources} +gz_build_tests(TYPE UNIT SOURCES ${test_sources} LIB_DEPS ${testing_target}) From c7b0636e132e75a03af0038d4cecd3bbcedf9860 Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Fri, 17 Jun 2022 16:39:55 -0700 Subject: [PATCH 169/219] ign -> gz Macro Migration : gz-common (#366) Co-authored-by: Louise Poubel <louise@openrobotics.org> --- Migration.md | 30 ++++++++--- av/include/gz/common/AudioDecoder.hh | 2 +- av/include/gz/common/HWEncoder.hh | 2 +- av/include/gz/common/HWVideo.hh | 2 +- av/include/gz/common/Video.hh | 2 +- av/include/gz/common/VideoEncoder.hh | 2 +- av/src/AudioDecoder_TEST.cc | 2 +- events/include/gz/common/KeyEvent.hh | 4 +- events/include/gz/common/MouseEvent.hh | 4 +- events/src/Event.cc | 4 +- events/src/Event_TEST.cc | 2 +- examples/CMakeLists.txt | 2 +- examples/assert_example.cc | 2 +- examples/profiler.cc | 50 +++++++++---------- .../include/gz/common/geospatial/Dem.hh | 2 +- geospatial/src/ImageHeightmap.cc | 2 +- graphics/include/gz/common/Animation.hh | 8 +-- graphics/include/gz/common/ColladaExporter.hh | 2 +- graphics/include/gz/common/ColladaLoader.hh | 2 +- graphics/include/gz/common/Image.hh | 2 +- graphics/include/gz/common/KeyFrame.hh | 6 +-- graphics/include/gz/common/Material.hh | 2 +- graphics/include/gz/common/Mesh.hh | 2 +- graphics/include/gz/common/MeshManager.hh | 4 +- graphics/include/gz/common/NodeAnimation.hh | 2 +- graphics/include/gz/common/NodeTransform.hh | 2 +- graphics/include/gz/common/OBJLoader.hh | 2 +- graphics/include/gz/common/Pbr.hh | 2 +- graphics/include/gz/common/STLLoader.hh | 2 +- graphics/include/gz/common/SVGLoader.hh | 2 +- graphics/include/gz/common/Skeleton.hh | 2 +- .../include/gz/common/SkeletonAnimation.hh | 2 +- graphics/include/gz/common/SkeletonNode.hh | 2 +- graphics/include/gz/common/SubMesh.hh | 2 +- graphics/src/BVHLoader.cc | 6 +-- graphics/src/ColladaExporter.cc | 2 +- graphics/src/ColladaLoader.cc | 10 ++-- graphics/src/Material.cc | 8 +-- graphics/src/Material_TEST.cc | 2 +- graphics/src/MeshManager.cc | 36 ++++++------- graphics/src/NodeTransform.cc | 2 +- graphics/src/OBJLoader.cc | 4 +- graphics/src/SVGLoader.cc | 14 +++--- graphics/src/SubMesh.cc | 4 +- graphics/src/SubMesh_TEST.cc | 12 ++--- graphics/src/tiny_obj_loader.h | 4 +- include/gz/common/Battery.hh | 2 +- include/gz/common/Console.hh | 12 ++--- include/gz/common/EnumIface.hh | 2 +- include/gz/common/Filesystem.hh | 2 +- include/gz/common/SuppressWarning.hh | 8 +-- include/gz/common/SystemPaths.hh | 2 +- include/gz/common/TempDirectory.hh | 7 ++- include/gz/common/Timer.hh | 2 +- include/gz/common/URI.hh | 10 ++-- include/gz/common/Util.hh | 38 +++++++------- include/gz/common/WorkerPool.hh | 2 +- include/ignition/common/EnumIface.hh | 3 ++ include/ignition/common/Plugin.hh | 4 +- include/ignition/common/PluginLoader.hh | 4 +- include/ignition/common/Util.hh | 21 ++++++++ .../ignition/common/detail/PluginMacros.hh | 4 +- profiler/BUILD.bazel | 8 +-- profiler/include/gz/common/Profiler.hh | 48 +++++++++--------- profiler/include/ignition/common/Profiler.hh | 11 ++++ profiler/src/CMakeLists.txt | 33 +++++++----- profiler/src/Profiler.cc | 8 +-- profiler/src/Profiler_Disabled_TEST.cc | 4 +- profiler/src/Profiler_Remotery_TEST.cc | 4 +- profiler/src/Remotery/ign_remotery_vis.in | 4 +- src/Console.cc | 2 +- src/Console_TEST.cc | 14 +++--- src/EnumIface_TEST.cc | 2 +- src/Filesystem.cc | 2 +- src/Filesystem_TEST.cc | 2 +- src/MaterialDensity.cc | 2 +- src/Plugin.cc | 4 +- src/PluginLoader.cc | 4 +- src/PluginLoader_TEST.cc | 4 +- src/PluginUtils.hh | 2 +- src/PluginUtils_TEST.cc | 4 +- src/SystemPaths.cc | 4 +- src/URI_TEST.cc | 2 +- src/Util.cc | 6 +-- src/WorkerPool_TEST.cc | 4 +- test/integration/console.cc | 4 +- test/integration/mesh.cc | 18 +++---- test/integration/plugin.cc | 22 ++++---- test/performance/plugin_specialization.cc | 46 ++++++++--------- test/plugins/BadPluginAPIVersionNew.cc | 4 +- test/plugins/BadPluginAPIVersionOld.cc | 4 +- test/plugins/BadPluginAlign.cc | 4 +- test/plugins/BadPluginSize.cc | 4 +- test/plugins/CMakeLists.txt | 32 ++++++------ test/plugins/DummyPlugins.cc | 4 +- .../plugin_bad_const_assignment.cc | 4 +- .../plugin_bad_const_construct.cc | 4 +- .../static_assertions/plugin_no_base_class.cc | 4 +- .../plugin_not_fully_qualified_base.cc | 4 +- .../plugin_not_fully_qualified_class.cc | 4 +- .../static_assertions/plugin_not_global_ns.cc | 4 +- .../plugin_wrong_base_class.cc | 4 +- .../gz/common/testing/AutoLogFixture.hh | 6 +-- .../include/gz/common/testing/TestPaths.hh | 8 +-- .../common/testing/detail/AutoLogFixture.hh | 4 +- tutorials/profiler.md | 24 ++++----- 106 files changed, 418 insertions(+), 361 deletions(-) diff --git a/Migration.md b/Migration.md index 0e4b7b601..0e57cca19 100644 --- a/Migration.md +++ b/Migration.md @@ -18,18 +18,32 @@ release will remove the deprecated code. 4. The logging macros (`ignmsg`, `ignwarn`, `ignerr`, etc.) and logging function macros (`ignLogInit()`, etc.) are deprecated and will be removed in future versions. Use `gz` instead (e.g. `gzmsg`, `gzwarn`, `gzLogInit()`) - 5. All the plugin APIs are deprecated, use the gz-plugin library instead. See the [migration guide](https://github.com/ignitionrobotics/ign-plugin/blob/ign-plugin1/MIGRATION.md). - 6. The following `IGN_` prefixed environment variables are deprecated and will be removed. Please use the `GZ_` prefixed versions instead! 1. `IGN_VIDEO_ALLOWED_ENCODERS` -> `GZ_VIDEO_ALLOWED_ENCODERS` - 2. `IGN_VIDEO_ENCODER_DEVICE` -> `GZ_VIDEO_ENCODER_DEVICE` - 3. `IGN_VIDEO_USE_HW_SURFACE` -> `GZ_VIDEO_USE_HW_SURFACE` - 4. `IGN_FILE_PATH` -> `GZ_FILE_PATH` - 5. `IGN_LOG_PATH` -> `GZ_LOG_PATH` - 6. `IGN_PLUGIN_PATH` -> `GZ_PLUGIN_PATH` + 2. `IGN_VIDEO_ENCODER_DEVICE` -> `GZ_VIDEO_ENCODER_DEVICE` + 3. `IGN_VIDEO_USE_HW_SURFACE` -> `GZ_VIDEO_USE_HW_SURFACE` + 4. `IGN_FILE_PATH` -> `GZ_FILE_PATH` + 5. `IGN_LOG_PATH` -> `GZ_LOG_PATH` + 6. `IGN_PLUGIN_PATH` -> `GZ_PLUGIN_PATH` +7. The following `IGN_` / `IGNITION_` prefixed macros are deprecated and will be removed in future versions. + Additionally, they will only be available when including the corresponding `ignition/...` header. + Use the `GZ_` prefix instead. + 1. `IGN_ENUM` + 2. `IGN_HOMEDIR` + 3. `IGN_NANO_TO_SEC`, `IGN_SEC_TO_NANO`, `IGN_MS_TO_NANO`, `IGN_US_TO_NANO` + 4. `IGN_SPEED_OF_LIGHT` + 5. `IGN_SLEEP_S`, `IGN_SLEEP_US`, `IGN_SLEEP_MS`, `IGN_SLEEP_NS` + 6. `IGN_SYSTEM_TIME`, `IGN_SYSTEM_TIME_S`, `IGN_SYSTEM_TIME_US`, `IGN_SYSTEM_TIME_MS`, `IGN_SYSTEM_TIME_NS` + 7. `IGN_ASSERT` + 8. `IGNITION_COMMON_TINYOBJLOADER_IMPLEMENTATION` (`src` local, hard-tocked) + 9. `IGN_PROFILER_ENABLE`, `IGN_PROFILE_THREAD_NAME`, `IGN_PROFILE_LOG_TEXT`, `IGN_PROFILE_BEGIN`, `IGN_PROFILE_END`, `IGN_PROFILE_L`, `IGN_PROFILE`, `IGN_PROFILE_VALID` + 10. `IGN_CREATE_SPEC_INTERFACE` + 11. `IGN_DUMMY_PLUGIN_PATH` + 12. `IGNITION_UNITTEST_SPECIALIZED_PLUGIN_ACCESS` + ### Additions @@ -90,7 +104,7 @@ release will remove the deprecated code. 1. Requires c++17. -1. (New in 3.8.0) On Windows, the value of C++ macro `IGN_HOMEDIR` changed from `HOMEPATH` to `USERPROFILE`. It is usually used to read the path to the user's home from environment. The old value pointed to a path relative to the (a) current drive letter as reported by `pwd`, not the system drive letter. The new value correctly points to an environment variable that contains the full absolute path to the user's profile. If the code did not use the macro in some unexpected way, the new behavior should work either the same or even better (it would work even when the current directory is on a non-system drive). If the code relied on this value to be relative to the current drive letter, it needs to be changed to use `HOMEPATH` directly. +1. (New in 3.8.0) On Windows, the value of C++ macro `GZ_HOMEDIR` changed from `HOMEPATH` to `USERPROFILE`. It is usually used to read the path to the user's home from environment. The old value pointed to a path relative to the (a) current drive letter as reported by `pwd`, not the system drive letter. The new value correctly points to an environment variable that contains the full absolute path to the user's profile. If the code did not use the macro in some unexpected way, the new behavior should work either the same or even better (it would work even when the current directory is on a non-system drive). If the code relied on this value to be relative to the current drive letter, it needs to be changed to use `HOMEPATH` directly. ## Gazebo Common 1.X to 2.X diff --git a/av/include/gz/common/AudioDecoder.hh b/av/include/gz/common/AudioDecoder.hh index 2bd9abd9d..4ed9d197c 100644 --- a/av/include/gz/common/AudioDecoder.hh +++ b/av/include/gz/common/AudioDecoder.hh @@ -57,7 +57,7 @@ namespace gz public: int SampleRate(); /// \brief Private data pointer - IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/av/include/gz/common/HWEncoder.hh b/av/include/gz/common/HWEncoder.hh index 742e8e18a..4c56a5514 100644 --- a/av/include/gz/common/HWEncoder.hh +++ b/av/include/gz/common/HWEncoder.hh @@ -79,7 +79,7 @@ namespace gz::common public: HWEncoderType GetEncoderType() const; /// \brief Private data pointer - IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } diff --git a/av/include/gz/common/HWVideo.hh b/av/include/gz/common/HWVideo.hh index feb8d61c8..e152a95b9 100644 --- a/av/include/gz/common/HWVideo.hh +++ b/av/include/gz/common/HWVideo.hh @@ -37,7 +37,7 @@ namespace gz::common _ // For FlagSet to work. }; - IGN_ENUM(HWEncoderTypeParser, HWEncoderType, + GZ_ENUM(HWEncoderTypeParser, HWEncoderType, HWEncoderType::NONE, HWEncoderType::_, "NONE", "NVENC", diff --git a/av/include/gz/common/Video.hh b/av/include/gz/common/Video.hh index 28cf50033..d4f975d15 100644 --- a/av/include/gz/common/Video.hh +++ b/av/include/gz/common/Video.hh @@ -73,7 +73,7 @@ namespace gz private: void Cleanup(); /// \brief Private data pointer - IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/av/include/gz/common/VideoEncoder.hh b/av/include/gz/common/VideoEncoder.hh index 4b6f4a8bf..733cd0988 100644 --- a/av/include/gz/common/VideoEncoder.hh +++ b/av/include/gz/common/VideoEncoder.hh @@ -218,7 +218,7 @@ namespace gz public: void Reset(); /// \brief Private data pointer - IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/av/src/AudioDecoder_TEST.cc b/av/src/AudioDecoder_TEST.cc index c63eb48a1..6809e94bb 100644 --- a/av/src/AudioDecoder_TEST.cc +++ b/av/src/AudioDecoder_TEST.cc @@ -84,7 +84,7 @@ TEST(AudioDecoder, NoCodec) } ///////////////////////////////////////////////// -TEST(AudioDecoder, IGN_UTILS_TEST_DISABLED_ON_WIN32(CheerFile)) +TEST(AudioDecoder, GZ_UTILS_TEST_DISABLED_ON_WIN32(CheerFile)) { common::AudioDecoder audio; diff --git a/events/include/gz/common/KeyEvent.hh b/events/include/gz/common/KeyEvent.hh index 5b3c1f757..b9e50fae2 100644 --- a/events/include/gz/common/KeyEvent.hh +++ b/events/include/gz/common/KeyEvent.hh @@ -110,10 +110,10 @@ namespace gz /// \return this public: KeyEvent& operator=(KeyEvent&& other); - IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief Private data pointer private: std::unique_ptr<KeyEventPrivate> dataPtr; - IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING }; } } diff --git a/events/include/gz/common/MouseEvent.hh b/events/include/gz/common/MouseEvent.hh index 8c73206ad..766a606f2 100644 --- a/events/include/gz/common/MouseEvent.hh +++ b/events/include/gz/common/MouseEvent.hh @@ -203,11 +203,11 @@ namespace gz /// \return this public: MouseEvent &operator=(const MouseEvent &_other); - IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \internal /// \brief Private data pointer private: std::unique_ptr<MouseEventPrivate> dataPtr; - IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING }; } } diff --git a/events/src/Event.cc b/events/src/Event.cc index a0e3cc61d..b8bcb32fd 100644 --- a/events/src/Event.cc +++ b/events/src/Event.cc @@ -48,13 +48,13 @@ void Event::SetSignaled(bool _sig) Connection::Connection(Event *_e, int _i) : event(_e), id(_i) { - this->creationTime = IGN_SYSTEM_TIME(); + this->creationTime = GZ_SYSTEM_TIME(); } ////////////////////////////////////////////////// Connection::~Connection() { - auto diffTime = IGN_SYSTEM_TIME() - this->creationTime; + auto diffTime = GZ_SYSTEM_TIME() - this->creationTime; if ((this->event && !this->event->Signaled()) && diffTime < std::chrono::nanoseconds(10000)) { diff --git a/events/src/Event_TEST.cc b/events/src/Event_TEST.cc index cf4db4172..9db2bc1ce 100644 --- a/events/src/Event_TEST.cc +++ b/events/src/Event_TEST.cc @@ -292,7 +292,7 @@ TEST_F(EventTest, DestructionOrder) evt->Signal(); evt.reset(); // Sleep to avoid warning about deleting a connection right after creation. - IGN_SLEEP_MS(1); + GZ_SLEEP_MS(1); // Check that this doesn't segfault. conn.reset(); diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index efea4b831..97de9444c 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -15,7 +15,7 @@ target_link_libraries(events_example ignition-common${IGN_COMMON_VER}::events) add_executable(profiler_example profiler.cc) target_link_libraries(profiler_example ignition-common${IGN_COMMON_VER}::profiler) -target_compile_definitions(profiler_example PUBLIC "IGN_PROFILER_ENABLE=1") +target_compile_definitions(profiler_example PUBLIC "GZ_PROFILER_ENABLE=1") add_executable(logging_performance logging_performance.cc) target_link_libraries(logging_performance ignition-common${IGN_COMMON_VER}::core) diff --git a/examples/assert_example.cc b/examples/assert_example.cc index 99c5a1896..365ffb074 100644 --- a/examples/assert_example.cc +++ b/examples/assert_example.cc @@ -3,6 +3,6 @@ int main(int argc, char **argv) { // Example of using assert with a message - IGN_ASSERT(1 == 2, "1 must equal 2"); + GZ_ASSERT(1 == 2, "1 must equal 2"); return 0; } diff --git a/examples/profiler.cc b/examples/profiler.cc index e6eafd1dc..f0107ba3a 100644 --- a/examples/profiler.cc +++ b/examples/profiler.cc @@ -27,17 +27,17 @@ std::atomic<bool> running; void task1() { // An example of using scope-based profiling. - IGN_PROFILE("task1"); + GZ_PROFILE("task1"); { - IGN_PROFILE("this"); + GZ_PROFILE("this"); { - IGN_PROFILE("is"); + GZ_PROFILE("is"); { - IGN_PROFILE("a"); + GZ_PROFILE("a"); { - IGN_PROFILE("deep"); + GZ_PROFILE("deep"); { - IGN_PROFILE("stack"); + GZ_PROFILE("stack"); std::this_thread::sleep_for(std::chrono::milliseconds(1)); } } @@ -49,54 +49,54 @@ void task1() void task2() { // An example of using scope-based profiling. - IGN_PROFILE("task2"); + GZ_PROFILE("task2"); { - IGN_PROFILE("a"); + GZ_PROFILE("a"); std::this_thread::sleep_for(std::chrono::milliseconds(2)); } { - IGN_PROFILE("b"); + GZ_PROFILE("b"); std::this_thread::sleep_for(std::chrono::milliseconds(2)); } { - IGN_PROFILE("c"); + GZ_PROFILE("c"); std::this_thread::sleep_for(std::chrono::milliseconds(2)); } { - IGN_PROFILE("d"); + GZ_PROFILE("d"); std::this_thread::sleep_for(std::chrono::milliseconds(2)); } } void task3() { - IGN_PROFILE("task3"); + GZ_PROFILE("task3"); // An example of using start/stop profiling. - IGN_PROFILE_BEGIN("a"); + GZ_PROFILE_BEGIN("a"); std::this_thread::sleep_for(std::chrono::milliseconds(2)); - IGN_PROFILE_END(); + GZ_PROFILE_END(); - IGN_PROFILE_BEGIN("b"); + GZ_PROFILE_BEGIN("b"); std::this_thread::sleep_for(std::chrono::milliseconds(2)); - IGN_PROFILE_END(); + GZ_PROFILE_END(); - IGN_PROFILE_BEGIN("c"); + GZ_PROFILE_BEGIN("c"); std::this_thread::sleep_for(std::chrono::milliseconds(2)); - IGN_PROFILE_END(); + GZ_PROFILE_END(); - IGN_PROFILE_BEGIN("d"); + GZ_PROFILE_BEGIN("d"); std::this_thread::sleep_for(std::chrono::milliseconds(2)); - IGN_PROFILE_END(); + GZ_PROFILE_END(); } void thread(const char *_thread_name) { // Sets the name of the thread to appear in the UI - IGN_PROFILE_THREAD_NAME(_thread_name); + GZ_PROFILE_THREAD_NAME(_thread_name); while (running) { - IGN_PROFILE("Loop"); + GZ_PROFILE("Loop"); // Execute some arbitrary tasks for (size_t ii = 0; ii < 10; ++ii) { @@ -117,7 +117,7 @@ int main(int argc, char** argv) { gz::common::Console::SetVerbosity(4); - IGN_PROFILE_THREAD_NAME("main"); + GZ_PROFILE_THREAD_NAME("main"); running = true; // Connect signal handler @@ -134,14 +134,14 @@ int main(int argc, char** argv) size_t ii = 0; while(running) { - IGN_PROFILE("main loop"); + GZ_PROFILE("main loop"); std::this_thread::sleep_for(std::chrono::milliseconds(100)); // Throttle to once per second if (ii++ % 10 == 0) { // Example of logging text to the remotery console. - IGN_PROFILE_LOG_TEXT("main loop done"); + GZ_PROFILE_LOG_TEXT("main loop done"); } } diff --git a/geospatial/include/gz/common/geospatial/Dem.hh b/geospatial/include/gz/common/geospatial/Dem.hh index 70fe693b1..3933441d3 100644 --- a/geospatial/include/gz/common/geospatial/Dem.hh +++ b/geospatial/include/gz/common/geospatial/Dem.hh @@ -147,7 +147,7 @@ namespace gz /// internal /// \brief Pointer to the private data. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/geospatial/src/ImageHeightmap.cc b/geospatial/src/ImageHeightmap.cc index 852aece63..fc96e660b 100644 --- a/geospatial/src/ImageHeightmap.cc +++ b/geospatial/src/ImageHeightmap.cc @@ -49,7 +49,7 @@ void ImageHeightmap::FillHeightMap(int _subSampling, int imgHeight = this->Height(); int imgWidth = this->Width(); - IGN_ASSERT(imgWidth == imgHeight, "Heightmap image must be square"); + GZ_ASSERT(imgWidth == imgHeight, "Heightmap image must be square"); // Bytes per row unsigned int pitch = this->img.Pitch(); diff --git a/graphics/include/gz/common/Animation.hh b/graphics/include/gz/common/Animation.hh index 97ec0e564..ee7566c7e 100644 --- a/graphics/include/gz/common/Animation.hh +++ b/graphics/include/gz/common/Animation.hh @@ -104,7 +104,7 @@ namespace gz unsigned int &_firstKeyIndex) const; /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; /// \brief A pose animation. @@ -142,7 +142,7 @@ namespace gz protected: void BuildInterpolationSplines(); /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; /// \brief A numeric animation. @@ -166,7 +166,7 @@ namespace gz public: void InterpolatedKeyFrame(NumericKeyFrame &_kf) const; /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; /// \brief Information about a trajectory for an animation (e.g., Actor) @@ -246,7 +246,7 @@ namespace gz _waypoints, double _tension = 0.0); /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/ColladaExporter.hh b/graphics/include/gz/common/ColladaExporter.hh index 83d1defab..35cdc3327 100644 --- a/graphics/include/gz/common/ColladaExporter.hh +++ b/graphics/include/gz/common/ColladaExporter.hh @@ -108,7 +108,7 @@ namespace gz const std::vector<ColladaLight> &_lights); /// \brief Pointer to private data. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/ColladaLoader.hh b/graphics/include/gz/common/ColladaLoader.hh index 9b2ca5404..c9cb05c2f 100644 --- a/graphics/include/gz/common/ColladaLoader.hh +++ b/graphics/include/gz/common/ColladaLoader.hh @@ -44,7 +44,7 @@ namespace gz /// \internal /// \brief Pointer to private data. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/Image.hh b/graphics/include/gz/common/Image.hh index 052b43e6c..614917388 100644 --- a/graphics/include/gz/common/Image.hh +++ b/graphics/include/gz/common/Image.hh @@ -256,7 +256,7 @@ namespace gz } /// \brief Private data pointer - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/KeyFrame.hh b/graphics/include/gz/common/KeyFrame.hh index 909b391d8..c03da07ad 100644 --- a/graphics/include/gz/common/KeyFrame.hh +++ b/graphics/include/gz/common/KeyFrame.hh @@ -45,7 +45,7 @@ namespace gz public: double Time() const; /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; /// \brief A keyframe for a PoseAnimation @@ -75,7 +75,7 @@ namespace gz public: const math::Quaterniond &Rotation() const; /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; /// \brief A keyframe for a NumericAnimation @@ -97,7 +97,7 @@ namespace gz public: const double &Value() const; /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/Material.hh b/graphics/include/gz/common/Material.hh index 5a1d68e47..f7929cd38 100644 --- a/graphics/include/gz/common/Material.hh +++ b/graphics/include/gz/common/Material.hh @@ -282,7 +282,7 @@ namespace gz } /// \brief Private data pointer. - IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/Mesh.hh b/graphics/include/gz/common/Mesh.hh index 1bdd62669..0978df838 100644 --- a/graphics/include/gz/common/Mesh.hh +++ b/graphics/include/gz/common/Mesh.hh @@ -204,7 +204,7 @@ namespace gz public: double Volume() const; /// \brief Private data pointer. - IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/MeshManager.hh b/graphics/include/gz/common/MeshManager.hh index 39931b101..5185dd4c7 100644 --- a/graphics/include/gz/common/MeshManager.hh +++ b/graphics/include/gz/common/MeshManager.hh @@ -214,7 +214,7 @@ namespace gz const float _height, const int _rings, const int _segments, - const double _arc = 2.0 * IGN_PI); + const double _arc = 2.0 * GZ_PI); /// \brief Create mesh for a plane /// \param[in] _name @@ -294,7 +294,7 @@ namespace gz const double _tol); /// \brief Private data pointer. - IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) /// \brief Singleton implementation private: friend class SingletonT<MeshManager>; diff --git a/graphics/include/gz/common/NodeAnimation.hh b/graphics/include/gz/common/NodeAnimation.hh index 8662b74c0..ca270891f 100644 --- a/graphics/include/gz/common/NodeAnimation.hh +++ b/graphics/include/gz/common/NodeAnimation.hh @@ -109,7 +109,7 @@ namespace gz public: double TimeAtX(const double _x) const; /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/NodeTransform.hh b/graphics/include/gz/common/NodeTransform.hh index ba35204d7..9df900a0c 100644 --- a/graphics/include/gz/common/NodeTransform.hh +++ b/graphics/include/gz/common/NodeTransform.hh @@ -114,7 +114,7 @@ namespace gz public: math::Matrix4d operator*(const math::Matrix4d &_m) const; /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/OBJLoader.hh b/graphics/include/gz/common/OBJLoader.hh index da2b895ba..98aac8b91 100644 --- a/graphics/include/gz/common/OBJLoader.hh +++ b/graphics/include/gz/common/OBJLoader.hh @@ -49,7 +49,7 @@ namespace gz /// \internal /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/Pbr.hh b/graphics/include/gz/common/Pbr.hh index 485adbe03..95bcb473f 100644 --- a/graphics/include/gz/common/Pbr.hh +++ b/graphics/include/gz/common/Pbr.hh @@ -213,7 +213,7 @@ namespace common public: void SetType(PbrType _type); /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/STLLoader.hh b/graphics/include/gz/common/STLLoader.hh index 9ae0b4bfc..2f9a28aab 100644 --- a/graphics/include/gz/common/STLLoader.hh +++ b/graphics/include/gz/common/STLLoader.hh @@ -92,7 +92,7 @@ namespace gz private: bool FloatRead(FILE *_filein, double &_value); /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/SVGLoader.hh b/graphics/include/gz/common/SVGLoader.hh index ff49075dd..4ae6b0896 100644 --- a/graphics/include/gz/common/SVGLoader.hh +++ b/graphics/include/gz/common/SVGLoader.hh @@ -123,7 +123,7 @@ namespace gz /// \internal /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/Skeleton.hh b/graphics/include/gz/common/Skeleton.hh index bdfaa04ce..335a9dfaa 100644 --- a/graphics/include/gz/common/Skeleton.hh +++ b/graphics/include/gz/common/Skeleton.hh @@ -172,7 +172,7 @@ namespace gz private: void BuildNodeMap(); /// \brief Private data pointer. - IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/SkeletonAnimation.hh b/graphics/include/gz/common/SkeletonAnimation.hh index 1900735a8..c93924c72 100644 --- a/graphics/include/gz/common/SkeletonAnimation.hh +++ b/graphics/include/gz/common/SkeletonAnimation.hh @@ -126,7 +126,7 @@ namespace gz public: double Length() const; /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/graphics/include/gz/common/SkeletonNode.hh b/graphics/include/gz/common/SkeletonNode.hh index 83de81580..53b85ce74 100644 --- a/graphics/include/gz/common/SkeletonNode.hh +++ b/graphics/include/gz/common/SkeletonNode.hh @@ -190,7 +190,7 @@ namespace gz public: std::vector<NodeTransform> Transforms() const; /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; typedef std::map<unsigned int, SkeletonNode*> SkeletonNodeMap; diff --git a/graphics/include/gz/common/SubMesh.hh b/graphics/include/gz/common/SubMesh.hh index fab8019d7..29472fdc3 100644 --- a/graphics/include/gz/common/SubMesh.hh +++ b/graphics/include/gz/common/SubMesh.hh @@ -401,7 +401,7 @@ namespace gz public: double Volume() const; /// \brief Private data pointer. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; /// \brief Vertex to node weighted assignement for skeleton animation diff --git a/graphics/src/BVHLoader.cc b/graphics/src/BVHLoader.cc index 9d27d998e..84442d353 100644 --- a/graphics/src/BVHLoader.cc +++ b/graphics/src/BVHLoader.cc @@ -236,7 +236,7 @@ std::unique_ptr<Skeleton> BVHLoader::Load(const std::string &_filename, { if (channel == "Zrotation") { - zAngle = IGN_DTOR(value); + zAngle = GZ_DTOR(value); mats.push_back(math::Matrix4d( math::Quaterniond(zAxis, zAngle))); } @@ -244,7 +244,7 @@ std::unique_ptr<Skeleton> BVHLoader::Load(const std::string &_filename, { if (channel == "Xrotation") { - xAngle = IGN_DTOR(value); + xAngle = GZ_DTOR(value); mats.push_back(math::Matrix4d( math::Quaterniond(xAxis, xAngle))); } @@ -252,7 +252,7 @@ std::unique_ptr<Skeleton> BVHLoader::Load(const std::string &_filename, { if (channel == "Yrotation") { - yAngle = IGN_DTOR(value); + yAngle = GZ_DTOR(value); mats.push_back(math::Matrix4d( math::Quaterniond(yAxis, yAngle))); } diff --git a/graphics/src/ColladaExporter.cc b/graphics/src/ColladaExporter.cc index b4d1615ee..d3ec6bb3b 100644 --- a/graphics/src/ColladaExporter.cc +++ b/graphics/src/ColladaExporter.cc @@ -976,7 +976,7 @@ void ColladaExporter::Implementation::ExportVisualScenes( char str[100] = { 0 }; snprintf(str, sizeof(str), "%g %g %g %g", - axis.X(), axis.Y(), axis.Z(), angle / IGN_PI * 180.0); + axis.X(), axis.Y(), axis.Z(), angle / GZ_PI * 180.0); rotateXml->SetText(str); nodeXml->LinkEndChild(rotateXml); } diff --git a/graphics/src/ColladaLoader.cc b/graphics/src/ColladaLoader.cc index 8c796f9d1..cbcb0bf70 100644 --- a/graphics/src/ColladaLoader.cc +++ b/graphics/src/ColladaLoader.cc @@ -648,7 +648,7 @@ gz::math::Matrix4d ColladaLoader::Implementation::LoadNodeTransform( iss >> axis.X() >> axis.Y() >> axis.Z(); iss >> angle; - mat.SetFromAxisAngle(axis, IGN_DTOR(angle)); + mat.SetFromAxisAngle(axis, GZ_DTOR(angle)); gz::math::Matrix4d mat4(gz::math::Matrix4d::Identity); mat4 = mat; @@ -1271,7 +1271,7 @@ void ColladaLoader::Implementation::SetSkeletonNodeTransform( iss >> axis.X() >> axis.Y() >> axis.Z(); iss >> angle; - mat.SetFromAxisAngle(axis, IGN_DTOR(angle)); + mat.SetFromAxisAngle(axis, GZ_DTOR(angle)); gz::math::Matrix4d mat4(gz::math::Matrix4d::Identity); mat4 = mat; @@ -1694,7 +1694,7 @@ void ColladaLoader::Implementation::LoadTexCoords(const std::string &_id, return; } - // \TODO This is a good a IGN_ASSERT + // \TODO This is a good a GZ_ASSERT // The total number of texture values should equal the stride multiplied // by the number of texture coordinates. if (texCount * stride != totCount) @@ -2278,7 +2278,7 @@ void ColladaLoader::Implementation::LoadPolylist( } } - // add the new ignition submesh vertex index to the map + // add the new Gazebo submesh vertex index to the map if (!inputs[VERTEX].empty()) { std::vector<GeometryIndices> inputValues; @@ -2602,7 +2602,7 @@ void ColladaLoader::Implementation::LoadTriangles( } } - // add the new ignition submesh vertex index to the map + // add the new Gazebo submesh vertex index to the map if (hasVertices) { std::vector<GeometryIndices> inputValues; diff --git a/graphics/src/Material.cc b/graphics/src/Material.cc index 8df358fe9..79e3ab34f 100644 --- a/graphics/src/Material.cc +++ b/graphics/src/Material.cc @@ -23,11 +23,11 @@ using namespace gz; using namespace common; -IGN_ENUM(shadeModeIface, Material::ShadeMode, +GZ_ENUM(shadeModeIface, Material::ShadeMode, Material::SHADE_MODE_BEGIN, Material::SHADE_MODE_END, "FLAT", "GOURAUD", "PHONG", "BLINN") -IGN_ENUM(blendModeIface, Material::BlendMode, +GZ_ENUM(blendModeIface, Material::BlendMode, Material::BLEND_MODE_BEGIN, Material::BLEND_MODE_END, "ADD", "MODULATE", "REPLACE") @@ -104,7 +104,7 @@ unsigned int Material::Implementation::counter = 0; Material::Material() : dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { - this->dataPtr->name = "ignition_material_" + + this->dataPtr->name = "gz_material_" + std::to_string(this->dataPtr->counter++); this->dataPtr->blendMode = REPLACE; this->dataPtr->shadeMode = GOURAUD; @@ -118,7 +118,7 @@ Material::Material() Material::Material(const math::Color &_clr) : dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) { - this->dataPtr->name = "ignition_material_" + + this->dataPtr->name = "gz_material_" + std::to_string(this->dataPtr->counter++); this->dataPtr->blendMode = REPLACE; this->dataPtr->shadeMode = GOURAUD; diff --git a/graphics/src/Material_TEST.cc b/graphics/src/Material_TEST.cc index 04d60447f..74fbb961f 100644 --- a/graphics/src/Material_TEST.cc +++ b/graphics/src/Material_TEST.cc @@ -31,7 +31,7 @@ TEST_F(MaterialTest, Material) common::Material mat(math::Color(1.0f, 0.5f, 0.2f, 1.0f)); EXPECT_TRUE(mat.Ambient() == math::Color(1.0f, 0.5f, 0.2f, 1.0f)); EXPECT_TRUE(mat.Diffuse() == math::Color(1.0f, 0.5f, 0.2f, 1.0f)); - EXPECT_STREQ("ignition_material_0", mat.Name().c_str()); + EXPECT_STREQ("gz_material_0", mat.Name().c_str()); mat.SetTextureImage("texture_image"); EXPECT_STREQ("texture_image", mat.TextureImage().c_str()); diff --git a/graphics/src/MeshManager.cc b/graphics/src/MeshManager.cc index f32e5139a..890688eb1 100644 --- a/graphics/src/MeshManager.cc +++ b/graphics/src/MeshManager.cc @@ -290,8 +290,8 @@ void MeshManager::CreateSphere(const std::string &name, float radius, } int ring, seg; - float deltaSegAngle = (2.0 * IGN_PI / segments); - float deltaRingAngle = (IGN_PI / rings); + float deltaSegAngle = (2.0 * GZ_PI / segments); + float deltaRingAngle = (GZ_PI / rings); gz::math::Vector3d vert, norm; unsigned int verticeIndex = 0; @@ -866,10 +866,10 @@ void MeshManager::CreateEllipsoid(const std::string &_name, SubMesh subMesh; - const double umin = -IGN_PI / 2.0; - const double umax = IGN_PI / 2.0; + const double umin = -GZ_PI / 2.0; + const double umax = GZ_PI / 2.0; const double vmin = 0.0; - const double vmax = 2.0 * IGN_PI; + const double vmax = 2.0 * GZ_PI; unsigned int i, j; double theta, phi; @@ -963,16 +963,16 @@ void MeshManager::CreateCapsule(const std::string &_name, v = j; v /= (_rings + 1); - w = sin(0.5 * IGN_PI * v); - z = _radius * cos(0.5 * IGN_PI * v); + w = sin(0.5 * GZ_PI * v); + z = _radius * cos(0.5 * GZ_PI * v); for (unsigned int i = 0; i <= _segments; i++) { u = i; u /= _segments; - x = -sin(u * (IGN_PI * 2.0)); - y = cos(u * (IGN_PI * 2.0)); + x = -sin(u * (GZ_PI * 2.0)); + y = cos(u * (GZ_PI * 2.0)); gz::math::Vector3d p(x * _radius * w, y * _radius * w, z); // Compute vertex @@ -1014,8 +1014,8 @@ void MeshManager::CreateCapsule(const std::string &_name, u = i; u /= _segments; - x = -sin(u * (IGN_PI * 2.0)); - y = cos(u * (IGN_PI * 2.0)); + x = -sin(u * (GZ_PI * 2.0)); + y = cos(u * (GZ_PI * 2.0)); gz::math::Vector3d p(x * _radius, y * _radius, z); @@ -1049,16 +1049,16 @@ void MeshManager::CreateCapsule(const std::string &_name, v /= (_rings + 1); v += 1.0; - w = sin(0.5 * IGN_PI * v); - z = _radius * cos(0.5 * IGN_PI * v); + w = sin(0.5 * GZ_PI * v); + z = _radius * cos(0.5 * GZ_PI * v); for (unsigned int i = 0; i <= _segments; i++) { double u2 = static_cast<double>(i); u2 /= _segments; - x = -sin(u2 * (IGN_PI * 2.0)); - y = cos(u2 * (IGN_PI * 2.0)); + x = -sin(u2 * (GZ_PI * 2.0)); + y = cos(u2 * (GZ_PI * 2.0)); gz::math::Vector3d p(x * _radius * w, y * _radius * w, z); // Compute vertex @@ -1094,7 +1094,7 @@ void MeshManager::CreateCylinder(const std::string &name, float radius, gz::math::Vector3d vert, norm; unsigned int verticeIndex = 0; int ring, seg; - float deltaSegAngle = (2.0 * IGN_PI / segments); + float deltaSegAngle = (2.0 * GZ_PI / segments); if (this->HasMesh(name)) { @@ -1227,7 +1227,7 @@ void MeshManager::CreateCone(const std::string &name, float radius, if (segments <3) segments = 3; - float deltaSegAngle = (2.0 * IGN_PI / segments); + float deltaSegAngle = (2.0 * GZ_PI / segments); // Generate the group of rings for the cone for (ring = 0; ring < rings; ring++) @@ -1453,7 +1453,7 @@ void MeshManager::CreateTube(const std::string &_name, float _innerRadius, } // Close ends in case it's not a full circle - if (!gz::math::equal(_arc, 2.0 * IGN_PI)) + if (!gz::math::equal(_arc, 2.0 * GZ_PI)) { for (ring = 0; ring < rings; ++ring) { diff --git a/graphics/src/NodeTransform.cc b/graphics/src/NodeTransform.cc index b8109f58a..3b44fe223 100644 --- a/graphics/src/NodeTransform.cc +++ b/graphics/src/NodeTransform.cc @@ -167,7 +167,7 @@ void NodeTransform::RecalculateMatrix() mat.SetFromAxisAngle(math::Vector3d(this->dataPtr->source[0], this->dataPtr->source[1], this->dataPtr->source[2]), - IGN_DTOR(this->dataPtr->source[3])); + GZ_DTOR(this->dataPtr->source[3])); this->dataPtr->transform = mat; } else diff --git a/graphics/src/OBJLoader.cc b/graphics/src/OBJLoader.cc index 013b3eba2..c01bf562b 100644 --- a/graphics/src/OBJLoader.cc +++ b/graphics/src/OBJLoader.cc @@ -24,7 +24,7 @@ #include "gz/common/SubMesh.hh" #include "gz/common/OBJLoader.hh" -#define IGNITION_COMMON_TINYOBJLOADER_IMPLEMENTATION +#define GZ_COMMON_TINYOBJLOADER_IMPLEMENTATION #include "tiny_obj_loader.h" namespace gz @@ -107,7 +107,7 @@ Mesh *OBJLoader::Load(const std::string &_filename) for (auto const &s : shapes) { - // obj mesh assigns a material id to each 'face' but ignition assigns a + // obj mesh assigns a material id to each 'face' but Gazebo assigns a // single material to each 'submesh'. The strategy here is to identify // the number of unique material ids in each obj shape and create a new // submesh per unique material id diff --git a/graphics/src/SVGLoader.cc b/graphics/src/SVGLoader.cc index 56d53f56e..66417f3e8 100644 --- a/graphics/src/SVGLoader.cc +++ b/graphics/src/SVGLoader.cc @@ -347,7 +347,7 @@ void arcPath(const gz::math::Vector2d &_p0, // Ported from canvg (https://code.google.com/p/canvg/) double rx = _rx; double ry = _ry; - double rotx = _rotxDeg / 180.0 * IGN_PI; + double rotx = _rotxDeg / 180.0 * GZ_PI; double x1, y1, x2, y2, cx, cy, dx, dy, d; double x1p, y1p, cxp, cyp, s, sa, sb; @@ -421,18 +421,18 @@ void arcPath(const gz::math::Vector2d &_p0, { // Choose large arc if (da > 0.0) - da = da - 2 * IGN_PI; + da = da - 2 * GZ_PI; else - da = 2 * IGN_PI + da; + da = 2 * GZ_PI + da; } // rounding errors for half circles - if (IGN_PI - fabs(da) < 0.001) + if (GZ_PI - fabs(da) < 0.001) { if (_sweepDirection) - da = IGN_PI; + da = GZ_PI; else - da = -IGN_PI; + da = -GZ_PI; } // Approximate the arc using cubic spline segments. @@ -446,7 +446,7 @@ void arcPath(const gz::math::Vector2d &_p0, // Split arc into max 90 degree segments. // The loop assumes an iteration per end point // (including start and end), this +1. - size_t ndivs = static_cast<int>(fabs(da) / (IGN_PI * 0.5) + 1.0); + size_t ndivs = static_cast<int>(fabs(da) / (GZ_PI * 0.5) + 1.0); hda = (da / ndivs) / 2.0; kappa = fabs(4.0 / 3.0 * (1.0 - cos(hda)) / sin(hda)); if (da < 0.0) diff --git a/graphics/src/SubMesh.cc b/graphics/src/SubMesh.cc index 204a3f45f..356997a0f 100644 --- a/graphics/src/SubMesh.cc +++ b/graphics/src/SubMesh.cc @@ -629,8 +629,8 @@ void SubMesh::GenSphericalTexCoordBySet(const gz::math::Vector3d &_center, double r = std::max(0.000001, sqrt(x*x+y*y+z*z)); double s = std::min(1.0, std::max(-1.0, z/r)); double t = std::min(1.0, std::max(-1.0, y/r)); - double u = acos(s) / IGN_PI; - double v = acos(t) / IGN_PI; + double u = acos(s) / GZ_PI; + double v = acos(t) / GZ_PI; this->AddTexCoordBySet(u, v, _setIndex); } } diff --git a/graphics/src/SubMesh_TEST.cc b/graphics/src/SubMesh_TEST.cc index 48df65849..bc0e96c87 100644 --- a/graphics/src/SubMesh_TEST.cc +++ b/graphics/src/SubMesh_TEST.cc @@ -43,7 +43,7 @@ TEST_F(SubMeshTest, SubMesh) { // Test deprecated API // TODO(azeey) Remove this scope block when MaterialIndex is removed - IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION + GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION EXPECT_EQ(submesh->MaterialIndex(), std::numeric_limits<unsigned int>::max()); submesh->SetMaterialIndex(3u); @@ -52,7 +52,7 @@ TEST_F(SubMeshTest, SubMesh) // break. submesh = std::make_shared<common::SubMesh>(); ASSERT_NE(nullptr, submesh); - IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION } // Use new API @@ -405,7 +405,7 @@ TEST_F(SubMeshTest, Volume) const common::Mesh *unitSphere = common::MeshManager::Instance()->MeshByName("unit_sphere"); ASSERT_TRUE(unitSphere != nullptr); - EXPECT_NEAR(4.0/3.0 * IGN_PI * std::pow(0.5, 3), unitSphere->Volume(), + EXPECT_NEAR(4.0/3.0 * GZ_PI * std::pow(0.5, 3), unitSphere->Volume(), 1e-2); // A larger sphere needs to have higher resolution in order to get the @@ -416,7 +416,7 @@ TEST_F(SubMeshTest, Volume) const common::Mesh *otherSphere = common::MeshManager::Instance()->MeshByName("other_sphere"); ASSERT_TRUE(otherSphere != nullptr); - EXPECT_NEAR(4.0/3.0 * IGN_PI * std::pow(2.5, 3), otherSphere->Volume(), + EXPECT_NEAR(4.0/3.0 * GZ_PI * std::pow(2.5, 3), otherSphere->Volume(), 1e-2); } @@ -490,7 +490,7 @@ TEST_F(SubMeshTest, Volume) const common::Mesh *unitCylinder = common::MeshManager::Instance()->MeshByName("unit_cylinder"); ASSERT_TRUE(unitCylinder != nullptr); - EXPECT_NEAR(IGN_PI * std::pow(0.5, 2) * 1.0, unitCylinder->Volume(), + EXPECT_NEAR(GZ_PI * std::pow(0.5, 2) * 1.0, unitCylinder->Volume(), 1e-2); // A larger cylinder needs to have higher resolution in order to get the @@ -501,7 +501,7 @@ TEST_F(SubMeshTest, Volume) const common::Mesh *otherCylinder = common::MeshManager::Instance()->MeshByName("other_cylinder"); ASSERT_TRUE(otherCylinder != nullptr); - EXPECT_NEAR(IGN_PI * std::pow(2.5, 2) * 12, otherCylinder->Volume(), + EXPECT_NEAR(GZ_PI * std::pow(2.5, 2) * 12, otherCylinder->Volume(), 1e-2); } diff --git a/graphics/src/tiny_obj_loader.h b/graphics/src/tiny_obj_loader.h index f4be265fb..a61e43ce6 100644 --- a/graphics/src/tiny_obj_loader.h +++ b/graphics/src/tiny_obj_loader.h @@ -42,7 +42,7 @@ THE SOFTWARE. // // Use this in *one* .cc -// #define IGNITION_COMMON_TINYOBJLOADER_IMPLEMENTATION +// #define GZ_COMMON_TINYOBJLOADER_IMPLEMENTATION // #include "tiny_obj_loader.h" // @@ -401,7 +401,7 @@ bool ParseTextureNameAndOption(std::string *texname, texture_option_t *texopt, #endif // GZ_COMMON_TINY_OBJ_LOADER_H_ -#ifdef IGNITION_COMMON_TINYOBJLOADER_IMPLEMENTATION +#ifdef GZ_COMMON_TINYOBJLOADER_IMPLEMENTATION #include <cassert> #include <cctype> #include <cmath> diff --git a/include/gz/common/Battery.hh b/include/gz/common/Battery.hh index 3996a6cf6..fa24ae6b1 100644 --- a/include/gz/common/Battery.hh +++ b/include/gz/common/Battery.hh @@ -172,7 +172,7 @@ namespace gz private: double UpdateDefault(Battery *_battery); /// \brief Pointer to private data. - IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; /// \def BatteryPtr diff --git a/include/gz/common/Console.hh b/include/gz/common/Console.hh index a623b75e1..f21a697ad 100644 --- a/include/gz/common/Console.hh +++ b/include/gz/common/Console.hh @@ -132,11 +132,11 @@ namespace gz public: std::ofstream *stream; }; - IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief Stores the full path of the directory where all the log files /// are stored. private: std::string logDirectory; - IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING /// \brief True if initialized. private: bool initialized; @@ -221,10 +221,10 @@ namespace gz public: std::mutex syncMutex; }; - IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief Prefix to use when logging to file. private: std::string prefix; - IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING }; /// \class Console Console.hh common/common.hh @@ -284,10 +284,10 @@ namespace gz /// \brief The level of verbosity, the default level is 1. private: static int verbosity; - IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief A custom prefix. See SetPrefix(). private: static std::string customPrefix; - IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING }; } } diff --git a/include/gz/common/EnumIface.hh b/include/gz/common/EnumIface.hh index 24d0fae00..41c8ae358 100644 --- a/include/gz/common/EnumIface.hh +++ b/include/gz/common/EnumIface.hh @@ -37,7 +37,7 @@ namespace gz /// \param[in] names A vector of strings, one for each enum value. /// \sa EnumIface /// \sa EnumIterator - #define IGN_ENUM(name, enumType, begin, end, ...) \ + #define GZ_ENUM(name, enumType, begin, end, ...) \ static gz::common::EnumIface<enumType> name( \ begin, end, {__VA_ARGS__}); diff --git a/include/gz/common/Filesystem.hh b/include/gz/common/Filesystem.hh index 6799f2839..99ddbca03 100644 --- a/include/gz/common/Filesystem.hh +++ b/include/gz/common/Filesystem.hh @@ -285,7 +285,7 @@ namespace gz public: bool operator!=(const DirIter &_other) const; /// \brief Pointer to private data. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/include/gz/common/SuppressWarning.hh b/include/gz/common/SuppressWarning.hh index cc2f0b93d..a6c598558 100644 --- a/include/gz/common/SuppressWarning.hh +++ b/include/gz/common/SuppressWarning.hh @@ -54,10 +54,10 @@ /// of our implementation) that the pointer is definitely not pointing to a more /// derived type. #define IGN_COMMON_WARN_IGNORE__DELETE_NON_VIRTUAL_DESTRUCTOR \ - IGN_UTILS_WARN_IGNORE__NON_VIRTUAL_DESTRUCTOR + GZ_UTILS_WARN_IGNORE__NON_VIRTUAL_DESTRUCTOR #define IGN_COMMON_WARN_RESUME__DELETE_NON_VIRTUAL_DESTRUCTOR \ - IGN_UTILS_WARN_RESUME__NON_VIRTUAL_DESTRUCTOR + GZ_UTILS_WARN_RESUME__NON_VIRTUAL_DESTRUCTOR /// \brief Microsoft Visual Studio does not automatically export the interface @@ -66,9 +66,9 @@ /// choose to suppress the warning instead of needlessly adding the class /// information to the DLL interface. #define IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING \ - IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING #define IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING \ - IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING #endif diff --git a/include/gz/common/SystemPaths.hh b/include/gz/common/SystemPaths.hh index 02530692c..df9cc7e30 100644 --- a/include/gz/common/SystemPaths.hh +++ b/include/gz/common/SystemPaths.hh @@ -190,7 +190,7 @@ namespace gz public: static char Delimiter(); /// \brief Pointer to private data. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/include/gz/common/TempDirectory.hh b/include/gz/common/TempDirectory.hh index e54cbbaf1..3542dc6c0 100644 --- a/include/gz/common/TempDirectory.hh +++ b/include/gz/common/TempDirectory.hh @@ -71,7 +71,7 @@ namespace gz /// \param[in] _cleanup True to indicate that the filesystem should /// be cleaned as part of the destructor public: TempDirectory(const std::string &_prefix = "temp_dir", - const std::string &_subDir = "ignition", + const std::string &_subDir = "gz", bool _cleanup = true); /// \brief Create a directory in the tempDirectoryPath by expanding @@ -87,7 +87,7 @@ namespace gz /// be cleaned as part of the destructor public: explicit TempDirectory(const std::string &_root, const std::string &_prefix = "temp_dir", - const std::string &_subDir = "ignition", + const std::string &_subDir = "gz", bool _cleanup = true); /// \brief Destroy the temporary directory, removing from filesystem @@ -116,9 +116,8 @@ namespace gz public: std::string Path() const; /// \brief Pointer to private data. - IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } // namespace common } // namespace gz #endif // GZ_COMMON_TEMPDIRECTORY_HH_ - diff --git a/include/gz/common/Timer.hh b/include/gz/common/Timer.hh index 3b057b9c8..66b4737ac 100644 --- a/include/gz/common/Timer.hh +++ b/include/gz/common/Timer.hh @@ -57,7 +57,7 @@ namespace gz } /// \brief Private data pointer - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/include/gz/common/URI.hh b/include/gz/common/URI.hh index 1bb35dd8d..73702a23a 100644 --- a/include/gz/common/URI.hh +++ b/include/gz/common/URI.hh @@ -130,7 +130,7 @@ namespace gz bool _emptyHostValid = false); /// \brief Pointer to private data. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; /// \brief A URI path contains a sequence of segments separated by `/`. @@ -235,7 +235,7 @@ namespace gz public: bool Parse(const std::string &_str); /// \brief Pointer to private data. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; /// \brief The query component of a URI @@ -283,7 +283,7 @@ namespace gz public: bool Parse(const std::string &_string); /// \brief Pointer to private data. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; /// \brief The fragment component of a URI @@ -328,7 +328,7 @@ namespace gz public: bool Parse(const std::string &_string); /// \brief Pointer to private data. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; /// \brief A complete URI which has the following components: @@ -425,7 +425,7 @@ namespace gz public: bool Parse(const std::string &_str); /// \brief Pointer to private data. - IGN_UTILS_IMPL_PTR(dataPtr) + GZ_UTILS_IMPL_PTR(dataPtr) }; } } diff --git a/include/gz/common/Util.hh b/include/gz/common/Util.hh index 39369de2d..5dbc88ae8 100644 --- a/include/gz/common/Util.hh +++ b/include/gz/common/Util.hh @@ -34,67 +34,67 @@ // Defines #ifdef _WIN32 -# define IGN_HOMEDIR "USERPROFILE" +# define GZ_HOMEDIR "USERPROFILE" #else -# define IGN_HOMEDIR "HOME" +# define GZ_HOMEDIR "HOME" #endif /// \brief Seconds in one nano second. -#define IGN_NANO_TO_SEC 1e-9 +#define GZ_NANO_TO_SEC 1e-9 /// \brief Nano seconds in one second. -#define IGN_SEC_TO_NANO 1000000000 +#define GZ_SEC_TO_NANO 1000000000 /// \brief Nano seconds in one millisecond. -#define IGN_MS_TO_NANO 1000000 +#define GZ_MS_TO_NANO 1000000 /// \brief Nano seconds in one microsecond. -#define IGN_US_TO_NANO 1000 +#define GZ_US_TO_NANO 1000 /// \brief Speed of light. -#define IGN_SPEED_OF_LIGHT = 299792458.0 +#define GZ_SPEED_OF_LIGHT = 299792458.0 /// \brief Sleep for the specifed number of seconds -#define IGN_SLEEP_S(_s) (std::this_thread::sleep_for(\ +#define GZ_SLEEP_S(_s) (std::this_thread::sleep_for(\ std::chrono::seconds(_s))) /// \brief Sleep for the specifed number of microseconds -#define IGN_SLEEP_US(_us) (std::this_thread::sleep_for(\ +#define GZ_SLEEP_US(_us) (std::this_thread::sleep_for(\ std::chrono::microseconds(_us))) /// \brief Sleep for the specifed number of milliseconds -#define IGN_SLEEP_MS(_ms) (std::this_thread::sleep_for(\ +#define GZ_SLEEP_MS(_ms) (std::this_thread::sleep_for(\ std::chrono::milliseconds(_ms))) /// \brief Sleep for the specifed number of nanoseconds -#define IGN_SLEEP_NS(_ns) (std::this_thread::sleep_for(\ +#define GZ_SLEEP_NS(_ns) (std::this_thread::sleep_for(\ std::chrono::nanoseconds(_ns))) /// \brief Get the system time. -#define IGN_SYSTEM_TIME() (std::chrono::system_clock::now()) +#define GZ_SYSTEM_TIME() (std::chrono::system_clock::now()) /// \brief Get the system time in seconds since epoch. -#define IGN_SYSTEM_TIME_S() (std::chrono::duration_cast<std::chrono::seconds>(\ +#define GZ_SYSTEM_TIME_S() (std::chrono::duration_cast<std::chrono::seconds>(\ std::chrono::system_clock::now().time_since_epoch()).count()) /// \brief Get the system time in microseconds since epoch. -#define IGN_SYSTEM_TIME_US() (\ +#define GZ_SYSTEM_TIME_US() (\ std::chrono::duration_cast<std::chrono::microseconds>(\ std::chrono::system_clock::now().time_since_epoch()).count()) /// \brief Get the system time in milliseconds since epoch. -#define IGN_SYSTEM_TIME_MS() (\ +#define GZ_SYSTEM_TIME_MS() (\ std::chrono::duration_cast<std::chrono::milliseconds>(\ std::chrono::system_clock::now().time_since_epoch()).count()) /// \brief Get the system time in nanoseconds since epoch. -#define IGN_SYSTEM_TIME_NS() (\ +#define GZ_SYSTEM_TIME_NS() (\ std::chrono::duration_cast<std::chrono::nanoseconds>(\ std::chrono::system_clock::now().time_since_epoch()).count()) /// \brief This macro defines the standard way of launching an exception -/// inside ignition. -#define IGN_ASSERT(_expr, _msg) assert((_msg, _expr)) +/// inside Gazebo. +#define GZ_ASSERT(_expr, _msg) assert((_msg, _expr)) /// \brief Forward declarations for the common classes namespace gz @@ -120,7 +120,7 @@ namespace gz /// \brief Converts a time point to an ISO string: YYYY-MM-DDTHH:MM:SS.NS /// \param[in] _time A time point, such as one created by - /// IGN_SYSTEM_TIME(). + /// GZ_SYSTEM_TIME(). /// \return An ISO string that represents the given _time. std::string GZ_COMMON_VISIBLE timeToIso( const std::chrono::time_point<std::chrono::system_clock> &_time); diff --git a/include/gz/common/WorkerPool.hh b/include/gz/common/WorkerPool.hh index 43107f17c..d158dd199 100644 --- a/include/gz/common/WorkerPool.hh +++ b/include/gz/common/WorkerPool.hh @@ -62,7 +62,7 @@ namespace gz const std::chrono::steady_clock::duration &_timeout = std::chrono::steady_clock::duration::zero()); - IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } } diff --git a/include/ignition/common/EnumIface.hh b/include/ignition/common/EnumIface.hh index 69a3d3ba7..98ad1e143 100644 --- a/include/ignition/common/EnumIface.hh +++ b/include/ignition/common/EnumIface.hh @@ -17,3 +17,6 @@ #include <gz/common/EnumIface.hh> #include <ignition/common/config.hh> + +#define IGN_ENUM(name, enumType, begin, end, ...) \ + GZ_ENUM(name, enumType, begin, end, __VA_ARGS__) diff --git a/include/ignition/common/Plugin.hh b/include/ignition/common/Plugin.hh index d111fab5d..f8062fba1 100644 --- a/include/ignition/common/Plugin.hh +++ b/include/ignition/common/Plugin.hh @@ -180,10 +180,10 @@ namespace gz private: InterfaceMap::iterator PrivateGetOrCreateIterator( const std::string &_interfaceName); - IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief PIMPL pointer to the implementation of this class. private: const std::unique_ptr<PluginPrivate> dataPtr; - IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING /// \brief Virtual destructor public: virtual ~Plugin(); diff --git a/include/ignition/common/PluginLoader.hh b/include/ignition/common/PluginLoader.hh index ce19fd572..d509a8304 100644 --- a/include/ignition/common/PluginLoader.hh +++ b/include/ignition/common/PluginLoader.hh @@ -91,10 +91,10 @@ namespace gz private: const PluginInfo *PrivateGetPluginInfo( const std::string &_pluginName) const; - IGN_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING /// \brief PIMPL pointer to class implementation private: std::unique_ptr<PluginLoaderPrivate> dataPtr; - IGN_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING + GZ_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING }; } } diff --git a/include/ignition/common/Util.hh b/include/ignition/common/Util.hh index 760930934..ea5b8da92 100644 --- a/include/ignition/common/Util.hh +++ b/include/ignition/common/Util.hh @@ -17,3 +17,24 @@ #include <gz/common/Util.hh> #include <ignition/common/config.hh> + +#define IGN_HOMEDIR GZ_HOMEDIR + +#define IGN_NANO_TO_SEC GZ_NANO_TO_SEC +#define IGN_SEC_TO_NANO GZ_SEC_TO_NANO +#define IGN_MS_TO_NANO GZ_MS_TO_NANO +#define IGN_US_TO_NANO GZ_US_TO_NANO +#define IGN_SPEED_OF_LIGHT GZ_SPEED_OF_LIGHT + +#define IGN_SLEEP_S(_s) GZ_SLEEP_S(_s) +#define IGN_SLEEP_US(_us) GZ_SLEEP_US(_us) +#define IGN_SLEEP_MS(_ms) GZ_SLEEP_MS(_ms) +#define IGN_SLEEP_NS(_ns) GZ_SLEEP_NS(_ns) + +#define IGN_SYSTEM_TIME() GZ_SYSTEM_TIME() +#define IGN_SYSTEM_TIME_S() GZ_SYSTEM_TIME_S() +#define IGN_SYSTEM_TIME_US() GZ_SYSTEM_TIME_US() +#define IGN_SYSTEM_TIME_MS() GZ_SYSTEM_TIME_MS() +#define IGN_SYSTEM_TIME_NS() GZ_SYSTEM_TIME_NS() + +#define IGN_ASSERT(_expr, _msg) GZ_ASSERT(_expr, _msg) diff --git a/include/ignition/common/detail/PluginMacros.hh b/include/ignition/common/detail/PluginMacros.hh index e185c4461..3c3a30754 100644 --- a/include/ignition/common/detail/PluginMacros.hh +++ b/include/ignition/common/detail/PluginMacros.hh @@ -63,7 +63,7 @@ #define DETAIL_IGN_COMMON_BEGIN_ADDING_PLUGINS \ DETAIL_IGN_COMMON_REGISTER_PLUGININFO_META_DATA \ -IGN_UTILS_WARN_IGNORE__NON_VIRTUAL_DESTRUCTOR \ +GZ_UTILS_WARN_IGNORE__NON_VIRTUAL_DESTRUCTOR \ /* This struct attempts to make sure that the macro is being called from */ \ /* a global namespace */ \ struct IGN_macro_must_be_used_in_global_namespace; \ @@ -172,7 +172,7 @@ IGN_UTILS_WARN_IGNORE__NON_VIRTUAL_DESTRUCTOR \ } \ return visitedPlugins.size() - _pluginId; \ } \ -IGN_UTILS_WARN_RESUME__NON_VIRTUAL_DESTRUCTOR +GZ_UTILS_WARN_RESUME__NON_VIRTUAL_DESTRUCTOR #endif diff --git a/profiler/BUILD.bazel b/profiler/BUILD.bazel index d0d159bd8..6aa4148e5 100644 --- a/profiler/BUILD.bazel +++ b/profiler/BUILD.bazel @@ -89,8 +89,8 @@ cc_library( srcs = sources, hdrs = public_headers, defines = [ - "IGN_PROFILER_ENABLE=1", - "IGN_PROFILER_REMOTERY=1", + "GZ_PROFILER_ENABLE=1", + "GZ_PROFILER_REMOTERY=1", ], includes = ["include"], deps = [ @@ -111,8 +111,8 @@ cc_test( name = "Profiler_Disabled_TEST", srcs = ["src/Profiler_Disabled_TEST.cc"], defines = [ - "IGN_PROFILER_ENABLE=0", - "IGN_PROFILER_REMOTERY=0", + "GZ_PROFILER_ENABLE=0", + "GZ_PROFILER_REMOTERY=0", ], deps = [ ":profiler", diff --git a/profiler/include/gz/common/Profiler.hh b/profiler/include/gz/common/Profiler.hh index e5add1a03..435dcf32c 100644 --- a/profiler/include/gz/common/Profiler.hh +++ b/profiler/include/gz/common/Profiler.hh @@ -47,11 +47,11 @@ namespace gz /// The profiler header also exports several convenience macros to make /// adding inspection points easier. /// - /// * IGN_PROFILE_THREAD_NAME - Set the name of the current profiled thread. - /// * IGN_PROFILE_LOG_TEXT - Log text to the profiler console (if supported) - /// * IGN_PROFILE_BEGIN - Begin a named profile sample - /// * IGN_PROFILE_END - End a named profile sample - /// * IGN_PROFILE - RAII-style profile sample. The sample will end at the + /// * GZ_PROFILE_THREAD_NAME - Set the name of the current profiled thread. + /// * GZ_PROFILE_LOG_TEXT - Log text to the profiler console (if supported) + /// * GZ_PROFILE_BEGIN - Begin a named profile sample + /// * GZ_PROFILE_END - End a named profile sample + /// * GZ_PROFILE - RAII-style profile sample. The sample will end at the /// end of the current scope. class GZ_COMMON_PROFILER_VISIBLE Profiler : public virtual SingletonT<Profiler> @@ -122,44 +122,44 @@ namespace gz } } -#ifndef IGN_PROFILER_ENABLE +#ifndef GZ_PROFILER_ENABLE /// Always set this variable to some value -#define IGN_PROFILER_ENABLE 0 +#define GZ_PROFILER_ENABLE 0 #endif -#if IGN_PROFILER_ENABLE +#if GZ_PROFILER_ENABLE /// \brief Set name of profiled thread -#define IGN_PROFILE_THREAD_NAME(name) \ +#define GZ_PROFILE_THREAD_NAME(name) \ gz::common::Profiler::Instance()->SetThreadName(name); /// \brief Log profiling text, if supported by implementation -#define IGN_PROFILE_LOG_TEXT(name) \ +#define GZ_PROFILE_LOG_TEXT(name) \ gz::common::Profiler::Instance()->LogText(name); /// \brief Being profiling sample -#define IGN_PROFILE_BEGIN(name) \ +#define GZ_PROFILE_BEGIN(name) \ gz::common::Profiler::Instance()->BeginSample(name) /// \brief End profiling sample -#define IGN_PROFILE_END() \ +#define GZ_PROFILE_END() \ gz::common::Profiler::Instance()->EndSample() -/// \brief Convenience wrapper for scoped profiling sample. Use IGN_PROFILE -#define IGN_PROFILE_L(name, line) \ +/// \brief Convenience wrapper for scoped profiling sample. Use GZ_PROFILE +#define GZ_PROFILE_L(name, line) \ static uint32_t __hash##line = 0; \ gz::common::ScopedProfile __profile##line(name, &__hash##line); /// \brief Scoped profiling sample. Sample will stop at end of scope. -#define IGN_PROFILE(name) IGN_PROFILE_L(name, __LINE__); +#define GZ_PROFILE(name) GZ_PROFILE_L(name, __LINE__); #else -#define IGN_PROFILE_THREAD_NAME(name) ((void) name) -#define IGN_PROFILE_LOG_TEXT(name) ((void) name) -#define IGN_PROFILE_BEGIN(name) ((void) name) -#define IGN_PROFILE_END() ((void) 0) -#define IGN_PROFILE_L(name, line) ((void) name) -#define IGN_PROFILE(name) ((void) name) -#endif // IGN_PROFILER_ENABLE +#define GZ_PROFILE_THREAD_NAME(name) ((void) name) +#define GZ_PROFILE_LOG_TEXT(name) ((void) name) +#define GZ_PROFILE_BEGIN(name) ((void) name) +#define GZ_PROFILE_END() ((void) 0) +#define GZ_PROFILE_L(name, line) ((void) name) +#define GZ_PROFILE(name) ((void) name) +#endif // GZ_PROFILER_ENABLE /// \brief Macro to determine if profiler is enabled and has an implementation. -#define IGN_PROFILER_VALID \ - IGN_PROFILER_ENABLE && gz::common::Profiler::Instance()->Valid() +#define GZ_PROFILER_VALID \ + GZ_PROFILER_ENABLE && gz::common::Profiler::Instance()->Valid() #endif // GZ_COMMON_PROFILER_HH_ diff --git a/profiler/include/ignition/common/Profiler.hh b/profiler/include/ignition/common/Profiler.hh index 6b35d68c5..bb6687dfd 100644 --- a/profiler/include/ignition/common/Profiler.hh +++ b/profiler/include/ignition/common/Profiler.hh @@ -17,3 +17,14 @@ #include <gz/common/Profiler.hh> #include <ignition/common/config.hh> + +#define IGN_PROFILER_ENABLE GZ_PROFILER_ENABLE + +#define IGN_PROFILE_THREAD_NAME(name) GZ_PROFILE_THREAD_NAME(name) +#define IGN_PROFILE_LOG_TEXT(name) GZ_PROFILE_LOG_TEXT(name) +#define IGN_PROFILE_BEGIN(name) GZ_PROFILE_BEGIN(name) +#define IGN_PROFILE_END() GZ_PROFILE_END() +#define IGN_PROFILE_L(name, line) GZ_PROFILE_L(name, line) +#define IGN_PROFILE(name) GZ_PROFILE(name) + +#define IGN_PROFILER_VALID GZ_PROFILER_VALID diff --git a/profiler/src/CMakeLists.txt b/profiler/src/CMakeLists.txt index 5dcfb794a..c5d42c1c7 100644 --- a/profiler/src/CMakeLists.txt +++ b/profiler/src/CMakeLists.txt @@ -1,4 +1,14 @@ -option(IGN_PROFILER_REMOTERY "Enable the Remotery profiler" TRUE) +option(IGN_PROFILER_REMOTERY "Deprecated. Enable the Remotery profiler" + TRUE) + +# TODO(CH3): Remove the IGN_PROFILER_REMOTERY on deprecation +# and set the option to TRUE instead +option(GZ_PROFILER_REMOTERY "Enable the Remotery profiler" + IGN_PROFILER_REMOTERY) + +if(NOT IGN_PROFILER_REMOTERY) + message(DEPRECATION "The IGN_PROFILER_REMOTERY option is deprecated! Please use GZ_PROFILER_REMOTERY instead.") +endif() set( PROFILER_SRCS @@ -10,7 +20,7 @@ set( Profiler_Disabled_TEST.cc ) -if(IGN_PROFILER_REMOTERY) +if(GZ_PROFILER_REMOTERY) set( Remotery_SRC ./Remotery/lib/Remotery.c @@ -57,12 +67,11 @@ gz_add_component(profiler SOURCES ${PROFILER_SRCS} GET_TARGET_NAME profiler_targ # Always enable profiler so that it's built, but make it # private so that downstream users can still disable profiling -target_compile_definitions(${profiler_target} PRIVATE "IGN_PROFILER_ENABLE=1") +target_compile_definitions(${profiler_target} PRIVATE "GZ_PROFILER_ENABLE=1") target_compile_definitions(${profiler_target} PRIVATE "RMT_USE_METAL=${RMT_USE_METAL}") -if(IGN_PROFILER_REMOTERY) - target_compile_definitions(${profiler_target} PRIVATE "IGN_PROFILER_REMOTERY=1") - +if(GZ_PROFILER_REMOTERY) + target_compile_definitions(${profiler_target} PRIVATE "GZ_PROFILER_REMOTERY=1") target_include_directories( ${profiler_target} PRIVATE @@ -89,12 +98,12 @@ gz_build_tests( if(TARGET UNIT_Profiler_Remotery_TEST) target_compile_definitions(UNIT_Profiler_Remotery_TEST - PUBLIC "IGN_PROFILER_ENABLE=1") + PUBLIC "GZ_PROFILER_ENABLE=1") endif() -if(IGN_PROFILER_REMOTERY) - set(IGN_PROFILER_SCRIPT_PATH ${CMAKE_INSTALL_LIBEXECDIR}/ignition/ignition-common${PROJECT_VERSION_MAJOR}) - set(IGN_PROFILER_VIS_PATH ${IGN_DATA_INSTALL_DIR}/profiler_vis) +if(GZ_PROFILER_REMOTERY) + set(GZ_PROFILER_SCRIPT_PATH ${CMAKE_INSTALL_LIBEXECDIR}/ignition/ignition-common${PROJECT_VERSION_MAJOR}) + set(GZ_PROFILER_VIS_PATH ${IGN_DATA_INSTALL_DIR}/profiler_vis) configure_file(Remotery/ign_remotery_vis.in ${CMAKE_CURRENT_BINARY_DIR}/ign_remotery_vis @@ -102,8 +111,8 @@ if(IGN_PROFILER_REMOTERY) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/ign_remotery_vis - DESTINATION ${IGN_PROFILER_SCRIPT_PATH}) + DESTINATION ${GZ_PROFILER_SCRIPT_PATH}) install(DIRECTORY Remotery/vis/ - DESTINATION ${IGN_PROFILER_VIS_PATH}) + DESTINATION ${GZ_PROFILER_VIS_PATH}) endif() diff --git a/profiler/src/Profiler.cc b/profiler/src/Profiler.cc index f53cd6ef5..3d072bf3a 100644 --- a/profiler/src/Profiler.cc +++ b/profiler/src/Profiler.cc @@ -19,9 +19,9 @@ #include "ProfilerImpl.hh" -#ifdef IGN_PROFILER_REMOTERY +#ifdef GZ_PROFILER_REMOTERY #include "RemoteryProfilerImpl.hh" -#endif // IGN_PROFILER_REMOTERY +#endif // GZ_PROFILER_REMOTERY using namespace gz; using namespace common; @@ -30,9 +30,9 @@ using namespace common; Profiler::Profiler(): impl(nullptr) { -#ifdef IGN_PROFILER_REMOTERY +#ifdef GZ_PROFILER_REMOTERY impl = new RemoteryProfilerImpl(); -#endif // IGN_PROFILER_REMOTERY +#endif // GZ_PROFILER_REMOTERY if (this->impl == nullptr) { diff --git a/profiler/src/Profiler_Disabled_TEST.cc b/profiler/src/Profiler_Disabled_TEST.cc index 321b7c765..4f1fa7dc9 100644 --- a/profiler/src/Profiler_Disabled_TEST.cc +++ b/profiler/src/Profiler_Disabled_TEST.cc @@ -28,6 +28,6 @@ using namespace common; ///////////////////////////////////////////////// TEST(Profiler, ProfilerDisabled) { - EXPECT_FALSE(IGN_PROFILER_ENABLE); - EXPECT_FALSE(IGN_PROFILER_VALID); + EXPECT_FALSE(GZ_PROFILER_ENABLE); + EXPECT_FALSE(GZ_PROFILER_VALID); } diff --git a/profiler/src/Profiler_Remotery_TEST.cc b/profiler/src/Profiler_Remotery_TEST.cc index e0b357655..79afda2bb 100644 --- a/profiler/src/Profiler_Remotery_TEST.cc +++ b/profiler/src/Profiler_Remotery_TEST.cc @@ -28,8 +28,8 @@ using namespace common; ///////////////////////////////////////////////// TEST(Profiler, ProfilerDisabled) { - EXPECT_TRUE(IGN_PROFILER_ENABLE); - EXPECT_TRUE(IGN_PROFILER_VALID); + EXPECT_TRUE(GZ_PROFILER_ENABLE); + EXPECT_TRUE(GZ_PROFILER_VALID); EXPECT_EQ(Profiler::Instance()->ImplementationName(), "ign_profiler_remotery"); } diff --git a/profiler/src/Remotery/ign_remotery_vis.in b/profiler/src/Remotery/ign_remotery_vis.in index 079f5baa9..1cfc160e0 100755 --- a/profiler/src/Remotery/ign_remotery_vis.in +++ b/profiler/src/Remotery/ign_remotery_vis.in @@ -1,7 +1,7 @@ #!/usr/bin/env bash -SCRIPT_PATH=@IGN_PROFILER_SCRIPT_PATH@/ign_remotery_vis -VIS_PATH=@IGN_PROFILER_VIS_PATH@/index.html +SCRIPT_PATH=@GZ_PROFILER_SCRIPT_PATH@/ign_remotery_vis +VIS_PATH=@GZ_PROFILER_VIS_PATH@/index.html # Get the full path to this script SCRIPT=`realpath $0` diff --git a/src/Console.cc b/src/Console.cc index 7d4a1d476..32055ad97 100644 --- a/src/Console.cc +++ b/src/Console.cc @@ -241,7 +241,7 @@ void FileLogger::Init(const std::string &_directory, #endif ) { - if (!env(IGN_HOMEDIR, logPath)) + if (!env(GZ_HOMEDIR, logPath)) { // Use stderr here to prevent infinite recursion // trying to get the log initialized diff --git a/src/Console_TEST.cc b/src/Console_TEST.cc index e8585a986..0e1bcc87a 100644 --- a/src/Console_TEST.cc +++ b/src/Console_TEST.cc @@ -34,14 +34,14 @@ class Console_TEST : public ::testing::Test { this->temp = std::make_unique<TempDirectory>( "test", "ign_common", true); ASSERT_TRUE(this->temp->Valid()); - common::setenv(IGN_HOMEDIR, this->temp->Path()); + common::setenv(GZ_HOMEDIR, this->temp->Path()); } /// \brief Clear out all the directories we produced during this test. public: virtual void TearDown() { gzLogClose(); - EXPECT_TRUE(gz::common::unsetenv(IGN_HOMEDIR)); + EXPECT_TRUE(gz::common::unsetenv(GZ_HOMEDIR)); } /// \brief Temporary directory to run test in @@ -52,7 +52,7 @@ std::string GetLogContent(const std::string &_filename) { // Get the absolute path std::string path; - EXPECT_TRUE(gz::common::env(IGN_HOMEDIR, path)); + EXPECT_TRUE(gz::common::env(GZ_HOMEDIR, path)); path = gz::common::joinPaths(path, _filename); EXPECT_TRUE(gz::common::exists(path)); @@ -87,7 +87,7 @@ TEST_F(Console_TEST, NoInitAndLog) // Cleanup gzLogClose(); std::string path; - EXPECT_TRUE(gz::common::env(IGN_HOMEDIR, path)); + EXPECT_TRUE(gz::common::env(GZ_HOMEDIR, path)); path = gz::common::joinPaths(path, logPath); EXPECT_TRUE(gz::common::removeAll(path)); } @@ -108,7 +108,7 @@ TEST_F(Console_TEST, InitAndLog) // Get the absolute path std::string basePath; - EXPECT_TRUE(gz::common::env(IGN_HOMEDIR, basePath)); + EXPECT_TRUE(gz::common::env(GZ_HOMEDIR, basePath)); basePath = gz::common::joinPaths(basePath, path); // Get the absolute log file path @@ -533,7 +533,7 @@ TEST_F(Console_TEST, LogDirectory) // Get the absolute path std::string absPath; - EXPECT_TRUE(gz::common::env(IGN_HOMEDIR, absPath)); + EXPECT_TRUE(gz::common::env(GZ_HOMEDIR, absPath)); absPath = gz::common::joinPaths(absPath, path); EXPECT_EQ(logDir, absPath); @@ -545,7 +545,7 @@ TEST_F(Console_TEST, LogDirectory) TEST_F(Console_TEST, NoInitAndLogNoHome) { gzLogClose(); - EXPECT_TRUE(gz::common::unsetenv(IGN_HOMEDIR)); + EXPECT_TRUE(gz::common::unsetenv(GZ_HOMEDIR)); // This should not throw gzlog << "this is a test" << std::endl; } diff --git a/src/EnumIface_TEST.cc b/src/EnumIface_TEST.cc index ea20da1a2..a8a8fd51a 100644 --- a/src/EnumIface_TEST.cc +++ b/src/EnumIface_TEST.cc @@ -33,7 +33,7 @@ enum MyType MY_TYPE_END }; -IGN_ENUM(myTypeIface, MyType, MY_TYPE_BEGIN, MY_TYPE_END, +GZ_ENUM(myTypeIface, MyType, MY_TYPE_BEGIN, MY_TYPE_END, "TYPE1", "TYPE2", "MY_TYPE_END" diff --git a/src/Filesystem.cc b/src/Filesystem.cc index e9dfaf88d..ed0c6f0f8 100644 --- a/src/Filesystem.cc +++ b/src/Filesystem.cc @@ -247,7 +247,7 @@ bool gz::common::copyDirectory( | fs::copy_options::overwrite_existing; // std::filesystem won't create intermediate directories - // before copying, this maintains compatibility with ignition behavior. + // before copying, this maintains compatibility with Gazebo behavior. if (!gz::common::createDirectories(_newDirname)) { return false; diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index 8bf81b0fd..cd3a90da7 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -388,7 +388,7 @@ TEST_F(FilesystemTest, parentPath) } ///////////////////////////////////////////////// -TEST_F(FilesystemTest, IGN_UTILS_TEST_DISABLED_ON_WIN32(cwd_error)) +TEST_F(FilesystemTest, GZ_UTILS_TEST_DISABLED_ON_WIN32(cwd_error)) { // This test intentionally creates a directory, switches to it, removes // the directory, and then tries to call cwd() on it to cause diff --git a/src/MaterialDensity.cc b/src/MaterialDensity.cc index e899103f6..b5d010bb5 100644 --- a/src/MaterialDensity.cc +++ b/src/MaterialDensity.cc @@ -23,7 +23,7 @@ using namespace gz; using namespace common; // Initialize enum iterator, and string converter -IGN_ENUM(materialDensityIface, MaterialDensity::Type, +GZ_ENUM(materialDensityIface, MaterialDensity::Type, MaterialDensity::Type::BEGIN, MaterialDensity::Type::END, "Styrofoam", diff --git a/src/Plugin.cc b/src/Plugin.cc index bf8acef27..1b5d9c37d 100644 --- a/src/Plugin.cc +++ b/src/Plugin.cc @@ -20,7 +20,7 @@ #include "gz/utils/SuppressWarning.hh" #include "ignition/common/Console.hh" -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #include "ignition/common/Plugin.hh" #include "ignition/common/PluginInfo.hh" #include "PluginUtils.hh" @@ -188,6 +188,6 @@ namespace gz } } } -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/src/PluginLoader.cc b/src/PluginLoader.cc index 5b156f3c2..6b971585e 100644 --- a/src/PluginLoader.cc +++ b/src/PluginLoader.cc @@ -30,7 +30,7 @@ #include "ignition/common/StringUtils.hh" #include "ignition/common/Util.hh" -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #include "ignition/common/PluginInfo.hh" #include "ignition/common/PluginLoader.hh" #include "ignition/common/PluginPtr.hh" @@ -320,6 +320,6 @@ namespace gz } } } -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/src/PluginLoader_TEST.cc b/src/PluginLoader_TEST.cc index 5c466c3f6..4726e9f8b 100644 --- a/src/PluginLoader_TEST.cc +++ b/src/PluginLoader_TEST.cc @@ -39,7 +39,7 @@ class TestTempDirectory : public gz::common::TempDirectory } }; -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #include "ignition/common/PluginLoader.hh" ///////////////////////////////////////////////// @@ -100,6 +100,6 @@ TEST(PluginLoader, InstantiateUnloadedPlugin) pm.Instantiate("plugin::that::is::not::loaded"); EXPECT_FALSE(plugin); } -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/src/PluginUtils.hh b/src/PluginUtils.hh index 3d851a127..b0349e2f8 100644 --- a/src/PluginUtils.hh +++ b/src/PluginUtils.hh @@ -31,7 +31,7 @@ namespace gz /// \brief Format the name to start with "::" /// \param[in] _name The name of a plugin or interface /// \return The input, but with "::" prepended if it was not there already. - inline std::string IGN_DEPRECATED(5) NormalizeName(const std::string &_name) + inline std::string GZ_DEPRECATED(5) NormalizeName(const std::string &_name) { std::string name = _name; if (!StartsWith(_name, "::")) diff --git a/src/PluginUtils_TEST.cc b/src/PluginUtils_TEST.cc index 17ac8d3df..7f6b1b1d4 100644 --- a/src/PluginUtils_TEST.cc +++ b/src/PluginUtils_TEST.cc @@ -25,7 +25,7 @@ using namespace gz; -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION ///////////////////////////////////////////////// TEST(PluginUtils, NormalizeName) { @@ -38,6 +38,6 @@ TEST(PluginUtils, NormalizeName) EXPECT_EQ("::gz::math", common::NormalizeName("gz::math")); EXPECT_EQ("::gz::math", common::NormalizeName("::gz::math")); } -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/src/SystemPaths.cc b/src/SystemPaths.cc index 41a68284b..ea119c312 100644 --- a/src/SystemPaths.cc +++ b/src/SystemPaths.cc @@ -88,7 +88,7 @@ SystemPaths::SystemPaths() : dataPtr(gz::utils::MakeImpl<Implementation>()) { std::string home, path, fullPath; - if (!env(IGN_HOMEDIR, home)) + if (!env(GZ_HOMEDIR, home)) home = "/tmp/gz"; if (!env("GZ_LOG_PATH", path)) @@ -161,7 +161,7 @@ void SystemPaths::SetPluginPathEnv(const std::string &_env) { gzwarn << "Finding plugins using deprecated IGN_ prefixed environment " << "variable [" - << _env << "]. Please use the GZ_ prefix instead" + << _env << "]. Please use the GZ_ prefix instead." << std::endl; } } diff --git a/src/URI_TEST.cc b/src/URI_TEST.cc index ccaa17878..0d8fe275a 100644 --- a/src/URI_TEST.cc +++ b/src/URI_TEST.cc @@ -927,7 +927,7 @@ TEST(URITEST, HasAuthority) ////////////////////////////////////////////////// TEST(URITEST, Resource) { - // Test URIs that are commonly used for resources in Ignition + // Test URIs that are commonly used for resources in Gazebo { URI uri; EXPECT_TRUE(uri.Parse("model://model_name/meshes/mesh.dae")); diff --git a/src/Util.cc b/src/Util.cc index dd2e5cb79..91d3e61dd 100644 --- a/src/Util.cc +++ b/src/Util.cc @@ -251,13 +251,13 @@ bool Sha1::Digest(void const *_buffer, std::size_t _byteCount, ///////////////////////////////////////////////// std::string gz::common::systemTimeISO() { - return timeToIso(IGN_SYSTEM_TIME()); + return timeToIso(GZ_SYSTEM_TIME()); } ///////////////////////////////////////////////// std::string gz::common::systemTimeIso() { - return timeToIso(IGN_SYSTEM_TIME()); + return timeToIso(GZ_SYSTEM_TIME()); } // Taken from gtest.cc @@ -284,7 +284,7 @@ std::string gz::common::timeToIso( auto epoch = _time.time_since_epoch(); auto sec = std::chrono::duration_cast<std::chrono::seconds>(epoch).count(); auto nano = std::chrono::duration_cast<std::chrono::nanoseconds>( - epoch).count() - sec * IGN_SEC_TO_NANO; + epoch).count() - sec * GZ_SEC_TO_NANO; time_t tmSec = static_cast<time_t>(sec); struct tm localTime; diff --git a/src/WorkerPool_TEST.cc b/src/WorkerPool_TEST.cc index a1839c2e7..f52c2553f 100644 --- a/src/WorkerPool_TEST.cc +++ b/src/WorkerPool_TEST.cc @@ -100,7 +100,7 @@ TEST(WorkerPool, WaitWithTimeout) // /TODO(anyone) Deflake this test // ref: https://github.com/gazebosim/gz-common/issues/52 TEST(WorkerPool, - IGN_UTILS_TEST_ENABLED_ONLY_ON_LINUX(WaitWithTimeoutThatTimesOut)) + GZ_UTILS_TEST_ENABLED_ONLY_ON_LINUX(WaitWithTimeoutThatTimesOut)) { WorkerPool pool; pool.AddWork([] () @@ -114,7 +114,7 @@ TEST(WorkerPool, // /TODO(anyone) Deflake this test // ref: https://github.com/gazebosim/gz-common/issues/53 TEST(WorkerPool, - IGN_UTILS_TEST_ENABLED_ONLY_ON_LINUX(ThingsRunInParallel)) + GZ_UTILS_TEST_ENABLED_ONLY_ON_LINUX(ThingsRunInParallel)) { const unsigned int hc = std::thread::hardware_concurrency(); if (2 > hc) diff --git a/test/integration/console.cc b/test/integration/console.cc index f6b6bdccb..cd0050898 100644 --- a/test/integration/console.cc +++ b/test/integration/console.cc @@ -27,9 +27,9 @@ TEST(Console_TEST, LogInitAfterConsoleOut) auto tempDir = gz::common::testing::MakeTestTempDirectory(); ASSERT_TRUE(tempDir->Valid()); - gz::common::setenv(IGN_HOMEDIR, tempDir->Path()); + gz::common::setenv(GZ_HOMEDIR, tempDir->Path()); std::string home; - ASSERT_TRUE(gz::common::env(IGN_HOMEDIR, home)); + ASSERT_TRUE(gz::common::env(GZ_HOMEDIR, home)); auto logDir = tempDir->Path(); std::string logFile = gz::common::joinPaths(logDir, logFilename); diff --git a/test/integration/mesh.cc b/test/integration/mesh.cc index 17d09ad79..3b8abd7ce 100644 --- a/test/integration/mesh.cc +++ b/test/integration/mesh.cc @@ -210,16 +210,16 @@ TEST_F(MeshTest, Access) ///////////////////////////////////////////////// TEST_F(MeshTest, RoundtripStl) { - std::ofstream stlFile("ignition_stl_test.stl", std::ios::out); + std::ofstream stlFile("gz_stl_test.stl", std::ios::out); stlFile << asciiSTLBox; stlFile.close(); auto mesh = - common::MeshManager::Instance()->Load("ignition_stl_test-bad.stl"); + common::MeshManager::Instance()->Load("gz_stl_test-bad.stl"); EXPECT_EQ(nullptr, mesh); common::systemPaths()->AddFilePaths(common::cwd()); - mesh = common::MeshManager::Instance()->Load("ignition_stl_test.stl"); + mesh = common::MeshManager::Instance()->Load("gz_stl_test.stl"); ASSERT_NE(nullptr, mesh); math::Vector3d center, min, max; @@ -232,20 +232,20 @@ TEST_F(MeshTest, RoundtripStl) ///////////////////////////////////////////////// TEST_F(MeshTest, Export) { - std::ofstream stlFile("ignition_stl_test.stl", std::ios::out); + std::ofstream stlFile("gz_stl_test.stl", std::ios::out); stlFile << asciiSTLBox; stlFile.close(); common::systemPaths()->AddFilePaths(common::cwd()); - auto mesh = common::MeshManager::Instance()->Load("ignition_stl_test.stl"); + auto mesh = common::MeshManager::Instance()->Load("gz_stl_test.stl"); ASSERT_NE(nullptr, mesh); common::MeshManager::Instance()->Export(mesh, - common::joinPaths(common::cwd(), "ignition_stl_test2"), "stl", false); + common::joinPaths(common::cwd(), "gz_stl_test2"), "stl", false); common::MeshManager::Instance()->Export(mesh, - common::joinPaths(common::cwd(), "ignition_stl_test2"), "dae", false); + common::joinPaths(common::cwd(), "gz_stl_test2"), "dae", false); - EXPECT_FALSE(common::exists("ignition_stl_test2.stl")); - EXPECT_TRUE(common::exists("ignition_stl_test2.dae")); + EXPECT_FALSE(common::exists("gz_stl_test2.stl")); + EXPECT_TRUE(common::exists("gz_stl_test2.dae")); } diff --git a/test/integration/plugin.cc b/test/integration/plugin.cc index 2ce0ba919..6b14748dd 100644 --- a/test/integration/plugin.cc +++ b/test/integration/plugin.cc @@ -35,7 +35,7 @@ #include "DummyPluginsPath.h" #include "plugins/DummyPlugins.hh" -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #include "ignition/common/PluginLoader.hh" #include "ignition/common/PluginPtr.hh" #include "ignition/common/SpecializedPluginPtr.hh" @@ -44,16 +44,16 @@ IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION TEST(PluginLoader, LoadBadPlugins) { std::string dummyPath = - gz::common::copyFromUnixPath(IGN_DUMMY_PLUGIN_PATH); + gz::common::copyFromUnixPath(GZ_DUMMY_PLUGIN_PATH); gz::common::SystemPaths sp; sp.AddPluginPaths(dummyPath); std::vector<std::string> libraryNames = { - "IGNBadPluginAPIVersionOld", - "IGNBadPluginAPIVersionNew", - "IGNBadPluginAlign", - "IGNBadPluginSize"}; + "GzBadPluginAPIVersionOld", + "GzBadPluginAPIVersionNew", + "GzBadPluginAlign", + "GzBadPluginSize"}; for (auto const & libraryName : libraryNames) { std::string path = sp.FindSharedLibrary(libraryName); @@ -72,7 +72,7 @@ TEST(PluginLoader, LoadBadPlugins) TEST(PluginLoader, LoadExistingLibrary) { std::string dummyPath = - gz::common::copyFromUnixPath(IGN_DUMMY_PLUGIN_PATH); + gz::common::copyFromUnixPath(GZ_DUMMY_PLUGIN_PATH); gz::common::SystemPaths sp; sp.AddPluginPaths(dummyPath); @@ -168,7 +168,7 @@ using SomeSpecializedPluginPtr = TEST(SpecializedPluginPtr, Construction) { gz::common::SystemPaths sp; - sp.AddPluginPaths(IGN_DUMMY_PLUGIN_PATH); + sp.AddPluginPaths(GZ_DUMMY_PLUGIN_PATH); std::string path = sp.FindSharedLibrary("GzDummyPlugins"); ASSERT_FALSE(path.empty()); @@ -295,7 +295,7 @@ TEST(PluginPtr, CopyMoveSemantics) EXPECT_TRUE(plugin.IsEmpty()); gz::common::SystemPaths sp; - sp.AddPluginPaths(IGN_DUMMY_PLUGIN_PATH); + sp.AddPluginPaths(GZ_DUMMY_PLUGIN_PATH); std::string path = sp.FindSharedLibrary("GzDummyPlugins"); ASSERT_FALSE(path.empty()); @@ -375,7 +375,7 @@ void CheckSomeValues( TEST(PluginPtr, QueryInterfaceSharedPtr) { gz::common::SystemPaths sp; - sp.AddPluginPaths(IGN_DUMMY_PLUGIN_PATH); + sp.AddPluginPaths(GZ_DUMMY_PLUGIN_PATH); std::string path = sp.FindSharedLibrary("GzDummyPlugins"); ASSERT_FALSE(path.empty()); @@ -439,6 +439,6 @@ TEST(PluginPtr, QueryInterfaceSharedPtr) SetSomeValues(setter); CheckSomeValues(getInt, getDouble, getName); } -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/performance/plugin_specialization.cc b/test/performance/plugin_specialization.cc index 16ac92923..92574211a 100644 --- a/test/performance/plugin_specialization.cc +++ b/test/performance/plugin_specialization.cc @@ -31,33 +31,33 @@ #include "plugins/DummyPlugins.hh" -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #include "ignition/common/PluginLoader.hh" #include "ignition/common/SpecializedPluginPtr.hh" -#define IGN_CREATE_SPEC_INTERFACE(name)\ +#define GZ_CREATE_SPEC_INTERFACE(name)\ class name { public: IGN_COMMON_SPECIALIZE_INTERFACE(name) }; -IGN_CREATE_SPEC_INTERFACE(Interface1) -IGN_CREATE_SPEC_INTERFACE(Interface2) -IGN_CREATE_SPEC_INTERFACE(Interface3) -IGN_CREATE_SPEC_INTERFACE(Interface4) -IGN_CREATE_SPEC_INTERFACE(Interface5) -IGN_CREATE_SPEC_INTERFACE(Interface6) -IGN_CREATE_SPEC_INTERFACE(Interface7) -IGN_CREATE_SPEC_INTERFACE(Interface8) -IGN_CREATE_SPEC_INTERFACE(Interface9) -IGN_CREATE_SPEC_INTERFACE(Interface10) -IGN_CREATE_SPEC_INTERFACE(Interface11) -IGN_CREATE_SPEC_INTERFACE(Interface12) -IGN_CREATE_SPEC_INTERFACE(Interface13) -IGN_CREATE_SPEC_INTERFACE(Interface14) -IGN_CREATE_SPEC_INTERFACE(Interface15) -IGN_CREATE_SPEC_INTERFACE(Interface16) -IGN_CREATE_SPEC_INTERFACE(Interface17) -IGN_CREATE_SPEC_INTERFACE(Interface18) -IGN_CREATE_SPEC_INTERFACE(Interface19) +GZ_CREATE_SPEC_INTERFACE(Interface1) +GZ_CREATE_SPEC_INTERFACE(Interface2) +GZ_CREATE_SPEC_INTERFACE(Interface3) +GZ_CREATE_SPEC_INTERFACE(Interface4) +GZ_CREATE_SPEC_INTERFACE(Interface5) +GZ_CREATE_SPEC_INTERFACE(Interface6) +GZ_CREATE_SPEC_INTERFACE(Interface7) +GZ_CREATE_SPEC_INTERFACE(Interface8) +GZ_CREATE_SPEC_INTERFACE(Interface9) +GZ_CREATE_SPEC_INTERFACE(Interface10) +GZ_CREATE_SPEC_INTERFACE(Interface11) +GZ_CREATE_SPEC_INTERFACE(Interface12) +GZ_CREATE_SPEC_INTERFACE(Interface13) +GZ_CREATE_SPEC_INTERFACE(Interface14) +GZ_CREATE_SPEC_INTERFACE(Interface15) +GZ_CREATE_SPEC_INTERFACE(Interface16) +GZ_CREATE_SPEC_INTERFACE(Interface17) +GZ_CREATE_SPEC_INTERFACE(Interface18) +GZ_CREATE_SPEC_INTERFACE(Interface19) // Specialize for only 1 type using Specialize1Type = @@ -137,7 +137,7 @@ double RunPerformanceTest(const PluginType &plugin) TEST(PluginSpecialization, AccessTime) { gz::common::SystemPaths sp; - sp.AddPluginPaths(IGN_DUMMY_PLUGIN_PATH); + sp.AddPluginPaths(GZ_DUMMY_PLUGIN_PATH); std::string path = sp.FindSharedLibrary("GzDummyPlugins"); ASSERT_FALSE(path.empty()); @@ -235,6 +235,6 @@ TEST(PluginSpecialization, AccessTime) } } -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/plugins/BadPluginAPIVersionNew.cc b/test/plugins/BadPluginAPIVersionNew.cc index 9d981f6a8..29106f4e0 100644 --- a/test/plugins/BadPluginAPIVersionNew.cc +++ b/test/plugins/BadPluginAPIVersionNew.cc @@ -21,7 +21,7 @@ #include "ignition/common/PluginMacros.hh" #include "gz/utils/SuppressWarning.hh" -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION extern "C" { std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoSize = @@ -40,6 +40,6 @@ extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( return 0u; } -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/plugins/BadPluginAPIVersionOld.cc b/test/plugins/BadPluginAPIVersionOld.cc index 0d5f12c6f..705b7eef3 100644 --- a/test/plugins/BadPluginAPIVersionOld.cc +++ b/test/plugins/BadPluginAPIVersionOld.cc @@ -20,7 +20,7 @@ #include "ignition/common/PluginMacros.hh" #include "gz/utils/SuppressWarning.hh" -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION extern "C" { std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoSize = @@ -38,6 +38,6 @@ extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( return 0u; } -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/plugins/BadPluginAlign.cc b/test/plugins/BadPluginAlign.cc index 40877371a..34020529a 100644 --- a/test/plugins/BadPluginAlign.cc +++ b/test/plugins/BadPluginAlign.cc @@ -20,7 +20,7 @@ #include "ignition/common/PluginMacros.hh" #include "gz/utils/SuppressWarning.hh" -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION extern "C" { std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoSize = @@ -39,6 +39,6 @@ extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( return 0u; } -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/plugins/BadPluginSize.cc b/test/plugins/BadPluginSize.cc index 936a3a438..b73436110 100644 --- a/test/plugins/BadPluginSize.cc +++ b/test/plugins/BadPluginSize.cc @@ -20,7 +20,7 @@ #include "ignition/common/PluginMacros.hh" #include "gz/utils/SuppressWarning.hh" -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION extern "C" { std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONPluginInfoSize = @@ -39,6 +39,6 @@ extern "C" std::size_t DETAIL_IGN_PLUGIN_VISIBLE IGNCOMMONMultiPluginInfo( return 0u; } -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/plugins/CMakeLists.txt b/test/plugins/CMakeLists.txt index 6655b4613..d622b00c7 100644 --- a/test/plugins/CMakeLists.txt +++ b/test/plugins/CMakeLists.txt @@ -1,30 +1,30 @@ -add_library(IGNBadPluginAlign SHARED BadPluginAlign.cc) -target_link_libraries(IGNBadPluginAlign PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) -add_library(IGNBadPluginAPIVersionNew SHARED BadPluginAPIVersionNew.cc) -target_link_libraries(IGNBadPluginAPIVersionNew PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) -add_library(IGNBadPluginAPIVersionOld SHARED BadPluginAPIVersionOld.cc) -target_link_libraries(IGNBadPluginAPIVersionOld PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) -add_library(IGNBadPluginSize SHARED BadPluginSize.cc) -target_link_libraries(IGNBadPluginSize PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) +add_library(GzBadPluginAlign SHARED BadPluginAlign.cc) +target_link_libraries(GzBadPluginAlign PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) +add_library(GzBadPluginAPIVersionNew SHARED BadPluginAPIVersionNew.cc) +target_link_libraries(GzBadPluginAPIVersionNew PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) +add_library(GzBadPluginAPIVersionOld SHARED BadPluginAPIVersionOld.cc) +target_link_libraries(GzBadPluginAPIVersionOld PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) +add_library(GzBadPluginSize SHARED BadPluginSize.cc) +target_link_libraries(GzBadPluginSize PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) add_library(GzDummyPlugins SHARED DummyPlugins.cc) target_link_libraries(GzDummyPlugins PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) -set_property(TARGET IGNBadPluginAlign PROPERTY CXX_STANDARD 11) -set_property(TARGET IGNBadPluginAPIVersionNew PROPERTY CXX_STANDARD 11) -set_property(TARGET IGNBadPluginAPIVersionOld PROPERTY CXX_STANDARD 11) -set_property(TARGET IGNBadPluginSize PROPERTY CXX_STANDARD 11) +set_property(TARGET GzBadPluginAlign PROPERTY CXX_STANDARD 11) +set_property(TARGET GzBadPluginAPIVersionNew PROPERTY CXX_STANDARD 11) +set_property(TARGET GzBadPluginAPIVersionOld PROPERTY CXX_STANDARD 11) +set_property(TARGET GzBadPluginSize PROPERTY CXX_STANDARD 11) set_property(TARGET GzDummyPlugins PROPERTY CXX_STANDARD 11) # Create a variable for the name of the header which will contain the dummy plugin path. # This variable gets put in the cache so that it is available at generation time. -set(IGN_DUMMY_PLUGIN_PATH_HEADER "DummyPluginsPath.h" CACHE INTERNAL "Name of header which contains DummyPlugin library path") +set(GZ_DUMMY_PLUGIN_PATH_HEADER "DummyPluginsPath.h" CACHE INTERNAL "Name of header which contains DummyPlugin library path") if(WIN32) get_target_property(GzDummyPluginsLocation GzDummyPlugins RUNTIME_OUTPUT_DIRECTORY) else() get_target_property(GzDummyPluginsLocation GzDummyPlugins LIBRARY_OUTPUT_DIRECTORY) endif() -set(header_text "#define IGN_DUMMY_PLUGIN_PATH \"${GzDummyPluginsLocation}\"") +set(header_text "#define GZ_DUMMY_PLUGIN_PATH \"${GzDummyPluginsLocation}\"") # Pipe the header text into a header that will be placed in the project binary directory. # We need to use this approach instead of the usual configure_file, because we required a @@ -38,12 +38,12 @@ if(WIN32) add_custom_command(TARGET GzDummyPluginsPathHeader PRE_BUILD COMMAND echo - ARGS "${header_text}" > ${PROJECT_BINARY_DIR}/${IGN_DUMMY_PLUGIN_PATH_HEADER}) + ARGS "${header_text}" > ${PROJECT_BINARY_DIR}/${GZ_DUMMY_PLUGIN_PATH_HEADER}) else() add_custom_command(TARGET GzDummyPluginsPathHeader PRE_BUILD COMMAND echo - ARGS "${header_text}" > ${PROJECT_BINARY_DIR}/${IGN_DUMMY_PLUGIN_PATH_HEADER} + ARGS "${header_text}" > ${PROJECT_BINARY_DIR}/${GZ_DUMMY_PLUGIN_PATH_HEADER} VERBATIM) endif() add_dependencies(GzDummyPlugins GzDummyPluginsPathHeader) diff --git a/test/plugins/DummyPlugins.cc b/test/plugins/DummyPlugins.cc index 798f2b06e..bcfe8d268 100644 --- a/test/plugins/DummyPlugins.cc +++ b/test/plugins/DummyPlugins.cc @@ -21,7 +21,7 @@ #include "gz/utils/SuppressWarning.hh" #include "DummyPlugins.hh" -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION namespace test { @@ -92,6 +92,6 @@ IGN_COMMON_BEGIN_ADDING_PLUGINS IGN_COMMON_ADD_PLUGIN(test::util::DummyMultiPlugin, test::util::DummyGetSomeObjectBase) IGN_COMMON_FINISH_ADDING_PLUGINS -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_bad_const_assignment.cc b/test/static_assertions/plugin_bad_const_assignment.cc index dab667fcd..6822da660 100644 --- a/test/static_assertions/plugin_bad_const_assignment.cc +++ b/test/static_assertions/plugin_bad_const_assignment.cc @@ -17,7 +17,7 @@ #include <gz/utils/SuppressWarning.hh> -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #define SUPPRESS_IGNITION_HEADER_DEPRECATION #include "ignition/common/PluginPtr.hh" @@ -28,6 +28,6 @@ int main() gz::common::PluginPtr ptr; ptr = const_ptr; } -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_bad_const_construct.cc b/test/static_assertions/plugin_bad_const_construct.cc index f89119db6..131fa9488 100644 --- a/test/static_assertions/plugin_bad_const_construct.cc +++ b/test/static_assertions/plugin_bad_const_construct.cc @@ -17,7 +17,7 @@ #include <gz/utils/SuppressWarning.hh> -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #define SUPPRESS_IGNITION_HEADER_DEPRECATION #include "ignition/common/PluginPtr.hh" @@ -26,6 +26,6 @@ int main() { gz::common::PluginPtr ptr{gz::common::ConstPluginPtr()}; } -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_no_base_class.cc b/test/static_assertions/plugin_no_base_class.cc index c7c931080..dab8c24d8 100644 --- a/test/static_assertions/plugin_no_base_class.cc +++ b/test/static_assertions/plugin_no_base_class.cc @@ -17,7 +17,7 @@ #include <gz/utils/SuppressWarning.hh> -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #define SUPPRESS_IGNITION_HEADER_DEPRECATION #include "ignition/common/PluginMacros.hh" @@ -35,6 +35,6 @@ class NotBase IGN_COMMON_REGISTER_SINGLE_PLUGIN(A, NotBase) -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_not_fully_qualified_base.cc b/test/static_assertions/plugin_not_fully_qualified_base.cc index 7d44febb2..f84c61e67 100644 --- a/test/static_assertions/plugin_not_fully_qualified_base.cc +++ b/test/static_assertions/plugin_not_fully_qualified_base.cc @@ -17,7 +17,7 @@ #include <gz/utils/SuppressWarning.hh> -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #define SUPPRESS_IGNITION_HEADER_DEPRECATION #include "ignition/common/PluginMacros.hh" @@ -42,6 +42,6 @@ using ns::Base; IGN_COMMON_REGISTER_SINGLE_PLUGIN(ns::A, Base) -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_not_fully_qualified_class.cc b/test/static_assertions/plugin_not_fully_qualified_class.cc index e00b8cce6..71ce70a34 100644 --- a/test/static_assertions/plugin_not_fully_qualified_class.cc +++ b/test/static_assertions/plugin_not_fully_qualified_class.cc @@ -17,7 +17,7 @@ #include <gz/utils/SuppressWarning.hh> -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #define SUPPRESS_IGNITION_HEADER_DEPRECATION #include "ignition/common/PluginMacros.hh" @@ -42,6 +42,6 @@ using ns::A; IGN_COMMON_REGISTER_SINGLE_PLUGIN(A, ns::Base) -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_not_global_ns.cc b/test/static_assertions/plugin_not_global_ns.cc index 061fee0e6..99529221d 100644 --- a/test/static_assertions/plugin_not_global_ns.cc +++ b/test/static_assertions/plugin_not_global_ns.cc @@ -16,7 +16,7 @@ */ #include <gz/utils/SuppressWarning.hh> -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #define SUPPRESS_IGNITION_HEADER_DEPRECATION #include "ignition/common/PluginMacros.hh" @@ -38,5 +38,5 @@ class A : public Base IGN_COMMON_REGISTER_SINGLE_PLUGIN(ns::A, ns::Base) } -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_wrong_base_class.cc b/test/static_assertions/plugin_wrong_base_class.cc index b4b2a2cf4..8288f3ac0 100644 --- a/test/static_assertions/plugin_wrong_base_class.cc +++ b/test/static_assertions/plugin_wrong_base_class.cc @@ -17,7 +17,7 @@ #include <gz/utils/SuppressWarning.hh> -IGN_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION #define SUPPRESS_IGNITION_HEADER_DEPRECATION #include "ignition/common/PluginMacros.hh" @@ -46,5 +46,5 @@ class A : public Base IGN_COMMON_REGISTER_SINGLE_PLUGIN(ns::A, ns::WrongBase) -IGN_UTILS_WARN_RESUME__DEPRECATED_DECLARATION +GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/testing/include/gz/common/testing/AutoLogFixture.hh b/testing/include/gz/common/testing/AutoLogFixture.hh index a63080279..179347465 100644 --- a/testing/include/gz/common/testing/AutoLogFixture.hh +++ b/testing/include/gz/common/testing/AutoLogFixture.hh @@ -26,9 +26,9 @@ namespace gz::common::testing { -/// \brief A utility class that stores test logs in ~/.ignition/test_logs. +/// \brief A utility class that stores test logs in ~/.gz/test_logs. /// This functionality is needed to keep all the log information reported -/// by ignition during continuous integration. Without this, debugging +/// by Gazebo during continuous integration. Without this, debugging /// failing tests is significantly more difficult. class AutoLogFixture : public ::testing::Test { @@ -50,7 +50,7 @@ class AutoLogFixture : public ::testing::Test protected: std::string LogContent() const; /// \brief Pointer to private data. - IGN_UTILS_UNIQUE_IMPL_PTR(dataPtr) + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) }; } // namespace gz::common::testing diff --git a/testing/include/gz/common/testing/TestPaths.hh b/testing/include/gz/common/testing/TestPaths.hh index 349da2448..a22f0685d 100644 --- a/testing/include/gz/common/testing/TestPaths.hh +++ b/testing/include/gz/common/testing/TestPaths.hh @@ -102,7 +102,7 @@ std::shared_ptr<gz::common::TempDirectory> GZ_COMMON_TESTING_VISIBLE MakeTestTempDirectoryImpl(const std::string &_projectSourcePath, const std::string &_prefix = "test", - const std::string &_subDir = "ignition", + const std::string &_subDir = "gz", bool _cleanup = true); @@ -119,7 +119,7 @@ MakeTestTempDirectoryImpl(const std::string &_projectSourcePath, /// \return Shared pointer to TempDirectory inline std::shared_ptr<gz::common::TempDirectory> MakeTestTempDirectory(const std::string &_prefix = "test", - const std::string &_subDir = "ignition", + const std::string &_subDir = "gz", bool _cleanup = true) { return MakeTestTempDirectoryImpl(kTestingProjectSourceDir, @@ -184,8 +184,8 @@ std::string TestFile(Args const &... args) ////////////////////////////////////////////////// /// \brief Get the path to a file in a temporary directory /// -/// Example: to get ${TMP}/.ignition/foo.log -/// TempPath(".ignition", "foo.log"); +/// Example: to get ${TMP}/.gz/foo.log +/// TempPath(".gz", "foo.log"); /// /// \param[in] args Path to the file, relative to the temporary directory /// \return Full path to the temporary directory diff --git a/testing/include/gz/common/testing/detail/AutoLogFixture.hh b/testing/include/gz/common/testing/detail/AutoLogFixture.hh index 5263d67bf..4126da5fb 100644 --- a/testing/include/gz/common/testing/detail/AutoLogFixture.hh +++ b/testing/include/gz/common/testing/detail/AutoLogFixture.hh @@ -57,7 +57,7 @@ AutoLogFixture::AutoLogFixture(): AutoLogFixture::~AutoLogFixture() { gzLogClose(); - EXPECT_TRUE(gz::common::unsetenv(IGN_HOMEDIR)); + EXPECT_TRUE(gz::common::unsetenv(GZ_HOMEDIR)); } ////////////////////////////////////////////////// @@ -77,7 +77,7 @@ void AutoLogFixture::SetUp() this->dataPtr->temp = std::make_unique<TempDirectory>( "test", "ign_common", true); ASSERT_TRUE(this->dataPtr->temp->Valid()); - common::setenv(IGN_HOMEDIR, this->dataPtr->temp->Path()); + common::setenv(GZ_HOMEDIR, this->dataPtr->temp->Path()); // Initialize Console auto logPath = common::joinPaths(this->dataPtr->temp->Path(), "test_logs"); diff --git a/tutorials/profiler.md b/tutorials/profiler.md index d995849df..8162ca026 100644 --- a/tutorials/profiler.md +++ b/tutorials/profiler.md @@ -14,7 +14,7 @@ implementation is [Remotery](https://github.com/Celtoys/Remotery). The goal of the profiler is to provide introspection and analysis when enabled at compile time, but to introduce no overhead when it is disabled at compile-time. -To control if the profiler is enabled, set the `IGN_PROFILER_ENABLE` flag using +To control if the profiler is enabled, set the `GZ_PROFILER_ENABLE` flag using cmake on the targets or sources that you are interested in (described below). ## Enabling the Profiler @@ -37,11 +37,11 @@ The relevant corresponding C++ would be as follows: void thread(const char *_thread_name) { // Sets the name of the thread to appear in the UI - IGN_PROFILE_THREAD_NAME(_thread_name); + GZ_PROFILE_THREAD_NAME(_thread_name); while (running) { // Add a profiling point to this scope. - IGN_PROFILE("Loop"); + GZ_PROFILE("Loop"); // Execute some arbitrary tasks for (size_t ii = 0; ii < 10; ++ii) { @@ -65,7 +65,7 @@ find_package(ignition-common5 QUIET REQUIRED COMPONENTS profiler) add_executable(profiler_example profiler.cc) target_link_libraries(profiler_example ignition-common5::profiler) # Enable the profiler for the example -target_compile_definitions(profiler_example PUBLIC "IGN_PROFILER_ENABLE=1") +target_compile_definitions(profiler_example PUBLIC "GZ_PROFILER_ENABLE=1") ``` Run `cmake` and build the example @@ -148,17 +148,17 @@ If you see ``connection error``, there are a couple of things to double check The profiler is used through a series of macros. The two primary ways of profiling a section of code are to either use -a matched pair of `IGN_PROFILE_BEGIN` and `IGN_PROFILE_END` macros, or to use -a single RAII-style macro `IGN_PROFILE`. The RAII style will stop measuring +a matched pair of `GZ_PROFILE_BEGIN` and `GZ_PROFILE_END` macros, or to use +a single RAII-style macro `GZ_PROFILE`. The RAII style will stop measuring once the scope that the macro was invoked in is left. Using begin/end: ```{.cpp} // An example of using start/stop profiling. - IGN_PROFILE_BEGIN("a"); + GZ_PROFILE_BEGIN("a"); std::this_thread::sleep_for(std::chrono::milliseconds(2)); - IGN_PROFILE_END(); + GZ_PROFILE_END(); ``` Using RAII-style: @@ -166,7 +166,7 @@ Using RAII-style: ```{.cpp} { // An example of using scope-based profiling. - IGN_PROFILE("a"); + GZ_PROFILE("a"); std::this_thread::sleep_for(std::chrono::milliseconds(2)); } ``` @@ -174,9 +174,9 @@ Using RAII-style: Additionally, each thread can be given a name for easy reference in the UI: ```{.cpp} - IGN_PROFILE_THREAD_NAME("main"); - IGN_PROFILE_THREAD_NAME("physics"); - IGN_PROFILE_THREAD_NAME("gui"); + GZ_PROFILE_THREAD_NAME("main"); + GZ_PROFILE_THREAD_NAME("physics"); + GZ_PROFILE_THREAD_NAME("gui"); ``` ## Configuring the Profiler From e94a691955e028c7fa5f00ea7f89da4176b1fa3c Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Fri, 17 Jun 2022 17:33:28 -0700 Subject: [PATCH 170/219] Fix profiler option (#371) Signed-off-by: methylDragon <methylDragon@gmail.com> --- profiler/src/CMakeLists.txt | 2 +- profiler/src/Profiler_Remotery_TEST.cc | 2 +- profiler/src/RemoteryProfilerImpl.cc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profiler/src/CMakeLists.txt b/profiler/src/CMakeLists.txt index c5d42c1c7..39349e4a6 100644 --- a/profiler/src/CMakeLists.txt +++ b/profiler/src/CMakeLists.txt @@ -4,7 +4,7 @@ option(IGN_PROFILER_REMOTERY "Deprecated. Enable the Remotery profiler" # TODO(CH3): Remove the IGN_PROFILER_REMOTERY on deprecation # and set the option to TRUE instead option(GZ_PROFILER_REMOTERY "Enable the Remotery profiler" - IGN_PROFILER_REMOTERY) + ${IGN_PROFILER_REMOTERY}) if(NOT IGN_PROFILER_REMOTERY) message(DEPRECATION "The IGN_PROFILER_REMOTERY option is deprecated! Please use GZ_PROFILER_REMOTERY instead.") diff --git a/profiler/src/Profiler_Remotery_TEST.cc b/profiler/src/Profiler_Remotery_TEST.cc index 79afda2bb..eca13cd55 100644 --- a/profiler/src/Profiler_Remotery_TEST.cc +++ b/profiler/src/Profiler_Remotery_TEST.cc @@ -31,5 +31,5 @@ TEST(Profiler, ProfilerDisabled) EXPECT_TRUE(GZ_PROFILER_ENABLE); EXPECT_TRUE(GZ_PROFILER_VALID); EXPECT_EQ(Profiler::Instance()->ImplementationName(), - "ign_profiler_remotery"); + "gz_profiler_remotery"); } diff --git a/profiler/src/RemoteryProfilerImpl.cc b/profiler/src/RemoteryProfilerImpl.cc index 57b978ffe..fbe719689 100644 --- a/profiler/src/RemoteryProfilerImpl.cc +++ b/profiler/src/RemoteryProfilerImpl.cc @@ -207,7 +207,7 @@ RemoteryProfilerImpl::~RemoteryProfilerImpl() ////////////////////////////////////////////////// std::string RemoteryProfilerImpl::Name() const { - return "ign_profiler_remotery"; + return "gz_profiler_remotery"; } ////////////////////////////////////////////////// From 3ac7c9f8fd5fc1d5fc44491e2b62f1dceeea990b Mon Sep 17 00:00:00 2001 From: Luca Della Vedova <luca@openrobotics.org> Date: Tue, 21 Jun 2022 04:04:40 +0800 Subject: [PATCH 171/219] Support compressed images and RGBA data in Image class (#368) * Add API to load compressed images and read RGBA data Signed-off-by: Luca Della Vedova <luca@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- graphics/include/gz/common/Image.hh | 15 +++++++++ graphics/src/Image.cc | 39 ++++++++++++++++++++++++ graphics/src/Image_TEST.cc | 47 +++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+) diff --git a/graphics/include/gz/common/Image.hh b/graphics/include/gz/common/Image.hh index 614917388..f2d01e683 100644 --- a/graphics/include/gz/common/Image.hh +++ b/graphics/include/gz/common/Image.hh @@ -82,6 +82,7 @@ namespace gz BAYER_BGGR8, BAYER_GBRG8, BAYER_GRBG8, + COMPRESSED_PNG, PIXEL_FORMAT_COUNT }; @@ -122,6 +123,14 @@ namespace gz unsigned int _height, Image::PixelFormatType _format); + /// \brief Set the image from compressed (i.e. png) data + /// \param[in] _data Pointer to the raw image data + /// \param[in] _size Size of the buffer + /// \param[in] _format Pixel format of the provided data + public: void SetFromCompressedData(unsigned char *_data, + unsigned int _size, + Image::PixelFormatType _format); + /// \brief Get the image as a data array /// \param[out] _data Pointer to a NULL array of char. /// \param[out] _count The resulting data array size @@ -133,6 +142,12 @@ namespace gz /// \param[out] _count The resulting data array size public: void RGBData(unsigned char **_data, unsigned int &_count) const; + /// \brief Get the RGBA data from the image. This will add an alpha + /// channel if one is not present. + /// \param[out] _data Pointer to a NULL array of char. + /// \param[out] _count The resulting data array size + public: void RGBAData(unsigned char **_data, unsigned int &_count) const; + /// \brief Get the width /// \return The image width public: unsigned int Width() const; diff --git a/graphics/src/Image.cc b/graphics/src/Image.cc index 256bc565f..237716191 100644 --- a/graphics/src/Image.cc +++ b/graphics/src/Image.cc @@ -242,6 +242,28 @@ void Image::SetFromData(const unsigned char *_data, } } +////////////////////////////////////////////////// +void Image::SetFromCompressedData(unsigned char *_data, + unsigned int _size, + Image::PixelFormatType _format) +{ + if (this->dataPtr->bitmap) + FreeImage_Unload(this->dataPtr->bitmap); + this->dataPtr->bitmap = nullptr; + + if (_format == COMPRESSED_PNG) + { + FIMEMORY *fiMem = FreeImage_OpenMemory(_data, _size); + this->dataPtr->bitmap = FreeImage_LoadFromMemory(FIF_PNG, fiMem); + FreeImage_CloseMemory(fiMem); + } + else + { + gzerr << "Unable to handle format[" << _format << "]\n"; + return; + } +} + ////////////////////////////////////////////////// int Image::Pitch() const { @@ -265,6 +287,23 @@ void Image::RGBData(unsigned char **_data, unsigned int &_count) const FreeImage_Unload(tmp2); } +////////////////////////////////////////////////// +void Image::RGBAData(unsigned char **_data, unsigned int &_count) const +{ + FIBITMAP *tmp = this->dataPtr->bitmap; + FIBITMAP *tmp2 = nullptr; + if (this->dataPtr->ShouldSwapRedBlue()) + { + tmp = this->dataPtr->SwapRedBlue(this->Width(), this->Height()); + tmp2 = tmp; + } + tmp = FreeImage_ConvertTo32Bits(tmp); + this->dataPtr->DataImpl(_data, _count, tmp); + FreeImage_Unload(tmp); + if (tmp2) + FreeImage_Unload(tmp2); +} + ////////////////////////////////////////////////// void Image::Data(unsigned char **_data, unsigned int &_count) const { diff --git a/graphics/src/Image_TEST.cc b/graphics/src/Image_TEST.cc index 478e22741..8e326a3ca 100644 --- a/graphics/src/Image_TEST.cc +++ b/graphics/src/Image_TEST.cc @@ -134,6 +134,7 @@ TEST_F(ImageTest, RGBData) } } } + delete[] data; } ///////////////////////////////////////////////// @@ -179,6 +180,7 @@ TEST_F(ImageTest, Data) } } } + delete[] data; } ///////////////////////////////////////////////// @@ -208,6 +210,51 @@ TEST_F(ImageTest, SetFromData) ASSERT_EQ(img2.Pixel(85, 0), math::Color::Blue); ASSERT_EQ(img2.AvgColor(), math::Color(0.661157f, 0, 0.338843f, 1)); ASSERT_EQ(img2.MaxColor(), math::Color::Red); + delete[] data; +} + +TEST_F(ImageTest, SetFromCompressedData) +{ + // Open file and move to end + std::ifstream ifs(kTestData, std::ios::binary | std::ios::ate); + std::ifstream::pos_type fileEnd = ifs.tellg(); + std::vector<unsigned char> fileData(fileEnd); + + // Rewind to beginning of file and read data + ifs.seekg(0); + ifs.read(reinterpret_cast<char *>(&fileData[0]), fileEnd); + + common::Image img; + img.SetFromCompressedData(&fileData[0], fileEnd, + common::Image::PixelFormatType::COMPRESSED_PNG); + ASSERT_TRUE(img.Valid()); + + unsigned char *data = nullptr; + unsigned int size = 0; + img.RGBAData(&data, size); + ASSERT_EQ(39204u, size); + ASSERT_NE(nullptr, data); + + ASSERT_EQ(common::Image::PixelFormatType::RGBA_INT8, img.PixelFormat()); + ASSERT_EQ(121u, img.Width()); + ASSERT_EQ(81u, img.Height()); + ASSERT_EQ(32u, img.BPP()); + ASSERT_EQ(484, img.Pitch()); + ASSERT_EQ(img.Pixel(0, 0), math::Color::Red); + ASSERT_EQ(img.Pixel(85, 0), math::Color::Blue); + ASSERT_EQ(img.AvgColor(), math::Color(0.661157f, 0, 0.338843f, 1)); + ASSERT_EQ(img.MaxColor(), math::Color::Red); + delete[] data; + + // Reloading the image should not cause any leaks. + img.SetFromCompressedData(&fileData[0], fileEnd, + common::Image::PixelFormatType::COMPRESSED_PNG); + ASSERT_TRUE(img.Valid()); + + // Loading from unsupported pixel format fails. + img.SetFromCompressedData(&fileData[0], fileEnd, + common::Image::PixelFormatType::UNKNOWN_PIXEL_FORMAT); + ASSERT_FALSE(img.Valid()); } /* From e302cd880e86a576714cb631ca8a58d8f9d9a811 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Tue, 21 Jun 2022 08:51:24 -0700 Subject: [PATCH 172/219] =?UTF-8?q?=F0=9F=8E=88=204.5.1=20(#373)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Louise Poubel <louise@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 04688701a..b6fc47793 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(ignition-common4 VERSION 4.5.0) +project(ignition-common4 VERSION 4.5.1) #============================================================================ # Find ignition-cmake diff --git a/Changelog.md b/Changelog.md index 6af3b6fe2..e16f3357e 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,40 @@ ## Ignition Common 4.x +## Ignition Common 4.5.1 (2022-06-21) + +1. Fix spelling in URI error message + * [Pull request #333](https://github.com/gazebosim/gz-common/pull/333) + +1. `ignLogInit` fails if run after console output + * [Pull request #332](https://github.com/gazebosim/gz-common/pull/332) + +1. Fix compatibility with FFmpeg 5.0 + * [Pull request #325](https://github.com/gazebosim/gz-common/pull/325) + +1. packages.apt: don't install ruby-ronn + * [Pull request #324](https://github.com/gazebosim/gz-common/pull/324) + +1. Add some tests for `parentPath`/`basename` + * [Pull request #309](https://github.com/gazebosim/gz-common/pull/309) + +1. Add CI support for Jammy + * [Pull request #316](https://github.com/gazebosim/gz-common/pull/316) + +1. Minor typo in filesystem documentation + * [Pull request #313](https://github.com/gazebosim/gz-common/pull/313) + +1. Fix out-of-bounds access in sanitizeSlashes + * [Pull request #303](https://github.com/gazebosim/gz-common/pull/303) + +1. Fix out-of-bound access in URI + * [Pull request #304](https://github.com/gazebosim/gz-common/pull/304) + +1. Move performance test to examples + * [Pull request #294](https://github.com/gazebosim/gz-common/pull/294) + +1. Fix memory corruption & leaks in Image + * [Pull request #240](https://github.com/gazebosim/gz-common/pull/240) + ## Ignition Common 4.5.0 (2022-01-12) 1. Fixed crash when a Collada file has an empty normal vector From edb350940a92c3a037b15372f5452e263e2d0577 Mon Sep 17 00:00:00 2001 From: "Addisu Z. Taddese" <addisu@openrobotics.org> Date: Fri, 24 Jun 2022 12:02:40 -0500 Subject: [PATCH 173/219] Fix race condition in FileLogger (#378) Signed-off-by: Addisu Z. Taddese <addisu@openrobotics.org> --- include/ignition/common/Console.hh | 14 +++++++++++++- src/Console.cc | 24 ++++++++++++++++++++---- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/include/ignition/common/Console.hh b/include/ignition/common/Console.hh index a5a256615..dfd36ce67 100644 --- a/include/ignition/common/Console.hh +++ b/include/ignition/common/Console.hh @@ -113,13 +113,25 @@ namespace ignition /// \brief Destructor. public: virtual ~Buffer(); + /// \brief Writes _count characters to the string buffer + /// \param[in] _char Input rharacter array. + /// \param[in] _count Number of characters in array. + /// \return The number of characters successfully written. + public: std::streamsize xsputn( + const char *_char, std::streamsize _count) override; + /// \brief Sync the stream (output the string buffer /// contents). /// \return Return 0 on success. - public: virtual int sync(); + public: int sync() override; /// \brief Stream to output information into. public: std::ofstream *stream; + /// \brief Mutex to synchronize writes to the string buffer + /// and the output stream. + /// \todo(nkoenig) Put this back in for ign-common5, and + /// remove the corresponding static version. + // public: std::mutex syncMutex; }; IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING diff --git a/src/Console.cc b/src/Console.cc index 4cd764dc8..c4855f91a 100644 --- a/src/Console.cc +++ b/src/Console.cc @@ -362,16 +362,32 @@ FileLogger::Buffer::~Buffer() static_cast<std::ofstream*>(this->stream)->close(); } +///////////////////////////////////////////////// +std::streamsize FileLogger::Buffer::xsputn(const char *_char, + std::streamsize _count) +{ + auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + return std::stringbuf::xsputn(_char, _count); +} + ///////////////////////////////////////////////// int FileLogger::Buffer::sync() { if (!this->stream) return -1; - *this->stream << this->str(); - - this->stream->flush(); + { + auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + *this->stream << this->str(); + } - this->str(""); + { + auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + this->stream->flush(); + } + { + auto lk = BufferLock(reinterpret_cast<std::uintptr_t>(this)); + this->str(""); + } return !(*this->stream); } From dc56d53f9165288bf56b5c29ac5bbbf9f8d33fad Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Sat, 25 Jun 2022 15:34:18 -0700 Subject: [PATCH 174/219] Rename CMake project to gz (#352) Signed-off-by: Louise Poubel <louise@openrobotics.org> --- BUILD.bazel | 22 +++++++++++----------- CMakeLists.txt | 22 +++++++++++----------- av/BUILD.bazel | 14 +++++++------- av/src/CMakeLists.txt | 2 +- events/BUILD.bazel | 10 +++++----- events/src/CMakeLists.txt | 4 ++-- examples/CMakeLists.txt | 16 ++++++++-------- geospatial/src/CMakeLists.txt | 6 +++--- graphics/BUILD.bazel | 14 +++++++------- graphics/src/CMakeLists.txt | 10 +++++----- profiler/BUILD.bazel | 8 ++++---- profiler/src/CMakeLists.txt | 2 +- src/CMakeLists.txt | 14 +++++++------- test/BUILD.bazel | 6 +++--- test/integration/CMakeLists.txt | 2 +- 15 files changed, 76 insertions(+), 76 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index d193ffd3c..f6e735667 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -1,11 +1,11 @@ load( - "//ign_bazel:build_defs.bzl", + "//gz_bazel:build_defs.bzl", "IGNITION_FEATURES", "IGNITION_ROOT", "IGNITION_VISIBILITY", "generate_include_header", - "ign_config_header", - "ign_export_header", + "gz_config_header", + "gz_export_header", ) package( @@ -26,7 +26,7 @@ PROJECT_MINOR = 0 PROJECT_PATCH = 0 # Generates config.hh based on the version numbers in CMake code. -ign_config_header( +gz_config_header( name = "config", src = "include/gz/common/config.hh.in", cmakelists = ["CMakeLists.txt"], @@ -34,7 +34,7 @@ ign_config_header( project_version = (PROJECT_MAJOR, PROJECT_MINOR, PROJECT_PATCH), ) -ign_export_header( +gz_export_header( name = "include/gz/common/Export.hh", export_base = "IGNITION_COMMON", lib_name = "ignition-common", @@ -72,14 +72,14 @@ public_headers = public_headers_no_gen + [ ] cc_library( - name = "ign_common", + name = "gz_common", srcs = sources + private_headers, hdrs = public_headers, includes = ["include"], linkopts = ["-ldl"], deps = [ "@uuid", - IGNITION_ROOT + "ign_math", + IGNITION_ROOT + "gz_math", ], ) @@ -88,7 +88,7 @@ cc_binary( includes = ["include"], linkopts = ["-Wl,-soname,libignition-common5.so"], linkshared = True, - deps = [":ign_common"], + deps = [":gz_common"], ) test_srcs = glob( @@ -101,9 +101,9 @@ test_srcs = glob( srcs = [src], data = [":libignition-common5.so"], deps = [ - ":ign_common", - IGNITION_ROOT + "ign_bazel:utilities", - IGNITION_ROOT + "ign_common/test:test_utils", + ":gz_common", + IGNITION_ROOT + "gz_bazel:utilities", + IGNITION_ROOT + "gz_common/test:test_utils", "@gtest", "@gtest//:gtest_main", ], diff --git a/CMakeLists.txt b/CMakeLists.txt index 9be7aca88..7eaf71c13 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,14 +3,14 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(ignition-common5 VERSION 5.0.0) -set(IGN_COMMON_VER ${PROJECT_VERSION_MAJOR}) +project(gz-common5 VERSION 5.0.0) +set(GZ_COMMON_VER ${PROJECT_VERSION_MAJOR}) #============================================================================ -# Find ignition-cmake +# Find gz-cmake #============================================================================ -find_package(ignition-cmake3 REQUIRED) -set(IGN_CMAKE_VER ${ignition-cmake3_VERSION_MAJOR}) +find_package(gz-cmake3 REQUIRED) +set(GZ_CMAKE_VER ${gz-cmake3_VERSION_MAJOR}) #============================================================================ # Configure the project @@ -50,14 +50,14 @@ endif() message(STATUS "\n\n-- ====== Finding Dependencies ======") #-------------------------------------- -# Find ignition-math -gz_find_package(ignition-math7 REQUIRED_BY geospatial graphics events) -set(IGN_MATH_VER ${ignition-math7_VERSION_MAJOR}) +# Find gz-math +gz_find_package(gz-math7 REQUIRED_BY geospatial graphics events) +set(GZ_MATH_VER ${gz-math7_VERSION_MAJOR}) #-------------------------------------- -# Find ignition-utils -gz_find_package(ignition-utils2 REQUIRED) -set(IGN_UTILS_VER ${ignition-utils2_VERSION_MAJOR}) +# Find gz-utils +gz_find_package(gz-utils2 REQUIRED) +set(GZ_UTILS_VER ${gz-utils2_VERSION_MAJOR}) #-------------------------------------- # Find Tinyxml2 diff --git a/av/BUILD.bazel b/av/BUILD.bazel index ebe284e46..0dbd77fc1 100644 --- a/av/BUILD.bazel +++ b/av/BUILD.bazel @@ -1,9 +1,9 @@ load( - "//ign_bazel:build_defs.bzl", + "//gz_bazel:build_defs.bzl", "IGNITION_ROOT", "IGNITION_VISIBILITY", "generate_include_header", - "ign_export_header", + "gz_export_header", ) package( @@ -29,7 +29,7 @@ sources = glob( test_sources = glob(["src/*_TEST.cc"]) -ign_export_header( +gz_export_header( name = "include/gz/common/av/Export.hh", export_base = "IGNITION_COMMON_AV", lib_name = "ignition-common-av", @@ -55,7 +55,7 @@ cc_library( hdrs = public_headers, includes = ["include"], deps = [ - IGNITION_ROOT + "ign_common", + IGNITION_ROOT + "gz_common", "@ffmpeg//:avcodec", "@ffmpeg//:avdevice", "@ffmpeg//:avformat", @@ -76,12 +76,12 @@ cc_binary( name = src.replace("/", "_").replace(".cc", "").replace("src_", ""), srcs = [src], data = [ - IGNITION_ROOT + "ign_common/test:data", + IGNITION_ROOT + "gz_common/test:data", ], deps = [ ":av", - IGNITION_ROOT + "ign_common/test:test_utils", - IGNITION_ROOT + "ign_bazel:utilities", + IGNITION_ROOT + "gz_common/test:test_utils", + IGNITION_ROOT + "gz_bazel:utilities", "@gtest", "@gtest//:gtest_main", ], diff --git a/av/src/CMakeLists.txt b/av/src/CMakeLists.txt index c3d7c6429..624636f7b 100644 --- a/av/src/CMakeLists.txt +++ b/av/src/CMakeLists.txt @@ -34,5 +34,5 @@ gz_build_tests( SOURCES ${gtest_sources} LIB_DEPS ${av_target} - ignition-common${IGN_COMMON_VER}-testing + gz-common${GZ_COMMON_VER}-testing ) diff --git a/events/BUILD.bazel b/events/BUILD.bazel index eeb014c8c..a14b80429 100644 --- a/events/BUILD.bazel +++ b/events/BUILD.bazel @@ -1,9 +1,9 @@ load( - "//ign_bazel:build_defs.bzl", + "//gz_bazel:build_defs.bzl", "IGNITION_ROOT", "IGNITION_VISIBILITY", "generate_include_header", - "ign_export_header", + "gz_export_header", ) package( @@ -26,7 +26,7 @@ sources = glob( test_sources = glob(["src/*_TEST.cc"]) -ign_export_header( +gz_export_header( name = "include/ignition/common/events/Export.hh", export_base = "IGNITION_COMMON_EVENTS", lib_name = "ignition-common-events", @@ -52,7 +52,7 @@ cc_library( hdrs = public_headers, includes = ["include"], deps = [ - IGNITION_ROOT + "ign_common", + IGNITION_ROOT + "gz_common", ], ) @@ -69,7 +69,7 @@ cc_binary( srcs = [src], deps = [ ":events", - IGNITION_ROOT + "ign_common/test:test_utils", + IGNITION_ROOT + "gz_common/test:test_utils", "@gtest", "@gtest//:gtest_main", ], diff --git a/events/src/CMakeLists.txt b/events/src/CMakeLists.txt index 9678e32a1..906244518 100644 --- a/events/src/CMakeLists.txt +++ b/events/src/CMakeLists.txt @@ -4,12 +4,12 @@ gz_add_component(events SOURCES ${sources} GET_TARGET_NAME events_target) target_link_libraries(${events_target} PUBLIC - ignition-math${IGN_MATH_VER}::ignition-math${IGN_MATH_VER}) + gz-math${GZ_MATH_VER}::gz-math${GZ_MATH_VER}) gz_build_tests( TYPE UNIT SOURCES ${gtest_sources} LIB_DEPS ${events_target} - ignition-common${IGN_COMMON_VER}-testing + gz-common${GZ_COMMON_VER}-testing ) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 97de9444c..d522cfb15 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,22 +1,22 @@ cmake_minimum_required(VERSION 2.8 FATAL_ERROR) -# Find the ignition-common library -find_package(ignition-common5 QUIET REQUIRED COMPONENTS events profiler) -set(IGN_COMMON_VER ${ignition-common5_VERSION_MAJOR}) +# Find the gz-common library +find_package(gz-common5 QUIET REQUIRED COMPONENTS events profiler) +set(GZ_COMMON_VER ${gz-common5_VERSION_MAJOR}) add_executable(assert_example assert_example.cc) -target_link_libraries(assert_example ignition-common${IGN_COMMON_VER}::core) +target_link_libraries(assert_example gz-common${GZ_COMMON_VER}::core) add_executable(console_example console.cc) -target_link_libraries(console_example ignition-common${IGN_COMMON_VER}::core) +target_link_libraries(console_example gz-common${GZ_COMMON_VER}::core) add_executable(events_example events.cc) -target_link_libraries(events_example ignition-common${IGN_COMMON_VER}::events) +target_link_libraries(events_example gz-common${GZ_COMMON_VER}::events) add_executable(profiler_example profiler.cc) -target_link_libraries(profiler_example ignition-common${IGN_COMMON_VER}::profiler) +target_link_libraries(profiler_example gz-common${GZ_COMMON_VER}::profiler) target_compile_definitions(profiler_example PUBLIC "GZ_PROFILER_ENABLE=1") add_executable(logging_performance logging_performance.cc) -target_link_libraries(logging_performance ignition-common${IGN_COMMON_VER}::core) +target_link_libraries(logging_performance gz-common${GZ_COMMON_VER}::core) diff --git a/geospatial/src/CMakeLists.txt b/geospatial/src/CMakeLists.txt index 8c9ecf088..f9fdcedc8 100644 --- a/geospatial/src/CMakeLists.txt +++ b/geospatial/src/CMakeLists.txt @@ -8,8 +8,8 @@ gz_add_component(geospatial target_link_libraries(${geospatial_target} PUBLIC ${PROJECT_LIBRARY_TARGET_NAME}-graphics - ignition-math${IGN_MATH_VER}::ignition-math${IGN_MATH_VER} - ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER} + gz-math${GZ_MATH_VER}::gz-math${GZ_MATH_VER} + gz-utils${GZ_UTILS_VER}::gz-utils${GZ_UTILS_VER} PRIVATE ${GDAL_LIBRARY}) @@ -20,5 +20,5 @@ target_include_directories(${geospatial_target} gz_build_tests(TYPE UNIT SOURCES ${gtest_sources} LIB_DEPS ${geospatial_target} - ignition-common${IGN_COMMON_VER}-testing + gz-common${GZ_COMMON_VER}-testing ) diff --git a/graphics/BUILD.bazel b/graphics/BUILD.bazel index 8567eeceb..f618fa92f 100644 --- a/graphics/BUILD.bazel +++ b/graphics/BUILD.bazel @@ -1,9 +1,9 @@ load( - "//ign_bazel:build_defs.bzl", + "//gz_bazel:build_defs.bzl", "IGNITION_ROOT", "IGNITION_VISIBILITY", "generate_include_header", - "ign_export_header", + "gz_export_header", ) package( @@ -26,7 +26,7 @@ sources = glob( test_sources = glob(["src/*_TEST.cc"]) -ign_export_header( +gz_export_header( name = "include/gz/common/graphics/Export.hh", export_base = "IGNITION_COMMON_GRAPHICS", lib_name = "ignition-common-graphics", @@ -57,8 +57,8 @@ cc_library( "@glib", "@gts", "@tinyxml2", - IGNITION_ROOT + "ign_common", - IGNITION_ROOT + "ign_utils", + IGNITION_ROOT + "gz_common", + IGNITION_ROOT + "gz_utils", ], ) @@ -74,11 +74,11 @@ cc_binary( name = src.replace("/", "_").replace(".cc", "").replace("src_", ""), srcs = [src], data = [ - IGNITION_ROOT + "ign_common/test:data", + IGNITION_ROOT + "gz_common/test:data", ], deps = [ ":graphics", - IGNITION_ROOT + "ign_common/test:test_utils", + IGNITION_ROOT + "gz_common/test:test_utils", "@gtest", "@gtest//:gtest_main", ], diff --git a/graphics/src/CMakeLists.txt b/graphics/src/CMakeLists.txt index 735bdd37a..473caf9a4 100644 --- a/graphics/src/CMakeLists.txt +++ b/graphics/src/CMakeLists.txt @@ -13,8 +13,8 @@ gz_add_component(graphics SOURCES ${sources} GET_TARGET_NAME graphics_target) target_link_libraries(${graphics_target} PUBLIC - ignition-math${IGN_MATH_VER}::ignition-math${IGN_MATH_VER} - ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER} + gz-math${GZ_MATH_VER}::gz-math${GZ_MATH_VER} + gz-utils${GZ_UTILS_VER}::gz-utils${GZ_UTILS_VER} PRIVATE GTS::GTS FreeImage::FreeImage) @@ -24,7 +24,7 @@ gz_build_tests( SOURCES ${gtest_sources} LIB_DEPS ${graphics_target} - ignition-common${IGN_COMMON_VER}-testing + gz-common${GZ_COMMON_VER}-testing ) if(USE_EXTERNAL_TINYXML2) @@ -45,7 +45,7 @@ else() # Otherwise, add its source directory to our target's PRIVATE include # directories. We do not want this to be visible to consumers of - # ignition-common. + # gz-common. target_include_directories(${graphics_target} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tinyxml2) @@ -56,7 +56,7 @@ else() target_include_directories(UNIT_ColladaExporter_TEST PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/tinyxml2) # We also need to add this as a source file to the collada exporter test's # target, because we do not export the tinyxml2 symbols that get generated - # in the ignition-common library. Therefore, the collada exporter test + # in the gz-common library. Therefore, the collada exporter test # cannot link to those symbols and must generate its own. target_sources(UNIT_ColladaExporter_TEST PRIVATE tinyxml2/tinyxml2.cpp) diff --git a/profiler/BUILD.bazel b/profiler/BUILD.bazel index 6aa4148e5..6a382ad91 100644 --- a/profiler/BUILD.bazel +++ b/profiler/BUILD.bazel @@ -1,10 +1,10 @@ load( - "//ign_bazel:build_defs.bzl", + "//gz_bazel:build_defs.bzl", "IGNITION_ROOT", "IGNITION_VISIBILITY", "cmake_configure_file", "generate_include_header", - "ign_export_header", + "gz_export_header", ) package( @@ -53,7 +53,7 @@ cmake_configure_file( visibility = ["//visibility:private"], ) -ign_export_header( +gz_export_header( name = "include/gz/common/profiler/Export.hh", export_base = "IGNITION_COMMON_PROFILER", lib_name = "ignition-common-profiler", @@ -94,7 +94,7 @@ cc_library( ], includes = ["include"], deps = [ - IGNITION_ROOT + "ign_common", + IGNITION_ROOT + "gz_common", ":remotery", ], ) diff --git a/profiler/src/CMakeLists.txt b/profiler/src/CMakeLists.txt index 39349e4a6..28675289b 100644 --- a/profiler/src/CMakeLists.txt +++ b/profiler/src/CMakeLists.txt @@ -93,7 +93,7 @@ gz_build_tests( SOURCES ${PROFILER_TESTS} LIB_DEPS ${profiler_target} - ignition-common${IGN_COMMON_VER}-testing + gz-common${GZ_COMMON_VER}-testing TEST_LIST profiler_tests) if(TARGET UNIT_Profiler_Remotery_TEST) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 23f48efb3..5ee4582ac 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -19,13 +19,13 @@ target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} ${DL_TARGET} ${CXX_FILESYSTEM_LIBRARIES} PUBLIC - ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER} + gz-utils${GZ_UTILS_VER}::gz-utils${GZ_UTILS_VER} ) # This is required by the WorkerPool::WaitForResults(const Time &_timeout) # TODO(anyone): GZ_DEPRECATED(4). Remove this part when the method is removed target_include_directories(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE - ${ignition-math${IGN_MATH_VER}_INCLUDE_DIRS}) + ${gz-math${GZ_MATH_VER}_INCLUDE_DIRS}) # Handle non-Windows configuration settings if(NOT WIN32) @@ -38,8 +38,8 @@ else() PRIVATE shlwapi) endif() -# don't build MovingWindowFilter_TEST if we don't have ignition-math -if(NOT ignition-math${IGN_MATH_VER}_FOUND) +# don't build MovingWindowFilter_TEST if we don't have gz-math +if(NOT gz-math${GZ_MATH_VER}_FOUND) list(REMOVE_ITEM gtest_sources MovingWindowFilter_TEST.cc) endif() @@ -48,15 +48,15 @@ gz_build_tests( TYPE UNIT SOURCES ${gtest_sources} LIB_DEPS - ignition-utils${IGN_UTILS_VER}::ignition-utils${IGN_UTILS_VER} - ignition-common${IGN_COMMON_VER}-testing + gz-utils${GZ_UTILS_VER}::gz-utils${GZ_UTILS_VER} + gz-common${GZ_COMMON_VER}-testing INCLUDE_DIRS # Used to make internal source file headers visible to the unit tests ${CMAKE_CURRENT_SOURCE_DIR}) if(TARGET UNIT_MovingWindowFilter_TEST) target_include_directories(UNIT_MovingWindowFilter_TEST PRIVATE - ${ignition-math${IGN_MATH_VER}_INCLUDE_DIRS}) + ${gz-math${GZ_MATH_VER}_INCLUDE_DIRS}) endif() if(TARGET UNIT_PluginLoader_TEST) diff --git a/test/BUILD.bazel b/test/BUILD.bazel index cbf1a7b87..f499aa249 100644 --- a/test/BUILD.bazel +++ b/test/BUILD.bazel @@ -1,11 +1,11 @@ load( - "//ign_bazel:cmake_configure_file.bzl", + "//gz_bazel:cmake_configure_file.bzl", "cmake_configure_file", ) -BINARY_DIR = "./ign_common" +BINARY_DIR = "./gz_common" -SOURCE_DIR = "./ign_common" +SOURCE_DIR = "./gz_common" # Generates config.hh based on the version numbers in CMake code. cmake_configure_file( diff --git a/test/integration/CMakeLists.txt b/test/integration/CMakeLists.txt index f65f0a283..e273d42aa 100644 --- a/test/integration/CMakeLists.txt +++ b/test/integration/CMakeLists.txt @@ -8,7 +8,7 @@ endif() gz_build_tests( TYPE INTEGRATION SOURCES ${tests} - LIB_DEPS ignition-common${IGN_COMMON_VER}-testing + LIB_DEPS gz-common${GZ_COMMON_VER}-testing ) if(TARGET INTEGRATION_plugin) From ad8445249534e4a981319f1e103e00e58b2d16cd Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Sat, 25 Jun 2022 18:26:01 -0700 Subject: [PATCH 175/219] Migrate IGNITION- CMake variables (#381) --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7eaf71c13..e6fb77471 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -153,5 +153,5 @@ gz_create_docs( API_MAINPAGE_MD "${CMAKE_BINARY_DIR}/api.md" TUTORIALS_MAINPAGE_MD "${CMAKE_BINARY_DIR}/tutorials.md" TAGFILES - "${IGNITION-MATH_DOXYGEN_TAGFILE} = ${IGNITION-MATH_API_URL}" + "${GZ-MATH_DOXYGEN_TAGFILE} = ${GZ-MATH_API_URL}" ) From 22e0f02798758330a4972841ceb91749b7133861 Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Tue, 28 Jun 2022 10:13:54 -0700 Subject: [PATCH 176/219] ign -> gz Partial Docs Migration and Project Name Followups : gz-common (#383) * Migrate some docs and project names in macros Signed-off-by: methylDragon <methylDragon@gmail.com> * Add project name migration note in Migration.md Signed-off-by: methylDragon <methylDragon@gmail.com> * Migrate libexec dirs Signed-off-by: methylDragon <methylDragon@gmail.com> * More aggressively migrate ign-libX mentions, even for older versions Signed-off-by: methylDragon <methylDragon@gmail.com> * More aggressive migrations for ignition- and ign- Signed-off-by: methylDragon <methylDragon@gmail.com> --- Changelog.md | 10 ++++---- Migration.md | 25 ++++++++++++------- README.md | 5 ++-- api.md.in | 4 +-- configure.bat | 2 +- examples/README.md | 2 +- include/gz/common/SuppressWarning.hh | 6 ++--- profiler/src/CMakeLists.txt | 2 +- profiler/src/RemoteryProfilerImpl.cc | 2 +- src/PluginUtils_TEST.cc | 4 +-- src/SignalHandler.cc | 2 +- src/SignalHandler_TEST.cc | 2 +- src/URI.cc | 2 +- test/performance/CMakeLists.txt | 2 +- .../include/gz/common/testing/TestPaths.hh | 6 ++--- tutorials.md.in | 4 +-- tutorials/hw-encoding.md | 2 +- tutorials/install.md | 24 +++++++++--------- tutorials/profiler.md | 24 +++++++++--------- 19 files changed, 68 insertions(+), 62 deletions(-) diff --git a/Changelog.md b/Changelog.md index 61f577c02..a2a284d90 100644 --- a/Changelog.md +++ b/Changelog.md @@ -77,7 +77,7 @@ ## Gazebo Common 4.3.0 (2021-09-27) -1. Remove ign-utils from TempDirectory +1. Remove gz-utils from TempDirectory * [Pull request #248](https://github.com/gazebosim/gz-common/pull/248) 1. Add functions and objects for Temporary Directories @@ -163,7 +163,7 @@ 1. Add bazel buildsystem support * [Pull request #123](https://github.com/gazebosim/gz-common/pull/123) ->>>>>>> ign-common4 +>>>>>>> gz-common4 ## Gazebo Common 4.0.0 (2021-03-30) @@ -176,7 +176,7 @@ 1. Rotate capsule to Z-up * [Pull request #186](https://github.com/gazebosim/gz-common/pull/186) -1. Add implementation pointer to ign-common classes +1. Add implementation pointer to gz-common classes * [Pull request #163](https://github.com/gazebosim/gz-common/pull/163) 1. Cleanup and add implementation pointer to Animation classes @@ -535,7 +535,7 @@ 1. Filesystem functions to create unique paths * [BitBucket pull request 187](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/187) -1. Battery additions for LinearBatteryPlugin port to ign-gazebo +1. Battery additions for LinearBatteryPlugin port to gz-sim * [BitBucket pull request 186](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/186) 1. Consolidate Console::log streams to reduce colored log size @@ -548,7 +548,7 @@ ## Gazebo Common 3.0.0 (2019-02-28) -1. Use ign-cmake2 and support Ubuntu Bionic (18.04). +1. Use gz-cmake2 and support Ubuntu Bionic (18.04). * [BitBucket pull request 131](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/131) 1. WorkerPool: allow user to set minimum number of worker threads. diff --git a/Migration.md b/Migration.md index 0e57cca19..e5277e10a 100644 --- a/Migration.md +++ b/Migration.md @@ -44,12 +44,19 @@ release will remove the deprecated code. 11. `IGN_DUMMY_PLUGIN_PATH` 12. `IGNITION_UNITTEST_SPECIALIZED_PLUGIN_ACCESS` +### Breaking Changes +1. The project name has been changed to use the `gz-` prefix, you **must** use the `gz` prefix! + * This also means that any generated code that use the project name (e.g. CMake variables, in-source macros) would have to be migrated. + * Some non-exhaustive examples of this include: + * `GZ_<PROJECT>_<VISIBLE/HIDDEN>` + * CMake `-config` files + * Paths that depend on the project name ### Additions 1. **geospatial** component that loads heightmap images and DEMs - + Depends on the ign-common's `graphics` component and the `gdal` library + + Depends on the gz-common's `graphics` component and the `gdal` library ### Modifications @@ -99,8 +106,8 @@ release will remove the deprecated code. ### Modifications -1. Depends on **ignition-cmake2** - + Ignition-common now depends on ignition-cmake2. +1. Depends on **gz-cmake2** + + gz-common now depends on gz-cmake2. 1. Requires c++17. @@ -110,12 +117,12 @@ release will remove the deprecated code. ### Modifications -1. Depends on **ignition-cmake1** - + Ignition-common now depends on ignition-cmake1, which provides +1. Depends on **gz-cmake1** + + gz-common now depends on gz-cmake1, which provides support for Component libraries. 1. Component libraries - + Some classes have been moved from the main ignition-common library + + Some classes have been moved from the main gz-common library to component libraries. To use these features, you must list them in the `find_package` call and link against them. - av: audio and video playback and encoding @@ -126,6 +133,6 @@ release will remove the deprecated code. ### Added dependencies -1. **ignition-cmake** - + Ignition-math now has a build dependency on ignition-cmake, which - allows cmake scripts to be shared across all the ignition packages. +1. **gz-cmake** + + gz-math now has a build dependency on gz-cmake, which + allows cmake scripts to be shared across all the Gazebo packages. diff --git a/README.md b/README.md index 0e1271522..dbd3ba4a9 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,8 @@ Ubuntu Focal | [![Build Status](https://build.osrfoundation.org/buildStatus/icon Homebrew | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-main-homebrew-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-main-homebrew-amd64) Windows | [![Build Status](https://build.osrfoundation.org/buildStatus/icon?job=ignition_common-ci-main-windows7-amd64)](https://build.osrfoundation.org/job/ignition_common-ci-main-windows7-amd64) -Gazebo Common, a component of [Ignition -Robotics](https://gazebosim.org), provides a set of libraries that +Gazebo Common, a component of [Gazebo +Sim](https://gazebosim.org), provides a set of libraries that cover many different use cases. An audio-visual library supports processing audio and video files, a graphics library can load a variety 3D mesh file formats into a generic in-memory representation, and the core @@ -102,4 +102,3 @@ This library uses [Semantic Versioning](https://semver.org/). Additionally, this # License This library is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). See also the [LICENSE](https://github.com/gazebosim/gz-common/blob/main/LICENSE) file. - diff --git a/api.md.in b/api.md.in index e73693e30..218f68573 100644 --- a/api.md.in +++ b/api.md.in @@ -1,6 +1,6 @@ -## Ignition @IGN_DESIGNATION_CAP@ +## Gazebo @IGN_DESIGNATION_CAP@ -Ignition @IGN_DESIGNATION_CAP@ is a component in Gazebo, a set of libraries +Gazebo @IGN_DESIGNATION_CAP@ is a component in Gazebo, a set of libraries designed to rapidly develop robot and simulation applications. ## License diff --git a/configure.bat b/configure.bat index f4da07fa2..68582d494 100644 --- a/configure.bat +++ b/configure.bat @@ -5,7 +5,7 @@ :: Install dependencies call %win_lib% :download_unzip_install dlfcn-win32-vc15-x64-dll-MD.zip -call %win_lib% :install_ign_project ign-math main +call %win_lib% :install_ign_project gz-math main :: Set configuration variables @set build_type=Release diff --git a/examples/README.md b/examples/README.md index 1b5596454..05fdf0a2e 100644 --- a/examples/README.md +++ b/examples/README.md @@ -8,7 +8,7 @@ After installing Gazebo Common, from source or from binaries, build with: ``` git clone https://github.com/gazebosim/gz-common/ -cd ign-common/examples +cd gz-common/examples mkdir build cd build cmake .. diff --git a/include/gz/common/SuppressWarning.hh b/include/gz/common/SuppressWarning.hh index a6c598558..c886957fb 100644 --- a/include/gz/common/SuppressWarning.hh +++ b/include/gz/common/SuppressWarning.hh @@ -20,10 +20,10 @@ #include <gz/utils/SuppressWarning.hh> -#pragma message("ign-common SuppressWarning is deprecated, use ign-utils") -// These macros have been moved to ign-utils so they may be more broadly used. +#pragma message("gz-common SuppressWarning is deprecated, use gz-utils") +// These macros have been moved to gz-utils so they may be more broadly used. // The implementations are aliases to those implementations and are deprecated -// in ign-common5 and are to be removed in ign-common6 +// in gz-common5 and are to be removed in gz-common6 // This header contains cross-platform macros for suppressing warnings. Please // only use these macros responsibly when you are certain that the compiler is diff --git a/profiler/src/CMakeLists.txt b/profiler/src/CMakeLists.txt index 28675289b..440bbc2b6 100644 --- a/profiler/src/CMakeLists.txt +++ b/profiler/src/CMakeLists.txt @@ -102,7 +102,7 @@ if(TARGET UNIT_Profiler_Remotery_TEST) endif() if(GZ_PROFILER_REMOTERY) - set(GZ_PROFILER_SCRIPT_PATH ${CMAKE_INSTALL_LIBEXECDIR}/ignition/ignition-common${PROJECT_VERSION_MAJOR}) + set(GZ_PROFILER_SCRIPT_PATH ${CMAKE_INSTALL_LIBEXECDIR}/gz/gz-common${PROJECT_VERSION_MAJOR}) set(GZ_PROFILER_VIS_PATH ${IGN_DATA_INSTALL_DIR}/profiler_vis) configure_file(Remotery/ign_remotery_vis.in diff --git a/profiler/src/RemoteryProfilerImpl.cc b/profiler/src/RemoteryProfilerImpl.cc index fbe719689..b233adfef 100644 --- a/profiler/src/RemoteryProfilerImpl.cc +++ b/profiler/src/RemoteryProfilerImpl.cc @@ -184,7 +184,7 @@ RemoteryProfilerImpl::RemoteryProfilerImpl() static_cast<RemoteryProfilerImpl *>(_context)->HandleInput(_text); }; - gzdbg << "Starting ign-common profiler impl: Remotery" << + gzdbg << "Starting gz-common profiler impl: Remotery" << " (port: " << this->settings->port << ")" << std::endl; rmtError error; error = rmt_CreateGlobalInstance(&this->rmt); diff --git a/src/PluginUtils_TEST.cc b/src/PluginUtils_TEST.cc index 7f6b1b1d4..9ef3e7287 100644 --- a/src/PluginUtils_TEST.cc +++ b/src/PluginUtils_TEST.cc @@ -32,8 +32,8 @@ TEST(PluginUtils, NormalizeName) EXPECT_EQ("::", common::NormalizeName("")); EXPECT_EQ("::", common::NormalizeName("::")); - EXPECT_EQ("::ignition", common::NormalizeName("ignition")); - EXPECT_EQ("::ignition", common::NormalizeName("::ignition")); + EXPECT_EQ("::gz", common::NormalizeName("gz")); + EXPECT_EQ("::gz", common::NormalizeName("::gz")); EXPECT_EQ("::gz::math", common::NormalizeName("gz::math")); EXPECT_EQ("::gz::math", common::NormalizeName("::gz::math")); diff --git a/src/SignalHandler.cc b/src/SignalHandler.cc index 68a71bfba..f6897f30a 100644 --- a/src/SignalHandler.cc +++ b/src/SignalHandler.cc @@ -16,7 +16,7 @@ */ // Suppressing cpplint.py because tools/cpplint.py is old. Remove the NOLINT -// comments when upgrading to ign-cmake's "make codecheck" +// comments when upgrading to gz-cmake's "make codecheck" #include "gz/common/SignalHandler.hh" // NOLINT(*) #include <csignal> // NOLINT(*) #include <functional> // NOLINT(*) diff --git a/src/SignalHandler_TEST.cc b/src/SignalHandler_TEST.cc index 90bbd27a5..420f3aa6f 100644 --- a/src/SignalHandler_TEST.cc +++ b/src/SignalHandler_TEST.cc @@ -16,7 +16,7 @@ */ // Suppressing cpplint.py because tools/cpplint.py is old. Remove the NOLINT -// comments when upgrading to ign-cmake's "make codecheck" +// comments when upgrading to gz-cmake's "make codecheck" #include "gz/common/SignalHandler.hh" // NOLINT(*) #include <gtest/gtest.h> // NOLINT(*) #include <csignal> // NOLINT(*) diff --git a/src/URI.cc b/src/URI.cc index 33809371b..02d49e460 100644 --- a/src/URI.cc +++ b/src/URI.cc @@ -578,7 +578,7 @@ bool URIPath::Valid(const std::string &_str) // TODO(anyone): the space should not be // there, but leaving it out breaks - // other stuff, e.g. ign-fuel-tools + // other stuff, e.g. gz-fuel-tools // now have URIs with unencoded spaces const std::string allowedChars = "qwertzuiopasdfghjklyxcvbnm" "QWERTZUIOPASDFGHJKLYXCVBNM" diff --git a/test/performance/CMakeLists.txt b/test/performance/CMakeLists.txt index 35de8f031..629714f36 100644 --- a/test/performance/CMakeLists.txt +++ b/test/performance/CMakeLists.txt @@ -1,7 +1,7 @@ gz_get_sources(tests) # plugin_specialization test causes lcov to hang -# see ign-cmake issue 25 +# see gz-cmake issue 25 if("${CMAKE_BUILD_TYPE_UPPERCASE}" STREQUAL "COVERAGE") list(REMOVE_ITEM tests plugin_specialization.cc) diff --git a/testing/include/gz/common/testing/TestPaths.hh b/testing/include/gz/common/testing/TestPaths.hh index a22f0685d..1e075d97d 100644 --- a/testing/include/gz/common/testing/TestPaths.hh +++ b/testing/include/gz/common/testing/TestPaths.hh @@ -39,7 +39,7 @@ namespace gz::common::testing /// /// For CMake builds, it is expected that this is injected via a /// buildsystem define of TESTING_PROJECT_SOURCE_DIR. -/// This is done automatically for tests using ign-cmake's ign_build_tests +/// This is done automatically for tests using gz-cmake's ign_build_tests /// /// For Bazel builds, it is expected to be empty constexpr char kTestingProjectSourceDir[] = TESTING_PROJECT_SOURCE_DIR; @@ -151,7 +151,7 @@ TestPathFactory( ////////////////////////////////////////////////// /// \brief Get the path to a file in the project source tree /// -/// Example: to get ign-common/test/data/box.dae +/// Example: to get gz-common/test/data/box.dae /// SourceFile("test", "data", "box.dae"); /// /// \param[in] args Relative path to the source file @@ -170,7 +170,7 @@ std::string SourceFile(Args const &... args) ////////////////////////////////////////////////// /// \brief Get the path to a file in the project test directory tree /// -/// Example: to get ign-common/test/data/box.dae +/// Example: to get gz-common/test/data/box.dae /// TestFile("data", "box.dae"); /// /// \param[in] args Path to the file, relative to the test directory diff --git a/tutorials.md.in b/tutorials.md.in index fa11b3866..3ab8c2498 100644 --- a/tutorials.md.in +++ b/tutorials.md.in @@ -1,8 +1,8 @@ \page tutorials Tutorials -Welcome to the Ignition @IGN_DESIGNATION_CAP@ tutorials. These tutorials +Welcome to the Gazebo @IGN_DESIGNATION_CAP@ tutorials. These tutorials will guide you through the process of understanding the capabilities of the -Ignition @IGN_DESIGNATION_CAP@ library and how to use the library effectively. +Gazebo @IGN_DESIGNATION_CAP@ library and how to use the library effectively. **The tutorials** diff --git a/tutorials/hw-encoding.md b/tutorials/hw-encoding.md index 50549b094..14be0a219 100644 --- a/tutorials/hw-encoding.md +++ b/tutorials/hw-encoding.md @@ -291,5 +291,5 @@ which jobs of the other users are using NVEnc. There is a workaround removing this artificial limit - patching the binary blob drivers using https://github.com/keylase/nvidia-patch . This is an unofficial -patch that is not supported by NVidia or the Ignition developers. It is up to +patch that is not supported by NVidia or the Gazebo developers. It is up to you if you can and want to do that. And there is no guarantee it will work forever. diff --git a/tutorials/install.md b/tutorials/install.md index c7f6762e9..ab0e3d8df 100644 --- a/tutorials/install.md +++ b/tutorials/install.md @@ -3,7 +3,7 @@ Next Tutorial: \ref profiler These instructions are for installing only Gazebo Common. -If you're interested in using all the Ignition libraries, check out this [Ignition installation](https://gazebosim.org/docs/latest/install). +If you're interested in using all the Gazebo libraries, check out this [Gazebo installation](https://gazebosim.org/docs/latest/install). We recommend following the Binary Installation instructions to get up and running as quickly and painlessly as possible. @@ -13,7 +13,7 @@ The Source Installation instructions should be used if you need the very latest ## Ubuntu -On Ubuntu systems, `apt-get` can be used to install `ignition-common`: +On Ubuntu systems, `apt-get` can be used to install `gz-common`: ``` sudo apt install libignition-common<#>-dev ``` @@ -44,11 +44,11 @@ Miniconda suffices. Create if necessary, and activate a Conda environment: ``` -conda create -n ign-ws -conda activate ign-ws +conda create -n gz-ws +conda activate gz-ws ``` -Install `ignition-common`: +Install `gz-common`: ``` conda install libignition-common<#> --channel conda-forge ``` @@ -83,13 +83,13 @@ The AV component requires: ### Windows -First, follow the [ign-cmake](https://github.com/gazebosim/gz-cmake) tutorial for installing Conda, Visual Studio, CMake, etc., prerequisites, and creating a Conda environment. +First, follow the [gz-cmake](https://github.com/gazebosim/gz-cmake) tutorial for installing Conda, Visual Studio, CMake, etc., prerequisites, and creating a Conda environment. Navigate to `condabin` if necessary to use the `conda` command (i.e., if Conda is not in your `PATH` environment variable. You can find the location of `condabin` in Anaconda Prompt, `where conda`). Activate the Conda environment: ``` -conda activate ign-ws +conda activate gz-ws ``` Install prerequisites: @@ -97,7 +97,7 @@ Install prerequisites: conda install freeimage gts glib dlfcn-win32 ffmpeg --channel conda-forge ``` -Install Ignition dependencies: +Install Gazebo dependencies: You can view available versions and their dependencies: ``` @@ -120,7 +120,7 @@ conda install libignition-cmake<#> libignition-math<#> --channel conda-forge 2. Configure and build ``` - cd ign-common + cd gz-common mkdir build cd build cmake .. @@ -150,7 +150,7 @@ conda install libignition-cmake<#> libignition-math<#> --channel conda-forge 3. Configure and build ``` - cd ign-common + cd gz-common mkdir build cd build cmake .. @@ -174,7 +174,7 @@ This assumes you have created and activated a Conda environment while installing 2. Configure and build ``` - cd ign-common + cd gz-common mkdir build cd build cmake .. -DBUILD_TESTING=OFF # Optionally, -DCMAKE_INSTALL_PREFIX=path\to\install @@ -204,7 +204,7 @@ You can also generate the documentation from a clone of this repository by follo 3. Configure and build the documentation. ``` - cd ign-common + cd gz-common mkdir build cd build cmake ../ diff --git a/tutorials/profiler.md b/tutorials/profiler.md index 8162ca026..e4e3d4e5c 100644 --- a/tutorials/profiler.md +++ b/tutorials/profiler.md @@ -22,7 +22,7 @@ cmake on the targets or sources that you are interested in (described below). ### On custom example In order to use the profiler, inspection points must be added to the source code, -and the application or library must be linked to the `ignition-common::profiler` +and the application or library must be linked to the `gz-common::profiler` component. To start, download the [profiler.cc](https://github.com/gazebosim/gz-common/raw/main/examples/profiler.cc) example. @@ -59,8 +59,8 @@ enabled at compile time in order to function. ```{.cpp} cmake_minimum_required(VERSION 2.8 FATAL_ERROR) -# Find the ignition-common library -find_package(ignition-common5 QUIET REQUIRED COMPONENTS profiler) +# Find the gz-common library +find_package(gz-common5 QUIET REQUIRED COMPONENTS profiler) add_executable(profiler_example profiler.cc) target_link_libraries(profiler_example ignition-common5::profiler) @@ -94,8 +94,8 @@ find /usr | grep ign_remotery_vis /usr/<path_to>/ign_remotery_vis # Use the source path (Linux) -# Substitute the path to your ign-common source checkout -xdg-open $SOURCE_DIR/ign-common/profiler/src/Remotery/vis/index.html +# Substitute the path to your gz-common source checkout +xdg-open $SOURCE_DIR/gz-common/profiler/src/Remotery/vis/index.html # Use the installation path (Linux) # This may vary depending on where you have choosen to install @@ -105,9 +105,9 @@ xdg-open /usr/share/ignition/ignition-common5/profiler_vis/index.html open /usr/share/ignition/ignition-common5/profiler_vis/index.html ``` -### On Ignition library +### On Gazebo library -If you want to use profiler on any other ignition library, enable the profiler at compile time with ``ENABLE_PROFILER`` cmake argument. +If you want to use profiler on any other Gazebo library, enable the profiler at compile time with ``ENABLE_PROFILER`` cmake argument. When compiling with ``CMake``: ```{.sh} @@ -118,9 +118,9 @@ When compiling with ``colcon``: colcon build --cmake-args -DENABLE_PROFILER=1 ``` -Run your Ignition library then go to your ignition installation path and open the profiler browser using: +Run your Gazebo library then go to your ignition installation path and open the profiler browser using: ``` -libexec/ignition/ignition-common<N>/ign_remotery_vis +libexec/gz/gz-common<N>/ign_remotery_vis ``` If the profiler is run successfully, you should see output in a browser. Similar to this @@ -130,10 +130,10 @@ If the profiler is run successfully, you should see output in a browser. Similar ### Troubleshoot the web viewer If you see ``connection error``, there are a couple of things to double check -1. Was the profiler enabled when the project you're trying to run was compiled? Note that this isn't the case if you installed Ignition libraries from binaries, for example. You need to compile the project from source with the `ENABLE_PROFILER` variable set. -2. Are you using the correct port number in the upper left corner ``Connection Addresss: ws://127.0.0.1:1500/rmt``? Running ``ign gazebo -v 4`` will show the port number in use near the top of the outputted text. The port number will be printed out if the profiler is enabled. +1. Was the profiler enabled when the project you're trying to run was compiled? Note that this isn't the case if you installed Gazebo libraries from binaries, for example. You need to compile the project from source with the `ENABLE_PROFILER` variable set. +2. Are you using the correct port number in the upper left corner ``Connection Addresss: ws://127.0.0.1:1500/rmt``? Running ``gz sim -v 4`` will show the port number in use near the top of the outputted text. The port number will be printed out if the profiler is enabled. ```{.sh} - [Dbg] [RemoteryProfilerImpl.cc:187] Starting ign-common profiler impl: Remotery (port: 1500) + [Dbg] [RemoteryProfilerImpl.cc:187] Starting gz-common profiler impl: Remotery (port: 1500) ``` 3. Are you running the program in a separate terminal? The profiler only establishes connection if there is a program running and being actively profiled. From 4416bee895d08f2907d718fea34bbd09df6d0c88 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Tue, 28 Jun 2022 14:31:50 -0700 Subject: [PATCH 177/219] Update GoogleTest to latest version (#361) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove old gtest version * Add new vendored Googletest version * CMake updates for new googletest version * Remove all gtest_main functions * Update test/CMakeLists.txt Signed-off-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Alejandro HernΓ‘ndez Cordero <ahcorde@gmail.com> --- CMakeLists.txt | 6 +- src/CMakeLists.txt | 3 +- test/CMakeLists.txt | 15 +- test/gtest/cmake/Config.cmake.in | 9 - test/gtest/cmake/gtest.pc.in | 10 - test/gtest/cmake/gtest_main.pc.in | 11 - test/gtest/cmake/internal_utils.cmake | 358 -- test/gtest/cmake/libgtest.la.in | 21 - test/gtest/gtest-1.10.0.diff | 15 - .../include/gtest/gtest-param-test.h.pump | 501 -- .../include/gtest/internal/gtest-linked_ptr.h | 243 - .../internal/gtest-param-util-generated.h | 5139 ----------------- .../gtest-param-util-generated.h.pump | 279 - .../include/gtest/internal/gtest-tuple.h | 1020 ---- .../include/gtest/internal/gtest-tuple.h.pump | 347 -- .../include/gtest/internal/gtest-type-util.h | 3335 ----------- .../gtest/internal/gtest-type-util.h.pump | 302 - test/gtest_vendor/CMakeLists.txt | 11 + test/gtest_vendor/LICENSE | 28 + test/gtest_vendor/gtest_vendor_version | 8 + .../include/gtest/gtest-assertion-result.h | 237 + .../include/gtest/gtest-death-test.h | 118 +- .../include/gtest/gtest-matchers.h | 480 +- .../include/gtest/gtest-message.h | 34 +- .../include/gtest/gtest-param-test.h | 105 +- .../include/gtest/gtest-printers.h | 724 ++- .../include/gtest/gtest-spi.h | 138 +- .../include/gtest/gtest-test-part.h | 20 +- .../include/gtest/gtest-typed-test.h | 95 +- .../include/gtest/gtest.h | 623 +- .../include/gtest/gtest_pred_impl.h | 206 +- .../include/gtest/gtest_prod.h | 15 +- .../include/gtest/internal/custom/README.md | 12 - .../gtest/internal/custom/gtest-port.h | 6 +- .../gtest/internal/custom/gtest-printers.h | 6 +- .../include/gtest/internal/custom/gtest.h | 6 +- .../internal/gtest-death-test-internal.h | 80 +- .../include/gtest/internal/gtest-filepath.h | 25 +- .../include/gtest/internal/gtest-internal.h | 690 ++- .../include/gtest/internal/gtest-param-util.h | 235 +- .../include/gtest/internal/gtest-port-arch.h | 111 +- .../include/gtest/internal/gtest-port.h | 1250 ++-- .../include/gtest/internal/gtest-string.h | 30 +- .../include/gtest/internal/gtest-type-util.h | 186 + test/{gtest => gtest_vendor}/src/gtest-all.cc | 3 +- .../src/gtest-assertion-result.cc | 77 + .../src/gtest-death-test.cc | 573 +- .../src/gtest-filepath.cc | 124 +- .../src/gtest-internal-inl.h | 291 +- .../src/gtest-matchers.cc | 33 +- .../{gtest => gtest_vendor}/src/gtest-port.cc | 415 +- .../src/gtest-printers.cc | 279 +- .../src/gtest-test-part.cc | 25 +- .../src/gtest-typed-test.cc | 28 +- test/{gtest => gtest_vendor}/src/gtest.cc | 2574 +++++---- .../{gtest => gtest_vendor}/src/gtest_main.cc | 14 +- test/integration/CMakeLists.txt | 1 + test/performance/CMakeLists.txt | 3 +- test/plugins/CMakeLists.txt | 6 - testing/src/CMakeTestPaths_TEST.cc | 7 - 60 files changed, 5843 insertions(+), 15703 deletions(-) delete mode 100644 test/gtest/cmake/Config.cmake.in delete mode 100644 test/gtest/cmake/gtest.pc.in delete mode 100644 test/gtest/cmake/gtest_main.pc.in delete mode 100644 test/gtest/cmake/internal_utils.cmake delete mode 100644 test/gtest/cmake/libgtest.la.in delete mode 100644 test/gtest/gtest-1.10.0.diff delete mode 100644 test/gtest/include/gtest/gtest-param-test.h.pump delete mode 100644 test/gtest/include/gtest/internal/gtest-linked_ptr.h delete mode 100644 test/gtest/include/gtest/internal/gtest-param-util-generated.h delete mode 100644 test/gtest/include/gtest/internal/gtest-param-util-generated.h.pump delete mode 100644 test/gtest/include/gtest/internal/gtest-tuple.h delete mode 100644 test/gtest/include/gtest/internal/gtest-tuple.h.pump delete mode 100644 test/gtest/include/gtest/internal/gtest-type-util.h delete mode 100644 test/gtest/include/gtest/internal/gtest-type-util.h.pump create mode 100644 test/gtest_vendor/CMakeLists.txt create mode 100644 test/gtest_vendor/LICENSE create mode 100644 test/gtest_vendor/gtest_vendor_version create mode 100644 test/gtest_vendor/include/gtest/gtest-assertion-result.h rename test/{gtest => gtest_vendor}/include/gtest/gtest-death-test.h (79%) rename test/{gtest => gtest_vendor}/include/gtest/gtest-matchers.h (62%) rename test/{gtest => gtest_vendor}/include/gtest/gtest-message.h (89%) rename test/{gtest => gtest_vendor}/include/gtest/gtest-param-test.h (91%) rename test/{gtest => gtest_vendor}/include/gtest/gtest-printers.h (62%) rename test/{gtest => gtest_vendor}/include/gtest/gtest-spi.h (61%) rename test/{gtest => gtest_vendor}/include/gtest/gtest-test-part.h (92%) rename test/{gtest => gtest_vendor}/include/gtest/gtest-typed-test.h (87%) rename test/{gtest => gtest_vendor}/include/gtest/gtest.h (84%) rename test/{gtest => gtest_vendor}/include/gtest/gtest_pred_impl.h (61%) rename test/{gtest => gtest_vendor}/include/gtest/gtest_prod.h (88%) rename test/{gtest => gtest_vendor}/include/gtest/internal/custom/README.md (75%) rename test/{gtest => gtest_vendor}/include/gtest/internal/custom/gtest-port.h (89%) rename test/{gtest => gtest_vendor}/include/gtest/internal/custom/gtest-printers.h (90%) rename test/{gtest => gtest_vendor}/include/gtest/internal/custom/gtest.h (90%) rename test/{gtest => gtest_vendor}/include/gtest/internal/gtest-death-test-internal.h (86%) rename test/{gtest => gtest_vendor}/include/gtest/internal/gtest-filepath.h (93%) rename test/{gtest => gtest_vendor}/include/gtest/internal/gtest-internal.h (69%) rename test/{gtest => gtest_vendor}/include/gtest/internal/gtest-param-util.h (83%) rename test/{gtest => gtest_vendor}/include/gtest/internal/gtest-port-arch.h (56%) rename test/{gtest => gtest_vendor}/include/gtest/internal/gtest-port.h (68%) rename test/{gtest => gtest_vendor}/include/gtest/internal/gtest-string.h (89%) create mode 100644 test/gtest_vendor/include/gtest/internal/gtest-type-util.h rename test/{gtest => gtest_vendor}/src/gtest-all.cc (98%) create mode 100644 test/gtest_vendor/src/gtest-assertion-result.cc rename test/{gtest => gtest_vendor}/src/gtest-death-test.cc (80%) rename test/{gtest => gtest_vendor}/src/gtest-filepath.cc (85%) rename test/{gtest => gtest_vendor}/src/gtest-internal-inl.h (85%) rename test/{gtest => gtest_vendor}/src/gtest-matchers.cc (75%) rename test/{gtest => gtest_vendor}/src/gtest-port.cc (82%) rename test/{gtest => gtest_vendor}/src/gtest-printers.cc (62%) rename test/{gtest => gtest_vendor}/src/gtest-test-part.cc (84%) rename test/{gtest => gtest_vendor}/src/gtest-typed-test.cc (88%) rename test/{gtest => gtest_vendor}/src/gtest.cc (72%) rename test/{gtest => gtest_vendor}/src/gtest_main.cc (92%) diff --git a/CMakeLists.txt b/CMakeLists.txt index e6fb77471..7436bf502 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,9 @@ set(GZ_CMAKE_VER ${gz-cmake3_VERSION_MAJOR}) #============================================================================ # Configure the project #============================================================================ +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + gz_configure_project( REPLACE_IGNITION_INCLUDE_PATH gz/common VERSION_SUFFIX pre1) @@ -22,9 +25,6 @@ gz_configure_project( #============================================================================ # Set project-specific options #============================================================================ -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - #-------------------------------------- # Option: Should Windows test symlinking? if(WIN32) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5ee4582ac..64748f060 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -4,8 +4,7 @@ gz_get_libsources_and_unittests(sources gtest_sources) # Create the library target gz_create_core_library( - SOURCES ${sources} - CXX_STANDARD 17) + SOURCES ${sources}) if (CMAKE_CXX_COMPILER_ID STREQUAL GNU) set(CXX_FILESYSTEM_LIBRARIES stdc++fs) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 307dcf48f..e0d359f1a 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,17 +1,4 @@ -include_directories( - ${PROJECT_SOURCE_DIR}/test/gtest/include - ${PROJECT_SOURCE_DIR}/test/gtest - ${PROJECT_SOURCE_DIR}/test -) - -# Build gtest -add_library(gtest STATIC gtest/src/gtest-all.cc) -add_library(gtest_main STATIC gtest/src/gtest_main.cc) - -target_link_libraries(gtest_main gtest) -set(GTEST_LIBRARY "${PROJECT_BINARY_DIR}/test/libgtest.a") -set(GTEST_MAIN_LIBRARY "${PROJECT_BINARY_DIR}/test/libgtest_main.a") - +add_subdirectory(gtest_vendor) add_subdirectory(integration) add_subdirectory(performance) add_subdirectory(regression) diff --git a/test/gtest/cmake/Config.cmake.in b/test/gtest/cmake/Config.cmake.in deleted file mode 100644 index 12be4498b..000000000 --- a/test/gtest/cmake/Config.cmake.in +++ /dev/null @@ -1,9 +0,0 @@ -@PACKAGE_INIT@ -include(CMakeFindDependencyMacro) -if (@GTEST_HAS_PTHREAD@) - set(THREADS_PREFER_PTHREAD_FLAG @THREADS_PREFER_PTHREAD_FLAG@) - find_dependency(Threads) -endif() - -include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake") -check_required_components("@project_name@") diff --git a/test/gtest/cmake/gtest.pc.in b/test/gtest/cmake/gtest.pc.in deleted file mode 100644 index 9aae29e26..000000000 --- a/test/gtest/cmake/gtest.pc.in +++ /dev/null @@ -1,10 +0,0 @@ -prefix=${pcfiledir}/../.. -libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ -includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ - -Name: gtest -Description: GoogleTest (without main() function) -Version: @PROJECT_VERSION@ -URL: https://github.com/google/googletest -Libs: -L${libdir} -lgtest @CMAKE_THREAD_LIBS_INIT@ -Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ @CMAKE_THREAD_LIBS_INIT@ diff --git a/test/gtest/cmake/gtest_main.pc.in b/test/gtest/cmake/gtest_main.pc.in deleted file mode 100644 index 915f2973a..000000000 --- a/test/gtest/cmake/gtest_main.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=${pcfiledir}/../.. -libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ -includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ - -Name: gtest_main -Description: GoogleTest (with main() function) -Version: @PROJECT_VERSION@ -URL: https://github.com/google/googletest -Requires: gtest -Libs: -L${libdir} -lgtest_main @CMAKE_THREAD_LIBS_INIT@ -Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ @CMAKE_THREAD_LIBS_INIT@ diff --git a/test/gtest/cmake/internal_utils.cmake b/test/gtest/cmake/internal_utils.cmake deleted file mode 100644 index 2f70f0b08..000000000 --- a/test/gtest/cmake/internal_utils.cmake +++ /dev/null @@ -1,358 +0,0 @@ -# Defines functions and macros useful for building Google Test and -# Google Mock. -# -# Note: -# -# - This file will be run twice when building Google Mock (once via -# Google Test's CMakeLists.txt, and once via Google Mock's). -# Therefore it shouldn't have any side effects other than defining -# the functions and macros. -# -# - The functions/macros defined in this file may depend on Google -# Test and Google Mock's option() definitions, and thus must be -# called *after* the options have been defined. - -if (POLICY CMP0054) - cmake_policy(SET CMP0054 NEW) -endif (POLICY CMP0054) - -# Tweaks CMake's default compiler/linker settings to suit Google Test's needs. -# -# This must be a macro(), as inside a function string() can only -# update variables in the function scope. -macro(fix_default_compiler_settings_) - if (MSVC) - # For MSVC, CMake sets certain flags to defaults we want to override. - # This replacement code is taken from sample in the CMake Wiki at - # https://gitlab.kitware.com/cmake/community/wikis/FAQ#dynamic-replace. - foreach (flag_var - CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE - CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) - if (NOT BUILD_SHARED_LIBS AND NOT gtest_force_shared_crt) - # When Google Test is built as a shared library, it should also use - # shared runtime libraries. Otherwise, it may end up with multiple - # copies of runtime library data in different modules, resulting in - # hard-to-find crashes. When it is built as a static library, it is - # preferable to use CRT as static libraries, as we don't have to rely - # on CRT DLLs being available. CMake always defaults to using shared - # CRT libraries, so we override that default here. - string(REPLACE "/MD" "-MT" ${flag_var} "${${flag_var}}") - endif() - - # We prefer more strict warning checking for building Google Test. - # Replaces /W3 with /W4 in defaults. - string(REPLACE "/W3" "/W4" ${flag_var} "${${flag_var}}") - - # Prevent D9025 warning for targets that have exception handling - # turned off (/EHs-c- flag). Where required, exceptions are explicitly - # re-enabled using the cxx_exception_flags variable. - string(REPLACE "/EHsc" "" ${flag_var} "${${flag_var}}") - endforeach() - endif() -endmacro() - -# Defines the compiler/linker flags used to build Google Test and -# Google Mock. You can tweak these definitions to suit your need. A -# variable's value is empty before it's explicitly assigned to. -macro(config_compiler_and_linker) - # Note: pthreads on MinGW is not supported, even if available - # instead, we use windows threading primitives - unset(GTEST_HAS_PTHREAD) - if (NOT gtest_disable_pthreads AND NOT MINGW) - # Defines CMAKE_USE_PTHREADS_INIT and CMAKE_THREAD_LIBS_INIT. - find_package(Threads) - if (CMAKE_USE_PTHREADS_INIT) - set(GTEST_HAS_PTHREAD ON) - endif() - endif() - - fix_default_compiler_settings_() - if (MSVC) - # Newlines inside flags variables break CMake's NMake generator. - # TODO(vladl@google.com): Add -RTCs and -RTCu to debug builds. - set(cxx_base_flags "-GS -W4 -WX -wd4251 -wd4275 -nologo -J -Zi") - set(cxx_base_flags "${cxx_base_flags} -D_UNICODE -DUNICODE -DWIN32 -D_WIN32") - set(cxx_base_flags "${cxx_base_flags} -DSTRICT -DWIN32_LEAN_AND_MEAN") - set(cxx_exception_flags "-EHsc -D_HAS_EXCEPTIONS=1") - set(cxx_no_exception_flags "-EHs-c- -D_HAS_EXCEPTIONS=0") - set(cxx_no_rtti_flags "-GR-") - # Suppress "unreachable code" warning - # http://stackoverflow.com/questions/3232669 explains the issue. - set(cxx_base_flags "${cxx_base_flags} -wd4702") - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(cxx_base_flags "-Wall -Wshadow -Werror -Wconversion") - set(cxx_exception_flags "-fexceptions") - set(cxx_no_exception_flags "-fno-exceptions") - set(cxx_strict_flags "-W -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wunused-parameter -Wcast-align -Wchar-subscripts -Winline -Wredundant-decls") - set(cxx_no_rtti_flags "-fno-rtti") - elseif (CMAKE_COMPILER_IS_GNUCXX) - set(cxx_base_flags "-Wall -Wshadow -Werror") - if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0.0) - set(cxx_base_flags "${cxx_base_flags} -Wno-error=dangling-else") - endif() - set(cxx_exception_flags "-fexceptions") - set(cxx_no_exception_flags "-fno-exceptions") - # Until version 4.3.2, GCC doesn't define a macro to indicate - # whether RTTI is enabled. Therefore we define GTEST_HAS_RTTI - # explicitly. - set(cxx_no_rtti_flags "-fno-rtti -DGTEST_HAS_RTTI=0") - set(cxx_strict_flags - "-Wextra -Wno-unused-parameter -Wno-missing-field-initializers") - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") - set(cxx_exception_flags "-features=except") - # Sun Pro doesn't provide macros to indicate whether exceptions and - # RTTI are enabled, so we define GTEST_HAS_* explicitly. - set(cxx_no_exception_flags "-features=no%except -DGTEST_HAS_EXCEPTIONS=0") - set(cxx_no_rtti_flags "-features=no%rtti -DGTEST_HAS_RTTI=0") - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "VisualAge" OR - CMAKE_CXX_COMPILER_ID STREQUAL "XL") - # CMake 2.8 changes Visual Age's compiler ID to "XL". - set(cxx_exception_flags "-qeh") - set(cxx_no_exception_flags "-qnoeh") - # Until version 9.0, Visual Age doesn't define a macro to indicate - # whether RTTI is enabled. Therefore we define GTEST_HAS_RTTI - # explicitly. - set(cxx_no_rtti_flags "-qnortti -DGTEST_HAS_RTTI=0") - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "HP") - set(cxx_base_flags "-AA -mt") - set(cxx_exception_flags "-DGTEST_HAS_EXCEPTIONS=1") - set(cxx_no_exception_flags "+noeh -DGTEST_HAS_EXCEPTIONS=0") - # RTTI can not be disabled in HP aCC compiler. - set(cxx_no_rtti_flags "") - endif() - - # The pthreads library is available and allowed? - if (DEFINED GTEST_HAS_PTHREAD) - set(GTEST_HAS_PTHREAD_MACRO "-DGTEST_HAS_PTHREAD=1") - else() - set(GTEST_HAS_PTHREAD_MACRO "-DGTEST_HAS_PTHREAD=0") - endif() - set(cxx_base_flags "${cxx_base_flags} ${GTEST_HAS_PTHREAD_MACRO}") - - # For building gtest's own tests and samples. - set(cxx_exception "${cxx_base_flags} ${cxx_exception_flags}") - set(cxx_no_exception - "${CMAKE_CXX_FLAGS} ${cxx_base_flags} ${cxx_no_exception_flags}") - set(cxx_default "${cxx_exception}") - set(cxx_no_rtti "${cxx_default} ${cxx_no_rtti_flags}") - - # For building the gtest libraries. - set(cxx_strict "${cxx_default} ${cxx_strict_flags}") -endmacro() - -# Defines the gtest & gtest_main libraries. User tests should link -# with one of them. -function(cxx_library_with_type name type cxx_flags) - # type can be either STATIC or SHARED to denote a static or shared library. - # ARGN refers to additional arguments after 'cxx_flags'. - add_library(${name} ${type} ${ARGN}) - set_target_properties(${name} - PROPERTIES - COMPILE_FLAGS "${cxx_flags}") - # Generate debug library name with a postfix. - set_target_properties(${name} - PROPERTIES - DEBUG_POSTFIX "d") - # Set the output directory for build artifacts - set_target_properties(${name} - PROPERTIES - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" - ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" - PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") - # make PDBs match library name - get_target_property(pdb_debug_postfix ${name} DEBUG_POSTFIX) - set_target_properties(${name} - PROPERTIES - PDB_NAME "${name}" - PDB_NAME_DEBUG "${name}${pdb_debug_postfix}" - COMPILE_PDB_NAME "${name}" - COMPILE_PDB_NAME_DEBUG "${name}${pdb_debug_postfix}") - - if (BUILD_SHARED_LIBS OR type STREQUAL "SHARED") - set_target_properties(${name} - PROPERTIES - COMPILE_DEFINITIONS "GTEST_CREATE_SHARED_LIBRARY=1") - if (NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11") - target_compile_definitions(${name} INTERFACE - $<INSTALL_INTERFACE:GTEST_LINKED_AS_SHARED_LIBRARY=1>) - endif() - endif() - if (DEFINED GTEST_HAS_PTHREAD) - if ("${CMAKE_VERSION}" VERSION_LESS "3.1.0") - set(threads_spec ${CMAKE_THREAD_LIBS_INIT}) - else() - set(threads_spec Threads::Threads) - endif() - target_link_libraries(${name} PUBLIC ${threads_spec}) - endif() -endfunction() - -######################################################################## -# -# Helper functions for creating build targets. - -function(cxx_shared_library name cxx_flags) - cxx_library_with_type(${name} SHARED "${cxx_flags}" ${ARGN}) -endfunction() - -function(cxx_library name cxx_flags) - cxx_library_with_type(${name} "" "${cxx_flags}" ${ARGN}) -endfunction() - -# cxx_executable_with_flags(name cxx_flags libs srcs...) -# -# creates a named C++ executable that depends on the given libraries and -# is built from the given source files with the given compiler flags. -function(cxx_executable_with_flags name cxx_flags libs) - add_executable(${name} ${ARGN}) - if (MSVC) - # BigObj required for tests. - set(cxx_flags "${cxx_flags} -bigobj") - endif() - if (cxx_flags) - set_target_properties(${name} - PROPERTIES - COMPILE_FLAGS "${cxx_flags}") - endif() - if (BUILD_SHARED_LIBS) - set_target_properties(${name} - PROPERTIES - COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") - endif() - # To support mixing linking in static and dynamic libraries, link each - # library in with an extra call to target_link_libraries. - foreach (lib "${libs}") - target_link_libraries(${name} ${lib}) - endforeach() -endfunction() - -# cxx_executable(name dir lib srcs...) -# -# creates a named target that depends on the given libs and is built -# from the given source files. dir/name.cc is implicitly included in -# the source file list. -function(cxx_executable name dir libs) - cxx_executable_with_flags( - ${name} "${cxx_default}" "${libs}" "${dir}/${name}.cc" ${ARGN}) -endfunction() - -# Sets PYTHONINTERP_FOUND and PYTHON_EXECUTABLE. -find_package(PythonInterp) - -# cxx_test_with_flags(name cxx_flags libs srcs...) -# -# creates a named C++ test that depends on the given libs and is built -# from the given source files with the given compiler flags. -function(cxx_test_with_flags name cxx_flags libs) - cxx_executable_with_flags(${name} "${cxx_flags}" "${libs}" ${ARGN}) - if (WIN32 OR MINGW) - add_test(NAME ${name} - COMMAND "powershell" "-Command" "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/RunTest.ps1" "$<TARGET_FILE:${name}>") - else() - add_test(NAME ${name} - COMMAND "$<TARGET_FILE:${name}>") - endif() -endfunction() - -# cxx_test(name libs srcs...) -# -# creates a named test target that depends on the given libs and is -# built from the given source files. Unlike cxx_test_with_flags, -# test/name.cc is already implicitly included in the source file list. -function(cxx_test name libs) - cxx_test_with_flags("${name}" "${cxx_default}" "${libs}" - "test/${name}.cc" ${ARGN}) -endfunction() - -# py_test(name) -# -# creates a Python test with the given name whose main module is in -# test/name.py. It does nothing if Python is not installed. -function(py_test name) - if (PYTHONINTERP_FOUND) - if ("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" VERSION_GREATER 3.1) - if (CMAKE_CONFIGURATION_TYPES) - # Multi-configuration build generators as for Visual Studio save - # output in a subdirectory of CMAKE_CURRENT_BINARY_DIR (Debug, - # Release etc.), so we have to provide it here. - if (WIN32 OR MINGW) - add_test(NAME ${name} - COMMAND powershell -Command ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/RunTest.ps1 - ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py - --build_dir=${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG> ${ARGN}) - else() - add_test(NAME ${name} - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py - --build_dir=${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG> ${ARGN}) - endif() - else (CMAKE_CONFIGURATION_TYPES) - # Single-configuration build generators like Makefile generators - # don't have subdirs below CMAKE_CURRENT_BINARY_DIR. - if (WIN32 OR MINGW) - add_test(NAME ${name} - COMMAND powershell -Command ${CMAKE_CURRENT_BINARY_DIR}/RunTest.ps1 - ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py - --build_dir=${CMAKE_CURRENT_BINARY_DIR} ${ARGN}) - else() - add_test(NAME ${name} - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py - --build_dir=${CMAKE_CURRENT_BINARY_DIR} ${ARGN}) - endif() - endif (CMAKE_CONFIGURATION_TYPES) - else() - # ${CMAKE_CURRENT_BINARY_DIR} is known at configuration time, so we can - # directly bind it from cmake. ${CTEST_CONFIGURATION_TYPE} is known - # only at ctest runtime (by calling ctest -c <Configuration>), so - # we have to escape $ to delay variable substitution here. - if (WIN32 OR MINGW) - add_test(NAME ${name} - COMMAND powershell -Command ${CMAKE_CURRENT_BINARY_DIR}/RunTest.ps1 - ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py - --build_dir=${CMAKE_CURRENT_BINARY_DIR}/\${CTEST_CONFIGURATION_TYPE} ${ARGN}) - else() - add_test(NAME ${name} - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py - --build_dir=${CMAKE_CURRENT_BINARY_DIR}/\${CTEST_CONFIGURATION_TYPE} ${ARGN}) - endif() - endif() - endif(PYTHONINTERP_FOUND) -endfunction() - -# install_project(targets...) -# -# Installs the specified targets and configures the associated pkgconfig files. -function(install_project) - if(INSTALL_GTEST) - install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") - # Install the project targets. - install(TARGETS ${ARGN} - EXPORT ${targets_export_name} - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") - if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") - # Install PDBs - foreach(t ${ARGN}) - get_target_property(t_pdb_name ${t} COMPILE_PDB_NAME) - get_target_property(t_pdb_name_debug ${t} COMPILE_PDB_NAME_DEBUG) - get_target_property(t_pdb_output_directory ${t} PDB_OUTPUT_DIRECTORY) - install(FILES - "${t_pdb_output_directory}/\${CMAKE_INSTALL_CONFIG_NAME}/$<$<CONFIG:Debug>:${t_pdb_name_debug}>$<$<NOT:$<CONFIG:Debug>>:${t_pdb_name}>.pdb" - DESTINATION ${CMAKE_INSTALL_LIBDIR} - OPTIONAL) - endforeach() - endif() - # Configure and install pkgconfig files. - foreach(t ${ARGN}) - set(configured_pc "${generated_dir}/${t}.pc") - configure_file("${PROJECT_SOURCE_DIR}/cmake/${t}.pc.in" - "${configured_pc}" @ONLY) - install(FILES "${configured_pc}" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - endforeach() - endif() -endfunction() diff --git a/test/gtest/cmake/libgtest.la.in b/test/gtest/cmake/libgtest.la.in deleted file mode 100644 index 840c83885..000000000 --- a/test/gtest/cmake/libgtest.la.in +++ /dev/null @@ -1,21 +0,0 @@ -# libgtest.la - a libtool library file -# Generated by libtool (GNU libtool) 2.4.6 - -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# Names of this library. -library_names='libgtest.so' - -# Is this an already installed library? -installed=yes - -# Should we warn about portability when linking against -modules? -shouldnotlink=no - -# Files to dlopen/dlpreopen -dlopen='' -dlpreopen='' - -# Directory that this library needs to be installed in: -libdir='@CMAKE_INSTALL_FULL_LIBDIR@' diff --git a/test/gtest/gtest-1.10.0.diff b/test/gtest/gtest-1.10.0.diff deleted file mode 100644 index 9df3ab210..000000000 --- a/test/gtest/gtest-1.10.0.diff +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/test/gtest/src/gtest.cc b/test/gtest/src/gtest.cc -index a5b4e5a..1dff1a6 100644 ---- a/test/gtest/src/gtest.cc -+++ b/test/gtest/src/gtest.cc -@@ -34,6 +34,10 @@ - #include "gtest/internal/custom/gtest.h" - #include "gtest/gtest-spi.h" - -+#ifndef _WIN32 -+#pragma GCC system_header -+#endif -+ - #include <ctype.h> - #include <math.h> - #include <stdarg.h> diff --git a/test/gtest/include/gtest/gtest-param-test.h.pump b/test/gtest/include/gtest/gtest-param-test.h.pump deleted file mode 100644 index 7b7243f34..000000000 --- a/test/gtest/include/gtest/gtest-param-test.h.pump +++ /dev/null @@ -1,501 +0,0 @@ -$$ -*- mode: c++; -*- -$var n = 50 $$ Maximum length of Values arguments we want to support. -$var maxtuple = 10 $$ Maximum number of Combine arguments we want to support. -// Copyright 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: vladl@google.com (Vlad Losev) -// -// Macros and functions for implementing parameterized tests -// in Google C++ Testing and Mocking Framework (Google Test) -// -// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! -// -#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ -#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ - - -// Value-parameterized tests allow you to test your code with different -// parameters without writing multiple copies of the same test. -// -// Here is how you use value-parameterized tests: - -#if 0 - -// To write value-parameterized tests, first you should define a fixture -// class. It is usually derived from testing::TestWithParam<T> (see below for -// another inheritance scheme that's sometimes useful in more complicated -// class hierarchies), where the type of your parameter values. -// TestWithParam<T> is itself derived from testing::Test. T can be any -// copyable type. If it's a raw pointer, you are responsible for managing the -// lifespan of the pointed values. - -class FooTest : public ::testing::TestWithParam<const char*> { - // You can implement all the usual class fixture members here. -}; - -// Then, use the TEST_P macro to define as many parameterized tests -// for this fixture as you want. The _P suffix is for "parameterized" -// or "pattern", whichever you prefer to think. - -TEST_P(FooTest, DoesBlah) { - // Inside a test, access the test parameter with the GetParam() method - // of the TestWithParam<T> class: - EXPECT_TRUE(foo.Blah(GetParam())); - ... -} - -TEST_P(FooTest, HasBlahBlah) { - ... -} - -// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test -// case with any set of parameters you want. Google Test defines a number -// of functions for generating test parameters. They return what we call -// (surprise!) parameter generators. Here is a summary of them, which -// are all in the testing namespace: -// -// -// Range(begin, end [, step]) - Yields values {begin, begin+step, -// begin+step+step, ...}. The values do not -// include end. step defaults to 1. -// Values(v1, v2, ..., vN) - Yields values {v1, v2, ..., vN}. -// ValuesIn(container) - Yields values from a C-style array, an STL -// ValuesIn(begin,end) container, or an iterator range [begin, end). -// Bool() - Yields sequence {false, true}. -// Combine(g1, g2, ..., gN) - Yields all combinations (the Cartesian product -// for the math savvy) of the values generated -// by the N generators. -// -// For more details, see comments at the definitions of these functions below -// in this file. -// -// The following statement will instantiate tests from the FooTest test case -// each with parameter values "meeny", "miny", and "moe". - -INSTANTIATE_TEST_CASE_P(InstantiationName, - FooTest, - Values("meeny", "miny", "moe")); - -// To distinguish different instances of the pattern, (yes, you -// can instantiate it more then once) the first argument to the -// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the -// actual test case name. Remember to pick unique prefixes for different -// instantiations. The tests from the instantiation above will have -// these names: -// -// * InstantiationName/FooTest.DoesBlah/0 for "meeny" -// * InstantiationName/FooTest.DoesBlah/1 for "miny" -// * InstantiationName/FooTest.DoesBlah/2 for "moe" -// * InstantiationName/FooTest.HasBlahBlah/0 for "meeny" -// * InstantiationName/FooTest.HasBlahBlah/1 for "miny" -// * InstantiationName/FooTest.HasBlahBlah/2 for "moe" -// -// You can use these names in --gtest_filter. -// -// This statement will instantiate all tests from FooTest again, each -// with parameter values "cat" and "dog": - -const char* pets[] = {"cat", "dog"}; -INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); - -// The tests from the instantiation above will have these names: -// -// * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat" -// * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog" -// * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat" -// * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog" -// -// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests -// in the given test case, whether their definitions come before or -// AFTER the INSTANTIATE_TEST_CASE_P statement. -// -// Please also note that generator expressions (including parameters to the -// generators) are evaluated in InitGoogleTest(), after main() has started. -// This allows the user on one hand, to adjust generator parameters in order -// to dynamically determine a set of tests to run and on the other hand, -// give the user a chance to inspect the generated tests with Google Test -// reflection API before RUN_ALL_TESTS() is executed. -// -// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc -// for more examples. -// -// In the future, we plan to publish the API for defining new parameter -// generators. But for now this interface remains part of the internal -// implementation and is subject to change. -// -// -// A parameterized test fixture must be derived from testing::Test and from -// testing::WithParamInterface<T>, where T is the type of the parameter -// values. Inheriting from TestWithParam<T> satisfies that requirement because -// TestWithParam<T> inherits from both Test and WithParamInterface. In more -// complicated hierarchies, however, it is occasionally useful to inherit -// separately from Test and WithParamInterface. For example: - -class BaseTest : public ::testing::Test { - // You can inherit all the usual members for a non-parameterized test - // fixture here. -}; - -class DerivedTest : public BaseTest, public ::testing::WithParamInterface<int> { - // The usual test fixture members go here too. -}; - -TEST_F(BaseTest, HasFoo) { - // This is an ordinary non-parameterized test. -} - -TEST_P(DerivedTest, DoesBlah) { - // GetParam works just the same here as if you inherit from TestWithParam. - EXPECT_TRUE(foo.Blah(GetParam())); -} - -#endif // 0 - -#include "gtest/internal/gtest-port.h" - -#if !GTEST_OS_SYMBIAN -# include <utility> -#endif - -#include "gtest/internal/gtest-internal.h" -#include "gtest/internal/gtest-param-util.h" -#include "gtest/internal/gtest-param-util-generated.h" - -namespace testing { - -// Functions producing parameter generators. -// -// Google Test uses these generators to produce parameters for value- -// parameterized tests. When a parameterized test case is instantiated -// with a particular generator, Google Test creates and runs tests -// for each element in the sequence produced by the generator. -// -// In the following sample, tests from test case FooTest are instantiated -// each three times with parameter values 3, 5, and 8: -// -// class FooTest : public TestWithParam<int> { ... }; -// -// TEST_P(FooTest, TestThis) { -// } -// TEST_P(FooTest, TestThat) { -// } -// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8)); -// - -// Range() returns generators providing sequences of values in a range. -// -// Synopsis: -// Range(start, end) -// - returns a generator producing a sequence of values {start, start+1, -// start+2, ..., }. -// Range(start, end, step) -// - returns a generator producing a sequence of values {start, start+step, -// start+step+step, ..., }. -// Notes: -// * The generated sequences never include end. For example, Range(1, 5) -// returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2) -// returns a generator producing {1, 3, 5, 7}. -// * start and end must have the same type. That type may be any integral or -// floating-point type or a user defined type satisfying these conditions: -// * It must be assignable (have operator=() defined). -// * It must have operator+() (operator+(int-compatible type) for -// two-operand version). -// * It must have operator<() defined. -// Elements in the resulting sequences will also have that type. -// * Condition start < end must be satisfied in order for resulting sequences -// to contain any elements. -// -template <typename T, typename IncrementT> -internal::ParamGenerator<T> Range(T start, T end, IncrementT step) { - return internal::ParamGenerator<T>( - new internal::RangeGenerator<T, IncrementT>(start, end, step)); -} - -template <typename T> -internal::ParamGenerator<T> Range(T start, T end) { - return Range(start, end, 1); -} - -// ValuesIn() function allows generation of tests with parameters coming from -// a container. -// -// Synopsis: -// ValuesIn(const T (&array)[N]) -// - returns a generator producing sequences with elements from -// a C-style array. -// ValuesIn(const Container& container) -// - returns a generator producing sequences with elements from -// an STL-style container. -// ValuesIn(Iterator begin, Iterator end) -// - returns a generator producing sequences with elements from -// a range [begin, end) defined by a pair of STL-style iterators. These -// iterators can also be plain C pointers. -// -// Please note that ValuesIn copies the values from the containers -// passed in and keeps them to generate tests in RUN_ALL_TESTS(). -// -// Examples: -// -// This instantiates tests from test case StringTest -// each with C-string values of "foo", "bar", and "baz": -// -// const char* strings[] = {"foo", "bar", "baz"}; -// INSTANTIATE_TEST_CASE_P(StringSequence, StringTest, ValuesIn(strings)); -// -// This instantiates tests from test case StlStringTest -// each with STL strings with values "a" and "b": -// -// ::std::vector< ::std::string> GetParameterStrings() { -// ::std::vector< ::std::string> v; -// v.push_back("a"); -// v.push_back("b"); -// return v; -// } -// -// INSTANTIATE_TEST_CASE_P(CharSequence, -// StlStringTest, -// ValuesIn(GetParameterStrings())); -// -// -// This will also instantiate tests from CharTest -// each with parameter values 'a' and 'b': -// -// ::std::list<char> GetParameterChars() { -// ::std::list<char> list; -// list.push_back('a'); -// list.push_back('b'); -// return list; -// } -// ::std::list<char> l = GetParameterChars(); -// INSTANTIATE_TEST_CASE_P(CharSequence2, -// CharTest, -// ValuesIn(l.begin(), l.end())); -// -template <typename ForwardIterator> -internal::ParamGenerator< - typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type> -ValuesIn(ForwardIterator begin, ForwardIterator end) { - typedef typename ::testing::internal::IteratorTraits<ForwardIterator> - ::value_type ParamType; - return internal::ParamGenerator<ParamType>( - new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end)); -} - -template <typename T, size_t N> -internal::ParamGenerator<T> ValuesIn(const T (&array)[N]) { - return ValuesIn(array, array + N); -} - -template <class Container> -internal::ParamGenerator<typename Container::value_type> ValuesIn( - const Container& container) { - return ValuesIn(container.begin(), container.end()); -} - -// Values() allows generating tests from explicitly specified list of -// parameters. -// -// Synopsis: -// Values(T v1, T v2, ..., T vN) -// - returns a generator producing sequences with elements v1, v2, ..., vN. -// -// For example, this instantiates tests from test case BarTest each -// with values "one", "two", and "three": -// -// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three")); -// -// This instantiates tests from test case BazTest each with values 1, 2, 3.5. -// The exact type of values will depend on the type of parameter in BazTest. -// -// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); -// -// Currently, Values() supports from 1 to $n parameters. -// -$range i 1..n -$for i [[ -$range j 1..i - -template <$for j, [[typename T$j]]> -internal::ValueArray$i<$for j, [[T$j]]> Values($for j, [[T$j v$j]]) { - return internal::ValueArray$i<$for j, [[T$j]]>($for j, [[v$j]]); -} - -]] - -// Bool() allows generating tests with parameters in a set of (false, true). -// -// Synopsis: -// Bool() -// - returns a generator producing sequences with elements {false, true}. -// -// It is useful when testing code that depends on Boolean flags. Combinations -// of multiple flags can be tested when several Bool()'s are combined using -// Combine() function. -// -// In the following example all tests in the test case FlagDependentTest -// will be instantiated twice with parameters false and true. -// -// class FlagDependentTest : public testing::TestWithParam<bool> { -// virtual void SetUp() { -// external_flag = GetParam(); -// } -// } -// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool()); -// -inline internal::ParamGenerator<bool> Bool() { - return Values(false, true); -} - -# if GTEST_HAS_COMBINE -// Combine() allows the user to combine two or more sequences to produce -// values of a Cartesian product of those sequences' elements. -// -// Synopsis: -// Combine(gen1, gen2, ..., genN) -// - returns a generator producing sequences with elements coming from -// the Cartesian product of elements from the sequences generated by -// gen1, gen2, ..., genN. The sequence elements will have a type of -// tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types -// of elements from sequences produces by gen1, gen2, ..., genN. -// -// Combine can have up to $maxtuple arguments. This number is currently limited -// by the maximum number of elements in the tuple implementation used by Google -// Test. -// -// Example: -// -// This will instantiate tests in test case AnimalTest each one with -// the parameter values tuple("cat", BLACK), tuple("cat", WHITE), -// tuple("dog", BLACK), and tuple("dog", WHITE): -// -// enum Color { BLACK, GRAY, WHITE }; -// class AnimalTest -// : public testing::TestWithParam<tuple<const char*, Color> > {...}; -// -// TEST_P(AnimalTest, AnimalLooksNice) {...} -// -// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest, -// Combine(Values("cat", "dog"), -// Values(BLACK, WHITE))); -// -// This will instantiate tests in FlagDependentTest with all variations of two -// Boolean flags: -// -// class FlagDependentTest -// : public testing::TestWithParam<tuple<bool, bool> > { -// virtual void SetUp() { -// // Assigns external_flag_1 and external_flag_2 values from the tuple. -// tie(external_flag_1, external_flag_2) = GetParam(); -// } -// }; -// -// TEST_P(FlagDependentTest, TestFeature1) { -// // Test your code using external_flag_1 and external_flag_2 here. -// } -// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest, -// Combine(Bool(), Bool())); -// -$range i 2..maxtuple -$for i [[ -$range j 1..i - -template <$for j, [[typename Generator$j]]> -internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine( - $for j, [[const Generator$j& g$j]]) { - return internal::CartesianProductHolder$i<$for j, [[Generator$j]]>( - $for j, [[g$j]]); -} - -]] -# endif // GTEST_HAS_COMBINE - -# define TEST_P(test_case_name, test_name) \ - class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ - : public test_case_name { \ - public: \ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ - virtual void TestBody(); \ - private: \ - static int AddToRegistry() { \ - ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ - GetTestCasePatternHolder<test_case_name>(\ - #test_case_name, \ - ::testing::internal::CodeLocation(\ - __FILE__, __LINE__))->AddTestPattern(\ - GTEST_STRINGIFY_(test_case_name), \ - GTEST_STRINGIFY_(test_name), \ - new ::testing::internal::TestMetaFactory< \ - GTEST_TEST_CLASS_NAME_(\ - test_case_name, test_name)>()); \ - return 0; \ - } \ - static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_(\ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ - }; \ - int GTEST_TEST_CLASS_NAME_(test_case_name, \ - test_name)::gtest_registering_dummy_ = \ - GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ - void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() - -// The optional last argument to INSTANTIATE_TEST_CASE_P allows the user -// to specify a function or functor that generates custom test name suffixes -// based on the test parameters. The function should accept one argument of -// type testing::TestParamInfo<class ParamType>, and return std::string. -// -// testing::PrintToStringParamName is a builtin test suffix generator that -// returns the value of testing::PrintToString(GetParam()). -// -// Note: test names must be non-empty, unique, and may only contain ASCII -// alphanumeric characters or underscore. Because PrintToString adds quotes -// to std::string and C strings, it won't work for these types. - -# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator, ...) \ - static ::testing::internal::ParamGenerator<test_case_name::ParamType> \ - gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \ - static ::std::string gtest_##prefix##test_case_name##_EvalGenerateName_( \ - const ::testing::TestParamInfo<test_case_name::ParamType>& info) { \ - return ::testing::internal::GetParamNameGen<test_case_name::ParamType> \ - (__VA_ARGS__)(info); \ - } \ - static int gtest_##prefix##test_case_name##_dummy_ GTEST_ATTRIBUTE_UNUSED_ = \ - ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ - GetTestCasePatternHolder<test_case_name>(\ - #test_case_name, \ - ::testing::internal::CodeLocation(\ - __FILE__, __LINE__))->AddTestCaseInstantiation(\ - #prefix, \ - >est_##prefix##test_case_name##_EvalGenerator_, \ - >est_##prefix##test_case_name##_EvalGenerateName_, \ - __FILE__, __LINE__) - -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ diff --git a/test/gtest/include/gtest/internal/gtest-linked_ptr.h b/test/gtest/include/gtest/internal/gtest-linked_ptr.h deleted file mode 100644 index 360294221..000000000 --- a/test/gtest/include/gtest/internal/gtest-linked_ptr.h +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright 2003 Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Authors: Dan Egnor (egnor@google.com) -// -// A "smart" pointer type with reference tracking. Every pointer to a -// particular object is kept on a circular linked list. When the last pointer -// to an object is destroyed or reassigned, the object is deleted. -// -// Used properly, this deletes the object when the last reference goes away. -// There are several caveats: -// - Like all reference counting schemes, cycles lead to leaks. -// - Each smart pointer is actually two pointers (8 bytes instead of 4). -// - Every time a pointer is assigned, the entire list of pointers to that -// object is traversed. This class is therefore NOT SUITABLE when there -// will often be more than two or three pointers to a particular object. -// - References are only tracked as long as linked_ptr<> objects are copied. -// If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS -// will happen (double deletion). -// -// A good use of this class is storing object references in STL containers. -// You can safely put linked_ptr<> in a vector<>. -// Other uses may not be as good. -// -// Note: If you use an incomplete type with linked_ptr<>, the class -// *containing* linked_ptr<> must have a constructor and destructor (even -// if they do nothing!). -// -// Bill Gibbons suggested we use something like this. -// -// Thread Safety: -// Unlike other linked_ptr implementations, in this implementation -// a linked_ptr object is thread-safe in the sense that: -// - it's safe to copy linked_ptr objects concurrently, -// - it's safe to copy *from* a linked_ptr and read its underlying -// raw pointer (e.g. via get()) concurrently, and -// - it's safe to write to two linked_ptrs that point to the same -// shared object concurrently. -// TODO(wan@google.com): rename this to safe_linked_ptr to avoid -// confusion with normal linked_ptr. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ - -#include <stdlib.h> -#include <assert.h> - -#include "gtest/internal/gtest-port.h" - -namespace testing { -namespace internal { - -// Protects copying of all linked_ptr objects. -GTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex); - -// This is used internally by all instances of linked_ptr<>. It needs to be -// a non-template class because different types of linked_ptr<> can refer to -// the same object (linked_ptr<Superclass>(obj) vs linked_ptr<Subclass>(obj)). -// So, it needs to be possible for different types of linked_ptr to participate -// in the same circular linked list, so we need a single class type here. -// -// DO NOT USE THIS CLASS DIRECTLY YOURSELF. Use linked_ptr<T>. -class linked_ptr_internal { - public: - // Create a new circle that includes only this instance. - void join_new() { - next_ = this; - } - - // Many linked_ptr operations may change p.link_ for some linked_ptr - // variable p in the same circle as this object. Therefore we need - // to prevent two such operations from occurring concurrently. - // - // Note that different types of linked_ptr objects can coexist in a - // circle (e.g. linked_ptr<Base>, linked_ptr<Derived1>, and - // linked_ptr<Derived2>). Therefore we must use a single mutex to - // protect all linked_ptr objects. This can create serious - // contention in production code, but is acceptable in a testing - // framework. - - // Join an existing circle. - void join(linked_ptr_internal const* ptr) - GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) { - MutexLock lock(&g_linked_ptr_mutex); - - linked_ptr_internal const* p = ptr; - while (p->next_ != ptr) { - assert(p->next_ != this && - "Trying to join() a linked ring we are already in. " - "Is GMock thread safety enabled?"); - p = p->next_; - } - p->next_ = this; - next_ = ptr; - } - - // Leave whatever circle we're part of. Returns true if we were the - // last member of the circle. Once this is done, you can join() another. - bool depart() - GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) { - MutexLock lock(&g_linked_ptr_mutex); - - if (next_ == this) return true; - linked_ptr_internal const* p = next_; - while (p->next_ != this) { - assert(p->next_ != next_ && - "Trying to depart() a linked ring we are not in. " - "Is GMock thread safety enabled?"); - p = p->next_; - } - p->next_ = next_; - return false; - } - - private: - mutable linked_ptr_internal const* next_; -}; - -template <typename T> -class linked_ptr { - public: - typedef T element_type; - - // Take over ownership of a raw pointer. This should happen as soon as - // possible after the object is created. - explicit linked_ptr(T* ptr = NULL) { capture(ptr); } - ~linked_ptr() { depart(); } - - // Copy an existing linked_ptr<>, adding ourselves to the list of references. - template <typename U> linked_ptr(linked_ptr<U> const& ptr) { copy(&ptr); } - linked_ptr(linked_ptr const& ptr) { // NOLINT - assert(&ptr != this); - copy(&ptr); - } - - // Assignment releases the old value and acquires the new. - template <typename U> linked_ptr& operator=(linked_ptr<U> const& ptr) { - depart(); - copy(&ptr); - return *this; - } - - linked_ptr& operator=(linked_ptr const& ptr) { - if (&ptr != this) { - depart(); - copy(&ptr); - } - return *this; - } - - // Smart pointer members. - void reset(T* ptr = NULL) { - depart(); - capture(ptr); - } - T* get() const { return value_; } - T* operator->() const { return value_; } - T& operator*() const { return *value_; } - - bool operator==(T* p) const { return value_ == p; } - bool operator!=(T* p) const { return value_ != p; } - template <typename U> - bool operator==(linked_ptr<U> const& ptr) const { - return value_ == ptr.get(); - } - template <typename U> - bool operator!=(linked_ptr<U> const& ptr) const { - return value_ != ptr.get(); - } - - private: - template <typename U> - friend class linked_ptr; - - T* value_; - linked_ptr_internal link_; - - void depart() { - if (link_.depart()) delete value_; - } - - void capture(T* ptr) { - value_ = ptr; - link_.join_new(); - } - - template <typename U> void copy(linked_ptr<U> const* ptr) { - value_ = ptr->get(); - if (value_) - link_.join(&ptr->link_); - else - link_.join_new(); - } -}; - -template<typename T> inline -bool operator==(T* ptr, const linked_ptr<T>& x) { - return ptr == x.get(); -} - -template<typename T> inline -bool operator!=(T* ptr, const linked_ptr<T>& x) { - return ptr != x.get(); -} - -// A function to convert T* into linked_ptr<T> -// Doing e.g. make_linked_ptr(new FooBarBaz<type>(arg)) is a shorter notation -// for linked_ptr<FooBarBaz<type> >(new FooBarBaz<type>(arg)) -template <typename T> -linked_ptr<T> make_linked_ptr(T* ptr) { - return linked_ptr<T>(ptr); -} - -} // namespace internal -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_ diff --git a/test/gtest/include/gtest/internal/gtest-param-util-generated.h b/test/gtest/include/gtest/internal/gtest-param-util-generated.h deleted file mode 100644 index dcf90c279..000000000 --- a/test/gtest/include/gtest/internal/gtest-param-util-generated.h +++ /dev/null @@ -1,5139 +0,0 @@ -// This file was GENERATED by command: -// pump.py gtest-param-util-generated.h.pump -// DO NOT EDIT BY HAND!!! - -// Copyright 2008 Google Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: vladl@google.com (Vlad Losev) - -// Type and function utilities for implementing parameterized tests. -// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! -// -// Currently Google Test supports at most 50 arguments in Values, -// and at most 10 arguments in Combine. Please contact -// googletestframework@googlegroups.com if you need more. -// Please note that the number of arguments to Combine is limited -// by the maximum arity of the implementation of tuple which is -// currently set at 10. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ - -#include "gtest/internal/gtest-param-util.h" -#include "gtest/internal/gtest-port.h" - -namespace testing { - -// Forward declarations of ValuesIn(), which is implemented in -// include/gtest/gtest-param-test.h. -template <typename ForwardIterator> -internal::ParamGenerator< - typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type> -ValuesIn(ForwardIterator begin, ForwardIterator end); - -template <typename T, size_t N> -internal::ParamGenerator<T> ValuesIn(const T (&array)[N]); - -template <class Container> -internal::ParamGenerator<typename Container::value_type> ValuesIn( - const Container& container); - -namespace internal { - -// Used in the Values() function to provide polymorphic capabilities. -template <typename T1> -class ValueArray1 { - public: - explicit ValueArray1(T1 v1) : v1_(v1) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray1& other); - - const T1 v1_; -}; - -template <typename T1, typename T2> -class ValueArray2 { - public: - ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray2& other); - - const T1 v1_; - const T2 v2_; -}; - -template <typename T1, typename T2, typename T3> -class ValueArray3 { - public: - ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray3& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; -}; - -template <typename T1, typename T2, typename T3, typename T4> -class ValueArray4 { - public: - ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray4& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5> -class ValueArray5 { - public: - ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4), v5_(v5) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray5& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6> -class ValueArray6 { - public: - ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2), - v3_(v3), v4_(v4), v5_(v5), v6_(v6) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray6& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7> -class ValueArray7 { - public: - ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1), - v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray7& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8> -class ValueArray8 { - public: - ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, - T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray8& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9> -class ValueArray9 { - public: - ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, - T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray9& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10> -class ValueArray10 { - public: - ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray10& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11> -class ValueArray11 { - public: - ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), - v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray11& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12> -class ValueArray12 { - public: - ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), - v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray12& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13> -class ValueArray13 { - public: - ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), - v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), - v12_(v12), v13_(v13) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray13& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14> -class ValueArray14 { - public: - ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray14& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15> -class ValueArray15 { - public: - ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2), - v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray15& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16> -class ValueArray16 { - public: - ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1), - v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), - v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), - v16_(v16) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray16& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17> -class ValueArray17 { - public: - ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, - T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray17& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18> -class ValueArray18 { - public: - ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray18& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19> -class ValueArray19 { - public: - ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), - v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), - v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray19& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20> -class ValueArray20 { - public: - ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), - v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), - v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), - v19_(v19), v20_(v20) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray20& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21> -class ValueArray21 { - public: - ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), - v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), - v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), - v18_(v18), v19_(v19), v20_(v20), v21_(v21) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray21& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22> -class ValueArray22 { - public: - ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray22& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23> -class ValueArray23 { - public: - ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2), - v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray23& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24> -class ValueArray24 { - public: - ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1), - v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), - v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), - v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), - v22_(v22), v23_(v23), v24_(v24) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray24& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25> -class ValueArray25 { - public: - ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, - T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray25& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26> -class ValueArray26 { - public: - ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray26& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27> -class ValueArray27 { - public: - ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), - v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), - v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), - v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), - v26_(v26), v27_(v27) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray27& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28> -class ValueArray28 { - public: - ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), - v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), - v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), - v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), - v25_(v25), v26_(v26), v27_(v27), v28_(v28) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray28& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29> -class ValueArray29 { - public: - ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), - v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), - v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), - v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), - v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray29& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30> -class ValueArray30 { - public: - ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), - v29_(v29), v30_(v30) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray30& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31> -class ValueArray31 { - public: - ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2), - v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), - v29_(v29), v30_(v30), v31_(v31) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray31& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32> -class ValueArray32 { - public: - ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1), - v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), - v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), - v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), - v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), - v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray32& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33> -class ValueArray33 { - public: - ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, - T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), - v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), - v33_(v33) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray33& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34> -class ValueArray34 { - public: - ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), - v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), - v33_(v33), v34_(v34) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray34& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35> -class ValueArray35 { - public: - ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), - v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), - v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), - v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), - v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), - v32_(v32), v33_(v33), v34_(v34), v35_(v35) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray35& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36> -class ValueArray36 { - public: - ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), - v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), - v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), - v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), - v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), - v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray36& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37> -class ValueArray37 { - public: - ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), - v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), - v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), - v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), - v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), - v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), - v36_(v36), v37_(v37) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray37& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38> -class ValueArray38 { - public: - ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), - v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), - v35_(v35), v36_(v36), v37_(v37), v38_(v38) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray38& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39> -class ValueArray39 { - public: - ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2), - v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), - v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), - v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), - static_cast<T>(v39_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray39& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40> -class ValueArray40 { - public: - ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1), - v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), - v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), - v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), - v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), - v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), - v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), - v40_(v40) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), - static_cast<T>(v39_), static_cast<T>(v40_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray40& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41> -class ValueArray41 { - public: - ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, - T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), - v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), - v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), - v39_(v39), v40_(v40), v41_(v41) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), - static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray41& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42> -class ValueArray42 { - public: - ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), - v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), - v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), - v39_(v39), v40_(v40), v41_(v41), v42_(v42) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), - static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), - static_cast<T>(v42_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray42& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43> -class ValueArray43 { - public: - ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), - v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), - v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), - v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), - v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), - v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), - v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), - static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), - static_cast<T>(v42_), static_cast<T>(v43_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray43& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44> -class ValueArray44 { - public: - ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), - v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), - v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), - v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), - v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), - v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), - v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), - v43_(v43), v44_(v44) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), - static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), - static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray44& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45> -class ValueArray45 { - public: - ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), - v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), - v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), - v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), - v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), - v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), - v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), - v42_(v42), v43_(v43), v44_(v44), v45_(v45) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), - static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), - static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), - static_cast<T>(v45_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray45& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; - const T45 v45_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46> -class ValueArray46 { - public: - ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3), - v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), - v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), - v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), - v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), - static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), - static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), - static_cast<T>(v45_), static_cast<T>(v46_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray46& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; - const T45 v45_; - const T46 v46_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47> -class ValueArray47 { - public: - ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2), - v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), - v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), - v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), - v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), - v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), - v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), - v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), - v47_(v47) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), - static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), - static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), - static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray47& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; - const T45 v45_; - const T46 v46_; - const T47 v47_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47, typename T48> -class ValueArray48 { - public: - ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1), - v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), - v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), - v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), - v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), - v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), - v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), - v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), - v46_(v46), v47_(v47), v48_(v48) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), - static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), - static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), - static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_), - static_cast<T>(v48_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray48& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; - const T45 v45_; - const T46 v46_; - const T47 v47_; - const T48 v48_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47, typename T48, typename T49> -class ValueArray49 { - public: - ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, - T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), - v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), - v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), - v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), - v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), - static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), - static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), - static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_), - static_cast<T>(v48_), static_cast<T>(v49_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray49& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; - const T45 v45_; - const T46 v46_; - const T47 v47_; - const T48 v48_; - const T49 v49_; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47, typename T48, typename T49, typename T50> -class ValueArray50 { - public: - ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, - T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, - T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, - T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, - T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, - T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, - T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), - v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), - v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), - v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), - v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), - v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), - v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), - v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), - static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), - static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), - static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), - static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), - static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), - static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), - static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), - static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), - static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), - static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), - static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), - static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), - static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), - static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), - static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_), - static_cast<T>(v48_), static_cast<T>(v49_), static_cast<T>(v50_)}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray50& other); - - const T1 v1_; - const T2 v2_; - const T3 v3_; - const T4 v4_; - const T5 v5_; - const T6 v6_; - const T7 v7_; - const T8 v8_; - const T9 v9_; - const T10 v10_; - const T11 v11_; - const T12 v12_; - const T13 v13_; - const T14 v14_; - const T15 v15_; - const T16 v16_; - const T17 v17_; - const T18 v18_; - const T19 v19_; - const T20 v20_; - const T21 v21_; - const T22 v22_; - const T23 v23_; - const T24 v24_; - const T25 v25_; - const T26 v26_; - const T27 v27_; - const T28 v28_; - const T29 v29_; - const T30 v30_; - const T31 v31_; - const T32 v32_; - const T33 v33_; - const T34 v34_; - const T35 v35_; - const T36 v36_; - const T37 v37_; - const T38 v38_; - const T39 v39_; - const T40 v40_; - const T41 v41_; - const T42 v42_; - const T43 v43_; - const T44 v44_; - const T45 v45_; - const T46 v46_; - const T47 v47_; - const T48 v48_; - const T49 v49_; - const T50 v50_; -}; - -# if GTEST_HAS_COMBINE -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// Generates values from the Cartesian product of values produced -// by the argument generators. -// -template <typename T1, typename T2> -class CartesianProductGenerator2 - : public ParamGeneratorInterface< ::testing::tuple<T1, T2> > { - public: - typedef ::testing::tuple<T1, T2> ParamType; - - CartesianProductGenerator2(const ParamGenerator<T1>& g1, - const ParamGenerator<T2>& g2) - : g1_(g1), g2_(g2) {} - virtual ~CartesianProductGenerator2() {} - - virtual ParamIteratorInterface<ParamType>* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin()); - } - virtual ParamIteratorInterface<ParamType>* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end()); - } - - private: - class Iterator : public ParamIteratorInterface<ParamType> { - public: - Iterator(const ParamGeneratorInterface<ParamType>* base, - const ParamGenerator<T1>& g1, - const typename ParamGenerator<T1>::iterator& current1, - const ParamGenerator<T2>& g2, - const typename ParamGenerator<T2>::iterator& current2) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current2_; - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface<ParamType>* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return current_value_.get(); } - virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType<const Iterator>(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_.reset(new ParamType(*current1_, *current2_)); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface<ParamType>* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator<T1>::iterator begin1_; - const typename ParamGenerator<T1>::iterator end1_; - typename ParamGenerator<T1>::iterator current1_; - const typename ParamGenerator<T2>::iterator begin2_; - const typename ParamGenerator<T2>::iterator end2_; - typename ParamGenerator<T2>::iterator current2_; - linked_ptr<ParamType> current_value_; - }; // class CartesianProductGenerator2::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator2& other); - - const ParamGenerator<T1> g1_; - const ParamGenerator<T2> g2_; -}; // class CartesianProductGenerator2 - - -template <typename T1, typename T2, typename T3> -class CartesianProductGenerator3 - : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3> > { - public: - typedef ::testing::tuple<T1, T2, T3> ParamType; - - CartesianProductGenerator3(const ParamGenerator<T1>& g1, - const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3) - : g1_(g1), g2_(g2), g3_(g3) {} - virtual ~CartesianProductGenerator3() {} - - virtual ParamIteratorInterface<ParamType>* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin()); - } - virtual ParamIteratorInterface<ParamType>* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end()); - } - - private: - class Iterator : public ParamIteratorInterface<ParamType> { - public: - Iterator(const ParamGeneratorInterface<ParamType>* base, - const ParamGenerator<T1>& g1, - const typename ParamGenerator<T1>::iterator& current1, - const ParamGenerator<T2>& g2, - const typename ParamGenerator<T2>::iterator& current2, - const ParamGenerator<T3>& g3, - const typename ParamGenerator<T3>::iterator& current3) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current3_; - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface<ParamType>* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return current_value_.get(); } - virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType<const Iterator>(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_.reset(new ParamType(*current1_, *current2_, *current3_)); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface<ParamType>* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator<T1>::iterator begin1_; - const typename ParamGenerator<T1>::iterator end1_; - typename ParamGenerator<T1>::iterator current1_; - const typename ParamGenerator<T2>::iterator begin2_; - const typename ParamGenerator<T2>::iterator end2_; - typename ParamGenerator<T2>::iterator current2_; - const typename ParamGenerator<T3>::iterator begin3_; - const typename ParamGenerator<T3>::iterator end3_; - typename ParamGenerator<T3>::iterator current3_; - linked_ptr<ParamType> current_value_; - }; // class CartesianProductGenerator3::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator3& other); - - const ParamGenerator<T1> g1_; - const ParamGenerator<T2> g2_; - const ParamGenerator<T3> g3_; -}; // class CartesianProductGenerator3 - - -template <typename T1, typename T2, typename T3, typename T4> -class CartesianProductGenerator4 - : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4> > { - public: - typedef ::testing::tuple<T1, T2, T3, T4> ParamType; - - CartesianProductGenerator4(const ParamGenerator<T1>& g1, - const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, - const ParamGenerator<T4>& g4) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} - virtual ~CartesianProductGenerator4() {} - - virtual ParamIteratorInterface<ParamType>* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin()); - } - virtual ParamIteratorInterface<ParamType>* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end()); - } - - private: - class Iterator : public ParamIteratorInterface<ParamType> { - public: - Iterator(const ParamGeneratorInterface<ParamType>* base, - const ParamGenerator<T1>& g1, - const typename ParamGenerator<T1>::iterator& current1, - const ParamGenerator<T2>& g2, - const typename ParamGenerator<T2>::iterator& current2, - const ParamGenerator<T3>& g3, - const typename ParamGenerator<T3>::iterator& current3, - const ParamGenerator<T4>& g4, - const typename ParamGenerator<T4>::iterator& current4) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current4_; - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface<ParamType>* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return current_value_.get(); } - virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType<const Iterator>(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_.reset(new ParamType(*current1_, *current2_, *current3_, - *current4_)); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface<ParamType>* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator<T1>::iterator begin1_; - const typename ParamGenerator<T1>::iterator end1_; - typename ParamGenerator<T1>::iterator current1_; - const typename ParamGenerator<T2>::iterator begin2_; - const typename ParamGenerator<T2>::iterator end2_; - typename ParamGenerator<T2>::iterator current2_; - const typename ParamGenerator<T3>::iterator begin3_; - const typename ParamGenerator<T3>::iterator end3_; - typename ParamGenerator<T3>::iterator current3_; - const typename ParamGenerator<T4>::iterator begin4_; - const typename ParamGenerator<T4>::iterator end4_; - typename ParamGenerator<T4>::iterator current4_; - linked_ptr<ParamType> current_value_; - }; // class CartesianProductGenerator4::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator4& other); - - const ParamGenerator<T1> g1_; - const ParamGenerator<T2> g2_; - const ParamGenerator<T3> g3_; - const ParamGenerator<T4> g4_; -}; // class CartesianProductGenerator4 - - -template <typename T1, typename T2, typename T3, typename T4, typename T5> -class CartesianProductGenerator5 - : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5> > { - public: - typedef ::testing::tuple<T1, T2, T3, T4, T5> ParamType; - - CartesianProductGenerator5(const ParamGenerator<T1>& g1, - const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, - const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} - virtual ~CartesianProductGenerator5() {} - - virtual ParamIteratorInterface<ParamType>* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin()); - } - virtual ParamIteratorInterface<ParamType>* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end(), g5_, g5_.end()); - } - - private: - class Iterator : public ParamIteratorInterface<ParamType> { - public: - Iterator(const ParamGeneratorInterface<ParamType>* base, - const ParamGenerator<T1>& g1, - const typename ParamGenerator<T1>::iterator& current1, - const ParamGenerator<T2>& g2, - const typename ParamGenerator<T2>::iterator& current2, - const ParamGenerator<T3>& g3, - const typename ParamGenerator<T3>::iterator& current3, - const ParamGenerator<T4>& g4, - const typename ParamGenerator<T4>::iterator& current4, - const ParamGenerator<T5>& g5, - const typename ParamGenerator<T5>::iterator& current5) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4), - begin5_(g5.begin()), end5_(g5.end()), current5_(current5) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current5_; - if (current5_ == end5_) { - current5_ = begin5_; - ++current4_; - } - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface<ParamType>* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return current_value_.get(); } - virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType<const Iterator>(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_ && - current5_ == typed_other->current5_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_), - begin5_(other.begin5_), - end5_(other.end5_), - current5_(other.current5_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_.reset(new ParamType(*current1_, *current2_, *current3_, - *current4_, *current5_)); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_ || - current5_ == end5_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface<ParamType>* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator<T1>::iterator begin1_; - const typename ParamGenerator<T1>::iterator end1_; - typename ParamGenerator<T1>::iterator current1_; - const typename ParamGenerator<T2>::iterator begin2_; - const typename ParamGenerator<T2>::iterator end2_; - typename ParamGenerator<T2>::iterator current2_; - const typename ParamGenerator<T3>::iterator begin3_; - const typename ParamGenerator<T3>::iterator end3_; - typename ParamGenerator<T3>::iterator current3_; - const typename ParamGenerator<T4>::iterator begin4_; - const typename ParamGenerator<T4>::iterator end4_; - typename ParamGenerator<T4>::iterator current4_; - const typename ParamGenerator<T5>::iterator begin5_; - const typename ParamGenerator<T5>::iterator end5_; - typename ParamGenerator<T5>::iterator current5_; - linked_ptr<ParamType> current_value_; - }; // class CartesianProductGenerator5::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator5& other); - - const ParamGenerator<T1> g1_; - const ParamGenerator<T2> g2_; - const ParamGenerator<T3> g3_; - const ParamGenerator<T4> g4_; - const ParamGenerator<T5> g5_; -}; // class CartesianProductGenerator5 - - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6> -class CartesianProductGenerator6 - : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, - T6> > { - public: - typedef ::testing::tuple<T1, T2, T3, T4, T5, T6> ParamType; - - CartesianProductGenerator6(const ParamGenerator<T1>& g1, - const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, - const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, - const ParamGenerator<T6>& g6) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} - virtual ~CartesianProductGenerator6() {} - - virtual ParamIteratorInterface<ParamType>* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin()); - } - virtual ParamIteratorInterface<ParamType>* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end()); - } - - private: - class Iterator : public ParamIteratorInterface<ParamType> { - public: - Iterator(const ParamGeneratorInterface<ParamType>* base, - const ParamGenerator<T1>& g1, - const typename ParamGenerator<T1>::iterator& current1, - const ParamGenerator<T2>& g2, - const typename ParamGenerator<T2>::iterator& current2, - const ParamGenerator<T3>& g3, - const typename ParamGenerator<T3>::iterator& current3, - const ParamGenerator<T4>& g4, - const typename ParamGenerator<T4>::iterator& current4, - const ParamGenerator<T5>& g5, - const typename ParamGenerator<T5>::iterator& current5, - const ParamGenerator<T6>& g6, - const typename ParamGenerator<T6>::iterator& current6) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4), - begin5_(g5.begin()), end5_(g5.end()), current5_(current5), - begin6_(g6.begin()), end6_(g6.end()), current6_(current6) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current6_; - if (current6_ == end6_) { - current6_ = begin6_; - ++current5_; - } - if (current5_ == end5_) { - current5_ = begin5_; - ++current4_; - } - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface<ParamType>* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return current_value_.get(); } - virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType<const Iterator>(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_ && - current5_ == typed_other->current5_ && - current6_ == typed_other->current6_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_), - begin5_(other.begin5_), - end5_(other.end5_), - current5_(other.current5_), - begin6_(other.begin6_), - end6_(other.end6_), - current6_(other.current6_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_.reset(new ParamType(*current1_, *current2_, *current3_, - *current4_, *current5_, *current6_)); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_ || - current5_ == end5_ || - current6_ == end6_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface<ParamType>* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator<T1>::iterator begin1_; - const typename ParamGenerator<T1>::iterator end1_; - typename ParamGenerator<T1>::iterator current1_; - const typename ParamGenerator<T2>::iterator begin2_; - const typename ParamGenerator<T2>::iterator end2_; - typename ParamGenerator<T2>::iterator current2_; - const typename ParamGenerator<T3>::iterator begin3_; - const typename ParamGenerator<T3>::iterator end3_; - typename ParamGenerator<T3>::iterator current3_; - const typename ParamGenerator<T4>::iterator begin4_; - const typename ParamGenerator<T4>::iterator end4_; - typename ParamGenerator<T4>::iterator current4_; - const typename ParamGenerator<T5>::iterator begin5_; - const typename ParamGenerator<T5>::iterator end5_; - typename ParamGenerator<T5>::iterator current5_; - const typename ParamGenerator<T6>::iterator begin6_; - const typename ParamGenerator<T6>::iterator end6_; - typename ParamGenerator<T6>::iterator current6_; - linked_ptr<ParamType> current_value_; - }; // class CartesianProductGenerator6::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator6& other); - - const ParamGenerator<T1> g1_; - const ParamGenerator<T2> g2_; - const ParamGenerator<T3> g3_; - const ParamGenerator<T4> g4_; - const ParamGenerator<T5> g5_; - const ParamGenerator<T6> g6_; -}; // class CartesianProductGenerator6 - - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7> -class CartesianProductGenerator7 - : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6, - T7> > { - public: - typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType; - - CartesianProductGenerator7(const ParamGenerator<T1>& g1, - const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, - const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, - const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} - virtual ~CartesianProductGenerator7() {} - - virtual ParamIteratorInterface<ParamType>* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, - g7_.begin()); - } - virtual ParamIteratorInterface<ParamType>* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end()); - } - - private: - class Iterator : public ParamIteratorInterface<ParamType> { - public: - Iterator(const ParamGeneratorInterface<ParamType>* base, - const ParamGenerator<T1>& g1, - const typename ParamGenerator<T1>::iterator& current1, - const ParamGenerator<T2>& g2, - const typename ParamGenerator<T2>::iterator& current2, - const ParamGenerator<T3>& g3, - const typename ParamGenerator<T3>::iterator& current3, - const ParamGenerator<T4>& g4, - const typename ParamGenerator<T4>::iterator& current4, - const ParamGenerator<T5>& g5, - const typename ParamGenerator<T5>::iterator& current5, - const ParamGenerator<T6>& g6, - const typename ParamGenerator<T6>::iterator& current6, - const ParamGenerator<T7>& g7, - const typename ParamGenerator<T7>::iterator& current7) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4), - begin5_(g5.begin()), end5_(g5.end()), current5_(current5), - begin6_(g6.begin()), end6_(g6.end()), current6_(current6), - begin7_(g7.begin()), end7_(g7.end()), current7_(current7) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current7_; - if (current7_ == end7_) { - current7_ = begin7_; - ++current6_; - } - if (current6_ == end6_) { - current6_ = begin6_; - ++current5_; - } - if (current5_ == end5_) { - current5_ = begin5_; - ++current4_; - } - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface<ParamType>* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return current_value_.get(); } - virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType<const Iterator>(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_ && - current5_ == typed_other->current5_ && - current6_ == typed_other->current6_ && - current7_ == typed_other->current7_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_), - begin5_(other.begin5_), - end5_(other.end5_), - current5_(other.current5_), - begin6_(other.begin6_), - end6_(other.end6_), - current6_(other.current6_), - begin7_(other.begin7_), - end7_(other.end7_), - current7_(other.current7_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_.reset(new ParamType(*current1_, *current2_, *current3_, - *current4_, *current5_, *current6_, *current7_)); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_ || - current5_ == end5_ || - current6_ == end6_ || - current7_ == end7_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface<ParamType>* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator<T1>::iterator begin1_; - const typename ParamGenerator<T1>::iterator end1_; - typename ParamGenerator<T1>::iterator current1_; - const typename ParamGenerator<T2>::iterator begin2_; - const typename ParamGenerator<T2>::iterator end2_; - typename ParamGenerator<T2>::iterator current2_; - const typename ParamGenerator<T3>::iterator begin3_; - const typename ParamGenerator<T3>::iterator end3_; - typename ParamGenerator<T3>::iterator current3_; - const typename ParamGenerator<T4>::iterator begin4_; - const typename ParamGenerator<T4>::iterator end4_; - typename ParamGenerator<T4>::iterator current4_; - const typename ParamGenerator<T5>::iterator begin5_; - const typename ParamGenerator<T5>::iterator end5_; - typename ParamGenerator<T5>::iterator current5_; - const typename ParamGenerator<T6>::iterator begin6_; - const typename ParamGenerator<T6>::iterator end6_; - typename ParamGenerator<T6>::iterator current6_; - const typename ParamGenerator<T7>::iterator begin7_; - const typename ParamGenerator<T7>::iterator end7_; - typename ParamGenerator<T7>::iterator current7_; - linked_ptr<ParamType> current_value_; - }; // class CartesianProductGenerator7::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator7& other); - - const ParamGenerator<T1> g1_; - const ParamGenerator<T2> g2_; - const ParamGenerator<T3> g3_; - const ParamGenerator<T4> g4_; - const ParamGenerator<T5> g5_; - const ParamGenerator<T6> g6_; - const ParamGenerator<T7> g7_; -}; // class CartesianProductGenerator7 - - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8> -class CartesianProductGenerator8 - : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6, - T7, T8> > { - public: - typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType; - - CartesianProductGenerator8(const ParamGenerator<T1>& g1, - const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, - const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, - const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7, - const ParamGenerator<T8>& g8) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), - g8_(g8) {} - virtual ~CartesianProductGenerator8() {} - - virtual ParamIteratorInterface<ParamType>* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, - g7_.begin(), g8_, g8_.begin()); - } - virtual ParamIteratorInterface<ParamType>* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, - g8_.end()); - } - - private: - class Iterator : public ParamIteratorInterface<ParamType> { - public: - Iterator(const ParamGeneratorInterface<ParamType>* base, - const ParamGenerator<T1>& g1, - const typename ParamGenerator<T1>::iterator& current1, - const ParamGenerator<T2>& g2, - const typename ParamGenerator<T2>::iterator& current2, - const ParamGenerator<T3>& g3, - const typename ParamGenerator<T3>::iterator& current3, - const ParamGenerator<T4>& g4, - const typename ParamGenerator<T4>::iterator& current4, - const ParamGenerator<T5>& g5, - const typename ParamGenerator<T5>::iterator& current5, - const ParamGenerator<T6>& g6, - const typename ParamGenerator<T6>::iterator& current6, - const ParamGenerator<T7>& g7, - const typename ParamGenerator<T7>::iterator& current7, - const ParamGenerator<T8>& g8, - const typename ParamGenerator<T8>::iterator& current8) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4), - begin5_(g5.begin()), end5_(g5.end()), current5_(current5), - begin6_(g6.begin()), end6_(g6.end()), current6_(current6), - begin7_(g7.begin()), end7_(g7.end()), current7_(current7), - begin8_(g8.begin()), end8_(g8.end()), current8_(current8) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current8_; - if (current8_ == end8_) { - current8_ = begin8_; - ++current7_; - } - if (current7_ == end7_) { - current7_ = begin7_; - ++current6_; - } - if (current6_ == end6_) { - current6_ = begin6_; - ++current5_; - } - if (current5_ == end5_) { - current5_ = begin5_; - ++current4_; - } - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface<ParamType>* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return current_value_.get(); } - virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType<const Iterator>(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_ && - current5_ == typed_other->current5_ && - current6_ == typed_other->current6_ && - current7_ == typed_other->current7_ && - current8_ == typed_other->current8_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_), - begin5_(other.begin5_), - end5_(other.end5_), - current5_(other.current5_), - begin6_(other.begin6_), - end6_(other.end6_), - current6_(other.current6_), - begin7_(other.begin7_), - end7_(other.end7_), - current7_(other.current7_), - begin8_(other.begin8_), - end8_(other.end8_), - current8_(other.current8_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_.reset(new ParamType(*current1_, *current2_, *current3_, - *current4_, *current5_, *current6_, *current7_, *current8_)); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_ || - current5_ == end5_ || - current6_ == end6_ || - current7_ == end7_ || - current8_ == end8_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface<ParamType>* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator<T1>::iterator begin1_; - const typename ParamGenerator<T1>::iterator end1_; - typename ParamGenerator<T1>::iterator current1_; - const typename ParamGenerator<T2>::iterator begin2_; - const typename ParamGenerator<T2>::iterator end2_; - typename ParamGenerator<T2>::iterator current2_; - const typename ParamGenerator<T3>::iterator begin3_; - const typename ParamGenerator<T3>::iterator end3_; - typename ParamGenerator<T3>::iterator current3_; - const typename ParamGenerator<T4>::iterator begin4_; - const typename ParamGenerator<T4>::iterator end4_; - typename ParamGenerator<T4>::iterator current4_; - const typename ParamGenerator<T5>::iterator begin5_; - const typename ParamGenerator<T5>::iterator end5_; - typename ParamGenerator<T5>::iterator current5_; - const typename ParamGenerator<T6>::iterator begin6_; - const typename ParamGenerator<T6>::iterator end6_; - typename ParamGenerator<T6>::iterator current6_; - const typename ParamGenerator<T7>::iterator begin7_; - const typename ParamGenerator<T7>::iterator end7_; - typename ParamGenerator<T7>::iterator current7_; - const typename ParamGenerator<T8>::iterator begin8_; - const typename ParamGenerator<T8>::iterator end8_; - typename ParamGenerator<T8>::iterator current8_; - linked_ptr<ParamType> current_value_; - }; // class CartesianProductGenerator8::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator8& other); - - const ParamGenerator<T1> g1_; - const ParamGenerator<T2> g2_; - const ParamGenerator<T3> g3_; - const ParamGenerator<T4> g4_; - const ParamGenerator<T5> g5_; - const ParamGenerator<T6> g6_; - const ParamGenerator<T7> g7_; - const ParamGenerator<T8> g8_; -}; // class CartesianProductGenerator8 - - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9> -class CartesianProductGenerator9 - : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6, - T7, T8, T9> > { - public: - typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType; - - CartesianProductGenerator9(const ParamGenerator<T1>& g1, - const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, - const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, - const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7, - const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), - g9_(g9) {} - virtual ~CartesianProductGenerator9() {} - - virtual ParamIteratorInterface<ParamType>* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, - g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin()); - } - virtual ParamIteratorInterface<ParamType>* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, - g8_.end(), g9_, g9_.end()); - } - - private: - class Iterator : public ParamIteratorInterface<ParamType> { - public: - Iterator(const ParamGeneratorInterface<ParamType>* base, - const ParamGenerator<T1>& g1, - const typename ParamGenerator<T1>::iterator& current1, - const ParamGenerator<T2>& g2, - const typename ParamGenerator<T2>::iterator& current2, - const ParamGenerator<T3>& g3, - const typename ParamGenerator<T3>::iterator& current3, - const ParamGenerator<T4>& g4, - const typename ParamGenerator<T4>::iterator& current4, - const ParamGenerator<T5>& g5, - const typename ParamGenerator<T5>::iterator& current5, - const ParamGenerator<T6>& g6, - const typename ParamGenerator<T6>::iterator& current6, - const ParamGenerator<T7>& g7, - const typename ParamGenerator<T7>::iterator& current7, - const ParamGenerator<T8>& g8, - const typename ParamGenerator<T8>::iterator& current8, - const ParamGenerator<T9>& g9, - const typename ParamGenerator<T9>::iterator& current9) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4), - begin5_(g5.begin()), end5_(g5.end()), current5_(current5), - begin6_(g6.begin()), end6_(g6.end()), current6_(current6), - begin7_(g7.begin()), end7_(g7.end()), current7_(current7), - begin8_(g8.begin()), end8_(g8.end()), current8_(current8), - begin9_(g9.begin()), end9_(g9.end()), current9_(current9) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current9_; - if (current9_ == end9_) { - current9_ = begin9_; - ++current8_; - } - if (current8_ == end8_) { - current8_ = begin8_; - ++current7_; - } - if (current7_ == end7_) { - current7_ = begin7_; - ++current6_; - } - if (current6_ == end6_) { - current6_ = begin6_; - ++current5_; - } - if (current5_ == end5_) { - current5_ = begin5_; - ++current4_; - } - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface<ParamType>* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return current_value_.get(); } - virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType<const Iterator>(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_ && - current5_ == typed_other->current5_ && - current6_ == typed_other->current6_ && - current7_ == typed_other->current7_ && - current8_ == typed_other->current8_ && - current9_ == typed_other->current9_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_), - begin5_(other.begin5_), - end5_(other.end5_), - current5_(other.current5_), - begin6_(other.begin6_), - end6_(other.end6_), - current6_(other.current6_), - begin7_(other.begin7_), - end7_(other.end7_), - current7_(other.current7_), - begin8_(other.begin8_), - end8_(other.end8_), - current8_(other.current8_), - begin9_(other.begin9_), - end9_(other.end9_), - current9_(other.current9_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_.reset(new ParamType(*current1_, *current2_, *current3_, - *current4_, *current5_, *current6_, *current7_, *current8_, - *current9_)); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_ || - current5_ == end5_ || - current6_ == end6_ || - current7_ == end7_ || - current8_ == end8_ || - current9_ == end9_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface<ParamType>* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator<T1>::iterator begin1_; - const typename ParamGenerator<T1>::iterator end1_; - typename ParamGenerator<T1>::iterator current1_; - const typename ParamGenerator<T2>::iterator begin2_; - const typename ParamGenerator<T2>::iterator end2_; - typename ParamGenerator<T2>::iterator current2_; - const typename ParamGenerator<T3>::iterator begin3_; - const typename ParamGenerator<T3>::iterator end3_; - typename ParamGenerator<T3>::iterator current3_; - const typename ParamGenerator<T4>::iterator begin4_; - const typename ParamGenerator<T4>::iterator end4_; - typename ParamGenerator<T4>::iterator current4_; - const typename ParamGenerator<T5>::iterator begin5_; - const typename ParamGenerator<T5>::iterator end5_; - typename ParamGenerator<T5>::iterator current5_; - const typename ParamGenerator<T6>::iterator begin6_; - const typename ParamGenerator<T6>::iterator end6_; - typename ParamGenerator<T6>::iterator current6_; - const typename ParamGenerator<T7>::iterator begin7_; - const typename ParamGenerator<T7>::iterator end7_; - typename ParamGenerator<T7>::iterator current7_; - const typename ParamGenerator<T8>::iterator begin8_; - const typename ParamGenerator<T8>::iterator end8_; - typename ParamGenerator<T8>::iterator current8_; - const typename ParamGenerator<T9>::iterator begin9_; - const typename ParamGenerator<T9>::iterator end9_; - typename ParamGenerator<T9>::iterator current9_; - linked_ptr<ParamType> current_value_; - }; // class CartesianProductGenerator9::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator9& other); - - const ParamGenerator<T1> g1_; - const ParamGenerator<T2> g2_; - const ParamGenerator<T3> g3_; - const ParamGenerator<T4> g4_; - const ParamGenerator<T5> g5_; - const ParamGenerator<T6> g6_; - const ParamGenerator<T7> g7_; - const ParamGenerator<T8> g8_; - const ParamGenerator<T9> g9_; -}; // class CartesianProductGenerator9 - - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10> -class CartesianProductGenerator10 - : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6, - T7, T8, T9, T10> > { - public: - typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType; - - CartesianProductGenerator10(const ParamGenerator<T1>& g1, - const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, - const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, - const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7, - const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9, - const ParamGenerator<T10>& g10) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), - g9_(g9), g10_(g10) {} - virtual ~CartesianProductGenerator10() {} - - virtual ParamIteratorInterface<ParamType>* Begin() const { - return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, - g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, - g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin()); - } - virtual ParamIteratorInterface<ParamType>* End() const { - return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), - g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, - g8_.end(), g9_, g9_.end(), g10_, g10_.end()); - } - - private: - class Iterator : public ParamIteratorInterface<ParamType> { - public: - Iterator(const ParamGeneratorInterface<ParamType>* base, - const ParamGenerator<T1>& g1, - const typename ParamGenerator<T1>::iterator& current1, - const ParamGenerator<T2>& g2, - const typename ParamGenerator<T2>::iterator& current2, - const ParamGenerator<T3>& g3, - const typename ParamGenerator<T3>::iterator& current3, - const ParamGenerator<T4>& g4, - const typename ParamGenerator<T4>::iterator& current4, - const ParamGenerator<T5>& g5, - const typename ParamGenerator<T5>::iterator& current5, - const ParamGenerator<T6>& g6, - const typename ParamGenerator<T6>::iterator& current6, - const ParamGenerator<T7>& g7, - const typename ParamGenerator<T7>::iterator& current7, - const ParamGenerator<T8>& g8, - const typename ParamGenerator<T8>::iterator& current8, - const ParamGenerator<T9>& g9, - const typename ParamGenerator<T9>::iterator& current9, - const ParamGenerator<T10>& g10, - const typename ParamGenerator<T10>::iterator& current10) - : base_(base), - begin1_(g1.begin()), end1_(g1.end()), current1_(current1), - begin2_(g2.begin()), end2_(g2.end()), current2_(current2), - begin3_(g3.begin()), end3_(g3.end()), current3_(current3), - begin4_(g4.begin()), end4_(g4.end()), current4_(current4), - begin5_(g5.begin()), end5_(g5.end()), current5_(current5), - begin6_(g6.begin()), end6_(g6.end()), current6_(current6), - begin7_(g7.begin()), end7_(g7.end()), current7_(current7), - begin8_(g8.begin()), end8_(g8.end()), current8_(current8), - begin9_(g9.begin()), end9_(g9.end()), current9_(current9), - begin10_(g10.begin()), end10_(g10.end()), current10_(current10) { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current10_; - if (current10_ == end10_) { - current10_ = begin10_; - ++current9_; - } - if (current9_ == end9_) { - current9_ = begin9_; - ++current8_; - } - if (current8_ == end8_) { - current8_ = begin8_; - ++current7_; - } - if (current7_ == end7_) { - current7_ = begin7_; - ++current6_; - } - if (current6_ == end6_) { - current6_ = begin6_; - ++current5_; - } - if (current5_ == end5_) { - current5_ = begin5_; - ++current4_; - } - if (current4_ == end4_) { - current4_ = begin4_; - ++current3_; - } - if (current3_ == end3_) { - current3_ = begin3_; - ++current2_; - } - if (current2_ == end2_) { - current2_ = begin2_; - ++current1_; - } - ComputeCurrentValue(); - } - virtual ParamIteratorInterface<ParamType>* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return current_value_.get(); } - virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType<const Iterator>(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ( - current1_ == typed_other->current1_ && - current2_ == typed_other->current2_ && - current3_ == typed_other->current3_ && - current4_ == typed_other->current4_ && - current5_ == typed_other->current5_ && - current6_ == typed_other->current6_ && - current7_ == typed_other->current7_ && - current8_ == typed_other->current8_ && - current9_ == typed_other->current9_ && - current10_ == typed_other->current10_); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), - begin1_(other.begin1_), - end1_(other.end1_), - current1_(other.current1_), - begin2_(other.begin2_), - end2_(other.end2_), - current2_(other.current2_), - begin3_(other.begin3_), - end3_(other.end3_), - current3_(other.current3_), - begin4_(other.begin4_), - end4_(other.end4_), - current4_(other.current4_), - begin5_(other.begin5_), - end5_(other.end5_), - current5_(other.current5_), - begin6_(other.begin6_), - end6_(other.end6_), - current6_(other.current6_), - begin7_(other.begin7_), - end7_(other.end7_), - current7_(other.current7_), - begin8_(other.begin8_), - end8_(other.end8_), - current8_(other.current8_), - begin9_(other.begin9_), - end9_(other.end9_), - current9_(other.current9_), - begin10_(other.begin10_), - end10_(other.end10_), - current10_(other.current10_) { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_.reset(new ParamType(*current1_, *current2_, *current3_, - *current4_, *current5_, *current6_, *current7_, *current8_, - *current9_, *current10_)); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return - current1_ == end1_ || - current2_ == end2_ || - current3_ == end3_ || - current4_ == end4_ || - current5_ == end5_ || - current6_ == end6_ || - current7_ == end7_ || - current8_ == end8_ || - current9_ == end9_ || - current10_ == end10_; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface<ParamType>* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. - const typename ParamGenerator<T1>::iterator begin1_; - const typename ParamGenerator<T1>::iterator end1_; - typename ParamGenerator<T1>::iterator current1_; - const typename ParamGenerator<T2>::iterator begin2_; - const typename ParamGenerator<T2>::iterator end2_; - typename ParamGenerator<T2>::iterator current2_; - const typename ParamGenerator<T3>::iterator begin3_; - const typename ParamGenerator<T3>::iterator end3_; - typename ParamGenerator<T3>::iterator current3_; - const typename ParamGenerator<T4>::iterator begin4_; - const typename ParamGenerator<T4>::iterator end4_; - typename ParamGenerator<T4>::iterator current4_; - const typename ParamGenerator<T5>::iterator begin5_; - const typename ParamGenerator<T5>::iterator end5_; - typename ParamGenerator<T5>::iterator current5_; - const typename ParamGenerator<T6>::iterator begin6_; - const typename ParamGenerator<T6>::iterator end6_; - typename ParamGenerator<T6>::iterator current6_; - const typename ParamGenerator<T7>::iterator begin7_; - const typename ParamGenerator<T7>::iterator end7_; - typename ParamGenerator<T7>::iterator current7_; - const typename ParamGenerator<T8>::iterator begin8_; - const typename ParamGenerator<T8>::iterator end8_; - typename ParamGenerator<T8>::iterator current8_; - const typename ParamGenerator<T9>::iterator begin9_; - const typename ParamGenerator<T9>::iterator end9_; - typename ParamGenerator<T9>::iterator current9_; - const typename ParamGenerator<T10>::iterator begin10_; - const typename ParamGenerator<T10>::iterator end10_; - typename ParamGenerator<T10>::iterator current10_; - linked_ptr<ParamType> current_value_; - }; // class CartesianProductGenerator10::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator10& other); - - const ParamGenerator<T1> g1_; - const ParamGenerator<T2> g2_; - const ParamGenerator<T3> g3_; - const ParamGenerator<T4> g4_; - const ParamGenerator<T5> g5_; - const ParamGenerator<T6> g6_; - const ParamGenerator<T7> g7_; - const ParamGenerator<T8> g8_; - const ParamGenerator<T9> g9_; - const ParamGenerator<T10> g10_; -}; // class CartesianProductGenerator10 - - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// Helper classes providing Combine() with polymorphic features. They allow -// casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is -// convertible to U. -// -template <class Generator1, class Generator2> -class CartesianProductHolder2 { - public: -CartesianProductHolder2(const Generator1& g1, const Generator2& g2) - : g1_(g1), g2_(g2) {} - template <typename T1, typename T2> - operator ParamGenerator< ::testing::tuple<T1, T2> >() const { - return ParamGenerator< ::testing::tuple<T1, T2> >( - new CartesianProductGenerator2<T1, T2>( - static_cast<ParamGenerator<T1> >(g1_), - static_cast<ParamGenerator<T2> >(g2_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder2& other); - - const Generator1 g1_; - const Generator2 g2_; -}; // class CartesianProductHolder2 - -template <class Generator1, class Generator2, class Generator3> -class CartesianProductHolder3 { - public: -CartesianProductHolder3(const Generator1& g1, const Generator2& g2, - const Generator3& g3) - : g1_(g1), g2_(g2), g3_(g3) {} - template <typename T1, typename T2, typename T3> - operator ParamGenerator< ::testing::tuple<T1, T2, T3> >() const { - return ParamGenerator< ::testing::tuple<T1, T2, T3> >( - new CartesianProductGenerator3<T1, T2, T3>( - static_cast<ParamGenerator<T1> >(g1_), - static_cast<ParamGenerator<T2> >(g2_), - static_cast<ParamGenerator<T3> >(g3_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder3& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; -}; // class CartesianProductHolder3 - -template <class Generator1, class Generator2, class Generator3, - class Generator4> -class CartesianProductHolder4 { - public: -CartesianProductHolder4(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} - template <typename T1, typename T2, typename T3, typename T4> - operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >() const { - return ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >( - new CartesianProductGenerator4<T1, T2, T3, T4>( - static_cast<ParamGenerator<T1> >(g1_), - static_cast<ParamGenerator<T2> >(g2_), - static_cast<ParamGenerator<T3> >(g3_), - static_cast<ParamGenerator<T4> >(g4_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder4& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; -}; // class CartesianProductHolder4 - -template <class Generator1, class Generator2, class Generator3, - class Generator4, class Generator5> -class CartesianProductHolder5 { - public: -CartesianProductHolder5(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4, const Generator5& g5) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} - template <typename T1, typename T2, typename T3, typename T4, typename T5> - operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >() const { - return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >( - new CartesianProductGenerator5<T1, T2, T3, T4, T5>( - static_cast<ParamGenerator<T1> >(g1_), - static_cast<ParamGenerator<T2> >(g2_), - static_cast<ParamGenerator<T3> >(g3_), - static_cast<ParamGenerator<T4> >(g4_), - static_cast<ParamGenerator<T5> >(g5_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder5& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; - const Generator5 g5_; -}; // class CartesianProductHolder5 - -template <class Generator1, class Generator2, class Generator3, - class Generator4, class Generator5, class Generator6> -class CartesianProductHolder6 { - public: -CartesianProductHolder6(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4, const Generator5& g5, - const Generator6& g6) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6> - operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >() const { - return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >( - new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>( - static_cast<ParamGenerator<T1> >(g1_), - static_cast<ParamGenerator<T2> >(g2_), - static_cast<ParamGenerator<T3> >(g3_), - static_cast<ParamGenerator<T4> >(g4_), - static_cast<ParamGenerator<T5> >(g5_), - static_cast<ParamGenerator<T6> >(g6_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder6& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; - const Generator5 g5_; - const Generator6 g6_; -}; // class CartesianProductHolder6 - -template <class Generator1, class Generator2, class Generator3, - class Generator4, class Generator5, class Generator6, class Generator7> -class CartesianProductHolder7 { - public: -CartesianProductHolder7(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4, const Generator5& g5, - const Generator6& g6, const Generator7& g7) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7> - operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, - T7> >() const { - return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> >( - new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>( - static_cast<ParamGenerator<T1> >(g1_), - static_cast<ParamGenerator<T2> >(g2_), - static_cast<ParamGenerator<T3> >(g3_), - static_cast<ParamGenerator<T4> >(g4_), - static_cast<ParamGenerator<T5> >(g5_), - static_cast<ParamGenerator<T6> >(g6_), - static_cast<ParamGenerator<T7> >(g7_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder7& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; - const Generator5 g5_; - const Generator6 g6_; - const Generator7 g7_; -}; // class CartesianProductHolder7 - -template <class Generator1, class Generator2, class Generator3, - class Generator4, class Generator5, class Generator6, class Generator7, - class Generator8> -class CartesianProductHolder8 { - public: -CartesianProductHolder8(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4, const Generator5& g5, - const Generator6& g6, const Generator7& g7, const Generator8& g8) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), - g8_(g8) {} - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8> - operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, - T8> >() const { - return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >( - new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>( - static_cast<ParamGenerator<T1> >(g1_), - static_cast<ParamGenerator<T2> >(g2_), - static_cast<ParamGenerator<T3> >(g3_), - static_cast<ParamGenerator<T4> >(g4_), - static_cast<ParamGenerator<T5> >(g5_), - static_cast<ParamGenerator<T6> >(g6_), - static_cast<ParamGenerator<T7> >(g7_), - static_cast<ParamGenerator<T8> >(g8_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder8& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; - const Generator5 g5_; - const Generator6 g6_; - const Generator7 g7_; - const Generator8 g8_; -}; // class CartesianProductHolder8 - -template <class Generator1, class Generator2, class Generator3, - class Generator4, class Generator5, class Generator6, class Generator7, - class Generator8, class Generator9> -class CartesianProductHolder9 { - public: -CartesianProductHolder9(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4, const Generator5& g5, - const Generator6& g6, const Generator7& g7, const Generator8& g8, - const Generator9& g9) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), - g9_(g9) {} - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9> - operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, - T9> >() const { - return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, - T9> >( - new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>( - static_cast<ParamGenerator<T1> >(g1_), - static_cast<ParamGenerator<T2> >(g2_), - static_cast<ParamGenerator<T3> >(g3_), - static_cast<ParamGenerator<T4> >(g4_), - static_cast<ParamGenerator<T5> >(g5_), - static_cast<ParamGenerator<T6> >(g6_), - static_cast<ParamGenerator<T7> >(g7_), - static_cast<ParamGenerator<T8> >(g8_), - static_cast<ParamGenerator<T9> >(g9_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder9& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; - const Generator5 g5_; - const Generator6 g6_; - const Generator7 g7_; - const Generator8 g8_; - const Generator9 g9_; -}; // class CartesianProductHolder9 - -template <class Generator1, class Generator2, class Generator3, - class Generator4, class Generator5, class Generator6, class Generator7, - class Generator8, class Generator9, class Generator10> -class CartesianProductHolder10 { - public: -CartesianProductHolder10(const Generator1& g1, const Generator2& g2, - const Generator3& g3, const Generator4& g4, const Generator5& g5, - const Generator6& g6, const Generator7& g7, const Generator8& g8, - const Generator9& g9, const Generator10& g10) - : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), - g9_(g9), g10_(g10) {} - template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10> - operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, - T10> >() const { - return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, - T10> >( - new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9, - T10>( - static_cast<ParamGenerator<T1> >(g1_), - static_cast<ParamGenerator<T2> >(g2_), - static_cast<ParamGenerator<T3> >(g3_), - static_cast<ParamGenerator<T4> >(g4_), - static_cast<ParamGenerator<T5> >(g5_), - static_cast<ParamGenerator<T6> >(g6_), - static_cast<ParamGenerator<T7> >(g7_), - static_cast<ParamGenerator<T8> >(g8_), - static_cast<ParamGenerator<T9> >(g9_), - static_cast<ParamGenerator<T10> >(g10_))); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder10& other); - - const Generator1 g1_; - const Generator2 g2_; - const Generator3 g3_; - const Generator4 g4_; - const Generator5 g5_; - const Generator6 g6_; - const Generator7 g7_; - const Generator8 g8_; - const Generator9 g9_; - const Generator10 g10_; -}; // class CartesianProductHolder10 - -# endif // GTEST_HAS_COMBINE - -} // namespace internal -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ diff --git a/test/gtest/include/gtest/internal/gtest-param-util-generated.h.pump b/test/gtest/include/gtest/internal/gtest-param-util-generated.h.pump deleted file mode 100644 index d65086a01..000000000 --- a/test/gtest/include/gtest/internal/gtest-param-util-generated.h.pump +++ /dev/null @@ -1,279 +0,0 @@ -$$ -*- mode: c++; -*- -$var n = 50 $$ Maximum length of Values arguments we want to support. -$var maxtuple = 10 $$ Maximum number of Combine arguments we want to support. -// Copyright 2008 Google Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: vladl@google.com (Vlad Losev) - -// Type and function utilities for implementing parameterized tests. -// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! -// -// Currently Google Test supports at most $n arguments in Values, -// and at most $maxtuple arguments in Combine. Please contact -// googletestframework@googlegroups.com if you need more. -// Please note that the number of arguments to Combine is limited -// by the maximum arity of the implementation of tuple which is -// currently set at $maxtuple. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ - -#include "gtest/internal/gtest-param-util.h" -#include "gtest/internal/gtest-port.h" - -namespace testing { - -// Forward declarations of ValuesIn(), which is implemented in -// include/gtest/gtest-param-test.h. -template <typename ForwardIterator> -internal::ParamGenerator< - typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type> -ValuesIn(ForwardIterator begin, ForwardIterator end); - -template <typename T, size_t N> -internal::ParamGenerator<T> ValuesIn(const T (&array)[N]); - -template <class Container> -internal::ParamGenerator<typename Container::value_type> ValuesIn( - const Container& container); - -namespace internal { - -// Used in the Values() function to provide polymorphic capabilities. -$range i 1..n -$for i [[ -$range j 1..i - -template <$for j, [[typename T$j]]> -class ValueArray$i { - public: - $if i==1 [[explicit ]]ValueArray$i($for j, [[T$j v$j]]) : $for j, [[v$(j)_(v$j)]] {} - - template <typename T> - operator ParamGenerator<T>() const { - const T array[] = {$for j, [[static_cast<T>(v$(j)_)]]}; - return ValuesIn(array); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const ValueArray$i& other); - -$for j [[ - - const T$j v$(j)_; -]] - -}; - -]] - -# if GTEST_HAS_COMBINE -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// Generates values from the Cartesian product of values produced -// by the argument generators. -// -$range i 2..maxtuple -$for i [[ -$range j 1..i -$range k 2..i - -template <$for j, [[typename T$j]]> -class CartesianProductGenerator$i - : public ParamGeneratorInterface< ::testing::tuple<$for j, [[T$j]]> > { - public: - typedef ::testing::tuple<$for j, [[T$j]]> ParamType; - - CartesianProductGenerator$i($for j, [[const ParamGenerator<T$j>& g$j]]) - : $for j, [[g$(j)_(g$j)]] {} - virtual ~CartesianProductGenerator$i() {} - - virtual ParamIteratorInterface<ParamType>* Begin() const { - return new Iterator(this, $for j, [[g$(j)_, g$(j)_.begin()]]); - } - virtual ParamIteratorInterface<ParamType>* End() const { - return new Iterator(this, $for j, [[g$(j)_, g$(j)_.end()]]); - } - - private: - class Iterator : public ParamIteratorInterface<ParamType> { - public: - Iterator(const ParamGeneratorInterface<ParamType>* base, $for j, [[ - - const ParamGenerator<T$j>& g$j, - const typename ParamGenerator<T$j>::iterator& current$(j)]]) - : base_(base), -$for j, [[ - - begin$(j)_(g$j.begin()), end$(j)_(g$j.end()), current$(j)_(current$j) -]] { - ComputeCurrentValue(); - } - virtual ~Iterator() {} - - virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { - return base_; - } - // Advance should not be called on beyond-of-range iterators - // so no component iterators must be beyond end of range, either. - virtual void Advance() { - assert(!AtEnd()); - ++current$(i)_; - -$for k [[ - if (current$(i+2-k)_ == end$(i+2-k)_) { - current$(i+2-k)_ = begin$(i+2-k)_; - ++current$(i+2-k-1)_; - } - -]] - ComputeCurrentValue(); - } - virtual ParamIteratorInterface<ParamType>* Clone() const { - return new Iterator(*this); - } - virtual const ParamType* Current() const { return current_value_.get(); } - virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { - // Having the same base generator guarantees that the other - // iterator is of the same type and we can downcast. - GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) - << "The program attempted to compare iterators " - << "from different generators." << std::endl; - const Iterator* typed_other = - CheckedDowncastToActualType<const Iterator>(&other); - // We must report iterators equal if they both point beyond their - // respective ranges. That can happen in a variety of fashions, - // so we have to consult AtEnd(). - return (AtEnd() && typed_other->AtEnd()) || - ($for j && [[ - - current$(j)_ == typed_other->current$(j)_ -]]); - } - - private: - Iterator(const Iterator& other) - : base_(other.base_), $for j, [[ - - begin$(j)_(other.begin$(j)_), - end$(j)_(other.end$(j)_), - current$(j)_(other.current$(j)_) -]] { - ComputeCurrentValue(); - } - - void ComputeCurrentValue() { - if (!AtEnd()) - current_value_.reset(new ParamType($for j, [[*current$(j)_]])); - } - bool AtEnd() const { - // We must report iterator past the end of the range when either of the - // component iterators has reached the end of its range. - return -$for j || [[ - - current$(j)_ == end$(j)_ -]]; - } - - // No implementation - assignment is unsupported. - void operator=(const Iterator& other); - - const ParamGeneratorInterface<ParamType>* const base_; - // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. - // current[i]_ is the actual traversing iterator. -$for j [[ - - const typename ParamGenerator<T$j>::iterator begin$(j)_; - const typename ParamGenerator<T$j>::iterator end$(j)_; - typename ParamGenerator<T$j>::iterator current$(j)_; -]] - - linked_ptr<ParamType> current_value_; - }; // class CartesianProductGenerator$i::Iterator - - // No implementation - assignment is unsupported. - void operator=(const CartesianProductGenerator$i& other); - - -$for j [[ - const ParamGenerator<T$j> g$(j)_; - -]] -}; // class CartesianProductGenerator$i - - -]] - -// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. -// -// Helper classes providing Combine() with polymorphic features. They allow -// casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is -// convertible to U. -// -$range i 2..maxtuple -$for i [[ -$range j 1..i - -template <$for j, [[class Generator$j]]> -class CartesianProductHolder$i { - public: -CartesianProductHolder$i($for j, [[const Generator$j& g$j]]) - : $for j, [[g$(j)_(g$j)]] {} - template <$for j, [[typename T$j]]> - operator ParamGenerator< ::testing::tuple<$for j, [[T$j]]> >() const { - return ParamGenerator< ::testing::tuple<$for j, [[T$j]]> >( - new CartesianProductGenerator$i<$for j, [[T$j]]>( -$for j,[[ - - static_cast<ParamGenerator<T$j> >(g$(j)_) -]])); - } - - private: - // No implementation - assignment is unsupported. - void operator=(const CartesianProductHolder$i& other); - - -$for j [[ - const Generator$j g$(j)_; - -]] -}; // class CartesianProductHolder$i - -]] - -# endif // GTEST_HAS_COMBINE - -} // namespace internal -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ diff --git a/test/gtest/include/gtest/internal/gtest-tuple.h b/test/gtest/include/gtest/internal/gtest-tuple.h deleted file mode 100644 index e9b405340..000000000 --- a/test/gtest/include/gtest/internal/gtest-tuple.h +++ /dev/null @@ -1,1020 +0,0 @@ -// This file was GENERATED by command: -// pump.py gtest-tuple.h.pump -// DO NOT EDIT BY HAND!!! - -// Copyright 2009 Google Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) - -// Implements a subset of TR1 tuple needed by Google Test and Google Mock. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ - -#include <utility> // For ::std::pair. - -// The compiler used in Symbian has a bug that prevents us from declaring the -// tuple template as a friend (it complains that tuple is redefined). This -// hack bypasses the bug by declaring the members that should otherwise be -// private as public. -// Sun Studio versions < 12 also have the above bug. -#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) -# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: -#else -# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ - template <GTEST_10_TYPENAMES_(U)> friend class tuple; \ - private: -#endif - -// Visual Studio 2010, 2012, and 2013 define symbols in std::tr1 that conflict -// with our own definitions. Therefore using our own tuple does not work on -// those compilers. -#if defined(_MSC_VER) && _MSC_VER >= 1600 /* 1600 is Visual Studio 2010 */ -# error "gtest's tuple doesn't compile on Visual Studio 2010 or later. \ -GTEST_USE_OWN_TR1_TUPLE must be set to 0 on those compilers." -#endif - -// GTEST_n_TUPLE_(T) is the type of an n-tuple. -#define GTEST_0_TUPLE_(T) tuple<> -#define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \ - void, void, void> -#define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \ - void, void, void> -#define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \ - void, void, void> -#define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \ - void, void, void> -#define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \ - void, void, void> -#define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \ - void, void, void> -#define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ - void, void, void> -#define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ - T##7, void, void> -#define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ - T##7, T##8, void> -#define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \ - T##7, T##8, T##9> - -// GTEST_n_TYPENAMES_(T) declares a list of n typenames. -#define GTEST_0_TYPENAMES_(T) -#define GTEST_1_TYPENAMES_(T) typename T##0 -#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1 -#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2 -#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3 -#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3, typename T##4 -#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3, typename T##4, typename T##5 -#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3, typename T##4, typename T##5, typename T##6 -#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3, typename T##4, typename T##5, typename T##6, typename T##7 -#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3, typename T##4, typename T##5, typename T##6, \ - typename T##7, typename T##8 -#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \ - typename T##3, typename T##4, typename T##5, typename T##6, \ - typename T##7, typename T##8, typename T##9 - -// In theory, defining stuff in the ::std namespace is undefined -// behavior. We can do this as we are playing the role of a standard -// library vendor. -namespace std { -namespace tr1 { - -template <typename T0 = void, typename T1 = void, typename T2 = void, - typename T3 = void, typename T4 = void, typename T5 = void, - typename T6 = void, typename T7 = void, typename T8 = void, - typename T9 = void> -class tuple; - -// Anything in namespace gtest_internal is Google Test's INTERNAL -// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code. -namespace gtest_internal { - -// ByRef<T>::type is T if T is a reference; otherwise it's const T&. -template <typename T> -struct ByRef { typedef const T& type; }; // NOLINT -template <typename T> -struct ByRef<T&> { typedef T& type; }; // NOLINT - -// A handy wrapper for ByRef. -#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type - -// AddRef<T>::type is T if T is a reference; otherwise it's T&. This -// is the same as tr1::add_reference<T>::type. -template <typename T> -struct AddRef { typedef T& type; }; // NOLINT -template <typename T> -struct AddRef<T&> { typedef T& type; }; // NOLINT - -// A handy wrapper for AddRef. -#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type - -// A helper for implementing get<k>(). -template <int k> class Get; - -// A helper for implementing tuple_element<k, T>. kIndexValid is true -// iff k < the number of fields in tuple type T. -template <bool kIndexValid, int kIndex, class Tuple> -struct TupleElement; - -template <GTEST_10_TYPENAMES_(T)> -struct TupleElement<true, 0, GTEST_10_TUPLE_(T) > { - typedef T0 type; -}; - -template <GTEST_10_TYPENAMES_(T)> -struct TupleElement<true, 1, GTEST_10_TUPLE_(T) > { - typedef T1 type; -}; - -template <GTEST_10_TYPENAMES_(T)> -struct TupleElement<true, 2, GTEST_10_TUPLE_(T) > { - typedef T2 type; -}; - -template <GTEST_10_TYPENAMES_(T)> -struct TupleElement<true, 3, GTEST_10_TUPLE_(T) > { - typedef T3 type; -}; - -template <GTEST_10_TYPENAMES_(T)> -struct TupleElement<true, 4, GTEST_10_TUPLE_(T) > { - typedef T4 type; -}; - -template <GTEST_10_TYPENAMES_(T)> -struct TupleElement<true, 5, GTEST_10_TUPLE_(T) > { - typedef T5 type; -}; - -template <GTEST_10_TYPENAMES_(T)> -struct TupleElement<true, 6, GTEST_10_TUPLE_(T) > { - typedef T6 type; -}; - -template <GTEST_10_TYPENAMES_(T)> -struct TupleElement<true, 7, GTEST_10_TUPLE_(T) > { - typedef T7 type; -}; - -template <GTEST_10_TYPENAMES_(T)> -struct TupleElement<true, 8, GTEST_10_TUPLE_(T) > { - typedef T8 type; -}; - -template <GTEST_10_TYPENAMES_(T)> -struct TupleElement<true, 9, GTEST_10_TUPLE_(T) > { - typedef T9 type; -}; - -} // namespace gtest_internal - -template <> -class tuple<> { - public: - tuple() {} - tuple(const tuple& /* t */) {} - tuple& operator=(const tuple& /* t */) { return *this; } -}; - -template <GTEST_1_TYPENAMES_(T)> -class GTEST_1_TUPLE_(T) { - public: - template <int k> friend class gtest_internal::Get; - - tuple() : f0_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {} - - tuple(const tuple& t) : f0_(t.f0_) {} - - template <GTEST_1_TYPENAMES_(U)> - tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template <GTEST_1_TYPENAMES_(U)> - tuple& operator=(const GTEST_1_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template <GTEST_1_TYPENAMES_(U)> - tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) { - f0_ = t.f0_; - return *this; - } - - T0 f0_; -}; - -template <GTEST_2_TYPENAMES_(T)> -class GTEST_2_TUPLE_(T) { - public: - template <int k> friend class gtest_internal::Get; - - tuple() : f0_(), f1_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0), - f1_(f1) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {} - - template <GTEST_2_TYPENAMES_(U)> - tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {} - template <typename U0, typename U1> - tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template <GTEST_2_TYPENAMES_(U)> - tuple& operator=(const GTEST_2_TUPLE_(U)& t) { - return CopyFrom(t); - } - template <typename U0, typename U1> - tuple& operator=(const ::std::pair<U0, U1>& p) { - f0_ = p.first; - f1_ = p.second; - return *this; - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template <GTEST_2_TYPENAMES_(U)> - tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - return *this; - } - - T0 f0_; - T1 f1_; -}; - -template <GTEST_3_TYPENAMES_(T)> -class GTEST_3_TUPLE_(T) { - public: - template <int k> friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} - - template <GTEST_3_TYPENAMES_(U)> - tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template <GTEST_3_TYPENAMES_(U)> - tuple& operator=(const GTEST_3_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template <GTEST_3_TYPENAMES_(U)> - tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; -}; - -template <GTEST_4_TYPENAMES_(T)> -class GTEST_4_TUPLE_(T) { - public: - template <int k> friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2), - f3_(f3) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {} - - template <GTEST_4_TYPENAMES_(U)> - tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template <GTEST_4_TYPENAMES_(U)> - tuple& operator=(const GTEST_4_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template <GTEST_4_TYPENAMES_(U)> - tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; -}; - -template <GTEST_5_TYPENAMES_(T)> -class GTEST_5_TUPLE_(T) { - public: - template <int k> friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, - GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), - f4_(t.f4_) {} - - template <GTEST_5_TYPENAMES_(U)> - tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_), f4_(t.f4_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template <GTEST_5_TYPENAMES_(U)> - tuple& operator=(const GTEST_5_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template <GTEST_5_TYPENAMES_(U)> - tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - f4_ = t.f4_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; - T4 f4_; -}; - -template <GTEST_6_TYPENAMES_(T)> -class GTEST_6_TUPLE_(T) { - public: - template <int k> friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, - GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), - f5_(f5) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), - f4_(t.f4_), f5_(t.f5_) {} - - template <GTEST_6_TYPENAMES_(U)> - tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template <GTEST_6_TYPENAMES_(U)> - tuple& operator=(const GTEST_6_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template <GTEST_6_TYPENAMES_(U)> - tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - f4_ = t.f4_; - f5_ = t.f5_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; - T4 f4_; - T5 f5_; -}; - -template <GTEST_7_TYPENAMES_(T)> -class GTEST_7_TUPLE_(T) { - public: - template <int k> friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, - GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2), - f3_(f3), f4_(f4), f5_(f5), f6_(f6) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), - f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} - - template <GTEST_7_TYPENAMES_(U)> - tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template <GTEST_7_TYPENAMES_(U)> - tuple& operator=(const GTEST_7_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template <GTEST_7_TYPENAMES_(U)> - tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - f4_ = t.f4_; - f5_ = t.f5_; - f6_ = t.f6_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; - T4 f4_; - T5 f5_; - T6 f6_; -}; - -template <GTEST_8_TYPENAMES_(T)> -class GTEST_8_TUPLE_(T) { - public: - template <int k> friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, - GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, - GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), - f5_(f5), f6_(f6), f7_(f7) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), - f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} - - template <GTEST_8_TYPENAMES_(U)> - tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template <GTEST_8_TYPENAMES_(U)> - tuple& operator=(const GTEST_8_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template <GTEST_8_TYPENAMES_(U)> - tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - f4_ = t.f4_; - f5_ = t.f5_; - f6_ = t.f6_; - f7_ = t.f7_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; - T4 f4_; - T5 f5_; - T6 f6_; - T7 f7_; -}; - -template <GTEST_9_TYPENAMES_(T)> -class GTEST_9_TUPLE_(T) { - public: - template <int k> friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, - GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, - GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4), - f5_(f5), f6_(f6), f7_(f7), f8_(f8) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), - f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} - - template <GTEST_9_TYPENAMES_(U)> - tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template <GTEST_9_TYPENAMES_(U)> - tuple& operator=(const GTEST_9_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template <GTEST_9_TYPENAMES_(U)> - tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - f4_ = t.f4_; - f5_ = t.f5_; - f6_ = t.f6_; - f7_ = t.f7_; - f8_ = t.f8_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; - T4 f4_; - T5 f5_; - T6 f6_; - T7 f7_; - T8 f8_; -}; - -template <GTEST_10_TYPENAMES_(T)> -class tuple { - public: - template <int k> friend class gtest_internal::Get; - - tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(), - f9_() {} - - explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1, - GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4, - GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7, - GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2), - f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {} - - tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_), - f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {} - - template <GTEST_10_TYPENAMES_(U)> - tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), - f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), - f9_(t.f9_) {} - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template <GTEST_10_TYPENAMES_(U)> - tuple& operator=(const GTEST_10_TUPLE_(U)& t) { - return CopyFrom(t); - } - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template <GTEST_10_TYPENAMES_(U)> - tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) { - f0_ = t.f0_; - f1_ = t.f1_; - f2_ = t.f2_; - f3_ = t.f3_; - f4_ = t.f4_; - f5_ = t.f5_; - f6_ = t.f6_; - f7_ = t.f7_; - f8_ = t.f8_; - f9_ = t.f9_; - return *this; - } - - T0 f0_; - T1 f1_; - T2 f2_; - T3 f3_; - T4 f4_; - T5 f5_; - T6 f6_; - T7 f7_; - T8 f8_; - T9 f9_; -}; - -// 6.1.3.2 Tuple creation functions. - -// Known limitations: we don't support passing an -// std::tr1::reference_wrapper<T> to make_tuple(). And we don't -// implement tie(). - -inline tuple<> make_tuple() { return tuple<>(); } - -template <GTEST_1_TYPENAMES_(T)> -inline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) { - return GTEST_1_TUPLE_(T)(f0); -} - -template <GTEST_2_TYPENAMES_(T)> -inline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) { - return GTEST_2_TUPLE_(T)(f0, f1); -} - -template <GTEST_3_TYPENAMES_(T)> -inline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) { - return GTEST_3_TUPLE_(T)(f0, f1, f2); -} - -template <GTEST_4_TYPENAMES_(T)> -inline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3) { - return GTEST_4_TUPLE_(T)(f0, f1, f2, f3); -} - -template <GTEST_5_TYPENAMES_(T)> -inline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3, const T4& f4) { - return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4); -} - -template <GTEST_6_TYPENAMES_(T)> -inline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3, const T4& f4, const T5& f5) { - return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5); -} - -template <GTEST_7_TYPENAMES_(T)> -inline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3, const T4& f4, const T5& f5, const T6& f6) { - return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6); -} - -template <GTEST_8_TYPENAMES_(T)> -inline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) { - return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7); -} - -template <GTEST_9_TYPENAMES_(T)> -inline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, - const T8& f8) { - return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8); -} - -template <GTEST_10_TYPENAMES_(T)> -inline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2, - const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7, - const T8& f8, const T9& f9) { - return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9); -} - -// 6.1.3.3 Tuple helper classes. - -template <typename Tuple> struct tuple_size; - -template <GTEST_0_TYPENAMES_(T)> -struct tuple_size<GTEST_0_TUPLE_(T) > { - static const int value = 0; -}; - -template <GTEST_1_TYPENAMES_(T)> -struct tuple_size<GTEST_1_TUPLE_(T) > { - static const int value = 1; -}; - -template <GTEST_2_TYPENAMES_(T)> -struct tuple_size<GTEST_2_TUPLE_(T) > { - static const int value = 2; -}; - -template <GTEST_3_TYPENAMES_(T)> -struct tuple_size<GTEST_3_TUPLE_(T) > { - static const int value = 3; -}; - -template <GTEST_4_TYPENAMES_(T)> -struct tuple_size<GTEST_4_TUPLE_(T) > { - static const int value = 4; -}; - -template <GTEST_5_TYPENAMES_(T)> -struct tuple_size<GTEST_5_TUPLE_(T) > { - static const int value = 5; -}; - -template <GTEST_6_TYPENAMES_(T)> -struct tuple_size<GTEST_6_TUPLE_(T) > { - static const int value = 6; -}; - -template <GTEST_7_TYPENAMES_(T)> -struct tuple_size<GTEST_7_TUPLE_(T) > { - static const int value = 7; -}; - -template <GTEST_8_TYPENAMES_(T)> -struct tuple_size<GTEST_8_TUPLE_(T) > { - static const int value = 8; -}; - -template <GTEST_9_TYPENAMES_(T)> -struct tuple_size<GTEST_9_TUPLE_(T) > { - static const int value = 9; -}; - -template <GTEST_10_TYPENAMES_(T)> -struct tuple_size<GTEST_10_TUPLE_(T) > { - static const int value = 10; -}; - -template <int k, class Tuple> -struct tuple_element { - typedef typename gtest_internal::TupleElement< - k < (tuple_size<Tuple>::value), k, Tuple>::type type; -}; - -#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type - -// 6.1.3.4 Element access. - -namespace gtest_internal { - -template <> -class Get<0> { - public: - template <class Tuple> - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) - Field(Tuple& t) { return t.f0_; } // NOLINT - - template <class Tuple> - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple)) - ConstField(const Tuple& t) { return t.f0_; } -}; - -template <> -class Get<1> { - public: - template <class Tuple> - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) - Field(Tuple& t) { return t.f1_; } // NOLINT - - template <class Tuple> - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple)) - ConstField(const Tuple& t) { return t.f1_; } -}; - -template <> -class Get<2> { - public: - template <class Tuple> - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) - Field(Tuple& t) { return t.f2_; } // NOLINT - - template <class Tuple> - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple)) - ConstField(const Tuple& t) { return t.f2_; } -}; - -template <> -class Get<3> { - public: - template <class Tuple> - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) - Field(Tuple& t) { return t.f3_; } // NOLINT - - template <class Tuple> - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple)) - ConstField(const Tuple& t) { return t.f3_; } -}; - -template <> -class Get<4> { - public: - template <class Tuple> - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) - Field(Tuple& t) { return t.f4_; } // NOLINT - - template <class Tuple> - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple)) - ConstField(const Tuple& t) { return t.f4_; } -}; - -template <> -class Get<5> { - public: - template <class Tuple> - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) - Field(Tuple& t) { return t.f5_; } // NOLINT - - template <class Tuple> - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple)) - ConstField(const Tuple& t) { return t.f5_; } -}; - -template <> -class Get<6> { - public: - template <class Tuple> - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) - Field(Tuple& t) { return t.f6_; } // NOLINT - - template <class Tuple> - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple)) - ConstField(const Tuple& t) { return t.f6_; } -}; - -template <> -class Get<7> { - public: - template <class Tuple> - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) - Field(Tuple& t) { return t.f7_; } // NOLINT - - template <class Tuple> - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple)) - ConstField(const Tuple& t) { return t.f7_; } -}; - -template <> -class Get<8> { - public: - template <class Tuple> - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) - Field(Tuple& t) { return t.f8_; } // NOLINT - - template <class Tuple> - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple)) - ConstField(const Tuple& t) { return t.f8_; } -}; - -template <> -class Get<9> { - public: - template <class Tuple> - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) - Field(Tuple& t) { return t.f9_; } // NOLINT - - template <class Tuple> - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple)) - ConstField(const Tuple& t) { return t.f9_; } -}; - -} // namespace gtest_internal - -template <int k, GTEST_10_TYPENAMES_(T)> -GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) -get(GTEST_10_TUPLE_(T)& t) { - return gtest_internal::Get<k>::Field(t); -} - -template <int k, GTEST_10_TYPENAMES_(T)> -GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T))) -get(const GTEST_10_TUPLE_(T)& t) { - return gtest_internal::Get<k>::ConstField(t); -} - -// 6.1.3.5 Relational operators - -// We only implement == and !=, as we don't have a need for the rest yet. - -namespace gtest_internal { - -// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the -// first k fields of t1 equals the first k fields of t2. -// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if -// k1 != k2. -template <int kSize1, int kSize2> -struct SameSizeTuplePrefixComparator; - -template <> -struct SameSizeTuplePrefixComparator<0, 0> { - template <class Tuple1, class Tuple2> - static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) { - return true; - } -}; - -template <int k> -struct SameSizeTuplePrefixComparator<k, k> { - template <class Tuple1, class Tuple2> - static bool Eq(const Tuple1& t1, const Tuple2& t2) { - return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) && - ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2); - } -}; - -} // namespace gtest_internal - -template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)> -inline bool operator==(const GTEST_10_TUPLE_(T)& t, - const GTEST_10_TUPLE_(U)& u) { - return gtest_internal::SameSizeTuplePrefixComparator< - tuple_size<GTEST_10_TUPLE_(T) >::value, - tuple_size<GTEST_10_TUPLE_(U) >::value>::Eq(t, u); -} - -template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)> -inline bool operator!=(const GTEST_10_TUPLE_(T)& t, - const GTEST_10_TUPLE_(U)& u) { return !(t == u); } - -// 6.1.4 Pairs. -// Unimplemented. - -} // namespace tr1 -} // namespace std - -#undef GTEST_0_TUPLE_ -#undef GTEST_1_TUPLE_ -#undef GTEST_2_TUPLE_ -#undef GTEST_3_TUPLE_ -#undef GTEST_4_TUPLE_ -#undef GTEST_5_TUPLE_ -#undef GTEST_6_TUPLE_ -#undef GTEST_7_TUPLE_ -#undef GTEST_8_TUPLE_ -#undef GTEST_9_TUPLE_ -#undef GTEST_10_TUPLE_ - -#undef GTEST_0_TYPENAMES_ -#undef GTEST_1_TYPENAMES_ -#undef GTEST_2_TYPENAMES_ -#undef GTEST_3_TYPENAMES_ -#undef GTEST_4_TYPENAMES_ -#undef GTEST_5_TYPENAMES_ -#undef GTEST_6_TYPENAMES_ -#undef GTEST_7_TYPENAMES_ -#undef GTEST_8_TYPENAMES_ -#undef GTEST_9_TYPENAMES_ -#undef GTEST_10_TYPENAMES_ - -#undef GTEST_DECLARE_TUPLE_AS_FRIEND_ -#undef GTEST_BY_REF_ -#undef GTEST_ADD_REF_ -#undef GTEST_TUPLE_ELEMENT_ - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ diff --git a/test/gtest/include/gtest/internal/gtest-tuple.h.pump b/test/gtest/include/gtest/internal/gtest-tuple.h.pump deleted file mode 100644 index 429ddfeec..000000000 --- a/test/gtest/include/gtest/internal/gtest-tuple.h.pump +++ /dev/null @@ -1,347 +0,0 @@ -$$ -*- mode: c++; -*- -$var n = 10 $$ Maximum number of tuple fields we want to support. -$$ This meta comment fixes auto-indentation in Emacs. }} -// Copyright 2009 Google Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Author: wan@google.com (Zhanyong Wan) - -// Implements a subset of TR1 tuple needed by Google Test and Google Mock. - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ - -#include <utility> // For ::std::pair. - -// The compiler used in Symbian has a bug that prevents us from declaring the -// tuple template as a friend (it complains that tuple is redefined). This -// hack bypasses the bug by declaring the members that should otherwise be -// private as public. -// Sun Studio versions < 12 also have the above bug. -#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590) -# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public: -#else -# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \ - template <GTEST_$(n)_TYPENAMES_(U)> friend class tuple; \ - private: -#endif - -// Visual Studio 2010, 2012, and 2013 define symbols in std::tr1 that conflict -// with our own definitions. Therefore using our own tuple does not work on -// those compilers. -#if defined(_MSC_VER) && _MSC_VER >= 1600 /* 1600 is Visual Studio 2010 */ -# error "gtest's tuple doesn't compile on Visual Studio 2010 or later. \ -GTEST_USE_OWN_TR1_TUPLE must be set to 0 on those compilers." -#endif - - -$range i 0..n-1 -$range j 0..n -$range k 1..n -// GTEST_n_TUPLE_(T) is the type of an n-tuple. -#define GTEST_0_TUPLE_(T) tuple<> - -$for k [[ -$range m 0..k-1 -$range m2 k..n-1 -#define GTEST_$(k)_TUPLE_(T) tuple<$for m, [[T##$m]]$for m2 [[, void]]> - -]] - -// GTEST_n_TYPENAMES_(T) declares a list of n typenames. - -$for j [[ -$range m 0..j-1 -#define GTEST_$(j)_TYPENAMES_(T) $for m, [[typename T##$m]] - - -]] - -// In theory, defining stuff in the ::std namespace is undefined -// behavior. We can do this as we are playing the role of a standard -// library vendor. -namespace std { -namespace tr1 { - -template <$for i, [[typename T$i = void]]> -class tuple; - -// Anything in namespace gtest_internal is Google Test's INTERNAL -// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code. -namespace gtest_internal { - -// ByRef<T>::type is T if T is a reference; otherwise it's const T&. -template <typename T> -struct ByRef { typedef const T& type; }; // NOLINT -template <typename T> -struct ByRef<T&> { typedef T& type; }; // NOLINT - -// A handy wrapper for ByRef. -#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type - -// AddRef<T>::type is T if T is a reference; otherwise it's T&. This -// is the same as tr1::add_reference<T>::type. -template <typename T> -struct AddRef { typedef T& type; }; // NOLINT -template <typename T> -struct AddRef<T&> { typedef T& type; }; // NOLINT - -// A handy wrapper for AddRef. -#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type - -// A helper for implementing get<k>(). -template <int k> class Get; - -// A helper for implementing tuple_element<k, T>. kIndexValid is true -// iff k < the number of fields in tuple type T. -template <bool kIndexValid, int kIndex, class Tuple> -struct TupleElement; - - -$for i [[ -template <GTEST_$(n)_TYPENAMES_(T)> -struct TupleElement<true, $i, GTEST_$(n)_TUPLE_(T) > { - typedef T$i type; -}; - - -]] -} // namespace gtest_internal - -template <> -class tuple<> { - public: - tuple() {} - tuple(const tuple& /* t */) {} - tuple& operator=(const tuple& /* t */) { return *this; } -}; - - -$for k [[ -$range m 0..k-1 -template <GTEST_$(k)_TYPENAMES_(T)> -class $if k < n [[GTEST_$(k)_TUPLE_(T)]] $else [[tuple]] { - public: - template <int k> friend class gtest_internal::Get; - - tuple() : $for m, [[f$(m)_()]] {} - - explicit tuple($for m, [[GTEST_BY_REF_(T$m) f$m]]) : [[]] -$for m, [[f$(m)_(f$m)]] {} - - tuple(const tuple& t) : $for m, [[f$(m)_(t.f$(m)_)]] {} - - template <GTEST_$(k)_TYPENAMES_(U)> - tuple(const GTEST_$(k)_TUPLE_(U)& t) : $for m, [[f$(m)_(t.f$(m)_)]] {} - -$if k == 2 [[ - template <typename U0, typename U1> - tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {} - -]] - - tuple& operator=(const tuple& t) { return CopyFrom(t); } - - template <GTEST_$(k)_TYPENAMES_(U)> - tuple& operator=(const GTEST_$(k)_TUPLE_(U)& t) { - return CopyFrom(t); - } - -$if k == 2 [[ - template <typename U0, typename U1> - tuple& operator=(const ::std::pair<U0, U1>& p) { - f0_ = p.first; - f1_ = p.second; - return *this; - } - -]] - - GTEST_DECLARE_TUPLE_AS_FRIEND_ - - template <GTEST_$(k)_TYPENAMES_(U)> - tuple& CopyFrom(const GTEST_$(k)_TUPLE_(U)& t) { - -$for m [[ - f$(m)_ = t.f$(m)_; - -]] - return *this; - } - - -$for m [[ - T$m f$(m)_; - -]] -}; - - -]] -// 6.1.3.2 Tuple creation functions. - -// Known limitations: we don't support passing an -// std::tr1::reference_wrapper<T> to make_tuple(). And we don't -// implement tie(). - -inline tuple<> make_tuple() { return tuple<>(); } - -$for k [[ -$range m 0..k-1 - -template <GTEST_$(k)_TYPENAMES_(T)> -inline GTEST_$(k)_TUPLE_(T) make_tuple($for m, [[const T$m& f$m]]) { - return GTEST_$(k)_TUPLE_(T)($for m, [[f$m]]); -} - -]] - -// 6.1.3.3 Tuple helper classes. - -template <typename Tuple> struct tuple_size; - - -$for j [[ -template <GTEST_$(j)_TYPENAMES_(T)> -struct tuple_size<GTEST_$(j)_TUPLE_(T) > { - static const int value = $j; -}; - - -]] -template <int k, class Tuple> -struct tuple_element { - typedef typename gtest_internal::TupleElement< - k < (tuple_size<Tuple>::value), k, Tuple>::type type; -}; - -#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type - -// 6.1.3.4 Element access. - -namespace gtest_internal { - - -$for i [[ -template <> -class Get<$i> { - public: - template <class Tuple> - static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_($i, Tuple)) - Field(Tuple& t) { return t.f$(i)_; } // NOLINT - - template <class Tuple> - static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_($i, Tuple)) - ConstField(const Tuple& t) { return t.f$(i)_; } -}; - - -]] -} // namespace gtest_internal - -template <int k, GTEST_$(n)_TYPENAMES_(T)> -GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_$(n)_TUPLE_(T))) -get(GTEST_$(n)_TUPLE_(T)& t) { - return gtest_internal::Get<k>::Field(t); -} - -template <int k, GTEST_$(n)_TYPENAMES_(T)> -GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_$(n)_TUPLE_(T))) -get(const GTEST_$(n)_TUPLE_(T)& t) { - return gtest_internal::Get<k>::ConstField(t); -} - -// 6.1.3.5 Relational operators - -// We only implement == and !=, as we don't have a need for the rest yet. - -namespace gtest_internal { - -// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the -// first k fields of t1 equals the first k fields of t2. -// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if -// k1 != k2. -template <int kSize1, int kSize2> -struct SameSizeTuplePrefixComparator; - -template <> -struct SameSizeTuplePrefixComparator<0, 0> { - template <class Tuple1, class Tuple2> - static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) { - return true; - } -}; - -template <int k> -struct SameSizeTuplePrefixComparator<k, k> { - template <class Tuple1, class Tuple2> - static bool Eq(const Tuple1& t1, const Tuple2& t2) { - return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) && - ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2); - } -}; - -} // namespace gtest_internal - -template <GTEST_$(n)_TYPENAMES_(T), GTEST_$(n)_TYPENAMES_(U)> -inline bool operator==(const GTEST_$(n)_TUPLE_(T)& t, - const GTEST_$(n)_TUPLE_(U)& u) { - return gtest_internal::SameSizeTuplePrefixComparator< - tuple_size<GTEST_$(n)_TUPLE_(T) >::value, - tuple_size<GTEST_$(n)_TUPLE_(U) >::value>::Eq(t, u); -} - -template <GTEST_$(n)_TYPENAMES_(T), GTEST_$(n)_TYPENAMES_(U)> -inline bool operator!=(const GTEST_$(n)_TUPLE_(T)& t, - const GTEST_$(n)_TUPLE_(U)& u) { return !(t == u); } - -// 6.1.4 Pairs. -// Unimplemented. - -} // namespace tr1 -} // namespace std - - -$for j [[ -#undef GTEST_$(j)_TUPLE_ - -]] - - -$for j [[ -#undef GTEST_$(j)_TYPENAMES_ - -]] - -#undef GTEST_DECLARE_TUPLE_AS_FRIEND_ -#undef GTEST_BY_REF_ -#undef GTEST_ADD_REF_ -#undef GTEST_TUPLE_ELEMENT_ - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_ diff --git a/test/gtest/include/gtest/internal/gtest-type-util.h b/test/gtest/include/gtest/internal/gtest-type-util.h deleted file mode 100644 index 3d7542d1f..000000000 --- a/test/gtest/include/gtest/internal/gtest-type-util.h +++ /dev/null @@ -1,3335 +0,0 @@ -// This file was GENERATED by command: -// pump.py gtest-type-util.h.pump -// DO NOT EDIT BY HAND!!! - -// Copyright 2008 Google Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Type utilities needed for implementing typed and type-parameterized -// tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND! -// -// Currently we support at most 50 types in a list, and at most 50 -// type-parameterized tests in one type-parameterized test suite. -// Please contact googletestframework@googlegroups.com if you need -// more. - -// GOOGLETEST_CM0001 DO NOT DELETE - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ - -#include "gtest/internal/gtest-port.h" - -// #ifdef __GNUC__ is too general here. It is possible to use gcc without using -// libstdc++ (which is where cxxabi.h comes from). -# if GTEST_HAS_CXXABI_H_ -# include <cxxabi.h> -# elif defined(__HP_aCC) -# include <acxx_demangle.h> -# endif // GTEST_HASH_CXXABI_H_ - -namespace testing { -namespace internal { - -// Canonicalizes a given name with respect to the Standard C++ Library. -// This handles removing the inline namespace within `std` that is -// used by various standard libraries (e.g., `std::__1`). Names outside -// of namespace std are returned unmodified. -inline std::string CanonicalizeForStdLibVersioning(std::string s) { - static const char prefix[] = "std::__"; - if (s.compare(0, strlen(prefix), prefix) == 0) { - std::string::size_type end = s.find("::", strlen(prefix)); - if (end != s.npos) { - // Erase everything between the initial `std` and the second `::`. - s.erase(strlen("std"), end - strlen("std")); - } - } - return s; -} - -// GetTypeName<T>() returns a human-readable name of type T. -// NB: This function is also used in Google Mock, so don't move it inside of -// the typed-test-only section below. -template <typename T> -std::string GetTypeName() { -# if GTEST_HAS_RTTI - - const char* const name = typeid(T).name(); -# if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC) - int status = 0; - // gcc's implementation of typeid(T).name() mangles the type name, - // so we have to demangle it. -# if GTEST_HAS_CXXABI_H_ - using abi::__cxa_demangle; -# endif // GTEST_HAS_CXXABI_H_ - char* const readable_name = __cxa_demangle(name, nullptr, nullptr, &status); - const std::string name_str(status == 0 ? readable_name : name); - free(readable_name); - return CanonicalizeForStdLibVersioning(name_str); -# else - return name; -# endif // GTEST_HAS_CXXABI_H_ || __HP_aCC - -# else - - return "<type>"; - -# endif // GTEST_HAS_RTTI -} - -#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P - -// A unique type used as the default value for the arguments of class -// template Types. This allows us to simulate variadic templates -// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't -// support directly. -struct None {}; - -// The following family of struct and struct templates are used to -// represent type lists. In particular, TypesN<T1, T2, ..., TN> -// represents a type list with N types (T1, T2, ..., and TN) in it. -// Except for Types0, every struct in the family has two member types: -// Head for the first type in the list, and Tail for the rest of the -// list. - -// The empty type list. -struct Types0 {}; - -// Type lists of length 1, 2, 3, and so on. - -template <typename T1> -struct Types1 { - typedef T1 Head; - typedef Types0 Tail; -}; -template <typename T1, typename T2> -struct Types2 { - typedef T1 Head; - typedef Types1<T2> Tail; -}; - -template <typename T1, typename T2, typename T3> -struct Types3 { - typedef T1 Head; - typedef Types2<T2, T3> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4> -struct Types4 { - typedef T1 Head; - typedef Types3<T2, T3, T4> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5> -struct Types5 { - typedef T1 Head; - typedef Types4<T2, T3, T4, T5> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6> -struct Types6 { - typedef T1 Head; - typedef Types5<T2, T3, T4, T5, T6> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7> -struct Types7 { - typedef T1 Head; - typedef Types6<T2, T3, T4, T5, T6, T7> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8> -struct Types8 { - typedef T1 Head; - typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9> -struct Types9 { - typedef T1 Head; - typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10> -struct Types10 { - typedef T1 Head; - typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11> -struct Types11 { - typedef T1 Head; - typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12> -struct Types12 { - typedef T1 Head; - typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13> -struct Types13 { - typedef T1 Head; - typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14> -struct Types14 { - typedef T1 Head; - typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15> -struct Types15 { - typedef T1 Head; - typedef Types14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16> -struct Types16 { - typedef T1 Head; - typedef Types15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17> -struct Types17 { - typedef T1 Head; - typedef Types16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18> -struct Types18 { - typedef T1 Head; - typedef Types17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19> -struct Types19 { - typedef T1 Head; - typedef Types18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20> -struct Types20 { - typedef T1 Head; - typedef Types19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21> -struct Types21 { - typedef T1 Head; - typedef Types20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22> -struct Types22 { - typedef T1 Head; - typedef Types21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23> -struct Types23 { - typedef T1 Head; - typedef Types22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24> -struct Types24 { - typedef T1 Head; - typedef Types23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25> -struct Types25 { - typedef T1 Head; - typedef Types24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26> -struct Types26 { - typedef T1 Head; - typedef Types25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27> -struct Types27 { - typedef T1 Head; - typedef Types26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28> -struct Types28 { - typedef T1 Head; - typedef Types27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29> -struct Types29 { - typedef T1 Head; - typedef Types28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30> -struct Types30 { - typedef T1 Head; - typedef Types29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31> -struct Types31 { - typedef T1 Head; - typedef Types30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32> -struct Types32 { - typedef T1 Head; - typedef Types31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33> -struct Types33 { - typedef T1 Head; - typedef Types32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34> -struct Types34 { - typedef T1 Head; - typedef Types33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35> -struct Types35 { - typedef T1 Head; - typedef Types34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36> -struct Types36 { - typedef T1 Head; - typedef Types35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37> -struct Types37 { - typedef T1 Head; - typedef Types36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38> -struct Types38 { - typedef T1 Head; - typedef Types37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39> -struct Types39 { - typedef T1 Head; - typedef Types38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40> -struct Types40 { - typedef T1 Head; - typedef Types39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41> -struct Types41 { - typedef T1 Head; - typedef Types40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42> -struct Types42 { - typedef T1 Head; - typedef Types41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43> -struct Types43 { - typedef T1 Head; - typedef Types42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, - T43> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44> -struct Types44 { - typedef T1 Head; - typedef Types43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45> -struct Types45 { - typedef T1 Head; - typedef Types44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44, T45> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46> -struct Types46 { - typedef T1 Head; - typedef Types45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44, T45, T46> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47> -struct Types47 { - typedef T1 Head; - typedef Types46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44, T45, T46, T47> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47, typename T48> -struct Types48 { - typedef T1 Head; - typedef Types47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44, T45, T46, T47, T48> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47, typename T48, typename T49> -struct Types49 { - typedef T1 Head; - typedef Types48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44, T45, T46, T47, T48, T49> Tail; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47, typename T48, typename T49, typename T50> -struct Types50 { - typedef T1 Head; - typedef Types49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44, T45, T46, T47, T48, T49, T50> Tail; -}; - - -} // namespace internal - -// We don't want to require the users to write TypesN<...> directly, -// as that would require them to count the length. Types<...> is much -// easier to write, but generates horrible messages when there is a -// compiler error, as gcc insists on printing out each template -// argument, even if it has the default value (this means Types<int> -// will appear as Types<int, None, None, ..., None> in the compiler -// errors). -// -// Our solution is to combine the best part of the two approaches: a -// user would write Types<T1, ..., TN>, and Google Test will translate -// that to TypesN<T1, ..., TN> internally to make error messages -// readable. The translation is done by the 'type' member of the -// Types template. -template <typename T1 = internal::None, typename T2 = internal::None, - typename T3 = internal::None, typename T4 = internal::None, - typename T5 = internal::None, typename T6 = internal::None, - typename T7 = internal::None, typename T8 = internal::None, - typename T9 = internal::None, typename T10 = internal::None, - typename T11 = internal::None, typename T12 = internal::None, - typename T13 = internal::None, typename T14 = internal::None, - typename T15 = internal::None, typename T16 = internal::None, - typename T17 = internal::None, typename T18 = internal::None, - typename T19 = internal::None, typename T20 = internal::None, - typename T21 = internal::None, typename T22 = internal::None, - typename T23 = internal::None, typename T24 = internal::None, - typename T25 = internal::None, typename T26 = internal::None, - typename T27 = internal::None, typename T28 = internal::None, - typename T29 = internal::None, typename T30 = internal::None, - typename T31 = internal::None, typename T32 = internal::None, - typename T33 = internal::None, typename T34 = internal::None, - typename T35 = internal::None, typename T36 = internal::None, - typename T37 = internal::None, typename T38 = internal::None, - typename T39 = internal::None, typename T40 = internal::None, - typename T41 = internal::None, typename T42 = internal::None, - typename T43 = internal::None, typename T44 = internal::None, - typename T45 = internal::None, typename T46 = internal::None, - typename T47 = internal::None, typename T48 = internal::None, - typename T49 = internal::None, typename T50 = internal::None> -struct Types { - typedef internal::Types50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, - T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> type; -}; - -template <> -struct Types<internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None> { - typedef internal::Types0 type; -}; -template <typename T1> -struct Types<T1, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None> { - typedef internal::Types1<T1> type; -}; -template <typename T1, typename T2> -struct Types<T1, T2, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None> { - typedef internal::Types2<T1, T2> type; -}; -template <typename T1, typename T2, typename T3> -struct Types<T1, T2, T3, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None> { - typedef internal::Types3<T1, T2, T3> type; -}; -template <typename T1, typename T2, typename T3, typename T4> -struct Types<T1, T2, T3, T4, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None> { - typedef internal::Types4<T1, T2, T3, T4> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5> -struct Types<T1, T2, T3, T4, T5, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None> { - typedef internal::Types5<T1, T2, T3, T4, T5> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6> -struct Types<T1, T2, T3, T4, T5, T6, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None> { - typedef internal::Types6<T1, T2, T3, T4, T5, T6> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7> -struct Types<T1, T2, T3, T4, T5, T6, T7, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None> { - typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None> { - typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None> { - typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None> { - typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None> { - typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None> { - typedef internal::Types12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, - T12> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None> { - typedef internal::Types13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None> { - typedef internal::Types14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None> { - typedef internal::Types15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None> { - typedef internal::Types16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None> { - typedef internal::Types17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None> { - typedef internal::Types18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None> { - typedef internal::Types19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None> { - typedef internal::Types20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None> { - typedef internal::Types21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None> { - typedef internal::Types22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None> { - typedef internal::Types23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None> { - typedef internal::Types24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None> { - typedef internal::Types25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None> { - typedef internal::Types26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, - T26> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None> { - typedef internal::Types27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None> { - typedef internal::Types28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None> { - typedef internal::Types29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None> { - typedef internal::Types30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None> { - typedef internal::Types31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None> { - typedef internal::Types32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None> { - typedef internal::Types33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None> { - typedef internal::Types34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None> { - typedef internal::Types35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None> { - typedef internal::Types36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, T37, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None> { - typedef internal::Types37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, T37, T38, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None> { - typedef internal::Types38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, T37, T38, T39, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None> { - typedef internal::Types39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None> { - typedef internal::Types40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, - T40> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None, internal::None> { - typedef internal::Types41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, - T41> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, internal::None, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None> { - typedef internal::Types42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, - T41, T42> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None, internal::None> { - typedef internal::Types43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, - T41, T42, T43> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, - internal::None, internal::None, internal::None, internal::None, - internal::None, internal::None> { - typedef internal::Types44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, - T41, T42, T43, T44> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, - internal::None, internal::None, internal::None, internal::None, - internal::None> { - typedef internal::Types45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, - T41, T42, T43, T44, T45> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, - T46, internal::None, internal::None, internal::None, internal::None> { - typedef internal::Types46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, - T41, T42, T43, T44, T45, T46> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, - T46, T47, internal::None, internal::None, internal::None> { - typedef internal::Types47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, - T41, T42, T43, T44, T45, T46, T47> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47, typename T48> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, - T46, T47, T48, internal::None, internal::None> { - typedef internal::Types48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, - T41, T42, T43, T44, T45, T46, T47, T48> type; -}; -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47, typename T48, typename T49> -struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, - T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, - T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45, - T46, T47, T48, T49, internal::None> { - typedef internal::Types49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, - T41, T42, T43, T44, T45, T46, T47, T48, T49> type; -}; - -namespace internal { - -# define GTEST_TEMPLATE_ template <typename T> class - -// The template "selector" struct TemplateSel<Tmpl> is used to -// represent Tmpl, which must be a class template with one type -// parameter, as a type. TemplateSel<Tmpl>::Bind<T>::type is defined -// as the type Tmpl<T>. This allows us to actually instantiate the -// template "selected" by TemplateSel<Tmpl>. -// -// This trick is necessary for simulating typedef for class templates, -// which C++ doesn't support directly. -template <GTEST_TEMPLATE_ Tmpl> -struct TemplateSel { - template <typename T> - struct Bind { - typedef Tmpl<T> type; - }; -}; - -# define GTEST_BIND_(TmplSel, T) \ - TmplSel::template Bind<T>::type - -// A unique struct template used as the default value for the -// arguments of class template Templates. This allows us to simulate -// variadic templates (e.g. Templates<int>, Templates<int, double>, -// and etc), which C++ doesn't support directly. -template <typename T> -struct NoneT {}; - -// The following family of struct and struct templates are used to -// represent template lists. In particular, TemplatesN<T1, T2, ..., -// TN> represents a list of N templates (T1, T2, ..., and TN). Except -// for Templates0, every struct in the family has two member types: -// Head for the selector of the first template in the list, and Tail -// for the rest of the list. - -// The empty template list. -struct Templates0 {}; - -// Template lists of length 1, 2, 3, and so on. - -template <GTEST_TEMPLATE_ T1> -struct Templates1 { - typedef TemplateSel<T1> Head; - typedef Templates0 Tail; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2> -struct Templates2 { - typedef TemplateSel<T1> Head; - typedef Templates1<T2> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3> -struct Templates3 { - typedef TemplateSel<T1> Head; - typedef Templates2<T2, T3> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4> -struct Templates4 { - typedef TemplateSel<T1> Head; - typedef Templates3<T2, T3, T4> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5> -struct Templates5 { - typedef TemplateSel<T1> Head; - typedef Templates4<T2, T3, T4, T5> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6> -struct Templates6 { - typedef TemplateSel<T1> Head; - typedef Templates5<T2, T3, T4, T5, T6> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7> -struct Templates7 { - typedef TemplateSel<T1> Head; - typedef Templates6<T2, T3, T4, T5, T6, T7> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8> -struct Templates8 { - typedef TemplateSel<T1> Head; - typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9> -struct Templates9 { - typedef TemplateSel<T1> Head; - typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10> -struct Templates10 { - typedef TemplateSel<T1> Head; - typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11> -struct Templates11 { - typedef TemplateSel<T1> Head; - typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12> -struct Templates12 { - typedef TemplateSel<T1> Head; - typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13> -struct Templates13 { - typedef TemplateSel<T1> Head; - typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14> -struct Templates14 { - typedef TemplateSel<T1> Head; - typedef Templates13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15> -struct Templates15 { - typedef TemplateSel<T1> Head; - typedef Templates14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16> -struct Templates16 { - typedef TemplateSel<T1> Head; - typedef Templates15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17> -struct Templates17 { - typedef TemplateSel<T1> Head; - typedef Templates16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18> -struct Templates18 { - typedef TemplateSel<T1> Head; - typedef Templates17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19> -struct Templates19 { - typedef TemplateSel<T1> Head; - typedef Templates18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20> -struct Templates20 { - typedef TemplateSel<T1> Head; - typedef Templates19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21> -struct Templates21 { - typedef TemplateSel<T1> Head; - typedef Templates20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22> -struct Templates22 { - typedef TemplateSel<T1> Head; - typedef Templates21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23> -struct Templates23 { - typedef TemplateSel<T1> Head; - typedef Templates22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24> -struct Templates24 { - typedef TemplateSel<T1> Head; - typedef Templates23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25> -struct Templates25 { - typedef TemplateSel<T1> Head; - typedef Templates24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26> -struct Templates26 { - typedef TemplateSel<T1> Head; - typedef Templates25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27> -struct Templates27 { - typedef TemplateSel<T1> Head; - typedef Templates26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28> -struct Templates28 { - typedef TemplateSel<T1> Head; - typedef Templates27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29> -struct Templates29 { - typedef TemplateSel<T1> Head; - typedef Templates28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30> -struct Templates30 { - typedef TemplateSel<T1> Head; - typedef Templates29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31> -struct Templates31 { - typedef TemplateSel<T1> Head; - typedef Templates30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32> -struct Templates32 { - typedef TemplateSel<T1> Head; - typedef Templates31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33> -struct Templates33 { - typedef TemplateSel<T1> Head; - typedef Templates32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34> -struct Templates34 { - typedef TemplateSel<T1> Head; - typedef Templates33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35> -struct Templates35 { - typedef TemplateSel<T1> Head; - typedef Templates34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36> -struct Templates36 { - typedef TemplateSel<T1> Head; - typedef Templates35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37> -struct Templates37 { - typedef TemplateSel<T1> Head; - typedef Templates36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38> -struct Templates38 { - typedef TemplateSel<T1> Head; - typedef Templates37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39> -struct Templates39 { - typedef TemplateSel<T1> Head; - typedef Templates38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40> -struct Templates40 { - typedef TemplateSel<T1> Head; - typedef Templates39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41> -struct Templates41 { - typedef TemplateSel<T1> Head; - typedef Templates40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42> -struct Templates42 { - typedef TemplateSel<T1> Head; - typedef Templates41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, - T42> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43> -struct Templates43 { - typedef TemplateSel<T1> Head; - typedef Templates42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, - T43> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44> -struct Templates44 { - typedef TemplateSel<T1> Head; - typedef Templates43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, - T43, T44> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45> -struct Templates45 { - typedef TemplateSel<T1> Head; - typedef Templates44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, - T43, T44, T45> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45, - GTEST_TEMPLATE_ T46> -struct Templates46 { - typedef TemplateSel<T1> Head; - typedef Templates45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, - T43, T44, T45, T46> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45, - GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47> -struct Templates47 { - typedef TemplateSel<T1> Head; - typedef Templates46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, - T43, T44, T45, T46, T47> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45, - GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48> -struct Templates48 { - typedef TemplateSel<T1> Head; - typedef Templates47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, - T43, T44, T45, T46, T47, T48> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45, - GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48, - GTEST_TEMPLATE_ T49> -struct Templates49 { - typedef TemplateSel<T1> Head; - typedef Templates48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, - T43, T44, T45, T46, T47, T48, T49> Tail; -}; - -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45, - GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48, - GTEST_TEMPLATE_ T49, GTEST_TEMPLATE_ T50> -struct Templates50 { - typedef TemplateSel<T1> Head; - typedef Templates49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, - T43, T44, T45, T46, T47, T48, T49, T50> Tail; -}; - - -// We don't want to require the users to write TemplatesN<...> directly, -// as that would require them to count the length. Templates<...> is much -// easier to write, but generates horrible messages when there is a -// compiler error, as gcc insists on printing out each template -// argument, even if it has the default value (this means Templates<list> -// will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler -// errors). -// -// Our solution is to combine the best part of the two approaches: a -// user would write Templates<T1, ..., TN>, and Google Test will translate -// that to TemplatesN<T1, ..., TN> internally to make error messages -// readable. The translation is done by the 'type' member of the -// Templates template. -template <GTEST_TEMPLATE_ T1 = NoneT, GTEST_TEMPLATE_ T2 = NoneT, - GTEST_TEMPLATE_ T3 = NoneT, GTEST_TEMPLATE_ T4 = NoneT, - GTEST_TEMPLATE_ T5 = NoneT, GTEST_TEMPLATE_ T6 = NoneT, - GTEST_TEMPLATE_ T7 = NoneT, GTEST_TEMPLATE_ T8 = NoneT, - GTEST_TEMPLATE_ T9 = NoneT, GTEST_TEMPLATE_ T10 = NoneT, - GTEST_TEMPLATE_ T11 = NoneT, GTEST_TEMPLATE_ T12 = NoneT, - GTEST_TEMPLATE_ T13 = NoneT, GTEST_TEMPLATE_ T14 = NoneT, - GTEST_TEMPLATE_ T15 = NoneT, GTEST_TEMPLATE_ T16 = NoneT, - GTEST_TEMPLATE_ T17 = NoneT, GTEST_TEMPLATE_ T18 = NoneT, - GTEST_TEMPLATE_ T19 = NoneT, GTEST_TEMPLATE_ T20 = NoneT, - GTEST_TEMPLATE_ T21 = NoneT, GTEST_TEMPLATE_ T22 = NoneT, - GTEST_TEMPLATE_ T23 = NoneT, GTEST_TEMPLATE_ T24 = NoneT, - GTEST_TEMPLATE_ T25 = NoneT, GTEST_TEMPLATE_ T26 = NoneT, - GTEST_TEMPLATE_ T27 = NoneT, GTEST_TEMPLATE_ T28 = NoneT, - GTEST_TEMPLATE_ T29 = NoneT, GTEST_TEMPLATE_ T30 = NoneT, - GTEST_TEMPLATE_ T31 = NoneT, GTEST_TEMPLATE_ T32 = NoneT, - GTEST_TEMPLATE_ T33 = NoneT, GTEST_TEMPLATE_ T34 = NoneT, - GTEST_TEMPLATE_ T35 = NoneT, GTEST_TEMPLATE_ T36 = NoneT, - GTEST_TEMPLATE_ T37 = NoneT, GTEST_TEMPLATE_ T38 = NoneT, - GTEST_TEMPLATE_ T39 = NoneT, GTEST_TEMPLATE_ T40 = NoneT, - GTEST_TEMPLATE_ T41 = NoneT, GTEST_TEMPLATE_ T42 = NoneT, - GTEST_TEMPLATE_ T43 = NoneT, GTEST_TEMPLATE_ T44 = NoneT, - GTEST_TEMPLATE_ T45 = NoneT, GTEST_TEMPLATE_ T46 = NoneT, - GTEST_TEMPLATE_ T47 = NoneT, GTEST_TEMPLATE_ T48 = NoneT, - GTEST_TEMPLATE_ T49 = NoneT, GTEST_TEMPLATE_ T50 = NoneT> -struct Templates { - typedef Templates50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, - T42, T43, T44, T45, T46, T47, T48, T49, T50> type; -}; - -template <> -struct Templates<NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT> { - typedef Templates0 type; -}; -template <GTEST_TEMPLATE_ T1> -struct Templates<T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT> { - typedef Templates1<T1> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2> -struct Templates<T1, T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT> { - typedef Templates2<T1, T2> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3> -struct Templates<T1, T2, T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates3<T1, T2, T3> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4> -struct Templates<T1, T2, T3, T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates4<T1, T2, T3, T4> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5> -struct Templates<T1, T2, T3, T4, T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates5<T1, T2, T3, T4, T5> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6> -struct Templates<T1, T2, T3, T4, T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates6<T1, T2, T3, T4, T5, T6> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7> -struct Templates<T1, T2, T3, T4, T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates7<T1, T2, T3, T4, T5, T6, T7> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates8<T1, T2, T3, T4, T5, T6, T7, T8> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT> { - typedef Templates18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT> { - typedef Templates19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT> { - typedef Templates20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT> { - typedef Templates21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT> { - typedef Templates22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT> { - typedef Templates23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT> { - typedef Templates24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT> { - typedef Templates25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT> { - typedef Templates26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT> { - typedef Templates27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT> { - typedef Templates28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT> { - typedef Templates29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, - T41> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, - T42> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, - T42, T43> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, - NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, - T42, T43, T44> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, - T45, NoneT, NoneT, NoneT, NoneT, NoneT> { - typedef Templates45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, - T42, T43, T44, T45> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45, - GTEST_TEMPLATE_ T46> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, - T45, T46, NoneT, NoneT, NoneT, NoneT> { - typedef Templates46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, - T42, T43, T44, T45, T46> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45, - GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, - T45, T46, T47, NoneT, NoneT, NoneT> { - typedef Templates47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, - T42, T43, T44, T45, T46, T47> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45, - GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, - T45, T46, T47, T48, NoneT, NoneT> { - typedef Templates48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, - T42, T43, T44, T45, T46, T47, T48> type; -}; -template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3, - GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6, - GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9, - GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12, - GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15, - GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18, - GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21, - GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24, - GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27, - GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30, - GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33, - GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36, - GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39, - GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42, - GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45, - GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48, - GTEST_TEMPLATE_ T49> -struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, - T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, - T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, - T45, T46, T47, T48, T49, NoneT> { - typedef Templates49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, - T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, - T42, T43, T44, T45, T46, T47, T48, T49> type; -}; - -// The TypeList template makes it possible to use either a single type -// or a Types<...> list in TYPED_TEST_SUITE() and -// INSTANTIATE_TYPED_TEST_SUITE_P(). - -template <typename T> -struct TypeList { - typedef Types1<T> type; -}; - -template <typename T1, typename T2, typename T3, typename T4, typename T5, - typename T6, typename T7, typename T8, typename T9, typename T10, - typename T11, typename T12, typename T13, typename T14, typename T15, - typename T16, typename T17, typename T18, typename T19, typename T20, - typename T21, typename T22, typename T23, typename T24, typename T25, - typename T26, typename T27, typename T28, typename T29, typename T30, - typename T31, typename T32, typename T33, typename T34, typename T35, - typename T36, typename T37, typename T38, typename T39, typename T40, - typename T41, typename T42, typename T43, typename T44, typename T45, - typename T46, typename T47, typename T48, typename T49, typename T50> -struct TypeList<Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, - T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, - T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, - T44, T45, T46, T47, T48, T49, T50> > { - typedef typename Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, - T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, - T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, - T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>::type type; -}; - -#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P - -} // namespace internal -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ diff --git a/test/gtest/include/gtest/internal/gtest-type-util.h.pump b/test/gtest/include/gtest/internal/gtest-type-util.h.pump deleted file mode 100644 index 5e31b7b32..000000000 --- a/test/gtest/include/gtest/internal/gtest-type-util.h.pump +++ /dev/null @@ -1,302 +0,0 @@ -$$ -*- mode: c++; -*- -$var n = 50 $$ Maximum length of type lists we want to support. -// Copyright 2008 Google Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -// Type utilities needed for implementing typed and type-parameterized -// tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND! -// -// Currently we support at most $n types in a list, and at most $n -// type-parameterized tests in one type-parameterized test suite. -// Please contact googletestframework@googlegroups.com if you need -// more. - -// GOOGLETEST_CM0001 DO NOT DELETE - -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ - -#include "gtest/internal/gtest-port.h" - -// #ifdef __GNUC__ is too general here. It is possible to use gcc without using -// libstdc++ (which is where cxxabi.h comes from). -# if GTEST_HAS_CXXABI_H_ -# include <cxxabi.h> -# elif defined(__HP_aCC) -# include <acxx_demangle.h> -# endif // GTEST_HASH_CXXABI_H_ - -namespace testing { -namespace internal { - -// Canonicalizes a given name with respect to the Standard C++ Library. -// This handles removing the inline namespace within `std` that is -// used by various standard libraries (e.g., `std::__1`). Names outside -// of namespace std are returned unmodified. -inline std::string CanonicalizeForStdLibVersioning(std::string s) { - static const char prefix[] = "std::__"; - if (s.compare(0, strlen(prefix), prefix) == 0) { - std::string::size_type end = s.find("::", strlen(prefix)); - if (end != s.npos) { - // Erase everything between the initial `std` and the second `::`. - s.erase(strlen("std"), end - strlen("std")); - } - } - return s; -} - -// GetTypeName<T>() returns a human-readable name of type T. -// NB: This function is also used in Google Mock, so don't move it inside of -// the typed-test-only section below. -template <typename T> -std::string GetTypeName() { -# if GTEST_HAS_RTTI - - const char* const name = typeid(T).name(); -# if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC) - int status = 0; - // gcc's implementation of typeid(T).name() mangles the type name, - // so we have to demangle it. -# if GTEST_HAS_CXXABI_H_ - using abi::__cxa_demangle; -# endif // GTEST_HAS_CXXABI_H_ - char* const readable_name = __cxa_demangle(name, nullptr, nullptr, &status); - const std::string name_str(status == 0 ? readable_name : name); - free(readable_name); - return CanonicalizeForStdLibVersioning(name_str); -# else - return name; -# endif // GTEST_HAS_CXXABI_H_ || __HP_aCC - -# else - - return "<type>"; - -# endif // GTEST_HAS_RTTI -} - -#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P - -// A unique type used as the default value for the arguments of class -// template Types. This allows us to simulate variadic templates -// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't -// support directly. -struct None {}; - -// The following family of struct and struct templates are used to -// represent type lists. In particular, TypesN<T1, T2, ..., TN> -// represents a type list with N types (T1, T2, ..., and TN) in it. -// Except for Types0, every struct in the family has two member types: -// Head for the first type in the list, and Tail for the rest of the -// list. - -// The empty type list. -struct Types0 {}; - -// Type lists of length 1, 2, 3, and so on. - -template <typename T1> -struct Types1 { - typedef T1 Head; - typedef Types0 Tail; -}; - -$range i 2..n - -$for i [[ -$range j 1..i -$range k 2..i -template <$for j, [[typename T$j]]> -struct Types$i { - typedef T1 Head; - typedef Types$(i-1)<$for k, [[T$k]]> Tail; -}; - - -]] - -} // namespace internal - -// We don't want to require the users to write TypesN<...> directly, -// as that would require them to count the length. Types<...> is much -// easier to write, but generates horrible messages when there is a -// compiler error, as gcc insists on printing out each template -// argument, even if it has the default value (this means Types<int> -// will appear as Types<int, None, None, ..., None> in the compiler -// errors). -// -// Our solution is to combine the best part of the two approaches: a -// user would write Types<T1, ..., TN>, and Google Test will translate -// that to TypesN<T1, ..., TN> internally to make error messages -// readable. The translation is done by the 'type' member of the -// Types template. - -$range i 1..n -template <$for i, [[typename T$i = internal::None]]> -struct Types { - typedef internal::Types$n<$for i, [[T$i]]> type; -}; - -template <> -struct Types<$for i, [[internal::None]]> { - typedef internal::Types0 type; -}; - -$range i 1..n-1 -$for i [[ -$range j 1..i -$range k i+1..n -template <$for j, [[typename T$j]]> -struct Types<$for j, [[T$j]]$for k[[, internal::None]]> { - typedef internal::Types$i<$for j, [[T$j]]> type; -}; - -]] - -namespace internal { - -# define GTEST_TEMPLATE_ template <typename T> class - -// The template "selector" struct TemplateSel<Tmpl> is used to -// represent Tmpl, which must be a class template with one type -// parameter, as a type. TemplateSel<Tmpl>::Bind<T>::type is defined -// as the type Tmpl<T>. This allows us to actually instantiate the -// template "selected" by TemplateSel<Tmpl>. -// -// This trick is necessary for simulating typedef for class templates, -// which C++ doesn't support directly. -template <GTEST_TEMPLATE_ Tmpl> -struct TemplateSel { - template <typename T> - struct Bind { - typedef Tmpl<T> type; - }; -}; - -# define GTEST_BIND_(TmplSel, T) \ - TmplSel::template Bind<T>::type - -// A unique struct template used as the default value for the -// arguments of class template Templates. This allows us to simulate -// variadic templates (e.g. Templates<int>, Templates<int, double>, -// and etc), which C++ doesn't support directly. -template <typename T> -struct NoneT {}; - -// The following family of struct and struct templates are used to -// represent template lists. In particular, TemplatesN<T1, T2, ..., -// TN> represents a list of N templates (T1, T2, ..., and TN). Except -// for Templates0, every struct in the family has two member types: -// Head for the selector of the first template in the list, and Tail -// for the rest of the list. - -// The empty template list. -struct Templates0 {}; - -// Template lists of length 1, 2, 3, and so on. - -template <GTEST_TEMPLATE_ T1> -struct Templates1 { - typedef TemplateSel<T1> Head; - typedef Templates0 Tail; -}; - -$range i 2..n - -$for i [[ -$range j 1..i -$range k 2..i -template <$for j, [[GTEST_TEMPLATE_ T$j]]> -struct Templates$i { - typedef TemplateSel<T1> Head; - typedef Templates$(i-1)<$for k, [[T$k]]> Tail; -}; - - -]] - -// We don't want to require the users to write TemplatesN<...> directly, -// as that would require them to count the length. Templates<...> is much -// easier to write, but generates horrible messages when there is a -// compiler error, as gcc insists on printing out each template -// argument, even if it has the default value (this means Templates<list> -// will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler -// errors). -// -// Our solution is to combine the best part of the two approaches: a -// user would write Templates<T1, ..., TN>, and Google Test will translate -// that to TemplatesN<T1, ..., TN> internally to make error messages -// readable. The translation is done by the 'type' member of the -// Templates template. - -$range i 1..n -template <$for i, [[GTEST_TEMPLATE_ T$i = NoneT]]> -struct Templates { - typedef Templates$n<$for i, [[T$i]]> type; -}; - -template <> -struct Templates<$for i, [[NoneT]]> { - typedef Templates0 type; -}; - -$range i 1..n-1 -$for i [[ -$range j 1..i -$range k i+1..n -template <$for j, [[GTEST_TEMPLATE_ T$j]]> -struct Templates<$for j, [[T$j]]$for k[[, NoneT]]> { - typedef Templates$i<$for j, [[T$j]]> type; -}; - -]] - -// The TypeList template makes it possible to use either a single type -// or a Types<...> list in TYPED_TEST_SUITE() and -// INSTANTIATE_TYPED_TEST_SUITE_P(). - -template <typename T> -struct TypeList { - typedef Types1<T> type; -}; - - -$range i 1..n -template <$for i, [[typename T$i]]> -struct TypeList<Types<$for i, [[T$i]]> > { - typedef typename Types<$for i, [[T$i]]>::type type; -}; - -#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P - -} // namespace internal -} // namespace testing - -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ diff --git a/test/gtest_vendor/CMakeLists.txt b/test/gtest_vendor/CMakeLists.txt new file mode 100644 index 000000000..5eeb6346b --- /dev/null +++ b/test/gtest_vendor/CMakeLists.txt @@ -0,0 +1,11 @@ +add_library(gtest STATIC ${CMAKE_CURRENT_SOURCE_DIR}/src/gtest-all.cc) +add_library(gtest_main STATIC ${CMAKE_CURRENT_SOURCE_DIR}/src/gtest_main.cc) + +target_include_directories(gtest + SYSTEM PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/include + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/src +) +target_link_libraries(gtest_main gtest) diff --git a/test/gtest_vendor/LICENSE b/test/gtest_vendor/LICENSE new file mode 100644 index 000000000..1941a11f8 --- /dev/null +++ b/test/gtest_vendor/LICENSE @@ -0,0 +1,28 @@ +Copyright 2008, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/test/gtest_vendor/gtest_vendor_version b/test/gtest_vendor/gtest_vendor_version new file mode 100644 index 000000000..7beba1743 --- /dev/null +++ b/test/gtest_vendor/gtest_vendor_version @@ -0,0 +1,8 @@ +commit 9406a60c7839052e4944ea4dbc8344762a89f9bd (HEAD -> main, origin/main, origin/HEAD) +Author: Abseil Team <absl-team@google.com> +Date: Mon Jun 27 13:15:39 2022 -0700 + + Mark internal-only function as having internal linkage. + + PiperOrigin-RevId: 457550818 + Change-Id: I9046801b64ce4581d742d650451332fd56489632 diff --git a/test/gtest_vendor/include/gtest/gtest-assertion-result.h b/test/gtest_vendor/include/gtest/gtest-assertion-result.h new file mode 100644 index 000000000..addbb59c6 --- /dev/null +++ b/test/gtest_vendor/include/gtest/gtest-assertion-result.h @@ -0,0 +1,237 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// The Google C++ Testing and Mocking Framework (Google Test) +// +// This file implements the AssertionResult type. + +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* + +#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_ASSERTION_RESULT_H_ +#define GOOGLETEST_INCLUDE_GTEST_GTEST_ASSERTION_RESULT_H_ + +#include <memory> +#include <ostream> +#include <string> +#include <type_traits> + +#include "gtest/gtest-message.h" +#include "gtest/internal/gtest-port.h" + +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ +/* class A needs to have dll-interface to be used by clients of class B */) + +namespace testing { + +// A class for indicating whether an assertion was successful. When +// the assertion wasn't successful, the AssertionResult object +// remembers a non-empty message that describes how it failed. +// +// To create an instance of this class, use one of the factory functions +// (AssertionSuccess() and AssertionFailure()). +// +// This class is useful for two purposes: +// 1. Defining predicate functions to be used with Boolean test assertions +// EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts +// 2. Defining predicate-format functions to be +// used with predicate assertions (ASSERT_PRED_FORMAT*, etc). +// +// For example, if you define IsEven predicate: +// +// testing::AssertionResult IsEven(int n) { +// if ((n % 2) == 0) +// return testing::AssertionSuccess(); +// else +// return testing::AssertionFailure() << n << " is odd"; +// } +// +// Then the failed expectation EXPECT_TRUE(IsEven(Fib(5))) +// will print the message +// +// Value of: IsEven(Fib(5)) +// Actual: false (5 is odd) +// Expected: true +// +// instead of a more opaque +// +// Value of: IsEven(Fib(5)) +// Actual: false +// Expected: true +// +// in case IsEven is a simple Boolean predicate. +// +// If you expect your predicate to be reused and want to support informative +// messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up +// about half as often as positive ones in our tests), supply messages for +// both success and failure cases: +// +// testing::AssertionResult IsEven(int n) { +// if ((n % 2) == 0) +// return testing::AssertionSuccess() << n << " is even"; +// else +// return testing::AssertionFailure() << n << " is odd"; +// } +// +// Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print +// +// Value of: IsEven(Fib(6)) +// Actual: true (8 is even) +// Expected: false +// +// NB: Predicates that support negative Boolean assertions have reduced +// performance in positive ones so be careful not to use them in tests +// that have lots (tens of thousands) of positive Boolean assertions. +// +// To use this class with EXPECT_PRED_FORMAT assertions such as: +// +// // Verifies that Foo() returns an even number. +// EXPECT_PRED_FORMAT1(IsEven, Foo()); +// +// you need to define: +// +// testing::AssertionResult IsEven(const char* expr, int n) { +// if ((n % 2) == 0) +// return testing::AssertionSuccess(); +// else +// return testing::AssertionFailure() +// << "Expected: " << expr << " is even\n Actual: it's " << n; +// } +// +// If Foo() returns 5, you will see the following message: +// +// Expected: Foo() is even +// Actual: it's 5 +// +class GTEST_API_ AssertionResult { + public: + // Copy constructor. + // Used in EXPECT_TRUE/FALSE(assertion_result). + AssertionResult(const AssertionResult& other); + +// C4800 is a level 3 warning in Visual Studio 2015 and earlier. +// This warning is not emitted in Visual Studio 2017. +// This warning is off by default starting in Visual Studio 2019 but can be +// enabled with command-line options. +#if defined(_MSC_VER) && (_MSC_VER < 1910 || _MSC_VER >= 1920) + GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 /* forcing value to bool */) +#endif + + // Used in the EXPECT_TRUE/FALSE(bool_expression). + // + // T must be contextually convertible to bool. + // + // The second parameter prevents this overload from being considered if + // the argument is implicitly convertible to AssertionResult. In that case + // we want AssertionResult's copy constructor to be used. + template <typename T> + explicit AssertionResult( + const T& success, + typename std::enable_if< + !std::is_convertible<T, AssertionResult>::value>::type* + /*enabler*/ + = nullptr) + : success_(success) {} + +#if defined(_MSC_VER) && (_MSC_VER < 1910 || _MSC_VER >= 1920) + GTEST_DISABLE_MSC_WARNINGS_POP_() +#endif + + // Assignment operator. + AssertionResult& operator=(AssertionResult other) { + swap(other); + return *this; + } + + // Returns true if and only if the assertion succeeded. + operator bool() const { return success_; } // NOLINT + + // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. + AssertionResult operator!() const; + + // Returns the text streamed into this AssertionResult. Test assertions + // use it when they fail (i.e., the predicate's outcome doesn't match the + // assertion's expectation). When nothing has been streamed into the + // object, returns an empty string. + const char* message() const { + return message_.get() != nullptr ? message_->c_str() : ""; + } + // Deprecated; please use message() instead. + const char* failure_message() const { return message(); } + + // Streams a custom failure message into this object. + template <typename T> + AssertionResult& operator<<(const T& value) { + AppendMessage(Message() << value); + return *this; + } + + // Allows streaming basic output manipulators such as endl or flush into + // this object. + AssertionResult& operator<<( + ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) { + AppendMessage(Message() << basic_manipulator); + return *this; + } + + private: + // Appends the contents of message to message_. + void AppendMessage(const Message& a_message) { + if (message_.get() == nullptr) message_.reset(new ::std::string); + message_->append(a_message.GetString().c_str()); + } + + // Swap the contents of this AssertionResult with other. + void swap(AssertionResult& other); + + // Stores result of the assertion predicate. + bool success_; + // Stores the message describing the condition in case the expectation + // construct is not satisfied with the predicate's outcome. + // Referenced via a pointer to avoid taking too much stack frame space + // with test assertions. + std::unique_ptr< ::std::string> message_; +}; + +// Makes a successful assertion result. +GTEST_API_ AssertionResult AssertionSuccess(); + +// Makes a failed assertion result. +GTEST_API_ AssertionResult AssertionFailure(); + +// Makes a failed assertion result with the given failure message. +// Deprecated; use AssertionFailure() << msg. +GTEST_API_ AssertionResult AssertionFailure(const Message& msg); + +} // namespace testing + +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 + +#endif // GOOGLETEST_INCLUDE_GTEST_GTEST_ASSERTION_RESULT_H_ diff --git a/test/gtest/include/gtest/gtest-death-test.h b/test/gtest_vendor/include/gtest/gtest-death-test.h similarity index 79% rename from test/gtest/include/gtest/gtest-death-test.h rename to test/gtest_vendor/include/gtest/gtest-death-test.h index dc878ffbb..84e5a5bbd 100644 --- a/test/gtest/include/gtest/gtest-death-test.h +++ b/test/gtest_vendor/include/gtest/gtest-death-test.h @@ -27,20 +27,20 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// // The Google C++ Testing and Mocking Framework (Google Test) // // This header file defines the public API for death tests. It is // #included by gtest.h so a user doesn't need to include this // directly. -// GOOGLETEST_CM0001 DO NOT DELETE -#ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ -#define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* -#include "gtest/internal/gtest-death-test-internal.h" +#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ +#define GOOGLETEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ -namespace testing { +#include "gtest/internal/gtest-death-test-internal.h" // This flag controls the style of death tests. Valid values are "threadsafe", // meaning that the death test child process will re-execute the test binary @@ -49,6 +49,8 @@ namespace testing { // after forking. GTEST_DECLARE_string_(death_test_style); +namespace testing { + #if GTEST_HAS_DEATH_TEST namespace internal { @@ -97,9 +99,12 @@ GTEST_API_ bool InDeathTestChild(); // // ASSERT_EXIT(client.HangUpServer(), KilledBySIGHUP, "Hanging up!"); // +// The final parameter to each of these macros is a matcher applied to any data +// the sub-process wrote to stderr. For compatibility with existing tests, a +// bare string is interpreted as a regular expression matcher. +// // On the regular expressions used in death tests: // -// GOOGLETEST_CM0005 DO NOT DELETE // On POSIX-compliant systems (*nix), we use the <regex.h> library, // which uses the POSIX extended regex syntax. // @@ -162,27 +167,27 @@ GTEST_API_ bool InDeathTestChild(); // directory in PATH. // -// Asserts that a given statement causes the program to exit, with an -// integer exit status that satisfies predicate, and emitting error output -// that matches regex. -# define ASSERT_EXIT(statement, predicate, regex) \ - GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_) +// Asserts that a given `statement` causes the program to exit, with an +// integer exit status that satisfies `predicate`, and emitting error output +// that matches `matcher`. +#define ASSERT_EXIT(statement, predicate, matcher) \ + GTEST_DEATH_TEST_(statement, predicate, matcher, GTEST_FATAL_FAILURE_) -// Like ASSERT_EXIT, but continues on to successive tests in the +// Like `ASSERT_EXIT`, but continues on to successive tests in the // test suite, if any: -# define EXPECT_EXIT(statement, predicate, regex) \ - GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_) +#define EXPECT_EXIT(statement, predicate, matcher) \ + GTEST_DEATH_TEST_(statement, predicate, matcher, GTEST_NONFATAL_FAILURE_) -// Asserts that a given statement causes the program to exit, either by +// Asserts that a given `statement` causes the program to exit, either by // explicitly exiting with a nonzero exit code or being killed by a -// signal, and emitting error output that matches regex. -# define ASSERT_DEATH(statement, regex) \ - ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) +// signal, and emitting error output that matches `matcher`. +#define ASSERT_DEATH(statement, matcher) \ + ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, matcher) -// Like ASSERT_DEATH, but continues on to successive tests in the +// Like `ASSERT_DEATH`, but continues on to successive tests in the // test suite, if any: -# define EXPECT_DEATH(statement, regex) \ - EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex) +#define EXPECT_DEATH(statement, matcher) \ + EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, matcher) // Two predicate classes that can be used in {ASSERT,EXPECT}_EXIT*: @@ -190,26 +195,26 @@ GTEST_API_ bool InDeathTestChild(); class GTEST_API_ ExitedWithCode { public: explicit ExitedWithCode(int exit_code); + ExitedWithCode(const ExitedWithCode&) = default; + void operator=(const ExitedWithCode& other) = delete; bool operator()(int exit_status) const; - private: - // No implementation - assignment is unsupported. - void operator=(const ExitedWithCode& other); + private: const int exit_code_; }; -# if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA +#if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA // Tests that an exit code describes an exit due to termination by a // given signal. -// GOOGLETEST_CM0006 DO NOT DELETE class GTEST_API_ KilledBySignal { public: explicit KilledBySignal(int signum); bool operator()(int exit_status) const; + private: const int signum_; }; -# endif // !GTEST_OS_WINDOWS +#endif // !GTEST_OS_WINDOWS // EXPECT_DEBUG_DEATH asserts that the given statements die in debug mode. // The death testing framework causes this to have interesting semantics, @@ -254,23 +259,21 @@ class GTEST_API_ KilledBySignal { // EXPECT_EQ(12, DieInDebugOr12(&sideeffect)); // }, "death"); // -# ifdef NDEBUG +#ifdef NDEBUG -# define EXPECT_DEBUG_DEATH(statement, regex) \ +#define EXPECT_DEBUG_DEATH(statement, regex) \ GTEST_EXECUTE_STATEMENT_(statement, regex) -# define ASSERT_DEBUG_DEATH(statement, regex) \ +#define ASSERT_DEBUG_DEATH(statement, regex) \ GTEST_EXECUTE_STATEMENT_(statement, regex) -# else +#else -# define EXPECT_DEBUG_DEATH(statement, regex) \ - EXPECT_DEATH(statement, regex) +#define EXPECT_DEBUG_DEATH(statement, regex) EXPECT_DEATH(statement, regex) -# define ASSERT_DEBUG_DEATH(statement, regex) \ - ASSERT_DEATH(statement, regex) +#define ASSERT_DEBUG_DEATH(statement, regex) ASSERT_DEATH(statement, regex) -# endif // NDEBUG for EXPECT_DEBUG_DEATH +#endif // NDEBUG for EXPECT_DEBUG_DEATH #endif // GTEST_HAS_DEATH_TEST // This macro is used for implementing macros such as @@ -308,18 +311,17 @@ class GTEST_API_ KilledBySignal { // statement unconditionally returns or throws. The Message constructor at // the end allows the syntax of streaming additional messages into the // macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH. -# define GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, terminator) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::AlwaysTrue()) { \ - GTEST_LOG_(WARNING) \ - << "Death tests are not supported on this platform.\n" \ - << "Statement '" #statement "' cannot be verified."; \ - } else if (::testing::internal::AlwaysFalse()) { \ - ::testing::internal::RE::PartialMatch(".*", (regex)); \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - terminator; \ - } else \ - ::testing::Message() +#define GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, terminator) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + GTEST_LOG_(WARNING) << "Death tests are not supported on this platform.\n" \ + << "Statement '" #statement "' cannot be verified."; \ + } else if (::testing::internal::AlwaysFalse()) { \ + ::testing::internal::RE::PartialMatch(".*", (regex)); \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + terminator; \ + } else \ + ::testing::Message() // EXPECT_DEATH_IF_SUPPORTED(statement, regex) and // ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if @@ -327,17 +329,17 @@ class GTEST_API_ KilledBySignal { // useful when you are combining death test assertions with normal test // assertions in one test. #if GTEST_HAS_DEATH_TEST -# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ - EXPECT_DEATH(statement, regex) -# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ - ASSERT_DEATH(statement, regex) +#define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ + EXPECT_DEATH(statement, regex) +#define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ + ASSERT_DEATH(statement, regex) #else -# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ - GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, ) -# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ - GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, return) +#define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \ + GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, ) +#define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \ + GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, return) #endif } // namespace testing -#endif // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_ diff --git a/test/gtest/include/gtest/gtest-matchers.h b/test/gtest_vendor/include/gtest/gtest-matchers.h similarity index 62% rename from test/gtest/include/gtest/gtest-matchers.h rename to test/gtest_vendor/include/gtest/gtest-matchers.h index 9de6c2e10..bffa00c53 100644 --- a/test/gtest/include/gtest/gtest-matchers.h +++ b/test/gtest_vendor/include/gtest/gtest-matchers.h @@ -32,13 +32,14 @@ // This file implements just enough of the matcher interface to allow // EXPECT_DEATH and friends to accept a matcher argument. -// IWYU pragma: private, include "testing/base/public/gunit.h" -// IWYU pragma: friend third_party/googletest/googlemock/.* -// IWYU pragma: friend third_party/googletest/googletest/.* +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* -#ifndef GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_ -#define GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_MATCHERS_H_ +#define GOOGLETEST_INCLUDE_GTEST_GTEST_MATCHERS_H_ +#include <atomic> #include <memory> #include <ostream> #include <string> @@ -63,20 +64,16 @@ GTEST_DISABLE_MSC_WARNINGS_PUSH_( namespace testing { // To implement a matcher Foo for type T, define: -// 1. a class FooMatcherImpl that implements the -// MatcherInterface<T> interface, and -// 2. a factory function that creates a Matcher<T> object from a -// FooMatcherImpl*. -// -// The two-level delegation design makes it possible to allow a user -// to write "v" instead of "Eq(v)" where a Matcher is expected, which -// is impossible if we pass matchers by pointers. It also eases -// ownership management as Matcher objects can now be copied like -// plain values. - -// MatchResultListener is an abstract class. Its << operator can be -// used by a matcher to explain why a value matches or doesn't match. +// 1. a class FooMatcherMatcher that implements the matcher interface: +// using is_gtest_matcher = void; +// bool MatchAndExplain(const T&, std::ostream*); +// (MatchResultListener* can also be used instead of std::ostream*) +// void DescribeTo(std::ostream*); +// void DescribeNegationTo(std::ostream*); // +// 2. a factory function that creates a Matcher<T> object from a +// FooMatcherMatcher. + class MatchResultListener { public: // Creates a listener object with the given underlying ostream. The @@ -105,15 +102,15 @@ class MatchResultListener { private: ::std::ostream* const stream_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(MatchResultListener); + MatchResultListener(const MatchResultListener&) = delete; + MatchResultListener& operator=(const MatchResultListener&) = delete; }; -inline MatchResultListener::~MatchResultListener() { -} +inline MatchResultListener::~MatchResultListener() {} // An instance of a subclass of this knows how to describe itself as a // matcher. -class MatcherDescriberInterface { +class GTEST_API_ MatcherDescriberInterface { public: virtual ~MatcherDescriberInterface() {} @@ -181,54 +178,41 @@ class MatcherInterface : public MatcherDescriberInterface { namespace internal { -// Converts a MatcherInterface<T> to a MatcherInterface<const T&>. -template <typename T> -class MatcherInterfaceAdapter : public MatcherInterface<const T&> { - public: - explicit MatcherInterfaceAdapter(const MatcherInterface<T>* impl) - : impl_(impl) {} - ~MatcherInterfaceAdapter() override { delete impl_; } - - void DescribeTo(::std::ostream* os) const override { impl_->DescribeTo(os); } - - void DescribeNegationTo(::std::ostream* os) const override { - impl_->DescribeNegationTo(os); - } - - bool MatchAndExplain(const T& x, - MatchResultListener* listener) const override { - return impl_->MatchAndExplain(x, listener); - } - - private: - const MatcherInterface<T>* const impl_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(MatcherInterfaceAdapter); -}; - struct AnyEq { template <typename A, typename B> - bool operator()(const A& a, const B& b) const { return a == b; } + bool operator()(const A& a, const B& b) const { + return a == b; + } }; struct AnyNe { template <typename A, typename B> - bool operator()(const A& a, const B& b) const { return a != b; } + bool operator()(const A& a, const B& b) const { + return a != b; + } }; struct AnyLt { template <typename A, typename B> - bool operator()(const A& a, const B& b) const { return a < b; } + bool operator()(const A& a, const B& b) const { + return a < b; + } }; struct AnyGt { template <typename A, typename B> - bool operator()(const A& a, const B& b) const { return a > b; } + bool operator()(const A& a, const B& b) const { + return a > b; + } }; struct AnyLe { template <typename A, typename B> - bool operator()(const A& a, const B& b) const { return a <= b; } + bool operator()(const A& a, const B& b) const { + return a <= b; + } }; struct AnyGe { template <typename A, typename B> - bool operator()(const A& a, const B& b) const { return a >= b; } + bool operator()(const A& a, const B& b) const { + return a >= b; + } }; // A match result listener that ignores the explanation. @@ -237,7 +221,8 @@ class DummyMatchResultListener : public MatchResultListener { DummyMatchResultListener() : MatchResultListener(nullptr) {} private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(DummyMatchResultListener); + DummyMatchResultListener(const DummyMatchResultListener&) = delete; + DummyMatchResultListener& operator=(const DummyMatchResultListener&) = delete; }; // A match result listener that forwards the explanation to a given @@ -249,19 +234,40 @@ class StreamMatchResultListener : public MatchResultListener { : MatchResultListener(os) {} private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamMatchResultListener); + StreamMatchResultListener(const StreamMatchResultListener&) = delete; + StreamMatchResultListener& operator=(const StreamMatchResultListener&) = + delete; +}; + +struct SharedPayloadBase { + std::atomic<int> ref{1}; + void Ref() { ref.fetch_add(1, std::memory_order_relaxed); } + bool Unref() { return ref.fetch_sub(1, std::memory_order_acq_rel) == 1; } +}; + +template <typename T> +struct SharedPayload : SharedPayloadBase { + explicit SharedPayload(const T& v) : value(v) {} + explicit SharedPayload(T&& v) : value(std::move(v)) {} + + static void Destroy(SharedPayloadBase* shared) { + delete static_cast<SharedPayload*>(shared); + } + + T value; }; // An internal class for implementing Matcher<T>, which will derive // from it. We put functionalities common to all Matcher<T> // specializations here to avoid code duplication. template <typename T> -class MatcherBase { +class MatcherBase : private MatcherDescriberInterface { public: // Returns true if and only if the matcher matches x; also explains the // match result to 'listener'. bool MatchAndExplain(const T& x, MatchResultListener* listener) const { - return impl_->MatchAndExplain(x, listener); + GTEST_CHECK_(vtable_ != nullptr); + return vtable_->match_and_explain(*this, x, listener); } // Returns true if and only if this matcher matches x. @@ -271,11 +277,15 @@ class MatcherBase { } // Describes this matcher to an ostream. - void DescribeTo(::std::ostream* os) const { impl_->DescribeTo(os); } + void DescribeTo(::std::ostream* os) const final { + GTEST_CHECK_(vtable_ != nullptr); + vtable_->describe(*this, os, false); + } // Describes the negation of this matcher to an ostream. - void DescribeNegationTo(::std::ostream* os) const { - impl_->DescribeNegationTo(os); + void DescribeNegationTo(::std::ostream* os) const final { + GTEST_CHECK_(vtable_ != nullptr); + vtable_->describe(*this, os, true); } // Explains why x matches, or doesn't match, the matcher. @@ -288,31 +298,195 @@ class MatcherBase { // of the describer, which is only guaranteed to be alive when // this matcher object is alive. const MatcherDescriberInterface* GetDescriber() const { - return impl_.get(); + if (vtable_ == nullptr) return nullptr; + return vtable_->get_describer(*this); } protected: - MatcherBase() {} + MatcherBase() : vtable_(nullptr), buffer_() {} // Constructs a matcher from its implementation. - explicit MatcherBase(const MatcherInterface<const T&>* impl) : impl_(impl) {} - template <typename U> - explicit MatcherBase( - const MatcherInterface<U>* impl, - typename std::enable_if<!std::is_same<U, const U&>::value>::type* = - nullptr) - : impl_(new internal::MatcherInterfaceAdapter<U>(impl)) {} + explicit MatcherBase(const MatcherInterface<U>* impl) + : vtable_(nullptr), buffer_() { + Init(impl); + } + + template <typename M, typename = typename std::remove_reference< + M>::type::is_gtest_matcher> + MatcherBase(M&& m) : vtable_(nullptr), buffer_() { // NOLINT + Init(std::forward<M>(m)); + } + + MatcherBase(const MatcherBase& other) + : vtable_(other.vtable_), buffer_(other.buffer_) { + if (IsShared()) buffer_.shared->Ref(); + } + + MatcherBase& operator=(const MatcherBase& other) { + if (this == &other) return *this; + Destroy(); + vtable_ = other.vtable_; + buffer_ = other.buffer_; + if (IsShared()) buffer_.shared->Ref(); + return *this; + } - MatcherBase(const MatcherBase&) = default; - MatcherBase& operator=(const MatcherBase&) = default; - MatcherBase(MatcherBase&&) = default; - MatcherBase& operator=(MatcherBase&&) = default; + MatcherBase(MatcherBase&& other) + : vtable_(other.vtable_), buffer_(other.buffer_) { + other.vtable_ = nullptr; + } - virtual ~MatcherBase() {} + MatcherBase& operator=(MatcherBase&& other) { + if (this == &other) return *this; + Destroy(); + vtable_ = other.vtable_; + buffer_ = other.buffer_; + other.vtable_ = nullptr; + return *this; + } + + ~MatcherBase() override { Destroy(); } private: - std::shared_ptr<const MatcherInterface<const T&>> impl_; + struct VTable { + bool (*match_and_explain)(const MatcherBase&, const T&, + MatchResultListener*); + void (*describe)(const MatcherBase&, std::ostream*, bool negation); + // Returns the captured object if it implements the interface, otherwise + // returns the MatcherBase itself. + const MatcherDescriberInterface* (*get_describer)(const MatcherBase&); + // Called on shared instances when the reference count reaches 0. + void (*shared_destroy)(SharedPayloadBase*); + }; + + bool IsShared() const { + return vtable_ != nullptr && vtable_->shared_destroy != nullptr; + } + + // If the implementation uses a listener, call that. + template <typename P> + static auto MatchAndExplainImpl(const MatcherBase& m, const T& value, + MatchResultListener* listener) + -> decltype(P::Get(m).MatchAndExplain(value, listener->stream())) { + return P::Get(m).MatchAndExplain(value, listener->stream()); + } + + template <typename P> + static auto MatchAndExplainImpl(const MatcherBase& m, const T& value, + MatchResultListener* listener) + -> decltype(P::Get(m).MatchAndExplain(value, listener)) { + return P::Get(m).MatchAndExplain(value, listener); + } + + template <typename P> + static void DescribeImpl(const MatcherBase& m, std::ostream* os, + bool negation) { + if (negation) { + P::Get(m).DescribeNegationTo(os); + } else { + P::Get(m).DescribeTo(os); + } + } + + template <typename P> + static const MatcherDescriberInterface* GetDescriberImpl( + const MatcherBase& m) { + // If the impl is a MatcherDescriberInterface, then return it. + // Otherwise use MatcherBase itself. + // This allows us to implement the GetDescriber() function without support + // from the impl, but some users really want to get their impl back when + // they call GetDescriber(). + // We use std::get on a tuple as a workaround of not having `if constexpr`. + return std::get<( + std::is_convertible<decltype(&P::Get(m)), + const MatcherDescriberInterface*>::value + ? 1 + : 0)>(std::make_tuple(&m, &P::Get(m))); + } + + template <typename P> + const VTable* GetVTable() { + static constexpr VTable kVTable = {&MatchAndExplainImpl<P>, + &DescribeImpl<P>, &GetDescriberImpl<P>, + P::shared_destroy}; + return &kVTable; + } + + union Buffer { + // Add some types to give Buffer some common alignment/size use cases. + void* ptr; + double d; + int64_t i; + // And add one for the out-of-line cases. + SharedPayloadBase* shared; + }; + + void Destroy() { + if (IsShared() && buffer_.shared->Unref()) { + vtable_->shared_destroy(buffer_.shared); + } + } + + template <typename M> + static constexpr bool IsInlined() { + return sizeof(M) <= sizeof(Buffer) && alignof(M) <= alignof(Buffer) && + std::is_trivially_copy_constructible<M>::value && + std::is_trivially_destructible<M>::value; + } + + template <typename M, bool = MatcherBase::IsInlined<M>()> + struct ValuePolicy { + static const M& Get(const MatcherBase& m) { + // When inlined along with Init, need to be explicit to avoid violating + // strict aliasing rules. + const M* ptr = + static_cast<const M*>(static_cast<const void*>(&m.buffer_)); + return *ptr; + } + static void Init(MatcherBase& m, M impl) { + ::new (static_cast<void*>(&m.buffer_)) M(impl); + } + static constexpr auto shared_destroy = nullptr; + }; + + template <typename M> + struct ValuePolicy<M, false> { + using Shared = SharedPayload<M>; + static const M& Get(const MatcherBase& m) { + return static_cast<Shared*>(m.buffer_.shared)->value; + } + template <typename Arg> + static void Init(MatcherBase& m, Arg&& arg) { + m.buffer_.shared = new Shared(std::forward<Arg>(arg)); + } + static constexpr auto shared_destroy = &Shared::Destroy; + }; + + template <typename U, bool B> + struct ValuePolicy<const MatcherInterface<U>*, B> { + using M = const MatcherInterface<U>; + using Shared = SharedPayload<std::unique_ptr<M>>; + static const M& Get(const MatcherBase& m) { + return *static_cast<Shared*>(m.buffer_.shared)->value; + } + static void Init(MatcherBase& m, M* impl) { + m.buffer_.shared = new Shared(std::unique_ptr<M>(impl)); + } + + static constexpr auto shared_destroy = &Shared::Destroy; + }; + + template <typename M> + void Init(M&& m) { + using MM = typename std::decay<M>::type; + using Policy = ValuePolicy<MM>; + vtable_ = GetVTable<Policy>(); + Policy::Init(*this, std::forward<M>(m)); + } + + const VTable* vtable_; + Buffer buffer_; }; } // namespace internal @@ -340,6 +514,10 @@ class Matcher : public internal::MatcherBase<T> { nullptr) : internal::MatcherBase<T>(impl) {} + template <typename M, typename = typename std::remove_reference< + M>::type::is_gtest_matcher> + Matcher(M&& m) : internal::MatcherBase<T>(std::forward<M>(m)) {} // NOLINT + // Implicit constructor here allows people to write // EXPECT_CALL(foo, Bar(5)) instead of EXPECT_CALL(foo, Bar(Eq(5))) sometimes Matcher(T value); // NOLINT @@ -357,6 +535,11 @@ class GTEST_API_ Matcher<const std::string&> explicit Matcher(const MatcherInterface<const std::string&>* impl) : internal::MatcherBase<const std::string&>(impl) {} + template <typename M, typename = typename std::remove_reference< + M>::type::is_gtest_matcher> + Matcher(M&& m) // NOLINT + : internal::MatcherBase<const std::string&>(std::forward<M>(m)) {} + // Allows the user to write str instead of Eq(str) sometimes, where // str is a std::string object. Matcher(const std::string& s); // NOLINT @@ -376,6 +559,11 @@ class GTEST_API_ Matcher<std::string> explicit Matcher(const MatcherInterface<std::string>* impl) : internal::MatcherBase<std::string>(impl) {} + template <typename M, typename = typename std::remove_reference< + M>::type::is_gtest_matcher> + Matcher(M&& m) // NOLINT + : internal::MatcherBase<std::string>(std::forward<M>(m)) {} + // Allows the user to write str instead of Eq(str) sometimes, where // str is a string object. Matcher(const std::string& s); // NOLINT @@ -384,18 +572,24 @@ class GTEST_API_ Matcher<std::string> Matcher(const char* s); // NOLINT }; -#if GTEST_HAS_ABSL +#if GTEST_INTERNAL_HAS_STRING_VIEW // The following two specializations allow the user to write str // instead of Eq(str) and "foo" instead of Eq("foo") when a absl::string_view // matcher is expected. template <> -class GTEST_API_ Matcher<const absl::string_view&> - : public internal::MatcherBase<const absl::string_view&> { +class GTEST_API_ Matcher<const internal::StringView&> + : public internal::MatcherBase<const internal::StringView&> { public: Matcher() {} - explicit Matcher(const MatcherInterface<const absl::string_view&>* impl) - : internal::MatcherBase<const absl::string_view&>(impl) {} + explicit Matcher(const MatcherInterface<const internal::StringView&>* impl) + : internal::MatcherBase<const internal::StringView&>(impl) {} + + template <typename M, typename = typename std::remove_reference< + M>::type::is_gtest_matcher> + Matcher(M&& m) // NOLINT + : internal::MatcherBase<const internal::StringView&>(std::forward<M>(m)) { + } // Allows the user to write str instead of Eq(str) sometimes, where // str is a std::string object. @@ -404,20 +598,25 @@ class GTEST_API_ Matcher<const absl::string_view&> // Allows the user to write "foo" instead of Eq("foo") sometimes. Matcher(const char* s); // NOLINT - // Allows the user to pass absl::string_views directly. - Matcher(absl::string_view s); // NOLINT + // Allows the user to pass absl::string_views or std::string_views directly. + Matcher(internal::StringView s); // NOLINT }; template <> -class GTEST_API_ Matcher<absl::string_view> - : public internal::MatcherBase<absl::string_view> { +class GTEST_API_ Matcher<internal::StringView> + : public internal::MatcherBase<internal::StringView> { public: Matcher() {} - explicit Matcher(const MatcherInterface<const absl::string_view&>* impl) - : internal::MatcherBase<absl::string_view>(impl) {} - explicit Matcher(const MatcherInterface<absl::string_view>* impl) - : internal::MatcherBase<absl::string_view>(impl) {} + explicit Matcher(const MatcherInterface<const internal::StringView&>* impl) + : internal::MatcherBase<internal::StringView>(impl) {} + explicit Matcher(const MatcherInterface<internal::StringView>* impl) + : internal::MatcherBase<internal::StringView>(impl) {} + + template <typename M, typename = typename std::remove_reference< + M>::type::is_gtest_matcher> + Matcher(M&& m) // NOLINT + : internal::MatcherBase<internal::StringView>(std::forward<M>(m)) {} // Allows the user to write str instead of Eq(str) sometimes, where // str is a std::string object. @@ -426,10 +625,10 @@ class GTEST_API_ Matcher<absl::string_view> // Allows the user to write "foo" instead of Eq("foo") sometimes. Matcher(const char* s); // NOLINT - // Allows the user to pass absl::string_views directly. - Matcher(absl::string_view s); // NOLINT + // Allows the user to pass absl::string_views or std::string_views directly. + Matcher(internal::StringView s); // NOLINT }; -#endif // GTEST_HAS_ABSL +#endif // GTEST_INTERNAL_HAS_STRING_VIEW // Prints a matcher in a human-readable format. template <typename T> @@ -474,13 +673,13 @@ class PolymorphicMatcher { public: explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {} - virtual void DescribeTo(::std::ostream* os) const { impl_.DescribeTo(os); } + void DescribeTo(::std::ostream* os) const override { impl_.DescribeTo(os); } - virtual void DescribeNegationTo(::std::ostream* os) const { + void DescribeNegationTo(::std::ostream* os) const override { impl_.DescribeNegationTo(os); } - virtual bool MatchAndExplain(T x, MatchResultListener* listener) const { + bool MatchAndExplain(T x, MatchResultListener* listener) const override { return impl_.MatchAndExplain(x, listener); } @@ -529,37 +728,32 @@ template <typename D, typename Rhs, typename Op> class ComparisonBase { public: explicit ComparisonBase(const Rhs& rhs) : rhs_(rhs) {} + + using is_gtest_matcher = void; + template <typename Lhs> - operator Matcher<Lhs>() const { - return Matcher<Lhs>(new Impl<const Lhs&>(rhs_)); + bool MatchAndExplain(const Lhs& lhs, std::ostream*) const { + return Op()(lhs, Unwrap(rhs_)); + } + void DescribeTo(std::ostream* os) const { + *os << D::Desc() << " "; + UniversalPrint(Unwrap(rhs_), os); + } + void DescribeNegationTo(std::ostream* os) const { + *os << D::NegatedDesc() << " "; + UniversalPrint(Unwrap(rhs_), os); } private: template <typename T> - static const T& Unwrap(const T& v) { return v; } + static const T& Unwrap(const T& v) { + return v; + } template <typename T> - static const T& Unwrap(std::reference_wrapper<T> v) { return v; } - - template <typename Lhs, typename = Rhs> - class Impl : public MatcherInterface<Lhs> { - public: - explicit Impl(const Rhs& rhs) : rhs_(rhs) {} - bool MatchAndExplain(Lhs lhs, - MatchResultListener* /* listener */) const override { - return Op()(lhs, Unwrap(rhs_)); - } - void DescribeTo(::std::ostream* os) const override { - *os << D::Desc() << " "; - UniversalPrint(Unwrap(rhs_), os); - } - void DescribeNegationTo(::std::ostream* os) const override { - *os << D::NegatedDesc() << " "; - UniversalPrint(Unwrap(rhs_), os); - } + static const T& Unwrap(std::reference_wrapper<T> v) { + return v; + } - private: - Rhs rhs_; - }; Rhs rhs_; }; @@ -567,7 +761,7 @@ template <typename Rhs> class EqMatcher : public ComparisonBase<EqMatcher<Rhs>, Rhs, AnyEq> { public: explicit EqMatcher(const Rhs& rhs) - : ComparisonBase<EqMatcher<Rhs>, Rhs, AnyEq>(rhs) { } + : ComparisonBase<EqMatcher<Rhs>, Rhs, AnyEq>(rhs) {} static const char* Desc() { return "is equal to"; } static const char* NegatedDesc() { return "isn't equal to"; } }; @@ -575,7 +769,7 @@ template <typename Rhs> class NeMatcher : public ComparisonBase<NeMatcher<Rhs>, Rhs, AnyNe> { public: explicit NeMatcher(const Rhs& rhs) - : ComparisonBase<NeMatcher<Rhs>, Rhs, AnyNe>(rhs) { } + : ComparisonBase<NeMatcher<Rhs>, Rhs, AnyNe>(rhs) {} static const char* Desc() { return "isn't equal to"; } static const char* NegatedDesc() { return "is equal to"; } }; @@ -583,7 +777,7 @@ template <typename Rhs> class LtMatcher : public ComparisonBase<LtMatcher<Rhs>, Rhs, AnyLt> { public: explicit LtMatcher(const Rhs& rhs) - : ComparisonBase<LtMatcher<Rhs>, Rhs, AnyLt>(rhs) { } + : ComparisonBase<LtMatcher<Rhs>, Rhs, AnyLt>(rhs) {} static const char* Desc() { return "is <"; } static const char* NegatedDesc() { return "isn't <"; } }; @@ -591,7 +785,7 @@ template <typename Rhs> class GtMatcher : public ComparisonBase<GtMatcher<Rhs>, Rhs, AnyGt> { public: explicit GtMatcher(const Rhs& rhs) - : ComparisonBase<GtMatcher<Rhs>, Rhs, AnyGt>(rhs) { } + : ComparisonBase<GtMatcher<Rhs>, Rhs, AnyGt>(rhs) {} static const char* Desc() { return "is >"; } static const char* NegatedDesc() { return "isn't >"; } }; @@ -599,7 +793,7 @@ template <typename Rhs> class LeMatcher : public ComparisonBase<LeMatcher<Rhs>, Rhs, AnyLe> { public: explicit LeMatcher(const Rhs& rhs) - : ComparisonBase<LeMatcher<Rhs>, Rhs, AnyLe>(rhs) { } + : ComparisonBase<LeMatcher<Rhs>, Rhs, AnyLe>(rhs) {} static const char* Desc() { return "is <="; } static const char* NegatedDesc() { return "isn't <="; } }; @@ -607,11 +801,15 @@ template <typename Rhs> class GeMatcher : public ComparisonBase<GeMatcher<Rhs>, Rhs, AnyGe> { public: explicit GeMatcher(const Rhs& rhs) - : ComparisonBase<GeMatcher<Rhs>, Rhs, AnyGe>(rhs) { } + : ComparisonBase<GeMatcher<Rhs>, Rhs, AnyGe>(rhs) {} static const char* Desc() { return "is >="; } static const char* NegatedDesc() { return "isn't >="; } }; +template <typename T, typename = typename std::enable_if< + std::is_constructible<std::string, T>::value>::type> +using StringLike = T; + // Implements polymorphic matchers MatchesRegex(regex) and // ContainsRegex(regex), which can be used as a Matcher<T> as long as // T can be converted to a string. @@ -620,12 +818,12 @@ class MatchesRegexMatcher { MatchesRegexMatcher(const RE* regex, bool full_match) : regex_(regex), full_match_(full_match) {} -#if GTEST_HAS_ABSL - bool MatchAndExplain(const absl::string_view& s, +#if GTEST_INTERNAL_HAS_STRING_VIEW + bool MatchAndExplain(const internal::StringView& s, MatchResultListener* listener) const { return MatchAndExplain(std::string(s), listener); } -#endif // GTEST_HAS_ABSL +#endif // GTEST_INTERNAL_HAS_STRING_VIEW // Accepts pointer types, particularly: // const char* @@ -672,9 +870,10 @@ inline PolymorphicMatcher<internal::MatchesRegexMatcher> MatchesRegex( const internal::RE* regex) { return MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex, true)); } -inline PolymorphicMatcher<internal::MatchesRegexMatcher> MatchesRegex( - const std::string& regex) { - return MatchesRegex(new internal::RE(regex)); +template <typename T = std::string> +PolymorphicMatcher<internal::MatchesRegexMatcher> MatchesRegex( + const internal::StringLike<T>& regex) { + return MatchesRegex(new internal::RE(std::string(regex))); } // Matches a string that contains regular expression 'regex'. @@ -683,21 +882,26 @@ inline PolymorphicMatcher<internal::MatchesRegexMatcher> ContainsRegex( const internal::RE* regex) { return MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex, false)); } -inline PolymorphicMatcher<internal::MatchesRegexMatcher> ContainsRegex( - const std::string& regex) { - return ContainsRegex(new internal::RE(regex)); +template <typename T = std::string> +PolymorphicMatcher<internal::MatchesRegexMatcher> ContainsRegex( + const internal::StringLike<T>& regex) { + return ContainsRegex(new internal::RE(std::string(regex))); } // Creates a polymorphic matcher that matches anything equal to x. // Note: if the parameter of Eq() were declared as const T&, Eq("foo") // wouldn't compile. template <typename T> -inline internal::EqMatcher<T> Eq(T x) { return internal::EqMatcher<T>(x); } +inline internal::EqMatcher<T> Eq(T x) { + return internal::EqMatcher<T>(x); +} // Constructs a Matcher<T> from a 'value' of type T. The constructed // matcher matches any value that's equal to 'value'. template <typename T> -Matcher<T>::Matcher(T value) { *this = Eq(value); } +Matcher<T>::Matcher(T value) { + *this = Eq(value); +} // Creates a monomorphic matcher that matches anything with type Lhs // and equal to rhs. A user may need to use this instead of Eq(...) @@ -712,7 +916,9 @@ Matcher<T>::Matcher(T value) { *this = Eq(value); } // can always write Matcher<T>(Lt(5)) to be explicit about the type, // for example. template <typename Lhs, typename Rhs> -inline Matcher<Lhs> TypedEq(const Rhs& rhs) { return Eq(rhs); } +inline Matcher<Lhs> TypedEq(const Rhs& rhs) { + return Eq(rhs); +} // Creates a polymorphic matcher that matches anything >= x. template <typename Rhs> @@ -747,4 +953,4 @@ inline internal::NeMatcher<Rhs> Ne(Rhs x) { GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 5046 -#endif // GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_GTEST_MATCHERS_H_ diff --git a/test/gtest/include/gtest/gtest-message.h b/test/gtest_vendor/include/gtest/gtest-message.h similarity index 89% rename from test/gtest/include/gtest/gtest-message.h rename to test/gtest_vendor/include/gtest/gtest-message.h index 4a80e11e6..6c8bf9000 100644 --- a/test/gtest/include/gtest/gtest-message.h +++ b/test/gtest_vendor/include/gtest/gtest-message.h @@ -27,7 +27,6 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// // The Google C++ Testing and Mocking Framework (Google Test) // // This header file defines the Message class. @@ -42,13 +41,16 @@ // to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user // program! -// GOOGLETEST_CM0001 DO NOT DELETE +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* -#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ -#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ +#define GOOGLETEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ #include <limits> #include <memory> +#include <sstream> #include "gtest/internal/gtest-port.h" @@ -109,8 +111,8 @@ class GTEST_API_ Message { // Streams a non-pointer value to this object. template <typename T> - inline Message& operator <<(const T& val) { - // Some libraries overload << for STL containers. These + inline Message& operator<<(const T& val) { + // Some libraries overload << for STL containers. These // overloads are defined in the global namespace instead of ::std. // // C++'s symbol lookup rule (i.e. Koenig lookup) says that these @@ -124,7 +126,7 @@ class GTEST_API_ Message { // from the global namespace. With this using declaration, // overloads of << defined in the global namespace and those // visible via Koenig lookup are both exposed in this function. - using ::operator <<; + using ::operator<<; *ss_ << val; return *this; } @@ -143,7 +145,7 @@ class GTEST_API_ Message { // ensure consistent result across compilers, we always treat NULL // as "(null)". template <typename T> - inline Message& operator <<(T* const& pointer) { // NOLINT + inline Message& operator<<(T* const& pointer) { // NOLINT if (pointer == nullptr) { *ss_ << "(null)"; } else { @@ -158,25 +160,23 @@ class GTEST_API_ Message { // templatized version above. Without this definition, streaming // endl or other basic IO manipulators to Message will confuse the // compiler. - Message& operator <<(BasicNarrowIoManip val) { + Message& operator<<(BasicNarrowIoManip val) { *ss_ << val; return *this; } // Instead of 1/0, we want to see true/false for bool values. - Message& operator <<(bool b) { - return *this << (b ? "true" : "false"); - } + Message& operator<<(bool b) { return *this << (b ? "true" : "false"); } // These two overloads allow streaming a wide C string to a Message // using the UTF-8 encoding. - Message& operator <<(const wchar_t* wide_c_str); - Message& operator <<(wchar_t* wide_c_str); + Message& operator<<(const wchar_t* wide_c_str); + Message& operator<<(wchar_t* wide_c_str); #if GTEST_HAS_STD_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. - Message& operator <<(const ::std::wstring& wstr); + Message& operator<<(const ::std::wstring& wstr); #endif // GTEST_HAS_STD_WSTRING // Gets the text streamed to this object so far as an std::string. @@ -195,7 +195,7 @@ class GTEST_API_ Message { }; // Streams a Message to an ostream. -inline std::ostream& operator <<(std::ostream& os, const Message& sb) { +inline std::ostream& operator<<(std::ostream& os, const Message& sb) { return os << sb.GetString(); } @@ -215,4 +215,4 @@ std::string StreamableToString(const T& streamable) { GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 -#endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ diff --git a/test/gtest/include/gtest/gtest-param-test.h b/test/gtest_vendor/include/gtest/gtest-param-test.h similarity index 91% rename from test/gtest/include/gtest/gtest-param-test.h rename to test/gtest_vendor/include/gtest/gtest-param-test.h index c2e6eae3d..b55119ac6 100644 --- a/test/gtest/include/gtest/gtest-param-test.h +++ b/test/gtest_vendor/include/gtest/gtest-param-test.h @@ -26,16 +26,16 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// + // Macros and functions for implementing parameterized tests // in Google C++ Testing and Mocking Framework (Google Test) -// -// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! -// -// GOOGLETEST_CM0001 DO NOT DELETE -#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ -#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* + +#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ +#define GOOGLETEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ // Value-parameterized tests allow you to test your code with different // parameters without writing multiple copies of the same test. @@ -356,9 +356,7 @@ internal::ValueArray<T...> Values(T... v) { // } // INSTANTIATE_TEST_SUITE_P(BoolSequence, FlagDependentTest, Bool()); // -inline internal::ParamGenerator<bool> Bool() { - return Values(false, true); -} +inline internal::ParamGenerator<bool> Bool() { return Values(false, true); } // Combine() allows the user to combine two or more sequences to produce // values of a Cartesian product of those sequences' elements. @@ -371,8 +369,6 @@ inline internal::ParamGenerator<bool> Bool() { // std::tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types // of elements from sequences produces by gen1, gen2, ..., genN. // -// Combine can have up to 10 arguments. -// // Example: // // This will instantiate tests in test suite AnimalTest each one with @@ -416,24 +412,28 @@ internal::CartesianProductHolder<Generator...> Combine(const Generator&... g) { : public test_suite_name { \ public: \ GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \ - virtual void TestBody(); \ + void TestBody() override; \ \ private: \ static int AddToRegistry() { \ ::testing::UnitTest::GetInstance() \ ->parameterized_test_registry() \ .GetTestSuitePatternHolder<test_suite_name>( \ - #test_suite_name, \ + GTEST_STRINGIFY_(test_suite_name), \ ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ ->AddTestPattern( \ GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \ new ::testing::internal::TestMetaFactory<GTEST_TEST_CLASS_NAME_( \ - test_suite_name, test_name)>()); \ + test_suite_name, test_name)>(), \ + ::testing::internal::CodeLocation(__FILE__, __LINE__)); \ return 0; \ } \ static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)); \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + (const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &) = delete; \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) & operator=( \ + const GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name) &) = delete; /* NOLINT */ \ }; \ int GTEST_TEST_CLASS_NAME_(test_suite_name, \ test_name)::gtest_registering_dummy_ = \ @@ -457,39 +457,46 @@ internal::CartesianProductHolder<Generator...> Combine(const Generator&... g) { #define GTEST_GET_FIRST_(first, ...) first #define GTEST_GET_SECOND_(first, second, ...) second -#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, ...) \ - static ::testing::internal::ParamGenerator<test_suite_name::ParamType> \ - gtest_##prefix##test_suite_name##_EvalGenerator_() { \ - return GTEST_EXPAND_(GTEST_GET_FIRST_(__VA_ARGS__, DUMMY_PARAM_)); \ - } \ - static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_( \ - const ::testing::TestParamInfo<test_suite_name::ParamType>& info) { \ - if (::testing::internal::AlwaysFalse()) { \ - ::testing::internal::TestNotEmpty(GTEST_EXPAND_(GTEST_GET_SECOND_( \ - __VA_ARGS__, \ - ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \ - DUMMY_PARAM_))); \ - auto t = std::make_tuple(__VA_ARGS__); \ - static_assert(std::tuple_size<decltype(t)>::value <= 2, \ - "Too Many Args!"); \ - } \ - return ((GTEST_EXPAND_(GTEST_GET_SECOND_( \ - __VA_ARGS__, \ - ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \ - DUMMY_PARAM_))))(info); \ - } \ - static int gtest_##prefix##test_suite_name##_dummy_ \ - GTEST_ATTRIBUTE_UNUSED_ = \ - ::testing::UnitTest::GetInstance() \ - ->parameterized_test_registry() \ - .GetTestSuitePatternHolder<test_suite_name>( \ - #test_suite_name, \ - ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ - ->AddTestSuiteInstantiation( \ - #prefix, >est_##prefix##test_suite_name##_EvalGenerator_, \ - >est_##prefix##test_suite_name##_EvalGenerateName_, \ +#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, ...) \ + static ::testing::internal::ParamGenerator<test_suite_name::ParamType> \ + gtest_##prefix##test_suite_name##_EvalGenerator_() { \ + return GTEST_EXPAND_(GTEST_GET_FIRST_(__VA_ARGS__, DUMMY_PARAM_)); \ + } \ + static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_( \ + const ::testing::TestParamInfo<test_suite_name::ParamType>& info) { \ + if (::testing::internal::AlwaysFalse()) { \ + ::testing::internal::TestNotEmpty(GTEST_EXPAND_(GTEST_GET_SECOND_( \ + __VA_ARGS__, \ + ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \ + DUMMY_PARAM_))); \ + auto t = std::make_tuple(__VA_ARGS__); \ + static_assert(std::tuple_size<decltype(t)>::value <= 2, \ + "Too Many Args!"); \ + } \ + return ((GTEST_EXPAND_(GTEST_GET_SECOND_( \ + __VA_ARGS__, \ + ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \ + DUMMY_PARAM_))))(info); \ + } \ + static int gtest_##prefix##test_suite_name##_dummy_ \ + GTEST_ATTRIBUTE_UNUSED_ = \ + ::testing::UnitTest::GetInstance() \ + ->parameterized_test_registry() \ + .GetTestSuitePatternHolder<test_suite_name>( \ + GTEST_STRINGIFY_(test_suite_name), \ + ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ + ->AddTestSuiteInstantiation( \ + GTEST_STRINGIFY_(prefix), \ + >est_##prefix##test_suite_name##_EvalGenerator_, \ + >est_##prefix##test_suite_name##_EvalGenerateName_, \ __FILE__, __LINE__) +// Allow Marking a Parameterized test class as not needing to be instantiated. +#define GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(T) \ + namespace gtest_do_not_use_outside_namespace_scope {} \ + static const ::testing::internal::MarkAsIgnored gtest_allow_ignore_##T( \ + GTEST_STRINGIFY_(T)) + // Legacy API is deprecated but still available #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ #define INSTANTIATE_TEST_CASE_P \ @@ -500,4 +507,4 @@ internal::CartesianProductHolder<Generator...> Combine(const Generator&... g) { } // namespace testing -#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ diff --git a/test/gtest/include/gtest/gtest-printers.h b/test/gtest_vendor/include/gtest/gtest-printers.h similarity index 62% rename from test/gtest/include/gtest/gtest-printers.h rename to test/gtest_vendor/include/gtest/gtest-printers.h index 56a05450e..a91e8b8b1 100644 --- a/test/gtest/include/gtest/gtest-printers.h +++ b/test/gtest_vendor/include/gtest/gtest-printers.h @@ -27,7 +27,6 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - // Google Test - The Google C++ Testing and Mocking Framework // // This file implements a universal value printer that can print a @@ -95,12 +94,15 @@ // being defined as many user-defined container types don't have // value_type. -// GOOGLETEST_CM0001 DO NOT DELETE +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* -#ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ -#define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ +#define GOOGLETEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ #include <functional> +#include <memory> #include <ostream> // NOLINT #include <sstream> #include <string> @@ -108,64 +110,124 @@ #include <type_traits> #include <utility> #include <vector> + #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-port.h" -#if GTEST_HAS_ABSL -#include "absl/strings/string_view.h" -#include "absl/types/optional.h" -#include "absl/types/variant.h" -#endif // GTEST_HAS_ABSL - namespace testing { -// Definitions in the 'internal' and 'internal2' name spaces are -// subject to change without notice. DO NOT USE THEM IN USER CODE! -namespace internal2 { +// Definitions in the internal* namespaces are subject to change without notice. +// DO NOT USE THEM IN USER CODE! +namespace internal { -// Prints the given number of bytes in the given object to the given -// ostream. -GTEST_API_ void PrintBytesInObjectTo(const unsigned char* obj_bytes, - size_t count, - ::std::ostream* os); - -// For selecting which printer to use when a given type has neither << -// nor PrintTo(). -enum TypeKind { - kProtobuf, // a protobuf type - kConvertibleToInteger, // a type implicitly convertible to BiggestInt - // (e.g. a named or unnamed enum type) -#if GTEST_HAS_ABSL - kConvertibleToStringView, // a type implicitly convertible to - // absl::string_view -#endif - kOtherType // anything else +template <typename T> +void UniversalPrint(const T& value, ::std::ostream* os); + +// Used to print an STL-style container when the user doesn't define +// a PrintTo() for it. +struct ContainerPrinter { + template <typename T, + typename = typename std::enable_if< + (sizeof(IsContainerTest<T>(0)) == sizeof(IsContainer)) && + !IsRecursiveContainer<T>::value>::type> + static void PrintValue(const T& container, std::ostream* os) { + const size_t kMaxCount = 32; // The maximum number of elements to print. + *os << '{'; + size_t count = 0; + for (auto&& elem : container) { + if (count > 0) { + *os << ','; + if (count == kMaxCount) { // Enough has been printed. + *os << " ..."; + break; + } + } + *os << ' '; + // We cannot call PrintTo(elem, os) here as PrintTo() doesn't + // handle `elem` being a native array. + internal::UniversalPrint(elem, os); + ++count; + } + + if (count > 0) { + *os << ' '; + } + *os << '}'; + } }; -// TypeWithoutFormatter<T, kTypeKind>::PrintValue(value, os) is called -// by the universal printer to print a value of type T when neither -// operator<< nor PrintTo() is defined for T, where kTypeKind is the -// "kind" of T as defined by enum TypeKind. -template <typename T, TypeKind kTypeKind> -class TypeWithoutFormatter { - public: - // This default version is called when kTypeKind is kOtherType. +// Used to print a pointer that is neither a char pointer nor a member +// pointer, when the user doesn't define PrintTo() for it. (A member +// variable pointer or member function pointer doesn't really point to +// a location in the address space. Their representation is +// implementation-defined. Therefore they will be printed as raw +// bytes.) +struct FunctionPointerPrinter { + template <typename T, typename = typename std::enable_if< + std::is_function<T>::value>::type> + static void PrintValue(T* p, ::std::ostream* os) { + if (p == nullptr) { + *os << "NULL"; + } else { + // T is a function type, so '*os << p' doesn't do what we want + // (it just prints p as bool). We want to print p as a const + // void*. + *os << reinterpret_cast<const void*>(p); + } + } +}; + +struct PointerPrinter { + template <typename T> + static void PrintValue(T* p, ::std::ostream* os) { + if (p == nullptr) { + *os << "NULL"; + } else { + // T is not a function type. We just call << to print p, + // relying on ADL to pick up user-defined << for their pointer + // types, if any. + *os << p; + } + } +}; + +namespace internal_stream_operator_without_lexical_name_lookup { + +// The presence of an operator<< here will terminate lexical scope lookup +// straight away (even though it cannot be a match because of its argument +// types). Thus, the two operator<< calls in StreamPrinter will find only ADL +// candidates. +struct LookupBlocker {}; +void operator<<(LookupBlocker, LookupBlocker); + +struct StreamPrinter { + template <typename T, + // Don't accept member pointers here. We'd print them via implicit + // conversion to bool, which isn't useful. + typename = typename std::enable_if< + !std::is_member_pointer<T>::value>::type, + // Only accept types for which we can find a streaming operator via + // ADL (possibly involving implicit conversions). + typename = decltype(std::declval<std::ostream&>() + << std::declval<const T&>())> static void PrintValue(const T& value, ::std::ostream* os) { - PrintBytesInObjectTo( - static_cast<const unsigned char*>( - reinterpret_cast<const void*>(std::addressof(value))), - sizeof(value), os); + // Call streaming operator found by ADL, possibly with implicit conversions + // of the arguments. + *os << value; } }; -// We print a protobuf using its ShortDebugString() when the string -// doesn't exceed this many characters; otherwise we print it using -// DebugString() for better readability. -const size_t kProtobufOneLinerMaxLength = 50; +} // namespace internal_stream_operator_without_lexical_name_lookup -template <typename T> -class TypeWithoutFormatter<T, kProtobuf> { - public: +struct ProtobufPrinter { + // We print a protobuf using its ShortDebugString() when the string + // doesn't exceed this many characters; otherwise we print it using + // DebugString() for better readability. + static const size_t kProtobufOneLinerMaxLength = 50; + + template <typename T, + typename = typename std::enable_if< + internal::HasDebugStringAndShortDebugString<T>::value>::type> static void PrintValue(const T& value, ::std::ostream* os) { std::string pretty_str = value.ShortDebugString(); if (pretty_str.length() > kProtobufOneLinerMaxLength) { @@ -175,9 +237,7 @@ class TypeWithoutFormatter<T, kProtobuf> { } }; -template <typename T> -class TypeWithoutFormatter<T, kConvertibleToInteger> { - public: +struct ConvertibleToIntegerPrinter { // Since T has no << operator or PrintTo() but can be implicitly // converted to BiggestInt, we print it as a BiggestInt. // @@ -185,113 +245,72 @@ class TypeWithoutFormatter<T, kConvertibleToInteger> { // case printing it as an integer is the desired behavior. In case // T is not an enum, printing it as an integer is the best we can do // given that it has no user-defined printer. - static void PrintValue(const T& value, ::std::ostream* os) { - const internal::BiggestInt kBigInt = value; - *os << kBigInt; + static void PrintValue(internal::BiggestInt value, ::std::ostream* os) { + *os << value; } }; -#if GTEST_HAS_ABSL -template <typename T> -class TypeWithoutFormatter<T, kConvertibleToStringView> { - public: - // Since T has neither operator<< nor PrintTo() but can be implicitly - // converted to absl::string_view, we print it as a absl::string_view. - // - // Note: the implementation is further below, as it depends on - // internal::PrintTo symbol which is defined later in the file. - static void PrintValue(const T& value, ::std::ostream* os); -}; +struct ConvertibleToStringViewPrinter { +#if GTEST_INTERNAL_HAS_STRING_VIEW + static void PrintValue(internal::StringView value, ::std::ostream* os) { + internal::UniversalPrint(value, os); + } #endif +}; -// Prints the given value to the given ostream. If the value is a -// protocol message, its debug string is printed; if it's an enum or -// of a type implicitly convertible to BiggestInt, it's printed as an -// integer; otherwise the bytes in the value are printed. This is -// what UniversalPrinter<T>::Print() does when it knows nothing about -// type T and T has neither << operator nor PrintTo(). -// -// A user can override this behavior for a class type Foo by defining -// a << operator in the namespace where Foo is defined. -// -// We put this operator in namespace 'internal2' instead of 'internal' -// to simplify the implementation, as much code in 'internal' needs to -// use << in STL, which would conflict with our own << were it defined -// in 'internal'. -// -// Note that this operator<< takes a generic std::basic_ostream<Char, -// CharTraits> type instead of the more restricted std::ostream. If -// we define it to take an std::ostream instead, we'll get an -// "ambiguous overloads" compiler error when trying to print a type -// Foo that supports streaming to std::basic_ostream<Char, -// CharTraits>, as the compiler cannot tell whether -// operator<<(std::ostream&, const T&) or -// operator<<(std::basic_stream<Char, CharTraits>, const Foo&) is more -// specific. -template <typename Char, typename CharTraits, typename T> -::std::basic_ostream<Char, CharTraits>& operator<<( - ::std::basic_ostream<Char, CharTraits>& os, const T& x) { - TypeWithoutFormatter<T, (internal::IsAProtocolMessage<T>::value - ? kProtobuf - : std::is_convertible< - const T&, internal::BiggestInt>::value - ? kConvertibleToInteger - : -#if GTEST_HAS_ABSL - std::is_convertible< - const T&, absl::string_view>::value - ? kConvertibleToStringView - : -#endif - kOtherType)>::PrintValue(x, &os); - return os; -} +// Prints the given number of bytes in the given object to the given +// ostream. +GTEST_API_ void PrintBytesInObjectTo(const unsigned char* obj_bytes, + size_t count, ::std::ostream* os); +struct RawBytesPrinter { + // SFINAE on `sizeof` to make sure we have a complete type. + template <typename T, size_t = sizeof(T)> + static void PrintValue(const T& value, ::std::ostream* os) { + PrintBytesInObjectTo( + static_cast<const unsigned char*>( + // Load bearing cast to void* to support iOS + reinterpret_cast<const void*>(std::addressof(value))), + sizeof(value), os); + } +}; -} // namespace internal2 -} // namespace testing +struct FallbackPrinter { + template <typename T> + static void PrintValue(const T&, ::std::ostream* os) { + *os << "(incomplete type)"; + } +}; -// This namespace MUST NOT BE NESTED IN ::testing, or the name look-up -// magic needed for implementing UniversalPrinter won't work. -namespace testing_internal { +// Try every printer in order and return the first one that works. +template <typename T, typename E, typename Printer, typename... Printers> +struct FindFirstPrinter : FindFirstPrinter<T, E, Printers...> {}; -// Used to print a value that is not an STL-style container when the -// user doesn't define PrintTo() for it. -template <typename T> -void DefaultPrintNonContainerTo(const T& value, ::std::ostream* os) { - // With the following statement, during unqualified name lookup, - // testing::internal2::operator<< appears as if it was declared in - // the nearest enclosing namespace that contains both - // ::testing_internal and ::testing::internal2, i.e. the global - // namespace. For more details, refer to the C++ Standard section - // 7.3.4-1 [namespace.udir]. This allows us to fall back onto - // testing::internal2::operator<< in case T doesn't come with a << - // operator. - // - // We cannot write 'using ::testing::internal2::operator<<;', which - // gcc 3.3 fails to compile due to a compiler bug. - using namespace ::testing::internal2; // NOLINT +template <typename T, typename Printer, typename... Printers> +struct FindFirstPrinter< + T, decltype(Printer::PrintValue(std::declval<const T&>(), nullptr)), + Printer, Printers...> { + using type = Printer; +}; - // Assuming T is defined in namespace foo, in the next statement, - // the compiler will consider all of: - // - // 1. foo::operator<< (thanks to Koenig look-up), - // 2. ::operator<< (as the current namespace is enclosed in ::), - // 3. testing::internal2::operator<< (thanks to the using statement above). - // - // The operator<< whose type matches T best will be picked. - // - // We deliberately allow #2 to be a candidate, as sometimes it's - // impossible to define #1 (e.g. when foo is ::std, defining - // anything in it is undefined behavior unless you are a compiler - // vendor.). - *os << value; +// Select the best printer in the following order: +// - Print containers (they have begin/end/etc). +// - Print function pointers. +// - Print object pointers. +// - Use the stream operator, if available. +// - Print protocol buffers. +// - Print types convertible to BiggestInt. +// - Print types convertible to StringView, if available. +// - Fallback to printing the raw bytes of the object. +template <typename T> +void PrintWithFallback(const T& value, ::std::ostream* os) { + using Printer = typename FindFirstPrinter< + T, void, ContainerPrinter, FunctionPointerPrinter, PointerPrinter, + internal_stream_operator_without_lexical_name_lookup::StreamPrinter, + ProtobufPrinter, ConvertibleToIntegerPrinter, + ConvertibleToStringViewPrinter, RawBytesPrinter, FallbackPrinter>::type; + Printer::PrintValue(value, os); } -} // namespace testing_internal - -namespace testing { -namespace internal { - // FormatForComparison<ToPrint, OtherOperand>::Format(value) formats a // value of type ToPrint that is an operand of a comparison assertion // (e.g. ASSERT_EQ). OtherOperand is the type of the other operand in @@ -340,6 +359,14 @@ GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char); GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char); GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(wchar_t); GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const wchar_t); +#ifdef __cpp_lib_char8_t +GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char8_t); +GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char8_t); +#endif +GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char16_t); +GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char16_t); +GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char32_t); +GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char32_t); #undef GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_ @@ -347,16 +374,24 @@ GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const wchar_t); // to point to a NUL-terminated string, and thus can print it as a string. #define GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(CharType, OtherStringType) \ - template <> \ - class FormatForComparison<CharType*, OtherStringType> { \ - public: \ - static ::std::string Format(CharType* value) { \ - return ::testing::PrintToString(value); \ - } \ + template <> \ + class FormatForComparison<CharType*, OtherStringType> { \ + public: \ + static ::std::string Format(CharType* value) { \ + return ::testing::PrintToString(value); \ + } \ } GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::std::string); GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::std::string); +#ifdef __cpp_char8_t +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char8_t, ::std::u8string); +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char8_t, ::std::u8string); +#endif +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char16_t, ::std::u16string); +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char16_t, ::std::u16string); +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char32_t, ::std::u32string); +GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char32_t, ::std::u32string); #if GTEST_HAS_STD_WSTRING GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::std::wstring); @@ -374,8 +409,8 @@ GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::std::wstring); // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. template <typename T1, typename T2> -std::string FormatForComparisonFailureMessage( - const T1& value, const T2& /* other_operand */) { +std::string FormatForComparisonFailureMessage(const T1& value, + const T2& /* other_operand */) { return FormatForComparison<T1, T2>::Format(value); } @@ -389,85 +424,6 @@ std::string FormatForComparisonFailureMessage( template <typename T> class UniversalPrinter; -template <typename T> -void UniversalPrint(const T& value, ::std::ostream* os); - -enum DefaultPrinterType { - kPrintContainer, - kPrintPointer, - kPrintFunctionPointer, - kPrintOther, -}; -template <DefaultPrinterType type> struct WrapPrinterType {}; - -// Used to print an STL-style container when the user doesn't define -// a PrintTo() for it. -template <typename C> -void DefaultPrintTo(WrapPrinterType<kPrintContainer> /* dummy */, - const C& container, ::std::ostream* os) { - const size_t kMaxCount = 32; // The maximum number of elements to print. - *os << '{'; - size_t count = 0; - for (typename C::const_iterator it = container.begin(); - it != container.end(); ++it, ++count) { - if (count > 0) { - *os << ','; - if (count == kMaxCount) { // Enough has been printed. - *os << " ..."; - break; - } - } - *os << ' '; - // We cannot call PrintTo(*it, os) here as PrintTo() doesn't - // handle *it being a native array. - internal::UniversalPrint(*it, os); - } - - if (count > 0) { - *os << ' '; - } - *os << '}'; -} - -// Used to print a pointer that is neither a char pointer nor a member -// pointer, when the user doesn't define PrintTo() for it. (A member -// variable pointer or member function pointer doesn't really point to -// a location in the address space. Their representation is -// implementation-defined. Therefore they will be printed as raw -// bytes.) -template <typename T> -void DefaultPrintTo(WrapPrinterType<kPrintPointer> /* dummy */, - T* p, ::std::ostream* os) { - if (p == nullptr) { - *os << "NULL"; - } else { - // T is not a function type. We just call << to print p, - // relying on ADL to pick up user-defined << for their pointer - // types, if any. - *os << p; - } -} -template <typename T> -void DefaultPrintTo(WrapPrinterType<kPrintFunctionPointer> /* dummy */, - T* p, ::std::ostream* os) { - if (p == nullptr) { - *os << "NULL"; - } else { - // T is a function type, so '*os << p' doesn't do what we want - // (it just prints p as bool). We want to print p as a const - // void*. - *os << reinterpret_cast<const void*>(p); - } -} - -// Used to print a non-container, non-pointer value when the user -// doesn't define PrintTo() for it. -template <typename T> -void DefaultPrintTo(WrapPrinterType<kPrintOther> /* dummy */, - const T& value, ::std::ostream* os) { - ::testing_internal::DefaultPrintNonContainerTo(value, os); -} - // Prints the given value using the << operator if it has one; // otherwise prints the bytes in it. This is what // UniversalPrinter<T>::Print() does when PrintTo() is not specialized @@ -481,36 +437,7 @@ void DefaultPrintTo(WrapPrinterType<kPrintOther> /* dummy */, // wants). template <typename T> void PrintTo(const T& value, ::std::ostream* os) { - // DefaultPrintTo() is overloaded. The type of its first argument - // determines which version will be picked. - // - // Note that we check for container types here, prior to we check - // for protocol message types in our operator<<. The rationale is: - // - // For protocol messages, we want to give people a chance to - // override Google Mock's format by defining a PrintTo() or - // operator<<. For STL containers, other formats can be - // incompatible with Google Mock's format for the container - // elements; therefore we check for container types here to ensure - // that our format is used. - // - // Note that MSVC and clang-cl do allow an implicit conversion from - // pointer-to-function to pointer-to-object, but clang-cl warns on it. - // So don't use ImplicitlyConvertible if it can be helped since it will - // cause this warning, and use a separate overload of DefaultPrintTo for - // function pointers so that the `*os << p` in the object pointer overload - // doesn't cause that warning either. - DefaultPrintTo( - WrapPrinterType < - (sizeof(IsContainerTest<T>(0)) == sizeof(IsContainer)) && - !IsRecursiveContainer<T>::value - ? kPrintContainer - : !std::is_pointer<T>::value - ? kPrintOther - : std::is_function<typename std::remove_pointer<T>::type>::value - ? kPrintFunctionPointer - : kPrintPointer > (), - value, os); + internal::PrintWithFallback(value, os); } // The following list of PrintTo() overloads tells @@ -541,6 +468,22 @@ inline void PrintTo(bool x, ::std::ostream* os) { // is implemented as an unsigned type. GTEST_API_ void PrintTo(wchar_t wc, ::std::ostream* os); +GTEST_API_ void PrintTo(char32_t c, ::std::ostream* os); +inline void PrintTo(char16_t c, ::std::ostream* os) { + PrintTo(ImplicitCast_<char32_t>(c), os); +} +#ifdef __cpp_char8_t +inline void PrintTo(char8_t c, ::std::ostream* os) { + PrintTo(ImplicitCast_<char32_t>(c), os); +} +#endif + +// gcc/clang __{u,}int128_t +#if defined(__SIZEOF_INT128__) +GTEST_API_ void PrintTo(__uint128_t v, ::std::ostream* os); +GTEST_API_ void PrintTo(__int128_t v, ::std::ostream* os); +#endif // __SIZEOF_INT128__ + // Overloads for C strings. GTEST_API_ void PrintTo(const char* s, ::std::ostream* os); inline void PrintTo(char* s, ::std::ostream* os) { @@ -561,6 +504,23 @@ inline void PrintTo(const unsigned char* s, ::std::ostream* os) { inline void PrintTo(unsigned char* s, ::std::ostream* os) { PrintTo(ImplicitCast_<const void*>(s), os); } +#ifdef __cpp_char8_t +// Overloads for u8 strings. +GTEST_API_ void PrintTo(const char8_t* s, ::std::ostream* os); +inline void PrintTo(char8_t* s, ::std::ostream* os) { + PrintTo(ImplicitCast_<const char8_t*>(s), os); +} +#endif +// Overloads for u16 strings. +GTEST_API_ void PrintTo(const char16_t* s, ::std::ostream* os); +inline void PrintTo(char16_t* s, ::std::ostream* os) { + PrintTo(ImplicitCast_<const char16_t*>(s), os); +} +// Overloads for u32 strings. +GTEST_API_ void PrintTo(const char32_t* s, ::std::ostream* os); +inline void PrintTo(char32_t* s, ::std::ostream* os) { + PrintTo(ImplicitCast_<const char32_t*>(s), os); +} // MSVC can be configured to define wchar_t as a typedef of unsigned // short. It defines _NATIVE_WCHAR_T_DEFINED when wchar_t is a native @@ -590,33 +550,96 @@ void PrintRawArrayTo(const T a[], size_t count, ::std::ostream* os) { } // Overloads for ::std::string. -GTEST_API_ void PrintStringTo(const ::std::string&s, ::std::ostream* os); +GTEST_API_ void PrintStringTo(const ::std::string& s, ::std::ostream* os); inline void PrintTo(const ::std::string& s, ::std::ostream* os) { PrintStringTo(s, os); } +// Overloads for ::std::u8string +#ifdef __cpp_char8_t +GTEST_API_ void PrintU8StringTo(const ::std::u8string& s, ::std::ostream* os); +inline void PrintTo(const ::std::u8string& s, ::std::ostream* os) { + PrintU8StringTo(s, os); +} +#endif + +// Overloads for ::std::u16string +GTEST_API_ void PrintU16StringTo(const ::std::u16string& s, ::std::ostream* os); +inline void PrintTo(const ::std::u16string& s, ::std::ostream* os) { + PrintU16StringTo(s, os); +} + +// Overloads for ::std::u32string +GTEST_API_ void PrintU32StringTo(const ::std::u32string& s, ::std::ostream* os); +inline void PrintTo(const ::std::u32string& s, ::std::ostream* os) { + PrintU32StringTo(s, os); +} + // Overloads for ::std::wstring. #if GTEST_HAS_STD_WSTRING -GTEST_API_ void PrintWideStringTo(const ::std::wstring&s, ::std::ostream* os); +GTEST_API_ void PrintWideStringTo(const ::std::wstring& s, ::std::ostream* os); inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) { PrintWideStringTo(s, os); } #endif // GTEST_HAS_STD_WSTRING -#if GTEST_HAS_ABSL -// Overload for absl::string_view. -inline void PrintTo(absl::string_view sp, ::std::ostream* os) { +#if GTEST_INTERNAL_HAS_STRING_VIEW +// Overload for internal::StringView. +inline void PrintTo(internal::StringView sp, ::std::ostream* os) { PrintTo(::std::string(sp), os); } -#endif // GTEST_HAS_ABSL +#endif // GTEST_INTERNAL_HAS_STRING_VIEW inline void PrintTo(std::nullptr_t, ::std::ostream* os) { *os << "(nullptr)"; } +#if GTEST_HAS_RTTI +inline void PrintTo(const std::type_info& info, std::ostream* os) { + *os << internal::GetTypeName(info); +} +#endif // GTEST_HAS_RTTI + template <typename T> void PrintTo(std::reference_wrapper<T> ref, ::std::ostream* os) { UniversalPrinter<T&>::Print(ref.get(), os); } +inline const void* VoidifyPointer(const void* p) { return p; } +inline const void* VoidifyPointer(volatile const void* p) { + return const_cast<const void*>(p); +} + +template <typename T, typename Ptr> +void PrintSmartPointer(const Ptr& ptr, std::ostream* os, char) { + if (ptr == nullptr) { + *os << "(nullptr)"; + } else { + // We can't print the value. Just print the pointer.. + *os << "(" << (VoidifyPointer)(ptr.get()) << ")"; + } +} +template <typename T, typename Ptr, + typename = typename std::enable_if<!std::is_void<T>::value && + !std::is_array<T>::value>::type> +void PrintSmartPointer(const Ptr& ptr, std::ostream* os, int) { + if (ptr == nullptr) { + *os << "(nullptr)"; + } else { + *os << "(ptr = " << (VoidifyPointer)(ptr.get()) << ", value = "; + UniversalPrinter<T>::Print(*ptr, os); + *os << ")"; + } +} + +template <typename T, typename D> +void PrintTo(const std::unique_ptr<T, D>& ptr, std::ostream* os) { + (PrintSmartPointer<T>)(ptr, os, 0); +} + +template <typename T> +void PrintTo(const std::shared_ptr<T>& ptr, std::ostream* os) { + (PrintSmartPointer<T>)(ptr, os, 0); +} + // Helper function for printing a tuple. T must be instantiated with // a tuple type. template <typename T> @@ -682,14 +705,46 @@ class UniversalPrinter { GTEST_DISABLE_MSC_WARNINGS_POP_() }; -#if GTEST_HAS_ABSL +// Remove any const-qualifiers before passing a type to UniversalPrinter. +template <typename T> +class UniversalPrinter<const T> : public UniversalPrinter<T> {}; + +#if GTEST_INTERNAL_HAS_ANY + +// Printer for std::any / absl::any + +template <> +class UniversalPrinter<Any> { + public: + static void Print(const Any& value, ::std::ostream* os) { + if (value.has_value()) { + *os << "value of type " << GetTypeName(value); + } else { + *os << "no value"; + } + } + + private: + static std::string GetTypeName(const Any& value) { +#if GTEST_HAS_RTTI + return internal::GetTypeName(value.type()); +#else + static_cast<void>(value); // possibly unused + return "<unknown_type>"; +#endif // GTEST_HAS_RTTI + } +}; + +#endif // GTEST_INTERNAL_HAS_ANY -// Printer for absl::optional +#if GTEST_INTERNAL_HAS_OPTIONAL + +// Printer for std::optional / absl::optional template <typename T> -class UniversalPrinter<::absl::optional<T>> { +class UniversalPrinter<Optional<T>> { public: - static void Print(const ::absl::optional<T>& value, ::std::ostream* os) { + static void Print(const Optional<T>& value, ::std::ostream* os) { *os << '('; if (!value) { *os << "nullopt"; @@ -700,14 +755,30 @@ class UniversalPrinter<::absl::optional<T>> { } }; -// Printer for absl::variant +template <> +class UniversalPrinter<decltype(Nullopt())> { + public: + static void Print(decltype(Nullopt()), ::std::ostream* os) { + *os << "(nullopt)"; + } +}; + +#endif // GTEST_INTERNAL_HAS_OPTIONAL + +#if GTEST_INTERNAL_HAS_VARIANT + +// Printer for std::variant / absl::variant template <typename... T> -class UniversalPrinter<::absl::variant<T...>> { +class UniversalPrinter<Variant<T...>> { public: - static void Print(const ::absl::variant<T...>& value, ::std::ostream* os) { + static void Print(const Variant<T...>& value, ::std::ostream* os) { *os << '('; - absl::visit(Visitor{os}, value); +#if GTEST_HAS_ABSL + absl::visit(Visitor{os, value.index()}, value); +#else + std::visit(Visitor{os, value.index()}, value); +#endif // GTEST_HAS_ABSL *os << ')'; } @@ -715,14 +786,16 @@ class UniversalPrinter<::absl::variant<T...>> { struct Visitor { template <typename U> void operator()(const U& u) const { - *os << "'" << GetTypeName<U>() << "' with value "; + *os << "'" << GetTypeName<U>() << "(index = " << index + << ")' with value "; UniversalPrint(u, os); } ::std::ostream* os; + std::size_t index; }; }; -#endif // GTEST_HAS_ABSL +#endif // GTEST_INTERNAL_HAS_VARIANT // UniversalPrintArray(begin, len, os) prints an array of 'len' // elements, starting at address 'begin'. @@ -748,12 +821,26 @@ void UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) { } } // This overload prints a (const) char array compactly. -GTEST_API_ void UniversalPrintArray( - const char* begin, size_t len, ::std::ostream* os); +GTEST_API_ void UniversalPrintArray(const char* begin, size_t len, + ::std::ostream* os); + +#ifdef __cpp_char8_t +// This overload prints a (const) char8_t array compactly. +GTEST_API_ void UniversalPrintArray(const char8_t* begin, size_t len, + ::std::ostream* os); +#endif + +// This overload prints a (const) char16_t array compactly. +GTEST_API_ void UniversalPrintArray(const char16_t* begin, size_t len, + ::std::ostream* os); + +// This overload prints a (const) char32_t array compactly. +GTEST_API_ void UniversalPrintArray(const char32_t* begin, size_t len, + ::std::ostream* os); // This overload prints a (const) wchar_t array compactly. -GTEST_API_ void UniversalPrintArray( - const wchar_t* begin, size_t len, ::std::ostream* os); +GTEST_API_ void UniversalPrintArray(const wchar_t* begin, size_t len, + ::std::ostream* os); // Implements printing an array type T[N]. template <typename T, size_t N> @@ -823,12 +910,55 @@ class UniversalTersePrinter<const char*> { } }; template <> -class UniversalTersePrinter<char*> { +class UniversalTersePrinter<char*> : public UniversalTersePrinter<const char*> { +}; + +#ifdef __cpp_char8_t +template <> +class UniversalTersePrinter<const char8_t*> { public: - static void Print(char* str, ::std::ostream* os) { - UniversalTersePrinter<const char*>::Print(str, os); + static void Print(const char8_t* str, ::std::ostream* os) { + if (str == nullptr) { + *os << "NULL"; + } else { + UniversalPrint(::std::u8string(str), os); + } + } +}; +template <> +class UniversalTersePrinter<char8_t*> + : public UniversalTersePrinter<const char8_t*> {}; +#endif + +template <> +class UniversalTersePrinter<const char16_t*> { + public: + static void Print(const char16_t* str, ::std::ostream* os) { + if (str == nullptr) { + *os << "NULL"; + } else { + UniversalPrint(::std::u16string(str), os); + } + } +}; +template <> +class UniversalTersePrinter<char16_t*> + : public UniversalTersePrinter<const char16_t*> {}; + +template <> +class UniversalTersePrinter<const char32_t*> { + public: + static void Print(const char32_t* str, ::std::ostream* os) { + if (str == nullptr) { + *os << "NULL"; + } else { + UniversalPrint(::std::u32string(str), os); + } } }; +template <> +class UniversalTersePrinter<char32_t*> + : public UniversalTersePrinter<const char32_t*> {}; #if GTEST_HAS_STD_WSTRING template <> @@ -869,10 +999,10 @@ void UniversalPrint(const T& value, ::std::ostream* os) { UniversalPrinter<T1>::Print(value, os); } -typedef ::std::vector< ::std::string> Strings; +typedef ::std::vector<::std::string> Strings; - // Tersely prints the first N fields of a tuple to a string vector, - // one element for each field. +// Tersely prints the first N fields of a tuple to a string vector, +// one element for each field. template <typename Tuple> void TersePrintPrefixToStrings(const Tuple&, std::integral_constant<size_t, 0>, Strings*) {} @@ -901,16 +1031,6 @@ Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) { } // namespace internal -#if GTEST_HAS_ABSL -namespace internal2 { -template <typename T> -void TypeWithoutFormatter<T, kConvertibleToStringView>::PrintValue( - const T& value, ::std::ostream* os) { - internal::PrintTo(absl::string_view(value), os); -} -} // namespace internal2 -#endif - template <typename T> ::std::string PrintToString(const T& value) { ::std::stringstream ss; @@ -925,4 +1045,4 @@ ::std::string PrintToString(const T& value) { // declarations from this file. #include "gtest/internal/custom/gtest-printers.h" -#endif // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_GTEST_PRINTERS_H_ diff --git a/test/gtest/include/gtest/gtest-spi.h b/test/gtest_vendor/include/gtest/gtest-spi.h similarity index 61% rename from test/gtest/include/gtest/gtest-spi.h rename to test/gtest_vendor/include/gtest/gtest-spi.h index aa38870e8..bec8c4810 100644 --- a/test/gtest/include/gtest/gtest-spi.h +++ b/test/gtest_vendor/include/gtest/gtest-spi.h @@ -27,14 +27,11 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// // Utilities for testing Google Test itself and code that uses Google Test // (e.g. frameworks built on top of Google Test). -// GOOGLETEST_CM0004 DO NOT DELETE - -#ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_ -#define GTEST_INCLUDE_GTEST_GTEST_SPI_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_SPI_H_ +#define GOOGLETEST_INCLUDE_GTEST_GTEST_SPI_H_ #include "gtest/gtest.h" @@ -88,7 +85,10 @@ class GTEST_API_ ScopedFakeTestPartResultReporter TestPartResultReporterInterface* old_reporter_; TestPartResultArray* const result_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedFakeTestPartResultReporter); + ScopedFakeTestPartResultReporter(const ScopedFakeTestPartResultReporter&) = + delete; + ScopedFakeTestPartResultReporter& operator=( + const ScopedFakeTestPartResultReporter&) = delete; }; namespace internal { @@ -104,12 +104,14 @@ class GTEST_API_ SingleFailureChecker { SingleFailureChecker(const TestPartResultArray* results, TestPartResult::Type type, const std::string& substr); ~SingleFailureChecker(); + private: const TestPartResultArray* const results_; const TestPartResult::Type type_; const std::string substr_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker); + SingleFailureChecker(const SingleFailureChecker&) = delete; + SingleFailureChecker& operator=(const SingleFailureChecker&) = delete; }; } // namespace internal @@ -119,7 +121,8 @@ class GTEST_API_ SingleFailureChecker { GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 // A set of macros for testing Google Test assertions or code that's expected -// to generate Google Test fatal failures. It verifies that the given +// to generate Google Test fatal failures (e.g. a failure from an ASSERT_EQ, but +// not a non-fatal failure, as from EXPECT_EQ). It verifies that the given // statement will cause exactly one fatal Google Test failure with 'substr' // being part of the failure message. // @@ -141,44 +144,46 @@ GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 // helper macro, due to some peculiarity in how the preprocessor // works. The AcceptsMacroThatExpandsToUnprotectedComma test in // gtest_unittest.cc will fail to compile if we do that. -#define EXPECT_FATAL_FAILURE(statement, substr) \ - do { \ - class GTestExpectFatalFailureHelper {\ - public:\ - static void Execute() { statement; }\ - };\ - ::testing::TestPartResultArray gtest_failures;\ - ::testing::internal::SingleFailureChecker gtest_checker(\ - >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ - {\ - ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ - ::testing::ScopedFakeTestPartResultReporter:: \ - INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ - GTestExpectFatalFailureHelper::Execute();\ - }\ +#define EXPECT_FATAL_FAILURE(statement, substr) \ + do { \ + class GTestExpectFatalFailureHelper { \ + public: \ + static void Execute() { statement; } \ + }; \ + ::testing::TestPartResultArray gtest_failures; \ + ::testing::internal::SingleFailureChecker gtest_checker( \ + >est_failures, ::testing::TestPartResult::kFatalFailure, (substr)); \ + { \ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter( \ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ONLY_CURRENT_THREAD, \ + >est_failures); \ + GTestExpectFatalFailureHelper::Execute(); \ + } \ } while (::testing::internal::AlwaysFalse()) -#define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ - do { \ - class GTestExpectFatalFailureHelper {\ - public:\ - static void Execute() { statement; }\ - };\ - ::testing::TestPartResultArray gtest_failures;\ - ::testing::internal::SingleFailureChecker gtest_checker(\ - >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\ - {\ - ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ - ::testing::ScopedFakeTestPartResultReporter:: \ - INTERCEPT_ALL_THREADS, >est_failures);\ - GTestExpectFatalFailureHelper::Execute();\ - }\ +#define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ + do { \ + class GTestExpectFatalFailureHelper { \ + public: \ + static void Execute() { statement; } \ + }; \ + ::testing::TestPartResultArray gtest_failures; \ + ::testing::internal::SingleFailureChecker gtest_checker( \ + >est_failures, ::testing::TestPartResult::kFatalFailure, (substr)); \ + { \ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter( \ + ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, \ + >est_failures); \ + GTestExpectFatalFailureHelper::Execute(); \ + } \ } while (::testing::internal::AlwaysFalse()) // A macro for testing Google Test assertions or code that's expected to -// generate Google Test non-fatal failures. It asserts that the given -// statement will cause exactly one non-fatal Google Test failure with 'substr' -// being part of the failure message. +// generate Google Test non-fatal failures (e.g. a failure from an EXPECT_EQ, +// but not from an ASSERT_EQ). It asserts that the given statement will cause +// exactly one non-fatal Google Test failure with 'substr' being part of the +// failure message. // // There are two different versions of this macro. EXPECT_NONFATAL_FAILURE only // affects and considers failures generated in the current thread and @@ -207,32 +212,37 @@ GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 // instead of // GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) // to avoid an MSVC warning on unreachable code. -#define EXPECT_NONFATAL_FAILURE(statement, substr) \ - do {\ - ::testing::TestPartResultArray gtest_failures;\ - ::testing::internal::SingleFailureChecker gtest_checker(\ +#define EXPECT_NONFATAL_FAILURE(statement, substr) \ + do { \ + ::testing::TestPartResultArray gtest_failures; \ + ::testing::internal::SingleFailureChecker gtest_checker( \ >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ - (substr));\ - {\ - ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ - ::testing::ScopedFakeTestPartResultReporter:: \ - INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\ - if (::testing::internal::AlwaysTrue()) { statement; }\ - }\ + (substr)); \ + { \ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter( \ + ::testing::ScopedFakeTestPartResultReporter:: \ + INTERCEPT_ONLY_CURRENT_THREAD, \ + >est_failures); \ + if (::testing::internal::AlwaysTrue()) { \ + statement; \ + } \ + } \ } while (::testing::internal::AlwaysFalse()) -#define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ - do {\ - ::testing::TestPartResultArray gtest_failures;\ - ::testing::internal::SingleFailureChecker gtest_checker(\ - >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ - (substr));\ - {\ - ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\ +#define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \ + do { \ + ::testing::TestPartResultArray gtest_failures; \ + ::testing::internal::SingleFailureChecker gtest_checker( \ + >est_failures, ::testing::TestPartResult::kNonFatalFailure, \ + (substr)); \ + { \ + ::testing::ScopedFakeTestPartResultReporter gtest_reporter( \ ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, \ - >est_failures);\ - if (::testing::internal::AlwaysTrue()) { statement; }\ - }\ + >est_failures); \ + if (::testing::internal::AlwaysTrue()) { \ + statement; \ + } \ + } \ } while (::testing::internal::AlwaysFalse()) -#endif // GTEST_INCLUDE_GTEST_GTEST_SPI_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_GTEST_SPI_H_ diff --git a/test/gtest/include/gtest/gtest-test-part.h b/test/gtest_vendor/include/gtest/gtest-test-part.h similarity index 92% rename from test/gtest/include/gtest/gtest-test-part.h rename to test/gtest_vendor/include/gtest/gtest-test-part.h index 05a798535..09cc8c34f 100644 --- a/test/gtest/include/gtest/gtest-test-part.h +++ b/test/gtest_vendor/include/gtest/gtest-test-part.h @@ -26,14 +26,17 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// GOOGLETEST_CM0001 DO NOT DELETE -#ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ -#define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* + +#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ +#define GOOGLETEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ #include <iosfwd> #include <vector> + #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-string.h" @@ -142,7 +145,8 @@ class GTEST_API_ TestPartResultArray { private: std::vector<TestPartResult> array_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestPartResultArray); + TestPartResultArray(const TestPartResultArray&) = delete; + TestPartResultArray& operator=(const TestPartResultArray&) = delete; }; // This interface knows how to report a test part result. @@ -168,11 +172,13 @@ class GTEST_API_ HasNewFatalFailureHelper ~HasNewFatalFailureHelper() override; void ReportTestPartResult(const TestPartResult& result) override; bool has_new_fatal_failure() const { return has_new_fatal_failure_; } + private: bool has_new_fatal_failure_; TestPartResultReporterInterface* original_reporter_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(HasNewFatalFailureHelper); + HasNewFatalFailureHelper(const HasNewFatalFailureHelper&) = delete; + HasNewFatalFailureHelper& operator=(const HasNewFatalFailureHelper&) = delete; }; } // namespace internal @@ -181,4 +187,4 @@ class GTEST_API_ HasNewFatalFailureHelper GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 -#endif // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_GTEST_TEST_PART_H_ diff --git a/test/gtest/include/gtest/gtest-typed-test.h b/test/gtest_vendor/include/gtest/gtest-typed-test.h similarity index 87% rename from test/gtest/include/gtest/gtest-typed-test.h rename to test/gtest_vendor/include/gtest/gtest-typed-test.h index 095ce0580..bd35a3266 100644 --- a/test/gtest/include/gtest/gtest-typed-test.h +++ b/test/gtest_vendor/include/gtest/gtest-typed-test.h @@ -27,11 +27,12 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* -// GOOGLETEST_CM0001 DO NOT DELETE - -#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ -#define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ +#define GOOGLETEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ // This header implements typed tests and type-parameterized tests. @@ -170,13 +171,12 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); #endif // 0 +#include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-port.h" #include "gtest/internal/gtest-type-util.h" // Implements typed tests. -#if GTEST_HAS_TYPED_TEST - // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the name of the typedef for the type parameters of the @@ -188,24 +188,25 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); #define GTEST_NAME_GENERATOR_(TestSuiteName) \ gtest_type_params_##TestSuiteName##_NameGenerator -#define TYPED_TEST_SUITE(CaseName, Types, ...) \ - typedef ::testing::internal::TypeList<Types>::type GTEST_TYPE_PARAMS_( \ - CaseName); \ - typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \ - GTEST_NAME_GENERATOR_(CaseName) +#define TYPED_TEST_SUITE(CaseName, Types, ...) \ + typedef ::testing::internal::GenerateTypeList<Types>::type \ + GTEST_TYPE_PARAMS_(CaseName); \ + typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \ + GTEST_NAME_GENERATOR_(CaseName) -# define TYPED_TEST(CaseName, TestName) \ +#define TYPED_TEST(CaseName, TestName) \ + static_assert(sizeof(GTEST_STRINGIFY_(TestName)) > 1, \ + "test-name must not be empty"); \ template <typename gtest_TypeParam_> \ class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \ : public CaseName<gtest_TypeParam_> { \ private: \ typedef CaseName<gtest_TypeParam_> TestFixture; \ typedef gtest_TypeParam_ TypeParam; \ - virtual void TestBody(); \ + void TestBody() override; \ }; \ static bool gtest_##CaseName##_##TestName##_registered_ \ - GTEST_ATTRIBUTE_UNUSED_ = \ - ::testing::internal::TypeParameterizedTest< \ + GTEST_ATTRIBUTE_UNUSED_ = ::testing::internal::TypeParameterizedTest< \ CaseName, \ ::testing::internal::TemplateSel<GTEST_TEST_CLASS_NAME_(CaseName, \ TestName)>, \ @@ -213,7 +214,8 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); CaseName)>::Register("", \ ::testing::internal::CodeLocation( \ __FILE__, __LINE__), \ - #CaseName, #TestName, 0, \ + GTEST_STRINGIFY_(CaseName), \ + GTEST_STRINGIFY_(TestName), 0, \ ::testing::internal::GenerateNames< \ GTEST_NAME_GENERATOR_(CaseName), \ GTEST_TYPE_PARAMS_(CaseName)>()); \ @@ -228,12 +230,8 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); TYPED_TEST_SUITE #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ -#endif // GTEST_HAS_TYPED_TEST - // Implements type-parameterized tests. -#if GTEST_HAS_TYPED_TEST_P - // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // Expands to the namespace name that the type-parameterized tests for @@ -260,7 +258,7 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); // #included in multiple translation units linked together. #define TYPED_TEST_SUITE_P(SuiteName) \ static ::testing::internal::TypedTestSuitePState \ - GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName) + GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName) // Legacy API is deprecated but still available #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ @@ -276,24 +274,26 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); private: \ typedef SuiteName<gtest_TypeParam_> TestFixture; \ typedef gtest_TypeParam_ TypeParam; \ - virtual void TestBody(); \ + void TestBody() override; \ }; \ static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \ GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).AddTestName( \ - __FILE__, __LINE__, #SuiteName, #TestName); \ + __FILE__, __LINE__, GTEST_STRINGIFY_(SuiteName), \ + GTEST_STRINGIFY_(TestName)); \ } \ template <typename gtest_TypeParam_> \ void GTEST_SUITE_NAMESPACE_( \ SuiteName)::TestName<gtest_TypeParam_>::TestBody() -#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \ - namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \ - typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \ - } \ - static const char* const GTEST_REGISTERED_TEST_NAMES_( \ - SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \ - GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).VerifyRegisteredTestNames( \ - __FILE__, __LINE__, #__VA_ARGS__) +// Note: this won't work correctly if the trailing arguments are macros. +#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \ + namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \ + typedef ::testing::internal::Templates<__VA_ARGS__> gtest_AllTests_; \ + } \ + static const char* const GTEST_REGISTERED_TEST_NAMES_( \ + SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \ + GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).VerifyRegisteredTestNames( \ + GTEST_STRINGIFY_(SuiteName), __FILE__, __LINE__, #__VA_ARGS__) // Legacy API is deprecated but still available #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ @@ -303,19 +303,22 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); REGISTER_TYPED_TEST_SUITE_P #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ -#define INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, SuiteName, Types, ...) \ - static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \ - ::testing::internal::TypeParameterizedTestSuite< \ - SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \ - ::testing::internal::TypeList<Types>::type>:: \ - Register(#Prefix, \ - ::testing::internal::CodeLocation(__FILE__, __LINE__), \ - >EST_TYPED_TEST_SUITE_P_STATE_(SuiteName), #SuiteName, \ - GTEST_REGISTERED_TEST_NAMES_(SuiteName), \ - ::testing::internal::GenerateNames< \ - ::testing::internal::NameGeneratorSelector< \ - __VA_ARGS__>::type, \ - ::testing::internal::TypeList<Types>::type>()) +#define INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, SuiteName, Types, ...) \ + static_assert(sizeof(GTEST_STRINGIFY_(Prefix)) > 1, \ + "test-suit-prefix must not be empty"); \ + static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \ + ::testing::internal::TypeParameterizedTestSuite< \ + SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \ + ::testing::internal::GenerateTypeList<Types>::type>:: \ + Register(GTEST_STRINGIFY_(Prefix), \ + ::testing::internal::CodeLocation(__FILE__, __LINE__), \ + >EST_TYPED_TEST_SUITE_P_STATE_(SuiteName), \ + GTEST_STRINGIFY_(SuiteName), \ + GTEST_REGISTERED_TEST_NAMES_(SuiteName), \ + ::testing::internal::GenerateNames< \ + ::testing::internal::NameGeneratorSelector< \ + __VA_ARGS__>::type, \ + ::testing::internal::GenerateTypeList<Types>::type>()) // Legacy API is deprecated but still available #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ @@ -325,6 +328,4 @@ INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes); INSTANTIATE_TYPED_TEST_SUITE_P #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ -#endif // GTEST_HAS_TYPED_TEST_P - -#endif // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ diff --git a/test/gtest/include/gtest/gtest.h b/test/gtest_vendor/include/gtest/gtest.h similarity index 84% rename from test/gtest/include/gtest/gtest.h rename to test/gtest_vendor/include/gtest/gtest.h index dbe5b1c2c..d19a587a1 100644 --- a/test/gtest/include/gtest/gtest.h +++ b/test/gtest_vendor/include/gtest/gtest.h @@ -27,7 +27,6 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// // The Google C++ Testing and Mocking Framework (Google Test) // // This header file defines the public API for Google Test. It should be @@ -47,10 +46,8 @@ // registration from Barthelemy Dagenais' (barthelemy@prologique.com) // easyUnit framework. -// GOOGLETEST_CM0001 DO NOT DELETE - -#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ -#define GTEST_INCLUDE_GTEST_GTEST_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_H_ +#define GOOGLETEST_INCLUDE_GTEST_GTEST_H_ #include <cstddef> #include <limits> @@ -59,31 +56,22 @@ #include <type_traits> #include <vector> -#include "gtest/internal/gtest-internal.h" -#include "gtest/internal/gtest-string.h" +#include "gtest/gtest-assertion-result.h" #include "gtest/gtest-death-test.h" #include "gtest/gtest-matchers.h" #include "gtest/gtest-message.h" #include "gtest/gtest-param-test.h" #include "gtest/gtest-printers.h" -#include "gtest/gtest_prod.h" #include "gtest/gtest-test-part.h" #include "gtest/gtest-typed-test.h" +#include "gtest/gtest_pred_impl.h" +#include "gtest/gtest_prod.h" +#include "gtest/internal/gtest-internal.h" +#include "gtest/internal/gtest-string.h" GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ /* class A needs to have dll-interface to be used by clients of class B */) -namespace testing { - -// Silence C4100 (unreferenced formal parameter) and 4805 -// unsafe mix of type 'const int' and type 'const bool' -#ifdef _MSC_VER -# pragma warning(push) -# pragma warning(disable:4805) -# pragma warning(disable:4100) -#endif - - // Declares the flags. // This flag temporary enables the disabled tests. @@ -101,6 +89,10 @@ GTEST_DECLARE_bool_(catch_exceptions); // to let Google Test decide. GTEST_DECLARE_string_(color); +// This flag controls whether the test runner should continue execution past +// first failure. +GTEST_DECLARE_bool_(fail_fast); + // This flag sets up the filter to select by name using a glob pattern // the tests to run. If the filter is not given all tests are executed. GTEST_DECLARE_string_(filter); @@ -117,6 +109,9 @@ GTEST_DECLARE_bool_(list_tests); // in addition to its normal textual output. GTEST_DECLARE_string_(output); +// This flags control whether Google Test prints only test failures. +GTEST_DECLARE_bool_(brief); + // This flags control whether Google Test prints the elapsed time for each // test. GTEST_DECLARE_bool_(print_time); @@ -131,6 +126,12 @@ GTEST_DECLARE_int32_(random_seed); // is 1. If the value is -1 the tests are repeating forever. GTEST_DECLARE_int32_(repeat); +// This flag controls whether Google Test Environments are recreated for each +// repeat of the tests. The default value is true. If set to false the global +// test Environment objects are only set up once, for the first iteration, and +// only torn down once, for the last. +GTEST_DECLARE_bool_(recreate_environments_when_repeating); + // This flag controls whether Google Test includes Google Test internal // stack frames in failure stack traces. GTEST_DECLARE_bool_(show_internal_stack_frames); @@ -156,6 +157,16 @@ GTEST_DECLARE_string_(stream_result_to); GTEST_DECLARE_string_(flagfile); #endif // GTEST_USE_OWN_FLAGFILE_FLAG_ +namespace testing { + +// Silence C4100 (unreferenced formal parameter) and 4805 +// unsafe mix of type 'const int' and type 'const bool' +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4805) +#pragma warning(disable : 4100) +#endif + // The upper limit for valid stack trace depths. const int kMaxStackTraceDepth = 100; @@ -177,6 +188,7 @@ class FuchsiaDeathTest; class UnitTestImpl* GetUnitTestImpl(); void ReportFailureInUnknownLocation(TestPartResult::Type result_type, const std::string& message); +std::set<std::string>* GetIgnoredParameterizedTestSuites(); } // namespace internal @@ -193,189 +205,6 @@ using TestCase = TestSuite; class TestInfo; class UnitTest; -// A class for indicating whether an assertion was successful. When -// the assertion wasn't successful, the AssertionResult object -// remembers a non-empty message that describes how it failed. -// -// To create an instance of this class, use one of the factory functions -// (AssertionSuccess() and AssertionFailure()). -// -// This class is useful for two purposes: -// 1. Defining predicate functions to be used with Boolean test assertions -// EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts -// 2. Defining predicate-format functions to be -// used with predicate assertions (ASSERT_PRED_FORMAT*, etc). -// -// For example, if you define IsEven predicate: -// -// testing::AssertionResult IsEven(int n) { -// if ((n % 2) == 0) -// return testing::AssertionSuccess(); -// else -// return testing::AssertionFailure() << n << " is odd"; -// } -// -// Then the failed expectation EXPECT_TRUE(IsEven(Fib(5))) -// will print the message -// -// Value of: IsEven(Fib(5)) -// Actual: false (5 is odd) -// Expected: true -// -// instead of a more opaque -// -// Value of: IsEven(Fib(5)) -// Actual: false -// Expected: true -// -// in case IsEven is a simple Boolean predicate. -// -// If you expect your predicate to be reused and want to support informative -// messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up -// about half as often as positive ones in our tests), supply messages for -// both success and failure cases: -// -// testing::AssertionResult IsEven(int n) { -// if ((n % 2) == 0) -// return testing::AssertionSuccess() << n << " is even"; -// else -// return testing::AssertionFailure() << n << " is odd"; -// } -// -// Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print -// -// Value of: IsEven(Fib(6)) -// Actual: true (8 is even) -// Expected: false -// -// NB: Predicates that support negative Boolean assertions have reduced -// performance in positive ones so be careful not to use them in tests -// that have lots (tens of thousands) of positive Boolean assertions. -// -// To use this class with EXPECT_PRED_FORMAT assertions such as: -// -// // Verifies that Foo() returns an even number. -// EXPECT_PRED_FORMAT1(IsEven, Foo()); -// -// you need to define: -// -// testing::AssertionResult IsEven(const char* expr, int n) { -// if ((n % 2) == 0) -// return testing::AssertionSuccess(); -// else -// return testing::AssertionFailure() -// << "Expected: " << expr << " is even\n Actual: it's " << n; -// } -// -// If Foo() returns 5, you will see the following message: -// -// Expected: Foo() is even -// Actual: it's 5 -// -class GTEST_API_ AssertionResult { - public: - // Copy constructor. - // Used in EXPECT_TRUE/FALSE(assertion_result). - AssertionResult(const AssertionResult& other); - -#if defined(_MSC_VER) && _MSC_VER < 1910 - GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 /* forcing value to bool */) -#endif - - // Used in the EXPECT_TRUE/FALSE(bool_expression). - // - // T must be contextually convertible to bool. - // - // The second parameter prevents this overload from being considered if - // the argument is implicitly convertible to AssertionResult. In that case - // we want AssertionResult's copy constructor to be used. - template <typename T> - explicit AssertionResult( - const T& success, - typename std::enable_if< - !std::is_convertible<T, AssertionResult>::value>::type* - /*enabler*/ - = nullptr) - : success_(success) {} - -#if defined(_MSC_VER) && _MSC_VER < 1910 - GTEST_DISABLE_MSC_WARNINGS_POP_() -#endif - - // Assignment operator. - AssertionResult& operator=(AssertionResult other) { - swap(other); - return *this; - } - - // Returns true if and only if the assertion succeeded. - operator bool() const { return success_; } // NOLINT - - // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. - AssertionResult operator!() const; - - // Returns the text streamed into this AssertionResult. Test assertions - // use it when they fail (i.e., the predicate's outcome doesn't match the - // assertion's expectation). When nothing has been streamed into the - // object, returns an empty string. - const char* message() const { - return message_.get() != nullptr ? message_->c_str() : ""; - } - // Deprecated; please use message() instead. - const char* failure_message() const { return message(); } - - // Streams a custom failure message into this object. - template <typename T> AssertionResult& operator<<(const T& value) { - AppendMessage(Message() << value); - return *this; - } - - // Allows streaming basic output manipulators such as endl or flush into - // this object. - AssertionResult& operator<<( - ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) { - AppendMessage(Message() << basic_manipulator); - return *this; - } - - private: - // Appends the contents of message to message_. - void AppendMessage(const Message& a_message) { - if (message_.get() == nullptr) message_.reset(new ::std::string); - message_->append(a_message.GetString().c_str()); - } - - // Swap the contents of this AssertionResult with other. - void swap(AssertionResult& other); - - // Stores result of the assertion predicate. - bool success_; - // Stores the message describing the condition in case the expectation - // construct is not satisfied with the predicate's outcome. - // Referenced via a pointer to avoid taking too much stack frame space - // with test assertions. - std::unique_ptr< ::std::string> message_; -}; - -// Makes a successful assertion result. -GTEST_API_ AssertionResult AssertionSuccess(); - -// Makes a failed assertion result. -GTEST_API_ AssertionResult AssertionFailure(); - -// Makes a failed assertion result with the given failure message. -// Deprecated; use AssertionFailure() << msg. -GTEST_API_ AssertionResult AssertionFailure(const Message& msg); - -} // namespace testing - -// Includes the auto-generated header that implements a family of generic -// predicate assertion macros. This include comes late because it relies on -// APIs declared above. -#include "gtest/gtest_pred_impl.h" - -namespace testing { - // The abstract class that all tests inherit from. // // In Google Test, a unit test program contains one or many TestSuites, and @@ -406,27 +235,24 @@ class GTEST_API_ Test { // The d'tor is virtual as we intend to inherit from Test. virtual ~Test(); - // Sets up the stuff shared by all tests in this test case. + // Sets up the stuff shared by all tests in this test suite. // // Google Test will call Foo::SetUpTestSuite() before running the first - // test in test case Foo. Hence a sub-class can define its own + // test in test suite Foo. Hence a sub-class can define its own // SetUpTestSuite() method to shadow the one defined in the super // class. - // Failures that happen during SetUpTestSuite are logged but otherwise - // ignored. static void SetUpTestSuite() {} // Tears down the stuff shared by all tests in this test suite. // // Google Test will call Foo::TearDownTestSuite() after running the last - // test in test case Foo. Hence a sub-class can define its own + // test in test suite Foo. Hence a sub-class can define its own // TearDownTestSuite() method to shadow the one defined in the super // class. - // Failures that happen during TearDownTestSuite are logged but otherwise - // ignored. static void TearDownTestSuite() {} - // Legacy API is deprecated but still available + // Legacy API is deprecated but still available. Use SetUpTestSuite and + // TearDownTestSuite instead. #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ static void TearDownTestCase() {} static void SetUpTestCase() {} @@ -513,7 +339,8 @@ class GTEST_API_ Test { virtual Setup_should_be_spelled_SetUp* Setup() { return nullptr; } // We disallow copying Tests. - GTEST_DISALLOW_COPY_AND_ASSIGN_(Test); + Test(const Test&) = delete; + Test& operator=(const Test&) = delete; }; typedef internal::TimeInMillis TimeInMillis; @@ -527,24 +354,17 @@ class TestProperty { // C'tor. TestProperty does NOT have a default constructor. // Always use this constructor (with parameters) to create a // TestProperty object. - TestProperty(const std::string& a_key, const std::string& a_value) : - key_(a_key), value_(a_value) { - } + TestProperty(const std::string& a_key, const std::string& a_value) + : key_(a_key), value_(a_value) {} // Gets the user supplied key. - const char* key() const { - return key_.c_str(); - } + const char* key() const { return key_.c_str(); } // Gets the user supplied value. - const char* value() const { - return value_.c_str(); - } + const char* value() const { return value_.c_str(); } // Sets a new value, overriding the one supplied in the constructor. - void SetValue(const std::string& new_value) { - value_ = new_value; - } + void SetValue(const std::string& new_value) { value_ = new_value; } private: // The key supplied by the user. @@ -664,7 +484,7 @@ class GTEST_API_ TestResult { // Protects mutable state of the property vector and of owned // properties, whose values may be updated. - internal::Mutex test_properites_mutex_; + internal::Mutex test_properties_mutex_; // The vector of TestPartResults std::vector<TestPartResult> test_part_results_; @@ -678,7 +498,8 @@ class GTEST_API_ TestResult { TimeInMillis elapsed_time_; // We disallow copying TestResult. - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult); + TestResult(const TestResult&) = delete; + TestResult& operator=(const TestResult&) = delete; }; // class TestResult // A TestInfo object stores the following information about a test: @@ -794,13 +615,16 @@ class GTEST_API_ TestInfo { // deletes it. void Run(); + // Skip and records the test result for this object. + void Skip(); + static void ClearTestResult(TestInfo* test_info) { test_info->result_.Clear(); } // These fields are immutable properties of the test. - const std::string test_suite_name_; // test suite name - const std::string name_; // Test name + const std::string test_suite_name_; // test suite name + const std::string name_; // Test name // Name of the parameter type, or NULL if this is not a typed or a // type-parameterized test. const std::unique_ptr<const ::std::string> type_param_; @@ -821,7 +645,8 @@ class GTEST_API_ TestInfo { // test for the second time. TestResult result_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo); + TestInfo(const TestInfo&) = delete; + TestInfo& operator=(const TestInfo&) = delete; }; // A test suite, which consists of a vector of TestInfos. @@ -889,7 +714,9 @@ class GTEST_API_ TestSuite { bool Passed() const { return !Failed(); } // Returns true if and only if the test suite failed. - bool Failed() const { return failed_test_count() > 0; } + bool Failed() const { + return failed_test_count() > 0 || ad_hoc_test_result().Failed(); + } // Returns the elapsed time, in milliseconds. TimeInMillis elapsed_time() const { return elapsed_time_; } @@ -927,7 +754,7 @@ class GTEST_API_ TestSuite { // Adds a TestInfo to this test suite. Will delete the TestInfo upon // destruction of the TestSuite object. - void AddTestInfo(TestInfo * test_info); + void AddTestInfo(TestInfo* test_info); // Clears the results of all tests in this test suite. void ClearResult(); @@ -940,6 +767,9 @@ class GTEST_API_ TestSuite { // Runs every test in this TestSuite. void Run(); + // Skips the execution of tests under this TestSuite + void Skip(); + // Runs SetUpTestSuite() for this TestSuite. This wrapper is needed // for catching exceptions thrown from SetUpTestSuite(). void RunSetUpTestSuite() { @@ -1025,7 +855,8 @@ class GTEST_API_ TestSuite { TestResult ad_hoc_test_result_; // We disallow copying TestSuites. - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestSuite); + TestSuite(const TestSuite&) = delete; + TestSuite& operator=(const TestSuite&) = delete; }; // An Environment object is capable of setting up and tearing down an @@ -1052,6 +883,7 @@ class Environment { // Override this to define how to tear down the environment. virtual void TearDown() {} + private: // If you see an error about overriding the following function or // about it being private, you have mis-spelled SetUp() as Setup(). @@ -1103,6 +935,9 @@ class TestEventListener { // Fired before the test starts. virtual void OnTestStart(const TestInfo& test_info) = 0; + // Fired when a test is disabled + virtual void OnTestDisabled(const TestInfo& /*test_info*/) {} + // Fired after a failed assertion or a SUCCEED() invocation. // If you want to throw an exception from this function to skip to the next // TEST, it must be AssertionException defined above, or inherited from it. @@ -1126,8 +961,7 @@ class TestEventListener { virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0; // Fired after each iteration of tests finishes. - virtual void OnTestIterationEnd(const UnitTest& unit_test, - int iteration) = 0; + virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration) = 0; // Fired after all test activities have ended. virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0; @@ -1152,6 +986,7 @@ class EmptyTestEventListener : public TestEventListener { #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ void OnTestStart(const TestInfo& /*test_info*/) override {} + void OnTestDisabled(const TestInfo& /*test_info*/) override {} void OnTestPartResult(const TestPartResult& /*test_part_result*/) override {} void OnTestEnd(const TestInfo& /*test_info*/) override {} void OnTestSuiteEnd(const TestSuite& /*test_suite*/) override {} @@ -1241,7 +1076,8 @@ class GTEST_API_ TestEventListeners { TestEventListener* default_xml_generator_; // We disallow copying TestEventListeners. - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners); + TestEventListeners(const TestEventListeners&) = delete; + TestEventListeners& operator=(const TestEventListeners&) = delete; }; // A UnitTest consists of a vector of TestSuites. @@ -1284,8 +1120,7 @@ class GTEST_API_ UnitTest { // Returns the TestInfo object for the test that's currently running, // or NULL if no test is running. - const TestInfo* current_test_info() const - GTEST_LOCK_EXCLUDED_(mutex_); + const TestInfo* current_test_info() const GTEST_LOCK_EXCLUDED_(mutex_); // Returns the random seed used at the start of the current test run. int random_seed() const; @@ -1391,8 +1226,7 @@ class GTEST_API_ UnitTest { // eventually call this to report their results. The user code // should use the assertion macros instead of calling this directly. void AddTestPartResult(TestPartResult::Type result_type, - const char* file_name, - int line_number, + const char* file_name, int line_number, const std::string& message, const std::string& os_stack_trace) GTEST_LOCK_EXCLUDED_(mutex_); @@ -1420,10 +1254,10 @@ class GTEST_API_ UnitTest { friend class internal::StreamingListenerTest; friend class internal::UnitTestRecordPropertyTestHelper; friend Environment* AddGlobalTestEnvironment(Environment* env); + friend std::set<std::string>* internal::GetIgnoredParameterizedTestSuites(); friend internal::UnitTestImpl* internal::GetUnitTestImpl(); friend void internal::ReportFailureInUnknownLocation( - TestPartResult::Type result_type, - const std::string& message); + TestPartResult::Type result_type, const std::string& message); // Creates an empty UnitTest. UnitTest(); @@ -1437,8 +1271,7 @@ class GTEST_API_ UnitTest { GTEST_LOCK_EXCLUDED_(mutex_); // Pops a trace from the per-thread Google Test trace stack. - void PopGTestTrace() - GTEST_LOCK_EXCLUDED_(mutex_); + void PopGTestTrace() GTEST_LOCK_EXCLUDED_(mutex_); // Protects mutable state in *impl_. This is mutable as some const // methods need to lock it too. @@ -1451,7 +1284,8 @@ class GTEST_API_ UnitTest { internal::UnitTestImpl* impl_; // We disallow copying UnitTest. - GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest); + UnitTest(const UnitTest&) = delete; + UnitTest& operator=(const UnitTest&) = delete; }; // A convenient wrapper for adding an environment for the test @@ -1502,13 +1336,11 @@ namespace internal { // when calling EXPECT_* in a tight loop. template <typename T1, typename T2> AssertionResult CmpHelperEQFailure(const char* lhs_expression, - const char* rhs_expression, - const T1& lhs, const T2& rhs) { - return EqFailure(lhs_expression, - rhs_expression, + const char* rhs_expression, const T1& lhs, + const T2& rhs) { + return EqFailure(lhs_expression, rhs_expression, FormatForComparisonFailureMessage(lhs, rhs), - FormatForComparisonFailureMessage(rhs, lhs), - false); + FormatForComparisonFailureMessage(rhs, lhs), false); } // This block of code defines operator==/!= @@ -1521,8 +1353,7 @@ inline bool operator!=(faketype, faketype) { return false; } // The helper function for {ASSERT|EXPECT}_EQ. template <typename T1, typename T2> AssertionResult CmpHelperEQ(const char* lhs_expression, - const char* rhs_expression, - const T1& lhs, + const char* rhs_expression, const T1& lhs, const T2& rhs) { if (lhs == rhs) { return AssertionSuccess(); @@ -1531,14 +1362,6 @@ AssertionResult CmpHelperEQ(const char* lhs_expression, return CmpHelperEQFailure(lhs_expression, rhs_expression, lhs, rhs); } -// With this overloaded version, we allow anonymous enums to be used -// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums -// can be implicitly cast to BiggestInt. -GTEST_API_ AssertionResult CmpHelperEQ(const char* lhs_expression, - const char* rhs_expression, - BiggestInt lhs, - BiggestInt rhs); - class EqHelper { public: // This templatized version is for the general case. @@ -1561,8 +1384,7 @@ class EqHelper { // Even though its body looks the same as the above version, we // cannot merge the two, as it will make anonymous enums unhappy. static AssertionResult Compare(const char* lhs_expression, - const char* rhs_expression, - BiggestInt lhs, + const char* rhs_expression, BiggestInt lhs, BiggestInt rhs) { return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs); } @@ -1595,38 +1417,31 @@ AssertionResult CmpHelperOpFailure(const char* expr1, const char* expr2, // ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste // of similar code. // -// For each templatized helper function, we also define an overloaded -// version for BiggestInt in order to reduce code bloat and allow -// anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled -// with gcc 4. -// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. -#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ -template <typename T1, typename T2>\ -AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ - const T1& val1, const T2& val2) {\ - if (val1 op val2) {\ - return AssertionSuccess();\ - } else {\ - return CmpHelperOpFailure(expr1, expr2, val1, val2, #op);\ - }\ -}\ -GTEST_API_ AssertionResult CmpHelper##op_name(\ - const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) +#define GTEST_IMPL_CMP_HELPER_(op_name, op) \ + template <typename T1, typename T2> \ + AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ + const T1& val1, const T2& val2) { \ + if (val1 op val2) { \ + return AssertionSuccess(); \ + } else { \ + return CmpHelperOpFailure(expr1, expr2, val1, val2, #op); \ + } \ + } // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. // Implements the helper function for {ASSERT|EXPECT}_NE -GTEST_IMPL_CMP_HELPER_(NE, !=); +GTEST_IMPL_CMP_HELPER_(NE, !=) // Implements the helper function for {ASSERT|EXPECT}_LE -GTEST_IMPL_CMP_HELPER_(LE, <=); +GTEST_IMPL_CMP_HELPER_(LE, <=) // Implements the helper function for {ASSERT|EXPECT}_LT -GTEST_IMPL_CMP_HELPER_(LT, <); +GTEST_IMPL_CMP_HELPER_(LT, <) // Implements the helper function for {ASSERT|EXPECT}_GE -GTEST_IMPL_CMP_HELPER_(GE, >=); +GTEST_IMPL_CMP_HELPER_(GE, >=) // Implements the helper function for {ASSERT|EXPECT}_GT -GTEST_IMPL_CMP_HELPER_(GT, >); +GTEST_IMPL_CMP_HELPER_(GT, >) #undef GTEST_IMPL_CMP_HELPER_ @@ -1635,49 +1450,42 @@ GTEST_IMPL_CMP_HELPER_(GT, >); // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTREQ(const char* s1_expression, const char* s2_expression, - const char* s1, - const char* s2); + const char* s1, const char* s2); // The helper function for {ASSERT|EXPECT}_STRCASEEQ. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* s1_expression, const char* s2_expression, - const char* s1, - const char* s2); + const char* s1, const char* s2); // The helper function for {ASSERT|EXPECT}_STRNE. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, - const char* s1, - const char* s2); + const char* s1, const char* s2); // The helper function for {ASSERT|EXPECT}_STRCASENE. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression, const char* s2_expression, - const char* s1, - const char* s2); - + const char* s1, const char* s2); // Helper function for *_STREQ on wide strings. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTREQ(const char* s1_expression, const char* s2_expression, - const wchar_t* s1, - const wchar_t* s2); + const wchar_t* s1, const wchar_t* s2); // Helper function for *_STRNE on wide strings. // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, const char* s2_expression, - const wchar_t* s1, - const wchar_t* s2); + const wchar_t* s1, const wchar_t* s2); } // namespace internal @@ -1689,32 +1497,40 @@ GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, // // The {needle,haystack}_expr arguments are the stringified // expressions that generated the two real arguments. -GTEST_API_ AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const char* needle, const char* haystack); -GTEST_API_ AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const wchar_t* needle, const wchar_t* haystack); -GTEST_API_ AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const char* needle, const char* haystack); -GTEST_API_ AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const wchar_t* needle, const wchar_t* haystack); -GTEST_API_ AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::string& needle, const ::std::string& haystack); -GTEST_API_ AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::string& needle, const ::std::string& haystack); +GTEST_API_ AssertionResult IsSubstring(const char* needle_expr, + const char* haystack_expr, + const char* needle, + const char* haystack); +GTEST_API_ AssertionResult IsSubstring(const char* needle_expr, + const char* haystack_expr, + const wchar_t* needle, + const wchar_t* haystack); +GTEST_API_ AssertionResult IsNotSubstring(const char* needle_expr, + const char* haystack_expr, + const char* needle, + const char* haystack); +GTEST_API_ AssertionResult IsNotSubstring(const char* needle_expr, + const char* haystack_expr, + const wchar_t* needle, + const wchar_t* haystack); +GTEST_API_ AssertionResult IsSubstring(const char* needle_expr, + const char* haystack_expr, + const ::std::string& needle, + const ::std::string& haystack); +GTEST_API_ AssertionResult IsNotSubstring(const char* needle_expr, + const char* haystack_expr, + const ::std::string& needle, + const ::std::string& haystack); #if GTEST_HAS_STD_WSTRING -GTEST_API_ AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::wstring& needle, const ::std::wstring& haystack); -GTEST_API_ AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::wstring& needle, const ::std::wstring& haystack); +GTEST_API_ AssertionResult IsSubstring(const char* needle_expr, + const char* haystack_expr, + const ::std::wstring& needle, + const ::std::wstring& haystack); +GTEST_API_ AssertionResult IsNotSubstring(const char* needle_expr, + const char* haystack_expr, + const ::std::wstring& needle, + const ::std::wstring& haystack); #endif // GTEST_HAS_STD_WSTRING namespace internal { @@ -1729,8 +1545,7 @@ namespace internal { template <typename RawType> AssertionResult CmpHelperFloatingPointEQ(const char* lhs_expression, const char* rhs_expression, - RawType lhs_value, - RawType rhs_value) { + RawType lhs_value, RawType rhs_value) { const FloatingPoint<RawType> lhs(lhs_value), rhs(rhs_value); if (lhs.AlmostEquals(rhs)) { @@ -1745,10 +1560,8 @@ AssertionResult CmpHelperFloatingPointEQ(const char* lhs_expression, rhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) << rhs_value; - return EqFailure(lhs_expression, - rhs_expression, - StringStreamToString(&lhs_ss), - StringStreamToString(&rhs_ss), + return EqFailure(lhs_expression, rhs_expression, + StringStreamToString(&lhs_ss), StringStreamToString(&rhs_ss), false); } @@ -1758,8 +1571,7 @@ AssertionResult CmpHelperFloatingPointEQ(const char* lhs_expression, GTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1, const char* expr2, const char* abs_error_expr, - double val1, - double val2, + double val1, double val2, double abs_error); // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. @@ -1767,9 +1579,7 @@ GTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1, class GTEST_API_ AssertHelper { public: // Constructor. - AssertHelper(TestPartResult::Type type, - const char* file, - int line, + AssertHelper(TestPartResult::Type type, const char* file, int line, const char* message); ~AssertHelper(); @@ -1783,11 +1593,9 @@ class GTEST_API_ AssertHelper { // re-using stack space even for temporary variables, so every EXPECT_EQ // reserves stack space for another AssertHelper. struct AssertHelperData { - AssertHelperData(TestPartResult::Type t, - const char* srcfile, - int line_num, + AssertHelperData(TestPartResult::Type t, const char* srcfile, int line_num, const char* msg) - : type(t), file(srcfile), line(line_num), message(msg) { } + : type(t), file(srcfile), line(line_num), message(msg) {} TestPartResult::Type const type; const char* const file; @@ -1795,20 +1603,16 @@ class GTEST_API_ AssertHelper { std::string const message; private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData); + AssertHelperData(const AssertHelperData&) = delete; + AssertHelperData& operator=(const AssertHelperData&) = delete; }; AssertHelperData* const data_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper); + AssertHelper(const AssertHelper&) = delete; + AssertHelper& operator=(const AssertHelper&) = delete; }; -enum GTestColor { COLOR_DEFAULT, COLOR_RED, COLOR_GREEN, COLOR_YELLOW }; - -GTEST_API_ GTEST_ATTRIBUTE_PRINTF_(2, 3) void ColoredPrintf(GTestColor color, - const char* fmt, - ...); - } // namespace internal // The pure interface class that all value-parameterized tests inherit from. @@ -1863,15 +1667,14 @@ class WithParamInterface { private: // Sets parameter value. The caller is responsible for making sure the value // remains alive and unchanged throughout the current test. - static void SetParam(const ParamType* parameter) { - parameter_ = parameter; - } + static void SetParam(const ParamType* parameter) { parameter_ = parameter; } // Static value used for accessing parameter during a test lifetime. static const ParamType* parameter_; // TestClass must be a subclass of WithParamInterface<T> and Test. - template <class TestClass> friend class internal::ParameterizedTestFactory; + template <class TestClass> + friend class internal::ParameterizedTestFactory; }; template <typename T> @@ -1881,15 +1684,14 @@ const T* WithParamInterface<T>::parameter_ = nullptr; // WithParamInterface, and can just inherit from ::testing::TestWithParam. template <typename T> -class TestWithParam : public Test, public WithParamInterface<T> { -}; +class TestWithParam : public Test, public WithParamInterface<T> {}; // Macros for indicating success/failure in test code. // Skips test in runtime. // Skipping test aborts current function. // Skipped tests are neither successful nor failed. -#define GTEST_SKIP() GTEST_SKIP_("Skipped") +#define GTEST_SKIP() GTEST_SKIP_("") // ADD_FAILURE unconditionally adds a failure to the current test. // SUCCEED generates a success - it doesn't automatically make the @@ -1913,7 +1715,7 @@ class TestWithParam : public Test, public WithParamInterface<T> { // Generates a nonfatal failure at the given source file location with // a generic message. -#define ADD_FAILURE_AT(file, line) \ +#define ADD_FAILURE_AT(file, line) \ GTEST_MESSAGE_AT_(file, line, "Failed", \ ::testing::TestPartResult::kNonFatalFailure) @@ -1928,7 +1730,7 @@ class TestWithParam : public Test, public WithParamInterface<T> { // Define this macro to 1 to omit the definition of FAIL(), which is a // generic name and clashes with some other libraries. #if !GTEST_DONT_DEFINE_FAIL -# define FAIL() GTEST_FAIL() +#define FAIL() GTEST_FAIL() #endif // Generates a success with a generic message. @@ -1937,7 +1739,7 @@ class TestWithParam : public Test, public WithParamInterface<T> { // Define this macro to 1 to omit the definition of SUCCEED(), which // is a generic name and clashes with some other libraries. #if !GTEST_DONT_DEFINE_SUCCEED -# define SUCCEED() GTEST_SUCCEED() +#define SUCCEED() GTEST_SUCCEED() #endif // Macros for testing exceptions. @@ -1965,19 +1767,37 @@ class TestWithParam : public Test, public WithParamInterface<T> { // Boolean assertions. Condition can be either a Boolean expression or an // AssertionResult. For more information on how to use AssertionResult with // these macros see comments on that class. -#define EXPECT_TRUE(condition) \ +#define GTEST_EXPECT_TRUE(condition) \ GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ GTEST_NONFATAL_FAILURE_) -#define EXPECT_FALSE(condition) \ +#define GTEST_EXPECT_FALSE(condition) \ GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ GTEST_NONFATAL_FAILURE_) -#define ASSERT_TRUE(condition) \ - GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ - GTEST_FATAL_FAILURE_) -#define ASSERT_FALSE(condition) \ +#define GTEST_ASSERT_TRUE(condition) \ + GTEST_TEST_BOOLEAN_(condition, #condition, false, true, GTEST_FATAL_FAILURE_) +#define GTEST_ASSERT_FALSE(condition) \ GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ GTEST_FATAL_FAILURE_) +// Define these macros to 1 to omit the definition of the corresponding +// EXPECT or ASSERT, which clashes with some users' own code. + +#if !GTEST_DONT_DEFINE_EXPECT_TRUE +#define EXPECT_TRUE(condition) GTEST_EXPECT_TRUE(condition) +#endif + +#if !GTEST_DONT_DEFINE_EXPECT_FALSE +#define EXPECT_FALSE(condition) GTEST_EXPECT_FALSE(condition) +#endif + +#if !GTEST_DONT_DEFINE_ASSERT_TRUE +#define ASSERT_TRUE(condition) GTEST_ASSERT_TRUE(condition) +#endif + +#if !GTEST_DONT_DEFINE_ASSERT_FALSE +#define ASSERT_FALSE(condition) GTEST_ASSERT_FALSE(condition) +#endif + // Macros for testing equalities and inequalities. // // * {ASSERT|EXPECT}_EQ(v1, v2): Tests that v1 == v2 @@ -2054,27 +1874,27 @@ class TestWithParam : public Test, public WithParamInterface<T> { // ASSERT_XY(), which clashes with some users' own code. #if !GTEST_DONT_DEFINE_ASSERT_EQ -# define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) +#define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_NE -# define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) +#define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_LE -# define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) +#define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_LT -# define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) +#define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_GE -# define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) +#define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) #endif #if !GTEST_DONT_DEFINE_ASSERT_GT -# define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) +#define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) #endif // C-string Comparisons. All tests treat NULL and any non-NULL string @@ -2099,7 +1919,7 @@ class TestWithParam : public Test, public WithParamInterface<T> { EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) #define EXPECT_STRCASEEQ(s1, s2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2) -#define EXPECT_STRCASENE(s1, s2)\ +#define EXPECT_STRCASENE(s1, s2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) #define ASSERT_STREQ(s1, s2) \ @@ -2108,7 +1928,7 @@ class TestWithParam : public Test, public WithParamInterface<T> { ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) #define ASSERT_STRCASEEQ(s1, s2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2) -#define ASSERT_STRCASENE(s1, s2)\ +#define ASSERT_STRCASENE(s1, s2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) // Macros for comparing floating-point numbers. @@ -2125,29 +1945,29 @@ class TestWithParam : public Test, public WithParamInterface<T> { // FloatingPoint template class in gtest-internal.h if you are // interested in the implementation details. -#define EXPECT_FLOAT_EQ(val1, val2)\ +#define EXPECT_FLOAT_EQ(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ val1, val2) -#define EXPECT_DOUBLE_EQ(val1, val2)\ +#define EXPECT_DOUBLE_EQ(val1, val2) \ EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ val1, val2) -#define ASSERT_FLOAT_EQ(val1, val2)\ +#define ASSERT_FLOAT_EQ(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ val1, val2) -#define ASSERT_DOUBLE_EQ(val1, val2)\ +#define ASSERT_DOUBLE_EQ(val1, val2) \ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ val1, val2) -#define EXPECT_NEAR(val1, val2, abs_error)\ - EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ - val1, val2, abs_error) +#define EXPECT_NEAR(val1, val2, abs_error) \ + EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, val1, val2, \ + abs_error) -#define ASSERT_NEAR(val1, val2, abs_error)\ - ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ - val1, val2, abs_error) +#define ASSERT_NEAR(val1, val2, abs_error) \ + ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, val1, val2, \ + abs_error) // These predicate format functions work on floating-point values, and // can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g. @@ -2161,7 +1981,6 @@ GTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2, GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2, double val1, double val2); - #if GTEST_OS_WINDOWS // Macros that test for HRESULT failure and success, these are only useful @@ -2173,17 +1992,17 @@ GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2, // expected result and the actual result with both a human-readable // string representation of the error, if available, as well as the // hex result code. -# define EXPECT_HRESULT_SUCCEEDED(expr) \ - EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) +#define EXPECT_HRESULT_SUCCEEDED(expr) \ + EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) -# define ASSERT_HRESULT_SUCCEEDED(expr) \ - ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) +#define ASSERT_HRESULT_SUCCEEDED(expr) \ + ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) -# define EXPECT_HRESULT_FAILED(expr) \ - EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) +#define EXPECT_HRESULT_FAILED(expr) \ + EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) -# define ASSERT_HRESULT_FAILED(expr) \ - ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) +#define ASSERT_HRESULT_FAILED(expr) \ + ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) #endif // GTEST_OS_WINDOWS @@ -2198,9 +2017,9 @@ GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2, // ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed"; // #define ASSERT_NO_FATAL_FAILURE(statement) \ - GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) + GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) #define EXPECT_NO_FATAL_FAILURE(statement) \ - GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) + GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) // Causes a trace (including the given source file path and line number, // and the given message) to be included in every test failure message generated @@ -2242,7 +2061,8 @@ class GTEST_API_ ScopedTrace { private: void PushTrace(const char* file, int line, std::string message); - GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedTrace); + ScopedTrace(const ScopedTrace&) = delete; + ScopedTrace& operator=(const ScopedTrace&) = delete; } GTEST_ATTRIBUTE_UNUSED_; // A ScopedTrace object does its job in its // c'tor and d'tor. Therefore it doesn't // need to be used otherwise. @@ -2262,9 +2082,9 @@ class GTEST_API_ ScopedTrace { // Assuming that each thread maintains its own stack of traces. // Therefore, a SCOPED_TRACE() would (correctly) only affect the // assertions in its own thread. -#define SCOPED_TRACE(message) \ - ::testing::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ - __FILE__, __LINE__, (message)) +#define SCOPED_TRACE(message) \ + ::testing::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)( \ + __FILE__, __LINE__, (message)) // Compile-time assertion for type equality. // StaticAssertTypeEq<type1, type2>() compiles if and only if type1 and type2 @@ -2298,8 +2118,7 @@ class GTEST_API_ ScopedTrace { // to cause a compiler error. template <typename T1, typename T2> constexpr bool StaticAssertTypeEq() noexcept { - static_assert(std::is_same<T1, T2>::value, - "type1 and type2 are not the same type"); + static_assert(std::is_same<T1, T2>::value, "T1 and T2 are not the same type"); return true; } @@ -2363,18 +2182,19 @@ constexpr bool StaticAssertTypeEq() noexcept { // EXPECT_EQ(a_.size(), 0); // EXPECT_EQ(b_.size(), 1); // } -// -// GOOGLETEST_CM0011 DO NOT DELETE -#define TEST_F(test_fixture, test_name)\ +#define GTEST_TEST_F(test_fixture, test_name) \ GTEST_TEST_(test_fixture, test_name, test_fixture, \ ::testing::internal::GetTypeId<test_fixture>()) +#if !GTEST_DONT_DEFINE_TEST_F +#define TEST_F(test_fixture, test_name) GTEST_TEST_F(test_fixture, test_name) +#endif // Returns a path to temporary directory. // Tries to determine an appropriate directory for the platform. GTEST_API_ std::string TempDir(); #ifdef _MSC_VER -# pragma warning(pop) +#pragma warning(pop) #endif // Dynamically registers a test with the framework. @@ -2428,6 +2248,7 @@ GTEST_API_ std::string TempDir(); // } // ... // int main(int argc, char** argv) { +// ::testing::InitGoogleTest(&argc, argv); // std::vector<int> values_to_test = LoadValuesFromConfig(); // RegisterMyTests(values_to_test); // ... @@ -2469,10 +2290,8 @@ TestInfo* RegisterTest(const char* test_suite_name, const char* test_name, // namespace and has an all-caps name. int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_; -inline int RUN_ALL_TESTS() { - return ::testing::UnitTest::GetInstance()->Run(); -} +inline int RUN_ALL_TESTS() { return ::testing::UnitTest::GetInstance()->Run(); } GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 -#endif // GTEST_INCLUDE_GTEST_GTEST_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_GTEST_H_ diff --git a/test/gtest/include/gtest/gtest_pred_impl.h b/test/gtest_vendor/include/gtest/gtest_pred_impl.h similarity index 61% rename from test/gtest/include/gtest/gtest_pred_impl.h rename to test/gtest_vendor/include/gtest/gtest_pred_impl.h index d514255c7..47a24aa68 100644 --- a/test/gtest/include/gtest/gtest_pred_impl.h +++ b/test/gtest_vendor/include/gtest/gtest_pred_impl.h @@ -26,17 +26,19 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// This file is AUTOMATICALLY GENERATED on 01/02/2019 by command -// 'gen_gtest_pred_impl.py 5'. DO NOT EDIT BY HAND! // // Implements a family of generic predicate assertion macros. -// GOOGLETEST_CM0001 DO NOT DELETE -#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ -#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* + +#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ +#define GOOGLETEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ -#include "gtest/gtest.h" +#include "gtest/gtest-assertion-result.h" +#include "gtest/internal/gtest-internal.h" +#include "gtest/internal/gtest-port.h" namespace testing { @@ -72,22 +74,18 @@ namespace testing { // GTEST_ASSERT_ is the basic statement to which all of the assertions // in this file reduce. Don't use this in your code. -#define GTEST_ASSERT_(expression, on_failure) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ +#define GTEST_ASSERT_(expression, on_failure) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ if (const ::testing::AssertionResult gtest_ar = (expression)) \ - ; \ - else \ + ; \ + else \ on_failure(gtest_ar.failure_message()) - // Helper function for implementing {EXPECT|ASSERT}_PRED1. Don't use // this in your code. -template <typename Pred, - typename T1> -AssertionResult AssertPred1Helper(const char* pred_text, - const char* e1, - Pred pred, - const T1& v1) { +template <typename Pred, typename T1> +AssertionResult AssertPred1Helper(const char* pred_text, const char* e1, + Pred pred, const T1& v1) { if (pred(v1)) return AssertionSuccess(); return AssertionFailure() @@ -98,40 +96,27 @@ AssertionResult AssertPred1Helper(const char* pred_text, // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1. // Don't use this in your code. -#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\ - GTEST_ASSERT_(pred_format(#v1, v1), \ - on_failure) +#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure) \ + GTEST_ASSERT_(pred_format(#v1, v1), on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don't use // this in your code. -#define GTEST_PRED1_(pred, v1, on_failure)\ - GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \ - #v1, \ - pred, \ - v1), on_failure) +#define GTEST_PRED1_(pred, v1, on_failure) \ + GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, #v1, pred, v1), on_failure) // Unary predicate assertion macros. #define EXPECT_PRED_FORMAT1(pred_format, v1) \ GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_) -#define EXPECT_PRED1(pred, v1) \ - GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) +#define EXPECT_PRED1(pred, v1) GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_) #define ASSERT_PRED_FORMAT1(pred_format, v1) \ GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_) -#define ASSERT_PRED1(pred, v1) \ - GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) - - +#define ASSERT_PRED1(pred, v1) GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_) // Helper function for implementing {EXPECT|ASSERT}_PRED2. Don't use // this in your code. -template <typename Pred, - typename T1, - typename T2> -AssertionResult AssertPred2Helper(const char* pred_text, - const char* e1, - const char* e2, - Pred pred, - const T1& v1, +template <typename Pred, typename T1, typename T2> +AssertionResult AssertPred2Helper(const char* pred_text, const char* e1, + const char* e2, Pred pred, const T1& v1, const T2& v2) { if (pred(v1, v2)) return AssertionSuccess(); @@ -145,19 +130,14 @@ AssertionResult AssertPred2Helper(const char* pred_text, // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2. // Don't use this in your code. -#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\ - GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \ - on_failure) +#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure) \ + GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don't use // this in your code. -#define GTEST_PRED2_(pred, v1, v2, on_failure)\ - GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \ - #v1, \ - #v2, \ - pred, \ - v1, \ - v2), on_failure) +#define GTEST_PRED2_(pred, v1, v2, on_failure) \ + GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, #v1, #v2, pred, v1, v2), \ + on_failure) // Binary predicate assertion macros. #define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \ @@ -169,22 +149,12 @@ AssertionResult AssertPred2Helper(const char* pred_text, #define ASSERT_PRED2(pred, v1, v2) \ GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_) - - // Helper function for implementing {EXPECT|ASSERT}_PRED3. Don't use // this in your code. -template <typename Pred, - typename T1, - typename T2, - typename T3> -AssertionResult AssertPred3Helper(const char* pred_text, - const char* e1, - const char* e2, - const char* e3, - Pred pred, - const T1& v1, - const T2& v2, - const T3& v3) { +template <typename Pred, typename T1, typename T2, typename T3> +AssertionResult AssertPred3Helper(const char* pred_text, const char* e1, + const char* e2, const char* e3, Pred pred, + const T1& v1, const T2& v2, const T3& v3) { if (pred(v1, v2, v3)) return AssertionSuccess(); return AssertionFailure() @@ -198,21 +168,15 @@ AssertionResult AssertPred3Helper(const char* pred_text, // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3. // Don't use this in your code. -#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\ - GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \ - on_failure) +#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure) \ + GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don't use // this in your code. -#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\ - GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \ - #v1, \ - #v2, \ - #v3, \ - pred, \ - v1, \ - v2, \ - v3), on_failure) +#define GTEST_PRED3_(pred, v1, v2, v3, on_failure) \ + GTEST_ASSERT_( \ + ::testing::AssertPred3Helper(#pred, #v1, #v2, #v3, pred, v1, v2, v3), \ + on_failure) // Ternary predicate assertion macros. #define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \ @@ -224,25 +188,13 @@ AssertionResult AssertPred3Helper(const char* pred_text, #define ASSERT_PRED3(pred, v1, v2, v3) \ GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_) - - // Helper function for implementing {EXPECT|ASSERT}_PRED4. Don't use // this in your code. -template <typename Pred, - typename T1, - typename T2, - typename T3, - typename T4> -AssertionResult AssertPred4Helper(const char* pred_text, - const char* e1, - const char* e2, - const char* e3, - const char* e4, - Pred pred, - const T1& v1, - const T2& v2, - const T3& v3, - const T4& v4) { +template <typename Pred, typename T1, typename T2, typename T3, typename T4> +AssertionResult AssertPred4Helper(const char* pred_text, const char* e1, + const char* e2, const char* e3, + const char* e4, Pred pred, const T1& v1, + const T2& v2, const T3& v3, const T4& v4) { if (pred(v1, v2, v3, v4)) return AssertionSuccess(); return AssertionFailure() @@ -257,23 +209,15 @@ AssertionResult AssertPred4Helper(const char* pred_text, // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4. // Don't use this in your code. -#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\ - GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \ - on_failure) +#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure) \ + GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don't use // this in your code. -#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\ - GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \ - #v1, \ - #v2, \ - #v3, \ - #v4, \ - pred, \ - v1, \ - v2, \ - v3, \ - v4), on_failure) +#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure) \ + GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, #v1, #v2, #v3, #v4, pred, \ + v1, v2, v3, v4), \ + on_failure) // 4-ary predicate assertion macros. #define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \ @@ -285,28 +229,15 @@ AssertionResult AssertPred4Helper(const char* pred_text, #define ASSERT_PRED4(pred, v1, v2, v3, v4) \ GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_) - - // Helper function for implementing {EXPECT|ASSERT}_PRED5. Don't use // this in your code. -template <typename Pred, - typename T1, - typename T2, - typename T3, - typename T4, +template <typename Pred, typename T1, typename T2, typename T3, typename T4, typename T5> -AssertionResult AssertPred5Helper(const char* pred_text, - const char* e1, - const char* e2, - const char* e3, - const char* e4, - const char* e5, - Pred pred, - const T1& v1, - const T2& v2, - const T3& v3, - const T4& v4, - const T5& v5) { +AssertionResult AssertPred5Helper(const char* pred_text, const char* e1, + const char* e2, const char* e3, + const char* e4, const char* e5, Pred pred, + const T1& v1, const T2& v2, const T3& v3, + const T4& v4, const T5& v5) { if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); return AssertionFailure() @@ -322,25 +253,16 @@ AssertionResult AssertPred5Helper(const char* pred_text, // Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5. // Don't use this in your code. -#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ +#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure) \ GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \ on_failure) // Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don't use // this in your code. -#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ - GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \ - #v1, \ - #v2, \ - #v3, \ - #v4, \ - #v5, \ - pred, \ - v1, \ - v2, \ - v3, \ - v4, \ - v5), on_failure) +#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure) \ + GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, #v1, #v2, #v3, #v4, #v5, \ + pred, v1, v2, v3, v4, v5), \ + on_failure) // 5-ary predicate assertion macros. #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ @@ -352,8 +274,6 @@ AssertionResult AssertPred5Helper(const char* pred_text, #define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \ GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_) - - } // namespace testing -#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_ diff --git a/test/gtest/include/gtest/gtest_prod.h b/test/gtest_vendor/include/gtest/gtest_prod.h similarity index 88% rename from test/gtest/include/gtest/gtest_prod.h rename to test/gtest_vendor/include/gtest/gtest_prod.h index e651671eb..1f37dc31c 100644 --- a/test/gtest/include/gtest/gtest_prod.h +++ b/test/gtest_vendor/include/gtest/gtest_prod.h @@ -27,12 +27,11 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Google C++ Testing and Mocking Framework definitions useful in production code. -// GOOGLETEST_CM0003 DO NOT DELETE +// Google C++ Testing and Mocking Framework definitions useful in production +// code. -#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_ -#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_PROD_H_ +#define GOOGLETEST_INCLUDE_GTEST_GTEST_PROD_H_ // When you need to test the private or protected members of a class, // use the FRIEND_TEST macro to declare your tests as friends of the @@ -55,7 +54,7 @@ // Note: The test class must be in the same namespace as the class being tested. // For example, putting MyClassTest in an anonymous namespace will not work. -#define FRIEND_TEST(test_case_name, test_name)\ -friend class test_case_name##_##test_name##_Test +#define FRIEND_TEST(test_case_name, test_name) \ + friend class test_case_name##_##test_name##_Test -#endif // GTEST_INCLUDE_GTEST_GTEST_PROD_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_GTEST_PROD_H_ diff --git a/test/gtest/include/gtest/internal/custom/README.md b/test/gtest_vendor/include/gtest/internal/custom/README.md similarity index 75% rename from test/gtest/include/gtest/internal/custom/README.md rename to test/gtest_vendor/include/gtest/internal/custom/README.md index ff391fb4e..cb49e2c75 100644 --- a/test/gtest/include/gtest/internal/custom/README.md +++ b/test/gtest_vendor/include/gtest/internal/custom/README.md @@ -15,18 +15,6 @@ The custom directory is an injection point for custom user configurations. The following macros can be defined: -### Flag related macros: - -* `GTEST_FLAG(flag_name)` -* `GTEST_USE_OWN_FLAGFILE_FLAG_` - Define to 0 when the system provides its - own flagfile flag parsing. -* `GTEST_DECLARE_bool_(name)` -* `GTEST_DECLARE_int32_(name)` -* `GTEST_DECLARE_string_(name)` -* `GTEST_DEFINE_bool_(name, default_val, doc)` -* `GTEST_DEFINE_int32_(name, default_val, doc)` -* `GTEST_DEFINE_string_(name, default_val, doc)` - ### Logging: * `GTEST_LOG_(severity)` diff --git a/test/gtest/include/gtest/internal/custom/gtest-port.h b/test/gtest_vendor/include/gtest/internal/custom/gtest-port.h similarity index 89% rename from test/gtest/include/gtest/internal/custom/gtest-port.h rename to test/gtest_vendor/include/gtest/internal/custom/gtest-port.h index cd85d956d..db02881c0 100644 --- a/test/gtest/include/gtest/internal/custom/gtest-port.h +++ b/test/gtest_vendor/include/gtest/internal/custom/gtest-port.h @@ -31,7 +31,7 @@ // // ** Custom implementation starts here ** -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_ +#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_ -#endif // GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_ diff --git a/test/gtest/include/gtest/internal/custom/gtest-printers.h b/test/gtest_vendor/include/gtest/internal/custom/gtest-printers.h similarity index 90% rename from test/gtest/include/gtest/internal/custom/gtest-printers.h rename to test/gtest_vendor/include/gtest/internal/custom/gtest-printers.h index eb4467abc..b9495d837 100644 --- a/test/gtest/include/gtest/internal/custom/gtest-printers.h +++ b/test/gtest_vendor/include/gtest/internal/custom/gtest-printers.h @@ -36,7 +36,7 @@ // // ** Custom implementation starts here ** -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_ +#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_ -#endif // GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_ diff --git a/test/gtest/include/gtest/internal/custom/gtest.h b/test/gtest_vendor/include/gtest/internal/custom/gtest.h similarity index 90% rename from test/gtest/include/gtest/internal/custom/gtest.h rename to test/gtest_vendor/include/gtest/internal/custom/gtest.h index 4c8e07be2..afaaf17ba 100644 --- a/test/gtest/include/gtest/internal/custom/gtest.h +++ b/test/gtest_vendor/include/gtest/internal/custom/gtest.h @@ -31,7 +31,7 @@ // // ** Custom implementation starts here ** -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_H_ +#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_H_ -#endif // GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_H_ diff --git a/test/gtest/include/gtest/internal/gtest-death-test-internal.h b/test/gtest_vendor/include/gtest/internal/gtest-death-test-internal.h similarity index 86% rename from test/gtest/include/gtest/internal/gtest-death-test-internal.h rename to test/gtest_vendor/include/gtest/internal/gtest-death-test-internal.h index 68bd35306..45580ae80 100644 --- a/test/gtest/include/gtest/internal/gtest-death-test-internal.h +++ b/test/gtest_vendor/include/gtest/internal/gtest-death-test-internal.h @@ -26,27 +26,31 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// + // The Google C++ Testing and Mocking Framework (Google Test) // // This header file defines internal utilities needed for implementing // death tests. They are subject to change without notice. -// GOOGLETEST_CM0001 DO NOT DELETE -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* -#include "gtest/gtest-matchers.h" -#include "gtest/internal/gtest-internal.h" +#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ +#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ #include <stdio.h> + #include <memory> -namespace testing { -namespace internal { +#include "gtest/gtest-matchers.h" +#include "gtest/internal/gtest-internal.h" GTEST_DECLARE_string_(internal_run_death_test); +namespace testing { +namespace internal { + // Names of the flags (needed for parsing Google Test flags). const char kDeathTestStyleFlag[] = "death_test_style"; const char kDeathTestUseFork[] = "death_test_use_fork"; @@ -83,16 +87,18 @@ class GTEST_API_ DeathTest { static bool Create(const char* statement, Matcher<const std::string&> matcher, const char* file, int line, DeathTest** test); DeathTest(); - virtual ~DeathTest() { } + virtual ~DeathTest() {} // A helper class that aborts a death test when it's deleted. class ReturnSentinel { public: - explicit ReturnSentinel(DeathTest* test) : test_(test) { } + explicit ReturnSentinel(DeathTest* test) : test_(test) {} ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); } + private: DeathTest* const test_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ReturnSentinel); + ReturnSentinel(const ReturnSentinel&) = delete; + ReturnSentinel& operator=(const ReturnSentinel&) = delete; } GTEST_ATTRIBUTE_UNUSED_; // An enumeration of possible roles that may be taken when a death @@ -137,7 +143,8 @@ class GTEST_API_ DeathTest { // A string containing a description of the outcome of the last death test. static std::string last_death_test_message_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest); + DeathTest(const DeathTest&) = delete; + DeathTest& operator=(const DeathTest&) = delete; }; GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 @@ -145,7 +152,7 @@ GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 // Factory interface for death tests. May be mocked out for testing. class DeathTestFactory { public: - virtual ~DeathTestFactory() { } + virtual ~DeathTestFactory() {} virtual bool Create(const char* statement, Matcher<const std::string&> matcher, const char* file, int line, DeathTest** test) = 0; @@ -186,28 +193,28 @@ inline Matcher<const ::std::string&> MakeDeathTestMatcher( // Traps C++ exceptions escaping statement and reports them as test // failures. Note that trapping SEH exceptions is not implemented here. -# if GTEST_HAS_EXCEPTIONS -# define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ - try { \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - } catch (const ::std::exception& gtest_exception) { \ - fprintf(\ - stderr, \ - "\n%s: Caught std::exception-derived exception escaping the " \ - "death test statement. Exception message: %s\n", \ +#if GTEST_HAS_EXCEPTIONS +#define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } catch (const ::std::exception& gtest_exception) { \ + fprintf( \ + stderr, \ + "\n%s: Caught std::exception-derived exception escaping the " \ + "death test statement. Exception message: %s\n", \ ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \ - gtest_exception.what()); \ - fflush(stderr); \ + gtest_exception.what()); \ + fflush(stderr); \ death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ - } catch (...) { \ + } catch (...) { \ death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \ } -# else -# define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ +#else +#define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \ GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) -# endif +#endif // This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*, // ASSERT_EXIT*, and EXPECT_EXIT*. @@ -236,8 +243,6 @@ inline Matcher<const ::std::string&> MakeDeathTestMatcher( gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \ break; \ } \ - default: \ - break; \ } \ } \ } else \ @@ -265,16 +270,12 @@ inline Matcher<const ::std::string&> MakeDeathTestMatcher( // RUN_ALL_TESTS was called. class InternalRunDeathTestFlag { public: - InternalRunDeathTestFlag(const std::string& a_file, - int a_line, - int an_index, + InternalRunDeathTestFlag(const std::string& a_file, int a_line, int an_index, int a_write_fd) - : file_(a_file), line_(a_line), index_(an_index), - write_fd_(a_write_fd) {} + : file_(a_file), line_(a_line), index_(an_index), write_fd_(a_write_fd) {} ~InternalRunDeathTestFlag() { - if (write_fd_ >= 0) - posix::Close(write_fd_); + if (write_fd_ >= 0) posix::Close(write_fd_); } const std::string& file() const { return file_; } @@ -288,7 +289,8 @@ class InternalRunDeathTestFlag { int index_; int write_fd_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(InternalRunDeathTestFlag); + InternalRunDeathTestFlag(const InternalRunDeathTestFlag&) = delete; + InternalRunDeathTestFlag& operator=(const InternalRunDeathTestFlag&) = delete; }; // Returns a newly created InternalRunDeathTestFlag object with fields @@ -301,4 +303,4 @@ InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag(); } // namespace internal } // namespace testing -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_ diff --git a/test/gtest/include/gtest/internal/gtest-filepath.h b/test/gtest_vendor/include/gtest/internal/gtest-filepath.h similarity index 93% rename from test/gtest/include/gtest/internal/gtest-filepath.h rename to test/gtest_vendor/include/gtest/internal/gtest-filepath.h index c11b10151..a2a60a962 100644 --- a/test/gtest/include/gtest/internal/gtest-filepath.h +++ b/test/gtest_vendor/include/gtest/internal/gtest-filepath.h @@ -26,7 +26,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// + // Google Test filepath utilities // // This header file declares classes and functions used internally by @@ -35,10 +35,12 @@ // This file is #included in gtest/internal/gtest-internal.h. // Do not include this header file separately! -// GOOGLETEST_CM0001 DO NOT DELETE +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ +#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ #include "gtest/internal/gtest-string.h" @@ -61,8 +63,8 @@ namespace internal { class GTEST_API_ FilePath { public: - FilePath() : pathname_("") { } - FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) { } + FilePath() : pathname_("") {} + FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) {} explicit FilePath(const std::string& pathname) : pathname_(pathname) { Normalize(); @@ -73,9 +75,7 @@ class GTEST_API_ FilePath { return *this; } - void Set(const FilePath& rhs) { - pathname_ = rhs.pathname_; - } + void Set(const FilePath& rhs) { pathname_ = rhs.pathname_; } const std::string& string() const { return pathname_; } const char* c_str() const { return pathname_.c_str(); } @@ -88,8 +88,7 @@ class GTEST_API_ FilePath { // than zero (e.g., 12), returns "dir/test_12.xml". // On Windows platform, uses \ as the separator rather than /. static FilePath MakeFileName(const FilePath& directory, - const FilePath& base_name, - int number, + const FilePath& base_name, int number, const char* extension); // Given directory = "dir", relative_path = "test.xml", @@ -195,7 +194,7 @@ class GTEST_API_ FilePath { void Normalize(); - // Returns a pointer to the last occurence of a valid path separator in + // Returns a pointer to the last occurrence of a valid path separator in // the FilePath. On Windows, for example, both '/' and '\' are valid path // separators. Returns NULL if no path separator was found. const char* FindLastPathSeparator() const; @@ -208,4 +207,4 @@ class GTEST_API_ FilePath { GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_ diff --git a/test/gtest/include/gtest/internal/gtest-internal.h b/test/gtest_vendor/include/gtest/internal/gtest-internal.h similarity index 69% rename from test/gtest/include/gtest/internal/gtest-internal.h rename to test/gtest_vendor/include/gtest/internal/gtest-internal.h index 94c816a28..9b04e4c85 100644 --- a/test/gtest/include/gtest/internal/gtest-internal.h +++ b/test/gtest_vendor/include/gtest/internal/gtest-internal.h @@ -26,33 +26,37 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// + // The Google C++ Testing and Mocking Framework (Google Test) // // This header file declares functions and macros used internally by // Google Test. They are subject to change without notice. -// GOOGLETEST_CM0001 DO NOT DELETE +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ +#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ #include "gtest/internal/gtest-port.h" #if GTEST_OS_LINUX -# include <stdlib.h> -# include <sys/types.h> -# include <sys/wait.h> -# include <unistd.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/wait.h> +#include <unistd.h> #endif // GTEST_OS_LINUX #if GTEST_HAS_EXCEPTIONS -# include <stdexcept> +#include <stdexcept> #endif #include <ctype.h> #include <float.h> #include <string.h> + +#include <cstdint> #include <iomanip> #include <limits> #include <map> @@ -75,32 +79,43 @@ // the current line number. For more details, see // http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.6 #define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar) -#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar +#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo##bar // Stringifies its argument. -#define GTEST_STRINGIFY_(name) #name +// Work around a bug in visual studio which doesn't accept code like this: +// +// #define GTEST_STRINGIFY_(name) #name +// #define MACRO(a, b, c) ... GTEST_STRINGIFY_(a) ... +// MACRO(, x, y) +// +// Complaining about the argument to GTEST_STRINGIFY_ being empty. +// This is allowed by the spec. +#define GTEST_STRINGIFY_HELPER_(name, ...) #name +#define GTEST_STRINGIFY_(...) GTEST_STRINGIFY_HELPER_(__VA_ARGS__, ) -namespace proto2 { class Message; } +namespace proto2 { +class MessageLite; +} namespace testing { // Forward declarations. -class AssertionResult; // Result of an assertion. -class Message; // Represents a failure message. -class Test; // Represents a test. -class TestInfo; // Information about a test. -class TestPartResult; // Result of a test part. -class UnitTest; // A collection of test suites. +class AssertionResult; // Result of an assertion. +class Message; // Represents a failure message. +class Test; // Represents a test. +class TestInfo; // Information about a test. +class TestPartResult; // Result of a test part. +class UnitTest; // A collection of test suites. template <typename T> ::std::string PrintToString(const T& value); namespace internal { -struct TraceInfo; // Information about a trace point. -class TestInfoImpl; // Opaque implementation of TestInfo -class UnitTestImpl; // Opaque implementation of UnitTest +struct TraceInfo; // Information about a trace point. +class TestInfoImpl; // Opaque implementation of TestInfo +class UnitTestImpl; // Opaque implementation of UnitTest // The text used in failure messages to indicate the start of the // stack trace. @@ -109,6 +124,7 @@ GTEST_API_ extern const char kStackTraceMarker[]; // An IgnoredValue object can be implicitly constructed from ANY value. class IgnoredValue { struct Sink {}; + public: // This constructor template allows any value to be implicitly // converted to IgnoredValue. The object has no data member and @@ -124,13 +140,13 @@ class IgnoredValue { }; // Appends the user-supplied message to the Google-Test-generated message. -GTEST_API_ std::string AppendUserMessage( - const std::string& gtest_msg, const Message& user_msg); +GTEST_API_ std::string AppendUserMessage(const std::string& gtest_msg, + const Message& user_msg); #if GTEST_HAS_EXCEPTIONS -GTEST_DISABLE_MSC_WARNINGS_PUSH_(4275 \ -/* an exported class was derived from a class that was not exported */) +GTEST_DISABLE_MSC_WARNINGS_PUSH_( + 4275 /* an exported class was derived from a class that was not exported */) // This exception is thrown by (and only by) a failed Google Test // assertion when GTEST_FLAG(throw_on_failure) is true (if exceptions @@ -169,14 +185,6 @@ GTEST_API_ std::string CreateUnifiedDiff(const std::vector<std::string>& left, } // namespace edit_distance -// Calculate the diff between 'left' and 'right' and return it in unified diff -// format. -// If not null, stores in 'total_line_count' the total number of lines found -// in left + right. -GTEST_API_ std::string DiffStrings(const std::string& left, - const std::string& right, - size_t* total_line_count); - // Constructs and returns the message for an equality assertion // (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure. // @@ -200,10 +208,8 @@ GTEST_API_ AssertionResult EqFailure(const char* expected_expression, // Constructs a failure message for Boolean assertions such as EXPECT_TRUE. GTEST_API_ std::string GetBoolAssertionFailureMessage( - const AssertionResult& assertion_result, - const char* expression_text, - const char* actual_predicate_value, - const char* expected_predicate_value); + const AssertionResult& assertion_result, const char* expression_text, + const char* actual_predicate_value, const char* expected_predicate_value); // This template class represents an IEEE floating-point number // (either single-precision or double-precision, depending on the @@ -244,11 +250,11 @@ class FloatingPoint { // Constants. // # of bits in a number. - static const size_t kBitCount = 8*sizeof(RawType); + static const size_t kBitCount = 8 * sizeof(RawType); // # of fraction bits in a number. static const size_t kFractionBitCount = - std::numeric_limits<RawType>::digits - 1; + std::numeric_limits<RawType>::digits - 1; // # of exponent bits in a number. static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount; @@ -257,8 +263,8 @@ class FloatingPoint { static const Bits kSignBitMask = static_cast<Bits>(1) << (kBitCount - 1); // The mask for the fraction bits. - static const Bits kFractionBitMask = - ~static_cast<Bits>(0) >> (kExponentBitCount + 1); + static const Bits kFractionBitMask = ~static_cast<Bits>(0) >> + (kExponentBitCount + 1); // The mask for the exponent bits. static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask); @@ -275,7 +281,7 @@ class FloatingPoint { // // See the following article for more details on ULP: // http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ - static const size_t kMaxUlps = 4; + static const uint32_t kMaxUlps = 4; // Constructs a FloatingPoint from a raw floating-point number. // @@ -297,9 +303,7 @@ class FloatingPoint { } // Returns the floating-point number that represent positive infinity. - static RawType Infinity() { - return ReinterpretBits(kExponentBitMask); - } + static RawType Infinity() { return ReinterpretBits(kExponentBitMask); } // Returns the maximum representable finite floating-point number. static RawType Max(); @@ -307,7 +311,7 @@ class FloatingPoint { // Non-static methods // Returns the bits that represents this number. - const Bits &bits() const { return u_.bits_; } + const Bits& bits() const { return u_.bits_; } // Returns the exponent bits of this number. Bits exponent_bits() const { return kExponentBitMask & u_.bits_; } @@ -336,8 +340,8 @@ class FloatingPoint { // a NAN must return false. if (is_nan() || rhs.is_nan()) return false; - return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_) - <= kMaxUlps; + return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_) <= + kMaxUlps; } private: @@ -362,7 +366,7 @@ class FloatingPoint { // // Read http://en.wikipedia.org/wiki/Signed_number_representations // for more details on signed number representations. - static Bits SignAndMagnitudeToBiased(const Bits &sam) { + static Bits SignAndMagnitudeToBiased(const Bits& sam) { if (kSignBitMask & sam) { // sam represents a negative number. return ~sam + 1; @@ -374,8 +378,8 @@ class FloatingPoint { // Given two numbers in the sign-and-magnitude representation, // returns the distance between them as an unsigned number. - static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1, - const Bits &sam2) { + static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits& sam1, + const Bits& sam2) { const Bits biased1 = SignAndMagnitudeToBiased(sam1); const Bits biased2 = SignAndMagnitudeToBiased(sam2); return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1); @@ -387,9 +391,13 @@ class FloatingPoint { // We cannot use std::numeric_limits<T>::max() as it clashes with the max() // macro defined by <windows.h>. template <> -inline float FloatingPoint<float>::Max() { return FLT_MAX; } +inline float FloatingPoint<float>::Max() { + return FLT_MAX; +} template <> -inline double FloatingPoint<double>::Max() { return DBL_MAX; } +inline double FloatingPoint<double>::Max() { + return DBL_MAX; +} // Typedefs the instances of the FloatingPoint template class that we // care to use. @@ -449,7 +457,8 @@ class TestFactoryBase { TestFactoryBase() {} private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestFactoryBase); + TestFactoryBase(const TestFactoryBase&) = delete; + TestFactoryBase& operator=(const TestFactoryBase&) = delete; }; // This class provides implementation of TeastFactoryBase interface. @@ -498,16 +507,17 @@ inline SetUpTearDownSuiteFuncType GetNotDefaultOrNull( template <typename T> // Note that SuiteApiResolver inherits from T because -// SetUpTestSuite()/TearDownTestSuite() could be protected. Ths way +// SetUpTestSuite()/TearDownTestSuite() could be protected. This way // SuiteApiResolver can access them. struct SuiteApiResolver : T { // testing::Test is only forward declared at this point. So we make it a - // dependend class for the compiler to be OK with it. + // dependent class for the compiler to be OK with it. using Test = typename std::conditional<sizeof(T) != 0, ::testing::Test, void>::type; static SetUpTearDownSuiteFuncType GetSetUpCaseOrSuite(const char* filename, int line_num) { +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ SetUpTearDownSuiteFuncType test_case_fp = GetNotDefaultOrNull(&T::SetUpTestCase, &Test::SetUpTestCase); SetUpTearDownSuiteFuncType test_suite_fp = @@ -519,10 +529,16 @@ struct SuiteApiResolver : T { << filename << ":" << line_num; return test_case_fp != nullptr ? test_case_fp : test_suite_fp; +#else + (void)(filename); + (void)(line_num); + return &T::SetUpTestSuite; +#endif } static SetUpTearDownSuiteFuncType GetTearDownCaseOrSuite(const char* filename, int line_num) { +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ SetUpTearDownSuiteFuncType test_case_fp = GetNotDefaultOrNull(&T::TearDownTestCase, &Test::TearDownTestCase); SetUpTearDownSuiteFuncType test_suite_fp = @@ -534,6 +550,11 @@ struct SuiteApiResolver : T { << filename << ":" << line_num; return test_case_fp != nullptr ? test_case_fp : test_suite_fp; +#else + (void)(filename); + (void)(line_num); + return &T::TearDownTestSuite; +#endif } }; @@ -542,11 +563,11 @@ struct SuiteApiResolver : T { // // Arguments: // -// test_suite_name: name of the test suite +// test_suite_name: name of the test suite // name: name of the test -// type_param the name of the test's type parameter, or NULL if +// type_param: the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. -// value_param text representation of the test's value parameter, +// value_param: text representation of the test's value parameter, // or NULL if this is not a type-parameterized test. // code_location: code location where the test is defined // fixture_class_id: ID of the test fixture class @@ -566,8 +587,6 @@ GTEST_API_ TestInfo* MakeAndRegisterTestInfo( // and returns false. None of pstr, *pstr, and prefix can be NULL. GTEST_API_ bool SkipPrefix(const char* prefix, const char** pstr); -#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P - GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ /* class A needs to have dll-interface to be used by clients of class B */) @@ -607,8 +626,9 @@ class GTEST_API_ TypedTestSuitePState { // Verifies that registered_tests match the test names in // defined_test_names_; returns registered_tests if successful, or // aborts the program otherwise. - const char* VerifyRegisteredTestNames( - const char* file, int line, const char* registered_tests); + const char* VerifyRegisteredTestNames(const char* test_suite_name, + const char* file, int line, + const char* registered_tests); private: typedef ::std::map<std::string, CodeLocation> RegisteredTestsMap; @@ -631,7 +651,8 @@ inline const char* SkipComma(const char* str) { if (comma == nullptr) { return nullptr; } - while (IsSpace(*(++comma))) {} + while (IsSpace(*(++comma))) { + } return comma; } @@ -645,7 +666,7 @@ inline std::string GetPrefixUntilComma(const char* str) { // Splits a given string on a given delimiter, populating a given // vector with the fields. void SplitString(const ::std::string& str, char delimiter, - ::std::vector< ::std::string>* dest); + ::std::vector<::std::string>* dest); // The default argument to the template below for the case when the user does // not provide a name generator. @@ -662,7 +683,7 @@ struct NameGeneratorSelector { }; template <typename NameGenerator> -void GenerateNamesRecursively(Types0, std::vector<std::string>*, int) {} +void GenerateNamesRecursively(internal::None, std::vector<std::string>*, int) {} template <typename NameGenerator, typename Types> void GenerateNamesRecursively(Types, std::vector<std::string>* result, int i) { @@ -729,7 +750,7 @@ class TypeParameterizedTest { // The base case for the compile time recursion. template <GTEST_TEMPLATE_ Fixture, class TestSel> -class TypeParameterizedTest<Fixture, TestSel, Types0> { +class TypeParameterizedTest<Fixture, TestSel, internal::None> { public: static bool Register(const char* /*prefix*/, const CodeLocation&, const char* /*case_name*/, const char* /*test_names*/, @@ -740,6 +761,11 @@ class TypeParameterizedTest<Fixture, TestSel, Types0> { } }; +GTEST_API_ void RegisterTypeParameterizedTestSuite(const char* test_suite_name, + CodeLocation code_location); +GTEST_API_ void RegisterTypeParameterizedTestSuiteInstantiation( + const char* case_name); + // TypeParameterizedTestSuite<Fixture, Tests, Types>::Register() // registers *all combinations* of 'Tests' and 'Types' with Google // Test. The return value is insignificant - we just need to return @@ -752,13 +778,14 @@ class TypeParameterizedTestSuite { const char* test_names, const std::vector<std::string>& type_names = GenerateNames<DefaultNameGenerator, Types>()) { - std::string test_name = StripTrailingSpaces( - GetPrefixUntilComma(test_names)); + RegisterTypeParameterizedTestSuiteInstantiation(case_name); + std::string test_name = + StripTrailingSpaces(GetPrefixUntilComma(test_names)); if (!state->TestExists(test_name)) { fprintf(stderr, "Failed to get code location for test %s.%s at %s.", case_name, test_name.c_str(), - FormatFileLocation(code_location.file.c_str(), - code_location.line).c_str()); + FormatFileLocation(code_location.file.c_str(), code_location.line) + .c_str()); fflush(stderr); posix::Abort(); } @@ -781,7 +808,7 @@ class TypeParameterizedTestSuite { // The base case for the compile time recursion. template <GTEST_TEMPLATE_ Fixture, typename Types> -class TypeParameterizedTestSuite<Fixture, Templates0, Types> { +class TypeParameterizedTestSuite<Fixture, internal::None, Types> { public: static bool Register(const char* /*prefix*/, const CodeLocation&, const TypedTestSuitePState* /*state*/, @@ -792,8 +819,6 @@ class TypeParameterizedTestSuite<Fixture, Templates0, Types> { } }; -#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P - // Returns the current OS stack trace as an std::string. // // The maximum number of stack frames to be included is specified by @@ -804,8 +829,8 @@ class TypeParameterizedTestSuite<Fixture, Templates0, Types> { // For example, if Foo() calls Bar(), which in turn calls // GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in // the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. -GTEST_API_ std::string GetCurrentOsStackTraceExceptTop( - UnitTest* unit_test, int skip_count); +GTEST_API_ std::string GetCurrentOsStackTraceExceptTop(UnitTest* unit_test, + int skip_count); // Helpers for suppressing warnings on unreachable code or constant // condition. @@ -825,6 +850,16 @@ struct GTEST_API_ ConstCharPtr { const char* value; }; +// Helper for declaring std::string within 'if' statement +// in pre C++17 build environment. +struct TrueWithString { + TrueWithString() = default; + explicit TrueWithString(const char* str) : value(str) {} + explicit TrueWithString(const std::string& str) : value(str) {} + explicit operator bool() const { return true; } + std::string value; +}; + // A simple Linear Congruential Generator for generating random // numbers with a uniform distribution. Unlike rand() and srand(), it // doesn't use global state (and therefore can't interfere with user @@ -832,31 +867,54 @@ struct GTEST_API_ ConstCharPtr { // but it's good enough for our purposes. class GTEST_API_ Random { public: - static const UInt32 kMaxRange = 1u << 31; + static const uint32_t kMaxRange = 1u << 31; - explicit Random(UInt32 seed) : state_(seed) {} + explicit Random(uint32_t seed) : state_(seed) {} - void Reseed(UInt32 seed) { state_ = seed; } + void Reseed(uint32_t seed) { state_ = seed; } // Generates a random number from [0, range). Crashes if 'range' is // 0 or greater than kMaxRange. - UInt32 Generate(UInt32 range); + uint32_t Generate(uint32_t range); private: - UInt32 state_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(Random); + uint32_t state_; + Random(const Random&) = delete; + Random& operator=(const Random&) = delete; }; // Turns const U&, U&, const U, and U all into U. #define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \ typename std::remove_const<typename std::remove_reference<T>::type>::type -// IsAProtocolMessage<T>::value is a compile-time bool constant that's -// true if and only if T is type proto2::Message or a subclass of it. +// HasDebugStringAndShortDebugString<T>::value is a compile-time bool constant +// that's true if and only if T has methods DebugString() and ShortDebugString() +// that return std::string. +template <typename T> +class HasDebugStringAndShortDebugString { + private: + template <typename C> + static auto CheckDebugString(C*) -> typename std::is_same< + std::string, decltype(std::declval<const C>().DebugString())>::type; + template <typename> + static std::false_type CheckDebugString(...); + + template <typename C> + static auto CheckShortDebugString(C*) -> typename std::is_same< + std::string, decltype(std::declval<const C>().ShortDebugString())>::type; + template <typename> + static std::false_type CheckShortDebugString(...); + + using HasDebugStringType = decltype(CheckDebugString<T>(nullptr)); + using HasShortDebugStringType = decltype(CheckShortDebugString<T>(nullptr)); + + public: + static constexpr bool value = + HasDebugStringType::value && HasShortDebugStringType::value; +}; + template <typename T> -struct IsAProtocolMessage - : public bool_constant< - std::is_convertible<const T*, const ::proto2::Message*>::value> {}; +constexpr bool HasDebugStringAndShortDebugString<T>::value; // When the compiler sees expression IsContainerTest<C>(0), if C is an // STL-style container class, the first overload of IsContainerTest @@ -895,7 +953,9 @@ IsContainer IsContainerTest(int /* dummy */) { typedef char IsNotContainer; template <class C> -IsNotContainer IsContainerTest(long /* dummy */) { return '\0'; } +IsNotContainer IsContainerTest(long /* dummy */) { + return '\0'; +} // Trait to detect whether a type T is a hash table. // The heuristic used is that the type contains an inner type `hasher` and does @@ -958,11 +1018,13 @@ bool ArrayEq(const T* lhs, size_t size, const U* rhs); // This generic version is used when k is 0. template <typename T, typename U> -inline bool ArrayEq(const T& lhs, const U& rhs) { return lhs == rhs; } +inline bool ArrayEq(const T& lhs, const U& rhs) { + return lhs == rhs; +} // This overload is used when k >= 1. template <typename T, typename U, size_t N> -inline bool ArrayEq(const T(&lhs)[N], const U(&rhs)[N]) { +inline bool ArrayEq(const T (&lhs)[N], const U (&rhs)[N]) { return internal::ArrayEq(lhs, N, rhs); } @@ -972,8 +1034,7 @@ inline bool ArrayEq(const T(&lhs)[N], const U(&rhs)[N]) { template <typename T, typename U> bool ArrayEq(const T* lhs, size_t size, const U* rhs) { for (size_t i = 0; i != size; i++) { - if (!internal::ArrayEq(lhs[i], rhs[i])) - return false; + if (!internal::ArrayEq(lhs[i], rhs[i])) return false; } return true; } @@ -983,8 +1044,7 @@ bool ArrayEq(const T* lhs, size_t size, const U* rhs) { template <typename Iter, typename Element> Iter ArrayAwareFind(Iter begin, Iter end, const Element& elem) { for (Iter it = begin; it != end; ++it) { - if (internal::ArrayEq(*it, elem)) - return it; + if (internal::ArrayEq(*it, elem)) return it; } return end; } @@ -998,11 +1058,13 @@ void CopyArray(const T* from, size_t size, U* to); // This generic version is used when k is 0. template <typename T, typename U> -inline void CopyArray(const T& from, U* to) { *to = from; } +inline void CopyArray(const T& from, U* to) { + *to = from; +} // This overload is used when k >= 1. template <typename T, typename U, size_t N> -inline void CopyArray(const T(&from)[N], U(*to)[N]) { +inline void CopyArray(const T (&from)[N], U (*to)[N]) { internal::CopyArray(from, N, *to); } @@ -1055,8 +1117,7 @@ class NativeArray { } ~NativeArray() { - if (clone_ != &NativeArray::InitRef) - delete[] array_; + if (clone_ != &NativeArray::InitRef) delete[] array_; } // STL-style container methods. @@ -1064,8 +1125,7 @@ class NativeArray { const_iterator begin() const { return array_; } const_iterator end() const { return array_ + size_; } bool operator==(const NativeArray& rhs) const { - return size() == rhs.size() && - ArrayEq(begin(), size(), rhs.begin()); + return size() == rhs.size() && ArrayEq(begin(), size(), rhs.begin()); } private: @@ -1092,8 +1152,6 @@ class NativeArray { const Element* array_; size_t size_; void (NativeArray::*clone_)(const Element*, size_t); - - GTEST_DISALLOW_ASSIGN_(NativeArray); }; // Backport of std::index_sequence. @@ -1117,32 +1175,44 @@ struct DoubleSequence<false, IndexSequence<I...>, sizeofT> { // Backport of std::make_index_sequence. // It uses O(ln(N)) instantiation depth. template <size_t N> -struct MakeIndexSequence - : DoubleSequence<N % 2 == 1, typename MakeIndexSequence<N / 2>::type, +struct MakeIndexSequenceImpl + : DoubleSequence<N % 2 == 1, typename MakeIndexSequenceImpl<N / 2>::type, N / 2>::type {}; template <> -struct MakeIndexSequence<0> : IndexSequence<> {}; +struct MakeIndexSequenceImpl<0> : IndexSequence<> {}; -// FIXME: This implementation of ElemFromList is O(1) in instantiation depth, -// but it is O(N^2) in total instantiations. Not sure if this is the best -// tradeoff, as it will make it somewhat slow to compile. -template <typename T, size_t, size_t> -struct ElemFromListImpl {}; +template <size_t N> +using MakeIndexSequence = typename MakeIndexSequenceImpl<N>::type; -template <typename T, size_t I> -struct ElemFromListImpl<T, I, I> { - using type = T; +template <typename... T> +using IndexSequenceFor = typename MakeIndexSequence<sizeof...(T)>::type; + +template <size_t> +struct Ignore { + Ignore(...); // NOLINT +}; + +template <typename> +struct ElemFromListImpl; +template <size_t... I> +struct ElemFromListImpl<IndexSequence<I...>> { + // We make Ignore a template to solve a problem with MSVC. + // A non-template Ignore would work fine with `decltype(Ignore(I))...`, but + // MSVC doesn't understand how to deal with that pack expansion. + // Use `0 * I` to have a single instantiation of Ignore. + template <typename R> + static R Apply(Ignore<0 * I>..., R (*)(), ...); }; -// Get the Nth element from T... -// It uses O(1) instantiation depth. -template <size_t N, typename I, typename... T> -struct ElemFromList; +template <size_t N, typename... T> +struct ElemFromList { + using type = + decltype(ElemFromListImpl<typename MakeIndexSequence<N>::type>::Apply( + static_cast<T (*)()>(nullptr)...)); +}; -template <size_t N, size_t... I, typename... T> -struct ElemFromList<N, IndexSequence<I...>, T...> - : ElemFromListImpl<T, N, I>... {}; +struct FlatTupleConstructTag {}; template <typename... T> class FlatTuple; @@ -1152,11 +1222,11 @@ struct FlatTupleElemBase; template <typename... T, size_t I> struct FlatTupleElemBase<FlatTuple<T...>, I> { - using value_type = - typename ElemFromList<I, typename MakeIndexSequence<sizeof...(T)>::type, - T...>::type; + using value_type = typename ElemFromList<I, T...>::type; FlatTupleElemBase() = default; - explicit FlatTupleElemBase(value_type t) : value(std::move(t)) {} + template <typename Arg> + explicit FlatTupleElemBase(FlatTupleConstructTag, Arg&& t) + : value(std::forward<Arg>(t)) {} value_type value; }; @@ -1168,13 +1238,35 @@ struct FlatTupleBase<FlatTuple<T...>, IndexSequence<Idx...>> : FlatTupleElemBase<FlatTuple<T...>, Idx>... { using Indices = IndexSequence<Idx...>; FlatTupleBase() = default; - explicit FlatTupleBase(T... t) - : FlatTupleElemBase<FlatTuple<T...>, Idx>(std::move(t))... {} + template <typename... Args> + explicit FlatTupleBase(FlatTupleConstructTag, Args&&... args) + : FlatTupleElemBase<FlatTuple<T...>, Idx>(FlatTupleConstructTag{}, + std::forward<Args>(args))... {} + + template <size_t I> + const typename ElemFromList<I, T...>::type& Get() const { + return FlatTupleElemBase<FlatTuple<T...>, I>::value; + } + + template <size_t I> + typename ElemFromList<I, T...>::type& Get() { + return FlatTupleElemBase<FlatTuple<T...>, I>::value; + } + + template <typename F> + auto Apply(F&& f) -> decltype(std::forward<F>(f)(this->Get<Idx>()...)) { + return std::forward<F>(f)(Get<Idx>()...); + } + + template <typename F> + auto Apply(F&& f) const -> decltype(std::forward<F>(f)(this->Get<Idx>()...)) { + return std::forward<F>(f)(Get<Idx>()...); + } }; // Analog to std::tuple but with different tradeoffs. // This class minimizes the template instantiation depth, thus allowing more -// elements that std::tuple would. std::tuple has been seen to require an +// elements than std::tuple would. std::tuple has been seen to require an // instantiation depth of more than 10x the number of elements in some // implementations. // FlatTuple and ElemFromList are not recursive and have a fixed depth @@ -1185,21 +1277,17 @@ template <typename... T> class FlatTuple : private FlatTupleBase<FlatTuple<T...>, typename MakeIndexSequence<sizeof...(T)>::type> { - using Indices = typename FlatTuple::FlatTupleBase::Indices; + using Indices = typename FlatTupleBase< + FlatTuple<T...>, typename MakeIndexSequence<sizeof...(T)>::type>::Indices; public: FlatTuple() = default; - explicit FlatTuple(T... t) : FlatTuple::FlatTupleBase(std::move(t)...) {} - - template <size_t I> - const typename ElemFromList<I, Indices, T...>::type& Get() const { - return static_cast<const FlatTupleElemBase<FlatTuple, I>*>(this)->value; - } + template <typename... Args> + explicit FlatTuple(FlatTupleConstructTag tag, Args&&... args) + : FlatTuple::FlatTupleBase(tag, std::forward<Args>(args)...) {} - template <size_t I> - typename ElemFromList<I, Indices, T...>::type& Get() { - return static_cast<FlatTupleElemBase<FlatTuple, I>*>(this)->value; - } + using FlatTuple::FlatTupleBase::Apply; + using FlatTuple::FlatTupleBase::Get; }; // Utility functions to be called with static_assert to induce deprecation @@ -1232,9 +1320,25 @@ constexpr bool InstantiateTypedTestCase_P_IsDeprecated() { return true; } } // namespace internal } // namespace testing -#define GTEST_MESSAGE_AT_(file, line, message, result_type) \ - ::testing::internal::AssertHelper(result_type, file, line, message) \ - = ::testing::Message() +namespace std { +// Some standard library implementations use `struct tuple_size` and some use +// `class tuple_size`. Clang warns about the mismatch. +// https://reviews.llvm.org/D55466 +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wmismatched-tags" +#endif +template <typename... Ts> +struct tuple_size<testing::internal::FlatTuple<Ts...>> + : std::integral_constant<size_t, sizeof...(Ts)> {}; +#ifdef __clang__ +#pragma clang diagnostic pop +#endif +} // namespace std + +#define GTEST_MESSAGE_AT_(file, line, message, result_type) \ + ::testing::internal::AssertHelper(result_type, file, line, message) = \ + ::testing::Message() #define GTEST_MESSAGE_(message, result_type) \ GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type) @@ -1254,127 +1358,213 @@ constexpr bool InstantiateTypedTestCase_P_IsDeprecated() { return true; } // Suppress MSVC warning 4072 (unreachable code) for the code following // statement if it returns or throws (or doesn't return or throw in some // situations). +// NOTE: The "else" is important to keep this expansion to prevent a top-level +// "else" from attaching to our "if". #define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \ - if (::testing::internal::AlwaysTrue()) { statement; } - -#define GTEST_TEST_THROW_(statement, expected_exception, fail) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::ConstCharPtr gtest_msg = "") { \ - bool gtest_caught_expected = false; \ - try { \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - } \ - catch (expected_exception const&) { \ - gtest_caught_expected = true; \ - } \ - catch (...) { \ - gtest_msg.value = \ - "Expected: " #statement " throws an exception of type " \ - #expected_exception ".\n Actual: it throws a different type."; \ - goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ - } \ - if (!gtest_caught_expected) { \ - gtest_msg.value = \ - "Expected: " #statement " throws an exception of type " \ - #expected_exception ".\n Actual: it throws nothing."; \ - goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ - } \ - } else \ - GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \ - fail(gtest_msg.value) - -#define GTEST_TEST_NO_THROW_(statement, fail) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::AlwaysTrue()) { \ - try { \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - } \ - catch (...) { \ - goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ - } \ - } else \ - GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \ - fail("Expected: " #statement " doesn't throw an exception.\n" \ - " Actual: it throws.") - -#define GTEST_TEST_ANY_THROW_(statement, fail) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::AlwaysTrue()) { \ - bool gtest_caught_any = false; \ - try { \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - } \ - catch (...) { \ - gtest_caught_any = true; \ - } \ - if (!gtest_caught_any) { \ - goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \ - } \ - } else \ - GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \ - fail("Expected: " #statement " throws an exception.\n" \ - " Actual: it doesn't.") + if (::testing::internal::AlwaysTrue()) { \ + statement; \ + } else /* NOLINT */ \ + static_assert(true, "") // User must have a semicolon after expansion. + +#if GTEST_HAS_EXCEPTIONS + +namespace testing { +namespace internal { + +class NeverThrown { + public: + const char* what() const noexcept { + return "this exception should never be thrown"; + } +}; + +} // namespace internal +} // namespace testing + +#if GTEST_HAS_RTTI + +#define GTEST_EXCEPTION_TYPE_(e) ::testing::internal::GetTypeName(typeid(e)) + +#else // GTEST_HAS_RTTI + +#define GTEST_EXCEPTION_TYPE_(e) \ + std::string { "an std::exception-derived error" } +#endif // GTEST_HAS_RTTI + +#define GTEST_TEST_THROW_CATCH_STD_EXCEPTION_(statement, expected_exception) \ + catch (typename std::conditional< \ + std::is_same<typename std::remove_cv<typename std::remove_reference< \ + expected_exception>::type>::type, \ + std::exception>::value, \ + const ::testing::internal::NeverThrown&, const std::exception&>::type \ + e) { \ + gtest_msg.value = "Expected: " #statement \ + " throws an exception of type " #expected_exception \ + ".\n Actual: it throws "; \ + gtest_msg.value += GTEST_EXCEPTION_TYPE_(e); \ + gtest_msg.value += " with description \""; \ + gtest_msg.value += e.what(); \ + gtest_msg.value += "\"."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ + } + +#else // GTEST_HAS_EXCEPTIONS + +#define GTEST_TEST_THROW_CATCH_STD_EXCEPTION_(statement, expected_exception) + +#endif // GTEST_HAS_EXCEPTIONS + +#define GTEST_TEST_THROW_(statement, expected_exception, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::TrueWithString gtest_msg{}) { \ + bool gtest_caught_expected = false; \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } catch (expected_exception const&) { \ + gtest_caught_expected = true; \ + } \ + GTEST_TEST_THROW_CATCH_STD_EXCEPTION_(statement, expected_exception) \ + catch (...) { \ + gtest_msg.value = "Expected: " #statement \ + " throws an exception of type " #expected_exception \ + ".\n Actual: it throws a different type."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ + } \ + if (!gtest_caught_expected) { \ + gtest_msg.value = "Expected: " #statement \ + " throws an exception of type " #expected_exception \ + ".\n Actual: it throws nothing."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \ + } \ + } else /*NOLINT*/ \ + GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__) \ + : fail(gtest_msg.value.c_str()) + +#if GTEST_HAS_EXCEPTIONS + +#define GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_() \ + catch (std::exception const& e) { \ + gtest_msg.value = "it throws "; \ + gtest_msg.value += GTEST_EXCEPTION_TYPE_(e); \ + gtest_msg.value += " with description \""; \ + gtest_msg.value += e.what(); \ + gtest_msg.value += "\"."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ + } + +#else // GTEST_HAS_EXCEPTIONS + +#define GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_() + +#endif // GTEST_HAS_EXCEPTIONS + +#define GTEST_TEST_NO_THROW_(statement, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::TrueWithString gtest_msg{}) { \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } \ + GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_() \ + catch (...) { \ + gtest_msg.value = "it throws."; \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__) \ + : fail(("Expected: " #statement " doesn't throw an exception.\n" \ + " Actual: " + \ + gtest_msg.value) \ + .c_str()) + +#define GTEST_TEST_ANY_THROW_(statement, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ + bool gtest_caught_any = false; \ + try { \ + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + } catch (...) { \ + gtest_caught_any = true; \ + } \ + if (!gtest_caught_any) { \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__) \ + : fail("Expected: " #statement \ + " throws an exception.\n" \ + " Actual: it doesn't.") // Implements Boolean test assertions such as EXPECT_TRUE. expression can be // either a boolean expression or an AssertionResult. text is a textual -// represenation of expression as it was passed into the EXPECT_TRUE. +// representation of expression as it was passed into the EXPECT_TRUE. #define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (const ::testing::AssertionResult gtest_ar_ = \ - ::testing::AssertionResult(expression)) \ - ; \ - else \ - fail(::testing::internal::GetBoolAssertionFailureMessage(\ - gtest_ar_, text, #actual, #expected).c_str()) - -#define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::AlwaysTrue()) { \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (const ::testing::AssertionResult gtest_ar_ = \ + ::testing::AssertionResult(expression)) \ + ; \ + else \ + fail(::testing::internal::GetBoolAssertionFailureMessage( \ + gtest_ar_, text, #actual, #expected) \ + .c_str()) + +#define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::AlwaysTrue()) { \ ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \ - GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ - if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \ - goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \ - } \ - } else \ - GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \ - fail("Expected: " #statement " doesn't generate new fatal " \ - "failures in the current thread.\n" \ - " Actual: it does.") + GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \ + if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \ + goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \ + } \ + } else \ + GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__) \ + : fail("Expected: " #statement \ + " doesn't generate new fatal " \ + "failures in the current thread.\n" \ + " Actual: it does.") // Expands to the name of the class that implements the given test. #define GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ test_suite_name##_##test_name##_Test // Helper macro for defining tests. -#define GTEST_TEST_(test_suite_name, test_name, parent_class, parent_id) \ - static_assert(sizeof(GTEST_STRINGIFY_(test_suite_name)) > 1, \ - "test_suite_name must not be empty"); \ - static_assert(sizeof(GTEST_STRINGIFY_(test_name)) > 1, \ - "test_name must not be empty"); \ - class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ - : public parent_class { \ - public: \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \ - \ - private: \ - virtual void TestBody(); \ - static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)); \ - }; \ - \ - ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)::test_info_ = \ - ::testing::internal::MakeAndRegisterTestInfo( \ - #test_suite_name, #test_name, nullptr, nullptr, \ - ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \ - ::testing::internal::SuiteApiResolver< \ - parent_class>::GetSetUpCaseOrSuite(__FILE__, __LINE__), \ - ::testing::internal::SuiteApiResolver< \ - parent_class>::GetTearDownCaseOrSuite(__FILE__, __LINE__), \ - new ::testing::internal::TestFactoryImpl<GTEST_TEST_CLASS_NAME_( \ - test_suite_name, test_name)>); \ +#define GTEST_TEST_(test_suite_name, test_name, parent_class, parent_id) \ + static_assert(sizeof(GTEST_STRINGIFY_(test_suite_name)) > 1, \ + "test_suite_name must not be empty"); \ + static_assert(sizeof(GTEST_STRINGIFY_(test_name)) > 1, \ + "test_name must not be empty"); \ + class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + : public parent_class { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() = default; \ + ~GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() override = default; \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + (const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &) = delete; \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) & operator=( \ + const GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name) &) = delete; /* NOLINT */ \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + (GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &&) noexcept = delete; \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) & operator=( \ + GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name) &&) noexcept = delete; /* NOLINT */ \ + \ + private: \ + void TestBody() override; \ + static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_; \ + }; \ + \ + ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::test_info_ = \ + ::testing::internal::MakeAndRegisterTestInfo( \ + #test_suite_name, #test_name, nullptr, nullptr, \ + ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \ + ::testing::internal::SuiteApiResolver< \ + parent_class>::GetSetUpCaseOrSuite(__FILE__, __LINE__), \ + ::testing::internal::SuiteApiResolver< \ + parent_class>::GetTearDownCaseOrSuite(__FILE__, __LINE__), \ + new ::testing::internal::TestFactoryImpl<GTEST_TEST_CLASS_NAME_( \ + test_suite_name, test_name)>); \ void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody() -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_ diff --git a/test/gtest/include/gtest/internal/gtest-param-util.h b/test/gtest_vendor/include/gtest/internal/gtest-param-util.h similarity index 83% rename from test/gtest/include/gtest/internal/gtest-param-util.h rename to test/gtest_vendor/include/gtest/internal/gtest-param-util.h index 97533993c..e7af2f904 100644 --- a/test/gtest/include/gtest/internal/gtest-param-util.h +++ b/test/gtest_vendor/include/gtest/internal/gtest-param-util.h @@ -27,13 +27,14 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - // Type and function utilities for implementing parameterized tests. -// GOOGLETEST_CM0001 DO NOT DELETE +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ +#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ #include <ctype.h> @@ -42,21 +43,22 @@ #include <memory> #include <set> #include <tuple> +#include <type_traits> #include <utility> #include <vector> +#include "gtest/gtest-printers.h" +#include "gtest/gtest-test-part.h" #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-port.h" -#include "gtest/gtest-printers.h" namespace testing { // Input to a parameterized test name generator, describing a test parameter. // Consists of the parameter value and the integer parameter index. template <class ParamType> struct TestParamInfo { - TestParamInfo(const ParamType& a_param, size_t an_index) : - param(a_param), - index(an_index) {} + TestParamInfo(const ParamType& a_param, size_t an_index) + : param(a_param), index(an_index) {} ParamType param; size_t index; }; @@ -82,8 +84,10 @@ namespace internal { GTEST_API_ void ReportInvalidTestSuiteType(const char* test_suite_name, CodeLocation code_location); -template <typename> class ParamGeneratorInterface; -template <typename> class ParamGenerator; +template <typename> +class ParamGeneratorInterface; +template <typename> +class ParamGenerator; // Interface for iterating over elements provided by an implementation // of ParamGeneratorInterface<T>. @@ -127,8 +131,7 @@ class ParamIterator { // ParamIterator assumes ownership of the impl_ pointer. ParamIterator(const ParamIterator& other) : impl_(other.impl_->Clone()) {} ParamIterator& operator=(const ParamIterator& other) { - if (this != &other) - impl_.reset(other.impl_->Clone()); + if (this != &other) impl_.reset(other.impl_->Clone()); return *this; } @@ -155,7 +158,7 @@ class ParamIterator { private: friend class ParamGenerator<T>; explicit ParamIterator(ParamIteratorInterface<T>* impl) : impl_(impl) {} - std::unique_ptr<ParamIteratorInterface<T> > impl_; + std::unique_ptr<ParamIteratorInterface<T>> impl_; }; // ParamGeneratorInterface<T> is the binary interface to access generators @@ -177,7 +180,7 @@ class ParamGeneratorInterface { // This class implements copy initialization semantics and the contained // ParamGeneratorInterface<T> instance is shared among all copies // of the original object. This is possible because that instance is immutable. -template<typename T> +template <typename T> class ParamGenerator { public: typedef ParamIterator<T> iterator; @@ -194,7 +197,7 @@ class ParamGenerator { iterator end() const { return iterator(impl_->End()); } private: - std::shared_ptr<const ParamGeneratorInterface<T> > impl_; + std::shared_ptr<const ParamGeneratorInterface<T>> impl_; }; // Generates values from a range of two comparable values. Can be used to @@ -205,8 +208,10 @@ template <typename T, typename IncrementT> class RangeGenerator : public ParamGeneratorInterface<T> { public: RangeGenerator(T begin, T end, IncrementT step) - : begin_(begin), end_(end), - step_(step), end_index_(CalculateEndIndex(begin, end, step)) {} + : begin_(begin), + end_(end), + step_(step), + end_index_(CalculateEndIndex(begin, end, step)) {} ~RangeGenerator() override {} ParamIteratorInterface<T>* Begin() const override { @@ -249,7 +254,9 @@ class RangeGenerator : public ParamGeneratorInterface<T> { private: Iterator(const Iterator& other) : ParamIteratorInterface<T>(), - base_(other.base_), value_(other.value_), index_(other.index_), + base_(other.base_), + value_(other.value_), + index_(other.index_), step_(other.step_) {} // No implementation - assignment is unsupported. @@ -261,12 +268,10 @@ class RangeGenerator : public ParamGeneratorInterface<T> { const IncrementT step_; }; // class RangeGenerator::Iterator - static int CalculateEndIndex(const T& begin, - const T& end, + static int CalculateEndIndex(const T& begin, const T& end, const IncrementT& step) { int end_index = 0; - for (T i = begin; i < end; i = static_cast<T>(i + step)) - end_index++; + for (T i = begin; i < end; i = static_cast<T>(i + step)) end_index++; return end_index; } @@ -281,7 +286,6 @@ class RangeGenerator : public ParamGeneratorInterface<T> { const int end_index_; }; // class RangeGenerator - // Generates values from a pair of STL-style iterators. Used in the // ValuesIn() function. The elements are copied from the source range // since the source can be located on the stack, and the generator @@ -339,13 +343,13 @@ class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface<T> { << "The program attempted to compare iterators " << "from different generators." << std::endl; return iterator_ == - CheckedDowncastToActualType<const Iterator>(&other)->iterator_; + CheckedDowncastToActualType<const Iterator>(&other)->iterator_; } private: Iterator(const Iterator& other) - // The explicit constructor call suppresses a false warning - // emitted by gcc when supplied with the -Wextra option. + // The explicit constructor call suppresses a false warning + // emitted by gcc when supplied with the -Wextra option. : ParamIteratorInterface<T>(), base_(other.base_), iterator_(other.iterator_) {} @@ -392,8 +396,8 @@ template <class TestClass> class ParameterizedTestFactory : public TestFactoryBase { public: typedef typename TestClass::ParamType ParamType; - explicit ParameterizedTestFactory(ParamType parameter) : - parameter_(parameter) {} + explicit ParameterizedTestFactory(ParamType parameter) + : parameter_(parameter) {} Test* CreateTest() override { TestClass::SetParam(¶meter_); return new TestClass(); @@ -402,7 +406,8 @@ class ParameterizedTestFactory : public TestFactoryBase { private: const ParamType parameter_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestFactory); + ParameterizedTestFactory(const ParameterizedTestFactory&) = delete; + ParameterizedTestFactory& operator=(const ParameterizedTestFactory&) = delete; }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. @@ -438,7 +443,8 @@ class TestMetaFactory } private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestMetaFactory); + TestMetaFactory(const TestMetaFactory&) = delete; + TestMetaFactory& operator=(const TestMetaFactory&) = delete; }; // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. @@ -457,7 +463,7 @@ class ParameterizedTestSuiteInfoBase { // Base part of test suite name for display purposes. virtual const std::string& GetTestSuiteName() const = 0; - // Test case id to verify identity. + // Test suite id to verify identity. virtual TypeId GetTestSuiteTypeId() const = 0; // UnitTest class invokes this method to register tests in this // test suite right before running them in RUN_ALL_TESTS macro. @@ -469,9 +475,23 @@ class ParameterizedTestSuiteInfoBase { ParameterizedTestSuiteInfoBase() {} private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestSuiteInfoBase); + ParameterizedTestSuiteInfoBase(const ParameterizedTestSuiteInfoBase&) = + delete; + ParameterizedTestSuiteInfoBase& operator=( + const ParameterizedTestSuiteInfoBase&) = delete; +}; + +// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. +// +// Report a the name of a test_suit as safe to ignore +// as the side effect of construction of this type. +struct GTEST_API_ MarkAsIgnored { + explicit MarkAsIgnored(const char* test_suite); }; +GTEST_API_ void InsertSyntheticTestCase(const std::string& name, + CodeLocation location, bool has_test_p); + // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. // // ParameterizedTestSuiteInfo accumulates tests obtained from TEST_P @@ -494,11 +514,11 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { CodeLocation code_location) : test_suite_name_(name), code_location_(code_location) {} - // Test case base name for display purposes. + // Test suite base name for display purposes. const std::string& GetTestSuiteName() const override { return test_suite_name_; } - // Test case id to verify identity. + // Test suite id to verify identity. TypeId GetTestSuiteTypeId() const override { return GetTypeId<TestSuite>(); } // TEST_P macro uses AddTestPattern() to record information // about a single test in a LocalTestInfo structure. @@ -507,9 +527,10 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { // parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is // test suite base name and DoBar is test base name. void AddTestPattern(const char* test_suite_name, const char* test_base_name, - TestMetaFactoryBase<ParamType>* meta_factory) { - tests_.push_back(std::shared_ptr<TestInfo>( - new TestInfo(test_suite_name, test_base_name, meta_factory))); + TestMetaFactoryBase<ParamType>* meta_factory, + CodeLocation code_location) { + tests_.push_back(std::shared_ptr<TestInfo>(new TestInfo( + test_suite_name, test_base_name, meta_factory, code_location))); } // INSTANTIATE_TEST_SUITE_P macro uses AddGenerator() to record information // about a generator. @@ -522,17 +543,19 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { return 0; // Return value used only to run this method in namespace scope. } // UnitTest class invokes this method to register tests in this test suite - // test suites right before running tests in RUN_ALL_TESTS macro. + // right before running tests in RUN_ALL_TESTS macro. // This method should not be called more than once on any single // instance of a ParameterizedTestSuiteInfoBase derived class. // UnitTest has a guard to prevent from calling this method more than once. void RegisterTests() override { + bool generated_instantiations = false; + for (typename TestInfoContainer::iterator test_it = tests_.begin(); test_it != tests_.end(); ++test_it) { std::shared_ptr<TestInfo> test_info = *test_it; for (typename InstantiationContainer::iterator gen_it = - instantiations_.begin(); gen_it != instantiations_.end(); - ++gen_it) { + instantiations_.begin(); + gen_it != instantiations_.end(); ++gen_it) { const std::string& instantiation_name = gen_it->name; ParamGenerator<ParamType> generator((*gen_it->generator)()); ParamNameGeneratorFunc* name_func = gen_it->name_func; @@ -540,7 +563,7 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { int line = gen_it->line; std::string test_suite_name; - if ( !instantiation_name.empty() ) + if (!instantiation_name.empty()) test_suite_name = instantiation_name + "/"; test_suite_name += test_info->test_suite_base_name; @@ -549,19 +572,20 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { for (typename ParamGenerator<ParamType>::iterator param_it = generator.begin(); param_it != generator.end(); ++param_it, ++i) { + generated_instantiations = true; + Message test_name_stream; - std::string param_name = name_func( - TestParamInfo<ParamType>(*param_it, i)); + std::string param_name = + name_func(TestParamInfo<ParamType>(*param_it, i)); GTEST_CHECK_(IsValidParamName(param_name)) << "Parameterized test name '" << param_name - << "' is invalid, in " << file - << " line " << line << std::endl; + << "' is invalid, in " << file << " line " << line << std::endl; GTEST_CHECK_(test_param_names.count(param_name) == 0) - << "Duplicate parameterized test name '" << param_name - << "', in " << file << " line " << line << std::endl; + << "Duplicate parameterized test name '" << param_name << "', in " + << file << " line " << line << std::endl; test_param_names.insert(param_name); @@ -572,63 +596,69 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { MakeAndRegisterTestInfo( test_suite_name.c_str(), test_name_stream.GetString().c_str(), nullptr, // No type parameter. - PrintToString(*param_it).c_str(), code_location_, + PrintToString(*param_it).c_str(), test_info->code_location, GetTestSuiteTypeId(), SuiteApiResolver<TestSuite>::GetSetUpCaseOrSuite(file, line), SuiteApiResolver<TestSuite>::GetTearDownCaseOrSuite(file, line), test_info->test_meta_factory->CreateTestFactory(*param_it)); } // for param_it - } // for gen_it - } // for test_it - } // RegisterTests + } // for gen_it + } // for test_it + + if (!generated_instantiations) { + // There are no generaotrs, or they all generate nothing ... + InsertSyntheticTestCase(GetTestSuiteName(), code_location_, + !tests_.empty()); + } + } // RegisterTests private: // LocalTestInfo structure keeps information about a single test registered // with TEST_P macro. struct TestInfo { TestInfo(const char* a_test_suite_base_name, const char* a_test_base_name, - TestMetaFactoryBase<ParamType>* a_test_meta_factory) + TestMetaFactoryBase<ParamType>* a_test_meta_factory, + CodeLocation a_code_location) : test_suite_base_name(a_test_suite_base_name), test_base_name(a_test_base_name), - test_meta_factory(a_test_meta_factory) {} + test_meta_factory(a_test_meta_factory), + code_location(a_code_location) {} const std::string test_suite_base_name; const std::string test_base_name; - const std::unique_ptr<TestMetaFactoryBase<ParamType> > test_meta_factory; + const std::unique_ptr<TestMetaFactoryBase<ParamType>> test_meta_factory; + const CodeLocation code_location; }; - using TestInfoContainer = ::std::vector<std::shared_ptr<TestInfo> >; + using TestInfoContainer = ::std::vector<std::shared_ptr<TestInfo>>; // Records data received from INSTANTIATE_TEST_SUITE_P macros: // <Instantiation name, Sequence generator creation function, // Name generator function, Source file, Source line> struct InstantiationInfo { - InstantiationInfo(const std::string &name_in, - GeneratorCreationFunc* generator_in, - ParamNameGeneratorFunc* name_func_in, - const char* file_in, - int line_in) - : name(name_in), - generator(generator_in), - name_func(name_func_in), - file(file_in), - line(line_in) {} - - std::string name; - GeneratorCreationFunc* generator; - ParamNameGeneratorFunc* name_func; - const char* file; - int line; + InstantiationInfo(const std::string& name_in, + GeneratorCreationFunc* generator_in, + ParamNameGeneratorFunc* name_func_in, const char* file_in, + int line_in) + : name(name_in), + generator(generator_in), + name_func(name_func_in), + file(file_in), + line(line_in) {} + + std::string name; + GeneratorCreationFunc* generator; + ParamNameGeneratorFunc* name_func; + const char* file; + int line; }; typedef ::std::vector<InstantiationInfo> InstantiationContainer; static bool IsValidParamName(const std::string& name) { // Check for empty string - if (name.empty()) - return false; + if (name.empty()) return false; // Check for invalid characters for (std::string::size_type index = 0; index < name.size(); ++index) { - if (!isalnum(name[index]) && name[index] != '_') - return false; + if (!IsAlNum(name[index]) && name[index] != '_') return false; } return true; @@ -639,7 +669,9 @@ class ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase { TestInfoContainer tests_; InstantiationContainer instantiations_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestSuiteInfo); + ParameterizedTestSuiteInfo(const ParameterizedTestSuiteInfo&) = delete; + ParameterizedTestSuiteInfo& operator=(const ParameterizedTestSuiteInfo&) = + delete; }; // class ParameterizedTestSuiteInfo // Legacy API is deprecated but still available @@ -682,7 +714,7 @@ class ParameterizedTestSuiteRegistry { // type we are looking for, so we downcast it to that type // without further checks. typed_test_info = CheckedDowncastToActualType< - ParameterizedTestSuiteInfo<TestSuite> >(test_suite_info); + ParameterizedTestSuiteInfo<TestSuite>>(test_suite_info); } break; } @@ -714,7 +746,38 @@ class ParameterizedTestSuiteRegistry { TestSuiteInfoContainer test_suite_infos_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestSuiteRegistry); + ParameterizedTestSuiteRegistry(const ParameterizedTestSuiteRegistry&) = + delete; + ParameterizedTestSuiteRegistry& operator=( + const ParameterizedTestSuiteRegistry&) = delete; +}; + +// Keep track of what type-parameterized test suite are defined and +// where as well as which are intatiated. This allows susequently +// identifying suits that are defined but never used. +class TypeParameterizedTestSuiteRegistry { + public: + // Add a suite definition + void RegisterTestSuite(const char* test_suite_name, + CodeLocation code_location); + + // Add an instantiation of a suit. + void RegisterInstantiation(const char* test_suite_name); + + // For each suit repored as defined but not reported as instantiation, + // emit a test that reports that fact (configurably, as an error). + void CheckForInstantiations(); + + private: + struct TypeParameterizedTestSuiteInfo { + explicit TypeParameterizedTestSuiteInfo(CodeLocation c) + : code_location(c), instantiated(false) {} + + CodeLocation code_location; + bool instantiated; + }; + + std::map<std::string, TypeParameterizedTestSuiteInfo> suites_; }; } // namespace internal @@ -728,10 +791,15 @@ internal::ParamGenerator<typename Container::value_type> ValuesIn( namespace internal { // Used in the Values() function to provide polymorphic capabilities. +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4100) +#endif + template <typename... Ts> class ValueArray { public: - ValueArray(Ts... v) : v_{std::move(v)...} {} + explicit ValueArray(Ts... v) : v_(FlatTupleConstructTag{}, std::move(v)...) {} template <typename T> operator ParamGenerator<T>() const { // NOLINT @@ -747,6 +815,10 @@ class ValueArray { FlatTuple<Ts...> v_; }; +#ifdef _MSC_VER +#pragma warning(pop) +#endif + template <typename... T> class CartesianProductGenerator : public ParamGeneratorInterface<::std::tuple<T...>> { @@ -772,7 +844,8 @@ class CartesianProductGenerator : public ParamIteratorInterface<ParamType> { public: IteratorImpl(const ParamGeneratorInterface<ParamType>* base, - const std::tuple<ParamGenerator<T>...>& generators, bool is_end) + const std::tuple<ParamGenerator<T>...>& generators, + bool is_end) : base_(base), begin_(std::get<I>(generators).begin()...), end_(std::get<I>(generators).end()...), @@ -880,4 +953,4 @@ class CartesianProductHolder { } // namespace internal } // namespace testing -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_ diff --git a/test/gtest/include/gtest/internal/gtest-port-arch.h b/test/gtest_vendor/include/gtest/internal/gtest-port-arch.h similarity index 56% rename from test/gtest/include/gtest/internal/gtest-port-arch.h rename to test/gtest_vendor/include/gtest/internal/gtest-port-arch.h index cece93dba..f025db76a 100644 --- a/test/gtest/include/gtest/internal/gtest-port-arch.h +++ b/test/gtest_vendor/include/gtest/internal/gtest-port-arch.h @@ -26,82 +26,91 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// + // The Google C++ Testing and Mocking Framework (Google Test) // // This header file defines the GTEST_OS_* macro. // It is separate from gtest-port.h so that custom/gtest-port.h can include it. -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_ +#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_ // Determines the platform on which Google Test is compiled. #ifdef __CYGWIN__ -# define GTEST_OS_CYGWIN 1 -# elif defined(__MINGW__) || defined(__MINGW32__) || defined(__MINGW64__) -# define GTEST_OS_WINDOWS_MINGW 1 -# define GTEST_OS_WINDOWS 1 +#define GTEST_OS_CYGWIN 1 +#elif defined(__MINGW__) || defined(__MINGW32__) || defined(__MINGW64__) +#define GTEST_OS_WINDOWS_MINGW 1 +#define GTEST_OS_WINDOWS 1 #elif defined _WIN32 -# define GTEST_OS_WINDOWS 1 -# ifdef _WIN32_WCE -# define GTEST_OS_WINDOWS_MOBILE 1 -# elif defined(WINAPI_FAMILY) -# include <winapifamily.h> -# if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) -# define GTEST_OS_WINDOWS_DESKTOP 1 -# elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP) -# define GTEST_OS_WINDOWS_PHONE 1 -# elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) -# define GTEST_OS_WINDOWS_RT 1 -# elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE) -# define GTEST_OS_WINDOWS_PHONE 1 -# define GTEST_OS_WINDOWS_TV_TITLE 1 -# else - // WINAPI_FAMILY defined but no known partition matched. - // Default to desktop. -# define GTEST_OS_WINDOWS_DESKTOP 1 -# endif -# else -# define GTEST_OS_WINDOWS_DESKTOP 1 -# endif // _WIN32_WCE +#define GTEST_OS_WINDOWS 1 +#ifdef _WIN32_WCE +#define GTEST_OS_WINDOWS_MOBILE 1 +#elif defined(WINAPI_FAMILY) +#include <winapifamily.h> +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#define GTEST_OS_WINDOWS_DESKTOP 1 +#elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP) +#define GTEST_OS_WINDOWS_PHONE 1 +#elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) +#define GTEST_OS_WINDOWS_RT 1 +#elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE) +#define GTEST_OS_WINDOWS_PHONE 1 +#define GTEST_OS_WINDOWS_TV_TITLE 1 +#else +// WINAPI_FAMILY defined but no known partition matched. +// Default to desktop. +#define GTEST_OS_WINDOWS_DESKTOP 1 +#endif +#else +#define GTEST_OS_WINDOWS_DESKTOP 1 +#endif // _WIN32_WCE #elif defined __OS2__ -# define GTEST_OS_OS2 1 +#define GTEST_OS_OS2 1 #elif defined __APPLE__ -# define GTEST_OS_MAC 1 -# if TARGET_OS_IPHONE -# define GTEST_OS_IOS 1 -# endif +#define GTEST_OS_MAC 1 +#include <TargetConditionals.h> +#if TARGET_OS_IPHONE +#define GTEST_OS_IOS 1 +#endif #elif defined __DragonFly__ -# define GTEST_OS_DRAGONFLY 1 +#define GTEST_OS_DRAGONFLY 1 #elif defined __FreeBSD__ -# define GTEST_OS_FREEBSD 1 +#define GTEST_OS_FREEBSD 1 #elif defined __Fuchsia__ -# define GTEST_OS_FUCHSIA 1 +#define GTEST_OS_FUCHSIA 1 +#elif defined(__GNU__) +#define GTEST_OS_GNU_HURD 1 #elif defined(__GLIBC__) && defined(__FreeBSD_kernel__) -# define GTEST_OS_GNU_KFREEBSD 1 +#define GTEST_OS_GNU_KFREEBSD 1 #elif defined __linux__ -# define GTEST_OS_LINUX 1 -# if defined __ANDROID__ -# define GTEST_OS_LINUX_ANDROID 1 -# endif +#define GTEST_OS_LINUX 1 +#if defined __ANDROID__ +#define GTEST_OS_LINUX_ANDROID 1 +#endif #elif defined __MVS__ -# define GTEST_OS_ZOS 1 +#define GTEST_OS_ZOS 1 #elif defined(__sun) && defined(__SVR4) -# define GTEST_OS_SOLARIS 1 +#define GTEST_OS_SOLARIS 1 #elif defined(_AIX) -# define GTEST_OS_AIX 1 +#define GTEST_OS_AIX 1 #elif defined(__hpux) -# define GTEST_OS_HPUX 1 +#define GTEST_OS_HPUX 1 #elif defined __native_client__ -# define GTEST_OS_NACL 1 +#define GTEST_OS_NACL 1 #elif defined __NetBSD__ -# define GTEST_OS_NETBSD 1 +#define GTEST_OS_NETBSD 1 #elif defined __OpenBSD__ -# define GTEST_OS_OPENBSD 1 +#define GTEST_OS_OPENBSD 1 #elif defined __QNX__ -# define GTEST_OS_QNX 1 +#define GTEST_OS_QNX 1 #elif defined(__HAIKU__) #define GTEST_OS_HAIKU 1 +#elif defined ESP8266 +#define GTEST_OS_ESP8266 1 +#elif defined ESP32 +#define GTEST_OS_ESP32 1 +#elif defined(__XTENSA__) +#define GTEST_OS_XTENSA 1 #endif // __CYGWIN__ -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_ diff --git a/test/gtest/include/gtest/internal/gtest-port.h b/test/gtest_vendor/include/gtest/internal/gtest-port.h similarity index 68% rename from test/gtest/include/gtest/internal/gtest-port.h rename to test/gtest_vendor/include/gtest/internal/gtest-port.h index 063fcb108..0003d2765 100644 --- a/test/gtest/include/gtest/internal/gtest-port.h +++ b/test/gtest_vendor/include/gtest/internal/gtest-port.h @@ -26,7 +26,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// + // Low-level types and utilities for porting Google Test to various // platforms. All macros ending with _ and symbols defined in an // internal namespace are subject to change without notice. Code @@ -38,10 +38,12 @@ // files are expected to #include this. Therefore, it cannot #include // any other Google Test header. -// GOOGLETEST_CM0001 DO NOT DELETE +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ +#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ // Environment-describing macros // ----------------------------- @@ -116,6 +118,7 @@ // GTEST_OS_DRAGONFLY - DragonFlyBSD // GTEST_OS_FREEBSD - FreeBSD // GTEST_OS_FUCHSIA - Fuchsia +// GTEST_OS_GNU_HURD - GNU/Hurd // GTEST_OS_GNU_KFREEBSD - GNU/kFreeBSD // GTEST_OS_HAIKU - Haiku // GTEST_OS_HPUX - HP-UX @@ -167,7 +170,7 @@ // GTEST_HAS_TYPED_TEST - typed tests // GTEST_HAS_TYPED_TEST_P - type-parameterized tests // GTEST_IS_THREADSAFE - Google Test is thread-safe. -// GOOGLETEST_CM0007 DO NOT DELETE +// GTEST_USES_RE2 - the RE2 regular expression library is used // GTEST_USES_POSIX_RE - enhanced POSIX regex is used. Do not confuse with // GTEST_HAS_POSIX_RE (see above) which users can // define themselves. @@ -190,24 +193,36 @@ // GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning. // GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances or a // variable don't have to be used. -// GTEST_DISALLOW_ASSIGN_ - disables operator=. -// GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=. // GTEST_MUST_USE_RESULT_ - declares that a function's result must be used. // GTEST_INTENTIONAL_CONST_COND_PUSH_ - start code section where MSVC C4127 is // suppressed (constant conditional). // GTEST_INTENTIONAL_CONST_COND_POP_ - finish code section where MSVC C4127 // is suppressed. +// GTEST_INTERNAL_HAS_ANY - for enabling UniversalPrinter<std::any> or +// UniversalPrinter<absl::any> specializations. +// GTEST_INTERNAL_HAS_OPTIONAL - for enabling UniversalPrinter<std::optional> +// or +// UniversalPrinter<absl::optional> +// specializations. +// GTEST_INTERNAL_HAS_STRING_VIEW - for enabling Matcher<std::string_view> or +// Matcher<absl::string_view> +// specializations. +// GTEST_INTERNAL_HAS_VARIANT - for enabling UniversalPrinter<std::variant> or +// UniversalPrinter<absl::variant> +// specializations. // // Synchronization: // Mutex, MutexLock, ThreadLocal, GetThreadCount() // - synchronization primitives. // // Regular expressions: -// RE - a simple regular expression class using the POSIX -// Extended Regular Expression syntax on UNIX-like platforms -// GOOGLETEST_CM0008 DO NOT DELETE -// or a reduced regular exception syntax on other -// platforms, including Windows. +// RE - a simple regular expression class using +// 1) the RE2 syntax on all platforms when built with RE2 +// and Abseil as dependencies +// 2) the POSIX Extended Regular Expression syntax on +// UNIX-like platforms, +// 3) A reduced regular exception syntax on other platforms, +// including Windows. // Logging: // GTEST_LOG_() - logs messages at the specified severity level. // LogToStderr() - directs all log messages to stderr. @@ -223,19 +238,16 @@ // // Integer types: // TypeWithSize - maps an integer to a int type. -// Int32, UInt32, Int64, UInt64, TimeInMillis -// - integers of known sizes. +// TimeInMillis - integers of known sizes. // BiggestInt - the biggest signed integer type. // // Command-line utilities: -// GTEST_DECLARE_*() - declares a flag. -// GTEST_DEFINE_*() - defines a flag. // GetInjectableArgvs() - returns the command line as a vector of strings. // // Environment variable utilities: // GetEnv() - gets the value of an environment variable. // BoolFromGTestEnv() - parses a bool environment variable. -// Int32FromGTestEnv() - parses an Int32 environment variable. +// Int32FromGTestEnv() - parses an int32_t environment variable. // StringFromGTestEnv() - parses a string environment variable. // // Deprecation warnings: @@ -248,48 +260,57 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> + +#include <cerrno> +// #include <condition_variable> // Guarded by GTEST_IS_THREADSAFE below +#include <cstdint> +#include <iostream> +#include <limits> +#include <locale> #include <memory> +#include <string> +// #include <mutex> // Guarded by GTEST_IS_THREADSAFE below +#include <tuple> #include <type_traits> +#include <vector> #ifndef _WIN32_WCE -# include <sys/types.h> -# include <sys/stat.h> +#include <sys/stat.h> +#include <sys/types.h> #endif // !_WIN32_WCE #if defined __APPLE__ -# include <AvailabilityMacros.h> -# include <TargetConditionals.h> +#include <AvailabilityMacros.h> +#include <TargetConditionals.h> #endif -#include <algorithm> // NOLINT -#include <iostream> // NOLINT -#include <sstream> // NOLINT -#include <string> // NOLINT -#include <tuple> -#include <utility> -#include <vector> // NOLINT - -#include "gtest/internal/gtest-port-arch.h" #include "gtest/internal/custom/gtest-port.h" +#include "gtest/internal/gtest-port-arch.h" + +#if GTEST_HAS_ABSL +#include "absl/flags/declare.h" +#include "absl/flags/flag.h" +#include "absl/flags/reflection.h" +#endif #if !defined(GTEST_DEV_EMAIL_) -# define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" -# define GTEST_FLAG_PREFIX_ "gtest_" -# define GTEST_FLAG_PREFIX_DASH_ "gtest-" -# define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" -# define GTEST_NAME_ "Google Test" -# define GTEST_PROJECT_URL_ "https://github.com/google/googletest/" +#define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" +#define GTEST_FLAG_PREFIX_ "gtest_" +#define GTEST_FLAG_PREFIX_DASH_ "gtest-" +#define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" +#define GTEST_NAME_ "Google Test" +#define GTEST_PROJECT_URL_ "https://github.com/google/googletest/" #endif // !defined(GTEST_DEV_EMAIL_) #if !defined(GTEST_INIT_GOOGLE_TEST_NAME_) -# define GTEST_INIT_GOOGLE_TEST_NAME_ "testing::InitGoogleTest" +#define GTEST_INIT_GOOGLE_TEST_NAME_ "testing::InitGoogleTest" #endif // !defined(GTEST_INIT_GOOGLE_TEST_NAME_) // Determines the version of gcc that is used to compile this. #ifdef __GNUC__ // 40302 means version 4.3.2. -# define GTEST_GCC_VER_ \ - (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) +#define GTEST_GCC_VER_ \ + (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) #endif // __GNUC__ // Macros for disabling Microsoft Visual C++ warnings. @@ -298,41 +319,37 @@ // /* code that triggers warnings C4800 and C4385 */ // GTEST_DISABLE_MSC_WARNINGS_POP_() #if defined(_MSC_VER) -# define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) \ - __pragma(warning(push)) \ - __pragma(warning(disable: warnings)) -# define GTEST_DISABLE_MSC_WARNINGS_POP_() \ - __pragma(warning(pop)) +#define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) \ + __pragma(warning(push)) __pragma(warning(disable : warnings)) +#define GTEST_DISABLE_MSC_WARNINGS_POP_() __pragma(warning(pop)) #else // Not all compilers are MSVC -# define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) -# define GTEST_DISABLE_MSC_WARNINGS_POP_() +#define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) +#define GTEST_DISABLE_MSC_WARNINGS_POP_() #endif // Clang on Windows does not understand MSVC's pragma warning. // We need clang-specific way to disable function deprecation warning. #ifdef __clang__ -# define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \ - _Pragma("clang diagnostic push") \ - _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \ - _Pragma("clang diagnostic ignored \"-Wdeprecated-implementations\"") -#define GTEST_DISABLE_MSC_DEPRECATED_POP_() \ - _Pragma("clang diagnostic pop") +#define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \ + _Pragma("clang diagnostic ignored \"-Wdeprecated-implementations\"") +#define GTEST_DISABLE_MSC_DEPRECATED_POP_() _Pragma("clang diagnostic pop") #else -# define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \ - GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996) -# define GTEST_DISABLE_MSC_DEPRECATED_POP_() \ - GTEST_DISABLE_MSC_WARNINGS_POP_() +#define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \ + GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996) +#define GTEST_DISABLE_MSC_DEPRECATED_POP_() GTEST_DISABLE_MSC_WARNINGS_POP_() #endif // Brings in definitions for functions used in the testing::internal::posix // namespace (read, write, close, chdir, isatty, stat). We do not currently // use them on Windows Mobile. #if GTEST_OS_WINDOWS -# if !GTEST_OS_WINDOWS_MOBILE -# include <direct.h> -# include <io.h> -# endif +#if !GTEST_OS_WINDOWS_MOBILE +#include <direct.h> +#include <io.h> +#endif // In order to avoid having to include <windows.h>, use forward declaration #if GTEST_OS_WINDOWS_MINGW && !defined(__MINGW64_VERSION_MAJOR) // MinGW defined _CRITICAL_SECTION and _RTL_CRITICAL_SECTION as two @@ -344,72 +361,63 @@ typedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION; // WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION. typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; #endif +#elif GTEST_OS_XTENSA +#include <unistd.h> +// Xtensa toolchains define strcasecmp in the string.h header instead of +// strings.h. string.h is already included. #else // This assumes that non-Windows OSes provide unistd.h. For OSes where this // is not the case, we need to include headers that provide the functions // mentioned above. -# include <unistd.h> -# include <strings.h> +#include <strings.h> +#include <unistd.h> #endif // GTEST_OS_WINDOWS #if GTEST_OS_LINUX_ANDROID // Used to define __ANDROID_API__ matching the target NDK API level. -# include <android/api-level.h> // NOLINT +#include <android/api-level.h> // NOLINT #endif // Defines this to true if and only if Google Test can use POSIX regular // expressions. #ifndef GTEST_HAS_POSIX_RE -# if GTEST_OS_LINUX_ANDROID +#if GTEST_OS_LINUX_ANDROID // On Android, <regex.h> is only available starting with Gingerbread. -# define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9) -# else -# define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS) -# endif +#define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9) +#else +#define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS && !GTEST_OS_XTENSA) +#endif #endif -#if GTEST_USES_PCRE -// The appropriate headers have already been included. - +// Select the regular expression implementation. +#if GTEST_HAS_ABSL +// When using Abseil, RE2 is required. +#include "absl/strings/string_view.h" +#include "re2/re2.h" +#define GTEST_USES_RE2 1 #elif GTEST_HAS_POSIX_RE - -// On some platforms, <regex.h> needs someone to define size_t, and -// won't compile otherwise. We can #include it here as we already -// included <stdlib.h>, which is guaranteed to define size_t through -// <stddef.h>. -# include <regex.h> // NOLINT - -# define GTEST_USES_POSIX_RE 1 - -#elif GTEST_OS_WINDOWS - -// <regex.h> is not available on Windows. Use our own simple regex -// implementation instead. -# define GTEST_USES_SIMPLE_RE 1 - +#include <regex.h> // NOLINT +#define GTEST_USES_POSIX_RE 1 #else - -// <regex.h> may not be available on this platform. Use our own -// simple regex implementation instead. -# define GTEST_USES_SIMPLE_RE 1 - -#endif // GTEST_USES_PCRE +// Use our own simple regex implementation. +#define GTEST_USES_SIMPLE_RE 1 +#endif #ifndef GTEST_HAS_EXCEPTIONS // The user didn't tell us whether exceptions are enabled, so we need // to figure it out. -# if defined(_MSC_VER) && defined(_CPPUNWIND) +#if defined(_MSC_VER) && defined(_CPPUNWIND) // MSVC defines _CPPUNWIND to 1 if and only if exceptions are enabled. -# define GTEST_HAS_EXCEPTIONS 1 -# elif defined(__BORLANDC__) +#define GTEST_HAS_EXCEPTIONS 1 +#elif defined(__BORLANDC__) // C++Builder's implementation of the STL uses the _HAS_EXCEPTIONS // macro to enable exceptions, so we'll do the same. // Assumes that exceptions are enabled by default. -# ifndef _HAS_EXCEPTIONS -# define _HAS_EXCEPTIONS 1 -# endif // _HAS_EXCEPTIONS -# define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS -# elif defined(__clang__) +#ifndef _HAS_EXCEPTIONS +#define _HAS_EXCEPTIONS 1 +#endif // _HAS_EXCEPTIONS +#define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS +#elif defined(__clang__) // clang defines __EXCEPTIONS if and only if exceptions are enabled before clang // 220714, but if and only if cleanups are enabled after that. In Obj-C++ files, // there can be cleanups for ObjC exceptions which also need cleanups, even if @@ -418,38 +426,29 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // cleanups prior to that. To reliably check for C++ exception availability with // clang, check for // __EXCEPTIONS && __has_feature(cxx_exceptions). -# define GTEST_HAS_EXCEPTIONS (__EXCEPTIONS && __has_feature(cxx_exceptions)) -# elif defined(__GNUC__) && __EXCEPTIONS +#define GTEST_HAS_EXCEPTIONS (__EXCEPTIONS && __has_feature(cxx_exceptions)) +#elif defined(__GNUC__) && __EXCEPTIONS // gcc defines __EXCEPTIONS to 1 if and only if exceptions are enabled. -# define GTEST_HAS_EXCEPTIONS 1 -# elif defined(__SUNPRO_CC) +#define GTEST_HAS_EXCEPTIONS 1 +#elif defined(__SUNPRO_CC) // Sun Pro CC supports exceptions. However, there is no compile-time way of // detecting whether they are enabled or not. Therefore, we assume that // they are enabled unless the user tells us otherwise. -# define GTEST_HAS_EXCEPTIONS 1 -# elif defined(__IBMCPP__) && __EXCEPTIONS +#define GTEST_HAS_EXCEPTIONS 1 +#elif defined(__IBMCPP__) && __EXCEPTIONS // xlC defines __EXCEPTIONS to 1 if and only if exceptions are enabled. -# define GTEST_HAS_EXCEPTIONS 1 -# elif defined(__HP_aCC) +#define GTEST_HAS_EXCEPTIONS 1 +#elif defined(__HP_aCC) // Exception handling is in effect by default in HP aCC compiler. It has to // be turned of by +noeh compiler option if desired. -# define GTEST_HAS_EXCEPTIONS 1 -# else +#define GTEST_HAS_EXCEPTIONS 1 +#else // For other compilers, we assume exceptions are disabled to be // conservative. -# define GTEST_HAS_EXCEPTIONS 0 -# endif // defined(_MSC_VER) || defined(__BORLANDC__) +#define GTEST_HAS_EXCEPTIONS 0 +#endif // defined(_MSC_VER) || defined(__BORLANDC__) #endif // GTEST_HAS_EXCEPTIONS -#if !defined(GTEST_HAS_STD_STRING) -// Even though we don't use this macro any longer, we keep it in case -// some clients still depend on it. -# define GTEST_HAS_STD_STRING 1 -#elif !GTEST_HAS_STD_STRING -// The user told us that ::std::string isn't available. -# error "::std::string isn't available." -#endif // !defined(GTEST_HAS_STD_STRING) - #ifndef GTEST_HAS_STD_WSTRING // The user didn't tell us whether ::std::wstring is available, so we need // to figure it out. @@ -458,7 +457,7 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // no support for it at least as recent as Froyo (2.2). #define GTEST_HAS_STD_WSTRING \ (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ - GTEST_OS_HAIKU)) + GTEST_OS_HAIKU || GTEST_OS_ESP32 || GTEST_OS_ESP8266 || GTEST_OS_XTENSA)) #endif // GTEST_HAS_STD_WSTRING @@ -467,63 +466,62 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // The user didn't tell us whether RTTI is enabled, so we need to // figure it out. -# ifdef _MSC_VER +#ifdef _MSC_VER #ifdef _CPPRTTI // MSVC defines this macro if and only if RTTI is enabled. -# define GTEST_HAS_RTTI 1 -# else -# define GTEST_HAS_RTTI 0 -# endif +#define GTEST_HAS_RTTI 1 +#else +#define GTEST_HAS_RTTI 0 +#endif // Starting with version 4.3.2, gcc defines __GXX_RTTI if and only if RTTI is // enabled. -# elif defined(__GNUC__) +#elif defined(__GNUC__) -# ifdef __GXX_RTTI +#ifdef __GXX_RTTI // When building against STLport with the Android NDK and with // -frtti -fno-exceptions, the build fails at link time with undefined // references to __cxa_bad_typeid. Note sure if STL or toolchain bug, // so disable RTTI when detected. -# if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && \ - !defined(__EXCEPTIONS) -# define GTEST_HAS_RTTI 0 -# else -# define GTEST_HAS_RTTI 1 -# endif // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS -# else -# define GTEST_HAS_RTTI 0 -# endif // __GXX_RTTI +#if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && !defined(__EXCEPTIONS) +#define GTEST_HAS_RTTI 0 +#else +#define GTEST_HAS_RTTI 1 +#endif // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS +#else +#define GTEST_HAS_RTTI 0 +#endif // __GXX_RTTI // Clang defines __GXX_RTTI starting with version 3.0, but its manual recommends // using has_feature instead. has_feature(cxx_rtti) is supported since 2.7, the // first version with C++ support. -# elif defined(__clang__) +#elif defined(__clang__) -# define GTEST_HAS_RTTI __has_feature(cxx_rtti) +#define GTEST_HAS_RTTI __has_feature(cxx_rtti) // Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if // both the typeid and dynamic_cast features are present. -# elif defined(__IBMCPP__) && (__IBMCPP__ >= 900) +#elif defined(__IBMCPP__) && (__IBMCPP__ >= 900) -# ifdef __RTTI_ALL__ -# define GTEST_HAS_RTTI 1 -# else -# define GTEST_HAS_RTTI 0 -# endif +#ifdef __RTTI_ALL__ +#define GTEST_HAS_RTTI 1 +#else +#define GTEST_HAS_RTTI 0 +#endif -# else +#else // For all other compilers, we assume RTTI is enabled. -# define GTEST_HAS_RTTI 1 +#define GTEST_HAS_RTTI 1 -# endif // _MSC_VER +#endif // _MSC_VER #endif // GTEST_HAS_RTTI // It's this header's responsibility to #include <typeinfo> when RTTI // is enabled. #if GTEST_HAS_RTTI -# include <typeinfo> +#include <typeinfo> #endif // Determines whether Google Test can use the pthreads library. @@ -537,16 +535,16 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX || GTEST_OS_QNX || \ GTEST_OS_FREEBSD || GTEST_OS_NACL || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA || \ GTEST_OS_DRAGONFLY || GTEST_OS_GNU_KFREEBSD || GTEST_OS_OPENBSD || \ - GTEST_OS_HAIKU) + GTEST_OS_HAIKU || GTEST_OS_GNU_HURD) #endif // GTEST_HAS_PTHREAD #if GTEST_HAS_PTHREAD // gtest-port.h guarantees to #include <pthread.h> when GTEST_HAS_PTHREAD is // true. -# include <pthread.h> // NOLINT +#include <pthread.h> // NOLINT // For timespec and nanosleep, used below. -# include <time.h> // NOLINT +#include <time.h> // NOLINT #endif // Determines whether clone(2) is supported. @@ -556,24 +554,23 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; #ifndef GTEST_HAS_CLONE // The user didn't tell us, so we need to figure it out. -# if GTEST_OS_LINUX && !defined(__ia64__) -# if GTEST_OS_LINUX_ANDROID +#if GTEST_OS_LINUX && !defined(__ia64__) +#if GTEST_OS_LINUX_ANDROID // On Android, clone() became available at different API levels for each 32-bit // architecture. -# if defined(__LP64__) || \ - (defined(__arm__) && __ANDROID_API__ >= 9) || \ - (defined(__mips__) && __ANDROID_API__ >= 12) || \ - (defined(__i386__) && __ANDROID_API__ >= 17) -# define GTEST_HAS_CLONE 1 -# else -# define GTEST_HAS_CLONE 0 -# endif -# else -# define GTEST_HAS_CLONE 1 -# endif -# else -# define GTEST_HAS_CLONE 0 -# endif // GTEST_OS_LINUX && !defined(__ia64__) +#if defined(__LP64__) || (defined(__arm__) && __ANDROID_API__ >= 9) || \ + (defined(__mips__) && __ANDROID_API__ >= 12) || \ + (defined(__i386__) && __ANDROID_API__ >= 17) +#define GTEST_HAS_CLONE 1 +#else +#define GTEST_HAS_CLONE 0 +#endif +#else +#define GTEST_HAS_CLONE 1 +#endif +#else +#define GTEST_HAS_CLONE 0 +#endif // GTEST_OS_LINUX && !defined(__ia64__) #endif // GTEST_HAS_CLONE @@ -582,11 +579,12 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; #ifndef GTEST_HAS_STREAM_REDIRECTION // By default, we assume that stream redirection is supported on all // platforms except known mobile ones. -# if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT -# define GTEST_HAS_STREAM_REDIRECTION 0 -# else -# define GTEST_HAS_STREAM_REDIRECTION 1 -# endif // !GTEST_OS_WINDOWS_MOBILE +#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \ + GTEST_OS_WINDOWS_RT || GTEST_OS_ESP8266 || GTEST_OS_XTENSA +#define GTEST_HAS_STREAM_REDIRECTION 0 +#else +#define GTEST_HAS_STREAM_REDIRECTION 1 +#endif // !GTEST_OS_WINDOWS_MOBILE #endif // GTEST_HAS_STREAM_REDIRECTION // Determines whether to support death tests. @@ -596,8 +594,9 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER) || GTEST_OS_WINDOWS_MINGW || \ GTEST_OS_AIX || GTEST_OS_HPUX || GTEST_OS_OPENBSD || GTEST_OS_QNX || \ GTEST_OS_FREEBSD || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA || \ - GTEST_OS_DRAGONFLY || GTEST_OS_GNU_KFREEBSD || GTEST_OS_HAIKU) -# define GTEST_HAS_DEATH_TEST 1 + GTEST_OS_DRAGONFLY || GTEST_OS_GNU_KFREEBSD || GTEST_OS_HAIKU || \ + GTEST_OS_GNU_HURD) +#define GTEST_HAS_DEATH_TEST 1 #endif // Determines whether to support type-driven tests. @@ -606,8 +605,8 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // Sun Pro CC, IBM Visual Age, and HP aCC support. #if defined(__GNUC__) || defined(_MSC_VER) || defined(__SUNPRO_CC) || \ defined(__IBMCPP__) || defined(__HP_aCC) -# define GTEST_HAS_TYPED_TEST 1 -# define GTEST_HAS_TYPED_TEST_P 1 +#define GTEST_HAS_TYPED_TEST 1 +#define GTEST_HAS_TYPED_TEST_P 1 #endif // Determines whether the system compiler uses UTF-16 for encoding wide strings. @@ -616,8 +615,9 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // Determines whether test results can be streamed to a socket. #if GTEST_OS_LINUX || GTEST_OS_GNU_KFREEBSD || GTEST_OS_DRAGONFLY || \ - GTEST_OS_FREEBSD || GTEST_OS_NETBSD || GTEST_OS_OPENBSD -# define GTEST_CAN_STREAM_RESULTS_ 1 + GTEST_OS_FREEBSD || GTEST_OS_NETBSD || GTEST_OS_OPENBSD || \ + GTEST_OS_GNU_HURD +#define GTEST_CAN_STREAM_RESULTS_ 1 #endif // Defines some utility macros. @@ -631,9 +631,12 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // // The "switch (0) case 0:" idiom is used to suppress this. #ifdef __INTEL_COMPILER -# define GTEST_AMBIGUOUS_ELSE_BLOCKER_ +#define GTEST_AMBIGUOUS_ELSE_BLOCKER_ #else -# define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default: // NOLINT +#define GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + switch (0) \ + case 0: \ + default: // NOLINT #endif // Use this annotation at the end of a struct/class definition to @@ -648,44 +651,32 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // Also use it after a variable or parameter declaration to tell the // compiler the variable/parameter does not have to be used. #if defined(__GNUC__) && !defined(COMPILER_ICC) -# define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) +#define GTEST_ATTRIBUTE_UNUSED_ __attribute__((unused)) #elif defined(__clang__) -# if __has_attribute(unused) -# define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) -# endif +#if __has_attribute(unused) +#define GTEST_ATTRIBUTE_UNUSED_ __attribute__((unused)) +#endif #endif #ifndef GTEST_ATTRIBUTE_UNUSED_ -# define GTEST_ATTRIBUTE_UNUSED_ +#define GTEST_ATTRIBUTE_UNUSED_ #endif // Use this annotation before a function that takes a printf format string. #if (defined(__GNUC__) || defined(__clang__)) && !defined(COMPILER_ICC) -# if defined(__MINGW_PRINTF_FORMAT) +#if defined(__MINGW_PRINTF_FORMAT) // MinGW has two different printf implementations. Ensure the format macro // matches the selected implementation. See // https://sourceforge.net/p/mingw-w64/wiki2/gnu%20printf/. -# define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ - __attribute__((__format__(__MINGW_PRINTF_FORMAT, string_index, \ - first_to_check))) -# else -# define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ - __attribute__((__format__(__printf__, string_index, first_to_check))) -# endif +#define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ + __attribute__(( \ + __format__(__MINGW_PRINTF_FORMAT, string_index, first_to_check))) #else -# define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) +#define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ + __attribute__((__format__(__printf__, string_index, first_to_check))) +#endif +#else +#define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) #endif - - -// A macro to disallow operator= -// This should be used in the private: declarations for a class. -#define GTEST_DISALLOW_ASSIGN_(type) \ - void operator=(type const &) = delete - -// A macro to disallow copy constructor and operator= -// This should be used in the private: declarations for a class. -#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type) \ - type(type const &) = delete; \ - GTEST_DISALLOW_ASSIGN_(type) // Tell the compiler to warn about unused return values for functions declared // with this macro. The macro should be used on function declarations @@ -693,9 +684,9 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // // Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_; #if defined(__GNUC__) && !defined(COMPILER_ICC) -# define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result)) +#define GTEST_MUST_USE_RESULT_ __attribute__((warn_unused_result)) #else -# define GTEST_MUST_USE_RESULT_ +#define GTEST_MUST_USE_RESULT_ #endif // __GNUC__ && !COMPILER_ICC // MS C++ compiler emits warning when a conditional expression is compile time @@ -706,10 +697,9 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; // while (true) { // GTEST_INTENTIONAL_CONST_COND_POP_() // } -# define GTEST_INTENTIONAL_CONST_COND_PUSH_() \ - GTEST_DISABLE_MSC_WARNINGS_PUSH_(4127) -# define GTEST_INTENTIONAL_CONST_COND_POP_() \ - GTEST_DISABLE_MSC_WARNINGS_POP_() +#define GTEST_INTENTIONAL_CONST_COND_PUSH_() \ + GTEST_DISABLE_MSC_WARNINGS_PUSH_(4127) +#define GTEST_INTENTIONAL_CONST_COND_POP_() GTEST_DISABLE_MSC_WARNINGS_POP_() // Determine whether the compiler supports Microsoft's Structured Exception // Handling. This is supported by several Windows compilers but generally @@ -717,13 +707,13 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; #ifndef GTEST_HAS_SEH // The user didn't tell us, so we need to figure it out. -# if defined(_MSC_VER) || defined(__BORLANDC__) +#if defined(_MSC_VER) || defined(__BORLANDC__) // These two compilers are known to support SEH. -# define GTEST_HAS_SEH 1 -# else +#define GTEST_HAS_SEH 1 +#else // Assume no SEH. -# define GTEST_HAS_SEH 0 -# endif +#define GTEST_HAS_SEH 0 +#endif #endif // GTEST_HAS_SEH @@ -736,94 +726,112 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION; #endif // GTEST_IS_THREADSAFE +#if GTEST_IS_THREADSAFE +// Some platforms don't support including these threading related headers. +#include <condition_variable> // NOLINT +#include <mutex> // NOLINT +#endif // GTEST_IS_THREADSAFE + // GTEST_API_ qualifies all symbols that must be exported. The definitions below // are guarded by #ifndef to give embedders a chance to define GTEST_API_ in // gtest/internal/custom/gtest-port.h #ifndef GTEST_API_ #ifdef _MSC_VER -# if GTEST_LINKED_AS_SHARED_LIBRARY -# define GTEST_API_ __declspec(dllimport) -# elif GTEST_CREATE_SHARED_LIBRARY -# define GTEST_API_ __declspec(dllexport) -# endif +#if GTEST_LINKED_AS_SHARED_LIBRARY +#define GTEST_API_ __declspec(dllimport) +#elif GTEST_CREATE_SHARED_LIBRARY +#define GTEST_API_ __declspec(dllexport) +#endif #elif __GNUC__ >= 4 || defined(__clang__) -# define GTEST_API_ __attribute__((visibility ("default"))) +#define GTEST_API_ __attribute__((visibility("default"))) #endif // _MSC_VER #endif // GTEST_API_ #ifndef GTEST_API_ -# define GTEST_API_ +#define GTEST_API_ #endif // GTEST_API_ #ifndef GTEST_DEFAULT_DEATH_TEST_STYLE -# define GTEST_DEFAULT_DEATH_TEST_STYLE "fast" +#define GTEST_DEFAULT_DEATH_TEST_STYLE "fast" #endif // GTEST_DEFAULT_DEATH_TEST_STYLE #ifdef __GNUC__ // Ask the compiler to never inline a given function. -# define GTEST_NO_INLINE_ __attribute__((noinline)) +#define GTEST_NO_INLINE_ __attribute__((noinline)) +#else +#define GTEST_NO_INLINE_ +#endif + +#if defined(__clang__) +// Nested ifs to avoid triggering MSVC warning. +#if __has_attribute(disable_tail_calls) +// Ask the compiler not to perform tail call optimization inside +// the marked function. +#define GTEST_NO_TAIL_CALL_ __attribute__((disable_tail_calls)) +#endif +#elif __GNUC__ +#define GTEST_NO_TAIL_CALL_ \ + __attribute__((optimize("no-optimize-sibling-calls"))) #else -# define GTEST_NO_INLINE_ +#define GTEST_NO_TAIL_CALL_ #endif // _LIBCPP_VERSION is defined by the libc++ library from the LLVM project. #if !defined(GTEST_HAS_CXXABI_H_) -# if defined(__GLIBCXX__) || (defined(_LIBCPP_VERSION) && !defined(_MSC_VER)) -# define GTEST_HAS_CXXABI_H_ 1 -# else -# define GTEST_HAS_CXXABI_H_ 0 -# endif +#if defined(__GLIBCXX__) || (defined(_LIBCPP_VERSION) && !defined(_MSC_VER)) +#define GTEST_HAS_CXXABI_H_ 1 +#else +#define GTEST_HAS_CXXABI_H_ 0 +#endif #endif // A function level attribute to disable checking for use of uninitialized // memory when built with MemorySanitizer. #if defined(__clang__) -# if __has_feature(memory_sanitizer) -# define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ \ - __attribute__((no_sanitize_memory)) -# else -# define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ -# endif // __has_feature(memory_sanitizer) +#if __has_feature(memory_sanitizer) +#define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ __attribute__((no_sanitize_memory)) +#else +#define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ +#endif // __has_feature(memory_sanitizer) #else -# define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ +#define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ #endif // __clang__ // A function level attribute to disable AddressSanitizer instrumentation. #if defined(__clang__) -# if __has_feature(address_sanitizer) -# define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ \ - __attribute__((no_sanitize_address)) -# else -# define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ -# endif // __has_feature(address_sanitizer) +#if __has_feature(address_sanitizer) +#define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ \ + __attribute__((no_sanitize_address)) #else -# define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ +#define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ +#endif // __has_feature(address_sanitizer) +#else +#define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ #endif // __clang__ // A function level attribute to disable HWAddressSanitizer instrumentation. #if defined(__clang__) -# if __has_feature(hwaddress_sanitizer) -# define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ \ - __attribute__((no_sanitize("hwaddress"))) -# else -# define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ -# endif // __has_feature(hwaddress_sanitizer) +#if __has_feature(hwaddress_sanitizer) +#define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ \ + __attribute__((no_sanitize("hwaddress"))) +#else +#define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ +#endif // __has_feature(hwaddress_sanitizer) #else -# define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ +#define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ #endif // __clang__ // A function level attribute to disable ThreadSanitizer instrumentation. #if defined(__clang__) -# if __has_feature(thread_sanitizer) -# define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ \ - __attribute__((no_sanitize_thread)) -# else -# define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ -# endif // __has_feature(thread_sanitizer) +#if __has_feature(thread_sanitizer) +#define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ __attribute__((no_sanitize_thread)) #else -# define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ +#define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ +#endif // __has_feature(thread_sanitizer) +#else +#define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ #endif // __clang__ namespace testing { @@ -845,28 +853,37 @@ namespace internal { // Secret object, which is what we want. class Secret; -// The GTEST_COMPILE_ASSERT_ is a legacy macro used to verify that a compile -// time expression is true (in new code, use static_assert instead). For -// example, you could use it to verify the size of a static array: -// -// GTEST_COMPILE_ASSERT_(GTEST_ARRAY_SIZE_(names) == NUM_NAMES, -// names_incorrect_size); -// -// The second argument to the macro must be a valid C++ identifier. If the -// expression is false, compiler will issue an error containing this identifier. -#define GTEST_COMPILE_ASSERT_(expr, msg) static_assert(expr, #msg) - -// Evaluates to the number of elements in 'array'. -#define GTEST_ARRAY_SIZE_(array) (sizeof(array) / sizeof(array[0])) - // A helper for suppressing warnings on constant condition. It just // returns 'condition'. GTEST_API_ bool IsTrue(bool condition); // Defines RE. -#if GTEST_USES_PCRE -// if used, PCRE is injected by custom/gtest-port.h +#if GTEST_USES_RE2 + +// This is almost `using RE = ::RE2`, except it is copy-constructible, and it +// needs to disambiguate the `std::string`, `absl::string_view`, and `const +// char*` constructors. +class GTEST_API_ RE { + public: + RE(absl::string_view regex) : regex_(regex) {} // NOLINT + RE(const char* regex) : RE(absl::string_view(regex)) {} // NOLINT + RE(const std::string& regex) : RE(absl::string_view(regex)) {} // NOLINT + RE(const RE& other) : RE(other.pattern()) {} + + const std::string& pattern() const { return regex_.pattern(); } + + static bool FullMatch(absl::string_view str, const RE& re) { + return RE2::FullMatch(str, re.regex_); + } + static bool PartialMatch(absl::string_view str, const RE& re) { + return RE2::PartialMatch(str, re.regex_); + } + + private: + RE2 regex_; +}; + #elif GTEST_USES_POSIX_RE || GTEST_USES_SIMPLE_RE // A simple C++ wrapper for <regex.h>. It uses the POSIX Extended @@ -905,21 +922,19 @@ class GTEST_API_ RE { const char* pattern_; bool is_valid_; -# if GTEST_USES_POSIX_RE +#if GTEST_USES_POSIX_RE regex_t full_regex_; // For FullMatch(). regex_t partial_regex_; // For PartialMatch(). -# else // GTEST_USES_SIMPLE_RE +#else // GTEST_USES_SIMPLE_RE const char* full_pattern_; // For FullMatch(); -# endif - - GTEST_DISALLOW_ASSIGN_(RE); +#endif }; -#endif // GTEST_USES_PCRE +#endif // ::testing::internal::RE implementation // Formats a source file path and a line number as they would appear // in an error message from the compiler used to compile this code. @@ -937,12 +952,7 @@ GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char* file, // LogToStderr() - directs all log messages to stderr. // FlushInfoLog() - flushes informational log messages. -enum GTestLogSeverity { - GTEST_INFO, - GTEST_WARNING, - GTEST_ERROR, - GTEST_FATAL -}; +enum GTestLogSeverity { GTEST_INFO, GTEST_WARNING, GTEST_ERROR, GTEST_FATAL }; // Formats log entry severity, provides a stream object for streaming the // log message, and terminates the message with a newline when going out of @@ -959,14 +969,16 @@ class GTEST_API_ GTestLog { private: const GTestLogSeverity severity_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestLog); + GTestLog(const GTestLog&) = delete; + GTestLog& operator=(const GTestLog&) = delete; }; #if !defined(GTEST_LOG_) -# define GTEST_LOG_(severity) \ - ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \ - __FILE__, __LINE__).GetStream() +#define GTEST_LOG_(severity) \ + ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \ + __FILE__, __LINE__) \ + .GetStream() inline void LogToStderr() {} inline void FlushInfoLog() { fflush(nullptr); } @@ -978,7 +990,7 @@ inline void FlushInfoLog() { fflush(nullptr); } // // GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition // is not satisfied. -// Synopsys: +// Synopsis: // GTEST_CHECK_(boolean_condition); // or // GTEST_CHECK_(boolean_condition) << "Additional message"; @@ -988,12 +1000,12 @@ inline void FlushInfoLog() { fflush(nullptr); } // condition itself, plus additional message streamed into it, if any, // and then it aborts the program. It aborts the program irrespective of // whether it is built in the debug mode or not. -# define GTEST_CHECK_(condition) \ - GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ - if (::testing::internal::IsTrue(condition)) \ - ; \ - else \ - GTEST_LOG_(FATAL) << "Condition " #condition " failed. " +#define GTEST_CHECK_(condition) \ + GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ + if (::testing::internal::IsTrue(condition)) \ + ; \ + else \ + GTEST_LOG_(FATAL) << "Condition " #condition " failed. " #endif // !defined(GTEST_CHECK_) // An all-mode assert to verify that the given POSIX-style function @@ -1002,9 +1014,8 @@ inline void FlushInfoLog() { fflush(nullptr); } // in {} if you need to use it as the only statement in an 'if' // branch. #define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \ - if (const int gtest_error = (posix_call)) \ - GTEST_LOG_(FATAL) << #posix_call << "failed with error " \ - << gtest_error + if (const int gtest_error = (posix_call)) \ + GTEST_LOG_(FATAL) << #posix_call << "failed with error " << gtest_error // Transforms "T" into "const T&" according to standard reference collapsing // rules (this is only needed as a backport for C++98 compilers that do not @@ -1018,9 +1029,13 @@ inline void FlushInfoLog() { fflush(nullptr); } // Note that the non-const reference will not have "const" added. This is // standard, and necessary so that "T" can always bind to "const T&". template <typename T> -struct ConstRef { typedef const T& type; }; +struct ConstRef { + typedef const T& type; +}; template <typename T> -struct ConstRef<T&> { typedef T& type; }; +struct ConstRef<T&> { + typedef T& type; +}; // The argument T must depend on some template parameters. #define GTEST_REFERENCE_TO_CONST_(T) \ @@ -1033,7 +1048,7 @@ struct ConstRef<T&> { typedef T& type; }; // const Foo*). When you use ImplicitCast_, the compiler checks that // the cast is safe. Such explicit ImplicitCast_s are necessary in // surprisingly many situations where C++ demands an exact type match -// instead of an argument type convertable to a target type. +// instead of an argument type convertible to a target type. // // The syntax for using ImplicitCast_ is the same as for static_cast: // @@ -1046,8 +1061,10 @@ struct ConstRef<T&> { typedef T& type; }; // This relatively ugly name is intentional. It prevents clashes with // similar functions users may have (e.g., implicit_cast). The internal // namespace alone is not enough because the function can be found by ADL. -template<typename To> -inline To ImplicitCast_(To x) { return x; } +template <typename To> +inline To ImplicitCast_(To x) { + return x; +} // When you upcast (that is, cast a pointer from type Foo to type // SuperclassOfFoo), it's fine to use ImplicitCast_<>, since upcasts @@ -1070,17 +1087,17 @@ inline To ImplicitCast_(To x) { return x; } // This relatively ugly name is intentional. It prevents clashes with // similar functions users may have (e.g., down_cast). The internal // namespace alone is not enough because the function can be found by ADL. -template<typename To, typename From> // use like this: DownCast_<T*>(foo); -inline To DownCast_(From* f) { // so we only accept pointers +template <typename To, typename From> // use like this: DownCast_<T*>(foo); +inline To DownCast_(From* f) { // so we only accept pointers // Ensures that To is a sub-type of From *. This test is here only // for compile-time type checking, and has no overhead in an // optimized build at run-time, as it will be optimized away // completely. GTEST_INTENTIONAL_CONST_COND_PUSH_() if (false) { - GTEST_INTENTIONAL_CONST_COND_POP_() - const To to = nullptr; - ::testing::internal::ImplicitCast_<From*>(to); + GTEST_INTENTIONAL_CONST_COND_POP_() + const To to = nullptr; + ::testing::internal::ImplicitCast_<From*>(to); } #if GTEST_HAS_RTTI @@ -1145,71 +1162,8 @@ void ClearInjectableArgvs(); // Defines synchronization primitives. #if GTEST_IS_THREADSAFE -# if GTEST_HAS_PTHREAD -// Sleeps for (roughly) n milliseconds. This function is only for testing -// Google Test's own constructs. Don't use it in user tests, either -// directly or indirectly. -inline void SleepMilliseconds(int n) { - const timespec time = { - 0, // 0 seconds. - n * 1000L * 1000L, // And n ms. - }; - nanosleep(&time, nullptr); -} -# endif // GTEST_HAS_PTHREAD - -# if GTEST_HAS_NOTIFICATION_ -// Notification has already been imported into the namespace. -// Nothing to do here. - -# elif GTEST_HAS_PTHREAD -// Allows a controller thread to pause execution of newly created -// threads until notified. Instances of this class must be created -// and destroyed in the controller thread. -// -// This class is only for testing Google Test's own constructs. Do not -// use it in user tests, either directly or indirectly. -class Notification { - public: - Notification() : notified_(false) { - GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, nullptr)); - } - ~Notification() { - pthread_mutex_destroy(&mutex_); - } - - // Notifies all threads created with this notification to start. Must - // be called from the controller thread. - void Notify() { - pthread_mutex_lock(&mutex_); - notified_ = true; - pthread_mutex_unlock(&mutex_); - } - - // Blocks until the controller thread notifies. Must be called from a test - // thread. - void WaitForNotification() { - for (;;) { - pthread_mutex_lock(&mutex_); - const bool notified = notified_; - pthread_mutex_unlock(&mutex_); - if (notified) - break; - SleepMilliseconds(10); - } - } - - private: - pthread_mutex_t mutex_; - bool notified_; - - GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification); -}; - -# elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT - -GTEST_API_ void SleepMilliseconds(int n); +#if GTEST_OS_WINDOWS // Provides leak-safe Windows kernel handle ownership. // Used in death tests and in threading support. class GTEST_API_ AutoHandle { @@ -1236,8 +1190,18 @@ class GTEST_API_ AutoHandle { Handle handle_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(AutoHandle); + AutoHandle(const AutoHandle&) = delete; + AutoHandle& operator=(const AutoHandle&) = delete; }; +#endif + +#if GTEST_HAS_NOTIFICATION_ +// Notification has already been imported into the namespace. +// Nothing to do here. + +#else +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ +/* class A needs to have dll-interface to be used by clients of class B */) // Allows a controller thread to pause execution of newly created // threads until notified. Instances of this class must be created @@ -1245,23 +1209,40 @@ class GTEST_API_ AutoHandle { // // This class is only for testing Google Test's own constructs. Do not // use it in user tests, either directly or indirectly. +// TODO(b/203539622): Replace unconditionally with absl::Notification. class GTEST_API_ Notification { public: - Notification(); - void Notify(); - void WaitForNotification(); + Notification() : notified_(false) {} + Notification(const Notification&) = delete; + Notification& operator=(const Notification&) = delete; - private: - AutoHandle event_; + // Notifies all threads created with this notification to start. Must + // be called from the controller thread. + void Notify() { + std::lock_guard<std::mutex> lock(mu_); + notified_ = true; + cv_.notify_all(); + } + + // Blocks until the controller thread notifies. Must be called from a test + // thread. + void WaitForNotification() { + std::unique_lock<std::mutex> lock(mu_); + cv_.wait(lock, [this]() { return notified_; }); + } - GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification); + private: + std::mutex mu_; + std::condition_variable cv_; + bool notified_; }; -# endif // GTEST_HAS_NOTIFICATION_ +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 +#endif // GTEST_HAS_NOTIFICATION_ // On MinGW, we can have both GTEST_OS_WINDOWS and GTEST_HAS_PTHREAD // defined, but we don't want to use MinGW's pthreads implementation, which // has conformance problems with some versions of the POSIX standard. -# if GTEST_HAS_PTHREAD && !GTEST_OS_WINDOWS_MINGW +#if GTEST_HAS_PTHREAD && !GTEST_OS_WINDOWS_MINGW // As a C-function, ThreadFuncWithCLinkage cannot be templated itself. // Consequently, it cannot select a correct instantiation of ThreadWithParam @@ -1337,16 +1318,17 @@ class ThreadWithParam : public ThreadWithParamBase { // finished. pthread_t thread_; // The native thread object. - GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam); + ThreadWithParam(const ThreadWithParam&) = delete; + ThreadWithParam& operator=(const ThreadWithParam&) = delete; }; -# endif // !GTEST_OS_WINDOWS && GTEST_HAS_PTHREAD || - // GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ +#endif // !GTEST_OS_WINDOWS && GTEST_HAS_PTHREAD || + // GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ -# if GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ +#if GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ // Mutex and ThreadLocal have already been imported into the namespace. // Nothing to do here. -# elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT +#elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT // Mutex implements mutex on Windows platforms. It is used in conjunction // with class MutexLock: @@ -1400,14 +1382,15 @@ class GTEST_API_ Mutex { long critical_section_init_phase_; // NOLINT GTEST_CRITICAL_SECTION* critical_section_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex); + Mutex(const Mutex&) = delete; + Mutex& operator=(const Mutex&) = delete; }; -# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ - extern ::testing::internal::Mutex mutex +#define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ + extern ::testing::internal::Mutex mutex -# define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ - ::testing::internal::Mutex mutex(::testing::internal::Mutex::kStaticMutex) +#define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ + ::testing::internal::Mutex mutex(::testing::internal::Mutex::kStaticMutex) // We cannot name this class MutexLock because the ctor declaration would // conflict with a macro named MutexLock, which is defined on some @@ -1416,15 +1399,15 @@ class GTEST_API_ Mutex { // "MutexLock l(&mu)". Hence the typedef trick below. class GTestMutexLock { public: - explicit GTestMutexLock(Mutex* mutex) - : mutex_(mutex) { mutex_->Lock(); } + explicit GTestMutexLock(Mutex* mutex) : mutex_(mutex) { mutex_->Lock(); } ~GTestMutexLock() { mutex_->Unlock(); } private: Mutex* const mutex_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestMutexLock); + GTestMutexLock(const GTestMutexLock&) = delete; + GTestMutexLock& operator=(const GTestMutexLock&) = delete; }; typedef GTestMutexLock MutexLock; @@ -1451,7 +1434,8 @@ class ThreadLocalBase { virtual ~ThreadLocalBase() {} private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocalBase); + ThreadLocalBase(const ThreadLocalBase&) = delete; + ThreadLocalBase& operator=(const ThreadLocalBase&) = delete; }; // Maps a thread to a set of ThreadLocals that have values instantiated on that @@ -1480,7 +1464,7 @@ class GTEST_API_ ThreadWithParamBase { virtual void Run() = 0; }; - ThreadWithParamBase(Runnable *runnable, Notification* thread_can_start); + ThreadWithParamBase(Runnable* runnable, Notification* thread_can_start); virtual ~ThreadWithParamBase(); private: @@ -1494,30 +1478,26 @@ class ThreadWithParam : public ThreadWithParamBase { typedef void UserThreadFunc(T); ThreadWithParam(UserThreadFunc* func, T param, Notification* thread_can_start) - : ThreadWithParamBase(new RunnableImpl(func, param), thread_can_start) { - } + : ThreadWithParamBase(new RunnableImpl(func, param), thread_can_start) {} virtual ~ThreadWithParam() {} private: class RunnableImpl : public Runnable { public: - RunnableImpl(UserThreadFunc* func, T param) - : func_(func), - param_(param) { - } + RunnableImpl(UserThreadFunc* func, T param) : func_(func), param_(param) {} virtual ~RunnableImpl() {} - virtual void Run() { - func_(param_); - } + virtual void Run() { func_(param_); } private: UserThreadFunc* const func_; const T param_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(RunnableImpl); + RunnableImpl(const RunnableImpl&) = delete; + RunnableImpl& operator=(const RunnableImpl&) = delete; }; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam); + ThreadWithParam(const ThreadWithParam&) = delete; + ThreadWithParam& operator=(const ThreadWithParam&) = delete; }; // Implements thread-local storage on Windows systems. @@ -1554,7 +1534,7 @@ class ThreadLocal : public ThreadLocalBase { explicit ThreadLocal(const T& value) : default_factory_(new InstanceValueHolderFactory(value)) {} - ~ThreadLocal() { ThreadLocalRegistry::OnThreadLocalDestroyed(this); } + ~ThreadLocal() override { ThreadLocalRegistry::OnThreadLocalDestroyed(this); } T* pointer() { return GetOrCreateValue(); } const T* pointer() const { return GetOrCreateValue(); } @@ -1573,16 +1553,17 @@ class ThreadLocal : public ThreadLocalBase { private: T value_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder); + ValueHolder(const ValueHolder&) = delete; + ValueHolder& operator=(const ValueHolder&) = delete; }; - T* GetOrCreateValue() const { return static_cast<ValueHolder*>( - ThreadLocalRegistry::GetValueOnCurrentThread(this))->pointer(); + ThreadLocalRegistry::GetValueOnCurrentThread(this)) + ->pointer(); } - virtual ThreadLocalValueHolderBase* NewValueForCurrentThread() const { + ThreadLocalValueHolderBase* NewValueForCurrentThread() const override { return default_factory_->MakeNewHolder(); } @@ -1593,37 +1574,43 @@ class ThreadLocal : public ThreadLocalBase { virtual ValueHolder* MakeNewHolder() const = 0; private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolderFactory); + ValueHolderFactory(const ValueHolderFactory&) = delete; + ValueHolderFactory& operator=(const ValueHolderFactory&) = delete; }; class DefaultValueHolderFactory : public ValueHolderFactory { public: DefaultValueHolderFactory() {} - virtual ValueHolder* MakeNewHolder() const { return new ValueHolder(); } + ValueHolder* MakeNewHolder() const override { return new ValueHolder(); } private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultValueHolderFactory); + DefaultValueHolderFactory(const DefaultValueHolderFactory&) = delete; + DefaultValueHolderFactory& operator=(const DefaultValueHolderFactory&) = + delete; }; class InstanceValueHolderFactory : public ValueHolderFactory { public: explicit InstanceValueHolderFactory(const T& value) : value_(value) {} - virtual ValueHolder* MakeNewHolder() const { + ValueHolder* MakeNewHolder() const override { return new ValueHolder(value_); } private: const T value_; // The value for each thread. - GTEST_DISALLOW_COPY_AND_ASSIGN_(InstanceValueHolderFactory); + InstanceValueHolderFactory(const InstanceValueHolderFactory&) = delete; + InstanceValueHolderFactory& operator=(const InstanceValueHolderFactory&) = + delete; }; std::unique_ptr<ValueHolderFactory> default_factory_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal); + ThreadLocal(const ThreadLocal&) = delete; + ThreadLocal& operator=(const ThreadLocal&) = delete; }; -# elif GTEST_HAS_PTHREAD +#elif GTEST_HAS_PTHREAD // MutexBase and Mutex implement mutex on pthreads-based platforms. class MutexBase { @@ -1670,8 +1657,8 @@ class MutexBase { }; // Forward-declares a static mutex. -# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ - extern ::testing::internal::MutexBase mutex +#define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ + extern ::testing::internal::MutexBase mutex // Defines and statically (i.e. at link time) initializes a static mutex. // The initialization list here does not explicitly initialize each field, @@ -1690,12 +1677,11 @@ class Mutex : public MutexBase { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, nullptr)); has_owner_ = false; } - ~Mutex() { - GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_)); - } + ~Mutex() { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_)); } private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex); + Mutex(const Mutex&) = delete; + Mutex& operator=(const Mutex&) = delete; }; // We cannot name this class MutexLock because the ctor declaration would @@ -1705,15 +1691,15 @@ class Mutex : public MutexBase { // "MutexLock l(&mu)". Hence the typedef trick below. class GTestMutexLock { public: - explicit GTestMutexLock(MutexBase* mutex) - : mutex_(mutex) { mutex_->Lock(); } + explicit GTestMutexLock(MutexBase* mutex) : mutex_(mutex) { mutex_->Lock(); } ~GTestMutexLock() { mutex_->Unlock(); } private: MutexBase* const mutex_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestMutexLock); + GTestMutexLock(const GTestMutexLock&) = delete; + GTestMutexLock& operator=(const GTestMutexLock&) = delete; }; typedef GTestMutexLock MutexLock; @@ -1770,7 +1756,8 @@ class GTEST_API_ ThreadLocal { private: T value_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder); + ValueHolder(const ValueHolder&) = delete; + ValueHolder& operator=(const ValueHolder&) = delete; }; static pthread_key_t CreateKey() { @@ -1802,39 +1789,45 @@ class GTEST_API_ ThreadLocal { virtual ValueHolder* MakeNewHolder() const = 0; private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolderFactory); + ValueHolderFactory(const ValueHolderFactory&) = delete; + ValueHolderFactory& operator=(const ValueHolderFactory&) = delete; }; class DefaultValueHolderFactory : public ValueHolderFactory { public: DefaultValueHolderFactory() {} - virtual ValueHolder* MakeNewHolder() const { return new ValueHolder(); } + ValueHolder* MakeNewHolder() const override { return new ValueHolder(); } private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultValueHolderFactory); + DefaultValueHolderFactory(const DefaultValueHolderFactory&) = delete; + DefaultValueHolderFactory& operator=(const DefaultValueHolderFactory&) = + delete; }; class InstanceValueHolderFactory : public ValueHolderFactory { public: explicit InstanceValueHolderFactory(const T& value) : value_(value) {} - virtual ValueHolder* MakeNewHolder() const { + ValueHolder* MakeNewHolder() const override { return new ValueHolder(value_); } private: const T value_; // The value for each thread. - GTEST_DISALLOW_COPY_AND_ASSIGN_(InstanceValueHolderFactory); + InstanceValueHolderFactory(const InstanceValueHolderFactory&) = delete; + InstanceValueHolderFactory& operator=(const InstanceValueHolderFactory&) = + delete; }; // A key pthreads uses for looking up per-thread values. const pthread_key_t key_; std::unique_ptr<ValueHolderFactory> default_factory_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal); + ThreadLocal(const ThreadLocal&) = delete; + ThreadLocal& operator=(const ThreadLocal&) = delete; }; -# endif // GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ +#endif // GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ #else // GTEST_IS_THREADSAFE @@ -1851,10 +1844,10 @@ class Mutex { void AssertHeld() const {} }; -# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ +#define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ extern ::testing::internal::Mutex mutex -# define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex +#define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex // We cannot name this class MutexLock because the ctor declaration would // conflict with a macro named MutexLock, which is defined on some @@ -1877,6 +1870,7 @@ class GTEST_API_ ThreadLocal { const T* pointer() const { return &value_; } const T& get() const { return value_; } void set(const T& value) { value_ = value; } + private: T value_; }; @@ -1887,18 +1881,12 @@ class GTEST_API_ ThreadLocal { // we cannot detect it. GTEST_API_ size_t GetThreadCount(); -template <bool B> -using bool_constant = std::integral_constant<bool, B>; - #if GTEST_OS_WINDOWS -# define GTEST_PATH_SEP_ "\\" -# define GTEST_HAS_ALT_PATH_SEP_ 1 -// The biggest signed integer type the compiler supports. -typedef __int64 BiggestInt; +#define GTEST_PATH_SEP_ "\\" +#define GTEST_HAS_ALT_PATH_SEP_ 1 #else -# define GTEST_PATH_SEP_ "/" -# define GTEST_HAS_ALT_PATH_SEP_ 0 -typedef long long BiggestInt; // NOLINT +#define GTEST_PATH_SEP_ "/" +#define GTEST_HAS_ALT_PATH_SEP_ 0 #endif // GTEST_OS_WINDOWS // Utilities for char. @@ -1929,6 +1917,19 @@ inline bool IsUpper(char ch) { inline bool IsXDigit(char ch) { return isxdigit(static_cast<unsigned char>(ch)) != 0; } +#ifdef __cpp_char8_t +inline bool IsXDigit(char8_t ch) { + return isxdigit(static_cast<unsigned char>(ch)) != 0; +} +#endif +inline bool IsXDigit(char16_t ch) { + const unsigned char low_byte = static_cast<unsigned char>(ch); + return ch == low_byte && isxdigit(low_byte) != 0; +} +inline bool IsXDigit(char32_t ch) { + const unsigned char low_byte = static_cast<unsigned char>(ch); + return ch == low_byte && isxdigit(low_byte) != 0; +} inline bool IsXDigit(wchar_t ch) { const unsigned char low_byte = static_cast<unsigned char>(ch); return ch == low_byte && isxdigit(low_byte) != 0; @@ -1943,8 +1944,7 @@ inline char ToUpper(char ch) { inline std::string StripTrailingSpaces(std::string str) { std::string::iterator it = str.end(); - while (it != str.begin() && IsSpace(*--it)) - it = str.erase(it); + while (it != str.begin() && IsSpace(*--it)) it = str.erase(it); return str; } @@ -1962,43 +1962,58 @@ namespace posix { typedef struct _stat StatStruct; -# ifdef __BORLANDC__ -inline int IsATTY(int fd) { return isatty(fd); } +#ifdef __BORLANDC__ +inline int DoIsATTY(int fd) { return isatty(fd); } inline int StrCaseCmp(const char* s1, const char* s2) { return stricmp(s1, s2); } inline char* StrDup(const char* src) { return strdup(src); } -# else // !__BORLANDC__ -# if GTEST_OS_WINDOWS_MOBILE -inline int IsATTY(int /* fd */) { return 0; } -# else -inline int IsATTY(int fd) { return _isatty(fd); } -# endif // GTEST_OS_WINDOWS_MOBILE +#else // !__BORLANDC__ +#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_ZOS || GTEST_OS_IOS || \ + GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT || defined(ESP_PLATFORM) +inline int DoIsATTY(int /* fd */) { return 0; } +#else +inline int DoIsATTY(int fd) { return _isatty(fd); } +#endif // GTEST_OS_WINDOWS_MOBILE inline int StrCaseCmp(const char* s1, const char* s2) { return _stricmp(s1, s2); } inline char* StrDup(const char* src) { return _strdup(src); } -# endif // __BORLANDC__ +#endif // __BORLANDC__ -# if GTEST_OS_WINDOWS_MOBILE +#if GTEST_OS_WINDOWS_MOBILE inline int FileNo(FILE* file) { return reinterpret_cast<int>(_fileno(file)); } // Stat(), RmDir(), and IsDir() are not needed on Windows CE at this // time and thus not defined there. -# else +#else inline int FileNo(FILE* file) { return _fileno(file); } inline int Stat(const char* path, StatStruct* buf) { return _stat(path, buf); } inline int RmDir(const char* dir) { return _rmdir(dir); } -inline bool IsDir(const StatStruct& st) { - return (_S_IFDIR & st.st_mode) != 0; +inline bool IsDir(const StatStruct& st) { return (_S_IFDIR & st.st_mode) != 0; } +#endif // GTEST_OS_WINDOWS_MOBILE + +#elif GTEST_OS_ESP8266 +typedef struct stat StatStruct; + +inline int FileNo(FILE* file) { return fileno(file); } +inline int DoIsATTY(int fd) { return isatty(fd); } +inline int Stat(const char* path, StatStruct* buf) { + // stat function not implemented on ESP8266 + return 0; +} +inline int StrCaseCmp(const char* s1, const char* s2) { + return strcasecmp(s1, s2); } -# endif // GTEST_OS_WINDOWS_MOBILE +inline char* StrDup(const char* src) { return strdup(src); } +inline int RmDir(const char* dir) { return rmdir(dir); } +inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } #else typedef struct stat StatStruct; inline int FileNo(FILE* file) { return fileno(file); } -inline int IsATTY(int fd) { return isatty(fd); } +inline int DoIsATTY(int fd) { return isatty(fd); } inline int Stat(const char* path, StatStruct* buf) { return stat(path, buf); } inline int StrCaseCmp(const char* s1, const char* s2) { return strcasecmp(s1, s2); @@ -2009,26 +2024,42 @@ inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } #endif // GTEST_OS_WINDOWS +inline int IsATTY(int fd) { + // DoIsATTY might change errno (for example ENOTTY in case you redirect stdout + // to a file on Linux), which is unexpected, so save the previous value, and + // restore it after the call. + int savedErrno = errno; + int isAttyValue = DoIsATTY(fd); + errno = savedErrno; + + return isAttyValue; +} + // Functions deprecated by MSVC 8.0. GTEST_DISABLE_MSC_DEPRECATED_PUSH_() -inline const char* StrNCpy(char* dest, const char* src, size_t n) { - return strncpy(dest, src, n); -} - // ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and // StrError() aren't needed on Windows CE at this time and thus not // defined there. -#if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT +#if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && \ + !GTEST_OS_WINDOWS_RT && !GTEST_OS_ESP8266 && !GTEST_OS_XTENSA inline int ChDir(const char* dir) { return chdir(dir); } #endif inline FILE* FOpen(const char* path, const char* mode) { +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW + struct wchar_codecvt : public std::codecvt<wchar_t, char, std::mbstate_t> {}; + std::wstring_convert<wchar_codecvt> converter; + std::wstring wide_path = converter.from_bytes(path); + std::wstring wide_mode = converter.from_bytes(mode); + return _wfopen(wide_path.c_str(), wide_mode.c_str()); +#else // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW return fopen(path, mode); +#endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW } #if !GTEST_OS_WINDOWS_MOBILE -inline FILE *FReopen(const char* path, const char* mode, FILE* stream) { +inline FILE* FReopen(const char* path, const char* mode, FILE* stream) { return freopen(path, mode, stream); } inline FILE* FDOpen(int fd, const char* mode) { return fdopen(fd, mode); } @@ -2045,8 +2076,9 @@ inline int Close(int fd) { return close(fd); } inline const char* StrError(int errnum) { return strerror(errnum); } #endif inline const char* GetEnv(const char* name) { -#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT - // We are on Windows CE, which has no environment variables. +#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \ + GTEST_OS_WINDOWS_RT || GTEST_OS_ESP8266 || GTEST_OS_XTENSA + // We are on an embedded platform, which has no environment variables. static_cast<void>(name); // To prevent 'unused argument' warning. return nullptr; #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) @@ -2079,24 +2111,22 @@ GTEST_DISABLE_MSC_DEPRECATED_POP_() // snprintf is a variadic function. #if _MSC_VER && !GTEST_OS_WINDOWS_MOBILE // MSVC 2005 and above support variadic macros. -# define GTEST_SNPRINTF_(buffer, size, format, ...) \ - _snprintf_s(buffer, size, size, format, __VA_ARGS__) +#define GTEST_SNPRINTF_(buffer, size, format, ...) \ + _snprintf_s(buffer, size, size, format, __VA_ARGS__) #elif defined(_MSC_VER) // Windows CE does not define _snprintf_s -# define GTEST_SNPRINTF_ _snprintf +#define GTEST_SNPRINTF_ _snprintf #else -# define GTEST_SNPRINTF_ snprintf +#define GTEST_SNPRINTF_ snprintf #endif -// The maximum number a BiggestInt can represent. This definition -// works no matter BiggestInt is represented in one's complement or -// two's complement. +// The biggest signed integer type the compiler supports. // -// We cannot rely on numeric_limits in STL, as __int64 and long long -// are not part of standard C++ and numeric_limits doesn't need to be -// defined for them. -const BiggestInt kMaxBiggestInt = - ~(static_cast<BiggestInt>(1) << (8*sizeof(BiggestInt) - 1)); +// long long is guaranteed to be at least 64-bits in C++11. +using BiggestInt = long long; // NOLINT + +// The maximum number a BiggestInt can represent. +constexpr BiggestInt kMaxBiggestInt = (std::numeric_limits<BiggestInt>::max)(); // This template class serves as a compile-time function from size to // type. It maps a size in bytes to a primitive type with that @@ -2121,87 +2151,122 @@ class TypeWithSize { public: // This prevents the user from using TypeWithSize<N> with incorrect // values of N. - typedef void UInt; + using UInt = void; }; // The specialization for size 4. template <> class TypeWithSize<4> { public: - // unsigned int has size 4 in both gcc and MSVC. - // - // As base/basictypes.h doesn't compile on Windows, we cannot use - // uint32, uint64, and etc here. - typedef int Int; - typedef unsigned int UInt; + using Int = std::int32_t; + using UInt = std::uint32_t; }; // The specialization for size 8. template <> class TypeWithSize<8> { public: -#if GTEST_OS_WINDOWS - typedef __int64 Int; - typedef unsigned __int64 UInt; -#else - typedef long long Int; // NOLINT - typedef unsigned long long UInt; // NOLINT -#endif // GTEST_OS_WINDOWS + using Int = std::int64_t; + using UInt = std::uint64_t; }; // Integer types of known sizes. -typedef TypeWithSize<4>::Int Int32; -typedef TypeWithSize<4>::UInt UInt32; -typedef TypeWithSize<8>::Int Int64; -typedef TypeWithSize<8>::UInt UInt64; -typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. +using TimeInMillis = int64_t; // Represents time in milliseconds. // Utilities for command line flags and environment variables. // Macro for referencing flags. #if !defined(GTEST_FLAG) -# define GTEST_FLAG(name) FLAGS_gtest_##name +#define GTEST_FLAG_NAME_(name) gtest_##name +#define GTEST_FLAG(name) FLAGS_gtest_##name #endif // !defined(GTEST_FLAG) -#if !defined(GTEST_USE_OWN_FLAGFILE_FLAG_) -# define GTEST_USE_OWN_FLAGFILE_FLAG_ 1 -#endif // !defined(GTEST_USE_OWN_FLAGFILE_FLAG_) +// Pick a command line flags implementation. +#if GTEST_HAS_ABSL -#if !defined(GTEST_DECLARE_bool_) -# define GTEST_FLAG_SAVER_ ::testing::internal::GTestFlagSaver +// Macros for defining flags. +#define GTEST_DEFINE_bool_(name, default_val, doc) \ + ABSL_FLAG(bool, GTEST_FLAG_NAME_(name), default_val, doc) +#define GTEST_DEFINE_int32_(name, default_val, doc) \ + ABSL_FLAG(int32_t, GTEST_FLAG_NAME_(name), default_val, doc) +#define GTEST_DEFINE_string_(name, default_val, doc) \ + ABSL_FLAG(std::string, GTEST_FLAG_NAME_(name), default_val, doc) // Macros for declaring flags. -# define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name) -# define GTEST_DECLARE_int32_(name) \ - GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name) -# define GTEST_DECLARE_string_(name) \ - GTEST_API_ extern ::std::string GTEST_FLAG(name) +#define GTEST_DECLARE_bool_(name) \ + ABSL_DECLARE_FLAG(bool, GTEST_FLAG_NAME_(name)) +#define GTEST_DECLARE_int32_(name) \ + ABSL_DECLARE_FLAG(int32_t, GTEST_FLAG_NAME_(name)) +#define GTEST_DECLARE_string_(name) \ + ABSL_DECLARE_FLAG(std::string, GTEST_FLAG_NAME_(name)) + +#define GTEST_FLAG_SAVER_ ::absl::FlagSaver + +#define GTEST_FLAG_GET(name) ::absl::GetFlag(GTEST_FLAG(name)) +#define GTEST_FLAG_SET(name, value) \ + (void)(::absl::SetFlag(>EST_FLAG(name), value)) +#define GTEST_USE_OWN_FLAGFILE_FLAG_ 0 + +#else // GTEST_HAS_ABSL // Macros for defining flags. -# define GTEST_DEFINE_bool_(name, default_val, doc) \ - GTEST_API_ bool GTEST_FLAG(name) = (default_val) -# define GTEST_DEFINE_int32_(name, default_val, doc) \ - GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val) -# define GTEST_DEFINE_string_(name, default_val, doc) \ - GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val) +#define GTEST_DEFINE_bool_(name, default_val, doc) \ + namespace testing { \ + GTEST_API_ bool GTEST_FLAG(name) = (default_val); \ + } \ + static_assert(true, "no-op to require trailing semicolon") +#define GTEST_DEFINE_int32_(name, default_val, doc) \ + namespace testing { \ + GTEST_API_ std::int32_t GTEST_FLAG(name) = (default_val); \ + } \ + static_assert(true, "no-op to require trailing semicolon") +#define GTEST_DEFINE_string_(name, default_val, doc) \ + namespace testing { \ + GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val); \ + } \ + static_assert(true, "no-op to require trailing semicolon") -#endif // !defined(GTEST_DECLARE_bool_) +// Macros for declaring flags. +#define GTEST_DECLARE_bool_(name) \ + namespace testing { \ + GTEST_API_ extern bool GTEST_FLAG(name); \ + } \ + static_assert(true, "no-op to require trailing semicolon") +#define GTEST_DECLARE_int32_(name) \ + namespace testing { \ + GTEST_API_ extern std::int32_t GTEST_FLAG(name); \ + } \ + static_assert(true, "no-op to require trailing semicolon") +#define GTEST_DECLARE_string_(name) \ + namespace testing { \ + GTEST_API_ extern ::std::string GTEST_FLAG(name); \ + } \ + static_assert(true, "no-op to require trailing semicolon") + +#define GTEST_FLAG_SAVER_ ::testing::internal::GTestFlagSaver + +#define GTEST_FLAG_GET(name) ::testing::GTEST_FLAG(name) +#define GTEST_FLAG_SET(name, value) (void)(::testing::GTEST_FLAG(name) = value) +#define GTEST_USE_OWN_FLAGFILE_FLAG_ 1 + +#endif // GTEST_HAS_ABSL // Thread annotations #if !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_) -# define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) -# define GTEST_LOCK_EXCLUDED_(locks) +#define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) +#define GTEST_LOCK_EXCLUDED_(locks) #endif // !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_) // Parses 'str' for a 32-bit signed integer. If successful, writes the result // to *value and returns true; otherwise leaves *value unchanged and returns // false. -bool ParseInt32(const Message& src_text, const char* str, Int32* value); +GTEST_API_ bool ParseInt32(const Message& src_text, const char* str, + int32_t* value); -// Parses a bool/Int32/string from the environment variable +// Parses a bool/int32_t/string from the environment variable // corresponding to the given Google Test flag. bool BoolFromGTestEnv(const char* flag, bool default_val); -GTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val); +GTEST_API_ int32_t Int32FromGTestEnv(const char* flag, int32_t default_val); std::string OutputFlagAlsoCheckEnvVar(); const char* StringFromGTestEnv(const char* flag, const char* default_val); @@ -2228,4 +2293,121 @@ const char* StringFromGTestEnv(const char* flag, const char* default_val); #endif // !defined(GTEST_INTERNAL_DEPRECATED) -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ +#if GTEST_HAS_ABSL +// Always use absl::any for UniversalPrinter<> specializations if googletest +// is built with absl support. +#define GTEST_INTERNAL_HAS_ANY 1 +#include "absl/types/any.h" +namespace testing { +namespace internal { +using Any = ::absl::any; +} // namespace internal +} // namespace testing +#else +#ifdef __has_include +#if __has_include(<any>) && __cplusplus >= 201703L +// Otherwise for C++17 and higher use std::any for UniversalPrinter<> +// specializations. +#define GTEST_INTERNAL_HAS_ANY 1 +#include <any> +namespace testing { +namespace internal { +using Any = ::std::any; +} // namespace internal +} // namespace testing +// The case where absl is configured NOT to alias std::any is not +// supported. +#endif // __has_include(<any>) && __cplusplus >= 201703L +#endif // __has_include +#endif // GTEST_HAS_ABSL + +#if GTEST_HAS_ABSL +// Always use absl::optional for UniversalPrinter<> specializations if +// googletest is built with absl support. +#define GTEST_INTERNAL_HAS_OPTIONAL 1 +#include "absl/types/optional.h" +namespace testing { +namespace internal { +template <typename T> +using Optional = ::absl::optional<T>; +inline ::absl::nullopt_t Nullopt() { return ::absl::nullopt; } +} // namespace internal +} // namespace testing +#else +#ifdef __has_include +#if __has_include(<optional>) && __cplusplus >= 201703L +// Otherwise for C++17 and higher use std::optional for UniversalPrinter<> +// specializations. +#define GTEST_INTERNAL_HAS_OPTIONAL 1 +#include <optional> +namespace testing { +namespace internal { +template <typename T> +using Optional = ::std::optional<T>; +inline ::std::nullopt_t Nullopt() { return ::std::nullopt; } +} // namespace internal +} // namespace testing +// The case where absl is configured NOT to alias std::optional is not +// supported. +#endif // __has_include(<optional>) && __cplusplus >= 201703L +#endif // __has_include +#endif // GTEST_HAS_ABSL + +#if GTEST_HAS_ABSL +// Always use absl::string_view for Matcher<> specializations if googletest +// is built with absl support. +#define GTEST_INTERNAL_HAS_STRING_VIEW 1 +#include "absl/strings/string_view.h" +namespace testing { +namespace internal { +using StringView = ::absl::string_view; +} // namespace internal +} // namespace testing +#else +#ifdef __has_include +#if __has_include(<string_view>) && __cplusplus >= 201703L +// Otherwise for C++17 and higher use std::string_view for Matcher<> +// specializations. +#define GTEST_INTERNAL_HAS_STRING_VIEW 1 +#include <string_view> +namespace testing { +namespace internal { +using StringView = ::std::string_view; +} // namespace internal +} // namespace testing +// The case where absl is configured NOT to alias std::string_view is not +// supported. +#endif // __has_include(<string_view>) && __cplusplus >= 201703L +#endif // __has_include +#endif // GTEST_HAS_ABSL + +#if GTEST_HAS_ABSL +// Always use absl::variant for UniversalPrinter<> specializations if googletest +// is built with absl support. +#define GTEST_INTERNAL_HAS_VARIANT 1 +#include "absl/types/variant.h" +namespace testing { +namespace internal { +template <typename... T> +using Variant = ::absl::variant<T...>; +} // namespace internal +} // namespace testing +#else +#ifdef __has_include +#if __has_include(<variant>) && __cplusplus >= 201703L +// Otherwise for C++17 and higher use std::variant for UniversalPrinter<> +// specializations. +#define GTEST_INTERNAL_HAS_VARIANT 1 +#include <variant> +namespace testing { +namespace internal { +template <typename... T> +using Variant = ::std::variant<T...>; +} // namespace internal +} // namespace testing +// The case where absl is configured NOT to alias std::variant is not supported. +#endif // __has_include(<variant>) && __cplusplus >= 201703L +#endif // __has_include +#endif // GTEST_HAS_ABSL + +#endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ diff --git a/test/gtest/include/gtest/internal/gtest-string.h b/test/gtest_vendor/include/gtest/internal/gtest-string.h similarity index 89% rename from test/gtest/include/gtest/internal/gtest-string.h rename to test/gtest_vendor/include/gtest/internal/gtest-string.h index 82aaa63bf..cca2e1f2a 100644 --- a/test/gtest/include/gtest/internal/gtest-string.h +++ b/test/gtest_vendor/include/gtest/internal/gtest-string.h @@ -26,7 +26,7 @@ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// + // The Google C++ Testing and Mocking Framework (Google Test) // // This header file declares the String class and functions used internally by @@ -36,17 +36,21 @@ // This header file is #included by gtest-internal.h. // It should not be #included by other files. -// GOOGLETEST_CM0001 DO NOT DELETE +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* -#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ -#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ +#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ +#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ #ifdef __BORLANDC__ // string.h is not guaranteed to provide strcpy on C++ Builder. -# include <mem.h> +#include <mem.h> #endif #include <string.h> + +#include <cstdint> #include <string> #include "gtest/internal/gtest-port.h" @@ -122,8 +126,7 @@ class GTEST_API_ String { // Unlike strcasecmp(), this function can handle NULL argument(s). // A NULL C string is considered different to any non-NULL C string, // including the empty string. - static bool CaseInsensitiveCStringEquals(const char* lhs, - const char* rhs); + static bool CaseInsensitiveCStringEquals(const char* lhs, const char* rhs); // Compares two wide C strings, ignoring case. Returns true if and only if // they have the same content. @@ -142,24 +145,27 @@ class GTEST_API_ String { // Returns true if and only if the given string ends with the given suffix, // ignoring case. Any string is considered to end with an empty suffix. - static bool EndsWithCaseInsensitive( - const std::string& str, const std::string& suffix); + static bool EndsWithCaseInsensitive(const std::string& str, + const std::string& suffix); // Formats an int value as "%02d". static std::string FormatIntWidth2(int value); // "%02d" for width == 2 + // Formats an int value to given width with leading zeros. + static std::string FormatIntWidthN(int value, int width); + // Formats an int value as "%X". static std::string FormatHexInt(int value); // Formats an int value as "%X". - static std::string FormatHexUInt32(UInt32 value); + static std::string FormatHexUInt32(uint32_t value); // Formats a byte as "%02X". static std::string FormatByte(unsigned char value); private: String(); // Not meant to be instantiated. -}; // class String +}; // class String // Gets the content of the stringstream's buffer as an std::string. Each '\0' // character in the buffer is replaced with "\\0". @@ -168,4 +174,4 @@ GTEST_API_ std::string StringStreamToString(::std::stringstream* stream); } // namespace internal } // namespace testing -#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ +#endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_ diff --git a/test/gtest_vendor/include/gtest/internal/gtest-type-util.h b/test/gtest_vendor/include/gtest/internal/gtest-type-util.h new file mode 100644 index 000000000..6bc02a7de --- /dev/null +++ b/test/gtest_vendor/include/gtest/internal/gtest-type-util.h @@ -0,0 +1,186 @@ +// Copyright 2008 Google Inc. +// All Rights Reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Type utilities needed for implementing typed and type-parameterized +// tests. + +// IWYU pragma: private, include "gtest/gtest.h" +// IWYU pragma: friend gtest/.* +// IWYU pragma: friend gmock/.* + +#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ +#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ + +#include "gtest/internal/gtest-port.h" + +// #ifdef __GNUC__ is too general here. It is possible to use gcc without using +// libstdc++ (which is where cxxabi.h comes from). +#if GTEST_HAS_CXXABI_H_ +#include <cxxabi.h> +#elif defined(__HP_aCC) +#include <acxx_demangle.h> +#endif // GTEST_HASH_CXXABI_H_ + +namespace testing { +namespace internal { + +// Canonicalizes a given name with respect to the Standard C++ Library. +// This handles removing the inline namespace within `std` that is +// used by various standard libraries (e.g., `std::__1`). Names outside +// of namespace std are returned unmodified. +inline std::string CanonicalizeForStdLibVersioning(std::string s) { + static const char prefix[] = "std::__"; + if (s.compare(0, strlen(prefix), prefix) == 0) { + std::string::size_type end = s.find("::", strlen(prefix)); + if (end != s.npos) { + // Erase everything between the initial `std` and the second `::`. + s.erase(strlen("std"), end - strlen("std")); + } + } + return s; +} + +#if GTEST_HAS_RTTI +// GetTypeName(const std::type_info&) returns a human-readable name of type T. +inline std::string GetTypeName(const std::type_info& type) { + const char* const name = type.name(); +#if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC) + int status = 0; + // gcc's implementation of typeid(T).name() mangles the type name, + // so we have to demangle it. +#if GTEST_HAS_CXXABI_H_ + using abi::__cxa_demangle; +#endif // GTEST_HAS_CXXABI_H_ + char* const readable_name = __cxa_demangle(name, nullptr, nullptr, &status); + const std::string name_str(status == 0 ? readable_name : name); + free(readable_name); + return CanonicalizeForStdLibVersioning(name_str); +#else + return name; +#endif // GTEST_HAS_CXXABI_H_ || __HP_aCC +} +#endif // GTEST_HAS_RTTI + +// GetTypeName<T>() returns a human-readable name of type T if and only if +// RTTI is enabled, otherwise it returns a dummy type name. +// NB: This function is also used in Google Mock, so don't move it inside of +// the typed-test-only section below. +template <typename T> +std::string GetTypeName() { +#if GTEST_HAS_RTTI + return GetTypeName(typeid(T)); +#else + return "<type>"; +#endif // GTEST_HAS_RTTI +} + +// A unique type indicating an empty node +struct None {}; + +#define GTEST_TEMPLATE_ \ + template <typename T> \ + class + +// The template "selector" struct TemplateSel<Tmpl> is used to +// represent Tmpl, which must be a class template with one type +// parameter, as a type. TemplateSel<Tmpl>::Bind<T>::type is defined +// as the type Tmpl<T>. This allows us to actually instantiate the +// template "selected" by TemplateSel<Tmpl>. +// +// This trick is necessary for simulating typedef for class templates, +// which C++ doesn't support directly. +template <GTEST_TEMPLATE_ Tmpl> +struct TemplateSel { + template <typename T> + struct Bind { + typedef Tmpl<T> type; + }; +}; + +#define GTEST_BIND_(TmplSel, T) TmplSel::template Bind<T>::type + +template <GTEST_TEMPLATE_ Head_, GTEST_TEMPLATE_... Tail_> +struct Templates { + using Head = TemplateSel<Head_>; + using Tail = Templates<Tail_...>; +}; + +template <GTEST_TEMPLATE_ Head_> +struct Templates<Head_> { + using Head = TemplateSel<Head_>; + using Tail = None; +}; + +// Tuple-like type lists +template <typename Head_, typename... Tail_> +struct Types { + using Head = Head_; + using Tail = Types<Tail_...>; +}; + +template <typename Head_> +struct Types<Head_> { + using Head = Head_; + using Tail = None; +}; + +// Helper metafunctions to tell apart a single type from types +// generated by ::testing::Types +template <typename... Ts> +struct ProxyTypeList { + using type = Types<Ts...>; +}; + +template <typename> +struct is_proxy_type_list : std::false_type {}; + +template <typename... Ts> +struct is_proxy_type_list<ProxyTypeList<Ts...>> : std::true_type {}; + +// Generator which conditionally creates type lists. +// It recognizes if a requested type list should be created +// and prevents creating a new type list nested within another one. +template <typename T> +struct GenerateTypeList { + private: + using proxy = typename std::conditional<is_proxy_type_list<T>::value, T, + ProxyTypeList<T>>::type; + + public: + using type = typename proxy::type; +}; + +} // namespace internal + +template <typename... Ts> +using Types = internal::ProxyTypeList<Ts...>; + +} // namespace testing + +#endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_ diff --git a/test/gtest/src/gtest-all.cc b/test/gtest_vendor/src/gtest-all.cc similarity index 98% rename from test/gtest/src/gtest-all.cc rename to test/gtest_vendor/src/gtest-all.cc index ad292905c..2a70ed88c 100644 --- a/test/gtest/src/gtest-all.cc +++ b/test/gtest_vendor/src/gtest-all.cc @@ -38,7 +38,7 @@ #include "gtest/gtest.h" // The following lines pull in the real gtest *.cc files. -#include "src/gtest.cc" +#include "src/gtest-assertion-result.cc" #include "src/gtest-death-test.cc" #include "src/gtest-filepath.cc" #include "src/gtest-matchers.cc" @@ -46,3 +46,4 @@ #include "src/gtest-printers.cc" #include "src/gtest-test-part.cc" #include "src/gtest-typed-test.cc" +#include "src/gtest.cc" diff --git a/test/gtest_vendor/src/gtest-assertion-result.cc b/test/gtest_vendor/src/gtest-assertion-result.cc new file mode 100644 index 000000000..f1c0b10dc --- /dev/null +++ b/test/gtest_vendor/src/gtest-assertion-result.cc @@ -0,0 +1,77 @@ +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// The Google C++ Testing and Mocking Framework (Google Test) +// +// This file defines the AssertionResult type. + +#include "gtest/gtest-assertion-result.h" + +#include <string> +#include <utility> + +#include "gtest/gtest-message.h" + +namespace testing { + +// AssertionResult constructors. +// Used in EXPECT_TRUE/FALSE(assertion_result). +AssertionResult::AssertionResult(const AssertionResult& other) + : success_(other.success_), + message_(other.message_.get() != nullptr + ? new ::std::string(*other.message_) + : static_cast< ::std::string*>(nullptr)) {} + +// Swaps two AssertionResults. +void AssertionResult::swap(AssertionResult& other) { + using std::swap; + swap(success_, other.success_); + swap(message_, other.message_); +} + +// Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. +AssertionResult AssertionResult::operator!() const { + AssertionResult negation(!success_); + if (message_.get() != nullptr) negation << *message_; + return negation; +} + +// Makes a successful assertion result. +AssertionResult AssertionSuccess() { return AssertionResult(true); } + +// Makes a failed assertion result. +AssertionResult AssertionFailure() { return AssertionResult(false); } + +// Makes a failed assertion result with the given failure message. +// Deprecated; use AssertionFailure() << message. +AssertionResult AssertionFailure(const Message& message) { + return AssertionFailure() << message; +} + +} // namespace testing diff --git a/test/gtest/src/gtest-death-test.cc b/test/gtest_vendor/src/gtest-death-test.cc similarity index 80% rename from test/gtest/src/gtest-death-test.cc rename to test/gtest_vendor/src/gtest-death-test.cc index da09a1cfc..e6abc6278 100644 --- a/test/gtest/src/gtest-death-test.cc +++ b/test/gtest_vendor/src/gtest-death-test.cc @@ -32,51 +32,52 @@ #include "gtest/gtest-death-test.h" +#include <functional> #include <utility> -#include "gtest/internal/gtest-port.h" #include "gtest/internal/custom/gtest.h" +#include "gtest/internal/gtest-port.h" #if GTEST_HAS_DEATH_TEST -# if GTEST_OS_MAC -# include <crt_externs.h> -# endif // GTEST_OS_MAC - -# include <errno.h> -# include <fcntl.h> -# include <limits.h> - -# if GTEST_OS_LINUX -# include <signal.h> -# endif // GTEST_OS_LINUX - -# include <stdarg.h> - -# if GTEST_OS_WINDOWS -# include <windows.h> -# else -# include <sys/mman.h> -# include <sys/wait.h> -# endif // GTEST_OS_WINDOWS - -# if GTEST_OS_QNX -# include <spawn.h> -# endif // GTEST_OS_QNX - -# if GTEST_OS_FUCHSIA -# include <lib/fdio/fd.h> -# include <lib/fdio/io.h> -# include <lib/fdio/spawn.h> -# include <lib/zx/channel.h> -# include <lib/zx/port.h> -# include <lib/zx/process.h> -# include <lib/zx/socket.h> -# include <zircon/processargs.h> -# include <zircon/syscalls.h> -# include <zircon/syscalls/policy.h> -# include <zircon/syscalls/port.h> -# endif // GTEST_OS_FUCHSIA +#if GTEST_OS_MAC +#include <crt_externs.h> +#endif // GTEST_OS_MAC + +#include <errno.h> +#include <fcntl.h> +#include <limits.h> + +#if GTEST_OS_LINUX +#include <signal.h> +#endif // GTEST_OS_LINUX + +#include <stdarg.h> + +#if GTEST_OS_WINDOWS +#include <windows.h> +#else +#include <sys/mman.h> +#include <sys/wait.h> +#endif // GTEST_OS_WINDOWS + +#if GTEST_OS_QNX +#include <spawn.h> +#endif // GTEST_OS_QNX + +#if GTEST_OS_FUCHSIA +#include <lib/fdio/fd.h> +#include <lib/fdio/io.h> +#include <lib/fdio/spawn.h> +#include <lib/zx/channel.h> +#include <lib/zx/port.h> +#include <lib/zx/process.h> +#include <lib/zx/socket.h> +#include <zircon/processargs.h> +#include <zircon/syscalls.h> +#include <zircon/syscalls/policy.h> +#include <zircon/syscalls/port.h> +#endif // GTEST_OS_FUCHSIA #endif // GTEST_HAS_DEATH_TEST @@ -95,9 +96,12 @@ namespace testing { // used internally at Google, is "threadsafe". static const char kDefaultDeathTestStyle[] = GTEST_DEFAULT_DEATH_TEST_STYLE; +} // namespace testing + GTEST_DEFINE_string_( death_test_style, - internal::StringFromGTestEnv("death_test_style", kDefaultDeathTestStyle), + testing::internal::StringFromGTestEnv("death_test_style", + testing::kDefaultDeathTestStyle), "Indicates how to run a death test in a forked child process: " "\"threadsafe\" (child process re-executes the test binary " "from the beginning, running only the specific death test) or " @@ -106,7 +110,7 @@ GTEST_DEFINE_string_( GTEST_DEFINE_bool_( death_test_use_fork, - internal::BoolFromGTestEnv("death_test_use_fork", false), + testing::internal::BoolFromGTestEnv("death_test_use_fork", false), "Instructs to use fork()/_exit() instead of clone() in death tests. " "Ignored and always uses fork() on POSIX systems where clone() is not " "implemented. Useful when running under valgrind or similar tools if " @@ -116,7 +120,6 @@ GTEST_DEFINE_bool_( "work in 99% of the cases. Once valgrind is fixed, this flag will " "most likely be removed."); -namespace internal { GTEST_DEFINE_string_( internal_run_death_test, "", "Indicates the file, line number, temporal index of " @@ -125,7 +128,8 @@ GTEST_DEFINE_string_( "the '|' characters. This flag is specified if and only if the " "current process is a sub-process launched for running a thread-safe " "death test. FOR INTERNAL USE ONLY."); -} // namespace internal + +namespace testing { #if GTEST_HAS_DEATH_TEST @@ -133,9 +137,9 @@ namespace internal { // Valid only for fast death tests. Indicates the code is running in the // child process of a fast style death test. -# if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA +#if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA static bool g_in_fast_death_test_child = false; -# endif +#endif // Returns a Boolean value indicating whether the caller is currently // executing in the context of the death test child process. Tools such as @@ -143,16 +147,16 @@ static bool g_in_fast_death_test_child = false; // tests. IMPORTANT: This is an internal utility. Using it may break the // implementation of death tests. User code MUST NOT use it. bool InDeathTestChild() { -# if GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA +#if GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA // On Windows and Fuchsia, death tests are thread-safe regardless of the value // of the death_test_style flag. - return !GTEST_FLAG(internal_run_death_test).empty(); + return !GTEST_FLAG_GET(internal_run_death_test).empty(); -# else +#else - if (GTEST_FLAG(death_test_style) == "threadsafe") - return !GTEST_FLAG(internal_run_death_test).empty(); + if (GTEST_FLAG_GET(death_test_style) == "threadsafe") + return !GTEST_FLAG_GET(internal_run_death_test).empty(); else return g_in_fast_death_test_child; #endif @@ -161,40 +165,38 @@ bool InDeathTestChild() { } // namespace internal // ExitedWithCode constructor. -ExitedWithCode::ExitedWithCode(int exit_code) : exit_code_(exit_code) { -} +ExitedWithCode::ExitedWithCode(int exit_code) : exit_code_(exit_code) {} // ExitedWithCode function-call operator. bool ExitedWithCode::operator()(int exit_status) const { -# if GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA +#if GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA return exit_status == exit_code_; -# else +#else return WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == exit_code_; -# endif // GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA +#endif // GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA } -# if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA +#if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA // KilledBySignal constructor. -KilledBySignal::KilledBySignal(int signum) : signum_(signum) { -} +KilledBySignal::KilledBySignal(int signum) : signum_(signum) {} // KilledBySignal function-call operator. bool KilledBySignal::operator()(int exit_status) const { -# if defined(GTEST_KILLED_BY_SIGNAL_OVERRIDE_) +#if defined(GTEST_KILLED_BY_SIGNAL_OVERRIDE_) { bool result; if (GTEST_KILLED_BY_SIGNAL_OVERRIDE_(signum_, exit_status, &result)) { return result; } } -# endif // defined(GTEST_KILLED_BY_SIGNAL_OVERRIDE_) +#endif // defined(GTEST_KILLED_BY_SIGNAL_OVERRIDE_) return WIFSIGNALED(exit_status) && WTERMSIG(exit_status) == signum_; } -# endif // !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA +#endif // !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA namespace internal { @@ -205,23 +207,23 @@ namespace internal { static std::string ExitSummary(int exit_code) { Message m; -# if GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA +#if GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA m << "Exited with exit status " << exit_code; -# else +#else if (WIFEXITED(exit_code)) { m << "Exited with exit status " << WEXITSTATUS(exit_code); } else if (WIFSIGNALED(exit_code)) { m << "Terminated by signal " << WTERMSIG(exit_code); } -# ifdef WCOREDUMP +#ifdef WCOREDUMP if (WCOREDUMP(exit_code)) { m << " (core dumped)"; } -# endif -# endif // GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA +#endif +#endif // GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA return m.GetString(); } @@ -232,7 +234,7 @@ bool ExitedUnsuccessfully(int exit_status) { return !ExitedWithCode(0)(exit_status); } -# if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA +#if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA // Generates a textual failure message when a death test finds more than // one thread running, or cannot determine the number of threads, prior // to executing the given statement. It is the responsibility of the @@ -247,13 +249,13 @@ static std::string DeathTestThreadWarning(size_t thread_count) { msg << "detected " << thread_count << " threads."; } msg << " See " - "https://github.com/google/googletest/blob/master/googletest/docs/" + "https://github.com/google/googletest/blob/master/docs/" "advanced.md#death-tests-and-threads" << " for more explanation and suggested solutions, especially if" << " this is the last message you see before your test times out."; return msg.GetString(); } -# endif // !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA +#endif // !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA // Flag characters for reporting a death test that did not die. static const char kDeathTestLived = 'L'; @@ -303,14 +305,14 @@ static void DeathTestAbort(const std::string& message) { // A replacement for CHECK that calls DeathTestAbort if the assertion // fails. -# define GTEST_DEATH_TEST_CHECK_(expression) \ - do { \ - if (!::testing::internal::IsTrue(expression)) { \ - DeathTestAbort( \ - ::std::string("CHECK failed: File ") + __FILE__ + ", line " \ - + ::testing::internal::StreamableToString(__LINE__) + ": " \ - + #expression); \ - } \ +#define GTEST_DEATH_TEST_CHECK_(expression) \ + do { \ + if (!::testing::internal::IsTrue(expression)) { \ + DeathTestAbort(::std::string("CHECK failed: File ") + __FILE__ + \ + ", line " + \ + ::testing::internal::StreamableToString(__LINE__) + \ + ": " + #expression); \ + } \ } while (::testing::internal::AlwaysFalse()) // This macro is similar to GTEST_DEATH_TEST_CHECK_, but it is meant for @@ -320,23 +322,23 @@ static void DeathTestAbort(const std::string& message) { // evaluates the expression as long as it evaluates to -1 and sets // errno to EINTR. If the expression evaluates to -1 but errno is // something other than EINTR, DeathTestAbort is called. -# define GTEST_DEATH_TEST_CHECK_SYSCALL_(expression) \ - do { \ - int gtest_retval; \ - do { \ - gtest_retval = (expression); \ - } while (gtest_retval == -1 && errno == EINTR); \ - if (gtest_retval == -1) { \ - DeathTestAbort( \ - ::std::string("CHECK failed: File ") + __FILE__ + ", line " \ - + ::testing::internal::StreamableToString(__LINE__) + ": " \ - + #expression + " != -1"); \ - } \ +#define GTEST_DEATH_TEST_CHECK_SYSCALL_(expression) \ + do { \ + int gtest_retval; \ + do { \ + gtest_retval = (expression); \ + } while (gtest_retval == -1 && errno == EINTR); \ + if (gtest_retval == -1) { \ + DeathTestAbort(::std::string("CHECK failed: File ") + __FILE__ + \ + ", line " + \ + ::testing::internal::StreamableToString(__LINE__) + \ + ": " + #expression + " != -1"); \ + } \ } while (::testing::internal::AlwaysFalse()) // Returns the message describing the last system error in errno. std::string GetLastErrnoDescription() { - return errno == 0 ? "" : posix::StrError(errno); + return errno == 0 ? "" : posix::StrError(errno); } // This is called from a death test parent process to read a failure @@ -369,8 +371,9 @@ static void FailFromInternalError(int fd) { DeathTest::DeathTest() { TestInfo* const info = GetUnitTestImpl()->current_test_info(); if (info == nullptr) { - DeathTestAbort("Cannot run a death test outside of a TEST or " - "TEST_F construct"); + DeathTestAbort( + "Cannot run a death test outside of a TEST or " + "TEST_F construct"); } } @@ -499,9 +502,7 @@ void DeathTestImpl::ReadAndInterpretStatusByte() { set_read_fd(-1); } -std::string DeathTestImpl::GetErrorLogs() { - return GetCapturedStderr(); -} +std::string DeathTestImpl::GetErrorLogs() { return GetCapturedStderr(); } // Signals that the death test code which should have exited, didn't. // Should be called only in a death test child process. @@ -511,9 +512,9 @@ void DeathTestImpl::Abort(AbortReason reason) { // The parent process considers the death test to be a failure if // it finds any data in our pipe. So, here we write a single flag byte // to the pipe, then exit. - const char status_ch = - reason == TEST_DID_NOT_DIE ? kDeathTestLived : - reason == TEST_THREW_EXCEPTION ? kDeathTestThrew : kDeathTestReturned; + const char status_ch = reason == TEST_DID_NOT_DIE ? kDeathTestLived + : reason == TEST_THREW_EXCEPTION ? kDeathTestThrew + : kDeathTestReturned; GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Write(write_fd(), &status_ch, 1)); // We are leaking the descriptor here because on some platforms (i.e., @@ -532,7 +533,7 @@ void DeathTestImpl::Abort(AbortReason reason) { // much easier. static ::std::string FormatDeathTestOutput(const ::std::string& output) { ::std::string ret; - for (size_t at = 0; ; ) { + for (size_t at = 0;;) { const size_t line_end = output.find('\n', at); ret += "[ DEATH ] "; if (line_end == ::std::string::npos) { @@ -567,8 +568,7 @@ static ::std::string FormatDeathTestOutput(const ::std::string& output) { // the first failing condition, in the order given above, is the one that is // reported. Also sets the last death test message string. bool DeathTestImpl::Passed(bool status_ok) { - if (!spawned()) - return false; + if (!spawned()) return false; const std::string error_message = GetErrorLogs(); @@ -579,15 +579,18 @@ bool DeathTestImpl::Passed(bool status_ok) { switch (outcome()) { case LIVED: buffer << " Result: failed to die.\n" - << " Error msg:\n" << FormatDeathTestOutput(error_message); + << " Error msg:\n" + << FormatDeathTestOutput(error_message); break; case THREW: buffer << " Result: threw an exception.\n" - << " Error msg:\n" << FormatDeathTestOutput(error_message); + << " Error msg:\n" + << FormatDeathTestOutput(error_message); break; case RETURNED: buffer << " Result: illegal return in test statement.\n" - << " Error msg:\n" << FormatDeathTestOutput(error_message); + << " Error msg:\n" + << FormatDeathTestOutput(error_message); break; case DIED: if (status_ok) { @@ -604,7 +607,8 @@ bool DeathTestImpl::Passed(bool status_ok) { } else { buffer << " Result: died but not with expected exit code:\n" << " " << ExitSummary(status()) << "\n" - << "Actual msg:\n" << FormatDeathTestOutput(error_message); + << "Actual msg:\n" + << FormatDeathTestOutput(error_message); } break; case IN_PROGRESS: @@ -617,7 +621,7 @@ bool DeathTestImpl::Passed(bool status_ok) { return success; } -# if GTEST_OS_WINDOWS +#if GTEST_OS_WINDOWS // WindowsDeathTest implements death tests on Windows. Due to the // specifics of starting new processes on Windows, death tests there are // always threadsafe, and Google Test considers the @@ -678,14 +682,12 @@ class WindowsDeathTest : public DeathTestImpl { // status, or 0 if no child process exists. As a side effect, sets the // outcome data member. int WindowsDeathTest::Wait() { - if (!spawned()) - return 0; + if (!spawned()) return 0; // Wait until the child either signals that it has acquired the write end // of the pipe or it dies. - const HANDLE wait_handles[2] = { child_handle_.Get(), event_handle_.Get() }; - switch (::WaitForMultipleObjects(2, - wait_handles, + const HANDLE wait_handles[2] = {child_handle_.Get(), event_handle_.Get()}; + switch (::WaitForMultipleObjects(2, wait_handles, FALSE, // Waits for any of the handles. INFINITE)) { case WAIT_OBJECT_0: @@ -706,9 +708,8 @@ int WindowsDeathTest::Wait() { // returns immediately if the child has already exited, regardless of // whether previous calls to WaitForMultipleObjects synchronized on this // handle or not. - GTEST_DEATH_TEST_CHECK_( - WAIT_OBJECT_0 == ::WaitForSingleObject(child_handle_.Get(), - INFINITE)); + GTEST_DEATH_TEST_CHECK_(WAIT_OBJECT_0 == + ::WaitForSingleObject(child_handle_.Get(), INFINITE)); DWORD status_code; GTEST_DEATH_TEST_CHECK_( ::GetExitCodeProcess(child_handle_.Get(), &status_code) != FALSE); @@ -741,12 +742,12 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() { SECURITY_ATTRIBUTES handles_are_inheritable = {sizeof(SECURITY_ATTRIBUTES), nullptr, TRUE}; HANDLE read_handle, write_handle; - GTEST_DEATH_TEST_CHECK_( - ::CreatePipe(&read_handle, &write_handle, &handles_are_inheritable, - 0) // Default buffer size. - != FALSE); - set_read_fd(::_open_osfhandle(reinterpret_cast<intptr_t>(read_handle), - O_RDONLY)); + GTEST_DEATH_TEST_CHECK_(::CreatePipe(&read_handle, &write_handle, + &handles_are_inheritable, + 0) // Default buffer size. + != FALSE); + set_read_fd( + ::_open_osfhandle(reinterpret_cast<intptr_t>(read_handle), O_RDONLY)); write_handle_.Reset(write_handle); event_handle_.Reset(::CreateEvent( &handles_are_inheritable, @@ -755,27 +756,26 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() { nullptr)); // The even is unnamed. GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != nullptr); const std::string filter_flag = std::string("--") + GTEST_FLAG_PREFIX_ + - kFilterFlag + "=" + info->test_suite_name() + - "." + info->name(); + "filter=" + info->test_suite_name() + "." + + info->name(); const std::string internal_flag = - std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + - "=" + file_ + "|" + StreamableToString(line_) + "|" + - StreamableToString(death_test_index) + "|" + + std::string("--") + GTEST_FLAG_PREFIX_ + + "internal_run_death_test=" + file_ + "|" + StreamableToString(line_) + + "|" + StreamableToString(death_test_index) + "|" + StreamableToString(static_cast<unsigned int>(::GetCurrentProcessId())) + // size_t has the same width as pointers on both 32-bit and 64-bit // Windows platforms. // See http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx. - "|" + StreamableToString(reinterpret_cast<size_t>(write_handle)) + - "|" + StreamableToString(reinterpret_cast<size_t>(event_handle_.Get())); + "|" + StreamableToString(reinterpret_cast<size_t>(write_handle)) + "|" + + StreamableToString(reinterpret_cast<size_t>(event_handle_.Get())); char executable_path[_MAX_PATH + 1]; // NOLINT GTEST_DEATH_TEST_CHECK_(_MAX_PATH + 1 != ::GetModuleFileNameA(nullptr, executable_path, _MAX_PATH)); - std::string command_line = - std::string(::GetCommandLineA()) + " " + filter_flag + " \"" + - internal_flag + "\""; + std::string command_line = std::string(::GetCommandLineA()) + " " + + filter_flag + " \"" + internal_flag + "\""; DeathTest::set_last_death_test_message(""); @@ -795,8 +795,8 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() { GTEST_DEATH_TEST_CHECK_( ::CreateProcessA( executable_path, const_cast<char*>(command_line.c_str()), - nullptr, // Retuned process handle is not inheritable. - nullptr, // Retuned thread handle is not inheritable. + nullptr, // Returned process handle is not inheritable. + nullptr, // Returned thread handle is not inheritable. TRUE, // Child inherits all inheritable handles (for write_handle_). 0x0, // Default creation flags. nullptr, // Inherit the parent's environment. @@ -808,7 +808,7 @@ DeathTest::TestRole WindowsDeathTest::AssumeRole() { return OVERSEE_TEST; } -# elif GTEST_OS_FUCHSIA +#elif GTEST_OS_FUCHSIA class FuchsiaDeathTest : public DeathTestImpl { public: @@ -854,18 +854,13 @@ class Arguments { template <typename Str> void AddArguments(const ::std::vector<Str>& arguments) { for (typename ::std::vector<Str>::const_iterator i = arguments.begin(); - i != arguments.end(); - ++i) { + i != arguments.end(); ++i) { args_.insert(args_.end() - 1, posix::StrDup(i->c_str())); } } - char* const* Argv() { - return &args_[0]; - } + char* const* Argv() { return &args_[0]; } - int size() { - return args_.size() - 1; - } + int size() { return static_cast<int>(args_.size()) - 1; } private: std::vector<char*> args_; @@ -879,8 +874,7 @@ int FuchsiaDeathTest::Wait() { const int kSocketKey = 1; const int kExceptionKey = 2; - if (!spawned()) - return 0; + if (!spawned()) return 0; // Create a port to wait for socket/task/exception events. zx_status_t status_zx; @@ -889,19 +883,18 @@ int FuchsiaDeathTest::Wait() { GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); // Register to wait for the child process to terminate. - status_zx = child_process_.wait_async( - port, kProcessKey, ZX_PROCESS_TERMINATED, ZX_WAIT_ASYNC_ONCE); + status_zx = + child_process_.wait_async(port, kProcessKey, ZX_PROCESS_TERMINATED, 0); GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); // Register to wait for the socket to be readable or closed. status_zx = stderr_socket_.wait_async( - port, kSocketKey, ZX_SOCKET_READABLE | ZX_SOCKET_PEER_CLOSED, - ZX_WAIT_ASYNC_ONCE); + port, kSocketKey, ZX_SOCKET_READABLE | ZX_SOCKET_PEER_CLOSED, 0); GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); // Register to wait for an exception. - status_zx = exception_channel_.wait_async( - port, kExceptionKey, ZX_CHANNEL_READABLE, ZX_WAIT_ASYNC_ONCE); + status_zx = exception_channel_.wait_async(port, kExceptionKey, + ZX_CHANNEL_READABLE, 0); GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); bool process_terminated = false; @@ -931,9 +924,9 @@ int FuchsiaDeathTest::Wait() { size_t old_length = captured_stderr_.length(); size_t bytes_read = 0; captured_stderr_.resize(old_length + kBufferSize); - status_zx = stderr_socket_.read( - 0, &captured_stderr_.front() + old_length, kBufferSize, - &bytes_read); + status_zx = + stderr_socket_.read(0, &captured_stderr_.front() + old_length, + kBufferSize, &bytes_read); captured_stderr_.resize(old_length + bytes_read); } while (status_zx == ZX_OK); if (status_zx == ZX_ERR_PEER_CLOSED) { @@ -941,8 +934,7 @@ int FuchsiaDeathTest::Wait() { } else { GTEST_DEATH_TEST_CHECK_(status_zx == ZX_ERR_SHOULD_WAIT); status_zx = stderr_socket_.wait_async( - port, kSocketKey, ZX_SOCKET_READABLE | ZX_SOCKET_PEER_CLOSED, - ZX_WAIT_ASYNC_ONCE); + port, kSocketKey, ZX_SOCKET_READABLE | ZX_SOCKET_PEER_CLOSED, 0); GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); } } else { @@ -955,12 +947,12 @@ int FuchsiaDeathTest::Wait() { ReadAndInterpretStatusByte(); zx_info_process_t buffer; - status_zx = child_process_.get_info( - ZX_INFO_PROCESS, &buffer, sizeof(buffer), nullptr, nullptr); + status_zx = child_process_.get_info(ZX_INFO_PROCESS, &buffer, sizeof(buffer), + nullptr, nullptr); GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); - GTEST_DEATH_TEST_CHECK_(buffer.exited); - set_status(buffer.return_code); + GTEST_DEATH_TEST_CHECK_(buffer.flags & ZX_INFO_PROCESS_FLAG_EXITED); + set_status(static_cast<int>(buffer.return_code)); return status(); } @@ -988,13 +980,12 @@ DeathTest::TestRole FuchsiaDeathTest::AssumeRole() { // Build the child process command line. const std::string filter_flag = std::string("--") + GTEST_FLAG_PREFIX_ + - kFilterFlag + "=" + info->test_suite_name() + - "." + info->name(); - const std::string internal_flag = - std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + "=" - + file_ + "|" - + StreamableToString(line_) + "|" - + StreamableToString(death_test_index); + "filter=" + info->test_suite_name() + "." + + info->name(); + const std::string internal_flag = std::string("--") + GTEST_FLAG_PREFIX_ + + kInternalRunDeathTestFlag + "=" + file_ + + "|" + StreamableToString(line_) + "|" + + StreamableToString(death_test_index); Arguments args; args.AddArguments(GetInjectableArgvs()); args.AddArgument(filter_flag.c_str()); @@ -1017,8 +1008,7 @@ DeathTest::TestRole FuchsiaDeathTest::AssumeRole() { // Create a socket pair will be used to receive the child process' stderr. zx::socket stderr_producer_socket; - status = - zx::socket::create(0, &stderr_producer_socket, &stderr_socket_); + status = zx::socket::create(0, &stderr_producer_socket, &stderr_socket_); GTEST_DEATH_TEST_CHECK_(status >= 0); int stderr_producer_fd = -1; status = @@ -1035,35 +1025,32 @@ DeathTest::TestRole FuchsiaDeathTest::AssumeRole() { // Create a child job. zx_handle_t child_job = ZX_HANDLE_INVALID; - status = zx_job_create(zx_job_default(), 0, & child_job); + status = zx_job_create(zx_job_default(), 0, &child_job); GTEST_DEATH_TEST_CHECK_(status == ZX_OK); zx_policy_basic_t policy; policy.condition = ZX_POL_NEW_ANY; policy.policy = ZX_POL_ACTION_ALLOW; - status = zx_job_set_policy( - child_job, ZX_JOB_POL_RELATIVE, ZX_JOB_POL_BASIC, &policy, 1); + status = zx_job_set_policy(child_job, ZX_JOB_POL_RELATIVE, ZX_JOB_POL_BASIC, + &policy, 1); GTEST_DEATH_TEST_CHECK_(status == ZX_OK); // Create an exception channel attached to the |child_job|, to allow // us to suppress the system default exception handler from firing. - status = - zx_task_create_exception_channel( - child_job, 0, exception_channel_.reset_and_get_address()); + status = zx_task_create_exception_channel( + child_job, 0, exception_channel_.reset_and_get_address()); GTEST_DEATH_TEST_CHECK_(status == ZX_OK); // Spawn the child process. - status = fdio_spawn_etc( - child_job, FDIO_SPAWN_CLONE_ALL, args.Argv()[0], args.Argv(), nullptr, - 2, spawn_actions, child_process_.reset_and_get_address(), nullptr); + status = fdio_spawn_etc(child_job, FDIO_SPAWN_CLONE_ALL, args.Argv()[0], + args.Argv(), nullptr, 2, spawn_actions, + child_process_.reset_and_get_address(), nullptr); GTEST_DEATH_TEST_CHECK_(status == ZX_OK); set_spawned(true); return OVERSEE_TEST; } -std::string FuchsiaDeathTest::GetErrorLogs() { - return captured_stderr_; -} +std::string FuchsiaDeathTest::GetErrorLogs() { return captured_stderr_; } #else // We are neither on Windows, nor on Fuchsia. @@ -1094,8 +1081,7 @@ ForkingDeathTest::ForkingDeathTest(const char* a_statement, // status, or 0 if no child process exists. As a side effect, sets the // outcome data member. int ForkingDeathTest::Wait() { - if (!spawned()) - return 0; + if (!spawned()) return 0; ReadAndInterpretStatusByte(); @@ -1174,11 +1160,11 @@ class ExecDeathTest : public ForkingDeathTest { private: static ::std::vector<std::string> GetArgvsForDeathTestChildProcess() { ::std::vector<std::string> args = GetInjectableArgvs(); -# if defined(GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_) +#if defined(GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_) ::std::vector<std::string> extra_args = GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_(); args.insert(args.end(), extra_args.begin(), extra_args.end()); -# endif // defined(GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_) +#endif // defined(GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_) return args; } // The name of the file in which the death test is located. @@ -1205,14 +1191,11 @@ class Arguments { template <typename Str> void AddArguments(const ::std::vector<Str>& arguments) { for (typename ::std::vector<Str>::const_iterator i = arguments.begin(); - i != arguments.end(); - ++i) { + i != arguments.end(); ++i) { args_.insert(args_.end() - 1, posix::StrDup(i->c_str())); } } - char* const* Argv() { - return &args_[0]; - } + char* const* Argv() { return &args_[0]; } private: std::vector<char*> args_; @@ -1225,21 +1208,9 @@ struct ExecDeathTestArgs { int close_fd; // File descriptor to close; the read end of a pipe }; -# if GTEST_OS_MAC -inline char** GetEnviron() { - // When Google Test is built as a framework on MacOS X, the environ variable - // is unavailable. Apple's documentation (man environ) recommends using - // _NSGetEnviron() instead. - return *_NSGetEnviron(); -} -# else -// Some POSIX platforms expect you to declare environ. extern "C" makes -// it reside in the global namespace. +#if GTEST_OS_QNX extern "C" char** environ; -inline char** GetEnviron() { return environ; } -# endif // GTEST_OS_MAC - -# if !GTEST_OS_QNX +#else // GTEST_OS_QNX // The main function for a threadsafe-style death test child process. // This function is called in a clone()-ed process and thus must avoid // any potentially unsafe operations like malloc or libc functions. @@ -1254,25 +1225,24 @@ static int ExecDeathTestChildMain(void* child_arg) { UnitTest::GetInstance()->original_working_dir(); // We can safely call chdir() as it's a direct system call. if (chdir(original_dir) != 0) { - DeathTestAbort(std::string("chdir(\"") + original_dir + "\") failed: " + - GetLastErrnoDescription()); + DeathTestAbort(std::string("chdir(\"") + original_dir + + "\") failed: " + GetLastErrnoDescription()); return EXIT_FAILURE; } - // We can safely call execve() as it's a direct system call. We + // We can safely call execv() as it's almost a direct system call. We // cannot use execvp() as it's a libc function and thus potentially - // unsafe. Since execve() doesn't search the PATH, the user must + // unsafe. Since execv() doesn't search the PATH, the user must // invoke the test program via a valid path that contains at least // one path separator. - execve(args->argv[0], args->argv, GetEnviron()); - DeathTestAbort(std::string("execve(") + args->argv[0] + ", ...) in " + - original_dir + " failed: " + - GetLastErrnoDescription()); + execv(args->argv[0], args->argv); + DeathTestAbort(std::string("execv(") + args->argv[0] + ", ...) in " + + original_dir + " failed: " + GetLastErrnoDescription()); return EXIT_FAILURE; } -# endif // !GTEST_OS_QNX +#endif // GTEST_OS_QNX -# if GTEST_HAS_CLONE +#if GTEST_HAS_CLONE // Two utility routines that together determine the direction the stack // grows. // This could be accomplished more elegantly by a single recursive @@ -1284,24 +1254,29 @@ static int ExecDeathTestChildMain(void* child_arg) { // correct answer. static void StackLowerThanAddress(const void* ptr, bool* result) GTEST_NO_INLINE_; +// Make sure sanitizers do not tamper with the stack here. +// Ideally, we want to use `__builtin_frame_address` instead of a local variable +// address with sanitizer disabled, but it does not work when the +// compiler optimizes the stack frame out, which happens on PowerPC targets. // HWAddressSanitizer add a random tag to the MSB of the local variable address, // making comparison result unpredictable. +GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ static void StackLowerThanAddress(const void* ptr, bool* result) { - int dummy; - *result = (&dummy < ptr); + int dummy = 0; + *result = std::less<const void*>()(&dummy, ptr); } // Make sure AddressSanitizer does not tamper with the stack here. GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ static bool StackGrowsDown() { - int dummy; + int dummy = 0; bool result; StackLowerThanAddress(&dummy, &result); return result; } -# endif // GTEST_HAS_CLONE +#endif // GTEST_HAS_CLONE // Spawns a child process with the same executable as the current process in // a thread-safe manner and instructs it to run the death test. The @@ -1311,10 +1286,10 @@ static bool StackGrowsDown() { // spawn(2) there instead. The function dies with an error message if // anything goes wrong. static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { - ExecDeathTestArgs args = { argv, close_fd }; + ExecDeathTestArgs args = {argv, close_fd}; pid_t child_pid = -1; -# if GTEST_OS_QNX +#if GTEST_OS_QNX // Obtains the current directory and sets it to be closed in the child // process. const int cwd_fd = open(".", O_RDONLY); @@ -1327,26 +1302,25 @@ static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { UnitTest::GetInstance()->original_working_dir(); // We can safely call chdir() as it's a direct system call. if (chdir(original_dir) != 0) { - DeathTestAbort(std::string("chdir(\"") + original_dir + "\") failed: " + - GetLastErrnoDescription()); + DeathTestAbort(std::string("chdir(\"") + original_dir + + "\") failed: " + GetLastErrnoDescription()); return EXIT_FAILURE; } int fd_flags; // Set close_fd to be closed after spawn. GTEST_DEATH_TEST_CHECK_SYSCALL_(fd_flags = fcntl(close_fd, F_GETFD)); - GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(close_fd, F_SETFD, - fd_flags | FD_CLOEXEC)); + GTEST_DEATH_TEST_CHECK_SYSCALL_( + fcntl(close_fd, F_SETFD, fd_flags | FD_CLOEXEC)); struct inheritance inherit = {0}; // spawn is a system call. - child_pid = - spawn(args.argv[0], 0, nullptr, &inherit, args.argv, GetEnviron()); + child_pid = spawn(args.argv[0], 0, nullptr, &inherit, args.argv, environ); // Restores the current working directory. GTEST_DEATH_TEST_CHECK_(fchdir(cwd_fd) != -1); GTEST_DEATH_TEST_CHECK_SYSCALL_(close(cwd_fd)); -# else // GTEST_OS_QNX -# if GTEST_OS_LINUX +#else // GTEST_OS_QNX +#if GTEST_OS_LINUX // When a SIGPROF signal is received while fork() or clone() are executing, // the process may hang. To avoid this, we ignore SIGPROF here and re-enable // it after the call to fork()/clone() is complete. @@ -1355,16 +1329,16 @@ static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { memset(&ignore_sigprof_action, 0, sizeof(ignore_sigprof_action)); sigemptyset(&ignore_sigprof_action.sa_mask); ignore_sigprof_action.sa_handler = SIG_IGN; - GTEST_DEATH_TEST_CHECK_SYSCALL_(sigaction( - SIGPROF, &ignore_sigprof_action, &saved_sigprof_action)); -# endif // GTEST_OS_LINUX + GTEST_DEATH_TEST_CHECK_SYSCALL_( + sigaction(SIGPROF, &ignore_sigprof_action, &saved_sigprof_action)); +#endif // GTEST_OS_LINUX -# if GTEST_HAS_CLONE - const bool use_fork = GTEST_FLAG(death_test_use_fork); +#if GTEST_HAS_CLONE + const bool use_fork = GTEST_FLAG_GET(death_test_use_fork); if (!use_fork) { static const bool stack_grows_down = StackGrowsDown(); - const auto stack_size = static_cast<size_t>(getpagesize()); + const auto stack_size = static_cast<size_t>(getpagesize() * 2); // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead. void* const stack = mmap(nullptr, stack_size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); @@ -1379,7 +1353,7 @@ static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { const size_t kMaxStackAlignment = 64; void* const stack_top = static_cast<char*>(stack) + - (stack_grows_down ? stack_size - kMaxStackAlignment : 0); + (stack_grows_down ? stack_size - kMaxStackAlignment : 0); GTEST_DEATH_TEST_CHECK_( static_cast<size_t>(stack_size) > kMaxStackAlignment && reinterpret_cast<uintptr_t>(stack_top) % kMaxStackAlignment == 0); @@ -1388,19 +1362,19 @@ static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) { GTEST_DEATH_TEST_CHECK_(munmap(stack, stack_size) != -1); } -# else +#else const bool use_fork = true; -# endif // GTEST_HAS_CLONE +#endif // GTEST_HAS_CLONE if (use_fork && (child_pid = fork()) == 0) { - ExecDeathTestChildMain(&args); - _exit(0); + ExecDeathTestChildMain(&args); + _exit(0); } -# endif // GTEST_OS_QNX -# if GTEST_OS_LINUX +#endif // GTEST_OS_QNX +#if GTEST_OS_LINUX GTEST_DEATH_TEST_CHECK_SYSCALL_( sigaction(SIGPROF, &saved_sigprof_action, nullptr)); -# endif // GTEST_OS_LINUX +#endif // GTEST_OS_LINUX GTEST_DEATH_TEST_CHECK_(child_pid != -1); return child_pid; @@ -1429,13 +1403,13 @@ DeathTest::TestRole ExecDeathTest::AssumeRole() { GTEST_DEATH_TEST_CHECK_(fcntl(pipe_fd[1], F_SETFD, 0) != -1); const std::string filter_flag = std::string("--") + GTEST_FLAG_PREFIX_ + - kFilterFlag + "=" + info->test_suite_name() + - "." + info->name(); - const std::string internal_flag = - std::string("--") + GTEST_FLAG_PREFIX_ + kInternalRunDeathTestFlag + "=" - + file_ + "|" + StreamableToString(line_) + "|" - + StreamableToString(death_test_index) + "|" - + StreamableToString(pipe_fd[1]); + "filter=" + info->test_suite_name() + "." + + info->name(); + const std::string internal_flag = std::string("--") + GTEST_FLAG_PREFIX_ + + "internal_run_death_test=" + file_ + "|" + + StreamableToString(line_) + "|" + + StreamableToString(death_test_index) + "|" + + StreamableToString(pipe_fd[1]); Arguments args; args.AddArguments(GetArgvsForDeathTestChildProcess()); args.AddArgument(filter_flag.c_str()); @@ -1456,7 +1430,7 @@ DeathTest::TestRole ExecDeathTest::AssumeRole() { return OVERSEE_TEST; } -# endif // !GTEST_OS_WINDOWS +#endif // !GTEST_OS_WINDOWS // Creates a concrete DeathTest-derived class that depends on the // --gtest_death_test_style flag, and sets the pointer pointed to @@ -1470,15 +1444,15 @@ bool DefaultDeathTestFactory::Create(const char* statement, UnitTestImpl* const impl = GetUnitTestImpl(); const InternalRunDeathTestFlag* const flag = impl->internal_run_death_test_flag(); - const int death_test_index = impl->current_test_info() - ->increment_death_test_count(); + const int death_test_index = + impl->current_test_info()->increment_death_test_count(); if (flag != nullptr) { if (death_test_index > flag->index()) { DeathTest::set_last_death_test_message( - "Death test count (" + StreamableToString(death_test_index) - + ") somehow exceeded expected maximum (" - + StreamableToString(flag->index()) + ")"); + "Death test count (" + StreamableToString(death_test_index) + + ") somehow exceeded expected maximum (" + + StreamableToString(flag->index()) + ")"); return false; } @@ -1489,50 +1463,50 @@ bool DefaultDeathTestFactory::Create(const char* statement, } } -# if GTEST_OS_WINDOWS +#if GTEST_OS_WINDOWS - if (GTEST_FLAG(death_test_style) == "threadsafe" || - GTEST_FLAG(death_test_style) == "fast") { + if (GTEST_FLAG_GET(death_test_style) == "threadsafe" || + GTEST_FLAG_GET(death_test_style) == "fast") { *test = new WindowsDeathTest(statement, std::move(matcher), file, line); } -# elif GTEST_OS_FUCHSIA +#elif GTEST_OS_FUCHSIA - if (GTEST_FLAG(death_test_style) == "threadsafe" || - GTEST_FLAG(death_test_style) == "fast") { + if (GTEST_FLAG_GET(death_test_style) == "threadsafe" || + GTEST_FLAG_GET(death_test_style) == "fast") { *test = new FuchsiaDeathTest(statement, std::move(matcher), file, line); } -# else +#else - if (GTEST_FLAG(death_test_style) == "threadsafe") { + if (GTEST_FLAG_GET(death_test_style) == "threadsafe") { *test = new ExecDeathTest(statement, std::move(matcher), file, line); - } else if (GTEST_FLAG(death_test_style) == "fast") { + } else if (GTEST_FLAG_GET(death_test_style) == "fast") { *test = new NoExecDeathTest(statement, std::move(matcher)); } -# endif // GTEST_OS_WINDOWS +#endif // GTEST_OS_WINDOWS else { // NOLINT - this is more readable than unbalanced brackets inside #if. - DeathTest::set_last_death_test_message( - "Unknown death test style \"" + GTEST_FLAG(death_test_style) - + "\" encountered"); + DeathTest::set_last_death_test_message("Unknown death test style \"" + + GTEST_FLAG_GET(death_test_style) + + "\" encountered"); return false; } return true; } -# if GTEST_OS_WINDOWS +#if GTEST_OS_WINDOWS // Recreates the pipe and event handles from the provided parameters, // signals the event, and returns a file descriptor wrapped around the pipe // handle. This function is called in the child process only. static int GetStatusFileDescriptor(unsigned int parent_process_id, - size_t write_handle_as_size_t, - size_t event_handle_as_size_t) { + size_t write_handle_as_size_t, + size_t event_handle_as_size_t) { AutoHandle parent_process_handle(::OpenProcess(PROCESS_DUP_HANDLE, - FALSE, // Non-inheritable. - parent_process_id)); + FALSE, // Non-inheritable. + parent_process_id)); if (parent_process_handle.Get() == INVALID_HANDLE_VALUE) { DeathTestAbort("Unable to open parent process " + StreamableToString(parent_process_id)); @@ -1540,8 +1514,7 @@ static int GetStatusFileDescriptor(unsigned int parent_process_id, GTEST_CHECK_(sizeof(HANDLE) <= sizeof(size_t)); - const HANDLE write_handle = - reinterpret_cast<HANDLE>(write_handle_as_size_t); + const HANDLE write_handle = reinterpret_cast<HANDLE>(write_handle_as_size_t); HANDLE dup_write_handle; // The newly initialized handle is accessible only in the parent @@ -1563,9 +1536,7 @@ static int GetStatusFileDescriptor(unsigned int parent_process_id, HANDLE dup_event_handle; if (!::DuplicateHandle(parent_process_handle.Get(), event_handle, - ::GetCurrentProcess(), &dup_event_handle, - 0x0, - FALSE, + ::GetCurrentProcess(), &dup_event_handle, 0x0, FALSE, DUPLICATE_SAME_ACCESS)) { DeathTestAbort("Unable to duplicate the event handle " + StreamableToString(event_handle_as_size_t) + @@ -1587,61 +1558,57 @@ static int GetStatusFileDescriptor(unsigned int parent_process_id, return write_fd; } -# endif // GTEST_OS_WINDOWS +#endif // GTEST_OS_WINDOWS // Returns a newly created InternalRunDeathTestFlag object with fields // initialized from the GTEST_FLAG(internal_run_death_test) flag if // the flag is specified; otherwise returns NULL. InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag() { - if (GTEST_FLAG(internal_run_death_test) == "") return nullptr; + if (GTEST_FLAG_GET(internal_run_death_test) == "") return nullptr; // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we // can use it here. int line = -1; int index = -1; ::std::vector< ::std::string> fields; - SplitString(GTEST_FLAG(internal_run_death_test).c_str(), '|', &fields); + SplitString(GTEST_FLAG_GET(internal_run_death_test), '|', &fields); int write_fd = -1; -# if GTEST_OS_WINDOWS +#if GTEST_OS_WINDOWS unsigned int parent_process_id = 0; size_t write_handle_as_size_t = 0; size_t event_handle_as_size_t = 0; - if (fields.size() != 6 - || !ParseNaturalNumber(fields[1], &line) - || !ParseNaturalNumber(fields[2], &index) - || !ParseNaturalNumber(fields[3], &parent_process_id) - || !ParseNaturalNumber(fields[4], &write_handle_as_size_t) - || !ParseNaturalNumber(fields[5], &event_handle_as_size_t)) { + if (fields.size() != 6 || !ParseNaturalNumber(fields[1], &line) || + !ParseNaturalNumber(fields[2], &index) || + !ParseNaturalNumber(fields[3], &parent_process_id) || + !ParseNaturalNumber(fields[4], &write_handle_as_size_t) || + !ParseNaturalNumber(fields[5], &event_handle_as_size_t)) { DeathTestAbort("Bad --gtest_internal_run_death_test flag: " + - GTEST_FLAG(internal_run_death_test)); + GTEST_FLAG_GET(internal_run_death_test)); } - write_fd = GetStatusFileDescriptor(parent_process_id, - write_handle_as_size_t, + write_fd = GetStatusFileDescriptor(parent_process_id, write_handle_as_size_t, event_handle_as_size_t); -# elif GTEST_OS_FUCHSIA +#elif GTEST_OS_FUCHSIA - if (fields.size() != 3 - || !ParseNaturalNumber(fields[1], &line) - || !ParseNaturalNumber(fields[2], &index)) { - DeathTestAbort("Bad --gtest_internal_run_death_test flag: " - + GTEST_FLAG(internal_run_death_test)); + if (fields.size() != 3 || !ParseNaturalNumber(fields[1], &line) || + !ParseNaturalNumber(fields[2], &index)) { + DeathTestAbort("Bad --gtest_internal_run_death_test flag: " + + GTEST_FLAG_GET(internal_run_death_test)); } -# else +#else - if (fields.size() != 4 - || !ParseNaturalNumber(fields[1], &line) - || !ParseNaturalNumber(fields[2], &index) - || !ParseNaturalNumber(fields[3], &write_fd)) { - DeathTestAbort("Bad --gtest_internal_run_death_test flag: " - + GTEST_FLAG(internal_run_death_test)); + if (fields.size() != 4 || !ParseNaturalNumber(fields[1], &line) || + !ParseNaturalNumber(fields[2], &index) || + !ParseNaturalNumber(fields[3], &write_fd)) { + DeathTestAbort("Bad --gtest_internal_run_death_test flag: " + + GTEST_FLAG_GET(internal_run_death_test)); } -# endif // GTEST_OS_WINDOWS +#endif // GTEST_OS_WINDOWS return new InternalRunDeathTestFlag(fields[0], line, index, write_fd); } diff --git a/test/gtest/src/gtest-filepath.cc b/test/gtest_vendor/src/gtest-filepath.cc similarity index 85% rename from test/gtest/src/gtest-filepath.cc rename to test/gtest_vendor/src/gtest-filepath.cc index bd7b99ff0..f6ee90cdb 100644 --- a/test/gtest/src/gtest-filepath.cc +++ b/test/gtest_vendor/src/gtest-filepath.cc @@ -30,29 +30,31 @@ #include "gtest/internal/gtest-filepath.h" #include <stdlib.h> -#include "gtest/internal/gtest-port.h" + #include "gtest/gtest-message.h" +#include "gtest/internal/gtest-port.h" #if GTEST_OS_WINDOWS_MOBILE -# include <windows.h> +#include <windows.h> #elif GTEST_OS_WINDOWS -# include <direct.h> -# include <io.h> +#include <direct.h> +#include <io.h> #else -# include <limits.h> -# include <climits> // Some Linux distributions define PATH_MAX here. -#endif // GTEST_OS_WINDOWS_MOBILE +#include <limits.h> + +#include <climits> // Some Linux distributions define PATH_MAX here. +#endif // GTEST_OS_WINDOWS_MOBILE #include "gtest/internal/gtest-string.h" #if GTEST_OS_WINDOWS -# define GTEST_PATH_MAX_ _MAX_PATH +#define GTEST_PATH_MAX_ _MAX_PATH #elif defined(PATH_MAX) -# define GTEST_PATH_MAX_ PATH_MAX +#define GTEST_PATH_MAX_ PATH_MAX #elif defined(_XOPEN_PATH_MAX) -# define GTEST_PATH_MAX_ _XOPEN_PATH_MAX +#define GTEST_PATH_MAX_ _XOPEN_PATH_MAX #else -# define GTEST_PATH_MAX_ _POSIX_PATH_MAX +#define GTEST_PATH_MAX_ _POSIX_PATH_MAX #endif // GTEST_OS_WINDOWS namespace testing { @@ -66,16 +68,16 @@ namespace internal { const char kPathSeparator = '\\'; const char kAlternatePathSeparator = '/'; const char kAlternatePathSeparatorString[] = "/"; -# if GTEST_OS_WINDOWS_MOBILE +#if GTEST_OS_WINDOWS_MOBILE // Windows CE doesn't have a current directory. You should not use // the current directory in tests on Windows CE, but this at least // provides a reasonable fallback. const char kCurrentDirectoryString[] = "\\"; // Windows CE doesn't define INVALID_FILE_ATTRIBUTES const DWORD kInvalidFileAttributes = 0xffffffff; -# else +#else const char kCurrentDirectoryString[] = ".\\"; -# endif // GTEST_OS_WINDOWS_MOBILE +#endif // GTEST_OS_WINDOWS_MOBILE #else const char kPathSeparator = '/'; const char kCurrentDirectoryString[] = "./"; @@ -92,23 +94,24 @@ static bool IsPathSeparator(char c) { // Returns the current working directory, or "" if unsuccessful. FilePath FilePath::GetCurrentDir() { -#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \ - GTEST_OS_WINDOWS_RT || ARDUINO || defined(ESP_PLATFORM) +#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \ + GTEST_OS_WINDOWS_RT || GTEST_OS_ESP8266 || GTEST_OS_ESP32 || \ + GTEST_OS_XTENSA // These platforms do not have a current directory, so we just return // something reasonable. return FilePath(kCurrentDirectoryString); #elif GTEST_OS_WINDOWS - char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; + char cwd[GTEST_PATH_MAX_ + 1] = {'\0'}; return FilePath(_getcwd(cwd, sizeof(cwd)) == nullptr ? "" : cwd); #else - char cwd[GTEST_PATH_MAX_ + 1] = { '\0' }; + char cwd[GTEST_PATH_MAX_ + 1] = {'\0'}; char* result = getcwd(cwd, sizeof(cwd)); -# if GTEST_OS_NACL +#if GTEST_OS_NACL // getcwd will likely fail in NaCl due to the sandbox, so return something // reasonable. The user may have provided a shim implementation for getcwd, // however, so fallback only when failure is detected. return FilePath(result == nullptr ? kCurrentDirectoryString : cwd); -# endif // GTEST_OS_NACL +#endif // GTEST_OS_NACL return FilePath(result == nullptr ? "" : cwd); #endif // GTEST_OS_WINDOWS_MOBILE } @@ -120,8 +123,8 @@ FilePath FilePath::GetCurrentDir() { FilePath FilePath::RemoveExtension(const char* extension) const { const std::string dot_extension = std::string(".") + extension; if (String::EndsWithCaseInsensitive(pathname_, dot_extension)) { - return FilePath(pathname_.substr( - 0, pathname_.length() - dot_extension.length())); + return FilePath( + pathname_.substr(0, pathname_.length() - dot_extension.length())); } return *this; } @@ -177,15 +180,14 @@ FilePath FilePath::RemoveFileName() const { // than zero (e.g., 12), returns "dir/test_12.xml". // On Windows platform, uses \ as the separator rather than /. FilePath FilePath::MakeFileName(const FilePath& directory, - const FilePath& base_name, - int number, + const FilePath& base_name, int number, const char* extension) { std::string file; if (number == 0) { file = base_name.string() + "." + extension; } else { - file = base_name.string() + "_" + StreamableToString(number) - + "." + extension; + file = + base_name.string() + "_" + StreamableToString(number) + "." + extension; } return ConcatPaths(directory, FilePath(file)); } @@ -194,8 +196,7 @@ FilePath FilePath::MakeFileName(const FilePath& directory, // On Windows, uses \ as the separator rather than /. FilePath FilePath::ConcatPaths(const FilePath& directory, const FilePath& relative_path) { - if (directory.IsEmpty()) - return relative_path; + if (directory.IsEmpty()) return relative_path; const FilePath dir(directory.RemoveTrailingPathSeparator()); return FilePath(dir.string() + kPathSeparator + relative_path.string()); } @@ -206,10 +207,10 @@ bool FilePath::FileOrDirectoryExists() const { #if GTEST_OS_WINDOWS_MOBILE LPCWSTR unicode = String::AnsiToUtf16(pathname_.c_str()); const DWORD attributes = GetFileAttributes(unicode); - delete [] unicode; + delete[] unicode; return attributes != kInvalidFileAttributes; #else - posix::StatStruct file_stat; + posix::StatStruct file_stat{}; return posix::Stat(pathname_.c_str(), &file_stat) == 0; #endif // GTEST_OS_WINDOWS_MOBILE } @@ -221,8 +222,8 @@ bool FilePath::DirectoryExists() const { #if GTEST_OS_WINDOWS // Don't strip off trailing separator if path is a root directory on // Windows (like "C:\\"). - const FilePath& path(IsRootDirectory() ? *this : - RemoveTrailingPathSeparator()); + const FilePath& path(IsRootDirectory() ? *this + : RemoveTrailingPathSeparator()); #else const FilePath& path(*this); #endif @@ -230,15 +231,15 @@ bool FilePath::DirectoryExists() const { #if GTEST_OS_WINDOWS_MOBILE LPCWSTR unicode = String::AnsiToUtf16(path.c_str()); const DWORD attributes = GetFileAttributes(unicode); - delete [] unicode; + delete[] unicode; if ((attributes != kInvalidFileAttributes) && (attributes & FILE_ATTRIBUTE_DIRECTORY)) { result = true; } #else - posix::StatStruct file_stat; - result = posix::Stat(path.c_str(), &file_stat) == 0 && - posix::IsDir(file_stat); + posix::StatStruct file_stat{}; + result = + posix::Stat(path.c_str(), &file_stat) == 0 && posix::IsDir(file_stat); #endif // GTEST_OS_WINDOWS_MOBILE return result; @@ -259,10 +260,9 @@ bool FilePath::IsAbsolutePath() const { const char* const name = pathname_.c_str(); #if GTEST_OS_WINDOWS return pathname_.length() >= 3 && - ((name[0] >= 'a' && name[0] <= 'z') || - (name[0] >= 'A' && name[0] <= 'Z')) && - name[1] == ':' && - IsPathSeparator(name[2]); + ((name[0] >= 'a' && name[0] <= 'z') || + (name[0] >= 'A' && name[0] <= 'Z')) && + name[1] == ':' && IsPathSeparator(name[2]); #else return IsPathSeparator(name[0]); #endif @@ -320,9 +320,12 @@ bool FilePath::CreateFolder() const { FilePath removed_sep(this->RemoveTrailingPathSeparator()); LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str()); int result = CreateDirectory(unicode, nullptr) ? 0 : -1; - delete [] unicode; + delete[] unicode; #elif GTEST_OS_WINDOWS int result = _mkdir(pathname_.c_str()); +#elif GTEST_OS_ESP8266 || GTEST_OS_XTENSA + // do nothing + int result = 0; #else int result = mkdir(pathname_.c_str(), 0777); #endif // GTEST_OS_WINDOWS_MOBILE @@ -337,42 +340,27 @@ bool FilePath::CreateFolder() const { // name, otherwise return the name string unmodified. // On Windows platform, uses \ as the separator, other platforms use /. FilePath FilePath::RemoveTrailingPathSeparator() const { - return IsDirectory() - ? FilePath(pathname_.substr(0, pathname_.length() - 1)) - : *this; + return IsDirectory() ? FilePath(pathname_.substr(0, pathname_.length() - 1)) + : *this; } // Removes any redundant separators that might be in the pathname. // For example, "bar///foo" becomes "bar/foo". Does not eliminate other // redundancies that might be in a pathname involving "." or "..". void FilePath::Normalize() { - if (pathname_.c_str() == nullptr) { - pathname_ = ""; - return; - } - const char* src = pathname_.c_str(); - char* const dest = new char[pathname_.length() + 1]; - char* dest_ptr = dest; - memset(dest_ptr, 0, pathname_.length() + 1); - - while (*src != '\0') { - *dest_ptr = *src; - if (!IsPathSeparator(*src)) { - src++; + auto out = pathname_.begin(); + + for (const char character : pathname_) { + if (!IsPathSeparator(character)) { + *(out++) = character; + } else if (out == pathname_.begin() || *std::prev(out) != kPathSeparator) { + *(out++) = kPathSeparator; } else { -#if GTEST_HAS_ALT_PATH_SEP_ - if (*dest_ptr == kAlternatePathSeparator) { - *dest_ptr = kPathSeparator; - } -#endif - while (IsPathSeparator(*src)) - src++; + continue; } - dest_ptr++; } - *dest_ptr = '\0'; - pathname_ = dest; - delete[] dest; + + pathname_.erase(out, pathname_.end()); } } // namespace internal diff --git a/test/gtest/src/gtest-internal-inl.h b/test/gtest_vendor/src/gtest-internal-inl.h similarity index 85% rename from test/gtest/src/gtest-internal-inl.h rename to test/gtest_vendor/src/gtest-internal-inl.h index 8ed70daab..0b9e929c6 100644 --- a/test/gtest/src/gtest-internal-inl.h +++ b/test/gtest_vendor/src/gtest-internal-inl.h @@ -31,17 +31,18 @@ // This file contains purely Google Test's internal implementation. Please // DO NOT #INCLUDE IT IN A USER PROGRAM. -#ifndef GTEST_SRC_GTEST_INTERNAL_INL_H_ -#define GTEST_SRC_GTEST_INTERNAL_INL_H_ +#ifndef GOOGLETEST_SRC_GTEST_INTERNAL_INL_H_ +#define GOOGLETEST_SRC_GTEST_INTERNAL_INL_H_ #ifndef _WIN32_WCE -# include <errno.h> +#include <errno.h> #endif // !_WIN32_WCE #include <stddef.h> #include <stdlib.h> // For strtoll/_strtoul64/malloc/free. #include <string.h> // For memmove. #include <algorithm> +#include <cstdint> #include <memory> #include <string> #include <vector> @@ -49,22 +50,20 @@ #include "gtest/internal/gtest-port.h" #if GTEST_CAN_STREAM_RESULTS_ -# include <arpa/inet.h> // NOLINT -# include <netdb.h> // NOLINT +#include <arpa/inet.h> // NOLINT +#include <netdb.h> // NOLINT #endif #if GTEST_OS_WINDOWS -# include <windows.h> // NOLINT -#endif // GTEST_OS_WINDOWS +#include <windows.h> // NOLINT +#endif // GTEST_OS_WINDOWS -#include "gtest/gtest.h" #include "gtest/gtest-spi.h" +#include "gtest/gtest.h" GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ /* class A needs to have dll-interface to be used by clients of class B */) -namespace testing { - // Declares the flags. // // We don't want the users to modify this flag in the code, but want @@ -72,30 +71,13 @@ namespace testing { // declare it here as opposed to in gtest.h. GTEST_DECLARE_bool_(death_test_use_fork); +namespace testing { namespace internal { // The value of GetTestTypeId() as seen from within the Google Test // library. This is solely for testing GetTestTypeId(). GTEST_API_ extern const TypeId kTestTypeIdInGoogleTest; -// Names of the flags (needed for parsing Google Test flags). -const char kAlsoRunDisabledTestsFlag[] = "also_run_disabled_tests"; -const char kBreakOnFailureFlag[] = "break_on_failure"; -const char kCatchExceptionsFlag[] = "catch_exceptions"; -const char kColorFlag[] = "color"; -const char kFilterFlag[] = "filter"; -const char kListTestsFlag[] = "list_tests"; -const char kOutputFlag[] = "output"; -const char kPrintTimeFlag[] = "print_time"; -const char kPrintUTF8Flag[] = "print_utf8"; -const char kRandomSeedFlag[] = "random_seed"; -const char kRepeatFlag[] = "repeat"; -const char kShuffleFlag[] = "shuffle"; -const char kStackTraceDepthFlag[] = "stack_trace_depth"; -const char kStreamResultToFlag[] = "stream_result_to"; -const char kThrowOnFailureFlag[] = "throw_on_failure"; -const char kFlagfileFlag[] = "flagfile"; - // A valid random seed must be in [1, kMaxRandomSeed]. const int kMaxRandomSeed = 99999; @@ -122,21 +104,21 @@ GTEST_API_ std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms); // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. -GTEST_API_ bool ParseInt32Flag( - const char* str, const char* flag, Int32* value); +GTEST_API_ bool ParseFlag(const char* str, const char* flag, int32_t* value); // Returns a random seed in range [1, kMaxRandomSeed] based on the // given --gtest_random_seed flag value. -inline int GetRandomSeedFromFlag(Int32 random_seed_flag) { - const unsigned int raw_seed = (random_seed_flag == 0) ? - static_cast<unsigned int>(GetTimeInMillis()) : - static_cast<unsigned int>(random_seed_flag); +inline int GetRandomSeedFromFlag(int32_t random_seed_flag) { + const unsigned int raw_seed = + (random_seed_flag == 0) ? static_cast<unsigned int>(GetTimeInMillis()) + : static_cast<unsigned int>(random_seed_flag); // Normalizes the actual seed to range [1, kMaxRandomSeed] such that // it's easy to type. const int normalized_seed = static_cast<int>((raw_seed - 1U) % - static_cast<unsigned int>(kMaxRandomSeed)) + 1; + static_cast<unsigned int>(kMaxRandomSeed)) + + 1; return normalized_seed; } @@ -157,46 +139,54 @@ class GTestFlagSaver { public: // The c'tor. GTestFlagSaver() { - also_run_disabled_tests_ = GTEST_FLAG(also_run_disabled_tests); - break_on_failure_ = GTEST_FLAG(break_on_failure); - catch_exceptions_ = GTEST_FLAG(catch_exceptions); - color_ = GTEST_FLAG(color); - death_test_style_ = GTEST_FLAG(death_test_style); - death_test_use_fork_ = GTEST_FLAG(death_test_use_fork); - filter_ = GTEST_FLAG(filter); - internal_run_death_test_ = GTEST_FLAG(internal_run_death_test); - list_tests_ = GTEST_FLAG(list_tests); - output_ = GTEST_FLAG(output); - print_time_ = GTEST_FLAG(print_time); - print_utf8_ = GTEST_FLAG(print_utf8); - random_seed_ = GTEST_FLAG(random_seed); - repeat_ = GTEST_FLAG(repeat); - shuffle_ = GTEST_FLAG(shuffle); - stack_trace_depth_ = GTEST_FLAG(stack_trace_depth); - stream_result_to_ = GTEST_FLAG(stream_result_to); - throw_on_failure_ = GTEST_FLAG(throw_on_failure); + also_run_disabled_tests_ = GTEST_FLAG_GET(also_run_disabled_tests); + break_on_failure_ = GTEST_FLAG_GET(break_on_failure); + catch_exceptions_ = GTEST_FLAG_GET(catch_exceptions); + color_ = GTEST_FLAG_GET(color); + death_test_style_ = GTEST_FLAG_GET(death_test_style); + death_test_use_fork_ = GTEST_FLAG_GET(death_test_use_fork); + fail_fast_ = GTEST_FLAG_GET(fail_fast); + filter_ = GTEST_FLAG_GET(filter); + internal_run_death_test_ = GTEST_FLAG_GET(internal_run_death_test); + list_tests_ = GTEST_FLAG_GET(list_tests); + output_ = GTEST_FLAG_GET(output); + brief_ = GTEST_FLAG_GET(brief); + print_time_ = GTEST_FLAG_GET(print_time); + print_utf8_ = GTEST_FLAG_GET(print_utf8); + random_seed_ = GTEST_FLAG_GET(random_seed); + repeat_ = GTEST_FLAG_GET(repeat); + recreate_environments_when_repeating_ = + GTEST_FLAG_GET(recreate_environments_when_repeating); + shuffle_ = GTEST_FLAG_GET(shuffle); + stack_trace_depth_ = GTEST_FLAG_GET(stack_trace_depth); + stream_result_to_ = GTEST_FLAG_GET(stream_result_to); + throw_on_failure_ = GTEST_FLAG_GET(throw_on_failure); } // The d'tor is not virtual. DO NOT INHERIT FROM THIS CLASS. ~GTestFlagSaver() { - GTEST_FLAG(also_run_disabled_tests) = also_run_disabled_tests_; - GTEST_FLAG(break_on_failure) = break_on_failure_; - GTEST_FLAG(catch_exceptions) = catch_exceptions_; - GTEST_FLAG(color) = color_; - GTEST_FLAG(death_test_style) = death_test_style_; - GTEST_FLAG(death_test_use_fork) = death_test_use_fork_; - GTEST_FLAG(filter) = filter_; - GTEST_FLAG(internal_run_death_test) = internal_run_death_test_; - GTEST_FLAG(list_tests) = list_tests_; - GTEST_FLAG(output) = output_; - GTEST_FLAG(print_time) = print_time_; - GTEST_FLAG(print_utf8) = print_utf8_; - GTEST_FLAG(random_seed) = random_seed_; - GTEST_FLAG(repeat) = repeat_; - GTEST_FLAG(shuffle) = shuffle_; - GTEST_FLAG(stack_trace_depth) = stack_trace_depth_; - GTEST_FLAG(stream_result_to) = stream_result_to_; - GTEST_FLAG(throw_on_failure) = throw_on_failure_; + GTEST_FLAG_SET(also_run_disabled_tests, also_run_disabled_tests_); + GTEST_FLAG_SET(break_on_failure, break_on_failure_); + GTEST_FLAG_SET(catch_exceptions, catch_exceptions_); + GTEST_FLAG_SET(color, color_); + GTEST_FLAG_SET(death_test_style, death_test_style_); + GTEST_FLAG_SET(death_test_use_fork, death_test_use_fork_); + GTEST_FLAG_SET(filter, filter_); + GTEST_FLAG_SET(fail_fast, fail_fast_); + GTEST_FLAG_SET(internal_run_death_test, internal_run_death_test_); + GTEST_FLAG_SET(list_tests, list_tests_); + GTEST_FLAG_SET(output, output_); + GTEST_FLAG_SET(brief, brief_); + GTEST_FLAG_SET(print_time, print_time_); + GTEST_FLAG_SET(print_utf8, print_utf8_); + GTEST_FLAG_SET(random_seed, random_seed_); + GTEST_FLAG_SET(repeat, repeat_); + GTEST_FLAG_SET(recreate_environments_when_repeating, + recreate_environments_when_repeating_); + GTEST_FLAG_SET(shuffle, shuffle_); + GTEST_FLAG_SET(stack_trace_depth, stack_trace_depth_); + GTEST_FLAG_SET(stream_result_to, stream_result_to_); + GTEST_FLAG_SET(throw_on_failure, throw_on_failure_); } private: @@ -207,16 +197,19 @@ class GTestFlagSaver { std::string color_; std::string death_test_style_; bool death_test_use_fork_; + bool fail_fast_; std::string filter_; std::string internal_run_death_test_; bool list_tests_; std::string output_; + bool brief_; bool print_time_; bool print_utf8_; - internal::Int32 random_seed_; - internal::Int32 repeat_; + int32_t random_seed_; + int32_t repeat_; + bool recreate_environments_when_repeating_; bool shuffle_; - internal::Int32 stack_trace_depth_; + int32_t stack_trace_depth_; std::string stream_result_to_; bool throw_on_failure_; } GTEST_ATTRIBUTE_UNUSED_; @@ -227,7 +220,7 @@ class GTestFlagSaver { // If the code_point is not a valid Unicode code point // (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted // to "(Invalid Unicode 0xXXXXXXXX)". -GTEST_API_ std::string CodePointToUtf8(UInt32 code_point); +GTEST_API_ std::string CodePointToUtf8(uint32_t code_point); // Converts a wide string to a narrow string in UTF-8 encoding. // The wide string is assumed to have the following encoding: @@ -260,17 +253,17 @@ GTEST_API_ bool ShouldShard(const char* total_shards_str, const char* shard_index_str, bool in_subprocess_for_death_test); -// Parses the environment variable var as an Int32. If it is unset, -// returns default_val. If it is not an Int32, prints an error and +// Parses the environment variable var as a 32-bit integer. If it is unset, +// returns default_val. If it is not a 32-bit integer, prints an error and // and aborts. -GTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val); +GTEST_API_ int32_t Int32FromEnvOrDie(const char* env_var, int32_t default_val); // Given the total number of shards, the shard index, and the test id, // returns true if and only if the test should be run on this shard. The test id // is some arbitrary but unique non-negative integer assigned to each test // method. Assumes that 0 <= shard_index < total_shards. -GTEST_API_ bool ShouldRunTestOnShard( - int total_shards, int shard_index, int test_id); +GTEST_API_ bool ShouldRunTestOnShard(int total_shards, int shard_index, + int test_id); // STL container utilities. @@ -281,9 +274,8 @@ inline int CountIf(const Container& c, Predicate predicate) { // Implemented as an explicit loop since std::count_if() in libCstd on // Solaris has a non-standard signature. int count = 0; - for (typename Container::const_iterator it = c.begin(); it != c.end(); ++it) { - if (predicate(*it)) - ++count; + for (auto it = c.begin(); it != c.end(); ++it) { + if (predicate(*it)) ++count; } return count; } @@ -323,7 +315,7 @@ void ShuffleRange(internal::Random* random, int begin, int end, const int last_in_range = begin + range_width - 1; const int selected = begin + - static_cast<int>(random->Generate(static_cast<UInt32>(range_width))); + static_cast<int>(random->Generate(static_cast<uint32_t>(range_width))); std::swap((*v)[static_cast<size_t>(selected)], (*v)[static_cast<size_t>(last_in_range)]); } @@ -385,13 +377,6 @@ class GTEST_API_ UnitTestOptions { // Functions for processing the gtest_filter flag. - // Returns true if and only if the wildcard pattern matches the string. - // The first ':' or '\0' character in pattern marks the end of it. - // - // This recursive algorithm isn't very efficient, but is clear and - // works well enough for matching test names, which are short. - static bool PatternMatchesString(const char *pattern, const char *str); - // Returns true if and only if the user-specified filter matches the test // suite name and the test name. static bool FilterMatchesTest(const std::string& test_suite_name, @@ -439,7 +424,9 @@ class OsStackTraceGetterInterface { static const char* const kElidedFramesMarker; private: - GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetterInterface); + OsStackTraceGetterInterface(const OsStackTraceGetterInterface&) = delete; + OsStackTraceGetterInterface& operator=(const OsStackTraceGetterInterface&) = + delete; }; // A working implementation of the OsStackTraceGetterInterface interface. @@ -461,7 +448,8 @@ class OsStackTraceGetter : public OsStackTraceGetterInterface { void* caller_frame_ = nullptr; #endif // GTEST_HAS_ABSL - GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetter); + OsStackTraceGetter(const OsStackTraceGetter&) = delete; + OsStackTraceGetter& operator=(const OsStackTraceGetter&) = delete; }; // Information about a Google Test trace point. @@ -474,7 +462,7 @@ struct TraceInfo { // This is the default global test part result reporter used in UnitTestImpl. // This class should only be used by UnitTestImpl. class DefaultGlobalTestPartResultReporter - : public TestPartResultReporterInterface { + : public TestPartResultReporterInterface { public: explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test); // Implements the TestPartResultReporterInterface. Reports the test part @@ -484,7 +472,10 @@ class DefaultGlobalTestPartResultReporter private: UnitTestImpl* const unit_test_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultGlobalTestPartResultReporter); + DefaultGlobalTestPartResultReporter( + const DefaultGlobalTestPartResultReporter&) = delete; + DefaultGlobalTestPartResultReporter& operator=( + const DefaultGlobalTestPartResultReporter&) = delete; }; // This is the default per thread test part result reporter used in @@ -500,7 +491,10 @@ class DefaultPerThreadTestPartResultReporter private: UnitTestImpl* const unit_test_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultPerThreadTestPartResultReporter); + DefaultPerThreadTestPartResultReporter( + const DefaultPerThreadTestPartResultReporter&) = delete; + DefaultPerThreadTestPartResultReporter& operator=( + const DefaultPerThreadTestPartResultReporter&) = delete; }; // The private implementation of the UnitTest class. We don't protect @@ -638,7 +632,8 @@ class GTEST_API_ UnitTestImpl { // For example, if Foo() calls Bar(), which in turn calls // CurrentOsStackTraceExceptTop(1), Foo() will be included in the // trace but Bar() and CurrentOsStackTraceExceptTop() won't. - std::string CurrentOsStackTraceExceptTop(int skip_count) GTEST_NO_INLINE_; + std::string CurrentOsStackTraceExceptTop(int skip_count) + GTEST_NO_INLINE_ GTEST_NO_TAIL_CALL_; // Finds and returns a TestSuite with the given name. If one doesn't // exist, creates one and returns it. @@ -646,10 +641,10 @@ class GTEST_API_ UnitTestImpl { // Arguments: // // test_suite_name: name of the test suite - // type_param: the name of the test's type parameter, or NULL if - // this is not a typed or a type-parameterized test. - // set_up_tc: pointer to the function that sets up the test suite - // tear_down_tc: pointer to the function that tears down the test suite + // type_param: the name of the test's type parameter, or NULL if + // this is not a typed or a type-parameterized test. + // set_up_tc: pointer to the function that sets up the test suite + // tear_down_tc: pointer to the function that tears down the test suite TestSuite* GetTestSuite(const char* test_suite_name, const char* type_param, internal::SetUpTestSuiteFunc set_up_tc, internal::TearDownTestSuiteFunc tear_down_tc); @@ -673,6 +668,7 @@ class GTEST_API_ UnitTestImpl { void AddTestInfo(internal::SetUpTestSuiteFunc set_up_tc, internal::TearDownTestSuiteFunc tear_down_tc, TestInfo* test_info) { +#if GTEST_HAS_DEATH_TEST // In order to support thread-safe death tests, we need to // remember the original working directory when the test program // was first invoked. We cannot do this in RUN_ALL_TESTS(), as @@ -685,6 +681,7 @@ class GTEST_API_ UnitTestImpl { GTEST_CHECK_(!original_working_dir_.IsEmpty()) << "Failed to get the current working directory."; } +#endif // GTEST_HAS_DEATH_TEST GetTestSuite(test_info->test_suite_name(), test_info->type_param(), set_up_tc, tear_down_tc) @@ -697,6 +694,17 @@ class GTEST_API_ UnitTestImpl { return parameterized_test_registry_; } + std::set<std::string>* ignored_parameterized_test_suites() { + return &ignored_parameterized_test_suites_; + } + + // Returns TypeParameterizedTestSuiteRegistry object used to keep track of + // type-parameterized tests and instantiations of them. + internal::TypeParameterizedTestSuiteRegistry& + type_parameterized_test_registry() { + return type_parameterized_test_registry_; + } + // Sets the TestSuite object for the test that's currently running. void set_current_test_suite(TestSuite* a_current_test_suite) { current_test_suite_ = a_current_test_suite; @@ -729,9 +737,7 @@ class GTEST_API_ UnitTestImpl { } // Clears the results of ad-hoc test assertions. - void ClearAdHocTestResult() { - ad_hoc_test_result_.Clear(); - } + void ClearAdHocTestResult() { ad_hoc_test_result_.Clear(); } // Adds a TestProperty to the current TestResult object when invoked in a // context of a test or a test suite, or to the global property set. If the @@ -739,10 +745,7 @@ class GTEST_API_ UnitTestImpl { // updated. void RecordProperty(const TestProperty& test_property); - enum ReactionToSharding { - HONOR_SHARDING_PROTOCOL, - IGNORE_SHARDING_PROTOCOL - }; + enum ReactionToSharding { HONOR_SHARDING_PROTOCOL, IGNORE_SHARDING_PROTOCOL }; // Matches the full name of each test against the user-specified // filter to decide whether the test should run, then records the @@ -873,6 +876,12 @@ class GTEST_API_ UnitTestImpl { // ParameterizedTestRegistry object used to register value-parameterized // tests. internal::ParameterizedTestSuiteRegistry parameterized_test_registry_; + internal::TypeParameterizedTestSuiteRegistry + type_parameterized_test_registry_; + + // The set holding the name of parameterized + // test suites that may go uninstantiated. + std::set<std::string> ignored_parameterized_test_suites_; // Indicates whether RegisterParameterizedTests() has been called already. bool parameterized_tests_registered_; @@ -942,7 +951,8 @@ class GTEST_API_ UnitTestImpl { // starts. bool catch_exceptions_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTestImpl); + UnitTestImpl(const UnitTestImpl&) = delete; + UnitTestImpl& operator=(const UnitTestImpl&) = delete; }; // class UnitTestImpl // Convenience function for accessing the global UnitTest @@ -965,8 +975,9 @@ GTEST_API_ bool IsValidEscape(char ch); GTEST_API_ bool AtomMatchesChar(bool escaped, char pattern, char ch); GTEST_API_ bool ValidateRegex(const char* regex); GTEST_API_ bool MatchRegexAtHead(const char* regex, const char* str); -GTEST_API_ bool MatchRepetitionAndRegexAtHead( - bool escaped, char ch, char repeat, const char* regex, const char* str); +GTEST_API_ bool MatchRepetitionAndRegexAtHead(bool escaped, char ch, + char repeat, const char* regex, + const char* str); GTEST_API_ bool MatchRegexAnywhere(const char* regex, const char* str); #endif // GTEST_USES_SIMPLE_RE @@ -999,20 +1010,9 @@ bool ParseNaturalNumber(const ::std::string& str, Integer* number) { char* end; // BiggestConvertible is the largest integer type that system-provided // string-to-number conversion routines can return. + using BiggestConvertible = unsigned long long; // NOLINT -# if GTEST_OS_WINDOWS && !defined(__GNUC__) - - // MSVC and C++ Builder define __int64 instead of the standard long long. - typedef unsigned __int64 BiggestConvertible; - const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10); - -# else - - typedef unsigned long long BiggestConvertible; // NOLINT - const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10); - -# endif // GTEST_OS_WINDOWS && !defined(__GNUC__) - + const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10); // NOLINT const bool parse_success = *end == '\0' && errno == 0; GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed)); @@ -1079,8 +1079,7 @@ class StreamingListener : public EmptyTestEventListener { } ~SocketWriter() override { - if (sockfd_ != -1) - CloseConnection(); + if (sockfd_ != -1) CloseConnection(); } // Sends a string to the socket. @@ -1090,9 +1089,8 @@ class StreamingListener : public EmptyTestEventListener { const auto len = static_cast<size_t>(message.length()); if (write(sockfd_, message.c_str(), len) != static_cast<ssize_t>(len)) { - GTEST_LOG_(WARNING) - << "stream_result_to: failed to stream to " - << host_name_ << ":" << port_num_; + GTEST_LOG_(WARNING) << "stream_result_to: failed to stream to " + << host_name_ << ":" << port_num_; } } @@ -1113,7 +1111,8 @@ class StreamingListener : public EmptyTestEventListener { const std::string host_name_; const std::string port_num_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(SocketWriter); + SocketWriter(const SocketWriter&) = delete; + SocketWriter& operator=(const SocketWriter&) = delete; }; // class SocketWriter // Escapes '=', '&', '%', and '\n' characters in str as "%xx". @@ -1125,7 +1124,9 @@ class StreamingListener : public EmptyTestEventListener { } explicit StreamingListener(AbstractSocketWriter* socket_writer) - : socket_writer_(socket_writer) { Start(); } + : socket_writer_(socket_writer) { + Start(); + } void OnTestProgramStart(const UnitTest& /* unit_test */) override { SendLn("event=TestProgramStart"); @@ -1148,22 +1149,22 @@ class StreamingListener : public EmptyTestEventListener { void OnTestIterationEnd(const UnitTest& unit_test, int /* iteration */) override { - SendLn("event=TestIterationEnd&passed=" + - FormatBool(unit_test.Passed()) + "&elapsed_time=" + - StreamableToString(unit_test.elapsed_time()) + "ms"); + SendLn("event=TestIterationEnd&passed=" + FormatBool(unit_test.Passed()) + + "&elapsed_time=" + StreamableToString(unit_test.elapsed_time()) + + "ms"); } // Note that "event=TestCaseStart" is a wire format and has to remain - // "case" for compatibilty - void OnTestCaseStart(const TestCase& test_case) override { - SendLn(std::string("event=TestCaseStart&name=") + test_case.name()); + // "case" for compatibility + void OnTestSuiteStart(const TestSuite& test_suite) override { + SendLn(std::string("event=TestCaseStart&name=") + test_suite.name()); } // Note that "event=TestCaseEnd" is a wire format and has to remain - // "case" for compatibilty - void OnTestCaseEnd(const TestCase& test_case) override { - SendLn("event=TestCaseEnd&passed=" + FormatBool(test_case.Passed()) + - "&elapsed_time=" + StreamableToString(test_case.elapsed_time()) + + // "case" for compatibility + void OnTestSuiteEnd(const TestSuite& test_suite) override { + SendLn("event=TestCaseEnd&passed=" + FormatBool(test_suite.Passed()) + + "&elapsed_time=" + StreamableToString(test_suite.elapsed_time()) + "ms"); } @@ -1173,8 +1174,7 @@ class StreamingListener : public EmptyTestEventListener { void OnTestEnd(const TestInfo& test_info) override { SendLn("event=TestEnd&passed=" + - FormatBool((test_info.result())->Passed()) + - "&elapsed_time=" + + FormatBool((test_info.result())->Passed()) + "&elapsed_time=" + StreamableToString((test_info.result())->elapsed_time()) + "ms"); } @@ -1198,7 +1198,8 @@ class StreamingListener : public EmptyTestEventListener { const std::unique_ptr<AbstractSocketWriter> socket_writer_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamingListener); + StreamingListener(const StreamingListener&) = delete; + StreamingListener& operator=(const StreamingListener&) = delete; }; // class StreamingListener #endif // GTEST_CAN_STREAM_RESULTS_ @@ -1208,4 +1209,4 @@ class StreamingListener : public EmptyTestEventListener { GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 -#endif // GTEST_SRC_GTEST_INTERNAL_INL_H_ +#endif // GOOGLETEST_SRC_GTEST_INTERNAL_INL_H_ diff --git a/test/gtest/src/gtest-matchers.cc b/test/gtest_vendor/src/gtest-matchers.cc similarity index 75% rename from test/gtest/src/gtest-matchers.cc rename to test/gtest_vendor/src/gtest-matchers.cc index 7d2fb6851..7e3bcc0cf 100644 --- a/test/gtest/src/gtest-matchers.cc +++ b/test/gtest_vendor/src/gtest-matchers.cc @@ -32,12 +32,13 @@ // This file implements just enough of the matcher interface to allow // EXPECT_DEATH and friends to accept a matcher argument. -#include "gtest/internal/gtest-internal.h" -#include "gtest/internal/gtest-port.h" #include "gtest/gtest-matchers.h" #include <string> +#include "gtest/internal/gtest-internal.h" +#include "gtest/internal/gtest-port.h" + namespace testing { // Constructs a matcher that matches a const std::string& whose value is @@ -58,40 +59,40 @@ Matcher<std::string>::Matcher(const std::string& s) { *this = Eq(s); } // s. Matcher<std::string>::Matcher(const char* s) { *this = Eq(std::string(s)); } -#if GTEST_HAS_ABSL -// Constructs a matcher that matches a const absl::string_view& whose value is +#if GTEST_INTERNAL_HAS_STRING_VIEW +// Constructs a matcher that matches a const StringView& whose value is // equal to s. -Matcher<const absl::string_view&>::Matcher(const std::string& s) { +Matcher<const internal::StringView&>::Matcher(const std::string& s) { *this = Eq(s); } -// Constructs a matcher that matches a const absl::string_view& whose value is +// Constructs a matcher that matches a const StringView& whose value is // equal to s. -Matcher<const absl::string_view&>::Matcher(const char* s) { +Matcher<const internal::StringView&>::Matcher(const char* s) { *this = Eq(std::string(s)); } -// Constructs a matcher that matches a const absl::string_view& whose value is +// Constructs a matcher that matches a const StringView& whose value is // equal to s. -Matcher<const absl::string_view&>::Matcher(absl::string_view s) { +Matcher<const internal::StringView&>::Matcher(internal::StringView s) { *this = Eq(std::string(s)); } -// Constructs a matcher that matches a absl::string_view whose value is equal to +// Constructs a matcher that matches a StringView whose value is equal to // s. -Matcher<absl::string_view>::Matcher(const std::string& s) { *this = Eq(s); } +Matcher<internal::StringView>::Matcher(const std::string& s) { *this = Eq(s); } -// Constructs a matcher that matches a absl::string_view whose value is equal to +// Constructs a matcher that matches a StringView whose value is equal to // s. -Matcher<absl::string_view>::Matcher(const char* s) { +Matcher<internal::StringView>::Matcher(const char* s) { *this = Eq(std::string(s)); } -// Constructs a matcher that matches a absl::string_view whose value is equal to +// Constructs a matcher that matches a StringView whose value is equal to // s. -Matcher<absl::string_view>::Matcher(absl::string_view s) { +Matcher<internal::StringView>::Matcher(internal::StringView s) { *this = Eq(std::string(s)); } -#endif // GTEST_HAS_ABSL +#endif // GTEST_INTERNAL_HAS_STRING_VIEW } // namespace testing diff --git a/test/gtest/src/gtest-port.cc b/test/gtest_vendor/src/gtest-port.cc similarity index 82% rename from test/gtest/src/gtest-port.cc rename to test/gtest_vendor/src/gtest-port.cc index fc5ba6bec..d797fe4d5 100644 --- a/test/gtest/src/gtest-port.cc +++ b/test/gtest_vendor/src/gtest-port.cc @@ -27,60 +27,62 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - #include "gtest/internal/gtest-port.h" #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> + +#include <cstdint> #include <fstream> #include <memory> #if GTEST_OS_WINDOWS -# include <windows.h> -# include <io.h> -# include <sys/stat.h> -# include <map> // Used in ThreadLocal. -# ifdef _MSC_VER -# include <crtdbg.h> -# endif // _MSC_VER +#include <io.h> +#include <sys/stat.h> +#include <windows.h> + +#include <map> // Used in ThreadLocal. +#ifdef _MSC_VER +#include <crtdbg.h> +#endif // _MSC_VER #else -# include <unistd.h> +#include <unistd.h> #endif // GTEST_OS_WINDOWS #if GTEST_OS_MAC -# include <mach/mach_init.h> -# include <mach/task.h> -# include <mach/vm_map.h> +#include <mach/mach_init.h> +#include <mach/task.h> +#include <mach/vm_map.h> #endif // GTEST_OS_MAC #if GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \ GTEST_OS_NETBSD || GTEST_OS_OPENBSD -# include <sys/sysctl.h> -# if GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD -# include <sys/user.h> -# endif +#include <sys/sysctl.h> +#if GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD +#include <sys/user.h> +#endif #endif #if GTEST_OS_QNX -# include <devctl.h> -# include <fcntl.h> -# include <sys/procfs.h> +#include <devctl.h> +#include <fcntl.h> +#include <sys/procfs.h> #endif // GTEST_OS_QNX #if GTEST_OS_AIX -# include <procinfo.h> -# include <sys/types.h> +#include <procinfo.h> +#include <sys/types.h> #endif // GTEST_OS_AIX #if GTEST_OS_FUCHSIA -# include <zircon/process.h> -# include <zircon/syscalls.h> +#include <zircon/process.h> +#include <zircon/syscalls.h> #endif // GTEST_OS_FUCHSIA -#include "gtest/gtest-spi.h" #include "gtest/gtest-message.h" +#include "gtest/gtest-spi.h" #include "gtest/internal/gtest-internal.h" #include "gtest/internal/gtest-string.h" #include "src/gtest-internal-inl.h" @@ -88,16 +90,7 @@ namespace testing { namespace internal { -#if defined(_MSC_VER) || defined(__BORLANDC__) -// MSVC and C++Builder do not provide a definition of STDERR_FILENO. -const int kStdOutFileno = 1; -const int kStdErrFileno = 2; -#else -const int kStdOutFileno = STDOUT_FILENO; -const int kStdErrFileno = STDERR_FILENO; -#endif // _MSC_VER - -#if GTEST_OS_LINUX +#if GTEST_OS_LINUX || GTEST_OS_GNU_HURD namespace { template <typename T> @@ -130,8 +123,7 @@ size_t GetThreadCount() { if (status == KERN_SUCCESS) { // task_threads allocates resources in thread_list and we need to free them // to avoid leaks. - vm_deallocate(task, - reinterpret_cast<vm_address_t>(thread_list), + vm_deallocate(task, reinterpret_cast<vm_address_t>(thread_list), sizeof(thread_t) * thread_count); return static_cast<size_t>(thread_count); } else { @@ -140,7 +132,7 @@ size_t GetThreadCount() { } #elif GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \ - GTEST_OS_NETBSD + GTEST_OS_NETBSD #if GTEST_OS_NETBSD #undef KERN_PROC @@ -183,12 +175,12 @@ size_t GetThreadCount() { // we cannot detect it. size_t GetThreadCount() { int mib[] = { - CTL_KERN, - KERN_PROC, - KERN_PROC_PID | KERN_PROC_SHOW_THREADS, - getpid(), - sizeof(struct kinfo_proc), - 0, + CTL_KERN, + KERN_PROC, + KERN_PROC_PID | KERN_PROC_SHOW_THREADS, + getpid(), + sizeof(struct kinfo_proc), + 0, }; u_int miblen = sizeof(mib) / sizeof(mib[0]); @@ -197,7 +189,8 @@ size_t GetThreadCount() { if (sysctl(mib, miblen, NULL, &size, NULL, 0)) { return 0; } - mib[5] = size / mib[4]; + + mib[5] = static_cast<int>(size / static_cast<size_t>(mib[4])); // populate array of structs struct kinfo_proc info[mib[5]]; @@ -206,10 +199,9 @@ size_t GetThreadCount() { } // exclude empty members - int nthreads = 0; - for (int i = 0; i < size / mib[4]; i++) { - if (info[i].p_tid != -1) - nthreads++; + size_t nthreads = 0; + for (size_t i = 0; i < size / static_cast<size_t>(mib[4]); i++) { + if (info[i].p_tid != -1) nthreads++; } return nthreads; } @@ -252,13 +244,9 @@ size_t GetThreadCount() { size_t GetThreadCount() { int dummy_buffer; size_t avail; - zx_status_t status = zx_object_get_info( - zx_process_self(), - ZX_INFO_PROCESS_THREADS, - &dummy_buffer, - 0, - nullptr, - &avail); + zx_status_t status = + zx_object_get_info(zx_process_self(), ZX_INFO_PROCESS_THREADS, + &dummy_buffer, 0, nullptr, &avail); if (status == ZX_OK) { return avail; } else { @@ -278,27 +266,15 @@ size_t GetThreadCount() { #if GTEST_IS_THREADSAFE && GTEST_OS_WINDOWS -void SleepMilliseconds(int n) { - ::Sleep(static_cast<DWORD>(n)); -} - -AutoHandle::AutoHandle() - : handle_(INVALID_HANDLE_VALUE) {} +AutoHandle::AutoHandle() : handle_(INVALID_HANDLE_VALUE) {} -AutoHandle::AutoHandle(Handle handle) - : handle_(handle) {} +AutoHandle::AutoHandle(Handle handle) : handle_(handle) {} -AutoHandle::~AutoHandle() { - Reset(); -} +AutoHandle::~AutoHandle() { Reset(); } -AutoHandle::Handle AutoHandle::Get() const { - return handle_; -} +AutoHandle::Handle AutoHandle::Get() const { return handle_; } -void AutoHandle::Reset() { - Reset(INVALID_HANDLE_VALUE); -} +void AutoHandle::Reset() { Reset(INVALID_HANDLE_VALUE); } void AutoHandle::Reset(HANDLE handle) { // Resetting with the same handle we already own is invalid. @@ -310,7 +286,7 @@ void AutoHandle::Reset(HANDLE handle) { } else { GTEST_CHECK_(!IsCloseable()) << "Resetting a valid handle to itself is likely a programmer error " - "and thus not allowed."; + "and thus not allowed."; } } @@ -320,23 +296,6 @@ bool AutoHandle::IsCloseable() const { return handle_ != nullptr && handle_ != INVALID_HANDLE_VALUE; } -Notification::Notification() - : event_(::CreateEvent(nullptr, // Default security attributes. - TRUE, // Do not reset automatically. - FALSE, // Initially unset. - nullptr)) { // Anonymous event. - GTEST_CHECK_(event_.Get() != nullptr); -} - -void Notification::Notify() { - GTEST_CHECK_(::SetEvent(event_.Get()) != FALSE); -} - -void Notification::WaitForNotification() { - GTEST_CHECK_( - ::WaitForSingleObject(event_.Get(), INFINITE) == WAIT_OBJECT_0); -} - Mutex::Mutex() : owner_thread_id_(0), type_(kDynamic), @@ -389,25 +348,25 @@ namespace { // MemoryIsNotDeallocated memory_is_not_deallocated; // critical_section_ = new CRITICAL_SECTION; // -class MemoryIsNotDeallocated -{ +class MemoryIsNotDeallocated { public: MemoryIsNotDeallocated() : old_crtdbg_flag_(0) { old_crtdbg_flag_ = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); // Set heap allocation block type to _IGNORE_BLOCK so that MS debug CRT // doesn't report mem leak if there's no matching deallocation. - _CrtSetDbgFlag(old_crtdbg_flag_ & ~_CRTDBG_ALLOC_MEM_DF); + (void)_CrtSetDbgFlag(old_crtdbg_flag_ & ~_CRTDBG_ALLOC_MEM_DF); } ~MemoryIsNotDeallocated() { // Restore the original _CRTDBG_ALLOC_MEM_DF flag - _CrtSetDbgFlag(old_crtdbg_flag_); + (void)_CrtSetDbgFlag(old_crtdbg_flag_); } private: int old_crtdbg_flag_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(MemoryIsNotDeallocated); + MemoryIsNotDeallocated(const MemoryIsNotDeallocated&) = delete; + MemoryIsNotDeallocated& operator=(const MemoryIsNotDeallocated&) = delete; }; #endif // _MSC_VER @@ -433,15 +392,13 @@ void Mutex::ThreadSafeLazyInit() { ::InitializeCriticalSection(critical_section_); // Updates the critical_section_init_phase_ to 2 to signal // initialization complete. - GTEST_CHECK_(::InterlockedCompareExchange( - &critical_section_init_phase_, 2L, 1L) == - 1L); + GTEST_CHECK_(::InterlockedCompareExchange(&critical_section_init_phase_, + 2L, 1L) == 1L); break; case 1: // Somebody else is already initializing the mutex; spin until they // are done. - while (::InterlockedCompareExchange(&critical_section_init_phase_, - 2L, + while (::InterlockedCompareExchange(&critical_section_init_phase_, 2L, 2L) != 2L) { // Possibly yields the rest of the thread's time slice to other // threads. @@ -486,9 +443,7 @@ class ThreadWithParamSupport : public ThreadWithParamBase { private: struct ThreadMainParam { ThreadMainParam(Runnable* runnable, Notification* thread_can_start) - : runnable_(runnable), - thread_can_start_(thread_can_start) { - } + : runnable_(runnable), thread_can_start_(thread_can_start) {} std::unique_ptr<Runnable> runnable_; // Does not own. Notification* thread_can_start_; @@ -506,20 +461,18 @@ class ThreadWithParamSupport : public ThreadWithParamBase { // Prohibit instantiation. ThreadWithParamSupport(); - GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParamSupport); + ThreadWithParamSupport(const ThreadWithParamSupport&) = delete; + ThreadWithParamSupport& operator=(const ThreadWithParamSupport&) = delete; }; } // namespace -ThreadWithParamBase::ThreadWithParamBase(Runnable *runnable, +ThreadWithParamBase::ThreadWithParamBase(Runnable* runnable, Notification* thread_can_start) - : thread_(ThreadWithParamSupport::CreateThread(runnable, - thread_can_start)) { -} + : thread_( + ThreadWithParamSupport::CreateThread(runnable, thread_can_start)) {} -ThreadWithParamBase::~ThreadWithParamBase() { - Join(); -} +ThreadWithParamBase::~ThreadWithParamBase() { Join(); } void ThreadWithParamBase::Join() { GTEST_CHECK_(::WaitForSingleObject(thread_.Get(), INFINITE) == WAIT_OBJECT_0) @@ -536,6 +489,9 @@ class ThreadLocalRegistryImpl { // Returns a value that can be used to identify the thread from other threads. static ThreadLocalValueHolderBase* GetValueOnCurrentThread( const ThreadLocalBase* thread_local_instance) { +#ifdef _MSC_VER + MemoryIsNotDeallocated memory_is_not_deallocated; +#endif // _MSC_VER DWORD current_thread = ::GetCurrentThreadId(); MutexLock lock(&mutex_); ThreadIdToThreadLocals* const thread_to_thread_locals = @@ -543,8 +499,10 @@ class ThreadLocalRegistryImpl { ThreadIdToThreadLocals::iterator thread_local_pos = thread_to_thread_locals->find(current_thread); if (thread_local_pos == thread_to_thread_locals->end()) { - thread_local_pos = thread_to_thread_locals->insert( - std::make_pair(current_thread, ThreadLocalValues())).first; + thread_local_pos = + thread_to_thread_locals + ->insert(std::make_pair(current_thread, ThreadLocalValues())) + .first; StartWatcherThreadFor(current_thread); } ThreadLocalValues& thread_local_values = thread_local_pos->second; @@ -572,9 +530,8 @@ class ThreadLocalRegistryImpl { ThreadIdToThreadLocals* const thread_to_thread_locals = GetThreadLocalsMapLocked(); for (ThreadIdToThreadLocals::iterator it = - thread_to_thread_locals->begin(); - it != thread_to_thread_locals->end(); - ++it) { + thread_to_thread_locals->begin(); + it != thread_to_thread_locals->end(); ++it) { ThreadLocalValues& thread_local_values = it->second; ThreadLocalValues::iterator value_pos = thread_local_values.find(thread_local_instance); @@ -604,9 +561,8 @@ class ThreadLocalRegistryImpl { if (thread_local_pos != thread_to_thread_locals->end()) { ThreadLocalValues& thread_local_values = thread_local_pos->second; for (ThreadLocalValues::iterator value_pos = - thread_local_values.begin(); - value_pos != thread_local_values.end(); - ++value_pos) { + thread_local_values.begin(); + value_pos != thread_local_values.end(); ++value_pos) { value_holders.push_back(value_pos->second); } thread_to_thread_locals->erase(thread_local_pos); @@ -632,9 +588,8 @@ class ThreadLocalRegistryImpl { static void StartWatcherThreadFor(DWORD thread_id) { // The returned handle will be kept in thread_map and closed by // watcher_thread in WatcherThreadFunc. - HANDLE thread = ::OpenThread(SYNCHRONIZE | THREAD_QUERY_INFORMATION, - FALSE, - thread_id); + HANDLE thread = + ::OpenThread(SYNCHRONIZE | THREAD_QUERY_INFORMATION, FALSE, thread_id); GTEST_CHECK_(thread != nullptr); // We need to pass a valid thread ID pointer into CreateThread for it // to work correctly under Win98. @@ -645,7 +600,8 @@ class ThreadLocalRegistryImpl { &ThreadLocalRegistryImpl::WatcherThreadFunc, reinterpret_cast<LPVOID>(new ThreadIdAndHandle(thread_id, thread)), CREATE_SUSPENDED, &watcher_thread_id); - GTEST_CHECK_(watcher_thread != nullptr); + GTEST_CHECK_(watcher_thread != nullptr) + << "CreateThread failed with error " << ::GetLastError() << "."; // Give the watcher thread the same priority as ours to avoid being // blocked by it. ::SetThreadPriority(watcher_thread, @@ -659,8 +615,7 @@ class ThreadLocalRegistryImpl { static DWORD WINAPI WatcherThreadFunc(LPVOID param) { const ThreadIdAndHandle* tah = reinterpret_cast<const ThreadIdAndHandle*>(param); - GTEST_CHECK_( - ::WaitForSingleObject(tah->second, INFINITE) == WAIT_OBJECT_0); + GTEST_CHECK_(::WaitForSingleObject(tah->second, INFINITE) == WAIT_OBJECT_0); OnThreadExit(tah->first); ::CloseHandle(tah->second); delete tah; @@ -683,17 +638,18 @@ class ThreadLocalRegistryImpl { static Mutex thread_map_mutex_; }; -Mutex ThreadLocalRegistryImpl::mutex_(Mutex::kStaticMutex); -Mutex ThreadLocalRegistryImpl::thread_map_mutex_(Mutex::kStaticMutex); +Mutex ThreadLocalRegistryImpl::mutex_(Mutex::kStaticMutex); // NOLINT +Mutex ThreadLocalRegistryImpl::thread_map_mutex_( + Mutex::kStaticMutex); // NOLINT ThreadLocalValueHolderBase* ThreadLocalRegistry::GetValueOnCurrentThread( - const ThreadLocalBase* thread_local_instance) { + const ThreadLocalBase* thread_local_instance) { return ThreadLocalRegistryImpl::GetValueOnCurrentThread( thread_local_instance); } void ThreadLocalRegistry::OnThreadLocalDestroyed( - const ThreadLocalBase* thread_local_instance) { + const ThreadLocalBase* thread_local_instance) { ThreadLocalRegistryImpl::OnThreadLocalDestroyed(thread_local_instance); } @@ -781,7 +737,7 @@ bool IsRepeat(char ch) { return IsInSet(ch, "?*+"); } bool IsAsciiWhiteSpace(char ch) { return IsInSet(ch, " \f\n\r\t\v"); } bool IsAsciiWordChar(char ch) { return ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') || - ('0' <= ch && ch <= '9') || ch == '_'; + ('0' <= ch && ch <= '9') || ch == '_'; } // Returns true if and only if "\\c" is a supported escape sequence. @@ -794,17 +750,28 @@ bool IsValidEscape(char c) { bool AtomMatchesChar(bool escaped, char pattern_char, char ch) { if (escaped) { // "\\p" where p is pattern_char. switch (pattern_char) { - case 'd': return IsAsciiDigit(ch); - case 'D': return !IsAsciiDigit(ch); - case 'f': return ch == '\f'; - case 'n': return ch == '\n'; - case 'r': return ch == '\r'; - case 's': return IsAsciiWhiteSpace(ch); - case 'S': return !IsAsciiWhiteSpace(ch); - case 't': return ch == '\t'; - case 'v': return ch == '\v'; - case 'w': return IsAsciiWordChar(ch); - case 'W': return !IsAsciiWordChar(ch); + case 'd': + return IsAsciiDigit(ch); + case 'D': + return !IsAsciiDigit(ch); + case 'f': + return ch == '\f'; + case 'n': + return ch == '\n'; + case 'r': + return ch == '\r'; + case 's': + return IsAsciiWhiteSpace(ch); + case 'S': + return !IsAsciiWhiteSpace(ch); + case 't': + return ch == '\t'; + case 'v': + return ch == '\v'; + case 'w': + return IsAsciiWordChar(ch); + case 'W': + return !IsAsciiWordChar(ch); } return IsAsciiPunct(pattern_char) && pattern_char == ch; } @@ -815,7 +782,8 @@ bool AtomMatchesChar(bool escaped, char pattern_char, char ch) { // Helper function used by ValidateRegex() to format error messages. static std::string FormatRegexSyntaxError(const char* regex, int index) { return (Message() << "Syntax error at index " << index - << " in simple regular expression \"" << regex << "\": ").GetString(); + << " in simple regular expression \"" << regex << "\": ") + .GetString(); } // Generates non-fatal failures and returns false if regex is invalid; @@ -857,12 +825,12 @@ bool ValidateRegex(const char* regex) { << "'$' can only appear at the end."; is_valid = false; } else if (IsInSet(ch, "()[]{}|")) { - ADD_FAILURE() << FormatRegexSyntaxError(regex, i) - << "'" << ch << "' is unsupported."; + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'" << ch + << "' is unsupported."; is_valid = false; } else if (IsRepeat(ch) && !prev_repeatable) { - ADD_FAILURE() << FormatRegexSyntaxError(regex, i) - << "'" << ch << "' can only follow a repeatable token."; + ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << "'" << ch + << "' can only follow a repeatable token."; is_valid = false; } @@ -880,12 +848,10 @@ bool ValidateRegex(const char* regex) { // characters to be indexable by size_t, in which case the test will // probably time out anyway. We are fine with this limitation as // std::string has it too. -bool MatchRepetitionAndRegexAtHead( - bool escaped, char c, char repeat, const char* regex, - const char* str) { +bool MatchRepetitionAndRegexAtHead(bool escaped, char c, char repeat, + const char* regex, const char* str) { const size_t min_count = (repeat == '+') ? 1 : 0; - const size_t max_count = (repeat == '?') ? 1 : - static_cast<size_t>(-1) - 1; + const size_t max_count = (repeat == '?') ? 1 : static_cast<size_t>(-1) - 1; // We cannot call numeric_limits::max() as it conflicts with the // max() macro on Windows. @@ -898,8 +864,7 @@ bool MatchRepetitionAndRegexAtHead( // greedy match. return true; } - if (str[i] == '\0' || !AtomMatchesChar(escaped, c, str[i])) - return false; + if (str[i] == '\0' || !AtomMatchesChar(escaped, c, str[i])) return false; } return false; } @@ -913,25 +878,23 @@ bool MatchRegexAtHead(const char* regex, const char* str) { // "$" only matches the end of a string. Note that regex being // valid guarantees that there's nothing after "$" in it. - if (*regex == '$') - return *str == '\0'; + if (*regex == '$') return *str == '\0'; // Is the first thing in regex an escape sequence? const bool escaped = *regex == '\\'; - if (escaped) - ++regex; + if (escaped) ++regex; if (IsRepeat(regex[1])) { // MatchRepetitionAndRegexAtHead() calls MatchRegexAtHead(), so // here's an indirect recursion. It terminates as the regex gets // shorter in each recursion. - return MatchRepetitionAndRegexAtHead( - escaped, regex[0], regex[1], regex + 2, str); + return MatchRepetitionAndRegexAtHead(escaped, regex[0], regex[1], regex + 2, + str); } else { // regex isn't empty, isn't "$", and doesn't start with a // repetition. We match the first atom of regex with the first // character of str and recurse. return (*str != '\0') && AtomMatchesChar(escaped, *regex, *str) && - MatchRegexAtHead(regex + 1, str + 1); + MatchRegexAtHead(regex + 1, str + 1); } } @@ -946,13 +909,11 @@ bool MatchRegexAtHead(const char* regex, const char* str) { bool MatchRegexAnywhere(const char* regex, const char* str) { if (regex == nullptr || str == nullptr) return false; - if (*regex == '^') - return MatchRegexAtHead(regex + 1, str); + if (*regex == '^') return MatchRegexAtHead(regex + 1, str); // A successful match can be anywhere in str. do { - if (MatchRegexAtHead(regex, str)) - return true; + if (MatchRegexAtHead(regex, str)) return true; } while (*str++ != '\0'); return false; } @@ -1033,8 +994,8 @@ GTEST_API_ ::std::string FormatFileLocation(const char* file, int line) { // FormatFileLocation in order to contrast the two functions. // Note that FormatCompilerIndependentFileLocation() does NOT append colon // to the file location it produces, unlike FormatFileLocation(). -GTEST_API_ ::std::string FormatCompilerIndependentFileLocation( - const char* file, int line) { +GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char* file, + int line) { const std::string file_name(file == nullptr ? kUnknownFile : file); if (line < 0) @@ -1045,12 +1006,13 @@ GTEST_API_ ::std::string FormatCompilerIndependentFileLocation( GTestLog::GTestLog(GTestLogSeverity severity, const char* file, int line) : severity_(severity) { - const char* const marker = - severity == GTEST_INFO ? "[ INFO ]" : - severity == GTEST_WARNING ? "[WARNING]" : - severity == GTEST_ERROR ? "[ ERROR ]" : "[ FATAL ]"; - GetStream() << ::std::endl << marker << " " - << FormatFileLocation(file, line).c_str() << ": "; + const char* const marker = severity == GTEST_INFO ? "[ INFO ]" + : severity == GTEST_WARNING ? "[WARNING]" + : severity == GTEST_ERROR ? "[ ERROR ]" + : "[ FATAL ]"; + GetStream() << ::std::endl + << marker << " " << FormatFileLocation(file, line).c_str() + << ": "; } // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program. @@ -1073,27 +1035,26 @@ class CapturedStream { public: // The ctor redirects the stream to a temporary file. explicit CapturedStream(int fd) : fd_(fd), uncaptured_fd_(dup(fd)) { -# if GTEST_OS_WINDOWS - char temp_dir_path[MAX_PATH + 1] = { '\0' }; // NOLINT - char temp_file_path[MAX_PATH + 1] = { '\0' }; // NOLINT +#if GTEST_OS_WINDOWS + char temp_dir_path[MAX_PATH + 1] = {'\0'}; // NOLINT + char temp_file_path[MAX_PATH + 1] = {'\0'}; // NOLINT ::GetTempPathA(sizeof(temp_dir_path), temp_dir_path); - const UINT success = ::GetTempFileNameA(temp_dir_path, - "gtest_redir", + const UINT success = ::GetTempFileNameA(temp_dir_path, "gtest_redir", 0, // Generate unique file name. temp_file_path); GTEST_CHECK_(success != 0) << "Unable to create a temporary file in " << temp_dir_path; const int captured_fd = creat(temp_file_path, _S_IREAD | _S_IWRITE); - GTEST_CHECK_(captured_fd != -1) << "Unable to open temporary file " - << temp_file_path; + GTEST_CHECK_(captured_fd != -1) + << "Unable to open temporary file " << temp_file_path; filename_ = temp_file_path; -# else +#else // There's no guarantee that a test has write access to the current - // directory, so we create the temporary file in the /tmp directory - // instead. We use /tmp on most systems, and /sdcard on Android. - // That's because Android doesn't have /tmp. -# if GTEST_OS_LINUX_ANDROID + // directory, so we create the temporary file in a temporary directory. + std::string name_template; + +#if GTEST_OS_LINUX_ANDROID // Note: Android applications are expected to call the framework's // Context.getExternalStorageDirectory() method through JNI to get // the location of the world-writable SD Card directory. However, @@ -1105,26 +1066,53 @@ class CapturedStream { // The location /data/local/tmp is directly accessible from native code. // '/sdcard' and other variants cannot be relied on, as they are not // guaranteed to be mounted, or may have a delay in mounting. - char name_template[] = "/data/local/tmp/gtest_captured_stream.XXXXXX"; -# else - char name_template[] = "/tmp/captured_stream.XXXXXX"; -# endif // GTEST_OS_LINUX_ANDROID - const int captured_fd = mkstemp(name_template); + name_template = "/data/local/tmp/"; +#elif GTEST_OS_IOS + char user_temp_dir[PATH_MAX + 1]; + + // Documented alternative to NSTemporaryDirectory() (for obtaining creating + // a temporary directory) at + // https://developer.apple.com/library/archive/documentation/Security/Conceptual/SecureCodingGuide/Articles/RaceConditions.html#//apple_ref/doc/uid/TP40002585-SW10 + // + // _CS_DARWIN_USER_TEMP_DIR (as well as _CS_DARWIN_USER_CACHE_DIR) is not + // documented in the confstr() man page at + // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/confstr.3.html#//apple_ref/doc/man/3/confstr + // but are still available, according to the WebKit patches at + // https://trac.webkit.org/changeset/262004/webkit + // https://trac.webkit.org/changeset/263705/webkit + // + // The confstr() implementation falls back to getenv("TMPDIR"). See + // https://opensource.apple.com/source/Libc/Libc-1439.100.3/gen/confstr.c.auto.html + ::confstr(_CS_DARWIN_USER_TEMP_DIR, user_temp_dir, sizeof(user_temp_dir)); + + name_template = user_temp_dir; + if (name_template.back() != GTEST_PATH_SEP_[0]) + name_template.push_back(GTEST_PATH_SEP_[0]); +#else + name_template = "/tmp/"; +#endif + name_template.append("gtest_captured_stream.XXXXXX"); + + // mkstemp() modifies the string bytes in place, and does not go beyond the + // string's length. This results in well-defined behavior in C++17. + // + // The const_cast is needed below C++17. The constraints on std::string + // implementations in C++11 and above make assumption behind the const_cast + // fairly safe. + const int captured_fd = ::mkstemp(const_cast<char*>(name_template.data())); if (captured_fd == -1) { GTEST_LOG_(WARNING) << "Failed to create tmp file " << name_template << " for test; does the test have access to the /tmp directory?"; } - filename_ = name_template; -# endif // GTEST_OS_WINDOWS + filename_ = std::move(name_template); +#endif // GTEST_OS_WINDOWS fflush(nullptr); dup2(captured_fd, fd_); close(captured_fd); } - ~CapturedStream() { - remove(filename_.c_str()); - } + ~CapturedStream() { remove(filename_.c_str()); } std::string GetCapturedString() { if (uncaptured_fd_ != -1) { @@ -1151,7 +1139,8 @@ class CapturedStream { // Name of the temporary file holding the stderr output. ::std::string filename_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(CapturedStream); + CapturedStream(const CapturedStream&) = delete; + CapturedStream& operator=(const CapturedStream&) = delete; }; GTEST_DISABLE_MSC_DEPRECATED_POP_() @@ -1179,6 +1168,15 @@ static std::string GetCapturedStream(CapturedStream** captured_stream) { return content; } +#if defined(_MSC_VER) || defined(__BORLANDC__) +// MSVC and C++Builder do not provide a definition of STDERR_FILENO. +const int kStdOutFileno = 1; +const int kStdErrFileno = 2; +#else +const int kStdOutFileno = STDOUT_FILENO; +const int kStdErrFileno = STDERR_FILENO; +#endif // defined(_MSC_VER) || defined(__BORLANDC__) + // Starts capturing stdout. void CaptureStdout() { CaptureStream(kStdOutFileno, "stdout", &g_captured_stdout); @@ -1201,10 +1199,6 @@ std::string GetCapturedStderr() { #endif // GTEST_HAS_STREAM_REDIRECTION - - - - size_t GetFileSize(FILE* file) { fseek(file, 0, SEEK_END); return static_cast<size_t>(ftell(file)); @@ -1222,7 +1216,8 @@ std::string ReadEntireFile(FILE* file) { // Keeps reading the file until we cannot read further or the // pre-determined file size is reached. do { - bytes_last_read = fread(buffer+bytes_read, 1, file_size-bytes_read, file); + bytes_last_read = + fread(buffer + bytes_read, 1, file_size - bytes_read, file); bytes_read += bytes_last_read; } while (bytes_last_read > 0 && bytes_read < file_size); @@ -1286,7 +1281,7 @@ static std::string FlagToEnvVar(const char* flag) { // Parses 'str' for a 32-bit signed integer. If successful, writes // the result to *value and returns true; otherwise leaves *value // unchanged and returns false. -bool ParseInt32(const Message& src_text, const char* str, Int32* value) { +bool ParseInt32(const Message& src_text, const char* str, int32_t* value) { // Parses the environment variable as a decimal integer. char* end = nullptr; const long long_value = strtol(str, &end, 10); // NOLINT @@ -1303,14 +1298,14 @@ bool ParseInt32(const Message& src_text, const char* str, Int32* value) { return false; } - // Is the parsed value in the range of an Int32? - const Int32 result = static_cast<Int32>(long_value); + // Is the parsed value in the range of an int32_t? + const auto result = static_cast<int32_t>(long_value); if (long_value == LONG_MAX || long_value == LONG_MIN || // The parsed value overflows as a long. (strtol() returns // LONG_MAX or LONG_MIN when the input overflows.) result != long_value - // The parsed value overflows as an Int32. - ) { + // The parsed value overflows as an int32_t. + ) { Message msg; msg << "WARNING: " << src_text << " is expected to be a 32-bit integer, but actually" @@ -1342,7 +1337,7 @@ bool BoolFromGTestEnv(const char* flag, bool default_value) { // Reads and returns a 32-bit integer stored in the environment // variable corresponding to the given flag; if it isn't set or // doesn't represent a valid 32-bit integer, returns default_value. -Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { +int32_t Int32FromGTestEnv(const char* flag, int32_t default_value) { #if defined(GTEST_GET_INT32_FROM_ENV_) return GTEST_GET_INT32_FROM_ENV_(flag, default_value); #else @@ -1353,9 +1348,9 @@ Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { return default_value; } - Int32 result = default_value; - if (!ParseInt32(Message() << "Environment variable " << env_var, - string_value, &result)) { + int32_t result = default_value; + if (!ParseInt32(Message() << "Environment variable " << env_var, string_value, + &result)) { printf("The default value %s is used.\n", (Message() << default_value).GetString().c_str()); fflush(stdout); @@ -1374,7 +1369,7 @@ Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) { // not check that the flag is 'output' // In essence this checks an env variable called XML_OUTPUT_FILE // and if it is set we prepend "xml:" to its value, if it not set we return "" -std::string OutputFlagAlsoCheckEnvVar(){ +std::string OutputFlagAlsoCheckEnvVar() { std::string default_value_for_output_flag = ""; const char* xml_output_file_env = posix::GetEnv("XML_OUTPUT_FILE"); if (nullptr != xml_output_file_env) { diff --git a/test/gtest/src/gtest-printers.cc b/test/gtest_vendor/src/gtest-printers.cc similarity index 62% rename from test/gtest/src/gtest-printers.cc rename to test/gtest_vendor/src/gtest-printers.cc index 3337be312..f3976d230 100644 --- a/test/gtest/src/gtest-printers.cc +++ b/test/gtest_vendor/src/gtest-printers.cc @@ -27,7 +27,6 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - // Google Test - The Google C++ Testing and Mocking Framework // // This file implements a universal value printer that can print a @@ -42,11 +41,16 @@ // defines Foo. #include "gtest/gtest-printers.h" + #include <stdio.h> + #include <cctype> +#include <cstdint> #include <cwchar> #include <ostream> // NOLINT #include <string> +#include <type_traits> + #include "gtest/internal/gtest-port.h" #include "src/gtest-internal-inl.h" @@ -96,15 +100,25 @@ void PrintBytesInObjectToImpl(const unsigned char* obj_bytes, size_t count, PrintByteSegmentInObjectTo(obj_bytes, 0, kChunkSize, os); *os << " ... "; // Rounds up to 2-byte boundary. - const size_t resume_pos = (count - kChunkSize + 1)/2*2; + const size_t resume_pos = (count - kChunkSize + 1) / 2 * 2; PrintByteSegmentInObjectTo(obj_bytes, resume_pos, count - resume_pos, os); } *os << ">"; } +// Helpers for widening a character to char32_t. Since the standard does not +// specify if char / wchar_t is signed or unsigned, it is important to first +// convert it to the unsigned type of the same width before widening it to +// char32_t. +template <typename CharType> +char32_t ToChar32(CharType in) { + return static_cast<char32_t>( + static_cast<typename std::make_unsigned<CharType>::type>(in)); +} + } // namespace -namespace internal2 { +namespace internal { // Delegates to PrintBytesInObjectToImpl() to print the bytes in the // given object. The delegation simplifies the implementation, which @@ -116,36 +130,25 @@ void PrintBytesInObjectTo(const unsigned char* obj_bytes, size_t count, PrintBytesInObjectToImpl(obj_bytes, count, os); } -} // namespace internal2 - -namespace internal { - // Depending on the value of a char (or wchar_t), we print it in one // of three formats: // - as is if it's a printable ASCII (e.g. 'a', '2', ' '), // - as a hexadecimal escape sequence (e.g. '\x7F'), or // - as a special escape sequence (e.g. '\r', '\n'). -enum CharFormat { - kAsIs, - kHexEscape, - kSpecialEscape -}; +enum CharFormat { kAsIs, kHexEscape, kSpecialEscape }; // Returns true if c is a printable ASCII character. We test the // value of c directly instead of calling isprint(), which is buggy on // Windows Mobile. -inline bool IsPrintableAscii(wchar_t c) { - return 0x20 <= c && c <= 0x7E; -} +inline bool IsPrintableAscii(char32_t c) { return 0x20 <= c && c <= 0x7E; } -// Prints a wide or narrow char c as a character literal without the -// quotes, escaping it when necessary; returns how c was formatted. -// The template argument UnsignedChar is the unsigned version of Char, -// which is the type of c. -template <typename UnsignedChar, typename Char> +// Prints c (of type char, char8_t, char16_t, char32_t, or wchar_t) as a +// character literal without the quotes, escaping it when necessary; returns how +// c was formatted. +template <typename Char> static CharFormat PrintAsCharLiteralTo(Char c, ostream* os) { - wchar_t w_c = static_cast<wchar_t>(c); - switch (w_c) { + const char32_t u_c = ToChar32(c); + switch (u_c) { case L'\0': *os << "\\0"; break; @@ -177,13 +180,12 @@ static CharFormat PrintAsCharLiteralTo(Char c, ostream* os) { *os << "\\v"; break; default: - if (IsPrintableAscii(w_c)) { + if (IsPrintableAscii(u_c)) { *os << static_cast<char>(c); return kAsIs; } else { ostream::fmtflags flags = os->flags(); - *os << "\\x" << std::hex << std::uppercase - << static_cast<int>(static_cast<UnsignedChar>(c)); + *os << "\\x" << std::hex << std::uppercase << static_cast<int>(u_c); os->flags(flags); return kHexEscape; } @@ -191,9 +193,9 @@ static CharFormat PrintAsCharLiteralTo(Char c, ostream* os) { return kSpecialEscape; } -// Prints a wchar_t c as if it's part of a string literal, escaping it when +// Prints a char32_t c as if it's part of a string literal, escaping it when // necessary; returns how c was formatted. -static CharFormat PrintAsStringLiteralTo(wchar_t c, ostream* os) { +static CharFormat PrintAsStringLiteralTo(char32_t c, ostream* os) { switch (c) { case L'\'': *os << "'"; @@ -202,33 +204,60 @@ static CharFormat PrintAsStringLiteralTo(wchar_t c, ostream* os) { *os << "\\\""; return kSpecialEscape; default: - return PrintAsCharLiteralTo<wchar_t>(c, os); + return PrintAsCharLiteralTo(c, os); } } +static const char* GetCharWidthPrefix(char) { return ""; } + +static const char* GetCharWidthPrefix(signed char) { return ""; } + +static const char* GetCharWidthPrefix(unsigned char) { return ""; } + +#ifdef __cpp_char8_t +static const char* GetCharWidthPrefix(char8_t) { return "u8"; } +#endif + +static const char* GetCharWidthPrefix(char16_t) { return "u"; } + +static const char* GetCharWidthPrefix(char32_t) { return "U"; } + +static const char* GetCharWidthPrefix(wchar_t) { return "L"; } + // Prints a char c as if it's part of a string literal, escaping it when // necessary; returns how c was formatted. static CharFormat PrintAsStringLiteralTo(char c, ostream* os) { - return PrintAsStringLiteralTo( - static_cast<wchar_t>(static_cast<unsigned char>(c)), os); + return PrintAsStringLiteralTo(ToChar32(c), os); +} + +#ifdef __cpp_char8_t +static CharFormat PrintAsStringLiteralTo(char8_t c, ostream* os) { + return PrintAsStringLiteralTo(ToChar32(c), os); +} +#endif + +static CharFormat PrintAsStringLiteralTo(char16_t c, ostream* os) { + return PrintAsStringLiteralTo(ToChar32(c), os); +} + +static CharFormat PrintAsStringLiteralTo(wchar_t c, ostream* os) { + return PrintAsStringLiteralTo(ToChar32(c), os); } -// Prints a wide or narrow character c and its code. '\0' is printed -// as "'\\0'", other unprintable characters are also properly escaped -// using the standard C++ escape sequence. The template argument -// UnsignedChar is the unsigned version of Char, which is the type of c. -template <typename UnsignedChar, typename Char> +// Prints a character c (of type char, char8_t, char16_t, char32_t, or wchar_t) +// and its code. '\0' is printed as "'\\0'", other unprintable characters are +// also properly escaped using the standard C++ escape sequence. +template <typename Char> void PrintCharAndCodeTo(Char c, ostream* os) { // First, print c as a literal in the most readable form we can find. - *os << ((sizeof(c) > 1) ? "L'" : "'"); - const CharFormat format = PrintAsCharLiteralTo<UnsignedChar>(c, os); + *os << GetCharWidthPrefix(c) << "'"; + const CharFormat format = PrintAsCharLiteralTo(c, os); *os << "'"; // To aid user debugging, we also print c's code in decimal, unless // it's 0 (in which case c was printed as '\\0', making the code // obvious). - if (c == 0) - return; + if (c == 0) return; *os << " (" << static_cast<int>(c); // For more convenience, we print c's code again in hexadecimal, @@ -242,32 +271,75 @@ void PrintCharAndCodeTo(Char c, ostream* os) { *os << ")"; } -void PrintTo(unsigned char c, ::std::ostream* os) { - PrintCharAndCodeTo<unsigned char>(c, os); -} -void PrintTo(signed char c, ::std::ostream* os) { - PrintCharAndCodeTo<unsigned char>(c, os); -} +void PrintTo(unsigned char c, ::std::ostream* os) { PrintCharAndCodeTo(c, os); } +void PrintTo(signed char c, ::std::ostream* os) { PrintCharAndCodeTo(c, os); } // Prints a wchar_t as a symbol if it is printable or as its internal // code otherwise and also as its code. L'\0' is printed as "L'\\0'". -void PrintTo(wchar_t wc, ostream* os) { - PrintCharAndCodeTo<wchar_t>(wc, os); +void PrintTo(wchar_t wc, ostream* os) { PrintCharAndCodeTo(wc, os); } + +// TODO(dcheng): Consider making this delegate to PrintCharAndCodeTo() as well. +void PrintTo(char32_t c, ::std::ostream* os) { + *os << std::hex << "U+" << std::uppercase << std::setfill('0') << std::setw(4) + << static_cast<uint32_t>(c); } +// gcc/clang __{u,}int128_t +#if defined(__SIZEOF_INT128__) +void PrintTo(__uint128_t v, ::std::ostream* os) { + if (v == 0) { + *os << "0"; + return; + } + + // Buffer large enough for ceil(log10(2^128))==39 and the null terminator + char buf[40]; + char* p = buf + sizeof(buf); + + // Some configurations have a __uint128_t, but no support for built in + // division. Do manual long division instead. + + uint64_t high = static_cast<uint64_t>(v >> 64); + uint64_t low = static_cast<uint64_t>(v); + + *--p = 0; + while (high != 0 || low != 0) { + uint64_t high_mod = high % 10; + high = high / 10; + // This is the long division algorithm specialized for a divisor of 10 and + // only two elements. + // Notable values: + // 2^64 / 10 == 1844674407370955161 + // 2^64 % 10 == 6 + const uint64_t carry = 6 * high_mod + low % 10; + low = low / 10 + high_mod * 1844674407370955161 + carry / 10; + + char digit = static_cast<char>(carry % 10); + *--p = '0' + digit; + } + *os << p; +} +void PrintTo(__int128_t v, ::std::ostream* os) { + __uint128_t uv = static_cast<__uint128_t>(v); + if (v < 0) { + *os << "-"; + uv = -uv; + } + PrintTo(uv, os); +} +#endif // __SIZEOF_INT128__ + // Prints the given array of characters to the ostream. CharType must be either -// char or wchar_t. +// char, char8_t, char16_t, char32_t, or wchar_t. // The array starts at begin, the length is len, it may include '\0' characters // and may not be NUL-terminated. template <typename CharType> -GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ -GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ -GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ -GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ -static CharFormat PrintCharsAsStringTo( - const CharType* begin, size_t len, ostream* os) { - const char* const kQuoteBegin = sizeof(CharType) == 1 ? "\"" : "L\""; - *os << kQuoteBegin; +GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ + GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ + GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ static CharFormat + PrintCharsAsStringTo(const CharType* begin, size_t len, ostream* os) { + const char* const quote_prefix = GetCharWidthPrefix(*begin); + *os << quote_prefix << "\""; bool is_previous_hex = false; CharFormat print_format = kAsIs; for (size_t index = 0; index < len; ++index) { @@ -276,7 +348,7 @@ static CharFormat PrintCharsAsStringTo( // Previous character is of '\x..' form and this character can be // interpreted as another hexadecimal digit in its number. Break string to // disambiguate. - *os << "\" " << kQuoteBegin; + *os << "\" " << quote_prefix << "\""; } is_previous_hex = PrintAsStringLiteralTo(cur, os) == kHexEscape; // Remember if any characters required hex escaping. @@ -291,12 +363,11 @@ static CharFormat PrintCharsAsStringTo( // Prints a (const) char/wchar_t array of 'len' elements, starting at address // 'begin'. CharType must be either char or wchar_t. template <typename CharType> -GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ -GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ -GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ -GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ -static void UniversalPrintCharArray( - const CharType* begin, size_t len, ostream* os) { +GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ + GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ + GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ static void + UniversalPrintCharArray(const CharType* begin, size_t len, + ostream* os) { // The code // const char kFoo[] = "foo"; // generates an array of 4, not 3, elements, with the last one being '\0'. @@ -322,22 +393,57 @@ void UniversalPrintArray(const char* begin, size_t len, ostream* os) { UniversalPrintCharArray(begin, len, os); } +#ifdef __cpp_char8_t +// Prints a (const) char8_t array of 'len' elements, starting at address +// 'begin'. +void UniversalPrintArray(const char8_t* begin, size_t len, ostream* os) { + UniversalPrintCharArray(begin, len, os); +} +#endif + +// Prints a (const) char16_t array of 'len' elements, starting at address +// 'begin'. +void UniversalPrintArray(const char16_t* begin, size_t len, ostream* os) { + UniversalPrintCharArray(begin, len, os); +} + +// Prints a (const) char32_t array of 'len' elements, starting at address +// 'begin'. +void UniversalPrintArray(const char32_t* begin, size_t len, ostream* os) { + UniversalPrintCharArray(begin, len, os); +} + // Prints a (const) wchar_t array of 'len' elements, starting at address // 'begin'. void UniversalPrintArray(const wchar_t* begin, size_t len, ostream* os) { UniversalPrintCharArray(begin, len, os); } -// Prints the given C string to the ostream. -void PrintTo(const char* s, ostream* os) { +namespace { + +// Prints a null-terminated C-style string to the ostream. +template <typename Char> +void PrintCStringTo(const Char* s, ostream* os) { if (s == nullptr) { *os << "NULL"; } else { *os << ImplicitCast_<const void*>(s) << " pointing to "; - PrintCharsAsStringTo(s, strlen(s), os); + PrintCharsAsStringTo(s, std::char_traits<Char>::length(s), os); } } +} // anonymous namespace + +void PrintTo(const char* s, ostream* os) { PrintCStringTo(s, os); } + +#ifdef __cpp_char8_t +void PrintTo(const char8_t* s, ostream* os) { PrintCStringTo(s, os); } +#endif + +void PrintTo(const char16_t* s, ostream* os) { PrintCStringTo(s, os); } + +void PrintTo(const char32_t* s, ostream* os) { PrintCStringTo(s, os); } + // MSVC compiler can be configured to define whar_t as a typedef // of unsigned short. Defining an overload for const wchar_t* in that case // would cause pointers to unsigned shorts be printed as wide strings, @@ -346,41 +452,34 @@ void PrintTo(const char* s, ostream* os) { // wchar_t is implemented as a native type. #if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED) // Prints the given wide C string to the ostream. -void PrintTo(const wchar_t* s, ostream* os) { - if (s == nullptr) { - *os << "NULL"; - } else { - *os << ImplicitCast_<const void*>(s) << " pointing to "; - PrintCharsAsStringTo(s, wcslen(s), os); - } -} +void PrintTo(const wchar_t* s, ostream* os) { PrintCStringTo(s, os); } #endif // wchar_t is native namespace { bool ContainsUnprintableControlCodes(const char* str, size_t length) { - const unsigned char *s = reinterpret_cast<const unsigned char *>(str); + const unsigned char* s = reinterpret_cast<const unsigned char*>(str); for (size_t i = 0; i < length; i++) { unsigned char ch = *s++; if (std::iscntrl(ch)) { - switch (ch) { + switch (ch) { case '\t': case '\n': case '\r': break; default: return true; - } } + } } return false; } -bool IsUTF8TrailByte(unsigned char t) { return 0x80 <= t && t<= 0xbf; } +bool IsUTF8TrailByte(unsigned char t) { return 0x80 <= t && t <= 0xbf; } bool IsValidUTF8(const char* str, size_t length) { - const unsigned char *s = reinterpret_cast<const unsigned char *>(str); + const unsigned char* s = reinterpret_cast<const unsigned char*>(str); for (size_t i = 0; i < length;) { unsigned char lead = s[i++]; @@ -393,15 +492,13 @@ bool IsValidUTF8(const char* str, size_t length) { } else if (lead <= 0xdf && (i + 1) <= length && IsUTF8TrailByte(s[i])) { ++i; // 2-byte character } else if (0xe0 <= lead && lead <= 0xef && (i + 2) <= length && - IsUTF8TrailByte(s[i]) && - IsUTF8TrailByte(s[i + 1]) && + IsUTF8TrailByte(s[i]) && IsUTF8TrailByte(s[i + 1]) && // check for non-shortest form and surrogate (lead != 0xe0 || s[i] >= 0xa0) && (lead != 0xed || s[i] < 0xa0)) { i += 2; // 3-byte character } else if (0xf0 <= lead && lead <= 0xf4 && (i + 3) <= length && - IsUTF8TrailByte(s[i]) && - IsUTF8TrailByte(s[i + 1]) && + IsUTF8TrailByte(s[i]) && IsUTF8TrailByte(s[i + 1]) && IsUTF8TrailByte(s[i + 2]) && // check for non-shortest form (lead != 0xf0 || s[i] >= 0x90) && @@ -425,12 +522,26 @@ void ConditionalPrintAsText(const char* str, size_t length, ostream* os) { void PrintStringTo(const ::std::string& s, ostream* os) { if (PrintCharsAsStringTo(s.data(), s.size(), os) == kHexEscape) { - if (GTEST_FLAG(print_utf8)) { + if (GTEST_FLAG_GET(print_utf8)) { ConditionalPrintAsText(s.data(), s.size(), os); } } } +#ifdef __cpp_char8_t +void PrintU8StringTo(const ::std::u8string& s, ostream* os) { + PrintCharsAsStringTo(s.data(), s.size(), os); +} +#endif + +void PrintU16StringTo(const ::std::u16string& s, ostream* os) { + PrintCharsAsStringTo(s.data(), s.size(), os); +} + +void PrintU32StringTo(const ::std::u32string& s, ostream* os) { + PrintCharsAsStringTo(s.data(), s.size(), os); +} + #if GTEST_HAS_STD_WSTRING void PrintWideStringTo(const ::std::wstring& s, ostream* os) { PrintCharsAsStringTo(s.data(), s.size(), os); diff --git a/test/gtest/src/gtest-test-part.cc b/test/gtest_vendor/src/gtest-test-part.cc similarity index 84% rename from test/gtest/src/gtest-test-part.cc rename to test/gtest_vendor/src/gtest-test-part.cc index 178317a6b..eb7c8d1cf 100644 --- a/test/gtest/src/gtest-test-part.cc +++ b/test/gtest_vendor/src/gtest-test-part.cc @@ -31,6 +31,8 @@ // The Google C++ Testing and Mocking Framework (Google Test) #include "gtest/gtest-test-part.h" + +#include "gtest/internal/gtest-port.h" #include "src/gtest-internal-inl.h" namespace testing { @@ -46,14 +48,14 @@ std::string TestPartResult::ExtractSummary(const char* message) { // Prints a TestPartResult object. std::ostream& operator<<(std::ostream& os, const TestPartResult& result) { - return os << result.file_name() << ":" << result.line_number() << ": " - << (result.type() == TestPartResult::kSuccess - ? "Success" - : result.type() == TestPartResult::kSkip - ? "Skipped" - : result.type() == TestPartResult::kFatalFailure - ? "Fatal failure" - : "Non-fatal failure") + return os << internal::FormatFileLocation(result.file_name(), + result.line_number()) + << " " + << (result.type() == TestPartResult::kSuccess ? "Success" + : result.type() == TestPartResult::kSkip ? "Skipped" + : result.type() == TestPartResult::kFatalFailure + ? "Fatal failure" + : "Non-fatal failure") << ":\n" << result.message() << std::endl; } @@ -82,8 +84,8 @@ namespace internal { HasNewFatalFailureHelper::HasNewFatalFailureHelper() : has_new_fatal_failure_(false), - original_reporter_(GetUnitTestImpl()-> - GetTestPartResultReporterForCurrentThread()) { + original_reporter_( + GetUnitTestImpl()->GetTestPartResultReporterForCurrentThread()) { GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this); } @@ -94,8 +96,7 @@ HasNewFatalFailureHelper::~HasNewFatalFailureHelper() { void HasNewFatalFailureHelper::ReportTestPartResult( const TestPartResult& result) { - if (result.fatally_failed()) - has_new_fatal_failure_ = true; + if (result.fatally_failed()) has_new_fatal_failure_ = true; original_reporter_->ReportTestPartResult(result); } diff --git a/test/gtest/src/gtest-typed-test.cc b/test/gtest_vendor/src/gtest-typed-test.cc similarity index 88% rename from test/gtest/src/gtest-typed-test.cc rename to test/gtest_vendor/src/gtest-typed-test.cc index 8677caf73..a2828b83c 100644 --- a/test/gtest/src/gtest-typed-test.cc +++ b/test/gtest_vendor/src/gtest-typed-test.cc @@ -27,7 +27,6 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - #include "gtest/gtest-typed-test.h" #include "gtest/gtest.h" @@ -35,13 +34,10 @@ namespace testing { namespace internal { -#if GTEST_HAS_TYPED_TEST_P - // Skips to the first non-space char in str. Returns an empty string if str // contains only whitespace characters. static const char* SkipSpaces(const char* str) { - while (IsSpace(*str)) - str++; + while (IsSpace(*str)) str++; return str; } @@ -58,7 +54,10 @@ static std::vector<std::string> SplitIntoTestNames(const char* src) { // registered_tests_; returns registered_tests if successful, or // aborts the program otherwise. const char* TypedTestSuitePState::VerifyRegisteredTestNames( - const char* file, int line, const char* registered_tests) { + const char* test_suite_name, const char* file, int line, + const char* registered_tests) { + RegisterTypeParameterizedTestSuite(test_suite_name, CodeLocation(file, line)); + typedef RegisteredTestsMap::const_iterator RegisteredTestIter; registered_ = true; @@ -75,17 +74,7 @@ const char* TypedTestSuitePState::VerifyRegisteredTestNames( continue; } - bool found = false; - for (RegisteredTestIter it = registered_tests_.begin(); - it != registered_tests_.end(); - ++it) { - if (name == it->first) { - found = true; - break; - } - } - - if (found) { + if (registered_tests_.count(name) != 0) { tests.insert(name); } else { errors << "No test named " << name @@ -94,8 +83,7 @@ const char* TypedTestSuitePState::VerifyRegisteredTestNames( } for (RegisteredTestIter it = registered_tests_.begin(); - it != registered_tests_.end(); - ++it) { + it != registered_tests_.end(); ++it) { if (tests.count(it->first) == 0) { errors << "You forgot to list test " << it->first << ".\n"; } @@ -112,7 +100,5 @@ const char* TypedTestSuitePState::VerifyRegisteredTestNames( return registered_tests; } -#endif // GTEST_HAS_TYPED_TEST_P - } // namespace internal } // namespace testing diff --git a/test/gtest/src/gtest.cc b/test/gtest_vendor/src/gtest.cc similarity index 72% rename from test/gtest/src/gtest.cc rename to test/gtest_vendor/src/gtest.cc index 1dff1a6af..6f31dd226 100644 --- a/test/gtest/src/gtest.cc +++ b/test/gtest_vendor/src/gtest.cc @@ -31,15 +31,8 @@ // The Google C++ Testing and Mocking Framework (Google Test) #include "gtest/gtest.h" -#include "gtest/internal/custom/gtest.h" -#include "gtest/gtest-spi.h" - -#ifndef _WIN32 -#pragma GCC system_header -#endif #include <ctype.h> -#include <math.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> @@ -48,85 +41,90 @@ #include <wctype.h> #include <algorithm> +#include <chrono> // NOLINT +#include <cmath> +#include <cstdint> +#include <initializer_list> #include <iomanip> +#include <iterator> #include <limits> #include <list> #include <map> #include <ostream> // NOLINT #include <sstream> +#include <unordered_set> #include <vector> -#if GTEST_OS_LINUX +#include "gtest/gtest-assertion-result.h" +#include "gtest/gtest-spi.h" +#include "gtest/internal/custom/gtest.h" -# define GTEST_HAS_GETTIMEOFDAY_ 1 +#if GTEST_OS_LINUX -# include <fcntl.h> // NOLINT -# include <limits.h> // NOLINT -# include <sched.h> // NOLINT +#include <fcntl.h> // NOLINT +#include <limits.h> // NOLINT +#include <sched.h> // NOLINT // Declares vsnprintf(). This header is not available on Windows. -# include <strings.h> // NOLINT -# include <sys/mman.h> // NOLINT -# include <sys/time.h> // NOLINT -# include <unistd.h> // NOLINT -# include <string> +#include <strings.h> // NOLINT +#include <sys/mman.h> // NOLINT +#include <sys/time.h> // NOLINT +#include <unistd.h> // NOLINT + +#include <string> #elif GTEST_OS_ZOS -# define GTEST_HAS_GETTIMEOFDAY_ 1 -# include <sys/time.h> // NOLINT +#include <sys/time.h> // NOLINT // On z/OS we additionally need strings.h for strcasecmp. -# include <strings.h> // NOLINT +#include <strings.h> // NOLINT #elif GTEST_OS_WINDOWS_MOBILE // We are on Windows CE. -# include <windows.h> // NOLINT -# undef min +#include <windows.h> // NOLINT +#undef min #elif GTEST_OS_WINDOWS // We are on Windows proper. -# include <windows.h> // NOLINT -# undef min +#include <windows.h> // NOLINT +#undef min + +#ifdef _MSC_VER +#include <crtdbg.h> // NOLINT +#endif -# include <crtdbg.h> // NOLINT -# include <debugapi.h> // NOLINT -# include <io.h> // NOLINT -# include <sys/timeb.h> // NOLINT -# include <sys/types.h> // NOLINT -# include <sys/stat.h> // NOLINT +#include <io.h> // NOLINT +#include <sys/stat.h> // NOLINT +#include <sys/timeb.h> // NOLINT +#include <sys/types.h> // NOLINT -# if GTEST_OS_WINDOWS_MINGW -// MinGW has gettimeofday() but not _ftime64(). -# define GTEST_HAS_GETTIMEOFDAY_ 1 -# include <sys/time.h> // NOLINT -# endif // GTEST_OS_WINDOWS_MINGW +#if GTEST_OS_WINDOWS_MINGW +#include <sys/time.h> // NOLINT +#endif // GTEST_OS_WINDOWS_MINGW #else -// Assume other platforms have gettimeofday(). -# define GTEST_HAS_GETTIMEOFDAY_ 1 - // cpplint thinks that the header is already included, so we want to // silence it. -# include <sys/time.h> // NOLINT -# include <unistd.h> // NOLINT +#include <sys/time.h> // NOLINT +#include <unistd.h> // NOLINT #endif // GTEST_OS_LINUX #if GTEST_HAS_EXCEPTIONS -# include <stdexcept> +#include <stdexcept> #endif #if GTEST_CAN_STREAM_RESULTS_ -# include <arpa/inet.h> // NOLINT -# include <netdb.h> // NOLINT -# include <sys/socket.h> // NOLINT -# include <sys/types.h> // NOLINT +#include <arpa/inet.h> // NOLINT +#include <netdb.h> // NOLINT +#include <sys/socket.h> // NOLINT +#include <sys/types.h> // NOLINT #endif #include "src/gtest-internal-inl.h" #if GTEST_OS_WINDOWS -# define vsnprintf _vsnprintf +#define vsnprintf _vsnprintf #endif // GTEST_OS_WINDOWS #if GTEST_OS_MAC @@ -139,7 +137,10 @@ #include "absl/debugging/failure_signal_handler.h" #include "absl/debugging/stacktrace.h" #include "absl/debugging/symbolize.h" +#include "absl/flags/parse.h" +#include "absl/flags/usage.h" #include "absl/strings/str_cat.h" +#include "absl/strings/str_replace.h" #endif // GTEST_HAS_ABSL namespace testing { @@ -185,7 +186,7 @@ const char kStackTraceMarker[] = "\nStack trace:\n"; // is specified on the command line. bool g_help_flag = false; -// Utilty function to Open File for Writing +// Utility function to Open File for Writing static FILE* OpenFileForWriting(const std::string& output_file) { FILE* fileout = nullptr; FilePath output_file_path(output_file); @@ -213,24 +214,44 @@ static const char* GetDefaultFilter() { return kUniversalFilter; } +// Bazel passes in the argument to '--test_runner_fail_fast' via the +// TESTBRIDGE_TEST_RUNNER_FAIL_FAST environment variable. +static bool GetDefaultFailFast() { + const char* const testbridge_test_runner_fail_fast = + internal::posix::GetEnv("TESTBRIDGE_TEST_RUNNER_FAIL_FAST"); + if (testbridge_test_runner_fail_fast != nullptr) { + return strcmp(testbridge_test_runner_fail_fast, "1") == 0; + } + return false; +} + +} // namespace testing + +GTEST_DEFINE_bool_( + fail_fast, + testing::internal::BoolFromGTestEnv("fail_fast", + testing::GetDefaultFailFast()), + "True if and only if a test failure should stop further test execution."); + GTEST_DEFINE_bool_( also_run_disabled_tests, - internal::BoolFromGTestEnv("also_run_disabled_tests", false), + testing::internal::BoolFromGTestEnv("also_run_disabled_tests", false), "Run disabled tests too, in addition to the tests normally being run."); GTEST_DEFINE_bool_( - break_on_failure, internal::BoolFromGTestEnv("break_on_failure", false), + break_on_failure, + testing::internal::BoolFromGTestEnv("break_on_failure", false), "True if and only if a failed assertion should be a debugger " "break-point."); GTEST_DEFINE_bool_(catch_exceptions, - internal::BoolFromGTestEnv("catch_exceptions", true), + testing::internal::BoolFromGTestEnv("catch_exceptions", + true), "True if and only if " GTEST_NAME_ " should catch exceptions and treat them as test failures."); GTEST_DEFINE_string_( - color, - internal::StringFromGTestEnv("color", "auto"), + color, testing::internal::StringFromGTestEnv("color", "auto"), "Whether to use colors in the output. Valid values: yes, no, " "and auto. 'auto' means to use colors if the output is " "being sent to a terminal and the TERM environment variable " @@ -238,7 +259,8 @@ GTEST_DEFINE_string_( GTEST_DEFINE_string_( filter, - internal::StringFromGTestEnv("filter", GetDefaultFilter()), + testing::internal::StringFromGTestEnv("filter", + testing::GetDefaultFilter()), "A colon-separated list of glob (not regex) patterns " "for filtering the tests to run, optionally followed by a " "'-' and a : separated list of negative patterns (tests to " @@ -247,13 +269,14 @@ GTEST_DEFINE_string_( GTEST_DEFINE_bool_( install_failure_signal_handler, - internal::BoolFromGTestEnv("install_failure_signal_handler", false), - "If true and supported on the current platform, " GTEST_NAME_ " should " + testing::internal::BoolFromGTestEnv("install_failure_signal_handler", + false), + "If true and supported on the current platform, " GTEST_NAME_ + " should " "install a signal handler that dumps debugging information when fatal " "signals are raised."); -GTEST_DEFINE_bool_(list_tests, false, - "List all tests without running them."); +GTEST_DEFINE_bool_(list_tests, false, "List all tests without running them."); // The net priority order after flag processing is thus: // --gtest_output command line flag @@ -262,8 +285,8 @@ GTEST_DEFINE_bool_(list_tests, false, // '' GTEST_DEFINE_string_( output, - internal::StringFromGTestEnv("output", - internal::OutputFlagAlsoCheckEnvVar().c_str()), + testing::internal::StringFromGTestEnv( + "output", testing::internal::OutputFlagAlsoCheckEnvVar().c_str()), "A format (defaults to \"xml\" but can be specified to be \"json\"), " "optionally followed by a colon and an output file name or directory. " "A directory is indicated by a trailing pathname separator. " @@ -273,74 +296,91 @@ GTEST_DEFINE_string_( "executable's name and, if necessary, made unique by adding " "digits."); -GTEST_DEFINE_bool_(print_time, internal::BoolFromGTestEnv("print_time", true), +GTEST_DEFINE_bool_( + brief, testing::internal::BoolFromGTestEnv("brief", false), + "True if only test failures should be displayed in text output."); + +GTEST_DEFINE_bool_(print_time, + testing::internal::BoolFromGTestEnv("print_time", true), "True if and only if " GTEST_NAME_ " should display elapsed time in text output."); -GTEST_DEFINE_bool_(print_utf8, internal::BoolFromGTestEnv("print_utf8", true), +GTEST_DEFINE_bool_(print_utf8, + testing::internal::BoolFromGTestEnv("print_utf8", true), "True if and only if " GTEST_NAME_ " prints UTF8 characters as text."); GTEST_DEFINE_int32_( - random_seed, - internal::Int32FromGTestEnv("random_seed", 0), + random_seed, testing::internal::Int32FromGTestEnv("random_seed", 0), "Random number seed to use when shuffling test orders. Must be in range " "[1, 99999], or 0 to use a seed based on the current time."); GTEST_DEFINE_int32_( - repeat, - internal::Int32FromGTestEnv("repeat", 1), + repeat, testing::internal::Int32FromGTestEnv("repeat", 1), "How many times to repeat each test. Specify a negative number " "for repeating forever. Useful for shaking out flaky tests."); +GTEST_DEFINE_bool_( + recreate_environments_when_repeating, + testing::internal::BoolFromGTestEnv("recreate_environments_when_repeating", + false), + "Controls whether global test environments are recreated for each repeat " + "of the tests. If set to false the global test environments are only set " + "up once, for the first iteration, and only torn down once, for the last. " + "Useful for shaking out flaky tests with stable, expensive test " + "environments. If --gtest_repeat is set to a negative number, meaning " + "there is no last run, the environments will always be recreated to avoid " + "leaks."); + GTEST_DEFINE_bool_(show_internal_stack_frames, false, "True if and only if " GTEST_NAME_ " should include internal stack frames when " "printing test failure stack traces."); -GTEST_DEFINE_bool_(shuffle, internal::BoolFromGTestEnv("shuffle", false), +GTEST_DEFINE_bool_(shuffle, + testing::internal::BoolFromGTestEnv("shuffle", false), "True if and only if " GTEST_NAME_ " should randomize tests' order on every run."); GTEST_DEFINE_int32_( stack_trace_depth, - internal::Int32FromGTestEnv("stack_trace_depth", kMaxStackTraceDepth), + testing::internal::Int32FromGTestEnv("stack_trace_depth", + testing::kMaxStackTraceDepth), "The maximum number of stack frames to print when an " "assertion fails. The valid range is 0 through 100, inclusive."); GTEST_DEFINE_string_( stream_result_to, - internal::StringFromGTestEnv("stream_result_to", ""), + testing::internal::StringFromGTestEnv("stream_result_to", ""), "This flag specifies the host name and the port number on which to stream " "test results. Example: \"localhost:555\". The flag is effective only on " "Linux."); GTEST_DEFINE_bool_( throw_on_failure, - internal::BoolFromGTestEnv("throw_on_failure", false), + testing::internal::BoolFromGTestEnv("throw_on_failure", false), "When this flag is specified, a failed assertion will throw an exception " "if exceptions are enabled or exit the program with a non-zero code " "otherwise. For use with an external test framework."); #if GTEST_USE_OWN_FLAGFILE_FLAG_ GTEST_DEFINE_string_( - flagfile, - internal::StringFromGTestEnv("flagfile", ""), + flagfile, testing::internal::StringFromGTestEnv("flagfile", ""), "This flag specifies the flagfile to read command-line flags from."); #endif // GTEST_USE_OWN_FLAGFILE_FLAG_ +namespace testing { namespace internal { // Generates a random number from [0, range), using a Linear // Congruential Generator (LCG). Crashes if 'range' is 0 or greater // than kMaxRange. -UInt32 Random::Generate(UInt32 range) { +uint32_t Random::Generate(uint32_t range) { // These constants are the same as are used in glibc's rand(3). // Use wider types than necessary to prevent unsigned overflow diagnostics. - state_ = static_cast<UInt32>(1103515245ULL*state_ + 12345U) % kMaxRange; + state_ = static_cast<uint32_t>(1103515245ULL * state_ + 12345U) % kMaxRange; - GTEST_CHECK_(range > 0) - << "Cannot generate a number in the range [0, 0)."; + GTEST_CHECK_(range > 0) << "Cannot generate a number in the range [0, 0)."; GTEST_CHECK_(range <= kMaxRange) << "Generation of a number in [0, " << range << ") was requested, " << "but this can only generate numbers in [0, " << kMaxRange << ")."; @@ -385,26 +425,175 @@ static bool ShouldRunTestSuite(const TestSuite* test_suite) { } // AssertHelper constructor. -AssertHelper::AssertHelper(TestPartResult::Type type, - const char* file, - int line, - const char* message) - : data_(new AssertHelperData(type, file, line, message)) { -} +AssertHelper::AssertHelper(TestPartResult::Type type, const char* file, + int line, const char* message) + : data_(new AssertHelperData(type, file, line, message)) {} -AssertHelper::~AssertHelper() { - delete data_; -} +AssertHelper::~AssertHelper() { delete data_; } // Message assignment, for assertion streaming support. void AssertHelper::operator=(const Message& message) const { - UnitTest::GetInstance()-> - AddTestPartResult(data_->type, data_->file, data_->line, - AppendUserMessage(data_->message, message), - UnitTest::GetInstance()->impl() - ->CurrentOsStackTraceExceptTop(1) - // Skips the stack frame for this function itself. - ); // NOLINT + UnitTest::GetInstance()->AddTestPartResult( + data_->type, data_->file, data_->line, + AppendUserMessage(data_->message, message), + UnitTest::GetInstance()->impl()->CurrentOsStackTraceExceptTop(1) + // Skips the stack frame for this function itself. + ); // NOLINT +} + +namespace { + +// When TEST_P is found without a matching INSTANTIATE_TEST_SUITE_P +// to creates test cases for it, a synthetic test case is +// inserted to report ether an error or a log message. +// +// This configuration bit will likely be removed at some point. +constexpr bool kErrorOnUninstantiatedParameterizedTest = true; +constexpr bool kErrorOnUninstantiatedTypeParameterizedTest = true; + +// A test that fails at a given file/line location with a given message. +class FailureTest : public Test { + public: + explicit FailureTest(const CodeLocation& loc, std::string error_message, + bool as_error) + : loc_(loc), + error_message_(std::move(error_message)), + as_error_(as_error) {} + + void TestBody() override { + if (as_error_) { + AssertHelper(TestPartResult::kNonFatalFailure, loc_.file.c_str(), + loc_.line, "") = Message() << error_message_; + } else { + std::cout << error_message_ << std::endl; + } + } + + private: + const CodeLocation loc_; + const std::string error_message_; + const bool as_error_; +}; + +} // namespace + +std::set<std::string>* GetIgnoredParameterizedTestSuites() { + return UnitTest::GetInstance()->impl()->ignored_parameterized_test_suites(); +} + +// Add a given test_suit to the list of them allow to go un-instantiated. +MarkAsIgnored::MarkAsIgnored(const char* test_suite) { + GetIgnoredParameterizedTestSuites()->insert(test_suite); +} + +// If this parameterized test suite has no instantiations (and that +// has not been marked as okay), emit a test case reporting that. +void InsertSyntheticTestCase(const std::string& name, CodeLocation location, + bool has_test_p) { + const auto& ignored = *GetIgnoredParameterizedTestSuites(); + if (ignored.find(name) != ignored.end()) return; + + const char kMissingInstantiation[] = // + " is defined via TEST_P, but never instantiated. None of the test cases " + "will run. Either no INSTANTIATE_TEST_SUITE_P is provided or the only " + "ones provided expand to nothing." + "\n\n" + "Ideally, TEST_P definitions should only ever be included as part of " + "binaries that intend to use them. (As opposed to, for example, being " + "placed in a library that may be linked in to get other utilities.)"; + + const char kMissingTestCase[] = // + " is instantiated via INSTANTIATE_TEST_SUITE_P, but no tests are " + "defined via TEST_P . No test cases will run." + "\n\n" + "Ideally, INSTANTIATE_TEST_SUITE_P should only ever be invoked from " + "code that always depend on code that provides TEST_P. Failing to do " + "so is often an indication of dead code, e.g. the last TEST_P was " + "removed but the rest got left behind."; + + std::string message = + "Parameterized test suite " + name + + (has_test_p ? kMissingInstantiation : kMissingTestCase) + + "\n\n" + "To suppress this error for this test suite, insert the following line " + "(in a non-header) in the namespace it is defined in:" + "\n\n" + "GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(" + + name + ");"; + + std::string full_name = "UninstantiatedParameterizedTestSuite<" + name + ">"; + RegisterTest( // + "GoogleTestVerification", full_name.c_str(), + nullptr, // No type parameter. + nullptr, // No value parameter. + location.file.c_str(), location.line, [message, location] { + return new FailureTest(location, message, + kErrorOnUninstantiatedParameterizedTest); + }); +} + +void RegisterTypeParameterizedTestSuite(const char* test_suite_name, + CodeLocation code_location) { + GetUnitTestImpl()->type_parameterized_test_registry().RegisterTestSuite( + test_suite_name, code_location); +} + +void RegisterTypeParameterizedTestSuiteInstantiation(const char* case_name) { + GetUnitTestImpl()->type_parameterized_test_registry().RegisterInstantiation( + case_name); +} + +void TypeParameterizedTestSuiteRegistry::RegisterTestSuite( + const char* test_suite_name, CodeLocation code_location) { + suites_.emplace(std::string(test_suite_name), + TypeParameterizedTestSuiteInfo(code_location)); +} + +void TypeParameterizedTestSuiteRegistry::RegisterInstantiation( + const char* test_suite_name) { + auto it = suites_.find(std::string(test_suite_name)); + if (it != suites_.end()) { + it->second.instantiated = true; + } else { + GTEST_LOG_(ERROR) << "Unknown type parameterized test suit '" + << test_suite_name << "'"; + } +} + +void TypeParameterizedTestSuiteRegistry::CheckForInstantiations() { + const auto& ignored = *GetIgnoredParameterizedTestSuites(); + for (const auto& testcase : suites_) { + if (testcase.second.instantiated) continue; + if (ignored.find(testcase.first) != ignored.end()) continue; + + std::string message = + "Type parameterized test suite " + testcase.first + + " is defined via REGISTER_TYPED_TEST_SUITE_P, but never instantiated " + "via INSTANTIATE_TYPED_TEST_SUITE_P. None of the test cases will run." + "\n\n" + "Ideally, TYPED_TEST_P definitions should only ever be included as " + "part of binaries that intend to use them. (As opposed to, for " + "example, being placed in a library that may be linked in to get other " + "utilities.)" + "\n\n" + "To suppress this error for this test suite, insert the following line " + "(in a non-header) in the namespace it is defined in:" + "\n\n" + "GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(" + + testcase.first + ");"; + + std::string full_name = + "UninstantiatedTypeParameterizedTestSuite<" + testcase.first + ">"; + RegisterTest( // + "GoogleTestVerification", full_name.c_str(), + nullptr, // No type parameter. + nullptr, // No value parameter. + testcase.second.code_location.file.c_str(), + testcase.second.code_location.line, [message, testcase] { + return new FailureTest(testcase.second.code_location, message, + kErrorOnUninstantiatedTypeParameterizedTest); + }); + } } // A copy of all command line arguments. Set by InitGoogleTest(). @@ -439,7 +628,8 @@ FilePath GetCurrentExecutableName() { // Returns the output format, or "" for normal printed output. std::string UnitTestOptions::GetOutputFormat() { - const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); + std::string s = GTEST_FLAG_GET(output); + const char* const gtest_output_flag = s.c_str(); const char* const colon = strchr(gtest_output_flag, ':'); return (colon == nullptr) ? std::string(gtest_output_flag) @@ -450,19 +640,19 @@ std::string UnitTestOptions::GetOutputFormat() { // Returns the name of the requested output file, or the default if none // was explicitly specified. std::string UnitTestOptions::GetAbsolutePathToOutputFile() { - const char* const gtest_output_flag = GTEST_FLAG(output).c_str(); + std::string s = GTEST_FLAG_GET(output); + const char* const gtest_output_flag = s.c_str(); std::string format = GetOutputFormat(); - if (format.empty()) - format = std::string(kDefaultOutputFormat); + if (format.empty()) format = std::string(kDefaultOutputFormat); const char* const colon = strchr(gtest_output_flag, ':'); if (colon == nullptr) return internal::FilePath::MakeFileName( - internal::FilePath( - UnitTest::GetInstance()->original_working_dir()), - internal::FilePath(kDefaultOutputFile), 0, - format.c_str()).string(); + internal::FilePath( + UnitTest::GetInstance()->original_working_dir()), + internal::FilePath(kDefaultOutputFile), 0, format.c_str()) + .string(); internal::FilePath output_name(colon + 1); if (!output_name.IsAbsolutePath()) @@ -470,8 +660,7 @@ std::string UnitTestOptions::GetAbsolutePathToOutputFile() { internal::FilePath(UnitTest::GetInstance()->original_working_dir()), internal::FilePath(colon + 1)); - if (!output_name.IsDirectory()) - return output_name.string(); + if (!output_name.IsDirectory()) return output_name.string(); internal::FilePath result(internal::FilePath::GenerateUniqueFileName( output_name, internal::GetCurrentExecutableName(), @@ -479,77 +668,172 @@ std::string UnitTestOptions::GetAbsolutePathToOutputFile() { return result.string(); } -// Returns true if and only if the wildcard pattern matches the string. -// The first ':' or '\0' character in pattern marks the end of it. +// Returns true if and only if the wildcard pattern matches the string. Each +// pattern consists of regular characters, single-character wildcards (?), and +// multi-character wildcards (*). // -// This recursive algorithm isn't very efficient, but is clear and -// works well enough for matching test names, which are short. -bool UnitTestOptions::PatternMatchesString(const char *pattern, - const char *str) { - switch (*pattern) { - case '\0': - case ':': // Either ':' or '\0' marks the end of the pattern. - return *str == '\0'; - case '?': // Matches any single character. - return *str != '\0' && PatternMatchesString(pattern + 1, str + 1); - case '*': // Matches any string (possibly empty) of characters. - return (*str != '\0' && PatternMatchesString(pattern, str + 1)) || - PatternMatchesString(pattern + 1, str); - default: // Non-special character. Matches itself. - return *pattern == *str && - PatternMatchesString(pattern + 1, str + 1); - } -} - -bool UnitTestOptions::MatchesFilter( - const std::string& name, const char* filter) { - const char *cur_pattern = filter; - for (;;) { - if (PatternMatchesString(cur_pattern, name.c_str())) { - return true; +// This function implements a linear-time string globbing algorithm based on +// https://research.swtch.com/glob. +static bool PatternMatchesString(const std::string& name_str, + const char* pattern, const char* pattern_end) { + const char* name = name_str.c_str(); + const char* const name_begin = name; + const char* const name_end = name + name_str.size(); + + const char* pattern_next = pattern; + const char* name_next = name; + + while (pattern < pattern_end || name < name_end) { + if (pattern < pattern_end) { + switch (*pattern) { + default: // Match an ordinary character. + if (name < name_end && *name == *pattern) { + ++pattern; + ++name; + continue; + } + break; + case '?': // Match any single character. + if (name < name_end) { + ++pattern; + ++name; + continue; + } + break; + case '*': + // Match zero or more characters. Start by skipping over the wildcard + // and matching zero characters from name. If that fails, restart and + // match one more character than the last attempt. + pattern_next = pattern; + name_next = name + 1; + ++pattern; + continue; + } } + // Failed to match a character. Restart if possible. + if (name_begin < name_next && name_next <= name_end) { + pattern = pattern_next; + name = name_next; + continue; + } + return false; + } + return true; +} + +namespace { - // Finds the next pattern in the filter. - cur_pattern = strchr(cur_pattern, ':'); +bool IsGlobPattern(const std::string& pattern) { + return std::any_of(pattern.begin(), pattern.end(), + [](const char c) { return c == '?' || c == '*'; }); +} - // Returns if no more pattern can be found. - if (cur_pattern == nullptr) { - return false; +class UnitTestFilter { + public: + UnitTestFilter() = default; + + // Constructs a filter from a string of patterns separated by `:`. + explicit UnitTestFilter(const std::string& filter) { + // By design "" filter matches "" string. + std::vector<std::string> all_patterns; + SplitString(filter, ':', &all_patterns); + const auto exact_match_patterns_begin = std::partition( + all_patterns.begin(), all_patterns.end(), &IsGlobPattern); + + glob_patterns_.reserve(static_cast<size_t>( + std::distance(all_patterns.begin(), exact_match_patterns_begin))); + std::move(all_patterns.begin(), exact_match_patterns_begin, + std::inserter(glob_patterns_, glob_patterns_.begin())); + std::move( + exact_match_patterns_begin, all_patterns.end(), + std::inserter(exact_match_patterns_, exact_match_patterns_.begin())); + } + + // Returns true if and only if name matches at least one of the patterns in + // the filter. + bool MatchesName(const std::string& name) const { + return exact_match_patterns_.count(name) > 0 || + std::any_of(glob_patterns_.begin(), glob_patterns_.end(), + [&name](const std::string& pattern) { + return PatternMatchesString( + name, pattern.c_str(), + pattern.c_str() + pattern.size()); + }); + } + + private: + std::vector<std::string> glob_patterns_; + std::unordered_set<std::string> exact_match_patterns_; +}; + +class PositiveAndNegativeUnitTestFilter { + public: + // Constructs a positive and a negative filter from a string. The string + // contains a positive filter optionally followed by a '-' character and a + // negative filter. In case only a negative filter is provided the positive + // filter will be assumed "*". + // A filter is a list of patterns separated by ':'. + explicit PositiveAndNegativeUnitTestFilter(const std::string& filter) { + std::vector<std::string> positive_and_negative_filters; + + // NOTE: `SplitString` always returns a non-empty container. + SplitString(filter, '-', &positive_and_negative_filters); + const auto& positive_filter = positive_and_negative_filters.front(); + + if (positive_and_negative_filters.size() > 1) { + positive_filter_ = UnitTestFilter( + positive_filter.empty() ? kUniversalFilter : positive_filter); + + // TODO(b/214626361): Fail on multiple '-' characters + // For the moment to preserve old behavior we concatenate the rest of the + // string parts with `-` as separator to generate the negative filter. + auto negative_filter_string = positive_and_negative_filters[1]; + for (std::size_t i = 2; i < positive_and_negative_filters.size(); i++) + negative_filter_string = + negative_filter_string + '-' + positive_and_negative_filters[i]; + negative_filter_ = UnitTestFilter(negative_filter_string); + } else { + // In case we don't have a negative filter and positive filter is "" + // we do not use kUniversalFilter by design as opposed to when we have a + // negative filter. + positive_filter_ = UnitTestFilter(positive_filter); } + } + + // Returns true if and only if test name (this is generated by appending test + // suit name and test name via a '.' character) matches the positive filter + // and does not match the negative filter. + bool MatchesTest(const std::string& test_suite_name, + const std::string& test_name) const { + return MatchesName(test_suite_name + "." + test_name); + } - // Skips the pattern separater (the ':' character). - cur_pattern++; + // Returns true if and only if name matches the positive filter and does not + // match the negative filter. + bool MatchesName(const std::string& name) const { + return positive_filter_.MatchesName(name) && + !negative_filter_.MatchesName(name); } + + private: + UnitTestFilter positive_filter_; + UnitTestFilter negative_filter_; +}; +} // namespace + +bool UnitTestOptions::MatchesFilter(const std::string& name_str, + const char* filter) { + return UnitTestFilter(filter).MatchesName(name_str); } // Returns true if and only if the user-specified filter matches the test // suite name and the test name. bool UnitTestOptions::FilterMatchesTest(const std::string& test_suite_name, const std::string& test_name) { - const std::string& full_name = test_suite_name + "." + test_name.c_str(); - // Split --gtest_filter at '-', if there is one, to separate into // positive filter and negative filter portions - const char* const p = GTEST_FLAG(filter).c_str(); - const char* const dash = strchr(p, '-'); - std::string positive; - std::string negative; - if (dash == nullptr) { - positive = GTEST_FLAG(filter).c_str(); // Whole string is a positive filter - negative = ""; - } else { - positive = std::string(p, dash); // Everything up to the dash - negative = std::string(dash + 1); // Everything after the dash - if (positive.empty()) { - // Treat '-test1' as the same as '*-test1' - positive = kUniversalFilter; - } - } - - // A filter is a colon-separated list of patterns. It matches a - // test if any pattern in it matches the test. - return (MatchesFilter(full_name, positive.c_str()) && - !MatchesFilter(full_name, negative.c_str())); + return PositiveAndNegativeUnitTestFilter(GTEST_FLAG_GET(filter)) + .MatchesTest(test_suite_name, test_name); } #if GTEST_HAS_SEH @@ -569,7 +853,7 @@ int UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) { bool should_handle = true; - if (!GTEST_FLAG(catch_exceptions)) + if (!GTEST_FLAG_GET(catch_exceptions)) should_handle = false; else if (exception_code == EXCEPTION_BREAKPOINT) should_handle = false; @@ -587,8 +871,7 @@ int UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) { // results. Intercepts only failures from the current thread. ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( TestPartResultArray* result) - : intercept_mode_(INTERCEPT_ONLY_CURRENT_THREAD), - result_(result) { + : intercept_mode_(INTERCEPT_ONLY_CURRENT_THREAD), result_(result) { Init(); } @@ -597,8 +880,7 @@ ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( // results. ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter( InterceptMode intercept_mode, TestPartResultArray* result) - : intercept_mode_(intercept_mode), - result_(result) { + : intercept_mode_(intercept_mode), result_(result) { Init(); } @@ -642,9 +924,7 @@ namespace internal { // from user test code. GetTestTypeId() is guaranteed to always // return the same value, as it always calls GetTypeId<>() from the // gtest.cc, which is within the Google Test framework. -TypeId GetTestTypeId() { - return GetTypeId<Test>(); -} +TypeId GetTestTypeId() { return GetTypeId<Test>(); } // The value of GetTestTypeId() as seen from within the Google Test // library. This is solely for testing GetTestTypeId(). @@ -659,9 +939,9 @@ static AssertionResult HasOneFailure(const char* /* results_expr */, const TestPartResultArray& results, TestPartResult::Type type, const std::string& substr) { - const std::string expected(type == TestPartResult::kFatalFailure ? - "1 fatal failure" : - "1 non-fatal failure"); + const std::string expected(type == TestPartResult::kFatalFailure + ? "1 fatal failure" + : "1 non-fatal failure"); Message msg; if (results.size() != 1) { msg << "Expected: " << expected << "\n" @@ -680,10 +960,10 @@ static AssertionResult HasOneFailure(const char* /* results_expr */, } if (strstr(r.message(), substr.c_str()) == nullptr) { - return AssertionFailure() << "Expected: " << expected << " containing \"" - << substr << "\"\n" - << " Actual:\n" - << r; + return AssertionFailure() + << "Expected: " << expected << " containing \"" << substr << "\"\n" + << " Actual:\n" + << r; } return AssertionSuccess(); @@ -706,7 +986,8 @@ SingleFailureChecker::~SingleFailureChecker() { } DefaultGlobalTestPartResultReporter::DefaultGlobalTestPartResultReporter( - UnitTestImpl* unit_test) : unit_test_(unit_test) {} + UnitTestImpl* unit_test) + : unit_test_(unit_test) {} void DefaultGlobalTestPartResultReporter::ReportTestPartResult( const TestPartResult& result) { @@ -715,7 +996,8 @@ void DefaultGlobalTestPartResultReporter::ReportTestPartResult( } DefaultPerThreadTestPartResultReporter::DefaultPerThreadTestPartResultReporter( - UnitTestImpl* unit_test) : unit_test_(unit_test) {} + UnitTestImpl* unit_test) + : unit_test_(unit_test) {} void DefaultPerThreadTestPartResultReporter::ReportTestPartResult( const TestPartResult& result) { @@ -822,51 +1104,36 @@ int UnitTestImpl::test_to_run_count() const { // trace but Bar() and CurrentOsStackTraceExceptTop() won't. std::string UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) { return os_stack_trace_getter()->CurrentStackTrace( - static_cast<int>(GTEST_FLAG(stack_trace_depth)), - skip_count + 1 + static_cast<int>(GTEST_FLAG_GET(stack_trace_depth)), skip_count + 1 // Skips the user-specified number of frames plus this function // itself. - ); // NOLINT + ); // NOLINT } -// Returns the current time in milliseconds. +// A helper class for measuring elapsed times. +class Timer { + public: + Timer() : start_(std::chrono::steady_clock::now()) {} + + // Return time elapsed in milliseconds since the timer was created. + TimeInMillis Elapsed() { + return std::chrono::duration_cast<std::chrono::milliseconds>( + std::chrono::steady_clock::now() - start_) + .count(); + } + + private: + std::chrono::steady_clock::time_point start_; +}; + +// Returns a timestamp as milliseconds since the epoch. Note this time may jump +// around subject to adjustments by the system, to measure elapsed time use +// Timer instead. TimeInMillis GetTimeInMillis() { -#if GTEST_OS_WINDOWS_MOBILE || defined(__BORLANDC__) - // Difference between 1970-01-01 and 1601-01-01 in milliseconds. - // http://analogous.blogspot.com/2005/04/epoch.html - const TimeInMillis kJavaEpochToWinFileTimeDelta = - static_cast<TimeInMillis>(116444736UL) * 100000UL; - const DWORD kTenthMicrosInMilliSecond = 10000; - - SYSTEMTIME now_systime; - FILETIME now_filetime; - ULARGE_INTEGER now_int64; - GetSystemTime(&now_systime); - if (SystemTimeToFileTime(&now_systime, &now_filetime)) { - now_int64.LowPart = now_filetime.dwLowDateTime; - now_int64.HighPart = now_filetime.dwHighDateTime; - now_int64.QuadPart = (now_int64.QuadPart / kTenthMicrosInMilliSecond) - - kJavaEpochToWinFileTimeDelta; - return now_int64.QuadPart; - } - return 0; -#elif GTEST_OS_WINDOWS && !GTEST_HAS_GETTIMEOFDAY_ - __timeb64 now; - - // MSVC 8 deprecates _ftime64(), so we want to suppress warning 4996 - // (deprecated function) there. - GTEST_DISABLE_MSC_DEPRECATED_PUSH_() - _ftime64(&now); - GTEST_DISABLE_MSC_DEPRECATED_POP_() - - return static_cast<TimeInMillis>(now.time) * 1000 + now.millitm; -#elif GTEST_HAS_GETTIMEOFDAY_ - struct timeval now; - gettimeofday(&now, nullptr); - return static_cast<TimeInMillis>(now.tv_sec) * 1000 + now.tv_usec / 1000; -#else -# error "Don't know how to get the current time on your system." -#endif + return std::chrono::duration_cast<std::chrono::milliseconds>( + std::chrono::system_clock::now() - + std::chrono::system_clock::from_time_t(0)) + .count(); } // Utilities @@ -884,8 +1151,7 @@ LPCWSTR String::AnsiToUtf16(const char* ansi) { const int unicode_length = MultiByteToWideChar(CP_ACP, 0, ansi, length, nullptr, 0); WCHAR* unicode = new WCHAR[unicode_length + 1]; - MultiByteToWideChar(CP_ACP, 0, ansi, length, - unicode, unicode_length); + MultiByteToWideChar(CP_ACP, 0, ansi, length, unicode, unicode_length); unicode[unicode_length] = 0; return unicode; } @@ -894,7 +1160,7 @@ LPCWSTR String::AnsiToUtf16(const char* ansi) { // memory using new. The caller is responsible for deleting the return // value using delete[]. Returns the ANSI string, or NULL if the // input is NULL. -const char* String::Utf16ToAnsi(LPCWSTR utf16_str) { +const char* String::Utf16ToAnsi(LPCWSTR utf16_str) { if (!utf16_str) return nullptr; const int ansi_length = WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, nullptr, 0, nullptr, nullptr); @@ -913,7 +1179,7 @@ const char* String::Utf16ToAnsi(LPCWSTR utf16_str) { // Unlike strcmp(), this function can handle NULL argument(s). A NULL // C string is considered different to any non-NULL C string, // including the empty string. -bool String::CStringEquals(const char * lhs, const char * rhs) { +bool String::CStringEquals(const char* lhs, const char* rhs) { if (lhs == nullptr) return rhs == nullptr; if (rhs == nullptr) return false; @@ -927,11 +1193,10 @@ bool String::CStringEquals(const char * lhs, const char * rhs) { // encoding, and streams the result to the given Message object. static void StreamWideCharsToMessage(const wchar_t* wstr, size_t length, Message* msg) { - for (size_t i = 0; i != length; ) { // NOLINT + for (size_t i = 0; i != length;) { // NOLINT if (wstr[i] != L'\0') { *msg << WideStringToUtf8(wstr + i, static_cast<int>(length - i)); - while (i != length && wstr[i] != L'\0') - i++; + while (i != length && wstr[i] != L'\0') i++; } else { *msg << '\0'; i++; @@ -973,17 +1238,17 @@ Message::Message() : ss_(new ::std::stringstream) { // These two overloads allow streaming a wide C string to a Message // using the UTF-8 encoding. -Message& Message::operator <<(const wchar_t* wide_c_str) { +Message& Message::operator<<(const wchar_t* wide_c_str) { return *this << internal::String::ShowWideCString(wide_c_str); } -Message& Message::operator <<(wchar_t* wide_c_str) { +Message& Message::operator<<(wchar_t* wide_c_str) { return *this << internal::String::ShowWideCString(wide_c_str); } #if GTEST_HAS_STD_WSTRING // Converts the given wide string to a narrow string using the UTF-8 // encoding, and streams the result to this Message object. -Message& Message::operator <<(const ::std::wstring& wstr) { +Message& Message::operator<<(const ::std::wstring& wstr) { internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this); return *this; } @@ -995,44 +1260,6 @@ std::string Message::GetString() const { return internal::StringStreamToString(ss_.get()); } -// AssertionResult constructors. -// Used in EXPECT_TRUE/FALSE(assertion_result). -AssertionResult::AssertionResult(const AssertionResult& other) - : success_(other.success_), - message_(other.message_.get() != nullptr - ? new ::std::string(*other.message_) - : static_cast< ::std::string*>(nullptr)) {} - -// Swaps two AssertionResults. -void AssertionResult::swap(AssertionResult& other) { - using std::swap; - swap(success_, other.success_); - swap(message_, other.message_); -} - -// Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. -AssertionResult AssertionResult::operator!() const { - AssertionResult negation(!success_); - if (message_.get() != nullptr) negation << *message_; - return negation; -} - -// Makes a successful assertion result. -AssertionResult AssertionSuccess() { - return AssertionResult(true); -} - -// Makes a failed assertion result. -AssertionResult AssertionFailure() { - return AssertionResult(false); -} - -// Makes a failed assertion result with the given failure message. -// Deprecated; use AssertionFailure() << message. -AssertionResult AssertionFailure(const Message& message) { - return AssertionFailure() << message; -} - namespace internal { namespace edit_distance { @@ -1324,8 +1551,7 @@ std::vector<std::string> SplitEscapedString(const std::string& str) { AssertionResult EqFailure(const char* lhs_expression, const char* rhs_expression, const std::string& lhs_value, - const std::string& rhs_value, - bool ignoring_case) { + const std::string& rhs_value, bool ignoring_case) { Message msg; msg << "Expected equality of these values:"; msg << "\n " << lhs_expression; @@ -1342,10 +1568,8 @@ AssertionResult EqFailure(const char* lhs_expression, } if (!lhs_value.empty() && !rhs_value.empty()) { - const std::vector<std::string> lhs_lines = - SplitEscapedString(lhs_value); - const std::vector<std::string> rhs_lines = - SplitEscapedString(rhs_value); + const std::vector<std::string> lhs_lines = SplitEscapedString(lhs_value); + const std::vector<std::string> rhs_lines = SplitEscapedString(rhs_value); if (lhs_lines.size() > 1 || rhs_lines.size() > 1) { msg << "\nWith diff:\n" << edit_distance::CreateUnifiedDiff(lhs_lines, rhs_lines); @@ -1357,45 +1581,61 @@ AssertionResult EqFailure(const char* lhs_expression, // Constructs a failure message for Boolean assertions such as EXPECT_TRUE. std::string GetBoolAssertionFailureMessage( - const AssertionResult& assertion_result, - const char* expression_text, - const char* actual_predicate_value, - const char* expected_predicate_value) { + const AssertionResult& assertion_result, const char* expression_text, + const char* actual_predicate_value, const char* expected_predicate_value) { const char* actual_message = assertion_result.message(); Message msg; msg << "Value of: " << expression_text << "\n Actual: " << actual_predicate_value; - if (actual_message[0] != '\0') - msg << " (" << actual_message << ")"; + if (actual_message[0] != '\0') msg << " (" << actual_message << ")"; msg << "\nExpected: " << expected_predicate_value; return msg.GetString(); } // Helper function for implementing ASSERT_NEAR. -AssertionResult DoubleNearPredFormat(const char* expr1, - const char* expr2, - const char* abs_error_expr, - double val1, - double val2, - double abs_error) { +AssertionResult DoubleNearPredFormat(const char* expr1, const char* expr2, + const char* abs_error_expr, double val1, + double val2, double abs_error) { const double diff = fabs(val1 - val2); if (diff <= abs_error) return AssertionSuccess(); + // Find the value which is closest to zero. + const double min_abs = std::min(fabs(val1), fabs(val2)); + // Find the distance to the next double from that value. + const double epsilon = + nextafter(min_abs, std::numeric_limits<double>::infinity()) - min_abs; + // Detect the case where abs_error is so small that EXPECT_NEAR is + // effectively the same as EXPECT_EQUAL, and give an informative error + // message so that the situation can be more easily understood without + // requiring exotic floating-point knowledge. + // Don't do an epsilon check if abs_error is zero because that implies + // that an equality check was actually intended. + if (!(std::isnan)(val1) && !(std::isnan)(val2) && abs_error > 0 && + abs_error < epsilon) { + return AssertionFailure() + << "The difference between " << expr1 << " and " << expr2 << " is " + << diff << ", where\n" + << expr1 << " evaluates to " << val1 << ",\n" + << expr2 << " evaluates to " << val2 << ".\nThe abs_error parameter " + << abs_error_expr << " evaluates to " << abs_error + << " which is smaller than the minimum distance between doubles for " + "numbers of this magnitude which is " + << epsilon + << ", thus making this EXPECT_NEAR check equivalent to " + "EXPECT_EQUAL. Consider using EXPECT_DOUBLE_EQ instead."; + } return AssertionFailure() - << "The difference between " << expr1 << " and " << expr2 - << " is " << diff << ", which exceeds " << abs_error_expr << ", where\n" - << expr1 << " evaluates to " << val1 << ",\n" - << expr2 << " evaluates to " << val2 << ", and\n" - << abs_error_expr << " evaluates to " << abs_error << "."; + << "The difference between " << expr1 << " and " << expr2 << " is " + << diff << ", which exceeds " << abs_error_expr << ", where\n" + << expr1 << " evaluates to " << val1 << ",\n" + << expr2 << " evaluates to " << val2 << ", and\n" + << abs_error_expr << " evaluates to " << abs_error << "."; } - // Helper template for implementing FloatLE() and DoubleLE(). template <typename RawType> -AssertionResult FloatingPointLE(const char* expr1, - const char* expr2, - RawType val1, - RawType val2) { +AssertionResult FloatingPointLE(const char* expr1, const char* expr2, + RawType val1, RawType val2) { // Returns success if val1 is less than val2, if (val1 < val2) { return AssertionSuccess(); @@ -1420,138 +1660,76 @@ AssertionResult FloatingPointLE(const char* expr1, << val2; return AssertionFailure() - << "Expected: (" << expr1 << ") <= (" << expr2 << ")\n" - << " Actual: " << StringStreamToString(&val1_ss) << " vs " - << StringStreamToString(&val2_ss); + << "Expected: (" << expr1 << ") <= (" << expr2 << ")\n" + << " Actual: " << StringStreamToString(&val1_ss) << " vs " + << StringStreamToString(&val2_ss); } } // namespace internal // Asserts that val1 is less than, or almost equal to, val2. Fails // otherwise. In particular, it fails if either val1 or val2 is NaN. -AssertionResult FloatLE(const char* expr1, const char* expr2, - float val1, float val2) { +AssertionResult FloatLE(const char* expr1, const char* expr2, float val1, + float val2) { return internal::FloatingPointLE<float>(expr1, expr2, val1, val2); } // Asserts that val1 is less than, or almost equal to, val2. Fails // otherwise. In particular, it fails if either val1 or val2 is NaN. -AssertionResult DoubleLE(const char* expr1, const char* expr2, - double val1, double val2) { +AssertionResult DoubleLE(const char* expr1, const char* expr2, double val1, + double val2) { return internal::FloatingPointLE<double>(expr1, expr2, val1, val2); } namespace internal { -// The helper function for {ASSERT|EXPECT}_EQ with int or enum -// arguments. -AssertionResult CmpHelperEQ(const char* lhs_expression, - const char* rhs_expression, - BiggestInt lhs, - BiggestInt rhs) { - if (lhs == rhs) { - return AssertionSuccess(); - } - - return EqFailure(lhs_expression, - rhs_expression, - FormatForComparisonFailureMessage(lhs, rhs), - FormatForComparisonFailureMessage(rhs, lhs), - false); -} - -// A macro for implementing the helper functions needed to implement -// ASSERT_?? and EXPECT_?? with integer or enum arguments. It is here -// just to avoid copy-and-paste of similar code. -#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ -AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ - BiggestInt val1, BiggestInt val2) {\ - if (val1 op val2) {\ - return AssertionSuccess();\ - } else {\ - return AssertionFailure() \ - << "Expected: (" << expr1 << ") " #op " (" << expr2\ - << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ - << " vs " << FormatForComparisonFailureMessage(val2, val1);\ - }\ -} - -// Implements the helper function for {ASSERT|EXPECT}_NE with int or -// enum arguments. -GTEST_IMPL_CMP_HELPER_(NE, !=) -// Implements the helper function for {ASSERT|EXPECT}_LE with int or -// enum arguments. -GTEST_IMPL_CMP_HELPER_(LE, <=) -// Implements the helper function for {ASSERT|EXPECT}_LT with int or -// enum arguments. -GTEST_IMPL_CMP_HELPER_(LT, < ) -// Implements the helper function for {ASSERT|EXPECT}_GE with int or -// enum arguments. -GTEST_IMPL_CMP_HELPER_(GE, >=) -// Implements the helper function for {ASSERT|EXPECT}_GT with int or -// enum arguments. -GTEST_IMPL_CMP_HELPER_(GT, > ) - -#undef GTEST_IMPL_CMP_HELPER_ - // The helper function for {ASSERT|EXPECT}_STREQ. AssertionResult CmpHelperSTREQ(const char* lhs_expression, - const char* rhs_expression, - const char* lhs, + const char* rhs_expression, const char* lhs, const char* rhs) { if (String::CStringEquals(lhs, rhs)) { return AssertionSuccess(); } - return EqFailure(lhs_expression, - rhs_expression, - PrintToString(lhs), - PrintToString(rhs), - false); + return EqFailure(lhs_expression, rhs_expression, PrintToString(lhs), + PrintToString(rhs), false); } // The helper function for {ASSERT|EXPECT}_STRCASEEQ. AssertionResult CmpHelperSTRCASEEQ(const char* lhs_expression, - const char* rhs_expression, - const char* lhs, + const char* rhs_expression, const char* lhs, const char* rhs) { if (String::CaseInsensitiveCStringEquals(lhs, rhs)) { return AssertionSuccess(); } - return EqFailure(lhs_expression, - rhs_expression, - PrintToString(lhs), - PrintToString(rhs), - true); + return EqFailure(lhs_expression, rhs_expression, PrintToString(lhs), + PrintToString(rhs), true); } // The helper function for {ASSERT|EXPECT}_STRNE. AssertionResult CmpHelperSTRNE(const char* s1_expression, - const char* s2_expression, - const char* s1, + const char* s2_expression, const char* s1, const char* s2) { if (!String::CStringEquals(s1, s2)) { return AssertionSuccess(); } else { - return AssertionFailure() << "Expected: (" << s1_expression << ") != (" - << s2_expression << "), actual: \"" - << s1 << "\" vs \"" << s2 << "\""; + return AssertionFailure() + << "Expected: (" << s1_expression << ") != (" << s2_expression + << "), actual: \"" << s1 << "\" vs \"" << s2 << "\""; } } // The helper function for {ASSERT|EXPECT}_STRCASENE. AssertionResult CmpHelperSTRCASENE(const char* s1_expression, - const char* s2_expression, - const char* s1, + const char* s2_expression, const char* s1, const char* s2) { if (!String::CaseInsensitiveCStringEquals(s1, s2)) { return AssertionSuccess(); } else { return AssertionFailure() - << "Expected: (" << s1_expression << ") != (" - << s2_expression << ") (ignoring case), actual: \"" - << s1 << "\" vs \"" << s2 << "\""; + << "Expected: (" << s1_expression << ") != (" << s2_expression + << ") (ignoring case), actual: \"" << s1 << "\" vs \"" << s2 << "\""; } } @@ -1579,8 +1757,7 @@ bool IsSubstringPred(const wchar_t* needle, const wchar_t* haystack) { // StringType here can be either ::std::string or ::std::wstring. template <typename StringType> -bool IsSubstringPred(const StringType& needle, - const StringType& haystack) { +bool IsSubstringPred(const StringType& needle, const StringType& haystack) { return haystack.find(needle) != StringType::npos; } @@ -1589,21 +1766,22 @@ bool IsSubstringPred(const StringType& needle, // StringType here can be const char*, const wchar_t*, ::std::string, // or ::std::wstring. template <typename StringType> -AssertionResult IsSubstringImpl( - bool expected_to_be_substring, - const char* needle_expr, const char* haystack_expr, - const StringType& needle, const StringType& haystack) { +AssertionResult IsSubstringImpl(bool expected_to_be_substring, + const char* needle_expr, + const char* haystack_expr, + const StringType& needle, + const StringType& haystack) { if (IsSubstringPred(needle, haystack) == expected_to_be_substring) return AssertionSuccess(); const bool is_wide_string = sizeof(needle[0]) > 1; const char* const begin_string_quote = is_wide_string ? "L\"" : "\""; return AssertionFailure() - << "Value of: " << needle_expr << "\n" - << " Actual: " << begin_string_quote << needle << "\"\n" - << "Expected: " << (expected_to_be_substring ? "" : "not ") - << "a substring of " << haystack_expr << "\n" - << "Which is: " << begin_string_quote << haystack << "\""; + << "Value of: " << needle_expr << "\n" + << " Actual: " << begin_string_quote << needle << "\"\n" + << "Expected: " << (expected_to_be_substring ? "" : "not ") + << "a substring of " << haystack_expr << "\n" + << "Which is: " << begin_string_quote << haystack << "\""; } } // namespace @@ -1612,52 +1790,52 @@ AssertionResult IsSubstringImpl( // substring of haystack (NULL is considered a substring of itself // only), and return an appropriate error message when they fail. -AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const char* needle, const char* haystack) { +AssertionResult IsSubstring(const char* needle_expr, const char* haystack_expr, + const char* needle, const char* haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } -AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const wchar_t* needle, const wchar_t* haystack) { +AssertionResult IsSubstring(const char* needle_expr, const char* haystack_expr, + const wchar_t* needle, const wchar_t* haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } -AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const char* needle, const char* haystack) { +AssertionResult IsNotSubstring(const char* needle_expr, + const char* haystack_expr, const char* needle, + const char* haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } -AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const wchar_t* needle, const wchar_t* haystack) { +AssertionResult IsNotSubstring(const char* needle_expr, + const char* haystack_expr, const wchar_t* needle, + const wchar_t* haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } -AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::string& needle, const ::std::string& haystack) { +AssertionResult IsSubstring(const char* needle_expr, const char* haystack_expr, + const ::std::string& needle, + const ::std::string& haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } -AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::string& needle, const ::std::string& haystack) { +AssertionResult IsNotSubstring(const char* needle_expr, + const char* haystack_expr, + const ::std::string& needle, + const ::std::string& haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } #if GTEST_HAS_STD_WSTRING -AssertionResult IsSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::wstring& needle, const ::std::wstring& haystack) { +AssertionResult IsSubstring(const char* needle_expr, const char* haystack_expr, + const ::std::wstring& needle, + const ::std::wstring& haystack) { return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack); } -AssertionResult IsNotSubstring( - const char* needle_expr, const char* haystack_expr, - const ::std::wstring& needle, const ::std::wstring& haystack) { +AssertionResult IsNotSubstring(const char* needle_expr, + const char* haystack_expr, + const ::std::wstring& needle, + const ::std::wstring& haystack) { return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack); } #endif // GTEST_HAS_STD_WSTRING @@ -1669,43 +1847,42 @@ namespace internal { namespace { // Helper function for IsHRESULT{SuccessFailure} predicates -AssertionResult HRESULTFailureHelper(const char* expr, - const char* expected, +AssertionResult HRESULTFailureHelper(const char* expr, const char* expected, long hr) { // NOLINT -# if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_TV_TITLE +#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_TV_TITLE // Windows CE doesn't support FormatMessage. const char error_text[] = ""; -# else +#else // Looks up the human-readable system message for the HRESULT code // and since we're not passing any params to FormatMessage, we don't // want inserts expanded. - const DWORD kFlags = FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS; + const DWORD kFlags = + FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS; const DWORD kBufSize = 4096; // Gets the system's human readable message string for this HRESULT. - char error_text[kBufSize] = { '\0' }; + char error_text[kBufSize] = {'\0'}; DWORD message_length = ::FormatMessageA(kFlags, - 0, // no source, we're asking system + 0, // no source, we're asking system static_cast<DWORD>(hr), // the error - 0, // no line width restrictions + 0, // no line width restrictions error_text, // output buffer kBufSize, // buf size nullptr); // no arguments for inserts // Trims tailing white space (FormatMessage leaves a trailing CR-LF) for (; message_length && IsSpace(error_text[message_length - 1]); - --message_length) { + --message_length) { error_text[message_length - 1] = '\0'; } -# endif // GTEST_OS_WINDOWS_MOBILE +#endif // GTEST_OS_WINDOWS_MOBILE const std::string error_hex("0x" + String::FormatHexInt(hr)); return ::testing::AssertionFailure() - << "Expected: " << expr << " " << expected << ".\n" - << " Actual: " << error_hex << " " << error_text << "\n"; + << "Expected: " << expr << " " << expected << ".\n" + << " Actual: " << error_hex << " " << error_text << "\n"; } } // namespace @@ -1739,33 +1916,35 @@ AssertionResult IsHRESULTFailure(const char* expr, long hr) { // NOLINT // 17 - 21 bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx // The maximum code-point a one-byte UTF-8 sequence can represent. -const UInt32 kMaxCodePoint1 = (static_cast<UInt32>(1) << 7) - 1; +constexpr uint32_t kMaxCodePoint1 = (static_cast<uint32_t>(1) << 7) - 1; // The maximum code-point a two-byte UTF-8 sequence can represent. -const UInt32 kMaxCodePoint2 = (static_cast<UInt32>(1) << (5 + 6)) - 1; +constexpr uint32_t kMaxCodePoint2 = (static_cast<uint32_t>(1) << (5 + 6)) - 1; // The maximum code-point a three-byte UTF-8 sequence can represent. -const UInt32 kMaxCodePoint3 = (static_cast<UInt32>(1) << (4 + 2*6)) - 1; +constexpr uint32_t kMaxCodePoint3 = + (static_cast<uint32_t>(1) << (4 + 2 * 6)) - 1; // The maximum code-point a four-byte UTF-8 sequence can represent. -const UInt32 kMaxCodePoint4 = (static_cast<UInt32>(1) << (3 + 3*6)) - 1; +constexpr uint32_t kMaxCodePoint4 = + (static_cast<uint32_t>(1) << (3 + 3 * 6)) - 1; // Chops off the n lowest bits from a bit pattern. Returns the n // lowest bits. As a side effect, the original bit pattern will be // shifted to the right by n bits. -inline UInt32 ChopLowBits(UInt32* bits, int n) { - const UInt32 low_bits = *bits & ((static_cast<UInt32>(1) << n) - 1); +inline uint32_t ChopLowBits(uint32_t* bits, int n) { + const uint32_t low_bits = *bits & ((static_cast<uint32_t>(1) << n) - 1); *bits >>= n; return low_bits; } // Converts a Unicode code point to a narrow string in UTF-8 encoding. -// code_point parameter is of type UInt32 because wchar_t may not be +// code_point parameter is of type uint32_t because wchar_t may not be // wide enough to contain a code point. // If the code_point is not a valid Unicode code point // (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted // to "(Invalid Unicode 0xXXXXXXXX)". -std::string CodePointToUtf8(UInt32 code_point) { +std::string CodePointToUtf8(uint32_t code_point) { if (code_point > kMaxCodePoint4) { return "(Invalid Unicode 0x" + String::FormatHexUInt32(code_point) + ")"; } @@ -1773,7 +1952,7 @@ std::string CodePointToUtf8(UInt32 code_point) { char str[5]; // Big enough for the largest valid code point. if (code_point <= kMaxCodePoint1) { str[1] = '\0'; - str[0] = static_cast<char>(code_point); // 0xxxxxxx + str[0] = static_cast<char>(code_point); // 0xxxxxxx } else if (code_point <= kMaxCodePoint2) { str[2] = '\0'; str[1] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6)); // 10xxxxxx @@ -1801,16 +1980,16 @@ std::string CodePointToUtf8(UInt32 code_point) { // and thus should be combined into a single Unicode code point // using CreateCodePointFromUtf16SurrogatePair. inline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) { - return sizeof(wchar_t) == 2 && - (first & 0xFC00) == 0xD800 && (second & 0xFC00) == 0xDC00; + return sizeof(wchar_t) == 2 && (first & 0xFC00) == 0xD800 && + (second & 0xFC00) == 0xDC00; } // Creates a Unicode code point from UTF16 surrogate pair. -inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first, - wchar_t second) { - const auto first_u = static_cast<UInt32>(first); - const auto second_u = static_cast<UInt32>(second); - const UInt32 mask = (1 << 10) - 1; +inline uint32_t CreateCodePointFromUtf16SurrogatePair(wchar_t first, + wchar_t second) { + const auto first_u = static_cast<uint32_t>(first); + const auto second_u = static_cast<uint32_t>(second); + const uint32_t mask = (1 << 10) - 1; return (sizeof(wchar_t) == 2) ? (((first_u & mask) << 10) | (second_u & mask)) + 0x10000 : @@ -1833,21 +2012,20 @@ inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first, // and contains invalid UTF-16 surrogate pairs, values in those pairs // will be encoded as individual Unicode characters from Basic Normal Plane. std::string WideStringToUtf8(const wchar_t* str, int num_chars) { - if (num_chars == -1) - num_chars = static_cast<int>(wcslen(str)); + if (num_chars == -1) num_chars = static_cast<int>(wcslen(str)); ::std::stringstream stream; for (int i = 0; i < num_chars; ++i) { - UInt32 unicode_code_point; + uint32_t unicode_code_point; if (str[i] == L'\0') { break; } else if (i + 1 < num_chars && IsUtf16SurrogatePair(str[i], str[i + 1])) { - unicode_code_point = CreateCodePointFromUtf16SurrogatePair(str[i], - str[i + 1]); + unicode_code_point = + CreateCodePointFromUtf16SurrogatePair(str[i], str[i + 1]); i++; } else { - unicode_code_point = static_cast<UInt32>(str[i]); + unicode_code_point = static_cast<uint32_t>(str[i]); } stream << CodePointToUtf8(unicode_code_point); @@ -1857,7 +2035,7 @@ std::string WideStringToUtf8(const wchar_t* str, int num_chars) { // Converts a wide C string to an std::string using the UTF-8 encoding. // NULL will be converted to "(null)". -std::string String::ShowWideCString(const wchar_t * wide_c_str) { +std::string String::ShowWideCString(const wchar_t* wide_c_str) { if (wide_c_str == nullptr) return "(null)"; return internal::WideStringToUtf8(wide_c_str, -1); @@ -1869,7 +2047,7 @@ std::string String::ShowWideCString(const wchar_t * wide_c_str) { // Unlike wcscmp(), this function can handle NULL argument(s). A NULL // C string is considered different to any non-NULL C string, // including the empty string. -bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) { +bool String::WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs) { if (lhs == nullptr) return rhs == nullptr; if (rhs == nullptr) return false; @@ -1879,33 +2057,27 @@ bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) { // Helper function for *_STREQ on wide strings. AssertionResult CmpHelperSTREQ(const char* lhs_expression, - const char* rhs_expression, - const wchar_t* lhs, + const char* rhs_expression, const wchar_t* lhs, const wchar_t* rhs) { if (String::WideCStringEquals(lhs, rhs)) { return AssertionSuccess(); } - return EqFailure(lhs_expression, - rhs_expression, - PrintToString(lhs), - PrintToString(rhs), - false); + return EqFailure(lhs_expression, rhs_expression, PrintToString(lhs), + PrintToString(rhs), false); } // Helper function for *_STRNE on wide strings. AssertionResult CmpHelperSTRNE(const char* s1_expression, - const char* s2_expression, - const wchar_t* s1, + const char* s2_expression, const wchar_t* s1, const wchar_t* s2) { if (!String::WideCStringEquals(s1, s2)) { return AssertionSuccess(); } - return AssertionFailure() << "Expected: (" << s1_expression << ") != (" - << s2_expression << "), actual: " - << PrintToString(s1) - << " vs " << PrintToString(s2); + return AssertionFailure() + << "Expected: (" << s1_expression << ") != (" << s2_expression + << "), actual: " << PrintToString(s1) << " vs " << PrintToString(s2); } // Compares two C strings, ignoring case. Returns true if and only if they have @@ -1914,7 +2086,7 @@ AssertionResult CmpHelperSTRNE(const char* s1_expression, // Unlike strcasecmp(), this function can handle NULL argument(s). A // NULL C string is considered different to any non-NULL C string, // including the empty string. -bool String::CaseInsensitiveCStringEquals(const char * lhs, const char * rhs) { +bool String::CaseInsensitiveCStringEquals(const char* lhs, const char* rhs) { if (lhs == nullptr) return rhs == nullptr; if (rhs == nullptr) return false; return posix::StrCaseCmp(lhs, rhs) == 0; @@ -1956,8 +2128,8 @@ bool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs, // Returns true if and only if str ends with the given suffix, ignoring case. // Any string is considered to end with an empty suffix. -bool String::EndsWithCaseInsensitive( - const std::string& str, const std::string& suffix) { +bool String::EndsWithCaseInsensitive(const std::string& str, + const std::string& suffix) { const size_t str_len = str.length(); const size_t suffix_len = suffix.length(); return (str_len >= suffix_len) && @@ -1967,13 +2139,18 @@ bool String::EndsWithCaseInsensitive( // Formats an int value as "%02d". std::string String::FormatIntWidth2(int value) { + return FormatIntWidthN(value, 2); +} + +// Formats an int value to given width with leading zeros. +std::string String::FormatIntWidthN(int value, int width) { std::stringstream ss; - ss << std::setfill('0') << std::setw(2) << value; + ss << std::setfill('0') << std::setw(width) << value; return ss.str(); } // Formats an int value as "%X". -std::string String::FormatHexUInt32(UInt32 value) { +std::string String::FormatHexUInt32(uint32_t value) { std::stringstream ss; ss << std::hex << std::uppercase << value; return ss.str(); @@ -1981,7 +2158,7 @@ std::string String::FormatHexUInt32(UInt32 value) { // Formats an int value as "%X". std::string String::FormatHexInt(int value) { - return FormatHexUInt32(static_cast<UInt32>(value)); + return FormatHexUInt32(static_cast<uint32_t>(value)); } // Formats a byte as "%02X". @@ -2020,7 +2197,9 @@ std::string AppendUserMessage(const std::string& gtest_msg, if (user_msg_string.empty()) { return gtest_msg; } - + if (gtest_msg.empty()) { + return user_msg_string; + } return gtest_msg + "\n" + user_msg_string; } @@ -2033,15 +2212,13 @@ TestResult::TestResult() : death_test_count_(0), start_timestamp_(0), elapsed_time_(0) {} // D'tor. -TestResult::~TestResult() { -} +TestResult::~TestResult() {} // Returns the i-th test part result among all the results. i can // range from 0 to total_part_count() - 1. If i is not in that range, // aborts the program. const TestPartResult& TestResult::GetTestPartResult(int i) const { - if (i < 0 || i >= total_part_count()) - internal::posix::Abort(); + if (i < 0 || i >= total_part_count()) internal::posix::Abort(); return test_part_results_.at(static_cast<size_t>(i)); } @@ -2049,15 +2226,12 @@ const TestPartResult& TestResult::GetTestPartResult(int i) const { // test_property_count() - 1. If i is not in that range, aborts the // program. const TestProperty& TestResult::GetTestProperty(int i) const { - if (i < 0 || i >= test_property_count()) - internal::posix::Abort(); + if (i < 0 || i >= test_property_count()) internal::posix::Abort(); return test_properties_.at(static_cast<size_t>(i)); } // Clears the test part results. -void TestResult::ClearTestPartResults() { - test_part_results_.clear(); -} +void TestResult::ClearTestPartResults() { test_part_results_.clear(); } // Adds a test part result to the list. void TestResult::AddTestPartResult(const TestPartResult& test_part_result) { @@ -2072,7 +2246,7 @@ void TestResult::RecordProperty(const std::string& xml_element, if (!ValidateTestProperty(xml_element, test_property)) { return; } - internal::MutexLock lock(&test_properites_mutex_); + internal::MutexLock lock(&test_properties_mutex_); const std::vector<TestProperty>::iterator property_with_matching_key = std::find_if(test_properties_.begin(), test_properties_.end(), internal::TestPropertyKeyIs(test_property.key())); @@ -2086,25 +2260,19 @@ void TestResult::RecordProperty(const std::string& xml_element, // The list of reserved attributes used in the <testsuites> element of XML // output. static const char* const kReservedTestSuitesAttributes[] = { - "disabled", - "errors", - "failures", - "name", - "random_seed", - "tests", - "time", - "timestamp" -}; + "disabled", "errors", "failures", "name", + "random_seed", "tests", "time", "timestamp"}; // The list of reserved attributes used in the <testsuite> element of XML // output. static const char* const kReservedTestSuiteAttributes[] = { - "disabled", "errors", "failures", "name", "tests", "time", "timestamp"}; + "disabled", "errors", "failures", "name", + "tests", "time", "timestamp", "skipped"}; // The list of reserved attributes used in the <testcase> element of XML output. static const char* const kReservedTestCaseAttributes[] = { - "classname", "name", "status", "time", "type_param", - "value_param", "file", "line"}; + "classname", "name", "status", "time", + "type_param", "value_param", "file", "line"}; // Use a slightly different set for allowed output to ensure existing tests can // still RecordProperty("result") or "RecordProperty(timestamp") @@ -2112,7 +2280,7 @@ static const char* const kReservedOutputTestCaseAttributes[] = { "classname", "name", "status", "time", "type_param", "value_param", "file", "line", "result", "timestamp"}; -template <int kSize> +template <size_t kSize> std::vector<std::string> ArrayAsVector(const char* const (&array)[kSize]) { return std::vector<std::string>(array, array + kSize); } @@ -2166,7 +2334,7 @@ static bool ValidateTestPropertyName( const std::string& property_name, const std::vector<std::string>& reserved_names) { if (std::find(reserved_names.begin(), reserved_names.end(), property_name) != - reserved_names.end()) { + reserved_names.end()) { ADD_FAILURE() << "Reserved key used in RecordProperty(): " << property_name << " (" << FormatWordList(reserved_names) << " are reserved by " << GTEST_NAME_ << ")"; @@ -2204,8 +2372,7 @@ bool TestResult::Skipped() const { // Returns true if and only if the test failed. bool TestResult::Failed() const { for (int i = 0; i < total_part_count(); ++i) { - if (GetTestPartResult(i).failed()) - return true; + if (GetTestPartResult(i).failed()) return true; } return false; } @@ -2246,27 +2413,22 @@ int TestResult::test_property_count() const { // Creates a Test object. // The c'tor saves the states of all flags. -Test::Test() - : gtest_flag_saver_(new GTEST_FLAG_SAVER_) { -} +Test::Test() : gtest_flag_saver_(new GTEST_FLAG_SAVER_) {} // The d'tor restores the states of all flags. The actual work is // done by the d'tor of the gtest_flag_saver_ field, and thus not // visible here. -Test::~Test() { -} +Test::~Test() {} // Sets up the test fixture. // // A sub-class may override this. -void Test::SetUp() { -} +void Test::SetUp() {} // Tears down the test fixture. // // A sub-class may override this. -void Test::TearDown() { -} +void Test::TearDown() {} // Allows user supplied key value pairs to be recorded for later output. void Test::RecordProperty(const std::string& key, const std::string& value) { @@ -2371,8 +2533,8 @@ bool Test::HasSameFixtureClass() { static std::string* FormatSehExceptionMessage(DWORD exception_code, const char* location) { Message message; - message << "SEH exception with code 0x" << std::setbase(16) << - exception_code << std::setbase(10) << " thrown in " << location << "."; + message << "SEH exception with code 0x" << std::setbase(16) << exception_code + << std::setbase(10) << " thrown in " << location << "."; return new std::string(message.GetString()); } @@ -2415,8 +2577,8 @@ GoogleTestFailureException::GoogleTestFailureException( // exceptions in the same function. Therefore, we provide a separate // wrapper function for handling SEH exceptions.) template <class T, typename Result> -Result HandleSehExceptionsInMethodIfSupported( - T* object, Result (T::*method)(), const char* location) { +Result HandleSehExceptionsInMethodIfSupported(T* object, Result (T::*method)(), + const char* location) { #if GTEST_HAS_SEH __try { return (object->*method)(); @@ -2425,8 +2587,8 @@ Result HandleSehExceptionsInMethodIfSupported( // We create the exception message on the heap because VC++ prohibits // creation of objects with destructors on stack in functions using __try // (see error C2712). - std::string* exception_message = FormatSehExceptionMessage( - GetExceptionCode(), location); + std::string* exception_message = + FormatSehExceptionMessage(GetExceptionCode(), location); internal::ReportFailureInUnknownLocation(TestPartResult::kFatalFailure, *exception_message); delete exception_message; @@ -2442,8 +2604,8 @@ Result HandleSehExceptionsInMethodIfSupported( // exceptions, if they are supported; returns the 0-value for type // Result in case of an SEH exception. template <class T, typename Result> -Result HandleExceptionsInMethodIfSupported( - T* object, Result (T::*method)(), const char* location) { +Result HandleExceptionsInMethodIfSupported(T* object, Result (T::*method)(), + const char* location) { // NOTE: The user code can affect the way in which Google Test handles // exceptions by setting GTEST_FLAG(catch_exceptions), but only before // RUN_ALL_TESTS() starts. It is technically possible to check the flag @@ -2453,7 +2615,7 @@ Result HandleExceptionsInMethodIfSupported( // try { // // Perform the test method. // } catch (...) { - // if (GTEST_FLAG(catch_exceptions)) + // if (GTEST_FLAG_GET(catch_exceptions)) // // Report the exception as failure. // else // throw; // Re-throws the original exception. @@ -2509,16 +2671,16 @@ void Test::Run() { // GTEST_SKIP(). if (!HasFatalFailure() && !IsSkipped()) { impl->os_stack_trace_getter()->UponLeavingGTest(); - internal::HandleExceptionsInMethodIfSupported( - this, &Test::TestBody, "the test body"); + internal::HandleExceptionsInMethodIfSupported(this, &Test::TestBody, + "the test body"); } // However, we want to clean up as much as possible. Hence we will // always call TearDown(), even if SetUp() or the test body has // failed. impl->os_stack_trace_getter()->UponLeavingGTest(); - internal::HandleExceptionsInMethodIfSupported( - this, &Test::TearDown, "TearDown()"); + internal::HandleExceptionsInMethodIfSupported(this, &Test::TearDown, + "TearDown()"); } // Returns true if and only if the current test has a fatal failure. @@ -2528,8 +2690,9 @@ bool Test::HasFatalFailure() { // Returns true if and only if the current test has a non-fatal failure. bool Test::HasNonfatalFailure() { - return internal::GetUnitTestImpl()->current_test_result()-> - HasNonfatalFailure(); + return internal::GetUnitTestImpl() + ->current_test_result() + ->HasNonfatalFailure(); } // Returns true if and only if the current test was skipped. @@ -2556,6 +2719,7 @@ TestInfo::TestInfo(const std::string& a_test_suite_name, should_run_(false), is_disabled_(false), matches_filter_(false), + is_in_another_shard_(false), factory_(factory), result_() {} @@ -2569,7 +2733,7 @@ namespace internal { // // Arguments: // -// test_suite_name: name of the test suite +// test_suite_name: name of the test suite // name: name of the test // type_param: the name of the test's type parameter, or NULL if // this is not a typed or a type-parameterized test. @@ -2628,11 +2792,10 @@ class TestNameIs { // Constructor. // // TestNameIs has NO default constructor. - explicit TestNameIs(const char* name) - : name_(name) {} + explicit TestNameIs(const char* name) : name_(name) {} // Returns true if and only if the test name of test_info matches name_. - bool operator()(const TestInfo * test_info) const { + bool operator()(const TestInfo* test_info) const { return test_info && test_info->name() == name_; } @@ -2650,6 +2813,7 @@ namespace internal { void UnitTestImpl::RegisterParameterizedTests() { if (!parameterized_tests_registered_) { parameterized_test_registry_.RegisterTests(); + type_parameterized_test_registry_.CheckForInstantiations(); parameterized_tests_registered_ = true; } } @@ -2659,19 +2823,20 @@ void UnitTestImpl::RegisterParameterizedTests() { // Creates the test object, runs it, records its result, and then // deletes it. void TestInfo::Run() { - if (!should_run_) return; + TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); + if (!should_run_) { + if (is_disabled_ && matches_filter_) repeater->OnTestDisabled(*this); + return; + } // Tells UnitTest where to store test result. internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); impl->set_current_test_info(this); - TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); - // Notifies the unit test event listeners that a test is about to start. repeater->OnTestStart(*this); - - const TimeInMillis start = internal::GetTimeInMillis(); - + result_.set_start_timestamp(internal::GetTimeInMillis()); + internal::Timer timer; impl->os_stack_trace_getter()->UponLeavingGTest(); // Creates the test object. @@ -2695,8 +2860,7 @@ void TestInfo::Run() { test, &Test::DeleteSelf_, "the test fixture's destructor"); } - result_.set_start_timestamp(start); - result_.set_elapsed_time(internal::GetTimeInMillis() - start); + result_.set_elapsed_time(timer.Elapsed()); // Notifies the unit test event listener that a test has just finished. repeater->OnTestEnd(*this); @@ -2706,6 +2870,28 @@ void TestInfo::Run() { impl->set_current_test_info(nullptr); } +// Skip and records a skipped test result for this object. +void TestInfo::Skip() { + if (!should_run_) return; + + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + impl->set_current_test_info(this); + + TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); + + // Notifies the unit test event listeners that a test is about to start. + repeater->OnTestStart(*this); + + const TestPartResult test_part_result = + TestPartResult(TestPartResult::kSkip, this->file(), this->line(), ""); + impl->GetTestPartResultReporterForCurrentThread()->ReportTestPartResult( + test_part_result); + + // Notifies the unit test event listener that a test has just finished. + repeater->OnTestEnd(*this); + impl->set_current_test_info(nullptr); +} + // class TestSuite // Gets the number of successful tests in this test suite. @@ -2752,7 +2938,7 @@ int TestSuite::total_test_count() const { // // Arguments: // -// name: name of the test suite +// a_name: name of the test suite // a_type_param: the name of the test suite's type parameter, or NULL if // this is not a typed or a type-parameterized test suite. // set_up_tc: pointer to the function that sets up the test suite @@ -2807,19 +2993,33 @@ void TestSuite::Run() { // Call both legacy and the new API repeater->OnTestSuiteStart(*this); // Legacy API is deprecated but still available -#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ repeater->OnTestCaseStart(*this); -#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( this, &TestSuite::RunSetUpTestSuite, "SetUpTestSuite()"); + const bool skip_all = ad_hoc_test_result().Failed(); + start_timestamp_ = internal::GetTimeInMillis(); + internal::Timer timer; for (int i = 0; i < total_test_count(); i++) { - GetMutableTestInfo(i)->Run(); + if (skip_all) { + GetMutableTestInfo(i)->Skip(); + } else { + GetMutableTestInfo(i)->Run(); + } + if (GTEST_FLAG_GET(fail_fast) && + GetMutableTestInfo(i)->result()->Failed()) { + for (int j = i + 1; j < total_test_count(); j++) { + GetMutableTestInfo(j)->Skip(); + } + break; + } } - elapsed_time_ = internal::GetTimeInMillis() - start_timestamp_; + elapsed_time_ = timer.Elapsed(); impl->os_stack_trace_getter()->UponLeavingGTest(); internal::HandleExceptionsInMethodIfSupported( @@ -2828,9 +3028,39 @@ void TestSuite::Run() { // Call both legacy and the new API repeater->OnTestSuiteEnd(*this); // Legacy API is deprecated but still available -#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ repeater->OnTestCaseEnd(*this); -#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + + impl->set_current_test_suite(nullptr); +} + +// Skips all tests under this TestSuite. +void TestSuite::Skip() { + if (!should_run_) return; + + internal::UnitTestImpl* const impl = internal::GetUnitTestImpl(); + impl->set_current_test_suite(this); + + TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater(); + + // Call both legacy and the new API + repeater->OnTestSuiteStart(*this); +// Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + repeater->OnTestCaseStart(*this); +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + + for (int i = 0; i < total_test_count(); i++) { + GetMutableTestInfo(i)->Skip(); + } + + // Call both legacy and the new API + repeater->OnTestSuiteEnd(*this); + // Legacy API is deprecated but still available +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + repeater->OnTestCaseEnd(*this); +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ impl->set_current_test_suite(nullptr); } @@ -2858,11 +3088,10 @@ void TestSuite::UnshuffleTests() { // // FormatCountableNoun(1, "formula", "formuli") returns "1 formula". // FormatCountableNoun(5, "book", "books") returns "5 books". -static std::string FormatCountableNoun(int count, - const char * singular_form, - const char * plural_form) { +static std::string FormatCountableNoun(int count, const char* singular_form, + const char* plural_form) { return internal::StreamableToString(count) + " " + - (count == 1 ? singular_form : plural_form); + (count == 1 ? singular_form : plural_form); } // Formats the count of tests. @@ -2879,10 +3108,10 @@ static std::string FormatTestSuiteCount(int test_suite_count) { // representation. Both kNonFatalFailure and kFatalFailure are translated // to "Failure", as the user usually doesn't care about the difference // between the two when viewing the test result. -static const char * TestPartResultTypeToString(TestPartResult::Type type) { +static const char* TestPartResultTypeToString(TestPartResult::Type type) { switch (type) { case TestPartResult::kSkip: - return "Skipped"; + return "Skipped\n"; case TestPartResult::kSuccess: return "Success"; @@ -2899,21 +3128,25 @@ static const char * TestPartResultTypeToString(TestPartResult::Type type) { } namespace internal { +namespace { +enum class GTestColor { kDefault, kRed, kGreen, kYellow }; +} // namespace // Prints a TestPartResult to an std::string. static std::string PrintTestPartResultToString( const TestPartResult& test_part_result) { - return (Message() - << internal::FormatFileLocation(test_part_result.file_name(), - test_part_result.line_number()) - << " " << TestPartResultTypeToString(test_part_result.type()) - << test_part_result.message()).GetString(); + return (Message() << internal::FormatFileLocation( + test_part_result.file_name(), + test_part_result.line_number()) + << " " + << TestPartResultTypeToString(test_part_result.type()) + << test_part_result.message()) + .GetString(); } // Prints a TestPartResult. static void PrintTestPartResult(const TestPartResult& test_part_result) { - const std::string& result = - PrintTestPartResultToString(test_part_result); + const std::string& result = PrintTestPartResultToString(test_part_result); printf("%s\n", result.c_str()); fflush(stdout); // If the test program runs in Visual Studio or a debugger, the @@ -2930,16 +3163,20 @@ static void PrintTestPartResult(const TestPartResult& test_part_result) { } // class PrettyUnitTestResultPrinter -#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE && \ - !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT && !GTEST_OS_WINDOWS_MINGW +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && \ + !GTEST_OS_WINDOWS_RT && !GTEST_OS_WINDOWS_MINGW // Returns the character attribute for the given color. static WORD GetColorAttribute(GTestColor color) { switch (color) { - case COLOR_RED: return FOREGROUND_RED; - case COLOR_GREEN: return FOREGROUND_GREEN; - case COLOR_YELLOW: return FOREGROUND_RED | FOREGROUND_GREEN; - default: return 0; + case GTestColor::kRed: + return FOREGROUND_RED; + case GTestColor::kGreen: + return FOREGROUND_GREEN; + case GTestColor::kYellow: + return FOREGROUND_RED | FOREGROUND_GREEN; + default: + return 0; } } @@ -2976,13 +3213,16 @@ static WORD GetNewColor(GTestColor color, WORD old_color_attrs) { #else -// Returns the ANSI color code for the given color. COLOR_DEFAULT is +// Returns the ANSI color code for the given color. GTestColor::kDefault is // an invalid input. static const char* GetAnsiColorCode(GTestColor color) { switch (color) { - case COLOR_RED: return "1"; - case COLOR_GREEN: return "2"; - case COLOR_YELLOW: return "3"; + case GTestColor::kRed: + return "1"; + case GTestColor::kGreen: + return "2"; + case GTestColor::kYellow: + return "3"; default: return nullptr; } @@ -2992,7 +3232,8 @@ static const char* GetAnsiColorCode(GTestColor color) { // Returns true if and only if Google Test should use colors in the output. bool ShouldUseColor(bool stdout_is_tty) { - const char* const gtest_color = GTEST_FLAG(color).c_str(); + std::string c = GTEST_FLAG_GET(color); + const char* const gtest_color = c.c_str(); if (String::CaseInsensitiveCStringEquals(gtest_color, "auto")) { #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW @@ -3019,9 +3260,9 @@ bool ShouldUseColor(bool stdout_is_tty) { } return String::CaseInsensitiveCStringEquals(gtest_color, "yes") || - String::CaseInsensitiveCStringEquals(gtest_color, "true") || - String::CaseInsensitiveCStringEquals(gtest_color, "t") || - String::CStringEquals(gtest_color, "1"); + String::CaseInsensitiveCStringEquals(gtest_color, "true") || + String::CaseInsensitiveCStringEquals(gtest_color, "t") || + String::CStringEquals(gtest_color, "1"); // We take "yes", "true", "t", and "1" as meaning "yes". If the // value is neither one of these nor "auto", we treat it as "no" to // be conservative. @@ -3031,18 +3272,15 @@ bool ShouldUseColor(bool stdout_is_tty) { // cannot simply emit special characters and have the terminal change colors. // This routine must actually emit the characters rather than return a string // that would be colored when printed, as can be done on Linux. -void ColoredPrintf(GTestColor color, const char* fmt, ...) { + +GTEST_ATTRIBUTE_PRINTF_(2, 3) +static void ColoredPrintf(GTestColor color, const char* fmt, ...) { va_list args; va_start(args, fmt); -#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_ZOS || GTEST_OS_IOS || \ - GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT || defined(ESP_PLATFORM) - const bool use_color = AlwaysFalse(); -#else static const bool in_color_mode = ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0); - const bool use_color = in_color_mode && (color != COLOR_DEFAULT); -#endif // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_ZOS + const bool use_color = in_color_mode && (color != GTestColor::kDefault); if (!use_color) { vprintf(fmt, args); @@ -3050,8 +3288,8 @@ void ColoredPrintf(GTestColor color, const char* fmt, ...) { return; } -#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE && \ - !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT && !GTEST_OS_WINDOWS_MINGW +#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && \ + !GTEST_OS_WINDOWS_RT && !GTEST_OS_WINDOWS_MINGW const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE); // Gets the current text color. @@ -3122,6 +3360,7 @@ class PrettyUnitTestResultPrinter : public TestEventListener { #endif // OnTestCaseStart void OnTestStart(const TestInfo& test_info) override; + void OnTestDisabled(const TestInfo& test_info) override; void OnTestPartResult(const TestPartResult& result) override; void OnTestEnd(const TestInfo& test_info) override; @@ -3138,39 +3377,40 @@ class PrettyUnitTestResultPrinter : public TestEventListener { private: static void PrintFailedTests(const UnitTest& unit_test); + static void PrintFailedTestSuites(const UnitTest& unit_test); static void PrintSkippedTests(const UnitTest& unit_test); }; - // Fired before each iteration of tests starts. +// Fired before each iteration of tests starts. void PrettyUnitTestResultPrinter::OnTestIterationStart( const UnitTest& unit_test, int iteration) { - if (GTEST_FLAG(repeat) != 1) + if (GTEST_FLAG_GET(repeat) != 1) printf("\nRepeating all tests (iteration %d) . . .\n\n", iteration + 1); - const char* const filter = GTEST_FLAG(filter).c_str(); + std::string f = GTEST_FLAG_GET(filter); + const char* const filter = f.c_str(); // Prints the filter if it's not *. This reminds the user that some // tests may be skipped. if (!String::CStringEquals(filter, kUniversalFilter)) { - ColoredPrintf(COLOR_YELLOW, - "Note: %s filter = %s\n", GTEST_NAME_, filter); + ColoredPrintf(GTestColor::kYellow, "Note: %s filter = %s\n", GTEST_NAME_, + filter); } if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) { - const Int32 shard_index = Int32FromEnvOrDie(kTestShardIndex, -1); - ColoredPrintf(COLOR_YELLOW, - "Note: This is test shard %d of %s.\n", + const int32_t shard_index = Int32FromEnvOrDie(kTestShardIndex, -1); + ColoredPrintf(GTestColor::kYellow, "Note: This is test shard %d of %s.\n", static_cast<int>(shard_index) + 1, internal::posix::GetEnv(kTestTotalShards)); } - if (GTEST_FLAG(shuffle)) { - ColoredPrintf(COLOR_YELLOW, + if (GTEST_FLAG_GET(shuffle)) { + ColoredPrintf(GTestColor::kYellow, "Note: Randomizing tests' orders with a seed of %d .\n", unit_test.random_seed()); } - ColoredPrintf(COLOR_GREEN, "[==========] "); + ColoredPrintf(GTestColor::kGreen, "[==========] "); printf("Running %s from %s.\n", FormatTestCount(unit_test.test_to_run_count()).c_str(), FormatTestSuiteCount(unit_test.test_suite_to_run_count()).c_str()); @@ -3179,7 +3419,7 @@ void PrettyUnitTestResultPrinter::OnTestIterationStart( void PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart( const UnitTest& /*unit_test*/) { - ColoredPrintf(COLOR_GREEN, "[----------] "); + ColoredPrintf(GTestColor::kGreen, "[----------] "); printf("Global test environment set-up.\n"); fflush(stdout); } @@ -3188,7 +3428,7 @@ void PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart( void PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) { const std::string counts = FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); - ColoredPrintf(COLOR_GREEN, "[----------] "); + ColoredPrintf(GTestColor::kGreen, "[----------] "); printf("%s from %s", counts.c_str(), test_case.name()); if (test_case.type_param() == nullptr) { printf("\n"); @@ -3202,7 +3442,7 @@ void PrettyUnitTestResultPrinter::OnTestSuiteStart( const TestSuite& test_suite) { const std::string counts = FormatCountableNoun(test_suite.test_to_run_count(), "test", "tests"); - ColoredPrintf(COLOR_GREEN, "[----------] "); + ColoredPrintf(GTestColor::kGreen, "[----------] "); printf("%s from %s", counts.c_str(), test_suite.name()); if (test_suite.type_param() == nullptr) { printf("\n"); @@ -3214,7 +3454,14 @@ void PrettyUnitTestResultPrinter::OnTestSuiteStart( #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { - ColoredPrintf(COLOR_GREEN, "[ RUN ] "); + ColoredPrintf(GTestColor::kGreen, "[ RUN ] "); + PrintTestName(test_info.test_suite_name(), test_info.name()); + printf("\n"); + fflush(stdout); +} + +void PrettyUnitTestResultPrinter::OnTestDisabled(const TestInfo& test_info) { + ColoredPrintf(GTestColor::kYellow, "[ DISABLED ] "); PrintTestName(test_info.test_suite_name(), test_info.name()); printf("\n"); fflush(stdout); @@ -3224,9 +3471,7 @@ void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) { void PrettyUnitTestResultPrinter::OnTestPartResult( const TestPartResult& result) { switch (result.type()) { - // If the test part succeeded, or was skipped, - // we don't need to do anything. - case TestPartResult::kSkip: + // If the test part succeeded, we don't need to do anything. case TestPartResult::kSuccess: return; default: @@ -3239,19 +3484,19 @@ void PrettyUnitTestResultPrinter::OnTestPartResult( void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) { if (test_info.result()->Passed()) { - ColoredPrintf(COLOR_GREEN, "[ OK ] "); + ColoredPrintf(GTestColor::kGreen, "[ OK ] "); } else if (test_info.result()->Skipped()) { - ColoredPrintf(COLOR_GREEN, "[ SKIPPED ] "); + ColoredPrintf(GTestColor::kGreen, "[ SKIPPED ] "); } else { - ColoredPrintf(COLOR_RED, "[ FAILED ] "); + ColoredPrintf(GTestColor::kRed, "[ FAILED ] "); } PrintTestName(test_info.test_suite_name(), test_info.name()); - if (test_info.result()->Failed()) - PrintFullTestCommentIfPresent(test_info); + if (test_info.result()->Failed()) PrintFullTestCommentIfPresent(test_info); - if (GTEST_FLAG(print_time)) { - printf(" (%s ms)\n", internal::StreamableToString( - test_info.result()->elapsed_time()).c_str()); + if (GTEST_FLAG_GET(print_time)) { + printf(" (%s ms)\n", + internal::StreamableToString(test_info.result()->elapsed_time()) + .c_str()); } else { printf("\n"); } @@ -3260,22 +3505,22 @@ void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) { #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ void PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) { - if (!GTEST_FLAG(print_time)) return; + if (!GTEST_FLAG_GET(print_time)) return; const std::string counts = FormatCountableNoun(test_case.test_to_run_count(), "test", "tests"); - ColoredPrintf(COLOR_GREEN, "[----------] "); + ColoredPrintf(GTestColor::kGreen, "[----------] "); printf("%s from %s (%s ms total)\n\n", counts.c_str(), test_case.name(), internal::StreamableToString(test_case.elapsed_time()).c_str()); fflush(stdout); } #else void PrettyUnitTestResultPrinter::OnTestSuiteEnd(const TestSuite& test_suite) { - if (!GTEST_FLAG(print_time)) return; + if (!GTEST_FLAG_GET(print_time)) return; const std::string counts = FormatCountableNoun(test_suite.test_to_run_count(), "test", "tests"); - ColoredPrintf(COLOR_GREEN, "[----------] "); + ColoredPrintf(GTestColor::kGreen, "[----------] "); printf("%s from %s (%s ms total)\n\n", counts.c_str(), test_suite.name(), internal::StreamableToString(test_suite.elapsed_time()).c_str()); fflush(stdout); @@ -3284,7 +3529,7 @@ void PrettyUnitTestResultPrinter::OnTestSuiteEnd(const TestSuite& test_suite) { void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart( const UnitTest& /*unit_test*/) { - ColoredPrintf(COLOR_GREEN, "[----------] "); + ColoredPrintf(GTestColor::kGreen, "[----------] "); printf("Global test environment tear-down\n"); fflush(stdout); } @@ -3292,9 +3537,8 @@ void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart( // Internal helper for printing the list of failed tests. void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) { const int failed_test_count = unit_test.failed_test_count(); - if (failed_test_count == 0) { - return; - } + ColoredPrintf(GTestColor::kRed, "[ FAILED ] "); + printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str()); for (int i = 0; i < unit_test.total_test_suite_count(); ++i) { const TestSuite& test_suite = *unit_test.GetTestSuite(i); @@ -3306,12 +3550,36 @@ void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) { if (!test_info.should_run() || !test_info.result()->Failed()) { continue; } - ColoredPrintf(COLOR_RED, "[ FAILED ] "); + ColoredPrintf(GTestColor::kRed, "[ FAILED ] "); printf("%s.%s", test_suite.name(), test_info.name()); PrintFullTestCommentIfPresent(test_info); printf("\n"); } } + printf("\n%2d FAILED %s\n", failed_test_count, + failed_test_count == 1 ? "TEST" : "TESTS"); +} + +// Internal helper for printing the list of test suite failures not covered by +// PrintFailedTests. +void PrettyUnitTestResultPrinter::PrintFailedTestSuites( + const UnitTest& unit_test) { + int suite_failure_count = 0; + for (int i = 0; i < unit_test.total_test_suite_count(); ++i) { + const TestSuite& test_suite = *unit_test.GetTestSuite(i); + if (!test_suite.should_run()) { + continue; + } + if (test_suite.ad_hoc_test_result().Failed()) { + ColoredPrintf(GTestColor::kRed, "[ FAILED ] "); + printf("%s: SetUpTestSuite or TearDownTestSuite\n", test_suite.name()); + ++suite_failure_count; + } + } + if (suite_failure_count > 0) { + printf("\n%2d FAILED TEST %s\n", suite_failure_count, + suite_failure_count == 1 ? "SUITE" : "SUITES"); + } } // Internal helper for printing the list of skipped tests. @@ -3331,7 +3599,7 @@ void PrettyUnitTestResultPrinter::PrintSkippedTests(const UnitTest& unit_test) { if (!test_info.should_run() || !test_info.result()->Skipped()) { continue; } - ColoredPrintf(COLOR_GREEN, "[ SKIPPED ] "); + ColoredPrintf(GTestColor::kGreen, "[ SKIPPED ] "); printf("%s.%s", test_suite.name(), test_info.name()); printf("\n"); } @@ -3340,44 +3608,37 @@ void PrettyUnitTestResultPrinter::PrintSkippedTests(const UnitTest& unit_test) { void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, int /*iteration*/) { - ColoredPrintf(COLOR_GREEN, "[==========] "); + ColoredPrintf(GTestColor::kGreen, "[==========] "); printf("%s from %s ran.", FormatTestCount(unit_test.test_to_run_count()).c_str(), FormatTestSuiteCount(unit_test.test_suite_to_run_count()).c_str()); - if (GTEST_FLAG(print_time)) { + if (GTEST_FLAG_GET(print_time)) { printf(" (%s ms total)", internal::StreamableToString(unit_test.elapsed_time()).c_str()); } printf("\n"); - ColoredPrintf(COLOR_GREEN, "[ PASSED ] "); + ColoredPrintf(GTestColor::kGreen, "[ PASSED ] "); printf("%s.\n", FormatTestCount(unit_test.successful_test_count()).c_str()); const int skipped_test_count = unit_test.skipped_test_count(); if (skipped_test_count > 0) { - ColoredPrintf(COLOR_GREEN, "[ SKIPPED ] "); + ColoredPrintf(GTestColor::kGreen, "[ SKIPPED ] "); printf("%s, listed below:\n", FormatTestCount(skipped_test_count).c_str()); PrintSkippedTests(unit_test); } - int num_failures = unit_test.failed_test_count(); if (!unit_test.Passed()) { - const int failed_test_count = unit_test.failed_test_count(); - ColoredPrintf(COLOR_RED, "[ FAILED ] "); - printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str()); PrintFailedTests(unit_test); - printf("\n%2d FAILED %s\n", num_failures, - num_failures == 1 ? "TEST" : "TESTS"); + PrintFailedTestSuites(unit_test); } int num_disabled = unit_test.reportable_disabled_test_count(); - if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) { - if (!num_failures) { + if (num_disabled && !GTEST_FLAG_GET(also_run_disabled_tests)) { + if (unit_test.Passed()) { printf("\n"); // Add a spacer if no FAILURE banner is displayed. } - ColoredPrintf(COLOR_YELLOW, - " YOU HAVE %d DISABLED %s\n\n", - num_disabled, - num_disabled == 1 ? "TEST" : "TESTS"); + ColoredPrintf(GTestColor::kYellow, " YOU HAVE %d DISABLED %s\n\n", + num_disabled, num_disabled == 1 ? "TEST" : "TESTS"); } // Ensure that Google Test output is printed before, e.g., heapchecker output. fflush(stdout); @@ -3385,6 +3646,111 @@ void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, // End PrettyUnitTestResultPrinter +// This class implements the TestEventListener interface. +// +// Class BriefUnitTestResultPrinter is copyable. +class BriefUnitTestResultPrinter : public TestEventListener { + public: + BriefUnitTestResultPrinter() {} + static void PrintTestName(const char* test_suite, const char* test) { + printf("%s.%s", test_suite, test); + } + + // The following methods override what's in the TestEventListener class. + void OnTestProgramStart(const UnitTest& /*unit_test*/) override {} + void OnTestIterationStart(const UnitTest& /*unit_test*/, + int /*iteration*/) override {} + void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) override {} + void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) override {} +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + void OnTestCaseStart(const TestCase& /*test_case*/) override {} +#else + void OnTestSuiteStart(const TestSuite& /*test_suite*/) override {} +#endif // OnTestCaseStart + + void OnTestStart(const TestInfo& /*test_info*/) override {} + void OnTestDisabled(const TestInfo& /*test_info*/) override {} + + void OnTestPartResult(const TestPartResult& result) override; + void OnTestEnd(const TestInfo& test_info) override; +#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + void OnTestCaseEnd(const TestCase& /*test_case*/) override {} +#else + void OnTestSuiteEnd(const TestSuite& /*test_suite*/) override {} +#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ + + void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) override {} + void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) override {} + void OnTestIterationEnd(const UnitTest& unit_test, int iteration) override; + void OnTestProgramEnd(const UnitTest& /*unit_test*/) override {} +}; + +// Called after an assertion failure. +void BriefUnitTestResultPrinter::OnTestPartResult( + const TestPartResult& result) { + switch (result.type()) { + // If the test part succeeded, we don't need to do anything. + case TestPartResult::kSuccess: + return; + default: + // Print failure message from the assertion + // (e.g. expected this and got that). + PrintTestPartResult(result); + fflush(stdout); + } +} + +void BriefUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) { + if (test_info.result()->Failed()) { + ColoredPrintf(GTestColor::kRed, "[ FAILED ] "); + PrintTestName(test_info.test_suite_name(), test_info.name()); + PrintFullTestCommentIfPresent(test_info); + + if (GTEST_FLAG_GET(print_time)) { + printf(" (%s ms)\n", + internal::StreamableToString(test_info.result()->elapsed_time()) + .c_str()); + } else { + printf("\n"); + } + fflush(stdout); + } +} + +void BriefUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, + int /*iteration*/) { + ColoredPrintf(GTestColor::kGreen, "[==========] "); + printf("%s from %s ran.", + FormatTestCount(unit_test.test_to_run_count()).c_str(), + FormatTestSuiteCount(unit_test.test_suite_to_run_count()).c_str()); + if (GTEST_FLAG_GET(print_time)) { + printf(" (%s ms total)", + internal::StreamableToString(unit_test.elapsed_time()).c_str()); + } + printf("\n"); + ColoredPrintf(GTestColor::kGreen, "[ PASSED ] "); + printf("%s.\n", FormatTestCount(unit_test.successful_test_count()).c_str()); + + const int skipped_test_count = unit_test.skipped_test_count(); + if (skipped_test_count > 0) { + ColoredPrintf(GTestColor::kGreen, "[ SKIPPED ] "); + printf("%s.\n", FormatTestCount(skipped_test_count).c_str()); + } + + int num_disabled = unit_test.reportable_disabled_test_count(); + if (num_disabled && !GTEST_FLAG_GET(also_run_disabled_tests)) { + if (unit_test.Passed()) { + printf("\n"); // Add a spacer if no FAILURE banner is displayed. + } + ColoredPrintf(GTestColor::kYellow, " YOU HAVE %d DISABLED %s\n\n", + num_disabled, num_disabled == 1 ? "TEST" : "TESTS"); + } + // Ensure that Google Test output is printed before, e.g., heapchecker output. + fflush(stdout); +} + +// End BriefUnitTestResultPrinter + // class TestEventRepeater // // This class forwards events to other event listeners. @@ -3392,7 +3758,7 @@ class TestEventRepeater : public TestEventListener { public: TestEventRepeater() : forwarding_enabled_(true) {} ~TestEventRepeater() override; - void Append(TestEventListener *listener); + void Append(TestEventListener* listener); TestEventListener* Release(TestEventListener* listener); // Controls whether events will be forwarded to listeners_. Set to false @@ -3410,6 +3776,7 @@ class TestEventRepeater : public TestEventListener { #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ void OnTestSuiteStart(const TestSuite& parameter) override; void OnTestStart(const TestInfo& test_info) override; + void OnTestDisabled(const TestInfo& test_info) override; void OnTestPartResult(const TestPartResult& result) override; void OnTestEnd(const TestInfo& test_info) override; // Legacy API is deprecated but still available @@ -3429,18 +3796,19 @@ class TestEventRepeater : public TestEventListener { // The list of listeners that receive events. std::vector<TestEventListener*> listeners_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventRepeater); + TestEventRepeater(const TestEventRepeater&) = delete; + TestEventRepeater& operator=(const TestEventRepeater&) = delete; }; TestEventRepeater::~TestEventRepeater() { ForEach(listeners_, Delete<TestEventListener>); } -void TestEventRepeater::Append(TestEventListener *listener) { +void TestEventRepeater::Append(TestEventListener* listener) { listeners_.push_back(listener); } -TestEventListener* TestEventRepeater::Release(TestEventListener *listener) { +TestEventListener* TestEventRepeater::Release(TestEventListener* listener) { for (size_t i = 0; i < listeners_.size(); ++i) { if (listeners_[i] == listener) { listeners_.erase(listeners_.begin() + static_cast<int>(i)); @@ -3453,14 +3821,14 @@ TestEventListener* TestEventRepeater::Release(TestEventListener *listener) { // Since most methods are very similar, use macros to reduce boilerplate. // This defines a member that forwards the call to all listeners. -#define GTEST_REPEATER_METHOD_(Name, Type) \ -void TestEventRepeater::Name(const Type& parameter) { \ - if (forwarding_enabled_) { \ - for (size_t i = 0; i < listeners_.size(); i++) { \ - listeners_[i]->Name(parameter); \ - } \ - } \ -} +#define GTEST_REPEATER_METHOD_(Name, Type) \ + void TestEventRepeater::Name(const Type& parameter) { \ + if (forwarding_enabled_) { \ + for (size_t i = 0; i < listeners_.size(); i++) { \ + listeners_[i]->Name(parameter); \ + } \ + } \ + } // This defines a member that forwards the call to all listeners in reverse // order. #define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \ @@ -3480,6 +3848,7 @@ GTEST_REPEATER_METHOD_(OnTestCaseStart, TestSuite) #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ GTEST_REPEATER_METHOD_(OnTestSuiteStart, TestSuite) GTEST_REPEATER_METHOD_(OnTestStart, TestInfo) +GTEST_REPEATER_METHOD_(OnTestDisabled, TestInfo) GTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult) GTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest) GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest) @@ -3530,12 +3899,13 @@ class XmlUnitTestResultPrinter : public EmptyTestEventListener { private: // Is c a whitespace character that is normalized to a space character // when it appears in an XML attribute value? - static bool IsNormalizableWhitespace(char c) { - return c == 0x9 || c == 0xA || c == 0xD; + static bool IsNormalizableWhitespace(unsigned char c) { + return c == '\t' || c == '\n' || c == '\r'; } // May c appear in a well-formed XML document? - static bool IsValidXmlCharacter(char c) { + // https://www.w3.org/TR/REC-xml/#charsets + static bool IsValidXmlCharacter(unsigned char c) { return IsNormalizableWhitespace(c) || c >= 0x20; } @@ -3568,6 +3938,16 @@ class XmlUnitTestResultPrinter : public EmptyTestEventListener { // Streams an XML CDATA section, escaping invalid CDATA sequences as needed. static void OutputXmlCDataSection(::std::ostream* stream, const char* data); + // Streams a test suite XML stanza containing the given test result. + // + // Requires: result.Failed() + static void OutputXmlTestSuiteForTestResult(::std::ostream* stream, + const TestResult& result); + + // Streams an XML representation of a TestResult object. + static void OutputXmlTestResult(::std::ostream* stream, + const TestResult& result); + // Streams an XML representation of a TestInfo object. static void OutputXmlTestInfo(::std::ostream* stream, const char* test_suite_name, @@ -3595,7 +3975,8 @@ class XmlUnitTestResultPrinter : public EmptyTestEventListener { // The output file. const std::string output_file_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(XmlUnitTestResultPrinter); + XmlUnitTestResultPrinter(const XmlUnitTestResultPrinter&) = delete; + XmlUnitTestResultPrinter& operator=(const XmlUnitTestResultPrinter&) = delete; }; // Creates a new XmlUnitTestResultPrinter. @@ -3635,8 +4016,8 @@ void XmlUnitTestResultPrinter::ListTestsMatchingFilter( // module will consist of ordinary English text. // If this module is ever modified to produce version 1.1 XML output, // most invalid characters can be retained using character references. -std::string XmlUnitTestResultPrinter::EscapeXml( - const std::string& str, bool is_attribute) { +std::string XmlUnitTestResultPrinter::EscapeXml(const std::string& str, + bool is_attribute) { Message m; for (size_t i = 0; i < str.size(); ++i) { @@ -3664,8 +4045,9 @@ std::string XmlUnitTestResultPrinter::EscapeXml( m << '"'; break; default: - if (IsValidXmlCharacter(ch)) { - if (is_attribute && IsNormalizableWhitespace(ch)) + if (IsValidXmlCharacter(static_cast<unsigned char>(ch))) { + if (is_attribute && + IsNormalizableWhitespace(static_cast<unsigned char>(ch))) m << "&#x" << String::FormatByte(static_cast<unsigned char>(ch)) << ";"; else @@ -3686,7 +4068,7 @@ std::string XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters( std::string output; output.reserve(str.size()); for (std::string::const_iterator it = str.begin(); it != str.end(); ++it) - if (IsValidXmlCharacter(*it)) + if (IsValidXmlCharacter(static_cast<unsigned char>(*it))) output.push_back(*it); return output; @@ -3694,7 +4076,6 @@ std::string XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters( // The following routines generate an XML representation of a UnitTest // object. -// GOOGLETEST_CM0009 DO NOT DELETE // // This is how Google Test concepts map to the DTD: // @@ -3726,6 +4107,10 @@ static bool PortableLocaltime(time_t seconds, struct tm* out) { if (tm_ptr == nullptr) return false; *out = *tm_ptr; return true; +#elif defined(__STDC_LIB_EXT1__) + // Uses localtime_s when available as localtime_r is only available from + // C23 standard. + return localtime_s(&seconds, out) != nullptr; #else return localtime_r(&seconds, out) != nullptr; #endif @@ -3737,13 +4122,14 @@ std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms) { struct tm time_struct; if (!PortableLocaltime(static_cast<time_t>(ms / 1000), &time_struct)) return ""; - // YYYY-MM-DDThh:mm:ss + // YYYY-MM-DDThh:mm:ss.sss return StreamableToString(time_struct.tm_year + 1900) + "-" + - String::FormatIntWidth2(time_struct.tm_mon + 1) + "-" + - String::FormatIntWidth2(time_struct.tm_mday) + "T" + - String::FormatIntWidth2(time_struct.tm_hour) + ":" + - String::FormatIntWidth2(time_struct.tm_min) + ":" + - String::FormatIntWidth2(time_struct.tm_sec); + String::FormatIntWidth2(time_struct.tm_mon + 1) + "-" + + String::FormatIntWidth2(time_struct.tm_mday) + "T" + + String::FormatIntWidth2(time_struct.tm_hour) + ":" + + String::FormatIntWidth2(time_struct.tm_min) + ":" + + String::FormatIntWidth2(time_struct.tm_sec) + "." + + String::FormatIntWidthN(static_cast<int>(ms % 1000), 3); } // Streams an XML CDATA section, escaping invalid CDATA sequences as needed. @@ -3754,8 +4140,8 @@ void XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream, for (;;) { const char* const next_segment = strstr(segment, "]]>"); if (next_segment != nullptr) { - stream->write( - segment, static_cast<std::streamsize>(next_segment - segment)); + stream->write(segment, + static_cast<std::streamsize>(next_segment - segment)); *stream << "]]>]]><![CDATA["; segment = next_segment + strlen("]]>"); } else { @@ -3767,21 +4153,56 @@ void XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream, } void XmlUnitTestResultPrinter::OutputXmlAttribute( - std::ostream* stream, - const std::string& element_name, - const std::string& name, - const std::string& value) { + std::ostream* stream, const std::string& element_name, + const std::string& name, const std::string& value) { const std::vector<std::string>& allowed_names = GetReservedOutputAttributesForElement(element_name); GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) != - allowed_names.end()) + allowed_names.end()) << "Attribute " << name << " is not allowed for element <" << element_name << ">."; *stream << " " << name << "=\"" << EscapeXmlAttribute(value) << "\""; } +// Streams a test suite XML stanza containing the given test result. +void XmlUnitTestResultPrinter::OutputXmlTestSuiteForTestResult( + ::std::ostream* stream, const TestResult& result) { + // Output the boilerplate for a minimal test suite with one test. + *stream << " <testsuite"; + OutputXmlAttribute(stream, "testsuite", "name", "NonTestSuiteFailure"); + OutputXmlAttribute(stream, "testsuite", "tests", "1"); + OutputXmlAttribute(stream, "testsuite", "failures", "1"); + OutputXmlAttribute(stream, "testsuite", "disabled", "0"); + OutputXmlAttribute(stream, "testsuite", "skipped", "0"); + OutputXmlAttribute(stream, "testsuite", "errors", "0"); + OutputXmlAttribute(stream, "testsuite", "time", + FormatTimeInMillisAsSeconds(result.elapsed_time())); + OutputXmlAttribute( + stream, "testsuite", "timestamp", + FormatEpochTimeInMillisAsIso8601(result.start_timestamp())); + *stream << ">"; + + // Output the boilerplate for a minimal test case with a single test. + *stream << " <testcase"; + OutputXmlAttribute(stream, "testcase", "name", ""); + OutputXmlAttribute(stream, "testcase", "status", "run"); + OutputXmlAttribute(stream, "testcase", "result", "completed"); + OutputXmlAttribute(stream, "testcase", "classname", ""); + OutputXmlAttribute(stream, "testcase", "time", + FormatTimeInMillisAsSeconds(result.elapsed_time())); + OutputXmlAttribute( + stream, "testcase", "timestamp", + FormatEpochTimeInMillisAsIso8601(result.start_timestamp())); + + // Output the actual test result. + OutputXmlTestResult(stream, result); + + // Complete the test suite. + *stream << " </testsuite>\n"; +} + // Prints an XML representation of a TestInfo object. void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, const char* test_suite_name, @@ -3804,10 +4225,11 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, OutputXmlAttribute(stream, kTestsuite, "type_param", test_info.type_param()); } - if (GTEST_FLAG(list_tests)) { - OutputXmlAttribute(stream, kTestsuite, "file", test_info.file()); - OutputXmlAttribute(stream, kTestsuite, "line", - StreamableToString(test_info.line())); + + OutputXmlAttribute(stream, kTestsuite, "file", test_info.file()); + OutputXmlAttribute(stream, kTestsuite, "line", + StreamableToString(test_info.line())); + if (GTEST_FLAG_GET(list_tests)) { *stream << " />\n"; return; } @@ -3825,30 +4247,48 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream, FormatEpochTimeInMillisAsIso8601(result.start_timestamp())); OutputXmlAttribute(stream, kTestsuite, "classname", test_suite_name); + OutputXmlTestResult(stream, result); +} + +void XmlUnitTestResultPrinter::OutputXmlTestResult(::std::ostream* stream, + const TestResult& result) { int failures = 0; + int skips = 0; for (int i = 0; i < result.total_part_count(); ++i) { const TestPartResult& part = result.GetTestPartResult(i); if (part.failed()) { - if (++failures == 1) { + if (++failures == 1 && skips == 0) { *stream << ">\n"; } const std::string location = internal::FormatCompilerIndependentFileLocation(part.file_name(), part.line_number()); const std::string summary = location + "\n" + part.summary(); - *stream << " <failure message=\"" - << EscapeXmlAttribute(summary.c_str()) + *stream << " <failure message=\"" << EscapeXmlAttribute(summary) << "\" type=\"\">"; const std::string detail = location + "\n" + part.message(); OutputXmlCDataSection(stream, RemoveInvalidXmlCharacters(detail).c_str()); *stream << "</failure>\n"; + } else if (part.skipped()) { + if (++skips == 1 && failures == 0) { + *stream << ">\n"; + } + const std::string location = + internal::FormatCompilerIndependentFileLocation(part.file_name(), + part.line_number()); + const std::string summary = location + "\n" + part.summary(); + *stream << " <skipped message=\"" + << EscapeXmlAttribute(summary.c_str()) << "\">"; + const std::string detail = location + "\n" + part.message(); + OutputXmlCDataSection(stream, RemoveInvalidXmlCharacters(detail).c_str()); + *stream << "</skipped>\n"; } } - if (failures == 0 && result.test_property_count() == 0) { + if (failures == 0 && skips == 0 && result.test_property_count() == 0) { *stream << " />\n"; } else { - if (failures == 0) { + if (failures == 0 && skips == 0) { *stream << ">\n"; } OutputXmlTestProperties(stream, result); @@ -3864,13 +4304,17 @@ void XmlUnitTestResultPrinter::PrintXmlTestSuite(std::ostream* stream, OutputXmlAttribute(stream, kTestsuite, "name", test_suite.name()); OutputXmlAttribute(stream, kTestsuite, "tests", StreamableToString(test_suite.reportable_test_count())); - if (!GTEST_FLAG(list_tests)) { + if (!GTEST_FLAG_GET(list_tests)) { OutputXmlAttribute(stream, kTestsuite, "failures", StreamableToString(test_suite.failed_test_count())); OutputXmlAttribute( stream, kTestsuite, "disabled", StreamableToString(test_suite.reportable_disabled_test_count())); + OutputXmlAttribute(stream, kTestsuite, "skipped", + StreamableToString(test_suite.skipped_test_count())); + OutputXmlAttribute(stream, kTestsuite, "errors", "0"); + OutputXmlAttribute(stream, kTestsuite, "time", FormatTimeInMillisAsSeconds(test_suite.elapsed_time())); OutputXmlAttribute( @@ -3908,7 +4352,7 @@ void XmlUnitTestResultPrinter::PrintXmlUnitTest(std::ostream* stream, stream, kTestsuites, "timestamp", FormatEpochTimeInMillisAsIso8601(unit_test.start_timestamp())); - if (GTEST_FLAG(shuffle)) { + if (GTEST_FLAG_GET(shuffle)) { OutputXmlAttribute(stream, kTestsuites, "random_seed", StreamableToString(unit_test.random_seed())); } @@ -3921,6 +4365,13 @@ void XmlUnitTestResultPrinter::PrintXmlUnitTest(std::ostream* stream, if (unit_test.GetTestSuite(i)->reportable_test_count() > 0) PrintXmlTestSuite(stream, *unit_test.GetTestSuite(i)); } + + // If there was a test failure outside of one of the test suites (like in a + // test environment) include that in the output. + if (unit_test.ad_hoc_test_result().Failed()) { + OutputXmlTestSuiteForTestResult(stream, unit_test.ad_hoc_test_result()); + } + *stream << "</" << kTestsuites << ">\n"; } @@ -3954,7 +4405,7 @@ std::string XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes( for (int i = 0; i < result.test_property_count(); ++i) { const TestProperty& property = result.GetTestProperty(i); attributes << " " << property.key() << "=" - << "\"" << EscapeXmlAttribute(property.value()) << "\""; + << "\"" << EscapeXmlAttribute(property.value()) << "\""; } return attributes.GetString(); } @@ -3968,15 +4419,15 @@ void XmlUnitTestResultPrinter::OutputXmlTestProperties( return; } - *stream << "<" << kProperties << ">\n"; + *stream << " <" << kProperties << ">\n"; for (int i = 0; i < result.test_property_count(); ++i) { const TestProperty& property = result.GetTestProperty(i); - *stream << "<" << kProperty; + *stream << " <" << kProperty; *stream << " name=\"" << EscapeXmlAttribute(property.key()) << "\""; *stream << " value=\"" << EscapeXmlAttribute(property.value()) << "\""; *stream << "/>\n"; } - *stream << "</" << kProperties << ">\n"; + *stream << " </" << kProperties << ">\n"; } // End XmlUnitTestResultPrinter @@ -4000,16 +4451,22 @@ class JsonUnitTestResultPrinter : public EmptyTestEventListener { //// streams the attribute as JSON. static void OutputJsonKey(std::ostream* stream, const std::string& element_name, - const std::string& name, - const std::string& value, - const std::string& indent, - bool comma = true); + const std::string& name, const std::string& value, + const std::string& indent, bool comma = true); static void OutputJsonKey(std::ostream* stream, const std::string& element_name, - const std::string& name, - int value, - const std::string& indent, - bool comma = true); + const std::string& name, int value, + const std::string& indent, bool comma = true); + + // Streams a test suite JSON stanza containing the given test result. + // + // Requires: result.Failed() + static void OutputJsonTestSuiteForTestResult(::std::ostream* stream, + const TestResult& result); + + // Streams a JSON representation of a TestResult object. + static void OutputJsonTestResult(::std::ostream* stream, + const TestResult& result); // Streams a JSON representation of a TestInfo object. static void OutputJsonTestInfo(::std::ostream* stream, @@ -4032,7 +4489,9 @@ class JsonUnitTestResultPrinter : public EmptyTestEventListener { // The output file. const std::string output_file_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(JsonUnitTestResultPrinter); + JsonUnitTestResultPrinter(const JsonUnitTestResultPrinter&) = delete; + JsonUnitTestResultPrinter& operator=(const JsonUnitTestResultPrinter&) = + delete; }; // Creates a new JsonUnitTestResultPrinter. @@ -4044,7 +4503,7 @@ JsonUnitTestResultPrinter::JsonUnitTestResultPrinter(const char* output_file) } void JsonUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test, - int /*iteration*/) { + int /*iteration*/) { FILE* jsonout = OpenFileForWriting(output_file_); std::stringstream stream; PrintJsonUnitTest(&stream, unit_test); @@ -4110,55 +4569,90 @@ static std::string FormatEpochTimeInMillisAsRFC3339(TimeInMillis ms) { return ""; // YYYY-MM-DDThh:mm:ss return StreamableToString(time_struct.tm_year + 1900) + "-" + - String::FormatIntWidth2(time_struct.tm_mon + 1) + "-" + - String::FormatIntWidth2(time_struct.tm_mday) + "T" + - String::FormatIntWidth2(time_struct.tm_hour) + ":" + - String::FormatIntWidth2(time_struct.tm_min) + ":" + - String::FormatIntWidth2(time_struct.tm_sec) + "Z"; + String::FormatIntWidth2(time_struct.tm_mon + 1) + "-" + + String::FormatIntWidth2(time_struct.tm_mday) + "T" + + String::FormatIntWidth2(time_struct.tm_hour) + ":" + + String::FormatIntWidth2(time_struct.tm_min) + ":" + + String::FormatIntWidth2(time_struct.tm_sec) + "Z"; } static inline std::string Indent(size_t width) { return std::string(width, ' '); } -void JsonUnitTestResultPrinter::OutputJsonKey( - std::ostream* stream, - const std::string& element_name, - const std::string& name, - const std::string& value, - const std::string& indent, - bool comma) { +void JsonUnitTestResultPrinter::OutputJsonKey(std::ostream* stream, + const std::string& element_name, + const std::string& name, + const std::string& value, + const std::string& indent, + bool comma) { const std::vector<std::string>& allowed_names = GetReservedOutputAttributesForElement(element_name); GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) != - allowed_names.end()) + allowed_names.end()) << "Key \"" << name << "\" is not allowed for value \"" << element_name << "\"."; *stream << indent << "\"" << name << "\": \"" << EscapeJson(value) << "\""; - if (comma) - *stream << ",\n"; + if (comma) *stream << ",\n"; } void JsonUnitTestResultPrinter::OutputJsonKey( - std::ostream* stream, - const std::string& element_name, - const std::string& name, - int value, - const std::string& indent, - bool comma) { + std::ostream* stream, const std::string& element_name, + const std::string& name, int value, const std::string& indent, bool comma) { const std::vector<std::string>& allowed_names = GetReservedOutputAttributesForElement(element_name); GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) != - allowed_names.end()) + allowed_names.end()) << "Key \"" << name << "\" is not allowed for value \"" << element_name << "\"."; *stream << indent << "\"" << name << "\": " << StreamableToString(value); - if (comma) - *stream << ",\n"; + if (comma) *stream << ",\n"; +} + +// Streams a test suite JSON stanza containing the given test result. +void JsonUnitTestResultPrinter::OutputJsonTestSuiteForTestResult( + ::std::ostream* stream, const TestResult& result) { + // Output the boilerplate for a new test suite. + *stream << Indent(4) << "{\n"; + OutputJsonKey(stream, "testsuite", "name", "NonTestSuiteFailure", Indent(6)); + OutputJsonKey(stream, "testsuite", "tests", 1, Indent(6)); + if (!GTEST_FLAG_GET(list_tests)) { + OutputJsonKey(stream, "testsuite", "failures", 1, Indent(6)); + OutputJsonKey(stream, "testsuite", "disabled", 0, Indent(6)); + OutputJsonKey(stream, "testsuite", "skipped", 0, Indent(6)); + OutputJsonKey(stream, "testsuite", "errors", 0, Indent(6)); + OutputJsonKey(stream, "testsuite", "time", + FormatTimeInMillisAsDuration(result.elapsed_time()), + Indent(6)); + OutputJsonKey(stream, "testsuite", "timestamp", + FormatEpochTimeInMillisAsRFC3339(result.start_timestamp()), + Indent(6)); + } + *stream << Indent(6) << "\"testsuite\": [\n"; + + // Output the boilerplate for a new test case. + *stream << Indent(8) << "{\n"; + OutputJsonKey(stream, "testcase", "name", "", Indent(10)); + OutputJsonKey(stream, "testcase", "status", "RUN", Indent(10)); + OutputJsonKey(stream, "testcase", "result", "COMPLETED", Indent(10)); + OutputJsonKey(stream, "testcase", "timestamp", + FormatEpochTimeInMillisAsRFC3339(result.start_timestamp()), + Indent(10)); + OutputJsonKey(stream, "testcase", "time", + FormatTimeInMillisAsDuration(result.elapsed_time()), + Indent(10)); + OutputJsonKey(stream, "testcase", "classname", "", Indent(10), false); + *stream << TestPropertiesAsJson(result, Indent(10)); + + // Output the actual test result. + OutputJsonTestResult(stream, result); + + // Finish the test suite. + *stream << "\n" << Indent(6) << "]\n" << Indent(4) << "}"; } // Prints a JSON representation of a TestInfo object. @@ -4180,11 +4674,14 @@ void JsonUnitTestResultPrinter::OutputJsonTestInfo(::std::ostream* stream, OutputJsonKey(stream, kTestsuite, "type_param", test_info.type_param(), kIndent); } - if (GTEST_FLAG(list_tests)) { - OutputJsonKey(stream, kTestsuite, "file", test_info.file(), kIndent); - OutputJsonKey(stream, kTestsuite, "line", test_info.line(), kIndent, false); + + OutputJsonKey(stream, kTestsuite, "file", test_info.file(), kIndent); + OutputJsonKey(stream, kTestsuite, "line", test_info.line(), kIndent, false); + if (GTEST_FLAG_GET(list_tests)) { *stream << "\n" << Indent(8) << "}"; return; + } else { + *stream << ",\n"; } OutputJsonKey(stream, kTestsuite, "status", @@ -4203,13 +4700,22 @@ void JsonUnitTestResultPrinter::OutputJsonTestInfo(::std::ostream* stream, false); *stream << TestPropertiesAsJson(result, kIndent); + OutputJsonTestResult(stream, result); +} + +void JsonUnitTestResultPrinter::OutputJsonTestResult(::std::ostream* stream, + const TestResult& result) { + const std::string kIndent = Indent(10); + int failures = 0; for (int i = 0; i < result.total_part_count(); ++i) { const TestPartResult& part = result.GetTestPartResult(i); if (part.failed()) { *stream << ",\n"; if (++failures == 1) { - *stream << kIndent << "\"" << "failures" << "\": [\n"; + *stream << kIndent << "\"" + << "failures" + << "\": [\n"; } const std::string location = internal::FormatCompilerIndependentFileLocation(part.file_name(), @@ -4222,8 +4728,7 @@ void JsonUnitTestResultPrinter::OutputJsonTestInfo(::std::ostream* stream, } } - if (failures > 0) - *stream << "\n" << kIndent << "]"; + if (failures > 0) *stream << "\n" << kIndent << "]"; *stream << "\n" << Indent(8) << "}"; } @@ -4237,7 +4742,7 @@ void JsonUnitTestResultPrinter::PrintJsonTestSuite( OutputJsonKey(stream, kTestsuite, "name", test_suite.name(), kIndent); OutputJsonKey(stream, kTestsuite, "tests", test_suite.reportable_test_count(), kIndent); - if (!GTEST_FLAG(list_tests)) { + if (!GTEST_FLAG_GET(list_tests)) { OutputJsonKey(stream, kTestsuite, "failures", test_suite.failed_test_count(), kIndent); OutputJsonKey(stream, kTestsuite, "disabled", @@ -4284,7 +4789,7 @@ void JsonUnitTestResultPrinter::PrintJsonUnitTest(std::ostream* stream, OutputJsonKey(stream, kTestsuites, "disabled", unit_test.reportable_disabled_test_count(), kIndent); OutputJsonKey(stream, kTestsuites, "errors", 0, kIndent); - if (GTEST_FLAG(shuffle)) { + if (GTEST_FLAG_GET(shuffle)) { OutputJsonKey(stream, kTestsuites, "random_seed", unit_test.random_seed(), kIndent); } @@ -4313,7 +4818,15 @@ void JsonUnitTestResultPrinter::PrintJsonUnitTest(std::ostream* stream, } } - *stream << "\n" << kIndent << "]\n" << "}\n"; + // If there was a test failure outside of one of the test suites (like in a + // test environment) include that in the output. + if (unit_test.ad_hoc_test_result().Failed()) { + OutputJsonTestSuiteForTestResult(stream, unit_test.ad_hoc_test_result()); + } + + *stream << "\n" + << kIndent << "]\n" + << "}\n"; } void JsonUnitTestResultPrinter::PrintJsonTestList( @@ -4348,7 +4861,8 @@ std::string JsonUnitTestResultPrinter::TestPropertiesAsJson( Message attributes; for (int i = 0; i < result.test_property_count(); ++i) { const TestProperty& property = result.GetTestProperty(i); - attributes << ",\n" << indent << "\"" << property.key() << "\": " + attributes << ",\n" + << indent << "\"" << property.key() << "\": " << "\"" << EscapeJson(property.value()) << "\""; } return attributes.GetString(); @@ -4388,14 +4902,14 @@ void StreamingListener::SocketWriter::MakeConnection() { addrinfo hints; memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_UNSPEC; // To allow both IPv4 and IPv6 addresses. + hints.ai_family = AF_UNSPEC; // To allow both IPv4 and IPv6 addresses. hints.ai_socktype = SOCK_STREAM; addrinfo* servinfo = nullptr; // Use the getaddrinfo() to get a linked list of IP addresses for // the given host name. - const int error_num = getaddrinfo( - host_name_.c_str(), port_num_.c_str(), &hints, &servinfo); + const int error_num = + getaddrinfo(host_name_.c_str(), port_num_.c_str(), &hints, &servinfo); if (error_num != 0) { GTEST_LOG_(WARNING) << "stream_result_to: getaddrinfo() failed: " << gai_strerror(error_num); @@ -4404,8 +4918,8 @@ void StreamingListener::SocketWriter::MakeConnection() { // Loop through all the results and connect to the first we can. for (addrinfo* cur_addr = servinfo; sockfd_ == -1 && cur_addr != nullptr; cur_addr = cur_addr->ai_next) { - sockfd_ = socket( - cur_addr->ai_family, cur_addr->ai_socktype, cur_addr->ai_protocol); + sockfd_ = socket(cur_addr->ai_family, cur_addr->ai_socktype, + cur_addr->ai_protocol); if (sockfd_ != -1) { // Connect the client socket to the server socket. if (connect(sockfd_, cur_addr->ai_addr, cur_addr->ai_addrlen) == -1) { @@ -4455,7 +4969,7 @@ std::string OsStackTraceGetter::CurrentStackTrace(int max_depth, int skip_count) for (int i = 0; i < raw_stack_size; ++i) { if (raw_stack[i] == caller_frame && - !GTEST_FLAG(show_internal_stack_frames)) { + !GTEST_FLAG_GET(show_internal_stack_frames)) { // Add a marker to the trace and stop adding frames. absl::StrAppend(&result, kElidedFramesMarker, "\n"); break; @@ -4474,7 +4988,7 @@ std::string OsStackTraceGetter::CurrentStackTrace(int max_depth, int skip_count) return result; -#else // !GTEST_HAS_ABSL +#else // !GTEST_HAS_ABSL static_cast<void>(max_depth); static_cast<void>(skip_count); return ""; @@ -4498,20 +5012,21 @@ void OsStackTraceGetter::UponLeavingGTest() GTEST_LOCK_EXCLUDED_(mutex_) { class ScopedPrematureExitFile { public: explicit ScopedPrematureExitFile(const char* premature_exit_filepath) - : premature_exit_filepath_(premature_exit_filepath ? - premature_exit_filepath : "") { + : premature_exit_filepath_( + premature_exit_filepath ? premature_exit_filepath : "") { // If a path to the premature-exit file is specified... if (!premature_exit_filepath_.empty()) { // create the file with a single "0" character in it. I/O // errors are ignored as there's nothing better we can do and we // don't want to fail the test because of this. - FILE* pfile = posix::FOpen(premature_exit_filepath, "w"); + FILE* pfile = posix::FOpen(premature_exit_filepath_.c_str(), "w"); fwrite("0", 1, 1, pfile); fclose(pfile); } } ~ScopedPrematureExitFile() { +#if !defined GTEST_OS_ESP8266 if (!premature_exit_filepath_.empty()) { int retval = remove(premature_exit_filepath_.c_str()); if (retval) { @@ -4520,12 +5035,14 @@ class ScopedPrematureExitFile { << retval; } } +#endif } private: const std::string premature_exit_filepath_; - GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedPrematureExitFile); + ScopedPrematureExitFile(const ScopedPrematureExitFile&) = delete; + ScopedPrematureExitFile& operator=(const ScopedPrematureExitFile&) = delete; }; } // namespace internal @@ -4699,7 +5216,7 @@ int UnitTest::test_to_run_count() const { return impl()->test_to_run_count(); } // Gets the time of the test program start, in ms from the start of the // UNIX epoch. internal::TimeInMillis UnitTest::start_timestamp() const { - return impl()->start_timestamp(); + return impl()->start_timestamp(); } // Gets the elapsed time, in milliseconds. @@ -4742,9 +5259,7 @@ TestSuite* UnitTest::GetMutableTestSuite(int i) { // Returns the list of event listeners that can be used to track events // inside Google Test. -TestEventListeners& UnitTest::listeners() { - return *impl()->listeners(); -} +TestEventListeners& UnitTest::listeners() { return *impl()->listeners(); } // Registers and returns a global test environment. When a test // program is run, all global test environments will be set-up in the @@ -4769,12 +5284,11 @@ Environment* UnitTest::AddEnvironment(Environment* env) { // assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) eventually call // this to report their results. The user code should use the // assertion macros instead of calling this directly. -void UnitTest::AddTestPartResult( - TestPartResult::Type result_type, - const char* file_name, - int line_number, - const std::string& message, - const std::string& os_stack_trace) GTEST_LOCK_EXCLUDED_(mutex_) { +void UnitTest::AddTestPartResult(TestPartResult::Type result_type, + const char* file_name, int line_number, + const std::string& message, + const std::string& os_stack_trace) + GTEST_LOCK_EXCLUDED_(mutex_) { Message msg; msg << message; @@ -4784,8 +5298,9 @@ void UnitTest::AddTestPartResult( for (size_t i = impl_->gtest_trace_stack().size(); i > 0; --i) { const internal::TraceInfo& trace = impl_->gtest_trace_stack()[i - 1]; - msg << "\n" << internal::FormatFileLocation(trace.file, trace.line) - << " " << trace.message; + msg << "\n" + << internal::FormatFileLocation(trace.file, trace.line) << " " + << trace.message; } } @@ -4795,8 +5310,8 @@ void UnitTest::AddTestPartResult( const TestPartResult result = TestPartResult( result_type, file_name, line_number, msg.GetString().c_str()); - impl_->GetTestPartResultReporterForCurrentThread()-> - ReportTestPartResult(result); + impl_->GetTestPartResultReporterForCurrentThread()->ReportTestPartResult( + result); if (result_type != TestPartResult::kSuccess && result_type != TestPartResult::kSkip) { @@ -4805,7 +5320,7 @@ void UnitTest::AddTestPartResult( // in the code (perhaps in order to use Google Test assertions // with another testing framework) and specify the former on the // command line for debugging. - if (GTEST_FLAG(break_on_failure)) { + if (GTEST_FLAG_GET(break_on_failure)) { #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT // Using DebugBreak on Windows allows gtest to still break into a debugger // when a failure happens and both the --gtest_break_on_failure and @@ -4822,7 +5337,7 @@ void UnitTest::AddTestPartResult( // portability: some debuggers don't correctly trap abort(). *static_cast<volatile int*>(nullptr) = 1; #endif // GTEST_OS_WINDOWS - } else if (GTEST_FLAG(throw_on_failure)) { + } else if (GTEST_FLAG_GET(throw_on_failure)) { #if GTEST_HAS_EXCEPTIONS throw internal::GoogleTestFailureException(result); #else @@ -4851,7 +5366,7 @@ void UnitTest::RecordProperty(const std::string& key, // from the main thread. int UnitTest::Run() { const bool in_death_test_child_process = - internal::GTEST_FLAG(internal_run_death_test).length() > 0; + GTEST_FLAG_GET(internal_run_death_test).length() > 0; // Google Test implements this protocol for catching that a test // program exits before returning control to Google Test: @@ -4881,7 +5396,7 @@ int UnitTest::Run() { // Captures the value of GTEST_FLAG(catch_exceptions). This value will be // used for the duration of the program. - impl()->set_catch_exceptions(GTEST_FLAG(catch_exceptions)); + impl()->set_catch_exceptions(GTEST_FLAG_GET(catch_exceptions)); #if GTEST_OS_WINDOWS // Either the user wants Google Test to catch exceptions thrown by the @@ -4889,30 +5404,29 @@ int UnitTest::Run() { // process. In either case the user does not want to see pop-up dialogs // about crashes - they are expected. if (impl()->catch_exceptions() || in_death_test_child_process) { -# if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT +#if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT // SetErrorMode doesn't exist on CE. SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); -# endif // !GTEST_OS_WINDOWS_MOBILE +#endif // !GTEST_OS_WINDOWS_MOBILE -# if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE +#if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE // Death test children can be terminated with _abort(). On Windows, // _abort() can show a dialog with a warning message. This forces the // abort message to go to stderr instead. _set_error_mode(_OUT_TO_STDERR); -# endif +#endif -# if defined(_MSC_VER) && !GTEST_OS_WINDOWS_MOBILE +#if defined(_MSC_VER) && !GTEST_OS_WINDOWS_MOBILE // In the debug version, Visual Studio pops up a separate dialog // offering a choice to debug the aborted program. We need to suppress // this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement // executed. Google Test will notify the user of any unexpected // failure via stderr. - if (!GTEST_FLAG(break_on_failure)) + if (!GTEST_FLAG_GET(break_on_failure)) _set_abort_behavior( 0x0, // Clear the following flags: _WRITE_ABORT_MSG | _CALL_REPORTFAULT); // pop-up window, core dump. -# endif // In debug mode, the Windows CRT can crash with an assertion over invalid // input (e.g. passing an invalid file descriptor). The default handling @@ -4923,13 +5437,15 @@ int UnitTest::Run() { _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); (void)_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); } +#endif } #endif // GTEST_OS_WINDOWS return internal::HandleExceptionsInMethodIfSupported( - impl(), - &internal::UnitTestImpl::RunAllTests, - "auxiliary test code (environments or event listeners)") ? 0 : 1; + impl(), &internal::UnitTestImpl::RunAllTests, + "auxiliary test code (environments or event listeners)") + ? 0 + : 1; } // Returns the working directory when the first TEST() or TEST_F() was @@ -4974,14 +5490,10 @@ UnitTest::parameterized_test_registry() GTEST_LOCK_EXCLUDED_(mutex_) { } // Creates an empty UnitTest. -UnitTest::UnitTest() { - impl_ = new internal::UnitTestImpl(this); -} +UnitTest::UnitTest() { impl_ = new internal::UnitTestImpl(this); } // Destructor of UnitTest. -UnitTest::~UnitTest() { - delete impl_; -} +UnitTest::~UnitTest() { delete impl_; } // Pushes a trace defined by SCOPED_TRACE() on to the per-thread // Google Test trace stack. @@ -4992,8 +5504,7 @@ void UnitTest::PushGTestTrace(const internal::TraceInfo& trace) } // Pops a trace from the per-thread Google Test trace stack. -void UnitTest::PopGTestTrace() - GTEST_LOCK_EXCLUDED_(mutex_) { +void UnitTest::PopGTestTrace() GTEST_LOCK_EXCLUDED_(mutex_) { internal::MutexLock lock(&mutex_); impl_->gtest_trace_stack().pop_back(); } @@ -5090,12 +5601,12 @@ void UnitTestImpl::ConfigureXmlOutput() { // Initializes event listeners for streaming test results in string form. // Must not be called before InitGoogleTest. void UnitTestImpl::ConfigureStreamingOutput() { - const std::string& target = GTEST_FLAG(stream_result_to); + const std::string& target = GTEST_FLAG_GET(stream_result_to); if (!target.empty()) { const size_t pos = target.find(':'); if (pos != std::string::npos) { - listeners()->Append(new StreamingListener(target.substr(0, pos), - target.substr(pos+1))); + listeners()->Append( + new StreamingListener(target.substr(0, pos), target.substr(pos + 1))); } else { GTEST_LOG_(WARNING) << "unrecognized streaming target \"" << target << "\" ignored."; @@ -5133,13 +5644,17 @@ void UnitTestImpl::PostFlagParsingInit() { // to shut down the default XML output before invoking RUN_ALL_TESTS. ConfigureXmlOutput(); + if (GTEST_FLAG_GET(brief)) { + listeners()->SetDefaultResultPrinter(new BriefUnitTestResultPrinter); + } + #if GTEST_CAN_STREAM_RESULTS_ // Configures listeners for streaming test results to the specified server. ConfigureStreamingOutput(); #endif // GTEST_CAN_STREAM_RESULTS_ #if GTEST_HAS_ABSL - if (GTEST_FLAG(install_failure_signal_handler)) { + if (GTEST_FLAG_GET(install_failure_signal_handler)) { absl::FailureSignalHandlerOptions options; absl::InstallFailureSignalHandler(options); } @@ -5178,10 +5693,10 @@ class TestSuiteNameIs { // Arguments: // // test_suite_name: name of the test suite -// type_param: the name of the test suite's type parameter, or NULL if -// this is not a typed or a type-parameterized test suite. -// set_up_tc: pointer to the function that sets up the test suite -// tear_down_tc: pointer to the function that tears down the test suite +// type_param: the name of the test suite's type parameter, or NULL if +// this is not a typed or a type-parameterized test suite. +// set_up_tc: pointer to the function that sets up the test suite +// tear_down_tc: pointer to the function that tears down the test suite TestSuite* UnitTestImpl::GetTestSuite( const char* test_suite_name, const char* type_param, internal::SetUpTestSuiteFunc set_up_tc, @@ -5197,9 +5712,9 @@ TestSuite* UnitTestImpl::GetTestSuite( auto* const new_test_suite = new TestSuite(test_suite_name, type_param, set_up_tc, tear_down_tc); + const UnitTestFilter death_test_suite_filter(kDeathTestSuiteFilter); // Is this a death test suite? - if (internal::UnitTestOptions::MatchesFilter(test_suite_name, - kDeathTestSuiteFilter)) { + if (death_test_suite_filter.MatchesName(test_suite_name)) { // Yes. Inserts the test suite after the last death test suite // defined so far. This only works when the test suites haven't // been shuffled. Otherwise we may end up running a death test @@ -5236,8 +5751,7 @@ bool UnitTestImpl::RunAllTests() { const bool gtest_is_initialized_before_run_all_tests = GTestIsInitialized(); // Do not run any test if the --help flag was specified. - if (g_help_flag) - return true; + if (g_help_flag) return true; // Repeats the call to the post-flag parsing initialization in case the // user didn't call InitGoogleTest. @@ -5255,11 +5769,11 @@ bool UnitTestImpl::RunAllTests() { #if GTEST_HAS_DEATH_TEST in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != nullptr); -# if defined(GTEST_EXTRA_DEATH_TEST_CHILD_SETUP_) +#if defined(GTEST_EXTRA_DEATH_TEST_CHILD_SETUP_) if (in_subprocess_for_death_test) { GTEST_EXTRA_DEATH_TEST_CHILD_SETUP_(); } -# endif // defined(GTEST_EXTRA_DEATH_TEST_CHILD_SETUP_) +#endif // defined(GTEST_EXTRA_DEATH_TEST_CHILD_SETUP_) #endif // GTEST_HAS_DEATH_TEST const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex, @@ -5267,19 +5781,18 @@ bool UnitTestImpl::RunAllTests() { // Compares the full test names with the filter to decide which // tests to run. - const bool has_tests_to_run = FilterTests(should_shard - ? HONOR_SHARDING_PROTOCOL - : IGNORE_SHARDING_PROTOCOL) > 0; + const bool has_tests_to_run = + FilterTests(should_shard ? HONOR_SHARDING_PROTOCOL + : IGNORE_SHARDING_PROTOCOL) > 0; // Lists the tests and exits if the --gtest_list_tests flag was specified. - if (GTEST_FLAG(list_tests)) { + if (GTEST_FLAG_GET(list_tests)) { // This must be called *after* FilterTests() has been called. ListTestsMatchingFilter(); return true; } - random_seed_ = GTEST_FLAG(shuffle) ? - GetRandomSeedFromFlag(GTEST_FLAG(random_seed)) : 0; + random_seed_ = GetRandomSeedFromFlag(GTEST_FLAG_GET(random_seed)); // True if and only if at least one test has failed. bool failed = false; @@ -5291,19 +5804,31 @@ bool UnitTestImpl::RunAllTests() { // How many times to repeat the tests? We don't want to repeat them // when we are inside the subprocess of a death test. - const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG(repeat); + const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG_GET(repeat); + // Repeats forever if the repeat count is negative. const bool gtest_repeat_forever = repeat < 0; + + // Should test environments be set up and torn down for each repeat, or only + // set up on the first and torn down on the last iteration? If there is no + // "last" iteration because the tests will repeat forever, always recreate the + // environments to avoid leaks in case one of the environments is using + // resources that are external to this process. Without this check there would + // be no way to clean up those external resources automatically. + const bool recreate_environments_when_repeating = + GTEST_FLAG_GET(recreate_environments_when_repeating) || + gtest_repeat_forever; + for (int i = 0; gtest_repeat_forever || i != repeat; i++) { // We want to preserve failures generated by ad-hoc test // assertions executed before RUN_ALL_TESTS(). ClearNonAdHocTestResult(); - const TimeInMillis start = GetTimeInMillis(); + Timer timer; // Shuffles test suites and tests if requested. - if (has_tests_to_run && GTEST_FLAG(shuffle)) { - random()->Reseed(static_cast<UInt32>(random_seed_)); + if (has_tests_to_run && GTEST_FLAG_GET(shuffle)) { + random()->Reseed(static_cast<uint32_t>(random_seed_)); // This should be done before calling OnTestIterationStart(), // such that a test event listener can see the actual test order // in the event. @@ -5315,10 +5840,13 @@ bool UnitTestImpl::RunAllTests() { // Runs each test suite if there is at least one test to run. if (has_tests_to_run) { - // Sets up all environments beforehand. - repeater->OnEnvironmentsSetUpStart(*parent_); - ForEach(environments_, SetUpEnvironment); - repeater->OnEnvironmentsSetUpEnd(*parent_); + // Sets up all environments beforehand. If test environments aren't + // recreated for each iteration, only do so on the first iteration. + if (i == 0 || recreate_environments_when_repeating) { + repeater->OnEnvironmentsSetUpStart(*parent_); + ForEach(environments_, SetUpEnvironment); + repeater->OnEnvironmentsSetUpEnd(*parent_); + } // Runs the tests only if there was no fatal failure or skip triggered // during global set-up. @@ -5340,17 +5868,36 @@ bool UnitTestImpl::RunAllTests() { for (int test_index = 0; test_index < total_test_suite_count(); test_index++) { GetMutableSuiteCase(test_index)->Run(); + if (GTEST_FLAG_GET(fail_fast) && + GetMutableSuiteCase(test_index)->Failed()) { + for (int j = test_index + 1; j < total_test_suite_count(); j++) { + GetMutableSuiteCase(j)->Skip(); + } + break; + } + } + } else if (Test::HasFatalFailure()) { + // If there was a fatal failure during the global setup then we know we + // aren't going to run any tests. Explicitly mark all of the tests as + // skipped to make this obvious in the output. + for (int test_index = 0; test_index < total_test_suite_count(); + test_index++) { + GetMutableSuiteCase(test_index)->Skip(); } } - // Tears down all environments in reverse order afterwards. - repeater->OnEnvironmentsTearDownStart(*parent_); - std::for_each(environments_.rbegin(), environments_.rend(), - TearDownEnvironment); - repeater->OnEnvironmentsTearDownEnd(*parent_); + // Tears down all environments in reverse order afterwards. If test + // environments aren't recreated for each iteration, only do so on the + // last iteration. + if (i == repeat - 1 || recreate_environments_when_repeating) { + repeater->OnEnvironmentsTearDownStart(*parent_); + std::for_each(environments_.rbegin(), environments_.rend(), + TearDownEnvironment); + repeater->OnEnvironmentsTearDownEnd(*parent_); + } } - elapsed_time_ = GetTimeInMillis() - start; + elapsed_time_ = timer.Elapsed(); // Tells the unit test event listener that the tests have just finished. repeater->OnTestIterationEnd(*parent_, i); @@ -5368,7 +5915,7 @@ bool UnitTestImpl::RunAllTests() { // (it's always safe to unshuffle the tests). UnshuffleTests(); - if (GTEST_FLAG(shuffle)) { + if (GTEST_FLAG_GET(shuffle)) { // Picks a new random seed for each iteration. random_seed_ = GetNextRandomSeed(random_seed_); } @@ -5378,14 +5925,14 @@ bool UnitTestImpl::RunAllTests() { if (!gtest_is_initialized_before_run_all_tests) { ColoredPrintf( - COLOR_RED, + GTestColor::kRed, "\nIMPORTANT NOTICE - DO NOT IGNORE:\n" "This test program did NOT call " GTEST_INIT_GOOGLE_TEST_NAME_ "() before calling RUN_ALL_TESTS(). This is INVALID. Soon " GTEST_NAME_ " will start to enforce the valid usage. " "Please fix it ASAP, or IT WILL START TO FAIL.\n"); // NOLINT #if GTEST_FOR_GOOGLE_ - ColoredPrintf(COLOR_RED, + ColoredPrintf(GTestColor::kRed, "For more details, see http://wiki/Main/ValidGUnitMain.\n"); #endif // GTEST_FOR_GOOGLE_ } @@ -5402,7 +5949,7 @@ void WriteToShardStatusFileIfNeeded() { if (test_shard_file != nullptr) { FILE* const file = posix::FOpen(test_shard_file, "w"); if (file == nullptr) { - ColoredPrintf(COLOR_RED, + ColoredPrintf(GTestColor::kRed, "Could not write to the test shard status file \"%s\" " "specified by the %s environment variable.\n", test_shard_file, kTestShardStatusFile); @@ -5419,41 +5966,40 @@ void WriteToShardStatusFileIfNeeded() { // an error and exits. If in_subprocess_for_death_test, sharding is // disabled because it must only be applied to the original test // process. Otherwise, we could filter out death tests we intended to execute. -bool ShouldShard(const char* total_shards_env, - const char* shard_index_env, +bool ShouldShard(const char* total_shards_env, const char* shard_index_env, bool in_subprocess_for_death_test) { if (in_subprocess_for_death_test) { return false; } - const Int32 total_shards = Int32FromEnvOrDie(total_shards_env, -1); - const Int32 shard_index = Int32FromEnvOrDie(shard_index_env, -1); + const int32_t total_shards = Int32FromEnvOrDie(total_shards_env, -1); + const int32_t shard_index = Int32FromEnvOrDie(shard_index_env, -1); if (total_shards == -1 && shard_index == -1) { return false; } else if (total_shards == -1 && shard_index != -1) { - const Message msg = Message() - << "Invalid environment variables: you have " - << kTestShardIndex << " = " << shard_index - << ", but have left " << kTestTotalShards << " unset.\n"; - ColoredPrintf(COLOR_RED, "%s", msg.GetString().c_str()); + const Message msg = Message() << "Invalid environment variables: you have " + << kTestShardIndex << " = " << shard_index + << ", but have left " << kTestTotalShards + << " unset.\n"; + ColoredPrintf(GTestColor::kRed, "%s", msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } else if (total_shards != -1 && shard_index == -1) { const Message msg = Message() - << "Invalid environment variables: you have " - << kTestTotalShards << " = " << total_shards - << ", but have left " << kTestShardIndex << " unset.\n"; - ColoredPrintf(COLOR_RED, "%s", msg.GetString().c_str()); + << "Invalid environment variables: you have " + << kTestTotalShards << " = " << total_shards + << ", but have left " << kTestShardIndex << " unset.\n"; + ColoredPrintf(GTestColor::kRed, "%s", msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } else if (shard_index < 0 || shard_index >= total_shards) { - const Message msg = Message() - << "Invalid environment variables: we require 0 <= " - << kTestShardIndex << " < " << kTestTotalShards - << ", but you have " << kTestShardIndex << "=" << shard_index - << ", " << kTestTotalShards << "=" << total_shards << ".\n"; - ColoredPrintf(COLOR_RED, "%s", msg.GetString().c_str()); + const Message msg = + Message() << "Invalid environment variables: we require 0 <= " + << kTestShardIndex << " < " << kTestTotalShards + << ", but you have " << kTestShardIndex << "=" << shard_index + << ", " << kTestTotalShards << "=" << total_shards << ".\n"; + ColoredPrintf(GTestColor::kRed, "%s", msg.GetString().c_str()); fflush(stdout); exit(EXIT_FAILURE); } @@ -5464,13 +6010,13 @@ bool ShouldShard(const char* total_shards_env, // Parses the environment variable var as an Int32. If it is unset, // returns default_val. If it is not an Int32, prints an error // and aborts. -Int32 Int32FromEnvOrDie(const char* var, Int32 default_val) { +int32_t Int32FromEnvOrDie(const char* var, int32_t default_val) { const char* str_val = posix::GetEnv(var); if (str_val == nullptr) { return default_val; } - Int32 result; + int32_t result; if (!ParseInt32(Message() << "The value of environment variable " << var, str_val, &result)) { exit(EXIT_FAILURE); @@ -5494,11 +6040,16 @@ bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) { // https://github.com/google/googletest/blob/master/googletest/docs/advanced.md // . Returns the number of tests that should run. int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { - const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ? - Int32FromEnvOrDie(kTestTotalShards, -1) : -1; - const Int32 shard_index = shard_tests == HONOR_SHARDING_PROTOCOL ? - Int32FromEnvOrDie(kTestShardIndex, -1) : -1; - + const int32_t total_shards = shard_tests == HONOR_SHARDING_PROTOCOL + ? Int32FromEnvOrDie(kTestTotalShards, -1) + : -1; + const int32_t shard_index = shard_tests == HONOR_SHARDING_PROTOCOL + ? Int32FromEnvOrDie(kTestShardIndex, -1) + : -1; + + const PositiveAndNegativeUnitTestFilter gtest_flag_filter( + GTEST_FLAG_GET(filter)); + const UnitTestFilter disable_test_filter(kDisableTestFilter); // num_runnable_tests are the number of tests that will // run across all shards (i.e., match filter and are not disabled). // num_selected_tests are the number of tests to be run on @@ -5514,18 +6065,17 @@ int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) { const std::string test_name(test_info->name()); // A test is disabled if test suite name or test name matches // kDisableTestFilter. - const bool is_disabled = internal::UnitTestOptions::MatchesFilter( - test_suite_name, kDisableTestFilter) || - internal::UnitTestOptions::MatchesFilter( - test_name, kDisableTestFilter); + const bool is_disabled = + disable_test_filter.MatchesName(test_suite_name) || + disable_test_filter.MatchesName(test_name); test_info->is_disabled_ = is_disabled; - const bool matches_filter = internal::UnitTestOptions::FilterMatchesTest( - test_suite_name, test_name); + const bool matches_filter = + gtest_flag_filter.MatchesTest(test_suite_name, test_name); test_info->matches_filter_ = matches_filter; const bool is_runnable = - (GTEST_FLAG(also_run_disabled_tests) || !is_disabled) && + (GTEST_FLAG_GET(also_run_disabled_tests) || !is_disabled) && matches_filter; const bool is_in_another_shard = @@ -5694,8 +6244,8 @@ void UnitTestImpl::UnshuffleTests() { // For example, if Foo() calls Bar(), which in turn calls // GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in // the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't. -std::string GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/, - int skip_count) { +GTEST_NO_INLINE_ GTEST_NO_TAIL_CALL_ std::string +GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/, int skip_count) { // We pass skip_count + 1 to skip this wrapper function in addition // to what the user really wants to skip. return GetUnitTestImpl()->CurrentOsStackTraceExceptTop(skip_count + 1); @@ -5705,7 +6255,7 @@ std::string GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/, // suppress unreachable code warnings. namespace { class ClassUniqueToAlwaysTrue {}; -} +} // namespace bool IsTrue(bool condition) { return condition; } @@ -5713,8 +6263,7 @@ bool AlwaysTrue() { #if GTEST_HAS_EXCEPTIONS // This condition is always false so AlwaysTrue() never actually throws, // but it makes the compiler think that it may throw. - if (IsTrue(false)) - throw ClassUniqueToAlwaysTrue(); + if (IsTrue(false)) throw ClassUniqueToAlwaysTrue(); #endif // GTEST_HAS_EXCEPTIONS return true; } @@ -5736,13 +6285,14 @@ bool SkipPrefix(const char* prefix, const char** pstr) { // part can be omitted. // // Returns the value of the flag, or NULL if the parsing failed. -static const char* ParseFlagValue(const char* str, const char* flag, +static const char* ParseFlagValue(const char* str, const char* flag_name, bool def_optional) { // str and flag must not be NULL. - if (str == nullptr || flag == nullptr) return nullptr; + if (str == nullptr || flag_name == nullptr) return nullptr; // The flag must start with "--" followed by GTEST_FLAG_PREFIX_. - const std::string flag_str = std::string("--") + GTEST_FLAG_PREFIX_ + flag; + const std::string flag_str = + std::string("--") + GTEST_FLAG_PREFIX_ + flag_name; const size_t flag_len = flag_str.length(); if (strncmp(str, flag_str.c_str(), flag_len) != 0) return nullptr; @@ -5773,9 +6323,9 @@ static const char* ParseFlagValue(const char* str, const char* flag, // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. -static bool ParseBoolFlag(const char* str, const char* flag, bool* value) { +static bool ParseFlag(const char* str, const char* flag_name, bool* value) { // Gets the value of the flag as a string. - const char* const value_str = ParseFlagValue(str, flag, true); + const char* const value_str = ParseFlagValue(str, flag_name, true); // Aborts if the parsing failed. if (value_str == nullptr) return false; @@ -5785,32 +6335,30 @@ static bool ParseBoolFlag(const char* str, const char* flag, bool* value) { return true; } -// Parses a string for an Int32 flag, in the form of -// "--flag=value". +// Parses a string for an int32_t flag, in the form of "--flag=value". // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. -bool ParseInt32Flag(const char* str, const char* flag, Int32* value) { +bool ParseFlag(const char* str, const char* flag_name, int32_t* value) { // Gets the value of the flag as a string. - const char* const value_str = ParseFlagValue(str, flag, false); + const char* const value_str = ParseFlagValue(str, flag_name, false); // Aborts if the parsing failed. if (value_str == nullptr) return false; // Sets *value to the value of the flag. - return ParseInt32(Message() << "The value of flag --" << flag, - value_str, value); + return ParseInt32(Message() << "The value of flag --" << flag_name, value_str, + value); } -// Parses a string for a string flag, in the form of -// "--flag=value". +// Parses a string for a string flag, in the form of "--flag=value". // // On success, stores the value of the flag in *value, and returns // true. On failure, returns false without changing *value. template <typename String> -static bool ParseStringFlag(const char* str, const char* flag, String* value) { +static bool ParseFlag(const char* str, const char* flag_name, String* value) { // Gets the value of the flag as a string. - const char* const value_str = ParseFlagValue(str, flag, false); + const char* const value_str = ParseFlagValue(str, flag_name, false); // Aborts if the parsing failed. if (value_str == nullptr) return false; @@ -5827,8 +6375,7 @@ static bool ParseStringFlag(const char* str, const char* flag, String* value) { // GTEST_INTERNAL_PREFIX_ followed by "internal_" are considered Google Test // internal flags and do not trigger the help message. static bool HasGoogleTestFlagPrefix(const char* str) { - return (SkipPrefix("--", &str) || - SkipPrefix("-", &str) || + return (SkipPrefix("--", &str) || SkipPrefix("-", &str) || SkipPrefix("/", &str)) && !SkipPrefix(GTEST_FLAG_PREFIX_ "internal_", &str) && (SkipPrefix(GTEST_FLAG_PREFIX_, &str) || @@ -5845,7 +6392,7 @@ static bool HasGoogleTestFlagPrefix(const char* str) { // @D changes to the default terminal text color. // static void PrintColorEncoded(const char* str) { - GTestColor color = COLOR_DEFAULT; // The current color. + GTestColor color = GTestColor::kDefault; // The current color. // Conceptually, we split the string into segments divided by escape // sequences. Then we print one segment at a time. At the end of @@ -5865,13 +6412,13 @@ static void PrintColorEncoded(const char* str) { if (ch == '@') { ColoredPrintf(color, "@"); } else if (ch == 'D') { - color = COLOR_DEFAULT; + color = GTestColor::kDefault; } else if (ch == 'R') { - color = COLOR_RED; + color = GTestColor::kRed; } else if (ch == 'G') { - color = COLOR_GREEN; + color = GTestColor::kGreen; } else if (ch == 'Y') { - color = COLOR_YELLOW; + color = GTestColor::kYellow; } else { --str; } @@ -5879,105 +6426,140 @@ static void PrintColorEncoded(const char* str) { } static const char kColorEncodedHelpMessage[] = -"This program contains tests written using " GTEST_NAME_ ". You can use the\n" -"following command line flags to control its behavior:\n" -"\n" -"Test Selection:\n" -" @G--" GTEST_FLAG_PREFIX_ "list_tests@D\n" -" List the names of all tests instead of running them. The name of\n" -" TEST(Foo, Bar) is \"Foo.Bar\".\n" -" @G--" GTEST_FLAG_PREFIX_ "filter=@YPOSTIVE_PATTERNS" + "This program contains tests written using " GTEST_NAME_ + ". You can use the\n" + "following command line flags to control its behavior:\n" + "\n" + "Test Selection:\n" + " @G--" GTEST_FLAG_PREFIX_ + "list_tests@D\n" + " List the names of all tests instead of running them. The name of\n" + " TEST(Foo, Bar) is \"Foo.Bar\".\n" + " @G--" GTEST_FLAG_PREFIX_ + "filter=@YPOSITIVE_PATTERNS" "[@G-@YNEGATIVE_PATTERNS]@D\n" -" Run only the tests whose name matches one of the positive patterns but\n" -" none of the negative patterns. '?' matches any single character; '*'\n" -" matches any substring; ':' separates two patterns.\n" -" @G--" GTEST_FLAG_PREFIX_ "also_run_disabled_tests@D\n" -" Run all disabled tests too.\n" -"\n" -"Test Execution:\n" -" @G--" GTEST_FLAG_PREFIX_ "repeat=@Y[COUNT]@D\n" -" Run the tests repeatedly; use a negative count to repeat forever.\n" -" @G--" GTEST_FLAG_PREFIX_ "shuffle@D\n" -" Randomize tests' orders on every iteration.\n" -" @G--" GTEST_FLAG_PREFIX_ "random_seed=@Y[NUMBER]@D\n" -" Random number seed to use for shuffling test orders (between 1 and\n" -" 99999, or 0 to use a seed based on the current time).\n" -"\n" -"Test Output:\n" -" @G--" GTEST_FLAG_PREFIX_ "color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D\n" -" Enable/disable colored output. The default is @Gauto@D.\n" -" -@G-" GTEST_FLAG_PREFIX_ "print_time=0@D\n" -" Don't print the elapsed time of each test.\n" -" @G--" GTEST_FLAG_PREFIX_ "output=@Y(@Gjson@Y|@Gxml@Y)[@G:@YDIRECTORY_PATH@G" - GTEST_PATH_SEP_ "@Y|@G:@YFILE_PATH]@D\n" -" Generate a JSON or XML report in the given directory or with the given\n" -" file name. @YFILE_PATH@D defaults to @Gtest_detail.xml@D.\n" -# if GTEST_CAN_STREAM_RESULTS_ -" @G--" GTEST_FLAG_PREFIX_ "stream_result_to=@YHOST@G:@YPORT@D\n" -" Stream test results to the given server.\n" -# endif // GTEST_CAN_STREAM_RESULTS_ -"\n" -"Assertion Behavior:\n" -# if GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS -" @G--" GTEST_FLAG_PREFIX_ "death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D\n" -" Set the default death test style.\n" -# endif // GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS -" @G--" GTEST_FLAG_PREFIX_ "break_on_failure@D\n" -" Turn assertion failures into debugger break-points.\n" -" @G--" GTEST_FLAG_PREFIX_ "throw_on_failure@D\n" -" Turn assertion failures into C++ exceptions for use by an external\n" -" test framework.\n" -" @G--" GTEST_FLAG_PREFIX_ "catch_exceptions=0@D\n" -" Do not report exceptions as test failures. Instead, allow them\n" -" to crash the program or throw a pop-up (on Windows).\n" -"\n" -"Except for @G--" GTEST_FLAG_PREFIX_ "list_tests@D, you can alternatively set " + " Run only the tests whose name matches one of the positive patterns " + "but\n" + " none of the negative patterns. '?' matches any single character; " + "'*'\n" + " matches any substring; ':' separates two patterns.\n" + " @G--" GTEST_FLAG_PREFIX_ + "also_run_disabled_tests@D\n" + " Run all disabled tests too.\n" + "\n" + "Test Execution:\n" + " @G--" GTEST_FLAG_PREFIX_ + "repeat=@Y[COUNT]@D\n" + " Run the tests repeatedly; use a negative count to repeat forever.\n" + " @G--" GTEST_FLAG_PREFIX_ + "shuffle@D\n" + " Randomize tests' orders on every iteration.\n" + " @G--" GTEST_FLAG_PREFIX_ + "random_seed=@Y[NUMBER]@D\n" + " Random number seed to use for shuffling test orders (between 1 and\n" + " 99999, or 0 to use a seed based on the current time).\n" + " @G--" GTEST_FLAG_PREFIX_ + "recreate_environments_when_repeating@D\n" + " Sets up and tears down the global test environment on each repeat\n" + " of the test.\n" + "\n" + "Test Output:\n" + " @G--" GTEST_FLAG_PREFIX_ + "color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D\n" + " Enable/disable colored output. The default is @Gauto@D.\n" + " @G--" GTEST_FLAG_PREFIX_ + "brief=1@D\n" + " Only print test failures.\n" + " @G--" GTEST_FLAG_PREFIX_ + "print_time=0@D\n" + " Don't print the elapsed time of each test.\n" + " @G--" GTEST_FLAG_PREFIX_ + "output=@Y(@Gjson@Y|@Gxml@Y)[@G:@YDIRECTORY_PATH@G" GTEST_PATH_SEP_ + "@Y|@G:@YFILE_PATH]@D\n" + " Generate a JSON or XML report in the given directory or with the " + "given\n" + " file name. @YFILE_PATH@D defaults to @Gtest_detail.xml@D.\n" +#if GTEST_CAN_STREAM_RESULTS_ + " @G--" GTEST_FLAG_PREFIX_ + "stream_result_to=@YHOST@G:@YPORT@D\n" + " Stream test results to the given server.\n" +#endif // GTEST_CAN_STREAM_RESULTS_ + "\n" + "Assertion Behavior:\n" +#if GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS + " @G--" GTEST_FLAG_PREFIX_ + "death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D\n" + " Set the default death test style.\n" +#endif // GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS + " @G--" GTEST_FLAG_PREFIX_ + "break_on_failure@D\n" + " Turn assertion failures into debugger break-points.\n" + " @G--" GTEST_FLAG_PREFIX_ + "throw_on_failure@D\n" + " Turn assertion failures into C++ exceptions for use by an external\n" + " test framework.\n" + " @G--" GTEST_FLAG_PREFIX_ + "catch_exceptions=0@D\n" + " Do not report exceptions as test failures. Instead, allow them\n" + " to crash the program or throw a pop-up (on Windows).\n" + "\n" + "Except for @G--" GTEST_FLAG_PREFIX_ + "list_tests@D, you can alternatively set " "the corresponding\n" -"environment variable of a flag (all letters in upper-case). For example, to\n" -"disable colored text output, you can either specify @G--" GTEST_FLAG_PREFIX_ + "environment variable of a flag (all letters in upper-case). For example, " + "to\n" + "disable colored text output, you can either specify " + "@G--" GTEST_FLAG_PREFIX_ "color=no@D or set\n" -"the @G" GTEST_FLAG_PREFIX_UPPER_ "COLOR@D environment variable to @Gno@D.\n" -"\n" -"For more information, please read the " GTEST_NAME_ " documentation at\n" -"@G" GTEST_PROJECT_URL_ "@D. If you find a bug in " GTEST_NAME_ "\n" -"(not one in your own code or tests), please report it to\n" -"@G<" GTEST_DEV_EMAIL_ ">@D.\n"; + "the @G" GTEST_FLAG_PREFIX_UPPER_ + "COLOR@D environment variable to @Gno@D.\n" + "\n" + "For more information, please read the " GTEST_NAME_ + " documentation at\n" + "@G" GTEST_PROJECT_URL_ "@D. If you find a bug in " GTEST_NAME_ + "\n" + "(not one in your own code or tests), please report it to\n" + "@G<" GTEST_DEV_EMAIL_ ">@D.\n"; static bool ParseGoogleTestFlag(const char* const arg) { - return ParseBoolFlag(arg, kAlsoRunDisabledTestsFlag, - >EST_FLAG(also_run_disabled_tests)) || - ParseBoolFlag(arg, kBreakOnFailureFlag, - >EST_FLAG(break_on_failure)) || - ParseBoolFlag(arg, kCatchExceptionsFlag, - >EST_FLAG(catch_exceptions)) || - ParseStringFlag(arg, kColorFlag, >EST_FLAG(color)) || - ParseStringFlag(arg, kDeathTestStyleFlag, - >EST_FLAG(death_test_style)) || - ParseBoolFlag(arg, kDeathTestUseFork, - >EST_FLAG(death_test_use_fork)) || - ParseStringFlag(arg, kFilterFlag, >EST_FLAG(filter)) || - ParseStringFlag(arg, kInternalRunDeathTestFlag, - >EST_FLAG(internal_run_death_test)) || - ParseBoolFlag(arg, kListTestsFlag, >EST_FLAG(list_tests)) || - ParseStringFlag(arg, kOutputFlag, >EST_FLAG(output)) || - ParseBoolFlag(arg, kPrintTimeFlag, >EST_FLAG(print_time)) || - ParseBoolFlag(arg, kPrintUTF8Flag, >EST_FLAG(print_utf8)) || - ParseInt32Flag(arg, kRandomSeedFlag, >EST_FLAG(random_seed)) || - ParseInt32Flag(arg, kRepeatFlag, >EST_FLAG(repeat)) || - ParseBoolFlag(arg, kShuffleFlag, >EST_FLAG(shuffle)) || - ParseInt32Flag(arg, kStackTraceDepthFlag, - >EST_FLAG(stack_trace_depth)) || - ParseStringFlag(arg, kStreamResultToFlag, - >EST_FLAG(stream_result_to)) || - ParseBoolFlag(arg, kThrowOnFailureFlag, - >EST_FLAG(throw_on_failure)); +#define GTEST_INTERNAL_PARSE_FLAG(flag_name) \ + do { \ + auto value = GTEST_FLAG_GET(flag_name); \ + if (ParseFlag(arg, #flag_name, &value)) { \ + GTEST_FLAG_SET(flag_name, value); \ + return true; \ + } \ + } while (false) + + GTEST_INTERNAL_PARSE_FLAG(also_run_disabled_tests); + GTEST_INTERNAL_PARSE_FLAG(break_on_failure); + GTEST_INTERNAL_PARSE_FLAG(catch_exceptions); + GTEST_INTERNAL_PARSE_FLAG(color); + GTEST_INTERNAL_PARSE_FLAG(death_test_style); + GTEST_INTERNAL_PARSE_FLAG(death_test_use_fork); + GTEST_INTERNAL_PARSE_FLAG(fail_fast); + GTEST_INTERNAL_PARSE_FLAG(filter); + GTEST_INTERNAL_PARSE_FLAG(internal_run_death_test); + GTEST_INTERNAL_PARSE_FLAG(list_tests); + GTEST_INTERNAL_PARSE_FLAG(output); + GTEST_INTERNAL_PARSE_FLAG(brief); + GTEST_INTERNAL_PARSE_FLAG(print_time); + GTEST_INTERNAL_PARSE_FLAG(print_utf8); + GTEST_INTERNAL_PARSE_FLAG(random_seed); + GTEST_INTERNAL_PARSE_FLAG(repeat); + GTEST_INTERNAL_PARSE_FLAG(recreate_environments_when_repeating); + GTEST_INTERNAL_PARSE_FLAG(shuffle); + GTEST_INTERNAL_PARSE_FLAG(stack_trace_depth); + GTEST_INTERNAL_PARSE_FLAG(stream_result_to); + GTEST_INTERNAL_PARSE_FLAG(throw_on_failure); + return false; } #if GTEST_USE_OWN_FLAGFILE_FLAG_ static void LoadFlagsFromFile(const std::string& path) { FILE* flagfile = posix::FOpen(path.c_str(), "r"); if (!flagfile) { - GTEST_LOG_(FATAL) << "Unable to open file \"" << GTEST_FLAG(flagfile) + GTEST_LOG_(FATAL) << "Unable to open file \"" << GTEST_FLAG_GET(flagfile) << "\""; } std::string contents(ReadEntireFile(flagfile)); @@ -5985,10 +6567,8 @@ static void LoadFlagsFromFile(const std::string& path) { std::vector<std::string> lines; SplitString(contents, '\n', &lines); for (size_t i = 0; i < lines.size(); ++i) { - if (lines[i].empty()) - continue; - if (!ParseGoogleTestFlag(lines[i].c_str())) - g_help_flag = true; + if (lines[i].empty()) continue; + if (!ParseGoogleTestFlag(lines[i].c_str())) g_help_flag = true; } } #endif // GTEST_USE_OWN_FLAGFILE_FLAG_ @@ -5998,25 +6578,23 @@ static void LoadFlagsFromFile(const std::string& path) { // instantiated to either char or wchar_t. template <typename CharType> void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) { + std::string flagfile_value; for (int i = 1; i < *argc; i++) { const std::string arg_string = StreamableToString(argv[i]); const char* const arg = arg_string.c_str(); - using internal::ParseBoolFlag; - using internal::ParseInt32Flag; - using internal::ParseStringFlag; + using internal::ParseFlag; bool remove_flag = false; if (ParseGoogleTestFlag(arg)) { remove_flag = true; #if GTEST_USE_OWN_FLAGFILE_FLAG_ - } else if (ParseStringFlag(arg, kFlagfileFlag, >EST_FLAG(flagfile))) { - LoadFlagsFromFile(GTEST_FLAG(flagfile)); + } else if (ParseFlag(arg, "flagfile", &flagfile_value)) { + GTEST_FLAG_SET(flagfile, flagfile_value); + LoadFlagsFromFile(flagfile_value); remove_flag = true; #endif // GTEST_USE_OWN_FLAGFILE_FLAG_ - } else if (arg_string == "--help" || arg_string == "-h" || - arg_string == "-?" || arg_string == "/?" || - HasGoogleTestFlagPrefix(arg)) { + } else if (arg_string == "--help" || HasGoogleTestFlagPrefix(arg)) { // Both help flag and unrecognized Google Test flags (excluding // internal ones) trigger help display. g_help_flag = true; @@ -6051,7 +6629,27 @@ void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) { // Parses the command line for Google Test flags, without initializing // other parts of Google Test. void ParseGoogleTestFlagsOnly(int* argc, char** argv) { +#if GTEST_HAS_ABSL + if (*argc > 0) { + // absl::ParseCommandLine() requires *argc > 0. + auto positional_args = absl::flags_internal::ParseCommandLineImpl( + *argc, argv, absl::flags_internal::ArgvListAction::kRemoveParsedArgs, + absl::flags_internal::UsageFlagsAction::kHandleUsage, + absl::flags_internal::OnUndefinedFlag::kReportUndefined); + // Any command-line positional arguments not part of any command-line flag + // (or arguments to a flag) are copied back out to argv, with the program + // invocation name at position 0, and argc is resized. This includes + // positional arguments after the flag-terminating delimiter '--'. + // See https://abseil.io/docs/cpp/guides/flags. + std::copy(positional_args.begin(), positional_args.end(), argv); + if (static_cast<int>(positional_args.size()) < *argc) { + argv[positional_args.size()] = nullptr; + *argc = static_cast<int>(positional_args.size()); + } + } +#else ParseGoogleTestFlagsOnlyImpl(argc, argv); +#endif // Fix the value of *_NSGetArgc() on macOS, but if and only if // *_NSGetArgv() == argv @@ -6086,6 +6684,12 @@ void InitGoogleTestImpl(int* argc, CharType** argv) { #if GTEST_HAS_ABSL absl::InitializeSymbolizer(g_argvs[0].c_str()); + + // When using the Abseil Flags library, set the program usage message to the + // help message, but remove the color-encoding from the message first. + absl::SetProgramUsageMessage(absl::StrReplaceAll( + kColorEncodedHelpMessage, + {{"@D", ""}, {"@R", ""}, {"@G", ""}, {"@Y", ""}, {"@@", "@"}})); #endif // GTEST_HAS_ABSL ParseGoogleTestFlagsOnly(argc, argv); @@ -6106,7 +6710,7 @@ void InitGoogleTestImpl(int* argc, CharType** argv) { void InitGoogleTest(int* argc, char** argv) { #if defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_(argc, argv); -#else // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) +#else // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) internal::InitGoogleTestImpl(argc, argv); #endif // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) } @@ -6116,7 +6720,7 @@ void InitGoogleTest(int* argc, char** argv) { void InitGoogleTest(int* argc, wchar_t** argv) { #if defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_(argc, argv); -#else // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) +#else // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) internal::InitGoogleTestImpl(argc, argv); #endif // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) } @@ -6132,31 +6736,42 @@ void InitGoogleTest() { #if defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_(&argc, argv); -#else // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) +#else // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) internal::InitGoogleTestImpl(&argc, argv); #endif // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_) } +#if !defined(GTEST_CUSTOM_TEMPDIR_FUNCTION_) +// Return value of first environment variable that is set and contains +// a non-empty string. If there are none, return the "fallback" string. +// Since we like the temporary directory to have a directory separator suffix, +// add it if not provided in the environment variable value. +static std::string GetTempDirFromEnv( + std::initializer_list<const char*> environment_variables, + const char* fallback, char separator) { + for (const char* variable_name : environment_variables) { + const char* value = internal::posix::GetEnv(variable_name); + if (value != nullptr && value[0] != '\0') { + if (value[strlen(value) - 1] != separator) { + return std::string(value).append(1, separator); + } + return value; + } + } + return fallback; +} +#endif + std::string TempDir() { #if defined(GTEST_CUSTOM_TEMPDIR_FUNCTION_) return GTEST_CUSTOM_TEMPDIR_FUNCTION_(); -#endif - -#if GTEST_OS_WINDOWS_MOBILE - return "\\temp\\"; -#elif GTEST_OS_WINDOWS - const char* temp_dir = internal::posix::GetEnv("TEMP"); - if (temp_dir == nullptr || temp_dir[0] == '\0') - return "\\temp\\"; - else if (temp_dir[strlen(temp_dir) - 1] == '\\') - return temp_dir; - else - return std::string(temp_dir) + "\\"; +#elif GTEST_OS_WINDOWS || GTEST_OS_WINDOWS_MOBILE + return GetTempDirFromEnv({"TEST_TMPDIR", "TEMP"}, "\\temp\\", '\\'); #elif GTEST_OS_LINUX_ANDROID - return "/sdcard/"; + return GetTempDirFromEnv({"TEST_TMPDIR", "TMPDIR"}, "/data/local/tmp/", '/'); #else - return "/tmp/"; -#endif // GTEST_OS_WINDOWS_MOBILE + return GetTempDirFromEnv({"TEST_TMPDIR", "TMPDIR"}, "/tmp/", '/'); +#endif } // Class ScopedTrace @@ -6173,8 +6788,7 @@ void ScopedTrace::PushTrace(const char* file, int line, std::string message) { } // Pops the info pushed by the c'tor. -ScopedTrace::~ScopedTrace() - GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) { +ScopedTrace::~ScopedTrace() GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) { UnitTest::GetInstance()->PopGTestTrace(); } diff --git a/test/gtest/src/gtest_main.cc b/test/gtest_vendor/src/gtest_main.cc similarity index 92% rename from test/gtest/src/gtest_main.cc rename to test/gtest_vendor/src/gtest_main.cc index f6e1dd96f..44976375c 100644 --- a/test/gtest/src/gtest_main.cc +++ b/test/gtest_vendor/src/gtest_main.cc @@ -28,15 +28,21 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <cstdio> + #include "gtest/gtest.h" -#ifdef ARDUINO -void setup() { - testing::InitGoogleTest(); -} +#if GTEST_OS_ESP8266 || GTEST_OS_ESP32 +#if GTEST_OS_ESP8266 +extern "C" { +#endif +void setup() { testing::InitGoogleTest(); } void loop() { RUN_ALL_TESTS(); } +#if GTEST_OS_ESP8266 +} +#endif + #else GTEST_API_ int main(int argc, char **argv) { diff --git a/test/integration/CMakeLists.txt b/test/integration/CMakeLists.txt index e273d42aa..a863807d2 100644 --- a/test/integration/CMakeLists.txt +++ b/test/integration/CMakeLists.txt @@ -16,6 +16,7 @@ if(TARGET INTEGRATION_plugin) # before INTEGRATION_plugin so that its auto-generated header is available. # We do not want to link INTEGRATION_plugin to the DummyPlugins library. add_dependencies(INTEGRATION_plugin GzDummyPlugins) + target_include_directories(INTEGRATION_plugin PRIVATE ${PROJECT_SOURCE_DIR}/test) endif() if(TARGET INTEGRATION_mesh) diff --git a/test/performance/CMakeLists.txt b/test/performance/CMakeLists.txt index 629714f36..304fdcb18 100644 --- a/test/performance/CMakeLists.txt +++ b/test/performance/CMakeLists.txt @@ -7,8 +7,6 @@ if("${CMAKE_BUILD_TYPE_UPPERCASE}" STREQUAL "COVERAGE") plugin_specialization.cc) endif() -link_directories(${PROJECT_BINARY_DIR}/test) - gz_build_tests( TYPE PERFORMANCE SOURCES ${tests}) @@ -17,4 +15,5 @@ if(TARGET PERFORMANCE_plugin_specialization) # We add this dependency to make sure that DummyPlugins gets generated # before PERFORMANCE_plugin_specialization so that its auto-generated header is available. add_dependencies(PERFORMANCE_plugin_specialization GzDummyPlugins) + target_include_directories(PERFORMANCE_plugin_specialization PRIVATE ${PROJECT_SOURCE_DIR}/test) endif() diff --git a/test/plugins/CMakeLists.txt b/test/plugins/CMakeLists.txt index d622b00c7..9f87597de 100644 --- a/test/plugins/CMakeLists.txt +++ b/test/plugins/CMakeLists.txt @@ -9,12 +9,6 @@ target_link_libraries(GzBadPluginSize PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) add_library(GzDummyPlugins SHARED DummyPlugins.cc) target_link_libraries(GzDummyPlugins PRIVATE ${PROJECT_LIBRARY_TARGET_NAME}) -set_property(TARGET GzBadPluginAlign PROPERTY CXX_STANDARD 11) -set_property(TARGET GzBadPluginAPIVersionNew PROPERTY CXX_STANDARD 11) -set_property(TARGET GzBadPluginAPIVersionOld PROPERTY CXX_STANDARD 11) -set_property(TARGET GzBadPluginSize PROPERTY CXX_STANDARD 11) -set_property(TARGET GzDummyPlugins PROPERTY CXX_STANDARD 11) - # Create a variable for the name of the header which will contain the dummy plugin path. # This variable gets put in the cache so that it is available at generation time. set(GZ_DUMMY_PLUGIN_PATH_HEADER "DummyPluginsPath.h" CACHE INTERNAL "Name of header which contains DummyPlugin library path") diff --git a/testing/src/CMakeTestPaths_TEST.cc b/testing/src/CMakeTestPaths_TEST.cc index c0db4526b..b9730ff49 100644 --- a/testing/src/CMakeTestPaths_TEST.cc +++ b/testing/src/CMakeTestPaths_TEST.cc @@ -89,10 +89,3 @@ TEST(CMakeTestPaths, TestTmpPath) ASSERT_TRUE(exists(tmpDir)) << tmpDir; ASSERT_TRUE(isDirectory(tmpDir)); } - -///////////////////////////////////////////////// -int main(int argc, char **argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} From a7149005a4ee92a6355f4c8a5192683a3cd66892 Mon Sep 17 00:00:00 2001 From: Steve Peters <scpeters@openrobotics.org> Date: Tue, 5 Jul 2022 22:19:05 -0700 Subject: [PATCH 178/219] Remove configure.bat, export CXX_STANDARD (#387) * Remove configure.bat and test fix for finding av * Set CXX_STANDARD for core library * Fix deprecation warnings Signed-off-by: Steve Peters <scpeters@openrobotics.org> --- configure.bat | 25 ------------------------- geospatial/src/Dem.cc | 4 ++-- src/CMakeLists.txt | 3 ++- 3 files changed, 4 insertions(+), 28 deletions(-) delete mode 100644 configure.bat diff --git a/configure.bat b/configure.bat deleted file mode 100644 index 68582d494..000000000 --- a/configure.bat +++ /dev/null @@ -1,25 +0,0 @@ - -:: NOTE: This script is only meant to be used as part of the ignition developers' CI system -:: Users and developers should build and install this library using cmake and Visual Studio - - -:: Install dependencies -call %win_lib% :download_unzip_install dlfcn-win32-vc15-x64-dll-MD.zip -call %win_lib% :install_ign_project gz-math main - -:: Set configuration variables -@set build_type=Release -@if not "%1"=="" set build_type=%1 -@echo Configuring for build type %build_type% - -:: Go to the directory that this configure.bat file exists in -cd /d %~dp0 - -:: Create a build directory and configure -md build -cd build -cmake .. -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX="%WORKSPACE_INSTALL_DIR%" -DCMAKE_BUILD_TYPE="%build_type%" -DBUILD_TESTING:BOOL=False -:: Note: We disable testing by default. If the intention is for the CI to build and test -:: this project, then the CI script will turn it back on. - -:: If the caller wants to build and/or install, they should do so after calling this script diff --git a/geospatial/src/Dem.cc b/geospatial/src/Dem.cc index 664737e4c..d847d9bf5 100644 --- a/geospatial/src/Dem.cc +++ b/geospatial/src/Dem.cc @@ -157,10 +157,10 @@ int Dem::Load(const std::string &_filename) { // If successful, set the world width and height this->dataPtr->worldWidth = - math::SphericalCoordinates::Distance(upLeftLat, upLeftLong, + math::SphericalCoordinates::DistanceWGS84(upLeftLat, upLeftLong, upRightLat, upRightLong); this->dataPtr->worldHeight = - math::SphericalCoordinates::Distance(upLeftLat, upLeftLong, + math::SphericalCoordinates::DistanceWGS84(upLeftLat, upLeftLong, lowLeftLat, lowLeftLong); } // Assume non-Earth DEM (e.g., moon) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 64748f060..0987b505e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -4,7 +4,8 @@ gz_get_libsources_and_unittests(sources gtest_sources) # Create the library target gz_create_core_library( - SOURCES ${sources}) + SOURCES ${sources} + CXX_STANDARD ${CMAKE_CXX_STANDARD}) if (CMAKE_CXX_COMPILER_ID STREQUAL GNU) set(CXX_FILESYSTEM_LIBRARIES stdc++fs) From 038c7fac55eeeb9d4e4b42951cfd86ac8e435d35 Mon Sep 17 00:00:00 2001 From: Silvio Traversaro <silvio@traversaro.it> Date: Mon, 11 Jul 2022 14:55:53 +0200 Subject: [PATCH 179/219] Support absolute Win paths with forward slashes in common::FindFile (#389) Signed-off-by: Silvio Traversaro <silvio@traversaro.it> --- src/SystemPaths.cc | 47 +++++++++++++++++++++++------------------ src/SystemPaths_TEST.cc | 15 +++++++++++++ 2 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/SystemPaths.cc b/src/SystemPaths.cc index f809686c4..dc3f4ae39 100644 --- a/src/SystemPaths.cc +++ b/src/SystemPaths.cc @@ -400,38 +400,43 @@ std::string SystemPaths::FindFile(const std::string &_filename, if (filename.empty()) return path; - // Handle as URI - if (ignition::common::URI::Valid(filename)) - { - path = this->FindFileURI(ignition::common::URI(filename)); - } - // Handle as local absolute path - else if (filename[0] == '/') - { - path = filename; - } #ifdef _WIN32 - // Handle as Windows absolute path - else if (filename.length() >= 2 && filename[1] == ':') + // First of all, try if filename as a Windows absolute path exists + // The Windows absolute path is tried first as a Windows drive such as + // C:/ is also a valid URI scheme + if (filename.length() >= 2 && filename[1] == ':' && exists(filename)) { path = filename; } #endif // _WIN32 - // Try appending to local paths - else - { - auto cwdPath = joinPaths(cwd(), filename); - if (_searchLocalPath && exists(cwdPath)) + // If the filename is not an existing absolute Windows path, try others + if (path.empty()) { + // Handle as URI + if (ignition::common::URI::Valid(filename)) { - path = cwdPath; + path = this->FindFileURI(ignition::common::URI(filename)); } - else if ((filename[0] == '.' || _searchLocalPath) && exists(filename)) + // Handle as local absolute path + else if (filename[0] == '/') { path = filename; } - else if (this->dataPtr->findFileCB) + // Try appending to local paths + else { - path = this->dataPtr->findFileCB(filename); + auto cwdPath = joinPaths(cwd(), filename); + if (_searchLocalPath && exists(cwdPath)) + { + path = cwdPath; + } + else if ((filename[0] == '.' || _searchLocalPath) && exists(filename)) + { + path = filename; + } + else if (this->dataPtr->findFileCB) + { + path = this->dataPtr->findFileCB(filename); + } } } diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index a17950baa..e721ac727 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -359,6 +359,21 @@ TEST_F(SystemPathsFixture, FindFile) EXPECT_EQ("", sp.FindFile(uriBadDir)); } + // Windows path with only one forward slash +#ifdef _WIN32 + const auto tmpDirForwardSlash = "C:/Windows"; + const auto homeDirForwardSlash = "C:/Users"; + const auto badDirForwardSlash = "C:/bad"; + { + // We do not expect equality as sp.FindFile could normalize the + // path and return a different string + // The behaviour tested here is just that C:/Windows, C:/Users are found + EXPECT_NE("", sp.FindFile(tmpDirForwardSlash)); + EXPECT_NE("", sp.FindFile(homeDirForwardSlash)); + EXPECT_EQ("", sp.FindFile(badDirForwardSlash)); + } +#endif + // Custom callback { auto tmpCb = [tmpDir](const std::string &_s) From 884d7def9760a7690855e26babcf0c44c5e19ec5 Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Mon, 11 Jul 2022 17:18:40 -0700 Subject: [PATCH 180/219] Migrate ign_remotery_vis (#392) Signed-off-by: methylDragon <methylDragon@gmail.com> --- profiler/src/Remotery/{ign_remotery_vis.in => gz_remotery_vis.in} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename profiler/src/Remotery/{ign_remotery_vis.in => gz_remotery_vis.in} (100%) diff --git a/profiler/src/Remotery/ign_remotery_vis.in b/profiler/src/Remotery/gz_remotery_vis.in similarity index 100% rename from profiler/src/Remotery/ign_remotery_vis.in rename to profiler/src/Remotery/gz_remotery_vis.in From 60db2b6c52fafbaad2863732f9b36102db3c0410 Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Mon, 11 Jul 2022 17:18:51 -0700 Subject: [PATCH 181/219] Partial cmake and source migrations (#392) Signed-off-by: methylDragon <methylDragon@gmail.com> --- .github/ci/packages.apt | 6 ++-- .github/workflows/ci.yml | 5 ++- .github/workflows/macos.yml | 6 ++-- .github/workflows/pr-collection-labeler.yml | 2 +- BUILD.bazel | 28 ++++++++-------- CMakeLists.txt | 6 ++-- Changelog.md | 10 +++--- Migration.md | 2 +- README.md | 4 +-- api.md.in | 4 +-- av/BUILD.bazel | 22 ++++++------- av/include/CMakeLists.txt | 2 +- av/src/VideoEncoder.cc | 2 +- events/BUILD.bazel | 32 +++++++++---------- events/include/CMakeLists.txt | 2 +- geospatial/include/CMakeLists.txt | 2 +- graphics/BUILD.bazel | 22 ++++++------- graphics/include/CMakeLists.txt | 2 +- graphics/src/Image.cc | 2 +- include/CMakeLists.txt | 2 +- include/gz/common/SuppressWarning.hh | 6 ++-- profiler/BUILD.bazel | 16 +++++----- profiler/CMakeLists.txt | 4 +-- profiler/include/gz/common/Profiler.hh | 2 +- profiler/src/CMakeLists.txt | 8 ++--- profiler/src/Profiler.cc | 2 +- profiler/src/Remotery/gz_remotery_vis.in | 2 +- src/CMakeLists.txt | 6 ++-- src/Console.cc | 4 +-- src/Console_TEST.cc | 2 +- src/SystemPaths_TEST.cc | 2 +- src/TempDirectory_TEST.cc | 10 +++--- src/Util_TEST.cc | 6 ++-- test/integration/console.cc | 2 +- testing/include/CMakeLists.txt | 2 +- .../gz/common/testing/BazelTestPaths.hh | 2 +- testing/src/BazelTestPaths.cc | 7 ++-- tutorials.md.in | 4 +-- tutorials/install.md | 12 +++---- tutorials/profiler.md | 12 +++---- 40 files changed, 134 insertions(+), 140 deletions(-) diff --git a/.github/ci/packages.apt b/.github/ci/packages.apt index 7f937f3e6..6d3f9a812 100644 --- a/.github/ci/packages.apt +++ b/.github/ci/packages.apt @@ -5,9 +5,9 @@ libavutil-dev libfreeimage-dev libgdal-dev libgts-dev -libignition-cmake3-dev -libignition-math7-dev -libignition-utils2-dev +libgz-cmake3-dev +libgz-math7-dev +libgz-utils2-dev libswscale-dev libtinyxml2-dev pkg-config diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 124a1f014..955a64f35 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ jobs: uses: actions/checkout@v2 - name: Compile and test id: ci - uses: ignition-tooling/action-ignition-ci@focal + uses: gazebo-tooling/action-gz-ci@focal with: codecov-enabled: true jammy-ci: @@ -22,5 +22,4 @@ jobs: uses: actions/checkout@v2 - name: Compile and test id: ci - uses: ignition-tooling/action-ignition-ci@jammy - + uses: gazebo-tooling/action-gz-ci@jammy diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 0c1874153..e544a8c48 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -5,7 +5,7 @@ on: [push, pull_request] jobs: build: env: - PACKAGE: ignition-common5 + PACKAGE: gz-common5 runs-on: macos-latest steps: - uses: actions/checkout@v2 @@ -19,7 +19,7 @@ jobs: brew tap osrf/simulation; # check for ci_matching_branch brew install wget - wget https://github.com/ignition-tooling/release-tools/raw/master/jenkins-scripts/tools/detect_ci_matching_branch.py + wget https://github.com/gazebo-tooling/release-tools/raw/master/jenkins-scripts/tools/detect_ci_matching_branch.py TRY_BRANCH="${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" if python3 detect_ci_matching_branch.py ${TRY_BRANCH} then @@ -30,7 +30,7 @@ jobs: popd echo '# END SECTION' fi - # ignition-math7 has problems with swig, remove it for now + # gz-math7 has problems with swig, remove it for now brew remove swig || true brew install --only-dependencies ${PACKAGE}; - run: mkdir build diff --git a/.github/workflows/pr-collection-labeler.yml b/.github/workflows/pr-collection-labeler.yml index 7d7b4e179..38c4fc13b 100644 --- a/.github/workflows/pr-collection-labeler.yml +++ b/.github/workflows/pr-collection-labeler.yml @@ -8,6 +8,6 @@ jobs: steps: - name: Add collection labels if: github.event.action == 'opened' - uses: ignition-tooling/pr-collection-labeler@v1 + uses: gazebo-tooling/pr-collection-labeler@v1 with: github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/BUILD.bazel b/BUILD.bazel index f6e735667..e97f57bf6 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -1,23 +1,23 @@ load( "//gz_bazel:build_defs.bzl", - "IGNITION_FEATURES", - "IGNITION_ROOT", - "IGNITION_VISIBILITY", + "GZ_FEATURES", + "GZ_ROOT", + "GZ_VISIBILITY", "generate_include_header", "gz_config_header", "gz_export_header", ) package( - default_visibility = IGNITION_VISIBILITY, - features = IGNITION_FEATURES, + default_visibility = GZ_VISIBILITY, + features = GZ_FEATURES, ) licenses(["notice"]) exports_files(["LICENSE"]) -PROJECT_NAME = "ignition-common" +PROJECT_NAME = "gz-common" PROJECT_MAJOR = 5 @@ -36,8 +36,8 @@ gz_config_header( gz_export_header( name = "include/gz/common/Export.hh", - export_base = "IGNITION_COMMON", - lib_name = "ignition-common", + export_base = "GZ_COMMON", + lib_name = "gz-common", visibility = ["//visibility:private"], ) @@ -79,14 +79,14 @@ cc_library( linkopts = ["-ldl"], deps = [ "@uuid", - IGNITION_ROOT + "gz_math", + GZ_ROOT + "gz_math", ], ) cc_binary( - name = "libignition-common5.so", + name = "libgz-common5.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common5.so"], + linkopts = ["-Wl,-soname,libgz-common5.so"], linkshared = True, deps = [":gz_common"], ) @@ -99,11 +99,11 @@ test_srcs = glob( [cc_test( name = src.replace("/", "_").replace(".cc", "").replace("src_", ""), srcs = [src], - data = [":libignition-common5.so"], + data = [":libgz-common5.so"], deps = [ ":gz_common", - IGNITION_ROOT + "gz_bazel:utilities", - IGNITION_ROOT + "gz_common/test:test_utils", + GZ_ROOT + "gz_bazel:utilities", + GZ_ROOT + "gz_common/test:test_utils", "@gtest", "@gtest//:gtest_main", ], diff --git a/CMakeLists.txt b/CMakeLists.txt index 7436bf502..112e2fb75 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,9 +18,7 @@ set(GZ_CMAKE_VER ${gz-cmake3_VERSION_MAJOR}) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -gz_configure_project( - REPLACE_IGNITION_INCLUDE_PATH gz/common - VERSION_SUFFIX pre1) +gz_configure_project(VERSION_SUFFIX pre1) #============================================================================ # Set project-specific options @@ -29,7 +27,7 @@ gz_configure_project( # Option: Should Windows test symlinking? if(WIN32) option( - IGN_BUILD_SYMLINK_TESTS_ON_WINDOWS + GZ_BUILD_SYMLINK_TESTS_ON_WINDOWS "Creating symlinks requires special permissions on Windows, so those tests are disabled by default" false) endif() diff --git a/Changelog.md b/Changelog.md index a2a284d90..4c605c826 100644 --- a/Changelog.md +++ b/Changelog.md @@ -8,7 +8,7 @@ 1. Fix spelling in URI error message * [Pull request #333](https://github.com/gazebosim/gz-common/pull/333) -1. `ignLogInit` fails if run after console output +1. `gzLogInit` fails if run after console output * [Pull request #332](https://github.com/gazebosim/gz-common/pull/332) 1. Fix compatibility with FFmpeg 5.0 @@ -201,7 +201,7 @@ * [Pull request #58](https://github.com/gazebosim/gz-common/pull/58) 1. Corrected `BAYER_RGGR8` to `BAYER_BGGR8` in `PixelFormatName` and - `PixelFormatType` located in `graphics/include/ignition/common/Image.hh`. + `PixelFormatType` located in `graphics/include/gz/common/Image.hh`. * [BitBucket pull request 191](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/191) 1. Added URI Authority parsing to the URI class. Authority information can @@ -366,7 +366,7 @@ 1. Windows * Do not hardcode USE_EXTERNAL_TINYXML2 to OFF: [Pull Request 116](https://github.com/gazebosim/gz-common/pull/116) - * Fix IGN_HOMEDIR on Windows: [Pull Request 127](https://github.com/gazebosim/gz-common/pull/127) + * Fix GZ_HOMEDIR on Windows: [Pull Request 127](https://github.com/gazebosim/gz-common/pull/127) * Improve Windows support: [Pull Request 128](https://github.com/gazebosim/gz-common/pull/128) * Fix Windows AV CI warnings and test failures: [Pull Request 135](https://github.com/gazebosim/gz-common/pull/135) @@ -512,7 +512,7 @@ ## Gazebo Common 3.2.0 (2019-08-07) -1. Allow gzLogInit to use an absolute path. Added a timeToIso that converts a given time to an ISO string. Some console timestamps were using `IGN_SYSTEM_TIME_NS()` and others `gz::common::systemTimeISO()`. Switched all to use `gz::common::systemTimeISO()`. +1. Allow gzLogInit to use an absolute path. Added a timeToIso that converts a given time to an ISO string. Some console timestamps were using `GZ_SYSTEM_TIME_NS()` and others `gz::common::systemTimeISO()`. Switched all to use `gz::common::systemTimeISO()`. * [BitBucket pull request 203](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/203) 1. Port ColladaLoader fix: use default value of 1 for stride parameter when unset. @@ -574,7 +574,7 @@ * [BitBucket pull request 171](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/171) * [BitBucket pull request 172](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/172) -1. SystemPaths: search paths in `IGN_FILE_PATH` environment variable when finding files +1. SystemPaths: search paths in `GZ_FILE_PATH` environment variable when finding files * [BitBucket pull request 175](https://osrf-migration.github.io/ignition-gh-pages/#!/ignitionrobotics/ign-common/pull-requests/175) 1. `Time::Sleep`: return amount of time actually slept diff --git a/Migration.md b/Migration.md index e5277e10a..5fa2e3bdc 100644 --- a/Migration.md +++ b/Migration.md @@ -75,7 +75,7 @@ release will remove the deprecated code. ### Modifications 1. Corrected `BAYER_RGGR8` to `BAYER_BGGR8` in `PixelFormatName` and - `PixelFormatType` located in `graphics/include/ignition/common/Image.hh`. + `PixelFormatType` located in `graphics/include/gz/common/Image.hh`. 1. URI parsing has updated to follow the specification more closely when `URI::Authority` is set. Changes include: diff --git a/README.md b/README.md index dbd3ba4a9..9e7a20e39 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ callback system. * **Graphics**: Collada, SVG, STL, OBJ, and DEM loaders. In-memory mesh, image, and material representations. Animation processing and BVH loader. * **Profiler**: A common profiler abstraction that can be used to measure and - visualize run time of various pieces of ignition robotics software. + visualize run time of various pieces of Gazebo robotics software. # Install @@ -71,7 +71,7 @@ Refer to the following table for information about important directories and fil +-- events Header and source files for the Event component. +-- examples Example programs. +-- graphics Header and source files for the Graphics component. -+-- include/ignition/common Header files for the core component. ++-- include/gz/common Header files for the core component. +-- profiler Header and source files for the Profiler component. +-- src Core source files and unit tests. +-- test diff --git a/api.md.in b/api.md.in index 218f68573..bb345ae15 100644 --- a/api.md.in +++ b/api.md.in @@ -1,6 +1,6 @@ -## Gazebo @IGN_DESIGNATION_CAP@ +## Gazebo @GZ_DESIGNATION_CAP@ -Gazebo @IGN_DESIGNATION_CAP@ is a component in Gazebo, a set of libraries +Gazebo @GZ_DESIGNATION_CAP@ is a component in Gazebo, a set of libraries designed to rapidly develop robot and simulation applications. ## License diff --git a/av/BUILD.bazel b/av/BUILD.bazel index 0dbd77fc1..a2d74f5f2 100644 --- a/av/BUILD.bazel +++ b/av/BUILD.bazel @@ -1,13 +1,13 @@ load( "//gz_bazel:build_defs.bzl", - "IGNITION_ROOT", - "IGNITION_VISIBILITY", + "GZ_ROOT", + "GZ_VISIBILITY", "generate_include_header", "gz_export_header", ) package( - default_visibility = IGNITION_VISIBILITY, + default_visibility = GZ_VISIBILITY, features = [ "-parse_headers", "-layering_check", @@ -31,8 +31,8 @@ test_sources = glob(["src/*_TEST.cc"]) gz_export_header( name = "include/gz/common/av/Export.hh", - export_base = "IGNITION_COMMON_AV", - lib_name = "ignition-common-av", + export_base = "GZ_COMMON_AV", + lib_name = "gz-common-av", visibility = ["//visibility:private"], ) @@ -55,7 +55,7 @@ cc_library( hdrs = public_headers, includes = ["include"], deps = [ - IGNITION_ROOT + "gz_common", + GZ_ROOT + "gz_common", "@ffmpeg//:avcodec", "@ffmpeg//:avdevice", "@ffmpeg//:avformat", @@ -65,9 +65,9 @@ cc_library( ) cc_binary( - name = "libignition-common5-av.so", + name = "libgz-common5-av.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common5-av.so"], + linkopts = ["-Wl,-soname,libgz-common5-av.so"], linkshared = True, deps = [":av"], ) @@ -76,12 +76,12 @@ cc_binary( name = src.replace("/", "_").replace(".cc", "").replace("src_", ""), srcs = [src], data = [ - IGNITION_ROOT + "gz_common/test:data", + GZ_ROOT + "gz_common/test:data", ], deps = [ ":av", - IGNITION_ROOT + "gz_common/test:test_utils", - IGNITION_ROOT + "gz_bazel:utilities", + GZ_ROOT + "gz_common/test:test_utils", + GZ_ROOT + "gz_bazel:utilities", "@gtest", "@gtest//:gtest_main", ], diff --git a/av/include/CMakeLists.txt b/av/include/CMakeLists.txt index f16a51743..6a0cd1853 100644 --- a/av/include/CMakeLists.txt +++ b/av/include/CMakeLists.txt @@ -1,2 +1,2 @@ add_subdirectory(gz) -install(DIRECTORY ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL} PATTERN "HWEncoder\.hh" EXCLUDE) +install(DIRECTORY ignition DESTINATION ${GZ_INCLUDE_INSTALL_DIR_FULL} PATTERN "HWEncoder\.hh" EXCLUDE) diff --git a/av/src/VideoEncoder.cc b/av/src/VideoEncoder.cc index 27252011f..4f784b24d 100644 --- a/av/src/VideoEncoder.cc +++ b/av/src/VideoEncoder.cc @@ -228,7 +228,7 @@ bool VideoEncoder::Start(const std::string &_format, if (allowedEncoders != HWEncoderType::NONE) { gzwarn << "Hardware encoding with encoders " << allowedEncodersStr - << " was requested, but ignition-common is built without HW " + << " was requested, but gz-common is built without HW " << "encoding support. A software encoder will be used instead." << std::endl; } diff --git a/events/BUILD.bazel b/events/BUILD.bazel index a14b80429..792ccd8a1 100644 --- a/events/BUILD.bazel +++ b/events/BUILD.bazel @@ -1,13 +1,13 @@ load( "//gz_bazel:build_defs.bzl", - "IGNITION_ROOT", - "IGNITION_VISIBILITY", + "GZ_ROOT", + "GZ_VISIBILITY", "generate_include_header", "gz_export_header", ) package( - default_visibility = IGNITION_VISIBILITY, + default_visibility = GZ_VISIBILITY, features = [ "-parse_headers", "-layering_check", @@ -15,8 +15,8 @@ package( ) public_headers_no_gen = glob([ - "include/ignition/common/*.hh", - "include/ignition/common/events/*.hh", + "include/gz/common/*.hh", + "include/gz/common/events/*.hh", ]) sources = glob( @@ -27,23 +27,23 @@ sources = glob( test_sources = glob(["src/*_TEST.cc"]) gz_export_header( - name = "include/ignition/common/events/Export.hh", - export_base = "IGNITION_COMMON_EVENTS", - lib_name = "ignition-common-events", + name = "include/gz/common/events/Export.hh", + export_base = "GZ_COMMON_EVENTS", + lib_name = "gz-common-events", visibility = ["//visibility:private"], ) generate_include_header( name = "eventshh_genrule", - out = "include/ignition/common/events.hh", + out = "include/gz/common/events.hh", hdrs = public_headers_no_gen + [ - "include/ignition/common/events/Export.hh", + "include/gz/common/events/Export.hh", ], ) public_headers = public_headers_no_gen + [ - "include/ignition/common/events/Export.hh", - "include/ignition/common/events.hh", + "include/gz/common/events/Export.hh", + "include/gz/common/events.hh", ] cc_library( @@ -52,14 +52,14 @@ cc_library( hdrs = public_headers, includes = ["include"], deps = [ - IGNITION_ROOT + "gz_common", + GZ_ROOT + "gz_common", ], ) cc_binary( - name = "libignition-common5-events.so", + name = "libgz-common5-events.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common5-events.so"], + linkopts = ["-Wl,-soname,libgz-common5-events.so"], linkshared = True, deps = [":events"], ) @@ -69,7 +69,7 @@ cc_binary( srcs = [src], deps = [ ":events", - IGNITION_ROOT + "gz_common/test:test_utils", + GZ_ROOT + "gz_common/test:test_utils", "@gtest", "@gtest//:gtest_main", ], diff --git a/events/include/CMakeLists.txt b/events/include/CMakeLists.txt index 4b2bdd7bb..992a1312e 100644 --- a/events/include/CMakeLists.txt +++ b/events/include/CMakeLists.txt @@ -1,2 +1,2 @@ add_subdirectory(gz) -install(DIRECTORY ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) +install(DIRECTORY ignition DESTINATION ${GZ_INCLUDE_INSTALL_DIR_FULL}) diff --git a/geospatial/include/CMakeLists.txt b/geospatial/include/CMakeLists.txt index 4b2bdd7bb..992a1312e 100644 --- a/geospatial/include/CMakeLists.txt +++ b/geospatial/include/CMakeLists.txt @@ -1,2 +1,2 @@ add_subdirectory(gz) -install(DIRECTORY ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) +install(DIRECTORY ignition DESTINATION ${GZ_INCLUDE_INSTALL_DIR_FULL}) diff --git a/graphics/BUILD.bazel b/graphics/BUILD.bazel index f618fa92f..4e41cff36 100644 --- a/graphics/BUILD.bazel +++ b/graphics/BUILD.bazel @@ -1,13 +1,13 @@ load( "//gz_bazel:build_defs.bzl", - "IGNITION_ROOT", - "IGNITION_VISIBILITY", + "GZ_ROOT", + "GZ_VISIBILITY", "generate_include_header", "gz_export_header", ) package( - default_visibility = IGNITION_VISIBILITY, + default_visibility = GZ_VISIBILITY, features = [ "-parse_headers", "-layering_check", @@ -28,8 +28,8 @@ test_sources = glob(["src/*_TEST.cc"]) gz_export_header( name = "include/gz/common/graphics/Export.hh", - export_base = "IGNITION_COMMON_GRAPHICS", - lib_name = "ignition-common-graphics", + export_base = "GZ_COMMON_GRAPHICS", + lib_name = "gz-common-graphics", visibility = ["//visibility:private"], ) @@ -57,15 +57,15 @@ cc_library( "@glib", "@gts", "@tinyxml2", - IGNITION_ROOT + "gz_common", - IGNITION_ROOT + "gz_utils", + GZ_ROOT + "gz_common", + GZ_ROOT + "gz_utils", ], ) cc_binary( - name = "libignition-common5-graphics.so", + name = "libgz-common5-graphics.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common5-graphics.so"], + linkopts = ["-Wl,-soname,libgz-common5-graphics.so"], linkshared = True, deps = [":graphics"], ) @@ -74,11 +74,11 @@ cc_binary( name = src.replace("/", "_").replace(".cc", "").replace("src_", ""), srcs = [src], data = [ - IGNITION_ROOT + "gz_common/test:data", + GZ_ROOT + "gz_common/test:data", ], deps = [ ":graphics", - IGNITION_ROOT + "gz_common/test:test_utils", + GZ_ROOT + "gz_common/test:test_utils", "@gtest", "@gtest//:gtest_main", ], diff --git a/graphics/include/CMakeLists.txt b/graphics/include/CMakeLists.txt index 4b2bdd7bb..992a1312e 100644 --- a/graphics/include/CMakeLists.txt +++ b/graphics/include/CMakeLists.txt @@ -1,2 +1,2 @@ add_subdirectory(gz) -install(DIRECTORY ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) +install(DIRECTORY ignition DESTINATION ${GZ_INCLUDE_INSTALL_DIR_FULL}) diff --git a/graphics/src/Image.cc b/graphics/src/Image.cc index 237716191..653c958f3 100644 --- a/graphics/src/Image.cc +++ b/graphics/src/Image.cc @@ -145,7 +145,7 @@ int Image::Load(const std::string &_filename) } gzerr << "Unable to open image file[" << this->dataPtr->fullName - << "], check your IGNITION_RESOURCE_PATH settings.\n"; + << "], check your GZ_RESOURCE_PATH settings.\n"; return -1; } diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 4b2bdd7bb..992a1312e 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,2 +1,2 @@ add_subdirectory(gz) -install(DIRECTORY ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) +install(DIRECTORY ignition DESTINATION ${GZ_INCLUDE_INSTALL_DIR_FULL}) diff --git a/include/gz/common/SuppressWarning.hh b/include/gz/common/SuppressWarning.hh index c886957fb..4a1b3c9d4 100644 --- a/include/gz/common/SuppressWarning.hh +++ b/include/gz/common/SuppressWarning.hh @@ -35,13 +35,13 @@ * Usage example: * * SomeClass* ptr = CreatePtr(); - * IGN_COMMON_WARN_IGNORE__DELETE_NON_VIRTUAL_DESTRUCTOR + * GZ_COMMON_WARN_IGNORE__DELETE_NON_VIRTUAL_DESTRUCTOR * delete ptr; - * IGN_COMMON_WARN_RESUME__DELETE_NON_VIRTUAL_DESTRUCTOR + * GZ_COMMON_WARN_RESUME__DELETE_NON_VIRTUAL_DESTRUCTOR * */ -// Be sure to call the IGN_COMMON_WARN_RESUME__XXXXX macro at the end of the +// Be sure to call the GZ_COMMON_WARN_RESUME__XXXXX macro at the end of the // block of code where the warning suppression is needed. Otherwise, you might // inadvertently suppress legitimate warnings. diff --git a/profiler/BUILD.bazel b/profiler/BUILD.bazel index 6a382ad91..6a39767d9 100644 --- a/profiler/BUILD.bazel +++ b/profiler/BUILD.bazel @@ -1,14 +1,14 @@ load( "//gz_bazel:build_defs.bzl", - "IGNITION_ROOT", - "IGNITION_VISIBILITY", + "GZ_ROOT", + "GZ_VISIBILITY", "cmake_configure_file", "generate_include_header", "gz_export_header", ) package( - default_visibility = IGNITION_VISIBILITY, + default_visibility = GZ_VISIBILITY, features = [ "-parse_headers", "-layering_check", @@ -55,8 +55,8 @@ cmake_configure_file( gz_export_header( name = "include/gz/common/profiler/Export.hh", - export_base = "IGNITION_COMMON_PROFILER", - lib_name = "ignition-common-profiler", + export_base = "GZ_COMMON_PROFILER", + lib_name = "gz-common-profiler", visibility = ["//visibility:private"], ) @@ -94,15 +94,15 @@ cc_library( ], includes = ["include"], deps = [ - IGNITION_ROOT + "gz_common", + GZ_ROOT + "gz_common", ":remotery", ], ) cc_binary( - name = "libignition-common5-profiler.so", + name = "libgz-common5-profiler.so", includes = ["include"], - linkopts = ["-Wl,-soname,libignition-common5-profiler.so"], + linkopts = ["-Wl,-soname,libgz-common5-profiler.so"], linkshared = True, deps = [":profiler"], ) diff --git a/profiler/CMakeLists.txt b/profiler/CMakeLists.txt index 3eb7edf1b..1cd39f952 100644 --- a/profiler/CMakeLists.txt +++ b/profiler/CMakeLists.txt @@ -3,8 +3,8 @@ add_subdirectory(src) install( DIRECTORY include/ignition - DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) + DESTINATION ${GZ_INCLUDE_INSTALL_DIR_FULL}) install( DIRECTORY include/gz - DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) + DESTINATION ${GZ_INCLUDE_INSTALL_DIR_FULL}) diff --git a/profiler/include/gz/common/Profiler.hh b/profiler/include/gz/common/Profiler.hh index 435dcf32c..4ee84b2b1 100644 --- a/profiler/include/gz/common/Profiler.hh +++ b/profiler/include/gz/common/Profiler.hh @@ -42,7 +42,7 @@ namespace gz /// but instead use the profiling macros, which can be enabled/disabled /// at compile time, which eliminates any performance impact of profiling. /// - /// Profiler is enabled by setting IGN_ENABLE_PROFILER at compile time. + /// Profiler is enabled by setting GZ_ENABLE_PROFILER at compile time. /// /// The profiler header also exports several convenience macros to make /// adding inspection points easier. diff --git a/profiler/src/CMakeLists.txt b/profiler/src/CMakeLists.txt index 440bbc2b6..5ce8887e4 100644 --- a/profiler/src/CMakeLists.txt +++ b/profiler/src/CMakeLists.txt @@ -103,14 +103,14 @@ endif() if(GZ_PROFILER_REMOTERY) set(GZ_PROFILER_SCRIPT_PATH ${CMAKE_INSTALL_LIBEXECDIR}/gz/gz-common${PROJECT_VERSION_MAJOR}) - set(GZ_PROFILER_VIS_PATH ${IGN_DATA_INSTALL_DIR}/profiler_vis) + set(GZ_PROFILER_VIS_PATH ${GZ_DATA_INSTALL_DIR}/profiler_vis) - configure_file(Remotery/ign_remotery_vis.in - ${CMAKE_CURRENT_BINARY_DIR}/ign_remotery_vis + configure_file(Remotery/gz_remotery_vis.in + ${CMAKE_CURRENT_BINARY_DIR}/gz_remotery_vis @ONLY) install(PROGRAMS - ${CMAKE_CURRENT_BINARY_DIR}/ign_remotery_vis + ${CMAKE_CURRENT_BINARY_DIR}/gz_remotery_vis DESTINATION ${GZ_PROFILER_SCRIPT_PATH}) install(DIRECTORY Remotery/vis/ diff --git a/profiler/src/Profiler.cc b/profiler/src/Profiler.cc index 3d072bf3a..18b4bb7ef 100644 --- a/profiler/src/Profiler.cc +++ b/profiler/src/Profiler.cc @@ -41,7 +41,7 @@ Profiler::Profiler(): } else { - gzdbg << "Ignition profiling with: " << impl->Name() << std::endl; + gzdbg << "Gazebo profiling with: " << impl->Name() << std::endl; } } diff --git a/profiler/src/Remotery/gz_remotery_vis.in b/profiler/src/Remotery/gz_remotery_vis.in index 1cfc160e0..53f382410 100755 --- a/profiler/src/Remotery/gz_remotery_vis.in +++ b/profiler/src/Remotery/gz_remotery_vis.in @@ -1,6 +1,6 @@ #!/usr/bin/env bash -SCRIPT_PATH=@GZ_PROFILER_SCRIPT_PATH@/ign_remotery_vis +SCRIPT_PATH=@GZ_PROFILER_SCRIPT_PATH@/gz_remotery_vis VIS_PATH=@GZ_PROFILER_VIS_PATH@/index.html # Get the full path to this script diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0987b505e..1f0b36995 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -61,20 +61,20 @@ endif() if(TARGET UNIT_PluginLoader_TEST) target_compile_definitions(UNIT_PluginLoader_TEST PRIVATE - "IGN_COMMON_LIB_PATH=\"$<TARGET_FILE_DIR:${PROJECT_LIBRARY_TARGET_NAME}>\"") + "GZ_COMMON_LIB_PATH=\"$<TARGET_FILE_DIR:${PROJECT_LIBRARY_TARGET_NAME}>\"") endif() # Produce warning on Windows if the user has decided to turn on the symlink # tests. In order for those tests to work, they will need to run the tests in # administrative mode, or use some other workaround. if(WIN32) - if(IGN_BUILD_SYMLINK_TESTS_ON_WINDOWS) + if(GZ_BUILD_SYMLINK_TESTS_ON_WINDOWS) message(STATUS "") message(STATUS "You have opted to enable symlink tests on a Windows platform.") message(STATUS "The test UNIT_Filesystem_TEST will require elevated privileges") message(STATUS "in order to succeed. For more information, see the issue") message(STATUS "https://github.com/gazebosim/gz-common/issues/21") message(STATUS "") - target_compile_definitions(UNIT_Filesystem_TEST PRIVATE IGN_BUILD_SYMLINK_TESTS_ON_WINDOWS) + target_compile_definitions(UNIT_Filesystem_TEST PRIVATE GZ_BUILD_SYMLINK_TESTS_ON_WINDOWS) endif() endif() diff --git a/src/Console.cc b/src/Console.cc index c3a8cbd71..12621a7bd 100644 --- a/src/Console.cc +++ b/src/Console.cc @@ -304,7 +304,7 @@ void FileLogger::Close() FileLogger &FileLogger::operator()() { if (!this->initialized) - this->Init(".ignition", "auto_default.log"); + this->Init(".gz", "auto_default.log"); (*this) << "(" << gz::common::systemTimeIso() << ") "; return (*this); @@ -314,7 +314,7 @@ FileLogger &FileLogger::operator()() FileLogger &FileLogger::operator()(const std::string &_file, int _line) { if (!this->initialized) - this->Init(".ignition", "auto_default.log"); + this->Init(".gz", "auto_default.log"); int index = _file.find_last_of("/") + 1; (*this) << "(" << gz::common::systemTimeIso() << ") [" diff --git a/src/Console_TEST.cc b/src/Console_TEST.cc index 0e1bcc87a..303cc955a 100644 --- a/src/Console_TEST.cc +++ b/src/Console_TEST.cc @@ -79,7 +79,7 @@ TEST_F(Console_TEST, NoInitAndLog) gzlog << logString << std::endl; // Get the absolute log file path - std::string logPath = ".ignition/auto_default.log"; + std::string logPath = ".gz/auto_default.log"; // Expect to find the string in the log file EXPECT_TRUE(GetLogContent(logPath).find(logString) != std::string::npos); diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index a237de813..1bb2c8e57 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -283,7 +283,7 @@ TEST_F(SystemPathsFixture, FindFileURI) EXPECT_EQ(file1, sp.FindFileURI("anything://test_f1")); EXPECT_NE(file2, sp.FindFileURI("anything://test_f2")); - std::string newEnv{"IGN_NEW_FILE_PATH"}; + std::string newEnv{"GZ_NEW_FILE_PATH"}; common::setenv(newEnv, dir2); sp.SetFilePathEnv(newEnv); EXPECT_EQ(newEnv, sp.FilePathEnv()); diff --git a/src/TempDirectory_TEST.cc b/src/TempDirectory_TEST.cc index 4f8393cb5..fe9c1056e 100644 --- a/src/TempDirectory_TEST.cc +++ b/src/TempDirectory_TEST.cc @@ -68,7 +68,7 @@ TEST(TempDirectory, TempDirectory) std::string path; auto curDir = gz::common::cwd(); { - gz::common::TempDirectory tmp("temp_dir", "ignition", true); + gz::common::TempDirectory tmp("temp_dir", "gz", true); EXPECT_TRUE(tmp.Valid()); EXPECT_TRUE(tmp.DoCleanup()); // Current directory changed to tempdir @@ -90,7 +90,7 @@ TEST(TempDirectory, TempDirectoryRoot) auto curDir = gz::common::cwd(); { auto p = gz::common::tempDirectoryPath(); - gz::common::TempDirectory tmp(p, "temp_dir", "ignition", true); + gz::common::TempDirectory tmp(p, "temp_dir", "gz", true); EXPECT_TRUE(tmp.Valid()); EXPECT_TRUE(tmp.DoCleanup()); EXPECT_NE(curDir, gz::common::cwd()); @@ -110,7 +110,7 @@ TEST(TempDirectory, TempDirectoryEmptyRoot) std::string path; auto curDir = gz::common::cwd(); { - gz::common::TempDirectory tmp("", "temp_dir", "ignition", true); + gz::common::TempDirectory tmp("", "temp_dir", "gz", true); EXPECT_FALSE(tmp.Valid()); EXPECT_TRUE(tmp.DoCleanup()); // Since not successfully created, no update @@ -129,7 +129,7 @@ TEST(TempDirectory, TempDirectoryNoClean) std::string path; auto curDir = gz::common::cwd(); { - gz::common::TempDirectory tmp("temp_dir", "ignition", false); + gz::common::TempDirectory tmp("temp_dir", "gz", false); EXPECT_TRUE(tmp.Valid()); EXPECT_FALSE(tmp.DoCleanup()); EXPECT_NE(curDir, gz::common::cwd()); @@ -150,7 +150,7 @@ TEST(TempDirectory, TempDirectoryNoCleanLater) std::string path; auto curDir = gz::common::cwd(); { - gz::common::TempDirectory tmp("temp_dir", "ignition", true); + gz::common::TempDirectory tmp("temp_dir", "gz", true); EXPECT_TRUE(tmp.Valid()); EXPECT_TRUE(tmp.DoCleanup()); EXPECT_NE(curDir, gz::common::cwd()); diff --git a/src/Util_TEST.cc b/src/Util_TEST.cc index 453ec1930..041c615de 100644 --- a/src/Util_TEST.cc +++ b/src/Util_TEST.cc @@ -175,7 +175,7 @@ TEST(Util_TEST, emptyENV) ///////////////////////////////////////////////// TEST(Util_TEST, envSet) { - const auto key = "IGN_ENV_SET"; + const auto key = "GZ_ENV_SET"; ASSERT_TRUE(common::setenv(key, "VALUE")); // Check set var @@ -208,7 +208,7 @@ TEST(Util_TEST, envSet) ///////////////////////////////////////////////// TEST(Util_TEST, envUnset) { - const auto key = "IGN_ENV_UNSET"; + const auto key = "GZ_ENV_UNSET"; ASSERT_TRUE(common::unsetenv(key)); // Check unset var (default) @@ -237,7 +237,7 @@ TEST(Util_TEST, envUnset) ///////////////////////////////////////////////// TEST(Util_TEST, envSetEmpty) { - const auto key = "IGN_ENV_SET_EMPTY"; + const auto key = "GZ_ENV_SET_EMPTY"; ASSERT_TRUE(common::setenv(key, "")); ASSERT_FALSE(common::setenv("", "")); diff --git a/test/integration/console.cc b/test/integration/console.cc index cd0050898..fb1f0d500 100644 --- a/test/integration/console.cc +++ b/test/integration/console.cc @@ -41,7 +41,7 @@ TEST(Console_TEST, LogInitAfterConsoleOut) { auto defaultPath = gz::common::joinPaths(home, - ".ignition", "auto_default.log"); + ".gz", "auto_default.log"); std::ifstream t(defaultPath); std::string buffer((std::istreambuf_iterator<char>(t)), diff --git a/testing/include/CMakeLists.txt b/testing/include/CMakeLists.txt index 4b2bdd7bb..992a1312e 100644 --- a/testing/include/CMakeLists.txt +++ b/testing/include/CMakeLists.txt @@ -1,2 +1,2 @@ add_subdirectory(gz) -install(DIRECTORY ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) +install(DIRECTORY ignition DESTINATION ${GZ_INCLUDE_INSTALL_DIR_FULL}) diff --git a/testing/include/gz/common/testing/BazelTestPaths.hh b/testing/include/gz/common/testing/BazelTestPaths.hh index 86440fb78..003c8989f 100644 --- a/testing/include/gz/common/testing/BazelTestPaths.hh +++ b/testing/include/gz/common/testing/BazelTestPaths.hh @@ -32,7 +32,7 @@ namespace gz::common::testing /// /// The main mechanism for detecting a bazel build is via the presence of the /// TEST_SRCDIR and TEST_UNDECLARED_OUTPUTS_DIR environment variables. -/// Additionally, tests built via ign-bazel should set IGN_BAZEL_DIR. +/// Additionally, tests built via gz-bazel should set GZ_BAZEL_DIR. /// /// For source files to be available for bazel builds, they need to be set in /// the "data" section of the relevant cc_library or cc_test call. diff --git a/testing/src/BazelTestPaths.cc b/testing/src/BazelTestPaths.cc index 531d97ed1..fdf55e33d 100644 --- a/testing/src/BazelTestPaths.cc +++ b/testing/src/BazelTestPaths.cc @@ -32,11 +32,9 @@ bool BazelTestPaths::ProjectSourcePath(std::string &_sourceDir) std::string test_srcdir, bazel_path; if (common::env("TEST_SRCDIR", test_srcdir) && - common::env("IGN_BAZEL_PATH", bazel_path)) + common::env("GZ_BAZEL_PATH", bazel_path)) { - _sourceDir = gz::common::joinPaths(test_srcdir, - "ignition", - bazel_path); + _sourceDir = gz::common::joinPaths(test_srcdir, "gz", bazel_path); return true; } else @@ -52,4 +50,3 @@ bool BazelTestPaths::TestTmpPath(std::string &_tmpDir) } } // namespace gz::common::testing - diff --git a/tutorials.md.in b/tutorials.md.in index 3ab8c2498..340a35c9f 100644 --- a/tutorials.md.in +++ b/tutorials.md.in @@ -1,8 +1,8 @@ \page tutorials Tutorials -Welcome to the Gazebo @IGN_DESIGNATION_CAP@ tutorials. These tutorials +Welcome to the Gazebo @GZ_DESIGNATION_CAP@ tutorials. These tutorials will guide you through the process of understanding the capabilities of the -Gazebo @IGN_DESIGNATION_CAP@ library and how to use the library effectively. +Gazebo @GZ_DESIGNATION_CAP@ library and how to use the library effectively. **The tutorials** diff --git a/tutorials/install.md b/tutorials/install.md index ab0e3d8df..0a0176fa3 100644 --- a/tutorials/install.md +++ b/tutorials/install.md @@ -15,7 +15,7 @@ The Source Installation instructions should be used if you need the very latest On Ubuntu systems, `apt-get` can be used to install `gz-common`: ``` -sudo apt install libignition-common<#>-dev +sudo apt install libgz-common<#>-dev ``` Be sure to replace `<#>` with a number value, such as 2 or 3, depending on @@ -31,7 +31,7 @@ On macOS, add OSRF packages: Install Gazebo Common: ``` - brew install ignition-common<#> + brew install gz-common<#> ``` Be sure to replace `<#>` with a number value, such as 3 or 4, depending on @@ -50,7 +50,7 @@ conda activate gz-ws Install `gz-common`: ``` -conda install libignition-common<#> --channel conda-forge +conda install libgz-common<#> --channel conda-forge ``` Be sure to replace `<#>` with a number value, such as 2 or 3, depending on @@ -101,12 +101,12 @@ Install Gazebo dependencies: You can view available versions and their dependencies: ``` -conda search libignition-common* --channel conda-forge --info +conda search libgz-common* --channel conda-forge --info ``` Install dependencies, replacing `<#>` with the desired versions: ``` -conda install libignition-cmake<#> libignition-math<#> --channel conda-forge +conda install libgz-cmake<#> libgz-math<#> --channel conda-forge ``` ## Build from Source @@ -143,7 +143,7 @@ conda install libignition-cmake<#> libignition-math<#> --channel conda-forge 2. Install dependencies ``` - brew install --only-dependencies ignition-common<#> + brew install --only-dependencies gz-common<#> ``` Be sure to replace `<#>` with a number value, such as 3 or 4, depending on which version you need. diff --git a/tutorials/profiler.md b/tutorials/profiler.md index e4e3d4e5c..9c9bf19d2 100644 --- a/tutorials/profiler.md +++ b/tutorials/profiler.md @@ -88,10 +88,10 @@ From terminal 2, open the visualizer using one of the following commands ```{.sh} # Find the launcher script and use it (Linux and macOS) -find /usr | grep ign_remotery_vis +find /usr | grep gz_remotery_vis ... -/usr/<path_to>/ign_remotery_vis +/usr/<path_to>/gz_remotery_vis # Use the source path (Linux) # Substitute the path to your gz-common source checkout @@ -99,10 +99,10 @@ xdg-open $SOURCE_DIR/gz-common/profiler/src/Remotery/vis/index.html # Use the installation path (Linux) # This may vary depending on where you have choosen to install -xdg-open /usr/share/ignition/ignition-common5/profiler_vis/index.html +xdg-open /usr/share/gz/gz-common5/profiler_vis/index.html # Use the installation path (macOS) -open /usr/share/ignition/ignition-common5/profiler_vis/index.html +open /usr/share/gz/gz-common5/profiler_vis/index.html ``` ### On Gazebo library @@ -118,9 +118,9 @@ When compiling with ``colcon``: colcon build --cmake-args -DENABLE_PROFILER=1 ``` -Run your Gazebo library then go to your ignition installation path and open the profiler browser using: +Run your Gazebo library then go to your Gazebo installation path and open the profiler browser using: ``` -libexec/gz/gz-common<N>/ign_remotery_vis +libexec/gz/gz-common<N>/gz_remotery_vis ``` If the profiler is run successfully, you should see output in a browser. Similar to this From d79559304538c1fe381764da1862364187fc75ab Mon Sep 17 00:00:00 2001 From: methylDragon <methylDragon@gmail.com> Date: Wed, 20 Jul 2022 09:06:29 -0700 Subject: [PATCH 182/219] Finale: Source hard-tocks (#395) Signed-off-by: methylDragon <methylDragon@gmail.com> --- src/Console_TEST.cc | 2 +- src/Filesystem_TEST.cc | 2 +- src/PluginLoader_TEST.cc | 2 +- src/SystemPaths_TEST.cc | 2 +- testing/include/gz/common/testing/TestPaths.hh | 2 +- .../gz/common/testing/detail/AutoLogFixture.hh | 3 +-- testing/src/TestPaths.cc | 12 ++++++------ 7 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/Console_TEST.cc b/src/Console_TEST.cc index 303cc955a..097d7d6b9 100644 --- a/src/Console_TEST.cc +++ b/src/Console_TEST.cc @@ -32,7 +32,7 @@ class Console_TEST : public ::testing::Test { protected: virtual void SetUp() { this->temp = std::make_unique<TempDirectory>( - "test", "ign_common", true); + "test", "gz_common", true); ASSERT_TRUE(this->temp->Valid()); common::setenv(GZ_HOMEDIR, this->temp->Path()); } diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index cd3a90da7..c3196d7a5 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -43,7 +43,7 @@ namespace fs = std::filesystem; class TestTempDirectory : public TempDirectory { public: TestTempDirectory(): - TempDirectory("filesystem", "ign_common", true) + TempDirectory("filesystem", "gz_common", true) { } }; diff --git a/src/PluginLoader_TEST.cc b/src/PluginLoader_TEST.cc index 4726e9f8b..f6cfa26b6 100644 --- a/src/PluginLoader_TEST.cc +++ b/src/PluginLoader_TEST.cc @@ -34,7 +34,7 @@ class TestTempDirectory : public gz::common::TempDirectory { public: TestTempDirectory(): - gz::common::TempDirectory("plugin_loader", "ign_common", true) + gz::common::TempDirectory("plugin_loader", "gz_common", true) { } }; diff --git a/src/SystemPaths_TEST.cc b/src/SystemPaths_TEST.cc index c5660dc29..06a56c770 100644 --- a/src/SystemPaths_TEST.cc +++ b/src/SystemPaths_TEST.cc @@ -40,7 +40,7 @@ const char kFilePath[] = "GZ_FILE_PATH"; class TestTempDirectory : public gz::common::TempDirectory { public: TestTempDirectory(): - gz::common::TempDirectory("systempaths", "ign_common", true) + gz::common::TempDirectory("systempaths", "gz_common", true) { } }; diff --git a/testing/include/gz/common/testing/TestPaths.hh b/testing/include/gz/common/testing/TestPaths.hh index 1e075d97d..caa0d811a 100644 --- a/testing/include/gz/common/testing/TestPaths.hh +++ b/testing/include/gz/common/testing/TestPaths.hh @@ -39,7 +39,7 @@ namespace gz::common::testing /// /// For CMake builds, it is expected that this is injected via a /// buildsystem define of TESTING_PROJECT_SOURCE_DIR. -/// This is done automatically for tests using gz-cmake's ign_build_tests +/// This is done automatically for tests using gz-cmake's gz_build_tests /// /// For Bazel builds, it is expected to be empty constexpr char kTestingProjectSourceDir[] = TESTING_PROJECT_SOURCE_DIR; diff --git a/testing/include/gz/common/testing/detail/AutoLogFixture.hh b/testing/include/gz/common/testing/detail/AutoLogFixture.hh index 4126da5fb..c986cd351 100644 --- a/testing/include/gz/common/testing/detail/AutoLogFixture.hh +++ b/testing/include/gz/common/testing/detail/AutoLogFixture.hh @@ -75,7 +75,7 @@ void AutoLogFixture::SetUp() '/', '_'); this->dataPtr->temp = std::make_unique<TempDirectory>( - "test", "ign_common", true); + "test", "gz_common", true); ASSERT_TRUE(this->dataPtr->temp->Valid()); common::setenv(GZ_HOMEDIR, this->dataPtr->temp->Path()); @@ -121,4 +121,3 @@ std::string AutoLogFixture::LogContent() const } // namespace gz::common::testing #endif // GZ_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ - diff --git a/testing/src/TestPaths.cc b/testing/src/TestPaths.cc index 134fa77d1..af6cd036e 100644 --- a/testing/src/TestPaths.cc +++ b/testing/src/TestPaths.cc @@ -35,18 +35,18 @@ TestPaths::~TestPaths() = default; ////////////////////////////////////////////////// BuildType TestBuildType(const std::string &_projectSourcePath) { - std::string ign_bazel; - bool ign_bazel_set = common::env("IGN_BAZEL", ign_bazel); - bool ign_cmake_set = !_projectSourcePath.empty(); + std::string gz_bazel; + bool gz_bazel_set = common::env("GZ_BAZEL", gz_bazel); + bool gz_cmake_set = !_projectSourcePath.empty(); - if (ign_bazel_set && ign_cmake_set) + if (gz_bazel_set && gz_cmake_set) { gzwarn << "Detected settings from Bazel and CMake, preferring CMake\n"; } - if (ign_cmake_set) + if (gz_cmake_set) return BuildType::kCMake; - else if (ign_bazel_set) + else if (gz_bazel_set) return BuildType::kBazel; else return BuildType::kUnknown; From 4136c0a4f52edc1d2e24932e5214de29ebe900d3 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Wed, 20 Jul 2022 14:03:58 -0700 Subject: [PATCH 183/219] Remove deprecated include (#400) Signed-off-by: Louise Poubel <louise@openrobotics.org> --- src/CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1f0b36995..d14341b9d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -22,11 +22,6 @@ target_link_libraries(${PROJECT_LIBRARY_TARGET_NAME} gz-utils${GZ_UTILS_VER}::gz-utils${GZ_UTILS_VER} ) -# This is required by the WorkerPool::WaitForResults(const Time &_timeout) -# TODO(anyone): GZ_DEPRECATED(4). Remove this part when the method is removed -target_include_directories(${PROJECT_LIBRARY_TARGET_NAME} PRIVATE - ${gz-math${GZ_MATH_VER}_INCLUDE_DIRS}) - # Handle non-Windows configuration settings if(NOT WIN32) # Link the libraries that we don't expect to find on Windows From 17e2c6ae0a0ef5d158c99bce9eb0220a2bfb4906 Mon Sep 17 00:00:00 2001 From: Aditya Pande <aditya050995@gmail.com> Date: Thu, 21 Jul 2022 13:34:46 -0700 Subject: [PATCH 184/219] Support lunar coordinate transformations (#377) * Expose method to set spherical coordinates, added transformation logic for moon and custom surfaces. Signed-off-by: Aditya <aditya050995@gmail.com> --- .../include/gz/common/geospatial/Dem.hh | 22 ++--- geospatial/src/Dem.cc | 94 ++++++++++++------- geospatial/src/Dem_TEST.cc | 44 +++++++-- 3 files changed, 105 insertions(+), 55 deletions(-) diff --git a/geospatial/include/gz/common/geospatial/Dem.hh b/geospatial/include/gz/common/geospatial/Dem.hh index 3933441d3..ac4efd4b9 100644 --- a/geospatial/include/gz/common/geospatial/Dem.hh +++ b/geospatial/include/gz/common/geospatial/Dem.hh @@ -23,6 +23,7 @@ #include <gz/math/Vector3.hh> #include <gz/math/Angle.hh> +#include <gz/math/SphericalCoordinates.hh> #include <gz/common/geospatial/Export.hh> #include <gz/common/geospatial/HeightmapData.hh> @@ -44,21 +45,18 @@ namespace gz /// \brief Destructor. public: virtual ~Dem(); + /// \brief Sets the spherical coordinates reference object. + /// \param[in] _worldSphericalCoordinates The spherical coordiantes + /// object contained in the world. This is used to compute accurate + /// sizes of the DEM object. + public: void SetSphericalCoordinates( + const math::SphericalCoordinates &_worldSphericalCoordinates); + /// \brief Load a DEM file. /// \param[in] _filename the path to the terrain file. /// \return 0 when the operation succeeds to open a file. public: int Load(const std::string &_filename = ""); - /// \brief Indicate that this is a non Earth DEM. - /// \param[in] _isNonEarthDem Should be true if this is a - /// non earth DEM, otherwise false. - public: void SetNonEarthDEM(bool _isNonEarthDem); - - /// \brief Check if the loaded DEM is not from the Earth. - /// \return True if the loaded DEM is from the Earth, otherwise - /// returns False. - public: bool GetNonEarthDEM(); - /// \brief Get the elevation of a terrain's point in meters. /// \param[in] _x X coordinate of the terrain. /// \param[in] _y Y coordinate of the terrain. @@ -75,7 +73,7 @@ namespace gz public: float MaxElevation() const override; /// \brief Get the georeferenced coordinates (lat, long) of the terrain's - /// origin in WGS84. + /// origin. /// \param[out] _latitude Georeferenced latitude. /// \param[out] _longitude Georeferenced longitude. /// \return True if able to retrieve origin coordinates. False otherwise. @@ -126,7 +124,7 @@ namespace gz std::vector<float> &_heights) const override; /// \brief Get the georeferenced coordinates (lat, long) of a terrain's - /// pixel in WGS84. + /// pixel. /// \param[in] _x X coordinate of the terrain. /// \param[in] _y Y coordinate of the terrain. /// \param[out] _latitude Georeferenced latitude. diff --git a/geospatial/src/Dem.cc b/geospatial/src/Dem.cc index d847d9bf5..4595f3baa 100644 --- a/geospatial/src/Dem.cc +++ b/geospatial/src/Dem.cc @@ -22,7 +22,6 @@ #include "gz/common/Console.hh" #include "gz/common/geospatial/Dem.hh" -#include "gz/math/SphericalCoordinates.hh" using namespace gz; using namespace common; @@ -59,10 +58,14 @@ class gz::common::Dem::Implementation /// \brief Full filename used to load the dem. public: std::string filename; - /// \brief Whether the DEM will be handled as from non-Earth. + /// \brief Whether the DEM will be handled as unknown. /// If true, worldWidth & worldHeight = -1 /// and GeoReference[Origin] can not be used (will return false) - public: bool isNonEarthDem = false; + public: bool isUnknownDem = false; + + /// \brief Holds the spherical coordinates object from the world. + public: math::SphericalCoordinates sphericalCoordinates = + math::SphericalCoordinates(); }; ////////////////////////////////////////////////// @@ -83,15 +86,10 @@ Dem::~Dem() } ////////////////////////////////////////////////// -void Dem::SetNonEarthDEM(bool _isNonEarthDem) -{ - this->dataPtr->isNonEarthDem = _isNonEarthDem; -} - -////////////////////////////////////////////////// -bool Dem::GetNonEarthDEM() +void Dem::SetSphericalCoordinates( + const math::SphericalCoordinates &_worldSphericalCoordinates) { - return this->dataPtr->isNonEarthDem; + this->dataPtr->sphericalCoordinates =_worldSphericalCoordinates; } ////////////////////////////////////////////////// @@ -157,21 +155,20 @@ int Dem::Load(const std::string &_filename) { // If successful, set the world width and height this->dataPtr->worldWidth = - math::SphericalCoordinates::DistanceWGS84(upLeftLat, upLeftLong, - upRightLat, upRightLong); + this->dataPtr->sphericalCoordinates.DistanceBetweenPoints( + upLeftLat, upLeftLong, upRightLat, upRightLong); this->dataPtr->worldHeight = - math::SphericalCoordinates::DistanceWGS84(upLeftLat, upLeftLong, - lowLeftLat, lowLeftLong); + this->dataPtr->sphericalCoordinates.DistanceBetweenPoints( + upLeftLat, upLeftLong, lowLeftLat, lowLeftLong); } - // Assume non-Earth DEM (e.g., moon) + // Assume unknown DEM. else { gzwarn << "Failed to automatically compute DEM size. " - << "Assuming non-Earth DEM. " << std::endl; this->dataPtr->worldWidth = this->dataPtr->worldHeight = -1; - this->dataPtr->isNonEarthDem = true; + this->dataPtr->isUnknownDem = true; } // Set the terrain's side (the terrain will be squared after the padding) @@ -275,9 +272,9 @@ float Dem::MaxElevation() const bool Dem::GeoReference(double _x, double _y, gz::math::Angle &_latitude, gz::math::Angle &_longitude) const { - if (this->dataPtr->isNonEarthDem) + if (this->dataPtr->isUnknownDem) { - gzerr << "Can not retrieve WGS84 coordinates from non-Earth DEM." + gzerr << "Can not retrieve coordinates from unknown DEM." << std::endl; return false; } @@ -285,25 +282,52 @@ bool Dem::GeoReference(double _x, double _y, double geoTransf[6]; if (this->dataPtr->dataSet->GetGeoTransform(geoTransf) == CE_None) { + OGRCoordinateTransformation *cT = nullptr; + double xGeoDeg, yGeoDeg; OGRSpatialReference sourceCs; OGRSpatialReference targetCs; - OGRCoordinateTransformation *cT; - double xGeoDeg, yGeoDeg; - // Transform the terrain's coordinate system to WGS84 - const char *importString - = strdup(this->dataPtr->dataSet->GetProjectionRef()); - if (importString == nullptr || importString[0] == '\0') + if (this->dataPtr->sphericalCoordinates.Surface() == + math::SphericalCoordinates::EARTH_WGS84) { - gzdbg << "Projection coordinate system undefined." << std::endl; - return false; + // Transform the terrain's coordinate system to WGS84 + const char *importString + = strdup(this->dataPtr->dataSet->GetProjectionRef()); + if (importString == nullptr || importString[0] == '\0') + { + // LCOV_EXCL_START + gzdbg << "Projection coordinate system undefined." << std::endl; + return false; + // LCOV_EXCL_STOP + } + sourceCs.importFromWkt(&importString); + targetCs.SetWellKnownGeogCS("WGS84"); } - sourceCs.importFromWkt(&importString); - targetCs.SetWellKnownGeogCS("WGS84"); + else if ((this->dataPtr->sphericalCoordinates.Surface() == + math::SphericalCoordinates::CUSTOM_SURFACE) || + (this->dataPtr->sphericalCoordinates.Surface() == + math::SphericalCoordinates::MOON_SCS)) + { + sourceCs = *(this->dataPtr->dataSet->GetSpatialRef()); + targetCs = OGRSpatialReference(); + + double axisEquatorial = + this->dataPtr->sphericalCoordinates.SurfaceAxisEquatorial(); + double axisPolar = + this->dataPtr->sphericalCoordinates.SurfaceAxisPolar(); + + std::string surfaceLatLongProjStr = + "+proj=latlong +a=" + std::to_string(axisEquatorial) + + " +b=" + std::to_string(axisPolar); + + targetCs.importFromProj4(surfaceLatLongProjStr.c_str()); + } + cT = OGRCreateCoordinateTransformation(&sourceCs, &targetCs); + if (nullptr == cT) { - gzerr << "Unable to transform terrain coordinate system to WGS84 for " + gzerr << "Unable to transform terrain coordinate system for " << "coordinates (" << _x << "," << _y << ")" << std::endl; OCTDestroyCoordinateTransformation(cT); return false; @@ -350,9 +374,9 @@ unsigned int Dem::Width() const ////////////////////////////////////////////////// double Dem::WorldWidth() const { - if (this->dataPtr->isNonEarthDem) + if (this->dataPtr->isUnknownDem) { - gzwarn << "Unable to determine world width of non-Earth DEM." + gzwarn << "Unable to determine world width of unknown DEM." << std::endl; } return this->dataPtr->worldWidth; @@ -361,9 +385,9 @@ double Dem::WorldWidth() const ////////////////////////////////////////////////// double Dem::WorldHeight() const { - if (this->dataPtr->isNonEarthDem) + if (this->dataPtr->isUnknownDem) { - gzwarn << "Unable to determine world height of non-Earth DEM." + gzwarn << "Unable to determine world height of unknown DEM." << std::endl; } return this->dataPtr->worldHeight; diff --git a/geospatial/src/Dem_TEST.cc b/geospatial/src/Dem_TEST.cc index c35a49be4..f51c1045a 100644 --- a/geospatial/src/Dem_TEST.cc +++ b/geospatial/src/Dem_TEST.cc @@ -127,6 +127,18 @@ TEST_F(DemTest, BasicAPI) EXPECT_TRUE(dem.GeoReferenceOrigin(latitude, longitude)); EXPECT_FLOAT_EQ(38.001667f, latitude.Degree()); EXPECT_FLOAT_EQ(-122.22278f, longitude.Degree()); + + // Emulate Earth as a custom surface. + common::Dem demCustomSurface; + auto earthSc = math::SphericalCoordinates(); + auto customSc = math::SphericalCoordinates( + math::SphericalCoordinates::CUSTOM_SURFACE, + earthSc.SurfaceRadius(), + earthSc.SurfaceRadius()); + demCustomSurface.SetSphericalCoordinates(customSc); + EXPECT_EQ(demCustomSurface.Load(path), 0); + EXPECT_FLOAT_EQ(3984.4849f, demCustomSurface.WorldHeight()); + EXPECT_FLOAT_EQ(3139.7456f, demCustomSurface.WorldWidth()); } ///////////////////////////////////////////////// @@ -226,7 +238,7 @@ TEST_F(DemTest, NaNNoData) } ///////////////////////////////////////////////// -TEST_F(DemTest, NonEarthDem) +TEST_F(DemTest, UnknownDem) { // moon common::Dem dem; @@ -245,12 +257,28 @@ TEST_F(DemTest, NonEarthDem) // unable to get coordinates in WGS84 gz::math::Angle latitude, longitude; EXPECT_FALSE(dem.GeoReferenceOrigin(latitude, longitude)); +} - // The Load() method in Dem.cc should set the - // isNonEarthDEM flag. - EXPECT_TRUE(dem.GetNonEarthDEM()); - - // This flag can be overridden externally. - dem.SetNonEarthDEM(false); - EXPECT_FALSE(dem.GetNonEarthDEM()); +TEST_F(DemTest, LunarDemLoad) +{ + // Load Moon DEM + common::Dem dem; + auto path = common::testing::TestFile("data", "dem_moon.tif"); + // Providing spherical coordinates object. + auto moonSc = math::SphericalCoordinates( + math::SphericalCoordinates::MOON_SCS); + dem.SetSphericalCoordinates(moonSc); + EXPECT_EQ(dem.Load(path), 0); + EXPECT_NEAR(dem.WorldWidth(), 80.0417, 1e-2); + EXPECT_NEAR(dem.WorldHeight(), 80.0417, 1e-2); + + // Use custom spherical coordinates object with same axes as the moon. + auto customSc = math::SphericalCoordinates( + math::SphericalCoordinates::CUSTOM_SURFACE, + moonSc.SurfaceAxisEquatorial(), + moonSc.SurfaceAxisPolar()); + dem.SetSphericalCoordinates(customSc); + EXPECT_EQ(dem.Load(path), 0); + EXPECT_NEAR(dem.WorldWidth(), 80.0417, 1e-2); + EXPECT_NEAR(dem.WorldHeight(), 80.0417, 1e-2); } From 4e8fb416c460cf0064f38756a902f8b7b237fd46 Mon Sep 17 00:00:00 2001 From: Luca Della Vedova <luca@openrobotics.org> Date: Tue, 26 Jul 2022 04:38:10 +0200 Subject: [PATCH 185/219] Add API for getting Image bytes as std::vector (#372) * Add API to return image data as vector of bytes Signed-off-by: Luca Della Vedova <luca@openrobotics.org> Co-authored-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Louise Poubel <louise@openrobotics.org> --- Migration.md | 2 + geospatial/src/ImageHeightmap.cc | 9 +-- graphics/include/gz/common/Image.hh | 26 ++++++- graphics/src/Image.cc | 86 +++++++++++++++++++++ graphics/src/Image_TEST.cc | 116 +++++++++++++++++----------- 5 files changed, 184 insertions(+), 55 deletions(-) diff --git a/Migration.md b/Migration.md index 5fa2e3bdc..3ee6a2647 100644 --- a/Migration.md +++ b/Migration.md @@ -43,6 +43,8 @@ release will remove the deprecated code. 10. `IGN_CREATE_SPEC_INTERFACE` 11. `IGN_DUMMY_PLUGIN_PATH` 12. `IGNITION_UNITTEST_SPECIALIZED_PLUGIN_ACCESS` +8. The `Image::Data(unsigned char**, unsigned int&)` functions that accept a pointer and a size and internally allocate memory are deprecated and will be removed in future versions. + Use the new `Data` functions that return a `std::vector<unsigned char>` to have automatic memory management. ### Breaking Changes diff --git a/geospatial/src/ImageHeightmap.cc b/geospatial/src/ImageHeightmap.cc index fc96e660b..301d549ec 100644 --- a/geospatial/src/ImageHeightmap.cc +++ b/geospatial/src/ImageHeightmap.cc @@ -58,9 +58,7 @@ void ImageHeightmap::FillHeightMap(int _subSampling, // Currently supported: 8-bit and 16-bit. auto imgFormat = this->img.PixelFormat(); - unsigned char *data = nullptr; - unsigned int count; - this->img.Data(&data, count); + auto data = this->img.Data(); if (imgFormat == gz::common::Image::PixelFormatType::L_INT8 || imgFormat == gz::common::Image::PixelFormatType::RGB_INT8 || @@ -73,7 +71,7 @@ void ImageHeightmap::FillHeightMap(int _subSampling, imgFormat == gz::common::Image::PixelFormatType::BGR_INT8 || imgFormat == gz::common::Image::PixelFormatType::BGRA_INT8) { - this->FillHeights<unsigned char>(data, imgHeight, imgWidth, pitch, + this->FillHeights<unsigned char>(&data[0], imgHeight, imgWidth, pitch, _subSampling, _vertSize, _size, _scale, _flipY, _heights); } else if (imgFormat == gz::common::Image::PixelFormatType::BGR_INT16 || @@ -82,7 +80,7 @@ void ImageHeightmap::FillHeightMap(int _subSampling, imgFormat == gz::common::Image::PixelFormatType::RGB_INT16 || imgFormat == gz::common::Image::PixelFormatType::R_FLOAT16) { - uint16_t *dataShort = reinterpret_cast<uint16_t *>(data); + uint16_t *dataShort = reinterpret_cast<uint16_t *>(&data[0]); this->FillHeights<uint16_t>(dataShort, imgHeight, imgWidth, pitch, _subSampling, _vertSize, _size, _scale, _flipY, _heights); } @@ -92,7 +90,6 @@ void ImageHeightmap::FillHeightMap(int _subSampling, "heightmap will not be loaded" << std::endl; return; } - delete [] data; } ////////////////////////////////////////////////// diff --git a/graphics/include/gz/common/Image.hh b/graphics/include/gz/common/Image.hh index f2d01e683..c789c19d4 100644 --- a/graphics/include/gz/common/Image.hh +++ b/graphics/include/gz/common/Image.hh @@ -132,21 +132,41 @@ namespace gz Image::PixelFormatType _format); /// \brief Get the image as a data array + /// \deprecated Use the function returning std::vector instead /// \param[out] _data Pointer to a NULL array of char. /// \param[out] _count The resulting data array size - public: void Data(unsigned char **_data, unsigned int &_count) const; + public: void GZ_DEPRECATED(5) Data(unsigned char **_data, + unsigned int &_count) const; + + /// \brief Get the image as a data array + /// \return The image data + public: std::vector<unsigned char> Data() const; /// \brief Get only the RGB data from the image. This will drop the /// alpha channel if one is present. + /// \deprecated Use the function returning std::vector instead /// \param[out] _data Pointer to a NULL array of char. /// \param[out] _count The resulting data array size - public: void RGBData(unsigned char **_data, unsigned int &_count) const; + public: void GZ_DEPRECATED(5) RGBData(unsigned char **_data, + unsigned int &_count) const; + + /// \brief Get only the RGB data from the image. This will drop the + /// alpha channel if one is present. + /// \return The image RGB data + public: std::vector<unsigned char> RGBData() const; /// \brief Get the RGBA data from the image. This will add an alpha /// channel if one is not present. + /// \deprecated Use the function returning std::vector instead /// \param[out] _data Pointer to a NULL array of char. /// \param[out] _count The resulting data array size - public: void RGBAData(unsigned char **_data, unsigned int &_count) const; + public: void GZ_DEPRECATED(5) RGBAData(unsigned char **_data, + unsigned int &_count) const; + + /// \brief Get the RGBA data from the image. This will add an alpha + /// channel if one is not present. + /// \return The image RGBA data + public: std::vector<unsigned char> RGBAData() const; /// \brief Get the width /// \return The image width diff --git a/graphics/src/Image.cc b/graphics/src/Image.cc index 653c958f3..720f9df57 100644 --- a/graphics/src/Image.cc +++ b/graphics/src/Image.cc @@ -43,9 +43,14 @@ namespace gz public: std::string fullName; /// \brief Implementation of GetData + /// \deprecated remove once the Data functions using raw pointers + /// are removed, in favor of returning vectors of bytes public: void DataImpl(unsigned char **_data, unsigned int &_count, FIBITMAP *_img) const; + /// \brief Implementation of Data, returns vector of bytes + public: std::vector<unsigned char> DataImpl(FIBITMAP *_img) const; + /// \brief Returns true if SwapRedBlue can and should be called /// If it returns false, it may not be safe to call SwapRedBlue /// (it could lead to memory corruption!). See CanSwapRedBlue @@ -287,6 +292,27 @@ void Image::RGBData(unsigned char **_data, unsigned int &_count) const FreeImage_Unload(tmp2); } +////////////////////////////////////////////////// +std::vector<unsigned char> Image::RGBData() const +{ + std::vector<unsigned char> data; + + FIBITMAP *tmp = this->dataPtr->bitmap; + FIBITMAP *tmp2 = nullptr; + if (this->dataPtr->ShouldSwapRedBlue()) + { + tmp = this->dataPtr->SwapRedBlue(this->Width(), this->Height()); + tmp2 = tmp; + } + tmp = FreeImage_ConvertTo24Bits(tmp); + data = this->dataPtr->DataImpl(tmp); + FreeImage_Unload(tmp); + if (tmp2) + FreeImage_Unload(tmp2); + + return data; +} + ////////////////////////////////////////////////// void Image::RGBAData(unsigned char **_data, unsigned int &_count) const { @@ -304,6 +330,27 @@ void Image::RGBAData(unsigned char **_data, unsigned int &_count) const FreeImage_Unload(tmp2); } +////////////////////////////////////////////////// +std::vector<unsigned char> Image::RGBAData() const +{ + std::vector<unsigned char> data; + + FIBITMAP *tmp = this->dataPtr->bitmap; + FIBITMAP *tmp2 = nullptr; + if (this->dataPtr->ShouldSwapRedBlue()) + { + tmp = this->dataPtr->SwapRedBlue(this->Width(), this->Height()); + tmp2 = tmp; + } + tmp = FreeImage_ConvertTo32Bits(tmp); + data = this->dataPtr->DataImpl(tmp); + FreeImage_Unload(tmp); + if (tmp2) + FreeImage_Unload(tmp2); + + return data; +} + ////////////////////////////////////////////////// void Image::Data(unsigned char **_data, unsigned int &_count) const { @@ -319,6 +366,45 @@ void Image::Data(unsigned char **_data, unsigned int &_count) const } } +////////////////////////////////////////////////// +std::vector<unsigned char> Image::Data() const +{ + std::vector<unsigned char> data; + if (this->dataPtr->ShouldSwapRedBlue()) + { + FIBITMAP *tmp = this->dataPtr->SwapRedBlue(this->Width(), this->Height()); + data = this->dataPtr->DataImpl(tmp); + FreeImage_Unload(tmp); + } + else + { + data = this->dataPtr->DataImpl(this->dataPtr->bitmap); + } + return data; +} + +////////////////////////////////////////////////// +std::vector<unsigned char> Image::Implementation::DataImpl(FIBITMAP *_img) const +{ + int redmask = FI_RGBA_RED_MASK; + // int bluemask = 0x00ff0000; + + int greenmask = FI_RGBA_GREEN_MASK; + // int greenmask = 0x0000ff00; + + int bluemask = FI_RGBA_BLUE_MASK; + // int redmask = 0x000000ff; + + int scanWidth = FreeImage_GetLine(_img); + + std::vector<unsigned char> data(scanWidth * FreeImage_GetHeight(_img)); + + FreeImage_ConvertToRawBits(reinterpret_cast<BYTE*>(&data[0]), _img, + scanWidth, FreeImage_GetBPP(_img), redmask, greenmask, bluemask, true); + + return data; +} + ////////////////////////////////////////////////// void Image::Implementation::DataImpl( unsigned char **_data, unsigned int &_count, FIBITMAP *_img) const diff --git a/graphics/src/Image_TEST.cc b/graphics/src/Image_TEST.cc index 8e326a3ca..a28bd49e8 100644 --- a/graphics/src/Image_TEST.cc +++ b/graphics/src/Image_TEST.cc @@ -104,11 +104,8 @@ TEST_F(ImageTest, RGBData) CheckImageRGBA(img); // Check RGB data - unsigned char *data = nullptr; - unsigned int size = 0; - img.RGBData(&data, size); - ASSERT_EQ(kSize_RGB, size); - ASSERT_NE(nullptr, data); + auto data = img.RGBData(); + ASSERT_EQ(kSize_RGB, data.size()); auto channels = 3u; auto step = img.Width() * channels; @@ -134,7 +131,6 @@ TEST_F(ImageTest, RGBData) } } } - delete[] data; } ///////////////////////////////////////////////// @@ -148,11 +144,8 @@ TEST_F(ImageTest, Data) CheckImageRGBA(img); // Check RGBA data - unsigned char *data = nullptr; - unsigned int size = 0; - img.Data(&data, size); - ASSERT_EQ(kSize_RGBA, size); - ASSERT_NE(nullptr, data); + auto data = img.Data(); + ASSERT_EQ(kSize_RGBA, data.size()); auto channels = 4u; auto step = img.Width() * channels; @@ -180,7 +173,6 @@ TEST_F(ImageTest, Data) } } } - delete[] data; } ///////////////////////////////////////////////// @@ -191,15 +183,11 @@ TEST_F(ImageTest, SetFromData) ASSERT_EQ(0, img.Load(kTestData)); ASSERT_TRUE(img.Valid()); - unsigned char *data = nullptr; - unsigned int size = 0; - img.Data(&data, size); - ASSERT_EQ(39204u, size); - ASSERT_NE(nullptr, data); - + auto data = img.Data(); + ASSERT_EQ(39204u, data.size()); common::Image img2; - img2.SetFromData(data, img.Width(), img.Height(), img.PixelFormat()); + img2.SetFromData(&data[0], img.Width(), img.Height(), img.PixelFormat()); ASSERT_TRUE(img2.Valid()); ASSERT_EQ(common::Image::PixelFormatType::RGBA_INT8, img2.PixelFormat()); ASSERT_EQ(121u, img2.Width()); @@ -210,7 +198,6 @@ TEST_F(ImageTest, SetFromData) ASSERT_EQ(img2.Pixel(85, 0), math::Color::Blue); ASSERT_EQ(img2.AvgColor(), math::Color(0.661157f, 0, 0.338843f, 1)); ASSERT_EQ(img2.MaxColor(), math::Color::Red); - delete[] data; } TEST_F(ImageTest, SetFromCompressedData) @@ -229,11 +216,8 @@ TEST_F(ImageTest, SetFromCompressedData) common::Image::PixelFormatType::COMPRESSED_PNG); ASSERT_TRUE(img.Valid()); - unsigned char *data = nullptr; - unsigned int size = 0; - img.RGBAData(&data, size); - ASSERT_EQ(39204u, size); - ASSERT_NE(nullptr, data); + auto data = img.RGBAData(); + ASSERT_EQ(39204u, data.size()); ASSERT_EQ(common::Image::PixelFormatType::RGBA_INT8, img.PixelFormat()); ASSERT_EQ(121u, img.Width()); @@ -244,7 +228,6 @@ TEST_F(ImageTest, SetFromCompressedData) ASSERT_EQ(img.Pixel(85, 0), math::Color::Blue); ASSERT_EQ(img.AvgColor(), math::Color(0.661157f, 0, 0.338843f, 1)); ASSERT_EQ(img.MaxColor(), math::Color::Red); - delete[] data; // Reloading the image should not cause any leaks. img.SetFromCompressedData(&fileData[0], fileEnd, @@ -257,6 +240,59 @@ TEST_F(ImageTest, SetFromCompressedData) ASSERT_FALSE(img.Valid()); } +TEST_F(ImageTest, DeprecatedDataFunctions) +{ + common::Image img; + ASSERT_EQ(0, img.Load(kTestData)); + ASSERT_TRUE(img.Valid()); + + auto data = img.Data(); + ASSERT_EQ(39204u, data.size()); + + unsigned char *dataRaw = nullptr; + unsigned int rawSize; + GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION + img.Data(&dataRaw, rawSize); + GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + + ASSERT_EQ(data.size(), rawSize); + + for (unsigned int i = 0; i < rawSize; ++i) + { + ASSERT_EQ(data[i], dataRaw[i]); + } + + // RGBData + data = img.RGBData(); + ASSERT_EQ(kSize_RGB, data.size()); + + GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION + img.RGBData(&dataRaw, rawSize); + GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + + ASSERT_EQ(data.size(), rawSize); + + for (unsigned int i = 0; i < rawSize; ++i) + { + ASSERT_EQ(data[i], dataRaw[i]); + } + + // RGBAData + data = img.RGBAData(); + ASSERT_EQ(39204u, data.size()); + + GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION + img.RGBAData(&dataRaw, rawSize); + GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION + + ASSERT_EQ(data.size(), rawSize); + + for (unsigned int i = 0; i < rawSize; ++i) + { + ASSERT_EQ(data[i], dataRaw[i]); + } +} + /* // save image then reload and test colors std::string testSaveImage = @@ -399,11 +435,8 @@ TEST_F(ImageTest, ConvertToRGBImage) buffer.data(), width, height, output); // Check RGBA data - unsigned char *data = nullptr; - unsigned int outputSize = 0; - output.Data(&data, outputSize); - EXPECT_EQ(size * 3, outputSize); - ASSERT_NE(nullptr, data); + auto data = output.Data(); + EXPECT_EQ(size * 3, data.size()); for (unsigned int i = 0u; i < height; ++i) { @@ -446,11 +479,8 @@ TEST_F(ImageTest, ConvertToRGBImage) buffer.data(), width, height, output); // Check RGB data - unsigned char *data = nullptr; - unsigned int outputSize = 0; - output.Data(&data, outputSize); - EXPECT_EQ(size * 3, outputSize); - ASSERT_NE(nullptr, data); + auto data = output.Data(); + EXPECT_EQ(size * 3, data.size()); for (unsigned int i = 0u; i < height; ++i) { @@ -494,11 +524,8 @@ TEST_F(ImageTest, ConvertToRGBImage) buffer.data(), width, height, output); // Check RGB data - unsigned char *data = nullptr; - unsigned int outputSize = 0; - output.Data(&data, outputSize); - EXPECT_EQ(size * 3, outputSize); - ASSERT_NE(nullptr, data); + auto data = output.Data(); + EXPECT_EQ(size * 3, data.size()); for (unsigned int i = 0u; i < height; ++i) { @@ -544,11 +571,8 @@ TEST_F(ImageTest, ConvertToRGBImage) buffer.data(), width, height, output, min, max, true); // Check RGB data - unsigned char *data = nullptr; - unsigned int outputSize = 0; - output.Data(&data, outputSize); - EXPECT_EQ(size * 3, outputSize); - ASSERT_NE(nullptr, data); + auto data = output.Data(); + EXPECT_EQ(size * 3, data.size()); for (unsigned int i = 0u; i < height; ++i) { From a27c7a118739118938f216b6a8b8e32fdd563f0d Mon Sep 17 00:00:00 2001 From: Luca Della Vedova <luca@openrobotics.org> Date: Sat, 30 Jul 2022 10:01:24 +0800 Subject: [PATCH 186/219] Use assimp for loading meshes (#393) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Luca Della Vedova <luca@openrobotics.org> Signed-off by: Onur Berk Tore otore19@ku.edu.tr Signed-off-by: Louise Poubel <louise@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Onur Berk TΓΆre <otore19@ku.edu.tr> Co-authored-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Louise Poubel <louise@openrobotics.org> --- .github/ci/packages.apt | 1 + CMakeLists.txt | 4 + graphics/include/gz/common/AssimpLoader.hh | 51 ++ graphics/include/gz/common/Material.hh | 12 +- graphics/include/gz/common/MeshManager.hh | 12 +- graphics/include/gz/common/Pbr.hh | 52 +- graphics/src/AssimpLoader.cc | 733 +++++++++++++++++++++ graphics/src/AssimpLoader_TEST.cc | 699 ++++++++++++++++++++ graphics/src/CMakeLists.txt | 12 + graphics/src/Material.cc | 14 +- graphics/src/Material_TEST.cc | 6 +- graphics/src/MeshManager.cc | 75 ++- graphics/src/Pbr.cc | 75 ++- graphics/src/Pbr_TEST.cc | 27 +- test/data/box.fbx | Bin 0 -> 26428 bytes test/data/box.glb | Bin 0 -> 1892 bytes test/data/fully_featured.glb | Bin 0 -> 3246496 bytes test/integration/mesh.cc | 20 + 18 files changed, 1749 insertions(+), 44 deletions(-) create mode 100644 graphics/include/gz/common/AssimpLoader.hh create mode 100644 graphics/src/AssimpLoader.cc create mode 100644 graphics/src/AssimpLoader_TEST.cc create mode 100644 test/data/box.fbx create mode 100644 test/data/box.glb create mode 100644 test/data/fully_featured.glb diff --git a/.github/ci/packages.apt b/.github/ci/packages.apt index 6d3f9a812..00715fab4 100644 --- a/.github/ci/packages.apt +++ b/.github/ci/packages.apt @@ -1,3 +1,4 @@ +libassimp-dev libavcodec-dev libavdevice-dev libavformat-dev diff --git a/CMakeLists.txt b/CMakeLists.txt index 112e2fb75..9c231c53c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -122,6 +122,10 @@ gz_find_package(AVCODEC REQUIRED_BY av PRETTY libavcodec) # Find avutil gz_find_package(AVUTIL REQUIRED_BY av PRETTY libavutil) +#------------------------------------ +# Find assimp +gz_find_package(GzAssimp REQUIRED_BY graphics PRETTY assimp) + message(STATUS "-------------------------------------------\n") diff --git a/graphics/include/gz/common/AssimpLoader.hh b/graphics/include/gz/common/AssimpLoader.hh new file mode 100644 index 000000000..f3267622a --- /dev/null +++ b/graphics/include/gz/common/AssimpLoader.hh @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#ifndef GZ_COMMON_ASSIMPLOADER_HH_ +#define GZ_COMMON_ASSIMPLOADER_HH_ + +#include <string> +#include <gz/common/graphics/Export.hh> +#include <gz/common/MeshLoader.hh> + +#include <gz/utils/ImplPtr.hh> + +namespace gz +{ + namespace common + { + /// \class AssimpLoader AssimpLoader.hh gz/common/AssimpLoader.hh + /// \brief Class used to load mesh files using the assimp lodaer + class GZ_COMMON_GRAPHICS_VISIBLE AssimpLoader : public MeshLoader + { + /// \brief Constructor + public: AssimpLoader(); + + /// \brief Destructor + public: virtual ~AssimpLoader(); + + /// \brief Load a mesh + /// \param[in] _filename Mesh file to load + /// \return Pointer to a new Mesh + public: virtual Mesh *Load(const std::string &_filename) override; + + /// \internal + /// \brief Pointer to private data. + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) + }; + } +} +#endif diff --git a/graphics/include/gz/common/Material.hh b/graphics/include/gz/common/Material.hh index f7929cd38..e90e793f1 100644 --- a/graphics/include/gz/common/Material.hh +++ b/graphics/include/gz/common/Material.hh @@ -24,6 +24,7 @@ #include <gz/math/Color.hh> #include <gz/common/graphics/Export.hh> #include <gz/common/EnumIface.hh> +#include <gz/common/Image.hh> #include <gz/common/Pbr.hh> #include <gz/utils/ImplPtr.hh> @@ -102,8 +103,11 @@ namespace gz /// \brief Set a texture image /// \param[in] _tex The name of the texture, which must be in the - /// resource path - public: void SetTextureImage(const std::string &_tex); + /// resource path or its name if _img is provided + /// \param[in] _img The image containing the texture if image has been + /// loaded in memory + public: void SetTextureImage(const std::string &_tex, + const std::shared_ptr<const Image> &_img = nullptr); /// \brief Set a texture image /// \param[in] _tex The name of the texture @@ -111,6 +115,10 @@ namespace gz public: void SetTextureImage(const std::string &_tex, const std::string &_resourcePath); + /// \brief Gets the texture image, if the texture was loaded from memory + /// \return A pointer to the image that was loaded from memory + public: std::shared_ptr<const Image> TextureData() const; + /// \brief Get a texture image /// \return The name of the texture image (if one exists) or an empty /// string diff --git a/graphics/include/gz/common/MeshManager.hh b/graphics/include/gz/common/MeshManager.hh index 5185dd4c7..07e770cce 100644 --- a/graphics/include/gz/common/MeshManager.hh +++ b/graphics/include/gz/common/MeshManager.hh @@ -45,7 +45,11 @@ namespace gz class SubMesh; /// \class MeshManager MeshManager.hh gz/common/MeshManager.hh - /// \brief Maintains and manages all meshes + /// \brief Maintains and manages all meshes. Supported mesh formats are + /// STL (STLA, STLB), COLLADA, OBJ, GLTF (GLB) and FBX. By default only GLTF + /// and FBX are loaded using assimp loader, however if GZ_MESH_FORCE_ASSIMP + /// environment variable is set, then MeshManager will use assimp loader for + /// all supported mesh formats. class GZ_COMMON_GRAPHICS_VISIBLE MeshManager : public SingletonT<MeshManager> { @@ -240,8 +244,12 @@ namespace gz const gz::math::Vector2d &_segments, const gz::math::Vector2d &_uvTile); + /// \brief Sets the forceAssimp flag by reading the GZ_MESH_FORCE_ASSIMP + /// environment variable. If forceAssimp true, MeshManager uses Assimp + /// for loading all mesh formats, otherwise only for GLTF and FBX. + public: void SetAssimpEnvs(); + /// \brief Tesselate a 2D mesh - /// /// Makes a zigzag pattern compatible with strips /// \param[in] _sm the mesh to tesselate /// \param[in] _meshWith mesh width diff --git a/graphics/include/gz/common/Pbr.hh b/graphics/include/gz/common/Pbr.hh index 95bcb473f..ac3e42091 100644 --- a/graphics/include/gz/common/Pbr.hh +++ b/graphics/include/gz/common/Pbr.hh @@ -17,11 +17,13 @@ #ifndef GZ_COMMON_PBR_HH_ #define GZ_COMMON_PBR_HH_ +#include <memory> #include <string> #include <gz/utils/ImplPtr.hh> #include <gz/common/graphics/Export.hh> +#include <gz/common/Image.hh> namespace gz { @@ -84,12 +86,20 @@ namespace common /// has not been specified. public: std::string NormalMap() const; + /// \brief Gets the normal map data, + /// if the texture was loaded from memory, otherwise a nullptr + /// \return A pointer to the image that was loaded from memory + public: std::shared_ptr<const Image> NormalMapData() const; + /// \brief Set the normal map filename. /// \param[in] _map Filename of the normal map. /// \param[in] _space Space that the normal map is defined in. /// Defaults to tangent space. + /// \param[in] _img The image containing the texture if image has been + /// loaded in memory public: void SetNormalMap(const std::string &_map, - NormalMapSpace _space = NormalMapSpace::TANGENT); + NormalMapSpace _space = NormalMapSpace::TANGENT, + const std::shared_ptr<const Image> &_img = nullptr); /// \brief Get the normal map type, either tangent or object space /// \return Space that the normal map is defined in @@ -123,7 +133,15 @@ namespace common /// \brief Set the roughness map filename for metal workflow. /// \param[in] _map Filename of the roughness map. - public: void SetRoughnessMap(const std::string &_map); + /// \param[in] _img The image containing the texture if image has been + /// loaded in memory + public: void SetRoughnessMap(const std::string &_map, + const std::shared_ptr<const Image> &_img = nullptr); + + /// \brief Gets the roughness map data, + /// if the texture was loaded from memory, otherwise a nullptr + /// \return A pointer to the image that was loaded from memory + public: std::shared_ptr<const Image> RoughnessMapData() const; /// \brief Get the metalness map filename for metal workflow. This will be /// an empty string if a metalness map has not been set. @@ -133,7 +151,15 @@ namespace common /// \brief Set the metalness map filename for metal workflow. /// \param[in] _map Filename of the metalness map. - public: void SetMetalnessMap(const std::string &_map); + /// \param[in] _img The image containing the texture if image has been + /// loaded in memory + public: void SetMetalnessMap(const std::string &_map, + const std::shared_ptr<const Image> &_img = nullptr); + + /// \brief Gets the metalness map data, + /// if the texture was loaded from memory, otherwise a nullptr + /// \return A pointer to the image that was loaded from memory + public: std::shared_ptr<const Image> MetalnessMapData() const; /// \brief Get the emissive map filename. This will be an empty string /// if an emissive map has not been set. @@ -143,7 +169,15 @@ namespace common /// \brief Set the emissive map filename. /// \param[in] _map Filename of the emissive map. - public: void SetEmissiveMap(const std::string &_map); + /// \param[in] _img The image containing the texture if image has been + /// loaded in memory + public: void SetEmissiveMap(const std::string &_map, + const std::shared_ptr<const Image> &_img = nullptr); + + /// \brief Gets the emissive map data, + /// if the texture was loaded from memory, otherwise a nullptr + /// \return A pointer to the image that was loaded from memory + public: std::shared_ptr<const Image> EmissiveMapData() const; /// \brief Get the light map filename. This will be an empty string /// if an light map has not been set. @@ -151,10 +185,18 @@ namespace common /// map has not been specified. public: std::string LightMap() const; + /// \brief Gets the light map data, + /// if the texture was loaded from memory, otherwise a nullptr + /// \return A pointer to the image that was loaded from memory + public: std::shared_ptr<const Image> LightMapData() const; + /// \brief Set the light map filename. /// \param[in] _map Filename of the light map. /// \param[in] _uvSet Index of the texture coordinate set - public: void SetLightMap(const std::string &_map, unsigned int _uvSet = 0u); + /// \param[in] _img The image containing the texture if image has been + /// loaded in memory + public: void SetLightMap(const std::string &_map, unsigned int _uvSet = 0u, + const std::shared_ptr<const Image> &_img = nullptr); /// \brief Get the light map texture coordinate set. /// \return Index of the light map texture coordinate set diff --git a/graphics/src/AssimpLoader.cc b/graphics/src/AssimpLoader.cc new file mode 100644 index 000000000..caa2662a8 --- /dev/null +++ b/graphics/src/AssimpLoader.cc @@ -0,0 +1,733 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <queue> +#include <unordered_set> + +#include "gz/common/graphics/Types.hh" +#include "gz/common/AssimpLoader.hh" +#include "gz/common/Console.hh" +#include "gz/common/Image.hh" +#include "gz/common/Material.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/Skeleton.hh" +#include "gz/common/SkeletonAnimation.hh" +#include "gz/common/SubMesh.hh" +#include "gz/common/SystemPaths.hh" +#include "gz/common/Util.hh" + +#ifndef GZ_ASSIMP_PRE_5_2_0 + #include <assimp/GltfMaterial.h> // GLTF specific material properties +#endif +#include <assimp/Importer.hpp> // C++ importer interface +#include <assimp/postprocess.h> // Post processing flags +#include <assimp/scene.h> // Output data structure + +// Disable warning for converting double to unsigned char +#ifdef _WIN32 + #pragma warning( disable : 4244 ) +#endif + +namespace gz +{ +namespace common +{ + +using ImagePtr = std::shared_ptr<Image>; + +/// \brief Private data for the AssimpLoader class +class AssimpLoader::Implementation +{ + /// \brief the Assimp importer used to parse meshes + public: Assimp::Importer importer; + + /// \brief Convert a color from assimp implementation to Ignition common + /// \param[in] _color the assimp color to convert + /// \return the matching math::Color + public: math::Color ConvertColor(aiColor4D& _color) const; + + /// \brief Convert a matrix from assimp implementation to gz::Math + /// \param[in] _matrix the assimp matrix to convert + /// \return the converted math::Matrix4d + public: math::Matrix4d ConvertTransform(const aiMatrix4x4& _matrix) const; + + /// \brief Convert from assimp to gz::common::Material + /// \param[in] _scene the assimp scene + /// \param[in] _matIdx index of the material in the scene + /// \param[in] _path path where the mesh is located + /// \return pointer to the converted common::Material + public: MaterialPtr CreateMaterial(const aiScene* _scene, + unsigned _matIdx, + const std::string& _path) const; + + /// \brief Load a texture embedded in a mesh (i.e. for GLB format) + /// into a gz::common::Image + /// \param[in] _texture the assimp texture object + /// \return Pointer to a common::Image containing the texture + public: ImagePtr LoadEmbeddedTexture(const aiTexture* _texture) const; + + /// \brief Utility function to generate a texture name for both embedded + /// and external textures + /// \param[in] _scene the assimp scene + /// \param[in] _mat the assimp material + /// \param[in] _type the type of texture (i.e. Diffuse, Metal) + /// \return the generated texture name + public: std::string GenerateTextureName(const aiScene* _scene, + aiMaterial* _mat, + const std::string& _type) const; + + /// \brief Function to parse texture information and load it if embedded + /// \param[in] _scene the assimp scene + /// \param[in] _texturePath the path where the texture is located + /// \param[in] _textureName the name of the texture + /// \return a pair containing the name of the texture and a pointer to the + /// image data, if the texture was loaded in memory + public: std::pair<std::string, ImagePtr> + LoadTexture(const aiScene* _scene, + const aiString& _texturePath, + const std::string& _textureName) const; + + /// \brief Function to split a gltf metallicroughness map into + /// a metalness and roughness map + /// \param[in] _img the image to split + /// \return a pair of image pointers with the first being the metalness + /// map and the second being the roughness map + public: std::pair<ImagePtr, ImagePtr> + SplitMetallicRoughnessMap(const common::Image& _img) const; + + /// \brief Convert an assimp mesh into a gz::common::SubMesh + /// \param[in] _assimpMesh the assimp mesh to load + /// \param[in] _transform the node transform for the mesh + /// \return the converted common::Submesh + public: SubMesh CreateSubMesh(const aiMesh* _assimpMesh, + const math::Matrix4d& _transform) const; + + /// \brief Recursively create submeshes scene starting from the root node + /// \param[in] _scene the assimp scene + /// \param[in] _node the node being processed + /// \param[in] _transform the transform of the node being processed + /// \param[out] _mesh the common::Mesh to edit + public: void RecursiveCreate(const aiScene* _scene, + const aiNode* _node, + const math::Matrix4d& _transform, + Mesh* _mesh) const; + + /// \brief Recursively create the skeleton starting from the root node + /// \param[in] _node the node being processed + /// \param[in] _parent the parent skeleton node + /// \param[in] _transform the transform of the current node + /// \param[in] _boneNames set of bone names, used to skip nodes without a bone + public: void RecursiveSkeletonCreate( + const aiNode* _node, + SkeletonNode* _parent, + const math::Matrix4d& _transform, + const std::unordered_set<std::string> &_boneNames) const; + + /// \brief Recursively store the bone names starting from the root node + /// to make sure that only nodes that map to a bone are added to the skeleton + /// \param[in] _scene the assimp scene + /// \param[in] _node the node being processed + /// \param[out] _boneNames set of bone names populated while recursing + public: void RecursiveStoreBoneNames( + const aiScene *_scene, + const aiNode* _node, + std::unordered_set<std::string>& _boneNames) const; + + /// \brief Apply the the inv bind transform to the skeleton pose. + /// \remarks have to set the model transforms starting from the root in + /// breadth first order. Because setting the model transform also updates + /// the transform based on the parent's inv model transform. Setting the + /// child before the parent results in the child's transform being + /// calculated from the "old" parent model transform. + /// \param[in] _skeleton the skeleton to work on + public: void ApplyInvBindTransform(SkeletonPtr _skeleton) const; +}; + +////////////////////////////////////////////////// +// Utility function to convert to std::string from aiString +static std::string ToString(const aiString& str) +{ + return std::string(str.C_Str()); +} + +////////////////////////////////////////////////// +math::Color AssimpLoader::Implementation::ConvertColor(aiColor4D& _color) const +{ + math::Color col(_color.r, _color.g, _color.b, _color.a); + return col; +} + +////////////////////////////////////////////////// +math::Matrix4d AssimpLoader::Implementation::ConvertTransform( + const aiMatrix4x4& _sm) const +{ + return math::Matrix4d( + _sm.a1, _sm.a2, _sm.a3, _sm.a4, + _sm.b1, _sm.b2, _sm.b3, _sm.b4, + _sm.c1, _sm.c2, _sm.c3, _sm.c4, + _sm.d1, _sm.d2, _sm.d3, _sm.d4); +} + +////////////////////////////////////////////////// +void AssimpLoader::Implementation::RecursiveCreate(const aiScene* _scene, + const aiNode* _node, const math::Matrix4d& _transform, Mesh* _mesh) const +{ + if (!_node) + return; + // Visit this node, add the submesh + for (unsigned meshIdx = 0; meshIdx < _node->mNumMeshes; ++meshIdx) + { + auto assimpMeshIdx = _node->mMeshes[meshIdx]; + auto& assimpMesh = _scene->mMeshes[assimpMeshIdx]; + auto nodeName = ToString(_node->mName); + auto subMesh = this->CreateSubMesh(assimpMesh, _transform); + subMesh.SetName(nodeName); + // Now add the bones to the skeleton + if (assimpMesh->HasBones() && _scene->HasAnimations()) + { + // TODO(luca) merging skeletons here + auto skeleton = _mesh->MeshSkeleton(); + // TODO(luca) Append to existing skeleton if multiple submeshes? + skeleton->SetNumVertAttached(subMesh.VertexCount()); + // Now add the bone weights + for (unsigned boneIdx = 0; boneIdx < assimpMesh->mNumBones; ++boneIdx) + { + auto& bone = assimpMesh->mBones[boneIdx]; + auto boneNodeName = ToString(bone->mName); + // Apply inverse bind transform to the matching node + SkeletonNode *skelNode = + skeleton->NodeByName(boneNodeName); + if (skelNode == nullptr) + continue; + skelNode->SetInverseBindTransform( + this->ConvertTransform(bone->mOffsetMatrix)); + for (unsigned weightIdx = 0; weightIdx < bone->mNumWeights; ++weightIdx) + { + auto vertexWeight = bone->mWeights[weightIdx]; + skeleton->AddVertNodeWeight( + vertexWeight.mVertexId, boneNodeName, vertexWeight.mWeight); + } + } + // Add node assignment to mesh + for (unsigned vertexIdx = 0; vertexIdx < subMesh.VertexCount(); + ++vertexIdx) + { + for (unsigned i = 0; i < skeleton->VertNodeWeightCount(vertexIdx); ++i) + { + std::pair<std::string, double> nodeWeight = + skeleton->VertNodeWeight(vertexIdx, i); + SkeletonNode *node = + skeleton->NodeByName(nodeWeight.first); + subMesh.AddNodeAssignment(vertexIdx, + node->Handle(), nodeWeight.second); + } + } + } + _mesh->AddSubMesh(std::move(subMesh)); + } + + // Iterate over children + for (unsigned childIdx = 0; childIdx < _node->mNumChildren; ++childIdx) + { + // Calculate the transform + auto& child_node = _node->mChildren[childIdx]; + auto nodeTrans = this->ConvertTransform(child_node->mTransformation); + nodeTrans = _transform * nodeTrans; + + // Finally recursive call to explore subnode + this->RecursiveCreate(_scene, child_node, nodeTrans, _mesh); + } +} + +void AssimpLoader::Implementation::RecursiveStoreBoneNames( + const aiScene *_scene, const aiNode *_node, + std::unordered_set<std::string>& _boneNames) const +{ + if (!_node) + return; + + for (unsigned meshIdx = 0; meshIdx < _node->mNumMeshes; ++meshIdx) + { + auto assimpMeshIdx = _node->mMeshes[meshIdx]; + auto assimpMesh = _scene->mMeshes[assimpMeshIdx]; + for (unsigned boneIdx = 0; boneIdx < assimpMesh->mNumBones; ++boneIdx) + { + auto bone = assimpMesh->mBones[boneIdx]; + _boneNames.insert(ToString(bone->mName)); + } + } + + // Iterate over children + for (unsigned childIdx = 0; childIdx < _node->mNumChildren; ++childIdx) + { + auto child_node = _node->mChildren[childIdx]; + // Finally recursive call to explore subnode + this->RecursiveStoreBoneNames(_scene, child_node, _boneNames); + } +} + +////////////////////////////////////////////////// +void AssimpLoader::Implementation::RecursiveSkeletonCreate(const aiNode* _node, + SkeletonNode* _parent, const math::Matrix4d& _transform, + const std::unordered_set<std::string> &_boneNames) const +{ + if (_node == nullptr || _parent == nullptr) + return; + // First explore this node + auto nodeName = ToString(_node->mName); + auto boneExist = _boneNames.find(nodeName) != _boneNames.end(); + auto nodeTrans = this->ConvertTransform(_node->mTransformation); + auto skelNode = _parent; + + if (boneExist) + { + skelNode = new SkeletonNode( + _parent, nodeName, nodeName, SkeletonNode::JOINT); + skelNode->SetTransform(nodeTrans); + } + + nodeTrans = _transform * nodeTrans; + + for (unsigned childIdx = 0; childIdx < _node->mNumChildren; ++childIdx) + { + this->RecursiveSkeletonCreate( + _node->mChildren[childIdx], skelNode, nodeTrans, _boneNames); + } +} + +////////////////////////////////////////////////// +MaterialPtr AssimpLoader::Implementation::CreateMaterial( + const aiScene* _scene, unsigned _matIdx, const std::string& _path) const +{ + MaterialPtr mat = std::make_shared<Material>(); + aiColor4D color; + auto& assimpMat = _scene->mMaterials[_matIdx]; + auto ret = assimpMat->Get(AI_MATKEY_COLOR_DIFFUSE, color); + if (ret == AI_SUCCESS) + { + mat->SetDiffuse(this->ConvertColor(color)); + } + ret = assimpMat->Get(AI_MATKEY_COLOR_AMBIENT, color); + if (ret == AI_SUCCESS) + { + mat->SetAmbient(this->ConvertColor(color)); + } + ret = assimpMat->Get(AI_MATKEY_COLOR_SPECULAR, color); + if (ret == AI_SUCCESS) + { + mat->SetSpecular(this->ConvertColor(color)); + } + ret = assimpMat->Get(AI_MATKEY_COLOR_EMISSIVE, color); + if (ret == AI_SUCCESS) + { + mat->SetEmissive(this->ConvertColor(color)); + } + float shininess; + ret = assimpMat->Get(AI_MATKEY_SHININESS, shininess); + if (ret == AI_SUCCESS) + { + mat->SetShininess(shininess); + } + float opacity = 1.0; + ret = assimpMat->Get(AI_MATKEY_OPACITY, opacity); + mat->SetTransparency(1.0 - opacity); + mat->SetBlendFactors(opacity, 1.0 - opacity); + // TODO(luca) more than one texture, Gazebo assumes UV index 0 + Pbr pbr; + aiString texturePath(_path.c_str()); + ret = assimpMat->GetTexture(aiTextureType_DIFFUSE, 0, &texturePath); + // TODO(luca) check other arguments, + // type of mappings to be UV, uv index, blend mode + if (ret == AI_SUCCESS) + { + // Check if the texture is embedded or not + auto [texName, texData] = this->LoadTexture(_scene, + texturePath, this->GenerateTextureName(_scene, assimpMat, "Diffuse")); + if (texData != nullptr) + mat->SetTextureImage(texName, texData); + else + mat->SetTextureImage(texName, _path); +#ifndef GZ_ASSIMP_PRE_5_2_0 + // Now set the alpha from texture, if enabled, only supported in GLTF + aiString alphaMode; + auto paramRet = assimpMat->Get(AI_MATKEY_GLTF_ALPHAMODE, alphaMode); + if (paramRet == AI_SUCCESS) + { + // Only enable if it's set to MASK, BLEND not supported yet + if (strcmp(alphaMode.C_Str(), "MASK") == 0) + { + double alphaCutoff = mat->AlphaThreshold(); + bool twoSided = mat->TwoSidedEnabled(); + // Ignore return value, parameter unchanged if value is not set + assimpMat->Get(AI_MATKEY_GLTF_ALPHACUTOFF, alphaCutoff); + assimpMat->Get(AI_MATKEY_TWOSIDED, twoSided); + mat->SetAlphaFromTexture(true, alphaCutoff, twoSided); + } + } +#endif + } +#ifndef GZ_ASSIMP_PRE_5_2_0 + // Edge case for GLTF, Metal and Rough texture are embedded in a + // MetallicRoughness texture with metalness in B and roughness in G + // Open, preprocess and split into metal and roughness map + ret = assimpMat->GetTexture( + AI_MATKEY_GLTF_PBRMETALLICROUGHNESS_METALLICROUGHNESS_TEXTURE, + &texturePath); + if (ret == AI_SUCCESS) + { + auto [texName, texData] = this->LoadTexture(_scene, texturePath, + this->GenerateTextureName(_scene, assimpMat, "MetallicRoughness")); + // Load it into a common::Image then split it + auto texImg = + texData != nullptr ? texData : std::make_shared<common::Image>(texName); + auto [metalTexture, roughTexture] = + this->SplitMetallicRoughnessMap(*texImg); + pbr.SetMetalnessMap( + this->GenerateTextureName(_scene, assimpMat, "Metalness"), + metalTexture); + pbr.SetRoughnessMap( + this->GenerateTextureName(_scene, assimpMat, "Roughness"), + roughTexture); + } + else + { + // Load the textures separately + ret = assimpMat->GetTexture(aiTextureType_METALNESS, 0, &texturePath); + if (ret == AI_SUCCESS) + { + auto [texName, texData] = this->LoadTexture(_scene, texturePath, + this->GenerateTextureName(_scene, assimpMat, "Metalness")); + pbr.SetMetalnessMap(texName, texData); + } + ret = assimpMat->GetTexture( + aiTextureType_DIFFUSE_ROUGHNESS, 0, &texturePath); + if (ret == AI_SUCCESS) + { + auto [texName, texData] = this->LoadTexture(_scene, texturePath, + this->GenerateTextureName(_scene, assimpMat, "Roughness")); + pbr.SetRoughnessMap(texName, texData); + } + } +#endif + ret = assimpMat->GetTexture(aiTextureType_NORMALS, 0, &texturePath); + if (ret == AI_SUCCESS) + { + auto [texName, texData] = this->LoadTexture(_scene, texturePath, + this->GenerateTextureName(_scene, assimpMat, "Normal")); + // TODO(luca) different normal map spaces + pbr.SetNormalMap(texName, NormalMapSpace::TANGENT, texData); + } + ret = assimpMat->GetTexture(aiTextureType_EMISSIVE, 0, &texturePath); + if (ret == AI_SUCCESS) + { + auto [texName, texData] = this->LoadTexture(_scene, texturePath, + this->GenerateTextureName(_scene, assimpMat, "Emissive")); + pbr.SetEmissiveMap(texName, texData); + } + unsigned int uvIdx = 0; + ret = assimpMat->GetTexture( + aiTextureType_LIGHTMAP, 0, &texturePath, NULL, &uvIdx); + if (ret == AI_SUCCESS) + { + auto [texName, texData] = this->LoadTexture(_scene, texturePath, + this->GenerateTextureName(_scene, assimpMat, "Lightmap")); + pbr.SetLightMap(texName, uvIdx, texData); + } +#ifndef GZ_ASSIMP_PRE_5_2_0 + double value; + ret = assimpMat->Get(AI_MATKEY_METALLIC_FACTOR, value); + if (ret == AI_SUCCESS) + { + pbr.SetMetalness(value); + } + ret = assimpMat->Get(AI_MATKEY_ROUGHNESS_FACTOR, value); + if (ret == AI_SUCCESS) + { + pbr.SetRoughness(value); + } +#endif + mat->SetPbrMaterial(pbr); + return mat; +} + +////////////////////////////////////////////////// +std::pair<std::string, ImagePtr> AssimpLoader::Implementation::LoadTexture( + const aiScene* _scene, + const aiString& _texturePath, + const std::string& _textureName) const +{ + std::pair<std::string, ImagePtr> ret; + // Check if the texture is embedded or not + auto embeddedTexture = _scene->GetEmbeddedTexture(_texturePath.C_Str()); + if (embeddedTexture) + { + // Load embedded texture + ret.first = _textureName; + ret.second = this->LoadEmbeddedTexture(embeddedTexture); + } + else + { + ret.first = ToString(_texturePath); + } + return ret; +} + +std::pair<ImagePtr, ImagePtr> + AssimpLoader::Implementation::SplitMetallicRoughnessMap( + const common::Image& _img) const +{ + std::pair<ImagePtr, ImagePtr> ret; + // Metalness in B roughness in G + const auto width = _img.Width(); + const auto height = _img.Height(); + const auto bytesPerPixel = 4; + + std::vector<unsigned char> metalnessData(width * height * bytesPerPixel); + std::vector<unsigned char> roughnessData(width * height * bytesPerPixel); + + for (unsigned int x = 0; x < width; ++x) + { + for (unsigned int y = 0; y < height; ++y) + { + // RGBA so 4 bytes per pixel, alpha fully opaque + auto baseIndex = bytesPerPixel * (x * height + y); + auto color = _img.Pixel(x, y); + metalnessData[baseIndex] = color.B() * 255.0; + metalnessData[baseIndex + 1] = color.B() * 255.0; + metalnessData[baseIndex + 2] = color.B() * 255.0; + metalnessData[baseIndex + 3] = 255; + roughnessData[baseIndex] = color.G() * 255.0; + roughnessData[baseIndex + 1] = color.G() * 255.0; + roughnessData[baseIndex + 2] = color.G() * 255.0; + roughnessData[baseIndex + 3] = 255; + } + } + // First is metal, second is rough + ret.first = std::make_shared<Image>(); + ret.first->SetFromData(&metalnessData[0], width, height, Image::RGBA_INT8); + ret.second = std::make_shared<Image>(); + ret.second->SetFromData(&roughnessData[0], width, height, Image::RGBA_INT8); + return ret; +} + +////////////////////////////////////////////////// +ImagePtr AssimpLoader::Implementation::LoadEmbeddedTexture( + const aiTexture* _texture) const +{ + auto img = std::make_shared<Image>(); + if (_texture->mHeight == 0) + { + if (_texture->CheckFormat("png")) + { + img->SetFromCompressedData((unsigned char*)_texture->pcData, + _texture->mWidth, Image::PixelFormatType::COMPRESSED_PNG); + } + } + return img; +} + +////////////////////////////////////////////////// +std::string AssimpLoader::Implementation::GenerateTextureName( + const aiScene* _scene, aiMaterial* _mat, const std::string& _type) const +{ + return ToString(_scene->mRootNode->mName) + "_" + ToString(_mat->GetName()) + + "_" + _type; +} + +SubMesh AssimpLoader::Implementation::CreateSubMesh( + const aiMesh* _assimpMesh, const math::Matrix4d& _transform) const +{ + SubMesh subMesh; + math::Matrix4d rot = _transform; + rot.SetTranslation(math::Vector3d::Zero); + // Now create the submesh + for (unsigned vertexIdx = 0; vertexIdx < _assimpMesh->mNumVertices; + ++vertexIdx) + { + // Add the vertex + math::Vector3d vertex; + math::Vector3d normal; + vertex.X(_assimpMesh->mVertices[vertexIdx].x); + vertex.Y(_assimpMesh->mVertices[vertexIdx].y); + vertex.Z(_assimpMesh->mVertices[vertexIdx].z); + normal.X(_assimpMesh->mNormals[vertexIdx].x); + normal.Y(_assimpMesh->mNormals[vertexIdx].y); + normal.Z(_assimpMesh->mNormals[vertexIdx].z); + vertex = _transform * vertex; + normal = rot * normal; + normal.Normalize(); + subMesh.AddVertex(vertex); + subMesh.AddNormal(normal); + // Iterate over sets of texture coordinates + int uvIdx = 0; + while(_assimpMesh->HasTextureCoords(uvIdx)) + { + math::Vector3d texcoords; + texcoords.X(_assimpMesh->mTextureCoords[uvIdx][vertexIdx].x); + texcoords.Y(_assimpMesh->mTextureCoords[uvIdx][vertexIdx].y); + // TODO(luca) why do we need 1.0 - Y? + subMesh.AddTexCoordBySet(texcoords.X(), 1.0 - texcoords.Y(), uvIdx); + ++uvIdx; + } + } + for (unsigned faceIdx = 0; faceIdx < _assimpMesh->mNumFaces; ++faceIdx) + { + auto& face = _assimpMesh->mFaces[faceIdx]; + subMesh.AddIndex(face.mIndices[0]); + subMesh.AddIndex(face.mIndices[1]); + subMesh.AddIndex(face.mIndices[2]); + } + subMesh.SetMaterialIndex(_assimpMesh->mMaterialIndex); + return subMesh; +} + +////////////////////////////////////////////////// +AssimpLoader::AssimpLoader() +: MeshLoader(), dataPtr(utils::MakeUniqueImpl<Implementation>()) +{ + this->dataPtr->importer.SetPropertyBool(AI_CONFIG_PP_FD_REMOVE, true); + this->dataPtr->importer.SetPropertyBool( + AI_CONFIG_IMPORT_REMOVE_EMPTY_BONES, false); +} + +////////////////////////////////////////////////// +AssimpLoader::~AssimpLoader() +{ +} + +////////////////////////////////////////////////// +Mesh *AssimpLoader::Load(const std::string &_filename) +{ + Mesh *mesh = new Mesh(); + std::string path = common::parentPath(_filename); + const aiScene* scene = this->dataPtr->importer.ReadFile(_filename, + aiProcess_JoinIdenticalVertices | + aiProcess_RemoveRedundantMaterials | + aiProcess_SortByPType | +#ifndef GZ_ASSIMP_PRE_5_2_0 + aiProcess_PopulateArmatureData | +#endif + aiProcess_Triangulate | + aiProcess_GenNormals | + 0); + if (scene == nullptr) + { + ignerr << "Unable to import mesh [" << _filename << "]" << std::endl; + return mesh; + } + auto& rootNode = scene->mRootNode; + auto rootName = ToString(rootNode->mName); + auto transform = scene->mRootNode->mTransformation; + aiVector3D rootScaling, rootAxis, rootPos; + float angle; + transform.Decompose(rootScaling, rootAxis, angle, rootPos); + // drop rotation, but keep scaling and position + // TODO(luca) it seems imported assets are rotated by 90 degrees + // as documented here https://github.com/assimp/assimp/issues/849 + // remove workaround when fixed + transform = aiMatrix4x4(rootScaling, aiQuaternion(), rootPos); + + auto rootTransform = this->dataPtr->ConvertTransform(transform); + + // Add the materials first + for (unsigned _matIdx = 0; _matIdx < scene->mNumMaterials; ++_matIdx) + { + auto mat = this->dataPtr->CreateMaterial(scene, _matIdx, path); + mesh->AddMaterial(mat); + } + // Create the skeleton + { + std::unordered_set<std::string> boneNames; + this->dataPtr->RecursiveStoreBoneNames(scene, rootNode, boneNames); + auto rootSkelNode = new SkeletonNode( + nullptr, rootName, rootName, SkeletonNode::NODE); + rootSkelNode->SetTransform(rootTransform); + rootSkelNode->SetModelTransform(rootTransform); + for (unsigned childIdx = 0; childIdx < rootNode->mNumChildren; ++childIdx) + { + // First populate the skeleton with the node transforms + this->dataPtr->RecursiveSkeletonCreate( + rootNode->mChildren[childIdx], rootSkelNode, + rootTransform, boneNames); + } + rootSkelNode->SetParent(nullptr); + + SkeletonPtr rootSkeleton = std::make_shared<Skeleton>(rootSkelNode); + mesh->SetSkeleton(rootSkeleton); + } + // Now create the meshes + // Recursive call to keep track of transforms, + // mesh is passed by reference and edited throughout + this->dataPtr->RecursiveCreate(scene, rootNode, rootTransform, mesh); + // Add the animations + for (unsigned animIdx = 0; animIdx < scene->mNumAnimations; ++animIdx) + { + auto& anim = scene->mAnimations[animIdx]; + auto animName = ToString(anim->mName); + SkeletonAnimation* skelAnim = new SkeletonAnimation(animName); + for (unsigned chanIdx = 0; chanIdx < anim->mNumChannels; ++chanIdx) + { + auto& animChan = anim->mChannels[chanIdx]; + auto chanName = ToString(animChan->mNodeName); + for (unsigned keyIdx = 0; keyIdx < animChan->mNumPositionKeys; ++keyIdx) + { + // Note, Scaling keys are not supported right now + // Compute the position into a math pose + auto& posKey = animChan->mPositionKeys[keyIdx]; + auto& quatKey = animChan->mRotationKeys[keyIdx]; + math::Vector3d pos(posKey.mValue.x, posKey.mValue.y, posKey.mValue.z); + math::Quaterniond quat(quatKey.mValue.w, quatKey.mValue.x, + quatKey.mValue.y, quatKey.mValue.z); + math::Pose3d pose(pos, quat); + // Time is in ms + skelAnim->AddKeyFrame(chanName, posKey.mTime / 1000.0, pose); + } + } + mesh->MeshSkeleton()->AddAnimation(skelAnim); + } + + this->dataPtr->ApplyInvBindTransform(mesh->MeshSkeleton()); + + return mesh; +} + +///////////////////////////////////////////////// +void AssimpLoader::Implementation::ApplyInvBindTransform( + SkeletonPtr _skeleton) const + +{ + std::queue<SkeletonNode *> queue; + queue.push(_skeleton->RootNode()); + + while (!queue.empty()) + { + SkeletonNode *node = queue.front(); + queue.pop(); + if (nullptr == node) + continue; + + if (node->HasInvBindTransform()) + { + node->SetModelTransform(node->InverseBindTransform().Inverse(), false); + } + for (unsigned int i = 0; i < node->ChildCount(); i++) + queue.push(node->Child(i)); + } +} + +} +} diff --git a/graphics/src/AssimpLoader_TEST.cc b/graphics/src/AssimpLoader_TEST.cc new file mode 100644 index 000000000..a32a0a331 --- /dev/null +++ b/graphics/src/AssimpLoader_TEST.cc @@ -0,0 +1,699 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#include <gtest/gtest.h> + +#include "gz/common/Material.hh" +#include "gz/common/Mesh.hh" +#include "gz/common/Skeleton.hh" +#include "gz/common/SkeletonAnimation.hh" +#include "gz/common/SubMesh.hh" +#include "gz/common/AssimpLoader.hh" + +#include "gz/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/TestPaths.hh" + +using namespace gz; +class AssimpLoader : public common::testing::AutoLogFixture { }; + +///////////////////////////////////////////////// +TEST_F(AssimpLoader, LoadBox) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "box.dae")); + + EXPECT_STREQ("unknown", mesh->Name().c_str()); + EXPECT_EQ(math::Vector3d(1, 1, 1), mesh->Max()); + EXPECT_EQ(math::Vector3d(-1, -1, -1), mesh->Min()); + // 36 vertices, 24 unique, 12 shared. + EXPECT_EQ(24u, mesh->VertexCount()); + EXPECT_EQ(24u, mesh->NormalCount()); + EXPECT_EQ(36u, mesh->IndexCount()); + EXPECT_EQ(0u, mesh->TexCoordCount()); + EXPECT_EQ(1u, mesh->SubMeshCount()); + EXPECT_EQ(1u, mesh->MaterialCount()); + + // Make sure we can read a submesh name + EXPECT_STREQ("Cube", mesh->SubMeshByIndex(0).lock()->Name().c_str()); +} + +///////////////////////////////////////////////// +TEST_F(AssimpLoader, Material) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "box.dae")); + ASSERT_TRUE(mesh); + + EXPECT_EQ(mesh->MaterialCount(), 1u); + + common::MaterialPtr mat = mesh->MaterialByIndex(0u); + ASSERT_TRUE(mat != nullptr); + + // Make sure we read the specular value + EXPECT_EQ(math::Color(0.0, 0.0, 0.0, 1.0), mat->Ambient()); + EXPECT_EQ(math::Color(0.64f, 0.64f, 0.64f, 1.0f), mat->Diffuse()); + EXPECT_EQ(math::Color(0.5, 0.5, 0.5, 1.0), mat->Specular()); + EXPECT_EQ(math::Color(0.0, 0.0, 0.0, 1.0), mat->Emissive()); + EXPECT_DOUBLE_EQ(50.0, mat->Shininess()); + // transparent: opaque="A_ONE", color=[1 1 1 1] + // transparency: 1.0 + // resulting transparency value = (1 - color.a * transparency) + EXPECT_DOUBLE_EQ(0.0, mat->Transparency()); + double srcFactor = -1; + double dstFactor = -1; + mat->BlendFactors(srcFactor, dstFactor); + EXPECT_DOUBLE_EQ(1.0, srcFactor); + EXPECT_DOUBLE_EQ(0.0, dstFactor); + + common::Mesh *meshOpaque = loader.Load( + common::testing::TestFile("data", "box_opaque.dae")); + ASSERT_TRUE(meshOpaque); + + EXPECT_EQ(meshOpaque->MaterialCount(), 1u); + + common::MaterialPtr matOpaque = meshOpaque->MaterialByIndex(0u); + ASSERT_TRUE(matOpaque != nullptr); + + // Make sure we read the specular value + EXPECT_EQ(math::Color(0.0, 0.0, 0.0, 1.0), matOpaque->Ambient()); + EXPECT_EQ(math::Color(0.64f, 0.64f, 0.64f, 1.0f), matOpaque->Diffuse()); + EXPECT_EQ(math::Color(0.5, 0.5, 0.5, 1.0), matOpaque->Specular()); + EXPECT_EQ(math::Color(0.0, 0.0, 0.0, 1.0), matOpaque->Emissive()); + EXPECT_DOUBLE_EQ(50.0, matOpaque->Shininess()); + // transparent: opaque="A_ONE", color=[1 1 1 1] + // transparency: not specified, defaults to 1.0 + // resulting transparency value = (1 - color.a * transparency) + EXPECT_DOUBLE_EQ(0.0, matOpaque->Transparency()); + srcFactor = -1; + dstFactor = -1; + matOpaque->BlendFactors(srcFactor, dstFactor); + EXPECT_DOUBLE_EQ(1.0, srcFactor); + EXPECT_DOUBLE_EQ(0.0, dstFactor); +} + +///////////////////////////////////////////////// +TEST_F(AssimpLoader, ShareVertices) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "box.dae")); + + // check number of shared vertices + std::set<unsigned int> uniqueIndices; + int shared = 0; + for (unsigned int i = 0; i < mesh->SubMeshCount(); ++i) + { + const std::shared_ptr<common::SubMesh> subMesh = + mesh->SubMeshByIndex(i).lock(); + for (unsigned int j = 0; j < subMesh->IndexCount(); ++j) + { + if (uniqueIndices.find(subMesh->Index(j)) == uniqueIndices.end()) + { + uniqueIndices.insert(subMesh->Index(j)); + } + else + { + shared++; + } + } + } + EXPECT_EQ(shared, 12); + EXPECT_EQ(uniqueIndices.size(), 24u); + + // check all vertices are unique + for (unsigned int i = 0; i < mesh->SubMeshCount(); ++i) + { + const std::shared_ptr<common::SubMesh> subMesh = + mesh->SubMeshByIndex(i).lock(); + for (unsigned int j = 0; j < subMesh->VertexCount(); ++j) + { + math::Vector3d v = subMesh->Vertex(j); + math::Vector3d n = subMesh->Normal(j); + + // Verify there is no other vertex with the same position AND normal + for (unsigned int k = j+1; k < subMesh->VertexCount(); ++k) + { + if (v == subMesh->Vertex(k)) + { + EXPECT_TRUE(n != subMesh->Normal(k)); + } + } + } + } +} + +///////////////////////////////////////////////// +TEST_F(AssimpLoader, LoadZeroCount) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "zero_count.dae")); + ASSERT_TRUE(mesh); +} + +///////////////////////////////////////////////// +TEST_F(AssimpLoader, TexCoordSets) +{ + common::AssimpLoader loader; + // This triangle mesh has multiple uv sets and vertices separated by + // line breaks + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", + "multiple_texture_coordinates_triangle.dae")); + ASSERT_TRUE(mesh); + + EXPECT_EQ(6u, mesh->VertexCount()); + EXPECT_EQ(6u, mesh->NormalCount()); + EXPECT_EQ(6u, mesh->IndexCount()); + EXPECT_EQ(6u, mesh->TexCoordCount()); + EXPECT_EQ(2u, mesh->SubMeshCount()); + EXPECT_EQ(1u, mesh->MaterialCount()); + + auto sm = mesh->SubMeshByIndex(0u); + auto subMesh = sm.lock(); + EXPECT_NE(nullptr, subMesh); + EXPECT_EQ(math::Vector3d(0, 0, 0), subMesh->Vertex(0u)); + EXPECT_EQ(math::Vector3d(10, 0, 0), subMesh->Vertex(1u)); + EXPECT_EQ(math::Vector3d(10, 10, 0), subMesh->Vertex(2u)); + EXPECT_EQ(math::Vector3d(0, 0, 1), subMesh->Normal(0u)); + EXPECT_EQ(math::Vector3d(0, 0, 1), subMesh->Normal(1u)); + EXPECT_EQ(math::Vector3d(0, 0, 1), subMesh->Normal(2u)); + EXPECT_EQ(math::Vector2d(0, 1), subMesh->TexCoord(0u)); + EXPECT_EQ(math::Vector2d(0, 1), subMesh->TexCoord(1u)); + EXPECT_EQ(math::Vector2d(0, 1), subMesh->TexCoord(2u)); + + auto smb = mesh->SubMeshByIndex(1u); + auto subMeshB = smb.lock(); + EXPECT_NE(nullptr, subMeshB); + EXPECT_EQ(math::Vector3d(10, 0, 0), subMeshB->Vertex(0u)); + EXPECT_EQ(math::Vector3d(20, 0, 0), subMeshB->Vertex(1u)); + EXPECT_EQ(math::Vector3d(20, 10, 0), subMeshB->Vertex(2u)); + EXPECT_EQ(math::Vector3d(0, 0, 1), subMeshB->Normal(0u)); + EXPECT_EQ(math::Vector3d(0, 0, 1), subMeshB->Normal(1u)); + EXPECT_EQ(math::Vector3d(0, 0, 1), subMeshB->Normal(2u)); + EXPECT_EQ(math::Vector2d(0, 1), subMeshB->TexCoord(0u)); + EXPECT_EQ(math::Vector2d(0, 1), subMeshB->TexCoord(1u)); + EXPECT_EQ(math::Vector2d(0, 1), subMeshB->TexCoord(2u)); + + EXPECT_TRUE(subMeshB->HasTexCoord(0u)); + EXPECT_TRUE(subMeshB->HasTexCoord(1u)); + EXPECT_TRUE(subMeshB->HasTexCoord(2u)); + EXPECT_FALSE(subMeshB->HasTexCoord(3u)); + + // test texture coordinate set API + EXPECT_EQ(3u, subMeshB->TexCoordSetCount()); + EXPECT_EQ(3u, subMeshB->TexCoordCountBySet(0u)); + EXPECT_EQ(math::Vector2d(0, 1), subMeshB->TexCoordBySet(0u, 0u)); + EXPECT_EQ(math::Vector2d(0, 1), subMeshB->TexCoordBySet(1u, 0u)); + EXPECT_EQ(math::Vector2d(0, 1), subMeshB->TexCoordBySet(2u, 0u)); + EXPECT_EQ(math::Vector2d(0, 1), subMeshB->TexCoordBySet(1u, 0u)); + EXPECT_EQ(math::Vector2d(0, 1), subMeshB->TexCoordBySet(2u, 0u)); + + EXPECT_TRUE(subMeshB->HasTexCoordBySet(0u, 0u)); + EXPECT_TRUE(subMeshB->HasTexCoordBySet(1u, 0u)); + EXPECT_TRUE(subMeshB->HasTexCoordBySet(2u, 0u)); + EXPECT_FALSE(subMeshB->HasTexCoordBySet(3u, 0u)); + + EXPECT_EQ(3u, subMeshB->TexCoordCountBySet(1u)); + EXPECT_EQ(math::Vector2d(0, 0.5), subMeshB->TexCoordBySet(0u, 1u)); + EXPECT_EQ(math::Vector2d(0, 0.4), subMeshB->TexCoordBySet(1u, 1u)); + EXPECT_EQ(math::Vector2d(0, 0.3), subMeshB->TexCoordBySet(2u, 1u)); + + EXPECT_TRUE(subMeshB->HasTexCoordBySet(0u, 1u)); + EXPECT_TRUE(subMeshB->HasTexCoordBySet(1u, 1u)); + EXPECT_TRUE(subMeshB->HasTexCoordBySet(2u, 1u)); + EXPECT_FALSE(subMeshB->HasTexCoordBySet(3u, 1u)); + + EXPECT_EQ(3u, subMeshB->TexCoordCountBySet(2u)); + EXPECT_EQ(math::Vector2d(0, 0.8), subMeshB->TexCoordBySet(0u, 2u)); + EXPECT_EQ(math::Vector2d(0, 0.7), subMeshB->TexCoordBySet(1u, 2u)); + EXPECT_EQ(math::Vector2d(0, 0.6), subMeshB->TexCoordBySet(2u, 2u)); + + EXPECT_TRUE(subMeshB->HasTexCoordBySet(0u, 2u)); + EXPECT_TRUE(subMeshB->HasTexCoordBySet(1u, 2u)); + EXPECT_TRUE(subMeshB->HasTexCoordBySet(2u, 2u)); + EXPECT_FALSE(subMeshB->HasTexCoordBySet(3u, 2u)); + + subMeshB->SetTexCoordBySet(2u, math::Vector2d(0.1, 0.2), 1u); + EXPECT_EQ(math::Vector2d(0.1, 0.2), subMeshB->TexCoordBySet(2u, 1u)); +} + +// Test fails for assimp below 5.2.0 +#ifndef GZ_ASSIMP_PRE_5_2_0 +///////////////////////////////////////////////// +TEST_F(AssimpLoader, LoadBoxWithAnimationOutsideSkeleton) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", + "box_with_animation_outside_skeleton.dae")); + + EXPECT_EQ(36u, mesh->IndexCount()); + EXPECT_EQ(1u, mesh->SubMeshCount()); + EXPECT_EQ(1u, mesh->MaterialCount()); + EXPECT_LT(0u, mesh->TexCoordCount()); + common::SkeletonPtr skeleton = mesh->MeshSkeleton(); + ASSERT_EQ(1u, skeleton->AnimationCount()); + common::SkeletonAnimation *anim = skeleton->Animation(0); + EXPECT_EQ(1u, anim->NodeCount()); + EXPECT_TRUE(anim->HasNode("Armature")); + auto nodeAnimation = anim->NodeAnimationByName("Armature"); + EXPECT_NE(nullptr, nodeAnimation); + EXPECT_EQ("Armature", nodeAnimation->Name()); + auto poseStart = anim->PoseAt(0.04166662); + math::Matrix4d expectedTrans = math::Matrix4d( + 1, 0, 0, 1, + 0, 1, 0, -1, + 0, 0, 1, 0, + 0, 0, 0, 1); + EXPECT_EQ(expectedTrans, poseStart.at("Armature")); + auto poseEnd = anim->PoseAt(1.666666); + expectedTrans = math::Matrix4d( + 1, 0, 0, 2, + 0, 1, 0, -1, + 0, 0, 1, 0, + 0, 0, 0, 1); + EXPECT_EQ(expectedTrans, poseEnd.at("Armature")); +} +#endif + +///////////////////////////////////////////////// +TEST_F(AssimpLoader, LoadBoxInstControllerWithoutSkeleton) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", + "box_inst_controller_without_skeleton.dae")); + + EXPECT_EQ(36u, mesh->IndexCount()); + EXPECT_EQ(24u, mesh->VertexCount()); + EXPECT_EQ(1u, mesh->SubMeshCount()); + EXPECT_EQ(1u, mesh->MaterialCount()); + EXPECT_EQ(24u, mesh->TexCoordCount()); + common::SkeletonPtr skeleton = mesh->MeshSkeleton(); + EXPECT_LT(0u, skeleton->NodeCount()); + EXPECT_NE(nullptr, skeleton->NodeById("Armature_Bone")); +} + +///////////////////////////////////////////////// +TEST_F(AssimpLoader, LoadBoxMultipleInstControllers) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "box_multiple_inst_controllers.dae")); + + EXPECT_EQ(72u, mesh->IndexCount()); + EXPECT_EQ(48u, mesh->VertexCount()); + EXPECT_EQ(2u, mesh->SubMeshCount()); + EXPECT_EQ(1u, mesh->MaterialCount()); + EXPECT_EQ(48u, mesh->TexCoordCount()); + + std::shared_ptr<common::SubMesh> submesh = mesh->SubMeshByIndex(0).lock(); + std::shared_ptr<common::SubMesh> submesh2 = mesh->SubMeshByIndex(1).lock(); + EXPECT_EQ(36u, submesh->IndexCount()); + EXPECT_EQ(36u, submesh2->IndexCount()); + EXPECT_EQ(24u, submesh->VertexCount()); + EXPECT_EQ(24u, submesh2->VertexCount()); + EXPECT_EQ(24u, submesh->TexCoordCount()); + EXPECT_EQ(24u, submesh2->TexCoordCount()); + + common::SkeletonPtr skeleton = mesh->MeshSkeleton(); + EXPECT_LT(0u, skeleton->NodeCount()); + EXPECT_NE(nullptr, skeleton->NodeById("Armature_Bone")); +} + +///////////////////////////////////////////////// +TEST_F(AssimpLoader, LoadBoxNestedAnimation) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "box_nested_animation.dae")); + + EXPECT_EQ(36u, mesh->IndexCount()); + EXPECT_EQ(24u, mesh->VertexCount()); + EXPECT_EQ(1u, mesh->SubMeshCount()); + EXPECT_EQ(1u, mesh->MaterialCount()); + EXPECT_EQ(24u, mesh->TexCoordCount()); + common::SkeletonPtr skeleton = mesh->MeshSkeleton(); + ASSERT_EQ(1u, mesh->MeshSkeleton()->AnimationCount()); + common::SkeletonAnimation *anim = skeleton->Animation(0); + // Depends on fix in assimp main branch for nested animation naming + // TODO(luca) Fix is merged in assimp main, add when it is re-released + // EXPECT_EQ(anim->Name(), "Armature"); + EXPECT_EQ(1u, anim->NodeCount()); + EXPECT_TRUE(anim->HasNode("Armature_Bone")); + auto nodeAnimation = anim->NodeAnimationByName("Armature_Bone"); + ASSERT_NE(nullptr, nodeAnimation); + EXPECT_EQ("Armature_Bone", nodeAnimation->Name()); + auto poseStart = anim->PoseAt(0); + math::Matrix4d expectedTrans = math::Matrix4d( + 1, 0, 0, 1, + 0, 1, 0, -1, + 0, 0, 1, 0, + 0, 0, 0, 1); + EXPECT_EQ(expectedTrans, poseStart.at("Armature_Bone")); + auto poseEnd = anim->PoseAt(1.666666); + expectedTrans = math::Matrix4d( + 1, 0, 0, 2, + 0, 1, 0, -1, + 0, 0, 1, 0, + 0, 0, 0, 1); + EXPECT_EQ(expectedTrans, poseEnd.at("Armature_Bone")); +} + +///////////////////////////////////////////////// +TEST_F(AssimpLoader, LoadBoxWithDefaultStride) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "box_with_default_stride.dae")); + ASSERT_NE(mesh, nullptr); + + EXPECT_EQ(36u, mesh->IndexCount()); + EXPECT_EQ(24u, mesh->VertexCount()); + EXPECT_EQ(1u, mesh->SubMeshCount()); + EXPECT_EQ(1u, mesh->MaterialCount()); + EXPECT_EQ(24u, mesh->TexCoordCount()); + ASSERT_NE(mesh->MeshSkeleton(), nullptr); + // TODO(luca) not working, investigate + // ASSERT_EQ(1u, mesh->MeshSkeleton()->AnimationCount()); +} + +///////////////////////////////////////////////// +TEST_F(AssimpLoader, LoadBoxWithMultipleGeoms) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "box_with_multiple_geoms.dae")); + + EXPECT_EQ(72u, mesh->IndexCount()); + EXPECT_EQ(48u, mesh->VertexCount()); + EXPECT_EQ(1u, mesh->MaterialCount()); + EXPECT_EQ(48u, mesh->TexCoordCount()); + ASSERT_EQ(1u, mesh->MeshSkeleton()->AnimationCount()); + ASSERT_EQ(2u, mesh->SubMeshCount()); + EXPECT_EQ(24u, mesh->SubMeshByIndex(0).lock()->NodeAssignmentsCount()); + EXPECT_EQ(0u, mesh->SubMeshByIndex(1).lock()->NodeAssignmentsCount()); +} + +///////////////////////////////////////////////// +TEST_F(AssimpLoader, LoadBoxWithHierarchicalNodes) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "box_with_hierarchical_nodes.dae")); + + ASSERT_EQ(5u, mesh->SubMeshCount()); + + // node by itself + EXPECT_EQ("StaticCube", mesh->SubMeshByIndex(0).lock()->Name()); + + // nested node with no name so it takes the parent's name instead + EXPECT_EQ("StaticCubeParent", mesh->SubMeshByIndex(1).lock()->Name()); + + // parent node containing child node with no name + // CHANGE Assimp assigns the id to the name if the mesh has no name + EXPECT_EQ("StaticCubeNestedNoName", mesh->SubMeshByIndex(2).lock()->Name()); + + // Parent of nested node with name + EXPECT_EQ("StaticCubeParent2", mesh->SubMeshByIndex(3).lock()->Name()); + + // nested node with name + EXPECT_EQ("StaticCubeNested", mesh->SubMeshByIndex(4).lock()->Name()); +} + +///////////////////////////////////////////////// +TEST_F(AssimpLoader, MergeBoxWithDoubleSkeleton) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "box_with_double_skeleton.dae")); + ASSERT_TRUE(mesh->HasSkeleton()); + auto skeleton_ptr = mesh->MeshSkeleton(); + // The two skeletons have been joined and their root is the + // animation root, called Scene + EXPECT_EQ(skeleton_ptr->RootNode()->Name(), std::string("Scene")); +} + +// For assimp below 5.2.0 mesh loading fails because of +// failing to parse the empty <author> tag +#ifndef GZ_ASSIMP_PRE_5_2_0 +///////////////////////////////////////////////// +TEST_F(AssimpLoader, LoadCylinderAnimatedFrom3dsMax) +{ + // TODO(anyone) This test shows that the mesh loads without crashing, but the + // mesh animation looks deformed when loaded. That still needs to be + // addressed. + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", + "cylinder_animated_from_3ds_max.dae")); + + EXPECT_EQ("unknown", mesh->Name()); + EXPECT_EQ(194u, mesh->VertexCount()); + EXPECT_EQ(194u, mesh->NormalCount()); + EXPECT_EQ(852u, mesh->IndexCount()); + EXPECT_LT(0u, mesh->TexCoordCount()); + EXPECT_EQ(1u, mesh->MaterialCount()); + + EXPECT_EQ(1u, mesh->SubMeshCount()); + auto subMesh = mesh->SubMeshByIndex(0); + ASSERT_NE(nullptr, subMesh.lock()); + EXPECT_EQ("Cylinder01", subMesh.lock()->Name()); + + EXPECT_TRUE(mesh->HasSkeleton()); + auto skeleton = mesh->MeshSkeleton(); + ASSERT_NE(nullptr, skeleton); + ASSERT_EQ(1u, skeleton->AnimationCount()); + + auto anim = skeleton->Animation(0); + ASSERT_NE(nullptr, anim); + // TODO(luca) Fix is merged in assimp main, add when it is re-released + // EXPECT_EQ("Bone02", anim->Name()); + EXPECT_EQ(1u, anim->NodeCount()); + EXPECT_TRUE(anim->HasNode("Bone02")); +} +#endif + +///////////////////////////////////////////////// +TEST_F(AssimpLoader, LoadObjBox) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "box.obj")); + + EXPECT_STREQ("unknown", mesh->Name().c_str()); + EXPECT_EQ(math::Vector3d(1, 1, 1), mesh->Max()); + EXPECT_EQ(math::Vector3d(-1, -1, -1), mesh->Min()); + // 36 vertices after triangulation, assimp optimizes to 24 + EXPECT_EQ(24u, mesh->VertexCount()); + EXPECT_EQ(24u, mesh->NormalCount()); + EXPECT_EQ(36u, mesh->IndexCount()); + EXPECT_EQ(0u, mesh->TexCoordCount()); + EXPECT_EQ(1u, mesh->SubMeshCount()); + EXPECT_EQ(1u, mesh->MaterialCount()); + + // Make sure we can read the submesh name + EXPECT_STREQ("Cube_Cube.001", mesh->SubMeshByIndex(0).lock()->Name().c_str()); + + EXPECT_EQ(mesh->MaterialCount(), 1u); + + const common::MaterialPtr mat = mesh->MaterialByIndex(0u); + ASSERT_TRUE(mat.get()); + + // Make sure we read the material color values + EXPECT_EQ(mat->Ambient(), math::Color(0.0, 0.0, 0.0, 1.0)); + EXPECT_EQ(mat->Diffuse(), math::Color(0.512f, 0.512f, 0.512f, 1.0f)); + EXPECT_EQ(mat->Specular(), math::Color(0.25, 0.25, 0.25, 1.0)); + EXPECT_DOUBLE_EQ(mat->Transparency(), 0.0); +} + + +///////////////////////////////////////////////// +// This tests opening an OBJ file that has an invalid material reference +TEST_F(AssimpLoader, ObjInvalidMaterial) +{ + common::AssimpLoader loader; + + std::string meshFilename = + common::testing::TestFile("data", "invalid_material.obj"); + + common::Mesh *mesh = loader.Load(meshFilename); + + EXPECT_TRUE(mesh != nullptr); +} + +///////////////////////////////////////////////// +// Open a non existing file +TEST_F(AssimpLoader, NonExistingMesh) +{ + common::AssimpLoader loader; + + std::string meshFilename = + common::testing::TestFile("data", "non_existing_mesh.glb"); + + common::Mesh *mesh = loader.Load(meshFilename); + + EXPECT_EQ(mesh->SubMeshCount(), 0); +} + +///////////////////////////////////////////////// +// This test opens a FBX file +TEST_F(AssimpLoader, LoadFbxBox) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "box.fbx")); + + EXPECT_STREQ("unknown", mesh->Name().c_str()); + EXPECT_EQ(math::Vector3d(100, 100, 100), mesh->Max()); + EXPECT_EQ(math::Vector3d(-100, -100, -100), mesh->Min()); + + EXPECT_EQ(24u, mesh->VertexCount()); + EXPECT_EQ(24u, mesh->NormalCount()); + EXPECT_EQ(36u, mesh->IndexCount()); + EXPECT_EQ(24u, mesh->TexCoordCount()); + EXPECT_EQ(1u, mesh->SubMeshCount()); + EXPECT_EQ(1u, mesh->MaterialCount()); + + // Make sure we can read the submesh name + EXPECT_STREQ("Cube", mesh->SubMeshByIndex(0).lock()->Name().c_str()); + + EXPECT_EQ(mesh->MaterialCount(), 1u); + + const common::MaterialPtr mat = mesh->MaterialByIndex(0u); + ASSERT_TRUE(mat.get()); + + // Make sure we read the material color values + EXPECT_EQ(mat->Ambient(), math::Color(0.0f, 0.0f, 0.0f, 1.0f)); + EXPECT_EQ(mat->Diffuse(), math::Color(0.8f, 0.8f, 0.8f, 1.0f)); + EXPECT_EQ(mat->Specular(), math::Color(0.8f, 0.8f, 0.8f, 1.0f)); + EXPECT_DOUBLE_EQ(mat->Transparency(), 0.0); +} + +///////////////////////////////////////////////// +// This test opens a GLB file +TEST_F(AssimpLoader, LoadGlTF2Box) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "box.glb")); + + EXPECT_STREQ("unknown", mesh->Name().c_str()); + EXPECT_EQ(math::Vector3d(1, 1, 1), mesh->Max()); + EXPECT_EQ(math::Vector3d(-1, -1, -1), mesh->Min()); + + EXPECT_EQ(24u, mesh->VertexCount()); + EXPECT_EQ(24u, mesh->NormalCount()); + EXPECT_EQ(36u, mesh->IndexCount()); + EXPECT_EQ(24u, mesh->TexCoordCount()); + EXPECT_EQ(1u, mesh->SubMeshCount()); + EXPECT_EQ(1u, mesh->MaterialCount()); + + // Make sure we can read the submesh name + EXPECT_STREQ("Cube", mesh->SubMeshByIndex(0).lock()->Name().c_str()); + + EXPECT_EQ(mesh->MaterialCount(), 1u); + + const common::MaterialPtr mat = mesh->MaterialByIndex(0u); + ASSERT_TRUE(mat.get()); + + // Make sure we read the material color values + EXPECT_EQ(mat->Ambient(), math::Color(0.4f, 0.4f, 0.4f, 1.0f)); + EXPECT_EQ(mat->Diffuse(), math::Color(0.8f, 0.8f, 0.8f, 1.0f)); + EXPECT_EQ(mat->Specular(), math::Color(0.0f, 0.0f, 0.0f, 1.0f)); + EXPECT_DOUBLE_EQ(mat->Transparency(), 0.0); +} + +///////////////////////////////////////////////// +// Use a fully featured glb test asset, including PBR textures, emissive maps +// embedded textures, lightmaps, animations to test advanced glb features +TEST_F(AssimpLoader, LoadGlbPbrAsset) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "fully_featured.glb")); + + EXPECT_STREQ("unknown", mesh->Name().c_str()); + + EXPECT_EQ(mesh->SubMeshCount(), 7); + EXPECT_STREQ("Floor", mesh->SubMeshByIndex(0).lock()->Name().c_str()); + EXPECT_STREQ("SquareShelf", mesh->SubMeshByIndex(1).lock()->Name().c_str()); + EXPECT_STREQ("OpenRoboticsLogo.002", + mesh->SubMeshByIndex(2).lock()->Name().c_str()); + EXPECT_STREQ("OpenRoboticsLogo.001", + mesh->SubMeshByIndex(3).lock()->Name().c_str()); + EXPECT_STREQ("EmissiveCube", mesh->SubMeshByIndex(4).lock()->Name().c_str()); + EXPECT_STREQ("OpenCola", mesh->SubMeshByIndex(5).lock()->Name().c_str()); + EXPECT_STREQ("OpenRoboticsLogo", + mesh->SubMeshByIndex(6).lock()->Name().c_str()); + + // Emissive cube has an embedded emissive texture + auto materialId = mesh->SubMeshByIndex(4).lock()->GetMaterialIndex(); + ASSERT_TRUE(materialId.has_value()); + auto material = mesh->MaterialByIndex(materialId.value()); + ASSERT_NE(material, nullptr); + auto pbr = material->PbrMaterial(); + ASSERT_NE(pbr, nullptr); + EXPECT_NE(pbr->EmissiveMapData(), nullptr); + + // SquareShelf has full PBR textures, including metallicroughness + // and ambient occlusion + materialId = mesh->SubMeshByIndex(1).lock()->GetMaterialIndex(); + ASSERT_TRUE(materialId.has_value()); + material = mesh->MaterialByIndex(materialId.value()); + ASSERT_NE(material, nullptr); + pbr = material->PbrMaterial(); + ASSERT_NE(pbr, nullptr); + + // Check the texture data itself + auto img = material->TextureData(); + ASSERT_NE(img, nullptr); + EXPECT_EQ(img->Width(), 512); + EXPECT_EQ(img->Height(), 512); + // A black and a white pixel + EXPECT_EQ(img->Pixel(0, 0), math::Color(0.0f, 0.0f, 0.0f, 1.0f)); + EXPECT_EQ(img->Pixel(100, 100), math::Color(1.0f, 1.0f, 1.0f, 1.0f)); + + + EXPECT_NE(pbr->NormalMapData(), nullptr); + // Metallic roughness and alpha from textures only works in assimp > 5.2.0 +#ifndef GZ_ASSIMP_PRE_5_2_0 + // Alpha from textures + EXPECT_TRUE(material->TextureAlphaEnabled()); + EXPECT_TRUE(material->TwoSidedEnabled()); + EXPECT_EQ(material->AlphaThreshold(), 0.5); + // Metallic and roughness maps + EXPECT_NE(pbr->MetalnessMapData(), nullptr); + EXPECT_NE(pbr->RoughnessMapData(), nullptr); + // Check pixel values to test metallicroughness texture splitting + EXPECT_FLOAT_EQ(pbr->MetalnessMapData()->Pixel(256, 256).R(), 0.0); + EXPECT_FLOAT_EQ(pbr->RoughnessMapData()->Pixel(256, 256).R(), 124.0 / 255.0); + // Bug in assimp 5.0.x that doesn't parse coordinate sets properly + EXPECT_EQ(pbr->LightMapTexCoordSet(), 1); +#endif + EXPECT_NE(pbr->LightMapData(), nullptr); + + // Mesh has 3 animations + auto skel = mesh->MeshSkeleton(); + ASSERT_NE(skel, nullptr); + ASSERT_EQ(skel->AnimationCount(), 3); + EXPECT_STREQ("Action1", skel->Animation(0)->Name().c_str()); + EXPECT_STREQ("Action2", skel->Animation(1)->Name().c_str()); + EXPECT_STREQ("Action3", skel->Animation(2)->Name().c_str()); +} diff --git a/graphics/src/CMakeLists.txt b/graphics/src/CMakeLists.txt index 473caf9a4..aa832387e 100644 --- a/graphics/src/CMakeLists.txt +++ b/graphics/src/CMakeLists.txt @@ -16,6 +16,7 @@ target_link_libraries(${graphics_target} gz-math${GZ_MATH_VER}::gz-math${GZ_MATH_VER} gz-utils${GZ_UTILS_VER}::gz-utils${GZ_UTILS_VER} PRIVATE + ${GzAssimp_LIBRARIES} GTS::GTS FreeImage::FreeImage) @@ -27,6 +28,17 @@ gz_build_tests( gz-common${GZ_COMMON_VER}-testing ) +# Assimp doesn't offer preprocessor version, use cmake to set a compatibility +# mode for versions below 5.2.0 +if(${GzAssimp_VERSION} STRLESS "5.2.0") + message("Warning, assimp below 5.2.0 detected, setting compatibility mode") + target_compile_definitions(${graphics_target} PRIVATE GZ_ASSIMP_PRE_5_2_0) + if(TARGET UNIT_AssimpLoader_TEST) + target_compile_definitions(UNIT_AssimpLoader_TEST PRIVATE GZ_ASSIMP_PRE_5_2_0) + endif() +endif() + + if(USE_EXTERNAL_TINYXML2) # If we are using an external copy of tinyxml2, add its imported target diff --git a/graphics/src/Material.cc b/graphics/src/Material.cc index 79e3ab34f..60469be85 100644 --- a/graphics/src/Material.cc +++ b/graphics/src/Material.cc @@ -40,6 +40,9 @@ class gz::common::Material::Implementation /// \brief the texture image file name public: std::string texImage; + /// \brief Texture raw data + public: std::shared_ptr<const Image> texData; + /// \brief the ambient light color public: math::Color ambient; @@ -138,9 +141,17 @@ std::string Material::Name() const } ////////////////////////////////////////////////// -void Material::SetTextureImage(const std::string &_tex) +void Material::SetTextureImage(const std::string &_tex, + const std::shared_ptr<const Image> &_img) { this->dataPtr->texImage = _tex; + this->dataPtr->texData = _img; +} + +////////////////////////////////////////////////// +std::shared_ptr<const Image> Material::TextureData() const +{ + return this->dataPtr->texData; } ////////////////////////////////////////////////// @@ -148,6 +159,7 @@ void Material::SetTextureImage(const std::string &_tex, const std::string &_resourcePath) { this->dataPtr->texImage = common::joinPaths(_resourcePath, _tex); + this->dataPtr->texData = nullptr; // If the texture image doesn't exist then try the next most likely path. if (!exists(this->dataPtr->texImage)) diff --git a/graphics/src/Material_TEST.cc b/graphics/src/Material_TEST.cc index 74fbb961f..a3f34d5b9 100644 --- a/graphics/src/Material_TEST.cc +++ b/graphics/src/Material_TEST.cc @@ -16,6 +16,7 @@ #include <gtest/gtest.h> +#include "gz/common/Image.hh" #include "gz/common/Material.hh" #include "gz/common/Pbr.hh" @@ -32,9 +33,12 @@ TEST_F(MaterialTest, Material) EXPECT_TRUE(mat.Ambient() == math::Color(1.0f, 0.5f, 0.2f, 1.0f)); EXPECT_TRUE(mat.Diffuse() == math::Color(1.0f, 0.5f, 0.2f, 1.0f)); EXPECT_STREQ("gz_material_0", mat.Name().c_str()); + EXPECT_EQ(nullptr, mat.TextureData()); - mat.SetTextureImage("texture_image"); + auto texImg = std::make_shared<common::Image>(); + mat.SetTextureImage("texture_image", texImg); EXPECT_STREQ("texture_image", mat.TextureImage().c_str()); + EXPECT_EQ(texImg, mat.TextureData()); mat.SetTextureImage("texture_image", "/path"); std::string texturePath = common::joinPaths("/path", "..", diff --git a/graphics/src/MeshManager.cc b/graphics/src/MeshManager.cc index 890688eb1..085dbb623 100644 --- a/graphics/src/MeshManager.cc +++ b/graphics/src/MeshManager.cc @@ -18,7 +18,8 @@ #include <sys/stat.h> #include <string> #include <mutex> -#include <map> +#include <unordered_map> +#include <unordered_set> #include <cctype> #ifndef _WIN32 @@ -29,6 +30,7 @@ #include "gz/common/Console.hh" #include "gz/common/Mesh.hh" #include "gz/common/SubMesh.hh" +#include "gz/common/AssimpLoader.hh" #include "gz/common/ColladaLoader.hh" #include "gz/common/ColladaExporter.hh" #include "gz/common/OBJLoader.hh" @@ -58,14 +60,20 @@ class gz::common::MeshManager::Implementation /// \brief 3D mesh loader for OBJ files public: OBJLoader objLoader; + /// \brief 3D mesh loader for Assimp assets (others) + public: AssimpLoader assimpLoader; + /// \brief Dictionary of meshes, indexed by name - public: std::map<std::string, Mesh*> meshes; + public: std::unordered_map<std::string, Mesh*> meshes; /// \brief supported file extensions for meshes - public: std::vector<std::string> fileExtensions; + public: std::unordered_set<std::string> fileExtensions; /// \brief Mutex to protect the mesh map public: std::mutex mutex; + + /// \brief True if assimp is used for loading all supported mesh formats + public: bool forceAssimp; #ifdef _WIN32 #pragma warning(pop) #endif @@ -97,9 +105,13 @@ MeshManager::MeshManager() this->CreateTube("selection_tube", 1.0f, 1.2f, 0.01f, 1, 64); - this->dataPtr->fileExtensions.push_back("stl"); - this->dataPtr->fileExtensions.push_back("dae"); - this->dataPtr->fileExtensions.push_back("obj"); + this->dataPtr->fileExtensions.insert("stl"); + this->dataPtr->fileExtensions.insert("dae"); + this->dataPtr->fileExtensions.insert("obj"); + this->dataPtr->fileExtensions.insert("gltf"); + this->dataPtr->fileExtensions.insert("glb"); + this->dataPtr->fileExtensions.insert("fbx"); + } ////////////////////////////////////////////////// @@ -137,19 +149,27 @@ const Mesh *MeshManager::Load(const std::string &_filename) std::transform(extension.begin(), extension.end(), extension.begin(), ::tolower); MeshLoader *loader = nullptr; - - if (extension == "stl" || extension == "stlb" || extension == "stla") - loader = &this->dataPtr->stlLoader; - else if (extension == "dae") - loader = &this->dataPtr->colladaLoader; - else if (extension == "obj") - loader = &this->dataPtr->objLoader; + this->SetAssimpEnvs(); + if (this->dataPtr->forceAssimp) + { + loader = &this->dataPtr->assimpLoader; + } else { - gzerr << "Unsupported mesh format for file[" << _filename << "]\n"; - return nullptr; + if (extension == "stl" || extension == "stlb" || extension == "stla") + loader = &this->dataPtr->stlLoader; + else if (extension == "dae") + loader = &this->dataPtr->colladaLoader; + else if (extension == "obj") + loader = &this->dataPtr->objLoader; + else if (extension == "gltf" || extension == "glb" || extension == "fbx") + loader = &this->dataPtr->assimpLoader; + else + { + gzerr << "Unsupported mesh format for file[" << _filename << "]\n"; + return nullptr; + } } - // This mutex prevents two threads from loading the same mesh at the // same time. std::lock_guard<std::mutex> lock(this->dataPtr->mutex); @@ -199,8 +219,7 @@ bool MeshManager::IsValidFilename(const std::string &_filename) std::transform(extension.begin(), extension.end(), extension.begin(), ::tolower); - return std::find(this->dataPtr->fileExtensions.begin(), - this->dataPtr->fileExtensions.end(), extension) != + return this->dataPtr->fileExtensions.find(extension) != this->dataPtr->fileExtensions.end(); } @@ -231,9 +250,7 @@ void MeshManager::AddMesh(Mesh *_mesh) ////////////////////////////////////////////////// const Mesh *MeshManager::MeshByName(const std::string &_name) const { - std::map<std::string, Mesh*>::const_iterator iter; - - iter = this->dataPtr->meshes.find(_name); + auto iter = this->dataPtr->meshes.find(_name); if (iter != this->dataPtr->meshes.end()) return iter->second; @@ -274,8 +291,7 @@ bool MeshManager::HasMesh(const std::string &_name) const if (_name.empty()) return false; - std::map<std::string, Mesh*>::const_iterator iter; - iter = this->dataPtr->meshes.find(_name); + auto iter = this->dataPtr->meshes.find(_name); return iter != this->dataPtr->meshes.end(); } @@ -1613,3 +1629,16 @@ void MeshManager::ConvertPolylinesToVerticesAndEdges( } } } + +////////////////////////////////////////////////// +void MeshManager::SetAssimpEnvs() +{ + std::string forceAssimpEnv; + common::env("GZ_MESH_FORCE_ASSIMP", forceAssimpEnv); + this->dataPtr->forceAssimp = false; + if (forceAssimpEnv == "true") + { + gzmsg << "Using assimp to load all mesh formats" << std::endl; + this->dataPtr->forceAssimp = true; + } +} diff --git a/graphics/src/Pbr.cc b/graphics/src/Pbr.cc index 6d84d8717..d17d1ee52 100644 --- a/graphics/src/Pbr.cc +++ b/graphics/src/Pbr.cc @@ -32,6 +32,9 @@ class gz::common::Pbr::Implementation /// \brief Normal map public: std::string normalMap = ""; + /// \brief Pointer containing the normal map data, if loaded from memory + public: std::shared_ptr<const Image> normalMapData = nullptr; + /// \brief Normal map space public: NormalMapSpace normalMapSpace = NormalMapSpace::TANGENT; @@ -44,15 +47,31 @@ class gz::common::Pbr::Implementation /// \brief Roughness map (metal workflow only) public: std::string roughnessMap = ""; + /// \brief Pointer containing the roughness map data, + /// if loaded from memory + public: std::shared_ptr<const Image> roughnessMapData = nullptr; + /// \brief Metalness map (metal workflow only) public: std::string metalnessMap = ""; + /// \brief Pointer containing the metalness map data, + /// if loaded from memory + public: std::shared_ptr<const Image> metalnessMapData = nullptr; + /// \brief Emissive map public: std::string emissiveMap = ""; + /// \brief Pointer containing the emissive map data, + /// if loaded from memory + public: std::shared_ptr<const Image> emissiveMapData = nullptr; + /// \brief Light map public: std::string lightMap; + /// \brief Pointer containing the light map data, + /// if loaded from memory + public: std::shared_ptr<const Image> lightMapData = nullptr; + /// \brief Light map texture coordinate set public: unsigned int lightMapUvSet = 0u; @@ -93,11 +112,17 @@ bool Pbr::operator==(const Pbr &_pbr) const { return (this->dataPtr->albedoMap == _pbr.dataPtr->albedoMap) && (this->dataPtr->normalMap == _pbr.dataPtr->normalMap) + && (this->dataPtr->normalMapData == _pbr.dataPtr->normalMapData) && (this->dataPtr->metalnessMap == _pbr.dataPtr->metalnessMap) + && (this->dataPtr->metalnessMapData == _pbr.dataPtr->metalnessMapData) && (this->dataPtr->roughnessMap == _pbr.dataPtr->roughnessMap) + && (this->dataPtr->roughnessMapData == _pbr.dataPtr->roughnessMapData) && (this->dataPtr->glossinessMap == _pbr.dataPtr->glossinessMap) && (this->dataPtr->environmentMap == _pbr.dataPtr->environmentMap) && (this->dataPtr->emissiveMap == _pbr.dataPtr->emissiveMap) + && (this->dataPtr->emissiveMapData == _pbr.dataPtr->emissiveMapData) + && (this->dataPtr->lightMap == _pbr.dataPtr->lightMap) + && (this->dataPtr->lightMapData == _pbr.dataPtr->lightMapData) && (this->dataPtr->ambientOcclusionMap == _pbr.dataPtr->ambientOcclusionMap) && (gz::math::equal( @@ -133,10 +158,18 @@ NormalMapSpace Pbr::NormalMapType() const } ////////////////////////////////////////////////// -void Pbr::SetNormalMap(const std::string &_map, NormalMapSpace _space) +std::shared_ptr<const Image> Pbr::NormalMapData() const +{ + return this->dataPtr->normalMapData; +} + +////////////////////////////////////////////////// +void Pbr::SetNormalMap(const std::string &_map, NormalMapSpace _space, + const std::shared_ptr<const Image> &_img) { this->dataPtr->normalMap = _map; this->dataPtr->normalMapSpace = _space; + this->dataPtr->normalMapData = _img; } ////////////////////////////////////////////////// @@ -170,9 +203,17 @@ std::string Pbr::RoughnessMap() const } ////////////////////////////////////////////////// -void Pbr::SetRoughnessMap(const std::string &_map) +std::shared_ptr<const Image> Pbr::RoughnessMapData() const +{ + return this->dataPtr->roughnessMapData; +} + +////////////////////////////////////////////////// +void Pbr::SetRoughnessMap(const std::string &_map, + const std::shared_ptr<const Image> &_img) { this->dataPtr->roughnessMap = _map; + this->dataPtr->roughnessMapData = _img; } ////////////////////////////////////////////////// @@ -182,9 +223,17 @@ std::string Pbr::MetalnessMap() const } ////////////////////////////////////////////////// -void Pbr::SetMetalnessMap(const std::string &_map) +std::shared_ptr<const Image> Pbr::MetalnessMapData() const +{ + return this->dataPtr->metalnessMapData; +} + +////////////////////////////////////////////////// +void Pbr::SetMetalnessMap(const std::string &_map, + const std::shared_ptr<const Image> &_img) { this->dataPtr->metalnessMap = _map; + this->dataPtr->metalnessMapData = _img; } ////////////////////////////////////////////////// @@ -254,9 +303,17 @@ std::string Pbr::EmissiveMap() const } ////////////////////////////////////////////////// -void Pbr::SetEmissiveMap(const std::string &_map) +std::shared_ptr<const Image> Pbr::EmissiveMapData() const +{ + return this->dataPtr->emissiveMapData; +} + +////////////////////////////////////////////////// +void Pbr::SetEmissiveMap(const std::string &_map, + const std::shared_ptr<const Image> &_img) { this->dataPtr->emissiveMap = _map; + this->dataPtr->emissiveMapData = _img; } ////////////////////////////////////////////////// @@ -266,10 +323,18 @@ std::string Pbr::LightMap() const } ////////////////////////////////////////////////// -void Pbr::SetLightMap(const std::string &_map, unsigned int _uvSet) +std::shared_ptr<const Image> Pbr::LightMapData() const +{ + return this->dataPtr->lightMapData; +} + +////////////////////////////////////////////////// +void Pbr::SetLightMap(const std::string &_map, unsigned int _uvSet, + const std::shared_ptr<const Image> &_img) { this->dataPtr->lightMap = _map; this->dataPtr->lightMapUvSet = _uvSet; + this->dataPtr->lightMapData = _img; } ////////////////////////////////////////////////// diff --git a/graphics/src/Pbr_TEST.cc b/graphics/src/Pbr_TEST.cc index 361049d8c..30de47473 100644 --- a/graphics/src/Pbr_TEST.cc +++ b/graphics/src/Pbr_TEST.cc @@ -18,6 +18,7 @@ #include <gtest/gtest.h> #include <gz/math/Color.hh> +#include "gz/common/Image.hh" #include "gz/common/Pbr.hh" ///////////////////////////////////////////////// @@ -28,12 +29,17 @@ TEST(Pbr, BasicAPI) EXPECT_EQ(gz::common::PbrType::NONE, pbr.Type()); EXPECT_EQ(std::string(), pbr.AlbedoMap()); EXPECT_EQ(std::string(), pbr.NormalMap()); + EXPECT_EQ(nullptr, pbr.NormalMapData()); EXPECT_EQ(gz::common::NormalMapSpace::TANGENT, pbr.NormalMapType()); EXPECT_EQ(std::string(), pbr.RoughnessMap()); + EXPECT_EQ(nullptr, pbr.RoughnessMapData()); EXPECT_EQ(std::string(), pbr.MetalnessMap()); + EXPECT_EQ(nullptr, pbr.MetalnessMapData()); EXPECT_EQ(std::string(), pbr.EmissiveMap()); + EXPECT_EQ(nullptr, pbr.EmissiveMapData()); EXPECT_EQ(std::string(), pbr.LightMap()); EXPECT_EQ(0u, pbr.LightMapTexCoordSet()); + EXPECT_EQ(nullptr, pbr.LightMapData()); EXPECT_DOUBLE_EQ(0.5, pbr.Roughness()); EXPECT_DOUBLE_EQ(0.0, pbr.Metalness()); EXPECT_EQ(std::string(), pbr.SpecularMap()); @@ -49,8 +55,11 @@ TEST(Pbr, BasicAPI) pbr.SetAlbedoMap("metal_albedo_map.png"); EXPECT_EQ("metal_albedo_map.png", pbr.AlbedoMap()); - pbr.SetNormalMap("metal_normal_map.png"); + auto normalImg = std::make_shared<gz::common::Image>(); + pbr.SetNormalMap("metal_normal_map.png", gz::common::NormalMapSpace::TANGENT, + normalImg); EXPECT_EQ("metal_normal_map.png", pbr.NormalMap()); + EXPECT_EQ(normalImg, pbr.NormalMapData()); pbr.SetEnvironmentMap("metal_env_map.png"); EXPECT_EQ("metal_env_map.png", pbr.EnvironmentMap()); @@ -59,18 +68,26 @@ TEST(Pbr, BasicAPI) EXPECT_EQ("metal_ambient_occlusion_map.png", pbr.AmbientOcclusionMap()); - pbr.SetEmissiveMap("metal_emissive_map.png"); + auto emissiveImg = std::make_shared<gz::common::Image>(); + pbr.SetEmissiveMap("metal_emissive_map.png", emissiveImg); EXPECT_EQ("metal_emissive_map.png", pbr.EmissiveMap()); + EXPECT_EQ(emissiveImg, pbr.EmissiveMapData()); - pbr.SetLightMap("metal_light_map.png", 1u); + auto lightImg = std::make_shared<gz::common::Image>(); + pbr.SetLightMap("metal_light_map.png", 1u, lightImg); EXPECT_EQ("metal_light_map.png", pbr.LightMap()); EXPECT_EQ(1u, pbr.LightMapTexCoordSet()); + EXPECT_EQ(lightImg, pbr.LightMapData()); - pbr.SetRoughnessMap("roughness_map.png"); + auto roughnessImg = std::make_shared<gz::common::Image>(); + pbr.SetRoughnessMap("roughness_map.png", roughnessImg); EXPECT_EQ("roughness_map.png", pbr.RoughnessMap()); + EXPECT_EQ(roughnessImg, pbr.RoughnessMapData()); - pbr.SetMetalnessMap("metalness_map.png"); + auto metalnessImg = std::make_shared<gz::common::Image>(); + pbr.SetMetalnessMap("metalness_map.png", metalnessImg); EXPECT_EQ("metalness_map.png", pbr.MetalnessMap()); + EXPECT_EQ(metalnessImg, pbr.MetalnessMapData()); pbr.SetRoughness(0.8); EXPECT_DOUBLE_EQ(0.8, pbr.Roughness()); diff --git a/test/data/box.fbx b/test/data/box.fbx new file mode 100644 index 0000000000000000000000000000000000000000..edf8d0d2542c83dc8e731f0f5c25affa730fc24c GIT binary patch literal 26428 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 C&cHSR literal 0 HcmV?d00001 diff --git a/test/data/box.glb b/test/data/box.glb new file mode 100644 index 0000000000000000000000000000000000000000..42943474f646d0894486fc0f623fb6cc40d8ada3 GIT binary patch literal 1892 zcmb7E>rc~A6h8tAC_WI>ugm>hXWKp4`ay&VaSE&17D7UZwB6lk(zT=ylq^g3pXs0G zIk&xR78rQ9d(ZoK9`|koue-kh0KH{AmH@tX%+`omQN&|rjM#wtJhb8<WCr_o9tM68 z6$Thm*!8&I<6)us!7N;sih8lEGKF38FmeMQo%N#1#tMrZ1Ym}maS=04M$ET{sAC;r zQ<xw0I2qK_@#$0=u_2GnMQG;VNNmo?WoX4bbS*DM>jjDJ@s8W$J!ZsV!Vx1)aG3dF zVHb9I$Yaa%T&Eo*gL9up7(HUP74b&k1>wHsh%QgmVoeoG)9Sif*XzndG#ZtaC6G|q zbSQIO>u^r#s?@7$xmvD_MMv1Gn8EdMM6+0T=nmc3z08bO9EYx*#3YW`ceB&%HqDk8 zQp;=~?i?^fQ&@NJxM7;@&p%XV=y(aP-*X)bDNSdGF=H`r%Ry5Vgy}Htq~GV^k;{Jy zP$w8(1U~oU?$rfeSw+*U3Uh+Q$H$?U3GEkNoTlK12H@h&pS;%;@kK=}qS(=1qlAwE zr#*v?b>4?QFI@khaQ#MhoW#xSLMeJHVVha@PGjd_r!C&ywEWp&i9y*{F+bq`AjTJ~ z*J=tQh1u_mpOHH4{eEYRp5u;h@?Y%AR&|d1R?d5?TBGNdHj*_lQ+cgSkD~Bp5n#93 z!asz`cD8@t!;@Y5+{JItVBEz^46@(GOC8a9ytL1w+gUvlhvYmjWumw6I3lsgMvLYJ zlZ*-l9ce7-<&s!Jo=EL9?!h>iPxul9;>bGkxrABPmeneKL=48tC2Gt0kWJ>ft}W+t z0|)aJaKkP1&&O1sr{q6DTb`01>GPEQK4ths&u{~7@*^3L&dLSUO>h&Xbw;wpB^~lo z26zN7U=z<xSca$Y1UB&8fOqf)Uc(xmYw!|Y!6K~Uxe9OLF)Y9eo-6PS*5NtAt>a#T EzY%-LyZ`_I literal 0 HcmV?d00001 diff --git a/test/data/fully_featured.glb b/test/data/fully_featured.glb new file mode 100644 index 0000000000000000000000000000000000000000..f72ce4b50b1bcf9f193cf46cf15d368c72d565f3 GIT binary patch literal 3246496 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낸yP`M8!gW6?XL3vbbh0hXuk4P>!gNTcxAKzX|u0g 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�O(~+Ig<oiTj810Ldv4}aP45MgPD!-qS zrrFu9CTDq?*dp^s@lbI6C8JF74q3@Ar$?mQAtCLOl3fzTBD|kEu>g}YCnwTzJp*C; zU#_P3JBDXiMzz+Uq;_ln4K_WO0y8tGZEfgK*qN`x@BMS3hr3V=8TYV^%|24?TB(W! zUeN}e21Z~z$9P)W>0zYJNZQ}2d5Gbg+WVfdpsQPMDWS95WP}&-G4AurwYu5%D>2Z5 z-uY#J8OFY1=;{{!rvWd}W(_De8^TRnpNInQg-F-#exx)2W+8PaE_o(1i%G#AbHT^T zUi{1u%Cdg3RwJ%@k5B4qhHslGSp$$I)_<=f(?wguOLk+MUp8}l-7uwX++!+R#gYb? zehwd`F{+r<fX*)ptd&N~!V)W(&DT6Fz-Q!YolqXEe&)OH^nck$-Hu9<<9*&Ize+mC zm<m%el-VziNihocJKCL<bqzn87kSkeHFU4_SG)?|yq-Myl^W^ycawYSPN7TJrnl*R ze_eHJb8$N0w_aV&?dhz75zCXpQ{T%Ko}*d6ZyTCzG&>v7mMS@~@VwmQRMj!+Uy?2z zTZ@%+i2v&!taTvYp#p@;PJQC;EKA71g%^<|T*A_zjM~C%Uk-V9)<zMdcl!kREI8j5 zPR?0PMKk+b_9BCwoMrnHFUZM-*6#!WYiSc^(?Cl4b!a5rF#`Vi;qm#4*R^o+*>z%M zI0VrA>@OUC#|AYF?LhC7nL-D`ZeLOkO(Lmcj8g$!_uoiA+RdO~W@qiXHEE5gT4;_( zD7O+1nx(z{G-F<d`}^gNaN>N%CaY|}>`U&GA2-61onhKxaKjBBn1s%3GhS&tz4~v7 zkL~AAh&%b`4uX$F{r5Yy0|#$s!+&Ao`4@iQ`xt-}sYSS_+hO=J=(~a`xuvl<1<_)E z*536VJMAW9Gxw9~HU}}?yPox<y|C;xvNTJ4$y4s`+8zmT%k|OS`eG@L*?T3Kj<<N5 zE#KbeEPwYJUM$+{qt9#An18Sc>2Joqj$i2b7vf!OM6OviIJh2$x}yc*albcO^4=fq zG9dG_W5(`LNoN=+6z6E}QBP}W-`j#lS;!xPg5On4S`dTjq|xzl3T|u>H@;mD%@+6) z@f6QtN%J$^UR>yC>Cj>3?^wsf#ovH8%%<7?!-I_Uqr%NzFKq^?67Rr9e!uE^QVilz z!Up>u-?@=i_zdyl?KUK(Inp<V$$_e**B^()Gs(N=dnUWQK_}4m8%gM5sRIif>44V% zLLe%+%twlG-U9TBsL0QxAPn#d?6*GZPO=&xQMTU_8u}?OKCj^CVeGCj3F2A%wSt8x zcsqnsU-`hJJ)!TCvQOMTlB)z}#TBPdS<G?#n#P!3cV)t&<q$82xea{W^72{4QP4%~ zTXK~1hxNC<bc>;6QZ}Oaf6R{pjaL7Cq#vHsfVf;_K6R3FI%Pbe&4V!|8qS_|nN-w? z=%a3~+P}WHJr{4B1|J}h#0Cf{T^~#Q5aLG-QCxwQ<g7xww|_fU)8<R_g`Bs~?{60R zfq1BY)<haWv*`JSN$=@Cta8bh-~$F}A5+hBOsMQQK5rD6NwKmj)*<-pRto%{hzx#G zk4T;23>2x(I6uC9rRA|VPcbpH(xX)5;xw6zFKnQObIzk8=O^d$RdBm=TO<!inDCkN zy!*vtgN#+NsD{5c&fDuhR7j=MX}pNed;x`4&1IPAQr@0ZP<)?8LYX+FWhTuWGUs@l zp$Y$Yo9Jb_^S7o&0t@rC;n}Rv=DdVGhSdV8Q9E;^FLb9NDY4Z3e%gmY(H<Jjzy7_y zT`JFt0oQwQry%Z=7Uu~sbtk^M*da8@E*~=vjT%XhEMi=in!-tV8FnwZFr}+`a*%Io zB1SVND;P&fqO%&7G_>QhwN_h~2$bduPTYjD(jU+2YAy<+ree=0tC|k}!~;;^{2nY2 z@NSu;Y4-?Ax3c&_48@bD`KWv{%Jtbo?gaX@-nZ5O)|6`KdvxT{aX8`ni-oW!?Ka+0 z7nHEF3_Q3jP#<Q!VgZH4Y2tLEV-9-cNI-8v@f2Z^u%i0BHJy6Qx5I8lvL`wj*VhCz z7qZo=z6qOrMZ|PJR${e({p7~h<-7PQQmJ=+HEe2*g(7~CK^GS1w6Yts>)F*xB)?{+ z4;Ab;5P+uJF6MerJ5pRa7Rv)u<vcWZiSy69X9H>P(5Hls{$b^Tpjho2!plMZ*IsoD zXW}jfK#Rh$tq-1vQ^ZpDwtf7vR?TSri_)Rhq%dM?k46jO3}H;HEdS+<_Y{t2#2KJn zcnZ?W%{{Bkc}W61iQczX1RDcQKqM#oqt#StGKN7w_?YFd$vyga6!b=U<=rtI#Wk|3 z)I%F>vj$vNr#Nr9a)@o1n&R&NJ}=c7mbtr$iybfglnS|D^BLs3AQUFMq{(J`vEx+U zJ92z=F3RVkfjyTpK~j3Vc32|)?G>8YPNsv$o%06cZh&>hZzn&A!Dsp6hTy!p2Fu|< z#qt9O7-esx<MYJ~bD$aHO(kc6^4UTb>(1pegbOMfUo2QO{5Yu9qRP8I>yU3a`TO_Z zRIiIk$b8dtNn$rOncz9ZJ#e1x_#4#ymBz0^+^l84N+0u&%;I_rIl_{>ARFEf=bpw; zIjMWwPW{^U@=4#7Cj69g;tdP-LE`#&pb(WUTt=Q)W15dV_UuKqMsK|Hfv~nWI|;Ti zdqituQ?ncaGS$s1O)hu%ya41cdj7($>ZH7K^It1{*ys0v^RyI=Y=rK9_sMlsKg|Ho zY=2qoDx3!i7IrTtpet#{_j6|~TPwg>H*AN+`_j8|QJUESZgz!Z#7j_6tZwn)$^Gjv zG3A^&hs{>CC$>K|nR%ig&QFkDtVJ+MYyC_SKmw|=7N;M0@JoKYBwMAFB4Wrl<+NwK zAo2U#Q<iI4p>4>d`t<9+vZ74o=_&IHW%tH1jsE{K7JMp$JCTz{q<BgjL<crr(SxE) zMwlGyJNA2vY67JJWZ5n5L@cZ2P^I66DEMDNWr3Y71la+d#fd&A0Vy)V_}`)8cUi!} zH{?6hvN!<}pjl`PDV5FRq{c$G9PoX!PnB0AwxHEu)MXxR8)!|rpP3CmVeKi=UrmYX z{)X-T?;#c_5z8D5MT~EUYilBddLKu~5m!&$kd@g46vyjzFdIfV2bshHR@%aa_A$aZ zi75IUlBk)?8$t_}G1-z`aPiUkAX!JY43YmtwQY=8no4L5p7>qVyeY&SVp>i04&I!l zEbQ&q?1LHI9&e()C}euAxHYdCy3fJjgcEW(hMO|{ifGhod<TOw;QUwLf3U1a22vOs zpt&rbG)XwwxY^_Ptk8}DOGGuVpbW+A`WHU8h0XJ1VWdMNr-k+R$E$3s-n_lzQpDlb z<FZt_9eYihi%A~d-M{g@Y)lr(FQ>T-lI4E}XNsrZ7+T^ZtJGsVRM=%v(sIh(ayuZH zx;IQ?yo2;%!ZiR>@)KjQ?&y>a0<&AB2-@e-CB5cp6@2o>uJItJqU6*=Lgg|%dVG^I zH%&gfNj9>bHQ(YcE*<gKyLHjKj-EE;^yM3}kFx{G;E(l{r0C<}1bxoYzr!SwTC*&O zLAcV2AT9nu5pqA`;A-<LbW_7u?^SIv`P`Gg`RxGuTAPplbEoKwkZa5W1Aip$xg*ir zd3aF%xU{b`RFZb0Fyz`VOe<V1KhE~|FdzpLlONWe4pMAppodIv3eBb0p{xGVRtt&2 z5CYYj{`?EG?OTe}y#Dc$sGca!dru>^cqYI^{__=|UslY36zEyJ@axP#7v{4v#0iIf z_j!F3<vH2J(X(c=sp&|3*2H3B3-x$ySQ!47ftaep-|Xm^n<wWCqNh7=Wh>Az2n)?} z+~*Bh8Ze7&nA;=SQ}zP8(pJtoX?6UtQ))1x8Z=GW?_}0j0$vLp@W!qa*dKt>ZP~ER zWqdnkfc1DzR}QEuUJ%>Fa!G2GoOAO`!uSs^u(VLj+3aVgps{sZELt4DmqX-#iV_ig zuTJi6&zEOZ16h0=r|YyP)PpKZ9|%D%+k65}rZW&~RQMl|i(`V4gY*56cbl>?i)C&^ z*pIugmuM460_i7*0<;-{rcZ*JZGH57WzD=_`?zSu2yyHjnJhkG&NbM*jEU+<7?Uc- zHI@tMJ4VtvihSyJw$q0-RmtSHrkib`%LHHnW>V3|mWQjIrknM)0^``6X=32IIH>;B z0To7R1FungH#QT=zEOXju?oS9mrNa*d{Wfeeo$_Zk4)h)8z^$eep`~WM?Sd!I_x*f zeaJnk@_tN^3WF2MYut^&-4Uyi>FX_e5CBVne?qd@S{kU$kxl4qGy3;mvxF$ohmo$e z1;qs|yxVWPS@;e?$@WLYc@ceDD4YP2>D68)NIHt3N4^YfTJuMq);~LqZ@xM0k(x77 zx1s(}F{9`xEOZM4t7AZBcuBIEqDc1D7#t05ym>5~*+hK5v=8jA4`mA}B016Br~)42 z(B}xn2CG(|E258eklN|m5d`^wZe5Pe$GQN`PrEOT+|t<Dd_v_OyAy_Q*vGwzWy7%v z5ws}oH1A3(!545GAWGzwaB|K8N)MhE-eI~GO6B;NXI$a%>)SO~JmM;1)LaQp^fgq> z^QESdrUpD_v&;97lqj3A!Om17B=`TDi1(am@6&@_?&M2JpK`RFvLl)dYR{u_UkIJ9 zo_tPudVGXrqjsxh2XLmJqy#p`IGRsEiR?`r{mQq-Y7Q9$`V!J9Q0OoCa)rk|Rl)XJ zD1fTLbgIEX!1*qph&Xk--p@(Aus7cg^c_KR+k%!Qbhxc<ZOC2C$ofX~<3r{$*FpOK zj|<R5TSHk>^KAP(M$Oc$+s`NX14RMnFx=p!_9o1r!Rbcx3BVRQXUr$tjZw?kS+NP^ zp4C)%mLN^`ZEVSIr=bYCXjyE-4Y$w8eItirI5ju!Z_o}y@2<ov?Mz-AGF4}6y-<#Y zpcjDn*=2)R0xCV?5MP9?m2NcMuG`mym4CfphpKLlK&$H+BhD|D$B6^tiMF+fzInh& zIban4bJ?B84ejjNc|GO4zUE}3plX}75M^e+!qbf_D<ze^9*Lr+U#mCqnDyH8$6YuX zfzyf}vCBqQ=)-a|o1_>{(Wlzg)A&yy$AZ<9xVc>yqR{K-E8$ZO*tSPx4QI~W+(>VW zH|099MQJviaHo6OK4cxGOIkNFxM>_Vgs2}{SgG8t|9R;W=h~B8H%n=g?IMGIWAp;p zGPo{dB+~9(@$=CQZN9Pq_(g$m9%tT$xAaeo0{Mm~@iw}s+OT>&N~{QLoDhEa@w_=K z!MEWOBd0m6r)wmEr;u%?E~K&fU*Hp3BZI&T=BYzZ?BaT&i@WyqSyU}G=<#6Ol^%;K zyc!G0s2hcERQ(R44z?><h-dc(bNhUo4=<*jR-Oz0<B={}oz8NP<c2Mv6z?WXbGc|X zYhfQZq=8x%lNGxa{!G&EpM?%lvu^g~OfLPfr|xEYz5Z;+Iz7;w4<YSS7u!e7QtZ#< z`Nt0tKAt(%Zf9*zMR6X7AEcd+T6vo;dyt-GCy7E5{t(@~3%0klro_nr=D1d(P6s}n zQ$bISSmaBQ1ltr~&h)aKt9&70Rz>PWW}2Ok0OC9Um{6M7wo?MUP7&ftz~!C7vU{s) zE6l~4)Fg>}?YW&Oja3>P+$Z!ex`?QIelp>j(vlthW=D4<aq>@;Je60quyf0!W=04@ z4Y}S2PRJP{0q1_vk%Ra-Sscw|mHeUG9RB5W#KO=p^Cj9_dDnZB?|58USDqgNkSbQJ znP&rN)C5$@U0mmDgwC*?!dT@648nVpPGk6Z9l3kP>Tnymj<67{q}}NMlV@B(Sha3s zy!U7J>vY25+V-E|7Mqboy1H*9wv|SKEquDTtPI|ir{fr(bJXY00jV`Q1I%A9!2=zr zUI<SG6WYtadJ|bstD)=ZL0iN&9PTXscUoA6v`N8%iTLP&+a`YR@=Rdvb$Z@1*J9l` z#B;+Yb4jWOImftE!fmbM-$+~96V0@%pAB$Aw(L;}IywD=kTj}0?mv5(p=`?chvt>c z$bLDZv}A2mE<VF(i(zz{3%Wv5%%hw`-B^@X9gc(zX0B#R<&`M0FO&~y2O<-FE{VnX z8KzwNv&Wf@Ssd04iFJXw$wzRdojNB58vW!rG13oSdq^xp3$*yuULX+=n;l2LunrH- zdtxZ#E_1oUfZOHHP3`2kbTcBa+{iUR1W?4~a^89yC+PccI8*7Do<Dy1-X@r|{To`8 z&7q!RIU_JZZ7KS0lQPHtkx9`^eivp#-gF|6&o}u;^w1sX?c7Od(@_;Hwf$v-OFK+S z*JCPQ>Ce)CR>2s}6mIl*Iv%u{fF>?HU^<b&wY~VgeRco)hxflrg~_yEOmH>{L12NK z1kMFfp3r4c6Oq)#-VknD{HsaLRs;KOvHJP)#D~n#7ShxX80;9SJF?>aT-IzdEa~X| zAr@j9%k_g5-72Gh%$jaU%iR^38OPbC^!SIa!4(T?Yv+Y=sa}miz8}?;)KU_Lt)EUb z_kZrpMr2d)#3wwez44>4R~fmTgWQe!O{2;FUWybK{lm+%7wy{1)+^SawZ2<_FR(eZ zdF3Qz3g43xfJ;t+dd$3V>3`^7_Z`?G<9#xw^$Ggd^Ts!QR{l(C_B}9~{Y2k}Q!i9I zvj6t8Sq<v?>{bM7C%JVNSn<<B7&@y3|6L9U!g<@kO`ZgFb+6xZ_mH?*Y1E@dvDR<e z68)n!c&vB8F}Lm^ld(+Zjn?Ud#(UsG+W-Xx^kiJ|xxix@#<i{;ia!nDTFUH`uTbU> z!9)d|1)}?tG}vzjFbb>*P~WzQm-$l+6pPqQk?q9&-Cq<gX~%>mTAAG7du_rIQSQob z^&gCy*R|)>g_+H@8q=(H90Olm^-wzGF3&Dk-jVe+ValT4)ojqf;{CKhM%>E||4x>t z7P;mZ!BgaBJ6OEg|G^UzBhjc)QKV-fhWIACu)laR6Q&zHeXZ`x?t&@n_EFSFra2`E zEick7PQa0qohMz&M)rm)Kej%?B*e@#1Zv9GunujgOt6fYiwhkulo&PfBLxwCJjboE z>vNH7C>`_$+rr*Rh*<~?5JVahMH52k=`*f=Ot6*H9HdpUEhufULy32Ye{)GC+-&+U z)r$E@T3$Y4dXN67Q5!WL8(V)Slt<Dp>0*3Iw@?O7RQ<==%fAoqG84Z};|m`7v`b-J z8C@zkvxtn}${$eg%P6gE6H_gW;AzQP_yu3wEv*~1qggdPwBGS0Rli$|&BpCq@6JZa zO*)G&dqqSOw|PYhcvdtM3`Ti+KBgceG>Jde?R-k2nxb`Uw^UPQrTOQMnx(g-F7t^y zE>=SGDh_%(B7@(MJ>aMqCO_)Y@<o4B0iuA3{27zwQr6@dh2wYu2f;}zf@jn_d8d<7 zOzfo<?i|Q1$Xc1FmV&XD%H0)*@-P&PQ@*8Sw@=?TCnZ0#q^R!?KQ~NS_>YL7*)uwm z_(Om*&~mR>aI*Y%)f!eIG!y!&j{<wy)0~kqM3IW$@<NU(H^%blgxsKNAzpWZu=br9 zb8z0}?Hp58PiRt?mim^AjbbG{tE#Pu<HY1u?P#m6Mmv9^8O!hvAP{I?kazCaZATr+ zXL8=sF}|a_UCJU`52|u0W+!~->s&W=r7dK4^0lz8FWpUlXFn(oaOG{~QnY(}v4rV) z@O6+MDD1ZS*SE4s`)8Vzo7~6`o}O4F)+C0#75Zps3GrIXheX{f<uO<a05kmI^S}qI z<Hvu|f*O+$8*Ud5laWh-Ims6?oyno|eYRZr-ECQMKdKE*8@C`mfAGRIph=at3QqB9 zeaB%^%O5YEGg}hAZ_KUbmzn)&`ObKla9`9w`2$s~6!+HAmUc`+)|!xW+D?uA64zed zArLwfXp;Pv+vvghfwCM9;(bPDPA!61_n00B5qsKi6i0R{&)~|ot`fEk_}HWVB@8Fz zdCo4Zqye~YVt47V!6tV7FC{_4E#}p26-sUf=F8%Y#o1$mYqTR424FYnaim{$gFhBO zuq~j&8Fiub-<P#3_<yQ%S~(%@sb4cB6KzzbIV-wiU!EY~Ym)XU*@J3xj|mq5y;mYW z(3Zq!l9yZK-d|^GnXrkJ-E4YPgC?RC-|k;!>6G#bp9y$7;5C3ZQ4g5dv(Hq+zz!_) zR*Q5qI)H7_&w!xMI}%U*Yb(b?73!UNTmjTCtnDricjsb7U+{_fKB{$*GtefDm-zzC zrZg$z?w)Lp)k&5Iy-KJ0^Uj|+E$zZ?+*mS5usM6talB8ns3E<*uge*Y>PLUs7_^nT zu_1X34UXGQNrGj<S1Y(4XUWsztl6)`a*C?+;xq*Vn?{j&(K{ha4ohMA!+oPoh^)LR zA(~MFIm1s^HZkYeKP`xTBYnCkZPCAmSQq@C!E7`bBu8#U@3)UP*eL6*@ChD?e%H{` zDK%ToH{cEJu^?kFK1jfPsTxmU_*2xxRImu<l~Xy==Pn?k1rMn*cHA+DU0|x|LA;gu zr6UZ8(&)!O`jzPXinb^R)Cc^r#rJ5dHa~9-BYz#7_%yQobk-n^Vq3#iA6U@zR4F!U zBXMf((9w+Nz}Em=uO(})mcBBFe00PYl+-FN-Px}PDb9QSeR~}Cx)*fA7cLn=+G3B| zp<QneerP$hLDTzSrWr?ynbq)}J~n&lhh}aze!=gmt^Yf<|1$()qkn92HhTGIma{EO zJNa|Dmkrux^lD;_<#d_7;S_}y;XbeBwV}=rK{!i6S%@F%q0vZ!oxc&Tbw~0w(nr37 zgc!!<#;~xoIT(=rfdl}?=c}$V;>Zrc|J1#G{5p<5YIH)s1?hz8{ES)(DfqSmzw?0O zVRCG0GDDxy;crK#?}cud!QHGr>*ri?3v$VWV5H~PEt?0CS+7!?owA)N_Q>3;8uY)b zs)hg7zaXXZ=F{_2pcD8+@WwVrUdlXg_#Abi5IR~bO{h_a-3j&?4X2}%0rijJ;Lc_I zGf!TWJ6e;g@%qEGk4=upb7=|V?ToR37^X~jXS1}3PJ4ff>C^q6(4d?~Yi{jNJMWu( z8VJTZe~EvTHI5h8z8|!gzL9sLcexsqzLWn=&d2YjI@W#7&!BrW<@mXW4X}CtDp*|2 zu1em_0>d0Tj)%XaN$+ldlYCC=k1xd!k%UY0MLb{c%;10qF$Q9}cWsvtfi?iv<M>EI zvlXN1`lihbBd##J-9v{z{lKKWrFv%n?%Q~JZW?f+d?@W|A^cz+Ph?NatlX_$G3zn* z$M#v!o1^(0{lfHxs{eIbpU)A0!5UIQHsh_y;=-+(!X7#sPs*h~kHSf<3Y8ex)kIM5 z_DrCM1^V7Q_ObzxgSt}~a{LZb*k3p6(nt1G6`+O3%ole@Op?}&EN*l&D5R@O-UhmO z+Ug>|P4~M0V-MgtKq;Uf>z?=sNYSIaVUp>v)0;~+Jj7Can|VK-vNtXtRGq$vo#(r- zG&t9gSe<oF=x#-yV`w4C)Eni63&UZxE>ljnYvwo=C&4=vwx}$^24%`Eyx~g&Q(1{H znG^hY+Cm*@+n?SNPe_NF${+NAFye}e8Io&&gw;agM>~#`y)2B*=qefM|Nk9*-shVw zoP`X4JG_FLrR7;ye^!V-FHU6uc-4CR0dIo{=14wbo<qELF!8yocs_|k+<Q_ne<GgO z1<L}7c7kS{XD?;rS0EP@4^TbC^uZoIP!J`v?5x!y|9uZ~(s4z1KNr55MefL>KY!Ly z3DR4^(K#Ypg5;69OV;hpPRUBW`05(Q6P>4zml>>qqV%D^gZY>4>gLdfQxn_22>1Jj z=bcN5Q1IW>Q6X3VP|%C~F0w7O{4;HWIp&dQ&>d{QYs`$xqLC8KkB#Ib%lr-J#+z=; zt#u7Y0A);ufAW8ZZkN&EKp?=|xsES4cFWsY=fE2O|KsW%{OfFkuF)N%JGRxBJ8A5s zK^r%=?Z)0gW3{mw+qP}nwi-0f$@6{ZJ#TaVgZui;b<eC>Yt397wNV~9cs#fF*b4>x z*H1#1(oYT_1ygbLT<l1+*=RYu9<2A8A{_aVd0)yO)U~SW#tmA~6kE|!+!mL{VSiq) zkCg_RHR9dD01rlPY9r(T3#!U{gnc#Q%z5RAtl6SJ#c-IN7KG3Vk74Nk5~ld2eTLqP z`7-&f?7|vN)A&ZiC|7c8*|J|?_QYtnVq)>=*?Kkab6J0sHee^`eC)SE3_|1x-)IVm zPJsU#@0a{oHmtS!J{@Yyk0$fC;u_MS59NJX#7&x+MGnLNbIkuv`veOdKmzc2!sRX# zFTW(dJPbw5{yhn>!k|=5g^r&FtG82ohXZ<%FH7CWQCScd4tBfiycTi37;I|4puu@% zeOis4wiZ(rq-E)&_eE7fR{nGEg9K()KbBy-pvQInbY&&Bp=~d)ORAO{+Q96SdK-vF zG@n$*JA#SihVDFoSSxt5K*t(YUhpP@a|Nz0;ZsG=*2F1H6FElC_x(2fLW@oaDdNTQ zqZlDjWQU!n){0uyxf=wnF*H85<zNNjT3(Sib-85reJ3C;VRbmXXIX22%g!${Dz@OT z?%%?)p6-jY47&FMFRW<UT08oGY^GhNv2S)HK0z%#={j>2=u5pC!}eBlnH%>SPExLh ztz+{($Y0JFD|Hg5RgzY7#FNy3*m{!*(!F}{O_n&zO5g4+G*p73Y~<5-|D)=W>DSgL z>UF5QqQA?Ib^EdFD!l}{+w`HME*@S({`1BNl<qQa*JP3!!>#0*g&Mb|#^oQ|P_Obt zB3!?BFvdQ2Tl|<squyBanjx0Lt5yqje<JEOJC{dRR7>eylH+<z2`)51H6y(`eBQxE z<lAf5lJ}xwlbPGHK$$DB3XZBYutow6)%HuSa{Pa{ScvVygC#?EzVv+V9(iaiuFkh{ zrOz(P5n%~9g<jxG*2n1luwWwn&`Vu9{>6Er4aAglwO?39RvoaDXE(u2M8J5MOdo=a zW-Bs84X~4k#Hz!~_4+asYO>MKa-lc08Aew*c0mttXA`0-9&=B5kdo<`lk0#6xI1eF z-{_;6drd5PG@u9>CrQi=_V#sJdi_WQ@0XQnCJOh_MyXqsbX*_^3UK9#SfGV0)pd-H zGuo9#t7E;e=tgD)j;HI->I^vD#Z?u#{4HWFz$rws&5P~AK|>TE!|Uif)w5N*oXO=` z()doJ`TtAE7k|i`ac!J`7m2xW%Guak^^=&h_Bau)ntAohfP>FKff1Ux*$h}p`~Zo^ z33`x8g2A_h4R_WNZ&A;~jWi#^cpcr#v7;S6|K@ez6De$&39*&!gC!mLAmOZB@j-I6 zq0-vG@`y7EVNj1`fEp)kHNyRb{hyzq{Ad~iwmWTp4EkrlKFF$Mplx#aMzGRH$M`ut z7+=7Bc)GAK-_G}r$h6v)VFU4fdNXL)f&GOiA2y<Rt-RO2;a?`g^oqZHx@<a~t8H)6 zj%&-(oc=c{jq3~f!07R5E}I}8x)9(lQ{9^!x{rT~)C>DDg_L46D>iDFY4{ZO`$xQ) zx7}PriYI%|oF|v7s#U4_<_Lmlyk6QbJ7oSIdqS4-*XR7!HU#+r%gY2duxR#L&ad0{ z*GHdpfmdqIqKk2C-&*qH7V+Zoe&c<fXyv^R)_*NooRBnr-AvROiC#!&5S6OOQRR+D zlg+B4A7hPZ+itkV=GI)*R!Loo8GRY!XeOC(|0Pq#?K)>Au}g^a7?_AMg-@N9pFSQd zW{)NPm?N4XC(^>c(}}AFbS1uCL9zSrE-B3cTQ*#rZqgdVy4mXmNm_RYN7Jo3I6AEz zRPLs`KOe4RCPc7oeJ+vN3idGmFrn0>JnD}k|I-2wH5@PhE5#>aX66?!B#Mltx)tCP zCM*m6eT^Ffy^J>!Af2uYN2L#Q^sv~;IN?|QN&L}0K3XMgierx+Cp4k230$D=EQYF6 z$3b_v$r2<yU;SC%1HuaMXI`Q9m5NLpb^pOyC$uZ7_;@8JpkEdsv#|g&@rdM9HY4$O zMIpOef#91*W^GyHwLz}DN&y)PLaDDVlGv|W{x8He+4yS$UVp(+K7wVJEs;-PEGABs zQ0B4;ShzNC3D0(K3@{nsge4C=HS=0oez;$=wj>Z4OKE9j)>G)^{WV8K4kVJf<D&OE z`5nF=i~Q$v*`q#g*|Nz-5NifA3ado>z~(x#K8K4NDX-k3mMX1!;kCX8H+V~{$5A-i zf(!PCuXr8a-tPcI@|a3?xiA~TS?T?Ti+Wr<b467JqytBu{Dum(1@xR?-ugvps_-Za zMwoNRNgz&>a^u|uQ2CDzAci<I!9K$79OB10D(MnyrL9I!Rt?hB&^!D`0J|dvxNP42 zhVqwrSU**>7_dU8GbzO&w~bI)Iwi`aXhohMa?hFJPsb->m+_bFmaHS|H&hyD3J1$u zM`nGOxj6C5j+Tyds6_sgNUXO$l;~8Ccl{d>(i6)2(}c)ZDQ%V3{6Go56A^mc`pPR* z$))+>#QeA%E_%NfBz={<fTSNK0PXW_pK;5_B)suQC7&5nQGU;_s=Fj?!d=1QI&dBN zwz@XXEE3f@kOyI0Ktq6no=sTT&Ek+m;4id8@mM(TJu`cwm!Iamj%orFS2#wS!N6;* z+u@u=G1`l(Q7B!mmY0Ujzj1ZZ6B2+RUCx?jlAw3orrcwRofa6lfmgqM2_jYMKE#Yp zw8~yFx670}pozmI`!>;xMe#&<ZiPqA!V#<N99?+ww>UFY=4AAOI4{Ly1CCWM22FKj zzP`S^s?5vpD@K*dh6FQ2U%tBIuVv}=Qiy|<BD7De-5vx%8e(_32DsU<bZP}Cd43PX zlab+kTy28CkPuZp9!RBx2>SieN^K}1Bdo?7LluKBzRD?TlBllSdTpU?T;|8{Epbib zBg=hsgRV_Xa_BXEnVn017ffncofE^|<2@Wr;?>)oUFX$0?eBLJv}DM<c^FS2yfDch zyW~hfU;$*}+*H&k7=XQbI4Y`RHLe(t>d=+&6P-Y)r7vdLdX+%`u{Ybr72ZVcNArIF zNzVJ5*K&>UHK<^AmhnrL0engBkMPw}KzoiE0izYFVxF+v_%EeoVaVq90i}tU4=ZA9 z?y*rJpY~DOV7tYOa|d>n#1C9>*&+o^<s_>DV>_0|!Sf8v=($H<@wf0<l&NNmpRb`! zDH(o(0<U#PV*F}#JnU-h^7=6gn%|`xj{h*wy(l2XrOtZz>dBdk{~J%FGZeQ?t!wo9 zjC*)_pbYv!R7hENA-kvO0?!Zj00h|9B_Qf5Lf-OMJXnFYr<>PDgTEr!()7u`>D}Pb zId+_D-S(~3*YWQdr1NQOM%OU;ZTSH9k1H^oBs**tFez_)QEn1V{rWnGVbeFi1j*;v z#ZfD$P7&(ISY`8w@rkMqk1W#eDYOUjiTI3#xCqpoe@Mlf&#E74edQTw(PmMVuM8G{ zTpgHgf8SqHK`}q2Ex4uUcr~hdtj$fJln&A!3R$^)iue-i$PhnRt>%bQPH-p8?S%WQ zG>I}HzC2-T^I4M<^WfO}BYb8Lqe0?m6sN`l9o%>MEr}d^lPU)cLYeYkeVuh{j`*i4 ztGV&mDZV75;E^wcPwhi40KG~5r9XN-GXimoweiDJ?iT&E2U>*-Ma2Ggr}Fe5)Nr|? z$uZ%*Hj#`GDAJX-b6=6XesOlPtgu=+XOY4#%$|OOa%_qz_rQAB-nLCWpwE!5!3r4Q z^;MbNTI}U>T_676Rs>mJ&3E`*w+GzvoSt3Ty>FAkZOuAO`EfaQG2U%)>vV+^POUFE zLu}y(&0gt%>r$U_fXMSfW}?P95j8ZW4V{47m^GJ^9aPJ05<U;%mkncfh}EdKlx(oE zJkR_mA7Gqku(c&9t&&#p$m0ejU8+UDhRlhI3_5^(jV03ZGW#sWuPGz@`sJ|B6u(5- zD->f2bi)m+;IX4Nxe%5Z<{oLxY5YfdUsfCKnJ<tVDd<<32xn-w6Kz#SsF|JW2m+!F zwNA(Jf=gNHyOLmQD)b86sF+`hylXMf{^238>~W7AKBO)EW5NSkiE~J(Xc%7GodR~5 z|DKxH-l~rsAUA!+z1445QyF1Vh`Wiy&o!Z0*MaFmTvHjBRcSu=fVRv2`hEL!^qNWT zIN8^QjfDwtUEt>Rd_JA<pB9<lf{@{mj<FQ2mT;JB*Gv<>kQFrWv8+rxO!d-+Qc@$- z=~*AixUNz)`<Wq${p?SrY|UFGk*;i*`8la(DAX@-D)m8#)?)KMT5}t-o$^e!(_jIy zug^R*ze{_zc6hbv-vsi4273VmxZ!R1zQAXnx5s^0qv@|>O=h-IX<B$>qNttWoyFvn zu9a%US<rq=s=)MA8YrW3H&Crn(sgV(Q^IolF|?2OP6KUBp?8BBBE!}m_w*9Et?$2f z3Lf@Es84b(29NgYVOQ*>s^AF`@J4(f97o71x*zg{A^;OL;q^8|n|T-d$gqqFpR7ua zeklyC4HErK_d?QR2=gu((HB~z_5>47VnfW&q>QB{n3Tk!jZzy1FFPgn3iKE+kYyyW z_NFySwaOoO3Kx%0c6*;Sf4+zf;%2-_t}OpIlYD~G6LLQO-dlZAE6osEwHq+~)Ufai zX`<sY4DM?vIX1~;U`&DX8pWm(<7S?pmdNI2zChDOItmWPNZR-)n1p9mf_2uQ*!(BP zho!ZrRppLPPoRGE0<6&v6n%hV^z^-0K*GFgTFUwkv&vm7+p&kUfx7e)qEOl}Ob-FH znOixa4W>(eX$haW6d2J>Z&B4NDoqo}Wohc|gbFQMqBreoHtYkNlC~+!b->A9;aMlj zSo{mE3sT>Ef@^U@>UGihkgd;viw4^E&??nKX)`alKV7u<1gh>`FXa;o(Fn1@%V&PH z_t22pBpMY|BCl+}FT<+|@$C~KCVAYFMTt7GXE!_}W2RDPjm;IIQ@YwNSzyCKIfk@- zl9*-`PEhi%<Zj`Sv{oT%g}Rl8xkM%G!J0&b`BjsReKzoo!SuI}+}G`GEkmBY<wbT? zSyTgw)!Eqb$Mebf*>^|Z?3UqwV&2Lb&P#P>?uDDQB5E6RQJh_?VaB9s_o@SnEO?2F zLJU*lRML5?@|68Rea~D-4rr%j9iFybV<9<w#TO<ycpQJFs0f}1zJux){)O3s-5owD zjBjHpa>a7L$eLMB>T*J!7sN_BW*D9V0O9z>u*E{d`YGZ^<7(uA92T`-U0vmMGFaIO zT%4#+CvAi2(kkhy-C0g&aI0-kQ^rm2DVw<f|KkNPV;9hAMbg}4<b-MmL-1?pe;t+p ztnIA76?sK0=eu9+s0{)vy)N!zk+8>UgeG2XO`{TmGoYhBK8K%mh^D6)&**Cg#-*Qf zVeK<VOL|s@BspCmKZM5{Vn@&i5ws^DoJc|QpZIBAm#JNc<<sZbj741_2(u8*pU451 zD^d)UqFTXq|A*uFAF4yJ3%mk|_QFCwxMGsO{erXaoJ)OcNT9dC@%hYZyKaOdxk-5S zPO+EE$|)$3sLN<wGS}88TW4}Q=O7c~#Y6;iNfBR&cwXK+cNp-Q`jqVk(Md!e6ulJJ zjb#IUosD;=jprH{^}0PxXS;q91~43q^=q7~)Z+U4_H?2t2>XW+uARs-VoK~ukq^@M zki3LCwP&|zV(I<Jfc;Gl;dlp}(KZCqpVa1MJO%Kbe5QmtK8`>PrawX``7!)p0^hc? z7bRRc6vA{!zLHTwxwDiZ&DnpWsXGpSK?D<-?rNY^EU;S>%U_xAVR4!9QB};Mc+@}C zsI9vZp=*{X`~aCCd+3(jYM1?(DoK$!<2t@wcdVglq57$SqTMH|X;JvL<%2ImU$-KU zgPZ;GZ<cBM*;@?#AP9FrrZ?NK<d?NQ7LADqh<5vMKenAL)RKYprwuxDLVL9C4-BZE z3*-P#;yYySrIcID_KKYc*m#pN{`5}G&bl>7Mv>+}=Pb9r&SEZ>*(h2JyTQz(!d{u- zQc5&PRZJ@T3|Y~8&SeT7d-ko|-_K0E-JSo<IT!V;7g+=pHmNnnaH3^Z3K^P>q5e<Z z#Fj7nif+DWLl5qy)DBCdCFZ{uKNS)DZS>T<QmFi>cuW)08^vG4C4K1omB;R|`<23A z`K21K<NV1`$2(rGaHAZsQI^0M#2O=(DJ81uj2t&5Ga^<KNmCFO-$k}ki$4bJh$rR< zy&`k&o3^#C96_=!XHeFetj^o>wQ?Gz@$kj1<=v6xba%6b&>#wPKL%1>)ZS9qfmYm~ zjm_$UzwHu{N#&{hFXi?|R-Ch3d=o4T^NKl3+d=mzK&7KCTUnyBiLEqmX}5P=7mZYi zSS#tgopj1JXE?Gc@9XgO{8MdzDp5bLG03Gx8sAH=Ao>Xcj)7loGdfqdVlSw$F!GE8 zN-zO}7vJG!ne%mclf(yE9x=qcg)vm64pu`|l?P?OTt7*s4E2a@6>jjt-{Mf3cIX(# z#_ocue{`N5B@nixQf#Uc+k`y;ON_`}S#~^j#D6~K_pO<!o(x7tHA^!TLfWAsj|48G zTyA=&g7jW%vZ~?U8T-Ex`pcT(Q??wKK#*I!+1GXiVC7YqI_k4pNsDL&q4FK_Ym~X8 z+dCU%sJA01k|~>v%;aL~KUwovFF4_?XW7{v++(7x4O7i3Zlz5#>$VTzKy1N+VLl&u ze}WQ>fk<&v6i<puZMIE}^^W<vUnu*H_iX7Wr&l(LXOUPuF_u*rzm?MqZ&}d{%!61` z=awoK6|gC0Xu3)zlH1Ula%Vjv6KpGl=#I^J=a2bvrQZMPbFr`_U>PD<wJ?bYP^5DL z^R0($D#+2>>;k2*!v9^wmRU%38OtAUzM<ATpD!y%EGw)l%taUvUh8j-#;}O@>{swI z{y6!%dMNI*A3CZeN67k>IP}R(@X;YGJ&@>bH*9uCu0%Mpnd7l*4|UZRRv;WAeM^du z|6#DD9|^4b9ESB>KE4q@UpKv&OW+EgNH{Q~`HMCLxn=zk?%>rdYCxgpVaE^cfg?l2 zHpn>^aF5#4XTeBgv6Lv?uq1Ug@ONsK1DQI+BEFtvUSiF|-_~nz0po-c5D5>kI*2); zw`?_`>TXNc0ZY^$BLv0iXv@)Yt5t*R-bK%ajr5#4YMo9nP21^ur8~3MD@%*nIc3ER z7F&VoBH5^o<*-Eeq4CONr>fL4L=}s}uZVl-Bh&DggWd)GseHB+*;r^&P^G;X`x84r zExjPJv&kA(AQeK}rDcF;LQr*36>-GY=-O#hW{x!GwTACNb>D4`kHxx{jK+)AR|>hs z2arl(+VcqNk#M_=C&Nb9BaP0WUUq22KhVFnmdOqDPqRnaLnqDa$au_5GYx&r{NZ@< zFZl8%`L7k1i&|0mCSvKju0F}~qW}aKoaRVf<HVo!5%mkoH2c@4kFt)TG6cEPyl0yq zGWIh13$-nSN81wvU5O2DT<zrla@mnI{BhmUTE9<NX4ifGFt_ql;hWxy@rb$vHre<B zdlX)q6jd8^9~f^b#)w6yK2f{hVz4Lhm35!*Nf9bVa3+E~A6M~gQBxOjV@uAT4I3ka zy#u{Wq|9jV0x;Kmb7{Eo9nRFME>hhxH?R~y7JoJ+QDPtm@*yuw={VRz>jrjSUt#%v zQiI3X^7Rp`rl|vJgWhMtD9{CYI(_}<+p|>$mN33@IGs`pH;laN8HGSgfgx{tuZH1B z(h!uxA#74Kj)n+2KC@ycMgk2I*@Id^*Uv4MzKdlF`n?eRZ^pRhVe|8s<uP0z!`1Ju z7@5v~#64#Km$5g@P7JC@DszU~kTI=V1Ji*Z+uT+G()&JOCA77_swzmRXG|y7!J~I- zOhTt~<REOT6E{E2(G6}#o5pnE$IZ0Miqt;@2;zOHnN)?}ccrgq1@*{)XxY^>A}|_5 zzQ~yxP*`0D7WK}5hDcimyWR+o|F=y4AF4hA*fLNax1T*!h*W5^+EA}(XthUguvQjw zy1bEFCRu2Hg??YxRVaS4bk7hOP)$V7AQTE+l`BA~9V`H0MeXk>moAynpN0+6(b0vW zYd4KZ;c!XCp9Vh3!x~{5jP_df7`<K}-rNZC^A#7W8IB#H|6Hq4Dp8u`Ww{UtL|iAD z(_1H6!W-|_;@Fl_D(zqscbj#_`_8U1PlwSsU5FIO*AV#8qPieSq03NyCKAp0j$3Ji zh5$qTL+Q=F=<0%i_($T)%M6q-c33);Knm|^`aE)c`LZ1}#3AlJaP2!-qT306LIgi; z%chA=@z2{7$1a1^RC|i_B`sB%m)A-kjwFi3NIW`{+T0UM+`}1>X>lYIu^kiwR-JkS ztn}+<?00Y3G35}O(8TNzjQ*;B4hHe#m28f7MCo-<3-0B=ZH;MzzPKv(sSl=c^NF_f zJuUr~=M*mxz6CfG2*|rqcwi95UCaqDa_1DW9IqkqKLY}V2p)m`@y_O)MFm*K#;d)w zJ%c<>P|l)~^X|<sOEo3>bk4P7$!y8k!wLLfReI~tzlR$s|BiVtaJMHytmZEFRar5+ ziRvwh9sZ_eGRnPE*gZX9YRH;k@e6}G+tF;cqc59{t@_Q%A$edAKM8-E-#isEMe9DP zI8zUQ$T=q_sbTE-6~&u+sdjD8xi+i#gwq5pp=W-n3b=Ty+-CXA|0#xgoP$5tZ`Abv zC}TY&&<P|6s^ftRu#i2Ir))5Tk&lYu$U+G^AKbrr!Cj>(n_AAz(c_RnBKukdk~qYt zPGxE;*XrJg>MNS!wzkGX`(46Ht0}5EbQ;d)_0!1|;()~{LQ7xUMJDck&^&VITO)kW z%~<xYg3#QXR$h6ZLg83049=;lznz7*Fs}+@<g0BhBGcUXn#|;p-_U}l3YB-rd``BN z7J4uRU%FjyFi>Ey>liMT`V>gmOR{eZ;wy5r4fI`Aq`n6U5OWc>dU;?VJQvdl{e1(M z!a%-ccUFbBg9{8}Ovk1(P2KzqGh&prLgNX*%ERxO-B=^mD^4ypuVqLs*jE5u?+l5p z8x1?pr`xw6aZ(_y%3}o|QXR+dFM5oasyM7PC8RcBp-q-`96@!!<9iqqAy9@gX65j? zt)9=JVpunmlKgVOX>fY?Tav@}wL{$5`Lmz@o+~mm<VyUOf(~F`+pt?rTIowXv{;@Q z42`L2olO*q%gd-?Is)mODkq&;S{B^Xbou`}ErBt7&3!cGR{C;&N^b-CA7pj{jyT}N z*(J4XoW54|UFXG*?WRtUGopBqEM~JLW;@?+LE~4lz1S(OQEFDnh2{dGlZtS+OyCMm zWbD^xS0%EYa}YH&`i!Dbs_re!b-8)OO+NMMOL<8HXg2WAZoR!6yEhpY;O8oF>mM)E zvaK0Jy$sU7*)uU2t^`;p|6dLC|0W(Ee5hSmp~bTk<bkGhx|H%pA40dwBoK>sBE1%8 zbcyA@e@q|xNd5OMRdH&T52(aTyM3!x1FcpX!=12wZX|d&O@`vEVfos_!2U1ra0u{t zuY(S_!#h)NeO?foo}#^)b=DM|jnU!tyj-ymrI*4%>WvfH6^@rzvM;?n)L}1?7HC02 zu}SOeh$w2Y$@;Q>1PE>EPmcTdXEg1L-Vwv6G-urf{T#}bV4Cww9H4hHg>1xQtW6f0 z_YHS|Hct{IrFa#W;}>4`xvXz51dIxOIVOKM#2nt|)k)w15_mx^1U2Q#O%1RpyT)*| z^Scdh*|v9P@^;KYdNqV`s8qzT-`5pN*t$t(ZNZbGARb+`*mTlN-%zmY4tIY6akMn+ zS;LoCA{>=3`7a*p_h5OaUL-*jZ=Q`eVWnN}`S~@jCf)}Rs!7G@#erXcYzY79VOQq$ zD@<ECqz|N>n|!azzI)O|uWz&(A!K*xG~7-y!H^>hu>A3&rmVCtQ_-62>d@v>xq^rT z6#4?HC&R5fp9G5`Q1xwbP`>r&2Ii5?UWe={*X~!6EPx#Q-ylT27J#(LuwvYPXyB(w zVd$3+yKZ_gQwHy%%Lc{V^d%v}&}vi!H;BI|*JUXx!e)xV*Dw|4NeJRR3_jT+h_-35 z^_CM3JDIJEi<n?7$Abm&w<d81EF0^__U!sr+HB`an#o22s6&){ZXlstw>C0$JL_gw zLB|*~+fs^Y#<D$}Tvhoi3!82W<^&px8-CN>1aV~;qa&>v{~`4CB!xa6>BqLH$WXjp zT-p{DeOW&_^^vC8<8O+q#eCe#)1|3rV5&=YMD!6a1(_OL!<!}{R7v8PY}#&vIkvox z1bM?-h{d#j5zmVn?31dqv1pzL>vCdJV$~M`@l~n&KsuLu3uv2;K$QS}6sojA)l3|m z2m*vYh9%7{W#F&sJrKgn$^1oujX?%C#YZ8^#vO5&;E!oN$-NKND%R4Ue#qB`pAxJo z#38TUgu4h(Te+n8zE!C)(?-wu^Fr5dBtTO3n?a+oxxn`8ym3b@WV%+><KTG1RpO^W z{9+gwNx^F}rRV|nc`Pb>>KV+tiB&h#lhWx8NQTI)62fc}z$YtFg+WcU6BO&%ZiY;G z+$u)yAVB^YZoj<ZDfRq>=IsGf7q^c4Z;(`jf0s8ToMCaw|JbJ9PJic*8?6hW#wk%} z9b<Wx;V8MJ?0UI)av3^Xm?-S0CX8b4FV&O_E#dh~{|dIPe<#oF+P6~0WDZS~NJD_% z>~3wHaLy|HPeZRT0(V>6A`YO9d1#w2!VGq;A6&}p$pgct^s14|fIXt#s;*4MF#nbC z1ynz)BZS^Pmj<7$F>DAtoe47>b=fZHJR>p2^R<?7k_+5_Y`LnXO1y~Wc%Xp$i%6j0 zfLNc*LythMkfv)1McGAW_k%BXy??#C0$^uW+q%1u@h*;9uqVa4PU*KJCa0HqCrM`G z6ZuK(cN(HgW#o}@z2YhX?Bv@!&b%!6usH3F^4%&)WHnCRV{Ox&5^@r^k2AXM-j|F{ zN}$i@vTtStJlB}UBF-&&=)F?D8w~n`B1F{^wlUp0<Y@7qMYlIJ#|9oo^G=z_*ehaD z^6up1Iyplp6ayZ=Y{9m|>)Aabf(*BCc_aA#UuM~+$oNGn0zM2Rh8V?hc&#f?Zv)l8 z5~8V7klvYNA8*_!?Th;H#Z`8`D--CjI+4xPR>5~#Uxyjj4Cq23*c}lMd|lTPA|P;9 z%$U@%jTW4lu(WsWzU#Y4F7^(Oz8bY6GYN*-rnh<C7m<{X;W}WwHA&uNP^=P_$aWL} zUC6}tBJvnbN1oo?+IcM7XBbIqji!<hy7*dT<``g?8g9JLDAR{#X7-08b8ab36II9( zEyZrQ+hnBE=oYyKvE<fAvQdM4hWp-JtTFTxar+rg+6}?co3KVdS~R^0LDeW<O!_6B zI~#f5orE9Q;u*g_d-J!#HsYwFb?E^XTf`A?GuDETk_BY4`GA9!Rd4e(UoEOBya)SE z`z4qS&j~{(4ayZg5Ab2+Bsk1P`HJO6=@+HNn_NQD2_98RO5xhDr0^++{BxZV$T-ST zd>n^e17nTqHChxVfNE2|R{gdIGr)K7?LqG>I)kNk%2k@NZSs8no48z7)TF`qHBY`k z0o<buXvmphhM~y}!7UoUF3gUu`H#>#H34iS57RN)pOe1nKs!%QBS(pHWc_Om5sZL% zg$B6j%<o1$x-H7sXLB^p$}AZz*%+AuA8N^mEVVS8(LU#=pQneVKEkcbmvgH`_@d#_ z_5&9cH62B9`|!>AL)TI_-y|f6jlU(cF(ItdO?5NCr_ZpipJxe_f8pq=4YEUO^A$M4 zG;LcV{_K@da_`7JRN&nmz{ugU5P=;S+uA}^vabRSIh>L$ajlSjl;*vX<>V5lcF4o* z^REceQC1cYklDcdE_rRk{!K%}XbDrEV!Zc6i#VWQ^SuZuXCl-FJ>e|SXw2MAOOQYO zjAjSJ>m=0y(KqAoby^{y(ei6_aFdR?rL>0?9gS0;;U^fWeQ+4njFvtbD<?nAr)vD| zPpk=5@F~}TJcN*H*N><@JoUvd+BMn8XUl+d)P}pe^+~E|D{x%<%DxRDfE_-kevVRc zacYSc;i4&L7*SqPH4#Xc!?r`{Nx2DV)9eTr{qs$T-FEA37EWMB4d@^|dwXsZAxh_* z^JBm!Rs~CJk0y(UZiA-EsT+T@4pP51&36{Ik&ne)v9bd)L$|Y7l14*7KSM`&+c>p5 zyVT>|W&8qcX&K}k-Y07~0Xy?LSQQ|ChAV2QI{Y&U$KapP8o#YtzriFEi~3U`H<yR+ z8?Lk{T;dmy6Gdo_Ufs+n{<UJht}E4cEt#oaHq9g2IE=Rv562Y@ID&fH%exnjgH`u4 zFq5lp0r&(BYjw2C(~<uA_;4#G0CPd*1B>co^cfX!$vxY%XoXf{3ZmX9liE)k_0I@l z7v<A@Se2E8v-CO1oX|mv9vs>&77Z6?a8?u=^fCa3=VT`~=rPsK4ujh8RM^Nb)uCiq zud35VmRhS|+LQp5j!=JMNg+O-2L-s(+4{dr^p(IT>VBU=(sA3X$Uzrv`A2d1-0+G; ziA?Z)x1sB}=$G;X#V^#>9}Ie;0zafrGJ+l2!dwwcooQsFIz|!1gTN6Mr%9$%AyBYq zfQBU-*oG^oBAGxHb|{iz@YsIh%(_795E3|H{?({$>3pHzimAgk{d5@e)TyIw-7g(m z$O$|0{Dd6&Qt=cxcB}V$X8DZcb2z=WiB`#EKtNCS1D1HFgS^7rjD*h}g8b@cMM(B# zw|FPvqM~$T;#w)RTXWvV_+hN~4Nal+=abd#K+C4ei5Wgdw>C+7KQW}yX|m<ae}B*Q z2w$A1$+J!Q`;4yqI+6T{RTOvK-NGf7F*sz)`z`RRi69L6Y3UYX^hb=kUANVv<9x&l zq#x~1oO?`{^_Lopz$ZRfD~sWB2tAD<PccKeq<Ojlm{RSoA%TS8-%UM5mkcziTbX1z z{Tx8lj1^p0Toi^a8-t)$M08uE<}cs8KKEI8hbO20K0G_hk37X3KjOyy;4Bo2+%v^U zjCmYfEd7`VQz8^m-(tf@Wg-PYBdOB)erjL}Qt2k1UV2y0q+u_p0j_na;uY(Zhg50J z9s1N}u3CS8E4r?VuZb2>JB;ZQ-;m_sqRi~;tso+&NZI%CCg8GYMv$J{jiJ=y7&BVd z!T3Uod>o~9yZ!*UthDek3Xe5AuEV=K1P+8jwE-@6ca;^F=_*_<48??kV+8cRXKxrh z1g4AEd~lkp+6OpNV=>^+uAq(XG&uQvx1_PBk-aQvo79M>MQOG|3u66Z^cvkw2WjR? z$(upVp6Vru*;;)06||QA<g!}0rmZ}opi5u=fbZV8s2CwP5Zvt}*T7!$E?UXHTr#qc z6&_+iF;-Asis=L*2>Q*nq9t|$3+KhwY(v&0^wHR~3paKSbAz6Ow9#A_K!m*mJR7d7 z4t5!TD~piq%nPQXC{Ztg;Y~VkqhD*;6^tNFD_Cz1D6Z&DUa_N2>G>dO#kAsXzTK5L zI_;HtUOcIJ70uSK(8tJ`R6TmlC#0%9A2z3qKXvVIxX9=GK+LcxsiyH@8BD0A`X6rB zGL$7<|NfLaqzl=w-<DM(MEpm!*?ff9pS$yOdg8VkhQY<s-+_{#Q?V|NcTC`$>y4zX z;8<+EH=bysrqY8iv{lrM%!)$=PZa<mYyFjY1HBtFo+g9L=#ykMzRp7{tO3}XZ-QDw zFjSCG4;5(*A0o}uEaPym19EsF3?Xj82c39%-24L~oR1Nv#TzT=4GER%?*u6lbWhg~ z1*R52$_PWW(59|sg0&;s66&oJiK^-iE{3N|**b9Ikd73sN4_T9^k5YI3cGCo&B<TU znRIb;#X>F&P6tz3P2<BiOs4oJm#)u%K6+U(;DQHCUlp2WEL}>Ud^%_POp)6qV%ykq z=$nZ8kAY4w3WEF9u)6Hgx%{PNSDo`4C)|j3QpXz|7XjEWsis6e?-uqFKUKs(B92G9 zZbRUm>T3{@+!l`$kE053yf22}VfxayUfM^7AgZ;loF?L2k9VgJ)N7M<Q2A6|UY@?z z=3U!JYqG`_=3Ed|%%oB#ZLRBXrWNjdAr=Jg%|HxfnPGP($+Y;pT^hXnJ$H0h$@-5F zdxGxMMQGZqvmjRWTA7^h!y<)O+T#79rLIbAH{n~K6}RYrI%#Q}L7*AI86!3iP*CVI zt&1_`s(D8#k&J<#7Hyu|Y;3}nhR#@8{2%cBiDsQuYn9{G=5H4*yvk9Vr?(BSXLJfS zTsG<Rz=%~t(m|rlHWtj5q&%8GY`^uxF4|i3=vptBjJq<jLkWgMB;_X-acDbCZAHJ5 z`xO0=(MT_2mD-k+gJT@Ffv@Na7nZ4M8#vMkW4EtWp#;w!99J47jcGauVWkZn;Te17 z=oPBvOEBG&Fy9PC-cJ)T?q=?lvZ8Ul1lhuy_mATUc59+M2o7-f@Z4=UeRnlyq|8|} z8AxX8tXY(qI~Yu)_2(Qq<eXV}-~I@}?zH->uY7h`J1KziAouz1q14asevTR#IXVmL zhwJZtFyYhl@nbG-O2dM%Q3>)-x+U^u<)3VxN9mqyW1#~w7Fjg38cb%z`QIrcn<x|T z^H>kotl2IUaSI$AzNjJpK)t8M?mg^T9o6BrGGWlW%i(w)Vuaz$BCnnfV^kH${;Uc6 z^Jn*v9bE5Rww`V1H~&`Tc!M%6PIGSAI=l4_2D+&gX=7yX(oXXWHSDv*p9lNP+&TMU z-&zDC`-=vR9M%~MWoW&er?gkb>fduMI>45L^TWAhCfNcf0wdP4GRBB7{i02h!G(<^ z!7?;+`>==%wIaffYD*z;2!#u^D4e3-!)~bSBjJT;#5(BOepmZs?Q%$`nN2~J1aIzV zT-fh(<ZZuScMV8L>%)0ccG1%#7qNfYf1^9rb7iD?Koy10F}LfHUFNuvZER2yi*p&n z;c;m#DGCf45zs`D!!Vp2xmAOK_=wMFEYm-b0&k;%M%i)Vte>0-Qo#)+kqT@YI>^uB zD$w_=)v{EP*L~-r&&Qo8kF7_Fv!ZZY7$KS!>1zqW=P=C0Fz6u^?Nwn6sL7|xt@)kP zBYuX5DA~25f#tzndqZPCl0`dZ%Cxmoe-Lgdh;myIH`@-7hazd<H#L)DyLblLAy%!5 z&2+bo$faemhBy&Bu$~h#={T6UA}Jbgl^r$7R)?7|<2lE+gpXYB&vow?4+!W&gOg~P zGYUqJ3`@~AH3~q*;W-D266zX7eI3x@O9wKtpHq^dfHernQ+;4iL#YIfDEtvFH{*=s z^1o_pdp|gp*2{%*J=iKm(kkYzMGD@<jO|5%@G?bfv33;S-7~WCuSR!x+qI$5Es^EM zidooFv~%v_WUpHdrhl+Ow`Qhl^dy<PRNUJFf#oC4;`xjRXUm2+#rn;~8PBazwMB)M z*Xms#ocaP1>nG5J(SlM|Ck^ftW#sE3^fQDuE7zh+L`VK31k_P(aiG04ZRqvq$i;J5 zM5#wraUDfbJ4G>LQ~Nl8AZ>0}QDtc{)Jx{ALO_tEz%M4?B4q{cJ6i}NEz48Z{c5>I z7o>;<6neEtqQ|v<@83K(?RY6@Ig72h@$W!6KdYC^*_kA^TJR$hMX<maDALPoW{k0d zB<~UC|4hPi;!2Oi1{6@FZo@rBb|w7cuJ=D)fIr&J1B||?VYazn_eDj@2Q{XFD@GkA zdaYfP0$aAnyI1rj-=`6;u(Nz2hJ%<HX+#(r$W;RF!|ZD)#6N>Z;Iu4}W7;VsX0)>7 z$xYcGr29EGoN8F+yur7Aozp4?f@qY_a#MW7y~2akm@t^+y4%ud7B?i?BDG+%_uhDu z3|6opfX2(FVWBv>I`vU<T{u1>=d@piKMRH-z#)=1-u^s@7^)g;7JjOt*TS3wmksq0 zV2!--1xe0bv&6Klh0<RT;_iNWIe~d;X%uX__2~_fT)z34UQcCSWP2|LV|gBrx4@~- zv3K|%@z?lJjUuvwloSG(0`PnLcoS8s{W6fX;A7eisj7X6wSVdjwep+IZ$vMeKGKY{ z-D*S)yVg#srpmPLPq0U4bG)EE5*Db1rwvU;8*g=6eXgjrt5x0oRnq$oYth2)Ts76D zZ2d-L+{M7qd{l7@y?Az?8|0t}6}Oy}Dk9^rh0^MD66JyQUNL0f-ZZ<Vu$bB={fMG= zX$g2XgZ0LN^|UzReJ(G5eY_THEBQ10`nQ*go{AyArtT!eolRx*$`HTxcnEybzc^g+ z=COsLG8u8-tz0@PVBTiI6A>zVW<SYj442x$GONoR&wn&^fn^h}Q_VfsQKbLvw#OhI zqHSJ1S3V_Fr8776?O$5%l?RI1vz#)d!Zv06g>DupS)<%pogn1_<s7|?dkX0npVU-M zsW&3S0tAS+Zxn?y13?;ItiQu*^fM>_iiGKa7Suj(4kgUwaG=^ZugBZlLzy-8-g8yU zy$F)$<~NwZ0o8&4zP}G_q?0QFKB~q?S&*ojPHUE3J)~+M^T;>S!H?B`ji{x54#xKw zZ;j%Ah$kLup>wLM)?G$t5`+9^h<-hf;<eu{f_v08i@S26<{61Q&c0(TTiF@)^TwZ4 z%(qQ=+P6F<Gt+@c@!hn^C#dvmUciyM=R))<<w3(DdiS97l*d>$9@+4f))rNlc<xJ; zWl!JFC_2S_#*km}nG;2x&gcP@8&pog+>Xd66m`Id+4W~1LR0vqH_{P~P45buv&fPC zV#8YlLyIrB2;7AF?B~Xyu_1Fe$c`2d=fziEy@Z6M>D35Z?zQ#9ps1q>&)Cvi!+d*a z5+p=KaHMUi!w#tl1<I%==*ZH*R1D|U?it{6C^hLNtZ_>m;J#gCCI3qpk@#NHH)Y*O z2PB5IH!CDRJ9~xn+F2o_JkCg^r0{`vl0yBeCJb>Q7m+V2{dp1c`*#GKaLNs7xV*3U ztPZ`Tb*mu)m=$C8sy!ive*bsT7@?fJ-6>fG+r6K+IQMfDNfVnqcX%cdo;Pwc-Q5Gw z=RcK^Drts|rvChh>AAY`^Cv7ymzt90aN^vOf&;+Q#}se5nv4-(tF(jS`=(*q*NY0g zZS<JwFolnwMg2Y-d6ga5q!_*`Unu#KT9RW?Nq1&ec4V#j?~Qw-`QN<MP8dqN9{y-i zc2%RG=kFv3-!{Ogs}uPNwTEGMFz`R+TtJqcLb^?4fg5}H^M;Hvmk65JI7MmEn|J}I z$TCEJ^U!sLv$l!}asaic1)KlaQK7W-coH^(_Pi_~1R-y%jbiB+o)~4_{o23{t36%f zpQLCS&<SqA)6)9&Ef5B(%jRh^+Cm(3VHG`c?9!gew|#LT6Mw#N*7`#E5sE%a)O5S5 zwbH{aw;Ht=vpz`^HweVQmM4j0aA$HZv*TS}tD)WOw@M_{EsfnfUuw?(Tba_kz|WI5 zrFAymWy2&ts}#C)LdL6-khFdWP*m8IUpULP?P74i*U`qqqxFm)9sJQNhOO8A^pgZP z7No~`f$Cjx&T9zN<3Qsm^7=H7sDmQs`d8QWiAuMML)GJOz0YKW0#A*)Q7pl{Fo;vI zQ-93+>V}^f8?D1Xww6Rc>X-s`EA3Bd=Bh80gKxDVPx**DLp;Dzj%A!PD!;3k50=QI z*0HC$O^Y4ijs<cKA*Qf#$KMhc1K&A_l_yiih?aED{!Z6!-_X|ICNAf-dZzt_Rrf)z z8Svgkiel0s@MeK>whEt<u!%6s4lF%v<)rJa2^*9|SxP&W&DZbQ*e;-rx_~P*twyE~ zYyeJe><Y0xO8D&K^VrC6Di1GQQ2O7wP|NICX5!rm!HxxqB~`OVf#RHQ4H&<Zi5xnl zX1QobsC!+Ky83NUb-&n85x7?}g?i1P%)^RdT6s~(?fTCZKfS#*ty1cNVp!Y#M|q{< z2T8y|!2M5ofo-x08EpqZkdjfH9G2Y<JE1K?c+*n0XXsat_lnFtum$K7&*ZE|HUM92 z1(g?QZ3UkxnOjYfLbqDrv$7XzzF?6>S)Si+(Pdf^5tOQs;_I9;Qqv~-ho`2K61uPI zlx;>~`SL<E{p}jQ8M28rjlUnQ%rw%szioVhc2w6)n3PANH7>_u#>usc!`hML3D)1% z=3~>LV`LSXAv9l?9H|F+#Uj$)8A;Ct#mg;a%`TZ46U<cu3Ir0Bp%fbHBJ1}8<$4n2 zDQliv^h&^u`-eoV<fA4$9+WvFG@f49H2rz8wVfwbHhOP^V*d;JHc*T<jJYL_nn(VM z|62ZNlfRJsYDQu$8h8lX2~%}OEfq{31=&n1fW-*sM)WK@fdMOsasO<=m$07OHnueP zM!~Uw-9iMR3OFAx&f58`%OVdewHl1JDyR^TfN8DMzrg(mZwsu)w!40z^}Daliz@FA zt>H|!{4R3hEhuI6w+*fS$w#b6WFN==aXKq4oSoGMQhG19oz`AH;^h{j{<`^K&q6?G zu_eT<DuT}hmvq(q-PfB6*#HJqf>St2MrK+Gv-DRD5sj7$u1x6uY;>^LLPgnps^G^- zgO^-fMl!3>uw5*Q%%B|cqlWYbsnPA<3fpaBx4*oqqo|*KXxlX(eQ-!+b8N@EV}eC? zNIaUKS4E1N$K*B3>?E8ms}*Vx^?Z=bZyWa++BDhVs%R|dBwhk3kp~484-&x~-=ldW z7lOu%99nqee^m#Yj?2gZM6Kl@7k+2|W<&#KZrg{T%*1shm$BHS{5q^bpT;NiEgm&U zyDlNuZDzx^em^M33Ci$+0YgniG~2FOQ-@f`@NqWh7k$U<mM+ya4GJ}oou{qY(zexP z!{3r5RXNxhB+9zBvEJU&%#}6U8**(@NZpifrx>za=Xj7URKF%3fbCJbTU@9wp&pnH z74a4mf=o5Yk$9V7jxyY!eEFRF3<K7RYK!DbYMo7qQiwFH`T3#JfO#0d^#Z(+q?G^? zPj`ec2+t5^&>d923aVd5FeJD|LI1<jgn%ph$#;7*QBARhr%0Fy+Db$OM$m)Rk6tg8 zScngv({1I1oF?5a<RjJ2u_i7b%cGU{^Jl0wtDW<x%g;@L@1_HXaiawpg1q9j<akZu zRc^(^a-5oVRSZw4S1tE}8(F%Th`!FXq+sgr6!snr7rSWe*lEF<y8VGt@Y&_Jbr6Iu zyQ*nk^I_ey%k$;wJGKy3=={LCOLJwm3kBdpYR~!ear46;4L><3AxrG^^pttr>YY?s zT9r?#b=bwuemTaHb%?(*f-R*aD3#aS)D-AfuHvsF^^xm}k8=YdJ{%~C_*&^A6!GuK zJXJ7?K;VG%m8zURd@xBtChPQ<Q^eP`?>78X3ml<%O+cUY9)q63rd0}d&3@2lwn<(w zz11IqeP>o{2I=WS9z4?66t@)*RAERg9I$d}46!S;wZ>>5MX%D?ANSAI#S7)+ZJD|; zZvLb?rJHr1c9hix=>U~hN|2R3s87j5&XC%nNb9Y(vZuqL^aS6AJ-Rx~tGr_F@0Hu1 z&Ua@8)B-43v-jKL7>YZP=FSv`r<f|pm+%QO<<R|aI2i^iJ&4@Dd$KxpoyKj_y%7)G zhMp}(GoCZJc%$3aUB6&za4FI`s;&yg<D>R-DBcB&8Uz+(BDt}-)onzPRof`m(`+pI zqP~sZ!7;kdX#RwsOCxKHBk2n3j0GJ-O#7oa-LY#DxF*J?-UTw~P5Z?n7JeOv!grOk zQ&A)1z4~TBOZMG1is?>TXd9wdx~7U7U@m`M9BtQcizHc)aN~ZptjsJOdSpGiMn%2! zyj#dADdO&18NaKkkQr7f`cen}f~PNv3m6Y1NZlW!`a#rfy3zWAkBo1TyXuIR1V4bg zeuH}{An>Bh?0TF1FT-R401mv(@6*ZI6fMB=7pc|g3w$V!^6Ei<sL6GVRN9c3z%@Nt zUF0}}8n<^Y@E{oFM(3QmHW6eC{t-kCcUTTFkPir#cv?WDBGP;t!NrA2{lyO9^uUkF zDhSeUA1sGDD2FZxcS9sgKC-D=&f5N9qK$(Gw@^VL5F<~BorVJ-AoiDeI4X~Cuu{_Z zzZmd_13|Y;Bj}ugZL!oLFXM6xLgA0uv%n}><H(g`Cvhb3GG^4=%AZKlc9-H^!Eg4A zf9Nt3A-w4EBOSqpTn&y9RU21Mk0qZ>g38cyS-9%PZMt!cf*$S=?0vmw@#1}Tz4?&J zB!03Yo%Iz{x^a+`%&~EzOx@B}qVCAu;q<Xj`GXi(!9)gq2s_zVcetaz+*S%=`|G0g zioP%~jZ($Sdeis%8Y0<|2}D~ZGl7B5)(zu(bQQvak|7!*+E2(SU4~}stHL=O%q-z7 z#8*l@ya=?2<l?Dd@H!ox*Yhi>y@ySD;5PgFPE6p$a}9Ax0=-n>bl=uFN^J8s;MeJU z4qw<1Vt3t^ty{0ir@0sA6;L?A6Kk>5A>2^NUM5W+>;E3Q?|~Hj%l~770I(6sPTEHp zbopOv0SR@b)$7<(4(ZwbSNQ@$;dfEeoVRdqP2>;xCwgQHZOBSw_?3ECLulJYBCWb1 zh@V8d=Y@$Mjf{O`3Y`;TJ$KV|eTt`Pn90Pi>VRQm4+~?FQ|&C)6CSg99T67iQjEt1 zkz!0)<7_En6M_$4Kw|H4!-u!IQK{XF0s<O>2J?n<*44-IV2sM&0yTm8F!~i)I`qw- z@KaH37k^X^8J-|wtM{>5%@(^k^4-QB{;~_s*YS(?pO)H{xvCo5@*J58eCse+Scncl z5;uW~Z*H`<f*Ar8NkN&}!W8E_H!I$b#p6k5Xs``ZUJg>J_XlBRptlse|ILbi2isO# zuR&}6FGDN>C~h(0r=C33N}0y<LNkm$W$e?CL?_@|bNeA~7+;wwysho`?_&$8cW|5+ z>VY0$jH28(e5$D6m6(V}A;rIP_UEIWX~eT0J}37S*Ox~|azXELm$ON6JVj_nX6xn4 zM!2uWjZ@#kF)f0GZ6G%Sksgs30+ILMZc~&=he?5U{sOCnuC9)C=oF?9Vso4bK^ioh zoRu%IU}`X!7WAt&Pf%UrBzvv@vs>(LW$T>25$4wsqG-e`Cgng=+jO+Vb8nngzt51v zytLg9IeMKlh2k>=kXaj}k@w~Kd`Y>R?_@bF;DG%f_p5|#hUO9_rm0pl0?aNsf)_N( z*2aJ-l1eFcjv<Ny=wz+#ACSukL1)~EoSA1kps{tO2+7--#EuV~wha&$>ppFn?5iV5 zrU!Zd(a0Nmxk0r2`Vr=K3lArph1VGLYSRxr+%r^da<7iiA3YwOay~$ie(d+jv>Qjy z45mD}BL6mG{^=`SRJ3W8af4|~OM`~*Alg}n=#AuFw`CE8@I?$SbjpNFv*D+wPyIf4 zrX`jqXp~E>z5w(7@ZO1cUYS=+sD}>#&!9(%NW#bJmF!$hZj?v10=VhD2{aJ0-|pHD z--gRk0fc@HMlzA-B$633CH>bzo+6cg`ej=|$=0?u*Z|PqHHiO!^(OEF9L!zlptNT> zHvBY<Rhi7~mR+U(a}AuK%Fedbg=vj88aSe?o{eT-PehS4|F=i;s*ICMW#o&Z1YV-3 z+pVHsrK@l_lhwMSjFO(;yuQMGx@A@fxG(K<Xcaom*GXjd=AS$+a3v(~VsiY3s?SOH z1uVNiaHyvc&E)X>ki>N{Od_`~T>jcL$(t=PyufQkq<yN^R6!J)$kN*fvR#E#eRAQ0 zm4!wq0JTzTox^NoiMvdAE6)hMnQsL{AY{*Ro>YF0OC0Q|M-3x?2v)|?aFXYvZiV33 z=Y^izm{RiL8u3D5{e*)XE67}!X`6<x&w}Dc?1-8J`)4NRNH}_uuvTcp0mDw|hbpWh zfGN<Z0J=pKKgI?M_v6)>kSJry)T}8$*n#4nN&Rh(?SCnryD(hWN#@=^5D|~LZmR5m zKYTFORqlagnY3y!2xGQhYzWeY4{N5+iL8{LwN=Uo_|Dr#OzAK3YPoj^xYJe;0>ilp zkkZC_C9D`{3@1;sj6XZY_-+%--A}YPkIBAG8lQK7OU%=b1va^T)RRXIZ%bgPRC^%E zNP9m{L^|ZAE7T8>Ng1qDgG7l)oaDq-xE7oLuvdLfZJOuK%eY8Wx>zsZa08Q94Fz9B z!ijdqZ5A<!OiBJ|7x$PypotXA30fmT*SlW_%De}n<E$CFkpB-??-*bC5_AjiOzdQ0 z+qSKl*tTuk&cvA5p4c`gwllG9zWY4yeeOAPKkbkI-M{LtT3x-?s*#ykuiv%JD_FC1 zk6~pir;&UQR%9^|j&$5@*2=6FuOs~aQWB>lQ5uB=_gt<=h<Jt?AZrPtcCOOzs~aOC zsH0*0A6+jvwg6?Lb&X}Pe-If8R*y_)b2G>DS3#~mNgT)yMbKhf=`BZQ*et{PlBYAx z!q)D}#RPjKjNx8vJQ-}h3N>ftdYJ(?$+^=AF&atIw`@p}+Iw~Ml!AD4VkRJ4fS-pm za?N2Kly8l;_7ZGbYlzEjV34(f;V$CfNmbkGuUKJVx%aNQtpDCeM^rXO)GBp9D#ptY z<JB2&a?MlvZLaJB7R0y;Iaifva$Z?n-%QByaOk+gzwjLY<GV)BG6ns)1|ZV_NPM18 zcBM`P8aWUc-3nq=KmGG8PYq$*>6aYzc{t^$r{Ig`zon%x-kTZYQE{rADjp!6=;!W3 ziQ*SZ)F++_*_*KQ15->>A2x<2u_h$+^8(B_8jEv`H5L!F)*;Zc009FEmt`%#qH2q8 z72BFp|0234AQcPyeTHJ5?!Q=a8jcc_VYvQ=OlV1q>4LzB2EETjo(=o1FMtD|p0I6( ztg3h~px^}JXR;F2yM~H1Y9n}+epFgb{+sq5SPLmTg9_Rko>@BxVR=O@L$Brx+#4;# zo@%nRwznks_!PS6&m(?2w>b_4`l5W)ZqIbn1&orzRH+FcytZPGZtvejA-O4<aubdX z*C_@dc7|y@H8><zhFZcZ4yRfmJRXS%jD>a1R1=z^Ji+p}2BOaAf2;S>L7u_<y_MZw zInUl&ZVh3#sHK{1x0>?Iin7qf&&hqt6|u9XX$DbicbYbTh#46=peuN_lvZ|rbv!#Q zZpq%p<AQV25{2f9+Ib6fQ>pMxEJ)X~h43W@<$T)({?%5HT)!_!qduKSdB0OfJ<Th( zL>0~4lRY?Tt&p$B^S`8T%%Jo{g>gsv%w6pMUUhiaGxiLl`gR+Tid5NLs;I3Yy9OU2 zLVY|j-j(N%e1?L4=A$>BWQ3Z<Rld3=(GU-2c#&sz2^3%bo7=9MS*~v2yQ|yr_H|#6 zZ+@M!#n~hu!run-6k^M@CnCm3nNy<gpV7Wk9dGY6K{G=jlboTDH*JXU-VT6J;j18+ zARkSkOlV!x)d0oKTM+@DdsE6?9bMj@iO=ukPV8pq_X<oYpx{}bJLjkRcatK2Y|jo1 z36!^1IHFQ49A(V@;0MAw5?pVr%BYu$vqfGXDlVy*g3i6dcx<WKEv`Sd1vTVc^Ew(C z;Xj0@7fc<kY`*`S$;=@>bRcx^co|;F)=X819ix)hsN(BTyk<`tQ!D18{cX&q-WH6e z>vrkdBXdM<^c8|sJSdIA3-{o#dnf;ppzc}&-Y7pW+zR@;VG@!&9QJ_zSnLKB65|s+ z42C_X<OfakY_iJ7%d@u`AZsp^5(2W$O(v)~$@GG;r6Y931NvM|juOs$5cuSNKT5w^ zBONnRR`WQokS>?9F3JmVm$m#h!ENog>CWhFgo5Zit*2UojM02%X)KMFA!vVQw6gen zf0=GGfxdj-XanK55oDWpJG(wmq@4=#hjdzmqVf_!P|27W7_d+u8Uit~Uv~zxk8s$% zLiofTnv1<Oo+RAEVyVrkm3YO@W1Hxy)(3>Sd+jg)w!Hw1W~nRb<Mwol)@}Ugzw_m{ zguE`KmqFAmYm%X9at7Uz<Z59$gv)t_5Xgm!O#Xa@;U^fVpFx`@UKIRUU#J$#gkV2V zr}IURhTWD+7F)@PW$Yzmh3yLD72QckLF+F_T!9sb1E?#ia0AeXjl-{ynKK?N+Q{4S z^dPtw@)YuxqT$;@#+7rKM&~Sq16E%0id-t`8ve+$Rh)r(H4xD)fMGosQ*DB1ooXgF z0&z<#kX=meLw7A#c2td?yr4bcL3D1)>b%xU53wMXacao1C_TcKn$Cy+fL32&d-y5n z24!>-q_Fg&IitA0*F`W)FZ=8Hu0kIz=y$ZP)|2i)&It~&?FME$F-kaaS~&e}P+Wpt z?|j_fVi-hbM&F7|yUekV?^LxDi$1O`h(=zkIF2}n?OZlPwAs%FAYZlveBtc7!*Fi| zCu&Dsvam&YoMo_<FlpE%YB13mvs{1G?A2azED8XrGykyC@vwTLMx%hL{}Vlsn(tOQ z+O^OGQh_MgLH^8eF3LFj;)8?6rzs!W`epm+#UbAs=3|Pi6IGhMn1fgp@VrDz2~`6Y z?;3ufwYn;c4`=|=aeuSF0cbU$A!?l~<P1^lJ*FQNt)hkaSJgyJMT1BA=c6OV@8atJ z<{lQn9a$(o7CJ`2E1hKsGkP}g9J3FA#B0?jvCFHONPoM%Z9pNT-!;WuusHdiy8X+T ziGtt~fdq>i-_mi7{L1EOvuSRu36G#?v6)A}&oh}pz27L+_YkO8-!^0N=PJ_!gyR61 z_3qI^tOCy+DPj9Hi_>=4Mt_M`=yG3E0rZf}cc=m@q|Q`8jRvSj=1wO89>oQNTE6?H zyHO&ZA2=YdV-mkrrdmjXyht4h1wQ5=wJz%vqKS4T*XGV$zKgVoaD`$;i<pJa{QYKc z0&#ZRR;L!pmj*lYsq5O6MY4}hM<&D3s;*X*=u2hORG{ag;@i-Vhx^l_JkhdgLEB_? zYvu-EtXD-IM%@+EB2e2wBGS$ZO3)9mRqWi6QyJraeOs|pe&+6RZVVzrZRHFl^JtD9 zjQCFf#dz$#2S#fk7%3~tUoOqEB@bbU5x}xG0n#nzk5ljIgr4~oL}28rbcEQry4tUO zjavIEImAaoQ??9kHZ>P%_Lgg|pH=Pr*)TU>*;67d|6-8%rTmXLoZQZ18;oRG)Z!EJ zyqLMt<R&r5WO0JNyydlJQ%JMwcX%oPjY!~vW-AkgqnS4RVJOoA(J*MEy*?HxCIZOK zK#uA^4q{%+`cAigpRWP}Q-4B}Rj|i}LXMy>R-QAv4ychyMc>K;Tw!>iy1z4(N{;M2 zU+=`t_m#kiU2#Q5lEyF2RCJ%TWX5Y>E8%$Ayde;ePYdMR8|^MR-XQNDVg6e^rs2F< zL2q2M?2<1oHc;I#X!pO4JrqbFU0;xv;`BLYA}%4F4M7@~NOE6IVNT-8zsOV42gTwP zjrJoT&|y&^i_I#77eHokKof6)64pGC3OZQSVm&3p9VI2NJilyxHbnoyv-;W4x--^M z1>Wx2?%gzYl3C$|)A>~Jqf*RJ{m-K1h)poliV9+@WEaTEi`S_h@1Y_l&ni+V>&kWT zaNt)BGEbF_>eOH5KNCvF%SKj-@Miuj3jg=U`1uu-VHy7z-C~(yAKg-3pjTQPiK4?R zL@;PJ&_>x1z{yh5AR*FTA50H6Zm|@dUZ$8Dc7M`8_LW2PT;1T_Izji1TXYD^NDFl- zFTR95)|Sw?C*>b66Tkr}f8LH$J$~K&N3tptUYC_gmoZ~^D)_H47+sSpPMe4lNB=oa z%5xJzm<7$5mu_U2nM7^(vM2`@j#(y?WIj|G5#twxF%igRDQ{(GsG4%8GsTVKgN5C! z^j6o=Mgo|Iq4~{==g#%YgRfaNz;FIr7@s6Cuew)~3mWNEA7m0_l;5GKAC#Ns8aL7( z%yL-E#NLt324m721A9%5qO-AaA2d$^8d;DNajSG<Y6IbICk_5Jv3-&F=MJvv^K}8k zX?u?q-FU<7t<FGF5|A&4dvDU;pPsA_In6j|p<bCPMa;*1!CM;mQ|1g7tQ6<lz57&& z)zDLh(8Oqw9NJnyv<wu&;XJYI&=<>t4G;uk-@AYuKK4yky7RgH>;%a@pUO^GD$yNB z?WkX9|J_}{N6#OAO18}#nvd4&mL6Wa_Ldovj5#y1&&^f;%LP!xz6V$IRVHb}#J#}k zKo_az7s0dTw|#Rno*&R^<wSFU<)bVZQv86AOf|<`a<GPN1A0R6V8wa7kPibvJsX<O zHv%QKl4{+P@<-e%iCDwmUSaEYn7w@LToeOev8B)mrk2=9&^F5U7t`;S022gaX>kmQ z2I?nm6(j1SW>5HiYB@cVeZ6j>d<zUrQBRD)KHPbIt|ac{hA|6{|J`YR9H2LN0AIxI zKlJEpRU4qIH|uBZxjRZEjB33I4_|FZ!>11U-Fd~&K$W`{HT};yYq(IYd)QPnt%+xK zw=coxQlodRuybF@AuH@IfwvLw%x4I@*K*A@xOFqY+;3a<(fppm`%vUuO@jGJ*oc<} zqnQ>f+~uNfjk2f=YX5yD)Q6jab?e8fY3jaP2|q|k2#-o=Q3v=9pj2&9{N6ZCb47W9 z$^G6VZ4#hlPD%1MG*ntZ#XG>OxyVoQ7h44=IS>4Wl9P;JTejS%y6-T|E|%8DW;=o{ zO~0DnWPALDqA&MwA_%61iiPZtw;C_vgDn+XnfQ2SGV&l;njDfaK?67IM6%$Icd=+Y z$F@G6$|?TrM|XCS-3$-|L2_(c`A(k+Ie@;x06a**^4HN2L&yi_<GBWTZ1Sw>%mr(T zr`*uPH&)(7?SYU1G0fElS*(VPkDe7LU%nYR6sT!pG6WFmlDzD8ZEj6)Wc#2A%dZ)X znk0Q<dEcES2kp>VzN@pB*Qgl$n8GQHY{e;ru>Ly{$ANgf`mL*;KPr%jd%zG{dxzfe zCzCn5pOW*62okWDhRN=zCW4&0h-%TM^rT>JK<Mp7dgJorHTrC~U<G%5XQ&O0p=)vB zmq!!;>B+zl8M|Nw?M?#mo)!I&9Hik_C%q+5aw~_F3W<Hk#pgTGgxW%`BM;zXBw{?D z?s^Sk`l^~*gwA&0Z>i;mj>a~Sro77+j3WZ^QCq{+(LSd#a?&^$6C!J}98R&nx&hJj z=~cNcfvv3lMR)O$Qg!VwNaltaXP2C~<#vC463Wh<U+5i$7`VcJDnJp>ITzy(qA&~h zlCH{x0M`LU6q^m?w?((C@|^QjZ`ho28;yL{)Gior@%tpZsp#$Ln-J`~P0{#T#{W<M zB4Fyq^QL?0b4Pr^Wp(ZZnSo=%N_00OCVO>9c+jQqSMr6cc{f%#BV8PxRbFJ97?ek% zPlHG7ANHpbWvCLO{hhq?<ug2LDS6GvlTfJYdlf5tZ@q1z0h5w}Y7RYmpVhyuMMipH zyHs>PxwEWu4Yx)ol4wpGl8ZxVI+BMdVvyrttdL1|;PB=uWEh~3Mt-r1XM3i1qsHe! zYzyfyqI}Wu@I)cABuM2!9Nq{VN2)0stOmJ?%cpy~09MKjMt`?ECX%hq&AVrf4@)uH zA2Kni^&IG-u&LWj?kzt~hWSPvXktiP+8$LAb7QTz2-Qb=y|JVF9I)On&-V782JQL? z`g`nIHR&)8sG?lJyBUTX`meUHt>0{BRsVX4cx1`-gOHz!Zwp9o(jKQj4U99Z!5`8t z&aAg#&Y1FOhLlpjKKJOC-RLOUaM&?&ANVQk)pB**GJ^62?u((Ui}O`gYsB1@uM;?j z(VY@NWK!p95lE&?1;!#I|A`m5t87OM@iQUEO7Orgt1j(@HAV%YbjEpM4YK{_8;&9~ z-C9Fcg1%~6w4GwU6*cy96;W*Z8a?Uu8DLz$2zKp~!H@vtJHdgy8bcgI%(SZ7NaLk$ zqGJ@4`QILc<8Vh5fCT?GF<!fT^V&tP{z*mR$#-c-EyL^+eFKB|5{?B~G)=EU$d^3C zyrcC3_FG7;D6PI+<sgl7ANd(PE=q`%W78kRh!Iz2qj$}0q*MAM*#F1Pb{sg(!%pvf zj+$G^r2O*ZOUULF_k2bLNfBs6WtQlX5U$6&o+kb`O7(2SdRZy?;jgmk%eD~VY4Tr| zQ#5()W;#TS*MGMle#taCW(G|~iX!HnO!1fg!ncfGzXU4P`O}daCHuvZ62Tk3@nNiB z&#Lynj}m@y0T|DfRhLaI7CS@H@5}Uy8`jp=@G*Fpq%U1Tqd}*Y*{|sq6}VO-GrS7> zM7CVTQePvqgX#&dv%2?aU&$EPPi<38Sc;o-A1k(Xb#=iN-Xbo6gsu>{qh6^l0Mg~# zX)0jsQDwXL@trG6Bfm>q|3Zn#Nz+7kRzKWgOil-pl^djfn;2-Ie;Q;BbYGu}{MKJ; z-LEh7!x!9*Dg}5GK|7;5fDT+%^7i86<$~IjS?s}@MHOW&M@QjQ4i^3mYw8v4d*+Z0 zV#EQ0yD9VE@-xxX(-ZY!<FOKbJe1sC2BOG4s4IH0_J$8&x4y}Iv>}s5!#n4{l9Jdf z_1G?Xzoo~CySY+_(rVB`2KZ@;h~?*%#akCpX|iBWZ<LS0-D`>$J;A3_H)V72>&W*v z0_`F#A&j$k#8Z5qyVsSyouS6b&a8;g`o9?#Astjh<uOzvl_esz+1dm5M=?$xB3>WF zep!&QNFSd)E;_R{z8i|(LBR~Hkz1mzJf0*r<5`WY#qG2oNsr>}?hb^gvpN7aVbKUf zChBj5fC1#S4jY@Gpn1`rsTZ(#r1U>qtfhL!`-c%HEA^Zq#3fK5q1Dtw*1+(`&AEe> zL!w2*T(y=h{7A<0fRCT)m-ohkEN!rwvKlG@+#~{o*(`D7p#2X;&NK_mk@CCdl5>H` zN^cmDS|GDKbwdTnc(uEU0Icf|fTlZ$m2x*){tjtNJgRMqD5i6Yh%s$KfPo7>V(b%( z;vA4;GGpj7eV^@)bTY~K0^*6&MOQ^hlu}i+N?k(zpc87?E)lc(<eY>MS?${_!3lAy z`**x3UNdcxuJw)B2$T`Mgvx*2pJ#K#TYkkiW^Wk4?9V++CpJA&I38g|RIDu@>1tG7 z0nx1!7J}Lp-2yjs7dDi7BNt@~fwHYZR(;`M`m!v{awUb;<EFB#?eqEq-WOwuTOdQ5 zYhuA9zgdG~-M3(^15Mg@{u`Uzw)T4_6(!2lc^23X=(5NW0F&E@tC1BVd;4I!XV5gL z#^|osUFBC>=9_8Y!#j5{pKt?3Tp>G3l`f>{@NJ2E^jhe@Q1qWSzh?;l%R+KPaXK&a z_XwSCehP`>%?*0y6KsP8##_VI#NVft8H3bLEM>Le6)wFJ_!0Fm)6H(TMRtN>SSjwk zNuAWz{r$p-)B`Xs$srT_h&a*NKwhaYH)z_XYw0{%UKG9`j64DNqd}wJ(x41%i>r~) z8S%VWAokdc0dhtLGB&fLHu*AHXLTa(&{VP%YF*&i)rGPLWWfr1X62|@zyD@k`(Sp` zPH?6-LQU2UGc+zP02$GOz{z^L>#qdPz(Sa_n9Oj#Ba|vVKcSYqaKS^LZFyYq%O5RA zHqKg#AJCk2w^L;cY^m?i!9E6q<mQHbhz=h(sET#t5|6}efraDXWh**Gc0|uyV>9pM z=jIvl7%q;ga@3!xR}h4V(S2N>%&d0)V~_4n7Ukma5z7^+nxl%bI9ww>AT1@CS4h3~ zOh%MDlE^6Of146C+7SI~qX)-Dps?hADkzP`<}8uA4U;9uDGkTxRpXmK)KgEHy|gZY zdtvKS@eQE|-vT&u4rDbm<ORYJW*Pi{kJ8%$+{p9i0{i(m<0<;@N44eYVO8sf*o$_V zwCx2yQQiBrUuPHSoJ^|lj-<it3+CVZkwtSO!ZJUZA;{oq?zMi4Dk|clP-FHN1u9Hq zbD)23`|%6vsFeJ|=}pIFhIe!qshww{M}lR0obLi!QqPXo5`WTIYAn0S)4_~MiFgQI z=xzuwySwV&EAMK8>r}clb0f3eeWPRagVrjHR1VwnIBxi6>0=U^|DJ1@cR$@hX{#&R zncn=%#_=T4n3WcCNTQ~BG95H)*#`Wwt=3f=(WPu-%wHs&STn)Rih3JoeCpFCPuv{a zx-r=(L)#880lOp1a2l;anH!|;RdvAy0~}6k^bPeI>`NG+^&9n~aYTvhIs8vIJgEW% zBceec(~dOeLT_!g`!{nJ&3_6P9cX6FtYO5h9LTEU7Om&toCTfFZl0Aa-vFmOLKfSi z!mjV_D$h=As7<35YaCFi`b$KC+7<tFx;Y-Md`BS4byp;x_=+XucL4p1cSPr)1L{S! z6TX_!^pJl>ChnItv_R@7yT+#Czlv1|$otnG_Y!Oz+70Vu*M2ZU7@DTDx%6~@8)buv zK39xGhgRtIfz?vhlgh2o>SrBQfmU_c0Gw|PH-vgeaO^7Xs9|LyrQ(0|D^Bb_N*1oH z+OH>;jgo+T&F*Lr`tj?i&lZFe>B+AXZOvrVWID}m+Zo`twmgUMoJyN<u1r(5?E<@4 zXoRT!wI-C1Do`?ynuzi{w7v=>h8n1DxdY1+5ULl|S#0^S$<<X0#y8TT=2%tX@p52e z(SvRuzjV$AT>fIfZ%y_{b=)%Gl-HHaI;<6M!n^&{k9*?1(isknniD-iV#mkf;h2=3 z@_oVu+xUUd+Z*&A1bdF0>L6;+*3l-6-2Qa}O>54>>%;>f$cb1;c`ibM2)!ESSCC)b zjSR}Hz*TW?bnlv4{#&JX(WA1czkt%jwtg7BhPom{SG>}IoV0Jepvrh|p2nNJ+w#Mp z4ufM@pcIWg$)cd{L@B#p=RSUHwiS4P`g2yC*9qfkvCH$CBKY|z?<Cgt-Q(%`iUK%e z{3@UDR|M}(>P~n>02+{Z`d<&4eW3PtwtEhbhZv8ZL#=-~4E{(zV)DqXpNLlpsv3#C zN%^NJt=58M$z2qumz>Wd4T9&oJ^_#Hh6}fBhei4qi&PwCXZw0Gej6r5`bFhs9@EC^ z$&09O{}5qWAQ*M-w?B{Pma6q!V)S*ES6eiRxDY1YZ5VWLvC@#3(<-d#JRoHR#RNMA zUKAX~PiS{^AEKCTyxscTA83WMn4KlpoE)%*v#gOj_KbdwDA!Tp1Rq<SpM&x5ANUV; z9|UOLjtt)Xu~hu0Me`pXM|XMvMu$-t=r0Ze&Si&FG%dQ!@cU;<H2YFI2cv=ciiQm^ z&uExm22$2R)=fD-^1wH|BiVWK%qA{0>no%QhKw&@_SDa#4f(uVxjAOg)*M-`v=|9d zcx)X<llDuZ4Dnj@Wy~ieAab!=qfY}NnwJ7j>ijX(U>#Rc7zeNnLBvZ5KJHQ2=6jC| z2-r%778R;ATrE$QB`aH%(}(<}$6Om0v!8d{Vo{g595Cs@LTS6&r7aFB)}keYO>bMu ze@#O})ZucYmbGE=5Vrkg8oo8|59ArM>$tG6o~PZ_yi{FF<x(wTLOk#RH0z@u&TL?0 z3yOcXN$AXzBAgWbBEY4rmu>n3X25Mc&ky>g@%mRmc${+GJze()8sLo#@LV7BPo$(E z+)E!A%A@7lkGKT~+j2uitkb*&O-7G^W0(8-c7ctjdT5u35NMF;GP$EM(BVmfhYGd? z3>TtKK0^Z~hcfyfBp(LVa4q2r=LRxpaIHzUU04R8mIUrEEzwlWZ=XYW&@5qRCjK^| z%8t=x3g1bR?U9}{bAhy_fBQq*Ir`hLvWa2uTe;cnre_FgQsv+pt`7%Or>G_;C#u!f zA90})P*N5M1+qeIM%A7^W+>zv6Hx?i_t|qb8iKgKM@G<W7vclR!IoAmNe_)QNUcV< zA1u9Td0rDeVN5-ZfpTRX9XsM^UDd?>8F-PI%hV>#>9aFM;8C1pzM<d=au_rS*Q}Vq z1W#AE@zh`knNf~>3)avQ?E|IaBhH>snRpWzwl|`v;+p;v{ej+^0bGW+!S`N5w>?Fn z+|8k)&P56Lbw$2I3R^b+MNEENpbR&V?WfOeaLpHS<=TW8`5w}~4({|nP=ZrDy3rwR zA#vAjtrN)nd8}B#>)<IX^qE0G!d_+u5^+>j>=;~0dSouT!Bxp1<i2#g(_X&ql7sL= z3o5x-0PRwX;Ff2vf_^&R1rJ5g`n)s5x*?<{$jqjOs%uPh2MSuKpc1AcYvDcGDxhwS zI1yTeyY%o@=o-}#ik9D?{xl-;VO6TG28`47`}~e#g^OYr#@J5)sok?6vIBE{Tac&Q z*j<`YTx{e-+;fFrGFV&vF9mz65Afr2SN#B9S)Bs6-5NAiI9+s17QkMv#qK}Ej9kV~ z7ae1h8lv9c>$2C&Uie@uK*IAy{p{@i*rR1mV!0obpK*zI7xUpqk2%{;EQ`whmRAGt zTH*qC<Q6${;_a2l@MWO?kk8bXzs7g@Rz)5oXsis8Qk(h*QQ`hqW9`$^u^Bd&0e=Ei z@BB|td<Vom>IcPT@a5X%Kx#WaXnidqm$xDW6|1e}azdTWG6z{^#~Y8nQv7CYTM&i< zT5$%yndZNI1N_oJo>}~#==|qo%T7x0NZYMrNtq$EAjQ>!mpfyH0MN_kFns3}w1{68 zviPUrAuTz~K_%X&G?T?j+#76ndEQ)m!Zx$9aR^Z=v#M;f8l2Ri&<WW`!rv$Sx;@2R zfV@}}xB=E-(MFG#;u1YQy|4&fJ?`@8=c>dmR(5tRH}Y7u+h)<)Gx6|WI<U4WM8{ws zn^nW&pw!VnWcp%GsM*B7afigvn6JheLEf(`2tyrc>d>k!7(d0vG2bW$gXytxu=HK` zJ@+}Y2=)Jau7Fk|x0vqNJ}>GX7ek^`zj7#R>lZif=f6xHVjdeH+CF1?&6lW>IxFVI zt+F{SAlac0RWh~2n_6L7BMwT4^cvRT-Q^X>T$9{TqN-!E9)JokX@Nrwr6!GTq|15M zoMc(auk_jV_)kex##HNV-8H;EgyaAOeRjwCejl7pa=ecCZ>}@%MLvkBLyU<HhKMGj z-I#lnVhCAd?MO5^RkglBwmx2Ux<a!Zq63uQxN-|F`=>bJ1rFt>$Oe^Qg7=&p8lE&` zRV^CnYuqSLq?6XlF2kqk|EgjuaLali;Y=exq!FL;7<(W6YV|;+X`lC+#^49D(()yd z#rat;Jw#Hb$HSw^ZFZE$0Fg7ccr+$WJ9fyN?4qbKR7GM_FV;VCahAM$dhwxt$+;J& z9~AvU!mUDTvW>(D13FuF#|5OOF3IWbqfpxc=c;TFyFf(Ix4C?r7N!K1{=#ZMAau4- zQDgflm*1rq83de0&Mn@vOdA{Ph<`T8!dc*;stu{YN`I5dry^6-)RN?0MG}nWt*)hr zra)8bQ(@t)A_iYt!B4QDGHh^LZi(;F-1%2U3j%q5>-IKwTele<IXItbQNZ>R4;FP0 zUse>browYF7heKrO`E|&1*iAKZ-R{5k&_KS9EN`)!KHt34p|Lw@a;g1KEbV49l1bw zeOacy_m`{0kHmeDkyE(|noS7@^6Iz30x-OViq-+{K0e7s!Cp}}768Aa>t7v{^Pp}D zC|wP1jBV<8=I~WKQxmIer76Vx!g(IH<ZFE=?&Tc>7KFkzLh9zNV-$>MN;1+1HrpbU z1r$xCn<V&sXA2MMI2K^6YUsX5du1Fle+YYO%Ah+}aC(5Im;VOx>XGFtpNC|N(V(SP z!I9{d$VMZ84T%VKV{tqQTJHEu6*-?hiBaa=pZ4pmQcNwrZ3bTurC!hC39B^1(i}1B zO*p;=3$@{1cDJuI=rsM0<xd+Y{dxdGTZF}T(`^c7f6yi15G_K2&*uH!#$B;_4^0z} zTO~l_o*Uj=B#Nll<#Hi5&mzX{X<iK{;x^)m`4bbQo+Nvc=&ZL6A&iYBNMR9YS?Nnh z%Ti#MI~Cq(%+nSL;ojYV3{m;Pv{fT6AFTyh>Xig7Tbai|Z?3EU%gle%rNDq-CS`5% z{6ykeq9MxuE45vAK@lg~jFDjf;jO`vJ5=))H#ItF-RF+JV*OBy%5jDzg+T_aHV6%7 z*SIm=-GRZwZ((gqe5q)YZ*Lz0n+hA&S{&uWGdMGF-n5{cJqFo+3m()of**4#$99jq z{@oenUGvs-D>o5+2QH`($cyIfM|U-#1m3Cw@Wp~r_Gn?(UCk4?R547?mdsrU0G4>x zHZerX-IVwXPw{XWa%Hb_&Uf4Inz<x8O_DYPm8+g)JFZV~O>8gKY0)m1@nmv;BgqiB z5nvmsc!cAq<T_@p7^VDV>DPjT*TM8c!B9JiRB#0$fB3Ds>|}UGt&0-3$S&BfOSumH zu(6Z>>8y+PPN19GmJ`Vz1TWy_XmcD;BEWz1NlftR=aY<xK58Y2yYAg~D;W0t+XeO3 zL-*_E76TD{+<vGXlx0QNcwV<K(UPzDM}Q*v{GD!4*Zc^XI~I&oPFM)E^Jm?MD4g6E z{6ql;=h9OHHZOnhY-<(h=kiUgDEYg*oGI?C!g(30DTaBLn%95#B2b|U6g=7i5WHxu zQ_p%A+uJut3BA!7Zj&mYZAU}t1EdnaL6(3d;tes!+>yIkL!N%up73DeXjNoun2!3w zy+7!B80y;TEGc=<PJ34ibZ`Z9!s_u?%0ARJ=7i~7!=D0$h(*Y=<cm;8x-3@(ST)~E zbL8WfB0k@@KKu6`-E>&o@QIZqsPx=Q<5l|%NB<a{PLZmV{zwq62aPc6S66S9Pm^L( zhD4ZD7XAQ<B}z>_Y1<gL_IcN=;F`zgLU_OqS8o~=Ux=X`JjEkM0e>8MqC7<~64<!A z(`cqxgq6ADp|<;L#@h!a#2JMDCl&o!?~^urmYP@La>xEMyzhR}GO)rZNoLeBtMn-z z;>hA7jU9_T=G)JdXrBoZt94WL^!s)>r5fOUU0bm^@jsL!RK8K_rC>uk6x-A}2R5^{ zm<gSfyTOq3ASl6CGn2oc!ZIx;qazmm3T`v~3YxK2f_~8;h)>Xd4=VaB8pz|WaeNV3 zfrAF^n^WkbbuHyzNl^suEYh1n?$6JbBBGOWGwWVZ4jD)EHjRb1G2oFP{fmDZkeVVI zE7bm%NUXcRXWZ=FNrzqEHo0=b2IW`NdG@_wV-~vGK8Y936VynyFi-=rOnyLWU}bjn zXm=B8EhT|kTOWG%ELtM}pg_3Svlxk{ffi-G5X<>-(eP1e8vBUo_G2EHPTt{0k_MFr zs>{6JU-nV-)b7-xkyH+kKc_aEDVyR?N6077K0hz{P+s!^sQ9GqWIPdB8$pw$5fUJx zsVms>3Hz^unrc4D_YhX0iU+1)y)j}9UpWPa6H3Cp@o9_ozFsRM6&>9ME~(YGjb^i} zewHuw&|k{&ptrB_AzX~#>F=OVQwUh3w#se8;yBr(V(Kk3&b?2eXiRnJ{^mF^(8t7t z2o3n3pASUf!&pqY4<OfBZ5+J6U{glj=u0k^>SaPxX@qg;Eks*zOZehcx=^OrnrCkV zmh03Et%9U2Xg)bWj7jIM4-Z=kZv&Y*chSYuQ}oZaxhCJK>GyFym6r#Z&)?YEPH>=p z(4g8AEm~KIQ)Jao4KN?tWQ(7J64kK>uHCp7sNc;Vap*Tqhq#J_Be6Ej9tP00I~RD1 z-TiV(6Sw5-FMaY+zaz;Zauc-1n+@4t1@_y2v+nKIMr7WSssG(Ep$4y_yW^gm;Q`m* z!^j8+2l{`0a6oS~bdD?E)Bx-Za7EXFrRABP)m?##!^PV(2Cdw(uS2%n#UQ~Mu_S<7 zFZ}*&1q-&0(0Ray$CLI+LwE~6JPm?e>5}U2EDlf;r)(A0?<4NX@MyD{J2<XM2HT04 z(<bMz%(}seE-zC8PuVaU4PDRUUR-v;4?Agq9sb!>JPOcD8=ObjTPoKuby~AYXj%en z0NKV#Wx1j6{oRjX54y&&27cP2P_7mUw{v<uy7n<QrVPY@*uZMW=v{Z|E-VJPjtfvB z3}hqx{|yx|V%wk8pf|AlHzoVa!K0Y@?7H(W`xR2s?AdIdY&WJ$k>)m2tng0BN38e6 zn?>KhPW7u^q53{(=<``IPnCFxR^ed2qY7%@4la_tl}PH}LNgKyT;1e!*23)K_V-}0 zAdSmk;65V)ZxKqg0$sZ<VopPRXnlF6f+VTqVoMkpk(<3AZ@p?bahtUd`CxF4`XBc~ zJmLZuW26UsMk!f}QQeFbrXaMIJLO5aNvfZtpjtlU6-)$iqmS5QWj^bsMSd}`@11O` zIsVaCZK|`Jv;Pg*CmOIV{yO%7ez)qTf#|pORqNK2k7G~J4{<cSvPalPgbIR!M=^ij zvw>F)dB+AN>(-c+%#KxOA#W_3d`-bY*ZORYC;Rj++lj5B%7q7zdi`<>g|o|ewF0+o z5ws;2fFo_f^zrtn_c{={h0x}?A6!&9{w$Q&wQ55Xi3`8g=-le#a2f@;{CS6EEnA+@ z#ZGZ+cw+Jb{;YmJr?g9XE!L4<*>wf7B5awvREuVn!|bWO&p_Oys17wO@!Sj+`z4rq z&zJqP-x>7(p00mF=0^v51MN?dUgmZuLvgg|i8dVqX*B)6Tz~@_WlIyeBsJl}VVcoF z<aF62o7`0l+8avgkhWj3v{%{$Un)ji=BDHzj@0Ys(+n^2mtLs-U~2H>z?;JrLIbuY z{kuXbOHv60y53pIF2pwb)XPul+=?DeHX0kBP8PTT+l4ewg(RihttRY74%&mW^d9)R z5x<c^yjvO%bH$NdVvUL=zu4H2vLGbog>J7@ozUIIQa#qEb4*e0E>#Su_<kgRFu_n< z|2I~b#@k}u?y^B0wW1PL@9}JsO%Wk656nS3k(&c(i1rpwDa*x+IzmoB3yDbWAY1-A z<mQSS(hD9i-SkBn-hdZfjeXH#{j&8VP%Va#S}x*1;Q6D%@p;D@ZLaW36{t4#v)brK zO0Qw-J?if{WZE8og8Tp@ycE)?fAWoYMNGQ4bbUJIlQ%{#bASud(^wX>v&e3}!PdT3 zB-!F(*jE)DL+ByP$<eJMA4RRWy9kE_DUo3jcDF(7Te|Vp84l*A((t7xs}9<AQV7ES z&-v2FEQNck=crml*9;m#pAk`JlVjak9f|M@So}_jV!4q6=1%?M=aUrtQ2}|+fmF%* zXydYp=5T1#*t0jo&T>)*FI&%(iGyy7%c*6I8s;NV&`r_0*ma^Y^sT?AgsJBqd%Tvf zEST*yAVSCjKH^afTi9}nB_*Hqro(2a*d0H($M*(AQBinb$lWQb?=`i>MN~UV10<?z zQY5Q}Zpn*6aN-xav9{SC>u$Ss-zsC1Rzf9=-AfuHX88Zje82>Fr8n`9pEB-hjTgzO zkG>7$Or(v>&oBIog(g+_TWr71nlqX0B)?T+%N|L$)A)c<|B&p%D!!Cd0Fg#m)|_j9 zf>)UYc^FkrWvH2TQw*_x<{IR^hg4RK=7jTR2W>*NaX4-N^c3(JUW!^(lG3OULp@Zq z=oDD(tP#0~fREma#jgf+a?mcWb7z{Jau{swO2Mv?3L|<eYCl&b`4D%Hdm*2tKkX$; zPFE*WG+gvK*l^_O<Wlg*h!-d~G=?F6oPofGSEeyuj{ZBTUz%-;y|Qqvw5$IDjk2yO zr|{%J&M%mQ3$PKs{L|-Rfbg03DZN#Ms*?Sp7Tfmoc_>*a#R?qUnG>Up3q$K24Uj8) z`N86h7qn=f%b0Pd68@*TBFrn;V7mfq+H2UB@U2y{1L`VNKrK&>`X*mxopL{0XkyT| z{1;H0fZr}ifFLP2U&5LBR0GBHnu(cmJRu(~24~&4&=9+K?{!4*XMy4Vw2>FIswaG{ zVt*=dN(HJSFYTn#2)4@;A;dtEALu~GiEpTXGf$@+W6#TUDYnXl_@A&b!Z}0ec8y8_ znhZjATglInY3p*=&hT{X_EWlS6@0Mw!lOH1^7HaKMKrKRR07M*{Vk~+MKAwIdyHst ze2g*W-)lzSG7BN6iVDLR>UDiicY~DTL?oAf<=bJrLW5gQ7+6Jv{`@mXU1w|1jDhis zy1%wh`?SMruFlB(`RZu2nXBR3=-7^SiR3W4n;KLPS&yRW(D*cpaqWuuI&)o93gWHh z@2{nVG}J)Py!<UIV$2U(=8^zcFJj>@Nn9>TN>@mM{^htcQGn<_oR5hNBD5ajcz+!( zLeK|jfTfA?nponA>2HYG$^LIgy(-dYs1vA6L`bU+4F^zu4Gk9b3B)xh9!cc`g)LyC zL*k#$;rMKl#f1F0_hNvBU1jfZH{SJAkeoI)GIkXyJ}cn(z8*6cLaEu5t4F)fkGC>E z_}prxZUXt#Dzg*zDh{Mhi!Fwu8~PS!b%Yiiu*7Sjup`!=4O4y=LfeBvvYgn_iJtOw z_6|CQ=Lc(PgBq4>GkOgX(Gkt*N{A!Wj1&^r0?0)gPpI(Tj>Zv+e(Y<S%fK)GHyyfv zZgHd*X`$#=4vvY_kixt);iGy?yY8WQ?Eg7-O5yuP$9Y~AE+7-&R`qnTa5AM#Zvp}n zvMMd6z$BM~osnwtwLV-0*e(0Y(j!q$C$o=&5Xd;z-=%>ksf(=t4}<~*^#*~hrtIqc zNFt+IV|&B)$KT)7x+I`I-mT?X<Y7S0EFtG!DevC;K2r3oJ+e-9e}ogG<fNTzTIHeB z)nny;AMrb;uBd7<6K;_kmiL7<F^=3I$R@*@KO_653QH@}r_VmeF@y!o3wd-F*X)K> z)hsyXKXB@wq(TbHKwwi?`R5V+e7fx3wc0Ay%8P)%SVA3|E}yk8aQ1?ET0wl!=K8`o zDJCH%i@Kh$bDSN+nWZWIi8-BM##_0>WM87Z+pqc3hBh2IETB6Wq;l_a%lGYesu|<i z$-l`_0h`pC+NJ0)=Bo;hV`mAmt{yAlP~gis#y6Mr>b3a*uhxyTQ#`lu+T%?(UuKz< zgjrSntY>*Ym$2yPYD@nt56%?9S1hJ9qkRk5$Rmlq<4?8`Rm3iYw#l!xmE90Ay#M0E ze-^|FYQs?$<MiO2Fo2r*tbfqxQ1D)0v^N)Ft-Hq@!9C0`HQ;)ydb@+bc8Fw=m4A}N zB@PkXOKFCq?bg2ReVT}zZM1Pm+2cb!K6u>j<M`zve5#TJ9#n7Kzfz$C;J+&-pcmYz zx9F#{=731aE9;3Ugd%W}fh~-5@qFJ^;`>a`@zp{WFQtP$N(8Qjkn^#>7G2`!pcvzp zNl5^pB50Alj*|f8r{eZcS$MI4Z!L!ga1--9{RfTZZpK5r36gYQI>((qMg^ceS>K<+ z{(m$N#2fmUPYh;+x_}XJ=|W{}zL_>QKP7B_v|iCGF21^}cn6iQmyZdBEf>3R%f!g` zE*(X4q)Qe<<e9a#N_o8uiHT(LAnQG+X&THe->|7EWDRlvl>YxjD;&ftOckB~0#WCa z`K3g~ou@|I2N~9C4gTSj&hheTlJANL3P~S+L~w|OK|H4|ogE94f7T*pBRhPHY=wb# z;e<#@0(=TD)HriEyd0gwZfVz-w>rtJu0J>h&rGgJaV#uOi{f_O|7hn(X`uZxb5=4j zCl9t^iu3QF0qHJY5+27bn#(&*F11Zilo@_Z=C`fO#G?=B*{q%!bklOsYDz?$Yu~<= zokw(<JQ&9(a<dCO9k#nlTxy?1EcAKfD!_1vJxB_=(=$hVU_SN3J*{q<Qdy}iRnn@g z9qsz6Py0q)%kI9{eX+{ilu8q^gBc%wB5N;8n<E%0K;!_aNdbf1+BoomUBBd2PuTCM z_}E^9-IRibtMdOGYmCfcm}G3xrQw*z^a77hGwAjM?k>~<-bHFdMTU|^{4V7G3DW<C zh_+bM7y!!xpLKJIewFm^-`7_AikCAPuWMC%b?q7}d`F5N)(C}a#s$cAPUzAy>5FzQ zmdX%%K_Z0?=EWQ0(`G7uX5@<&I=gtJ?4Ga5Jv%mvF#XgoG}uOD$sNZpi3+0s0f7P! zp)*2W(MD^!Y;SL*b{RHj8s{FBzyiu?Np5{M6*j0vCRpe^^cm?=anHO`tx`KRM>iy9 zV*IWWtg9Y-(N)Z*uk=OL44xzy<xM}REM3kje;?1}-%I2_D>CX40Fgg$91QfaTchsV zvn*@nr+)NaM{2mRlZxT)RJCT^nF%1M22Pv}p01ZocGk=hI%sxdSKHvg{&RUBvS{Ai z>ih9ptwUU8^TS{p7PF`Q)s0|iCYh?F$-7hb$#K8<?ur?Tt{|dB!#e>MgIYgb6W;2{ zCPVV4XilK~j}b2}4e-M*yhkt?yL$)-VIKgs=Mz<W-X|~YH#7I02A#2N&^Y*^d7gD% z!|El-WwfL+Q(TDuhN8u6yU0~}5z2DOh2S2fn%z$evIUFzcGP9<eT5v$hFqA1w@7*u zFyXCCDmIZH!v{wUq?C2cRcl41LtdEu2reoVK;h~fxm5am&GED8GE0Cr#e6b`*qLMO zQmV)3sSI!7aJD#n(Upo$gK6!!r1{3I0Iq9dO|Z1Ba)~CIwee;<Q4*W};sk*8aa*O^ zR%Xa%u}{8N06pg_vM!e5O3tEQdWs#-Jc@hPkIX5N3pe*#R>`S)-))rH`)@7!!~=Td zN^*p6TAg<<Ti5Q-HrFox_{~+<Bs)ot`*RL4y($sl5gy^qmS|gddB|C^M!_fj)8tOJ zQx!>BzSP5#r91=EZ8fx*FlssRaLOOvyEFUpCgw!o^Zoh!{@w*1#|QI?2D69H|8m;< z`8pp+4!q>uvKeyINV~?nzj&+$XW&Sv;2wb{IjQx_oUFXkHX*x76{i!1RiCy07=%k^ zilX^Vgru+5q#HI1AI@WIIxh;-KT5F1sup5#Cn5Jr>-IC;^k-<%J-ws%-&K|d=wH7w zPjBz?v#VL7ovhz&i|f>+d+m=~#`O<gOVyZ6qD)DxGnmn+(M&_F32CzopP53{k@-eG zv-guGsCpW0JtYHtY4p0!#-L@^h**aCfy3&bJQcVWm`{!n)>d?GQ49ymagGk-;a>WD zXCchZZEFzl=2v{&8~6MZZl49z;Kh8qAHl(zPc?6iZOkO}M}26f<S?MS9H4jv*zfn) z)rUWh6F%yi0u|yL9kt)Z^awi>1~vM`|KEKk_@V4(_v_-%)y0I`)O6$U^W@V)dfPWm zC(Vlk#`zz7Ho~k^2n!R^2P-6hDhyOYgOFQC4Zt$tH@-5->Omo`em)<Dbs!Pu0FX2a z7MFR5hdAKg3?OQ1hw4EWpEIhI{Hm`0SibBdgqNhDAHdX1_)21{kDsYfImYPRE48_; zky5eG-nTKvPM92~pcKQ<%ce~=Kcg@hebe;`Xx{URb*Da-_mO)>5`3ELdGesa!1gVV z_AvW@R$;Ua?uTJ%#hCg*t$f}iY~`^4KE7h3F0D)sYYs)X-x-*eaEkA}zd))c+o)yX z*z|dGbEgSr=>Pi<n?pT;Er$7&Kk;{3eNXn@Ec2ADuJ@<I9P`jW;p;!r4KSZ@FrTQp zi*Me=vNeqZcGT2fgg4aAEoj2MdM+Tk^S{kidbGMmrFBWyN+|bOJV?J1K{qZ^Nq(iN z|NUK?39aQrQtYVbYxSA>v{-2f7e1y}5(a{KG&DXe)4P#5Av1ZABT;~ra7eik3+of* z-<xcTiSWGjou_Zc$zw}pfTRJ7;NCJr4=!VZ1>FmI%~@@%wR?g#PFZSBh59^u$-5VC z*QBsCLYXPbu$5-}sQw-U+%nX9F<@pQX(%^=D>R@x21KL1`sR@OdWm|k#;vzD`<<(p z-bQTseMfhNHL4KN4VZ*{v~5Ym)~t~t8cB639_1bzNTr8n6#4k2Jbezc<S=phzAml( zXn&)<M>3@6hO++IdfGgr$G^uQx>pZt#2Z$~>j29@5bbWO%@D^X<%~?SWO!=1L~I)T z-$q|(KnbS1kVu#*qD```=*n|v$rQCZ%KmR&UGadlBCJ9fR7Y-fo<7YZsv#RZ3eEWj z)3UCNU^n{0+%52vF&e7`Z2fAW9D_x*U%naVY6&3teR|fPe-zkvvoq{r-<zUi*5A5{ zv-|Q!57gq?(Cg?l{6_U?ZDJaVcVwAEY!;cnY%_>TbSF4oVc&+Ow`JTk$5mTLd8z%t z9$t44QKQJFP}Dmec9}*GCVdMC&WRTt_v2!#8zq9MFB--r;JIXArS<UE{E)_|{^azP zqqDl0`3v*d8372UO`6rJvhXyRR1|QAA=4t=u#nLg$TSg&B$QZ7+%wJ(I6XDkhsi#S zRWo>w5Hp|_!~63ik5^j@Mw_6Qtwoetqp`^a5viQjYj*YxuYBMc1bo$nTOW4sf4WTq zmuUdl5>V)lzM(IxQhiH?@mW5ZXTkL*44|`;F)?M?=HIE6%!rNB6CWJ=hT^my^E>r+ zJul~uNW<f5lOc6KLY+!{?9oX*OWHSxZ5xE}mR9L_?$9twuz6Qw=p#fTxFR?5_=YKe zQSv8AAF?ytS*rxjU-ij78^kL^_NtaDW_dN@r^D&s^dHBiwtkX11@nwYy85v2EDx^8 zlJMbq)~{jlbua04Pk``Aotf9NL5?D$1u}{-{khs=@=HFXba0PS_CM~AIiAE1Beig# zdcA-P!*?)%YQ_3i+vcDtNn@q-QWt-iePc<rln<<C4!5&x=H5^boSujMgJ%(?3`ebf zxgt$)yn-!5@qKH)IQ~A_0`e__5yKKI&1J7B-?Z7lR1Gehm=josKh+}P>i<({-4Q_< zV0`D*S_wo#6sy_y3iyK2auZj}nvw@A4O#EPx6%hP3dt12gsMCPejdr<s1~Y$I?W4b zNPHWvN+Fw9;L3WcX8({f9{|L5SJM-KPIF=Ug~av%ah05*VE410?GKJ;eE;U9oVKCc zIZ%f=+zO4(vW$iek%XcyBzx%>aPf8mjZT&GYKJ6>oc*ez6Oz#348O@g7^AqUOPK)C zRae}@s+Giym35b&*LnSONU3NoMK44IKk%JExCde^{=z-mzk38sQ`n_As=;b!gkQ;+ zRoZ-{Z?S?Nmau>0n``iKXs1)wpPScGzQN3q_^QllNP5KE)rPbs71?xia#`~B&@VRu zlERq0$!Vbn!zU2BG~Uq&s_6~<cF9K=OhZ2l;Pju*X;7_Dqm(;t+~@2*Q<HW5-RZYi zo7v#Z=nps`Gsw;Z0?PJaJ!x2@a|n5v7{<Zpw=ska*=>O}*Z~iN$unZ0!jXR?q&Xbs z?zy7OfPj)#Zzq=ONN<kzK@5$Rb~xIq_^-2s34s8&OaYkhRgEHvR+%(!(0eCZ&7+tz z&rD%0r`~J^O+SkxEMc_>IfBrP?mFgNs44dED&{hnFMdYUC8hi>%V_KTm0XcpwZ51r z;g;5zNt|5`Y0GyE7681;>W%c&344**cXj%D#rwH#RiEPc`rUmS?mvpsh1>)n6h|uH zcRV80yY~>_y5q@)Biabhn>2d#PP9`W!qJS~Ne+MrJ@z(c)Cu2PRA#32S0`FVg<T(+ zm*!_y)wVD=7Gcc>;gW5H|DDydKzu-YR;jFNud41oCY=!j5BLn+YH-{>RdP}$v?nv0 z$cjpjQAW|=sN3)rD)13d>TEN-9Q@SD%y8pJj%ot$w2OnQ)KP3XhnvgIwv*rf^ikMj zKE=SjZ9Dl_T2-p(JbEsM_+BT)o$^T53M$dDYTt7KroJ@!$UJ_sm+9d%bZEscDd$o2 zpim(Vv6i4(-tv~nIc0rH#Ql6&Zzr3XlI$iKu6KgB{qNrT)Pg(ON_zdq6Ox9%)L3{t zmK`4VP}pv@LUV_dbNZ7?Dx3JkyTrZ`1an)|fn;hz;9h@(L#zP>1H+AGAehUIX(RN9 z6Xp{sgguA8j#1g?>n(-rr(rx@L3FFbT}Z{Y_N0R0rlNr-Ew2{~Z<H6W5h23;suaF& z07wTC!ZpT-SG_`~kuCjCG~F)uFM?5K1N;*=0)e3VY#xTido6vXu(-&-a9{r4!;JyT zu$oy<AVNYO_FzOUaPk{&Ybu*Gn!^TXi_W={z2Jspzy$+Y$7ISZ!`#p?L9nDqs`ASU zYr&*V>p7gaB>Dv9+}#-xT+<)q@1ONRzthJV^$Z++#Ab(#a%lygjS;2ygdKSev1nd6 zZ)Q;S&l@~6_ay=;ZSj%ykHg#ON^M%*>t9ir25p;cz6=Bh@0?n0>jX7d<h1uYT5>-i z89%n?vdcLKXOe1|>EX%Q8fdtudlj~kZsTXu>yODc{mggxwF#sL97T!a|E!WwL-jbG zZQJAL!1nX>{TF5T_prciSG3)jPhensx;aSik%N;4!#lDMkX}@6VHX#xCTUtn(zFY@ zs@;|Fj~8e7Kx->QoX3<Z7m8_^cq0SAs26{)kk*H<)ympJ&l6|R@|C}`PjQ9?$mt8F z97XYF9JPPmm?Y;9*o^GQdXZiN#gaSvi6JqKGS&eLWOfHTv>KB;UNwhsQ<_#;$RY)? z4-H}ICnVF<r4q8E8ZXZc(9!rKG>9Elfk7HF#X|~2j*g5Am?T!}l<EUSKgfS9QKg;m zzEfQokJAEM7XLjg9Y8Kg|II$ofHp>zwH$JbTP{TK$1)mJj=;PM=z@r#2o<Xw9pyxv ztu~nD|Hsugc*nhc@lI^pYTDR#8>_KxOpL~EW81cq#<tTWjqOa-*nD$;Z@sr}?_V(M zJLjB@5BAQ{cKA4!meqJb3pli~OA}-5z@6%GFLcW6Mke=UT_6_kO8tWIfCPBjKTd!A z&JYH!goVN&m^{|_-62GT)NlT%4RLGLJW2RzmD8pdZd%1jlr5c8kvSrGkX`B*G{W?` z^JMoD_idPH7aMjm{ve8?r@{FFEsF__G{AMUQ*nl=Jqf=J;q|1Pzc~~S4_j)4*qiGc zd`p+{MLQa|jovKWJx(-%nZ2bvhjRI6<lhbJ7PwE^OBrL7U!;|`TKa0Y^lij-BLTD~ ze5N&7zpC_^BSAx4-Ro3;ZKQdc?%)G3&x~ob-|g*I18M|XR<%P7ZqY1i=5(d7@#r;d zGRYe<cjaqQlr8>)4Xgu^Pm2B9FcLu6;D2?k-<}3Q69#4jxizf8>*F87JUSBwNlN9u zNWaPLqTJ((XRO!`IvL_A4NL_E_`48=M!3*^U(~x(V+XXAnf9Wj-`Im}C;QHe*_T$b zpwlbFoL}5Me^++wP%k=q2kTy4&T~{imnuuCnWSterio7J1p@^4uG)%BAWTY&@-t!3 z$@BqtU=h=ZH8+O=w4%H-0Z+R5V7l$N0gCVFljrxIyyJ6?dxMoy3@S7zgFgRG^E<tT zl8#+woEPtB+Ggkv1_L4G$0R+IWW!Lpa-oLU!|cB+7o9i7U*pg1WG;JclQgzo8~t^} zQ_w@7XqvR|(}s~8P`+2P3@69BziD489Nud@5Fliynvnnd%Dtqp7<McELXFzJ+*$XC zs1y0IX7dtrBy2n&#y6#}x*95+)^1+rgd)tn7;PRKnMzikWPz%g4J@p>u6Cw?5>k%x z{s$x_f_nHcb5ddRV&?M}yZJs`12C-WJ`AjiNCtYfLIxamVoak$YwlB@DVre=%Wj=J z>&lC_>w2D*S#_jk8%BQOvBlRjAIVPITAyXW`6$f)yoi2}h{%Jhgyj`Z^~(ox`1edm zD!R|e))v9PaRYqVY%>vkKy1@-HHH`0EF)@GCZK5&5abD5<Q#Ymav&qBriIRoOxyeI zbu^+W)n+s^^L2&6YZkei#EZ?xQKS`Md><m8VFga09c;%_$Jjytu;vDX{vEpe_8Pky z5Enqe6J;jDyykIJY@^5qzvAg&eLH6rcc4M)27q#RpLOi)Nhd`4;E~Q~T@a(G{Zt03 z*1)|@8F5ZcNWB;R(L*_M$pU(hIY8W-IBKa#XrP;ZcvlOS_20l6n4|>H1pam_yXY!D znvj)x>j>`HOfO!9SYGqXADzNs)*K_)Kep7)`Vo5V6n#ASsZ<k@;k$X{5M)n8ltb?J znYCbB1j9MF0>QGMQ`eBL-;3<`jwAu>8wb?V^Dfbe%lP3v+5$ITdDUf`C5-C4Z3IZ# zlm)>s!8<uZ_NoQx+@2dm%~W=NY>9W~$nD<7LzzGJ=@kGW7sII@=}DlU{I=we@v2%z z{fGh*^{vEuPI>$pocNpnF9x~4#|!_VVUxyQ5cGSvOxp%M!qY>Lgo@oobSST&^NQL! zfn#9ztnY|jfK&R@^-u&vIqs&~XPh0JJPL{any5O1h?S=BVHRX>MyQ98?iV(HY$IUK z{L<@YHq4zoLl49y5ycstj}^sw_L4qwD0!WPKb5cJgF_o8d|ZtBuU5Ms$Ig-vSmAMO z>(k>d93@sL<U0a%d_g2P(Zn$2i}kplB>V_x*Pc2)roLq+!?0vk`8!XV{LPTKM?*ZL z`j^z&^k+lTAL4J5VQthC_aa&MG8{t+-3<_#+ZH$e5p(ktSju<8M$f%;Xy-bIah`Bh zdbMV1^j=H>R$KFbWg9ZuQXzN%4GXj7RQhNYpD0(uz7B|#RUS9>z52XK?VJd?AXGbz z-j-2XZ;6Vj9wjxg{nqbPV{+h>{e7=%Fz6{bR#xJul4gogfGuD@DvU6FZs4PVA^TO1 zE(ERE29(<3j&Ec@jS!-7ORgc!y7PBtjDvW@0o0lFd%7@B5<S-=o!TY)<IX1fSKO8Z z#Iv%r+a6}=F{83OAB`pG$IE%=8<yCl&8Iz<lAknf#%K-TFO*g_Pb2qgV<f%W;y2gZ z0)8u?(ePX{U%>z!0Tcc#(clvjg7Sv-c)Z-rcqx*3#06+;My#p0RwZ*zf#5e>iBTxi z-y|#c=qdMw@6H^uB2ttkv9)T<d?4x0lFPexwjb#PSs*sS%d?$Iu@c+l5)G)@kP}<2 zE4MZ{LgTmtU`N0BV3Kjvj!iVkN&bxC>@)S_J-j1K{!oDWSE?k&ckkUyTC_i|7R2-a zop(v{K?QYYzG28K8qw(IhE2Y1NZ;;8Ms(by-)Bk9j0(BJ9kZ{OO{U4>CTsIoUmQz< zF$xgtsmkI0pBBJ}cj&<H&qG|uVue%o1q?8Bw-M87_L#R9oT76k{h2?%zyOFh{X+Aq z&buU5$Dte`s^f0=qOG55BQsvFf}1NDa=+@>iYV1M$;$pP`K2wYLz=N(4$O^o9qA9) z##j3WRX!U2%c^{{Z(@h`7lAeUtPEh{&#*#HOfow=^O@o!0YHbjWE7I`Kcx;9^2mmP zc101|Pp%3s9VA0}Iqu>48qdi^h=W!H{mpE;ZBBab;gLd=f)Wmr&pxQ_cK2T#DUk=+ zUo+=Ug@OnMzdvG2vzghvt4bn7N+QqA@dojo7Jk(2+JTM`hH3eB6@naR4W?lg*cBIZ zUem*?{^*tl_p}<x8nt(7hA&}~>w7zBNJ*a<`y?-Q8c`rqk!Ew)DSfT~df3)VKjJiv ziQwATP#%s2a)UaU4>=SeqwM?4@TEYXX5aEso;DYqcUM{UAws0fknYN?kjF0jw;*f5 zA1&;3!TvU{;J-5|8tX;iP<YisI)&E&{dY+g=>Qx@d9NzwEZ{`<5)cxof<o|sv(@&L zqFdh7QyyybE)DzhL@UsyaM^p<YS4_iUTOkYgDSjoZ&bR?^mW$y3hOr>VBkjOt&7j# zkOqSa70O^pq<vAm_a5Lqd=3$6)12{+6H(NM+x)<lv{m7VlnVjzD8yE!5QW*cxr`Z> zSSc!I7|m0+OQXoHn+cu^J{)zn_9Dv|m!9B+9D?+zed!y!#ekHD{DJ3>(9A=@3SJ}O zho+l{TNr^8jCZ+-WYhl$qxyQrGhRB+s%loADs1-at3*SZ1u~V93=-yuM|~u3M=k`t z+u^15K*Tl=&e{BB5^N~!R+%*At9BpFx4jRpkMej>d+w@}o+e=VH|I54O$ReuOm%T; zkef6-?%%~=SpG>}<092_es7Ot?Ql0kJgWP5?w{o-%qu~-2$ElCbYpPZMK@mi(k4cq zS?q>9f415{AvPTA2;yuKx7Tm3o`^?8zZ(t(g^Z*g@FYD0INveM(xAQGCp@r#1S^lY zjK6L~Wf=DxMEj^qisU)R{ti6}VC=ioNTs!DXd^OjcV|1pXLZ&1+8RYmMCRVQ>4K%- z@swuf1FMa9L)S$rghT|Zo2?O*tXQA%azA!oIG0UJyTj4V(=8wLccsz5^*1ZZCC%or z;A^cpMqgVG!H_P^U0>uk6-<i49TG?U2RT@qtdmdbE`sCI$z}|b^<uY7=-h@Lej?wM zs+3yNzhLF<<?$ZCe-gQiu9FTP=s4%&!IOkt<k+d8qu}eKh`Ff=BYesQ<jlZc6e@;W zc0mc6jXh0By$DrbLwqJ07NjE|G&{_|@68u@d2z7;$wBA5o?0_$g8n~u^uIF1of+y$ z1MtM}C>0l_E<@e;;zI*mLPaU*ziY7|<T7V;?o_e)X=$;{pkO|JTyTl4q8%5UZGFoK z%gx62o9LMke=qMFA9F>Yq``g;T=!T6r|_Q6!ga0u*W-W4Oz?mq&PtW&Rr3U3)~>QS zr%CJZYyDRBT*tTyB(4XeTh=z+c*32~V1F*^Ibl%aS6<h1EY5p?JUWr}WtH78H^Q9M zKiK9?d`hyaB(glZF3(apBgbF2;!WoMet2&G3~Z*Ms9Ls0AtpK`rhxc@KWuxjFldlZ z8DpmF5YaYyi4k<*tzc|4{5Br3ap3xOFFh^|?Z>0{+6WP)%1l=g1MD*sAgs)+nM@lZ z2CP)!gQ~|jv)#cGfBNE2(^Oq2mC}C>x8=;6VR}NuwkvoSD<L=%Fw6!sXV)&{0RKYr zu|^tbsj^u9J1;)7JSAh}$*E$r=dt_l`xai*2k!>p(Q<}tlH{A<&PE?)_J|jf5ox>K zMB2o<2Fu3ZpYqGU1F+@SRKa0LS6}Di<tPcuWweq=3P}F6)%*nsv__go6b8#vVl23= zclBNG2g>^T`P`{?l~jd>=|l}@u2wS@^<t;Q6LSd;@zstOz+p?T>mMNb2gGLdO5e-l z(;plIb=nBkMcT!3CMSa<rrD&$x=jTBk2A4X`b#EZ9e3!L(U&BnnqCX=5dwW%ZCblO zG+R(0yCn|Y)6>^#rWk>M>=MQd&y`XAN~>a|eLhJPo&{xy3U9U4tqZI8CwmkUpMT>J zMq3`RF85O#6<jH5T{3Wyg2X<^m{eRfQac&z72cC)n#DFK`{JaAC!*K1Tt6Fl&l3BI zCjwcLPE09l-i{Z_h<oOm<+=T6^b1}eg{^}6Ndu|O@nO4SA+%OC<J>)tg@xbezZ}2z z@XwwhtW8pG3lkxuft(CG$tE&b&m*XN^WT!&57Isa&ZHyadI}UWId31oAbR9cON`@X zRqs26x545pQYpo6+MmQ_=v-J>x29bjf2ls@b3XW)w0rVt@;?o(z^Ff13gnOWTEKO5 z!8o~`59#Outqz?89PSqDC3AmB-)UPx9fW+psO6FG)q9{Y&q_wOjrTdO1RQR}u6zOv zlrPfx5>T87XDzynpVY7LCKStwfBfmDatZ10JwP~6`5+d<f$WU|)k44LMep0;?G<-k z{!o^qzP*6CX)%K~>!>dnJS*jBo8i^R>#6O#L(a9_Vn2|ACPV7r`Mco6?#9F3{<C57 zQ&S>M2`SJ6GX{8cy++-+lbUeIj*deTw_54u!6=sFrhNmKc$=QKBh9}6t${82AA-g` zJ0RuGOfQ6#CA}*sX4dq)c>Tj98R@F3c$ju9!QD=KHZlnZDcp;AhrWWoYT?48;LvX^ z@i>V#E4!!53Y@khyb`Vph;SFWn}ZFX=tkWoXiZl9D%gx>3qo+0%LnTsKK7KjN&9>C zPsWRf5|f9{?p)yzdh4`;tHsN~;GZ5zS7W<l^e?PbogP4Dz>pAOT#xAW+ay?Yb{nKZ z4)=v!m=XUREeZ?1r0Jx1!Q{29h)A?weCZp1k;7S_KD)){x;1Y~+#sab8M(n0$P5t6 zKK$=ke{Lc2txUGyHP^2_dnaFo9~S<uS0LGTD$G3jodbbykEHl#pSQIy(9eV6d?7WV z%Hy!kgAoBZk3oc8wK$v_5*OK<%GI^|<FRX8mWyYhb)KgLtOLW3H4DQl1&_h#dIfFz z?XUYiqWXt43P>DU5056lW-Hkv-jBc7Yw!f@*(CCuS=lqPN#?+6H;cUl(YjDYv~lJJ z)$tDZI~nZ7gq^)=;H)4a`{)<WwYmJmJ!wNaRXv9559Hb~`phfPQoH{UWO6|NcOQ%l z<(|=Yo3fzZd+==^z6#ei);@Y=i^MQndX+ni9))PdJpLyFZ}mvYfoVMTLm#m-(?$7N zo^f5Yw&B5k`vWK0?kN_eJ1f8l|4*;x!EfUDEts6eY4e9(m_<rSQdpq?2wxfT#p;)I zL|-)+U^WmBD5P!+Pg6-7Loc5HWGE&N^?oUZ-n=Hc)E=1`*~;1`H_N&iSeNB1x^fLE z*BmAQi;oF~WwrpS-JKSKD~6ZQ!WB>fb(<jK%cc!6BXc<29P$NZxR6Iu`3yuv%djy+ zu>V~!3-tTj&@O8k6?TN^d!6Oq3C!2uxz9^3A0+)m><pj&VmLQ%*@MzWARu%~`5ifj zR!NxOwa<l$nPv&+&*aY)aeWDxLE3tm7^F1kPB5G-EC%v&#$f4VxmaY${f90Ld1*v^ zG>v00cvi!wSI}Vl+EnNaw5+jyY+pBf6?Rt3mUULXqb+r+JUaC_-zzIc(vlTp*wtbm zvhEJmU^l5@9T}QfEKLA8+6izz&Z@}vMDf=Y^5!TpA^Ga66k4E?-Sb_RHM;FZ3{d@l zrTPC3u;YULXJb}58?CW|gx)Zg!})^tNVPlW>**QoHYo(s@o4%7)I4v%MK%@IZK-ul z{Z!?A@<~xO6+7o()cnF#pF!3%M6KJ~<)yVvr9&kR=PxiPEd#r!-y`{MaCzxxb8Hs3 zQKj;9ira@|LL*d3F^gIKsT#vAY@L?(j>WV6HZRz?A(u}yitd~7F61Hql<mR}y>V8r zDIcry$792aMlr!2mC-4&%H`DCvYA=d6BSlyJ-Lny;l!+;6MqS8{5YYQZJzHwB6Ua= zn7vzNxZAX^g$Be}5KMYgk5Vjkz)<A_qlHvAAwnucQlaSNI1QF>`qA*#`NpI-UrQjn zS0<v}YWmJKeYF9P4m6|%7DG7@Vtmh~jUTztd;SOi``1V?e0@CYZnl3v7k;0)jdFXp zg)xcK3DBL=vJ<1{`jfb|S#UVt$!xd3|IIg%b4Qr6p*3B(K8%D(sLx~(%NoOaa`1E~ zS?aVlD>_q@ns=s;)t5XQ3OQrygLN4Hq_Zu*n$Apex3-uBM96NRw@CDV2pbHr92)?n znv!1-4;o#kt<NEsWh-4#PoF02^jF?$QO!P3<HM<4Y|Ph&N~d*IFSXX@dXkmqE~lOY z4kZCer|6)#pNGPX5=OMGp3wW50fo24{*K@VZP=e#N~iUT5^TZV3h~w!M|+rK{?wgw z+U36pWil5Uft8<Jut7H{{^3GLu6JK>F>(<x!BIC3@Aktf-84Fo=WvC}pX~$n?6(h~ z!4TG+nS9=wS8WX8x2YCke(m|ycVP#D7CSNp&I|FA1bdsm<HkL*REoZDPQ2iUVNn~m zumu!Si09GXh3@Boy<N)fJWTewWqW_Qg$bKXyj@Y8qwMPOp14`dS~^#(^Y3M+OFgAs zA1>sces$kXIDP4f+f4li?#5;bdd3E!y2}G^!{k4q>CATxVu!TWCWpD(?GY0;4OuG_ z@|tg~$9LV!bZ|r_#ueyadpTFTACy13qE5_0)8Sw9=+}Je?-_3QgXbM&@_2K}4Of;f zwWF_&)Z(c^O=%58t!DijdR}8O^n(EatOgqJfIiFOZp8?#w-V%}$^9y6GVMEPCG_uu z4OVxL0@McTmh3iBhvt?S7D<)c=y_(;%$Hw<10AY-r%`{){ffh<PNY!g<5rVsz;EFn z@sA4*U^WIIZQ`D|z2=YEZ|eKKC2BimHMPf_Xrp8EcAY?KE62>?;nfQ6;ntaREuSfl z%-;`8q}EK78PCL3uN|OaF7yCPHx3|eEonF&s1>WyEP)!!*!f|FZ%9-;u?}9upJw-7 zjs{#ARM^<Aw@Mb?87cmQ6$te9$ohQJzT7}Em!)CEZ)a7olwVF?|11kvIe91Ev5z4p zZ8=SCm?h)di;XWd+|zVjUS<O^oO#YIfpAM1`;k}=VsncNyt(oHiTsyDtIWi%a3<HF zYxpG?_{@aRi>T+S6Y_hB?N(R9vk*vI>O{p$t_!#!$lqnIsFD`+9%PDb(Sjb9|1`{b zV@0yqKa5+b@kt#Q6R(^6$Y4UFys$R{V)eu~`;Be&xP=a6y<t$#oS-)knX0e*wMh&% zBMkpPuZRkHBnP6>w#5>d@NK00HGP$Tjgyd<vdr}*#D>KP3s4JF>Jp%kIB2EMYWJ;W zyqCa}B-GPEHFTVB?x{S|C7)Yv62eW+3KJMq90Pq={DUZ2<B?LtWAJ0Xn&#XYF}TFg zg*|n9KgqB3GtpPC7w|Yds6M-(dogMSTr2g!VRhWL((P_=8l~;UxsQ3(>+Ml+<DI#s znXQ09t({T9VFwX+$<D~@R+b#`-3hqQY^0!qO-kp0)K{+WdH>By|5M8wHmcmH%Lf0^ zE2du0YgGB(><}EhL)-rqg33(PLT)}MnR?l*c{Sm%A-WOs>kr+eAP>*3@)@%N+mp*^ z8W$3ZXQ(hmSQj`ErN{E4`R*zv=H&|*h^%KsT_hr~$Plcy{4!8e?tL$;5q4h1Q>C_s z_Uu!*P+AW(V(Pm_B5OUhYp@~%G0h5K=EwwVKei}XPT_t+PUHA0-wxVZ@H){w;D*FA z(eQBP(vBjztXx3oJlI|K4*FXnP>TGZ;TnOEp&(3Sw)si<;fT78dmeY!!p;uHTFGfa z;9v^*Bkjinh`D_AHM8^Z8$eFKO!_!7%x;ZAhgQ8@nlem95);Ag@4N`Z3~w^Q!=2yg zx$o9?`sgdiW24R*Gwe}Z$S=OIre<Tt17m|&W5QRUcbDrLW<cVygF)!ZA|r?9^9<`c zocwEyNZ=~_d8_ZTlZvF>52aC8&f`u83sl`^LE){+M<(MHPTqqjUbwVVgNOp<nyHfg z8$Qg%AyK1wRp(;`ELb63n@0(PzvK@OB*;rS5T@)OQM7H;W$z9jT{Mv37-1Shmrsfs zL>MN`u|<zmtFlpdPKjrA4#Kr(Gvc?1twoOqXsA8%mnCA%vdXUt%iu4p3URd^1bgcY zN{-E7IbIwUp>gYvv!l8IG5>=Vb%Wb7_t)S3HusPKoBDt5wuZyJKX6qHXn&&@Ggvw5 zj-$h+z1y>^HxT7%nHmNDWB!<3eqtE5<#cu!AePbR+#7g2HNvx+Li>1~t~X9z$dE2P z??UyWUyVkc9~uwe8Y?O}GKex${WBX6FsBlSIBwJIO04|fB;|vASOd^B0ZnGmEJy2o zFu`-*wllW_47BWbp4{b|h&M6T%NyxSA2@Tms4y_dQ8c)e^=uv=R?nfvgBDP_i!t=m zB8W{GVn*^iwoIX|2u5Zg^1y;_Z)&JkCdYQ~_q&)EYJc5U{WSj@f}!EIbkU~VPfUXW zFwC>ZdCsAxRGb-k3m*Ik*ZMF$za(V`03Qr70fx+c;si?EK)5R(IFJc8rk4|eoHi?D zz>%RjZgeGMu3Xd_6BN)FKb$oldaJkNww)4RVE5lOdw<WlIl!-0$4RDuVV#snX}#3? zzNDI~B(L*`s+a=zhcw=Goffv-l>O%wLu=BcCb<AQXHHWUND>d!vr^H|fJ_mGwoZFa zLtM!+I47Gsj04X>n)725V_Caz<M)DHO?4%b17IJU28&{|kGuG#_!}ai3l0#n0S8p- zu&6E6*i7Ktxw-p-Dj)b9(MvIX@fJtxJ>dVs_oW(*#*u@%QVsq)Qd3$rgF44v0&{)p zDg{az;@6(50PiW1QluF^>*~k~UDGpVtlWt78Cpgwb}^G2sn{}!zYRq0fe^3k{+}`% z^?Alc+dDf6kRto*y~ZQMjhZc&*IGg2rN6J#@j+!h7WGwn#Y65pBV=Dpr&uz0m_=Ql znQP?`BCi15Lf*Ruv1`~E+PWE~8GaC5+f?&ykIgqk4q!A7kJbOS@<i1R|21Dm>*2}F zUmNW#zat@EjKP<fSf2mO(HLuxT>dZCII{Q!j{Ikh0OHw8#6NDgf3(pwD(mDX<620? zfnOyBB!v9FFGe0Cto{(8xrUHf#r+Z+N!M0A<%l6ZjcY3`tBc57GUiWJBVgHd5;)`Z zXgHSnZ^acptS=JOzARwIEiW#m<H_N%mjiZDDykV;aD<STH>2nCO~Wm`HNn<zpHJ0B z0oaVYX?5Uf;6FTXf{h@#8t0m4DC<~%huCb;g6{&0huo65#+w%Ri}^H$pD_wi<+th0 z$O2@joKgR(QEsgW;r$=wWZ<%`12B!YA-&)FWwCYh6J+p!WQ?GdnDz_8rCmlzLx8Ji z@_v(!Y8n4~mC*P_%U6p_79(|2<SLDW9}xs<0(>knzo@7GJRVRk=>xU}Vn8iYCI>&r z=g<{Qs9m3#5?8<P{;hFzPYzfpTI^zYszuM1ExRZ&IgS+cEB60@M(9%b+eEe9@y{Ws zM^Y7Ew3e?CrkN`<1H7<v7{(OGb$4pBY(JGIWgtKS&@l!JB;1Y4V)dqgYKge4dVkmv zCT14CXo&Z#>uVZ1zDkh5Ugjz^O42FcP~*Ic8B+or2LuKYd0|8dpRCq=?Z^H_++d1$ zdwK>f6t4&%)7SK!&-=7M`BS<0G`SkXnK15FLq=%drl|<q3)l7^OW?oJDBm~;F9<`c z4sZv|xQ2)R#iRjNX<D`?-}4;tB-*T=Gx*M8W!jCiT&eFia@zxPoG(e(16a|CF4Eb# z|KpS!CqkC{!`0dQYK3h*&#<j-Ao#Ki#X$VCxq@JvZ=v<5BgRg>eHio6!|X&Q?(4Wk zSEkMh4w;0|?^WtT5!lS@AK#-9P)1#T;rF@HVhezFypzQ%?>5B|6&$u-Ij&_s+&BsB zRU1nF=YNle@PO!PW9qu@xG{_`a*4M*AiIfnATk}cPH5YMKP?#8;jUCbAA9^V`$w7Z z7evFx4pXLCf^)z$9>l{JK(X>#AB=1%)%EtV!G4J8dBey2+W4V=ia<mEDH6?+%?o<w zD<Gilpe}Sj4>*t8RrRhC75zij9&Nzt6mmfzoy%cSI%NrIUfFX8#^m0P@)r%P+FIcE zF}Q6zy5pJOuf=iK^C>^GG449zN;$inty)Bvb(TVqY2wUqJ+fDY1`eSAUDrB{gYiIe z+bj;f8N_-F(Nz3NyDuZnv_Df+Qengg@`DADq_9400V7B4v@!$eiJZpOFU)zeQK&(T zU47g4>ChIew#n)&T&PV5S1tKeO+zP(wu@zAL&0Ri@#mYD&+k{_{-nKlHn<O^V5=m1 z?i9h@00y)2XbGSzVswE=y{g8g&PbeS<yYg@H(~b%^Exp(OA44sIq@pmoaB4!yXn=E zV3IDK1?d~!Lj5&TNZIcs%$OS@0_2ofg)Z6bRn%^To6LIh@LspA6KYp)VIPhE#s<S7 zo^kvSZtWsb2!<E(8vTi=1M%dVMNg7pzIMB91`A7;&bti<>p0DVZ5>0VIZi(t2+9uK zEn}NK6hrVGQ7oV4?Q>)2QFTbuwW>ideh?ywFHW2pD#94C7ylfYk%&ES_xa5aItFXK zC3RHwifT>0jTS8O3niH*vp>P*mWB}FG-o2Jtp(W&mBo@5+LB3RgROoDb(^cggF{JW z&Il?8TT)&!X(&wzf*2{7#ULsXj+>P}A9Sw0GU8%0?-`IdAfD~7Jk=c%kaC(^gJma} z!F9j*P$Cerk$9d6YCjN6SWx1^sSDFYVo1%-v!pKOdJCzSiH+FEWfPCu?6p(+m2Ye{ zt_Pk?-r@KPpCpg-W~B1N>QWkTck}bn&CUX>Ge6beBB7wic|Tei%x|QYMOFgNtVhpB zLs5}gv&@TcAeFOy?=m1fkFQf+7`!z9g4Wv;GXG1LlMCHSSFV$fr=2?c16%)ap?Wq> z-LE-JZtt@E6-Id^ps=Jn@%x-JaEfE)?~IEAbtT(&*eK(MYYb2LHLBp7Wmy9)(?meP zW^*@X=r@9`Xjx&EZ~oTnh1ZQIrZmGa2AiE9J`5EdIEzLuf1tfOsMW3EHSRxWhFub% zt_WR{J8G`jb)Nr6Z$S(7AT>iI^mg9;9<$#~GJiPED@V5_h9o)Fw{IX3j!`fF@V&Pr zOcyO-ea@XzuN|8%mDOVM1ed*p++}oJ$}6SA-@1+ZV7(kPcFIzC=hDTnz|_1j;zFGB zmG3_SmwPs_+TGCNqivRr$gP2mSW5K7d_(xaqywQWO5-@aIUa_wQT8Vns8VL@vL+b# z6l%8EY{5^bXTW(57>FLAVYYe}>Hfs(w@H&x2PV21E=s)O9;kOQa#uu}J7g9F$B_sF zs8qMttOSBLCfJs2R`C9BMGD+jCht()>$W8$H9Xk%Ao9!HK?&=dp;Bovone3gI{qh? z38gu>02lT^sy`vDOntQqV#M)<2$y}O*|TjGllS`6;gx<f<V=MYNR=67KgFUQGz=z{ zS&efHAWHYZ`n7*SNHy$+IiD6kl8jC-NssRn>CW4GcAn0QX*(SBYehq+>;HmxPSjD* zZmz<h)(hp`CnSn>L;8amVJzQLv};4Gbn?W^yi~r2#B6n5v~BX<)A8n=)D1oDQvfD# zCjD!S8T+{&>-G1=0qi3r<bY1etK!<CuHz7-UZ)spvM&&P<lPR6-qiM=(>tGNo<}x^ z{W^|J)nq?UEPibCoO9jprgN7*SD2CreW*m_uTgokBgtI4&J@fLoR|XcYeHG>YWj#D zT${5-{RJhlTtt8k{pUwR!J9wVIn6b?koYqsCM%gaT*x^|Y)cIJgAF=r4Nxrfbh3w% zTn|@+KUen)fI36DngVCWlfqc=xW4kt6=R+{_@;E17GrGs{yN)COWU?L*{XW6MqKQw zTGgDOJEUta+F;7FH%aRyC-P<=F@G=wVu>6j6t0%+RwjpQ_bEdL#!yo3sfH}gszFdo zepD#?vgowtHfC7ONj~eV+csL3aLm5o^OS+jc@ZXuBXsrm^GQH{SareaY|!7ZB;1*^ ztH;63In&qi4=&peLw(I$2hv-KBIg<6>Zr+A<HkgM_I9(|O3y(YmTExy71b$fO{}86 z5le_Kms?O|c)<OFAi^=_4w2spZ`8sI7FZ4XpB<UX?+l7no;K&ak42#C&S3pNEr7bR zyw-5#WUZU*(m6!;j173W@dZQrcY=G?X$ow)Mv|+oL4nRenUSgy?}<T21m)Bxhc*Bs z>t)~|f^U7JJMKc{6g_;3<kW9Y`2!x=j!x_qkjW%*J9oqWyND5)(cdwAksucALE|2R zjVX{*TtAhHXir8zKo3vhigr-*_;DQEiqHKbet~IhZLD%EvNZV#M6Za3F*!n^D_KTF zWlOk2ls7+w2RI&~Wk}hZ(R`!_*k3{VpOyQg+sh7>5`+ZQm;p9b0=hNxPE-uAV?7-* zF7k}Ml*0n=spZEBY68BCC1Y=0=}bxBThq;O>M9VF#P86#U$%!&C+{Xk<VkMs@-n<c z^6OwY{xRa6ifq=}@ze$2$J823T=cwenSGBa{A);tA-;Ps#4|mh$Zs{hd7<+2B^>{W z8E(+{^7jj_Mp_7j?WQB-M1(ZNc%YT;H1&ahokxvDGdjOP!B>@?ETtSB_ub&lNO8PS z+Xt`cR3v-(D;i39Fl1mbD596{NjCQ6J%|Lj0@B}2(a*XPxrruLD171wxg8Z}a@4Wh zlY&U)iYaVvLz}VYTVl_W30)*+NZJjQRjZJ?wK~!rH&^SI1T94v`9`Az0OuuJ52>aL zHk5ERP=>%9-(Qs*8PtRRV>XI>yX&Cw`8x44cOxb8x=V;<HOr6b5_sD*zSDE;Cadhx zXXJxo)QPh5+u=R%f#AUJx{B^#)IBouaP?f|?cqH-ajsN<BAjBmfI&8l8gqtQpy_J) zjVh31m=LK3<j!I`uOGrGsh&S1V35P1JhpUdTvAC8cS~!MDmF5Mgk#a^&%p*f`o9~I zAFO~xElCF|O(<zFK9dx%%6EnJga)-)#r%qF8@x<sUAR%JMzHjw^FSf?`1^io5V*(L zt@D{$Z8XFrd?d|KPD(j#G@vTB4`dhlBa6G&(1C|#>YhMZtf|nngUV_x;SW>h|FpQf zoH<cIM3~ld5Sq5okk9@zMkafNA&`$!oa-wv(&W6DXM(TTXe)-zP*ydinaRxN>XxD# zl02l%C(4=gdgC(Vz{sO*ukHm&S*5R7BJ*%xvqxO4y5+}Nu3J}pO_<yS2Jc<~VOAil z!v69ouC7wV68F{^QU^}mv6gfKq1MG5F-n^A)ylT|GRnkY+_sc-hUihc<KLeK{$H<1 z41R$oQ*1589oMymz^#u_g;;at@BJakRr)@YiqXA^_UG`TLGHohfKipSW)p@4g9HOS z8*z@2AB>r5mM^NqTIS+=B{6rO-U9ng5a*b?CH&6;)9<O5@TB1JCA`SQc9cG-am$xQ zNyp#7WtJlMU|V`KwH~B+q*U)`RK1!8;Oh>%qm&n<4^y6jfj>~%?uyKb75lMV$8H-= zQe3!YD1LmvxQC&9XJ9y}On9$rBnnA`ZS*iC9vEvj9r5TMANF?v4iBqe``&D>+nl@5 zl6P_i=d&;^zE<Ur!gL|k>x{wzUSCh}Ms+a#dC`1*WkBU;i-pR#-PsRaE7FqgWoD;I z*Cb`$URPRfT<A)bePJkk;sWDG7?kJFn!<jZVFMGa|G*G6SN!i_f6Y>p%DILerkPE% zIg>Ga$*-sR>U$_Vq({&_AU5o-kQFaKjC^cp_C~Be*jvbm;o7KDa$KE+>$P`Mr$xOc zfK?5invA{>E$n{JT<bKSDLMY$W5!&fn3D*o?ZkOVs8U-|G4$iyI6B^Z;NOocH~>Tt zd!IOCXqM1;%$W2Aizsg}(VhJ`t$oeqDRQ_6#Vq&`J|ZW7ukL+9@%I<i#w9NFS(^fA zTSv%nWwF}#z9Bae9lEI*ZkDFJ0LIfcQ5FX~T$Z#~RhF=w81Y5|u<{YyCT&2aDsk<+ zl)yZsFW^jgg%xO|0@qP+Eh{<>?ugLbph;KrqGjzvyaL0kT~~c{I|T(e6%t|TqwhPG zp7)D~PGGqcQBWeaf$AyjZ(D0}!M+BOA89FG5l0b*ZN~=v#RU5ym*!zZl*5;2O#TMT z+~J^@>mC!yo3yx;`OUBlzEyq_S*lMFl}lAq#PPu8S290%g#55|QR<%{(5G3?$Y~E= za1s><;!r?a7?;INp7b?7nfhEsXfjzN|0xGH)=i_X7xI3<A{bnf*O&lS)z(}du>5P@ z$A;g{styPns~XRs>IyF}`p<ehuvFslcT5|YF~D;GT-;8|*K?V4IZO&O+0}vf)$GDW zAeeIntrP?q#eRmnVy+@_P8gOiyx~VKMM+`FCMq)dlWs;Lp<kZ@mLd}W6V_vylOz+W ziR5my@H*Ag^$?+;{Yu8Zm1U_o66F_0YX+qwl9LJwaIDy~G(psHU}!)W*G6!L_<n!? z?x-{LfyTzFzFq^)rEygH7}Zl%Eo8~?KE&U-|GTE)z>tS3XXo-^4p`Ll1-AC{aDeb@ zNrXCXnGb~_^Vo(KbCc%8phTQd<W-O1Pjo{nn?HHv+A`SkoVs=Mie>`~Ci4~cam^i} zlkN#)uTd8+%%kBl$iqA3r&~w;<dTLFi2KrqGP~c(;x6=ghVoz+dM|}0-TwwtHhKZ? z>M1w6ovUn<wrrJed?B1pCEx5O!x+*lgHI-c*L+aiZQikZ32U5stA*Be-O{wGjgMkx z{EI;5A0)hLNh2^a-au5`Z^W15_=y<$)k){ykCC7suC4XE_p`29E(VberJvIWQ{FpA z2w$VmA*O#sfMC`T5JNA^cV>UWyWPh{lN0o-W3I??;A>8;e-`PSUsL}ml_)FalvEnz zvH9(!oHZqC>(bo|OTAy|qpTY1=c!4(gj?PD{z_NA=ddf?89cTG?B=x8M%_@87IT@A z|9Eh^!TV5%EP>sH)T?~cqM&b?4ZFEzMXAfj;_jEd=B!Ra-+C^*{2{31@zCvC-Ot|a z<|Fa0DZakSkJxZ7I7CP14t%qM8A<X$;p$_KAu$)u&bDbV+F~~B!L8_&qVBG~x>ieJ zK41Qm<)^-O=i?ph;Bw8{Gt6%g<f&IH7z%-TTm7!xrie^({G$i7XzN6OLMbz`1DeI; znfDXwD;d^97!YW)RB+{v<ti3qjEVjOn*2Zt-~DP*oPC|fi_iO4huGh9jXZ(`_#K?I zQ4y+>0cUV)KTDitW!k~zwz6JqKfWI<(lSjb`jMd*@ft~);5zd_xukht!#+g|aul@} z>Wd7?td3uXp51j@;7V1RBqsi3UVgeZb^@KurhL>*G?HE*Smf0e4q*_YS->oOI;CxV zd7M*q!*9}VuLab(Qk(#nXZRQHb50IU5Y5fuvNY%Xsoih@NV1FXP-ENf`8_z4PrUU0 zuv}di-ZLcw#gERY3r09~$k8#@?zoFr?ut6}C@lZc&egD8<fH7%D_99G^RKkRl+(2> z6(#%-^e(ATEaA<ka3OMeQxWU^(p)wX`cnuua;WuOmFN|paTrBfHajysKJxZSd?C{s zm%!7*!Okb7vV$jYxdFMR=)iP35)4|hksHum{R#1YAv1s-;s2CehSV0lUF1-zp~3S? zjMhSrwR5}OEOVNXCM&U_ZJpmqZR)_@WuP@1YBvSYD6?i&>*~wse3_Z{+QQPGNM|om zt<tc%@i-Yf`ewfO01!I+JGyTUh<L*RuIj+f&tMd*Bfw-C*JcOgE*inh5~IVkHE$eV zvXlFU@$v>`L~z<DF>?D;aw4CVER9TmsPZixaLroNRTi~Ee=%Kuec_QFw#|T>{ixU= zB9@*Uj?G-?vqbG=LC(^}I`Z|Qsxu*MS1LrM&bsROk+?o|j~m32p!tdBV#NlO=de&U zZZjHL%!~!JJ!bSb**g&4(=P&29Spyu-M*5XLyyc>3ewJJ`;;N1J!*ZN1?3V<Z+3;K z8mHhw>|X17&$LfUALH=J1aA}QP2{<r{@a>Jg)pJ4m>F20+Rv~Rab4z1%$ge)mc6lP zyYD&4wLE^){pA#k&q%dXW=&h|g{|APtzM?B*F{E2_Z@1(XEDkH4OQM6^pR{aH-!?s zJ}w>q#dOai=>368nVgB}bBN~<Sj9vE#mwvudIt}d@VF-f&LvmGDDG|5Cs9`ci9|`Q z)sk9nd=!mkqC+@NRM2w00og>$5g+Cw`#Rmb_2MXnY;zI6lC|`JzNo7*GMR6}e4m#j z$L~IH_1+@a3^Yj()=7+idTMnEBXIq@s1ij!L;^fM*Zl6Yx;H0D3tP@AW17WgPD;(h zSNNb=rzv9i<wE}Rp;}A0W8`GPY9!`-kZJ`UT%jmmeWAn5ivDMh_i?TkD#i%)?R8(9 zQ;6?gof0!ti1k7jpOKq)h~{uqYNCFwZmOSe!uf|CfL|I|E0uz`c{sN6YIL$}4@v)Z z!Bx;j&Dp8~%9p(|<BIUU)oG)qLvr<{<AXkD(!Qsdl*CEWX}Izj$Zi>!FgWh_Pd z`%>sGPpdsmA2+8euU-l@>5}}DTbblirN1M+FBR01t+h&V5ZB?xMLz5GK_xtEV+g{) z4i+$$&<=l#avL$G106X@lh0^7h>Jva!(5|7%$<%5ae(1gu4K77V;T4^9=RCGvwGu< z{cQlwjcjsgrIAVcRgX(cK<J9qc<2`o@(U)^ZT8QM&x_2y_wTp2C0+Ybc+mO}AVxC^ z{z`eE8`7^1dt}$Xrk>48OBg3U`vv=Qqvgtywei8iHAP`ejIW5UUw6MUf_G!0cg9TR z-SHfNemDwH3<g_m@Z*?l5V<M!rT+a{+2BPL^$AR;)4Pq|^oTgW*?L`BDx4JO_OSWL z4BEaH{PC~QB9u*2AzSw@vPy$1S-@*#q|tC)(zW7wY`l)@$Xqg6`-O~O*9-crCFz`Q z!1DA3;2#Z=cyIUR0|-~M$4m%<i{Uh62Q`x{CtD|<0@SCR3Iw1I<p$o3?y)4z#F0w- z1C4Qwios{YOQGs!dY8tkXg(63p|aqXQT;+iSrkpv>uXRQkK4TSc{I^DYw*Opl2dGa zhRg2X1kM9EwAW;f0|6%jGnHY6?}9d4==nxV4a!QQD6T<Mi;enX@-zC8hb;3PXbFx2 zTZU|v0XxL36s8<Ck|u-a8BPbkLu)-cPC{&a5}0|`PsdBU-)q_wAkv)2LMM}6wK$*i zIai@`!@>QYg1JA^>LT+QUFychUdH=A#uQD7_?TuQLp^w<qMwB4JIq3&g4i{$IofJA z$-NDy)IN3b69GvROa*h^w0hGy2ZfNasNn)vxyG)wLr`h`Tk@QsXP6&e%K&9`j4|nd zTNSp8dM-b%EY9Q;ttTJeX}XLMQASo1CYEF|(FV5;|M^The!HLcumHDO?QhPagc84s zB#;7ZGc4IvrILU`&@&e2@$vFM(?4327NJI&Y`Of(HHoe<6j>x+w5AnVC|{pq-n_u^ zzujOe)r;ipY`4_1gGxV_WZWYC-KhXus~_o39+{Uvn<X(3uWsonh1}03T~|6{0To6= zt1Q=H5w(^Fhrh($1y=8(Cn-l{s`<Bn)btTF@=QxM@%#_T_7H?T;s$WPi+EF9AAq0Z zDz?P@vsu>ky~MOdD9mI3l;kb^to6LpMh6F{gw*5@M_iiTAJnMO`V;>s{M!U*g*Yw% zRglEKP5fu?wj+D0FX2<pPm#fB88<5>ZfX&J17I%#oBwmqS%^@CuOdl~@=W8)pVf%9 z<M4eqfLJX2g904>iDP2|cI2??O~}5P_MGwjN(+e5RcWtfFW+NIi6Jyj5{)ta(~LnG zx|aQ8JU%7a@H)3LMYY^xVrVMvT%t3g2uqH@jm2>R9VoQ!Z<QQ4=>9J8N(lK_O}c<n zA+GZ_d2V>J2i&7v6dAdqDaO|O?J>I&pOl`yUf*=Bm(Gdn*(otmjl*#5cw*9}f?GF_ zx`I{ZetewFdyE8F6Iq@MpIcc9-<4f>plUBQocM<&AV<QkxDBy+cz?W%0c)fGXz1kb zob`4K+=vIM>g~uZV%Nn~I_ivgA%h8P2fs@r+z;Cf#A)vH>(R=W{yL;WEeZV;3(QLW zdRz^!o@i8LQE9EzV9GnpBXN>G7EmQS_oVub=nuqz4(F9|EZdGpg!fpZZZ85`(|^)* zkN+D%&q%?#vF&Q#Y<g=${ZW#L%WTmoF#VuPNw3;2sUlC*CwtzqEm=`F87M80WYP<K zmGputb3)+fEk~)xE@zPJr3WF_I}sPq7Rvhe|6h;!fJld-d#ZtO){fth@@6M$WDRIq z{-V97s;y7_V=~`b;^OmwC>aW7^r{qDOzrk?W+rzet!|4ml^0e71LPV8uHK)_VgWTv zlrU-9a1%xRY`m5*KcRebvyBel5qFF&mn>?DL9{pBMUH~M2lxq?{^JBZkoA%hY&~@} z5C0IZW8)$bP9&^*7keG}bFEf~eZ*}r>}LyO<SeKKyKJ^}lH7)q*PNVsPNXuDDP$27 zR|JETgB|KvgDM5)6UTi8a>AkefMk uXSHe9w(MPA3?O${7}^9uq3*%3yAne6Y=0 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�^F=*p){Rf%?h;TrP-xQ*)66ehjf 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≧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�DG!wJOr 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ℑ1ph-vvemOqLU1j>kYU5l#% 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%0Dk@Q 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�lL(Ox_%y8$#+bXh{JWpr=wM}+6l|O^A(aV- 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%0A*u+Ttq2D8#)iqa#uO(v9NU=>8TDR|Lh0zDH(ss^ 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≻Un0_$q4P<Td~p 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⋘HBm<;=8@u%|-jz=0@hFnAb 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%0A7IAQJ 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�Nw;E?g@w?>be2L zKQwqxm`z{ufG0a}s)D2S*sj#?qTd?g1IB5FI!(D*?+sGVTm7qS4e?#ZU`Y&8?P!jd zmq_^dc}tcTL2hpDVa%!QOLy+)lSaRmk#ySmAJT&&5E~X~xx?%QPQiuRe7r{CQEd?m zocTMZ{8A|2+kbG>!bOe;%Be2eUc^qgqvNL!+1%46oHY^HAq%~tAZFwB$4_gDS)WTV z|5y%E$QQjFem}wHIiE=GIG}k7F%CZ*K4`(~T~8_UR|xrox$xrWLxr97#$%qDO+n|1 zMtY{fzMniEhT_opzb=F3>anUyYd_EN&&}vm9x4+EHOdJ$c0BL6hw7Mk`+96%vtxek zxF)-%Yv=S&JE-3Mk2%!tUp$ja1*Zt-oo7vX6wH8-dSvks0@pJ^IYyJ^GVK^CcRu{y z0@6Dc)64HFc~`I+JOo@YhzuL>jM+9KYf+{{8a_3eM{pE2ZG`3RJU`;+cCxFC%zb*) zjMvtK?Ll@&Q4?YwKr#YylN7qQDd`bF9U9Ebp7|c3c7ogoNVtL^N>$2x;Eej_gdpo$ zHGD=0e20UT${#X`GzvAXhB)>y-1o!nRL|2LarMuh+Ctl;aK@hNWH$9q>yyqU^dLhu zYu#(@zaX$QKI699;fHTa6iW_3b^tFLt?qlK?4>wP>Pwn*K_K;CxcVx9qN5Pkv=Yjb zmd1}{Kc%t`Y;)w%?}5aEivFFvNS9vpQ8QyU=}vz2p9GRCLjbCsoeX1H0d9Cj8-G_7 zz!fZub&CxSBXzFrFVjZz&@frpwv6ke+HrLDj<aru!^wd#Tb)X4pT)xFmglKZn|Z(A zvQ=@$?K~p)Gf6%4#y*aBo8o?+9@2;=e)A>`)(E$l%IjWY|1D!z=>PFVLFglg^XL*m z&m)H_ps23iX<l^birj&ebq(1od7=3MnGW@5$pBhXQ_j2ea=G$cJshm^_}KMAZbxI& zUl{t)!QJ}nyigVx`aqVC02j;m*bI;OEBz?`k&1K!v>ZOUDCb{6xF^ZuFu?P>1i7iX zE18jdzzYwBZa0@g-1Gq3_6V>qLmuYZI{H6e0Nh#=HX5Y-(Ex#E3|<3%%d$@T_jcHP zA8i(9_(o7SmD2U%^;Q?1yw__}ZG~9L30=GKX=91ULb9w)81N3lW3-@KH5gP4YX@^o z*k_3Rk^|uc>H%>6(!>xNC4U-fynD=rZrh$YxOWF0@N-ZZ71ZAj54hbL`BHfKP5PMA zZJ}sJvXR6jv0IsUC)99xe!Asbhrs)3N=*GN!7FBtQzmPwYhdipw*f?s2$1owj$K6x zUAEsRq}X=-9aOtpZSR0{vf~f1dBDZ(`mhT0aWVSM*S<JRe(;>8e}{e^JLY){sqlhz znIEsJ`FbJ&ipRUCYOI#HgWA+a@@8I<+b8FqRAX<~y9*K%@|9-i*2ZJR{2On&*8el^ zuaqH-eF91}o96a8h|J)=M=+*a&x|K8F6936X=-c+o12N0=ZWL<Sx*dQRTp(M97vOG zGs$P|LAl}03N{$uEiKp2gbTroA1uiUmE94o;&l(vJ(p6aA2XG!+L<xy2FiR=sp*-p z+W2S=&dfpJ=8P*o+4@>jFAmn#4c+4SgKg)TZUj=9iW=9n?Sqb#GX4pQxClK#!74@a z+5lIA?w$}Vsf?vffolpmiU#vEwzF?bvzj|u(7hiYSeAzqSJ>Nmj^1*XrG9?CIuJ$A zVA3cNnT+j*lCp!X9mB+HIqvZ&21Hh?*3kYhe8sv`Rm6AGX!%EGS221I1df_-G;bpw z3kuIv*0qP>R4lf_Im!bcvsrp$36Wv&8G_*jHfg^@75IsSViss*Cqgy-i&!<4)h|P$ zVC~(-S&3@1%cAP~Zv2Vlu2$!=hUM9%{PDbWFJK@`UO1V|WLMoH48%>P^A*{C4<+mA zRykzk-W$|CDFg+Ar8hFL6o{CIcuTsYViwE#5h1{SapJmVY~SdIi{G}Xp}Xwj;yzmi zV4{wfW#=BS-%HW@h>5THf_RH=>yi}n^Wy(;bq?A8>Tn{4_;R(;MUUv)i_gG4sONmU z*e&!(W*Ok6|HC<p(Ujo2_y=l-24^K@e<w_(*oRp{8$d-*fD~9(&-j^3m8U57KC(@v z@{AkPPe;dk>JBqIO+v>FNX-IHX4~ox?F8o0cS`?yOT^;pv%qaJ-XX_nqtI~I917NM ziKxrozkWwZkYv{YXiqSJY?<LgS62e9o(l4!IPXd;j*}Rc#P!tDCG>rbJ$7mScD%7- zaBaT9Uo5Gi;fH}@KXnu<i%&CKImSF4Q=KRnsc$)4oiz=fZ9y)0=u<$g<B;;i=ms$G z)3knC&7D2<xJH~_NuJ6GL{aAW*ZWzhh#hvqpz=zW6Clgg=6#WdZZ~s6VmE_-Ltz)e zFVE54WZ|`CdS(z}@~W_n_2UCEq@gv=RUb#BnB12(s$oEX=HqQo#7d5_zO2EXOvhtJ zIJoq9n%(6sT1nbM_#QOccVCye$KOJgD3@Wo+wAV-+0Z(5{dC$V>*Xm(ztmj981=>z z<rqwp({|0+mp@m_G{VgKSHm?J=xsih9_wMoq!lLq9v)lU@^1mnU)u`a$H2(#>n_-Z z?Dp#4_&FvAYt;Z)bI;?&sytxCSvuuNiv<PS8-1pj6?Y!uU}7``b;!*)5)_D~AmoNe ze3I0MyMy+U@;KNW(K896a-yLco&_RxaCShNAjHHdnxvE*)HGNs*~~;{K_k45p@?L1 zo%G943q0&yNM}4O*npUGLGkzawX)QD0_<rA18%DMeH#WOLBH{)<{iN8m8IOGt+3$X zeWD-xA|kLtCR;(2UIqjVv)JlxQU@Vy1h~OqZF<0U#8QM9uuqX=J*#K?<U2`R5a)3y zqmM;d2Z;kO`UI?|bwKZ_15!Q(^Eq)T6lL$IT4wI1OUcO*dPcI8@IvW8_w4$(%M5G< z3YR(_%;>~|Nvgw^2NF!-k`TWgBY>|7vf^rAYwwpSrok5D<As@3nX9&VXZWtW-7>J> z>S_$;c1V5+t<(`hchy0K?OM<rv}YbX)$nW;R-EJI)#P+tW74_tVi86uwn^TObezWS zaa5MG!^>){Sa|&9)DCmL!f>|CHnlAX-Dy$C7l4YC3F~xtZqOs`^`=Q#WfL2FU-N<q z?&gjg`@pwdh(<fv#{VfYp^ruXl$WMLW2PfP1=Q%!7vmN*ZIT2~16qM4X^dhsRV-qB z8R8-hjNX}|hDNOb<!Dq2ibfT}?#FHX63M2t-igN{-BE&2*d&{E*RCie&1A^sizDdK z4C_Y%Sfp={?;UcO`X#rgpy18-7o@q)XfGUW7D5DpD{DR68}o2&%#n;WQ)sJL`L78* z7V3CJV|)fr{49F;MY^GGpt$If8+MxYuLI=u<JLx2HDqG|Au2QJRq<}YmsCV=Z!v~1 z_V&~VoY0C;^>C)bI$7p1iN!>N9xW?)!_ua%`nt(4pYD}oVick1BwPmaf0@Z`>YQNH z;;#rTaUJn&^3dYZr+xHH`81^EvXzjPx>4`rGuy&-W#BsfJiaA234dpJ4Az#JsGg=h z5j`P8L&`eNb^m*xxghJ*HvBP2QP?mxuKrOn3g{ZArcwHcS@!|oCxK^X<RNGRaJz#G zz8^g6b{@y%|FSaU=8tyAD?S_d#35FV<*+wib5dfmgP+|4dp(1ue}b1%N8!M6v_Jdn zUDmqOKN_uaD=@z2i>#Z2&3M!<`*(xyJ+<Rv+#>gPn?0A~{&pVs$|j`7{?F*XLh+Zt zmc#!jzaAXC4xeflt6V>R3hxTf^C$!^m>`_NNHE#C-3X|TZ6Z5&5eCtI`VJi7IWt$y zaJUc9qJo!m!nT8z*nVR<V$Pv)Jf;e^3Cb0t%Eac`&U-j+kyYpH;*3*!NZ>;{LO3VN zTv1HGbg#|1%gUo8Z#A}qAR(|V&P0Z8Mz%#^)1PQlG{(P6G$IvjVucmuhRC52Igdt@ zGmkEF$}aE|<G$OsG)0!QLAi2RLVsEiKse-S&?Ls_ntLl9r*;#jZBHh;v&OS8wiIw} zW{J!PMA?+nIuIuw-A5nkP3zYT8`MiP2wj~0xSTBR;rfoUZ``^l8=l9p(T1My9p|Fg zw=+@rNIoXkA&Poe-hE<FH8P6-heZW>&pb|9Wa0i_FzIZQx554t=2V6XYzfZC_kIJ3 z-Fb01pD3~ZPOzU_!ZoPip1i%ma$X0$(;M;YtLcZf)!H8PW5C*k_UYUt2=CB~c$}w$ z?4S!a^!4VZ!FQ3db@d}lO!3pG{0(MGsL|xHH9wTrckX)e`p}EjRJzr_4hstUTwJZj z4_*BBdp(^nn@sFt%lx4mdMN~6!wj46cnW=Z?SS1WKWra4{lA0sczruYRDc*u>`?y2 zsA*I{1oqaiT`wtgk!2871!Wu5{KCklmo%-{yp13hMG56TfOMNS240nlGY{Vffmjii zy@p8w_ycj<jLNOe=z@ga2FRup{sb0715t2#jtwdHn&(S-;@@h%N)4E+4V~KpGIIA~ ze2Ml{rtJ4eaAjzY5FoA3=G@R4R|W>ZImGn2ukbxNeZYhMrz1ePNTh&Eu9wRLiwMK> zps<zb9-z%t^nPx&&tWR;<!!eft6x>?N7>VF7g}%mz|~U2*#vSV8(Yw6KHFfR1zJ(~ z<AahoXaKGzhR&q7i#?Hy!#R#hH4ooIRiK0?8ifx>QZ*|9-8Tpx<-vu2n`Go0DJ5k| zzfZ7M5BICegDa*-Sky@zEm`n@H$b_i(uccn5OvLa@`L@7FZej(Avt@3kn{BEJm52F ztTn4K;MWz^3k45U;Bvt{4s%@e@#t)@Aa3t%sBq82K?|l?%y{)d_I5eS-`XSnKY#up zZ~B|G)+~&j-Y9=B%DR{yRLc1U7WVTHHFdXoo3!wksG^2MA`0juG_l*lF}6Rz5tYeG zCU7?depz3iGmpdIe_6ZiVXkcB^4a~(Ps{m`1P=D|%J?5LMEjo*3B{#eqRgPF0p(^D zX6t&JK|e6*#Yj4TIb(snLDCs4G(=I$17iP#p(lV8s-%Rb)=k5k^d~NCm{(BDP!Y%1 zehF2jvB3+gW_du47QlPx$+@q_g>n!8d5{wrH!|b7_!OHJ;6cY*HJ}&N?6aOhxPJe; zL`9#7Kw>se(*Rtqn2ni&gZPMK)z-`4h!7ZYWIQ95qe0!NImKZ&PD8xp+gH!`O3pj3 zfcb9+`&&rpp+ZQ%%PfI)Sd`R%X?WyV9C29DzG*8gYPE1C$IoHfP0i@SFzu7(e%w*! zmSzqdTtcI@fJA=pqH9Vir2N(NM`AEdiP*USE6Um}`2M^SwSr*+)ohsr0eOTC^p}uu z=stomH0}z^Dokd7UwnDTRTaip(BKFCH;;tmnGvrY;)N;P`{EowIko2;BJvi$cVSPz z`VR#@yG6hA+FU(;Q=e`zZ^E*U$=Cr{2>tER&T+Yq-wi~1SO8m6fV!ir^+PrTgC%3Q zCZGF6W9)?)Dc~yJ#2vG7j#**H8fQDs8MnB%`CV@mJKEc3_ta1wV_#Q~!y93%in#3m zN<PrXyntFgzywkhaOknNe8TxIr(FA9_ZO$bQe2w61zpOoAo0)xh+Jk>$RY6+KATrh zWZLw-v~j|soRSlxphn?<KN1_Cl;jvOJngx~yV7p07~wwPpP$fO`ul5}&QHWdA1IJ4 zg3n(3(%zH<QVQ1xBfscZcsX&QLGThjX-eBUrcFp_L?WHG%7Nv`=PCC48Om$uwEDAW zViEEbv6@M;4Ti21tcdHM;?IPH{&FO{6iRv99+f<$VYhOEk}WJ#3jEc0L30j<8mdeT zoA8JW!7a&E1-Xt%3J`roAW>z5BMEsa77@CFy`&>945ms{PLjsO7vku3DboA2-|rM1 zMyI;fiDzq<2iZ30eKd7@eP-dEMNiSwnu@2aG;C+u10$FXB?*^@f&lD$9*BSotuDf$ z{p{VktCsjEF|8M#pX%^xs+caPIw3GeZy4)40YF`8{PLGL+w-BIhq{qGNwPxi(Pom- zSW-iH#*oTbdz#Y!Agq1ce>dB=W0;HhHQK?kXPSNsbaWm?26!Nw{_34z5Qb-4(M>Pz z?tXi<bUqJr#{|t71L)0uB#df3QFZxwzO(aiR!wL;k%}ZH<a1qSLMC?EJnl)kmTfG$ zSMeVOb*-oTUxzCZRlOhd$^$wDAAH{@_PyoRGu*J@O<_hTd8v|_0;m^Gep`#><Cw+) zI~L;FK@%Ig3_eb!O=GEjdY3Jd?sCDUhxII#0p0GMuSxWM9}3thgbkQjbl26y#bFdr zycl}TzX0>djSSrFMtlcSMY96fxEuJ1(1VQR1Y5Lyp7OpbeDr=m3X`i-lBT>&kUZ3| zIfw7!nHr?$QMoHov-WuCEDQ+}^<8mPBcS#t>@GR7_1X^5oW!`jdg*LXQl|8KkEa$_ zB;0pAv0kFY2=caXvdpDrae!e9WDo2TMJ*=!EgcZze9|1w=Gil@`#$y#+ezO#v{A;u zdaLX#NOz`CX68adl%z2jZ;p!oLQaPDE5}2|ZA3Xt{iAOe-RKX&RKk)F`bS6k>A30F zWHDJ^_obX_B#zJLhMx-v4`62i_J@fp*H$C1Nou0J%RYOdId|qiorS?ACZcAO5yh{d zLy`JjU;p-j@mLmuf@f`F(aBx6YhAe)n?js5X)(^b`dmV;bDLFSgL6z?HM6n&)jSOL zom>e5*b3`6MjxXF3+n4wNQMwL5Z3e1-!k6m`4T3^CvrcU)MH!OCic{2C02Y1G@ftz zIdA?yS<xNV=QTS50H~06p<<Au#rw7*>bLNeyd7EU<WJ>v<tPk&xr2j#2eLNYulh(q z>`&q5kaSHyRQH*ykT*|l{5J@(0^|uMX?`auLMaPL=OB4@IDid_No}21pywhzGd|Vl z;j0%NbCqp3b)d&ZrM1X&+^^S+=5WjcO&YF?%@SW0q+sj<k$Boy7s`YSRFV5RHJSR) z$<4i8Kg$zJUDv+)YsNVhj!YBypLE5eI^>NNA`>*FTvzNR(0R4N1Wfiyrmje7Tm_AF zuWJHhYR8oSB9RG^3lb0CQ{=O>AgFBO#q*9kqFAIj@nzeguEFF*=<y?R4~b;WP6py< zCx?D3i5NpU4`$GGAL6cojt3K`!x^O(7)JGDVMQ9yJSDB4WVI$`vM8)QL9|X>Ssffr zrc;}8m=9#Rn?ca-`ReGZKq2w%Q`-9gYl!>F*A*`d4;8g1u-{$3gPt6}eVk(|pS<+t zVK6Z&QIN+}C%v?fj@-k_O2txHr=iB8eaA5Fac!Ns5}ig{&Gw6dIXx=yWikx4!WS@k zbG@<=faYh6x-hBv%&b$%pr&)R<v)T7Tqf~eWOW#=07Mwgjx`aAy_~O44v>>{JoW2@ zu0D<yhlxM;^Y{0yfx|y|=l?gpUjC~McgpOh9GD!CG2UApvz(+@u4RypmX4NrC#mY= zLZm9v@sn&;7I=vhJbsSFLn8lan|ewhdf8#0`BVDEG|ErB2y1%WU(E%{vWcOFX50Xc zL2h0-c}|h3LHGB_YT(UPgI8I0^Y9`Ft=`KDe6Av@EllRbY0Xm9)wDxn$E5O$lxC8L zC@h6dCiXUO1AJPF%ZDqx2~<3l4xX-$`F)f&DuW&<O>I5_9WWAP%CaDd*2h)`WpSOJ zp9cHWp-G(mD1_MBUtNhTGHkQxDHuO(BIn#$4B})~BA3c22sb?Cu*Dz!R%HAW$;H=( zwb@p)1u1YuRzyasAo#GwvoR<ziTAzD*>B`hluEvN**zhy0VBT?sjHc!zZp9`h<tv2 zj;g2}+Uzn8hTInDExa#2R+2Qa9z;l&sKb4LoY!4l76%#UW6HtSm4t!4JUpJx2Yhf| z@rnMBc-?{vG9MEh!}=IrJ-REwYR{M+QtUbB15w&uv@z%5kAFH&bmC6GbT8lXSo#bl zjan|U%XK!qURHgS&1sD`0_t1qw2t>3YqL5f^v4nqf9Z4{$U$#&qP;)@R}P(hhN<jj zJ!~EDdABD2x?$qrDfaqj9Mk{lf-tP{v_o^sjqg7r6>@FY5K9BN^#N<oX9Z@i_P(U* zyyu@_hM?u=d}y?xy+S3iK(86OetBY&nhi<Si$1`36`L1=&trj4eq<40t*!#>$85ge z8CfXNJ~LNqsPXhY76{XAF! GA9!Cs?*eU()!kmqd_!$hrE+rn2gu<=0q!Ax$H&h zv~-)1!k(5hC5dLkWZBnJ0%VfI2jbHSL3C`C6Z0W};vyep1*7$p6oDSeFm}#Ali(z3 zhs;x`1=?SlUqoZiv~|P9uM2c7)dXtF=`<H5OjTcCR?Em$%13T{d6fCNV)A}oTBp+D z$`M4SRH3sEH=VH#6)NCsz}6q@v_uXA>^nZ%<}Pg0vLab0=ejc9>q9@>FG)<$x;`K= zRzR9=nSQ~jTSu_2I2U)~ME9`Iv!B~kdFlK}zC5i(S`z~pDG<rZPa^h~0c`b26<M?W zL#}W-Dv8y<>(6>W$B8}ko^9c(-66NG))&7U%KhMc8P^PlAlBcJb93n8pZ&spvv4*~ zMP?3Cd-7yujdAa%U0ePm=qLR8Wgw$~!B;G5<i>yTK61)5I!YEmu<%C@G3=rwhmg1q z1dRoVaSp~p4(BV-nT2v7=kM7O_Odu)BJ>NbIM?P18bfnl8vVRHZtizO+1q+011iy$ zgmiNM)0tZl0IvH-NCZf~S}aUJe@<#!&J^kgv8hFQF#T3p3gU*XrT*DPZ9gfGdxJ#k z(p6eDNq}Pr6P%fVkq?p8AEgmNhBSt&`M|(LFDIgV=R5f%>r^Ka$pyop<2qXo+vNm4 zif?^vcw{WhJ_?&0pGGj{q_pv+qZ;kp4l!R9KRw4S@Oc}P{Ol>-o1|ftA~G=Uh=d!a z){kN{7gRdJqtZH<)5l;Zg3C;&R5~&{%d6HqTKRMqW4UEi4iCUjPs-Eloh)N5J3P!F zJ;7ksKf4ev%?S2_VdgcM<N+|E;kUj6^z&j@B@&!H8kY!6vQo%)WWmH(2ki{)Qbt)2 zL|hPi1r~Br*@lb!oK3!?ic}&7CX8z0zu-+*1wX+-)8pZL>6CrWRLld5kl?vMh<~vQ zXf`I$2UG5%Ha|*Y_Cytb*T}j;-J>x?&;x|0WTl<BqqnspfR-x6U3@*X5TA`&{d!Ip zDu0EX|E?hE=f%*rTo#=1ejy!fEKs{XCfs~g;D}RHLRkbA4`TrS*3>DQHeHc1rrM1R z5cfQN!>qqHCwetrn2VJKR~#Be1tx*7kD2MaZ3oEi1=pfrh1^Z89#_ud-PjGM?g5#I z&~%|Pk#+TZHy1Z(>G0Jk>Ntj)-&MpquE}%WI%>{q!TPs(<HKFpx^I&`|Au#P)4vRc ze|TW?ild3c=Pd=iDCR~rrj^5%Bo}F|prMq$5EQk2&_WE7p-gF8E_;w)P!iT9CG!g_ z4J6!|sep4zl{k=okBq=ISy|^9b_BUvwtWO%v6|(5q7IE2E3*NXB7`1$@Ky*={4D*} z|0nRX_?6H+YZ+qerxL$m3RO_kI1DVVz__gARth$K=H;C3P5MUtF4*HM4mq7kVVA`q zZgwJ@p78D1H{bkX387V~Z7Y-DPR3t>Io4GBAwd3^eEGeiT1&jxx77(FKTie!!jB-a zwbha;1<-sJwmVPS%4F~T)`rzfnd?d`7Wh3HE4hFS+PJU=7JQePs#j%El^yV17M=$e zm+u8u#2x+QLt`l3UwY3yT8mKQM0OsjPkT8IVjh}uNXMD<LB-n>y}Ntwc~0CS#rCml z+ATOIkqv6+>+WXXq%-eH=tF<M!)1c}+nPa+r_C%cw}puukMrNR<*K*hBGp};BYggT zq-{Fc58Qk$uj^kdS*E1$?Gvln$Q*^Y4%i<MOg+cT_`_A9Vpn4P5*Hh@fd0RCk=Q0a z>)LXDj&6|bE7bl9h!LyGnG&>z2@@4auaCDg9dHHOI@WFN{qSKfbl2F!(L)K5<YiFj z)#5H|^;ze^2|AxyIcU-8hVJrzKOcvG*}eR0<WFNR<yKk{I^T7W{IYi>PmVet%pC>4 zZsQnZEYAfop!m)4GY9c4%Sn-3NPStuQnz7=vdCplc<a`67hw-fXR+xSPb*1N%S1tP zZpoLm?Gf&yXZI|Rdw?a{CqPJ)Kyt}|_NMeC@|#N9WlRKwzZ-EW{!yWR&n!}XZDNyV zD4^DnYvzRKqf+`)*iYfo;vL?h(AAy-0-zNkmVJR>e;HWyBZRf{q+5_sD~>LItx#m3 zjGgS<-z0TbYyW4E9!5Ce2l$SUu0roe_w>}*L><gBD7cb_7YioC8qSrq3SpLxU_HGo ziB!+3ipYot1X|XdKlq$^6h$`_^)-UdO+lz1^OvAn3#Q;|fcxvb9so+Qwt{wHlfTQ; zpJL4(^mDX%Ayrn^D6ISIQ2f&5y6uSz&Y!oQKusQ~Xm9IFql*H0=<7qv3Hx7jv!{Wk zEz2)4{F!HOG2Gqm%J~HCnFV!Bq-Y!-;In9TgZQz2<Q&VR`?EMj<lI?U0N-z^$MYIv z{s}#RCplmjw#pgXvv4G?4~W4_x7wk`!&ZakaJ$mJzF2?QQ(va@HX7x+5AY4W>j<IX z5)uku3x3!d2#XWB={+k^^Zk6c$=)HdJiCj!>&@--b{GF$V?+N~uZ<D_d?Xezf^NI2 zeoXtE+MRlyMF*ry3L-p_{v?7RkJO5@e!<x2W2bJh^w^r|yD;5ZC6q8vQwOjt@`Q}3 zpiYPIFubGoT>lK^8fvw|l52qriRHj}_&6#%;W^@xXDXH0LJ>Q1no20V-0w;JGV1A( zkM<69uF=6j?YT29MZ=H+fZWyk(P9>Ywbqy5GS<)}!>1+-m6N~?e2X9)GBw$G9_)>+ ztxfGyHHyB=)0x;bq>3Sc(3B<xfx?{}4=SDBW?clD0i|9<j9Y1Gz`O7yr1n%d?m!jc z^>>EX#kv`yWvbH;=pP-vbjEAFaBBTT`9z>P0#Vc1#tqYv>IZ$0#tx$Y8TfUJ^J5#u zV6S05dR&b>R~QU-7avP_voa;?7fHn!f<)nfzoccK=UGn9>b|NyFBtlc(fF_A+g0yq zxoL%{mP%uP=6N!UK9^~Di=U4+kZOB#TW620{&zVio%OCmw}c3Fr?w<#7zg-F7-^zs zZm-9G?ZfmSn=G+O7oR0S&*vNgFC&+LMQda$<Nk9VeU86U4HmZ{Fk49S!X`U^eLG_b zL&Y|iP=t?Wz?tO}yUZ-W5qTC5X5YVH7B~mQvwMmD0AF8%n`}auiv8J8TOr(?M0cEO z>#F*i3LQij$a>ew+1c-~u+Dq_m;STvC@_iGV^|K!%H4&IPlx1A`{TbM-w4*K<X@G! z>2T}D5;2m_)}>7H?R}cClLBUsBU#-@{3ukZY5{vw!RTy1FB;U#+E<+h2atzU_R*_W zO$ZTlP-7va;<^_$hhtb(2FpXF3%8M-e%IyqF|fm}OIk>(@DHN4NYI@*5Hah*4$U`l zP>`n<oF&pZPStAZF8biW>yVnsqB*7saB0(1nYDft5QwaXH%dQyg!|;rtQSUW!;fex z{)~mLrVxAeZVPo&>kigl(P&BcTC*J27lFwQxMzc%q)(uDmD&=gzmpL^k-XkgXhY)i zi=gC?PgS={PrYAOB<wqY%NL?CKIG-^Ph}xRoF?nhwF6bEZPr=re&-BJT_^E-hyUMR zfTTiF8%at(I&9hEnokyZPCT+4*>H5~yp*uL#ev-W^Hi7!$Z97(3)|5@FG*#oU)n4u zlSY_w#~l+Af)hDEeefI>G@0Dh<88M)m4vnR8us7pr|yXf17F;D?7;gODYe3iHk43u z(mQwyi;%n37g(qjAJ-n|gaC+%Q30TN&7K?qagBwzY{~dNz#6QoG5Y6$skT!R6TvfG zd6HWYn=zUn(Tg9M#OW)$?GrU73uN~T<ePR(m_7r=*cSxr`zuZp@x{rcX94h9P3PyT zAC5`YN#h7BOH1UsNcVSfK0Y1?_w;Y&UD8*KoR{`-w957uFLCgiXkDf1zt!TiXPbZO z`DDUul+y#OOmzF0l}RZ;*>0P-`<7&T^yHRczx_BRQ3a<0(F_?N?oz@SNm3QT4Oc>j zq5>YX#D-av5o*HtyGw>L3%!Dq_$oq0kf@Ob4OzKf6j#ko6EIC&Goc~|Lt~1b778*f z;Gv`MQigh9&%lR%yep{Gm%AvAK)Q6s;1fE(2dL<C*vag{edNMNM2yUC<D48)#B2tJ zezn9xl4sQG(3^%s8Yo13ffa=p5one`1>hNPugqxvk|tBCcW<I63!RJ`Ym<f{7CcOV zxSs0M@ClWMJScU340QW~DA9*oH31RGqsw-|jgLT~>!}0MZT_l5)>K4n*kYtQIece1 z;T9;oenCcK2A>?z3kS0<5g9~hWS@#0HCjw=%ZEy~k6^iM)O&ybnMPN%YuXoLp0C=v zGm5&h`kRd1-c7|Lmc2~q%3&y~F^`o;=e5w<#i{UXZsne{eRa4~?6=9N8($lU=0%Rj zQ^a~r!(%O3HeXL0g!}!`@bL(Ygx&qX*(wo6-C956E9iN-*<(5Gg>wh=qdMHNEV!%h zFPY0AB0_Bv(BuK+FeZ6}$?Zpm+9$mt@PxUUbNfJ~DTov=5Vhf>6b}z@LrK_0CxaV& z%NWit(xt`_o60YN75lb8ouW8ie<H>Q!VWr!fzcaT_`EO>TAc0Y^^X;V%<px&Q`|>Z z80Lny@_#CY+KGQWog5zKpf8`H!Xk6GUam?)Zqz|MYO$gMjkFgGza7Taf_Tjv&(UE> z9fF)pbGl7Yc;=;oNI7F{GN`JcA#9q7R7+@va)c4F=L)ipciK!N39GtJ>Dlz;-SZJO zxX~gO!}jD{*z|gM>xN88HsykzoZA?H3rtZtEP=ge`Lwo#j`$ne=_)DnP?b8BP_9U| zj{EZ~wdf1pgy|#<@wZa^&ZvFEF=6>(E|lJ#<hu}@{i&(InhzZR*?ZuZ{TMm450-0< z75yRKDI#F=37T!EWJSzF54ko_5uoLR7N32&V}s2Z!hf9Oe1}n%nov%2;OmW;qWFFT zM^eFi4V!<6W*^cS7oZ+d0XLZXO3hEx6P%r;WcP|l7Uol8RMxpM^f$!u3ZJQ*-&z@4 zr24lQg)3ClpQ8QEF~Cs<MB4}hvz<Pev>Y|y-Db8Tt{(UmMW4&tqf4i1Uf++tWetDq zH!lO11HM%&xvape?_gZfvbgntTVeB43*F%eVmWLcHu#RJ;;()RlFJi*dk)wexf_Jx zKW=+iyvb<|ik(&45?v30)F4Tu^<fZT>%{4_Gf3Ru*{$8&XtReJCaNy5u8kuw*|N+f z^{1@mJZ;g3#)&;|o$<25`5ZL*Tiq@4cbr^&gK@3=FNf<p`Om2z+0wo$EbXS~-p?ob ztJM<e@{WDh$kJ#=8_hRsAj(CuXd)Xl;}G!~UqKy3GQmo|<3yrCd?7Ba`K?<NR>C_> z!9zWZHgr;+`h+OO_%qXQzT>U7+OnX2?~OS>s+5Fa8R4U(il^EEL#z2ou}K+2{;f?8 za+f@?25-Ez;I3k6S`FZ00|Cs=Y~}0L&a<!9fr#9F)8AX&PoTbL%Pj;A6UaijAsjZ_ z$P<eXwCvGa(rl&ZF`*{5_A{E2u{@F_a2osOv&G2?zQn|g1@8?Q(Ti}LNn9(4vqO6& zxk7|PXrNIEdf9eKxRlN;Fr!^m`+f6FzB1$InhF=jXip(5=(ryBhuY$Ku;i{v;UOxW zhb!@@K3|M9zKb~yN##78v{V&Q1to93VY&QXV`~MFM?!O9rs2lGXYura*WP=z?juO~ z!&Owz+3*-AQJV;oX_*fjplWT$h`;SrO?vuyPyFdZ*<5_{S57^k+!b5?{n7_&)wrXZ zlPe`%D`1nqR<^VlD*E}%N+r;m9?%MM;twK3(n_HvdVNXGz3_i~*9+>sdJ0#x$=j_5 z@^{JWMasfGuE$7CKHD|!m;$X-J0e6DU%nU;8$b2ZhkkD)C-b{?_y6j#znvN?e0$ZG ze)4a>NejY1e!V|1fa05vN9K5(fQuCpT)EISAw2H>ae_jO74`K+TN(M6LhNO8mO5t~ zc;UalHOD1Lv$_|N<#JtP0*5fE#|2^0mK8kNz5_t3V-8yci64K+oRqPw5m0!rFcq$c z22a3dVsok3^cK?Qs&a)ZUxZ|YK)UHQVxq2KAmvDwf@@~o2${&s*lM<TW=``5Mc5t~ zL7zvwx_fBio!QcwF17?#BR-)rql%Sa+Scu1SI#=fNp*4y>@V_bjKl{!>)S{C7)*4b zs|S?me>3D)uHw%B@l*t7fj%|NGp@@ZImpY2$gLWcNXn*^CKj|sb`9TT7$9$P!z2ZA z96GXwqD>V=DzE=y3n>=U1DxrQV$nWjG<4@!OLh9Ip&EK}3*=q;Xk=L@q`->lTy)4; z{cL{9`;JZ)*bHV88z0`Yd?e?A##X(#CJ%jINxT|;nbAy62+=GFBDX;FO<@A;v;?zP zbtb;_YR?ho3YR12BfrqSc;$L5Xc|!gjN<}Bx4x=Ug-NlG9ld|GB;PHvc;e(znH8RX z@JCW1OY-uL8ueLc&q3-h16=I$Ls%1TpBTrtP8Bf4KN!*7M{0@<kCp*3!6JB-@_QqI zXmBPk4kBhhAp*Jo!TI`E@dy4e@T4Fx=lKYXX5w`{yPl0fbNoN5&3M_ra>KM?iN@yU zB6sV0rW5*?MY*yen$rO@0k8gXoaPr!ryewQN4lWejqcQ_wlqIg1-ROtxK}Bi=26Tz z`(UXP7cQ2}^B*(t^J^PJk^m<zY#B$(d_c<kwZY-LUjIac%^-#Oz{r~7k~m0U($~yA zC;0%qXv7jcUda;rM*~D?AHFd%ZWx9*T6+W=1)C?PIKgK)9ut+(1$e9^&IZAU_IFt@ zV;=#yA|3vAq7(<qt+ZrXeUIN&?uNJ2ghT|EZ*R^E@Uy~9v-l!&G4Qjr<81$aTbyX< z(j$fWWHw>tm0jNeli0?g{WT$;adp3%1>TbIn@mU@PWq6!G+D2<L!D-R$AFT7>H|&f z5m9=C_o*MY)-}(KSn{@nmC)HlY;mgHqt)Y^OwY2~Do_c?JvGnrucF$t)C;ShbeHL* zH)(1c|Fd(HBwot4>TT~5i)aFS=yjUabD|4am`TSH+futl--J2+?Hm?jHtv1N1+hFk z-51+j2MF8VZODKwUCbxvKql69#Exihu%NmT=g6>FXq_g%HiPl|R3U(K!qI&CCn^K6 zW3ObCG7VO6f#7bL&w$sw2?-1wr1>d+K-}}UEP!)c3Sem&U1*o--RtX8)wu!B-7Rp2 zxVi|gF#L0~;JH1lodX8M1}W&dEUb#pl))VK47_&7p^dlSRj-$s+&`REzQIHoyYG3F z7!CH~|6oK1_+N7l3knc=@$Fx&pr5{jVFe77o>!Vav_6ZqkfV8ESwUF|7^PVX%Fwla z`Yj;=fPK?I>g>TQ%3+6xO_^0396MlS9ZWzyvQX?`N(mqj4$a>XiN&F?OUu0Q{XR-q zI=uj@B^}phpotD6U9>+O6=Pw*?rs@Z|7sg5)0;V0MRvg^w0tXSI#rM?D~nWRaDx${ zRV1y~Xwp4yKDbrkMAt-A*I=4{!{zh!;z0{q|Mhw)M(c(m#!`W(*}IV3jQ8lctc*Ar z*%C>%0dZJ#%|#i+kx&3gx_5_$(4`?N(%nGv%kbANtmIny(BUK-WV6rI#2Zw$7D%eo zp@TcbQcmRL$<(63*qXVDFs32Jb#R3_XWiCW!nh$2K5$vGSd-RavKQEW#L(~Ir<k3z zFp!{7i#DfHVh>(A^d>$k{m)5w(B@h#F40%#&tfLSdqsk8&TGtZNq<byUgTGy{cPAX zj=Nbg-M!mbao*UwU=vWE$o7wM3m||xZPmiiRUA)kSTV(KW)m|;?Um>)?NS-bW~<La zn9*6>kr7jeH5ZfUH3I7JTTu7G8ghAl=#q^h@@t6`Nk|Jb0w|@*0;Y`LXLg7a!0f#j zP|(5@bBQBOK?G-FN~8<Inkp_?3EZyT94}3+lCkC*){A*MIJr1+lr#O7_9ZeqH8l`U z`f#lejp{)Kdw;pxP-e$`y=e5a^)Nz&PaOE4i}H_&*a8RvrVj;R##{<JJd!tgmKJip z3!)8Tg!KlIkavsRF+GwS5xI)?F2eT4M;V45gZz*Y1q)Mv>C!}~;-L>Xa{zms5%#SV z@nPFwy^rlPh2{&ac2Y@!F95vzLcR^@z{|L5)qt%Y^VD7yI+UD7i&S0pfc3ENN*LLJ z)YyU*82gDyw1opE?>q~+b&TcigRzE!!J9c7oYj}~8NqAZrr$+aXX($WOjLQ{vkY?V z%b7FIF0LYxms-$d8aljiBFAdCJ`}N)3<hsXTlfIJn*y5hefZ1ae)q$ESz$88Q$b3d zHk6mETava%PjXQaY;HsKk}{a4RG%t1w$%UfWBBXu8lv!XTQ2K679${AF87Zbd5A5u za|h{`%CUaZ745qno9Qc!GOq_;7nj@?qxqy3=IPH>qnF<6inP34DHdoMKYxDQQwRV_ zzYLFTE9VE+v_=&IAKK)}J!MX-O=g7;5B;X>gG`jxR`UKj^h~IN_;2p@Q9?V>j8zAA z_nQdkXRw>D9W<Fp&GAG1MDD*1uzh*IVGI`@-a60}d^6yk^+B<c@YZb<8^*S2!2dl) z+EP`JA&ha2MVIl}lrOX&uA@d;EM-<FGg%hE4&Z2r>PH1;?0Qgwz6{ffAr@hFctC9d zM;HP#UpU<+-^Mc@#zVb(ii9)s&VF`)9JEc=!}tG`UNx5&d~!Rn!z5Y6K1+SQh{IG9 zzn(d>?R*&z75Cal?J;T(o%<i=>WxiJX92_m5!5=ITig8&%KoU7x-!Jl!5HIB0Lp9v z5S$tSgFji!9nuhq??eI0;deV$e>o+%0Z9m(jc=wS(ug$=BP7yEOXxuD;Q7>qN>GAf z^Ds60Jsed{WrRd7D)n@%%a(j~#DEN~HA+)1_XiLB>jz0zhWDuIVq8vBTM=PqgAls5 z1HuGONwbUh0CPE`s%WaLUf!_tY4mJB#b*+ZRWGq*N}q(~i<&QF+GmT4q0us;MU#zX z>3~`eC~nyTJhYtskiJeDzferm<jY88)n3r|HT?8VGbzT!6gHbPM-^XIM(j|&goKH- zKg#NSSG91w#@36YT87AYh90MMxIO|i8m$m)!z%bH1;gLU=;6h0sO2b9Z*wq0mhhx~ ztOaxQFk_d~(C(UtW<+*T(igv6vD{FHlq!ZW+Z>3ucOvzsE<b}?UaDgJ-&p5t=Nt$B zdo{CF<-j{5|7e5jm?hyQE|=TqD-!dJo)>GOt8XnCsRCw;S}cI%8*S61>R-^Ub1)m6 z1zKd&IDF1Adl0+4;Sd8V%n3%k<^%l0Wb$|uA{ipEG}#z$R~vZx!KGPwf#bJ1B%$Gf zaFu>AF@Aw4_b=v(Yy)38fq*k50fH`?$JWj}f5m_-1>;~%zYm3v(&x??Q0lj#jZaVP zPk-0nnw1H|Rv&(=?fXFH>oh6En04_T#$c~Bj@k-J)4ZGKKlJ_v<Xi~jT;kiTUauX5 zC}MQ{B$4d}#2AraD1->B-{EfiX;kfjQA-Xx)Ir4@KC}^m=`pGbnJUc-%qo+oOs8J) z1Qk1NGN_r3=<>!}vw}<<>O-n+j@tCaP=a-msp+61F$&OSQhIpXLk8jGyhv1ZRn(SO zfi4Tjh0^C?0nz=~{Wnu#+UI|$RS(QFkDS}r>%SgEuiipebRQ=F@aZ(92(h<JZ+6^1 zEy-ay2kwy*ul9D#RGhs1ftCnd$tAjDa6|hWR`G-N;K-l=P=uw8A_en7xGFLV5Gpd3 zgeEKJiHw;uMq+Vph~dHb-fg27mYo9loT(FrI*65)0d`3OJB7Hfl&aIJy?hLzptH}2 zN9zB70INV$zn1si?VaKF_Qm=N08d4?clI<H)RQhv%69d1i!e{N(5@%J1ZJGony?Z% zt$moxGN{S<_K{+o;8<0KP4r2Cj2Zzb0F7-nf3A00;|w`0_jTe>1EdY&#-vID1%Vg1 zgp-AUke!82a8oz<CMXuLEkyB>muSZgt_fDYk`+YwRBvU(bt<X!U9hlld8|c%Q}ZaA z^W@wNbgN^8oz^yivz?iC-`)Aw0QJ40voLPnxH(+E{*a#fYu6XMLv;VyxYm8dLIC#= z?S`%X9EM8!*wq36pZNps*8$|mR{ps87=P5Adf4K=r2TnJl3HzO2v8`4sKlYOD*?|P zN`Jt83)+1EL{$cn;<%x!kl-+n(M5u2e0Gjt?uAXSIgAEhbmBkLs7&%H|1w_@C_4ju zMu1GyQUI5Ser5T1xh#f6itHv}ezdxx-2pOa_O(;u&fPmcRFN+RY;IoiJc=|~1bF-Q z9iO-G;wL{jJoDUh!yB)CW%!NX`pw~u*I(D`73Y5;;Q8lX82+7~{kQd6#0xs3g-<F{ z*V=WeHtBY_x~!dB`T~{OBptU8ELK0Rpz0#VI2L+WwUDoxbM4aa=PM}(`nnHiF>nqH zJ2l)6NkamViSM?ol=*Bdi!-zZ=ngse$`1nKtOw+-C_m89KG*?6lH`SaIggU#aYr!U zLxQtNmTA#uBwXc_3>Kes53yK8o1wk%wF&Rka!I&{XrGZM7Mh6XuAKa=D{~YME~Z`c zAV)cJp0cdmqsS*+{X0z##69$nFIJFQcFO4?kmmR>qh2Ari;mZU_ICHwmiLu{bgw_3 z`62yKE*6+64`OhPC+Gki3meo0yM~YT8Vve8)aRCk9adD|SFUS^%+l(xeRq3!>$~3` zKKtp<4Zr$pzc#$}oo|P*e(f6Q8hBR?oY4Y+dJ8%O{TL{>bTH6&zV)_l=IDexv8L}R z-2%CUHaZ%0ZgJ|4pzhWU2kmYe(ZRrVbo5ZgIV2(*$byZSq&UsDWaY&}ePJX)!6m<R zZ<ZLQLCK571y9hBV#pf(1fdr*m?EhH64bLW<64oa7a=m$$gGHL`~W4ae|uwmgqay~ zKqV4%R;3UgCYhOmwIH6%#GqgrBL+XQxO?{kZ9|m8*wJ#hzdP(}a?50xfs)q&nCPyp zGZ;!arJ~XAT%FDVP%;XYC)_-mx*1!b@0AH%a8NG}x$%!uis(^p0wP6S3%}!JBJ(j4 zW}8ovQ96*qKyZqf#8X<36vCDs0>#~a=L8}AG*=iwH)YTC3@-Ah7Bp$UrVUV&J0?<^ zIH5<)Lp({jtu3}kCp@RSAP${SSWUXru+<)!NQScxq#Pz`d;w%jMqzj7TLT;F-yXi9 zL;kK`A1>>u{~8l_Ch2MivP0Z9()gec45NQX3jlihul~^6{nd`>Bbm^{mrv}%*a-6= z`jEKyx&Ls1cc{eefpNNdPvTc&zmDI^A2+#?!I$mWG4dba=~YB@Ar%LcBE@q#n6E_t zAt+-dKLMEUcp(7U?az5aU;63u$R}C=IM&$8;vz1LAB;+jxnl6Vb*R?@wukRX|2Mqw zqE822zHEb(uPWWUyECkBtl9W_;fG!ro_ON1;TvE3#_-R7<2Q!azWjRCu@g8)mq#DD zHT<=I^QVTN_{o25c<9=7RgCl|V;!B?U`3@=mK+C96V`D((tE%#uyNEe{k<y6G_>hK zb%VU)ji@V#42Pk#7g2<Gy&`5_$HhxusqpH`x-JqW*%-`{BxuZbSxngUtebSiqZ=s3 z8*U`EAKC}`Su?7(IV3nOv(erZUxOAfGQ{hM;-&1SQ5*9@fRfT0lkW$}{8>)nPSkzF zk2t5T5bVhEA{`izI2enwac)``z0ji;L8QOhFG%L{(u&T~*;E=~%(K`*KD_`TCX9LR zeBdlZu&8lzSkjQUqD3^*u;XS`8Pzd7M_QOUJkfn|``)mwvzM;uOEgP5eDvS_*`M*l zsQ>H#{6DnQ=wj_g%{u9R*T8$#z!@z7&}YyYbK@WTy|r9LCxae5)gfsFR3}l)3Uv(b zY1GMJfFE<ZI>cPvxyb`iIyX9_z!%uWY7)kAd}IV$(vwu}%Sy6Uu;c193llsME*-4% zDHsU-j8}wG0P~Z9nn}@_Iebekam2R{aHNwmi!XT5knm0|*fQAqO_=hLD{BcjadhT_ z8wqGqjzF11@bJ-NY;zpE(hUE~G2cXHMOTMB%Ezs(YQ(xg?yx-JTGjjEd^V2Na1U@y zjHMacLRPiw-MT^J#aa1DQz8wn4&n)WH=oK=9!S&DbcwbIW9Eb~*v6Tzp)j-Xg(ayS zbpwG{u~uXim&_Fqfs(gOI`4@YDn(0b_DG<#!AWxS2~SgP@TVtK@(=9{y`xBsyfAs< z41n!H#&9ja(C65>6}hbcKYMT1t6Os3_pLpgz0cfzP7myEc9RN4QY0l(w53prV#qLp z7_kz-HvxitfLs{JRRUk+LnKB9Ab>A&6~jO-EXRrM+zGOyP@*PUj>Ji#22vs^iDGx3 zc@O90|NB4BQ&sDI-@VUiQb*~%_o}_$RaMVaRZq>es%oKs>baisTPv~|K+}e6ni6l7 z&ao~oa?%*g-_WH0rQ15|&!_$LhOQ?6?!&2H`lm0Tuji-?=lmaNyFZu1#;5*xOUau& zl^^IRS6P;<Tin31z5xq=KwRp~q6c*o(z49gK!u7vt$az-yut1#X=nzz@~ZJ2`*EY_ z<J~9|0e&Q0KX{_!mlr?d7sd*j%y<_73nlug&T!-ro$~2G>@AIdxM0x70`_z#fIkNa zeZ<NkJ<%ew7E&H)2j$yuzdhZ4>9&qw-1PCvEy*|%j-eDhySw|-N3;-d>*bfGfAx$1 z%J&1jt6c==$?%5wlb`z3^zl!AV%pc_@=$NLtN*>Ex9n=2lqG0HS%I#Zo#K{78MMO? zO<I*F<ewLghO!X(7o#rAKm@ch^z-Q2<x)@D%6Nuo^NP+35e}5{0FL%j1~(Q!8RCSC zyfz$Q5U@7T;_nb$Fpxt8A_l~rWMP_&6i65ZV>aQ#Py9tG1U5gW;${|2jpvYOMv+oy zqux@c0c)oUy0#lx5J#YowGb0!8^00&T28(gvr9c_v7~1~p2m~PC+<@M7jcT{#Bmud z5O80J76}lvtCgHB%?;2Siw1;p?b;3fu1=r(>z|!|{a1f=`qG!b>`;i+VipZ78aP=4 z&t(CCMv*OSR9sd;*#gLUEml8iu)N~QfLe_+eWwjInd<C+8gV&AOM~E+Cec`iVY`|a zz62ox?!ZDHhQ<(i>7!MGA3si+<{bU%<V_kRA_@U*EZ}fRM}%jo$!~$;3w{9;PW;SY zGRrnT!o$fg;?!am!3#mRL(^><g-zoQ6}pL}kyb(c4=va*fD;jcR6sz%$&cOS5RUu5 z><C0c$I4qDR^55)bM;!>nl97@Friz%Zs9i!(v9`5vhM9_taPhWD_x@N$f=W5Lk5J2 zyoqdq&)aJU<lHZWD^T()&#GKyHagd%Wb`mfT(jXLj!{tMN$!EA<OPoz;0Uj*PKs`n z+74(e6&|uMr^hSgAb3n-a1KueG!Kfn!6cfBblGMr>ZD0gu0PNz?U4thK|>?uDLXtK zK6+qrNq+9F9qn+rq>J93+_`6UQof@-k<GwPy5Y+R_wL;f__^1}#Y!OO`(J+LWnF%G z(~G<Goz!U$#8nok8w|qn^EQy3Ph9ZFWq&LL@HP=Uw(+t+;AxA?ipx={lX7MEP)VZ# zHh6lYJ{RAr-H3!x+(PD@sA_&eXYrsp$i~x?f4Q*{M7sOrKe=0Up$S^}dHWATv?tMD zat{Do{I}bpfELiDpDjKysE#!jMl`A7?Z3uIjFs5(>@CvjM_6=uqD2(8azA{i<96@7 zqlJK%rW?AL)ORZ#XcFZPTH~(6$J6asUz+~z-~GAivp@dn=?lO1>(f`h^5yA{b`qQi z^TzA1O&|M_k54b&y2<d-lSd|_=$uib|HuOw@_>H0+@8b&*N@@?8T8I%*<>khFK{xx zk&nqN23arwYX(>=cfu7?4koV#5Ka~%he@Q<Ag!0d2;Jcnf$gNvaG>{}Z4qDxD*+80 z(uczeV913Kf7n&?>_w`;JwEA9`OtcC09FTxKWG49;LRxb%NU{WD4UEGW8qkY(hn~N z{lY|YL#wI_sy{I|h(!k_z%nWSz}*Ik+Q$f_Uf%TI)A7@t8+!Sqg`pq*kxxv2=Rf|B zrf+`Z8xy<s7PDwz(ZJ~%crFV7G%_?6Te}(r+-D(xH%02mG^jk(AfdMs(FD<G&<MCa zmD`g``DtgW9mNhqb3>CFjg8x)#I(jI9W*HVm!YM?mM1%Pd<0lL_8Qn9#*G9WWmk_q zjUS+h8?m#G1Uc*sM_#*Z6MP5{7;b*zCDMUH%({tS26zzjjF7rN<OzXTMY8{3M-T{E z(o4LxkOYJ93#>RMI^x8#c)S-j001BWNkl<Zv=A|H(d1u?JT&YF8th#hqYg~x*!cPZ zpL3!!<GkCkI;1MQ)&+`e8Hsx^nZJfc;fZ``BuQZZAZKub3aJ5fPK{+JX>FyuiC=ZJ z;2=!7auzs?>MB?GMHgI@mjuCE%my`zffxkLRZoMrvn5VomqVAkpgH|XSV#$e(-x@3 z6trj<J7y}0FOwPu7<+6j)Bwa6U1~sXSr&BuAG8s>J8^#2Z*$NS#^sbrpL8a@vFqoZ z`*#x_B+K(`Yk>TIL7(-zb?df{?!`HO%D&&0DrrpUxzyJKc-0g9e)G@7UkjoP>OG;A z?ZpB6t8YO!(XW)2C~K`sy1gt++SJ>@KwtH>f!AojtN;^|twLiRWhrKc11onUlw*|_ z>WDJ^Veq(5m)mV0lNQA{`c+N(1*Co1;Rt}XM>9TQVZe=$o}>+(ZEx$dfk!$wuEj@w zk8|e*F*tZ~FukJ%0Pa}0ue$+m-Fh*;J|h}F8%UeQ(TmHvoc2dP{bSQ7KJ#PK?|=1c z(=X_=fnWW~S9NdA1BG-p4QK8DosazR^u`;nYfHb{C;jb8kMZeACWvSVoib_1CLi3u zJHb^VvNbcU5e7InLk9Wg4D4gkIO2kIM5hGGZZm=<7!Y|L)BuByGNo8GI>a!XDm<<_ zN`o7dA$AEXK`I~uGi5MDBvzvs{=m7;K`cK0(rMe{c7<B?vhW}&o1<wo5{qO@n(0Kq z2-4}WED@pGUC}xH@>hK72m*qjjXD*JJS>W_o<TcQ$7Wc7U;*GNpJ3LV03Ukm!_(~> zSEkSZ>tC9F`B#4}b}ft%UfhcY77ffa@SGL^_-^)P4-hYFApP#ay-Dq~CQD3`>dk?w zc(i^RWV2OE@luNrlTWSuskTQW5CaMDv@L9>b0ftO0S2b6fyqWgVxkQKr$$6PCJKj; zod*uLLXbS8sfLtB%Uk{&Sj06%kgf=W&OgF-NEKC+RR`nf`%w`X<5#e5Lt1fYZ0R7l zaoabc8%8?)>vHfL2ag=YIcx@SWJcoUaylYV3y3qF8U*T(t)83_-P_i=w+m#*`x`I5 z;5Rc5?mh6E7~amX70nrqa%VZdqMWCp;U{0qZqg#JT6Q1@<MKTe1TmA1t&BjEVFn9> z5lr#mOajB>QR2tq)50!+BfS_{smE9aIK<H7Q4*;$6?(bC?i4U5&cKi|$3v5*1u}%! zU`5nzX;MiR0so34gL7mvsbTQQ<wlroT_$z-jxKI8)}V9$@C8rGK-5QjtCy8dJ$XvI z&G}9~1<Ig&G3P)7D*v1>f8~`|Wb4gxmi?&1yzNun@LN01TJzRllT;Q1_-P@4i_LIT zHfrLJP1&I#h`uHDL?xqOxgtlM!`u4i2oy+?1dRcPnX$YxJ4Bz3M`*QSML9No#MS+C z2qXFqwV28uNzl`d6gtFRsdxKQtr4|}&x|5Jb_B#5&d^Q3iJR{T5RLUHU8DQZr6xlj zE5&8A?6%;z#fw_7xv8`8EJ(A1fVz7izWds}v#+-6!yo<V^q+tD&FO2u{gvsT|I2?d zee2ubnd$7TcvzHr<F(hkFojN8fZXTUgzntoXaLzjzIov`ZTrCl(n+oSs4`$bcp0~Q zYWrDSz=S;5!*4kt$R{5DmBj7?*P+NMT-b;JA2RUahb|+MRuw0}O`d58JBiGv2L^Ci zjw9o_1QdA+#Ugyiq4+Am^jlaxlD{odj5HPR;)m9FNw*zojlLtsmpwfMAbj$A(b*sg z5wFv(2>=qvhsfWs<xyL;J-zaQSEiSBPsW>Xy*d3ifB(Op{>%UB?@xcIodAnjG_Yvk zWDPvG(Hkq*TVA!(MIf3W9z2S(LA+Uu38V%R8hq2Cv4ZQiObvjWO`VHlb<YimYCjDE zjYAA3)JSu7P8YB+NT*|L9jFKJ>RjV=Q8YZ&=n+6RCZjssHqr1TU6DuQJW|RHk_iK` zbc5HK+<3VG3%upRBCk7@WJgA8<OPEurQnl+vqQSeNMWmE$%Ykq)*GTCR3`Iw0|$mZ z{K6mdN-E*@MF7&5@em(z#2|ylpSL^=K3H8RFE3x!r=c_%CSBG;2tC(N7Ojr7n`KXD z*Y>>&AkMm0nM7xmcc>6g>Bf3OJLog1lEk?W%Djy)@;2nak$DeY<_$byV9FnhWW<B8 z^=D2{X<U>|8{v833cu*HD2bAoz`bf90@l+|6vT5DEdgS&OcdrxKGDJLe<v>BA&0nk z@`yoW4w51-Fp;!7QVY6@G454EkRGI~#o$sT8(_TYz`M$f{0m~3%vlfQohB1%sFiXQ zAU`nunDn_!m;Nt^Zq8dW+2z6{@?~AFc2%G5rH%LbTjg=JFP`XY($Cg(ZYO6EfVSV; z{Q0guIB!#r{<!+(>a(NV44ND3lH9E=iXs;E54g*mi(P|79Uo-bNg*^t&?QT;7j;x~ z%5N0f)@MRsSfrV9UHw_`NGF21t;z@xRY8L<>%a&b<L<g7>fwdI<yj_j`5)|Y5x{wY z-u3fQO6{aPKGv9s1s3JQfo?~Cs4vpIq+<csu3z(=CCK9F!I5rY=PNzCx-9S$Iye9I zKm3E~Ti?+F01-W7=H*vk(e4yo`X|HNViqA8PqMR=Nnzv-6GM7B{mGV3@cd<ZD?bf} zF7pltfAJr7+qQ1rB9sSb=`g_sLI!ys;E><?eAqIdlb}gPT<o;L71GLuKk8xx>SsrS zwHzKUcR^+teuo)I!@@ZbC2p0s>c4dq3UgSMHU}#)=1a+uzJw^P6$;6QvScRtEbhRJ zS6JS`0oH+0|6&z7<RA)J+O4KB*tMHCO5F6H{HOof^oyVW!t~$%gZ~ba#Vi_FG;o3j zp4$QdgM)3I&Ej@eCi&{IT%oz}<FWkQdW(tAfT)J6rZQOYTR2TzXeew{`=haO6BzA{ z#6?@8bz0%$&7FAF7`USqfAFaB5uqCtJ3?e{6GVrn0>C-CAs_MS_O>!`NeoMoxx=92 z(a-5o2i+Q91vHZ{Mh7Qg4;EMX!W|7F0b&Xlz7wBB2qT-M#}8m{kd4HzflufOe9FgZ z1AV}p4iX?@F9492%4cpWzI5dR?EsJpcC~25ClHS{3G!PR$~Z=PtK$*rZFxTCedwNN zQ?&EIGBOM7Zn{TqNF+asq~(|#O;#aA9*aX!?iwCA5_-@%*-mN5a>a=7dT98A%|jfO z8y5!&8iEu>l&29GyJ28X$~gmK9i0x&xD+M_=T3VkDr^ST%j%3|6qVr+TF~gJ@@(DM z*|kJ@XHwG^bsX9Sct{Vtb)+q0(m^IOm?mFs@aqp6-U2V?Y-)go^&1*E-+J-3CXUxN zan!LF<tf|y8Em`SWS#J5xY**a{HBj(5r95E76uAN|2<y-pbqIjO;yAOD1_UEXx}<% zuZbf}?ltxRR5)b^*PNKX&ZRipw^|4QNSlV~{Awc<Df>llPDrvEnAi_uDlCN77X(4? zc2x5g^MGT?5kGj<FKm7mOB*K{zARANx5yuUjBiTcyy1WRL~p&--*{&Lq9o_-ci#5b z7hcpS8ei100Pb*LY~*7El2Pq0M+PiYd3=@(`S7AHq~wji$9U2cusSB;Pv|l3609<a zMFIN^Ben90rcua&&*LkwNf$P7c*KJKR*i8XtD%6Ak)z2l06CA-Za$Zp3@FnyvfEu@ zDMArMuTzdIGBA#C;tD3PvFY#8ldF5ozUeX731O7LbmNtr>faF=FP{*vKb74~T@}F; zP|y%5V4BDel0s@Le2{J2ExEuw_Q$OVT;e6-VE)d}{oM2q{)hkGM>PlV;#@SaXkgI5 zb6Ws-qJhG$-qb(R>NIBw_jOLk7uKjj(1tC&af<~2HxjDA3>2vFd==o>jSLM`{5*(I zMIVhx+(6Jk)7a41M`OboMR(?OsC4wOR^tedMTI=iD?lSWK)6g!@J5(7orP?6#2bDZ zByUfmlflhkL$=R0Nf_xc+xT$60zgl6O%VjR`IT;3B*#e4+|XK-lTz*y8M1o_;8$q^ zrnpK;*1P4GJM`-`iI=w-NPDPny&iq{yA{lZu-SG-kG3V-MN9)`1`14+JP6i6Z|L#D ziE`0c6u?kE+9KnPOVvp(ltF5jX^O;HcrXHzMT$xI>q*`eNbZ!<VB(tdKx6uZ7Xv{k zz9q_$0#=ZuYvdw~*msVKQt@_wxgs{@3(=7x<gQ9W4=rs@*(ybow9X8wB0I7nlb_Hr zh!mOpY;)&`OD$LqlFzNvn$N{pKJQfO3dQw&K~KKysuP@Bot(FX?Ws(^`pT<X0J!Nl z#x==dLSOw9`ORVgZ}&OsMP1;HbKL45-yf%~Yj6IUsH)shahRNTbCSDL*fo+BDq$-v zL}JGZTnuHe2rI8DIZodXgzdIiaunYnp?u3_5c0zv^lJ5Jc%XFyWJwN?Nl4q}l#+~C zc`)tP)LlALI1ZcLjTULy?(3yf@*{rw!i>(})X_&`2@PYZV)QNQ>W8?5@w@7WAL)L8 zS9F2nRUJoTr=;61$M>;!tZ{3;RuooZ_Wt&=82N(ADsTI%%+dCcLw-~2F&8=$#A(F> zOM9-q+RkXZfQ^d-K?a{Ovd9~Vg5KjDyr40ObJ0ki0{0S;bRcYs8w#1U!n5+scmpji zQ{WLFv5LOh(3VboE&M@7Pz5gPc2b=ZhtOTnl^%&qXrxQDh<qTs{2r6&!A=&NnH6IU zKs|lwau{$#9x&-QCgD+6D7)Ze5rEx$-bD;snvZ?*Q#uZ#`<b*mX)%ii77c9Hz;jsu za9!87!h8312JPw<y(NxHxT{KhtOoiCTa#H-Rc+Ro!6vMDy27i1`z?eUmFV;;3AAlq z$#(~uP`5a07HBBw3|K_~k4WfECO9pK{d$1H4*-e)r4<d3J7frLM36Mt<t!}CAM#k? zkIo%T%CV~`M_c%Y3yICY5`d#FSj9M`I8@7M@aD*HoW^RLLCPd7Jb2M@k1JFGi>V%+ zZtDn9vJ5afSKd%O&^ANpFN9G#xAj>Y^48rGgI;t2L@HpAY!&$t`4hQ@c1r)a)2!&N zI3SIICUWITy<0;1ofD>uPSp}k5cx;JC>mT2DzZ<c$gD^x?~AV-iK@Xe-df!+t|%SA z6M~Ei(C$KX4il`=fsd3&@Ny67Rm?-cAafKEVMbU{qadG$UF9>x7HyBa2Rf-BXyYw- z(0RZeF}M&<CUu88<`V@ba)yLwF37>Rn-7M`#f4DInNK8>$`@X^HQm;Be-`FB>rZ`P zpzJNSnL^4x=lod^VDevXY%c<MfryE0+~$q#IwKo_Ro8lf$-*<Ql7l|8?whRFb-P?A zhqBkWgq6HRC$yE&PBnn4X=Av63EqK#2!nH9s5oIm*yzE_BSvE+&@u#zu|&|ec2VTs z1yDhV_%Y)X{xTAX!?=G%F8WiS`h@!eG=X}|=aTsrdc5h7z)nxZnD}G%wH+QmUtPL$ z_pTQS;Mv*Mmj!hH5`7it=J)h_pgcWGh6(%Ct5>B1U8bo1)yGiOMoB|X1}Y3ShHfiu zZqtn@B?}`K)9Vqs$B_#KFp`%k!1zFS`7>k^nlI%VluQFUoW;C`I1xY`T*jb)J>$QL z!7;BgndB`o@Ku7WxzJw3NY9jw+)fvvG#YzD=Yiol=7Ix>u>_T^Dw+g974=WCY>7%; zM*tStoq<CHFo%lUlLy(ZM_dvZ_dl39A2;-s2->!&86#$KFB(`hP#SnH3jkEsL#;yJ z(`~h!&AE4^F99$?Qia@6NA_5aIjgq}@V6K+$V7u<r&n?5c)1ABEgv;M8w@uB{SoNF zFT!Z=#ukHyCqzdhg1FIdj~?0iMpI>>NtKpJiZmdd#_g)GKzI^=6KBgEe8RMr9JHZw z6d%mV7Xm{@(#=2_rDi!`J<yw4Sx?#&mcxUwqMAWEoC<#s0=?U9;wiosUq>tCFzGj) z@LS5$J-ubPd-r^NW~iy+G>6j7P0QQ5d}wz^->*gOdaHB9z$D+S_!xj?R4zvzJ0mhL zuqrze)bgo{kA;iQeiH?Uoz5eKC=3BS(6r2w3M2n|hz6H2W=>zaO*pWLSSI2g{1Mky zu90a9TNTalz*n+}qx?awr{K+(i5%kuK4^=s1f^&!5oGbSyp91O>6Cv2nNT*$v6;(C ziljBGXoJQadid>8au=?==h<e!&BV`d_^I#XO09In)_(@$)PcEH&$Cv}cG~u|efmXh z_rG!D1zpIiBU`FOOz_Ll2h*;5QZG1f{OfYR$C~*2(m!qcXJL$T5w>K|mjlb6<>AKB zAL*{p)@|AaYOYyU(7;y9Sr<L$=<rcU&}0j!CSlIAUbn$V3t^t5FCEo*rHhHU6QY}& zY;)WaNfb>T`nF6a_wu``k?x|&F=f1&1|a_Ws~rHPUu=xue9P8QD`X4)c<<QqxEzoR zX?<sacJW-=zT}D0>pDmO=Id`vU;Fy+BH~OLt5Ev#aR`;q(gTUGW+AXiJ>y1KR&eMS zQ03hWjR%A3!_^%n0(4|<5JK08@!;(MTtiHHR1yw7rZ{G_zzfmbSwjTRA^`ikL6A&^ zzp+ArCjin`#Ml@E#@J*!6ljVLIz0_BP_7wroz}Xs>|h`Bp$W7jh$>#i0=@IR05i?4 zNKpU9>zTzY8dx-NvId^Z0s!@L|B5dAd!p|FD{Ll4Pc(>RJL%SzCQh2z<BtYhZq@*( z+*E8mxEv5Znh+WluZG(vpyBy+i!-)5!38!&WfLKJN#-`s?f|s5B;~r<N?J3U06<cX z3|$yOwg#K9`kT^$*Hr!CK|p#(u>lIcCQHC@hi;(BF-AH<0`aGzbvi<j-AJ=W<v{QL zB_`hdaHdd$3c+kMz!L|ntjalsCHegGBma<LncNS?Tcij-LFeA`o3Z=4=R$he)qNIQ zPxQGa4}^IGW=-?3!b(p87*r$PDEg^85t;>(bX(`mue@z)4u?bpv7R;fXgM>`)_~XK zu-M2afkhUwgn-Bag(UF&C|UKCLuOviB5pxb3kCR6pj~sH14?+tj7U@>jShH(9U+<_ zX-v{2hr=lv#H^ra-iY4}<mmF2=?PcgQ`Yr)M<zKJ$xy#p1YocoUulWKRIBI0v-S81 zzl)@pGniHuYHn)#G(Rr++tDY~sM+k?B0uA&Vy}$!c7E*!VB*iG=2!%vt*dSSln3bA z0)RZeg9ji|Wk(BOZ)j^MAdoe@uw(r*S?kn-wHGe1K~3Bn-ypjJqyBercNv)S2MNj6 zA-HH>T8NHxhVAst+r1C~UYzC=znFtxu{AK{(~X7>3QN6WCx!Z0;kIdK<an%~C5o7~ zbW0Z_a}3~#`WZOU1#kC#E?PLoSUXyzd7>Blh@em6lYcw1_n+u)2aUJ*z4pO3r_cVi zAD@2r55Dd^w5T)iKyT83kC^ywB@G%wgF+}>=wryHmZE5{LYFAiWgRTa)dQXL>n1(G z%@FvMV4mOwj~SQ;o{XHaP&lqdD$hL3^hd_7O0~a$tGh-zGF;RR;#5JEy-J6Frmul; z9ycK%#6VMVO!^uZ8gFzba8(=R7R_iEy12jvjJ(0cPuL<f%rz8Jn~Glfu^F|_k0FiN z#l2`?(Eu8FJ_`V<evfqf?4><*R%)m@Fa1!1h-0>$sRGk+d3(P)DtC^m+_9Y}YB`gY zm}K%s6&Qq(VV-yjj}0s;KmKxyjz&U1zXcDGictuNrh{fu2$-@#v2?rPkFe6Rzqy03 z!^|_sI%0%q`H)7~u)0wb9LS7Ip6<t`-x?7Tx+$q1Z0J#qu?Jz5mL?>0X1%L79rehB zp8<y7?4xT9M%ZQLg#iW~{)=$kfl4-$T_#5i4v$DrMW#pZT)Rj=1FA=l9;$rnoHXS; zFScaCinEt<6ACIdRr!Uc%1O}|&1#7#{F*I>Cf&j20H6tq@)q(6NC)e{lQ*SiwB30p z$aO{Tdizm%-HKS!l@)lxDPg$MKY$y3r<}QrALvt>!FKCWwt@1k$4LT^A+wGPxN-SF z9@^p_5x!N-l9=y#IE@+J^JbKG>q0h{UE=0R{kK}M1>+6lg{%B$D6f6i|J4sn*Y#;X z-<Ga?^T1e{=epy3rTu0iPk(#ti9eJ7!=nQq4Pf$L{RNXR^1u9UyIc~Y4{+JAe!{;= zRg{|(%?i@q6v`yffn%L0Aj+lD6`7vU8CQWvS-6qlNjKC<6zPmQP+R(=NoWM74L<P; z$vCDa{|*=i!Ga^6qKL$>*r)`uJCe4SIW4;*tG<Ozyd+5vz2{fna5O+a5kD3`yU+N% z;NvZh?;K2zbQEA;$2=Zik(^A*{^kAY)1Ug}^z;A6KbwvY6y_N*=!A<XIerqCRH6%% z5yt7OM3P$EGEmqF$Qc&6Xwje;{NYTxL>Z<BCNjL^0qIw<2>AgsZL&dN){1Yzk=YDw zYk69%1?X<OOoOYN(HCRDf<T;QrpeCuWxBhRbyvkFdjb)RaZGy2jWQg#(5quAa${0K z0Ruu*N>>$X@Rcv@3g13^g33>)$AeUBXwIo#TYc7I77Z*KI9&tJX#qfQ{k27!Ps1G@ zYXGT1BDbddLXK=OJb<9;x;1dq(qak-d<;mms_ljoMg||^@egtumHwo0F=>E}v#h~Y z{<4i49tFpC+y+?#nNdTF9e!BESS-B(Q<G(ZNQfp7Z-mhh=3^~8jOfHvSY&n|6fG3H zpfgPnHduxNgA7z5(fXINytOyMxcLABTMoI27$Mt&aTYNYYaz}9CcM10(CN{M)9}10 zx=4malNVmRq4Sparz0(Fv0s9n5K&g82^U0c{;Lbcr5xa~YBs@wnQ>tn97SkJ&dx&n zt-H|*N5Cj^QEGy^co8R>^17S_MTw7?mJCswHo~v6T>KRdeh<F~f*1&kpZHjK#Ws_a zap-B3t{N;$JpK)AE1(qEt<L5leM4;I%Q$Dyq74_c$JzlfI||Swoll4JUizqeE>J$| z@x@to$gK?H&GLcn0q8nApZYk9sq$NYZS{Xax58i1*=ZJWm_YSXEtm3=fw;Hwt3Bsd z|3|v_fiJw^rvLR%6}!Lj&jkP^@eeM9N=@Y$VW(@aIH0O}>GD^;E}X#T!YGTF0Uo>o zZqF6A5Dn#=-(<+dk&Tes)Bu>ePyW@Wm?4EHAB&`x3(_zPOQ$e`B}a?5DKr;{SL^Vm z-O3#So+yc@PnaUkTUwMk7R|Ok2k1qB$FT#A#Tsb2xY0W=>8KPJqCy#97v}BTx8(05 zji#sfu>&2&ugWWW%KS6VT8wNH7z~hA(>a7mPh}Mhb&L)^dY_OQKAtuuIQd7J;T|F4 zXx`orHIN0)eGy1KJ8te;jafu0o}JRE7`+xdrwU(&2kijp&NU$w!Kx|)ThW#V5gD*C z&qBizBUI%9HU`eo%zdh3^gpUE>;s8Eiy2ugWd*Q!7Y!^L7&P!)7653MIWI_a$2n5Y z8}det?P$JON)f0DsB3<UP}Kgy#m&PEz9ldl`@peU9!%o^gvJ9f4T23k)uI43xM73F z^vzkEwmk+Q=++pe+~kRE)xwI#CT-K(U7Qx;$PtG|FQ!JDBm`wvFa#H#NLabc1}!&@ zs{eo|Zg6&>Q-#n>hplv@QYQLfWjSqXWZk$5P<aygSRmM;0oDNHP(KDC7s<pxi^Y;1 z4VLxA3%*6HeDD`2Sbf%imABB@dihJuJMT(&=sUA8b4h;ZLs3M2hffmXKfJ{#pLrYr z5|cWj)%+%>?2x}Ei6><$jPgHa01G!kipMl|4K$P&84(6PnA#!$IF%X7HJp)9y8wXX zk&6X(23XFBW8mv}O|Vq_k%wStGJM?nuhdzh!_JT(bvz=Su1CaAe_SlYC%3q_gnd#+ z_urKuhiEb9`k`bpK{(bVu+of9;wvZ86>l1uKu8~lnrIZwxz@=UNgQSP^5rYjOSfOq z8Sv|Fms}Z{%xjX5p>9T5C+p&kDhs$w{JBt$$zyEm*YMhWszJ)@-q%uz@MH1dKm3MM zr!e56AqfBMDcop~AzE{;pc>hUvfv^Hwi@|~j*?G%v1%&LpfVXnGJ>4$imwR*Yxamq zK0^f|mUf1=NrFY5O_lt3_$U3OgMi7aYL|o*5AX4f7rl=~s^4{<$c`f#ECSFMr#yBL z=#PIEa<;e?opG5K0qRR9mA3c49ce{NZBdG3wlaavx)CZ3aC~!oVME)cb<vnn59d+v zwM7BrM3dzvaw8;Jy2+81uyRyjvYj7|VnC$RB39x`9Lvm8(czS@&NlNDtL+ifxj~iW z4z;U$XL4p9v7SsTB%-4Nv{1}nLCP~`V}L8*;Kvu5E&WE$xgJ{B{J~;p#%hjOe2WGa z4KxirmjwW%U)s|-LrsKuJGx8lR-?JU&u2Lf+(|)0rFI8K;}HLb7L2O?_z4x68*J0K zrNbRf!VC<k4Dw7Hf~%p3po%bXAuAc(`a}~{qPpGT;nK4}w!6PN-T)^N=nR^8cpy;0 z7D={*VZk5*dHjbLce8QxCNAv2jc(5Ul|S5Ou1H%p^79u#=^3UvM|`{`;=DV59%L}+ zkQ>$`y>;O2_eC<TgON_yZn>+k0vsGZny&9%^FUkb>BY)<F3ma92Y4zBosMSilbAN( zpiHY)q#W|Lj9tLfSY}5Xy1J0y+^aZ=qQv>FR|u?<;&7cH!95xG=v8r1+~9+}g2x{+ zqI{6N9<wB->?ANO-~+vcco7Q8$RmC!1uB7T0-m11a<brSVWdMe@Zzg<s%EsbGb(3p z%enWlOh43l+KXg7VNf2B&6M@+T^$7~eUdkFUt;_5A#attZZDFK-fwB;bCoZ?cx$?; zxBmNk@Xy>z001BWNkl<Zmz_s!nP!sDL|(JLSj3?M$k2{3A>?Zg4>j>;+dsGbdvYlr zF9MLeq8oqI9_p3bA?)<yS~C!4ct)3dm9XMucoD731G5etgi$aF^I1%iVO5B*mETcU zn^d-Ov=2or1a-n*9B|6YR?P9BjYd!65?prr&C~)CYs#VDusi}=G2V4YILb=4{QEct z{jl>&3pvW;9rBuZ>BoHy%1p@%iP*cUvkwj*N-}|;B@>IXw9B+jl;<dam5xYbsnp3c zC?T?}f0FDB40vz}2HyP-`2~?4qN{~xv%s1tJ3<7I42}@G8T+XYE!u#Dh%Sgy5~jth z<zD9~6469td!d0X%V?pJ+Ez#%pCcBxaQZJ@xmYI&T#j8uG2t+{bcfgh+Udu!iU}eZ zIg2TD5WaACx}>R0$Ph}~F7JaR&~a30EuzV}Sc?W04WNPNvjCua_n7U3Iv;(c?XyQ* z5~rqvy8w7&>d&}%U_u2|HC9XIs+zVtI<Mdv9W;7kXw*y{4B^jCZ+7ViD+W4#;EuwK zJm9Cpw2%Nq$l<0@LM}G6ek2(d{<PWz2T|@QKm;>n(N?KpOdj|wAOToLC4SyO1`<@j zQ;wMM`%Ro?DY*R$$&$w(as$p=c`oV-x`4-ICnzJj=}sQ8+n}eIFvb9bt%-GCG;@9D znP^&EMm?60b8IuPK77Q5mT@T)IzHB5j5nv0xy)863MFLu4(AD4fg=mwsxB=<SPxK= zT`-DqaU}@_rV)^T5OheRYBWuN9LOvB&I2jFk+=LY#DUK);wKb!Bi?FBru@|X77Gyv zJ|!AY7zio)<_%s49XKcnz3A->KnfIb`Xf|Aw}2Tb`4uvVkMe7)j&DRB2Hq?p16F|~ z?3`N+vS~k<Anxi0aaxJWMwf5tgIncyBJ<C=Hs0UKqYZlTrI)9dH2L4#SDxg(44jo_ zAWYF^QHwI{Qm^Vj9`dH2$v<!X+4@gj)2>tAt9_^Lgd1?U(MHh8rchM%DtlB{RvS?1 z9Iyr1j2#H=Eb1BDVLBE8CjJ{tk_pqpI<ZQNq}na_^Q6*k+GfF)U6GR~+B?xI0Q3YZ z<b{7t3K6l8YCqQ~5Z3hXd|=|Q@y+9%n(#}6@)Q`CmqHVZKg3;fiI;+*PIJG~Su`Hc zP>^N32%xgvjS}eoLuu#U7Hd7R=+>FgZRba@pjojNM-hv*@Y0{5<Y$Tq9D0@D_!nkw z(06A@w*Y`KO;+;-3~z)KE~8hd4O6^Ujf1QJ%3dW}XPZ$(YI|G?+1N^M1BAn2i#X8r z6i&`YYAiYke911Z@XvAZ&LPQVp&@@&n;chL%%Xus1E*`?xhw$C;V`J!(I?Ulj_yyp z8i;TnZC3-vX}Uk%yL(R!xCWLQsL)6<Frm?L$0lA@t{IHb$lK7+xizJl>rb5@w6qE| z48HI~4e=I(9d&N*@Ps(hk410+BrASyGbF=|vXIvrYDk5M*hsF41SF6$=8=cV4sMt$ zE_4Q#Ej#|rYOq|1wGF{|QAvvMK!Kp3ZBIN3$FOuKfvKDT@WS~rMQjr*&C*G1*Cnp$ z&ouD01&tNr;vrHlw+D%8J83?fjzx!_oF5qmlO{)20ePaJf#gLpeiKo;m2TKBjmk^! z<fnXwg_|;4cyycEf(bX}$sjasuk9>kAy<gNnlPvvKVErKaDZWeLp}g$24{i74ko#Y zYf{OY(<f2F9h}|paABnAqheT2P(uJFjA21YP|XxymjN1T8T3P(^dIHYQY@C`7D_0( zH@yW!kd*mVlQl^MaD_ayWVr;TU%XX|3-F-xq-s^rx%NkWrybtfkNRJl#AXf=+lUK# zu9fk=OdRF(+O-?gtFOI2UAuZc`xBSsoc!hFKN=<14+=axI_j2x?r>lcz>|OXt2v=0 z#k3uwCx@vUEvM5_{<2}|W==$0ZDz!yNA4k>#*FC39Flmt?Fp&zT%%tFpFl9mup2ss zkk%UdsQ|}rjX&C#=%;aeQLz$1aBg$waYQ9vd{AT{rQgNx{IEOoOGse!(Q&7P{J3+h z6yqX|iPTSVys2mAQxo&PAV8zUn=e>UPS8ag9}+_VR#rsUT?MLi`wurJbm(H%37Rg1 zb+$tpeT@a+wTV0na!Vv1vR^VKz=6e4O5V98Leo0LIZ8guZcqf48Qm3F;bf0t58zXs zV_+#hM=b-}Dp7_li!_cg9w|e>91^|(CMUj-lcL6CW}47cWu@sMm4hjQ%e@4Q$68#s zA_B{E(ZHgC6EyH#762GL|LJ%Ce0uq{S5!fn%pd8pw1?BxtCwY8nJ(SEt4hBcgAUc| z)|n}iv5Kvm<&Sl-nil|`c#HX#Zl`l6rV8(tAX@>}d)4EK5jcZV9T(8*AHQ9_s;*AL z<R*(wGQxxjb`aq<Ko1%mgY*bgw@qVN5C$Jl8YDNK1g3=tES{d|3mJ`4*wG1PnBYi& zZ8PPg#{rxtIu<H=jlg5FFZl?|AJOq;e$qP}gpDpdu{VulWEi-e+?7#y(+cje2tz#n zOF3LRgnV><tPYvm?)iKB?YGB>pKCW+;5>ESYiEnjRx+M&9$7V>hRUn_lWts^1gESx zf8?}5x8#>RWdnEF3^sEYpFO|>3S}?@L5TdeaLQP2bJ-zIN?KuLGl&5txrmNn<7p0) zm_j(gae}syLjf~b3K=RjxXmM!#S{$;$rzE9tdJW|L{m=FXUhU2C_MqCguzo#;-DBN zf5a)Y9|DL+iYnV-s69|Ts&1M{5sx~g`h!f>A8ya?0#eR-wWJT1Y4QiP`RClX-f1If zci(>Z-D&5_mDJsNRmS@>U3_ummfrZ^y7jVe`1c@Kxe^Ug<XamMD<An|GRQ*ZBTe}I zi9a3B^LhW=DS!;OH6$4~RyqS^U%-u))F3mgKh}Xjs@iqBlU>ldO&vsqb9_ep97&5B zhzHS@W&b<|j{6)GTyD4q0ki?5caxi-lPKEPs5g)fDEkPP_6B|1hDe4MEQFxf9-{jZ zQ2M!V5ML|=MB7y_L>TMf<|qJ*Jj4Sj6$Ws|4AkwlB#Q3+Zv66J33A`-)b+6(39`nT z3gsY?=n>1AtrUh=j?j+0av7}W+#P_DQ&jlD_+gUyL--6cqzMbFP4PfeuyuPx702mR z5gYg#FAkW?9tE5vwBQy}o@8uZIT~J$2G6j@a0d5C*1!NIVkqh<n*at5SD562z62<L zJ$4^yi_G~w$S9u0UNo?1plRT_EC8sroxc2~-<dx2)*I6$t=KY%W}^9{`uxm+1|4sI z@15!0yYEhS-g(!bs=0Ibju!~1^pAC+8jA&d{clH;OMl`<(dCWBp^g*OiZ-2{J3O}_ zeGp$A8-rBBWNWVt4TArp)1_17hpEn?I%HtuqJZ0yY<8*xW|6}p6%WiPFT}<qf^Med z_Q^Q$>Wx$J77U&;HS{n<0nTZW9bpT>zcjcamx;R(u@Jzy=Jv~lfk+c_oRAg<d`x~q zm&qqTgU`$QywK(SeV={j!pA@Qqd#nVthk?FTjg12{>ck}*+Q9st{$swAL|@#=#j#P zLNhl-({nX7Gr&AlWAa)=X_LQUz*XMHz^+gcim2p(zWjwR2^|BZu#~CrdeDixCgG6D z_-%;O0gnkHE~2ZjaMYyROvqP!<JdwU+JbY)dN^E52(j$osex}xY6$bwyHd*E0xke{ zgh?E^&=Qh}Z#`R}E~^ZNSB)WvAub+7Ya6__N3+ek>gOuYdGjmzQW(2AV&{X~0fA^I z)arWY){!QWyph||<(HL(=S>gq*Yw<c;nwu(%dbqAuUyszyZfFH(Kohy$YSn%)Puf? zH~d`m_fW_3c;g>8#8cnsJHy5;fRmk8_?xGpDGgDNo07s`^{0W;Q8g{3_o#vfR`?`8 z-AW<0O5h5|2yU`*42Wodic!cUZ1hIKFhaV&yHczGrcCk~9vx<YpwTt$iNP7Ewwq8= zdfdd9?Wk=rM4qLs@kgBfFSznDVP3>+d8=|DI7c$M2jHw3bctbM!=Ko-5(NMeN|cip zE0qti%tl!1J_s^jEJM7=%l@yVfkNzDvbkrEBoj<7I<OKK5P6|^is?d3SR79aJEZn- zTPVqhwIbSTJ26qG1z0!<EV&M^;PRBy@%JNRG%%Q^2s3^`H2{-sw3>)aP@W1INfiF+ zGG@e!XVJg~)xh&v0FW|&{-6GnNz?V|GoSpi>0=-Hh;Jmme(kCUA}`#yG5y6~e0RDd z|J^%x)iCKiwFV~)xR2Fg9q6J!ZY1VyMSS=5*k=?UXkmbXd32oO(rP!In%{&g%=om8 zR=|<tH{hD|YQoDRg5Px0QqV5YyQ)>Mb}2wK8NG>)l|@R0sEQCD9V#ODNscGT*^zre zLdc4bI}Xtyz=JHumyRD^76I6?kZ}q!$wxrQ#!=w}jLEnmDU~iNXdOjZ%^Q>UhzAsb zAimrQK$vV{_uGEKfIBSn&fUb5Fl*5O9)1sX$>ZfK*DU8xzWL4R^S}Jdj?;yBpeGbA zJ^0MO7Ol248B+GDB%?{n30j8;PgwB`&j^ZK7Nh~iIk<z5e1Zn)1L^2ap2iB!ktrg{ zCGPT;iMoVOTuuH+0VX5@ZEvFz))oz5&w*2<C*l|)V<=T}L^z8>#bss_<f=R(Ksfqq zvMi~`ucfaXmV;z*SQ+8=qL`dcsp4ZYd7@6sF92--Z4BFHk00xZhwBOa=ieM_lKABD zWl#25{2<TD(5^7)U>d;%ug{R1#k$x(fCe~*a!Y6ZUwQchUVNoprc91~VDwv*W|dv_ zgW&wuU;Sxp_t(z4oD@>%>2KWU1dHo|;d;0Y0zbGT`VdFm30L@{eKKn8(dpJuQ3vxm z$5J5$Y0Pq@+m<6Z=fF3T+uw_B5<}7Z`alP4jWjuCR*<5+p<V#QbP3&+;EHe6CCfp( zN!jF;EJ;(F<)%!a$Oqacxs<QuZM+bPN&k~4zMRL=im^z(BoRG95(<4cUsviO5a+XD zsx98Wq=m=&Q^Kq^B>}y(HhNHgXm|kFnXOjk1=?|bAV@!G%I=PIfz%IcFyWm8?JH%^ zQ6YceUvswbhp4O(4S<#w!4%eNaI5|`f<Y8c=!YmYY$c~c=ryU4*g?LmnE|#Dzs8V& zAtEIr+N~H{tSZy}_*#Nb628C}4O~nOJhugaKmW5ooBp?d{Ew&K_~DOEfA7Eed(#Ks zdNT*q8aQh5d096W^QNEMr7!6%5*GwMRL8_+M81%S!~1H`eAZgc5Q7%=dfFi%TN49! zf@(qBIqEGx&3UYRb9_L&?hInpo2-onAvz05iNO&qkbYhu;B8h8sA$+~qVE>aWkYnH z@M*whU^G0)^(0<25vSUs7OhWABBCRvp)|eZAPY0JYXsW>v6vAc6Z*kh{225FKAJ+@ zZu|9cx2D7VTWq0-f7ymQ>?7RcPxAaG&v62mvXCS?77TnFy4+>xP!A5COz*yXclz>I zzA}C1+u!zrOW`kqU7gS|3s*TAdd%mu^rOtG6oeYO+FU*=gVAASK5pkwqct}8D<BgK z1Pw6R6kj~>hKzs*o-z!sOuCx9fLm0eW^eEj?mW-9i5%LPM1zZ{5OS<CG)q)bcHlrn zlk0FQwgHC*qKraBDrGxBVSJ9Czzx7J?cx`o(_K*jVR^^~!&_|C1!O?3AI5&dAdS=~ z{_yjc^{WOKNU4E#gdZ}_^OJh-_Ew7@J95)j@pckjJW;#+=s=T7wZ-hMVk<fD#XLU^ zkRP1&f92KJrt3Fe&|80Y)yb&LQZ_NpBkH^Ig~b_;(D?#h^{KIYPP>zocQG+kj!{2` zpM{W*{^wEdaDo>kp5d@>^)aHTZ}_oCGxrx℞}fG^HfM7V&$Ek=mS$SqL-F7&mJF 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�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%0A`@o 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 Hc>TWsYxz56 literal 0 HcmV?d00001 diff --git a/test/integration/mesh.cc b/test/integration/mesh.cc index 3b8abd7ce..c13fadac8 100644 --- a/test/integration/mesh.cc +++ b/test/integration/mesh.cc @@ -134,10 +134,30 @@ TEST_F(MeshTest, Load) // Loading should be successful EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.dae")); EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.obj")); + EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.fbx")); + EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.glb")); // Reloading should not cause errors EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.dae")); EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.obj")); + EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.fbx")); + EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.glb")); + + // Forget about previously loaded meshes + EXPECT_TRUE(common::MeshManager::Instance()->RemoveMesh("box.dae")); + EXPECT_TRUE(common::MeshManager::Instance()->RemoveMesh("box.obj")); + EXPECT_TRUE(common::MeshManager::Instance()->RemoveMesh("box.fbx")); + EXPECT_TRUE(common::MeshManager::Instance()->RemoveMesh("box.glb")); + + // When forcing assimp, loading should still be successful for all formats + common::setenv("GZ_MESH_FORCE_ASSIMP", "true"); + common::MeshManager::Instance()->SetAssimpEnvs(); + EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.dae")); + EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.obj")); + EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.fbx")); + EXPECT_NE(nullptr, common::MeshManager::Instance()->Load("box.glb")); + EXPECT_EQ(nullptr, common::MeshManager::Instance()->Load("break.xml")); + common::unsetenv("GZ_MESH_FORCE_ASSIMP"); } ///////////////////////////////////////////////// From 5d576ba99a2495e9680fb283ab0cfccbcbe701f4 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Tue, 9 Aug 2022 22:30:31 -0500 Subject: [PATCH 187/219] Fix deprecation warning from new ffmpeg (#416) Closes #415 Signed-off-by: Michael Carroll <michael@openrobotics.org> --- av/src/AudioDecoder.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/av/src/AudioDecoder.cc b/av/src/AudioDecoder.cc index 4a99a0912..64f99d13a 100644 --- a/av/src/AudioDecoder.cc +++ b/av/src/AudioDecoder.cc @@ -149,7 +149,7 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) // decodedFrame->linesize[0]. int size = decodedFrame->nb_samples * av_get_bytes_per_sample(this->dataPtr->codecCtx->sample_fmt) * - this->dataPtr->codecCtx->channels; + this->dataPtr->codecCtx->ch_layout.nb_channels; // Resize the audio buffer as necessary if (*_outBufferSize + size > maxBufferSize) From 7e04a830d6573c5bb76ae018a5d3da31707081c2 Mon Sep 17 00:00:00 2001 From: Louise Poubel <louise@openrobotics.org> Date: Wed, 17 Aug 2022 09:29:14 -0700 Subject: [PATCH 188/219] =?UTF-8?q?=F0=9F=8E=88=204.5.2=20(#423)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Louise Poubel <louise@openrobotics.org> Signed-off-by: Louise Poubel <louise@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7fae654f6..19e1b66c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(ignition-common4 VERSION 4.5.1) +project(ignition-common4 VERSION 4.5.2) #============================================================================ # Find ignition-cmake diff --git a/Changelog.md b/Changelog.md index 3074684e4..1e1d44775 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,4 +1,36 @@ -## Ignition Common 4.x +## Gazebo Common 4.x + +## Gazebo Common 4.5.2 (2022-08-16) + +1. Fix deprecation warning from new `ffmpeg` + * [Pull request #421](https://github.com/gazebosim/gz-common/pull/421) + +1. Remove redundant namespace references + * [Pull request #414](https://github.com/gazebosim/gz-common/pull/414) + +1. Add code coverage ignore file + * [Pull request #394](https://github.com/gazebosim/gz-common/pull/394) + +1. Change `IGN_DESIGNATION` to `GZ_DESIGNATION` + * [Pull request #399](https://github.com/gazebosim/gz-common/pull/399) + +1. Ignition -> Gazebo + * [Pull request #396](https://github.com/gazebosim/gz-common/pull/396) + +1. Support absolute Win paths with forward slashes in `common::FindFile` + * [Pull request #389](https://github.com/gazebosim/gz-common/pull/389) + +1. Fix `FindSharedLibrary` for relative plugin paths + * [Pull request #382](https://github.com/gazebosim/gz-common/pull/382) + +1. Fix race condition in `FileLogger` + * [Pull request #378](https://github.com/gazebosim/gz-common/pull/378) + +1. Synchronize console writes + * [Pull request #227](https://github.com/gazebosim/gz-common/pull/227) + +1. Profiler tutorial: viewing from Docker container + * [Pull request #362](https://github.com/gazebosim/gz-common/pull/362) ## Ignition Common 4.5.1 (2022-06-21) From 68b5a7c0c686d3c25944b626d3b310b418cf058a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Onur=20Berk=20T=C3=B6re?= <otore19@ku.edu.tr> Date: Wed, 31 Aug 2022 00:52:07 +0300 Subject: [PATCH 189/219] Implement XDisplacement function for checking x displacement for all nodes (#411) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Onur Berk Tore <otore19@ku.edu.tr> Co-authored-by: Alejandro HernΓ‘ndez Cordero <ahcorde@gmail.com> --- .../include/gz/common/SkeletonAnimation.hh | 4 + graphics/src/AssimpLoader_TEST.cc | 17 + graphics/src/SkeletonAnimation.cc | 20 + graphics/src/SkeletonAnimation_TEST.cc | 35 + test/data/walk.dae | 1439 +++++++++++++++++ 5 files changed, 1515 insertions(+) create mode 100644 graphics/src/SkeletonAnimation_TEST.cc create mode 100644 test/data/walk.dae diff --git a/graphics/include/gz/common/SkeletonAnimation.hh b/graphics/include/gz/common/SkeletonAnimation.hh index c93924c72..4e4d686ba 100644 --- a/graphics/include/gz/common/SkeletonAnimation.hh +++ b/graphics/include/gz/common/SkeletonAnimation.hh @@ -64,6 +64,10 @@ namespace gz public: NodeAnimation *NodeAnimationByName(const std::string &_name) const; + /// \brief Check all nodes for x displacement + /// \return True if x displacement found + public: bool XDisplacement() const; + /// \brief Looks for a node with a specific name in the animations /// \param[in] _node the name of the node /// \return true if the node exits diff --git a/graphics/src/AssimpLoader_TEST.cc b/graphics/src/AssimpLoader_TEST.cc index a32a0a331..93a0f02c9 100644 --- a/graphics/src/AssimpLoader_TEST.cc +++ b/graphics/src/AssimpLoader_TEST.cc @@ -697,3 +697,20 @@ TEST_F(AssimpLoader, LoadGlbPbrAsset) EXPECT_STREQ("Action2", skel->Animation(1)->Name().c_str()); EXPECT_STREQ("Action3", skel->Animation(2)->Name().c_str()); } + +///////////////////////////////////////////////// +// Checks for null root node animation and valid +// x displacement in non root node's animation. +TEST_F(AssimpLoader, CheckNonRootDisplacement) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load(common::testing::TestFile("data", + "walk.dae")); + auto meshSkel = mesh->MeshSkeleton(); + std::string rootNodeName = meshSkel->RootNode()->Name(); + common::SkeletonAnimation *skelAnim = meshSkel->Animation(0); + common::NodeAnimation *rootNode = skelAnim->NodeAnimationByName(rootNodeName); + EXPECT_EQ(nullptr, rootNode); + auto xDisplacement = skelAnim->XDisplacement(); + ASSERT_TRUE(xDisplacement); +} diff --git a/graphics/src/SkeletonAnimation.cc b/graphics/src/SkeletonAnimation.cc index cc6fd4fae..b7c6d38bb 100644 --- a/graphics/src/SkeletonAnimation.cc +++ b/graphics/src/SkeletonAnimation.cc @@ -75,6 +75,26 @@ NodeAnimation *SkeletonAnimation::NodeAnimationByName( return nullptr; } +////////////////////////////////////////////////// +bool SkeletonAnimation::XDisplacement() const +{ + bool xDisplacement = false; + for (auto iter = this->dataPtr->animations.begin(); + iter != this->dataPtr->animations.end(); ++iter) + { + auto node = iter->second; + math::Matrix4d lastPos = node->KeyFrame(node->FrameCount() - 1).second; + math::Matrix4d firstPos = node->KeyFrame(0).second; + xDisplacement = !math::equal(firstPos.Translation().X(), + lastPos.Translation().X()); + if (xDisplacement) + { + break; + } + } + return xDisplacement; +} + ////////////////////////////////////////////////// bool SkeletonAnimation::HasNode(const std::string &_node) const { diff --git a/graphics/src/SkeletonAnimation_TEST.cc b/graphics/src/SkeletonAnimation_TEST.cc new file mode 100644 index 000000000..61e748696 --- /dev/null +++ b/graphics/src/SkeletonAnimation_TEST.cc @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#include <gtest/gtest.h> + +#include "gz/common/Skeleton.hh" +#include "gz/common/SkeletonAnimation.hh" + +#include "gz/common/testing/AutoLogFixture.hh" +#include "gz/common/testing/TestPaths.hh" + +using namespace gz; +class SkeletonAnimation : public common::testing::AutoLogFixture { }; + +///////////////////////////////////////////////// +TEST_F(SkeletonAnimation, CheckNoXDisplacement) +{ + common::SkeletonAnimation* skelAnim = + new common::SkeletonAnimation("emptyAnimation"); + auto xDisplacement = skelAnim->XDisplacement(); + ASSERT_FALSE(xDisplacement); +} diff --git a/test/data/walk.dae b/test/data/walk.dae new file mode 100644 index 000000000..494d01f15 --- /dev/null +++ b/test/data/walk.dae @@ -0,0 +1,1439 @@ +<?xml version="1.0" encoding="utf-8"?> +<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1"> + <asset> + <contributor> + <author>Blender User</author> + <authoring_tool>Blender 2.63.5 r46744</authoring_tool> + </contributor> + <created>2012-05-19T18:37:55</created> + <modified>2012-05-19T18:37:55</modified> + <unit name="meter" meter="1"/> + <up_axis>Z_UP</up_axis> + </asset> + <library_effects> + <effect id="eyes-white-effect"> + <profile_COMMON> + <technique sid="common"> + <phong> + <emission> + <color sid="emission">0 0 0 1</color> + </emission> + <ambient> + <color sid="ambient">0.6220113 0.6209189 0.64 1</color> + </ambient> + <diffuse> + <color sid="diffuse">0.6220113 0.6209189 0.64 1</color> + </diffuse> + <specular> + <color sid="specular">1 1 1 1</color> + </specular> + <shininess> + <float sid="shininess">23</float> + </shininess> + <index_of_refraction> + <float sid="index_of_refraction">1</float> + </index_of_refraction> + </phong> + </technique> + </profile_COMMON> + </effect> + <effect id="eyes-brown-effect"> + <profile_COMMON> + <technique sid="common"> + <phong> + <emission> + <color sid="emission">0 0 0 1</color> + </emission> + <ambient> + <color sid="ambient">0.1969495 0.07701492 0.03641987 1</color> + </ambient> + <diffuse> + <color sid="diffuse">0.1969495 0.07701492 0.03641987 1</color> + </diffuse> + <specular> + <color sid="specular">0.7712766 0.7712766 0.7712766 1</color> + </specular> + <shininess> + <float sid="shininess">50</float> + </shininess> + <index_of_refraction> + <float sid="index_of_refraction">1</float> + </index_of_refraction> + </phong> + </technique> + </profile_COMMON> + </effect> + <effect id="eyes-black-effect"> + <profile_COMMON> + <technique sid="common"> + <lambert> + <emission> + <color sid="emission">0 0 0 1</color> + </emission> + <ambient> + <color sid="ambient">0 0 0 1</color> + </ambient> + <diffuse> + <color sid="diffuse">0 0 0 1</color> + </diffuse> + <index_of_refraction> + <float sid="index_of_refraction">1</float> + </index_of_refraction> + </lambert> + </technique> + </profile_COMMON> + </effect> + <effect id="skin-mat-effect"> + <profile_COMMON> + <technique sid="common"> + <phong> + <emission> + <color sid="emission">0 0 0 1</color> + </emission> + <ambient> + <color sid="ambient">0.8 0.5508701 0.3938254 1</color> + </ambient> + <diffuse> + <color sid="diffuse">0.8 0.5508701 0.3938254 1</color> + </diffuse> + <specular> + <color sid="specular">0.106383 0.106383 0.106383 1</color> + </specular> + <shininess> + <float sid="shininess">50</float> + </shininess> + <index_of_refraction> + <float sid="index_of_refraction">1</float> + </index_of_refraction> + </phong> + </technique> + </profile_COMMON> + </effect> + <effect id="sweater-green-effect"> + <profile_COMMON> + <technique sid="common"> + <phong> + <emission> + <color sid="emission">0 0 0 1</color> + </emission> + <ambient> + <color sid="ambient">0.09837106 0.254824 0.07500499 1</color> + </ambient> + <diffuse> + <color sid="diffuse">0.09837106 0.254824 0.07500499 1</color> + </diffuse> + <specular> + <color sid="specular">0.05319149 0.05319149 0.05319149 1</color> + </specular> + <shininess> + <float sid="shininess">50</float> + </shininess> + <index_of_refraction> + <float sid="index_of_refraction">1</float> + </index_of_refraction> + </phong> + </technique> + </profile_COMMON> + </effect> + <effect id="jeans-blue-effect"> + <profile_COMMON> + <technique sid="common"> + <phong> + <emission> + <color sid="emission">0 0 0 1</color> + </emission> + <ambient> + <color sid="ambient">0.05706184 0.09248417 0.3508265 1</color> + </ambient> + <diffuse> + <color sid="diffuse">0.05706184 0.09248417 0.3508265 1</color> + </diffuse> + <specular> + <color sid="specular">0.1329787 0.1329787 0.1329787 1</color> + </specular> + <shininess> + <float sid="shininess">50</float> + </shininess> + <index_of_refraction> + <float sid="index_of_refraction">1</float> + </index_of_refraction> + </phong> + </technique> + </profile_COMMON> + </effect> + </library_effects> + <library_materials> + <material id="eyes-white-material" name="eyes-white-material"> + <instance_effect url="#eyes-white-effect"/> + </material> + <material id="eyes-brown-material" name="eyes-brown-material"> + <instance_effect url="#eyes-brown-effect"/> + </material> + <material id="eyes-black-material" name="eyes-black-material"> + <instance_effect url="#eyes-black-effect"/> + </material> + <material id="skin-mat-material" name="skin-mat-material"> + <instance_effect url="#skin-mat-effect"/> + </material> + <material id="sweater-green-material" name="sweater-green-material"> + <instance_effect url="#sweater-green-effect"/> + </material> + <material id="jeans-blue-material" name="jeans-blue-material"> + <instance_effect url="#jeans-blue-effect"/> + </material> + </library_materials> + <library_geometries> + <geometry id="_6-mesh" name="16"> + <mesh> + <source id="_6-mesh-positions"> + <float_array id="_6-mesh-positions-array" count="23535">0.2984101 0.08499991 0.4855901 -0.2985001 0.0843299 0.48499 0.2946401 0.03725993 0.4691601 -0.2947401 0.03712993 0.4691701 0.29527 -0.005990028 0.4840201 -0.2956801 -0.005950033 0.48394 0.2987101 -0.02140009 0.5204601 -0.2991601 -0.02131009 0.5202701 0.30923 -0.007650077 0.55985 -0.30893 -0.007800042 0.5597101 0.3123201 0.03017991 0.5815701 -0.3119401 0.0296899 0.5815701 0.3094701 0.07236987 0.5707901 -0.30958 0.07239991 0.5708101 0.3034101 0.1034799 0.5254501 -0.30265 0.1035499 0.5260502 0.5135601 0.06770992 0.4851801 -0.5132001 0.06832993 0.48571 0.5136402 0.07711988 0.5309101 -0.5134902 0.07700991 0.5314501 0.5123101 0.0611599 0.5583702 -0.5128301 0.0621199 0.5571401 0.5153701 0.02645987 0.5764202 -0.5158001 0.02705991 0.5763001 0.5156801 -0.007400035 0.5597602 -0.5155901 -0.007590055 0.5595 0.5163201 -0.01826006 0.5231601 -0.5158901 -0.01830005 0.5227501 0.5153802 -0.003640055 0.4777201 -0.5157901 -0.003880023 0.47799 0.5142002 0.03537988 0.4676801 -0.5139201 0.03574991 0.4677801 0.5867902 0.03347992 0.4634401 -0.5870501 0.03305989 0.4634301 0.5837902 0.06533992 0.4827901 -0.5835701 0.06575989 0.4831401 0.5870901 -0.004710018 0.47636 -0.5869302 -0.004740059 0.4764301 0.5873002 -0.01981008 0.5181201 -0.5871102 -0.01984006 0.5184901 0.5870901 -0.006120085 0.5596101 -0.5870401 -0.006510078 0.5592001 0.5866002 0.03011989 0.5732401 -0.5861802 0.03107988 0.5728701 0.5830902 0.06164991 0.5538401 -0.5826801 0.06230992 0.5532001 0.5830602 0.07876992 0.5217301 -0.5830602 0.07885992 0.5209501 0.7517602 0.06204992 0.5224401 -0.7514202 0.06205987 0.5225501 0.7474602 0.05690991 0.5015501 -0.7474602 0.05734992 0.5018901 0.7462602 0.05519992 0.5429902 -0.7460302 0.05546993 0.5427702 0.7457102 0.02626991 0.5507701 -0.7455402 0.02672988 0.5508502 0.7454901 -0.001870036 0.5396001 -0.7452202 -0.002160072 0.5391601 0.7467201 -0.009980082 0.5228201 -0.7467201 -0.01005005 0.5224002 0.7445702 0.003579914 0.5005501 -0.7454002 0.003089904 0.5010401 0.7477302 0.02890992 0.4935801 -0.7478602 0.02930992 0.4936301 0.2705301 0.08639991 0.4890701 -0.27092 0.08593994 0.4886801 0.2794901 0.1038299 0.5294701 -0.2801901 0.1036599 0.5298301 0.2852801 0.07434988 0.5728001 -0.28539 0.07439988 0.5727602 0.28667 0.02969986 0.5855402 -0.28662 0.0296899 0.5855302 0.2840301 -0.00766009 0.5670701 -0.28378 -0.007590055 0.5672501 0.2762501 -0.02388006 0.5289402 -0.2759401 -0.02380007 0.5287801 0.2656801 -0.008520066 0.4905101 -0.26596 -0.009000062 0.4908401 0.26797 0.03496992 0.4733201 -0.2680901 0.0344699 0.4734801 0.22678 0.0371899 0.4728801 -0.22609 0.0358299 0.4732 0.22268 -0.01427006 0.4889101 -0.22184 -0.01563006 0.4899601 0.22744 -0.03455007 0.5428801 -0.22718 -0.03460007 0.5425602 0.22593 -0.01333004 0.5788502 -0.22596 -0.01326006 0.5789101 0.22276 0.02483987 0.5978001 -0.22279 0.0248599 0.5978001 0.22684 0.07929992 0.5861201 -0.22682 0.0793299 0.5861102 0.22203 0.1055699 0.5354201 -0.2221 0.1055599 0.5354201 0.20876 0.09461992 0.4688801 -0.2090801 0.0954799 0.4695301 0.18478 0.1007199 0.44602 -0.18445 0.1009999 0.4457901 0.17867 -0.02103006 0.4656001 -0.17838 -0.02125006 0.4654301 0.19931 0.03948992 0.4456401 -0.19966 0.03949993 0.4455701 0.1731 0.1066499 0.5599501 -0.17331 0.1067799 0.5596901 0.15272 0.07460987 0.5850728 -0.15276 0.0747599 0.585894 0.18363 0.03334987 0.5967678 -0.18369 0.03326988 0.5969799 0.17872 -0.004010081 0.5869377 -0.17899 -0.003580093 0.5877275 0.16099 -0.01888006 0.5637118 -0.1604 -0.01845008 0.5644468 0.18292 -0.03421008 0.5245901 -0.18278 -0.03413009 0.5240401 0.13093 -0.02987009 0.5422934 -0.13078 -0.02985006 0.5425512 0.1892 0.1265799 0.4897801 -0.18882 0.1257399 0.4860901 0.15049 0.1307599 0.5151401 -0.15068 0.1305799 0.5156301 0.13985 -0.06198006 0.5081401 -0.14007 -0.06197005 0.5077201 0.09680998 -0.05527007 0.5421031 -0.09670001 -0.05521005 0.542039 0.03051996 -0.09435009 0.4868801 -0.03066998 -0.09423005 0.4871801 0.02794998 -0.07295006 0.5243985 -0.02783 -0.07304006 0.5250379 4.9e-4 -0.1002201 0.48078 1e-4 -0.08491009 0.502563 0.16651 0.08839994 0.4190801 -0.16631 0.08846992 0.4187101 0.17743 0.0239399 0.4219201 -0.17787 0.02552992 0.4222201 0.1688 -0.03993004 0.4517001 -0.16797 -0.04216003 0.4516101 0.16197 0.0101099 0.3974601 -0.16185 0.009719908 0.3974801 0.15679 -0.04329007 0.4314601 -0.15653 -0.04403007 0.4316701 0.15689 0.07806992 0.3782301 -0.15617 0.07990992 0.3784401 0.14389 -0.008370041 0.31292 -0.14394 -0.008220016 0.3129801 0.14107 0.06823992 0.3199101 -0.13789 0.06745994 0.31402 0.13541 -0.06623005 0.35514 -0.13618 -0.06513005 0.3555701 0.13455 -0.04594004 0.2958101 -0.13464 -0.04555004 0.29587 0.14166 0.002429902 0.2801501 -0.14165 0.002249956 0.28009 0.11999 0.06153994 0.2845401 -0.11935 0.06137996 0.28415 0.02265995 -0.1163701 0.4707301 -0.02287 -0.1162301 0.4711101 0.001829981 -0.1102601 0.4583001 0.11977 -0.08477008 0.4669101 -0.11983 -0.08476006 0.46674 0.12066 -0.09002006 0.42133 -0.12059 -0.09019005 0.4221001 0.01556998 -0.1095401 0.4341701 -0.01541 -0.1095201 0.43375 -0.00288999 -0.1170901 0.4269101 -0.003029942 -0.1271401 0.37278 0.03428995 -0.1292001 0.37324 -0.03411996 -0.12933 0.3730201 0.09738999 -0.08710008 0.3908801 -0.09785002 -0.08704006 0.3918001 0.03475999 -0.13134 0.3247 -0.03429996 -0.1313201 0.32561 0.10664 -0.09754008 0.32015 -0.10681 -0.09737002 0.32082 -5.4e-4 -0.13301 0.3267101 0.15191 -7.80056e-4 0.3508101 -0.15189 -7.80056e-4 0.3506401 0.14783 0.07426995 0.3448401 -0.14647 0.07519996 0.3435001 0.1434 -0.05261003 0.40236 -0.1439 -0.05168002 0.4019801 0.05966001 -0.0572201 0.5381872 -0.05966997 -0.05729007 0.5386042 0.06595999 -0.08260005 0.4976701 -0.06602001 -0.08254009 0.4977701 0.06128001 -0.1120101 0.4718501 -0.06165999 -0.1115901 0.4730301 0.06081998 -0.1148801 0.43654 -0.06019997 -0.1151301 0.43584 0.07121002 -0.1059401 0.3980301 -0.07182997 -0.10615 0.39964 0.07084 -0.1205 0.3287301 -0.07129001 -0.1203801 0.32778 0.09646999 0.09283995 0.3277001 -0.09621 0.09257996 0.3271701 0.10012 0.1065199 0.3537801 -0.09991997 0.1066799 0.3539301 0.11397 0.11719 0.3874001 -0.1138 0.11746 0.3878001 0.09087002 0.07510995 0.2970401 -0.08999001 0.07510995 0.2966201 0.1194 0.1273199 0.4227401 -0.11999 0.1270899 0.42306 0.12561 0.1403799 0.4665001 -0.12516 0.1404699 0.46639 0.10648 0.1372099 0.5048502 -0.10673 0.1371099 0.5051601 0.08897 0.1397899 0.4594201 -0.08895999 0.1398 0.4595401 0.08279001 0.1294299 0.4194401 -0.08276998 0.1294299 0.4194201 0.08502 0.12212 0.3817901 -0.08499997 0.1221799 0.3819101 0.05974 0.1007199 0.3320701 -0.05970001 0.1006999 0.33205 0.05544 0.07966995 0.3003101 -0.05536997 0.07964998 0.3002701 0.07016998 0.1102899 0.3512001 -0.07020998 0.1102899 0.35124 0.12306 0.1158599 0.5520402 -0.12334 0.1159399 0.5518801 0.04715001 0.1460799 0.5024301 -0.04758 0.1460999 0.5027301 0.03092998 0.1070399 0.3477101 -0.03086996 0.1070299 0.3477001 0.03219997 0.09648996 0.32442 -0.03204995 0.09652996 0.3244801 0.03323 0.1289699 0.3805201 -0.0327 0.1289199 0.3804801 0.02548998 0.07860994 0.29396 -0.02546995 0.07866996 0.29404 0.04275 0.1373 0.4183701 -0.04282999 0.1373599 0.4186701 0.04739999 0.1437999 0.4615501 -0.04737997 0.1437999 0.4614601 0.001169979 0.13571 0.4973001 -0.001719951 0.1426799 0.4559101 4.5e-4 0.1250499 0.4099501 9e-4 0.1149799 0.3661801 -2.3e-4 0.08249998 0.3088501 1.9e-4 0.06644994 0.29448 -9e-4 0.1020199 0.3334301 0.08112001 0.1181899 0.5729616 -0.08143001 0.1179399 0.5729855 -1.8e-4 0.1216699 0.5553501 -0.001459956 0.06704998 0.25001 0.02990996 0.07099997 0.25333 -0.02992999 0.07100993 0.25353 0.06294 0.07046997 0.25951 -0.06256997 0.07049995 0.25902 0.1017 0.05612993 0.26385 -0.10078 0.05689996 0.26433 0.12923 0.04530996 0.25986 -0.12985 0.04428994 0.26082 0.03700995 -0.1305 0.27903 -0.03725999 -0.1304801 0.27876 0.07081997 -0.11922 0.28533 -0.07077997 -0.1192501 0.28545 0.10477 -0.09708005 0.28649 -0.10476 -0.09710007 0.28685 0.1341 -0.04555004 0.27463 -0.13412 -0.04542005 0.2743 1.6e-4 -0.1345301 0.27506 0.14292 -5.40041e-4 0.2594 -0.14322 -0.001780033 0.26068 0.15694 -0.01003998 0.21726 -0.15678 -0.009339988 0.21757 0.14422 -0.05415004 0.23737 -0.14418 -0.05427002 0.23723 0.13534 0.04902994 0.21346 -0.13656 0.04744994 0.21427 4.5e-4 -0.13297 0.25067 0.03858 -0.1438201 0.23768 -0.03788 -0.1440801 0.23731 0.10984 -0.10944 0.24872 -0.11002 -0.10922 0.24897 0.07318997 -0.1349601 0.2451 -0.07230997 -0.13546 0.24429 0.10208 0.05981993 0.21669 -0.1011 0.05998992 0.2174 0.06463998 0.07540994 0.21739 -0.06312 0.07515996 0.21893 0.03095996 0.07593995 0.21847 -0.03046 0.07594996 0.21884 0.00345999 0.07845997 0.21442 0.01014 0.09833997 0.14567 0.03745996 0.09302997 0.14726 -0.03689998 0.09288996 0.14739 0.07128 0.08970999 0.16206 -0.07118999 0.08981996 0.16184 0.10528 0.06951999 0.16594 -0.10526 0.06955999 0.16586 0.13499 0.05896997 0.16625 -0.13477 0.05937993 0.16594 0.07937997 -0.14245 0.18212 -0.07862001 -0.1428 0.18264 0.04171997 -0.1493101 0.17247 -0.04101997 -0.14951 0.17271 0.11335 -0.11672 0.17965 -0.11152 -0.1179 0.17903 0.14748 -0.0521 0.17203 -0.1475 -0.05200999 0.17211 -0.001069962 -0.15184 0.1689 0.16084 -0.00634998 0.16148 -0.161 -0.006340026 0.1606 0.05855399 0.1036681 0.593577 -0.05847024 0.104269 0.5907019 5.2e-4 0.1101099 0.5819801 0.1054124 0.06264114 0.6025689 -0.10535 0.06306988 0.6018401 0.02215999 -0.05843007 0.5494301 -0.02208995 -0.05844008 0.5494101 0.04350996 -0.05044007 0.5572201 -0.04346001 -0.05052006 0.5571601 0.07392001 -0.04013007 0.5626401 -0.07411998 -0.04014009 0.5625201 3e-5 -0.06228005 0.5286101 0.09136003 -0.01680004 0.57249 -0.09169 -0.01702004 0.5723201 0.110086 -0.001675486 0.5822618 -0.1108087 -0.002880811 0.5821724 0.12006 0.009859859 0.5905701 -0.1199588 0.01031208 0.5920455 0.1190064 0.03211224 0.5973571 -0.1193698 0.03493797 0.5977707 0.08242237 0.07157397 0.6194552 -0.0664606 0.07581812 0.6210434 0.09190231 0.0346167 0.6231028 -0.07473528 0.03824067 0.6209589 0.09418803 0.01422637 0.621683 -0.07612282 0.01703703 0.619434 0.08594846 -0.002650082 0.6110101 -0.07401001 -0.002680063 0.6111201 0.0767585 -0.01149004 0.5943401 -0.06445997 -0.01160007 0.5946702 0.05105996 -0.02810007 0.5821802 -0.05116999 -0.02802008 0.5822502 0.03817999 -0.03756004 0.5743601 -0.03872001 -0.03738009 0.5742801 0.04083001 0.0951699 0.6099001 -0.04084998 0.09519988 0.6098302 0.002449989 0.09792989 0.6085201 0.05107486 0.1110999 0.6158102 -0.04385995 0.1111199 0.6156801 0.003169953 0.1133899 0.6124801 0.08489334 0.07840991 0.6244401 -0.06523001 0.07877987 0.6243901 0.05435997 -0.04640007 0.5877501 -0.05497997 -0.04610008 0.5878301 0.04034 -0.06397008 0.5806102 -0.03946995 -0.06374007 0.5807901 0.08396852 -0.02197009 0.5983501 -0.07099997 -0.02219009 0.5992102 0.08830851 -0.005760073 0.6117302 -0.07630997 -0.005770087 0.6119001 0.09453338 0.0148999 0.6235601 -0.07635998 0.0167399 0.6230701 0.09150338 0.03924989 0.6261701 -0.07275998 0.04025989 0.6255502 0.10203 0.08333992 0.6049302 -0.10194 0.08358991 0.6047401 0.12551 0.04215991 0.5999901 -0.12534 0.04288989 0.6001701 0.1268 0.009659886 0.5880901 -0.12681 0.009819865 0.5881701 0.11592 -0.01735007 0.5809102 -0.11689 -0.01990008 0.5790702 0.09961003 -0.04332005 0.5673502 -0.10012 -0.04371005 0.5671502 0.07081997 -0.0640701 0.5552301 -0.07093 -0.06402009 0.5552601 0.03771001 -0.0840401 0.5378901 -0.03689998 -0.08491009 0.5367001 0.05004 0.1243399 0.5862502 -0.04957997 0.1241899 0.5864602 0.009139955 0.1181899 0.5764701 0.1378 -0.04818999 0.17087 -0.13781 -0.04817998 0.17088 0.14698 -0.007149994 0.15908 -0.14701 -0.007149994 0.15892 0.12483 0.04949998 0.16212 -0.12478 0.04958993 0.16205 0.03968 -0.12997 0.1748999 -0.03956997 -0.13 0.17492 -7.1e-4 -0.13422 0.17109 0.10421 -0.10036 0.17998 -0.10412 -0.10042 0.17994 0.07355999 -0.12182 0.18344 -0.07340997 -0.1219 0.18355 0.10487 0.06507998 0.16551 -0.10487 0.06508994 0.16549 0.07186001 0.08610999 0.16327 -0.07182997 0.08618998 0.16314 0.03914999 0.09088999 0.15059 -0.03859996 0.09078997 0.15064 0.01084995 0.08430999 0.14417 0.4020701 0.07667994 0.4863401 -0.4019001 0.07659989 0.4862501 0.4059801 0.09039992 0.5270301 -0.4059901 0.09036993 0.5272301 0.4094701 0.06328988 0.5713502 -0.4095301 0.0633099 0.5713301 0.4087601 0.02414989 0.5789201 -0.4088301 0.02436989 0.5789801 0.4025501 -0.008220076 0.5585802 -0.4024501 -0.008050084 0.5587701 0.3951401 -0.03756004 0.5226001 -0.3944401 -0.03750008 0.5237701 0.3879601 -0.02093005 0.4830101 -0.3875501 -0.02154004 0.4838501 0.3954401 0.03500992 0.4721301 -0.3954801 0.03510993 0.4721101 0.6771302 0.05850988 0.4921401 -0.6770702 0.05864989 0.4922601 0.6772401 0.06657993 0.5157601 -0.6772301 0.06658989 0.5158001 0.6787102 0.0550999 0.5435401 -0.6787801 0.05527991 0.5433201 0.6764702 0.02923989 0.5599501 -0.6764702 0.03107988 0.5597301 0.6759302 -0.002500057 0.5462401 -0.6758202 -0.003460049 0.5450202 0.6751402 -0.01445007 0.5169601 -0.6752701 -0.01455008 0.5178001 0.6753902 0.002939879 0.4862301 -0.6753402 0.002229869 0.4871 0.6742402 0.03997993 0.4758601 -0.6743402 0.03961992 0.4757301 0.6824102 0.06010991 0.4900001 -0.6823301 0.06034994 0.4902101 0.6795002 0.04117989 0.4726601 -0.6796102 0.04079991 0.47249 0.6808302 2.79923e-4 0.4841501 -0.6808202 -8.80077e-4 0.4854101 0.6802302 -0.01770007 0.5176801 -0.6805102 -0.01780009 0.5186701 0.6812502 -0.004560053 0.5482301 -0.6810601 -0.006030082 0.5463501 0.6817202 0.02841991 0.5628501 -0.6818001 0.03103989 0.5626201 0.6839902 0.05644989 0.5464601 -0.6841902 0.05701988 0.5457901 0.6816102 0.06959992 0.5144601 -0.6815802 0.06960994 0.5145901 0.7442601 0.06016993 0.4987502 -0.7442102 0.06087988 0.4993601 0.7453302 0.02723991 0.4908001 -0.7454002 0.02847993 0.4908301 0.7409602 8.19921e-4 0.4979601 -0.7419302 -5.20079e-4 0.49954 0.7430902 -0.01555007 0.5237201 -0.7430502 -0.01574003 0.5226001 0.7414302 -0.005410075 0.5413101 -0.7410302 -0.005910038 0.5405501 0.7423702 0.02513986 0.5531702 -0.7422902 0.02600991 0.5532701 0.7430202 0.05736988 0.5450202 -0.7428102 0.0581299 0.5444 0.7452602 0.07144993 0.5177001 -0.7446802 0.07131993 0.5174601 0.5252401 0.06756991 0.4844901 -0.5248501 0.06824994 0.4850901 0.5261002 0.03281992 0.4660701 -0.5259901 0.03286993 0.4661601 0.5283001 -0.004120051 0.4772301 -0.5286001 -0.004250049 0.4774401 0.5277301 -0.01706004 0.5231801 -0.5273202 -0.01708006 0.5227301 0.5278602 -0.006960034 0.5600401 -0.5277601 -0.007120072 0.5598301 0.5276601 0.02781987 0.5762702 -0.5278801 0.02806991 0.5761901 0.5231202 0.06175988 0.5560401 -0.5234401 0.06223988 0.5554102 0.5253001 0.07760989 0.5294201 -0.5252202 0.0775699 0.5296502 0.4953101 0.06877994 0.4901001 -0.4952501 0.06881994 0.4901301 0.4960501 0.07868993 0.5302501 -0.4952601 0.07819992 0.5315402 0.4968701 0.06078988 0.5613701 -0.4976201 0.06226992 0.5594701 0.4983201 0.02589988 0.5766302 -0.4991301 0.02715986 0.5763601 0.4988801 -0.008440077 0.5588301 -0.4987601 -0.008660078 0.5585301 0.4985101 -0.02010005 0.5199401 -0.4981001 -0.02017009 0.5195801 0.4968001 -0.004310071 0.4830601 -0.4972701 -0.004560053 0.4833101 0.4961102 0.03327989 0.4722201 -0.4957501 0.03365993 0.4723301 0.23521 0.03620988 0.4722301 -0.2344101 0.03434991 0.4727901 0.22746 0.0899499 0.4759601 -0.22755 0.09115993 0.4768801 0.23115 -0.01361006 0.4904201 -0.23034 -0.01592004 0.49217 0.25238 -0.03328007 0.5408401 -0.2511301 -0.03372007 0.5405601 0.2546101 -0.01397007 0.5757102 -0.2545101 -0.01389008 0.5758201 0.25534 0.0263499 0.5957601 -0.2554301 0.02649986 0.5957601 0.25586 0.07799988 0.5851902 -0.2559301 0.0781399 0.5851101 0.2465201 0.1072599 0.5346801 -0.24664 0.1071599 0.5352301 0.10704 0.04382008 -0.7315703 -0.10871 0.04223012 -0.7303402 0.11747 0.007350087 -0.7330502 -0.11739 0.007900118 -0.7330302 0.09447997 -0.04577988 -0.7262102 -0.09400999 -0.04618984 -0.7260402 0.06598001 -0.05458986 -0.7288902 -0.06588 -0.05481988 -0.7300502 0.04698997 -0.04052984 -0.7219302 -0.04749 -0.04088985 -0.7215602 0.03191995 0.001080095 -0.7316802 -0.03185999 0.001850068 -0.7319702 0.05549001 0.05693012 -0.7266502 -0.06190997 0.06098008 -0.7277802 0.09285002 0.06164008 -0.7252702 -0.09100002 0.06235009 -0.7248702 0.1299 0.02512001 -0.3338901 -0.13008 0.02527004 -0.3339801 0.09460997 0.05241006 -0.3308601 -0.09654998 0.05189001 -0.3302001 0.04243999 0.03054004 -0.3352401 -0.04335999 0.03153002 -0.3342101 0.01734995 -0.0369299 -0.3248301 -0.01734995 -0.03748995 -0.3246901 0.05089998 -0.09772992 -0.3341001 -0.05065 -0.09781992 -0.3331001 0.11046 -0.1089699 -0.3334401 -0.10863 -0.1096299 -0.3341301 0.131 -0.07202994 -0.3353301 -0.13046 -0.07244992 -0.3361101 0.13051 -0.03059995 -0.3390801 -0.13072 -0.02971994 -0.3387401 0.16127 -0.02613997 0.07487994 -0.16127 -0.02612 0.07487994 0.15299 0.06151998 0.05832999 -0.15284 0.06182998 0.05832999 0.14496 -0.08790999 0.07373994 -0.14488 -0.08803999 0.07360994 0.08635002 -0.12554 0.03638994 -0.08564001 -0.12526 0.03698992 0.01721996 -0.09715998 0.01503992 -0.01703 -0.09689003 0.01606994 -0.009179949 -0.02787995 -0.009580016 0.008839964 -0.02801996 -0.01207 0.009350001 0.07480001 0.002809941 -0.01043999 0.07472997 0.002149939 0.07494002 0.11218 0.02149999 -0.07424998 0.11207 0.02142 0.06712996 0.11693 0.10214 -0.06585997 0.11698 0.10232 0.14084 0.05599999 0.12279 -0.14074 0.05631995 0.12246 0.01385998 0.09206998 0.02982997 -0.01489996 0.09314 0.03044998 -0.008879959 -0.02318 0.004449963 0.00841999 -0.02336996 -3.00277e-5 0.02179998 -0.09242999 0.04081994 -0.02199 -0.09259003 0.04089993 0.08599001 -0.12053 0.08917993 -0.08631002 -0.12059 0.08961993 0.13686 -0.08707004 0.12044 -0.13759 -0.08596003 0.12014 0.15781 -0.02250999 0.1246 -0.15777 -0.02250999 0.12463 0.14101 -0.02121001 0.203 -0.14101 -0.02123999 0.20308 0.12173 0.04107993 0.19906 -0.12208 0.04038995 0.19962 0.1207 -0.08587002 0.20483 -0.12078 -0.08579003 0.20494 -0.002339959 -0.14049 0.07954996 3.8e-4 -0.03257 0.01583993 -0.008129954 0.09179997 0.05158001 0.06497997 0.06995993 0.19555 -0.06393998 0.07005995 0.1955 0.17311 -0.03610998 -0.04948002 -0.17308 -0.03587996 -0.04961001 0.16013 0.03109002 -0.05616998 -0.15994 0.03139996 -0.05608999 0.16788 -0.09217 -0.04773002 -0.16761 -0.09258002 -0.04781001 0.08666002 -0.13916 -0.06937003 -0.08781999 -0.13929 -0.06911003 0.02583998 -0.10669 -0.08545005 -0.02667999 -0.1078 -0.08519005 0.005899965 -0.04472994 -0.08536005 -0.005899965 -0.04475998 -0.08527004 0.01172995 0.02679002 -0.08641999 -0.01168996 0.02601999 -0.08724999 0.09087002 0.05931001 -0.07568001 -0.09005999 0.05939 -0.07678002 0.08720999 0.07882004 -0.4559101 -0.08741003 0.07887005 -0.4560102 0.12886 0.05858004 -0.4568302 -0.12903 0.05846005 -0.4567401 0.03971999 0.06218004 -0.4542602 -0.04074001 0.06298005 -0.4538201 0.02424997 0.01553004 -0.4531101 -0.02425998 0.01572006 -0.4531801 0.04053997 -0.03296989 -0.4458501 -0.04126 -0.0338599 -0.4461702 0.09298002 -0.06208992 -0.4543702 -0.09314 -0.06205993 -0.4543601 0.12895 -0.03373992 -0.4567601 -0.1288 -0.03399991 -0.4566701 0.14773 0.01457005 -0.4635102 -0.14769 0.01505005 -0.4636501 -0.002219974 -0.14596 0.12426 0.007869958 0.09605997 0.10921 0.15165 -0.01775002 0.16228 -0.15172 -0.01780003 0.16194 0.13025 0.05379998 0.16764 -0.13019 0.05391997 0.16754 0.1315 -0.08554005 0.164 -0.13151 -0.08553004 0.16392 0.07015001 -0.13148 0.15468 -0.06986999 -0.13155 0.15455 0.06804001 0.09327995 0.15757 -0.06779998 0.09341996 0.15725 0.007699966 0.09498 0.14965 9.9e-4 0.07182997 0.18736 -9.4e-4 -0.14583 0.1528199 6.2e-4 -0.1451801 0.17833 0.06294 -0.12548 0.18191 -0.06274998 -0.12556 0.18203 0.17016 -0.03758001 0.008339941 -0.17018 -0.03740996 0.008259952 0.15583 0.04497998 -0.004199981 -0.15588 0.04466998 -0.004679977 0.15583 -0.09997999 0.008399903 -0.15531 -0.10069 0.008299946 0.08623999 -0.13888 -0.0205 -0.08805 -0.13917 -0.01941001 0.02096998 -0.10787 -0.03969001 -0.02236998 -0.10938 -0.03897005 5.8e-4 -0.04398995 -0.04866999 -7.3e-4 -0.04442 -0.04892003 0.01209998 0.04895997 -0.0399 -0.01410996 0.05105996 -0.04181998 0.08765 0.08320999 -0.02222996 -0.08784997 0.08275002 -0.02530997 0.15561 -0.02886992 -0.1759501 -0.15549 -0.02832996 -0.17613 0.14715 0.02601003 -0.17768 -0.14724 0.02592998 -0.17741 0.15261 -0.08434998 -0.1789301 -0.15222 -0.08520996 -0.17873 0.09397 -0.1238 -0.1909601 -0.09399998 -0.12367 -0.1912201 0.0327 -0.09958994 -0.1970301 -0.03258997 -0.09931999 -0.19709 0.01100999 -0.03160995 -0.1922801 -0.01099997 -0.03130996 -0.1923701 0.02154999 0.02470999 -0.19709 -0.02270001 0.02605003 -0.19748 0.08348 0.05572003 -0.19023 -0.08438998 0.05573999 -0.19024 0.0776 0.07600009 -0.5925802 -0.07732999 0.07596009 -0.5923401 0.12102 0.05456006 -0.5940802 -0.12052 0.05504006 -0.5942602 0.04104995 0.05116009 -0.5895401 -0.04039001 0.05018007 -0.5897102 0.02401995 0.001410067 -0.5770102 -0.02446997 -4.09908e-4 -0.5769702 0.04014998 -0.03950989 -0.5785502 -0.04172998 -0.04101991 -0.5782201 0.09469997 -0.06585991 -0.5885401 -0.09298002 -0.06595993 -0.5873402 0.11229 -0.04409986 -0.5891302 -0.11288 -0.0437299 -0.5887501 0.13442 0.01123005 -0.6033701 -0.13441 0.01073008 -0.6033302 0.09481 0.06132006 -0.3572101 -0.09624999 0.06099003 -0.3568701 0.12988 0.03597003 -0.3589001 -0.13105 0.03443002 -0.3590701 0.04455 0.03986006 -0.3570501 -0.04382997 0.03987002 -0.3569101 0.01916998 -0.02789992 -0.3493201 -0.01924997 -0.02879995 -0.3489401 0.04982 -0.08718997 -0.3531501 -0.04865998 -0.08647996 -0.3525002 0.10865 -0.09947991 -0.3562801 -0.10942 -0.09939992 -0.3559801 0.12866 -0.06309992 -0.3556201 -0.12876 -0.0627399 -0.3558001 0.13501 -0.02347993 -0.3611001 -0.13511 -0.02291995 -0.3607001 0.13455 -0.03329992 -0.3138201 -0.13462 -0.03298991 -0.3137701 0.13746 0.02217 -0.3064101 -0.13407 0.02646005 -0.3064601 0.13752 -0.07565993 -0.2997001 -0.13594 -0.07722997 -0.3051401 0.10848 -0.11216 -0.3059901 -0.106 -0.11321 -0.3077301 0.04758 -0.09803998 -0.3085301 -0.04816997 -0.09851998 -0.3090001 0.01559996 -0.0356599 -0.3010301 -0.01557999 -0.03523993 -0.3009601 0.04251998 0.03191006 -0.3149901 -0.04395997 0.03331005 -0.3132201 0.09003001 0.05297005 -0.3018401 -0.09345 0.05209004 -0.3004901 0.11951 -0.08125001 0.20343 -0.11951 -0.08125001 0.20343 0.06629002 -0.11853 0.18398 -0.06629002 -0.11853 0.18398 -1.3e-4 -0.13449 0.17997 0.06756997 0.06086993 0.19447 -0.06747001 0.06087994 0.19449 2e-5 0.06307995 0.18947 0.1165 0.03162997 0.19648 -0.11652 0.03158992 0.19652 0.13647 -0.02177 0.20218 -0.13647 -0.02177 0.20218 0.09254002 0.0285201 -0.7288702 -0.09259998 0.02846008 -0.7288202 0.08052998 0.04462009 -0.7251602 -0.08035999 0.04469013 -0.7251203 0.06045001 0.0447601 -0.7231902 -0.06132 0.04530012 -0.7233902 0.04175996 8.40115e-4 -0.7241102 -0.04175996 9.30115e-4 -0.7241302 0.05812996 -0.02839988 -0.7244902 -0.05812996 -0.02840983 -0.7244802 0.06550997 -0.04845988 -0.7323202 -0.06545001 -0.04857987 -0.7329402 0.08524 -0.03116989 -0.7270902 -0.08524 -0.03116989 -0.7270902 0.10728 0.006140112 -0.7314502 -0.10727 0.006260097 -0.7314502 0.03135317 -0.07665812 0.7582631 0.03299909 -0.07640272 0.7575035 0.03269898 -0.0763998 0.7568783 0.03205388 -0.07640671 0.7565871 0.03131705 -0.07643175 0.7564439 0.03058236 -0.07641351 0.7566252 0.02997237 -0.07640862 0.7569169 0.02969187 -0.07641673 0.7575423 0.02953809 -0.07643711 0.7582623 0.0296964 -0.0764122 0.7589856 0.02997207 -0.07640755 0.7596077 0.03058677 -0.07640862 0.7599025 0.03131568 -0.07643032 0.7600816 0.03205186 -0.07640051 0.7599368 0.03269928 -0.07639861 0.759646 0.0331754 -0.076424 0.7582617 0.03299719 -0.07639694 0.75902 0.03382515 -0.07621109 0.7572167 0.0332688 -0.07621109 0.7563013 0.03235316 -0.07621109 0.7557473 0.03131347 -0.07621109 0.7554928 0.03027379 -0.07621109 0.7557473 0.02935808 -0.07621109 0.7563013 0.02880167 -0.07621109 0.7572167 0.02854579 -0.07621109 0.7582569 0.02879935 -0.07621109 0.7592982 0.02935487 -0.07621109 0.7602152 0.03027158 -0.07621109 0.7607726 0.03131347 -0.07621109 0.7610272 0.0323556 -0.07621109 0.7607726 0.03327196 -0.07621109 0.7602152 0.03382736 -0.07621109 0.7592982 0.03408116 -0.07621109 0.7582569 0.03491818 -0.07577961 0.7567578 0.03407227 -0.07577961 0.7554914 0.03280258 -0.07577961 0.7546557 0.03131347 -0.07577961 0.7543544 0.02982407 -0.07577961 0.7546557 0.02855455 -0.07577961 0.7554914 0.02770876 -0.07577961 0.7567578 0.0273984 -0.07577961 0.7582504 0.02769535 -0.07577961 0.7597483 0.02853548 -0.07577961 0.7610275 0.02981096 -0.07577961 0.7618776 0.03131347 -0.07577961 0.7621838 0.03281617 -0.07577961 0.7618776 0.03409129 -0.07577961 0.7610275 0.03493148 -0.07577961 0.7597483 0.03522849 -0.07577961 0.7582504 0.03564 -0.07532304 0.7564576 0.03461879 -0.07532304 0.7549442 0.03309947 -0.07532304 0.7539375 0.03131347 -0.07532304 0.7535839 0.0295273 -0.07532304 0.7539375 0.02800828 -0.07532304 0.7549442 0.02698689 -0.07532304 0.7564576 0.02661865 -0.07532304 0.7582494 0.02696639 -0.07532304 0.7600496 0.02797919 -0.07532304 0.7615838 0.02950668 -0.07532304 0.7626102 0.03131347 -0.07532304 0.7629733 0.03312039 -0.07532304 0.7626102 0.034648 -0.07532304 0.7615838 0.0356605 -0.07532304 0.7600496 0.03600835 -0.07532304 0.7582494 0.04361808 -0.06930673 0.7582446 0.04136025 -0.07226699 0.7582446 0.0382902 -0.07439601 0.7582446 0.03593927 -0.07519119 0.7563354 0.03775906 -0.07439601 0.7555748 0.04059541 -0.07226699 0.7544 0.04268157 -0.06930673 0.7535358 0.04001438 -0.06930673 0.7495438 0.03841769 -0.07226699 0.7511405 0.03624677 -0.07439571 0.7533116 0.034846 -0.07519119 0.7547196 0.03322225 -0.07519119 0.7536435 0.03398346 -0.07439559 0.7517991 0.03515809 -0.07226669 0.7489627 0.0360223 -0.06930673 0.7468769 0.03131347 -0.06930673 0.7459402 0.03131347 -0.07226669 0.7481979 0.03131347 -0.07439559 0.7512677 0.03131347 -0.07519119 0.753266 0.02940469 -0.07519119 0.7536435 0.0286436 -0.07439559 0.7517991 0.0274688 -0.07226669 0.7489627 0.02660459 -0.06930673 0.7468769 0.02261257 -0.06930673 0.7495438 0.0242092 -0.07226699 0.7511405 0.02638006 -0.07439571 0.7533116 0.02778106 -0.07519119 0.7547196 0.0266878 -0.07519119 0.7563354 0.02486777 -0.07439583 0.7555748 0.02203136 -0.07226699 0.7544 0.0199452 -0.06930673 0.7535358 0.01900869 -0.06930673 0.7582446 0.02126657 -0.07226699 0.7582446 0.02433687 -0.07439601 0.7582446 0.02629345 -0.07519119 0.7582512 0.02666348 -0.07519119 0.7601772 0.02486789 -0.07439613 0.7609146 0.02203136 -0.07226711 0.7620898 0.0199452 -0.06930673 0.7629536 0.02261257 -0.06930673 0.7669456 0.0242092 -0.07226711 0.7653489 0.02638047 -0.07439631 0.7631774 0.02774637 -0.07519119 0.7618181 0.0293802 -0.07519119 0.762918 0.02864366 -0.07439643 0.7646901 0.0274688 -0.07226711 0.7675262 0.02660459 -0.06930673 0.769613 0.03131347 -0.06930673 0.7705494 0.03131347 -0.07226711 0.7682912 0.03131347 -0.07439643 0.7652214 0.03131347 -0.07519119 0.7633058 0.03324675 -0.07519119 0.762918 0.03398329 -0.07439643 0.7646901 0.03515809 -0.07226711 0.7675262 0.0360223 -0.06930673 0.769613 0.04001438 -0.06930673 0.7669456 0.03841769 -0.07226711 0.7653489 0.03624659 -0.07439631 0.7631774 0.03488039 -0.07519119 0.7618181 0.03596347 -0.07519119 0.7601772 0.03775906 -0.07439601 0.7609146 0.04059541 -0.07226711 0.7620898 0.04268157 -0.06930673 0.7629536 0.03633326 -0.07519119 0.7582512 0.0613203 0.04517996 0.7397276 0.05916357 0.04424017 0.72648 0.02071779 -0.0382781 0.8474159 0.006215393 -0.04461961 0.8477836 0.006154775 -0.07308369 0.8199175 0.01943135 -0.07004213 0.8203562 0.02861928 -0.03422939 0.8456273 0.02739226 -0.06818234 0.8202453 0.04345786 -0.0222187 0.8382719 0.03627258 -0.02910941 0.8421405 0.03695487 -0.06231999 0.8209418 0.04534751 -0.05576545 0.819225 0.01347708 -0.09461361 0.6604039 0.01233458 -0.09564781 0.6678717 0.02201676 -0.08943641 0.6634567 0.02035355 -0.09106409 0.6682562 0.01120024 -0.07645982 0.6449568 0.008817672 -0.06739097 0.6440136 0.0174815 -0.06192541 0.6466553 0.01330006 -0.08806258 0.6492176 0.01292365 -0.09220761 0.6545215 0.02379226 -0.08567208 0.659044 0.0244289 -0.080087 0.6539056 0.01330667 -0.0861572 0.6928792 0.01342719 -0.08645862 0.692234 0.01653939 -0.08362561 0.6917379 0.0165317 -0.08311533 0.69276 0.01837885 -0.08115142 0.6916217 0.01918196 -0.07908421 0.6918497 0.02133566 -0.0777359 0.6902239 0.02068179 -0.07941663 0.6900717 0.003935098 -0.08964902 0.6910461 0.002256751 -0.09007662 0.6909933 0.007039546 -0.08902019 0.6930274 0.006989657 -0.08849704 0.6926127 0.01375579 -0.08658552 0.6913307 0.010149 -0.08869773 0.6914334 0.007487952 -0.08902609 0.6908901 0.01652497 -0.08343023 0.6909224 0.007503986 -0.04547929 0.6432912 0.007711172 -0.05742996 0.6436775 0.01490497 -0.04169869 0.6449758 0.01524305 -0.05257546 0.6463063 0.02339619 -0.03588211 0.6455544 0.02260178 -0.04416829 0.6495209 0.02483725 -0.05257672 0.6509823 0.01372498 -0.09551173 0.6912047 0.0082677 -0.09797018 0.690479 0.009457468 -0.09847289 0.6841486 0.01513385 -0.09663408 0.6860809 0.009538471 -0.09748011 0.6830671 0.01511645 -0.09593492 0.6845251 0.008423388 -0.08685952 0.7500289 0.01024305 -0.08292651 0.7503977 0.00565195 -0.0993309 0.7410402 0.008164048 -0.1046033 0.7270769 0.009080469 -0.1002273 0.731904 0.01190519 -0.09402561 0.7318906 0.01346999 -0.09400439 0.7294845 0.009383678 -0.1028901 0.726322 0.01106297 -0.09606701 0.72966 0.0156514 -0.0806654 0.7624577 0.01365327 -0.08359789 0.7650979 0.01017665 -0.08406275 0.7628953 0.0126127 -0.08126193 0.76103 0.01455366 -0.08808434 0.77151 0.005084097 -0.08753591 0.7863062 0.004476368 -0.08853733 0.7671284 0.01593625 -0.08653163 0.7871568 0.002420246 -0.09930682 0.7107899 0.002388179 -0.09747052 0.7076157 0.004894077 -0.09877634 0.7110939 0.005409479 -0.09760564 0.708266 0.009317755 -0.0962097 0.7091968 0.009614586 -0.09808313 0.7023203 0.01326698 -0.09778511 0.7004497 0.0166822 -0.09318953 0.7104034 0.005741298 -0.09927821 0.7021687 0.003098964 -0.09902489 0.7016562 0.008081972 -0.08531063 0.757276 0.009311974 -0.08299732 0.7567249 0.01003247 -0.08218771 0.7591889 0.0083763 -0.0843544 0.7600744 0.004030346 -0.08878171 0.7611342 0.009276747 -0.08304589 0.7538393 0.007997274 -0.08598291 0.7539627 0.0039649 -0.090258 0.7580964 0.004885673 -0.09225362 0.7546557 0.008429884 -0.1080539 0.7226319 0.007178068 -0.1091025 0.718805 0.005833745 -0.1110507 0.7235665 0.005511462 -0.1123219 0.7192125 0.003335475 -0.109971 0.7153156 0.02878046 -0.08715999 0.6864746 0.02738755 -0.08695423 0.6825952 0.0314238 -0.08397042 0.6801488 0.03313738 -0.08389639 0.6848489 0.02873915 -0.08863323 0.6947581 0.03323876 -0.08457332 0.6957771 0.04349428 -0.07278698 0.7033478 0.03913587 -0.07716238 0.6998038 0.05977308 -0.05487412 0.7251477 0.03632467 -0.08115321 0.6974732 0.03698569 -0.07912313 0.6834713 0.03497517 -0.07973474 0.6775552 0.03799128 -0.07419079 0.6752321 0.02325487 -0.08992218 0.6889603 0.0214436 -0.0905494 0.6878737 0.0240792 -0.09091961 0.6931436 0.0571056 -0.005583286 0.6845698 0.02446305 -0.07880985 0.8017394 0.03305619 -0.07574909 0.8019296 0.01703095 -0.08071422 0.8014013 0.005231559 -0.08288085 0.8003295 0.02247756 -0.08494311 0.7876351 0.03027451 -0.08206135 0.7881222 0.05744057 0.002884685 0.679415 0.0579034 0.009070754 0.6768405 0.05656617 -0.001984953 0.6815336 0.04949969 -0.01411467 0.6692807 0.04900836 -0.009596586 0.6660392 0.04952526 -0.005574166 0.661939 0.03841727 -0.02357667 0.6577094 0.04020828 -0.01787686 0.6540999 0.0393117 -0.02868181 0.6608617 0.03216069 -0.04140728 0.6555789 0.0304715 -0.03478598 0.6528367 0.03151786 -0.0277127 0.6486058 0.02338206 -0.07957249 0.7550772 0.02493888 -0.08005374 0.7544973 0.02190649 -0.06853032 0.7526777 0.02241867 -0.07903975 0.7532781 0.02512717 -0.07987833 0.7529258 0.02171885 -0.07860171 0.751289 0.02486425 -0.07915163 0.7505638 0.0168057 -0.07760781 0.7535365 0.0154795 -0.07704842 0.7555067 0.02482748 -0.08002179 0.7473671 0.02059388 -0.07926499 0.74871 0.01444208 -0.07792389 0.7522235 0.01109439 -0.08048892 0.7562173 0.01185607 -0.08023685 0.7582652 0.01120615 -0.08022612 0.7539018 0.01218426 -0.080392 0.7511017 0.01345986 -0.07805633 0.7557909 0.02447569 -0.08098721 0.7445887 0.0174517 -0.09349751 0.6911609 0.01926416 -0.08818519 0.6910591 0.02193295 -0.09238964 0.6919683 0.02177608 -0.09067571 0.6897743 0.02117329 -0.08016771 0.6908457 0.02069956 -0.07965761 0.6912455 0.02071779 -0.08735442 0.6909331 0.02094918 -0.09186649 0.6907577 0.0180732 -0.09489071 0.6875836 0.01814758 -0.09418374 0.685878 0.02110767 -0.09070992 0.6891844 0.033261 -0.08070671 0.7517008 0.03484129 -0.07888042 0.7489098 0.0375244 -0.07812339 0.7493849 0.03542959 -0.08046811 0.7517784 0.03263086 -0.0804789 0.7529828 0.034689 -0.08032673 0.7528798 0.02927809 -0.06631129 0.7514837 0.03154236 -0.06549692 0.7520376 0.02453476 -0.06749612 0.75155 0.02792251 -0.08067303 0.7534357 0.02816671 -0.08071613 0.7522561 0.02852469 -0.07967913 0.7496957 0.03828167 -0.07891094 0.7451019 0.04172587 -0.07704281 0.7455106 0.0413677 -0.07873851 0.741358 0.04563295 -0.07561492 0.7419018 0.0498616 -0.07286781 0.7365248 0.03105938 -0.08165502 0.7425991 0.03029179 -0.08061492 0.7453579 0.01871609 -0.09145879 0.6742002 0.02428275 -0.08859282 0.6783086 0.02703106 -0.0860309 0.6743109 0.01107519 -0.09394013 0.6739161 0.04006057 -0.0771377 0.7499749 0.03782665 -0.07963913 0.7521643 0.03652209 -0.07974791 0.7530463 0.03360497 -0.06451934 0.7527727 0.03875809 -0.07842952 0.7540959 0.03546136 -0.06365191 0.753635 0.03977608 -0.07855933 0.7531454 0.04183 -0.07585769 0.7510951 0.04262995 -0.07508993 0.7523808 0.04060637 -0.0769928 0.753931 0.0394836 -0.07744312 0.7544866 0.03720968 -0.0635159 0.7545548 0.04043608 -0.0762704 0.7551835 0.0408886 -0.07540184 0.755991 0.03935146 -0.0652126 0.7564344 0.03881555 -0.06437569 0.7555409 0.04082697 -0.0757091 0.7567584 0.03900927 -0.06644874 0.7573865 0.04162007 -0.07581561 0.7547181 0.04278045 -0.07461029 0.7553351 0.04289406 -0.07476711 0.7534362 0.04404151 -0.07510292 0.7467006 0.04808551 -0.072694 0.7436255 0.0531187 -0.06822168 0.7387361 0.05373346 -0.06551492 0.7426814 0.04917496 -0.07055914 0.7462634 0.04556357 -0.07333582 0.7486524 0.04865467 -0.06982421 0.7492983 0.05280071 -0.06474363 0.7470537 0.0453971 -0.07288509 0.7509317 0.02693039 -0.0874437 0.7143152 0.03084975 -0.08585131 0.7179236 0.0242955 -0.08844572 0.7252436 0.0268895 -0.08706462 0.7292585 0.0202533 -0.09253638 0.706847 0.02376568 -0.08849269 0.7116643 0.02035236 -0.08989411 0.7158189 0.03291076 -0.08358162 0.7060692 0.03014236 -0.08599638 0.7025652 0.02873367 -0.08497613 0.7330253 0.02024638 -0.09049642 0.7235835 0.01692569 -0.09213131 0.7281927 0.04067337 -0.078749 0.7133894 0.03627836 -0.08147042 0.7093957 0.01758331 -0.0963456 0.6981558 0.02594888 -0.0901252 0.7002715 0.02139461 -0.09356808 0.6954167 0.02218508 -0.0855509 0.7371248 0.04207569 -0.07064104 0.8013544 0.03845506 -0.07690554 0.7881512 0.01609867 -0.0924434 0.7258738 0.01798826 -0.0911262 0.7230121 0.01459246 -0.09336262 0.7266374 0.01260769 -0.09521633 0.7270049 0.01098078 -0.1013033 0.7254297 0.01188057 -0.1032236 0.7227179 0.01109218 -0.10191 0.7159134 0.008751988 -0.1000202 0.717132 0.01046788 -0.1007897 0.7157128 0.01466035 -0.09580814 0.7235338 0.01560395 -0.0922228 0.7236056 0.009670674 -0.09706181 0.7133336 0.00844115 -0.09673655 0.7141521 0.006864845 -0.09664893 0.715248 0.01070815 -0.09878343 0.7158849 0.01071608 -0.09745001 0.7142467 0.006671071 -0.09796601 0.7160124 0.005862057 -0.09787821 0.714816 0.0157454 -0.0923016 0.7194871 0.01235389 -0.0972042 0.7140315 0.01172477 -0.09593874 0.7130308 0.01541125 -0.0931639 0.71349 0.01579785 -0.09512013 0.7155768 0.017569 -0.09110939 0.7180669 0.007188856 -0.09719151 0.7130659 0.005474984 -0.0973761 0.7134951 0.006740272 -0.09729963 0.7112855 0.009724974 -0.09583574 0.7111601 0.009968161 -0.09635019 0.7123542 0.01616656 -0.09726804 0.7192645 0.01447057 -0.09910559 0.7161314 0.01228177 -0.09883761 0.7153067 0.02963095 -0.08279311 0.6703819 0.0663948 -0.02909088 0.7440768 0.06380426 -0.03457123 0.7617971 0.01466858 -0.07903224 0.7595802 0.0209977 -0.07843822 0.7621285 0.02544045 -0.07968175 0.7644436 0.0205655 -0.08126944 0.7632166 0.01705598 -0.07872003 0.7608209 0.02156567 -0.07856953 0.7606391 0.02519726 -0.08013844 0.762686 0.02497148 -0.07693779 0.7603972 0.02215939 -0.075984 0.7590845 0.02221107 -0.07529091 0.7590458 0.02398478 -0.07646113 0.7602797 0.02509391 -0.0790655 0.7605388 0.02194416 -0.07847452 0.759746 0.02552765 -0.08274585 0.7644993 0.02557361 -0.08348101 0.7669717 0.01991379 -0.08314353 0.765689 0.01795935 -0.07719099 0.7596295 0.01898396 -0.07808125 0.7581767 0.01592147 -0.07755571 0.758699 0.0167362 -0.07713741 0.7574318 0.02682757 -0.08440071 0.7694624 0.02008819 -0.08492535 0.7683103 0.02763867 -0.0861442 0.7733488 0.02064615 -0.0874257 0.7724062 0.01684236 -0.08894354 0.6920678 0.01387858 -0.09154254 0.6921148 0.01075088 -0.09367191 0.692371 0.01325595 -0.09827142 0.6959045 0.01642608 -0.09649431 0.694585 0.01970559 -0.0936976 0.6924164 0.01700729 -0.09681421 0.6955906 0.0203942 -0.0942741 0.6934446 0.01384007 -0.09840863 0.6974653 0.03256797 -0.083108 0.7673529 0.03181046 -0.08276444 0.7646485 0.03149378 -0.07903701 0.7646764 0.03094875 -0.07855665 0.7632122 0.03051489 -0.0782836 0.761102 0.03075397 -0.07641464 0.7609511 0.02753978 -0.0720942 0.7604216 0.0402646 -0.07696944 0.759062 0.04120099 -0.07579964 0.7604805 0.03841418 -0.07625395 0.757822 0.03780061 -0.06835561 0.7584608 0.03923577 -0.07707059 0.7580611 0.04282957 -0.07663613 0.7617792 0.04516178 -0.07612031 0.7633813 0.03348755 -0.08335614 0.7698276 0.03468638 -0.08374512 0.773707 0.05191338 -0.07072073 0.7703184 0.04895937 -0.07383519 0.7659776 0.04248166 -0.07535129 0.7598495 0.04222017 -0.0760675 0.7585988 0.04193681 -0.07546883 0.7571783 0.05856847 -0.04875308 0.7769659 0.05863779 -0.05427521 0.7593132 0.05414968 -0.06404983 0.767165 0.04715389 -0.07510119 0.7191067 0.05361557 -0.06945919 0.7292614 0.029971 -0.08332651 0.7365872 0.02294439 -0.08318972 0.7396054 0.05789226 -0.0619505 0.7323081 0.05858951 -0.05782198 0.7380033 0.0612052 -0.0499373 0.7329345 0.06205511 -0.04780948 0.7409025 0.06178331 -0.04830479 0.7481523 0.05745226 -0.0573107 0.7442942 0.001555085 -0.09911233 0.6915516 0.00346899 -0.1011776 0.6991844 0.003231465 -0.1014836 0.6974864 0.005690872 -0.1011682 0.6977445 0.009282886 -0.1000137 0.6972957 0.009808301 -0.09983021 0.6991726 0.005843877 -0.1006914 0.6997665 0.004069685 -0.09818398 0.6919197 0.007623076 -0.09718298 0.6921019 0.0593174 0.01822948 0.6831061 0.03323638 -0.0215497 0.6428427 0.01657217 -0.03384327 0.638266 0.008300244 -0.03719186 0.638519 0.02474069 -0.02834826 0.6392967 0.02168196 -0.07794898 0.6889541 0.02127438 -0.08005714 0.6907878 0.02131587 -0.0898168 0.691185 0.02230888 -0.09042084 0.6910639 0.02365678 -0.0895363 0.6909292 0.02946078 -0.08767163 0.6903304 0.03402709 -0.08369654 0.6898894 0.03735268 -0.07957303 0.690222 0.04048275 -0.07464253 0.6913521 0.04419767 -0.06845259 0.6931522 0.04817396 -0.06156361 0.6955382 0.0559569 -0.05191618 0.6988318 0.06044489 -0.04788231 0.7171149 0.0632016 -0.04050493 0.7274309 0.06434828 -0.0389046 0.7373526 0.06425821 -0.03933697 0.7462214 0.06122416 -0.04561483 0.7606811 0.05616307 -0.05705809 0.771472 0.05302846 -0.0638839 0.7748949 0.03618067 -0.08134603 0.7793419 0.02862459 -0.08523225 0.7790489 0.02129358 -0.08781009 0.7782033 0.01517289 -0.08916914 0.7775283 0.006135582 -0.08829075 0.757763 0.006676852 -0.0896095 0.754253 0.005830347 -0.107819 0.7282517 0.01372027 -0.07798331 0.7542252 0.01587349 -0.07725322 0.7545906 0.01396346 -0.07811492 0.7572804 0.0157954 -0.07686072 0.7563904 0.03076636 -0.08235132 0.7397885 0.02379626 -0.08179229 0.7419587 0.02694076 -0.0668891 0.7512679 0.0300818 -0.08075392 0.7532157 0.03049886 -0.08079701 0.7517511 0.03182721 -0.07942283 0.7491568 0.03431099 -0.08031481 0.7449824 0.03636008 -0.08115404 0.7417952 0.03765058 -0.08122342 0.7376079 0.03796678 -0.08184862 0.7326355 0.03700459 -0.08250063 0.7269591 0.03398215 -0.08433943 0.7222799 0.02680188 0.08901757 0.7318782 0.034698 0.07731598 0.7134192 0.04224789 0.07672089 0.7314035 0.01804268 0.09508579 0.7520272 0.03557848 0.08882457 0.7523116 0.04700678 0.05896335 0.7111818 0.01851218 0.09159666 0.7312343 0.0354982 0.0836541 0.7318491 0.05447828 0.06870526 0.7475088 0.04455369 0.08233004 0.7511537 0.02645808 0.09308618 0.7524986 0.03996276 0.07066667 0.7127979 0.02750349 0.08266305 0.713523 0.04971969 0.06337505 0.7292052 0.01877397 0.08615946 0.7126198 0.8043472 -0.009662747 0.4807966 0.8109587 -0.002268731 0.4802157 0.7956831 -0.004909753 0.479671 0.8016411 0.003238797 0.4803082 0.7833764 0.002283811 0.4868324 0.7887053 0.0112577 0.4848424 0.8440918 -0.002933859 0.511277 0.843003 -0.00741887 0.516752 0.8344378 -0.006697833 0.5133908 0.8382955 -3.44282e-4 0.5028011 0.8521 0.006657302 0.5098014 0.8499722 0.02813822 0.5114684 0.8504658 0.01416116 0.5105062 0.8508541 0.03480732 0.510627 0.8288105 -0.02950495 0.4898406 0.817909 -0.02726703 0.4930494 0.8325359 -0.01072806 0.5079509 0.8363453 -0.003640234 0.4960202 0.823686 -0.02293837 0.5101253 0.8201637 -0.02495187 0.5075395 0.8307373 -0.02811324 0.5040103 0.8326364 -0.02454107 0.5067275 0.8175486 -0.02665674 0.5032857 0.8292055 -0.02943837 0.4999194 0.8208459 -0.02619045 0.4873159 0.8111056 -0.02306926 0.491126 0.8818686 0.01730781 0.5379633 0.8814504 0.0148707 0.532853 0.8753715 0.01735359 0.5374587 0.8824062 0.02533227 0.5419765 0.8769806 0.02551889 0.5422987 0.8827301 0.0302695 0.5400586 0.8891147 0.02533221 0.5414654 0.8895663 0.0297873 0.5396323 0.8952954 0.0247479 0.5408858 0.9390984 0.02741199 0.5354793 0.9391676 0.03053951 0.533002 0.9262188 0.02945989 0.5359786 0.9194555 0.0298987 0.5360665 0.9189943 0.02596229 0.5379527 0.9263852 0.02568989 0.537736 0.9094458 0.02993017 0.5360602 0.909689 0.02521997 0.5386964 0.9170886 0.01607596 0.5345469 0.924386 0.01606118 0.5348032 0.909179 0.01656538 0.5351774 0.9086564 0.01462888 0.531844 0.9167113 0.01478898 0.5321515 0.9324153 0.01600861 0.5343974 0.9239721 0.01460987 0.5320273 0.9309698 0.014485 0.5316027 0.9342949 0.0265699 0.5368767 0.933313 0.03038328 0.5344941 0.8764865 0.02849072 0.5206215 0.8697171 0.02823799 0.5207076 0.8759301 0.01831078 0.5217126 0.8690767 0.01749968 0.5202978 0.8939892 0.02922189 0.5209714 0.8844714 0.02918231 0.5198296 0.8835403 0.01769101 0.5216503 0.8940232 0.01689279 0.5198323 0.9374265 0.02912622 0.5215252 0.9244827 0.02967602 0.5226321 0.9354616 0.0159682 0.5228138 0.9252382 0.01697939 0.5224722 0.9506074 0.02804946 0.5262131 0.9432989 0.02833199 0.5221039 0.9427474 0.01604539 0.5227305 0.9504736 0.01684206 0.525179 0.9524514 0.01622897 0.5295929 0.9451597 0.01408177 0.5294514 0.9448412 0.01401931 0.527346 0.9525254 0.01699 0.5273364 0.9375697 0.01413118 0.5309776 0.9367784 0.01371097 0.5277875 0.9523698 0.0279262 0.5313254 0.9519889 0.02817928 0.5285176 0.9457231 0.0298919 0.5325735 0.9453836 0.03122198 0.5282858 0.9385505 0.032085 0.5292907 0.8942174 0.01414167 0.5331245 0.8935716 0.01470208 0.5279955 0.8995016 0.01412367 0.527948 0.9005032 0.01466602 0.5327914 0.8947215 0.0299254 0.5387654 0.9024499 0.02999919 0.5366596 0.9018855 0.03319358 0.5316218 0.8939288 0.03400129 0.5318046 0.876999 0.02999562 0.5406411 0.8769459 0.03462749 0.5332704 0.8693516 0.03463339 0.5334729 0.86725 0.02962219 0.539907 0.8749281 0.01533579 0.5325779 0.8939142 0.01709067 0.5383608 0.8882155 0.01698338 0.53824 0.8878036 0.01444268 0.5329132 0.908833 0.01697719 0.5208547 0.9097703 0.02950757 0.518997 0.9387284 0.01682531 0.5346369 0.9455152 0.02672368 0.5340398 0.945126 0.0160036 0.5326088 0.9530718 0.02534627 0.53415 0.9516574 0.01615029 0.5320836 0.9491224 0.0173186 0.533907 0.9450558 0.01748269 0.5334225 0.9458203 0.02548646 0.5346609 0.9493349 0.02486836 0.5352834 0.9408704 0.01762998 0.5337199 0.9409446 0.02540999 0.5347834 0.9097078 0.03329741 0.5319358 0.9086852 0.01401031 0.5280246 0.9509048 0.01736348 0.5341975 0.951627 0.02341538 0.5359349 0.9530884 0.02473288 0.5346156 0.9521968 0.01673346 0.5327149 0.9525275 0.01736551 0.5332614 0.9531773 0.02374517 0.5350002 0.952116 0.01783287 0.5341647 0.9525827 0.02260977 0.5356844 0.9095033 0.03382462 0.5239951 0.8973338 0.03412717 0.5238388 0.876801 0.03362017 0.5264663 0.8703858 0.03332358 0.5256296 0.8934233 0.03441828 0.5258864 0.9445551 0.03025138 0.5240399 0.9375522 0.03151142 0.5239759 0.883125 0.03449296 0.5332311 0.8831981 0.0344814 0.5267012 0.8892865 0.03402978 0.5327984 0.889095 0.0346136 0.5245972 0.9195343 0.03235948 0.5321491 0.9209827 0.03257811 0.5251027 0.9317122 0.03259468 0.530565 0.9278411 0.03209286 0.5245464 0.9251509 0.03229361 0.5314501 0.9251173 0.03247767 0.526485 0.8651838 0.0364505 0.5234996 0.8645358 0.0361365 0.5300029 0.8656899 0.033118 0.5235145 0.866084 0.03474402 0.5315263 0.8570789 0.0232563 0.5444158 0.8586748 0.01677608 0.5391967 0.8565001 0.02736449 0.5436003 0.8566977 0.01422017 0.5374425 0.868184 0.01722937 0.5374066 0.8701376 0.02545309 0.5425142 0.8658143 0.0145291 0.5331512 0.8637861 0.01258176 0.5217047 0.8637815 0.01185631 0.5272204 0.8632863 0.008851706 0.5220983 0.8628414 0.0088768 0.5281497 0.8689433 0.01502209 0.5229659 0.8684375 0.01426106 0.5268759 0.8629273 0.01434201 0.5176789 0.8634874 0.02935028 0.5181828 0.8687865 0.05710011 0.5203611 0.8683845 0.05924391 0.5255826 0.8673983 0.05910432 0.5303527 0.07819253 0.03721767 0.604304 0.07621258 0.04818838 0.6101753 0.05197978 0.06183856 0.6329364 0.05868911 0.04453468 0.627074 0.1121253 0.04484719 0.581692 0.1142474 0.0288496 0.5736753 0.07088041 0.06222438 0.6145996 0.03783279 -0.03378748 0.5652045 0.05205321 -0.02176827 0.5700893 0.05155199 -0.005103588 0.5988871 0.03741687 -0.0500679 0.5513204 0.05921697 -0.04334706 0.5538181 0.0428422 -0.01457267 0.5936145 0.022134 -0.05734378 0.5394912 0.02156895 -0.06084847 0.5344179 0.03698736 -0.05995708 0.523939 0.03634399 -0.05586999 0.5302567 0.04650586 0.09325468 0.5849532 0.03427195 0.08670389 0.6125168 0.0484367 0.08285212 0.6145381 0.0616405 0.08794468 0.5885176 0.0233615 0.07864731 0.6398689 0.03471755 0.07577097 0.6390755 0.7941581 -0.01887333 0.5015056 0.7851576 -0.01366066 0.5044358 0.01958215 0.0762276 0.6666955 0.0286228 0.07291978 0.6651317 0.01877516 0.07792598 0.6869291 0.02764409 0.07480007 0.6852961 0.02168506 -0.06509667 0.5136869 0.03696775 -0.06434857 0.5159288 0.01213538 -0.05571335 0.5380488 0.01346927 -0.05012714 0.545445 0.7866077 -0.01373213 0.4955292 0.7949838 -0.01846176 0.4934644 0.793925 -0.01653128 0.5120659 0.7861102 -0.01164603 0.5141118 0.790305 -0.01044374 0.4873681 0.7985181 -0.01502656 0.4862797 0.7958423 -0.01121085 0.5202468 0.8037044 -0.005943238 0.5309797 0.7890022 -7.67787e-4 0.5308104 0.7870739 -0.006629645 0.522408 0.8265644 -0.00875765 0.4855752 0.819387 -0.01551204 0.4839608 0.8397363 -0.007926225 0.4959726 0.8333306 -0.01157498 0.4882771 0.8145902 -0.02001893 0.4855904 0.8279778 -0.01701664 0.4844178 0.8239434 -0.02259206 0.4832896 0.058721 0.007536888 0.6086506 0.05597537 0.01629239 0.6362574 0.05180376 0.004420697 0.6283057 0.02471637 -0.02716416 0.5870404 0.03547406 -0.02121275 0.5908288 0.03802168 -0.0127179 0.618466 0.03009986 -0.01874828 0.6163124 0.04540008 -0.004965245 0.6228868 0.04045629 -0.01186108 0.6349121 0.03324675 -0.01873368 0.6321876 0.0279771 -0.03612536 0.5663611 0.0196709 -0.03632676 0.5657755 0.06682848 -0.007153093 0.5772817 0.02129089 -0.04983788 0.5499107 0.05660098 0.01991754 0.6586371 0.05307477 0.007360339 0.6483892 0.01029127 -0.06016445 0.5321666 0.8640119 -0.01247948 0.5285674 0.8634619 -0.01066339 0.5322902 0.8564558 -0.00902915 0.5339215 0.8530123 0.00456506 0.5392119 0.8538403 7.90912e-4 0.5392979 0.8561024 -0.006032288 0.5362097 0.8622883 -2.78688e-4 0.5373159 0.8618566 0.004153788 0.5353857 0.8634645 -0.007806658 0.5349882 0.865726 -0.008812487 0.5193681 0.8647933 -0.01214414 0.5233621 0.888442 0.01467341 0.5278149 0.8821757 0.0144822 0.5276442 0.8754746 0.01501518 0.5276278 0.9173434 0.01423168 0.5289084 0.9241904 0.0142883 0.5291039 0.9302489 0.01416879 0.5286477 0.9022672 0.0251969 0.5395115 0.9015264 0.0172162 0.5363849 0.9281815 0.01498687 0.5247353 0.9359979 0.01450747 0.5245998 0.9242574 0.01471447 0.526133 0.9218066 0.01546847 0.5237819 0.908196 0.0147171 0.5233553 0.8758319 0.01588308 0.524406 0.8828943 0.01520687 0.5247634 0.8896173 0.01539438 0.5235018 0.9431395 0.01435309 0.5252653 0.844986 0.0270248 0.5460225 0.8361706 0.0280627 0.5452768 0.8432642 0.02409398 0.5460627 0.8443505 0.03894096 0.542687 0.8366956 0.05335777 0.5402602 0.8442283 0.05377072 0.5405244 0.8426806 0.05064576 0.541854 0.8367885 0.06140881 0.5362877 0.8445972 0.06390142 0.5329515 0.8428584 0.06603139 0.5333548 0.8364242 0.0377044 0.543958 0.8553782 0.05490309 0.5381988 0.8425026 0.04129499 0.5430793 0.8551044 0.03946691 0.5391613 0.8380073 0.07645589 0.528662 0.8388772 0.07271808 0.533836 0.8448204 0.0777561 0.5271333 0.843358 0.07402861 0.531324 0.8547055 0.06523358 0.5295628 0.8496966 0.07897913 0.5264382 0.8394415 0.002388179 0.542827 0.8328256 0.005813896 0.5428671 0.8356789 -0.004245877 0.5396289 0.8412258 -0.003564655 0.5404129 0.8423805 0.01575762 0.5431208 0.009740948 -0.03283667 0.6297231 0.01679331 -0.02879589 0.6310374 0.0115931 0.08181887 0.6912389 0.05122959 0.04956978 0.67575 0.01100248 -0.03124457 0.6205014 0.007027149 -0.02963727 0.5933598 0.01037925 -0.0287618 0.5854188 0.01603549 -0.02746689 0.6192786 0.007089972 -0.04030025 0.5527604 0.008511185 -0.03167158 0.5666416 0.0431897 0.06029266 0.6585627 0.05289506 0.04547387 0.6522505 0.06166547 0.02063328 0.617137 0.1077788 0.004131197 0.5601479 0.0762813 0.007741868 0.5836235 0.06551069 -0.04766899 0.5319611 0.8692718 -0.03006863 0.4860957 0.8640979 -0.03178137 0.4885196 0.8784 -0.02808946 0.4852131 0.8645107 -0.03238338 0.4950727 0.8684186 -0.03182905 0.4943676 0.8716173 -0.02958005 0.4865854 0.8719673 -0.03027147 0.4941526 0.8772282 -0.02870213 0.4861094 0.8855602 -0.02926188 0.4866045 0.8868777 -0.03004896 0.492652 0.8859263 -0.03062278 0.4922553 0.8829514 -0.02998948 0.4868864 0.8818836 -0.03029018 0.4876266 0.8774002 -0.02930968 0.4867784 0.8727474 -0.02878749 0.487052 0.8742076 -0.02938377 0.4881269 0.8745014 -0.02995866 0.4940832 0.8776081 -0.02995514 0.4878691 0.8828671 -0.03086185 0.4924401 0.8816968 -0.03089755 0.4924845 0.8808994 -0.03038257 0.4881657 0.877576 -0.03056555 0.4934862 0.882902 -0.03050875 0.4881083 0.8833917 -0.03085136 0.4923622 0.8832061 -0.03052818 0.4881339 0.8848056 -0.03078985 0.4923458 0.8842409 -0.03081023 0.492297 0.88392 -0.03091263 0.4899499 0.8833438 -0.03084194 0.4889555 0.8839765 -0.03083455 0.4921934 0.7366129 0.05588281 0.5135645 0.7341101 0.05889731 0.5203266 0.7339839 0.009387314 0.5404037 0.7335432 0.01800608 0.5458332 0.7332247 5.45715e-4 0.5250086 0.735278 0.03297501 0.5480508 0.7335858 0.0473448 0.5455625 0.7355118 0.01370817 0.5053041 0.7345421 0.007561802 0.5092836 0.0475344 -0.003435254 0.6399769 0.7492735 0.008817076 0.5380548 0.771065 0.01510989 0.5414568 0.7726505 0.006319463 0.5347393 0.8117573 -0.01825594 0.5144227 0.8200617 -0.009192645 0.5327638 0.7757704 0.06184512 0.5264992 0.795395 0.0679351 0.5276513 0.8106822 0.07030862 0.528828 0.7515288 0.05894273 0.522592 0.8654246 0.06718552 0.5232876 0.8650081 0.06983411 0.5262343 0.864095 0.08197104 0.5240579 0.8648457 0.077542 0.5278968 0.8434593 0.01396167 0.5422414 0.8406881 0.004725098 0.5430549 0.8256523 0.07406163 0.5299733 0.8370727 -0.01001608 0.5338392 0.8066189 5.41123e-5 0.5381572 0.790557 0.006263077 0.5392738 0.8421853 -0.007525444 0.5370644 0.8427171 -0.005257844 0.539313 0.8438508 -0.01106637 0.5324311 0.8555694 0.08093583 0.516287 0.8464031 0.07848763 0.5161767 0.8452384 0.0799281 0.5222839 0.8553833 0.08156388 0.5211712 0.8398204 0.079126 0.5161569 0.8384475 0.07922339 0.5227712 0.7762974 0.06587779 0.5161049 0.7781097 0.06353902 0.5081701 0.8269457 0.07803583 0.5226346 0.8282867 0.0792272 0.5164979 0.8161441 0.0768674 0.5140256 0.8147124 0.07555329 0.5216751 0.8622395 0.006270587 0.5173767 0.8710986 -0.01481443 0.4832118 0.8731719 -0.01203078 0.4907341 0.8857743 -0.02142345 0.4848953 0.8832241 -0.01925283 0.4840234 0.8845437 -0.01628333 0.4922239 0.887543 -0.01894056 0.4911489 0.8873639 -0.02700495 0.4856525 0.890097 -0.02581608 0.4905976 0.8647496 0.08306312 0.5201228 0.8604952 0.0823388 0.5205258 0.8603851 0.08123284 0.525497 0.8657062 0.08232623 0.5155023 0.8607909 0.08166712 0.5159428 0.8592079 0.06187993 0.5290302 0.8606437 0.06566202 0.5257477 0.02468848 -0.02428466 0.630584 0.0227251 -0.0223236 0.6187066 0.01736879 -0.02790749 0.5859875 0.01389896 -0.03421604 0.5659843 0.01008009 -0.0453251 0.5492002 0.7538357 0.05666768 0.5152648 0.7966005 0.07239228 0.5207484 0.7962991 0.06927132 0.5105882 0.7762151 -0.007409751 0.506639 0.8079468 -0.02082145 0.5093186 0.7544366 0.01417601 0.507257 0.8641456 0.05654639 0.5352106 0.8677303 0.04255819 0.5198827 0.8643735 0.05212312 0.538842 0.8625677 0.03941071 0.5341867 0.8627831 0.04311352 0.5368301 0.8660917 0.03901261 0.5288993 0.8675522 0.03982049 0.5240986 0.8559932 0.05109971 0.5406504 0.854993 0.0428583 0.5389378 0.8602428 0.05900722 0.5324667 0.8632271 0.05989819 0.5286706 0.8636443 0.05943202 0.5235614 0.862508 0.03699558 0.5183467 0.8622861 0.056472 0.5187904 0.8623708 0.03178048 0.5384315 0.8606686 0.03501552 0.5361602 0.8652012 0.006532907 0.5292254 0.8663832 0.003338158 0.5185443 0.7799236 -0.00279963 0.4924209 0.8168961 -0.02751797 0.4984927 0.8287239 -0.03055405 0.4942245 0.8255147 -0.01535433 0.5145495 0.8297495 -0.01858115 0.509872 0.8362589 -0.01282125 0.5057667 0.807448 -0.02345037 0.5027414 0.8091447 -0.02418404 0.4961481 0.8617263 -0.01159685 0.4907206 0.8578692 -0.01510626 0.4844248 0.8517785 -0.01517844 0.4847752 0.8537153 -0.01079475 0.4920648 0.8558771 -0.03017556 0.4858139 0.8431806 -0.02915376 0.4881263 0.8399347 -0.03063994 0.4989984 0.8408452 -0.03100997 0.4923191 0.8543019 -0.03278523 0.4906868 0.8556901 -0.02651786 0.4835031 0.8460436 -0.02559298 0.484778 0.85613 -0.02023005 0.4819334 0.8492762 -0.02036315 0.4831518 0.8493531 -0.01428884 0.5032181 0.8565835 -0.01569664 0.50242 0.8591454 -0.01371258 0.4992823 0.8514665 -0.01125425 0.4987304 0.8513565 -0.004516839 0.5137658 0.8612957 -0.007393062 0.5182629 0.8452058 -0.01971364 0.5060892 0.8547606 -0.02002823 0.5055142 0.8429641 -0.02337038 0.5056515 0.8538053 -0.02379608 0.5056976 0.8549226 -0.03033846 0.5020324 0.8400027 -0.02881467 0.5028832 0.8419223 -0.01353716 0.5041251 0.8448134 -0.00977987 0.4972601 0.8368883 -0.01959627 0.5069605 0.8503046 -0.008989453 0.5174433 0.8602175 -0.01100176 0.5223006 0.8438365 -0.01060944 0.4906787 0.8392624 -0.01100587 0.5272657 0.830606 -0.01086968 0.5254057 0.8579103 -0.01154625 0.5293654 0.846472 -0.01272177 0.5277876 0.8402314 -0.01585185 0.4855458 0.8373208 -0.02165567 0.4839712 0.8329548 -0.02667689 0.4855803 0.884396 -0.03018236 0.4947004 0.8841617 -0.03039628 0.4942655 0.884043 -0.03001403 0.4952527 0.8845412 -0.02954053 0.4962383 0.8847837 -0.02850073 0.4977427 0.8840271 -0.02887839 0.4975516 0.8827158 -0.02939844 0.4970244 0.8789013 -0.02763217 0.4995721 0.8744464 -0.02724623 0.499827 0.879313 -0.02687174 0.5003281 0.8734943 -0.02728605 0.5006778 0.8728106 -0.02680915 0.5016589 0.8794248 -0.02595984 0.500737 0.8859668 -0.02765256 0.4979599 0.879974 -0.02493464 0.5014154 0.8722 -0.02633535 0.5024972 0.8671789 -0.02915239 0.5012738 0.8734941 -0.01249223 0.4974444 0.8869929 -0.02101224 0.4982165 0.883603 -0.01723736 0.4985625 0.8882446 -0.02422267 0.4980702 0.8810442 -0.02445298 0.5015231 0.8705757 -0.02331018 0.5042206 0.8716037 -0.02030998 0.5045141 0.8816273 -0.02234846 0.502309 0.8806179 -0.01854807 0.5017162 0.8794692 -0.02143466 0.4814636 0.8804203 -0.02455604 0.4817977 0.870649 -0.01590633 0.5031176 0.8795098 -0.02756047 0.4836935 0.8690052 -0.02076953 0.4803853 0.8684482 -0.02619993 0.4824401 0.866795 -0.02959436 0.4854218 0.04191428 0.06351047 0.6809992 0.8662486 0.06716358 0.5158776 0.8653714 0.06877869 0.5134925 0.8625655 0.06754124 0.5142399 0.8634621 0.06640213 0.5167532 0.8610062 0.06163698 0.5212481 0.8589276 0.06346428 0.5180204 0.8616619 0.06208038 0.5255628 0.8631185 0.0651012 0.5220113 0.8661757 0.06634223 0.5196884 0.8550003 0.0796135 0.5257805 0.8543719 0.07636338 0.5287264 0.8603603 0.0769869 0.5284093 0.8601949 0.06928932 0.5271521 0.854376 0.06869798 0.5288665 0.03109818 0.09771752 0.5798068 0.08521109 0.07923728 0.5881178 0.1045309 0.06255561 0.5872284 0.03483659 0.0700612 0.6837694 0.0363695 0.06784856 0.6621617 0.04488056 0.06989949 0.6359839 0.06059008 0.07529997 0.6155888 0.01919257 0.08866941 0.6116042 0.01194155 0.07911568 0.6411468 0.009546577 0.07749336 0.6678012 0.7337939 0.001729309 0.5167697 0.8662915 0.006984293 0.5227724 0.8593745 0.008051574 0.533841 0.8605934 0.01149278 0.5327054 0.8506422 0.0610603 0.5084582 0.8515784 0.05496901 0.5079513 0.009508669 -0.06601095 0.5114783 0.05601626 0.05350238 0.6300411 0.04797846 0.0527119 0.6557528 0.0474168 0.05666238 0.6788704 0.043563 0.06468605 0.7118956 0.0462768 0.07025516 0.7305613 0.05060845 0.07588905 0.7496494 0.05718648 0.02765059 0.6429655 0.0573039 0.03257519 0.6710386 0.05414259 0.04657745 0.7104573 0.05612778 0.04997974 0.7265778 0.05931597 0.05283766 0.7420883 0.009108781 0.09614175 0.7514536 0.009662568 0.09279328 0.7298001 0.0111221 0.0883755 0.7082509 0.8732501 -0.02970814 0.4940493 0.8483315 0.07540428 0.5302295 0.8484231 0.06800043 0.5308511 0.8488408 0.06450271 0.5317505 0.8480957 0.05422419 0.5402444 0.8485789 0.05046528 0.5416091 0.848385 0.04248851 0.5417966 0.8487908 0.03916698 0.5416885 0.8495352 0.0270577 0.545585 0.8498271 0.02320456 0.5457571 0.8496664 0.0162518 0.5423595 0.8486115 0.01400321 0.5411334 0.844776 0.005585789 0.5424529 0.8454744 0.001404762 0.5421623 0.8486479 -0.00451523 0.5384588 0.849167 -0.006720542 0.536876 0.009788572 -0.09456634 0.6785448 0.01713567 -0.09344649 0.6802165 0.0213207 -0.08984082 0.6826901 0.02411198 -0.08918058 0.6850295 0.0258879 -0.08836483 0.6878668 0.02652436 -0.08889091 0.6906605 0.02575546 -0.09006524 0.6939082 0.02347487 -0.09225654 0.6981959 0.01910918 -0.09442889 0.7031794 0.01456987 -0.09515321 0.7068677 0.008795797 -0.09709489 0.7058386 0.0054937 -0.09829449 0.7048733 0.003010988 -0.09807831 0.7042298 0.09814751 -0.01185274 0.5552229 0.07990497 -0.03047448 0.5485382 0.8529788 -0.01187235 0.5281686 0.8559686 -0.009764134 0.5207388 0.8570975 -0.005888283 0.5166875 0.8584399 0.006412565 0.5122572 0.857498 0.01390647 0.512992 0.8575972 0.02832651 0.5129771 0.858521 0.03588032 0.5117002 0.8570889 0.05552041 0.5148757 0.8558812 0.06338858 0.5149375 0.8510854 0.07927459 0.5162591 0.8502033 0.08056712 0.521705 0.8512029 -0.01065033 0.5313676 0.8541063 -0.01084333 0.5314822 0.8490149 -0.008594453 0.5355461 0.8538652 -0.00965774 0.5344442 0.01376378 -0.09205871 0.6921138 0.007791876 -0.09585839 0.6924319 0.01739639 -0.08969694 0.6935791 0.01917898 -0.08185791 0.6923918 0.02105408 -0.08045011 0.6911225 0.02061176 -0.08926612 0.6908128 0.02116656 -0.0866118 0.6911069 0.01239305 -0.0971291 0.694072 0.01617759 -0.09553343 0.6926545 0.01906895 -0.09297919 0.6917771 0.002720057 -0.1007186 0.6948501 0.009121775 -0.09913349 0.6949355 0.005262374 -0.100242 0.6950141 0.008969366 -0.0989626 0.6874845 0.01458346 -0.09675741 0.6893403 0.02125555 -0.09221643 0.6913885 0.02172696 -0.09075331 0.6908657 0.0178979 -0.09402328 0.6901864 0.02020287 -0.09176522 0.6909191 0.02114558 -0.09034109 0.6906136 0.0167616 -0.09664613 0.6950421 0.02003926 -0.09392803 0.6929723 0.01371705 -0.0983473 0.6965191 0.003483295 -0.1014455 0.6985271 0.00966686 -0.09994769 0.6983334 0.00572437 -0.1010462 0.6989016 0.1031081 -0.004136562 -0.8166044 0.1029695 -6.91266e-4 -0.8247041 0.1001876 -5.56464e-4 -0.8342217 0.09732031 0.01118904 -0.8352909 0.09954738 0.01692891 -0.8272345 0.0984255 0.01893162 -0.8167445 0.04007458 0.01847702 -0.8336278 0.04345577 -0.01379811 -0.8306225 0.04044878 0.0194028 -0.8114667 0.0396943 -0.01008695 -0.8075677 0.1110461 -0.05746036 -0.841664 0.1131641 -0.05780553 -0.8357922 0.0412541 -0.07055574 -0.8326905 0.04228919 -0.05236893 -0.8296173 0.1143595 -0.06341344 -0.8265678 0.03658729 -0.05166417 -0.805988 0.1078301 -0.02438765 -0.8246774 0.1059876 -0.02423614 -0.8329032 0.1079612 -0.02947807 -0.8165681 0.1079063 -0.06294643 -0.8184915 0.0962907 0.02402859 -0.7575584 0.03521579 -0.03140646 -0.7965626 0.08276349 0.03742009 -0.7562871 0.08510911 0.03942203 -0.7745341 0.0965889 0.02315592 -0.7779918 0.09641259 0.02272993 -0.8030104 0.101468 -2.63689e-5 -0.8048544 0.1021009 0.00133419 -0.7837347 0.04507768 -0.02327096 -0.7596023 0.03865438 -0.005449473 -0.7597308 0.06330519 -0.05127954 -0.7653723 0.05447179 -0.04329788 -0.7612832 0.1046695 -0.03154706 -0.804811 0.09839379 -0.02517223 -0.7839039 0.07882708 -0.04266333 -0.7640985 0.09005397 -0.02833884 -0.7669923 0.1021416 0.005824804 -0.756893 0.09912812 -0.01627004 -0.7603406 0.1050192 0.01072329 -0.7289126 0.1052745 0.01545256 -0.7016326 0.0991798 0.0254516 -0.7001957 0.097148 0.02372741 -0.7299453 0.0819776 0.03720331 -0.7252465 0.08665871 0.04150277 -0.6987348 0.09127038 -0.02354264 -0.7326186 0.09577411 -0.01983857 -0.7001369 0.1060623 -1.05886e-4 -0.7013029 0.1030608 -0.005740582 -0.7295064 0.04865419 0.01675027 -0.7335664 0.04424506 0.02045959 -0.6964464 0.04379957 0.002304911 -0.6968449 0.04930627 -0.01583635 -0.6984781 0.04950529 -0.02034723 -0.7322574 0.042203 0.002093672 -0.7324494 0.08582258 -0.03085809 -0.6955389 0.08160698 -0.03518545 -0.7323326 0.0596978 -0.02959918 -0.6956732 0.07193869 -0.03507667 -0.6949505 0.06738227 -0.04058754 -0.7323467 0.05987006 -0.02983826 -0.7319883 0.06583768 0.04165691 -0.6977033 0.06368857 0.04404652 -0.7316439 0.01649796 -0.07699149 0.756401 0.01763707 -0.07646602 0.7560792 0.01673406 -0.0767849 0.7559602 0.01852989 -0.0762276 0.7564322 0.01772636 -0.07652562 0.7566406 0.01762115 -0.07737112 0.7569081 0.01976507 -0.07814532 0.757663 0.01979416 -0.07609343 0.7570227 0.02013677 -0.07611292 0.757179 0.01863068 -0.0754199 0.7554972 0.01749646 -0.0764302 0.7555915 0.0177533 -0.07624542 0.7550793 0.01710557 -0.0773164 0.7547511 0.01630556 -0.07710784 0.7555746 0.01680129 -0.07670444 0.7554658 0.01919609 -0.07454222 0.7553528 0.01900637 -0.07688593 0.7549219 0.01825547 -0.07777774 0.7544184 0.02345919 -0.07678073 0.7546705 0.06954807 -0.02283155 0.5657351 0.05314278 -0.03762608 0.5618513 0.03787839 -0.04499477 0.5581457 0.02514785 -0.04373055 0.5584911 0.0166068 -0.0431624 0.5556077 0.007561683 -0.03425639 0.5603641 0.0122711 -0.03893744 0.5576683 0.04047828 -0.06563907 0.6736642 0.04007697 -0.073556 0.6832153 0.02131718 -0.07024329 0.6484715 0.03220701 -0.07771861 0.6662003 0.02916038 -0.05987501 0.654067 0.03588789 -0.0476765 0.6588891 0.07113599 0.01811528 0.7674887 0.06966388 -7.08424e-4 0.7600612 0.06831282 -0.004468381 0.7551135 0.0611726 0.001210272 0.6981129 0.06130009 0.01011127 0.6981301 0.06187629 0.01712083 0.7012505 0.06485027 0.02875566 0.7243701 0.06544238 0.03250664 0.7355281 0.06289279 -0.002589106 0.7033029 0.06052541 0.02334618 0.6960387 0.06195211 0.02806144 0.7120448 0.04859107 -0.0379889 0.6706874 0.03991681 -0.05360138 0.6641889 0.0341776 -0.06889921 0.6614983 0.04354619 -0.03393608 0.6644639 0.05370301 -0.01841866 0.6723722 0.0578348 -0.02358299 0.6785194 0.04425805 -0.07774943 0.7361744 0.04654741 -0.07695192 0.7291885 0.05524599 -0.0643779 0.72041 0.04912328 -0.06666982 0.7067471 0.05628359 -0.05775541 0.710067 0.01799499 -0.08311283 0.742477 0.01879757 -0.0813691 0.7441531 0.01961159 -0.0803532 0.7463076 0.01626235 -0.08565491 0.7411188 0.02036845 -0.08784741 0.7341482 0.01364189 -0.0886994 0.7388163 0.009846746 -0.08822059 0.7455219 0.008404076 -0.0939933 0.7402745 0.01499807 -0.09229052 0.7307509 0.0187295 -0.07802802 0.7523302 0.01679039 -0.0786038 0.7502142 0.02046608 -0.07436144 0.7550337 0.01987606 -0.07824862 0.753743 0.02031236 -0.0775789 0.7546985 0.01470875 -0.0803532 0.747983 0.01597857 -0.08125025 0.7460031 0.01292049 -0.0835368 0.7460998 0.01509606 -0.08232033 0.7449625 0.005909562 -0.1023457 0.7355834 0.01466715 -0.09049892 0.7346734 0.009373545 -0.09340363 0.7355371 0.005419075 -0.09681642 0.7465778 0.007783293 -0.09211373 0.7461237 0.01979786 -0.08951169 0.7309813 0.01001715 -0.1052563 0.7225444 0.008633792 -0.1072293 0.7190008 0.01138216 -0.1041725 0.7189996 0.007216393 -0.09055823 0.7505338 0.005391776 -0.094222 0.7509587 0.004779279 -0.08917814 0.7713102 0.004917681 -0.08944332 0.7770069 0.01308596 -0.04176354 0.8479328 0.01242309 -0.07189214 0.820159 0.01030457 -0.08748531 0.7866833 0.01079839 -0.08208513 0.8009755 0.009872257 -0.08965492 0.7771408 0.00945127 -0.08880853 0.7713232 0.008482992 -0.0873599 0.7665105 0.006589055 -0.0869531 0.7607129 0.004147887 -0.08823865 0.7638503 0.007320284 -0.08643233 0.7635492 0.06681251 -0.01943141 0.7622397 0.05020177 -0.01566249 0.8335654 0.052392 -0.04852771 0.8156368 0.05053937 -0.06344461 0.7987095 0.04584521 -0.07116854 0.7872516 0.03777486 -0.08157092 0.767155 0.0365839 -0.0799939 0.7648266 0.03465175 -0.07824492 0.7627365 0.03420847 -0.07824301 0.7604663 0.03412616 -0.0760861 0.7602244 0.03222316 -0.07185113 0.7604329 0.0355131 -0.07784384 0.7640136 0.03926098 -0.0812174 0.7694739 0.04123079 -0.08053582 0.7730605 0.043078 -0.0772224 0.7783838 0.0553084 -0.05798023 0.7818385 0.06862431 -0.01044988 0.7684859 0.06120187 -0.03912854 0.7840825 0.0587939 -0.04721963 0.7911918 0.0616579 -0.03374183 0.8021081 0.06392198 -0.004649877 0.8172158 0.0713576 0.007787227 0.7767217 0.07147228 0.01607036 0.7775032 0.06477516 -0.02723568 0.7917303 0.06958532 0.001080214 0.8025553 0.07001149 0.01456576 0.8024423 0.06356519 0.01128876 0.820608 0.06667309 0.03749275 0.7541206 0.06546539 0.03777694 0.7461266 0.06292378 0.03361773 0.7232646 0.06429392 0.03672605 0.7371297 0.0696178 0.02969086 0.7731936 0.06854116 0.03394424 0.7681613 0.07068282 0.02360153 0.7764677 0.0698952 0.02515846 0.7996571 0.0642566 0.02471387 0.8183829 0.04882776 0.02302062 0.8397934 0.04290461 0.01748144 0.8448306 0.04261267 0.03955733 0.8406954 0.03539848 -0.009043037 0.8470278 0.0427252 -0.00349462 0.8430458 0.04959309 0.002309739 0.8380882 0.06839907 0.03482776 0.7967154 0.06463807 0.03776878 0.8125173 0.04949688 0.04182767 0.8335633 0.06694781 0.04189103 0.7888503 0.06435507 0.04898166 0.7663812 0.06354498 0.04688358 0.7527232 0.06151056 0.05550014 0.7575592 0.05546247 0.07150846 0.7665673 0.03439009 0.09029227 0.7748187 0.02552366 0.09396129 0.7755944 0.01726526 0.09578478 0.7757055 0.04326277 0.0845102 0.7729786 0.05074405 0.07778435 0.7701997 0.009000599 0.09730297 0.7755497 0.0645219 0.04766643 0.8035591 0.06178939 0.05719095 0.7740889 0.05723977 0.04167574 0.7141712 0.04346519 -0.0662502 0.6835345 0.04726248 -0.05916279 0.6851133 0.04524201 -0.05710697 0.6746994 0.0543251 -0.04805099 0.6875748 0.05232959 -0.04459136 0.6773319 0.06186968 -0.03420531 0.6979465 0.0612545 -0.04092991 0.7069275 0.06008261 -0.02878999 0.6874657 0.06360399 -0.03169912 0.7210102 0.06493008 -0.02014571 0.7129822 0.06684941 -0.02895539 0.7340439 0.06787228 -0.01799589 0.7306483 0.06899291 -0.00523132 0.7419199 0.06309169 -0.01472038 0.6997919 0.06027138 -0.0100249 0.6906984 0.06841468 -0.01719641 0.7421901 0.005990684 -0.06237185 0.8347722 0.02017807 -0.0567736 0.8362751 0.02859389 -0.05233925 0.8353035 0.03722578 -0.0468325 0.8333793 0.04491126 -0.03956592 0.8304755 0.01271247 -0.05964761 0.8360333 0.05167001 -0.03250342 0.82648 0.07077902 0.005099654 0.764824 0.06344687 -0.01980781 0.8113955 0.07044887 -0.001554906 0.7736159 0.0682919 -0.0138207 0.7985294 0.06761622 0.03655815 0.7617063 0.0656563 0.04726344 0.7784158 0.0624836 0.05566436 0.7908304 0.05389338 0.07299429 0.7880113 0.05253338 0.06801825 0.8074288 0.05076277 0.05759894 0.8229901 0.02772068 -0.01344823 0.8505918 0.02023071 -0.01591551 0.8532953 0.01312905 -0.01826149 0.8545309 0.006379783 -0.02015852 0.8550567 0.03563088 0.01298934 0.8495249 0.0267927 0.01020723 0.8530322 0.01984226 0.008409738 0.855045 0.01285916 0.007040023 0.8563231 0.005900144 0.006178438 0.8568922 0.03554749 0.03647166 0.8465812 0.02807748 0.03352975 0.8513187 0.02094256 0.03220516 0.8539615 0.01367419 0.03129613 0.8555904 0.006457567 0.03069627 0.8564887 0.04401749 0.05870717 0.8299347 0.03739506 0.05938804 0.8358838 0.03038477 0.05984705 0.8407483 0.02294898 0.06014716 0.8443973 0.01576858 0.06097155 0.8470273 0.008570671 0.06153225 0.8485454 0.04652309 0.07166117 0.8137515 0.0397402 0.07508146 0.8188033 0.0322116 0.07798749 0.822736 0.02414375 0.08021515 0.8255336 0.04933476 0.07733565 0.7934945 0.04180288 0.08387434 0.7962518 0.03350549 0.08821004 0.7987509 0.02492856 0.09105646 0.8003637 0.01677197 0.09248524 0.8012746 0.008368849 0.09325337 0.8020086 0.0163033 0.08237779 0.8273511 0.008021652 0.08382987 0.8283043 0.01278036 -0.0531066 0.5414487 0.03667259 -0.05332857 0.5464293 0.02133858 -0.05385267 0.5440195 0.06114739 -0.04538667 0.5375078 0.08311319 -0.036035 0.5418673 0.6801775 0.008469164 0.4980357 0.6812127 0.001801669 0.5069642 0.6823487 -0.001893937 0.5209098 0.6836362 3.08313e-4 0.5324931 0.683752 0.0114836 0.5479763 0.7564445 0.02190941 0.504278 0.7553782 0.01684421 0.5061429 0.749475 0.02254039 0.5038398 0.7480692 0.01720267 0.5056015 0.6776906 0.04182147 0.4885828 0.6783149 0.05318951 0.4969252 0.67835 0.05886471 0.5062537 0.6841949 0.02260327 0.5524684 0.6833732 0.03821909 0.5521166 0.7372491 0.0211417 0.5024309 0.6785674 0.01714491 0.4907763 0.6772873 0.02689307 0.4868571 0.6772775 0.06461912 0.5155735 0.7347618 0.0579428 0.5342062 0.6775965 0.05958902 0.5265595 0.6817606 0.05300861 0.5446689 0.879374 -0.01392507 0.4925479 0.879145 -0.01589566 0.4844684 0.8781406 -0.01393097 0.4975133 0.8760474 -0.02364456 0.5031865 0.8767252 -0.02092999 0.5037124 0.8769437 -0.01677846 0.5023658 0.8741006 -0.02096384 0.4804396 0.8726573 -0.02528774 0.4821704 0.8716413 -0.02807623 0.4835519 0.8536649 -0.03248429 0.4969197 0.8190475 -0.01688218 0.5161534 0.8524591 0.00787878 0.5383313 0.8454315 0.007938504 0.5413607 0.8398099 0.007563889 0.5423184 0.8538988 0.01143217 0.5372782 0.8467196 0.01133131 0.5407078 0.840645 0.01126927 0.5417894 0.8336239 0.01277387 0.5419999 0.8547589 0.03071159 0.5425382 0.8430258 0.03023952 0.5450569 0.8484963 0.03072637 0.5444338 0.8538277 0.03430521 0.540253 0.8428251 0.03534358 0.543608 0.8482656 0.0348131 0.542586 0.8540643 0.05788379 0.5353541 0.842342 0.05630129 0.5388025 0.8475401 0.05703848 0.5374366 0.853823 0.06113177 0.531997 0.8425064 0.06028288 0.5353643 0.8477035 0.06019508 0.534161 0.9528235 0.01869291 0.5345696 0.9530132 0.02163189 0.5354146 0.9533192 0.02220946 0.5351586 0.9531664 0.0184772 0.5340975 0.820165 -0.002729237 0.53912 0.8217691 0.007864058 0.5424872 0.8233061 0.01457637 0.5424372 0.824258 0.02926367 0.5448523 0.825191 0.03766137 0.5441285 0.8244665 0.07006537 0.5336502 0.8259757 0.05313122 0.5402261 0.8248188 0.05941617 0.5381307 0.9462326 0.01703709 0.522674 0.9468522 0.0274648 0.5229636 0.8650556 0.07937192 0.5119969 0.8608347 0.07858639 0.5121038 0.8568225 0.07799273 0.5121932 0.8533837 0.07691723 0.5118643 0.8480194 0.07547688 0.5105981 0.7538713 0.009701371 0.509414 0.7774679 -0.00655663 0.4987727 0.8069728 0.01162296 0.5426732 0.8078606 0.01750391 0.5430691 0.808767 0.03173041 0.5447102 0.809338 0.03890711 0.5443601 0.8102238 0.06615883 0.5331035 0.8100681 0.05163079 0.5407537 0.8093618 0.05703049 0.5390073 0.7934937 0.01683217 0.5429068 0.7933453 0.02178966 0.544119 0.7939173 0.03388577 0.545194 0.7934953 0.03981161 0.5448542 0.7954896 0.06427073 0.5347005 0.7944149 0.0492751 0.5425802 0.7944444 0.05514281 0.5406431 0.7697086 0.0295813 0.5459837 0.7748968 0.03646147 0.5458825 0.7710162 0.04106682 0.545467 0.7817899 0.06063848 0.5327773 0.7774162 0.04769009 0.5428832 0.7730555 0.05170577 0.540704 0.7501811 0.01792889 0.5434494 0.7512575 0.03157937 0.5470662 0.7502073 0.04656958 0.5471588 0.7499723 0.05764329 0.5368469 0.754762 0.05113559 0.5101556 0.7364138 0.05157381 0.5086311 0.06103408 -0.06625849 -0.7770582 0.08168339 -0.06235319 -0.7803424 0.04400509 -0.05456125 -0.7827669 0.09382712 -0.04213726 -0.783989 0.08548122 -0.08203727 -0.8015321 0.06083416 -0.09074187 -0.7949546 0.03765195 -0.06288307 -0.7980268 0.0990687 -0.05750858 -0.8030962 0.1031979 -0.07078719 -0.814364 0.03833389 -0.006639063 -0.7845916 0.0446909 0.01626008 -0.7792847 0.03456878 -0.07163584 -0.818268 0.03421366 -0.08015674 -0.8107651 0.0871033 -0.09263455 -0.8097717 0.06156909 -0.1023403 -0.8027209 0.023889 -0.1049411 -0.8460115 0.05431437 -0.1336494 -0.8214932 0.06851828 -0.1322473 -0.8226312 0.04869896 -0.1345532 -0.818463 0.07351219 -0.131316 -0.8248761 0.08414077 -0.1285356 -0.8258206 0.08790528 -0.1267909 -0.827697 0.09725028 -0.1182134 -0.8267892 0.1148015 -0.1001659 -0.8303781 0.06117737 0.04296618 -0.7546436 0.04306375 0.01739782 -0.7556486 0.05839228 0.0503242 -0.7788781 0.08906191 0.0438562 -0.8024543 0.05290758 0.061055 -0.804542 0.05498701 0.05805271 -0.8288384 0.08964651 0.04598861 -0.8217146 0.09009462 0.0400213 -0.831988 0.04690855 -0.1395052 -0.8198443 0.04760217 -0.1460383 -0.8204078 0.03320497 -0.1438283 -0.8247808 0.04893445 -0.1537994 -0.8236092 0.03254085 -0.1534969 -0.8264539 0.03292286 -0.1618615 -0.8280246 0.04931378 -0.161504 -0.8259142 0.03501409 -0.1702884 -0.8309012 0.05069828 -0.1694383 -0.8313176 0.07527852 -0.1350169 -0.8280179 0.08318829 -0.1333587 -0.8262012 0.08394479 -0.1439576 -0.8263844 0.07611811 -0.1443019 -0.8281608 0.07584577 -0.1503038 -0.8275405 0.08414387 -0.1499652 -0.8278751 0.08446723 -0.1571073 -0.831919 0.07678002 -0.1583356 -0.831799 0.08527982 -0.1616887 -0.8352971 0.07703077 -0.1630022 -0.8344721 0.08489447 -0.1665289 -0.8391419 0.07775008 -0.1675974 -0.8397477 0.08965587 -0.1290113 -0.8300862 0.09738028 -0.1253086 -0.8286823 0.1035678 -0.1148543 -0.8292705 0.1139024 -0.1103444 -0.8322484 0.1048691 -0.1202138 -0.8308983 0.111902 -0.1172384 -0.8326619 0.1055435 -0.125311 -0.8340926 0.114023 -0.1254103 -0.8368398 0.1055125 -0.1317493 -0.8363802 0.1140408 -0.1311491 -0.8399406 0.1051991 -0.1378615 -0.8388235 0.1134116 -0.1371748 -0.8433434 0.1047104 -0.1421535 -0.8412213 0.1127731 -0.1407606 -0.8450821 0.09960019 -0.1210194 -0.8301404 0.1022375 -0.1192422 -0.8313782 0.09944319 -0.1225439 -0.8362717 0.1018027 -0.121802 -0.834196 0.1029087 -0.1263235 -0.8378968 0.1028206 -0.132314 -0.8390738 0.1023232 -0.1374223 -0.8408019 0.1185057 -0.1060571 -0.8377183 0.1148708 -0.1160381 -0.8391225 0.1157526 -0.1244597 -0.8416101 0.1151258 -0.1311104 -0.8439941 0.1143695 -0.1361202 -0.8473575 0.1135276 -0.1414077 -0.8501288 0.08809942 -0.1268408 -0.8323206 0.08799511 -0.1299378 -0.834899 0.0865277 -0.1277165 -0.8315784 0.086124 -0.131584 -0.8334705 0.08736509 -0.1423926 -0.8299888 0.08720701 -0.1486653 -0.8326325 0.08734029 -0.155765 -0.8356811 0.0875287 -0.1600331 -0.8382492 0.07250541 -0.1354844 -0.8341318 0.07341217 -0.1443666 -0.8341967 0.0737431 -0.1497899 -0.8324194 0.07370132 -0.1580895 -0.8359354 0.07392388 -0.1629931 -0.8384324 0.07503509 -0.167214 -0.8415098 0.06985169 -0.1362465 -0.8319203 0.05132377 -0.1417545 -0.8267723 0.05279988 -0.1465404 -0.826628 0.05336898 -0.1527548 -0.8294669 0.05535387 -0.1591336 -0.8333005 0.05592709 -0.1645137 -0.835353 0.02715778 -0.1394364 -0.8358756 0.02605009 -0.1497248 -0.8387303 0.02540487 -0.1577274 -0.8403975 0.02592778 -0.1663991 -0.8419156 0.02804237 -0.1238923 -0.8503296 0.1196098 -0.09858459 -0.8365408 0.118993 -0.1027559 -0.845503 0.1163613 -0.1141861 -0.8461186 0.1148307 -0.1232123 -0.8469016 0.114139 -0.1305913 -0.8498845 0.1135592 -0.1359341 -0.852516 0.1115483 -0.1408396 -0.8558405 0.1202421 -0.09477275 -0.8442013 0.1163505 -0.1017184 -0.8499026 0.1143991 -0.1161407 -0.8497356 0.1129599 -0.1229439 -0.85017 0.1114663 -0.1297231 -0.8539339 0.1101397 -0.1347206 -0.8562712 0.1079064 -0.1399903 -0.8585396 0.1165053 -0.09351289 -0.8523542 0.1024487 -0.1188577 -0.8523138 0.103002 -0.1247451 -0.8497345 0.1015165 -0.1294239 -0.8523728 0.09951871 -0.1332471 -0.8543644 0.09854507 -0.1383751 -0.8555821 0.1013967 -0.1217527 -0.848416 0.1013421 -0.1253259 -0.8458851 0.09980279 -0.1312562 -0.8472638 0.09835571 -0.1357973 -0.8486751 0.09758627 -0.1396661 -0.8508422 0.09864568 -0.1423616 -0.8554861 0.1058348 -0.1428285 -0.8584964 0.07073068 -0.131215 -0.8531642 0.08215022 -0.1256088 -0.8546619 0.07594472 -0.1421568 -0.846678 0.08211058 -0.1409799 -0.8477531 0.0816546 -0.1475974 -0.8443907 0.07684999 -0.1497943 -0.8436367 0.08351659 -0.1533648 -0.8491804 0.07581818 -0.1545104 -0.8487234 0.08477652 -0.1582146 -0.8519301 0.0763114 -0.1594094 -0.8508839 0.08494371 -0.1640427 -0.8532594 0.07605862 -0.1672669 -0.8533344 0.07067471 -0.1352874 -0.8497816 0.0742827 -0.1432043 -0.8445866 0.07547551 -0.1501399 -0.8417255 0.0740754 -0.1560031 -0.8450857 0.0734921 -0.1604459 -0.847434 0.07375019 -0.167587 -0.8500172 0.08561521 -0.1408039 -0.8464298 0.08539491 -0.1297816 -0.8499495 0.08525007 -0.1476718 -0.8424347 0.08700758 -0.1535012 -0.8455723 0.08782029 -0.1590785 -0.8474663 0.08857709 -0.1640728 -0.8481621 0.0870428 -0.1281962 -0.8497486 0.06392419 -0.1313893 -0.8540826 0.05331826 -0.1329177 -0.8544636 0.1043504 -0.1448144 -0.8575589 0.031452 -0.1371369 -0.8481175 0.03136098 -0.1454591 -0.8495309 0.0305671 -0.1528713 -0.8519527 0.03122949 -0.1642879 -0.8529312 0.03260588 -0.1720158 -0.8529306 0.03597825 -0.17049 -0.8316361 0.04973769 -0.1701334 -0.831651 0.03299087 -0.1755353 -0.8330262 0.05126368 -0.1734366 -0.8326772 0.03639531 -0.1758029 -0.830537 0.0381506 -0.1724683 -0.8304879 0.04651176 -0.1721271 -0.8296717 0.04836291 -0.1750974 -0.8305378 0.04927098 -0.1800087 -0.8311369 0.05189418 -0.1786272 -0.833217 0.0377224 -0.1806337 -0.831457 0.03365808 -0.1801474 -0.8331207 0.03247117 -0.1751696 -0.833017 0.03259688 -0.1798112 -0.8345882 0.05261689 -0.172318 -0.8334513 0.05319887 -0.1774537 -0.8349552 0.02725666 -0.1729625 -0.8433329 0.02965021 -0.1805067 -0.8436359 0.02797508 -0.1371243 -0.8429489 0.02757447 -0.1456429 -0.8450013 0.0261656 -0.1560718 -0.8471157 0.0272234 -0.1652325 -0.8484623 0.02944165 -0.1725293 -0.8483874 0.06833082 -0.1349571 -0.8491591 0.04629248 -0.1347056 -0.8523923 0.04721266 -0.1424005 -0.8514031 0.04882669 -0.1496391 -0.8502941 0.0505675 -0.1568256 -0.8527817 0.05187797 -0.1661028 -0.853968 0.05166208 -0.173069 -0.8535616 0.05067569 -0.1390298 -0.8217443 0.05262988 -0.137976 -0.8233126 0.05631548 -0.1712958 -0.8382886 0.0509333 -0.1413302 -0.8439499 0.05163937 -0.1450155 -0.8418889 0.05703067 -0.1720315 -0.8458098 0.05679076 -0.1646203 -0.8460938 0.05530476 -0.1574523 -0.8447838 0.05330401 -0.1504033 -0.8415458 0.05649107 -0.1761875 -0.8393884 0.0567798 -0.1766194 -0.8445309 0.05105155 -0.1795462 -0.8519341 0.03350341 -0.1793947 -0.8509142 0.03038758 -0.1783453 -0.8482193 0.0539456 -0.1395811 -0.8289773 0.05340236 -0.1410706 -0.8433271 0.07092267 -0.1368662 -0.8464773 0.1012031 -0.1225236 -0.8423169 0.1013589 -0.1262096 -0.8425803 0.1016543 -0.1319417 -0.8436675 0.1013413 -0.1368967 -0.8450291 0.1000341 -0.1411033 -0.8468359 0.07191038 -0.1326215 -0.8294725 0.06978422 -0.1331482 -0.8280403 0.05035591 -0.1118181 -0.8061193 0.04088836 -0.1071813 -0.8074425 0.1187934 -0.07329046 -0.8391768 0.1138395 -0.07146143 -0.8471581 0.1188122 -0.07721263 -0.8311742 0.02833777 -0.09434795 -0.8182986 0.02820026 -0.08870977 -0.8333678 0.03708076 -0.08947587 -0.8449771 0.0707584 -0.1138166 -0.8121475 0.08147162 -0.1101521 -0.8147932 0.1041245 -0.09417414 -0.8217065 0.09751558 -0.09854716 -0.8200099 0.09001487 -0.1038334 -0.8177902 0.1090028 -0.09013998 -0.8237029 0.1118125 -0.08115118 -0.8247293 0.06171536 -0.1143378 -0.8106578 0.0531339 -0.1006904 -0.8008196 0.04323047 -0.09753274 -0.8026501 0.04622471 -0.08708357 -0.7963295 0.05456137 -0.08946418 -0.7951826 0.07100862 -0.1016741 -0.8047152 0.07925939 -0.09914636 -0.8070518 0.0707001 -0.08907848 -0.7964129 0.0776335 -0.08694344 -0.7983661 0.07504737 -0.0728302 -0.7856361 0.06827372 -0.07527494 -0.7842526 0.09924417 -0.07935047 -0.8130283 0.0932269 -0.08720129 -0.8118152 0.0952506 -0.06796729 -0.8033266 0.09050393 -0.07729005 -0.8032831 0.08664608 -0.06470274 -0.7889341 0.09139078 -0.05859917 -0.7908414 0.08519822 -0.1166686 -0.8207898 0.07418787 -0.1208638 -0.8183153 0.1088186 -0.1032801 -0.8265886 0.1013878 -0.107698 -0.8258341 0.09370923 -0.1115072 -0.8230933 0.1156597 -0.09117758 -0.8295732 0.1186488 -0.08815854 -0.8340768 0.0617147 -0.1227655 -0.8161707 0.1191005 -0.08407086 -0.8424074 0.1162086 -0.08275455 -0.849514 0.05227231 -0.1386975 -0.8509728 0.02422297 -0.1161456 -0.8510469 0.1026016 -0.1468465 -0.8471674 0.1015713 -0.1460701 -0.8474495 0.1100447 -0.1460032 -0.8520865 0.1097338 -0.1453105 -0.8538377 0.04841119 -0.1853613 -0.8311766 0.05034047 -0.1842376 -0.8323161 0.0388025 -0.1845842 -0.83157 0.03628486 -0.1826989 -0.8329696 0.03884339 -0.1858348 -0.8319484 0.03674346 -0.1840098 -0.8328512 0.04843187 -0.1863756 -0.8315325 0.05064547 -0.1847434 -0.8326172 0.03554528 -0.1835367 -0.8340718 0.03356969 -0.1842986 -0.8359006 0.04885679 -0.187628 -0.8334994 0.03854948 -0.1871675 -0.8334904 0.03764259 -0.1886713 -0.8356993 0.04993098 -0.1881985 -0.8349865 0.03199011 -0.1844496 -0.8448463 0.03564906 -0.1860922 -0.8475017 0.05154448 -0.1874024 -0.8447479 0.05178338 -0.1840632 -0.8336336 0.05252087 -0.1831982 -0.8349995 0.05567598 -0.1824484 -0.8435865 0.09547591 -1.63564e-4 -0.8379127 0.1010521 -0.02284675 -0.8375813 0.1068913 -0.05786484 -0.8468041 0.1101744 -0.11612 -0.8519084 0.1108702 -0.1033475 -0.8544293 0.1090935 -0.1230542 -0.8506737 0.1083812 -0.1297236 -0.8553296 0.1069848 -0.1338314 -0.8579608 0.1047345 -0.1390334 -0.8590385 0.1034085 -0.1426131 -0.8591414 0.1028279 -0.1439806 -0.8576147 0.1076457 -0.07189208 -0.8511267 0.03852039 -0.1173543 -0.8576423 0.03756839 -0.1274679 -0.8559032 0.03629755 -0.1382349 -0.851706 0.03616875 -0.1461668 -0.8527415 0.03603267 -0.1531409 -0.8548433 0.03651648 -0.163318 -0.8554398 0.0375812 -0.1724343 -0.8543366 0.03638195 -0.1798347 -0.85244 0.08709299 -0.1653194 -0.8406714 0.08622187 -0.1315743 -0.8433948 0.0698328 -0.1372855 -0.846213 0.06770598 -0.1366295 -0.82362 0.0571019 -0.1361309 -0.825295 0.03692406 -0.1239567 -0.8162018 0.03436577 -0.1319617 -0.8214943 0.02664667 -0.1263936 -0.8321107 0.02642577 -0.1175693 -0.828303 0.02564889 -0.1061168 -0.8292322 0.02909475 -0.1084476 -0.8210621 0.0243436 -0.1178654 -0.8370869 0.02568727 -0.1266663 -0.8410646 0.02967959 -0.1417967 -0.8296684 0.02841407 -0.1518934 -0.8314441 0.0277183 -0.1605171 -0.8334485 0.02811127 -0.167606 -0.8353446 0.02944338 -0.17457 -0.8363344 0.03057795 -0.1802426 -0.8383157 0.03251665 -0.1853227 -0.8396617 0.03576499 -0.1886133 -0.8402688 0.05071026 -0.1892888 -0.8391073 0.05554008 -0.1828729 -0.8396759 0.03105986 -0.119722 -0.8212739 0.03010517 -0.1290402 -0.8264044 0.03355568 -0.1116315 -0.8153822 0.04410117 -0.06490337 -0.7886509 0.04565256 -0.06986647 -0.7895358 0.04321938 -0.08247399 -0.7966557 0.03936457 -0.09404706 -0.8050355 0.03713917 -0.1025612 -0.8098939 0.04000777 -0.07480418 -0.7979674 0.0364229 -0.08692145 -0.8075409 0.03319448 -0.09637445 -0.8141346 0.1017664 -0.1422213 -0.843448 0.09815382 -0.1436966 -0.8528229 0.09976208 -0.1453008 -0.8499085 0.09999901 -0.1444905 -0.8558961 0.1085206 -0.1439611 -0.8565963 0.1001905 -0.145949 -0.8546268 0.100938 -0.1471312 -0.8530273 0.1019985 -0.147912 -0.8516011 0.1028522 -0.1482115 -0.8506813 0.1077154 -0.1473402 -0.8534935 0.1069925 -0.1467232 -0.8550654 0.1056884 -0.145702 -0.8566629 0.104935 -0.1460188 -0.8452135 0.1104924 -0.1447598 -0.8486058 0.1043911 -0.1468729 -0.8462414 0.110015 -0.1461277 -0.8504232 0.1043197 -0.1483412 -0.8484407 0.1088692 -0.1473702 -0.8512001 0.1056547 -0.1485469 -0.8489384 0.1079304 -0.1480252 -0.850254 0.1048467 -0.1470656 -0.8462795 0.1050688 -0.1480543 -0.8472683 0.1055866 -0.1483939 -0.8484359 0.1083419 -0.1480604 -0.8499023 0.1050091 -0.1461521 -0.8456141 0.1102559 -0.1448196 -0.8484033 0.1099485 -0.1459575 -0.8496936 0.1096499 -0.146521 -0.8498956 0.1055307 -0.1471751 -0.8463872 0.1053833 -0.1476852 -0.8468482 0.105932 -0.1484461 -0.8478251 0.1082859 -0.1480811 -0.8495175 0.105585 -0.1463232 -0.8457689 0.1099297 -0.1454833 -0.8485786 0.1099242 -0.1460379 -0.8494617 0.1091418 -0.1472167 -0.8493666 0.08474671 -0.1702125 -0.843779 0.08466529 -0.1689851 -0.8426156 0.0843442 -0.1682494 -0.8418134 0.0788114 -0.1691557 -0.8412482 0.08395773 -0.1708548 -0.8436867 0.07894819 -0.171465 -0.8429296 0.07870572 -0.170886 -0.8424806 0.0787149 -0.1700538 -0.8418455 0.08504909 -0.1701757 -0.8441944 0.08501958 -0.1686211 -0.8427857 0.0849108 -0.168 -0.8415132 0.07854241 -0.1687097 -0.8411942 0.08418458 -0.1709265 -0.8440147 0.0786882 -0.1716113 -0.8432509 0.07790297 -0.1709746 -0.8431239 0.07815879 -0.1698241 -0.8419738 0.08427339 -0.1710942 -0.8442983 0.07856172 -0.1718534 -0.843605 0.08536893 -0.1699967 -0.8447152 0.07779461 -0.1715354 -0.8438239 0.08547699 -0.1676705 -0.8413038 0.07770091 -0.1697041 -0.8421438 0.08503067 -0.16768 -0.8410469 0.07840418 -0.1682513 -0.840924 0.08590179 -0.1706165 -0.8460704 0.08597552 -0.1699871 -0.845336 0.08557438 -0.1699719 -0.8449856 0.0776171 -0.1717256 -0.844233 0.07740741 -0.1719017 -0.8447078 0.07747709 -0.1723352 -0.8455623 0.07813972 -0.1728523 -0.8483329 0.0879302 -0.1677632 -0.8451584 0.07930129 -0.1724592 -0.8502909 0.07567751 -0.1704944 -0.8451525 0.07627499 -0.1716212 -0.8488516 0.08500111 -0.1717244 -0.8499171 0.08570832 -0.1701695 -0.8508765 0.08696937 -0.1670675 -0.8423283 0.08592939 -0.1672489 -0.8413312 0.07618951 -0.1694284 -0.843026 0.07723921 -0.1694265 -0.8423346 0.07378 -0.166972 -0.8441694 0.08653247 -0.1707593 -0.8477325 0.08804911 -0.1682379 -0.8479775 0.07804727 -0.1705807 -0.8520721 0.08850622 -0.1638424 -0.8441672 0.0734986 -0.1441135 -0.8402711 0.07405531 -0.1501784 -0.8387991 0.08691883 -0.1308147 -0.8427498 0.09979277 -0.121416 -0.8497871 0.100772 -0.122683 -0.8414558 0.07358688 -0.1570676 -0.8411379 0.07288289 -0.1618189 -0.8421639 0.08801591 -0.1588498 -0.8430327 0.08729982 -0.1538858 -0.8405959 0.0878691 -0.1477658 -0.8401625 0.08703899 -0.1409577 -0.8409664 0.07048141 -0.1429841 -0.8410276 0.07132327 -0.1478809 -0.8389465 0.0715034 -0.1551971 -0.8378938 0.0725618 -0.1619231 -0.8412725 0.05778181 -0.1637206 -0.8404828 0.05732041 -0.1574939 -0.8370575 0.05734366 -0.1504552 -0.8350698 0.0574488 -0.145359 -0.8359885 0.07374709 -0.1693159 -0.8431195 0.06266778 -0.1771882 -0.8533085 0.074184 -0.1747317 -0.8484737 0.07117897 -0.1799817 -0.8474011 0.05747288 -0.170522 -0.8439879 0.0610429 -0.1772236 -0.8427332 0.06023108 -0.1769646 -0.8432153 0.07087659 -0.176739 -0.8422434 0.07260137 -0.1749145 -0.8420137 0.07089537 -0.1758292 -0.8525405 0.0701397 -0.1800032 -0.8496605 0.0588178 -0.1775793 -0.8496924 0.05937576 -0.1776643 -0.8451744 0.0634219 -0.1808124 -0.849446 0.07393836 -0.1739265 -0.8439835 0.06223261 -0.180725 -0.8478087 0.06205177 -0.179726 -0.8451436 0.0621705 -0.179216 -0.844097 0.06282448 -0.179044 -0.8433123 0.06989091 -0.1785143 -0.8434226 0.07048767 -0.1784096 -0.8441248 0.0711674 -0.1782203 -0.8445715 0.06165456 -0.1753167 -0.8397214 0.07037949 -0.175531 -0.8402349 0.0616008 -0.1771153 -0.842378 0.07041561 -0.1766701 -0.841844 0.06310099 -0.178992 -0.8430626 0.06952738 -0.1785591 -0.8430511 0.0646488 -0.1793051 -0.8426947 0.0685203 -0.1790826 -0.8428432 0.06227636 -0.1771234 -0.8420104 0.06342428 -0.1787669 -0.8425741 0.06479251 -0.179161 -0.8424974 0.06829768 -0.1789523 -0.842602 0.0624029 -0.1758433 -0.8399209 0.07003098 -0.1758017 -0.8402785 0.06971561 -0.1768537 -0.8415205 0.06920456 -0.1784994 -0.8427054 0.06260669 -0.1771559 -0.8417596 0.06410139 -0.1787313 -0.8421434 0.06501311 -0.1789857 -0.842249 0.06820482 -0.178803 -0.8423695 0.0628696 -0.1761445 -0.8400312 0.06969338 -0.1760698 -0.8404563 0.06939041 -0.176933 -0.8413507 0.06880056 -0.1784701 -0.8423309 0.07304531 -0.17176 -0.8400189 0.07336211 -0.1674864 -0.8473792 0.07147437 -0.1605234 -0.8462462 0.06882321 -0.153209 -0.8420972 0.0681678 -0.1470758 -0.8426889 0.0678761 -0.1418843 -0.8462727 0.05755406 -0.1696945 -0.8476448 0.05844128 -0.1626999 -0.8440191 0.05839878 -0.1550037 -0.8395786 0.05865079 -0.1489249 -0.8389754 0.058012 -0.1447965 -0.8405315 0.06078588 -0.1683214 -0.8525381 0.06947171 -0.1667138 -0.8529223 0.060247 -0.1613119 -0.8466295 0.0682758 -0.1601329 -0.8485683 0.06028956 -0.1542471 -0.8415836 0.06676739 -0.1532667 -0.8432547 0.06003808 -0.1481492 -0.840902 0.06603151 -0.1470892 -0.8433477 0.0653212 -0.1425274 -0.8463878 0.05915701 -0.1440569 -0.8430151 0.0586692 -0.1720479 -0.8407381 0.05822187 -0.1651868 -0.8362961 0.05794131 -0.1601383 -0.8332908 0.05713331 -0.151623 -0.8321525 0.05716717 -0.1459639 -0.8314403 0.07197546 -0.1638889 -0.8349021 0.07112902 -0.1585968 -0.832568 0.07239949 -0.1509215 -0.8298446 0.07211148 -0.1450323 -0.8273628 0.0608406 -0.173348 -0.8384224 0.07107931 -0.1737186 -0.8390152 0.05991256 -0.1665872 -0.832967 0.07047909 -0.1659257 -0.8320902 0.05926859 -0.1612459 -0.8290292 0.06987482 -0.1607121 -0.827672 0.06876957 -0.1527609 -0.8242368 0.05841481 -0.1533425 -0.8267328 0.0588172 -0.1464032 -0.8265752 0.06864237 -0.1457703 -0.8224408 0.09781581 -0.1296899 -0.8295723 0.09020853 -0.132367 -0.8304721 0.09009432 -0.1415309 -0.8316537 0.09788221 -0.1413598 -0.8329883 0.09790098 -0.1452468 -0.8341538 0.08987599 -0.1469695 -0.8330847 0.0981878 -0.1506358 -0.8381713 0.08935493 -0.1524718 -0.8375899 0.09717708 -0.1558172 -0.8439557 0.09025841 -0.1553928 -0.8426209 0.1007867 -0.128521 -0.835027 0.1009887 -0.1398203 -0.8364425 0.101149 -0.1449154 -0.8379294 0.1009697 -0.1488202 -0.8405691 0.08810627 -0.1329605 -0.8348377 0.08796972 -0.1417908 -0.8364524 0.08821588 -0.1456114 -0.837401 0.08770889 -0.1505619 -0.8412631 0.08710032 -0.1545618 -0.8462398 0.09008461 -0.1279559 -0.8502466 0.09525418 -0.1260107 -0.8485137 0.09622168 -0.1369165 -0.8465219 0.0899142 -0.1378512 -0.8467011 0.09738558 -0.1411753 -0.8515399 0.09038072 -0.1418288 -0.8529733 0.09757548 -0.144555 -0.8532506 0.09023082 -0.1449748 -0.8547319 0.09757602 -0.1486365 -0.8541431 0.08983451 -0.1491957 -0.8556555 0.08808541 -0.1304892 -0.8477331 0.0885092 -0.1380941 -0.8442399 0.08631682 -0.1430551 -0.8487325 0.08592963 -0.1465741 -0.8512452 0.0862953 -0.1506307 -0.8531917 0.0970779 -0.1264445 -0.8451177 0.09851437 -0.1372427 -0.8445675 0.09932398 -0.1417882 -0.847213 0.1000779 -0.1458206 -0.8496924 0.09993582 -0.1501464 -0.8509483 0.1002189 -0.1531981 -0.8453738 0.09624397 -0.1583878 -0.8478661 0.09716892 -0.1572571 -0.8472282 0.09654301 -0.1565691 -0.8448896 0.0908212 -0.1565026 -0.8435466 0.09572488 -0.1586499 -0.8485625 0.09199082 -0.1591095 -0.8481089 0.09108912 -0.1592444 -0.8470036 0.09000599 -0.1582993 -0.8460276 0.09674382 -0.1579798 -0.8487253 0.09761607 -0.1568757 -0.8471352 0.0965839 -0.1563225 -0.8446353 0.09062379 -0.1561056 -0.8433308 0.09596109 -0.1585834 -0.8489626 0.0915085 -0.1591381 -0.8483349 0.09062379 -0.1588467 -0.8479027 0.08929342 -0.1578308 -0.8463042 0.09588527 -0.1586158 -0.849476 0.09150522 -0.1592169 -0.8488313 0.09688901 -0.1579154 -0.8496578 0.0902853 -0.1589122 -0.848731 0.09833717 -0.1562442 -0.8472838 0.08902108 -0.1575701 -0.8464413 0.09674412 -0.1561407 -0.8444037 0.090532 -0.155741 -0.8429442 0.09824937 -0.1554864 -0.8516252 0.097956 -0.1565604 -0.8503305 0.09729468 -0.1574492 -0.8500277 0.09030652 -0.158886 -0.8494355 0.09012961 -0.1586314 -0.8504931 0.08941882 -0.1575232 -0.8516815 0.09004873 -0.1560184 -0.8536761 0.09944099 -0.1543064 -0.8498236 0.09072619 -0.1541346 -0.8550564 0.08732128 -0.1563459 -0.8507361 0.0880661 -0.154395 -0.8539203 0.09691977 -0.1533279 -0.8545189 0.09724748 -0.1515418 -0.8546541 0.09933078 -0.1548526 -0.8485495 0.09874039 -0.1557548 -0.8475051 0.08793097 -0.1572774 -0.848423 0.08846122 -0.157365 -0.8469886 0.08599877 -0.1536958 -0.8492058 0.09788101 -0.1543164 -0.8531392 0.09916192 -0.1529403 -0.8518496 0.09045308 -0.1519566 -0.8557538 0.1006222 -0.1515293 -0.8483516 0.0872094 -0.1329761 -0.8416205 0.08691787 -0.1395992 -0.8409085 0.08673977 -0.1442164 -0.8420754 0.08556717 -0.1484501 -0.8460054 0.1012792 -0.1468487 -0.8445405 0.1010304 -0.1421278 -0.8426421 0.100626 -0.1378663 -0.8414182 0.1004275 -0.1266363 -0.8393919 0.08738398 -0.1231816 -0.8546619 0.09649097 -0.1191691 -0.8544489 0.08687418 0.02571386 0.7512572 0.08594727 0.02839589 0.7413896 0.0880391 0.03162717 0.7412606 0.0890398 0.02850526 0.7534721 0.0796321 0.01421552 0.7569513 0.08493602 0.02236807 0.7554258 0.0863437 0.02325654 0.7590248 0.08016151 0.01318895 0.7588056 0.07613921 0.01012915 0.7566649 0.07731121 0.008891046 0.7554529 0.0839532 0.02420145 0.7604077 0.08569848 0.03035295 0.7551015 0.07712191 0.01012372 0.760273 0.07568949 0.006428837 0.7563281 0.08569312 0.03364533 0.7418157 0.06976491 0.001046538 0.7197485 0.06614291 -0.001191616 0.7176735 0.07151389 0.004195272 0.723743 0.07441741 0.007673144 0.7228308 0.0756247 0.005150675 0.7502635 0.07554978 0.006838679 0.7504956 0.06774097 -8.83318e-4 0.7236118 0.07132929 0.002947449 0.7243165 0.0719828 0.002530634 0.7202737 0.07522517 0.003339231 0.7259607 0.06904959 2.94081e-4 0.7323442 0.0766623 0.006650328 0.733018 0.07404947 0.006440341 0.7364414 0.07388538 0.006653249 0.7387975 0.07565468 0.007683873 0.7415896 0.07094877 0.001116752 0.7158623 0.07232201 0.00328958 0.7179846 0.07256317 0.003262162 0.7123544 0.0733096 0.005447864 0.7147771 0.07373607 0.007602274 0.7098215 0.07360666 0.01283013 0.7102775 0.07501709 0.008563756 0.7119551 0.0746712 0.009897828 0.7178342 0.07587128 0.01177233 0.7159969 0.07473468 0.01231127 0.7114245 0.07646507 0.01545459 0.7137995 0.07208508 0.01742315 0.7133718 0.07879078 0.02021807 0.719996 0.07805782 0.01835066 0.7224187 0.0798161 0.02145075 0.7252589 0.08080369 0.02380573 0.7231953 0.0847029 0.02751457 0.7361202 0.08639937 0.02976268 0.7350864 0.08372378 0.03141784 0.7345066 0.07626378 0.02191555 0.7178234 0.07863181 0.02563405 0.7228219 0.07455199 0.007633745 0.7424135 0.06974607 0.003007352 0.7480827 0.06997549 0.02743065 0.7637961 0.06793731 0.03319144 0.7483105 0.06123548 0.005398035 0.6966819 0.06604808 0.03391116 0.742462 0.07279688 0.009003043 0.7376537 0.07656538 0.01028424 0.7405098 0.07401812 0.009797632 0.7412975 0.07454979 0.01465225 0.739235 0.07738471 0.01477837 0.7386026 0.07292526 0.01283645 0.7365784 0.0775116 0.01669836 0.7375388 0.07447171 0.01682978 0.7382048 0.07328367 0.01522856 0.734209 0.08328479 0.02473336 0.7506318 0.08528089 0.02682876 0.7418477 0.08118361 0.02119934 0.7550105 0.08049023 0.02119773 0.7292815 0.08386397 0.02623838 0.7368829 0.08350598 0.02022963 0.7466477 0.0835058 0.02270197 0.7400823 0.07546877 0.01250356 0.7515 0.08121138 0.01845353 0.7504192 0.07360529 0.008823752 0.7530483 0.08028662 0.01958644 0.7323619 0.08171808 0.02204036 0.7368769 0.08580809 0.02783703 0.7524862 0.08533161 0.02973145 0.741874 0.08353137 0.02337634 0.7568077 0.07931691 0.02192234 0.7271471 0.07753807 0.01631915 0.7241973 0.08394062 0.02819555 0.736071 0.0729227 0.00769937 0.7436145 0.07225817 0.01056808 0.7423068 0.08166968 0.01885354 0.7443 0.08156961 0.02127635 0.7390216 0.0782504 0.01186776 0.7483838 0.07406121 0.006609261 0.7511702 0.07869791 0.01978915 0.7322961 0.08046042 0.02144163 0.7367414 0.07232338 0.004575133 0.7253798 0.07305198 0.008210837 0.7330618 0.07230341 0.007148623 0.7359844 0.07949131 0.01915287 0.7431855 0.07624667 0.01398998 0.7452252 0.07434707 0.01114314 0.7463199 0.07645559 0.01896768 0.737171 0.07821768 0.01958674 0.7363328 0.07637882 0.01939523 0.7405217 0.07663321 0.02048557 0.7375867 0.07644188 0.02028208 0.7392278 0.07379847 0.01754546 0.7393239 0.07421439 0.01188296 0.726666 0.07349002 0.01749956 0.7311873 0.07332897 0.01537597 0.729306 0.07685637 0.01673549 0.7167467 0.07612818 0.01425266 0.7192636 0.07465749 0.01786136 0.7154441 0.0639773 0.02464479 0.7146942 0.07498997 0.01204675 0.7207474 0.07436907 0.01121956 0.7249625 0.07180798 0.02481287 0.7540163 0.07087129 0.01955986 0.7584565 0.07194328 0.008395433 0.7581253 0.06983858 0.005104839 0.7547925 0.0718562 0.02754795 0.7416466 0.06515598 -0.005159974 0.7098129 0.06755292 -0.007681369 0.7205024 0.06603962 -3.55016e-4 0.7120189 0.06544119 0.002631664 0.7090446 0.06525129 0.006357967 0.7085695 0.06423121 0.01094776 0.7124438 0.06456011 0.01659005 0.7156877 0.0708971 0.02681928 0.7370973 0.07024919 0.02546948 0.731725 0.06711262 0.01910167 0.720863 0.07262098 0.01015317 0.7444022 0.0870735 0.02744388 0.7487585 0.08898299 0.03082358 0.7496837 0.08267408 0.01914316 0.7567463 0.08410781 0.01959395 0.7598601 0.08102881 0.02017444 0.7618502 0.08598881 0.03294187 0.7508336 0.07119852 0.01182794 0.7671249 0.06933408 0.03029882 0.759624 0.08478403 0.02574783 0.7469898 0.08397352 0.02141737 0.7447305 0.0771743 0.01683908 0.7511286 0.08586859 0.02925235 0.7492387 0.08161169 0.01988345 0.7576831 0.08198249 0.01995325 0.7427214 0.07985007 0.02011704 0.7421779 0.07024741 0.01515662 0.7596014 0.07184278 0.02611255 0.7506269 0.08800297 0.02593034 0.7569292 0.08469212 0.02737927 0.7582731 0.08617359 0.02413868 0.7538433 0.07065171 0.02355247 0.7665209 0.07703191 0.01253396 0.7395816 0.07366979 0.01258218 0.740142 0.0728178 0.01093137 0.7375009 0.08170181 0.02318233 0.7529862 0.08272081 0.01899337 0.7481864 0.08491331 0.02524673 0.7547862 0.0727052 0.01333183 0.7412204 0.08103883 0.01750534 0.7457374 0.07161188 0.02368175 0.7568285 0.07299977 0.01547837 0.7403612 0.06986308 -0.005800187 0.732334 0.07289499 0.008279681 0.72479 0.06818181 2.11183e-4 0.7189939 0.07069951 0.001422047 0.7237147 0.071536 0.001703739 0.7284122 0.07409387 0.006657123 0.7396637 0.07507151 0.005871236 0.7446372 0.07431858 0.006968438 0.746236 0.07221788 0.003960251 0.7362323 0.0701583 0.003407955 0.7416115 0.07324588 0.003228247 0.7491412 0.07492136 0.009453177 0.7384887 0.07567781 0.01341795 0.736625 0.07624387 0.01592594 0.7348966 0.08518689 0.02220374 0.7489429 0.08531379 0.02498918 0.7412173 0.0765053 0.01441955 0.7533154 0.08197182 0.01818448 0.7540142 0.08055162 0.02040374 0.7320246 0.07859772 0.01591604 0.7265667 0.08334779 0.02435737 0.7376968 0.07305431 0.005594551 0.7465335 0.07707262 0.01915597 0.7323234 0.07782101 0.01557773 0.7285335 0.08370041 0.03013074 0.7540182 0.0810014 0.02391278 0.759959 0.07479929 0.009761333 0.7591808 0.07361119 0.005424857 0.755535 0.08284068 0.03367197 0.7408226 0.0687043 8.72284e-4 0.7146198 0.06919759 0.002517938 0.7119137 0.06979519 0.006646156 0.7104106 0.06894361 0.01330417 0.7112711 0.07072651 0.01591664 0.7137228 0.08128511 0.03187334 0.7352087 0.07420319 0.02099847 0.7187076 0.07636249 0.02444607 0.723799 0.085648 0.02337485 0.7465572 0.07855957 0.01966875 0.7611881 0.08389228 0.03312158 0.7494916 0.0752322 0.01123213 0.7379426 0.0841754 0.02032583 0.7508014 0.08228719 0.02727276 0.7573343 0.07363289 0.00446695 0.7433442 0.07005107 0.01269376 0.7366442 0.07059717 0.01386308 0.7343662 0.0694887 0.004590153 0.7254121 0.07044881 0.008243381 0.7327245 0.06966328 0.007165133 0.7357071 0.0699138 0.008786737 0.7371466 0.07073408 0.01457488 0.7316074 0.07026618 0.01162743 0.7285857 0.07109206 0.009926259 0.7256854 0.07011729 0.01111394 0.7375245 0.06937098 0.005460977 0.7250119 0.08657699 0.02800256 0.7451547 0.08864659 0.03166013 0.7455336 0.08167427 0.01745438 0.7571101 0.08252698 0.01668578 0.7601328 0.07946759 0.01651465 0.7619937 0.08607941 0.03372853 0.7464664 0.06880599 0.03232735 0.7542033 0.08535081 0.02613645 0.7444423 0.07852971 0.01487183 0.7575145 0.08420222 0.02228993 0.742536 0.07733428 0.01605528 0.7494461 0.08580821 0.02991813 0.7456752 0.08044457 0.01801484 0.7582089 0.08211201 0.02075058 0.741272 0.08032679 0.01598274 0.7473524 0.08006519 0.02112388 0.7400365 0.07772111 0.01637357 0.7450906 0.07620799 0.01793944 0.742031 0.07892209 0.01813697 0.7441726 0.0698657 0.01111686 0.7594984 0.07226032 0.02762693 0.7465479 0.0752986 0.01579707 0.7432723 0.08581137 0.02455168 0.7438116 0.07578247 0.01223564 0.7565463 0.07701218 0.01596307 0.7615127 0.08327162 0.03374087 0.7453852 0.07210081 0.01698547 0.7162144 0.0758658 0.02417778 0.7302464 0.07821887 0.02774769 0.7359518 0.07413667 0.02094358 0.7256875 0.08039951 0.02750724 0.7515197 0.07857221 0.02253264 0.7562396 0.07990938 0.02569335 0.7541645 0.07423681 0.01438874 0.7584707 0.07669007 0.01856458 0.7585214 0.08018958 0.02919638 0.7441415 0.08047771 0.02896279 0.7474842 0.07946801 0.02888518 0.74041 0.07143998 0.01760166 0.7212733 0.07288771 0.02418237 0.7307935 0.06963479 0.02164447 0.7255456 0.07377982 0.02648496 0.7354658 0.07212108 0.02114093 0.7275054 0.07589668 0.02671116 0.7516 0.07432687 0.02163267 0.7563693 0.07563447 0.02479225 0.7542461 0.0725243 0.01491016 0.7580038 0.0732609 0.01795893 0.7577155 0.0758605 0.02842754 0.7444706 0.07597011 0.02799427 0.7481759 0.07478767 0.02774673 0.7399804 0.08677262 0.03074008 -0.7560992 0.09017211 0.03308629 -0.77387 0.08876258 0.03018492 -0.7313792 0.0939297 0.03524237 -0.7002595 0.0561642 0.0301522 -0.7305546 0.0516954 0.04258018 -0.7816518 0.05452859 0.03389757 -0.7552353 0.09202831 0.03576511 -0.8016806 0.04452615 0.0493384 -0.8097259 0.0432235 0.04099524 -0.8312137 0.09447282 0.03528684 -0.8200854 0.095209 0.03004324 -0.8303536 0.0559957 0.0343042 -0.6974611 0.08193701 0.04584127 -0.6989646 0.07417386 0.04593652 -0.6985798 0.07806801 0.04261738 -0.7272549 0.07140618 0.04138582 -0.7334731 0.06803411 0.04860919 -0.7578151 0.06680691 0.0554682 -0.7779103 0.06985837 0.06258773 -0.8015086 0.07030141 0.06173121 -0.82233 0.07135587 0.0511285 -0.8354884 0.03580427 -0.107243 -0.8559949 0.08776551 0.03235632 -0.8363328 0.09404683 0.02404654 -0.8353915 0.05105775 0.03268909 -0.8392951 0.04861158 0.01229792 -0.8410584 0.05509907 -0.01975852 -0.8374209 0.06437921 -0.05221682 -0.8396763 0.0629552 -0.07543718 -0.8435597 0.0584414 0.04694652 -0.8377161 0.0714327 0.03927952 -0.8393408 0.07267868 -0.02356386 -0.8416143 0.08003431 -0.05304437 -0.8457007 0.07911211 -0.07924759 -0.84926 0.05919551 0.006542921 -0.8429709 0.05757081 0.02562212 -0.8424167 0.06229287 0.03645223 -0.840555 0.07407319 -0.09340995 -0.8502894 0.06600809 -0.1066308 -0.8535563 0.10944 -0.09736937 -0.8547031 0.09223687 0.01240742 -0.8382441 0.086488 -0.09013539 -0.8543137 0.1102412 -0.08385246 -0.8537883 0.08951908 -0.07511508 -0.8528474 0.0899654 -0.05673342 -0.8491398 0.08651018 -0.02589523 -0.8428103 0.07506299 0.003761291 -0.8427321 0.07268857 0.0206955 -0.8424126 0.0849083 -0.104619 -0.8558591 0.8501449 0.01943939 0.5444837 0.8426189 0.01952898 0.5448759 0.8594019 0.0202921 0.5431346 0.8341214 0.01992887 0.5442659 0.8695209 0.02099949 0.5414253 0.8757928 0.02079319 0.5411431 0.9381604 0.02164369 0.5363186 0.9402289 0.0217809 0.5348326 0.9481951 0.02058547 0.5354456 0.951161 0.02018487 0.5357009 0.9527913 0.02001416 0.5351947 0.9531643 0.02000957 0.5348657 0.9536789 0.02020001 0.5345016 0.954079 0.02023661 0.5338588 0.9543854 0.02061802 0.5334339 0.9452921 0.02099591 0.5350981 0.8692219 0.02245807 0.519214 0.8629711 0.02161157 0.5167033 0.8760722 0.0229038 0.5198864 0.883861 0.02313137 0.5190274 0.8573322 0.02101171 0.5128682 0.8499696 0.02089959 0.5110936 0.8234714 0.02046579 0.5439434 0.808017 0.02459961 0.5448221 0.7943338 0.02773171 0.5452688 0.7750804 0.03241497 0.5461207 0.9547836 0.02125257 0.5324007 0.9548665 0.02167081 0.530505 0.954349 0.0219298 0.5277577 0.9525054 0.02286112 0.5250555 0.893798 0.0234102 0.5193153 0.9094739 0.02250218 0.5180788 0.9256991 0.0225476 0.5209491 0.9363044 0.02235162 0.5201854 0.9426679 0.02193397 0.520704 0.9463797 0.02184921 0.5227371 0.9337836 0.02110409 0.5370327 0.9262396 0.02072077 0.5374189 0.9185122 0.0204463 0.5373572 0.909285 0.02075368 0.5374115 0.9017248 0.02108329 0.5384155 0.8944604 0.02086299 0.5406609 0.8884941 0.02104157 0.5409764 0.8820537 0.02119791 0.5411957 0.8354305 0.04538458 0.5430423 0.8420271 0.0453099 0.543217 0.8257163 0.04615837 0.5430896 0.8103111 0.04592502 0.5427494 0.7941628 0.0440492 0.5440644 0.7767919 0.04383909 0.5443474 0.8361788 0.06713992 0.534877 0.842662 0.06954091 0.5326598 0.8246389 0.06478518 0.5367848 0.8102136 0.06203532 0.536453 0.7958486 0.05998921 0.5381993 0.7811849 0.05662792 0.537626 0.8474639 -0.001513361 0.5407763 0.8410381 -6.26088e-4 0.5420166 0.8347831 0.001117706 0.5424349 0.8204714 0.002466797 0.5419424 0.7924544 0.01253378 0.5419914 0.8066961 0.006928205 0.5420316 0.8152841 0.00490868 0.4852149 0.8049528 0.009171903 0.4837098 0.7915262 0.01633232 0.4863946 0.8255334 0.0110718 0.5032898 0.8118576 0.01787149 0.4939411 0.8410704 0.007333517 0.5088717 0.7754288 0.02303516 0.544583 0.7755488 0.0191487 0.5434595 0.794814 0.0219497 0.4900043 0.8395814 0.03620588 0.5116167 0.8384992 0.05293929 0.5089227 0.8385167 0.06178921 0.5065802 0.8408702 0.07486283 0.5093325 0.8399168 0.02872407 0.5126181 0.8399636 0.02070921 0.5109612 0.8407891 0.01557236 0.5090469 0.8127967 0.0212841 0.4991208 0.825761 0.01793891 0.5090392 0.8140108 0.02840381 0.5094831 0.827651 0.02126216 0.5115812 0.8131853 0.03373378 0.5098913 0.8269569 0.02998781 0.5134301 0.8129718 0.0403006 0.5089853 0.8252987 0.0369417 0.5132293 0.8176451 0.07268232 0.5068742 0.8306946 0.07440871 0.5077238 0.8280982 0.06249308 0.5070928 0.8148483 0.06019771 0.5043004 0.8258812 0.05230748 0.5093668 0.8129743 0.0523706 0.50543 0.7610744 0.0170567 0.5422195 0.761419 0.03120547 0.5465469 0.760799 0.042984 0.546383 0.761165 0.05475342 0.5388287 0.7692136 0.006115794 0.5010246 0.7722809 0.01719111 0.4969211 0.7704245 0.01052969 0.4986847 0.7678669 0.002161562 0.5050106 0.7623451 0.05964863 0.5236337 0.7625811 0.0570209 0.5151506 0.7613012 0.05242639 0.510736 0.773259 0.03066807 0.4993234 0.786226 0.03215098 0.4967545 0.7628802 0.009188771 0.5368119 0.7520109 0.001064181 0.5214087 0.7528037 0.003751158 0.5139247 0.776639 -0.004961967 0.5168779 0.774967 -9.22857e-5 0.5259138 0.7661741 5.23317e-4 0.5114842 0.7648616 8.06716e-4 0.51894 0.7636568 0.003486096 0.5285056 0.07757347 0.02327919 0.5949379 0.06123811 0.03304338 0.6234247 0.1131135 0.01603311 0.5662032 0.7323246 0.003762662 0.5340054 0.05583977 0.0373758 0.6481733 0.05490976 0.04195648 0.6737108 0.0504707 0.05271309 0.7097633 0.0529319 0.05651068 0.7276505 0.0571677 0.06090438 0.7449006 0.0515927 -0.06416183 0.7850541 0.0491684 -0.07149213 0.7772746 0.04704511 -0.07624644 0.7718378 0.04452908 -0.07791084 0.7681366 0.04263019 -0.07912641 0.7655376 0.0407266 -0.07797133 0.7635602 0.03883409 -0.07621341 0.76226 0.03823506 -0.07710361 0.7612102 0.03699296 -0.07784414 0.7593895 0.03683078 -0.07565975 0.7594623 0.03529167 -0.07056713 0.7597216 0.05592018 -0.05560255 0.7959536 0.05773067 -0.04119634 0.8103042 0.05695986 -0.009991824 0.8268659 0.05648201 0.02587866 0.8308138 0.0566684 0.007158756 0.8305149 0.05724328 0.04166704 0.8243317 0.05898356 0.06403607 0.7623797 0.05755621 -0.02598071 0.8201607 0.05840796 0.06527906 0.7813697 0.05831271 0.06262117 0.7996877 0.05788588 0.05429768 0.8141915 0.6834049 0.004661202 0.5413691 0.7504113 0.003776371 0.5313898 0.8547807 -0.002407073 0.5379949 0.8642616 -0.004339039 0.5369886 0.8937419 0.01523 0.5241826 0.8971922 0.01505219 0.5227762 0.8484569 0.04600507 0.542338 0.8563461 0.04694098 0.540583 0.8639616 0.04759228 0.5394207 0.8504321 0.04551851 0.5091475 0.8582159 0.0476579 0.5132721 0.862153 0.04841572 0.5162407 0.8392844 0.04367208 0.5098279 0.8241944 0.04426079 0.5114053 0.8130476 0.04506021 0.5076354 0.7914044 0.0336011 0.4988377 0.797637 0.02547329 0.4937057 0.7981431 0.03463828 0.5035017 0.8022048 0.03361499 0.5055797 0.7967858 0.06596714 0.5013895 0.8040818 0.05560189 0.5003786 0.8056098 0.05025541 0.5019908 0.8044921 0.04288548 0.5038646 0.8086728 0.04071849 0.5068544 0.8069131 0.03389799 0.5077635 0.7781892 0.05346983 0.5005351 0.7919147 0.04817348 0.4982417 0.796319 0.04627841 0.4997735 0.7997712 0.04088783 0.5028669 0.7576699 0.03086107 0.5035332 0.7600156 0.04485827 0.5066155 0.7513894 0.03189021 0.5032247 0.7532733 0.04300272 0.5056131 0.7364616 0.02960461 0.5014626 0.7372186 0.04283058 0.5035272 0.8916052 -0.01689445 0.5228976 0.888556 -0.01642626 0.5241664 0.8742598 -0.005656957 0.5360264 0.881659 -0.006852984 0.5354021 0.8885586 -0.007796883 0.5352559 0.8955109 -0.008742868 0.5346319 0.9012182 -0.00935465 0.5339294 0.9074074 -0.01036167 0.5330225 0.9119791 -0.01088029 0.532606 0.9188774 -0.01244008 0.5324981 0.9389188 -0.01195967 0.5200925 0.9301255 -0.01095056 0.5159111 0.9228718 -0.01061296 0.5153294 0.9120708 -0.009318947 0.5156952 0.9003663 -0.009097039 0.5148224 0.887732 -0.00697267 0.5158578 0.9406725 -0.01228588 0.5231332 0.9408726 -0.01249843 0.5265517 0.939534 -0.01321303 0.5287433 0.9382462 -0.01342618 0.5292174 0.8781728 -0.00536096 0.5158683 0.871524 -0.004150152 0.5171576 0.9319946 -0.01397317 0.5308014 0.9372239 -0.01382815 0.5302029 0.9365609 -0.01415646 0.5303053 0.9362359 -0.01397818 0.5304142 0.9358804 -0.01396924 0.5304762 0.9354265 -0.01404124 0.5305255 0.9348611 -0.01413029 0.5305949 0.9335731 -0.01409709 0.5306831 0.9268094 -0.01297259 0.5308032 0.9246926 -0.01284295 0.5314685 0.8680179 -0.004861056 0.5367032 0.938212 -0.007827281 0.521053 0.9376497 -0.01589268 0.5187676 0.9361212 -0.01620316 0.5290896 0.936217 -0.01128274 0.5308907 0.935856 -0.01112508 0.5309423 0.9356539 -0.01639413 0.5289925 0.9304056 -0.01980835 0.5206445 0.8847994 -0.01560366 0.5234636 0.8772457 -0.01439094 0.5237247 0.8703648 -0.01302278 0.5237558 0.9002526 -0.01738166 0.521196 0.9095615 -0.01825565 0.5202991 0.9118233 -0.01928156 0.5211268 0.9220109 -0.01933854 0.5199438 0.9150583 -0.01825535 0.5200632 0.8952398 -0.01241564 0.5333573 0.895758 -0.004670381 0.534571 0.9162621 -0.01979988 0.525693 0.9115099 -0.01921707 0.5261262 0.9069885 -0.01855659 0.5265361 0.8696796 -0.01317787 0.5281747 0.8762692 -0.01410466 0.5280302 0.8829131 -0.01504004 0.5278806 0.9128206 8.49147e-5 0.5237482 0.9130614 -3.79986e-4 0.527805 0.9163068 -5.48085e-4 0.5234168 0.9187638 -8.77186e-4 0.5278512 0.9096625 6.89315e-4 0.5229957 0.9080286 6.98814e-4 0.5276415 0.8842121 0.005501091 0.5236747 0.8821473 0.005447387 0.5294643 0.8763362 0.006208658 0.5228946 0.8748443 0.005930781 0.5297906 0.92326 -5.51285e-4 0.5233163 0.9333781 -0.002459347 0.5243582 0.8880019 0.004972994 0.5242213 0.8705577 0.006330668 0.5229485 0.8931283 0.004331171 0.5237098 0.9013649 0.002532482 0.5228285 0.9354017 -0.01032584 0.5309897 0.9352666 -0.01699787 0.5285553 0.9366177 -0.01096957 0.5308077 0.9363555 -0.01652544 0.5287917 0.9366671 -0.01684987 0.5283509 0.9370104 -0.01059275 0.530669 0.9350077 -0.009949266 0.5310134 0.9349913 -0.01730138 0.5281261 0.9001126 -0.01657468 0.5275369 0.9011293 0.002072691 0.5277687 0.9280462 -0.009487569 0.5312498 0.9270464 -0.01605397 0.5289772 0.9339107 -0.009396851 0.5309296 0.9324205 -0.009276986 0.5310289 0.9313729 -0.01751285 0.5277351 0.9335963 -0.01751208 0.5277692 0.937417 -0.01725089 0.527076 0.937228 -0.00909388 0.5301402 0.9310197 -0.01817238 0.5261312 0.9332121 -0.008217453 0.5304812 0.9253603 -0.01787835 0.5275684 0.9014969 -4.59184e-4 0.5173739 0.9003211 -0.01488894 0.5175331 0.8820284 -0.01326274 0.5312913 0.8816987 -0.01067376 0.5336213 0.8880718 -0.01183944 0.533838 0.869032 -0.01151853 0.5317887 0.869542 0.006044387 0.5298668 0.8687442 0.00265181 0.5354769 0.8887717 0.003866076 0.5293527 0.8942537 0.003107786 0.5288257 0.8951795 1.44713e-4 0.5318969 0.8889843 0.001256465 0.5325083 0.8941258 -0.01468777 0.5320003 0.8935561 -0.01638275 0.5291944 0.8880828 -0.01567578 0.5285133 0.8878288 -0.01396125 0.532027 0.9243901 -0.001663565 0.5282074 0.9355813 -0.004087984 0.5271919 0.9327117 -0.006186544 0.5304247 0.9399241 -0.007973134 0.5268176 0.9380573 -0.008604586 0.5295066 0.9223608 -0.02023226 0.5237408 0.9238639 -0.01895397 0.5267152 0.9378503 -0.01832973 0.5241376 0.9303882 -0.01976716 0.5230713 0.9308562 -0.01847314 0.5248261 0.9376708 -0.01773184 0.5262212 0.9378517 -0.01773977 0.5216718 0.9304063 -0.01720649 0.5168944 0.9322244 -0.004452645 0.5195952 0.9399256 -0.007805943 0.5238218 0.9118831 -0.01601445 0.5178515 0.9220631 -0.01734554 0.5175619 0.9133424 -0.003017961 0.518597 0.9227715 -0.003722846 0.5183206 0.8887937 -0.01380068 0.5190876 0.8783566 -0.01205468 0.5194172 0.8775244 0.002561986 0.5172877 0.8870568 0.001700878 0.5171846 0.8712418 -0.01000374 0.5197966 0.8713166 0.002337694 0.5184431 0.9195429 -0.00422126 0.5317 0.9194743 -0.00744456 0.5328306 0.9177454 -0.01817005 0.5285935 0.9113922 -0.01742506 0.5290547 0.9183562 -0.01625347 0.5303642 0.9069771 -0.01668274 0.5297495 0.900521 -0.01550579 0.5311359 0.9008682 -0.01331698 0.5323532 0.9113928 -0.01474404 0.5309828 0.9068529 -0.01436483 0.5313909 0.9010482 -0.005293548 0.5337332 0.9015746 -8.30687e-4 0.5313805 0.9121876 -0.006762564 0.5330284 0.9073871 -0.006255149 0.5334398 0.9080054 -0.001855671 0.5313122 0.9132195 -0.003512859 0.5317524 0.9255589 -0.004938662 0.5313242 0.9262567 -0.007993042 0.5324147 0.888916 -0.00384593 0.5350908 0.8821429 0.002149999 0.533186 0.8822684 -0.003136157 0.5354794 0.8747379 0.002407073 0.5344356 0.8684489 -0.001266479 0.5369116 0.8747061 -0.002019643 0.5360953 0.8686661 -0.008734643 0.5344763 0.8755124 -0.01231259 0.5315491 0.8749105 -0.009545385 0.5340502 0.8893159 0.040771 0.5236971 0.8865045 0.04040139 0.5258063 0.876501 0.04777848 0.5380705 0.8828416 0.0486449 0.537589 0.8881142 0.0489813 0.536713 0.894179 0.04952698 0.5353218 0.9005573 0.0495252 0.5349363 0.9084585 0.04981952 0.5346058 0.9159435 0.0500943 0.5345355 0.9217885 0.05011302 0.533667 0.9387692 0.05146932 0.5223949 0.9357663 0.05151599 0.5199635 0.928228 0.05186361 0.5176418 0.9147464 0.05208331 0.5176156 0.9006527 0.05199289 0.5167246 0.8879741 0.05223542 0.5163102 0.9407137 0.05132067 0.5250712 0.9418928 0.05098587 0.5273405 0.9414967 0.05077081 0.5300625 0.9410139 0.05059707 0.5311099 0.8788285 0.05151957 0.5180686 0.8731551 0.05128461 0.5176063 0.9328748 0.05056071 0.5338097 0.9403383 0.0506913 0.5319138 0.9390655 0.05069202 0.5332392 0.9385094 0.05063498 0.5335016 0.9382162 0.05068141 0.5335822 0.9377567 0.05078697 0.5336804 0.9372307 0.05085498 0.5337287 0.9357029 0.05074471 0.5339161 0.9275885 0.05091619 0.533235 0.9264786 0.0507518 0.5332828 0.8717496 0.04754 0.5385192 0.93753 0.05661523 0.5235291 0.9377402 0.04697751 0.5225695 0.9384164 0.04881757 0.5333259 0.9384929 0.05261397 0.5330575 0.9381424 0.05263507 0.5331558 0.9380735 0.04878747 0.5334063 0.9348744 0.04440051 0.5240021 0.8845751 0.04102122 0.5235058 0.8776164 0.0414834 0.5248557 0.8718812 0.04107099 0.5243786 0.89973 0.04139977 0.5238311 0.9119027 0.0430141 0.5235993 0.9145522 0.04283118 0.5253142 0.928712 0.04332458 0.5236553 0.9177802 0.04281032 0.5234658 0.8943756 0.04370021 0.5338732 0.893736 0.05451649 0.5343617 0.9207183 0.04237478 0.527602 0.9151029 0.0424683 0.5279847 0.9092726 0.04226291 0.5275343 0.870588 0.04003751 0.5280981 0.8768725 0.04064637 0.5281795 0.8816728 0.04104167 0.527953 0.9143603 0.06032931 0.5257061 0.9143451 0.06011331 0.5291012 0.9181793 0.06015342 0.5250204 0.9191656 0.06053102 0.5289527 0.9113301 0.05979579 0.5243175 0.908533 0.06006109 0.5284947 0.8830965 0.06077522 0.524648 0.8829384 0.06005913 0.5299345 0.8773636 0.06045031 0.5253306 0.8771354 0.0600053 0.5294808 0.9292193 0.05945611 0.5254325 0.9353067 0.05847162 0.5259333 0.8861885 0.0606631 0.5262881 0.8733701 0.0605067 0.5250973 0.8888059 0.06065112 0.5252467 0.8987737 0.06031143 0.5249326 0.9378429 0.05360859 0.5329889 0.9376689 0.04756659 0.5332931 0.938872 0.05322098 0.5327745 0.9388607 0.0486198 0.5330992 0.9385741 0.04700827 0.5319904 0.9385607 0.05445379 0.5321696 0.9375014 0.05416518 0.5326759 0.9372712 0.04710859 0.5330954 0.8995336 0.04111242 0.5266922 0.8987753 0.05996412 0.5292856 0.9285547 0.0550816 0.5321604 0.9284191 0.04618918 0.5321097 0.9368228 0.05461412 0.5325052 0.9331721 0.05551427 0.5322319 0.9332971 0.04607158 0.5325418 0.9368461 0.04650807 0.5328035 0.9386413 0.04627329 0.5315901 0.9381178 0.05539029 0.5317086 0.9335443 0.04481852 0.5314451 0.933173 0.05647999 0.5311053 0.9279007 0.04537492 0.5321933 0.8997136 0.05813378 0.5217033 0.9001258 0.0433101 0.5202589 0.8821562 0.04169178 0.5316797 0.8828155 0.04369252 0.5348855 0.887835 0.043823 0.5345026 0.8712584 0.04082709 0.5322852 0.8730297 0.0600664 0.5293337 0.872681 0.05743622 0.5347735 0.887238 0.06000828 0.5297533 0.8917449 0.059565 0.530501 0.892998 0.05846267 0.5317409 0.8877823 0.05853021 0.5327014 0.893404 0.04134571 0.5307327 0.8920057 0.0402342 0.527 0.8865904 0.04077339 0.5277773 0.8876347 0.04166829 0.5313357 0.9297494 0.05901199 0.5284093 0.9358538 0.0579093 0.5287631 0.9346988 0.05733388 0.5302828 0.9391753 0.0564711 0.5285114 0.9383969 0.05608928 0.5303007 0.9284504 0.04296082 0.5271587 0.9286763 0.0422548 0.5300822 0.9401022 0.0463922 0.5277565 0.9341374 0.04334837 0.5276919 0.9338396 0.04359519 0.5301634 0.9395077 0.04595839 0.5304561 0.9393757 0.04648572 0.5251545 0.9349781 0.04662531 0.5209711 0.9349028 0.05709278 0.5221735 0.9388766 0.0567609 0.5260599 0.9154458 0.04465419 0.5211009 0.9282706 0.04546391 0.5196293 0.9148607 0.05854862 0.5214625 0.9288617 0.05787742 0.5208946 0.8871604 0.04347831 0.5196259 0.8783205 0.04314798 0.5218842 0.8785508 0.0574243 0.5211554 0.8864176 0.05763393 0.520629 0.872952 0.04414319 0.5207225 0.8732888 0.05691951 0.5203154 0.9204799 0.05885452 0.5311872 0.9211052 0.05541592 0.5330851 0.9217494 0.04320079 0.5302733 0.9153389 0.04302608 0.5300498 0.9219005 0.04537397 0.5326789 0.9088764 0.04258918 0.5301823 0.9000533 0.04183369 0.5306147 0.9004803 0.04413729 0.5337871 0.9154821 0.04504859 0.5333112 0.9086995 0.04485177 0.5336598 0.9001572 0.05496048 0.5338484 0.8992322 0.05880212 0.5313621 0.9152921 0.05516511 0.5334305 0.9082881 0.05502188 0.5336769 0.9077887 0.05898052 0.531342 0.9146674 0.058658 0.53144 0.929798 0.05848461 0.5311003 0.9279931 0.05635058 0.5317044 0.8881516 0.05440843 0.5359016 0.8827332 0.05820369 0.5338757 0.882822 0.05393779 0.5372655 0.8767171 0.0573914 0.5345825 0.8719849 0.05307781 0.5383307 0.8766959 0.05360662 0.5377277 0.8713652 0.04285979 0.5355373 0.8762724 0.04141002 0.5322827 0.8765044 0.04329979 0.5351997 0.8681442 0.04993557 0.5170396 0.8365734 -7.92381e-4 0.4989759 0.8316856 -0.008231639 0.5109279 0.8079635 -0.01307147 0.5225775 0.7997154 -0.02013266 0.5094113 0.801941 -0.01653337 0.5153377 0.8013633 -0.02175533 0.4993379 0.8265026 -0.01257199 0.5215126 0.818351 -0.01246243 0.5251072 0.8522129 6.86917e-4 0.5113207 0.8578844 -3.14984e-4 0.5146663 0.8619153 -0.00146687 0.5166562 0.8662832 -0.003038942 0.5172578 0.8026818 -0.02108836 0.4929108 0.8063668 -0.01779633 0.4871347 0.8117439 -0.01283353 0.4828502 0.8183624 -0.005962371 0.4827975 0.8251882 5.68221e-4 0.4881149 0.8349053 0.003941595 0.500628 0.8428344 0.001610577 0.5099666 0.8608438 0.0734167 0.5102035 0.8571922 0.07198733 0.5105615 0.855287 0.0708757 0.5104293 0.8493304 0.06930959 0.5076224 0.864933 0.07443821 0.5104799 0.8227427 0.008387684 0.4943765 0.8091313 0.01615488 0.4905229 0.7929722 0.01971101 0.4881594 0.8396845 0.06852328 0.5063092 0.8296931 0.06781262 0.5063389 0.8162688 0.06503409 0.5042587 0.7809581 0.02989017 0.49592 0.8018144 0.05982279 0.4996185 0.7868602 0.0512939 0.4978958 0.8306145 0.003767311 0.4944641 0.8725181 0.06968939 0.5246303 0.8727473 0.06750941 0.5217557 0.8689155 0.06946009 0.5259119 0.8720212 0.07873243 0.5259536 0.8686687 0.07804131 0.5273782 0.8721337 0.08185493 0.5228355 0.8755373 0.0790944 0.5246317 0.8754773 0.0820468 0.5220225 0.8787103 0.07927173 0.5242858 0.8983697 0.08058071 0.5206367 0.8996019 0.08126312 0.5193422 0.894358 0.08177959 0.520332 0.8905903 0.0820747 0.521005 0.8903746 0.08010584 0.5231496 0.8941624 0.08012384 0.5223508 0.8863199 0.0819692 0.5212202 0.8862889 0.0796476 0.5235126 0.8908804 0.07142978 0.5236884 0.8945883 0.0714454 0.5232986 0.8868871 0.07086992 0.5232176 0.886878 0.06867539 0.5209034 0.8908057 0.06892663 0.5211628 0.8974442 0.07157468 0.5227239 0.8945056 0.06890451 0.5208821 0.8974884 0.06909179 0.5207672 0.8968444 0.08061909 0.5209378 0.8969661 0.0815317 0.5197614 0.8680598 0.07993024 0.5122613 0.8686916 0.06960499 0.5124815 0.8782306 0.08106273 0.5112372 0.8735522 0.08080673 0.511703 0.8740265 0.07012063 0.5115393 0.8799635 0.07022929 0.5111774 0.9011947 0.08022594 0.511232 0.8945302 0.0806849 0.5109832 0.9015309 0.07109451 0.5111482 0.8946713 0.07092463 0.5111343 0.9095222 0.07951909 0.5163856 0.9060405 0.08015799 0.5133036 0.9061052 0.07176798 0.5125531 0.9088512 0.0714178 0.5154875 0.9080311 0.07147604 0.520837 0.9032653 0.06922543 0.5202512 0.9039826 0.06864428 0.5176721 0.9088993 0.07078683 0.5187314 0.8992155 0.0691986 0.5207208 0.8999962 0.06802439 0.5173211 0.9087362 0.07919174 0.5197728 0.9093647 0.07962691 0.518632 0.9040455 0.08062541 0.5192632 0.9051728 0.08131951 0.5180855 0.9002703 0.08225661 0.5174978 0.8792819 0.06761413 0.5205914 0.8798294 0.06690299 0.5175932 0.8828176 0.06723123 0.5173968 0.8830131 0.06806331 0.5204563 0.8785087 0.08190673 0.5219361 0.8822226 0.08205753 0.5215397 0.8822067 0.08345061 0.5182313 0.8792417 0.0833522 0.5187004 0.8685808 0.08223521 0.5234692 0.8681505 0.0830959 0.5201919 0.8691813 0.06744754 0.5222743 0.8790141 0.07017898 0.5236558 0.8756714 0.06982582 0.5238434 0.8760643 0.06741511 0.5209305 0.8872923 0.07074582 0.5121653 0.8870519 0.08163082 0.5124077 0.8983855 0.07228988 0.522759 0.9036921 0.08040082 0.5198442 0.9033959 0.07139992 0.5214743 0.9074683 0.0792672 0.5207122 0.9066739 0.07230031 0.5218883 0.905155 0.07305508 0.5223036 0.9032281 0.07259649 0.5221269 0.9034462 0.07935774 0.5211226 0.9056375 0.07903671 0.5213051 0.8992975 0.07285308 0.5224221 0.8990944 0.07949471 0.5212834 0.8863363 0.08339393 0.5180643 0.8867076 0.06781172 0.5171419 0.9054819 0.07317501 0.5223432 0.9059652 0.07841259 0.5216735 0.9075365 0.07758224 0.521869 0.907453 0.07435572 0.5225313 0.9069337 0.07490462 0.5225625 0.9069053 0.07674032 0.5223627 0.905919 0.0740149 0.5226063 0.9061708 0.07770752 0.5219953 0.8867022 0.08296781 0.513836 0.8815544 0.08325982 0.5141209 0.8689514 0.08236634 0.5153147 0.8791262 0.08347141 0.5152618 0.9056457 0.0814417 0.515313 0.9006761 0.08210349 0.5140472 0.8719868 0.08294689 0.5192294 0.873141 0.08268463 0.5143538 0.8759372 0.08339691 0.5183789 0.8773762 0.08286339 0.5137754 0.8904885 0.08314359 0.5181492 0.8929119 0.08260339 0.5135498 0.8969017 0.08248072 0.5175592 0.8962932 0.08248794 0.5136948 0.8942949 0.08280313 0.5177837 0.894692 0.08284854 0.515173 0.8764687 0.06666141 0.5173705 0.8729292 0.06632459 0.5176807 0.8694639 0.06619644 0.5181818 0.8907146 0.0683214 0.5167461 0.8945783 0.06788921 0.5172456 0.8974549 0.06797564 0.5168101 0.8820647 0.07946902 0.5238968 0.8827217 0.07025814 0.523157 0.8969629 0.06862092 0.5138326 0.9003875 0.06869542 0.5141422 0.8947632 0.06829601 0.5153694 0.8927782 0.06873708 0.5144329 0.8868793 0.06924629 0.5136867 0.8699576 0.06707412 0.5148547 0.873374 0.06740659 0.5143144 0.8778795 0.06779241 0.5138994 0.9050418 0.06977969 0.5144382 0.9062017 0.07448923 0.522657 0.9063976 0.07720148 0.5222069 0.9067273 0.07654672 0.5224552 0.90662 0.07513898 0.5225675 0.9089778 0.0733608 0.5137168 0.9077005 0.07899433 0.5132867 0.8689556 0.07422399 0.5279704 0.8980951 0.07622009 0.5229553 0.8990054 0.07618558 0.522568 0.9053072 0.07605654 0.5225914 0.9057753 0.07603794 0.5225765 0.9062368 0.07593303 0.5225436 0.9065564 0.07579094 0.5225227 0.9067798 0.07573199 0.5225049 0.9070805 0.07595092 0.5224581 0.907781 0.07574462 0.5223786 0.9032776 0.07603418 0.5226932 0.8679578 0.0747078 0.5105696 0.8740911 0.07654011 0.509799 0.9087966 0.07550221 0.5216453 0.9099056 0.07533472 0.5210741 0.9112018 0.07589858 0.5187097 0.9109918 0.07608193 0.5129896 0.8786252 0.07580441 0.5091815 0.887198 0.07612293 0.5100517 0.895022 0.07627862 0.5094676 0.9010493 0.07595318 0.5096048 0.9062443 0.0760526 0.5112043 0.9096088 0.07579982 0.5135824 0.8963568 0.07626819 0.5233725 0.8943785 0.0762217 0.5237491 0.8906107 0.0761435 0.5242578 0.8864177 0.07566988 0.5243452 0.8823685 0.07558619 0.5248521 0.8789995 0.07508879 0.5252113 0.8757655 0.07475501 0.5254335 0.8724157 0.07445573 0.5268101 0.879864 0.06730031 0.5150646 0.8820407 0.0679937 0.5140183 0.865096 0.07408988 0.5284694 0.8542766 0.07225793 0.5289937 0.8483384 0.07120662 0.5304919 0.8602705 0.07332742 0.5285092 0.01993727 -0.07501763 0.7564319 0.0194835 -0.07466733 0.7558345 0.02020156 -0.07471442 0.7567343 0.02010416 -0.07454204 0.7559204 0.01889526 -0.07489353 0.7558848 0.01934307 -0.07551831 0.7562395 0.02038019 -0.07018744 0.7568571 0.01964098 -0.06961941 0.7554522 0.02291959 -0.07111901 0.7587337 0.02007818 -0.06907021 0.7541713 0.04455208 -0.07329809 0.7531124 0.0442245 -0.0748198 0.7603517 0.04483997 -0.07412552 0.7587628 0.04696321 -0.07340073 0.7613882 0.04794096 -0.07122462 0.7592434 0.05082309 -0.07037574 0.7628415 0.0515908 -0.06726139 0.7600538 0.05647456 -0.05866271 0.7636246 0.04627948 -0.07156503 0.7548462 0.04756009 -0.07033604 0.7522606 0.05010807 -0.0672667 0.7543569 0.0514599 -0.06553643 0.7510828 0.05614036 -0.05845481 0.7497849 0.05463236 -0.0609619 0.7540725 0.0605145 -0.05074661 0.7542484 0.04541826 -0.07275831 0.7569863 0.04902517 -0.06908631 0.7570363 0.05326759 -0.06363832 0.7575497 0.0613563 -0.04133468 0.7700741 0.05885666 -0.05091881 0.7666111 0.06418091 -0.03005897 0.7742507 0.06712961 -0.01994609 0.7802324 0.07097017 0.004076421 0.7883983 0.07108581 0.01453852 0.7889994 0.07044321 0.02385717 0.7875046 0.06928712 0.03175264 0.7837364 0.06796407 0.03744733 0.7775044 0.06582909 0.04215544 0.7598324 0.06490582 0.04145395 0.7491717 0.06146079 0.03813707 0.7231876 0.06316751 0.04056113 0.7386425 0.05906999 0.03387308 0.7068409 0.0556358 0.04079848 0.6943509 0.04807877 0.0540753 0.6942897 0.04368358 0.05944985 0.6960205 0.06964778 -0.008112609 0.7850417 0.06680709 0.04117417 0.769479 0.03920918 0.06550419 0.6973701 0.03359627 0.07174688 0.6983149 0.0274325 0.07732546 0.6992879 0.01031786 0.08487826 0.6999824 0.01877969 0.08110946 0.6997094 0.05237567 0.04790967 0.6930406 0.06536507 -0.03091222 0.7531474 0.06310361 -0.04173773 0.7539339 0.06848609 -0.005365967 0.7489471 0.06746417 -0.01789939 0.7517195 0.07259547 0.008159339 0.7368352 0.07388061 0.006453573 0.7376932 0.07172167 0.004644453 0.7402472 0.06981778 0.008012235 0.7364438 -0.07140618 0.04138582 -0.7334731 -0.07806801 0.04261738 -0.7272549 -0.07417386 0.04593652 -0.6985798 -0.08193701 0.04584127 -0.6989646 -0.0559957 0.0343042 -0.6974611 -0.0561642 0.0301522 -0.7305546 -0.0939297 0.03524237 -0.7002595 -0.08876258 0.03018492 -0.7313792 0 -0.05127108 0.5409772 0 -0.03239619 0.5607609 -0.06368857 0.04404652 -0.7316439 -0.06583768 0.04165691 -0.6977033 -0.05987006 -0.02983826 -0.7319883 -0.06738227 -0.04058754 -0.7323467 -0.07193869 -0.03507667 -0.6949505 -0.0596978 -0.02959918 -0.6956732 -0.08160698 -0.03518545 -0.7323326 -0.08582258 -0.03085809 -0.6955389 -0.042203 0.002093672 -0.7324494 -0.04950529 -0.02034723 -0.7322574 -0.04930627 -0.01583635 -0.6984781 -0.04379957 0.002304911 -0.6968449 -0.04424506 0.02045959 -0.6964464 -0.04865419 0.01675027 -0.7335664 -0.1030608 -0.005740582 -0.7295064 -0.1060623 -1.05886e-4 -0.7013029 -0.09577411 -0.01983857 -0.7001369 -0.09127038 -0.02354264 -0.7326186 -0.08665871 0.04150277 -0.6987348 -0.0819776 0.03720331 -0.7252465 -0.097148 0.02372741 -0.7299453 -0.0991798 0.0254516 -0.7001957 -0.1052745 0.01545256 -0.7016326 -0.1050192 0.01072329 -0.7289126 0 -0.04295825 0.5483316 0 -0.03804826 0.5527012 0 -0.05886936 0.5325331 0 -0.06492048 0.5119821 0 -0.05466598 0.5375549 0 -0.04709279 0.5447279 0 0.09963023 0.5787487 0.04098516 -0.01340448 0.6470347 0.04877907 -0.003814101 0.6528052 0.05483758 0.008458852 0.6634387 0.0579347 0.01980859 0.6743492 0.05938661 0.02800726 0.6863008 -0.05938661 0.02800726 0.6863008 -0.0579347 0.01980859 0.6743492 -0.05483758 0.008458852 0.6634387 -0.04877907 -0.003814101 0.6528052 -0.04098516 -0.01340448 0.6470347 0 -0.09751039 0.6613398 0 -0.0975849 0.6689428 0 -0.07745599 0.6431116 0 -0.0696451 0.6424778 0 -0.09409558 0.6534518 0 -0.08922868 0.6481306 0 -0.09111803 0.6912671 0 -0.08841019 0.692591 0 -0.08912974 0.6904128 0 -0.05893498 0.6418297 0 -0.04757237 0.6417164 0 -0.0992695 0.6896823 0 -0.09779942 0.6828303 0 -0.09517079 0.6812189 0 -0.1023388 0.7412424 0 -0.09930092 0.7104308 0 -0.09732353 0.7072281 0 -0.09889972 0.7008473 0 -0.1127385 0.7246346 0 -0.1109697 0.7155549 0 -0.1130092 0.7196388 0 -0.09561198 0.6739089 0 -0.09949713 0.6913951 0 -0.1008403 0.6987202 0 -0.1015797 0.6970624 0 -0.03868597 0.638457 0 -0.1099961 0.7289616 0 0.08185356 0.6902986 0 0.0774706 0.6673915 0 0.07973527 0.6418247 0 0.0875709 0.61225 0 0.08648407 0.7061252 0 -0.03591609 0.6288802 0 -0.03472298 0.6214854 0 -0.03041797 0.5900142 0 -0.03028339 0.5681144 0 -0.030128 0.5789818 0 0.09681707 0.7509098 0 0.09319287 0.7292045 0 -0.09415173 0.6790997 0 -0.0974366 0.7045717 0 -0.09812098 0.6911219 0 -0.1010368 0.6946066 0 -0.09939193 0.68608 0 -0.1014398 0.6981081 0 -0.04715651 0.8467843 0 -0.07372963 0.819608 0 -0.08693391 0.7861549 0 -0.08888602 0.7672305 0 -0.08976054 0.7611271 0 -0.09171551 0.7580476 0 -0.09423685 0.754809 0 -0.08301794 0.8000141 0 -0.105443 0.7358231 0 -0.09936201 0.7467767 0 -0.09699952 0.7507065 0 -0.08928245 0.7713019 0 -0.08931511 0.776959 0 -0.08885151 0.7635497 0 0.09746408 0.7756569 0 -0.06401783 0.8336555 0 -0.02157479 0.8551567 0 0.005731642 0.8568283 0 0.03030806 0.8566738 0 0.06144273 0.8489542 0 0.09342277 0.8023762 0 0.08398729 0.8286509 0 0.08382481 0.6982288 -0.06981778 0.008012235 0.7364438 -0.07172167 0.004644453 0.7402472 -0.07388061 0.006453573 0.7376932 -0.07259547 0.008159339 0.7368352 -0.06746417 -0.01789939 0.7517195 -0.06848609 -0.005365967 0.7489471 -0.06310361 -0.04173773 0.7539339 -0.06536507 -0.03091222 0.7531474 -0.05237567 0.04790967 0.6930406 -0.01877969 0.08110946 0.6997094 -0.01031786 0.08487826 0.6999824 -0.0274325 0.07732546 0.6992879 -0.03359627 0.07174688 0.6983149 -0.03920918 0.06550419 0.6973701 -0.06680709 0.04117417 0.769479 -0.06964778 -0.008112609 0.7850417 -0.04368358 0.05944985 0.6960205 -0.04807877 0.0540753 0.6942897 -0.0556358 0.04079848 0.6943509 -0.05906999 0.03387308 0.7068409 -0.06316751 0.04056113 0.7386425 -0.06146079 0.03813707 0.7231876 -0.06490582 0.04145395 0.7491717 -0.06582909 0.04215544 0.7598324 -0.06796407 0.03744733 0.7775044 -0.06928712 0.03175264 0.7837364 -0.07044321 0.02385717 0.7875046 -0.07108581 0.01453852 0.7889994 -0.07097017 0.004076421 0.7883983 -0.06712961 -0.01994609 0.7802324 -0.06418091 -0.03005897 0.7742507 -0.05885666 -0.05091881 0.7666111 -0.0613563 -0.04133468 0.7700741 -0.05788588 0.05429768 0.8141915 -0.05831271 0.06262117 0.7996877 -0.05840796 0.06527906 0.7813697 -0.05755621 -0.02598071 0.8201607 -0.05898356 0.06403607 0.7623797 -0.05724328 0.04166704 0.8243317 -0.0566684 0.007158756 0.8305149 -0.05648201 0.02587866 0.8308138 -0.05695986 -0.009991824 0.8268659 -0.05773067 -0.04119634 0.8103042 -0.05592018 -0.05560255 0.7959536 -0.0491684 -0.07149213 0.7772746 -0.0515927 -0.06416183 0.7850541 -0.0571677 0.06090438 0.7449006 -0.0529319 0.05651068 0.7276505 -0.0504707 0.05271309 0.7097633 -0.05490976 0.04195648 0.6737108 -0.05583977 0.0373758 0.6481733 -0.07478767 0.02774673 0.7399804 -0.07597011 0.02799427 0.7481759 -0.0758605 0.02842754 0.7444706 -0.0732609 0.01795893 0.7577155 -0.0725243 0.01491016 0.7580038 -0.07563447 0.02479225 0.7542461 -0.07432687 0.02163267 0.7563693 -0.07589668 0.02671116 0.7516 -0.07212108 0.02114093 0.7275054 -0.07377982 0.02648496 0.7354658 -0.06963479 0.02164447 0.7255456 -0.07288771 0.02418237 0.7307935 -0.07143998 0.01760166 0.7212733 -0.07946801 0.02888518 0.74041 -0.08047771 0.02896279 0.7474842 -0.08018958 0.02919638 0.7441415 -0.07669007 0.01856458 0.7585214 -0.07423681 0.01438874 0.7584707 -0.07990938 0.02569335 0.7541645 -0.07857221 0.02253264 0.7562396 -0.08039951 0.02750724 0.7515197 -0.07413667 0.02094358 0.7256875 -0.07821887 0.02774769 0.7359518 -0.0758658 0.02417778 0.7302464 -0.07210081 0.01698547 0.7162144 -0.08327162 0.03374087 0.7453852 -0.07701218 0.01596307 0.7615127 -0.07578247 0.01223564 0.7565463 -0.08581137 0.02455168 0.7438116 -0.0752986 0.01579707 0.7432723 -0.07226032 0.02762693 0.7465479 -0.0698657 0.01111686 0.7594984 -0.07892209 0.01813697 0.7441726 -0.07620799 0.01793944 0.742031 -0.07772111 0.01637357 0.7450906 -0.08006519 0.02112388 0.7400365 -0.08032679 0.01598274 0.7473524 -0.08211201 0.02075058 0.741272 -0.08044457 0.01801484 0.7582089 -0.08580821 0.02991813 0.7456752 -0.07733428 0.01605528 0.7494461 -0.08420222 0.02228993 0.742536 -0.07852971 0.01487183 0.7575145 -0.08535081 0.02613645 0.7444423 -0.06880599 0.03232735 0.7542033 -0.08607941 0.03372853 0.7464664 -0.07946759 0.01651465 0.7619937 -0.08252698 0.01668578 0.7601328 -0.08167427 0.01745438 0.7571101 -0.08864659 0.03166013 0.7455336 -0.08657699 0.02800256 0.7451547 -0.06937098 0.005460977 0.7250119 -0.07011729 0.01111394 0.7375245 -0.07109206 0.009926259 0.7256854 -0.07026618 0.01162743 0.7285857 -0.07073408 0.01457488 0.7316074 -0.0699138 0.008786737 0.7371466 -0.06966328 0.007165133 0.7357071 -0.07044881 0.008243381 0.7327245 -0.0694887 0.004590153 0.7254121 -0.07059717 0.01386308 0.7343662 -0.07005107 0.01269376 0.7366442 -0.07363289 0.00446695 0.7433442 -0.08228719 0.02727276 0.7573343 -0.0841754 0.02032583 0.7508014 -0.0752322 0.01123213 0.7379426 -0.08389228 0.03312158 0.7494916 -0.07855957 0.01966875 0.7611881 -0.085648 0.02337485 0.7465572 -0.07636249 0.02444607 0.723799 -0.07420319 0.02099847 0.7187076 -0.08128511 0.03187334 0.7352087 -0.07072651 0.01591664 0.7137228 -0.06894361 0.01330417 0.7112711 -0.06979519 0.006646156 0.7104106 -0.06919759 0.002517938 0.7119137 -0.0687043 8.72284e-4 0.7146198 -0.08284068 0.03367197 0.7408226 -0.07361119 0.005424857 0.755535 -0.07479929 0.009761333 0.7591808 -0.0810014 0.02391278 0.759959 -0.08370041 0.03013074 0.7540182 -0.07782101 0.01557773 0.7285335 -0.07707262 0.01915597 0.7323234 -0.07305431 0.005594551 0.7465335 -0.08334779 0.02435737 0.7376968 -0.07859772 0.01591604 0.7265667 -0.08055162 0.02040374 0.7320246 -0.08197182 0.01818448 0.7540142 -0.0765053 0.01441955 0.7533154 -0.08531379 0.02498918 0.7412173 -0.08518689 0.02220374 0.7489429 -0.07624387 0.01592594 0.7348966 -0.07567781 0.01341795 0.736625 -0.07492136 0.009453177 0.7384887 -0.07324588 0.003228247 0.7491412 -0.0701583 0.003407955 0.7416115 -0.07221788 0.003960251 0.7362323 -0.07431858 0.006968438 0.746236 -0.07507151 0.005871236 0.7446372 -0.07409387 0.006657123 0.7396637 -0.071536 0.001703739 0.7284122 -0.07069951 0.001422047 0.7237147 -0.06818181 2.11183e-4 0.7189939 -0.07289499 0.008279681 0.72479 -0.06986308 -0.005800187 0.732334 -0.07299977 0.01547837 0.7403612 -0.07161188 0.02368175 0.7568285 -0.08103883 0.01750534 0.7457374 -0.0727052 0.01333183 0.7412204 -0.08491331 0.02524673 0.7547862 -0.08272081 0.01899337 0.7481864 -0.08170181 0.02318233 0.7529862 -0.0728178 0.01093137 0.7375009 -0.07366979 0.01258218 0.740142 -0.07703191 0.01253396 0.7395816 -0.07065171 0.02355247 0.7665209 -0.08617359 0.02413868 0.7538433 -0.08469212 0.02737927 0.7582731 -0.08800297 0.02593034 0.7569292 -0.07184278 0.02611255 0.7506269 -0.07024741 0.01515662 0.7596014 -0.07985007 0.02011704 0.7421779 -0.08198249 0.01995325 0.7427214 -0.08161169 0.01988345 0.7576831 -0.08586859 0.02925235 0.7492387 -0.0771743 0.01683908 0.7511286 -0.08397352 0.02141737 0.7447305 -0.08478403 0.02574783 0.7469898 -0.06933408 0.03029882 0.759624 -0.07119852 0.01182794 0.7671249 -0.08598881 0.03294187 0.7508336 -0.08102881 0.02017444 0.7618502 -0.08410781 0.01959395 0.7598601 -0.08267408 0.01914316 0.7567463 -0.08898299 0.03082358 0.7496837 -0.0870735 0.02744388 0.7487585 -0.07262098 0.01015317 0.7444022 -0.06711262 0.01910167 0.720863 -0.07024919 0.02546948 0.731725 -0.0708971 0.02681928 0.7370973 -0.06456011 0.01659005 0.7156877 -0.06423121 0.01094776 0.7124438 -0.06525129 0.006357967 0.7085695 -0.06544119 0.002631664 0.7090446 -0.06603962 -3.55016e-4 0.7120189 -0.06755292 -0.007681369 0.7205024 -0.06515598 -0.005159974 0.7098129 -0.0718562 0.02754795 0.7416466 -0.06983858 0.005104839 0.7547925 -0.07194328 0.008395433 0.7581253 -0.07087129 0.01955986 0.7584565 -0.07180798 0.02481287 0.7540163 -0.07436907 0.01121956 0.7249625 -0.07498997 0.01204675 0.7207474 -0.0639773 0.02464479 0.7146942 -0.07465749 0.01786136 0.7154441 -0.07612818 0.01425266 0.7192636 -0.07685637 0.01673549 0.7167467 -0.07332897 0.01537597 0.729306 -0.07349002 0.01749956 0.7311873 -0.07421439 0.01188296 0.726666 -0.07379847 0.01754546 0.7393239 -0.07644188 0.02028208 0.7392278 -0.07663321 0.02048557 0.7375867 -0.07637882 0.01939523 0.7405217 -0.07821768 0.01958674 0.7363328 -0.07645559 0.01896768 0.737171 -0.07434707 0.01114314 0.7463199 -0.07624667 0.01398998 0.7452252 -0.07949131 0.01915287 0.7431855 -0.07230341 0.007148623 0.7359844 -0.07305198 0.008210837 0.7330618 -0.07232338 0.004575133 0.7253798 -0.08046042 0.02144163 0.7367414 -0.07869791 0.01978915 0.7322961 -0.07406121 0.006609261 0.7511702 -0.0782504 0.01186776 0.7483838 -0.08156961 0.02127635 0.7390216 -0.08166968 0.01885354 0.7443 -0.07225817 0.01056808 0.7423068 -0.0729227 0.00769937 0.7436145 -0.08394062 0.02819555 0.736071 -0.07753807 0.01631915 0.7241973 -0.07931691 0.02192234 0.7271471 -0.08353137 0.02337634 0.7568077 -0.08533161 0.02973145 0.741874 -0.08580809 0.02783703 0.7524862 -0.08171808 0.02204036 0.7368769 -0.08028662 0.01958644 0.7323619 -0.07360529 0.008823752 0.7530483 -0.08121138 0.01845353 0.7504192 -0.07546877 0.01250356 0.7515 -0.0835058 0.02270197 0.7400823 -0.08350598 0.02022963 0.7466477 -0.08386397 0.02623838 0.7368829 -0.08049023 0.02119773 0.7292815 -0.08118361 0.02119934 0.7550105 -0.08528089 0.02682876 0.7418477 -0.08328479 0.02473336 0.7506318 -0.07328367 0.01522856 0.734209 -0.07447171 0.01682978 0.7382048 -0.0775116 0.01669836 0.7375388 -0.07292526 0.01283645 0.7365784 -0.07738471 0.01477837 0.7386026 -0.07454979 0.01465225 0.739235 -0.07401812 0.009797632 0.7412975 -0.07656538 0.01028424 0.7405098 -0.07279688 0.009003043 0.7376537 -0.06604808 0.03391116 0.742462 -0.06123548 0.005398035 0.6966819 -0.06793731 0.03319144 0.7483105 -0.06997549 0.02743065 0.7637961 -0.06974607 0.003007352 0.7480827 -0.07455199 0.007633745 0.7424135 -0.07863181 0.02563405 0.7228219 -0.07626378 0.02191555 0.7178234 -0.08372378 0.03141784 0.7345066 -0.08639937 0.02976268 0.7350864 -0.0847029 0.02751457 0.7361202 -0.08080369 0.02380573 0.7231953 -0.0798161 0.02145075 0.7252589 -0.07805782 0.01835066 0.7224187 -0.07879078 0.02021807 0.719996 -0.07208508 0.01742315 0.7133718 -0.07646507 0.01545459 0.7137995 -0.07473468 0.01231127 0.7114245 -0.07587128 0.01177233 0.7159969 -0.0746712 0.009897828 0.7178342 -0.07501709 0.008563756 0.7119551 -0.07360666 0.01283013 0.7102775 -0.07373607 0.007602274 0.7098215 -0.0733096 0.005447864 0.7147771 -0.07256317 0.003262162 0.7123544 -0.07232201 0.00328958 0.7179846 -0.07094877 0.001116752 0.7158623 -0.07565468 0.007683873 0.7415896 -0.07388538 0.006653249 0.7387975 -0.07404947 0.006440341 0.7364414 -0.0766623 0.006650328 0.733018 -0.06904959 2.94081e-4 0.7323442 -0.07522517 0.003339231 0.7259607 -0.0719828 0.002530634 0.7202737 -0.07132929 0.002947449 0.7243165 -0.06774097 -8.83318e-4 0.7236118 -0.07554978 0.006838679 0.7504956 -0.0756247 0.005150675 0.7502635 -0.07441741 0.007673144 0.7228308 -0.07151389 0.004195272 0.723743 -0.06614291 -0.001191616 0.7176735 -0.06976491 0.001046538 0.7197485 -0.08569312 0.03364533 0.7418157 -0.07568949 0.006428837 0.7563281 -0.07712191 0.01012372 0.760273 -0.08569848 0.03035295 0.7551015 -0.0839532 0.02420145 0.7604077 -0.07731121 0.008891046 0.7554529 -0.07613921 0.01012915 0.7566649 -0.08016151 0.01318895 0.7588056 -0.0863437 0.02325654 0.7590248 -0.08493602 0.02236807 0.7554258 -0.0796321 0.01421552 0.7569513 -0.0890398 0.02850526 0.7534721 -0.0880391 0.03162717 0.7412606 -0.08594727 0.02839589 0.7413896 -0.08687418 0.02571386 0.7512572 -0.008021652 0.08382987 0.8283043 -0.0163033 0.08237779 0.8273511 -0.008368849 0.09325337 0.8020086 -0.01677197 0.09248524 0.8012746 -0.02492856 0.09105646 0.8003637 -0.03350549 0.08821004 0.7987509 -0.04180288 0.08387434 0.7962518 -0.04933476 0.07733565 0.7934945 -0.02414375 0.08021515 0.8255336 -0.0322116 0.07798749 0.822736 -0.0397402 0.07508146 0.8188033 -0.04652309 0.07166117 0.8137515 -0.008570671 0.06153225 0.8485454 -0.01576858 0.06097155 0.8470273 -0.02294898 0.06014716 0.8443973 -0.03038477 0.05984705 0.8407483 -0.03739506 0.05938804 0.8358838 -0.04401749 0.05870717 0.8299347 -0.006457567 0.03069627 0.8564887 -0.01367419 0.03129613 0.8555904 -0.02094256 0.03220516 0.8539615 -0.02807748 0.03352975 0.8513187 -0.03554749 0.03647166 0.8465812 -0.005900144 0.006178438 0.8568922 -0.01285916 0.007040023 0.8563231 -0.01984226 0.008409738 0.855045 -0.0267927 0.01020723 0.8530322 -0.03563088 0.01298934 0.8495249 -0.006379783 -0.02015852 0.8550567 -0.01312905 -0.01826149 0.8545309 -0.02023071 -0.01591551 0.8532953 -0.02772068 -0.01344823 0.8505918 -0.05076277 0.05759894 0.8229901 -0.05253338 0.06801825 0.8074288 -0.05389338 0.07299429 0.7880113 -0.0624836 0.05566436 0.7908304 -0.0656563 0.04726344 0.7784158 -0.06761622 0.03655815 0.7617063 -0.0682919 -0.0138207 0.7985294 -0.07044887 -0.001554906 0.7736159 -0.06344687 -0.01980781 0.8113955 -0.07077902 0.005099654 0.764824 -0.05167001 -0.03250342 0.82648 -0.01271247 -0.05964761 0.8360333 -0.04491126 -0.03956592 0.8304755 -0.03722578 -0.0468325 0.8333793 -0.02859389 -0.05233925 0.8353035 -0.02017807 -0.0567736 0.8362751 -0.005990684 -0.06237185 0.8347722 -0.06841468 -0.01719641 0.7421901 -0.06027138 -0.0100249 0.6906984 -0.06309169 -0.01472038 0.6997919 -0.06899291 -0.00523132 0.7419199 -0.06787228 -0.01799589 0.7306483 -0.06684941 -0.02895539 0.7340439 -0.06493008 -0.02014571 0.7129822 -0.06360399 -0.03169912 0.7210102 -0.06008261 -0.02878999 0.6874657 -0.0612545 -0.04092991 0.7069275 -0.06186968 -0.03420531 0.6979465 -0.05232959 -0.04459136 0.6773319 -0.0543251 -0.04805099 0.6875748 -0.04524201 -0.05710697 0.6746994 -0.04726248 -0.05916279 0.6851133 -0.04346519 -0.0662502 0.6835345 -0.05723977 0.04167574 0.7141712 -0.06178939 0.05719095 0.7740889 -0.0645219 0.04766643 0.8035591 -0.009000599 0.09730297 0.7755497 -0.05074405 0.07778435 0.7701997 -0.04326277 0.0845102 0.7729786 -0.01726526 0.09578478 0.7757055 -0.02552366 0.09396129 0.7755944 -0.03439009 0.09029227 0.7748187 -0.05546247 0.07150846 0.7665673 -0.06151056 0.05550014 0.7575592 -0.06354498 0.04688358 0.7527232 -0.06435507 0.04898166 0.7663812 -0.06694781 0.04189103 0.7888503 -0.04949688 0.04182767 0.8335633 -0.06463807 0.03776878 0.8125173 -0.06839907 0.03482776 0.7967154 -0.04959309 0.002309739 0.8380882 -0.0427252 -0.00349462 0.8430458 -0.03539848 -0.009043037 0.8470278 -0.04261267 0.03955733 0.8406954 -0.04290461 0.01748144 0.8448306 -0.04882776 0.02302062 0.8397934 -0.0642566 0.02471387 0.8183829 -0.0698952 0.02515846 0.7996571 -0.07068282 0.02360153 0.7764677 -0.06854116 0.03394424 0.7681613 -0.0696178 0.02969086 0.7731936 -0.06429392 0.03672605 0.7371297 -0.06292378 0.03361773 0.7232646 -0.06546539 0.03777694 0.7461266 -0.06667309 0.03749275 0.7541206 -0.06356519 0.01128876 0.820608 -0.07001149 0.01456576 0.8024423 -0.06958532 0.001080214 0.8025553 -0.06477516 -0.02723568 0.7917303 -0.07147228 0.01607036 0.7775032 -0.0713576 0.007787227 0.7767217 -0.06392198 -0.004649877 0.8172158 -0.0616579 -0.03374183 0.8021081 -0.0587939 -0.04721963 0.7911918 -0.06120187 -0.03912854 0.7840825 -0.06862431 -0.01044988 0.7684859 -0.0553084 -0.05798023 0.7818385 -0.043078 -0.0772224 0.7783838 -0.04584521 -0.07116854 0.7872516 -0.05053937 -0.06344461 0.7987095 -0.052392 -0.04852771 0.8156368 -0.05020177 -0.01566249 0.8335654 -0.06681251 -0.01943141 0.7622397 -0.007320284 -0.08643233 0.7635492 -0.004147887 -0.08823865 0.7638503 -0.006589055 -0.0869531 0.7607129 -0.008482992 -0.0873599 0.7665105 -0.00945127 -0.08880853 0.7713232 -0.009872257 -0.08965492 0.7771408 -0.01079839 -0.08208513 0.8009755 -0.01030457 -0.08748531 0.7866833 -0.01242309 -0.07189214 0.820159 -0.01308596 -0.04176354 0.8479328 -0.004917681 -0.08944332 0.7770069 -0.004779279 -0.08917814 0.7713102 -0.005391776 -0.094222 0.7509587 -0.007216393 -0.09055823 0.7505338 -0.01979786 -0.08951169 0.7309813 -0.007783293 -0.09211373 0.7461237 -0.005419075 -0.09681642 0.7465778 -0.009373545 -0.09340363 0.7355371 -0.01466715 -0.09049892 0.7346734 -0.005909562 -0.1023457 0.7355834 -0.01499807 -0.09229052 0.7307509 -0.008404076 -0.0939933 0.7402745 -0.009846746 -0.08822059 0.7455219 -0.01364189 -0.0886994 0.7388163 -0.02036845 -0.08784741 0.7341482 -0.01626235 -0.08565491 0.7411188 -0.05628359 -0.05775541 0.710067 -0.04912328 -0.06666982 0.7067471 -0.0578348 -0.02358299 0.6785194 -0.05370301 -0.01841866 0.6723722 -0.04354619 -0.03393608 0.6644639 -0.0341776 -0.06889921 0.6614983 -0.03991681 -0.05360138 0.6641889 -0.04859107 -0.0379889 0.6706874 -0.06195211 0.02806144 0.7120448 -0.06052541 0.02334618 0.6960387 -0.06289279 -0.002589106 0.7033029 -0.06544238 0.03250664 0.7355281 -0.06485027 0.02875566 0.7243701 -0.06187629 0.01712083 0.7012505 -0.06130009 0.01011127 0.6981301 -0.0611726 0.001210272 0.6981129 -0.06831282 -0.004468381 0.7551135 -0.06966388 -7.08424e-4 0.7600612 -0.07113599 0.01811528 0.7674887 -0.03588789 -0.0476765 0.6588891 -0.02916038 -0.05987501 0.654067 -0.03220701 -0.07771861 0.6662003 -0.02131718 -0.07024329 0.6484715 -0.04007697 -0.073556 0.6832153 -0.04047828 -0.06563907 0.6736642 -0.00572437 -0.1010462 0.6989016 -0.00966686 -0.09994769 0.6983334 -0.003483295 -0.1014455 0.6985271 -0.01371705 -0.0983473 0.6965191 -0.02003926 -0.09392803 0.6929723 -0.0167616 -0.09664613 0.6950421 -0.02114558 -0.09034109 0.6906136 -0.02020287 -0.09176522 0.6909191 -0.0178979 -0.09402328 0.6901864 -0.02172696 -0.09075331 0.6908657 -0.02125555 -0.09221643 0.6913885 -0.01458346 -0.09675741 0.6893403 -0.008969366 -0.0989626 0.6874845 -0.005262374 -0.100242 0.6950141 -0.009121775 -0.09913349 0.6949355 -0.002720057 -0.1007186 0.6948501 -0.01906895 -0.09297919 0.6917771 -0.01617759 -0.09553343 0.6926545 -0.01239305 -0.0971291 0.694072 -0.02116656 -0.0866118 0.6911069 -0.02061176 -0.08926612 0.6908128 -0.02105408 -0.08045011 0.6911225 -0.01917898 -0.08185791 0.6923918 -0.01739639 -0.08969694 0.6935791 -0.007791876 -0.09585839 0.6924319 -0.01376378 -0.09205871 0.6921138 -0.003010988 -0.09807831 0.7042298 -0.0054937 -0.09829449 0.7048733 -0.008795797 -0.09709489 0.7058386 -0.01456987 -0.09515321 0.7068677 -0.01910918 -0.09442889 0.7031794 -0.02347487 -0.09225654 0.6981959 -0.02575546 -0.09006524 0.6939082 -0.02652436 -0.08889091 0.6906605 -0.0258879 -0.08836483 0.6878668 -0.02411198 -0.08918058 0.6850295 -0.0213207 -0.08984082 0.6826901 -0.01713567 -0.09344649 0.6802165 -0.009788572 -0.09456634 0.6785448 -0.0111221 0.0883755 0.7082509 -0.009662568 0.09279328 0.7298001 -0.009108781 0.09614175 0.7514536 -0.05931597 0.05283766 0.7420883 -0.05612778 0.04997974 0.7265778 -0.05414259 0.04657745 0.7104573 -0.0573039 0.03257519 0.6710386 -0.05718648 0.02765059 0.6429655 -0.05060845 0.07588905 0.7496494 -0.0462768 0.07025516 0.7305613 -0.043563 0.06468605 0.7118956 -0.0474168 0.05666238 0.6788704 -0.04797846 0.0527119 0.6557528 -0.009546577 0.07749336 0.6678012 -0.0363695 0.06784856 0.6621617 -0.03483659 0.0700612 0.6837694 -0.04191428 0.06351047 0.6809992 -0.0227251 -0.0223236 0.6187066 -0.02468848 -0.02428466 0.630584 -0.0475344 -0.003435254 0.6399769 -0.05289506 0.04547387 0.6522505 -0.0431897 0.06029266 0.6585627 -0.01603549 -0.02746689 0.6192786 -0.01100248 -0.03124457 0.6205014 -0.05122959 0.04956978 0.67575 -0.0115931 0.08181887 0.6912389 -0.01679331 -0.02879589 0.6310374 -0.009740948 -0.03283667 0.6297231 -0.05307477 0.007360339 0.6483892 -0.05660098 0.01991754 0.6586371 -0.03324675 -0.01873368 0.6321876 -0.04045629 -0.01186108 0.6349121 -0.04540008 -0.004965245 0.6228868 -0.03009986 -0.01874828 0.6163124 -0.03802168 -0.0127179 0.618466 -0.05180376 0.004420697 0.6283057 -0.05597537 0.01629239 0.6362574 -0.02764409 0.07480007 0.6852961 -0.01877516 0.07792598 0.6869291 -0.0286228 0.07291978 0.6651317 -0.01958215 0.0762276 0.6666955 -0.01877397 0.08615946 0.7126198 -0.04971969 0.06337505 0.7292052 -0.02750349 0.08266305 0.713523 -0.03996276 0.07066667 0.7127979 -0.02645808 0.09308618 0.7524986 -0.04455369 0.08233004 0.7511537 -0.05447828 0.06870526 0.7475088 -0.0354982 0.0836541 0.7318491 -0.01851218 0.09159666 0.7312343 -0.04700678 0.05896335 0.7111818 -0.03557848 0.08882457 0.7523116 -0.01804268 0.09508579 0.7520272 -0.04224789 0.07672089 0.7314035 -0.034698 0.07731598 0.7134192 -0.02680188 0.08901757 0.7318782 -0.03398215 -0.08433943 0.7222799 -0.03700459 -0.08250063 0.7269591 -0.006676852 -0.0896095 0.754253 -0.006135582 -0.08829075 0.757763 -0.01517289 -0.08916914 0.7775283 -0.02129358 -0.08781009 0.7782033 -0.02862459 -0.08523225 0.7790489 -0.03618067 -0.08134603 0.7793419 -0.05302846 -0.0638839 0.7748949 -0.05616307 -0.05705809 0.771472 -0.06122416 -0.04561483 0.7606811 -0.06425821 -0.03933697 0.7462214 -0.06434828 -0.0389046 0.7373526 -0.0632016 -0.04050493 0.7274309 -0.06044489 -0.04788231 0.7171149 -0.0559569 -0.05191618 0.6988318 -0.04817396 -0.06156361 0.6955382 -0.04419767 -0.06845259 0.6931522 -0.04048275 -0.07464253 0.6913521 -0.03735268 -0.07957303 0.690222 -0.03402709 -0.08369654 0.6898894 -0.02946078 -0.08767163 0.6903304 -0.02365678 -0.0895363 0.6909292 -0.02230888 -0.09042084 0.6910639 -0.02131587 -0.0898168 0.691185 -0.02127438 -0.08005714 0.6907878 -0.02191889 -0.07770729 0.6897054 -0.02474069 -0.02834826 0.6392967 -0.008300244 -0.03719186 0.638519 -0.01657217 -0.03384327 0.638266 -0.03323638 -0.0215497 0.6428427 -0.0593174 0.01822948 0.6831061 -0.007623076 -0.09718298 0.6921019 -0.004069685 -0.09818398 0.6919197 -0.005843877 -0.1006914 0.6997665 -0.009808301 -0.09983021 0.6991726 -0.009282886 -0.1000137 0.6972957 -0.005690872 -0.1011682 0.6977445 -0.003231465 -0.1014836 0.6974864 -0.00346899 -0.1011776 0.6991844 -0.001555085 -0.09911233 0.6915516 -0.04715389 -0.07510119 0.7191067 -0.05856847 -0.04875308 0.7769659 -0.01384007 -0.09840863 0.6974653 -0.0203942 -0.0942741 0.6934446 -0.01700729 -0.09681421 0.6955906 -0.01970559 -0.0936976 0.6924164 -0.01642608 -0.09649431 0.694585 -0.01325595 -0.09827142 0.6959045 -0.01075088 -0.09367191 0.692371 -0.01387858 -0.09154254 0.6921148 -0.01684236 -0.08894354 0.6920678 -0.06380426 -0.03457123 0.7617971 -0.0663948 -0.02909088 0.7440768 -0.02963095 -0.08279311 0.6703819 -0.03845506 -0.07690554 0.7881512 -0.04207569 -0.07064104 0.8013544 -0.02218508 -0.0855509 0.7371248 -0.02139461 -0.09356808 0.6954167 -0.02594888 -0.0901252 0.7002715 -0.01758331 -0.0963456 0.6981558 -0.03627836 -0.08147042 0.7093957 -0.04067337 -0.078749 0.7133894 -0.01692569 -0.09213131 0.7281927 -0.02024638 -0.09049642 0.7235835 -0.02873367 -0.08497613 0.7330253 -0.03014236 -0.08599638 0.7025652 -0.03291076 -0.08358162 0.7060692 -0.02035236 -0.08989411 0.7158189 -0.02376568 -0.08849269 0.7116643 -0.0202533 -0.09253638 0.706847 -0.0268895 -0.08706462 0.7292585 -0.0242955 -0.08844572 0.7252436 -0.03084975 -0.08585131 0.7179236 -0.02693039 -0.0874437 0.7143152 -0.01107519 -0.09394013 0.6739161 -0.02703106 -0.0860309 0.6743109 -0.02428275 -0.08859282 0.6783086 -0.01871609 -0.09145879 0.6742002 -0.02110767 -0.09070992 0.6891844 -0.01814758 -0.09418374 0.685878 -0.0180732 -0.09489071 0.6875836 -0.02094918 -0.09186649 0.6907577 -0.02071779 -0.08735442 0.6909331 -0.02069956 -0.07965761 0.6912455 -0.02117329 -0.08016771 0.6908457 -0.02177608 -0.09067571 0.6897743 -0.02193295 -0.09238964 0.6919683 -0.01926416 -0.08818519 0.6910591 -0.0174517 -0.09349751 0.6911609 -0.03151786 -0.0277127 0.6486058 -0.0304715 -0.03478598 0.6528367 -0.03216069 -0.04140728 0.6555789 -0.0393117 -0.02868181 0.6608617 -0.04020828 -0.01787686 0.6540999 -0.03841727 -0.02357667 0.6577094 -0.04952526 -0.005574166 0.661939 -0.04900836 -0.009596586 0.6660392 -0.04949969 -0.01411467 0.6692807 -0.05656617 -0.001984953 0.6815336 -0.0579034 0.009070754 0.6768405 -0.05744057 0.002884685 0.679415 -0.03027451 -0.08206135 0.7881222 -0.02247756 -0.08494311 0.7876351 -0.005231559 -0.08288085 0.8003295 -0.01703095 -0.08071422 0.8014013 -0.03305619 -0.07574909 0.8019296 -0.02446305 -0.07880985 0.8017394 -0.0571056 -0.005583286 0.6845698 -0.0240792 -0.09091961 0.6931436 -0.0214436 -0.0905494 0.6878737 -0.02325487 -0.08992218 0.6889603 -0.03799128 -0.07419079 0.6752321 -0.03497517 -0.07973474 0.6775552 -0.03698569 -0.07912313 0.6834713 -0.03632467 -0.08115321 0.6974732 -0.03913587 -0.07716238 0.6998038 -0.04349428 -0.07278698 0.7033478 -0.03323876 -0.08457332 0.6957771 -0.02873915 -0.08863323 0.6947581 -0.03313738 -0.08389639 0.6848489 -0.0314238 -0.08397042 0.6801488 -0.02738755 -0.08695423 0.6825952 -0.02878046 -0.08715999 0.6864746 -0.004885673 -0.09225362 0.7546557 -0.0039649 -0.090258 0.7580964 -0.004030346 -0.08878171 0.7611342 -0.003098964 -0.09902489 0.7016562 -0.005741298 -0.09927821 0.7021687 -0.0166822 -0.09318953 0.7104034 -0.01326698 -0.09778511 0.7004497 -0.009614586 -0.09808313 0.7023203 -0.009317755 -0.0962097 0.7091968 -0.005409479 -0.09760564 0.708266 -0.002388179 -0.09747052 0.7076157 -0.01593625 -0.08653163 0.7871568 -0.004476368 -0.08853733 0.7671284 -0.005084097 -0.08753591 0.7863062 -0.01106297 -0.09606701 0.72966 -0.01346999 -0.09400439 0.7294845 -0.01190519 -0.09402561 0.7318906 -0.009080469 -0.1002273 0.731904 -0.00565195 -0.0993309 0.7410402 -0.01511645 -0.09593492 0.6845251 -0.009538471 -0.09748011 0.6830671 -0.01513385 -0.09663408 0.6860809 -0.009457468 -0.09847289 0.6841486 -0.0082677 -0.09797018 0.690479 -0.01372498 -0.09551173 0.6912047 -0.02483725 -0.05257672 0.6509823 -0.02260178 -0.04416829 0.6495209 -0.02339619 -0.03588211 0.6455544 -0.01524305 -0.05257546 0.6463063 -0.01490497 -0.04169869 0.6449758 -0.007711172 -0.05742996 0.6436775 -0.007503986 -0.04547929 0.6432912 -0.01652497 -0.08343023 0.6917271 -0.007487952 -0.08902609 0.6908901 -0.010149 -0.08869773 0.6914334 -0.01375579 -0.08658552 0.6913307 -0.006989657 -0.08849704 0.6926127 -0.007039546 -0.08902019 0.6930274 -0.002256751 -0.09007662 0.6909933 -0.003935098 -0.08964902 0.6910461 -0.02068179 -0.07941663 0.6895745 -0.02133566 -0.0777359 0.6902239 -0.01918196 -0.07908421 0.6918497 -0.01837885 -0.08115142 0.6916217 -0.0165317 -0.08311533 0.69276 -0.01653939 -0.08362561 0.6917379 -0.01342719 -0.08645862 0.692234 -0.01330667 -0.0861572 0.6928792 -0.0244289 -0.080087 0.6539056 -0.02379226 -0.08567208 0.659044 -0.01292365 -0.09220761 0.6545215 -0.01330006 -0.08806258 0.6492176 -0.0174815 -0.06192541 0.6466553 -0.008817672 -0.06739097 0.6440136 -0.01120024 -0.07645982 0.6449568 -0.02035355 -0.09106409 0.6682562 -0.02201676 -0.08943641 0.6634567 -0.01233458 -0.09564781 0.6678717 -0.01347708 -0.09461361 0.6604039 -0.04534751 -0.05576545 0.819225 -0.03695487 -0.06231999 0.8209418 -0.03627258 -0.02910941 0.8421405 -0.04345786 -0.0222187 0.8382719 -0.02739226 -0.06818234 0.8202453 -0.02861928 -0.03422939 0.8456273 -0.01943135 -0.07004213 0.8203562 -0.006154775 -0.07308369 0.8199175 -0.006215393 -0.04461961 0.8477836 -0.02071779 -0.0382781 0.8474159 -0.05916357 0.04424017 0.72648 -0.0613203 0.04517996 0.7397276 -0.8602705 0.07332742 0.5285092 -0.8483384 0.07120662 0.5304919 -0.8542766 0.07225793 0.5289937 -0.865096 0.07408988 0.5284694 -0.8820407 0.0679937 0.5140183 -0.879864 0.06730031 0.5150646 -0.8724157 0.07445573 0.5268101 -0.8757655 0.07475501 0.5254335 -0.8789995 0.07508879 0.5252113 -0.8823685 0.07558619 0.5248521 -0.8864177 0.07566988 0.5243452 -0.8906107 0.0761435 0.5242578 -0.8943785 0.0762217 0.5237491 -0.8963568 0.07626819 0.5233725 -0.9096088 0.07579982 0.5135824 -0.9062443 0.0760526 0.5112043 -0.9010493 0.07595318 0.5096048 -0.895022 0.07627862 0.5094676 -0.887198 0.07612293 0.5100517 -0.8786252 0.07580441 0.5091815 -0.9109918 0.07608193 0.5129896 -0.9112018 0.07589858 0.5187097 -0.9099056 0.07533472 0.5210741 -0.9087966 0.07550221 0.5216453 -0.8740911 0.07654011 0.509799 -0.8679578 0.0747078 0.5105696 -0.9032776 0.07603418 0.5226932 -0.907781 0.07574462 0.5223786 -0.9070805 0.07595092 0.5224581 -0.9067798 0.07573199 0.5225049 -0.9065564 0.07579094 0.5225227 -0.9062368 0.07593303 0.5225436 -0.9057753 0.07603794 0.5225765 -0.9053072 0.07605654 0.5225914 -0.8990054 0.07618558 0.522568 -0.8980951 0.07622009 0.5229553 -0.8689556 0.07422399 0.5279704 -0.9077005 0.07899433 0.5132867 -0.9089778 0.0733608 0.5137168 -0.90662 0.07513898 0.5225675 -0.9067273 0.07654672 0.5224552 -0.9063976 0.07720148 0.5222069 -0.9062017 0.07448923 0.522657 -0.9050418 0.06977969 0.5144382 -0.8778795 0.06779241 0.5138994 -0.873374 0.06740659 0.5143144 -0.8699576 0.06707412 0.5148547 -0.8868793 0.06924629 0.5136867 -0.8927782 0.06873708 0.5144329 -0.8947632 0.06829601 0.5153694 -0.9003875 0.06869542 0.5141422 -0.8969629 0.06862092 0.5138326 -0.8827217 0.07025814 0.523157 -0.8820647 0.07946902 0.5238968 -0.8974549 0.06797564 0.5168101 -0.8945783 0.06788921 0.5172456 -0.8907146 0.0683214 0.5167461 -0.8694639 0.06619644 0.5181818 -0.8729292 0.06632459 0.5176807 -0.8764687 0.06666141 0.5173705 -0.894692 0.08284854 0.515173 -0.8942949 0.08280313 0.5177837 -0.8962932 0.08248794 0.5136948 -0.8969017 0.08248072 0.5175592 -0.8929119 0.08260339 0.5135498 -0.8904885 0.08314359 0.5181492 -0.8773762 0.08286339 0.5137754 -0.8759372 0.08339691 0.5183789 -0.873141 0.08268463 0.5143538 -0.8719868 0.08294689 0.5192294 -0.9006761 0.08210349 0.5140472 -0.9056457 0.0814417 0.515313 -0.8791262 0.08347141 0.5152618 -0.8689514 0.08236634 0.5153147 -0.8815544 0.08325982 0.5141209 -0.8867022 0.08296781 0.513836 -0.9061708 0.07770752 0.5219953 -0.905919 0.0740149 0.5226063 -0.9069053 0.07674032 0.5223627 -0.9069337 0.07490462 0.5225625 -0.907453 0.07435572 0.5225313 -0.9075365 0.07758224 0.521869 -0.9059652 0.07841259 0.5216735 -0.9054819 0.07317501 0.5223432 -0.8867076 0.06781172 0.5171419 -0.8863363 0.08339393 0.5180643 -0.8990944 0.07949471 0.5212834 -0.8992975 0.07285308 0.5224221 -0.9056375 0.07903671 0.5213051 -0.9034462 0.07935774 0.5211226 -0.9032281 0.07259649 0.5221269 -0.905155 0.07305508 0.5223036 -0.9066739 0.07230031 0.5218883 -0.9074683 0.0792672 0.5207122 -0.9033959 0.07139992 0.5214743 -0.9036921 0.08040082 0.5198442 -0.8983855 0.07228988 0.522759 -0.8870519 0.08163082 0.5124077 -0.8872923 0.07074582 0.5121653 -0.8760643 0.06741511 0.5209305 -0.8756714 0.06982582 0.5238434 -0.8790141 0.07017898 0.5236558 -0.8691813 0.06744754 0.5222743 -0.8681505 0.0830959 0.5201919 -0.8685808 0.08223521 0.5234692 -0.8792417 0.0833522 0.5187004 -0.8822067 0.08345061 0.5182313 -0.8822226 0.08205753 0.5215397 -0.8785087 0.08190673 0.5219361 -0.8830131 0.06806331 0.5204563 -0.8828176 0.06723123 0.5173968 -0.8798294 0.06690299 0.5175932 -0.8792819 0.06761413 0.5205914 -0.9002703 0.08225661 0.5174978 -0.9051728 0.08131951 0.5180855 -0.9040455 0.08062541 0.5192632 -0.9093647 0.07962691 0.518632 -0.9087362 0.07919174 0.5197728 -0.8999962 0.06802439 0.5173211 -0.8992155 0.0691986 0.5207208 -0.9088993 0.07078683 0.5187314 -0.9039826 0.06864428 0.5176721 -0.9032653 0.06922543 0.5202512 -0.9080311 0.07147604 0.520837 -0.9088512 0.0714178 0.5154875 -0.9061052 0.07176798 0.5125531 -0.9060405 0.08015799 0.5133036 -0.9095222 0.07951909 0.5163856 -0.8946713 0.07092463 0.5111343 -0.9015309 0.07109451 0.5111482 -0.8945302 0.0806849 0.5109832 -0.9011947 0.08022594 0.511232 -0.8799635 0.07022929 0.5111774 -0.8740265 0.07012063 0.5115393 -0.8735522 0.08080673 0.511703 -0.8782306 0.08106273 0.5112372 -0.8686916 0.06960499 0.5124815 -0.8680598 0.07993024 0.5122613 -0.8969661 0.0815317 0.5197614 -0.8968444 0.08061909 0.5209378 -0.8974884 0.06909179 0.5207672 -0.8945056 0.06890451 0.5208821 -0.8974442 0.07157468 0.5227239 -0.8908057 0.06892663 0.5211628 -0.886878 0.06867539 0.5209034 -0.8868871 0.07086992 0.5232176 -0.8945883 0.0714454 0.5232986 -0.8908804 0.07142978 0.5236884 -0.8862889 0.0796476 0.5235126 -0.8863199 0.0819692 0.5212202 -0.8941624 0.08012384 0.5223508 -0.8903746 0.08010584 0.5231496 -0.8905903 0.0820747 0.521005 -0.894358 0.08177959 0.520332 -0.8996019 0.08126312 0.5193422 -0.8983697 0.08058071 0.5206367 -0.8787103 0.07927173 0.5242858 -0.8754773 0.0820468 0.5220225 -0.8755373 0.0790944 0.5246317 -0.8721337 0.08185493 0.5228355 -0.8686687 0.07804131 0.5273782 -0.8720212 0.07873243 0.5259536 -0.8689155 0.06946009 0.5259119 -0.8727473 0.06750941 0.5217557 -0.8725181 0.06968939 0.5246303 -0.8306145 0.003767311 0.4944641 -0.7868602 0.0512939 0.4978958 -0.8018144 0.05982279 0.4996185 -0.7809581 0.02989017 0.49592 -0.8162688 0.06503409 0.5042587 -0.8296931 0.06781262 0.5063389 -0.8396845 0.06852328 0.5063092 -0.7929722 0.01971101 0.4881594 -0.8091313 0.01615488 0.4905229 -0.8227427 0.008387684 0.4943765 -0.864933 0.07443821 0.5104799 -0.8493304 0.06930959 0.5076224 -0.855287 0.0708757 0.5104293 -0.8571922 0.07198733 0.5105615 -0.8608438 0.0734167 0.5102035 -0.8428344 0.001610577 0.5099666 -0.8349053 0.003941595 0.500628 -0.8251882 5.68221e-4 0.4881149 -0.8183624 -0.005962371 0.4827975 -0.8117439 -0.01283353 0.4828502 -0.8063668 -0.01779633 0.4871347 -0.8026818 -0.02108836 0.4929108 -0.8662832 -0.003038942 0.5172578 -0.8619153 -0.00146687 0.5166562 -0.8578844 -3.14984e-4 0.5146663 -0.8522129 6.86917e-4 0.5113207 -0.818351 -0.01246243 0.5251072 -0.8265026 -0.01257199 0.5215126 -0.8013633 -0.02175533 0.4993379 -0.801941 -0.01653337 0.5153377 -0.7997154 -0.02013266 0.5094113 -0.8079635 -0.01307147 0.5225775 -0.8316856 -0.008231639 0.5109279 -0.8365734 -7.92381e-4 0.4989759 -0.8681442 0.04993557 0.5170396 -0.8765044 0.04329979 0.5351997 -0.8762724 0.04141002 0.5322827 -0.8713652 0.04285979 0.5355373 -0.8766959 0.05360662 0.5377277 -0.8719849 0.05307781 0.5383307 -0.8767171 0.0573914 0.5345825 -0.882822 0.05393779 0.5372655 -0.8827332 0.05820369 0.5338757 -0.8881516 0.05440843 0.5359016 -0.9279931 0.05635058 0.5317044 -0.929798 0.05848461 0.5311003 -0.9146674 0.058658 0.53144 -0.9077887 0.05898052 0.531342 -0.9082881 0.05502188 0.5336769 -0.9152921 0.05516511 0.5334305 -0.8992322 0.05880212 0.5313621 -0.9001572 0.05496048 0.5338484 -0.9086995 0.04485177 0.5336598 -0.9154821 0.04504859 0.5333112 -0.9004803 0.04413729 0.5337871 -0.9000533 0.04183369 0.5306147 -0.9088764 0.04258918 0.5301823 -0.9219005 0.04537397 0.5326789 -0.9153389 0.04302608 0.5300498 -0.9217494 0.04320079 0.5302733 -0.9211052 0.05541592 0.5330851 -0.9204799 0.05885452 0.5311872 -0.8732888 0.05691951 0.5203154 -0.872952 0.04414319 0.5207225 -0.8864176 0.05763393 0.520629 -0.8785508 0.0574243 0.5211554 -0.8783205 0.04314798 0.5218842 -0.8871604 0.04347831 0.5196259 -0.9288617 0.05787742 0.5208946 -0.9148607 0.05854862 0.5214625 -0.9282706 0.04546391 0.5196293 -0.9154458 0.04465419 0.5211009 -0.9388766 0.0567609 0.5260599 -0.9349028 0.05709278 0.5221735 -0.9349781 0.04662531 0.5209711 -0.9393757 0.04648572 0.5251545 -0.9395077 0.04595839 0.5304561 -0.9338396 0.04359519 0.5301634 -0.9341374 0.04334837 0.5276919 -0.9401022 0.0463922 0.5277565 -0.9286763 0.0422548 0.5300822 -0.9284504 0.04296082 0.5271587 -0.9383969 0.05608928 0.5303007 -0.9391753 0.0564711 0.5285114 -0.9346988 0.05733388 0.5302828 -0.9358538 0.0579093 0.5287631 -0.9297494 0.05901199 0.5284093 -0.8876347 0.04166829 0.5313357 -0.8865904 0.04077339 0.5277773 -0.8920057 0.0402342 0.527 -0.893404 0.04134571 0.5307327 -0.8877823 0.05853021 0.5327014 -0.892998 0.05846267 0.5317409 -0.8917449 0.059565 0.530501 -0.887238 0.06000828 0.5297533 -0.872681 0.05743622 0.5347735 -0.8730297 0.0600664 0.5293337 -0.8712584 0.04082709 0.5322852 -0.887835 0.043823 0.5345026 -0.8828155 0.04369252 0.5348855 -0.8821562 0.04169178 0.5316797 -0.9001258 0.0433101 0.5202589 -0.8997136 0.05813378 0.5217033 -0.9279007 0.04537492 0.5321933 -0.933173 0.05647999 0.5311053 -0.9335443 0.04481852 0.5314451 -0.9381178 0.05539029 0.5317086 -0.9386413 0.04627329 0.5315901 -0.9368461 0.04650807 0.5328035 -0.9332971 0.04607158 0.5325418 -0.9331721 0.05551427 0.5322319 -0.9368228 0.05461412 0.5325052 -0.9284191 0.04618918 0.5321097 -0.9285547 0.0550816 0.5321604 -0.8987753 0.05996412 0.5292856 -0.8995336 0.04111242 0.5266922 -0.9372712 0.04710859 0.5330954 -0.9375014 0.05416518 0.5326759 -0.9385607 0.05445379 0.5321696 -0.9385741 0.04700827 0.5319904 -0.9388607 0.0486198 0.5330992 -0.938872 0.05322098 0.5327745 -0.9376689 0.04756659 0.5332931 -0.9378429 0.05360859 0.5329889 -0.8987737 0.06031143 0.5249326 -0.8888059 0.06065112 0.5252467 -0.8733701 0.0605067 0.5250973 -0.8861885 0.0606631 0.5262881 -0.9353067 0.05847162 0.5259333 -0.9292193 0.05945611 0.5254325 -0.8771354 0.0600053 0.5294808 -0.8773636 0.06045031 0.5253306 -0.8829384 0.06005913 0.5299345 -0.8830965 0.06077522 0.524648 -0.908533 0.06006109 0.5284947 -0.9113301 0.05979579 0.5243175 -0.9191656 0.06053102 0.5289527 -0.9181793 0.06015342 0.5250204 -0.9143451 0.06011331 0.5291012 -0.9143603 0.06032931 0.5257061 -0.8816728 0.04104167 0.527953 -0.8768725 0.04064637 0.5281795 -0.870588 0.04003751 0.5280981 -0.9092726 0.04226291 0.5275343 -0.9151029 0.0424683 0.5279847 -0.9207183 0.04237478 0.527602 -0.893736 0.05451649 0.5343617 -0.8943756 0.04370021 0.5338732 -0.9177802 0.04281032 0.5234658 -0.928712 0.04332458 0.5236553 -0.9145522 0.04283118 0.5253142 -0.9119027 0.0430141 0.5235993 -0.89973 0.04139977 0.5238311 -0.8718812 0.04107099 0.5243786 -0.8776164 0.0414834 0.5248557 -0.8845751 0.04102122 0.5235058 -0.9348744 0.04440051 0.5240021 -0.9380735 0.04878747 0.5334063 -0.9381424 0.05263507 0.5331558 -0.9384929 0.05261397 0.5330575 -0.9384164 0.04881757 0.5333259 -0.9377402 0.04697751 0.5225695 -0.93753 0.05661523 0.5235291 -0.8717496 0.04754 0.5385192 -0.9264786 0.0507518 0.5332828 -0.9275885 0.05091619 0.533235 -0.9357029 0.05074471 0.5339161 -0.9372307 0.05085498 0.5337287 -0.9377567 0.05078697 0.5336804 -0.9382162 0.05068141 0.5335822 -0.9385094 0.05063498 0.5335016 -0.9390655 0.05069202 0.5332392 -0.9403383 0.0506913 0.5319138 -0.9328748 0.05056071 0.5338097 -0.8731551 0.05128461 0.5176063 -0.8788285 0.05151957 0.5180686 -0.9410139 0.05059707 0.5311099 -0.9414967 0.05077081 0.5300625 -0.9418928 0.05098587 0.5273405 -0.9407137 0.05132067 0.5250712 -0.8879741 0.05223542 0.5163102 -0.9006527 0.05199289 0.5167246 -0.9147464 0.05208331 0.5176156 -0.928228 0.05186361 0.5176418 -0.9357663 0.05151599 0.5199635 -0.9387692 0.05146932 0.5223949 -0.9217885 0.05011302 0.533667 -0.9159435 0.0500943 0.5345355 -0.9084585 0.04981952 0.5346058 -0.9005573 0.0495252 0.5349363 -0.894179 0.04952698 0.5353218 -0.8881142 0.0489813 0.536713 -0.8828416 0.0486449 0.537589 -0.876501 0.04777848 0.5380705 -0.8865045 0.04040139 0.5258063 -0.8893159 0.040771 0.5236971 -0.8749105 -0.009545385 0.5340502 -0.8755124 -0.01231259 0.5315491 -0.8686661 -0.008734643 0.5344763 -0.8747061 -0.002019643 0.5360953 -0.8684489 -0.001266479 0.5369116 -0.8747379 0.002407073 0.5344356 -0.8822684 -0.003136157 0.5354794 -0.8821429 0.002149999 0.533186 -0.888916 -0.00384593 0.5350908 -0.9262567 -0.007993042 0.5324147 -0.9255589 -0.004938662 0.5313242 -0.9132195 -0.003512859 0.5317524 -0.9080054 -0.001855671 0.5313122 -0.9073871 -0.006255149 0.5334398 -0.9121876 -0.006762564 0.5330284 -0.9015746 -8.30687e-4 0.5313805 -0.9010482 -0.005293548 0.5337332 -0.9068529 -0.01436483 0.5313909 -0.9113928 -0.01474404 0.5309828 -0.9008682 -0.01331698 0.5323532 -0.900521 -0.01550579 0.5311359 -0.9069771 -0.01668274 0.5297495 -0.9183562 -0.01625347 0.5303642 -0.9113922 -0.01742506 0.5290547 -0.9177454 -0.01817005 0.5285935 -0.9194743 -0.00744456 0.5328306 -0.9195429 -0.00422126 0.5317 -0.8713166 0.002337694 0.5184431 -0.8712418 -0.01000374 0.5197966 -0.8870568 0.001700878 0.5171846 -0.8775244 0.002561986 0.5172877 -0.8783566 -0.01205468 0.5194172 -0.8887937 -0.01380068 0.5190876 -0.9227715 -0.003722846 0.5183206 -0.9133424 -0.003017961 0.518597 -0.9220631 -0.01734554 0.5175619 -0.9118831 -0.01601445 0.5178515 -0.9399256 -0.007805943 0.5238218 -0.9322244 -0.004452645 0.5195952 -0.9304063 -0.01720649 0.5168944 -0.9378517 -0.01773977 0.5216718 -0.9376708 -0.01773184 0.5262212 -0.9308562 -0.01847314 0.5248261 -0.9303882 -0.01976716 0.5230713 -0.9378503 -0.01832973 0.5241376 -0.9238639 -0.01895397 0.5267152 -0.9223608 -0.02023226 0.5237408 -0.9380573 -0.008604586 0.5295066 -0.9399241 -0.007973134 0.5268176 -0.9327117 -0.006186544 0.5304247 -0.9355813 -0.004087984 0.5271919 -0.9243901 -0.001663565 0.5282074 -0.8878288 -0.01396125 0.532027 -0.8880828 -0.01567578 0.5285133 -0.8935561 -0.01638275 0.5291944 -0.8941258 -0.01468777 0.5320003 -0.8889843 0.001256465 0.5325083 -0.8951795 1.44713e-4 0.5318969 -0.8942537 0.003107786 0.5288257 -0.8887717 0.003866076 0.5293527 -0.8687442 0.00265181 0.5354769 -0.869542 0.006044387 0.5298668 -0.869032 -0.01151853 0.5317887 -0.8880718 -0.01183944 0.533838 -0.8816987 -0.01067376 0.5336213 -0.8820284 -0.01326274 0.5312913 -0.9003211 -0.01488894 0.5175331 -0.9014969 -4.59184e-4 0.5173739 -0.9253603 -0.01787835 0.5275684 -0.9332121 -0.008217453 0.5304812 -0.9310197 -0.01817238 0.5261312 -0.937228 -0.00909388 0.5301402 -0.937417 -0.01725089 0.527076 -0.9335963 -0.01751208 0.5277692 -0.9313729 -0.01751285 0.5277351 -0.9324205 -0.009276986 0.5310289 -0.9339107 -0.009396851 0.5309296 -0.9270464 -0.01605397 0.5289772 -0.9280462 -0.009487569 0.5312498 -0.9011293 0.002072691 0.5277687 -0.9001126 -0.01657468 0.5275369 -0.9349913 -0.01730138 0.5281261 -0.9350077 -0.009949266 0.5310134 -0.9370104 -0.01059275 0.530669 -0.9366671 -0.01684987 0.5283509 -0.9363555 -0.01652544 0.5287917 -0.9366177 -0.01096957 0.5308077 -0.9352666 -0.01699787 0.5285553 -0.9354017 -0.01032584 0.5309897 -0.9013649 0.002532482 0.5228285 -0.8931283 0.004331171 0.5237098 -0.8705577 0.006330668 0.5229485 -0.8880019 0.004972994 0.5242213 -0.9333781 -0.002459347 0.5243582 -0.92326 -5.51285e-4 0.5233163 -0.8748443 0.005930781 0.5297906 -0.8763362 0.006208658 0.5228946 -0.8821473 0.005447387 0.5294643 -0.8842121 0.005501091 0.5236747 -0.9080286 6.98814e-4 0.5276415 -0.9096625 6.89315e-4 0.5229957 -0.9187638 -8.77186e-4 0.5278512 -0.9163068 -5.48085e-4 0.5234168 -0.9130614 -3.79986e-4 0.527805 -0.9128206 8.49147e-5 0.5237482 -0.8829131 -0.01504004 0.5278806 -0.8762692 -0.01410466 0.5280302 -0.8696796 -0.01317787 0.5281747 -0.9069885 -0.01855659 0.5265361 -0.9115099 -0.01921707 0.5261262 -0.9162621 -0.01979988 0.525693 -0.895758 -0.004670381 0.534571 -0.8952398 -0.01241564 0.5333573 -0.9150583 -0.01825535 0.5200632 -0.9220109 -0.01933854 0.5199438 -0.9118233 -0.01928156 0.5211268 -0.9095615 -0.01825565 0.5202991 -0.9002526 -0.01738166 0.521196 -0.8703648 -0.01302278 0.5237558 -0.8772457 -0.01439094 0.5237247 -0.8847994 -0.01560366 0.5234636 -0.9304056 -0.01980835 0.5206445 -0.9356539 -0.01639413 0.5289925 -0.935856 -0.01112508 0.5309423 -0.936217 -0.01128274 0.5308907 -0.9361212 -0.01620316 0.5290896 -0.9376497 -0.01589268 0.5187676 -0.938212 -0.007827281 0.521053 -0.8680179 -0.004861056 0.5367032 -0.9246926 -0.01284295 0.5314685 -0.9268094 -0.01297259 0.5308032 -0.9335731 -0.01409709 0.5306831 -0.9348611 -0.01413029 0.5305949 -0.9354265 -0.01404124 0.5305255 -0.9358804 -0.01396924 0.5304762 -0.9362359 -0.01397818 0.5304142 -0.9365609 -0.01415646 0.5303053 -0.9372239 -0.01382815 0.5302029 -0.9319946 -0.01397317 0.5308014 -0.871524 -0.004150152 0.5171576 -0.8781728 -0.00536096 0.5158683 -0.9382462 -0.01342618 0.5292174 -0.939534 -0.01321303 0.5287433 -0.9408726 -0.01249843 0.5265517 -0.9406725 -0.01228588 0.5231332 -0.887732 -0.00697267 0.5158578 -0.9003663 -0.009097039 0.5148224 -0.9120708 -0.009318947 0.5156952 -0.9228718 -0.01061296 0.5153294 -0.9301255 -0.01095056 0.5159111 -0.9389188 -0.01195967 0.5200925 -0.9188774 -0.01244008 0.5324981 -0.9119791 -0.01088029 0.532606 -0.9074074 -0.01036167 0.5330225 -0.9012182 -0.00935465 0.5339294 -0.8955109 -0.008742868 0.5346319 -0.8885586 -0.007796883 0.5352559 -0.881659 -0.006852984 0.5354021 -0.8742598 -0.005656957 0.5360264 -0.888556 -0.01642626 0.5241664 -0.8916052 -0.01689445 0.5228976 -0.7372186 0.04283058 0.5035272 -0.7364616 0.02960461 0.5014626 -0.7532733 0.04300272 0.5056131 -0.7513894 0.03189021 0.5032247 -0.7600156 0.04485827 0.5066155 -0.7576699 0.03086107 0.5035332 -0.7997712 0.04088783 0.5028669 -0.796319 0.04627841 0.4997735 -0.7919147 0.04817348 0.4982417 -0.7781892 0.05346983 0.5005351 -0.8069131 0.03389799 0.5077635 -0.8086728 0.04071849 0.5068544 -0.8044921 0.04288548 0.5038646 -0.8056098 0.05025541 0.5019908 -0.8040818 0.05560189 0.5003786 -0.7967858 0.06596714 0.5013895 -0.8022048 0.03361499 0.5055797 -0.7981431 0.03463828 0.5035017 -0.797637 0.02547329 0.4937057 -0.7914044 0.0336011 0.4988377 -0.8130476 0.04506021 0.5076354 -0.8241944 0.04426079 0.5114053 -0.8392844 0.04367208 0.5098279 -0.862153 0.04841572 0.5162407 -0.8582159 0.0476579 0.5132721 -0.8504321 0.04551851 0.5091475 -0.8639616 0.04759228 0.5394207 -0.8563461 0.04694098 0.540583 -0.8484569 0.04600507 0.542338 -0.8971922 0.01505219 0.5227762 -0.8937419 0.01523 0.5241826 -0.8642616 -0.004339039 0.5369886 -0.8547807 -0.002407073 0.5379949 -0.7504113 0.003776371 0.5313898 -0.6834049 0.004661202 0.5413691 -0.7323246 0.003762662 0.5340054 -0.1131135 0.01603311 0.5662032 -0.06123811 0.03304338 0.6234247 -0.07757347 0.02327919 0.5949379 -0.7636568 0.003486096 0.5285056 -0.7648616 8.06716e-4 0.51894 -0.7661741 5.23317e-4 0.5114842 -0.774967 -9.22857e-5 0.5259138 -0.776639 -0.004961967 0.5168779 -0.7528037 0.003751158 0.5139247 -0.7520109 0.001064181 0.5214087 -0.7628802 0.009188771 0.5368119 -0.786226 0.03215098 0.4967545 -0.773259 0.03066807 0.4993234 -0.7613012 0.05242639 0.510736 -0.7625811 0.0570209 0.5151506 -0.7623451 0.05964863 0.5236337 -0.7678669 0.002161562 0.5050106 -0.7704245 0.01052969 0.4986847 -0.7722809 0.01719111 0.4969211 -0.7692136 0.006115794 0.5010246 -0.761165 0.05475342 0.5388287 -0.760799 0.042984 0.546383 -0.761419 0.03120547 0.5465469 -0.7610744 0.0170567 0.5422195 -0.8129743 0.0523706 0.50543 -0.8258812 0.05230748 0.5093668 -0.8148483 0.06019771 0.5043004 -0.8280982 0.06249308 0.5070928 -0.8306946 0.07440871 0.5077238 -0.8176451 0.07268232 0.5068742 -0.8252987 0.0369417 0.5132293 -0.8129718 0.0403006 0.5089853 -0.8269569 0.02998781 0.5134301 -0.8131853 0.03373378 0.5098913 -0.827651 0.02126216 0.5115812 -0.8140108 0.02840381 0.5094831 -0.825761 0.01793891 0.5090392 -0.8127967 0.0212841 0.4991208 -0.8407891 0.01557236 0.5090469 -0.8399636 0.02070921 0.5109612 -0.8399168 0.02872407 0.5126181 -0.8408702 0.07486283 0.5093325 -0.8385167 0.06178921 0.5065802 -0.8384992 0.05293929 0.5089227 -0.8395814 0.03620588 0.5116167 -0.794814 0.0219497 0.4900043 -0.7755488 0.0191487 0.5434595 -0.7754288 0.02303516 0.544583 -0.8410704 0.007333517 0.5088717 -0.8118576 0.01787149 0.4939411 -0.8255334 0.0110718 0.5032898 -0.7915262 0.01633232 0.4863946 -0.8049528 0.009171903 0.4837098 -0.8152841 0.00490868 0.4852149 -0.8066961 0.006928205 0.5420316 -0.7924544 0.01253378 0.5419914 -0.8204714 0.002466797 0.5419424 -0.8347831 0.001117706 0.5424349 -0.8410381 -6.26088e-4 0.5420166 -0.8474639 -0.001513361 0.5407763 -0.7811849 0.05662792 0.537626 -0.7958486 0.05998921 0.5381993 -0.8102136 0.06203532 0.536453 -0.8246389 0.06478518 0.5367848 -0.842662 0.06954091 0.5326598 -0.8361788 0.06713992 0.534877 -0.7767919 0.04383909 0.5443474 -0.7941628 0.0440492 0.5440644 -0.8103111 0.04592502 0.5427494 -0.8257163 0.04615837 0.5430896 -0.8420271 0.0453099 0.543217 -0.8354305 0.04538458 0.5430423 -0.8820537 0.02119791 0.5411957 -0.8884941 0.02104157 0.5409764 -0.8944604 0.02086299 0.5406609 -0.9017248 0.02108329 0.5384155 -0.909285 0.02075368 0.5374115 -0.9185122 0.0204463 0.5373572 -0.9262396 0.02072077 0.5374189 -0.9337836 0.02110409 0.5370327 -0.9463797 0.02184921 0.5227371 -0.9426679 0.02193397 0.520704 -0.9363044 0.02235162 0.5201854 -0.9256991 0.0225476 0.5209491 -0.9094739 0.02250218 0.5180788 -0.893798 0.0234102 0.5193153 -0.9525054 0.02286112 0.5250555 -0.954349 0.0219298 0.5277577 -0.9548665 0.02167081 0.530505 -0.9547836 0.02125257 0.5324007 -0.7750804 0.03241497 0.5461207 -0.7943338 0.02773171 0.5452688 -0.808017 0.02459961 0.5448221 -0.8234714 0.02046579 0.5439434 -0.8499696 0.02089959 0.5110936 -0.8573322 0.02101171 0.5128682 -0.883861 0.02313137 0.5190274 -0.8760722 0.0229038 0.5198864 -0.8629711 0.02161157 0.5167033 -0.8692219 0.02245807 0.519214 -0.9452921 0.02099591 0.5350981 -0.9543854 0.02061802 0.5334339 -0.954079 0.02023661 0.5338588 -0.9536789 0.02020001 0.5345016 -0.9531643 0.02000957 0.5348657 -0.9527913 0.02001416 0.5351947 -0.951161 0.02018487 0.5357009 -0.9481951 0.02058547 0.5354456 -0.9402289 0.0217809 0.5348326 -0.9381604 0.02164369 0.5363186 -0.8757928 0.02079319 0.5411431 -0.8695209 0.02099949 0.5414253 -0.8341214 0.01992887 0.5442659 -0.8594019 0.0202921 0.5431346 -0.8426189 0.01952898 0.5448759 -0.8501449 0.01943939 0.5444837 -0.7364138 0.05157381 0.5086311 -0.754762 0.05113559 0.5101556 -0.7499723 0.05764329 0.5368469 -0.7502073 0.04656958 0.5471588 -0.7512575 0.03157937 0.5470662 -0.7501811 0.01792889 0.5434494 -0.7730555 0.05170577 0.540704 -0.7774162 0.04769009 0.5428832 -0.7817899 0.06063848 0.5327773 -0.7710162 0.04106682 0.545467 -0.7748968 0.03646147 0.5458825 -0.7697086 0.0295813 0.5459837 -0.7944444 0.05514281 0.5406431 -0.7944149 0.0492751 0.5425802 -0.7954896 0.06427073 0.5347005 -0.7934953 0.03981161 0.5448542 -0.7939173 0.03388577 0.545194 -0.7933453 0.02178966 0.544119 -0.7934937 0.01683217 0.5429068 -0.8093618 0.05703049 0.5390073 -0.8100681 0.05163079 0.5407537 -0.8102238 0.06615883 0.5331035 -0.809338 0.03890711 0.5443601 -0.808767 0.03173041 0.5447102 -0.8078606 0.01750391 0.5430691 -0.8069728 0.01162296 0.5426732 -0.7774679 -0.00655663 0.4987727 -0.7538713 0.009701371 0.509414 -0.8480194 0.07547688 0.5105981 -0.8533837 0.07691723 0.5118643 -0.8568225 0.07799273 0.5121932 -0.8608347 0.07858639 0.5121038 -0.8650556 0.07937192 0.5119969 -0.9468522 0.0274648 0.5229636 -0.9462326 0.01703709 0.522674 -0.8248188 0.05941617 0.5381307 -0.8259757 0.05313122 0.5402261 -0.8244665 0.07006537 0.5336502 -0.825191 0.03766137 0.5441285 -0.824258 0.02926367 0.5448523 -0.8233061 0.01457637 0.5424372 -0.8217691 0.007864058 0.5424872 -0.820165 -0.002729237 0.53912 -0.9531664 0.0184772 0.5340975 -0.9533192 0.02220946 0.5351586 -0.9530132 0.02163189 0.5354146 -0.9528235 0.01869291 0.5345696 -0.8477035 0.06019508 0.534161 -0.8425064 0.06028288 0.5353643 -0.853823 0.06113177 0.531997 -0.8475401 0.05703848 0.5374366 -0.842342 0.05630129 0.5388025 -0.8540643 0.05788379 0.5353541 -0.8482656 0.0348131 0.542586 -0.8428251 0.03534358 0.543608 -0.8538277 0.03430521 0.540253 -0.8484963 0.03072637 0.5444338 -0.8430258 0.03023952 0.5450569 -0.8547589 0.03071159 0.5425382 -0.8336239 0.01277387 0.5419999 -0.840645 0.01126927 0.5417894 -0.8467196 0.01133131 0.5407078 -0.8538988 0.01143217 0.5372782 -0.8398099 0.007563889 0.5423184 -0.8454315 0.007938504 0.5413607 -0.8524591 0.00787878 0.5383313 -0.8190475 -0.01688218 0.5161534 -0.8536649 -0.03248429 0.4969197 -0.8716413 -0.02807623 0.4835519 -0.8726573 -0.02528774 0.4821704 -0.8741006 -0.02096384 0.4804396 -0.8769437 -0.01677846 0.5023658 -0.8767252 -0.02092999 0.5037124 -0.8760474 -0.02364456 0.5031865 -0.8781406 -0.01393097 0.4975133 -0.879145 -0.01589566 0.4844684 -0.879374 -0.01392507 0.4925479 -0.6817606 0.05300861 0.5446689 -0.6775965 0.05958902 0.5265595 -0.7347618 0.0579428 0.5342062 -0.6772775 0.06461912 0.5155735 -0.6772873 0.02689307 0.4868571 -0.6785674 0.01714491 0.4907763 -0.7372491 0.0211417 0.5024309 -0.6833732 0.03821909 0.5521166 -0.6841949 0.02260327 0.5524684 -0.67835 0.05886471 0.5062537 -0.6783149 0.05318951 0.4969252 -0.6776906 0.04182147 0.4885828 -0.7480692 0.01720267 0.5056015 -0.749475 0.02254039 0.5038398 -0.7553782 0.01684421 0.5061429 -0.7564445 0.02190941 0.504278 -0.683752 0.0114836 0.5479763 -0.6836362 3.08313e-4 0.5324931 -0.6823487 -0.001893937 0.5209098 -0.6812127 0.001801669 0.5069642 -0.6801775 0.008469164 0.4980357 -0.08311319 -0.036035 0.5418673 -0.06114739 -0.04538667 0.5375078 -0.02133858 -0.05385267 0.5440195 -0.03667259 -0.05332857 0.5464293 -0.01278036 -0.0531066 0.5414487 -0.0122711 -0.03893744 0.5576683 -0.007561683 -0.03425639 0.5603641 -0.0166068 -0.0431624 0.5556077 -0.02514785 -0.04373055 0.5584911 -0.03787839 -0.04499477 0.5581457 -0.05314278 -0.03762608 0.5618513 -0.06954807 -0.02283155 0.5657351 -0.8538652 -0.00965774 0.5344442 -0.8490149 -0.008594453 0.5355461 -0.8541063 -0.01084333 0.5314822 -0.8512029 -0.01065033 0.5313676 -0.8502033 0.08056712 0.521705 -0.8510854 0.07927459 0.5162591 -0.8558812 0.06338858 0.5149375 -0.8570889 0.05552041 0.5148757 -0.858521 0.03588032 0.5117002 -0.8575972 0.02832651 0.5129771 -0.857498 0.01390647 0.512992 -0.8584399 0.006412565 0.5122572 -0.8570975 -0.005888283 0.5166875 -0.8559686 -0.009764134 0.5207388 -0.8529788 -0.01187235 0.5281686 -0.07990497 -0.03047448 0.5485382 -0.09814751 -0.01185274 0.5552229 -0.849167 -0.006720542 0.536876 -0.8486479 -0.00451523 0.5384588 -0.8454744 0.001404762 0.5421623 -0.844776 0.005585789 0.5424529 -0.8486115 0.01400321 0.5411334 -0.8496664 0.0162518 0.5423595 -0.8498271 0.02320456 0.5457571 -0.8495352 0.0270577 0.545585 -0.8487908 0.03916698 0.5416885 -0.848385 0.04248851 0.5417966 -0.8485789 0.05046528 0.5416091 -0.8480957 0.05422419 0.5402444 -0.8488408 0.06450271 0.5317505 -0.8484231 0.06800043 0.5308511 -0.8483315 0.07540428 0.5302295 -0.8732501 -0.02970814 0.4940493 -0.05601626 0.05350238 0.6300411 -0.009508669 -0.06601095 0.5114783 -0.8515784 0.05496901 0.5079513 -0.8506422 0.0610603 0.5084582 -0.8605934 0.01149278 0.5327054 -0.8593745 0.008051574 0.533841 -0.8662915 0.006984293 0.5227724 -0.7337939 0.001729309 0.5167697 -0.01194155 0.07911568 0.6411468 -0.01919257 0.08866941 0.6116042 -0.06059008 0.07529997 0.6155888 -0.04488056 0.06989949 0.6359839 -0.1045309 0.06255561 0.5872284 -0.08521109 0.07923728 0.5881178 -0.03109818 0.09771752 0.5798068 -0.854376 0.06869798 0.5288665 -0.8601949 0.06928932 0.5271521 -0.8603603 0.0769869 0.5284093 -0.8543719 0.07636338 0.5287264 -0.8550003 0.0796135 0.5257805 -0.8661757 0.06634223 0.5196884 -0.8631185 0.0651012 0.5220113 -0.8616619 0.06208038 0.5255628 -0.8589276 0.06346428 0.5180204 -0.8610062 0.06163698 0.5212481 -0.8634621 0.06640213 0.5167532 -0.8625655 0.06754124 0.5142399 -0.8653714 0.06877869 0.5134925 -0.8662486 0.06716358 0.5158776 -0.866795 -0.02959436 0.4854218 -0.8684482 -0.02619993 0.4824401 -0.8690052 -0.02076953 0.4803853 -0.8795098 -0.02756047 0.4836935 -0.870649 -0.01590633 0.5031176 -0.8804203 -0.02455604 0.4817977 -0.8794692 -0.02143466 0.4814636 -0.8806179 -0.01854807 0.5017162 -0.8816273 -0.02234846 0.502309 -0.8716037 -0.02030998 0.5045141 -0.8705757 -0.02331018 0.5042206 -0.8810442 -0.02445298 0.5015231 -0.8882446 -0.02422267 0.4980702 -0.883603 -0.01723736 0.4985625 -0.8869929 -0.02101224 0.4982165 -0.8734941 -0.01249223 0.4974444 -0.8671789 -0.02915239 0.5012738 -0.8722 -0.02633535 0.5024972 -0.879974 -0.02493464 0.5014154 -0.8859668 -0.02765256 0.4979599 -0.8794248 -0.02595984 0.500737 -0.8728106 -0.02680915 0.5016589 -0.8734943 -0.02728605 0.5006778 -0.879313 -0.02687174 0.5003281 -0.8744464 -0.02724623 0.499827 -0.8789013 -0.02763217 0.4995721 -0.8827158 -0.02939844 0.4970244 -0.8840271 -0.02887839 0.4975516 -0.8847837 -0.02850073 0.4977427 -0.8845412 -0.02954053 0.4962383 -0.884043 -0.03001403 0.4952527 -0.8841617 -0.03039628 0.4942655 -0.884396 -0.03018236 0.4947004 -0.8329548 -0.02667689 0.4855803 -0.8373208 -0.02165567 0.4839712 -0.8402314 -0.01585185 0.4855458 -0.846472 -0.01272177 0.5277876 -0.8579103 -0.01154625 0.5293654 -0.830606 -0.01086968 0.5254057 -0.8392624 -0.01100587 0.5272657 -0.8438365 -0.01060944 0.4906787 -0.8602175 -0.01100176 0.5223006 -0.8503046 -0.008989453 0.5174433 -0.8368883 -0.01959627 0.5069605 -0.8448134 -0.00977987 0.4972601 -0.8419223 -0.01353716 0.5041251 -0.8400027 -0.02881467 0.5028832 -0.8549226 -0.03033846 0.5020324 -0.8538053 -0.02379608 0.5056976 -0.8429641 -0.02337038 0.5056515 -0.8547606 -0.02002823 0.5055142 -0.8452058 -0.01971364 0.5060892 -0.8612957 -0.007393062 0.5182629 -0.8513565 -0.004516839 0.5137658 -0.8514665 -0.01125425 0.4987304 -0.8591454 -0.01371258 0.4992823 -0.8565835 -0.01569664 0.50242 -0.8493531 -0.01428884 0.5032181 -0.8492762 -0.02036315 0.4831518 -0.85613 -0.02023005 0.4819334 -0.8460436 -0.02559298 0.484778 -0.8556901 -0.02651786 0.4835031 -0.8543019 -0.03278523 0.4906868 -0.8408452 -0.03100997 0.4923191 -0.8399347 -0.03063994 0.4989984 -0.8431806 -0.02915376 0.4881263 -0.8558771 -0.03017556 0.4858139 -0.8537153 -0.01079475 0.4920648 -0.8517785 -0.01517844 0.4847752 -0.8578692 -0.01510626 0.4844248 -0.8617263 -0.01159685 0.4907206 -0.8091447 -0.02418404 0.4961481 -0.807448 -0.02345037 0.5027414 -0.8362589 -0.01282125 0.5057667 -0.8297495 -0.01858115 0.509872 -0.8255147 -0.01535433 0.5145495 -0.8287239 -0.03055405 0.4942245 -0.8168961 -0.02751797 0.4984927 -0.7799236 -0.00279963 0.4924209 -0.8663832 0.003338158 0.5185443 -0.8652012 0.006532907 0.5292254 -0.8606686 0.03501552 0.5361602 -0.8623708 0.03178048 0.5384315 -0.8622861 0.056472 0.5187904 -0.862508 0.03699558 0.5183467 -0.8636443 0.05943202 0.5235614 -0.8632271 0.05989819 0.5286706 -0.8602428 0.05900722 0.5324667 -0.854993 0.0428583 0.5389378 -0.8559932 0.05109971 0.5406504 -0.8675522 0.03982049 0.5240986 -0.8660917 0.03901261 0.5288993 -0.8627831 0.04311352 0.5368301 -0.8625677 0.03941071 0.5341867 -0.8643735 0.05212312 0.538842 -0.8677303 0.04255819 0.5198827 -0.8641456 0.05654639 0.5352106 -0.7544366 0.01417601 0.507257 -0.8079468 -0.02082145 0.5093186 -0.7762151 -0.007409751 0.506639 -0.7962991 0.06927132 0.5105882 -0.7966005 0.07239228 0.5207484 -0.7538357 0.05666768 0.5152648 -0.01008009 -0.0453251 0.5492002 -0.01389896 -0.03421604 0.5659843 -0.01736879 -0.02790749 0.5859875 -0.8606437 0.06566202 0.5257477 -0.8592079 0.06187993 0.5290302 -0.8607909 0.08166712 0.5159428 -0.8657062 0.08232623 0.5155023 -0.8603851 0.08123284 0.525497 -0.8604952 0.0823388 0.5205258 -0.8647496 0.08306312 0.5201228 -0.890097 -0.02581608 0.4905976 -0.8873639 -0.02700495 0.4856525 -0.887543 -0.01894056 0.4911489 -0.8845437 -0.01628333 0.4922239 -0.8832241 -0.01925283 0.4840234 -0.8857743 -0.02142345 0.4848953 -0.8731719 -0.01203078 0.4907341 -0.8710986 -0.01481443 0.4832118 -0.8622395 0.006270587 0.5173767 -0.8147124 0.07555329 0.5216751 -0.8161441 0.0768674 0.5140256 -0.8282867 0.0792272 0.5164979 -0.8269457 0.07803583 0.5226346 -0.7781097 0.06353902 0.5081701 -0.7762974 0.06587779 0.5161049 -0.8384475 0.07922339 0.5227712 -0.8398204 0.079126 0.5161569 -0.8553833 0.08156388 0.5211712 -0.8452384 0.0799281 0.5222839 -0.8464031 0.07848763 0.5161767 -0.8555694 0.08093583 0.516287 -0.8438508 -0.01106637 0.5324311 -0.8427171 -0.005257844 0.539313 -0.8421853 -0.007525444 0.5370644 -0.790557 0.006263077 0.5392738 -0.8066189 5.41123e-5 0.5381572 -0.8370727 -0.01001608 0.5338392 -0.8256523 0.07406163 0.5299733 -0.8406881 0.004725098 0.5430549 -0.8434593 0.01396167 0.5422414 -0.8648457 0.077542 0.5278968 -0.864095 0.08197104 0.5240579 -0.8650081 0.06983411 0.5262343 -0.8654246 0.06718552 0.5232876 -0.7515288 0.05894273 0.522592 -0.8106822 0.07030862 0.528828 -0.795395 0.0679351 0.5276513 -0.7757704 0.06184512 0.5264992 -0.8200617 -0.009192645 0.5327638 -0.8117573 -0.01825594 0.5144227 -0.7726505 0.006319463 0.5347393 -0.771065 0.01510989 0.5414568 -0.7492735 0.008817076 0.5380548 -0.7345421 0.007561802 0.5092836 -0.7355118 0.01370817 0.5053041 -0.7335858 0.0473448 0.5455625 -0.735278 0.03297501 0.5480508 -0.7332247 5.45715e-4 0.5250086 -0.7335432 0.01800608 0.5458332 -0.7339839 0.009387314 0.5404037 -0.7341101 0.05889731 0.5203266 -0.7366129 0.05588281 0.5135645 -0.8839765 -0.03083455 0.4921934 -0.8833438 -0.03084194 0.4889555 -0.88392 -0.03091263 0.4899499 -0.8842409 -0.03081023 0.492297 -0.8848056 -0.03078985 0.4923458 -0.8832061 -0.03052818 0.4881339 -0.8833917 -0.03085136 0.4923622 -0.882902 -0.03050875 0.4881083 -0.877576 -0.03056555 0.4934862 -0.8808994 -0.03038257 0.4881657 -0.8816968 -0.03089755 0.4924845 -0.8828671 -0.03086185 0.4924401 -0.8776081 -0.02995514 0.4878691 -0.8745014 -0.02995866 0.4940832 -0.8742076 -0.02938377 0.4881269 -0.8727474 -0.02878749 0.487052 -0.8774002 -0.02930968 0.4867784 -0.8818836 -0.03029018 0.4876266 -0.8829514 -0.02998948 0.4868864 -0.8859263 -0.03062278 0.4922553 -0.8868777 -0.03004896 0.492652 -0.8855602 -0.02926188 0.4866045 -0.8772282 -0.02870213 0.4861094 -0.8719673 -0.03027147 0.4941526 -0.8716173 -0.02958005 0.4865854 -0.8684186 -0.03182905 0.4943676 -0.8645107 -0.03238338 0.4950727 -0.8784 -0.02808946 0.4852131 -0.8640979 -0.03178137 0.4885196 -0.8692718 -0.03006863 0.4860957 -0.06551069 -0.04766899 0.5319611 -0.0762813 0.007741868 0.5836235 -0.1077788 0.004131197 0.5601479 -0.06166547 0.02063328 0.617137 -0.008511185 -0.03167158 0.5666416 -0.007089972 -0.04030025 0.5527604 -0.01037925 -0.0287618 0.5854188 -0.007027149 -0.02963727 0.5933598 -0.8423805 0.01575762 0.5431208 -0.8412258 -0.003564655 0.5404129 -0.8356789 -0.004245877 0.5396289 -0.8328256 0.005813896 0.5428671 -0.8394415 0.002388179 0.542827 -0.8496966 0.07897913 0.5264382 -0.8547055 0.06523358 0.5295628 -0.843358 0.07402861 0.531324 -0.8448204 0.0777561 0.5271333 -0.8388772 0.07271808 0.533836 -0.8380073 0.07645589 0.528662 -0.8551044 0.03946691 0.5391613 -0.8425026 0.04129499 0.5430793 -0.8553782 0.05490309 0.5381988 -0.8364242 0.0377044 0.543958 -0.8428584 0.06603139 0.5333548 -0.8445972 0.06390142 0.5329515 -0.8367885 0.06140881 0.5362877 -0.8426806 0.05064576 0.541854 -0.8442283 0.05377072 0.5405244 -0.8366956 0.05335777 0.5402602 -0.8443505 0.03894096 0.542687 -0.8432642 0.02409398 0.5460627 -0.8361706 0.0280627 0.5452768 -0.844986 0.0270248 0.5460225 -0.9431395 0.01435309 0.5252653 -0.8896173 0.01539438 0.5235018 -0.8828943 0.01520687 0.5247634 -0.8758319 0.01588308 0.524406 -0.908196 0.0147171 0.5233553 -0.9218066 0.01546847 0.5237819 -0.9242574 0.01471447 0.526133 -0.9359979 0.01450747 0.5245998 -0.9281815 0.01498687 0.5247353 -0.9015264 0.0172162 0.5363849 -0.9022672 0.0251969 0.5395115 -0.9302489 0.01416879 0.5286477 -0.9241904 0.0142883 0.5291039 -0.9173434 0.01423168 0.5289084 -0.8754746 0.01501518 0.5276278 -0.8821757 0.0144822 0.5276442 -0.888442 0.01467341 0.5278149 -0.8647933 -0.01214414 0.5233621 -0.865726 -0.008812487 0.5193681 -0.8634645 -0.007806658 0.5349882 -0.8618566 0.004153788 0.5353857 -0.8622883 -2.78688e-4 0.5373159 -0.8561024 -0.006032288 0.5362097 -0.8538403 7.90912e-4 0.5392979 -0.8530123 0.00456506 0.5392119 -0.8564558 -0.00902915 0.5339215 -0.8634619 -0.01066339 0.5322902 -0.8640119 -0.01247948 0.5285674 -0.01029127 -0.06016445 0.5321666 -0.02129089 -0.04983788 0.5499107 -0.06682848 -0.007153093 0.5772817 -0.0196709 -0.03632676 0.5657755 -0.0279771 -0.03612536 0.5663611 -0.03547406 -0.02121275 0.5908288 -0.02471637 -0.02716416 0.5870404 -0.058721 0.007536888 0.6086506 -0.8239434 -0.02259206 0.4832896 -0.8279778 -0.01701664 0.4844178 -0.8145902 -0.02001893 0.4855904 -0.8333306 -0.01157498 0.4882771 -0.8397363 -0.007926225 0.4959726 -0.819387 -0.01551204 0.4839608 -0.8265644 -0.00875765 0.4855752 -0.7870739 -0.006629645 0.522408 -0.7890022 -7.67787e-4 0.5308104 -0.8037044 -0.005943238 0.5309797 -0.7958423 -0.01121085 0.5202468 -0.7985181 -0.01502656 0.4862797 -0.790305 -0.01044374 0.4873681 -0.7861102 -0.01164603 0.5141118 -0.793925 -0.01653128 0.5120659 -0.7949838 -0.01846176 0.4934644 -0.7866077 -0.01373213 0.4955292 -0.01346927 -0.05012714 0.545445 -0.01213538 -0.05571335 0.5380488 -0.03696775 -0.06434857 0.5159288 -0.02168506 -0.06509667 0.5136869 -0.7851576 -0.01366066 0.5044358 -0.7941581 -0.01887333 0.5015056 -0.03471755 0.07577097 0.6390755 -0.0233615 0.07864731 0.6398689 -0.0616405 0.08794468 0.5885176 -0.0484367 0.08285212 0.6145381 -0.03427195 0.08670389 0.6125168 -0.04650586 0.09325468 0.5849532 -0.03634399 -0.05586999 0.5302567 -0.03698736 -0.05995708 0.523939 -0.02156895 -0.06084847 0.5344179 -0.022134 -0.05734378 0.5394912 -0.0428422 -0.01457267 0.5936145 -0.05921697 -0.04334706 0.5538181 -0.03741687 -0.0500679 0.5513204 -0.05155199 -0.005103588 0.5988871 -0.05205321 -0.02176827 0.5700893 -0.03783279 -0.03378748 0.5652045 -0.07088041 0.06222438 0.6145996 -0.1142474 0.0288496 0.5736753 -0.1121253 0.04484719 0.581692 -0.05868911 0.04453468 0.627074 -0.05197978 0.06183856 0.6329364 -0.07621258 0.04818838 0.6101753 -0.07819253 0.03721767 0.604304 -0.8673983 0.05910432 0.5303527 -0.8683845 0.05924391 0.5255826 -0.8687865 0.05710011 0.5203611 -0.8634874 0.02935028 0.5181828 -0.8629273 0.01434201 0.5176789 -0.8684375 0.01426106 0.5268759 -0.8689433 0.01502209 0.5229659 -0.8628414 0.0088768 0.5281497 -0.8632863 0.008851706 0.5220983 -0.8637815 0.01185631 0.5272204 -0.8637861 0.01258176 0.5217047 -0.8658143 0.0145291 0.5331512 -0.8701376 0.02545309 0.5425142 -0.868184 0.01722937 0.5374066 -0.8566977 0.01422017 0.5374425 -0.8565001 0.02736449 0.5436003 -0.8586748 0.01677608 0.5391967 -0.8570789 0.0232563 0.5444158 -0.866084 0.03474402 0.5315263 -0.8656899 0.033118 0.5235145 -0.8645358 0.0361365 0.5300029 -0.8651838 0.0364505 0.5234996 -0.9251173 0.03247767 0.526485 -0.9251509 0.03229361 0.5314501 -0.9278411 0.03209286 0.5245464 -0.9317122 0.03259468 0.530565 -0.9209827 0.03257811 0.5251027 -0.9195343 0.03235948 0.5321491 -0.889095 0.0346136 0.5245972 -0.8892865 0.03402978 0.5327984 -0.8831981 0.0344814 0.5267012 -0.883125 0.03449296 0.5332311 -0.9375522 0.03151142 0.5239759 -0.9445551 0.03025138 0.5240399 -0.8934233 0.03441828 0.5258864 -0.8703858 0.03332358 0.5256296 -0.876801 0.03362017 0.5264663 -0.8973338 0.03412717 0.5238388 -0.9095033 0.03382462 0.5239951 -0.9525827 0.02260977 0.5356844 -0.952116 0.01783287 0.5341647 -0.9531773 0.02374517 0.5350002 -0.9525275 0.01736551 0.5332614 -0.9521968 0.01673346 0.5327149 -0.9530884 0.02473288 0.5346156 -0.951627 0.02341538 0.5359349 -0.9509048 0.01736348 0.5341975 -0.9086852 0.01401031 0.5280246 -0.9097078 0.03329741 0.5319358 -0.9409446 0.02540999 0.5347834 -0.9408704 0.01762998 0.5337199 -0.9493349 0.02486836 0.5352834 -0.9458203 0.02548646 0.5346609 -0.9450558 0.01748269 0.5334225 -0.9491224 0.0173186 0.533907 -0.9516574 0.01615029 0.5320836 -0.9530718 0.02534627 0.53415 -0.945126 0.0160036 0.5326088 -0.9455152 0.02672368 0.5340398 -0.9387284 0.01682531 0.5346369 -0.9097703 0.02950757 0.518997 -0.908833 0.01697719 0.5208547 -0.8878036 0.01444268 0.5329132 -0.8882155 0.01698338 0.53824 -0.8939142 0.01709067 0.5383608 -0.8749281 0.01533579 0.5325779 -0.86725 0.02962219 0.539907 -0.8693516 0.03463339 0.5334729 -0.8769459 0.03462749 0.5332704 -0.876999 0.02999562 0.5406411 -0.8939288 0.03400129 0.5318046 -0.9018855 0.03319358 0.5316218 -0.9024499 0.02999919 0.5366596 -0.8947215 0.0299254 0.5387654 -0.9005032 0.01466602 0.5327914 -0.8995016 0.01412367 0.527948 -0.8935716 0.01470208 0.5279955 -0.8942174 0.01414167 0.5331245 -0.9385505 0.032085 0.5292907 -0.9453836 0.03122198 0.5282858 -0.9457231 0.0298919 0.5325735 -0.9519889 0.02817928 0.5285176 -0.9523698 0.0279262 0.5313254 -0.9367784 0.01371097 0.5277875 -0.9375697 0.01413118 0.5309776 -0.9525254 0.01699 0.5273364 -0.9448412 0.01401931 0.527346 -0.9451597 0.01408177 0.5294514 -0.9524514 0.01622897 0.5295929 -0.9504736 0.01684206 0.525179 -0.9427474 0.01604539 0.5227305 -0.9432989 0.02833199 0.5221039 -0.9506074 0.02804946 0.5262131 -0.9252382 0.01697939 0.5224722 -0.9354616 0.0159682 0.5228138 -0.9244827 0.02967602 0.5226321 -0.9374265 0.02912622 0.5215252 -0.8940232 0.01689279 0.5198323 -0.8835403 0.01769101 0.5216503 -0.8844714 0.02918231 0.5198296 -0.8939892 0.02922189 0.5209714 -0.8690767 0.01749968 0.5202978 -0.8759301 0.01831078 0.5217126 -0.8697171 0.02823799 0.5207076 -0.8764865 0.02849072 0.5206215 -0.933313 0.03038328 0.5344941 -0.9342949 0.0265699 0.5368767 -0.9309698 0.014485 0.5316027 -0.9239721 0.01460987 0.5320273 -0.9324153 0.01600861 0.5343974 -0.9167113 0.01478898 0.5321515 -0.9086564 0.01462888 0.531844 -0.909179 0.01656538 0.5351774 -0.924386 0.01606118 0.5348032 -0.9170886 0.01607596 0.5345469 -0.909689 0.02521997 0.5386964 -0.9094458 0.02993017 0.5360602 -0.9263852 0.02568989 0.537736 -0.9189943 0.02596229 0.5379527 -0.9194555 0.0298987 0.5360665 -0.9262188 0.02945989 0.5359786 -0.9391676 0.03053951 0.533002 -0.9390984 0.02741199 0.5354793 -0.8952954 0.0247479 0.5408858 -0.8895663 0.0297873 0.5396323 -0.8891147 0.02533221 0.5414654 -0.8827301 0.0302695 0.5400586 -0.8769806 0.02551889 0.5422987 -0.8824062 0.02533227 0.5419765 -0.8753715 0.01735359 0.5374587 -0.8814504 0.0148707 0.532853 -0.8818686 0.01730781 0.5379633 -0.8111056 -0.02306926 0.491126 -0.8208459 -0.02619045 0.4873159 -0.8292055 -0.02943837 0.4999194 -0.8175486 -0.02665674 0.5032857 -0.8326364 -0.02454107 0.5067275 -0.8307373 -0.02811324 0.5040103 -0.8201637 -0.02495187 0.5075395 -0.823686 -0.02293837 0.5101253 -0.8363453 -0.003640234 0.4960202 -0.8325359 -0.01072806 0.5079509 -0.817909 -0.02726703 0.4930494 -0.8288105 -0.02950495 0.4898406 -0.8508541 0.03480732 0.510627 -0.8504658 0.01416116 0.5105062 -0.8499722 0.02813822 0.5114684 -0.8521 0.006657302 0.5098014 -0.8382955 -3.44282e-4 0.5028011 -0.8344378 -0.006697833 0.5133908 -0.843003 -0.00741887 0.516752 -0.8440918 -0.002933859 0.511277 -0.7887053 0.0112577 0.4848424 -0.7833764 0.002283811 0.4868324 -0.8016411 0.003238797 0.4803082 -0.7956831 -0.004909753 0.479671 -0.8109587 -0.002268731 0.4802157 -0.8043472 -0.009662747 0.4807966 0.03987526 -0.1457059 -0.8199277 0.04045319 -0.1543956 -0.8219075 0.0413109 -0.1619265 -0.8245422 0.04243987 -0.1678609 -0.8285198 0.04251581 -0.1689516 -0.8291871 0.04255437 -0.172531 -0.8291225 0.04289507 -0.1761522 -0.8293333 0.04369926 -0.1808754 -0.8295086 0.04327028 -0.1860233 -0.8305189 0.0434255 -0.1873696 -0.8310706 0.04330438 -0.1886611 -0.8334765 0.04343676 -0.1902191 -0.835613 0.04407638 -0.1892096 -0.8457192 0.04169839 -0.1341935 -0.854509 0.04193896 -0.1401304 -0.8532881 0.04209905 -0.1473411 -0.8537925 0.04214388 -0.1540173 -0.855507 0.04291737 -0.1646882 -0.8567535 0.043338 -0.1729901 -0.8552066 0.04308646 -0.1800185 -0.8537269 0.0394423 -0.1346936 -0.8180202 0.04374098 -0.1910984 -0.839865 0.06036341 -0.1278842 -0.8192896 0.07722836 -0.1261985 -0.8215674 0.07861918 -0.1339029 -0.826528 0.08006799 -0.1443872 -0.8263812 0.08020037 -0.1509169 -0.8259001 0.08098381 -0.1581423 -0.830123 0.08143669 -0.1626762 -0.8337945 0.08158552 -0.1675503 -0.8389858 0.07576578 -0.1286913 -0.8543109 0.07855492 -0.1408393 -0.8480395 0.07989889 -0.1481929 -0.8444188 0.08049398 -0.1531284 -0.8501997 0.0799846 -0.1581965 -0.8534204 0.08101069 -0.1651164 -0.8547134 0.0580579 -0.1315795 -0.8551024 0.06084597 -0.1354552 -0.8226241 0.08163499 -0.1702067 -0.8417894 0.08142232 -0.1712226 -0.8425776 0.08179599 -0.1689681 -0.8409619 0.08142852 -0.1717238 -0.8432406 0.08193701 -0.1682589 -0.8406015 0.0816223 -0.1719437 -0.8435254 0.08163231 -0.1721611 -0.8439143 0.08164662 -0.1723236 -0.8441649 0.08176082 -0.1679779 -0.8402247 0.08209848 -0.1726456 -0.8449735 0.08215659 -0.172771 -0.845823 0.0818457 -0.1726003 -0.8447442 0.08223968 -0.1733281 -0.8475881 0.08204859 -0.1727558 -0.849929 0.08222329 -0.1708976 -0.8521384 0.06602472 -0.1769789 -0.8534108 0.0667603 -0.1806725 -0.8500463 0.06695461 -0.1814964 -0.84718 0.0666359 -0.1798829 -0.8432112 0.06705927 -0.1806656 -0.8445449 0.06677299 -0.1802372 -0.8437999 0.06575411 -0.1753031 -0.8381077 0.06667149 -0.179697 -0.8429874 0.06658589 -0.1795114 -0.8427526 0.06653881 -0.1793314 -0.8425288 0.06617867 -0.1759678 -0.8387565 0.06648319 -0.1791608 -0.8423168 0.06626302 -0.1763372 -0.8392372 0.06629759 -0.1786411 -0.8416403 0.06626707 -0.1770983 -0.8402891 0.06548088 -0.1669723 -0.8537191 0.06437271 -0.1600747 -0.8487777 0.06333631 -0.1536323 -0.8430958 0.06195616 -0.1471512 -0.8425016 0.06131309 -0.1430878 -0.8451551 0.06577801 -0.1736669 -0.8366556 0.065333 -0.166589 -0.8303978 0.06501448 -0.1618154 -0.8265764 0.06349182 -0.1537852 -0.8237155 0.06245297 -0.1465366 -0.822399 0.08945947 -0.12158 -0.8246005 0.09241348 -0.1274859 -0.8269677 0.09336471 -0.1312155 -0.8279176 0.09363371 -0.1415276 -0.8303809 0.09362429 -0.145937 -0.8321474 0.09361332 -0.1515597 -0.8371661 0.0939964 -0.1559675 -0.8421177 0.09316718 -0.1262378 -0.850434 0.09316462 -0.1374652 -0.8481979 0.09391027 -0.1412358 -0.8530771 0.0937553 -0.1447496 -0.8550639 0.0939306 -0.1483474 -0.8560103 0.09382951 -0.1589722 -0.8463315 0.09368783 -0.1594282 -0.8478622 0.0939244 -0.1568064 -0.8433744 0.09376931 -0.1591924 -0.8485566 0.09390127 -0.1565186 -0.8430762 0.09393781 -0.1592227 -0.849013 0.09370601 -0.1592118 -0.8495518 0.0936684 -0.1591249 -0.8500732 0.09385508 -0.1562888 -0.842741 0.09365338 -0.1584092 -0.85175 0.09372591 -0.1578221 -0.8526861 0.09363192 -0.1589147 -0.8507115 0.09355407 -0.1567999 -0.8536641 0.09376072 -0.1542809 -0.855193 0.09359627 -0.1513864 -0.8561204 0.09133911 -0.120851 -0.855178 0.1097895 -0.1116681 -0.829707 0.1090293 -0.118845 -0.8291966 0.1098816 -0.1251491 -0.8335033 0.1104672 -0.1310632 -0.8362104 0.1100184 -0.1375946 -0.8396056 0.1093263 -0.142246 -0.8429709 0.1068762 -0.1170285 -0.8530052 0.1045442 -0.1066679 -0.8543243 0.1065677 -0.1231895 -0.8517069 0.1055856 -0.1297516 -0.8558578 0.1041376 -0.1330941 -0.8577262 0.1020703 -0.138803 -0.8575819 0.1009899 -0.1423579 -0.8580338 0.1014607 -0.1446084 -0.8566608 0.1021649 -0.1459262 -0.8560802 0.1056463 -0.1484669 -0.8523521 0.1030164 -0.1469593 -0.8552399 0.1040878 -0.1477677 -0.8540464 0.1085649 -0.1447612 -0.8456677 0.1064033 -0.1485564 -0.8507895 0.1066695 -0.1485427 -0.8499222 0.1072703 -0.1484762 -0.848976 0.1084153 -0.1450357 -0.8461124 0.1073167 -0.1484197 -0.8486347 0.1080765 -0.1465384 -0.8468443 0.1076123 -0.1479536 -0.8480578 0.1079584 -0.1471216 -0.8473235 0.07697898 0.05056291 -0.7751103 0.08084303 0.05461579 -0.7983962 0.08298832 0.05472469 -0.8224737 0.08242392 0.04559999 -0.8344472 0.08175772 0.03658241 -0.8374281 0.09899592 -0.08686047 -0.8562903 0.1000018 -0.07331246 -0.8533444 0.101198 -0.05778437 -0.849045 0.09736382 -0.02414602 -0.8401356 0.0879302 0.0011698 -0.8407009 0.08413159 0.01683849 -0.8408529 0.1003038 -0.1015602 -0.8576408 0.04386186 -0.1260659 -0.8138665 0.0768969 0.04620712 -0.7559069 0.04712396 -0.1286414 -0.8570379 0.04963368 -0.1211887 -0.8572087 0.05308967 -0.1088812 -0.8562543 0.05882549 -0.09098035 -0.8505227 0.06929039 -0.1243482 -0.8553038 0.07463419 -0.1226249 -0.8552334 0.05313307 -0.1265755 -0.8568816 0.05770778 -0.1263102 -0.856668 0.08553117 -0.1190618 -0.8554173 0.09055161 -0.1170062 -0.8557435 0.1012945 -0.1118189 -0.8546829 0.07955998 -0.1172116 -0.8549666 0.06340336 -0.1213995 -0.8553804 0.0945084 -0.1120288 -0.8551172 0.03986966 -0.116657 -0.8109374 0.0478357 -0.1203048 -0.8103061 0.0504297 -0.07083374 -0.7856006 0.0555036 -0.07350176 -0.7846272 0.05830711 -0.1409192 -0.8262696 0.06794828 -0.1410687 -0.8231107 0.0558024 -0.1416512 -0.8313522 0.07053202 -0.1404442 -0.8298602 0.05608952 -0.1418236 -0.8393344 0.05567598 -0.1414723 -0.8469564 0.05678546 -0.1396384 -0.8501765 0.06362301 -0.1377611 -0.8531899 0.06738626 -0.1379898 -0.8524688 0.06994777 -0.1397899 -0.844307 0.0619421 -0.141491 -0.8220086 0.05962496 -0.1381654 -0.8518837 0.0760414 -0.1400864 -0.8289699 0.08342152 -0.1387325 -0.8251583 0.08633601 -0.1375161 -0.8316218 0.07363748 -0.1400837 -0.834518 0.08128452 -0.1359189 -0.850337 0.07423686 -0.136866 -0.8501566 0.07294499 -0.1385428 -0.8473406 0.0840184 -0.136058 -0.8480743 0.07264727 -0.139856 -0.8425385 0.08569669 -0.1360638 -0.842401 0.07948362 -0.139881 -0.8268619 0.0773617 -0.1364399 -0.8513187 0.0902428 -0.1365454 -0.8300811 0.09757328 -0.1352227 -0.8301215 0.1007196 -0.1342411 -0.8352966 0.08768498 -0.1369095 -0.8349204 0.0955199 -0.1310065 -0.8452331 0.09067171 -0.1322644 -0.8467279 0.08883237 -0.1340467 -0.8447167 0.09758788 -0.1312553 -0.8436523 0.08764201 -0.1361222 -0.8407291 0.1002841 -0.1324642 -0.8399519 0.09357959 -0.135377 -0.8289908 0.09304332 -0.1311143 -0.846363 -0.05326759 -0.06363832 0.7575497 -0.04902517 -0.06908631 0.7570363 -0.04541826 -0.07275831 0.7569863 -0.0605145 -0.05074661 0.7542484 -0.05463236 -0.0609619 0.7540725 -0.05614036 -0.05845481 0.7497849 -0.0514599 -0.06553643 0.7510828 -0.05010807 -0.0672667 0.7543569 -0.04756009 -0.07033604 0.7522606 -0.04627948 -0.07156503 0.7548462 -0.05647456 -0.05866271 0.7636246 -0.0515908 -0.06726139 0.7600538 -0.05082309 -0.07037574 0.7628415 -0.04794096 -0.07122462 0.7592434 -0.04696321 -0.07340073 0.7613882 -0.04483997 -0.07412552 0.7587628 -0.0442245 -0.0748198 0.7603517 -0.04455208 -0.07329809 0.7531124 -0.02007818 -0.06907021 0.7541713 -0.02291959 -0.07111901 0.7587337 -0.01964098 -0.06961941 0.7554522 -0.02038019 -0.07018744 0.7568571 -0.01934307 -0.07551831 0.7562395 -0.01889526 -0.07489353 0.7558848 -0.02010416 -0.07454204 0.7559204 -0.02020156 -0.07471442 0.7567343 -0.0194835 -0.07466733 0.7558345 -0.01993727 -0.07501763 0.7564319 -0.03529167 -0.07056713 0.7597216 -0.03683078 -0.07565975 0.7594623 -0.03699296 -0.07784414 0.7593895 -0.03823506 -0.07710361 0.7612102 -0.03883409 -0.07621341 0.76226 -0.0407266 -0.07797133 0.7635602 -0.04263019 -0.07912641 0.7655376 -0.04452908 -0.07791084 0.7681366 -0.04704511 -0.07624644 0.7718378 -0.04123079 -0.08053582 0.7730605 -0.03926098 -0.0812174 0.7694739 -0.0355131 -0.07784384 0.7640136 -0.03222316 -0.07185113 0.7604329 -0.03412616 -0.0760861 0.7602244 -0.03420847 -0.07824301 0.7604663 -0.03465175 -0.07824492 0.7627365 -0.0365839 -0.0799939 0.7648266 -0.03777486 -0.08157092 0.767155 -0.01509606 -0.08232033 0.7449625 -0.01292049 -0.0835368 0.7460998 -0.01597857 -0.08125025 0.7460031 -0.01470875 -0.0803532 0.747983 -0.02031236 -0.0775789 0.7546985 -0.01987606 -0.07824862 0.753743 -0.02046608 -0.07436144 0.7550337 -0.0187295 -0.07802802 0.7523302 -0.01961159 -0.0803532 0.7463076 -0.01879757 -0.0813691 0.7441531 -0.01799499 -0.08311283 0.742477 -0.05524599 -0.0643779 0.72041 -0.04654741 -0.07695192 0.7291885 -0.04425805 -0.07774943 0.7361744 -0.02345919 -0.07678073 0.7546705 -0.01825547 -0.07777774 0.7544184 -0.01900637 -0.07688593 0.7549219 -0.01919609 -0.07454222 0.7553528 -0.01680129 -0.07670444 0.7554658 -0.01630556 -0.07710784 0.7555746 -0.01710557 -0.0773164 0.7547511 -0.0177533 -0.07624542 0.7550793 -0.01749646 -0.0764302 0.7555915 -0.01863068 -0.0754199 0.7554972 -0.02013677 -0.07611292 0.757179 -0.01979416 -0.07609343 0.7570227 -0.01976507 -0.07814532 0.757663 -0.01762115 -0.07737112 0.7569081 -0.01772636 -0.07652562 0.7566406 -0.01852989 -0.0762276 0.7564322 -0.01673406 -0.0767849 0.7559602 -0.01763707 -0.07646602 0.7560792 -0.01649796 -0.07699149 0.756401 -0.03796678 -0.08184862 0.7326355 -0.03765058 -0.08122342 0.7376079 -0.03636008 -0.08115404 0.7417952 -0.03431099 -0.08031481 0.7449824 -0.03182721 -0.07942283 0.7491568 -0.03049886 -0.08079701 0.7517511 -0.0300818 -0.08075392 0.7532157 -0.02694076 -0.0668891 0.7512679 -0.02379626 -0.08179229 0.7419587 -0.03076636 -0.08235132 0.7397885 -0.0157954 -0.07686072 0.7563904 -0.01396346 -0.07811492 0.7572804 -0.01587349 -0.07725322 0.7545906 -0.01372027 -0.07798331 0.7542252 -0.05745226 -0.0573107 0.7442942 -0.06178331 -0.04830479 0.7481523 -0.06205511 -0.04780948 0.7409025 -0.0612052 -0.0499373 0.7329345 -0.05858951 -0.05782198 0.7380033 -0.05789226 -0.0619505 0.7323081 -0.02294439 -0.08318972 0.7396054 -0.029971 -0.08332651 0.7365872 -0.05361557 -0.06945919 0.7292614 -0.05414968 -0.06404983 0.767165 -0.05863779 -0.05427521 0.7593132 -0.04193681 -0.07546883 0.7571783 -0.04222017 -0.0760675 0.7585988 -0.04248166 -0.07535129 0.7598495 -0.04895937 -0.07383519 0.7659776 -0.05191338 -0.07072073 0.7703184 -0.03468638 -0.08374512 0.773707 -0.03348755 -0.08335614 0.7698276 -0.04516178 -0.07612031 0.7633813 -0.04282957 -0.07663613 0.7617792 -0.03923577 -0.07707059 0.7580611 -0.03780061 -0.06835561 0.7584608 -0.03841418 -0.07625395 0.757822 -0.04120099 -0.07579964 0.7604805 -0.0402646 -0.07696944 0.759062 -0.02753978 -0.0720942 0.7604216 -0.03075397 -0.07641464 0.7609511 -0.03051489 -0.0782836 0.761102 -0.03094875 -0.07855665 0.7632122 -0.03149378 -0.07903701 0.7646764 -0.03181046 -0.08276444 0.7646485 -0.03256797 -0.083108 0.7673529 -0.02064615 -0.0874257 0.7724062 -0.02763867 -0.0861442 0.7733488 -0.02008819 -0.08492535 0.7683103 -0.02682757 -0.08440071 0.7694624 -0.0167362 -0.07713741 0.7574318 -0.01592147 -0.07755571 0.758699 -0.01898396 -0.07808125 0.7581767 -0.01795935 -0.07719099 0.7596295 -0.01991379 -0.08314353 0.765689 -0.02557361 -0.08348101 0.7669717 -0.02552765 -0.08274585 0.7644993 -0.02194416 -0.07847452 0.759746 -0.02509391 -0.0790655 0.7605388 -0.02398478 -0.07646113 0.7602797 -0.02221107 -0.07529091 0.7590458 -0.02215939 -0.075984 0.7590845 -0.02497148 -0.07693779 0.7603972 -0.02519726 -0.08013844 0.762686 -0.02156567 -0.07856953 0.7606391 -0.01705598 -0.07872003 0.7608209 -0.0205655 -0.08126944 0.7632166 -0.02544045 -0.07968175 0.7644436 -0.0209977 -0.07843822 0.7621285 -0.01466858 -0.07903224 0.7595802 -0.0453971 -0.07288509 0.7509317 -0.05280071 -0.06474363 0.7470537 -0.04865467 -0.06982421 0.7492983 -0.04556357 -0.07333582 0.7486524 -0.04917496 -0.07055914 0.7462634 -0.05373346 -0.06551492 0.7426814 -0.0531187 -0.06822168 0.7387361 -0.04808551 -0.072694 0.7436255 -0.04404151 -0.07510292 0.7467006 -0.04289406 -0.07476711 0.7534362 -0.04278045 -0.07461029 0.7553351 -0.04162007 -0.07581561 0.7547181 -0.03900927 -0.06644874 0.7573865 -0.04082697 -0.0757091 0.7567584 -0.03881555 -0.06437569 0.7555409 -0.03935146 -0.0652126 0.7564344 -0.0408886 -0.07540184 0.755991 -0.04043608 -0.0762704 0.7551835 -0.03720968 -0.0635159 0.7545548 -0.0394836 -0.07744312 0.7544866 -0.04060637 -0.0769928 0.753931 -0.04262995 -0.07508993 0.7523808 -0.04183 -0.07585769 0.7510951 -0.03977608 -0.07855933 0.7531454 -0.03546136 -0.06365191 0.753635 -0.03875809 -0.07842952 0.7540959 -0.03360497 -0.06451934 0.7527727 -0.03652209 -0.07974791 0.7530463 -0.03782665 -0.07963913 0.7521643 -0.04006057 -0.0771377 0.7499749 -0.03029179 -0.08061492 0.7453579 -0.03105938 -0.08165502 0.7425991 -0.0498616 -0.07286781 0.7365248 -0.04563295 -0.07561492 0.7419018 -0.0413677 -0.07873851 0.741358 -0.04172587 -0.07704281 0.7455106 -0.03828167 -0.07891094 0.7451019 -0.02852469 -0.07967913 0.7496957 -0.02816671 -0.08071613 0.7522561 -0.02792251 -0.08067303 0.7534357 -0.02453476 -0.06749612 0.75155 -0.03154236 -0.06549692 0.7520376 -0.02927809 -0.06631129 0.7514837 -0.034689 -0.08032673 0.7528798 -0.03263086 -0.0804789 0.7529828 -0.03542959 -0.08046811 0.7517784 -0.0375244 -0.07812339 0.7493849 -0.03484129 -0.07888042 0.7489098 -0.033261 -0.08070671 0.7517008 -0.02447569 -0.08098721 0.7445887 -0.01345986 -0.07805633 0.7557909 -0.01218426 -0.080392 0.7511017 -0.01120615 -0.08022612 0.7539018 -0.01185607 -0.08023685 0.7582652 -0.01109439 -0.08048892 0.7562173 -0.01444208 -0.07792389 0.7522235 -0.02059388 -0.07926499 0.74871 -0.02482748 -0.08002179 0.7473671 -0.0154795 -0.07704842 0.7555067 -0.0168057 -0.07760781 0.7535365 -0.02486425 -0.07915163 0.7505638 -0.02171885 -0.07860171 0.751289 -0.02512717 -0.07987833 0.7529258 -0.02241867 -0.07903975 0.7532781 -0.02190649 -0.06853032 0.7526777 -0.02493888 -0.08005374 0.7544973 -0.02338206 -0.07957249 0.7550772 -0.05977308 -0.05487412 0.7251477 -0.007997274 -0.08598291 0.7539627 -0.009276747 -0.08304589 0.7538393 -0.0083763 -0.0843544 0.7600744 -0.01003247 -0.08218771 0.7591889 -0.009311974 -0.08299732 0.7567249 -0.008081972 -0.08531063 0.757276 -0.01455366 -0.08808434 0.77151 -0.0126127 -0.08126193 0.76103 -0.01017665 -0.08406275 0.7628953 -0.01365327 -0.08359789 0.7650979 -0.0156514 -0.0806654 0.7624577 -0.01024305 -0.08292651 0.7503977 -0.008423388 -0.08685952 0.7500289 -0.03633326 -0.07519119 0.7582512 -0.04268157 -0.06930673 0.7629536 -0.04059541 -0.07226711 0.7620898 -0.03775906 -0.07439601 0.7609146 -0.03596347 -0.07519119 0.7601772 -0.03488039 -0.07519119 0.7618181 -0.03624659 -0.07439631 0.7631774 -0.03841769 -0.07226711 0.7653489 -0.04001438 -0.06930673 0.7669456 -0.0360223 -0.06930673 0.769613 -0.03515809 -0.07226711 0.7675262 -0.03398329 -0.07439643 0.7646901 -0.03324675 -0.07519119 0.762918 -0.03131347 -0.07519119 0.7633058 -0.03131347 -0.07439643 0.7652214 -0.03131347 -0.07226711 0.7682912 -0.03131347 -0.06930673 0.7705494 -0.02660459 -0.06930673 0.769613 -0.0274688 -0.07226711 0.7675262 -0.02864366 -0.07439643 0.7646901 -0.0293802 -0.07519119 0.762918 -0.02774637 -0.07519119 0.7618181 -0.02638047 -0.07439631 0.7631774 -0.0242092 -0.07226711 0.7653489 -0.02261257 -0.06930673 0.7669456 -0.0199452 -0.06930673 0.7629536 -0.02203136 -0.07226711 0.7620898 -0.02486789 -0.07439613 0.7609146 -0.02666348 -0.07519119 0.7601772 -0.02629345 -0.07519119 0.7582512 -0.02433687 -0.07439601 0.7582446 -0.02126657 -0.07226699 0.7582446 -0.01900869 -0.06930673 0.7582446 -0.0199452 -0.06930673 0.7535358 -0.02203136 -0.07226699 0.7544 -0.02486777 -0.07439583 0.7555748 -0.0266878 -0.07519119 0.7563354 -0.02778106 -0.07519119 0.7547196 -0.02638006 -0.07439571 0.7533116 -0.0242092 -0.07226699 0.7511405 -0.02261257 -0.06930673 0.7495438 -0.02660459 -0.06930673 0.7468769 -0.0274688 -0.07226669 0.7489627 -0.0286436 -0.07439559 0.7517991 -0.02940469 -0.07519119 0.7536435 -0.03131347 -0.07519119 0.753266 -0.03131347 -0.07439559 0.7512677 -0.03131347 -0.07226669 0.7481979 -0.03131347 -0.06930673 0.7459402 -0.0360223 -0.06930673 0.7468769 -0.03515809 -0.07226669 0.7489627 -0.03398346 -0.07439559 0.7517991 -0.03322225 -0.07519119 0.7536435 -0.034846 -0.07519119 0.7547196 -0.03624677 -0.07439571 0.7533116 -0.03841769 -0.07226699 0.7511405 -0.04001438 -0.06930673 0.7495438 -0.04268157 -0.06930673 0.7535358 -0.04059541 -0.07226699 0.7544 -0.03775906 -0.07439601 0.7555748 -0.03593927 -0.07519119 0.7563354 -0.0382902 -0.07439601 0.7582446 -0.04136025 -0.07226699 0.7582446 -0.04361808 -0.06930673 0.7582446 -0.03600835 -0.07532304 0.7582494 -0.0356605 -0.07532304 0.7600496 -0.034648 -0.07532304 0.7615838 -0.03312039 -0.07532304 0.7626102 -0.03131347 -0.07532304 0.7629733 -0.02950668 -0.07532304 0.7626102 -0.02797919 -0.07532304 0.7615838 -0.02696639 -0.07532304 0.7600496 -0.02661865 -0.07532304 0.7582494 -0.02698689 -0.07532304 0.7564576 -0.02800828 -0.07532304 0.7549442 -0.0295273 -0.07532304 0.7539375 -0.03131347 -0.07532304 0.7535839 -0.03309947 -0.07532304 0.7539375 -0.03461879 -0.07532304 0.7549442 -0.03564 -0.07532304 0.7564576 -0.03522849 -0.07577961 0.7582504 -0.03493148 -0.07577961 0.7597483 -0.03409129 -0.07577961 0.7610275 -0.03281617 -0.07577961 0.7618776 -0.03131347 -0.07577961 0.7621838 -0.02981096 -0.07577961 0.7618776 -0.02853548 -0.07577961 0.7610275 -0.02769535 -0.07577961 0.7597483 -0.0273984 -0.07577961 0.7582504 -0.02770876 -0.07577961 0.7567578 -0.02855455 -0.07577961 0.7554914 -0.02982407 -0.07577961 0.7546557 -0.03131347 -0.07577961 0.7543544 -0.03280258 -0.07577961 0.7546557 -0.03407227 -0.07577961 0.7554914 -0.03491818 -0.07577961 0.7567578 -0.03408116 -0.07621109 0.7582569 -0.03382736 -0.07621109 0.7592982 -0.03327196 -0.07621109 0.7602152 -0.0323556 -0.07621109 0.7607726 -0.03131347 -0.07621109 0.7610272 -0.03027158 -0.07621109 0.7607726 -0.02935487 -0.07621109 0.7602152 -0.02879935 -0.07621109 0.7592982 -0.02854579 -0.07621109 0.7582569 -0.02880167 -0.07621109 0.7572167 -0.02935808 -0.07621109 0.7563013 -0.03027379 -0.07621109 0.7557473 -0.03131347 -0.07621109 0.7554928 -0.03235316 -0.07621109 0.7557473 -0.0332688 -0.07621109 0.7563013 -0.03382515 -0.07621109 0.7572167 -0.03299719 -0.07639694 0.75902 -0.0331754 -0.076424 0.7582617 -0.03269928 -0.07639861 0.759646 -0.03205186 -0.07640051 0.7599368 -0.03131568 -0.07643032 0.7600816 -0.03058677 -0.07640862 0.7599025 -0.02997207 -0.07640755 0.7596077 -0.0296964 -0.0764122 0.7589856 -0.02953809 -0.07643711 0.7582623 -0.02969187 -0.07641673 0.7575423 -0.02997237 -0.07640862 0.7569169 -0.03058236 -0.07641351 0.7566252 -0.03131705 -0.07643175 0.7564439 -0.03205388 -0.07640671 0.7565871 -0.03269898 -0.0763998 0.7568783 -0.03299909 -0.07640272 0.7575035 -0.03135317 -0.07665812 0.7582631 -0.09304332 -0.1311143 -0.846363 -0.09357959 -0.135377 -0.8289908 -0.1002841 -0.1324642 -0.8399519 -0.08764201 -0.1361222 -0.8407291 -0.09758788 -0.1312553 -0.8436523 -0.08883237 -0.1340467 -0.8447167 -0.09067171 -0.1322644 -0.8467279 -0.0955199 -0.1310065 -0.8452331 -0.08768498 -0.1369095 -0.8349204 -0.1007196 -0.1342411 -0.8352966 -0.09757328 -0.1352227 -0.8301215 -0.0902428 -0.1365454 -0.8300811 -0.0773617 -0.1364399 -0.8513187 -0.07948362 -0.139881 -0.8268619 -0.08569669 -0.1360638 -0.842401 -0.07264727 -0.139856 -0.8425385 -0.0840184 -0.136058 -0.8480743 -0.07294499 -0.1385428 -0.8473406 -0.07423686 -0.136866 -0.8501566 -0.08128452 -0.1359189 -0.850337 -0.07363748 -0.1400837 -0.834518 -0.08633601 -0.1375161 -0.8316218 -0.08342152 -0.1387325 -0.8251583 -0.0760414 -0.1400864 -0.8289699 -0.05962496 -0.1381654 -0.8518837 -0.0619421 -0.141491 -0.8220086 -0.06994777 -0.1397899 -0.844307 -0.06738626 -0.1379898 -0.8524688 -0.06362301 -0.1377611 -0.8531899 -0.05678546 -0.1396384 -0.8501765 -0.05567598 -0.1414723 -0.8469564 -0.05608952 -0.1418236 -0.8393344 -0.07053202 -0.1404442 -0.8298602 -0.0558024 -0.1416512 -0.8313522 -0.06794828 -0.1410687 -0.8231107 -0.05830711 -0.1409192 -0.8262696 -0.0555036 -0.07350176 -0.7846272 -0.0504297 -0.07083374 -0.7856006 -0.0478357 -0.1203048 -0.8103061 -0.03986966 -0.116657 -0.8109374 -0.0945084 -0.1120288 -0.8551172 -0.06340336 -0.1213995 -0.8553804 -0.07955998 -0.1172116 -0.8549666 -0.1012945 -0.1118189 -0.8546829 -0.09055161 -0.1170062 -0.8557435 -0.08553117 -0.1190618 -0.8554173 -0.05770778 -0.1263102 -0.856668 -0.05313307 -0.1265755 -0.8568816 -0.07463419 -0.1226249 -0.8552334 -0.06929039 -0.1243482 -0.8553038 -0.05882549 -0.09098035 -0.8505227 -0.05308967 -0.1088812 -0.8562543 -0.04963368 -0.1211887 -0.8572087 -0.04712396 -0.1286414 -0.8570379 -0.0768969 0.04620712 -0.7559069 -0.04386186 -0.1260659 -0.8138665 -0.1003038 -0.1015602 -0.8576408 -0.08413159 0.01683849 -0.8408529 -0.0879302 0.0011698 -0.8407009 -0.09736382 -0.02414602 -0.8401356 -0.101198 -0.05778437 -0.849045 -0.1000018 -0.07331246 -0.8533444 -0.09899592 -0.08686047 -0.8562903 -0.08175772 0.03658241 -0.8374281 -0.08242392 0.04559999 -0.8344472 -0.08298832 0.05472469 -0.8224737 -0.08084303 0.05461579 -0.7983962 -0.07697898 0.05056291 -0.7751103 -0.1079584 -0.1471216 -0.8473235 -0.1076123 -0.1479536 -0.8480578 -0.1080765 -0.1465384 -0.8468443 -0.1073167 -0.1484197 -0.8486347 -0.1084153 -0.1450357 -0.8461124 -0.1072703 -0.1484762 -0.848976 -0.1066695 -0.1485427 -0.8499222 -0.1064033 -0.1485564 -0.8507895 -0.1085649 -0.1447612 -0.8456677 -0.1040878 -0.1477677 -0.8540464 -0.1030164 -0.1469593 -0.8552399 -0.1056463 -0.1484669 -0.8523521 -0.1021649 -0.1459262 -0.8560802 -0.1014607 -0.1446084 -0.8566608 -0.1009899 -0.1423579 -0.8580338 -0.1020703 -0.138803 -0.8575819 -0.1041376 -0.1330941 -0.8577262 -0.1055856 -0.1297516 -0.8558578 -0.1065677 -0.1231895 -0.8517069 -0.1045442 -0.1066679 -0.8543243 -0.1068762 -0.1170285 -0.8530052 -0.1093263 -0.142246 -0.8429709 -0.1100184 -0.1375946 -0.8396056 -0.1104672 -0.1310632 -0.8362104 -0.1098816 -0.1251491 -0.8335033 -0.1090293 -0.118845 -0.8291966 -0.1097895 -0.1116681 -0.829707 -0.09133911 -0.120851 -0.855178 -0.09359627 -0.1513864 -0.8561204 -0.09376072 -0.1542809 -0.855193 -0.09355407 -0.1567999 -0.8536641 -0.09363192 -0.1589147 -0.8507115 -0.09372591 -0.1578221 -0.8526861 -0.09365338 -0.1584092 -0.85175 -0.09385508 -0.1562888 -0.842741 -0.0936684 -0.1591249 -0.8500732 -0.09370601 -0.1592118 -0.8495518 -0.09393781 -0.1592227 -0.849013 -0.09390127 -0.1565186 -0.8430762 -0.09376931 -0.1591924 -0.8485566 -0.0939244 -0.1568064 -0.8433744 -0.09368783 -0.1594282 -0.8478622 -0.09382951 -0.1589722 -0.8463315 -0.0939306 -0.1483474 -0.8560103 -0.0937553 -0.1447496 -0.8550639 -0.09391027 -0.1412358 -0.8530771 -0.09316462 -0.1374652 -0.8481979 -0.09316718 -0.1262378 -0.850434 -0.0939964 -0.1559675 -0.8421177 -0.09361332 -0.1515597 -0.8371661 -0.09362429 -0.145937 -0.8321474 -0.09363371 -0.1415276 -0.8303809 -0.09336471 -0.1312155 -0.8279176 -0.09241348 -0.1274859 -0.8269677 -0.08945947 -0.12158 -0.8246005 -0.06245297 -0.1465366 -0.822399 -0.06349182 -0.1537852 -0.8237155 -0.06501448 -0.1618154 -0.8265764 -0.065333 -0.166589 -0.8303978 -0.06577801 -0.1736669 -0.8366556 -0.06131309 -0.1430878 -0.8451551 -0.06195616 -0.1471512 -0.8425016 -0.06333631 -0.1536323 -0.8430958 -0.06437271 -0.1600747 -0.8487777 -0.06548088 -0.1669723 -0.8537191 -0.06626707 -0.1770983 -0.8402891 -0.06629759 -0.1786411 -0.8416403 -0.06626302 -0.1763372 -0.8392372 -0.06648319 -0.1791608 -0.8423168 -0.06617867 -0.1759678 -0.8387565 -0.06653881 -0.1793314 -0.8425288 -0.06658589 -0.1795114 -0.8427526 -0.06667149 -0.179697 -0.8429874 -0.06575411 -0.1753031 -0.8381077 -0.06677299 -0.1802372 -0.8437999 -0.06705927 -0.1806656 -0.8445449 -0.0666359 -0.1798829 -0.8432112 -0.06695461 -0.1814964 -0.84718 -0.0667603 -0.1806725 -0.8500463 -0.06602472 -0.1769789 -0.8534108 -0.08222329 -0.1708976 -0.8521384 -0.08204859 -0.1727558 -0.849929 -0.08223968 -0.1733281 -0.8475881 -0.0818457 -0.1726003 -0.8447442 -0.08215659 -0.172771 -0.845823 -0.08209848 -0.1726456 -0.8449735 -0.08176082 -0.1679779 -0.8402247 -0.08164662 -0.1723236 -0.8441649 -0.08163231 -0.1721611 -0.8439143 -0.0816223 -0.1719437 -0.8435254 -0.08193701 -0.1682589 -0.8406015 -0.08142852 -0.1717238 -0.8432406 -0.08179599 -0.1689681 -0.8409619 -0.08142232 -0.1712226 -0.8425776 -0.08163499 -0.1702067 -0.8417894 -0.06084597 -0.1354552 -0.8226241 -0.0580579 -0.1315795 -0.8551024 -0.08101069 -0.1651164 -0.8547134 -0.0799846 -0.1581965 -0.8534204 -0.08049398 -0.1531284 -0.8501997 -0.07989889 -0.1481929 -0.8444188 -0.07855492 -0.1408393 -0.8480395 -0.07576578 -0.1286913 -0.8543109 -0.08158552 -0.1675503 -0.8389858 -0.08143669 -0.1626762 -0.8337945 -0.08098381 -0.1581423 -0.830123 -0.08020037 -0.1509169 -0.8259001 -0.08006799 -0.1443872 -0.8263812 -0.07861918 -0.1339029 -0.826528 -0.07722836 -0.1261985 -0.8215674 -0.06036341 -0.1278842 -0.8192896 -0.04374098 -0.1910984 -0.839865 -0.0394423 -0.1346936 -0.8180202 -0.04308646 -0.1800185 -0.8537269 -0.043338 -0.1729901 -0.8552066 -0.04291737 -0.1646882 -0.8567535 -0.04214388 -0.1540173 -0.855507 -0.04209905 -0.1473411 -0.8537925 -0.04193896 -0.1401304 -0.8532881 -0.04169839 -0.1341935 -0.854509 -0.04407638 -0.1892096 -0.8457192 -0.04343676 -0.1902191 -0.835613 -0.04330438 -0.1886611 -0.8334765 -0.0434255 -0.1873696 -0.8310706 -0.04327028 -0.1860233 -0.8305189 -0.04369926 -0.1808754 -0.8295086 -0.04289507 -0.1761522 -0.8293333 -0.04255437 -0.172531 -0.8291225 -0.04251581 -0.1689516 -0.8291871 -0.04243987 -0.1678609 -0.8285198 -0.0413109 -0.1619265 -0.8245422 -0.04045319 -0.1543956 -0.8219075 -0.03987526 -0.1457059 -0.8199277 -0.0849083 -0.104619 -0.8558591 -0.07268857 0.0206955 -0.8424126 -0.07506299 0.003761291 -0.8427321 -0.08651018 -0.02589523 -0.8428103 -0.0899654 -0.05673342 -0.8491398 -0.08951908 -0.07511508 -0.8528474 -0.1102412 -0.08385246 -0.8537883 -0.086488 -0.09013539 -0.8543137 -0.09223687 0.01240742 -0.8382441 -0.10944 -0.09736937 -0.8547031 -0.06600809 -0.1066308 -0.8535563 -0.07407319 -0.09340995 -0.8502894 -0.06229287 0.03645223 -0.840555 -0.05757081 0.02562212 -0.8424167 -0.05919551 0.006542921 -0.8429709 -0.07911211 -0.07924759 -0.84926 -0.08003431 -0.05304437 -0.8457007 -0.07267868 -0.02356386 -0.8416143 -0.0714327 0.03927952 -0.8393408 -0.0584414 0.04694652 -0.8377161 -0.0629552 -0.07543718 -0.8435597 -0.06437921 -0.05221682 -0.8396763 -0.05509907 -0.01975852 -0.8374209 -0.04861158 0.01229792 -0.8410584 -0.05105775 0.03268909 -0.8392951 -0.09404683 0.02404654 -0.8353915 -0.08776551 0.03235632 -0.8363328 -0.03580427 -0.107243 -0.8559949 -0.07135587 0.0511285 -0.8354884 -0.07030141 0.06173121 -0.82233 -0.06985837 0.06258773 -0.8015086 -0.06680691 0.0554682 -0.7779103 -0.06803411 0.04860919 -0.7578151 -0.095209 0.03004324 -0.8303536 -0.09447282 0.03528684 -0.8200854 -0.0432235 0.04099524 -0.8312137 -0.04452615 0.0493384 -0.8097259 -0.09202831 0.03576511 -0.8016806 -0.05452859 0.03389757 -0.7552353 -0.0516954 0.04258018 -0.7816518 -0.09017211 0.03308629 -0.77387 -0.08677262 0.03074008 -0.7560992 -0.09649097 -0.1191691 -0.8544489 -0.08738398 -0.1231816 -0.8546619 -0.1004275 -0.1266363 -0.8393919 -0.100626 -0.1378663 -0.8414182 -0.1010304 -0.1421278 -0.8426421 -0.1012792 -0.1468487 -0.8445405 -0.08556717 -0.1484501 -0.8460054 -0.08673977 -0.1442164 -0.8420754 -0.08691787 -0.1395992 -0.8409085 -0.0872094 -0.1329761 -0.8416205 -0.1006222 -0.1515293 -0.8483516 -0.09045308 -0.1519566 -0.8557538 -0.09916192 -0.1529403 -0.8518496 -0.09788101 -0.1543164 -0.8531392 -0.08599877 -0.1536958 -0.8492058 -0.08846122 -0.157365 -0.8469886 -0.08793097 -0.1572774 -0.848423 -0.09874039 -0.1557548 -0.8475051 -0.09933078 -0.1548526 -0.8485495 -0.09724748 -0.1515418 -0.8546541 -0.09691977 -0.1533279 -0.8545189 -0.0880661 -0.154395 -0.8539203 -0.08732128 -0.1563459 -0.8507361 -0.09072619 -0.1541346 -0.8550564 -0.09944099 -0.1543064 -0.8498236 -0.09004873 -0.1560184 -0.8536761 -0.08941882 -0.1575232 -0.8516815 -0.09012961 -0.1586314 -0.8504931 -0.09030652 -0.158886 -0.8494355 -0.09729468 -0.1574492 -0.8500277 -0.097956 -0.1565604 -0.8503305 -0.09824937 -0.1554864 -0.8516252 -0.090532 -0.155741 -0.8429442 -0.09674412 -0.1561407 -0.8444037 -0.08902108 -0.1575701 -0.8464413 -0.09833717 -0.1562442 -0.8472838 -0.0902853 -0.1589122 -0.848731 -0.09688901 -0.1579154 -0.8496578 -0.09150522 -0.1592169 -0.8488313 -0.09588527 -0.1586158 -0.849476 -0.08929342 -0.1578308 -0.8463042 -0.09062379 -0.1588467 -0.8479027 -0.0915085 -0.1591381 -0.8483349 -0.09596109 -0.1585834 -0.8489626 -0.09062379 -0.1561056 -0.8433308 -0.0965839 -0.1563225 -0.8446353 -0.09761607 -0.1568757 -0.8471352 -0.09674382 -0.1579798 -0.8487253 -0.09000599 -0.1582993 -0.8460276 -0.09108912 -0.1592444 -0.8470036 -0.09199082 -0.1591095 -0.8481089 -0.09572488 -0.1586499 -0.8485625 -0.0908212 -0.1565026 -0.8435466 -0.09654301 -0.1565691 -0.8448896 -0.09716892 -0.1572571 -0.8472282 -0.09624397 -0.1583878 -0.8478661 -0.1002189 -0.1531981 -0.8453738 -0.09993582 -0.1501464 -0.8509483 -0.1000779 -0.1458206 -0.8496924 -0.09932398 -0.1417882 -0.847213 -0.09851437 -0.1372427 -0.8445675 -0.0970779 -0.1264445 -0.8451177 -0.0862953 -0.1506307 -0.8531917 -0.08592963 -0.1465741 -0.8512452 -0.08631682 -0.1430551 -0.8487325 -0.0885092 -0.1380941 -0.8442399 -0.08808541 -0.1304892 -0.8477331 -0.08983451 -0.1491957 -0.8556555 -0.09757602 -0.1486365 -0.8541431 -0.09023082 -0.1449748 -0.8547319 -0.09757548 -0.144555 -0.8532506 -0.09038072 -0.1418288 -0.8529733 -0.09738558 -0.1411753 -0.8515399 -0.0899142 -0.1378512 -0.8467011 -0.09622168 -0.1369165 -0.8465219 -0.09525418 -0.1260107 -0.8485137 -0.09008461 -0.1279559 -0.8502466 -0.08710032 -0.1545618 -0.8462398 -0.08770889 -0.1505619 -0.8412631 -0.08821588 -0.1456114 -0.837401 -0.08796972 -0.1417908 -0.8364524 -0.08810627 -0.1329605 -0.8348377 -0.1009697 -0.1488202 -0.8405691 -0.101149 -0.1449154 -0.8379294 -0.1009887 -0.1398203 -0.8364425 -0.1007867 -0.128521 -0.835027 -0.09025841 -0.1553928 -0.8426209 -0.09717708 -0.1558172 -0.8439557 -0.08935493 -0.1524718 -0.8375899 -0.0981878 -0.1506358 -0.8381713 -0.08987599 -0.1469695 -0.8330847 -0.09790098 -0.1452468 -0.8341538 -0.09788221 -0.1413598 -0.8329883 -0.09009432 -0.1415309 -0.8316537 -0.09020853 -0.132367 -0.8304721 -0.09781581 -0.1296899 -0.8295723 -0.06864237 -0.1457703 -0.8224408 -0.0588172 -0.1464032 -0.8265752 -0.05841481 -0.1533425 -0.8267328 -0.06876957 -0.1527609 -0.8242368 -0.06987482 -0.1607121 -0.827672 -0.05926859 -0.1612459 -0.8290292 -0.07047909 -0.1659257 -0.8320902 -0.05991256 -0.1665872 -0.832967 -0.07107931 -0.1737186 -0.8390152 -0.0608406 -0.173348 -0.8384224 -0.07211148 -0.1450323 -0.8273628 -0.07239949 -0.1509215 -0.8298446 -0.07112902 -0.1585968 -0.832568 -0.07197546 -0.1638889 -0.8349021 -0.05716717 -0.1459639 -0.8314403 -0.05713331 -0.151623 -0.8321525 -0.05794131 -0.1601383 -0.8332908 -0.05822187 -0.1651868 -0.8362961 -0.0586692 -0.1720479 -0.8407381 -0.05915701 -0.1440569 -0.8430151 -0.0653212 -0.1425274 -0.8463878 -0.06603151 -0.1470892 -0.8433477 -0.06003808 -0.1481492 -0.840902 -0.06676739 -0.1532667 -0.8432547 -0.06028956 -0.1542471 -0.8415836 -0.0682758 -0.1601329 -0.8485683 -0.060247 -0.1613119 -0.8466295 -0.06947171 -0.1667138 -0.8529223 -0.06078588 -0.1683214 -0.8525381 -0.058012 -0.1447965 -0.8405315 -0.05865079 -0.1489249 -0.8389754 -0.05839878 -0.1550037 -0.8395786 -0.05844128 -0.1626999 -0.8440191 -0.05755406 -0.1696945 -0.8476448 -0.0678761 -0.1418843 -0.8462727 -0.0681678 -0.1470758 -0.8426889 -0.06882321 -0.153209 -0.8420972 -0.07147437 -0.1605234 -0.8462462 -0.07336211 -0.1674864 -0.8473792 -0.07304531 -0.17176 -0.8400189 -0.06880056 -0.1784701 -0.8423309 -0.06939041 -0.176933 -0.8413507 -0.06969338 -0.1760698 -0.8404563 -0.0628696 -0.1761445 -0.8400312 -0.06820482 -0.178803 -0.8423695 -0.06501311 -0.1789857 -0.842249 -0.06410139 -0.1787313 -0.8421434 -0.06260669 -0.1771559 -0.8417596 -0.06920456 -0.1784994 -0.8427054 -0.06971561 -0.1768537 -0.8415205 -0.07003098 -0.1758017 -0.8402785 -0.0624029 -0.1758433 -0.8399209 -0.06829768 -0.1789523 -0.842602 -0.06479251 -0.179161 -0.8424974 -0.06342428 -0.1787669 -0.8425741 -0.06227636 -0.1771234 -0.8420104 -0.0685203 -0.1790826 -0.8428432 -0.0646488 -0.1793051 -0.8426947 -0.06952738 -0.1785591 -0.8430511 -0.06310099 -0.178992 -0.8430626 -0.07041561 -0.1766701 -0.841844 -0.0616008 -0.1771153 -0.842378 -0.07037949 -0.175531 -0.8402349 -0.06165456 -0.1753167 -0.8397214 -0.0711674 -0.1782203 -0.8445715 -0.07048767 -0.1784096 -0.8441248 -0.06989091 -0.1785143 -0.8434226 -0.06282448 -0.179044 -0.8433123 -0.0621705 -0.179216 -0.844097 -0.06205177 -0.179726 -0.8451436 -0.06223261 -0.180725 -0.8478087 -0.07393836 -0.1739265 -0.8439835 -0.0634219 -0.1808124 -0.849446 -0.05937576 -0.1776643 -0.8451744 -0.0588178 -0.1775793 -0.8496924 -0.0701397 -0.1800032 -0.8496605 -0.07089537 -0.1758292 -0.8525405 -0.07260137 -0.1749145 -0.8420137 -0.07087659 -0.176739 -0.8422434 -0.06023108 -0.1769646 -0.8432153 -0.0610429 -0.1772236 -0.8427332 -0.05747288 -0.170522 -0.8439879 -0.07117897 -0.1799817 -0.8474011 -0.074184 -0.1747317 -0.8484737 -0.06266778 -0.1771882 -0.8533085 -0.07374709 -0.1693159 -0.8431195 -0.0574488 -0.145359 -0.8359885 -0.05734366 -0.1504552 -0.8350698 -0.05732041 -0.1574939 -0.8370575 -0.05778181 -0.1637206 -0.8404828 -0.0725618 -0.1619231 -0.8412725 -0.0715034 -0.1551971 -0.8378938 -0.07132327 -0.1478809 -0.8389465 -0.07048141 -0.1429841 -0.8410276 -0.08703899 -0.1409577 -0.8409664 -0.0878691 -0.1477658 -0.8401625 -0.08729982 -0.1538858 -0.8405959 -0.08801591 -0.1588498 -0.8430327 -0.07288289 -0.1618189 -0.8421639 -0.07358688 -0.1570676 -0.8411379 -0.100772 -0.122683 -0.8414558 -0.09979277 -0.121416 -0.8497871 -0.08691883 -0.1308147 -0.8427498 -0.07405531 -0.1501784 -0.8387991 -0.0734986 -0.1441135 -0.8402711 -0.08850622 -0.1638424 -0.8441672 -0.07804727 -0.1705807 -0.8520721 -0.08804911 -0.1682379 -0.8479775 -0.08653247 -0.1707593 -0.8477325 -0.07378 -0.166972 -0.8441694 -0.07723921 -0.1694265 -0.8423346 -0.07618951 -0.1694284 -0.843026 -0.08592939 -0.1672489 -0.8413312 -0.08696937 -0.1670675 -0.8423283 -0.08570832 -0.1701695 -0.8508765 -0.08500111 -0.1717244 -0.8499171 -0.07627499 -0.1716212 -0.8488516 -0.07567751 -0.1704944 -0.8451525 -0.07930129 -0.1724592 -0.8502909 -0.0879302 -0.1677632 -0.8451584 -0.07813972 -0.1728523 -0.8483329 -0.07747709 -0.1723352 -0.8455623 -0.07740741 -0.1719017 -0.8447078 -0.0776171 -0.1717256 -0.844233 -0.08557438 -0.1699719 -0.8449856 -0.08597552 -0.1699871 -0.845336 -0.08590179 -0.1706165 -0.8460704 -0.07840418 -0.1682513 -0.840924 -0.08503067 -0.16768 -0.8410469 -0.07770091 -0.1697041 -0.8421438 -0.08547699 -0.1676705 -0.8413038 -0.07779461 -0.1715354 -0.8438239 -0.08536893 -0.1699967 -0.8447152 -0.07856172 -0.1718534 -0.843605 -0.08427339 -0.1710942 -0.8442983 -0.07815879 -0.1698241 -0.8419738 -0.07790297 -0.1709746 -0.8431239 -0.0786882 -0.1716113 -0.8432509 -0.08418458 -0.1709265 -0.8440147 -0.07854241 -0.1687097 -0.8411942 -0.0849108 -0.168 -0.8415132 -0.08501958 -0.1686211 -0.8427857 -0.08504909 -0.1701757 -0.8441944 -0.0787149 -0.1700538 -0.8418455 -0.07870572 -0.170886 -0.8424806 -0.07894819 -0.171465 -0.8429296 -0.08395773 -0.1708548 -0.8436867 -0.0788114 -0.1691557 -0.8412482 -0.0843442 -0.1682494 -0.8418134 -0.08466529 -0.1689851 -0.8426156 -0.08474671 -0.1702125 -0.843779 -0.1091418 -0.1472167 -0.8493666 -0.1099242 -0.1460379 -0.8494617 -0.1099297 -0.1454833 -0.8485786 -0.105585 -0.1463232 -0.8457689 -0.1082859 -0.1480811 -0.8495175 -0.105932 -0.1484461 -0.8478251 -0.1053833 -0.1476852 -0.8468482 -0.1055307 -0.1471751 -0.8463872 -0.1096499 -0.146521 -0.8498956 -0.1099485 -0.1459575 -0.8496936 -0.1102559 -0.1448196 -0.8484033 -0.1050091 -0.1461521 -0.8456141 -0.1083419 -0.1480604 -0.8499023 -0.1055866 -0.1483939 -0.8484359 -0.1050688 -0.1480543 -0.8472683 -0.1048467 -0.1470656 -0.8462795 -0.1079304 -0.1480252 -0.850254 -0.1056547 -0.1485469 -0.8489384 -0.1088692 -0.1473702 -0.8512001 -0.1043197 -0.1483412 -0.8484407 -0.110015 -0.1461277 -0.8504232 -0.1043911 -0.1468729 -0.8462414 -0.1104924 -0.1447598 -0.8486058 -0.104935 -0.1460188 -0.8452135 -0.1056884 -0.145702 -0.8566629 -0.1069925 -0.1467232 -0.8550654 -0.1077154 -0.1473402 -0.8534935 -0.1028522 -0.1482115 -0.8506813 -0.1019985 -0.147912 -0.8516011 -0.100938 -0.1471312 -0.8530273 -0.1001905 -0.145949 -0.8546268 -0.1085206 -0.1439611 -0.8565963 -0.09999901 -0.1444905 -0.8558961 -0.09976208 -0.1453008 -0.8499085 -0.09815382 -0.1436966 -0.8528229 -0.1017664 -0.1422213 -0.843448 -0.03319448 -0.09637445 -0.8141346 -0.0364229 -0.08692145 -0.8075409 -0.04000777 -0.07480418 -0.7979674 -0.03713917 -0.1025612 -0.8098939 -0.03936457 -0.09404706 -0.8050355 -0.04321938 -0.08247399 -0.7966557 -0.04565256 -0.06986647 -0.7895358 -0.04410117 -0.06490337 -0.7886509 -0.03355568 -0.1116315 -0.8153822 -0.03010517 -0.1290402 -0.8264044 -0.03105986 -0.119722 -0.8212739 -0.05554008 -0.1828729 -0.8396759 -0.05071026 -0.1892888 -0.8391073 -0.03576499 -0.1886133 -0.8402688 -0.03251665 -0.1853227 -0.8396617 -0.03057795 -0.1802426 -0.8383157 -0.02944338 -0.17457 -0.8363344 -0.02811127 -0.167606 -0.8353446 -0.0277183 -0.1605171 -0.8334485 -0.02841407 -0.1518934 -0.8314441 -0.02967959 -0.1417967 -0.8296684 -0.02568727 -0.1266663 -0.8410646 -0.0243436 -0.1178654 -0.8370869 -0.02909475 -0.1084476 -0.8210621 -0.02564889 -0.1061168 -0.8292322 -0.02642577 -0.1175693 -0.828303 -0.02664667 -0.1263936 -0.8321107 -0.03436577 -0.1319617 -0.8214943 -0.03692406 -0.1239567 -0.8162018 -0.0571019 -0.1361309 -0.825295 -0.06770598 -0.1366295 -0.82362 -0.0698328 -0.1372855 -0.846213 -0.08622187 -0.1315743 -0.8433948 -0.08709299 -0.1653194 -0.8406714 -0.03638195 -0.1798347 -0.85244 -0.0375812 -0.1724343 -0.8543366 -0.03651648 -0.163318 -0.8554398 -0.03603267 -0.1531409 -0.8548433 -0.03616875 -0.1461668 -0.8527415 -0.03629755 -0.1382349 -0.851706 -0.03756839 -0.1274679 -0.8559032 -0.03852039 -0.1173543 -0.8576423 -0.1076457 -0.07189208 -0.8511267 -0.1028279 -0.1439806 -0.8576147 -0.1034085 -0.1426131 -0.8591414 -0.1047345 -0.1390334 -0.8590385 -0.1069848 -0.1338314 -0.8579608 -0.1083812 -0.1297236 -0.8553296 -0.1090935 -0.1230542 -0.8506737 -0.1108702 -0.1033475 -0.8544293 -0.1101744 -0.11612 -0.8519084 -0.1068913 -0.05786484 -0.8468041 -0.1010521 -0.02284675 -0.8375813 -0.09547591 -1.63564e-4 -0.8379127 -0.05567598 -0.1824484 -0.8435865 -0.05252087 -0.1831982 -0.8349995 -0.05178338 -0.1840632 -0.8336336 -0.05154448 -0.1874024 -0.8447479 -0.03564906 -0.1860922 -0.8475017 -0.03199011 -0.1844496 -0.8448463 -0.04993098 -0.1881985 -0.8349865 -0.03764259 -0.1886713 -0.8356993 -0.03854948 -0.1871675 -0.8334904 -0.04885679 -0.187628 -0.8334994 -0.03356969 -0.1842986 -0.8359006 -0.03554528 -0.1835367 -0.8340718 -0.05064547 -0.1847434 -0.8326172 -0.04843187 -0.1863756 -0.8315325 -0.03674346 -0.1840098 -0.8328512 -0.03884339 -0.1858348 -0.8319484 -0.03628486 -0.1826989 -0.8329696 -0.0388025 -0.1845842 -0.83157 -0.05034047 -0.1842376 -0.8323161 -0.04841119 -0.1853613 -0.8311766 -0.1097338 -0.1453105 -0.8538377 -0.1100447 -0.1460032 -0.8520865 -0.1015713 -0.1460701 -0.8474495 -0.1026016 -0.1468465 -0.8471674 -0.02422297 -0.1161456 -0.8510469 -0.05227231 -0.1386975 -0.8509728 -0.1162086 -0.08275455 -0.849514 -0.1191005 -0.08407086 -0.8424074 -0.0617147 -0.1227655 -0.8161707 -0.1186488 -0.08815854 -0.8340768 -0.1156597 -0.09117758 -0.8295732 -0.09370923 -0.1115072 -0.8230933 -0.1013878 -0.107698 -0.8258341 -0.1088186 -0.1032801 -0.8265886 -0.07418787 -0.1208638 -0.8183153 -0.08519822 -0.1166686 -0.8207898 -0.09139078 -0.05859917 -0.7908414 -0.08664608 -0.06470274 -0.7889341 -0.09050393 -0.07729005 -0.8032831 -0.0952506 -0.06796729 -0.8033266 -0.0932269 -0.08720129 -0.8118152 -0.09924417 -0.07935047 -0.8130283 -0.06827372 -0.07527494 -0.7842526 -0.07504737 -0.0728302 -0.7856361 -0.0776335 -0.08694344 -0.7983661 -0.0707001 -0.08907848 -0.7964129 -0.07925939 -0.09914636 -0.8070518 -0.07100862 -0.1016741 -0.8047152 -0.05456137 -0.08946418 -0.7951826 -0.04622471 -0.08708357 -0.7963295 -0.04323047 -0.09753274 -0.8026501 -0.0531339 -0.1006904 -0.8008196 -0.06171536 -0.1143378 -0.8106578 -0.1118125 -0.08115118 -0.8247293 -0.1090028 -0.09013998 -0.8237029 -0.09001487 -0.1038334 -0.8177902 -0.09751558 -0.09854716 -0.8200099 -0.1041245 -0.09417414 -0.8217065 -0.08147162 -0.1101521 -0.8147932 -0.0707584 -0.1138166 -0.8121475 -0.03708076 -0.08947587 -0.8449771 -0.02820026 -0.08870977 -0.8333678 -0.02833777 -0.09434795 -0.8182986 -0.1188122 -0.07721263 -0.8311742 -0.1138395 -0.07146143 -0.8471581 -0.1187934 -0.07329046 -0.8391768 -0.04088836 -0.1071813 -0.8074425 -0.05035591 -0.1118181 -0.8061193 -0.06978422 -0.1331482 -0.8280403 -0.07191038 -0.1326215 -0.8294725 -0.1000341 -0.1411033 -0.8468359 -0.1013413 -0.1368967 -0.8450291 -0.1016543 -0.1319417 -0.8436675 -0.1013589 -0.1262096 -0.8425803 -0.1012031 -0.1225236 -0.8423169 -0.07092267 -0.1368662 -0.8464773 -0.05340236 -0.1410706 -0.8433271 -0.0539456 -0.1395811 -0.8289773 -0.03038758 -0.1783453 -0.8482193 -0.03350341 -0.1793947 -0.8509142 -0.05105155 -0.1795462 -0.8519341 -0.0567798 -0.1766194 -0.8445309 -0.05649107 -0.1761875 -0.8393884 -0.05330401 -0.1504033 -0.8415458 -0.05530476 -0.1574523 -0.8447838 -0.05679076 -0.1646203 -0.8460938 -0.05703067 -0.1720315 -0.8458098 -0.05163937 -0.1450155 -0.8418889 -0.0509333 -0.1413302 -0.8439499 -0.05631548 -0.1712958 -0.8382886 -0.05262988 -0.137976 -0.8233126 -0.05067569 -0.1390298 -0.8217443 -0.05166208 -0.173069 -0.8535616 -0.05187797 -0.1661028 -0.853968 -0.0505675 -0.1568256 -0.8527817 -0.04882669 -0.1496391 -0.8502941 -0.04721266 -0.1424005 -0.8514031 -0.04629248 -0.1347056 -0.8523923 -0.06833082 -0.1349571 -0.8491591 -0.02944165 -0.1725293 -0.8483874 -0.0272234 -0.1652325 -0.8484623 -0.0261656 -0.1560718 -0.8471157 -0.02757447 -0.1456429 -0.8450013 -0.02797508 -0.1371243 -0.8429489 -0.02965021 -0.1805067 -0.8436359 -0.02725666 -0.1729625 -0.8433329 -0.05319887 -0.1774537 -0.8349552 -0.05261689 -0.172318 -0.8334513 -0.03259688 -0.1798112 -0.8345882 -0.03247117 -0.1751696 -0.833017 -0.03365808 -0.1801474 -0.8331207 -0.0377224 -0.1806337 -0.831457 -0.05189418 -0.1786272 -0.833217 -0.04927098 -0.1800087 -0.8311369 -0.04836291 -0.1750974 -0.8305378 -0.04651176 -0.1721271 -0.8296717 -0.0381506 -0.1724683 -0.8304879 -0.03639531 -0.1758029 -0.830537 -0.05126368 -0.1734366 -0.8326772 -0.03299087 -0.1755353 -0.8330262 -0.04973769 -0.1701334 -0.831651 -0.03597825 -0.17049 -0.8316361 -0.03260588 -0.1720158 -0.8529306 -0.03122949 -0.1642879 -0.8529312 -0.0305671 -0.1528713 -0.8519527 -0.03136098 -0.1454591 -0.8495309 -0.031452 -0.1371369 -0.8481175 -0.1043504 -0.1448144 -0.8575589 -0.05331826 -0.1329177 -0.8544636 -0.06392419 -0.1313893 -0.8540826 -0.0870428 -0.1281962 -0.8497486 -0.08857709 -0.1640728 -0.8481621 -0.08782029 -0.1590785 -0.8474663 -0.08700758 -0.1535012 -0.8455723 -0.08525007 -0.1476718 -0.8424347 -0.08539491 -0.1297816 -0.8499495 -0.08561521 -0.1408039 -0.8464298 -0.07375019 -0.167587 -0.8500172 -0.0734921 -0.1604459 -0.847434 -0.0740754 -0.1560031 -0.8450857 -0.07547551 -0.1501399 -0.8417255 -0.0742827 -0.1432043 -0.8445866 -0.07067471 -0.1352874 -0.8497816 -0.07605862 -0.1672669 -0.8533344 -0.08494371 -0.1640427 -0.8532594 -0.0763114 -0.1594094 -0.8508839 -0.08477652 -0.1582146 -0.8519301 -0.07581818 -0.1545104 -0.8487234 -0.08351659 -0.1533648 -0.8491804 -0.07684999 -0.1497943 -0.8436367 -0.0816546 -0.1475974 -0.8443907 -0.08211058 -0.1409799 -0.8477531 -0.07594472 -0.1421568 -0.846678 -0.08215022 -0.1256088 -0.8546619 -0.07073068 -0.131215 -0.8531642 -0.1058348 -0.1428285 -0.8584964 -0.09864568 -0.1423616 -0.8554861 -0.09758627 -0.1396661 -0.8508422 -0.09835571 -0.1357973 -0.8486751 -0.09980279 -0.1312562 -0.8472638 -0.1013421 -0.1253259 -0.8458851 -0.1013967 -0.1217527 -0.848416 -0.09854507 -0.1383751 -0.8555821 -0.09951871 -0.1332471 -0.8543644 -0.1015165 -0.1294239 -0.8523728 -0.103002 -0.1247451 -0.8497345 -0.1024487 -0.1188577 -0.8523138 -0.1165053 -0.09351289 -0.8523542 -0.1079064 -0.1399903 -0.8585396 -0.1101397 -0.1347206 -0.8562712 -0.1114663 -0.1297231 -0.8539339 -0.1129599 -0.1229439 -0.85017 -0.1143991 -0.1161407 -0.8497356 -0.1163505 -0.1017184 -0.8499026 -0.1202421 -0.09477275 -0.8442013 -0.1115483 -0.1408396 -0.8558405 -0.1135592 -0.1359341 -0.852516 -0.114139 -0.1305913 -0.8498845 -0.1148307 -0.1232123 -0.8469016 -0.1163613 -0.1141861 -0.8461186 -0.118993 -0.1027559 -0.845503 -0.1196098 -0.09858459 -0.8365408 -0.02804237 -0.1238923 -0.8503296 -0.02592778 -0.1663991 -0.8419156 -0.02540487 -0.1577274 -0.8403975 -0.02605009 -0.1497248 -0.8387303 -0.02715778 -0.1394364 -0.8358756 -0.05592709 -0.1645137 -0.835353 -0.05535387 -0.1591336 -0.8333005 -0.05336898 -0.1527548 -0.8294669 -0.05279988 -0.1465404 -0.826628 -0.05132377 -0.1417545 -0.8267723 -0.06985169 -0.1362465 -0.8319203 -0.07503509 -0.167214 -0.8415098 -0.07392388 -0.1629931 -0.8384324 -0.07370132 -0.1580895 -0.8359354 -0.0737431 -0.1497899 -0.8324194 -0.07341217 -0.1443666 -0.8341967 -0.07250541 -0.1354844 -0.8341318 -0.0875287 -0.1600331 -0.8382492 -0.08734029 -0.155765 -0.8356811 -0.08720701 -0.1486653 -0.8326325 -0.08736509 -0.1423926 -0.8299888 -0.086124 -0.131584 -0.8334705 -0.0865277 -0.1277165 -0.8315784 -0.08799511 -0.1299378 -0.834899 -0.08809942 -0.1268408 -0.8323206 -0.1135276 -0.1414077 -0.8501288 -0.1143695 -0.1361202 -0.8473575 -0.1151258 -0.1311104 -0.8439941 -0.1157526 -0.1244597 -0.8416101 -0.1148708 -0.1160381 -0.8391225 -0.1185057 -0.1060571 -0.8377183 -0.1023232 -0.1374223 -0.8408019 -0.1028206 -0.132314 -0.8390738 -0.1029087 -0.1263235 -0.8378968 -0.1018027 -0.121802 -0.834196 -0.09944319 -0.1225439 -0.8362717 -0.1022375 -0.1192422 -0.8313782 -0.09960019 -0.1210194 -0.8301404 -0.1127731 -0.1407606 -0.8450821 -0.1047104 -0.1421535 -0.8412213 -0.1134116 -0.1371748 -0.8433434 -0.1051991 -0.1378615 -0.8388235 -0.1140408 -0.1311491 -0.8399406 -0.1055125 -0.1317493 -0.8363802 -0.114023 -0.1254103 -0.8368398 -0.1055435 -0.125311 -0.8340926 -0.111902 -0.1172384 -0.8326619 -0.1048691 -0.1202138 -0.8308983 -0.1139024 -0.1103444 -0.8322484 -0.1035678 -0.1148543 -0.8292705 -0.09738028 -0.1253086 -0.8286823 -0.08965587 -0.1290113 -0.8300862 -0.07775008 -0.1675974 -0.8397477 -0.08489447 -0.1665289 -0.8391419 -0.07703077 -0.1630022 -0.8344721 -0.08527982 -0.1616887 -0.8352971 -0.07678002 -0.1583356 -0.831799 -0.08446723 -0.1571073 -0.831919 -0.08414387 -0.1499652 -0.8278751 -0.07584577 -0.1503038 -0.8275405 -0.07611811 -0.1443019 -0.8281608 -0.08394479 -0.1439576 -0.8263844 -0.08318829 -0.1333587 -0.8262012 -0.07527852 -0.1350169 -0.8280179 -0.05069828 -0.1694383 -0.8313176 -0.03501409 -0.1702884 -0.8309012 -0.04931378 -0.161504 -0.8259142 -0.03292286 -0.1618615 -0.8280246 -0.03254085 -0.1534969 -0.8264539 -0.04893445 -0.1537994 -0.8236092 -0.03320497 -0.1438283 -0.8247808 -0.04760217 -0.1460383 -0.8204078 -0.04690855 -0.1395052 -0.8198443 -0.09009462 0.0400213 -0.831988 -0.08964651 0.04598861 -0.8217146 -0.05498701 0.05805271 -0.8288384 -0.05290758 0.061055 -0.804542 -0.08906191 0.0438562 -0.8024543 -0.05839228 0.0503242 -0.7788781 -0.04306375 0.01739782 -0.7556486 -0.06117737 0.04296618 -0.7546436 -0.1148015 -0.1001659 -0.8303781 -0.09725028 -0.1182134 -0.8267892 -0.08790528 -0.1267909 -0.827697 -0.08414077 -0.1285356 -0.8258206 -0.07351219 -0.131316 -0.8248761 -0.04869896 -0.1345532 -0.818463 -0.06851828 -0.1322473 -0.8226312 -0.05431437 -0.1336494 -0.8214932 -0.023889 -0.1049411 -0.8460115 -0.06156909 -0.1023403 -0.8027209 -0.0871033 -0.09263455 -0.8097717 -0.03421366 -0.08015674 -0.8107651 -0.03456878 -0.07163584 -0.818268 -0.0446909 0.01626008 -0.7792847 -0.03833389 -0.006639063 -0.7845916 -0.1031979 -0.07078719 -0.814364 -0.0990687 -0.05750858 -0.8030962 -0.03765195 -0.06288307 -0.7980268 -0.06083416 -0.09074187 -0.7949546 -0.08548122 -0.08203727 -0.8015321 -0.09382712 -0.04213726 -0.783989 -0.04400509 -0.05456125 -0.7827669 -0.08168339 -0.06235319 -0.7803424 -0.06103408 -0.06625849 -0.7770582 -0.09912812 -0.01627004 -0.7603406 -0.1021416 0.005824804 -0.756893 -0.09005397 -0.02833884 -0.7669923 -0.07882708 -0.04266333 -0.7640985 -0.09839379 -0.02517223 -0.7839039 -0.1046695 -0.03154706 -0.804811 -0.05447179 -0.04329788 -0.7612832 -0.06330519 -0.05127954 -0.7653723 -0.03865438 -0.005449473 -0.7597308 -0.04507768 -0.02327096 -0.7596023 -0.1021009 0.00133419 -0.7837347 -0.101468 -2.63689e-5 -0.8048544 -0.09641259 0.02272993 -0.8030104 -0.0965889 0.02315592 -0.7779918 -0.08510911 0.03942203 -0.7745341 -0.08276349 0.03742009 -0.7562871 -0.03521579 -0.03140646 -0.7965626 -0.0962907 0.02402859 -0.7575584 -0.1079063 -0.06294643 -0.8184915 -0.1079612 -0.02947807 -0.8165681 -0.1059876 -0.02423614 -0.8329032 -0.1078301 -0.02438765 -0.8246774 -0.03658729 -0.05166417 -0.805988 -0.1143595 -0.06341344 -0.8265678 -0.04228919 -0.05236893 -0.8296173 -0.0412541 -0.07055574 -0.8326905 -0.1131641 -0.05780553 -0.8357922 -0.1110461 -0.05746036 -0.841664 -0.0396943 -0.01008695 -0.8075677 -0.04044878 0.0194028 -0.8114667 -0.04345577 -0.01379811 -0.8306225 -0.04007458 0.01847702 -0.8336278 -0.0984255 0.01893162 -0.8167445 -0.09954738 0.01692891 -0.8272345 -0.09732031 0.01118904 -0.8352909 -0.1001876 -5.56464e-4 -0.8342217 -0.1029695 -6.91266e-4 -0.8247041 -0.1031081 -0.004136562 -0.8166044 0.006583988 -0.1005017 0.7168371 0.007413268 -0.0995028 0.7169626 0.006111145 -0.1010998 0.7166976 0.004248976 -0.1020819 0.7149305 0.009369969 -0.1010742 0.7161131 0.008108079 -0.1002308 0.7171334 0.008584499 -0.1030836 0.7156192 0.006455898 -0.1063479 0.7157663 0.007789969 -0.1046053 0.7156028 0.005445778 -0.09870272 0.7156465 0.007019698 -0.09888172 0.7164214 0.004985153 -0.0988394 0.714652 0.00510478 -0.1002199 0.7121296 0.002401947 -0.1006714 0.7122435 0.007856667 -0.101257 0.7299741 0.009380698 -0.0990045 0.7287084 0.01115375 -0.09818321 0.7267662 0.01354485 -0.1002503 0.7231958 0.01009935 -0.09985929 0.7162817 0.01415485 -0.1010713 0.7196351 0.01328766 -0.1005505 0.7163599 0.01146286 -0.0997954 0.7156296 0.006022572 -0.1053771 0.7318673 0 -0.1077472 0.7321711 0 -0.1065564 0.7124397 0 -0.1025796 0.711174 0.003341794 -0.1057541 0.713213 0.005707442 -0.1081687 0.7162041 -0.005707442 -0.1081687 0.7162041 -0.003341794 -0.1057541 0.713213 -0.006022572 -0.1053771 0.7318673 -0.01146286 -0.0997954 0.7156296 -0.01328766 -0.1005505 0.7163599 -0.01415485 -0.1010713 0.7196351 -0.01009935 -0.09985929 0.7162817 -0.01354485 -0.1002503 0.7231958 -0.01115375 -0.09818321 0.7267662 -0.009380698 -0.0990045 0.7287084 -0.007856667 -0.101257 0.7299741 -0.002401947 -0.1006714 0.7122435 -0.00510478 -0.1002199 0.7121296 -0.004985153 -0.0988394 0.714652 -0.007019698 -0.09888172 0.7164214 -0.005445778 -0.09870272 0.7156465 -0.007789969 -0.1046053 0.7156028 -0.006455898 -0.1063479 0.7157663 -0.008584499 -0.1030836 0.7156192 -0.008108079 -0.1002308 0.7171334 -0.009369969 -0.1010742 0.7161131 -0.004248976 -0.1020819 0.7149305 -0.006111145 -0.1010998 0.7166976 -0.007413268 -0.0995028 0.7169626 -0.006583988 -0.1005017 0.7168371 -0.01138216 -0.1041725 0.7189996 -0.008633792 -0.1072293 0.7190008 -0.01001715 -0.1052563 0.7225444 -0.005830347 -0.107819 0.7282517 -0.01228177 -0.09883761 0.7153067 -0.01447057 -0.09910559 0.7161314 -0.01616656 -0.09726804 0.7192645 -0.009968161 -0.09635019 0.7123542 -0.009724974 -0.09583574 0.7111601 -0.006740272 -0.09729963 0.7112855 -0.005474984 -0.0973761 0.7134951 -0.007188856 -0.09719151 0.7130659 -0.017569 -0.09110939 0.7180669 -0.01579785 -0.09512013 0.7155768 -0.01541125 -0.0931639 0.71349 -0.01172477 -0.09593874 0.7130308 -0.01235389 -0.0972042 0.7140315 -0.0157454 -0.0923016 0.7194871 -0.005862057 -0.09787821 0.714816 -0.006671071 -0.09796601 0.7160124 -0.01071608 -0.09745001 0.7142467 -0.01070815 -0.09878343 0.7158849 -0.006864845 -0.09664893 0.715248 -0.00844115 -0.09673655 0.7141521 -0.009670674 -0.09706181 0.7133336 -0.01560395 -0.0922228 0.7236056 -0.01466035 -0.09580814 0.7235338 -0.01046788 -0.1007897 0.7157128 -0.008751988 -0.1000202 0.717132 -0.01109218 -0.10191 0.7159134 -0.01188057 -0.1032236 0.7227179 -0.01098078 -0.1013033 0.7254297 -0.01260769 -0.09521633 0.7270049 -0.01459246 -0.09336262 0.7266374 -0.01798826 -0.0911262 0.7230121 -0.01609867 -0.0924434 0.7258738 -0.003335475 -0.109971 0.7153156 -0.005511462 -0.1123219 0.7192125 -0.005833745 -0.1110507 0.7235665 -0.007178068 -0.1091025 0.718805 -0.008429884 -0.1080539 0.7226319 -0.004894077 -0.09877634 0.7110939 -0.002420246 -0.09930682 0.7107899 -0.009383678 -0.1028901 0.726322 -0.008164048 -0.1046033 0.7270769 0.03233838 -0.0765711 0.7582613 0.03036791 -0.076586 0.7582652 0.03131949 -0.07658433 0.757269 0.03051358 -0.07655793 0.7574779 0.03212279 -0.07654482 0.7574048 0.03131258 -0.07657569 0.7592578 0.0321092 -0.07651102 0.7591139 0.03054088 -0.0765317 0.7590651 -0.03054088 -0.0765317 0.7590651 -0.0321092 -0.07651102 0.7591139 -0.03131258 -0.07657569 0.7592578 -0.03212279 -0.07654482 0.7574048 -0.03051358 -0.07655793 0.7574779 -0.03131949 -0.07658433 0.757269 -0.03036791 -0.076586 0.7582652 -0.03233838 -0.0765711 0.7582613 -0.01672708 -0.07917284 0.7503496 0.15272 0.07460987 0.5844101 -0.15276 0.0747599 0.5843201 0.18363 0.03334987 0.5963401 -0.18369 0.03326988 0.5963201 0.17872 -0.004010081 0.5863202 -0.17899 -0.00314778 0.5866501 0.16099 -0.01888006 0.5633001 -0.1604 -0.01793044 0.5638402 0.13093 -0.02987009 0.5414701 -0.13078 -0.02985006 0.5415401 0.09680998 -0.05527007 0.5411001 -0.09670001 -0.05521005 0.5412302 0.02794998 -0.07295006 0.5236001 -0.02783 -0.07304006 0.5234702 1e-4 -0.08491009 0.5012301 0.05966001 -0.0572201 0.5367901 -0.05966997 -0.05729007 0.5366702 0.08112001 0.1181899 0.5717401 -0.08143001 0.1179399 0.5720301 -1.8e-4 0.1216699 0.5545901 0.05799996 0.1045599 0.5902901 -0.05791026 0.104216 0.5891764 5.2e-4 0.1101099 0.5819801 0.10543 0.06328988 0.6017702 -0.105411 0.06327766 0.5998452 0.02215999 -0.05843007 0.5494301 -0.02208995 -0.05844008 0.5494101 0.04350996 -0.05044007 0.5572201 -0.04346001 -0.05052006 0.5571601 0.07392001 -0.04013007 0.5626401 -0.07411998 -0.04014009 0.5625201 3e-5 -0.06228005 0.5286101 0.09136366 -0.01680237 0.5718725 -0.09104084 -0.0167337 0.5714626 0.11031 -0.001330077 0.5818501 -0.11034 -0.00270009 0.5810701 0.1203657 0.01062744 0.5897497 -0.11997 0.01003986 0.5906602 0.11932 0.03372991 0.5971601 -0.11928 0.0343399 0.5973801 0.08242237 0.07157397 0.6194552 -0.0664606 0.07581812 0.6210434 0.09190231 0.0346167 0.6231028 -0.07473528 0.03824067 0.6209589 0.09418803 0.01422637 0.621683 -0.07612282 0.01703703 0.619434 0.08594846 -0.002650082 0.6110101 -0.07401001 -0.002680063 0.6111201 0.0767585 -0.01149004 0.5943401 -0.06445997 -0.01160007 0.5946702 0.05105996 -0.02810007 0.5821802 -0.05116999 -0.02802008 0.5822502 0.03817999 -0.03756004 0.5743601 -0.03872001 -0.03738009 0.5742801 0.04083001 0.0951699 0.6099001 -0.04084998 0.09519988 0.6098302 0.002449989 0.09792989 0.6085201 0.05107486 0.1110999 0.6158102 -0.04385995 0.1111199 0.6156801 0.003169953 0.1133899 0.6124801 0.08489334 0.07840991 0.6244401 -0.06523001 0.07877987 0.6243901 0.05435997 -0.04640007 0.5877501 -0.05497997 -0.04610008 0.5878301 0.04034 -0.06397008 0.5806102 -0.03946995 -0.06374007 0.5807901 0.08396852 -0.02197009 0.5983501 -0.07099997 -0.02219009 0.5992102 0.08830851 -0.005760073 0.6117302 -0.07630997 -0.005770087 0.6119001 0.09453338 0.0148999 0.6235601 -0.07635998 0.0167399 0.6230701 0.09150338 0.03924989 0.6261701 -0.07275998 0.04025989 0.6255502 0.10203 0.08333992 0.6049302 -0.10194 0.08358991 0.6047401 0.12551 0.04215991 0.5999901 -0.12534 0.04288989 0.6001701 0.1268 0.009659886 0.5880901 -0.12681 0.009819865 0.5881701 0.11592 -0.01735007 0.5809102 -0.11689 -0.01990008 0.5790702 0.09961003 -0.04332005 0.5673502 -0.10012 -0.04371005 0.5671502 0.07081997 -0.0640701 0.5552301 -0.07093 -0.06402009 0.5552601 0.03771001 -0.0840401 0.5378901 -0.03689998 -0.08491009 0.5367001 0.05004 0.1243399 0.5862502 -0.04957997 0.1241899 0.5864602 0.009139955 0.1181899 0.5764701</float_array> + <technique_common> + <accessor source="#_6-mesh-positions-array" count="7845" stride="3"> + <param name="X" type="float"/> + <param name="Y" type="float"/> + <param name="Z" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6-mesh-normals"> + <float_array id="_6-mesh-normals-array" count="23535">-0.01031523 0.6723533 -0.7401349 0.04892116 0.6859951 -0.7259438 0.1229895 0.9891354 0.08017212 0.07467877 0.9954833 0.05816823 -0.1248512 0.9886776 0.08297979 -0.04498428 0.6794336 -0.7323222 0.01312291 0.667806 -0.7441939 -0.07245093 0.9955748 0.05951106 0.09466838 0.5847651 0.8056276 0.2185125 0.5955382 0.7730033 -0.0941801 0.5825983 0.8072756 -0.2186956 0.5938597 0.7742241 0.09140288 -0.1289407 0.9874264 0.2674947 -0.1048616 0.9578234 -0.09234899 -0.1336405 0.9866939 -0.267922 -0.1039155 0.9577929 0.0655232 -0.7454146 0.6633504 0.2865383 -0.7069002 0.6466262 -0.06393623 -0.7473373 0.6613361 -0.2857448 -0.7069918 0.6468703 -0.02816855 -0.9992371 -0.02642899 0.1800897 -0.9828791 -0.03872793 0.02877891 -0.9992981 -0.02319401 -0.1881771 -0.9814447 -0.03588974 -0.09018218 -0.6425672 -0.7608875 0.01434367 -0.6995148 -0.7144383 0.08853417 -0.6429334 -0.7607654 -0.01892143 -0.7002167 -0.7136753 -0.07016205 0.02243107 -0.9972534 -0.01605272 -0.06469923 -0.9977722 0.07232886 0.01821953 -0.9971923 0.0260933 -0.07010102 -0.9971923 0.3913083 -0.1350749 -0.9102756 0.2488784 -0.7282632 -0.6384472 0.6928617 -0.6109501 -0.3829463 0.737846 -0.06805628 -0.6714988 -0.6987213 -0.6049684 -0.3817865 -0.2462538 -0.7301554 -0.6373485 -0.4125797 -0.1389203 -0.900235 -0.7441939 -0.06796467 -0.664449 0.6049379 0.5223243 -0.601001 0.6296884 0.5687124 -0.5291604 -0.6102481 0.5228431 -0.5951415 -0.6309397 0.5701773 -0.5260781 0.03799551 0.5726188 0.8189337 0.184698 0.9577929 0.2202215 0.1499069 0.8304697 0.5364849 0.07477033 0.3747673 0.92407 -0.1539048 0.8362682 0.5262306 -0.180639 0.9587695 0.219245 -0.04004025 0.5729545 0.818598 -0.09009063 0.4099246 0.9076205 0.03076261 -0.1168553 0.992645 -0.06332588 -0.06088441 0.9961242 -0.03619492 -0.1159703 0.992584 0.05261391 -0.06158632 0.996704 0.02218693 -0.6741234 0.7382733 -0.1248817 -0.5304728 0.838435 -0.02352976 -0.6745201 0.737846 0.1281472 -0.5238197 0.8420972 0.05435341 -0.9889523 0.1377605 -0.1156041 -0.7983642 0.5909299 -0.04223757 -0.9885556 0.1446577 0.1420941 -0.7842037 0.6039918 0.101474 -0.7119663 0.6948149 0.2484817 -0.9601123 0.1280251 -0.09164708 -0.6772973 0.7299417 -0.2490005 -0.9595324 0.1314127 0.4569231 0.8802149 -0.1280251 0.1704764 0.9656056 0.196234 -0.4586017 0.8770104 -0.1432844 -0.1713614 0.9652089 0.1973631 0.1435896 -0.5848872 0.7982727 0.4593646 -0.8086795 0.3673818 -0.1447187 -0.5859859 0.7972655 -0.4611957 -0.8077945 0.3670461 -0.001647949 -0.764153 0.6450087 -0.1709036 -0.5311136 0.8298593 0.003967404 -0.7430036 0.6692404 0.001190185 -0.7930235 0.6091495 0.1785638 -0.5299234 0.8290048 0.00238043 -0.7621693 0.6473586 0.8794519 -0.1334269 -0.4568621 0.7318034 0.4684286 -0.4949492 -0.8761864 -0.1255531 -0.4652547 -0.7318644 0.4676656 -0.49559 0.7781609 -0.5950499 -0.2007812 -0.7736747 -0.6032899 -0.1935178 0.8432875 -0.5057222 -0.1817987 0.9397565 -0.1525925 -0.3058565 -0.8419752 -0.5069735 -0.1844233 -0.9390546 -0.150792 -0.3088778 0.8395337 0.4177679 -0.3473007 -0.8304086 0.4318369 -0.35197 0.9809259 -0.07544171 -0.1789605 0.8423719 -0.5330058 -0.07904291 0.9320048 -0.3596301 -0.04428231 0.9944761 0.07406842 -0.0740379 -0.9324625 -0.358623 -0.04333627 -0.8458815 -0.5270852 -0.08114868 -0.981109 -0.06787312 -0.1810052 -0.9948118 0.08227789 -0.05963313 0.7726982 0.5056612 -0.3836787 0.5961486 0.7051302 -0.3838313 -0.7608875 0.5175939 -0.3912473 -0.590991 0.7092196 -0.3842585 -0.004119992 -0.9647206 0.2631916 -0.08139282 -0.9150364 0.3950316 0.07672351 -0.9137547 0.3988769 0.5219275 -0.8293405 0.1993163 -0.5191504 -0.8313547 0.1981261 -0.008270502 -0.9852901 0.1705374 0.06067079 -0.9949644 0.07956171 -0.06292915 -0.9946593 0.08148437 -0.003540098 -0.9848628 0.1731925 0.1744133 -0.972869 0.1518296 -0.1749626 -0.9729301 0.1508835 -3.35704e-4 -0.9988403 0.04763936 0.1893673 -0.9806208 0.04989773 -0.1867427 -0.981109 0.05017238 0.569689 -0.8199408 -0.05566573 0.6863613 -0.7269509 0.02069151 -0.6893521 -0.7241432 0.01944029 -0.5749687 -0.8160955 -0.05807667 0.9736015 -0.1180456 -0.1952879 0.8082827 0.475753 -0.3468123 -0.7993408 0.4851222 -0.3544725 -0.9739372 -0.1080965 -0.1993163 0.8493301 -0.5114902 -0.1304056 -0.8524735 -0.505356 -0.13361 0.5971252 -0.7993408 -0.06668293 -0.5977966 -0.7987915 -0.06726276 -0.009491205 -0.5341349 0.8453322 0.1611377 -0.8148137 0.5568102 -0.1635792 -0.813593 0.5579089 0.007690608 -0.5294961 0.8482314 0.1759392 -0.9093906 0.3768731 -0.1753593 -0.9043855 0.3889584 0.2331614 -0.9722282 0.01867729 -0.2265999 -0.973632 0.02514719 0.382519 -0.9234901 0.02810752 -0.3814203 -0.924131 0.02194279 0.4550615 -0.8873257 0.07419049 -0.4544206 -0.8881497 0.0682699 0.2494583 0.8469802 -0.4694357 0.3172399 0.8534806 -0.4133732 -0.2436597 0.8471328 -0.4721824 -0.3108005 0.8550066 -0.4151433 0.38493 0.8642842 -0.3236793 -0.3786737 0.8684653 -0.3198645 0.2274239 0.8780481 -0.4210333 -0.2230598 0.8786279 -0.422132 0.3212073 0.8868984 -0.3319193 -0.3234657 0.8865322 -0.3307291 0.2009643 0.9642323 -0.1727653 -0.1985534 0.9650868 -0.170629 0.09756767 0.9872738 -0.1253395 0.1034882 0.9738457 0.2021241 -0.09894096 0.9870907 -0.1258888 -0.1034272 0.9735099 0.2038636 0.126194 0.9640797 -0.2335886 -0.1268349 0.9640492 -0.2334361 0.1458479 0.9312113 -0.3339641 -0.1451155 0.9316691 -0.3330485 0.09610277 0.9066439 -0.4107486 0.04803609 0.8729209 -0.4854274 -0.09460735 0.9074374 -0.4093753 -0.04757833 0.8732566 -0.4848781 0.09378337 0.8826258 -0.4605854 -0.09314244 0.8827479 -0.4604938 0.1436506 0.8450881 0.5149083 -0.1429182 0.847377 0.5113376 -0.01785331 0.8549456 -0.5183569 -0.01297032 0.8816797 -0.471633 0.01794487 0.8553423 -0.5176855 0.01254308 0.8815577 -0.4718772 -0.06164735 0.9455855 -0.3193762 0.05993831 0.9457076 -0.3194067 -0.1173437 0.9259011 -0.3590198 0.1211584 0.9245582 -0.3611561 -7.32444e-4 0.9743034 -0.2251656 1.22074e-4 0.9746696 -0.2235786 0.01306188 0.9947508 -0.1014435 -0.01211583 0.9946287 -0.1025422 -0.005096554 0.9841609 0.1771599 0.003723204 0.9842219 0.1768242 0.005340695 0.9935606 -0.1130405 -0.004028439 0.9810785 0.1935178 -0.001770019 0.9761651 -0.2169255 -0.002838194 0.9264504 -0.3763542 -8.85037e-4 0.9447615 -0.3277383 0.002441465 0.8239082 -0.5666982 5.18815e-4 0.8604389 -0.5095065 0.08709979 0.7212134 0.6871853 -0.08151489 0.7151097 0.6942045 -6.40889e-4 0.8593707 0.5113071 -0.07223731 0.9971923 0.01931822 0.007782161 0.9969176 0.07773059 0.07535016 0.9970092 0.01623582 0.1727042 0.9820857 -0.07501447 -0.1703543 0.9826045 -0.07382422 0.3029267 0.9380779 -0.1679738 -0.3130283 0.934019 -0.1719107 0.7654042 0.6421095 0.04235965 -0.7773675 0.6266366 0.0547502 0.1338236 -0.9813837 0.1376995 0.4086428 -0.8994415 0.1548509 -0.1340678 -0.9808954 0.1407208 -0.4079104 -0.9000519 0.1532334 0.731254 -0.668569 0.1350139 -0.7312235 -0.6689963 0.1330607 0.9411603 -0.3023164 0.1509445 -0.9399701 -0.3043916 0.1541795 6.1037e-5 -0.9950865 0.09872734 0.9799494 0.1033356 0.1703238 -0.980224 0.08856469 0.1767937 0.9303568 -0.3664052 0.01156651 0.986816 -0.008056879 -0.1615955 -0.9293497 -0.3690909 0.007690608 -0.9873959 -0.005340695 -0.1581469 0.7086703 0.6878262 -0.1569872 -0.7375103 0.6596271 -0.1445661 8.24e-4 -0.9916074 0.1291849 0.06735432 -0.9961547 0.05566573 -0.06131166 -0.9966124 0.05468916 0.7232581 -0.6869106 0.0705893 -0.7240211 -0.6862087 0.06973475 0.4106876 -0.9089328 0.07193213 -0.408063 -0.9103977 0.06814783 0.3820612 0.9163793 -0.1193274 -0.3698843 0.9158605 0.1559801 0.192175 0.9803156 -0.04480117 -0.1893673 0.9814753 -0.02847373 0.03549301 0.999176 -0.0185247 -0.02197331 0.9997254 -0.002075254 0.01214635 0.9996948 -0.02117979 0.2323679 0.7063509 -0.6685995 0.03875845 0.7823725 -0.6215705 -0.1720938 0.7095859 -0.6832484 0.4161199 0.7021088 -0.5777764 -0.4139226 0.6976531 -0.5847041 0.3291726 0.7269814 -0.6025575 -0.3269753 0.7248146 -0.6064028 0.582812 0.6610309 -0.4725791 -0.5733818 0.6651815 -0.4782556 0.1546983 -0.6975921 -0.6995758 0.3823969 -0.7234107 -0.5748161 -0.1540269 -0.7025361 -0.6947539 -0.3805658 -0.7314982 -0.5657216 0.5426191 -0.5559557 -0.6296274 -0.5238807 -0.5551622 -0.6460158 0.6915189 -0.3904233 -0.6077151 -0.6882534 -0.3922849 -0.6102176 -3.35704e-4 -0.7103183 -0.7038484 0.8017517 0.01019316 -0.5975524 -0.7916806 0.005035519 -0.610889 -0.00427258 0.8882107 0.4593951 0.174871 0.7961974 0.5791803 -0.160741 0.7886593 0.5934019 0.4125797 0.3926512 0.8219245 -0.3229774 0.3382672 0.8838466 0.1430097 -0.8187811 0.5559862 0.03231906 -0.847499 0.5297403 -0.1419416 -0.815363 0.5612659 -0.02362132 -0.8427076 0.5378277 0.238258 -0.7268899 0.6440626 -0.2378307 -0.7109287 0.6617939 0.006866633 -0.8190863 0.5735954 0.3027741 -0.7410504 0.5992615 -0.2725303 -0.7342448 0.6217536 0.2294076 -0.7970824 0.5585498 -0.1754509 -0.757561 0.6287118 0.2771386 -0.5298013 0.8015381 -0.2009949 -0.4587543 0.8655049 0.3958861 0.002533018 0.9182714 -0.2632527 -0.01388591 0.9645985 0.1405377 0.757683 0.6372875 0.8792077 0.1049836 0.4647054 -0.8097171 0.4687338 0.3530076 -0.7923521 0.07486188 0.6054262 0.9922788 -0.1220435 0.02145451 -0.9145177 -0.1003448 0.3918882 0.9163488 -0.3382366 -0.2141484 -0.9504685 -0.3106479 -0.007019221 0.7577136 -0.6359753 -0.1462447 -0.8099918 -0.5855281 -0.03195285 0.64626 -0.7346721 -0.2062746 -0.7394635 -0.6672872 -0.08874779 0.6154973 -0.781579 -0.1013519 -0.6047853 -0.7904905 -0.09640794 0.2960906 0.8800318 -0.3712272 -0.42201 0.8722496 -0.2470473 -0.001159667 0.9162877 -0.4004944 0.002502501 -0.5148473 -0.8572344 -0.06839197 -0.5435957 -0.8365429 0.01577806 -0.516892 -0.8558611 -0.4833827 -0.3425703 -0.8055666 -0.1698965 -0.1642811 -0.9716483 0.1520127 0.3768121 -0.9136937 -0.1354717 0.6722007 -0.727836 -0.1484725 0.420484 -0.8950468 0.1252785 0.6695761 -0.7320475 0.02435374 0.5133824 -0.8577837 -0.1841792 0.476455 -0.8596759 0.1417585 0.5091403 -0.8489029 -0.1810663 0.4701071 -0.8637959 0.147618 0.3762627 -0.9146397 -0.3534654 0.3555101 -0.8652303 -0.9451277 -0.1163671 -0.3051546 -0.5724052 0.2049317 -0.7939085 -0.6062807 -0.4650716 -0.6450392 -0.6664937 -0.002349913 -0.7454757 0.4534135 -0.333781 -0.8264107 0.4761498 0.05465865 -0.8776513 -0.6353343 0.3344218 -0.6960356 0.4928434 0.3004547 -0.8165532 -0.5101779 0.5617848 -0.6511734 0.4133121 0.5202185 -0.7473068 -0.3669241 0.6911832 -0.6225471 0.3374127 0.6547441 -0.6762902 -0.3612781 0.765923 -0.531785 0.3598437 0.7522507 -0.5518968 -0.3881039 0.7932066 -0.4691916 0.3760491 0.797235 -0.4721518 -0.1416364 -0.9285867 -0.3429975 0.164861 -0.8791467 -0.4470962 0.01361125 -0.9650258 -0.2617878 0.02108824 -0.190527 -0.9814447 0.1603137 -0.06271553 -0.9850459 0.001861572 -0.1837214 -0.9829707 -0.1284829 -0.0705893 -0.9891659 0.1445051 0.1963866 -0.9697867 -0.1193274 0.1850337 -0.9754326 -0.003326475 0.1246681 -0.9921873 0.1515244 0.1308023 -0.9797357 -0.1622058 0.1167943 -0.9797968 -0.07922601 -0.05771046 -0.9951781 0.09863579 -0.04806661 -0.9939574 0.04812765 0.0650044 -0.996704 -0.0374462 0.05572676 -0.9977416 0.06189149 0.1398053 -0.9882199 -0.04953151 0.1254006 -0.9908444 0.116245 -0.2525101 -0.9605701 -0.1078524 -0.2634663 -0.9585864 0.2339549 -0.3987243 -0.8867153 -0.2098453 -0.4047365 -0.8900113 0.02941983 -0.09686571 -0.9948424 0.107242 0.9887387 0.1042512 0.07779169 0.708182 -0.7017121 -0.1074861 0.9885861 0.1053804 -0.0786767 0.7095248 -0.7002472 0.07144379 0.584521 0.8082217 -0.07232886 0.5862911 0.8068484 0.02905356 -0.1439253 0.9891354 -0.03234958 -0.1372112 0.9899899 0.008026361 -0.7140721 0.700003 -0.00979644 -0.7107761 0.7033296 0.002807676 -0.9981689 0.06012141 -4.27259e-4 -0.9974975 0.07031464 -0.01062041 -0.6742149 -0.7384259 0.01089507 -0.6816614 -0.7315592 0.02014219 0.05734425 -0.9981384 -0.02108824 0.05304116 -0.998352 0.04092532 0.7868282 -0.615772 0.06466871 0.9948424 0.07809686 0.191351 0.9790643 0.06921595 0.1883297 0.7981811 -0.5721915 -0.1884518 0.9797968 0.06686604 -0.06515699 0.9952086 0.07278662 -0.04104739 0.7871639 -0.6153447 -0.1853083 0.7979675 -0.5734428 0.07943964 0.7302164 0.6785485 0.0117191 0.8010804 0.5984069 -0.01760917 0.8140507 0.5804926 -0.07770007 0.7383343 0.6698813 0.09411907 0.08728289 0.991699 0.03463846 0.08960235 0.9953612 -0.03726309 0.09677416 0.9945982 -0.09482097 0.09857475 0.9906003 0.0698263 -0.7226478 0.6876431 0.05462813 -0.7309183 0.6802576 -0.06338691 -0.7240822 0.6867581 -0.07116913 -0.7206641 0.6895962 0.03109836 -0.999115 -0.02826011 0.06631672 -0.9947203 -0.07800531 -0.06436353 -0.9952391 -0.07296973 -0.02969449 -0.999176 -0.02722251 0.04367196 -0.6833094 -0.728782 0.134495 -0.6141545 -0.7776116 -0.1378826 -0.6209601 -0.7715995 -0.04379403 -0.6864528 -0.7258217 0.05359047 0.1192052 -0.9913938 0.1281167 0.1922056 -0.9729301 -0.1294595 0.1781976 -0.9754326 -0.05432289 0.1131931 -0.9920652 -0.1684622 0.7459029 -0.6443678 -0.1487472 0.1864681 -0.9711295 0.1723991 0.7499924 -0.6385388 0.1440778 0.1746574 -0.9739983 -0.1551561 -0.6094241 -0.777459 0.1568041 -0.6298105 -0.7607349 -0.2327036 -0.9718009 -0.03765982 0.2371593 -0.9710379 -0.02804648 -0.2159184 -0.6708884 0.7094027 0.211951 -0.6854457 0.6965545 -0.1926328 0.01788383 0.9810785 0.1835078 0.05331581 0.9815363 -0.1955626 0.6928312 0.6940519 0.1981261 0.7126072 0.6729637 -0.2512283 0.9675588 -0.02554398 0.2556231 0.9665212 -0.02172917 0.8000733 0.3357647 -0.4970855 0.7484359 0.01937925 -0.6628925 0.5173193 -0.03527939 -0.8550371 0.4640339 0.6078982 -0.6442763 -0.4912564 -0.01452678 -0.8708762 -0.7260048 -1.52593e-4 -0.6876736 -0.7965942 0.3491928 -0.4934232 -0.4646748 0.6242256 -0.6279794 0.7483444 -0.4086428 -0.5224463 0.4368419 -0.5750297 -0.691702 -0.4434645 -0.5884579 -0.6760155 -0.7307962 -0.380047 -0.5669729 0.8041322 -0.590991 -0.06375312 0.43614 -0.8998383 0.003814756 -0.4362316 -0.8997467 -0.009704828 -0.8100528 -0.5857113 -0.02633744 0.6923734 -0.4200263 0.5866573 0.3848384 -0.6364635 0.6683859 -0.3722037 -0.6450087 0.6673788 -0.6684164 -0.4336375 0.6042665 0.6019166 -0.01974546 0.7982727 0.3600574 -0.05780202 0.9311197 -0.3489486 -0.04760885 0.9359111 -0.5904721 -0.03100675 0.8064211 0.6459548 0.4494766 0.6169622 0.3272194 0.6265145 0.707358 -0.3279824 0.6512039 0.6843165 -0.6386914 0.4486526 0.6250801 0.7775506 0.6147344 0.1321146 0.4217048 0.9063082 -0.02752768 -0.4144719 0.9096042 -0.02804648 -0.7665944 0.6274605 0.1363567 -0.0826441 0.7785577 -0.6220588 -0.02835166 0.7915891 -0.6103702 -0.0572527 0.077578 -0.9953307 -0.1593981 0.1403546 -0.9771721 0.05801564 0.07574689 -0.9954223 0.02783286 0.7968078 -0.6035646 0.08569598 0.7869503 -0.6110111 0.1569567 0.1445051 -0.9769585 -0.04486221 -0.7048555 -0.7079073 -0.08758813 -0.6667684 -0.7400739 0.04541152 -0.7050997 -0.7076022 0.08691668 -0.6691489 -0.7379986 0.01181066 -0.9999085 6.71407e-4 0.04605239 -0.9989318 -0.00225836 -0.01315343 -0.9998779 -0.003601133 -0.04852437 -0.9987792 -0.005249142 0.03430277 -0.7497177 0.6608478 0.03729361 -0.7615589 0.6469619 -0.03277683 -0.7487716 0.661977 -0.03216648 -0.7611317 0.6477859 0.04049801 0.06466871 0.9970702 0.04367196 0.001037597 0.9990234 -0.03723257 0.06723225 0.9970092 -0.03338724 0.0132755 0.9993286 0.04126101 0.7177648 0.6950286 0.06299018 0.6873074 0.7235938 -0.04205447 0.7193823 0.6933195 -0.06253242 0.6963104 0.7149876 0.00753802 0.9899899 0.1408429 0.03485208 0.9837031 0.1763665 -0.007873773 0.9896848 0.1428266 -0.03030484 0.9831538 0.1801813 0.08478039 0.9869686 0.1366924 -4.27259e-4 0.7863705 -0.6177251 -0.07943964 0.9856258 0.1488693 0.008575677 0.7894833 -0.6136967 0.07931756 0.6419569 0.7625965 -0.07916498 0.6584674 0.7484054 0.0439161 -0.06213563 0.9970702 -0.04220706 -0.03747671 0.9983825 0.03851431 -0.7477951 0.662801 -0.03790396 -0.7453841 0.6655172 0.08526867 -0.9961852 -0.01791435 -0.08633685 -0.9960936 -0.01736503 -0.002960264 -0.6696372 -0.7426374 0.004852414 -0.6732078 -0.7394025 -0.1154515 0.07965326 -0.9900815 0.1134068 0.07882928 -0.9903867 0.1287881 -0.11301 -0.9851985 0.1985229 0.6237678 -0.7559435 -0.2007812 0.637196 -0.7440718 -0.1279336 -0.1299478 -0.9832148 0.06830042 -0.7029023 -0.7079684 -0.06775104 -0.7313761 -0.678579 0.1893368 -0.9796137 0.06668293 -0.1845454 -0.9802851 0.07040619 0.2237312 -0.6913968 0.6869412 -0.2238227 -0.6915494 0.6867275 0.2074343 -0.1218909 0.9706107 -0.2078616 -0.1199682 0.9707633 0.1742912 0.5738396 0.8001648 -0.1736808 0.5743584 0.7999512 0.1252174 0.9860531 0.1094393 -0.1266518 0.9848628 0.1182592 0.8371533 0.5467391 0.01339757 0.1237525 0.9573351 -0.2610553 0.1532639 0.9828791 0.102176 0.8219856 0.5398114 0.1813715 -0.1494796 0.9843745 0.09295934 -0.1225318 0.9592883 -0.2543413 -0.8347423 0.5504013 0.01480144 -0.8200019 0.5431684 0.1802728 -0.7611011 0.5843074 -0.2815027 -0.6313059 0.7491379 -0.2004761 0.6911222 0.714774 -0.1066011 0.7631459 0.5850093 -0.2744529 -0.9968566 -0.06936854 -0.03756827 -0.9956969 -0.01342809 -0.0914945 0.9992676 -0.01895195 0.03302103 0.9972229 -0.06167787 -0.04156619 -0.7611317 -0.6354564 0.1297952 -0.5315714 -0.7912839 -0.3020722 0.5598621 -0.7816401 -0.2748497 0.767571 -0.6262093 0.1365398 6.71407e-4 -0.982757 0.1848811 0.3107395 -0.9496445 -0.04004025 -0.3205969 -0.946318 -0.04110842 0.008362054 -0.9815058 0.1911069 0.782281 -0.6014283 0.1621448 0.7895749 -0.6042665 0.1067537 -0.7953734 -0.5965758 0.1069673 -0.7808771 -0.6029237 0.1633045 0.9903867 -0.05029445 0.128727 0.9864193 -0.05105745 0.1559495 -0.9865108 -0.04943996 0.155858 -0.9905698 -0.04992824 0.1275674 -0.003875792 -0.845027 -0.5346843 0.107242 -0.4964446 -0.8613849 0.08832055 0.9829401 -0.1612903 -0.009063959 -0.9718009 -0.2355113 -0.02499461 0.9953612 0.09280675 0.7359539 0.5883053 0.3349711 0.9739983 0.001190185 0.2264778 -0.7337566 0.591052 0.3349711 -0.9743034 0.001495361 0.225135 0.433668 0.3400983 0.8344066 0.5652638 0.004943966 0.8248543 -0.4253975 0.3297525 0.8427686 -0.5583361 0.002075254 0.8295847 0.7972655 -0.5789361 0.1706595 -0.7963805 -0.5803705 0.1700186 0.3726921 -0.43202 0.8212226 -0.3684194 -0.423719 0.8274484 0.392468 -0.9168065 0.07348853 -0.3954283 -0.9151281 0.078341 0.2092654 0.8973968 0.3884091 -0.2177801 0.8958404 0.3873104 -0.01126128 0.9243141 0.3813898 0.06796467 0.5233924 0.8493607 -0.06479078 0.5191199 0.8522294 -0.002899229 0.5341044 0.8453933 -0.003997921 -0.999176 0.03982663 0.2327036 -0.7079073 0.6668294 0.006744563 -0.7747429 0.632191 -0.2311777 -0.7030549 0.6724753 0.9993286 0.02929776 -0.02124083 0.8255562 0.5524766 -0.1148411 0.8341014 0.5393536 -0.1153905 0.9938048 -0.03021329 0.1066927 -0.8355053 0.5375835 -0.1134373 -0.8248543 0.5532701 -0.1160619 -0.9993591 0.02783286 -0.02169865 -0.9938353 -0.03152561 0.1062349 0.7632985 -0.6283761 0.1498153 0.8566546 -0.5153966 -0.02117979 -0.7611317 -0.6302073 0.1532334 -0.857387 -0.5141453 -0.02276676 0.04580825 -0.9965819 -0.06854456 0.01181066 -0.9956054 0.09262365 -0.05319374 -0.9960936 -0.07022309 -0.02636796 -0.9949949 0.09631639 -0.7400739 -0.6724448 -0.005462765 -0.7404096 -0.6652425 -0.09588915 0.7290872 -0.6844081 -0.002746641 0.734489 -0.6719565 -0.09472942 -0.990112 -0.1074251 -0.08996856 -0.9858394 -0.1256447 -0.1108432 0.9907224 -0.1067537 -0.08398693 0.9857174 -0.128727 -0.1082797 -0.7300638 0.5706046 -0.375988 -0.8267769 0.541612 -0.1518296 0.7124851 0.5879086 -0.3829463 0.8332774 0.5332194 -0.1458784 0.1648305 0.8991668 -0.4052858 0.06955164 0.9732047 -0.2190924 -0.165807 0.9015778 -0.3995178 -0.06842249 0.971923 -0.225013 0.9913328 0.03595077 -0.126133 0.8129521 0.5741752 -0.09692674 -0.8118229 0.5756707 -0.09747612 -0.9907834 0.03952145 -0.1293374 0.8757591 -0.4676351 -0.1197546 -0.8725547 -0.4730674 -0.1216163 0.135258 -0.9852595 -0.1045869 -0.1327555 -0.9856868 -0.1036409 -0.7152318 -0.691702 -0.09955137 0.718009 -0.6891385 -0.09735405 -0.9946287 -0.06125062 -0.08313238 0.9948118 -0.05624556 -0.08456677 -0.7885678 0.6114383 -0.06537061 0.7778863 0.6247749 -0.06723225 0.002166807 0.999054 -0.04272586 -0.007019221 0.999176 -0.03955197 0.7635121 0.6443983 0.04232913 0.7640614 0.6392712 -0.08645892 0.02365183 0.9976806 -0.06338691 0.03900265 0.9963988 0.07498395 -0.01971495 0.9978942 -0.06149476 -0.7621693 0.6414685 -0.08688616 -0.7657399 0.6418653 0.04034543 -0.04318368 0.9962462 0.07495343 -0.1345561 0.166509 -0.9768059 -0.2039247 0.310007 -0.9285867 0.1677907 0.2603534 -0.9508042 -0.3650319 0.2859584 -0.8859524 -0.1069368 -0.0174871 -0.9940794 -0.7467879 0.6627399 -0.05529952 0.7496567 0.6594135 -0.05594038 0.1537827 -0.04449594 -0.9870907 -0.7182837 0.6922208 0.06988734 0.7146214 0.6959136 0.07061982 0.2063661 -0.06152528 -0.9765313 -0.9993897 -0.02017271 -0.02746665 0.9992066 -0.02710038 -0.02914518 -0.2481459 -0.1150547 -0.9618518 -0.9992371 0.03872793 0.003082334 0.9993591 0.03524887 9.15555e-5 -0.2494583 -0.128605 -0.9597766 -0.7515183 -0.6596271 0.006012141 0.7457503 -0.666158 0.006897151 0.2815943 -0.1183813 -0.9521775 -0.7574999 -0.6385083 -0.1357463 0.7528611 -0.6439711 -0.1358073 -0.02392649 -0.1683706 -0.9854122 0.1199377 -0.9923704 -0.02798545 -0.1081576 -0.9937742 -0.02584916 0.02667313 -0.1433149 -0.989288 0.1618091 -0.9678946 -0.1922056 -0.1637623 -0.9680777 -0.1895809 0.2833338 -0.1181371 -0.9516892 0.7923216 -0.6050295 -0.07809686 -0.7887509 -0.6096988 -0.07818841 -0.3000274 -0.1033051 -0.9483017 0.8619648 -0.4990081 -0.08923608 -0.8611408 -0.500351 -0.08954131 -0.002655088 -0.03784292 -0.9992676 0.993408 -0.03445535 -0.1091647 -0.9933775 -0.03735464 -0.1084933 -0.6095462 0.1177709 -0.7839289 0.9998169 0.008850336 -0.01669359 -0.9997559 0.009765923 -0.01873832 0.1099277 0.9575487 0.2663655 0.8254036 0.5309916 0.1915646 -0.8386791 0.5126804 0.1836603 -0.1278725 0.9566027 0.2617267 0.1431623 0.9767754 0.1592761 0.8948332 0.443556 0.04965358 -0.9031342 0.4255196 0.05670338 -0.1603137 0.9763482 0.1450545 -0.6902371 0.6950286 0.201178 0.6928923 0.6924345 0.2009643 -0.7561571 0.6511734 0.06454664 0.7399518 0.6680197 0.07864618 -0.9970397 -0.04110842 -0.06454664 0.9972839 -0.04446542 -0.05844295 -0.9898374 -0.1059297 -0.09475994 0.9906003 -0.109592 -0.08166754 -0.6265755 -0.7100132 -0.3212988 0.6355785 -0.7009797 -0.3234046 -0.5477157 -0.8051698 -0.2273629 0.5546434 -0.7975097 -0.2372204 0.3322855 -0.8528398 -0.4027528 -0.354503 -0.8454848 -0.3992736 0.3901181 -0.8830836 -0.260567 -0.3629261 -0.8899198 -0.276223 0.9209266 -0.3649404 -0.1366313 -0.9231239 -0.3640248 -0.123722 0.939848 -0.2992035 -0.1647084 -0.9376507 -0.311594 -0.1539048 0.997406 -0.04974514 0.05188143 -0.9969481 -0.05374306 0.05642867 0.9981079 -0.01062041 -0.06036561 -0.9992066 -0.01159703 -0.0374462 0.8742027 0.4739829 -0.1051667 0.9865108 0.01159703 -0.163274 -0.8527787 0.5143284 -0.09048736 -0.9889523 0.01617479 -0.1471297 0.9243141 -0.3592029 -0.128727 -0.9170812 -0.3764764 -0.1310769 0.2994781 -0.948088 -0.1067537 -0.2701498 -0.9563891 -0.1109042 -0.6370128 -0.7651296 -0.09350872 0.638966 -0.7638783 -0.09051787 -0.9947203 -0.05380409 -0.08703875 0.9955748 -0.04239016 -0.08368176 -0.7171239 0.6933195 -0.07074189 0.6963714 0.7144994 -0.06726276 0.05105745 0.9979858 -0.03756827 -0.07751697 0.9962157 -0.03851431 0.4376965 -0.4806665 0.7598193 0.07394635 -0.7383953 0.670278 -0.4249092 -0.4785608 0.7683645 -0.06439405 -0.7323527 0.6778466 0.001922607 -0.7821589 0.6230659 0.006439387 0.8496963 0.5272073 0.09054839 0.7995544 0.5937071 -0.05572676 0.7944273 0.6047548 0.4207587 0.7246315 0.545732 -0.5371563 0.6588031 0.5266579 0.7318339 -0.2435377 0.636433 -0.7127903 -0.270516 0.6470839 -0.1966612 0.045381 -0.9794 -0.1079134 -0.01620531 -0.9940184 0.1539353 0.06933802 -0.9856258 0.0700705 -0.01690721 -0.9973754 0.2822046 -0.1479232 -0.9478439 -0.397412 -0.2116764 -0.89288 0.3726921 -0.08990752 -0.9235817 -0.4173406 -0.1322977 -0.8990448 -0.04342782 -0.01342809 -0.9989624 0.05084383 -0.007324397 -0.9986572 -0.1684927 -0.05139315 -0.984344 0.1807001 -0.0246284 -0.9832148 0.03515732 -0.08862572 -0.9954223 -0.0458998 -0.07971435 -0.9957579 -0.1281472 -0.04269534 -0.9908139 0.1102328 -0.0260933 -0.9935606 0.9741203 0.2254707 -0.01397746 0.9668874 0.2522355 0.03823965 0.9754936 0.1876277 0.1148106 0.98175 0.1898556 0.009063959 -0.9754936 0.1876277 0.1148106 -0.9157689 0.2195501 0.336314 -0.9264809 0.3189184 0.1997131 -0.9668874 0.2522355 0.03823965 -0.855678 0.4453566 -0.2634358 -0.8577227 0.4947661 -0.1394391 -0.8900724 0.436079 -0.1324503 -0.8770104 0.4221931 -0.229255 0.9162267 0.3929868 -0.07791376 0.852382 0.5213172 -0.04062008 0.811182 0.5760979 0.1001312 0.8964812 0.4413892 0.03799551 0.8869594 0.3960998 -0.237434 0.847499 0.4797815 -0.2269967 0.7910093 0.5346538 -0.2973113 0.807062 0.5457625 -0.2252876 0.7586291 0.5972167 -0.2602924 0.714774 0.6424452 -0.2761925 -0.9741203 0.2254707 -0.01397746 -0.98175 0.1898556 0.009063959 0.680929 0.6074099 0.4090396 0.7110202 0.6804407 0.1772515 0.5906552 0.781518 0.2008423 0.5767693 0.6653646 0.4738914 0.7733085 0.5518052 0.3121739 0.5830867 0.7737358 -0.2475661 0.6426283 0.7117832 -0.2834254 0.830134 0.4750511 -0.2917875 0.826075 0.5313578 -0.1876583 0.855678 0.4453566 -0.2634358 0.8770104 0.4221931 -0.229255 0.8900724 0.436079 -0.1324503 0.8577227 0.4947661 -0.1394391 0.9996033 0.01058989 -0.02551347 0.999115 0.04116946 0.008331537 0.9987487 -0.04953151 -0.003906369 0.9962462 -0.03839224 -0.07748645 -0.255501 0.9450667 -0.2037721 -0.1113925 0.9743034 -0.1955931 -0.1642506 0.938261 -0.3044221 -0.3408002 0.8948637 -0.2881557 -0.8872341 0.4143193 -0.202826 -0.8875088 0.421247 -0.1866817 -0.9402447 0.3165685 -0.1251564 -0.9077731 0.3686025 -0.2000793 0.255501 0.9450667 -0.2037721 0.4034242 0.8860744 -0.2281258 0.4626911 0.8346507 -0.2986541 0.3408002 0.8948637 -0.2881557 -0.1969664 0.9757378 -0.09549242 -0.1783502 0.9825739 0.05224764 -0.09027373 0.9944456 0.05404824 -0.100589 0.9902341 -0.09631639 -0.9338054 0.3571887 -0.02002012 -0.9240394 0.3770257 0.06308174 -0.8629719 0.4697409 0.1859798 -0.8964812 0.4413892 0.03799551 0.5141758 0.8491775 -0.1203039 0.6548357 0.7400128 -0.1534776 0.9169591 0.3988769 0.00741595 0.9549547 0.2933439 0.04416024 0.4791406 0.8318125 0.2801294 0.3820002 0.9204382 0.08239996 0.3414716 0.9343852 -0.1013519 0.1969664 0.9757378 -0.09549242 0.1783502 0.9825739 0.05224764 0.2964568 0.953917 0.04583877 -0.6548357 0.7400128 -0.1534776 -0.6132695 0.789758 0.01336705 -0.4612568 0.8867153 0.03048795 -0.5141758 0.8491775 -0.1203039 0.8629719 0.4697409 0.1859798 0.7285073 0.4416028 0.5236366 0.8296762 0.4043092 0.3848994 -0.4034242 0.8860744 -0.2281258 -0.3414716 0.9343852 -0.1013519 0.9264809 0.3189184 0.1997131 0.9157689 0.2195501 0.336314 -0.9927976 0.1147801 0.03381448 -0.9812616 0.1016571 0.1635181 -0.5767693 0.6653646 0.4738914 -0.4457228 0.7262795 0.5232704 -0.4391919 0.8669393 0.2355418 -0.5906552 0.781518 0.2008423 -0.9916685 0.1285744 0.007446467 -0.999115 0.04116946 0.008331537 -0.998291 0.02218693 0.05355995 -0.5830867 0.7737358 -0.2475661 -0.714774 0.6424452 -0.2761925 0.9937132 0.1092257 0.02404856 0.9916685 0.1285744 0.007446467 0.9927976 0.1147801 0.03381448 0.998291 0.02218693 0.05355995 -0.08874779 0.9649342 0.2469252 -0.1085848 0.8261055 0.5529038 0 0.8287606 0.5595569 0 0.9688406 0.2476271 -0.7733085 0.5518052 0.3121739 -0.7285073 0.4416028 0.5236366 -0.6433912 0.4470351 0.6214179 -0.680929 0.6074099 0.4090396 0.09027373 0.9944456 0.05404824 0.08874779 0.9649342 0.2469252 0.1918699 0.9494308 0.2484512 -0.4626911 0.8346507 -0.2986541 -0.6426283 0.7117832 -0.2834254 0.8033692 0.2718894 0.5297708 -0.903531 0.0972014 0.4173406 0.9552904 0.295175 -0.01586961 0.9655141 0.2557756 -0.04809713 0.9533982 0.2883694 -0.08844262 0.9497665 0.3057039 -0.06653034 0.7691885 0.6092105 -0.1927854 0.7374188 0.6753746 -0.007171809 -0.9497665 0.3057039 -0.06653034 -0.9368878 0.3290811 -0.117832 -0.9362468 0.3209021 -0.142796 0 0.9983215 0.05780202 -0.9063692 0.3744621 -0.1955015 -0.9066134 0.357799 -0.2235786 0.9346599 0.3230994 -0.1481368 0.9362468 0.3209021 -0.142796 0.9063692 0.3744621 -0.1955015 0.9172644 0.358623 -0.1730704 0.9077731 0.3686025 -0.2000793 0.8872341 0.4143193 -0.202826 -0.847499 0.4797815 -0.2269967 -0.852382 0.5213172 -0.04062008 -0.7374188 0.6753746 -0.007171809 -0.7691885 0.6092105 -0.1927854 0.1113925 0.9743034 -0.1955931 0.100589 0.9902341 -0.09631639 -0.9812006 0.1928159 -0.006591975 -0.9996033 0.01058989 -0.02551347 -0.9962462 -0.03839224 -0.07748645 -0.9987487 -0.04953151 -0.003906369 -0.9169591 0.3988769 0.00741595 -0.3820002 0.9204382 0.08239996 -0.4791406 0.8318125 0.2801294 -0.9549547 0.2933439 0.04416024 -0.8579058 0.4716941 -0.203589 -0.9366436 0.3122044 -0.1587878 -0.9303262 0.3114414 -0.1934873 -0.8773461 0.3988159 -0.2667317 -0.830134 0.4750511 -0.2917875 -0.8869594 0.3960998 -0.237434 -0.9720756 0.2336192 -0.02096617 -0.9584949 0.2811365 -0.04721212 0.9368878 0.3290811 -0.117832 0.9338054 0.3571887 -0.02002012 -0.811182 0.5760979 0.1001312 -0.7110202 0.6804407 0.1772515 -0.9552904 0.295175 -0.01586961 -0.9533982 0.2883694 -0.08844262 -0.9655141 0.2557756 -0.04809713 0.9812616 0.1016571 0.1635181 0.9775995 0.009491205 0.2101809 0.9066134 0.357799 -0.2235786 0.9720756 0.2336192 -0.02096617 0.9584949 0.2811365 -0.04721212 0.9812006 0.1928159 -0.006591975 0.9240394 0.3770257 0.06308174 -0.2964568 0.953917 0.04583877 -0.2972503 0.9215064 0.249794 -0.1918699 0.9494308 0.2484512 0.6132695 0.789758 0.01336705 -0.9162267 0.3929868 -0.07791376 0.9733268 0.2251656 0.043733 -0.9937132 0.1092257 0.02404856 -0.8033692 0.2718894 0.5297708 -0.8296762 0.4043092 0.3848994 0.3406171 0.7644886 0.5472579 0.2972503 0.9215064 0.249794 0.2435072 0.797998 0.5512253 -0.3406171 0.7644886 0.5472579 -0.2435072 0.797998 0.5512253 0 0.9950255 -0.09958189 0 0.979339 -0.2020936 0.4612568 0.8867153 0.03048795 0.4391919 0.8669393 0.2355418 -0.9481796 0.2538225 -0.1909848 0.6433912 0.4470351 0.6214179 0.8407544 0.5274209 -0.122074 0.8544572 0.4868618 -0.1811578 0.9267556 0.3395184 -0.1606189 0.9375897 0.3325907 -0.1012604 -0.9775995 0.009491205 0.2101809 0.8143864 0.3599048 0.4552141 0.5470748 0.7598193 0.3511765 -0.9172644 0.358623 -0.1730704 0.323191 0.9345073 -0.1489303 -0.9733268 0.2251656 0.043733 0.4457228 0.7262795 0.5232704 -0.8544572 0.4868618 -0.1811578 -0.9267556 0.3395184 -0.1606189 -0.9346599 0.3230994 -0.1481368 -0.826075 0.5313578 -0.1876583 -0.7910093 0.5346538 -0.2973113 -0.9375897 0.3325907 -0.1012604 -0.807062 0.5457625 -0.2252876 -0.7586291 0.5972167 -0.2602924 0.903531 0.0972014 0.4173406 0 0.9518418 -0.3064974 0.1642506 0.938261 -0.3044221 -0.9426558 0.2110354 -0.2584918 -0.8407544 0.5274209 -0.122074 0.9366436 0.3122044 -0.1587878 0.9303262 0.3114414 -0.1934873 0.8579058 0.4716941 -0.203589 0.8773461 0.3988159 -0.2667317 0.1085848 0.8261055 0.5529038 0.9402447 0.3165685 -0.1251564 0.8875088 0.421247 -0.1866817 0.5562914 -0.2634663 0.7880795 0.5440535 -0.4507889 0.7076327 0.6594135 -0.3486739 0.6660054 0.6357311 -0.2164677 0.7409284 0.7598804 -0.2730491 0.5898923 0.7245094 -0.1803644 0.665212 -0.7845088 -0.423719 0.4527116 -0.7598804 -0.2730491 0.5898923 -0.8515885 -0.2319406 0.4700461 -0.8926359 -0.3168126 0.3205969 -0.299295 -0.3703421 0.8793298 -0.4394971 -0.3187353 0.8397778 -0.4091616 -0.5496994 0.7282632 -0.2883999 -0.623249 0.7268899 -0.03353983 -0.9250161 0.378399 -0.1026642 -0.8514054 0.5143284 -0.1777703 -0.8315073 0.5262612 -0.126194 -0.9077731 0.3999451 -0.9185156 -0.2212287 0.3275856 -0.9426863 -0.2804956 0.180578 0.4342479 -0.8187506 0.3755303 0.6023438 -0.7252113 0.3334452 0.6502579 -0.5441451 0.530137 0.4916226 -0.6613972 0.566393 0.8926359 -0.3168126 0.3205969 0.9426863 -0.2804956 0.180578 0.9185156 -0.2212287 0.3275856 0.8515885 -0.2319406 0.4700461 0.4091616 -0.5496994 0.7282632 0.3332621 -0.764153 0.5522325 -0.7245094 -0.1803644 0.665212 -0.8094119 -0.153447 0.5667898 0.7665639 -0.591113 0.2508621 0.7845088 -0.423719 0.4527116 -0.5440535 -0.4507889 0.7076327 -0.6594135 -0.3486739 0.6660054 -0.6502579 -0.5441451 0.530137 -0.4916226 -0.6613972 0.566393 0.03353983 -0.9250161 0.378399 0.1026642 -0.8514054 0.5143284 0 -0.8633381 0.504593 0 -0.931486 0.3637501 -0.5562914 -0.2634663 0.7880795 -0.1195105 -0.7055574 0.6984466 0 -0.7391583 0.673513 0 -0.4967803 0.8678548 -0.09106719 -0.4396497 0.8935209 -0.7665639 -0.591113 0.2508621 -0.6023438 -0.7252113 0.3334452 0.126194 -0.9077731 0.3999451 0.1777703 -0.8315073 0.5262612 0.2705771 -0.8731346 0.4054384 -0.8915982 -0.4252449 0.1554002 -0.9471114 -0.3133946 0.06881922 0.1816156 -0.409772 0.8939177 0.1965392 -0.6670431 0.7185888 0.2883999 -0.623249 0.7268899 0.299295 -0.3703421 0.8793298 0.1195105 -0.7055574 0.6984466 -0.3332621 -0.764153 0.5522325 -0.2343821 -0.8053224 0.5445113 -0.6357311 -0.2164677 0.7409284 -0.9563891 -0.2892544 0.04034543 -0.9581286 -0.2776574 0.0698263 -0.2705771 -0.8731346 0.4054384 -0.4342479 -0.8187506 0.3755303 0.1900998 -0.8925443 0.408887 0.2343821 -0.8053224 0.5445113 0.8094119 -0.153447 0.5667898 -0.1900998 -0.8925443 0.408887 -0.1965392 -0.6670431 0.7185888 0.8915982 -0.4252449 0.1554002 0.9471114 -0.3133946 0.06881922 0.4394971 -0.3187353 0.8397778 0.09106719 -0.4396497 0.8935209 -0.1816156 -0.409772 0.8939177 0.9563891 -0.2892544 0.04034543 0.9581286 -0.2776574 0.0698263 0.1556749 -0.1676381 0.9734489 0.1449324 -0.02279728 0.9891659 0.05322426 -0.02633744 0.9982299 0.06485182 -0.17893 0.9817194 -0.4078189 -0.1422773 0.901883 -0.5124973 -0.1354106 0.8479263 0.5114292 0.2159489 0.831721 0.5545824 0.4524979 0.6982941 0.4408704 0.4643697 0.7680593 0.3942992 0.1781671 0.9015168 0.5931883 0.03677475 0.8041933 0.4893948 -0.001342773 0.8720359 0.5124973 -0.1354106 0.8479263 0.6097598 -0.1217078 0.783166 0.4078189 -0.1422773 0.901883 -0.1556749 -0.1676381 0.9734489 -0.2734153 -0.1513718 0.9498886 0.2734153 -0.1513718 0.9498886 0.3698233 -0.01461833 0.9289835 0.2557756 -0.01913505 0.9665212 -0.06485182 -0.17893 0.9817194 -0.7911924 0.1101413 0.6015198 -0.6834926 0.09619432 0.7235633 -0.6921903 0.2849513 0.6630451 0 -0.1987975 0.9800104 -0.5931883 0.03677475 0.8041933 -0.5992615 0.2573015 0.7580493 -0.7948851 -0.05511641 0.6042054 -0.7043367 -0.08838158 0.7043062 -0.6097598 -0.1217078 0.783166 -0.8908048 -0.0174871 0.4539933 -0.898526 -0.1207922 0.4218879 0.7043367 -0.08838158 0.7043062 -0.4408704 0.4643697 0.7680593 -0.3433333 0.462447 0.8174383 0.2842799 0.1579027 0.945616 0.1809442 0.1413312 0.9732658 -0.2456434 0.4654073 0.8503067 -0.1106906 0.4713584 0.8749352 0.5992615 0.2573015 0.7580493 0.6921903 0.2849513 0.6630451 -0.5545824 0.4524979 0.6982941 0.6834926 0.09619432 0.7235633 -0.5114292 0.2159489 0.831721 -0.3942992 0.1781671 0.9015168 -0.2842799 0.1579027 0.945616 -0.0736106 0.1310769 0.9886166 -0.1809442 0.1413312 0.9732658 0 0.1238136 0.9922788 0 0.4671468 0.8841518 0.3433333 0.462447 0.8174383 0.898526 -0.1207922 0.4218879 0.8908048 -0.0174871 0.4539933 0.7948851 -0.05511641 0.6042054 0.0736106 0.1310769 0.9886166 0.1106906 0.4713584 0.8749352 0.2456434 0.4654073 0.8503067 0.7911924 0.1101413 0.6015198 -0.4893948 -0.001342773 0.8720359 0 -0.02877891 0.9995728 -0.05322426 -0.02633744 0.9982299 -0.1449324 -0.02279728 0.9891659 -0.2557756 -0.01913505 0.9665212 -0.3698233 -0.01461833 0.9289835 0.3490402 0.6647236 0.6604816 0.1597644 0.2216254 0.9619435 -0.2181768 -0.2332835 0.9475997 -0.1453291 -0.2071291 0.9674367 -0.3937803 -0.0572527 0.9173864 0.4579302 0.6988129 0.5494552 0.3937803 -0.0572527 0.9173864 -0.5823542 0.6570635 0.4786523 0.07229834 0.468276 0.8805811 0.2181768 -0.2332835 0.9475997 0 -0.1473739 0.9890744 -0.001220703 -0.1518601 0.9883725 -0.1109347 0.7509689 0.6509293 0 0.7918943 0.6106144 0.04876857 0.959685 0.2767418 -0.4475845 0.1747184 0.8769799 0.5285196 0.1609546 0.833491 0.08069092 0.9216895 0.3793756 0.05832082 -0.2164372 0.9745171 0.1453291 -0.2071291 0.9674367 0.04684591 -0.340556 0.939024 0.3323161 -0.1105685 0.9366436 -0.3883175 0.6147649 0.6864528 -0.3323161 -0.1105685 0.9366436 -0.05832082 -0.2164372 0.9745171 0.001220703 -0.1518601 0.9883725 0.1109347 0.7509689 0.6509293 -0.04684591 -0.340556 0.939024 0 -0.05444496 -0.9985046 0.2528153 -0.03274631 -0.9669485 0.2972503 -0.1974852 -0.934141 0 -0.2199469 -0.9754936 0.3830378 -0.891171 -0.2430494 0.3727226 -0.7835932 -0.4970244 0.7001556 -0.5989258 -0.3886227 0.6396985 -0.7406232 -0.2054201 -0.2972503 -0.1974852 -0.934141 -0.5342571 -0.1183202 -0.8369702 -0.4025697 0.004852414 -0.9153722 -0.2528153 -0.03274631 -0.9669485 -0.3830378 -0.891171 -0.2430494 -0.6396985 -0.7406232 -0.2054201 -0.7001556 -0.5989258 -0.3886227 -0.3727226 -0.7835932 -0.4970244 0 -0.9757073 -0.2189702 0.3162023 -0.9443342 0.09070098 0 -0.9890744 0.1471908 0.5472274 -0.8369702 -0.003295958 0.372631 -0.5386517 -0.7556078 0.6790979 -0.37434 -0.6313669 0 -0.8513444 -0.5245827 0.4025697 0.004852414 -0.9153722 0.5342571 -0.1183202 -0.8369702 0 -0.5830867 -0.8124027 -0.372631 -0.5386517 -0.7556078 -0.6790979 -0.37434 -0.6313669 -0.3162023 -0.9443342 0.09070098 -0.5472274 -0.8369702 -0.003295958 -0.3705252 -0.04455697 -0.9277322 -0.258919 -0.01861625 -0.9656972 -0.3987243 -0.3895077 -0.8302255 -0.2703329 -0.262093 -0.9263893 0.258919 -0.01861625 -0.9656972 0.3705252 -0.04455697 -0.9277322 0 -0.02874839 -0.9995728 -0.5230568 -0.01315343 -0.8521683 -0.5191199 -0.1760613 -0.8363292 -0.5917234 -0.4891507 -0.6407361 0 -0.2020325 -0.9793695 0.2703329 -0.262093 -0.9263893 0.3987243 -0.3895077 -0.8302255 0.5917234 -0.4891507 -0.6407361 0.5191199 -0.1760613 -0.8363292 0.5230568 -0.01315343 -0.8521683 0.7067171 -0.2844325 -0.6477859 0.7481307 -0.4950407 -0.4418165 -0.7067171 -0.2844325 -0.6477859 -0.7481307 -0.4950407 -0.4418165 0.5186926 0.5633717 0.6430555 0.5385296 0.672811 0.5072482 -0.1348002 0.6332591 0.7620777 -0.1993774 0.3439741 0.917539 -0.1266518 0.2179021 0.9676809 -0.2702414 0.00653094 0.9627674 -0.9061861 -0.02993863 0.4217963 -0.9212318 -0.03772085 0.3871273 0.5292825 0.7329325 0.4273507 -0.1701406 0.777337 0.6056093 0.4621112 0.8427992 0.2758568 -0.2168645 0.8977325 0.3833735 -0.8527177 0.1122165 0.5101169 -0.8143864 0.3599048 0.4552141 0.02706986 0.7342754 0.6782739 -0.139378 0.4219489 0.8958098 0.5677664 0.4123966 0.7124241 -0.1201208 0.1331828 0.9837642 -0.1405682 -0.8480789 0.5108494 -0.3511765 -0.9330729 0.07760852 -0.7451094 -0.6631367 0.0707724 -0.7374493 -0.6512955 0.1786859 -0.5470748 0.7598193 0.3511765 0.1579027 0.8917204 0.4241157 -0.02871787 -0.8221381 -0.5685293 -0.9711905 0.09112823 0.2200384 -0.9676198 0.2439954 0.06451612 -0.04083377 -0.9221778 -0.3845638 0.5034944 0.7809992 0.3694266 0.5134739 0.7073885 0.4856715 -0.4277474 0.3730278 -0.8232979 -0.6817835 0.6583453 -0.3189489 -0.6527299 0.7126988 -0.2568438 -0.9064608 0.03790396 -0.4205451 -0.5406354 -0.3837397 0.7485885 0.366863 0.1245155 0.9218726 0.5443892 0.1181676 0.8304392 0.3420209 -0.3555101 0.869808 -0.29017 -0.5636464 0.773339 -0.5029145 -0.7489547 0.4313791 0.5050508 0.5991394 0.6212348 0.5741447 0.4662618 0.6729637 0.1839656 0.9504685 0.2504959 0.5449385 0.8069704 0.2275765 -0.5756707 -0.8173772 0.0212714 -0.638081 -0.2083804 -0.741203 -0.4528031 -0.2790613 -0.8467666 -0.8633686 -0.4637898 0.1986144 0.4651021 0.879574 0.09991759 -0.3261208 0.9425337 0.07248145 -0.8709372 -0.4913175 0.005096554 -0.9974975 -0.06958216 -0.01001006 -0.01590013 -0.9921873 -0.1236305 0.02905356 -0.9928892 -0.1153905 -0.1127964 -0.9918516 0.0587176 -0.968627 0.2306588 -0.09234899 -0.8655354 -0.5005951 -0.0140385 -0.1609546 -0.1742607 0.9714347 -0.8248848 -0.4685202 0.3162023 -0.9834895 -0.1576281 -0.08865624 -0.989288 -0.1419416 -0.033845 -0.02706986 -0.4906461 -0.8709067 -0.1186559 -0.586932 -0.8008667 -0.08847314 -0.7606738 -0.643025 0.1033967 -0.6985687 -0.7080295 -0.9420759 -0.2462233 0.227607 0.1077303 -0.8830531 -0.456679 -0.9833979 -0.03759878 0.177343 -0.4652852 -0.03967404 -0.8842433 -0.9354534 -0.3465071 0.06958216 -0.9292276 -0.3220618 0.1810968 0.5681936 0.8192083 0.077578 -0.2580035 -0.1836909 -0.9484848 -0.8196051 -0.4170659 0.3927732 -0.155858 -0.3363445 -0.9287393 -0.9119541 -0.04748678 0.4074831 -0.8438673 -0.2338938 0.4828333 -0.09582811 -0.2992035 -0.9493393 -0.7040315 -0.6412244 -0.3050935 -0.8891263 -0.3189489 0.328135 -0.9929807 0.01715135 -0.1169164 -0.2931608 0.02270573 -0.9557787 -0.9930112 -0.1016877 0.05981624 -0.8830226 -0.3672903 0.2920926 -0.7394635 -0.6707968 -0.05661183 -0.3104038 -0.9396649 0.1437422 -0.1587573 -0.9515671 -0.2631916 -0.4309824 -0.8362682 -0.3389385 -0.3519089 -0.9088717 -0.2237312 -0.4483779 0.2953276 0.8436232 -0.563921 0.1307412 0.8153935 -0.885342 -0.0241096 0.4642475 -0.8992279 0.03112888 0.4363536 -0.3142491 0.9374371 0.1497848 -0.9840388 -0.1754814 -0.02841269 -0.3867916 -0.6155278 0.686636 -0.8626973 -0.3863033 0.3263039 -0.8518937 -0.5191199 0.06894129 -0.4915006 -0.8540605 0.1702322 -0.3714408 -0.8497574 0.3740043 -0.6940214 -0.7145299 -0.08792382 -0.6685385 -0.7133091 0.2102725 -0.9739983 0.2119205 0.07998901 -0.8720359 -0.1547288 -0.4642781 -0.5680105 -0.8224128 0.03100675 -0.9147008 -0.4025697 0.03457742 -0.793115 -0.5515305 -0.2583392 -0.3803827 -0.7325663 -0.5644704 -0.7557909 -0.5699942 -0.3221839 -0.5309 -0.8422498 -0.09332555 -0.6383862 -0.7610401 -0.1151768 -0.7286294 -0.5996887 -0.3307596 -0.6495255 -0.7602771 -0.007293879 -0.3027741 0.9425947 -0.1405987 -0.7389752 0.6624958 -0.1224097 -0.8068789 0.5896787 -0.03448587 -0.2109744 0.9769585 -0.03195285 -0.4927213 -0.8382824 -0.2334055 -0.541673 -0.7202674 -0.4333323 -0.2415845 -0.8190863 -0.5202795 -0.9039888 -0.3819391 -0.1920835 -0.9040803 -0.3979614 -0.1556444 -0.5629444 0.8233894 -0.07119965 -0.911069 -0.4101077 -0.04150515 -0.7232887 0.6571856 -0.211951 -0.4011353 -0.729545 0.5538805 -0.5105746 -0.8392896 0.1867427 -0.679281 -0.6989654 0.2235481 -0.9723808 0.09826958 0.2116153 -0.99588 -0.0811792 0.04022336 -0.8066958 -0.5899228 -0.03439432 -0.9962157 -0.03607285 -0.07901239 -0.7835627 -0.5992004 -0.164159 -0.5190894 -0.7396466 -0.4282357 -0.5785394 -0.7299417 -0.3639027 -0.9710379 -0.1620227 0.1754204 -0.4841762 0.27781 0.8296762 -0.449202 0.3870052 0.8052309 -0.9670095 0.06140321 0.2470778 -0.7171239 -0.6956694 -0.04153567 -0.3995788 -0.6812647 -0.6133305 -0.5309 -0.5491806 -0.6453749 -0.7133091 -0.6763817 0.1835078 -0.9285256 -0.3250831 0.1792047 -0.8481704 -0.5264748 0.05813771 -0.7728202 -0.6142155 0.1595202 -0.4525589 -0.7944884 -0.4048891 -0.3204444 -0.7336955 -0.5991394 -0.9562365 -0.146031 0.2535173 -0.7049471 -0.4606464 0.5392926 -0.6407361 -0.7624439 -0.08996856 -0.8665731 -0.4990081 -0.003845274 -0.9659109 -0.2425611 0.0902127 -0.496231 -0.634846 0.5921812 -0.8642231 -0.4993133 -0.06106752 -0.8581805 -0.4647664 0.2179327 -0.5402082 -0.8128605 -0.2176885 -0.9165624 -0.009094476 0.3997619 -0.5549486 -0.520951 -0.6485489 -0.5470443 -0.3895077 -0.7409284 -0.4829554 0.6425367 -0.5948668 -0.9899289 -0.1196631 -0.07544171 -0.8169195 -0.4445631 -0.3673818 -0.4403516 0.1284829 -0.8885769 -0.9823603 -0.009063959 -0.1867427 -0.8179571 0.310007 -0.4845729 -0.7371746 0.244789 -0.6297799 -0.9014558 -0.4048891 -0.1528672 -0.9468978 -0.3202918 0.02749717 -0.6667684 -0.5081942 -0.5450911 -0.5850399 -0.5184789 -0.6235847 -0.9365521 -0.1973631 -0.2896206 -0.6805322 -0.4969939 -0.5383465 -0.5723441 -0.6047853 -0.5536973 -0.6850795 -0.5839412 0.4354686 -0.9054537 -0.4013794 0.1379436 -0.5193335 -0.7711722 0.3681142 -0.4797204 -0.0946989 0.8722801 -0.9138463 -0.3929563 -0.1021149 -0.9377422 -0.1788079 -0.297708 -0.7747124 -0.5825068 -0.2458571 -0.9890133 -0.1315653 -0.06723225 -0.9346294 -0.2236091 -0.2764366 -0.7801752 -0.5955687 -0.19129 -0.9850154 -0.1383709 0.1026337 -0.8904996 -0.3599353 -0.2782983 -0.6358837 0.7088534 0.3051546 -0.7389141 0.03530991 0.6728721 -0.5488754 -0.3561205 0.7562181 -0.4635151 -0.4503311 0.7630848 -0.1489914 -0.6139714 -0.7751091 -0.7242958 -0.4796289 -0.4953154 -0.6554766 -0.1743828 -0.7347636 -0.1391034 -0.2779015 -0.9504685 -0.9434187 -0.1479232 -0.2967315 -0.6333506 -0.3356731 -0.6972259 -0.9306314 -0.0167241 0.3655202 -0.666982 0.6406446 0.3803521 -0.65215 -0.5594348 -0.5115818 -0.5088962 0.6156194 0.6016419 -0.6510208 -0.6122928 -0.448561 -0.970275 -0.1511582 0.188879 -0.9424726 -0.2469252 -0.2252266 -0.8118839 0.1374859 -0.5673391 -0.2331614 0.3420209 -0.9102756 -0.5002289 -0.2240669 -0.8363597 -0.9760125 -0.01956236 -0.2167119 -0.9118015 -0.410535 0.002288877 -0.6023133 -0.6399121 -0.4771569 -0.5574206 -0.8238167 -0.1028779 -0.8339488 0.3035981 -0.460799 0.1293985 0.885464 -0.4462416 -0.9608142 -0.2766503 0.01596117 -0.9411298 -0.3249 0.09295934 -0.3987854 -0.6057009 -0.6884976 -0.4415418 -0.8543657 -0.2739341 -0.9245887 0.07943964 -0.37257 -0.9452193 0.1056246 -0.3088473 -0.9543749 0.01794487 -0.2980437 -0.9518723 -0.008239984 -0.3063143 -0.7472457 0.1094698 -0.6554461 -0.5810725 0.3822138 -0.7184668 -0.9784234 0.03787344 -0.2030091 -0.9666128 -0.02624589 -0.254799 -0.9828181 0.1296426 -0.1312906 -0.9814753 0.05468916 -0.1835688 -0.9748222 0.01181066 -0.2226325 0.2808619 0.8164007 -0.5045625 -0.7009491 0.493698 -0.5146642 0.2236701 0.453444 -0.8627278 -0.8594012 -0.3826106 -0.3390911 -0.09387493 -0.08417004 -0.9920042 -0.8156072 -0.2194281 -0.5353557 -0.3412274 0.9230629 -0.1774041 -0.9473861 0.2069765 -0.244087 -0.02633744 -0.9935606 0.1101108 -0.1364482 0.7580187 -0.6377758 -0.08255255 0.6597186 -0.7469405 0.666982 0.6670431 -0.3318583 0.3952147 0.9010895 -0.1783196 -0.1296426 0.7994629 -0.5865047 -0.258034 0.8538163 -0.4520707 0.4787439 0.8550981 -0.1988586 0.6615498 0.7229225 -0.1991943 -0.9844966 -0.01577806 -0.1746574 -0.9071932 -0.4191717 -0.03585922 -0.934904 -0.3547776 0.004974484 -0.5487228 0.6844996 -0.479873 -0.09945982 0.8160039 -0.5694144 -0.03878897 0.8541215 -0.5186011 -0.5271767 0.7614063 -0.3772393 -0.8960235 -0.06427198 -0.439314 -0.9279153 0.04199343 -0.3704031 -0.4048891 0.8779259 -0.2554705 0.2468337 0.8979156 -0.364391 -0.8867153 0.05334633 -0.459212 -0.9233375 0.1136509 -0.3667104 0.1743828 0.9742729 -0.1427045 0.1911374 0.981048 0.03094571 -0.323191 0.9345073 -0.1489303 -0.8419141 -0.5380108 0.04126101 -0.3435469 -0.9114048 0.2264473 0.5703909 0.8210089 -0.02352976 -0.7823725 -0.6214789 0.04037594 -0.5260781 -0.8387402 0.1404156 0.5142979 0.7968383 -0.3170263 0.07690662 0.9417707 -0.327311 -0.6764428 0.5513169 -0.4883267 0.5527513 0.77987 -0.2936796 0.5692617 0.8095951 -0.1430097 -0.998291 0.04910427 0.03085416 -0.2033753 -0.9766839 0.06857508 0.3966491 0.9129612 -0.09537035 0.02166813 -0.9966735 0.07843255 0.02966398 -0.9636524 0.265389 -0.07000946 -0.9562365 0.2839747 -0.05700856 -0.9974975 0.04123049 -0.1679433 -0.9384136 0.301828 -0.1537217 -0.9871517 0.04318368 0 -0.9949339 0.1002533 0 -0.965453 0.2605365 -0.2555315 -0.9178442 0.3036592 -0.2367321 -0.9665212 0.09872734 0.1001312 -0.480697 0.8711203 -0.5378887 -0.05136263 0.8414258 -0.3916745 0.1670888 0.9047822 -0.05331581 -0.6503189 0.7577441 -0.08645892 -0.3858455 0.9184851 -0.4384899 -0.7575305 0.4835352 -0.405652 -0.877224 -0.2566606 -0.5026093 -0.850032 -0.1573839 -0.5650807 -0.7705924 0.2946562 -0.5023347 -0.8272958 -0.2513809 -0.8000428 -0.5399945 -0.26133 -0.9348735 0.333903 0.1203039 0.1784722 0.8644979 0.4698629 -0.5571154 -0.5280312 -0.6408887 -0.7497788 -0.2634968 -0.6069216 -0.4141667 -0.7921995 -0.4481338 -0.4222541 -0.7632679 -0.4889675 -0.6503189 -0.7353435 0.190527 0.1026948 -0.9699393 0.2204657 0.2520524 -0.9355754 0.2472304 0.3271584 -0.9448836 -0.01092559 0.1431318 -0.9841914 0.1041597 0.06601148 -0.958678 0.2766503 0.1195105 -0.8281198 0.5476546 -0.6228523 -0.6106144 -0.4890591 -0.4052248 -0.6666768 0.6255074 -0.05008083 -0.821955 0.567278 -0.1740776 -0.955504 0.2380443 -0.08511608 -0.9778436 0.1911374 -0.2299264 -0.9688406 0.09173864 -0.05050808 -0.9793695 -0.1955015 0.2735374 -0.9444869 -0.1818597 0.1748405 -0.9845576 -0.007965326 -0.1338847 -0.7019867 0.6994537 0.1062044 0.8904996 0.4423963 -0.01156651 -0.9787591 -0.204535 -0.1128269 -0.978637 -0.1717276 -0.2587054 -0.9616993 -0.09042632 -0.102176 -0.9899594 -0.09750664 0.1481063 -0.9690542 -0.1973937 0.0716269 -0.9942015 -0.08001953 0.003723204 -0.704825 0.7093417 -0.02822959 -0.6530351 0.7567675 0.1410565 0.9061861 0.3985717 0.1474959 0.9000519 0.4099857 -0.006714046 -0.6176641 0.7863705 0.2216864 0.8759728 0.4283578 0.2831507 0.8687704 0.4062319 -0.001831054 -0.6497391 0.7601245 -0.2628864 -0.9549242 -0.13773 -0.3881955 -0.9100314 -0.1453291 0.03524887 -0.952971 0.3009125 -0.05749684 -0.9514451 0.3023164 -0.07992798 -0.9586169 0.2731407 -0.009216547 -0.9433882 0.331492 -0.4938811 -0.8424024 0.2153996 -0.5776239 -0.8084964 0.1124302 -0.3615833 -0.922544 0.1345866 -0.2923063 -0.9255654 0.2405164 -0.2117679 -0.9216895 0.3249306 -0.3736991 -0.8785364 0.2974944 -0.4879299 -0.8393506 0.2395092 -0.6202277 -0.7539293 0.2164067 -0.7256386 -0.6747947 0.134373 -0.6514176 -0.6877651 0.3202612 -0.02642899 -0.4420606 0.8965728 0.05456709 -0.5735649 0.8173162 -0.6010316 -0.7358318 0.3118686 0.01339757 0.9148228 0.4036073 -0.1597949 0.7946105 0.5856807 0.1494186 0.7214576 0.6761071 0.4815515 -0.8564104 0.1861019 -0.603473 -0.7772454 0.1778313 -0.03671371 -0.5401471 0.8407544 -0.690878 -0.7149571 0.107242 -0.6675619 -0.7416608 0.06527906 -0.421308 -0.9051179 -0.05685597 -0.5471358 -0.8336131 -0.07544171 -0.01989805 -0.6369518 0.7706229 -0.680929 -0.7260964 0.09524822 0.3580737 0.8838771 0.300821 0.3506577 0.9087191 0.2263557 -0.6121708 -0.790521 0.01681566 -0.680105 -0.7280496 0.08572649 -0.703238 -0.7093722 -0.04672384 -0.7817011 -0.6212043 -0.05456709 -0.8135319 -0.5761284 0.07876825 -0.7446821 -0.6613361 0.08975493 -0.760796 -0.6149785 0.2072817 -0.8341319 -0.5152135 0.1968749 -0.8400525 -0.4936369 0.2248909 -0.749321 -0.6151921 0.2449415 -0.6844386 -0.7112644 0.1599169 -0.6566973 -0.7251808 0.2068239 -0.5875729 -0.7795038 0.2169865 -0.7029023 -0.6731163 0.2298654 -0.8142644 -0.5524156 0.1782586 -0.398114 -0.8720359 0.2846156 -0.5468612 -0.7957091 0.2602618 -0.69747 -0.6821497 0.2194281 -0.9665822 -0.2550432 0.02536088 -0.9606311 -0.2672811 0.07565534 -0.9507737 -0.3054903 0.05151522 -0.8511307 -0.5117649 0.1167027 -0.9254128 -0.3757439 0.04852437 -0.1810968 -0.7621387 -0.62154 -0.2218085 -0.7597888 -0.6111332 0.2489395 -0.9669485 -0.05487227 0.2692953 -0.9615162 -0.05417031 -0.4704123 -0.6499222 -0.596881 -0.3399457 -0.727073 -0.5964537 -0.575457 -0.1539658 -0.8031861 -0.5708182 -0.02975553 -0.8205206 -0.5592212 0.5309916 -0.6365856 -0.7872555 0.5285806 -0.3175145 0.05902278 -0.9911801 -0.1184118 -0.1164891 -0.6607868 -0.7414472 -0.4939116 -0.4968413 -0.7135533 -0.001861572 -0.8050783 -0.5931273 -0.154973 -0.985992 -0.06128114 0.05664235 -0.9904172 -0.1258583 -0.747734 -0.6599323 -0.07315284 -0.633076 -0.717185 -0.2912076 -0.5295572 -0.7992492 -0.2840663 -0.582812 -0.8110904 -0.04922634 -0.4638813 -0.7269204 -0.5063021 -0.2959685 -0.6706442 -0.6801355 -0.01767021 -0.9464401 -0.322367 -0.3021637 -0.8794214 -0.3677785 0.03131198 -0.8508256 -0.5244606 -0.1371807 -0.6211432 -0.771569 -0.4870144 -0.7341838 -0.4730064 -0.2362437 -0.754326 -0.6125065 -0.7067171 -0.6713157 -0.2233039 -0.07748645 -0.6495255 -0.7563707 -0.1151768 -0.6740013 -0.7296671 -0.5868709 0.01867729 -0.8094424 -0.05987727 -0.8148747 -0.5764946 -0.06048768 -0.9234596 -0.3788263 -0.422956 0.1095309 -0.8994721 -0.1638538 0.5644704 -0.8089846 -0.1854304 -0.07135224 -0.9800409 -0.2757347 -0.94879 -0.1540879 -0.195532 -0.9319437 -0.3053377 -0.3564562 -0.9159826 0.1840876 -0.1380657 -0.8305307 -0.5395367 -0.2870571 -0.782342 -0.5527207 -0.1869869 -0.9154943 -0.3561205 -0.1552782 -0.9528489 -0.2606281 -0.1656544 -0.9084445 -0.3837092 -0.1545457 -0.979461 -0.129368 -0.07803583 -0.6657918 -0.7419965 -0.2215033 -0.9751274 0.002502501 0.04831075 -0.7692801 -0.6370434 -0.2909024 -0.9524522 -0.09030425 -0.3946043 -0.9176306 0.04709005 -0.3745232 -0.9047517 0.202826 -0.1967833 -0.9361858 -0.2911466 -0.1215857 -0.6476638 -0.7521287 0.04110842 -0.0788598 -0.9960326 -0.1249122 -0.6462905 -0.7527695 -0.2088686 -0.9350261 -0.2865077 -0.3357036 -0.8894619 -0.310007 -0.1296121 -0.6109501 -0.7809382 0.2142399 -0.06433302 -0.9746391 0.2016663 0.5873287 -0.7837764 -0.1754509 -0.7787714 -0.6022217 -0.5499436 -0.7480087 -0.3715018 -0.2262337 -0.8033082 -0.5508591 -0.0819422 -0.7531663 -0.6526688 -0.4306161 -0.8405713 -0.3285318 0.1058077 -0.8265633 -0.5527513 0.441969 -0.08273565 -0.8931852 0.5648976 0.6376842 -0.5236366 -0.8694418 -0.4889675 0.07025361 -0.7339397 -0.6523637 -0.1889706 -0.6005127 -0.7926267 -0.1053498 -0.7000946 -0.704886 0.113712 -0.4380016 -0.8938872 -0.09527873 -0.4823451 -0.8370922 0.2580035 -0.6129643 -0.736137 0.2869656 -0.7902158 -0.5595569 0.2498245 -0.5314798 -0.8408765 0.1019623 -0.3879513 -0.9215369 0.01574754 -0.2724387 -0.9376202 -0.2158879 0.4730369 -0.2467421 -0.8457595 0.6312143 0.7424848 -0.2241584 -0.4153264 -0.9024628 -0.1141087 -0.5039216 -0.8061159 -0.3101291 -0.5930662 -0.7574999 -0.2727744 -0.4879605 -0.8676107 -0.0954619 0.2562944 -0.6323741 -0.7310099 -0.4075136 -0.8337047 -0.3726005 -0.03552353 -0.8621174 -0.5054171 -0.6279183 -0.6883755 -0.3630787 -0.6852016 -0.6456191 -0.3371074 -0.6528519 -0.7206031 -0.233314 -0.7431257 -0.6358227 -0.2084109 0.7349467 0.4958342 0.4625691 -0.9270913 -0.3747978 0.001831054 -0.7984253 -0.540727 -0.264748 -0.9133275 -0.3844417 0.1341593 -0.8175299 -0.530076 -0.2248909 -0.9190955 -0.3936582 0.01608324 -0.9403363 -0.3285928 0.08810693 -0.9169591 -0.3966186 0.04327523 -0.8380078 -0.5358745 -0.1026032 -0.9564196 -0.2689291 0.1135594 -0.9467757 -0.3046358 0.1037629 -0.8219856 0.5552538 0.1263771 -0.7347636 0.6752831 0.06369209 -0.8060244 0.5843074 0.093997 -0.817835 0.5475631 0.1768242 -0.9197974 0.3918271 0.01977598 -0.8297373 0.5580615 -0.007171809 -0.9498581 -0.3108005 -0.03375345 0.05859553 -0.0831629 -0.9947813 -0.8486893 0.2787255 -0.4494766 -0.9767144 0.1978515 -0.08255255 0.122898 0.9589221 0.2556231 0.02877891 0.9462264 0.3221229 -0.5939818 0.7694327 0.2347484 -0.5095065 0.8422803 0.1758781 -0.8010498 0.5906552 -0.09689623 -0.05032497 0.2641987 -0.9631336 -0.1672414 0.1506699 -0.9743034 0.07977539 0.9920347 0.0974456 -0.4353771 0.8984039 -0.05700856 -0.07132172 -0.06396675 -0.9953917 -0.6110721 -0.674459 0.4142583 -0.810419 -0.5197302 0.2703024 -0.8276315 -0.3324686 0.4521622 -0.5345317 -0.5001984 0.6812037 -0.5891599 -0.8032777 0.0871303 0.007507503 -0.1372112 -0.9905087 0.04098635 -0.2873318 -0.9569384 -0.7998291 -0.5995972 0.0267952 0.9964599 -0.01513713 0.08261358 0.9154638 0.3990905 0.05093538 -0.1553087 0.103946 -0.9823603 0.04016232 0.3012482 -0.9526658 -0.05603194 -0.350322 -0.9349346 0.869747 -0.4706259 0.1483199 -0.9962767 0.08206427 0.02591019 -0.9570605 0.2857753 0.04855489 -0.9852901 0.144261 0.09128081 0.7208167 -0.6653341 0.1941282 0.1702933 -0.9576098 0.2323068 0.1348612 -0.7605212 0.6351207 0.7360149 -0.523423 0.4292429 -0.7311319 0.6690268 -0.1333964 0.9969787 -0.02752768 0.07223731 0.9968261 0.06802576 0.04116946 0.9928892 -0.0055238 0.118717 0.9096347 -0.3183691 0.2667012 0.2048707 -0.07498395 -0.9758904 0.1692556 0.03988766 -0.9847407 0.111362 0.230903 -0.9665517 -0.7029634 0.7064425 -0.08206427 0.612537 0.7625965 0.20777 0.6199835 0.7141942 0.324778 -0.1280556 0.1315042 -0.9830012 -0.9486679 -0.2198858 0.2272713 -0.932371 -0.3553575 0.06595045 0.9664297 0.2469558 0.07080292 0.9301736 0.354442 0.09527873 0.8218024 0.5688345 0.03158664 0.2611469 -0.1009247 -0.9599903 -0.9471114 -0.04638808 0.317484 -0.9930418 0.1059297 -0.05124056 0.8794214 0.4094363 0.2427747 0.853206 0.4986114 0.1529588 0.5046541 0.8612323 0.05984675 0.001647949 0.1139866 -0.9934691 -0.8495743 0.5114902 0.128727 -0.9105502 0.4015625 0.09793388 -0.8313242 -0.2365795 0.502884 -0.7474594 -0.3326212 0.5749992 -0.7753533 -0.3509018 0.5250099 -0.7336955 0.2074953 -0.6469924 -0.9767754 0.1116367 -0.1828058 -0.9595324 0.2309336 -0.1609546 -0.7323527 0.3076876 -0.6073794 0.259682 0.1254616 -0.9574877 0.2882168 0.1980041 -0.9368572 0.2108523 0.1844233 -0.9599597 0.1029389 0.200293 -0.9743034 -0.2878201 -0.5150609 0.8073672 -0.2796411 -0.5590991 0.7804804 -0.4618061 -0.5205543 0.7181311 -0.4703818 -0.4553667 0.7558519 0.6412549 0.3882565 -0.6618244 0.2722556 0.2939848 -0.9161962 0.3633534 0.08044677 -0.9281594 0.775811 0.1090426 -0.6214179 -0.5963011 -0.4686422 0.6517228 -0.6729332 -0.405652 0.6185187 -0.5716117 -0.3738212 0.730369 -0.5679495 -0.4046754 0.7166662 -0.7384869 -0.1889401 0.6472365 -0.619892 -0.1636402 0.7674185 -0.5080721 -0.2728049 0.81695 -0.6302073 -0.2936491 0.7187414 0.1563768 0.2471389 -0.956267 0.2347484 0.1670583 -0.9575793 0.1277199 -0.5693534 0.8120976 -0.02880942 -0.5569018 0.8300729 0.2108218 -0.4969024 0.8417921 0.335551 -0.4853664 0.8073366 0.4962005 -0.2744835 0.8236336 0.4810327 -0.3236488 0.8147526 0.09677416 -0.4589068 0.8831751 0.0341807 -0.4422132 0.8962371 -0.4684591 -0.3466902 0.8125858 -0.5145115 -0.3673513 0.7747734 -0.396588 0.2789392 -0.8745689 -0.3427839 0.184637 -0.9210487 -0.2345347 -0.5749687 0.7838069 -0.7243874 -0.4091311 0.554857 -0.2038941 -0.5263527 0.8254342 -0.2067934 -0.5371563 0.817713 0.01309239 -0.4851832 0.8742943 0.4652852 -0.3819696 0.7984558 -0.2713096 -0.5272988 0.8051698 -0.1519516 -0.5200049 0.8405103 0.4834437 -0.3060091 0.8201239 0.7526475 -0.159093 0.6388745 0.7369304 -0.1468856 0.6597797 0.7869503 -0.3192846 0.5279702 0.5082553 -0.3888058 0.768395 0.6765343 -0.3020417 0.6715598 0.746025 -0.2906583 0.5990784 0.4020814 -0.08899194 -0.9112522 0.8514969 -0.06762897 -0.5199133 -0.3845027 -0.5550096 0.7376019 0.593463 -0.2790002 0.7549364 0.7949461 -0.1986755 0.5731986 0.9992981 0.0361644 0.008362054 0.9642629 0.2443311 -0.1023591 0.8835108 0.2742698 -0.3796502 0.9728996 0.02447581 0.2298654 0.9893491 -0.1117588 0.09311193 0.83755 -0.04690694 -0.5442976 0.7624439 -0.2495193 -0.5969726 0.9730522 -0.1984313 -0.1173437 0.1177404 -0.4381847 0.89111 0.9201941 -0.1266518 0.3704031 0.8547319 -0.1131016 0.5065767 -0.0147404 0.1526231 -0.9881588 0.1184728 0.05230867 -0.9915464 0.1774956 -0.005249142 -0.9840999 -0.03335672 0.1186864 -0.9923399 -0.04922634 0.2145451 -0.9754631 -0.0572527 -0.001068115 -0.998352 -0.09381389 -0.01971495 -0.9953917 0.2258675 0.009308099 -0.9740898 0.3175145 0.3235267 -0.8913236 0.8155462 -0.1951048 0.5447554 0.9360332 -0.09375286 0.3391522 0.8010804 -0.1050142 0.5892209 0.8407544 -0.1600695 0.5171362 0.9502549 -0.1540574 0.2705771 -0.8041933 0.3083896 -0.5080416 -0.859798 0.2259895 -0.4578387 -0.5718559 0.1985534 -0.7959228 -0.5160375 0.2990509 -0.8026368 0.02945035 -0.01049834 -0.9994812 -0.9294717 0.1084322 0.3525498 -0.9553819 0.259682 -0.1405682 -0.9300821 0.04226809 0.3648183 0.7337566 -0.1980041 0.6498612 0.7002778 -0.2565386 0.666158 -0.09100615 -0.1258888 -0.9878537 -0.09308141 -0.05926692 -0.9938658 -0.7223426 -0.08917504 0.6857204 -0.82284 -0.08706927 0.5615406 -0.4420911 -0.4459059 0.7782525 0.4258248 0.5309 -0.7326273 0.08255255 0.3737907 -0.9237953 0.8088931 -0.1329386 0.5726798 0.9403668 0.03640854 0.3381146 -0.2017273 0.2602924 -0.9442121 -0.3023469 0.1878414 -0.9344767 0.9260537 0.04376351 0.3748283 0.8904691 0.4030579 -0.211066 -0.739494 -0.1068148 0.6646016 -0.7078768 -0.1647084 0.6868191 -0.07528913 0.2251656 -0.9714041 -0.02362132 0.1418195 -0.9895932 0.002410948 -0.2877895 -0.9576708 0.3109531 -0.2393566 -0.9197669 -0.6943572 0.03921627 -0.7185278 -0.353679 -0.02487254 -0.9350261 -0.9345683 -0.02764976 0.3546251 -0.9475997 -0.09866631 0.3037812 -0.274636 -0.4829249 0.8314463 -0.9832758 0.001342773 -0.1820124 -0.9739983 0.1112399 0.1973326 -0.9768059 0.1990722 -0.07873773 0.888638 0.04525893 -0.4563127 0.4621418 -0.03833121 -0.8859524 0.3976867 0.7825251 -0.478988 0.8297983 0.3430891 -0.4400769 0.4092532 0.2156133 -0.8865627 0.1950438 0.4451125 -0.8739585 -0.194647 0.5806757 -0.7904905 -0.2057253 0.9293192 -0.3066195 0.1440778 -0.0521866 -0.9881588 0.1100803 0.1076083 -0.9880673 0.03213596 0.217719 -0.9754631 -0.1414838 0.2446364 -0.9592273 -0.7222816 0.4328135 -0.5394147 -0.4823756 0.2509842 -0.839198 -0.6740623 0.2104251 -0.7080295 -0.8779565 0.3168432 -0.3587756 -0.06872767 0.01367229 -0.997528 -0.1090731 0.101474 -0.9888302 0.9931944 0.06277656 -0.09793388 -0.8209174 0.1582079 -0.5486618 -0.9761345 0.1948912 -0.09576708 -0.6565142 0.7363811 0.163274 -0.9771111 0.1800592 0.1131321 -0.8373059 0.5326701 -0.1230811 -0.6285898 0.7402875 -0.2383495 -0.4635151 0.5050203 -0.7280496 -0.9697256 0.2371288 0.0577715 -0.3114414 0.247444 -0.9174475 -0.9377422 0.3472091 -0.007263362 -0.9608753 0.2175664 -0.1713004 -0.7562487 0.1544846 -0.6357616 -0.5082553 0.107242 -0.8544572 -0.4167608 0.117069 -0.9014253 -0.2601093 0.1180761 -0.9583117 -0.2770165 0.0707724 -0.9582202 0.9936217 0.1009857 0.04953151 0.9100925 0.4085513 0.06891077 0.5524156 0.8236336 0.1282082 -0.155797 0.9775078 0.1420636 0.3522751 0.07095551 0.933195 0.1371502 -0.3723258 0.9178747 -0.03863638 -0.3566393 0.9334086 0.03241062 0.0439161 0.9985046 0.4016236 -0.04678487 0.9145787 0.01284825 -0.07721179 0.9969176 0.3831294 -0.1998047 0.9017915 -0.002929747 -0.1169469 0.9931028 -0.4310739 -0.01477092 0.9021577 -0.4513382 -0.05691701 0.8904996 -0.3807184 -0.2032837 0.9020356 0.07028412 -0.2567827 0.9638966 0.4091922 -0.2172307 0.8861965 -0.4011963 -0.5578173 0.7265236 -0.4379711 -0.7340922 0.5188757 0.04849386 -0.8251289 0.5627918 0.05420082 -0.6418653 0.7648854 0.4717246 -0.5007477 0.7257302 0.4496292 -0.6552324 0.6070132 -0.3149815 0.06076234 0.9471114 0.4380016 -0.214484 0.872982 -0.7206031 -0.05035549 0.6914884 -0.6207465 -0.1118503 0.7759636 -0.7691275 -0.29429 0.567278 -0.6790063 -0.3457137 0.6476028 -0.3537095 -0.244026 0.9029511 -0.5793634 -0.0678426 0.8122196 0.5967285 -0.2865383 0.7495041 -0.6823633 -0.1486862 0.7156895 -0.796411 -0.08923608 0.5981017 -0.935667 -0.05236971 0.3488876 -0.9457686 -0.09164708 0.3116245 0.5374004 -0.3272805 0.7772149 0.6283456 -0.3646046 0.6871853 0.6121097 -0.4381847 0.6582232 -0.832728 -0.2743003 0.4809107 -0.5188757 -0.6510208 0.553972 -0.4578081 -0.6722007 0.5818049 -0.3747978 -0.6704306 0.6403089 -0.4577776 -0.6428114 0.6141545 -0.4430067 -0.7314066 0.5184179 -0.461623 -0.6416517 0.6125065 -0.3557848 -0.8615986 0.3619495 -0.2932829 -0.7417524 0.6031373 0.378399 -0.6644185 0.6444289 0.2702414 -0.6871548 0.674337 0.1087985 -0.7843257 0.6107059 0.1568041 -0.7906125 0.5918455 -0.3634449 -0.6841945 0.632252 -0.3142186 -0.7472763 0.5854671 -0.3810236 -0.6630756 0.6442763 -0.06176942 -0.7599414 0.6470229 -0.02063047 -0.6717124 0.7405011 -0.2537614 -0.7257912 0.6393628 -0.02380442 -0.7342448 0.678457 -0.04516738 -0.7849971 0.6178167 -0.06393623 -0.7806635 0.621662 -0.06891077 -0.6931974 0.7173986 0.3067721 -0.7494431 0.5866573 0.2652059 -0.7756584 0.5726798 0.3680532 -0.6923734 0.6205939 0.41789 -0.6807154 0.6016114 -0.5946531 -0.6243172 0.5065157 -0.5594043 -0.5401166 0.6287118 -0.4908597 -0.7421491 0.4562822 -0.5948058 -0.6466567 0.4774621 -0.6023133 -0.5723136 0.556444 -0.5162816 -0.5908078 0.619953 -0.4508194 -0.6896268 0.5666677 -0.4893948 -0.7330241 0.472335 -0.3140965 -0.7889645 0.5280312 -0.3424787 -0.7926267 0.5043794 -0.531663 -0.6697287 0.5184179 -0.5601062 -0.7093417 0.4278695 -0.5912046 -0.6384472 0.4927824 -0.3789789 -0.6635945 0.6449477 0.4823451 -0.6028932 0.6354564 0.2657857 -0.6385388 0.7222205 0.1682485 -0.7600024 0.6277352 0.2655416 -0.7621998 0.5903195 -0.5244606 -0.8506425 -0.03625595 -0.543962 -0.6939299 0.4717246 0.2410047 -0.5101779 0.8255867 0.2134159 -0.4488357 0.8677328 0.2536088 -0.5542467 0.7927488 0.4315623 -0.5155492 0.7402265 0.07995849 -0.7712943 0.6313974 0.3929258 -0.6210822 0.6781213 -0.4298532 -0.6577349 0.6185187 0.4306772 -0.7360149 0.5222327 0.2370067 -0.9219337 0.3063448 -0.2058779 -0.8062075 0.5546129 -0.1479842 -0.7614368 0.6310923 -0.4952543 -0.6519364 0.5741447 -0.1962035 -0.6003906 0.7752312 -0.1750541 -0.6566973 0.7335124 0.4054079 -0.671041 0.6207465 0.3372905 -0.8015686 0.4936063 0.2821741 -0.7627797 0.5818049 -0.150853 -0.5435652 0.8256478 -0.1333048 -0.6772668 0.7235328 -0.08386486 -0.8313242 0.5493637 -0.4590289 -0.7941222 0.398236 -0.4908902 -0.7203284 0.4899747 -0.1272011 -0.7501145 0.6489151 -0.04226809 -0.8471023 0.5296792 0.1512497 -0.9880978 0.02786338 0.1066927 -0.9888607 -0.1037019 -0.1167943 -0.9927671 -0.02764976 -0.1750541 -0.9838252 0.03735464 0.3570361 -0.7359539 0.5752129 0.3987548 -0.6564531 0.6403394 0.5900449 -0.7229225 0.359447 0.5811335 -0.7178869 0.3832514 -0.5741142 -0.7998291 -0.1750541 -0.3914304 -0.887814 -0.2419812 -0.4645223 -0.8855251 0.006958186 -0.6461379 -0.760094 0.06866663 0.401532 -0.9145177 0.04873806 0.4126713 -0.9085055 0.06527906 0.1343424 -0.9849849 -0.1081271 -0.6548662 -0.7093112 0.2607501 -0.6057619 -0.7390972 0.2945036 -0.5097202 -0.7201453 0.470687 0.2525407 -0.9522996 0.1711783 -0.1339152 -0.9865108 0.09381389 0.4435255 -0.7986694 0.4066286 -0.519364 -0.8348643 0.182287 0.2974029 -0.6738182 0.6763512 -0.3846858 -0.9230324 0.002868711 -0.0916776 -0.9677419 -0.2345957 -0.1148106 -0.9261757 -0.3591113 -0.1941282 -0.8470413 0.4947661 -0.6846218 -0.7036653 0.1899472 -0.1698049 -0.7402875 0.6504715 -0.8021485 -0.5683157 0.1831721 -0.8367565 -0.500351 0.2223273 -0.7990967 -0.4731284 0.3708915 -0.6547746 -0.662923 0.3629872 -0.490585 -0.7079073 0.5080721 -0.5182653 -0.5346843 0.6674398 -0.2142399 -0.5164037 0.8290963 -0.1933347 -0.7216407 0.6646931 -0.4427015 -0.8111515 -0.3820612 -0.5966063 -0.7836238 -0.173101 -0.7900021 -0.6123539 0.02929776 -0.7376324 -0.6615498 -0.1348918 -0.4882962 -0.6914884 0.5323344 -0.5263222 -0.621662 0.5800653 -0.7464827 -0.6338084 0.2024598 -0.3186743 -0.9065828 0.2766197 -0.5729545 -0.8090762 0.1305887 -0.06994843 -0.74926 0.6585589 -0.1453291 -0.6548662 0.7415998 -0.08832055 -0.9672231 -0.2380138 -0.155858 -0.9809564 -0.1156651 -0.7852107 -0.6189154 0.01922661 -0.2026124 -0.9792474 0.002777159 -0.5745415 -0.8120365 -0.1023285 -0.1304361 -0.9889218 -0.07061982 -0.4207892 -0.8907437 -0.1717276 0.1216773 -0.7047029 0.6989654 0.2437818 -0.8467971 0.4727317 -0.02099668 -0.7727287 0.6343578 0.2616962 -0.746849 0.6112858 -0.7623218 -0.6044496 0.2312082 0.2529069 -0.9287698 0.2708823 -0.437727 -0.7603381 0.479812 -0.486343 -0.1148411 0.8661763 -0.9361858 0.07953119 0.3423261 -0.9394513 0.03546249 0.3408002 -0.5226295 -0.227485 0.8216193 -0.315714 -0.5294656 0.7873775 -0.2742698 -0.4473098 0.8512528 -0.1842402 -0.4967803 0.8480789 0.3128452 -0.2620319 0.9129307 0.2500076 -0.1938841 0.9486069 0.7035432 -0.1110263 0.7018952 0.6902066 -0.1843013 0.6997284 0.4324167 -0.08862572 -0.8972747 0.3383282 0.2028565 -0.9188818 -0.1586657 0.177221 -0.9712821 -0.07861566 -0.06683552 -0.9946593 -0.09619432 -0.9063387 0.4113895 0.1478316 -0.9808649 -0.1264687 -0.7036958 -0.5715812 -0.4219794 -0.8899198 -0.2810145 0.3592334 0.1807611 -0.2643513 0.9473251 -0.9613025 0.1885128 -0.2008423 -0.3391522 -0.3018891 0.8909574 -0.711478 0.2626423 -0.6517533 -0.6830043 0.02087461 -0.7300943 0.8702659 -0.05322426 0.4896389 0.9863277 -0.02343821 0.1629993 0.9575793 -0.03781241 -0.2855922 0.03540146 -0.309244 -0.9503159 -0.1610462 -0.4277169 -0.8894314 0.737022 -0.06530958 -0.6726585 0.9141514 0.1621143 -0.3715323 0.6627094 0.203711 -0.7206031 0.1626026 -0.7737663 -0.6122013 0.03726309 -0.4630268 -0.8855251 0.873043 -0.02883994 0.4867702 0.9915464 0.0745567 0.1059603 0.6522416 -0.1454207 0.7438887 0.9968566 -0.006805598 0.0788598 0.912656 0.07504498 -0.4017151 -0.9494308 0.2613911 -0.1738639 -0.531724 -0.5542467 0.6403394 -0.6101871 -0.5760064 0.5439009 0.6263619 0.1689504 -0.7609791 0.7185583 -0.4832606 0.5000763 0.4527726 -0.7804499 0.4311044 0.5039827 -0.8635517 -0.01580858 0.7842037 -0.6012452 0.1532639 -0.9535508 -0.1807306 -0.2409131 -0.5051424 -0.3961913 -0.766686 -0.5508591 -0.7139195 -0.4322642 -0.8867458 -0.3898129 -0.2483291 -0.5544603 -0.71807 0.4206061 -0.02728354 -0.8492081 -0.5273293 0.01019316 -0.998413 -0.05508589 -0.5464339 -0.8335521 0.0808435 -0.01565599 -0.56798 0.8228706 0.271218 -0.4518876 0.8498184 -0.1398968 0.2113712 -0.9673147 -0.6309092 0.268807 -0.7277749 -0.49382 -0.3259987 0.8061159 -0.5074923 -0.3380841 0.7925047 0.08645892 -0.395703 0.9142735 0.7498703 -0.3138523 0.5823542 -0.9022187 -0.3655507 0.2287667 0.9679251 -0.2439344 -0.06006038 0.9155553 -0.3845027 -0.1177709 0.8181097 -0.3080843 -0.4855495 0.8470718 -0.2093265 -0.4884487 0.6076235 -0.3690909 -0.7032075 0.5581836 -0.1849116 -0.8088321 0.02511668 -0.9240394 0.3814203 -0.5596485 -0.1578417 -0.8135319 -0.9620655 -0.05966365 -0.2661824 -0.06054872 -0.01553392 -0.9980163 -0.6012147 0.04449594 -0.7978149 -0.02798545 -0.4415113 -0.8967864 0.3069857 -0.4185308 -0.8547014 0.4018983 -0.7286294 -0.5545518 -0.9337138 0.2677084 -0.2376171 0.8471023 -0.2398754 0.4741356 0.8819544 -0.3498032 0.315836 0.4925077 -0.2982574 0.8175604 -0.02261418 -0.1843013 -0.9826045 -0.9446395 0.03146457 0.326548 0.9871822 -0.1582079 0.02023375 0.8810389 -0.110477 -0.4598834 0.5467696 -0.299234 0.7819452 0.5938902 -0.06195253 -0.8021485 -0.9598681 0.1030915 -0.2607196 -0.9293802 -0.05224764 0.3653371 0.2926115 0.173986 -0.9402447 0.288522 -0.02591019 -0.957091 0.8397473 -0.215186 0.4984588 0.2660604 -0.1799371 -0.9469894 0.8580584 -0.1428877 0.4932401 0.7500229 -0.5984374 -0.2815943 0.9733878 -0.1567431 0.1669973 0.9465926 -0.2213507 0.2343821 0.9998474 -9.46074e-4 -0.01641893 0.9956664 -0.001800537 -0.09274572 0.9031342 0.1366618 -0.4069948 0.9221473 0.223365 -0.315775 -0.1719107 -0.2487564 -0.9531846 -0.1395001 -0.1136509 -0.9836726 -0.05395668 -0.3270363 -0.9434492 -0.07962274 -0.1423078 -0.9866024 -0.2524491 -0.4454787 0.8589435 -0.3942686 -0.5277871 0.7522813 -0.04800558 -0.7257302 0.6863002 0.1116367 -0.3092746 0.9443648 -0.6671347 -0.07263404 0.7413557 0.4085818 -0.8316904 0.3758965 0.3971374 -0.8840297 -0.2464064 -0.7544786 -0.5742668 -0.3176977 -0.9019135 -0.3377178 0.2691428 -0.6876431 -0.6568804 0.3092135 0.1255226 -0.6000244 0.7900326 0.02777183 -0.8880276 0.4589374 -0.9644765 -0.1215247 -0.2344431 -0.6068606 -0.3505051 -0.7133091 -0.5560168 -0.5673086 -0.6074099 -0.9577929 -0.01461833 -0.2869961 0.04751729 -0.4556413 -0.8888821 -0.01647996 -0.1227454 -0.9922788 0.2461012 -0.7475509 -0.6169012 -0.4575945 -0.5044404 -0.7322001 0.03820914 -0.716422 -0.696585 0.05298012 -0.6227912 -0.7805414 0.3236182 -0.7228309 -0.6105228 0.1425519 -0.7248756 -0.6739403 -0.1903439 -0.4809107 -0.8558306 -0.02926725 -0.7089755 -0.7045809 0.2782983 -0.8894009 -0.3626209 -0.9607227 0.2235175 0.1644337 0.7266762 -0.6868496 -0.010773 0.791467 -0.5658132 0.2310251 0.8127384 -0.4904935 -0.3143712 0.8995331 -0.07348853 -0.4305551 0.666036 -0.2044129 -0.7173376 0.6910306 0.2361522 -0.6831263 -0.2055116 0.3473312 -0.9149144 -0.7171239 0.2315134 -0.6573382 -0.6118351 -0.2068239 -0.7634205 -0.07989746 -0.3040559 -0.9492782 0.980224 -0.1292154 0.1497543 0.9916074 -0.04196292 0.1221045 0.9906308 -0.008087396 -0.136143 0.9650258 -0.2359996 -0.1138951 -0.9814447 -0.06369209 0.1807916 -0.9444258 -0.0152592 -0.3282876 -0.9822993 0.0916776 -0.163274 -0.9795526 -0.04535049 0.1959899 -0.9452498 0.1354717 0.2967925 0.7357708 -0.276162 0.618305 0.3168126 -0.02539139 0.9481185 0.3382366 -0.1081271 0.9348125 0.839198 -0.1010468 0.5343486 -0.5651723 0.2082888 0.7982116 -0.5141453 0.008697748 0.8576312 0.2112491 -0.266274 0.9404278 0.8050478 -0.1608936 0.5709403 -0.5513474 -0.2364574 0.8000428 0.3464461 -0.3165685 -0.8830226 0.3249611 0.3227638 -0.8889126 -0.7770013 -0.4647359 0.4245735 -0.5476546 -0.7086398 0.4448072 -0.1433759 -0.889523 0.4337291 -0.09421062 -0.8823207 0.4610736 -0.6952422 -0.6400952 0.3269448 0.3885617 -0.3773919 -0.8405713 0.8331553 -0.4375439 -0.3381756 0.4239021 -0.9036836 -0.06033504 0.2164067 -0.8662068 -0.4503311 0.4389172 -0.8344371 0.3331705 0.4168523 -0.7724235 0.4791101 -0.1017487 -0.9898374 0.0992462 0.7293313 -0.5297403 0.4328745 0.8176214 -0.5287637 0.2277596 -0.6417738 -0.7668386 -0.008758783 -0.1110263 -0.8526872 -0.5104221 -0.9044771 -0.2054811 0.3737297 -0.9936217 0.07345801 0.08536022 -0.95291 -0.2327342 0.1943418 -0.9163793 0.2232429 -0.3322245 -0.9475387 -0.1940672 -0.2538835 0.9887387 -0.1184423 0.0912503 0.9502549 0.05395668 -0.3067415 0.5718864 -0.5624867 0.5970641 0.5550096 -0.6143376 0.5607776 0.8820765 -0.3321024 0.3340556 0.3099765 -0.7266762 0.6130253 0.1885433 -0.8875698 0.4203009 -0.554857 -0.2521439 -0.7927793 -0.4663839 -0.7358928 -0.4908292 0.3391827 -0.7571032 0.5583056 -0.4563432 0.2963652 -0.8389539 0.5732902 0.2142704 -0.7907956 0.05978572 -0.492996 0.8679464 0.7191687 -0.3750115 0.5849177 -0.05664235 -0.3683279 -0.9279458 -0.8002564 0.4185919 -0.4293344 -0.979461 0.2009338 -0.01660203 -0.6552935 -0.3352153 0.6768701 -0.9600818 -0.04675436 0.2757652 0.01293981 -0.6392407 0.7688834 0.6557818 -0.5005646 0.5651112 0.07977539 0.3011566 -0.9502243 -0.6678366 -0.4211859 0.6136052 -0.009186029 -0.654561 0.755913 0.2197332 0.583697 -0.7816401 -0.3385418 0.5727103 -0.7465438 0.9255654 -0.350444 0.1430402 0.7532274 -0.6186102 0.223365 0.6823328 -0.6972259 -0.2196417 0.9039583 -0.2509842 -0.3461409 0.6685385 0.4307993 -0.6061281 0.01739555 -0.665212 0.7464217 0.4034852 -0.6856594 0.6058229 -0.0595721 -0.9234291 0.3790399 -0.1209448 -0.9401532 0.3185217 0.4498123 -0.6534318 0.6088138 -0.06637775 -0.8858913 0.4590594 0.9499191 -0.3112583 -0.02734458 0.6355785 -0.6157109 -0.4657124 -0.3588061 -0.3825801 -0.8513749 -0.782342 -0.1995605 -0.5899533 -0.6720786 -0.4931791 -0.552324 -0.1953489 -0.2927641 -0.9360027 -0.2970367 -0.4068728 -0.8638264 -0.7580187 -0.1501815 -0.6346629 0.2605975 -0.5746025 -0.775811 0.811945 -0.3752556 -0.4470657 0.3698843 -0.5092319 -0.7770318 0.7368389 -0.06265449 0.6731163 0.9586169 -0.1310464 0.2526627 0.5634938 -0.4719687 0.6779992 -0.0217902 -0.06894129 -0.9973754 -0.04257327 -0.2819605 -0.9584643 -0.4007385 -0.3807795 0.8332774 -0.3257241 -0.3581957 0.8749657 -0.5628529 -0.4713584 0.6789453 -0.08633685 -0.7744988 0.6266366 0.1076693 -0.3112888 0.9441816 -0.5710013 -0.1252785 0.811304 0.3395795 -0.03277683 0.9399701 -0.8937041 -0.4176458 -0.1637928 0.2021851 -0.9602039 -0.1926633 -0.1854915 -0.7279886 -0.6599628 0.9804682 -0.1599169 -0.1142308 0.1593066 -0.8828089 0.441847 -0.7298502 -0.5991394 0.3290506 0.5501877 -0.609241 -0.5710318 0.976867 -0.1942808 -0.08908349 0.9953307 -0.00225836 -0.09619432 0.8471023 -0.1868648 -0.4974212 0.3350322 -0.7571032 0.5608081 -0.9334086 -0.2496109 0.2576678 0.9620655 -0.02020323 0.272042 0.9576098 -0.02426218 0.2869656 -0.02365183 -0.4743797 -0.8799707 0.004699826 -0.5081027 -0.8612629 -0.9889218 0.04306161 -0.1419416 -0.9611194 0.145085 0.2348094 -0.3627735 0.07220679 0.9290445 -0.1308023 -0.4007996 -0.9067659 0.04406869 -0.02368235 -0.9987182 -0.9788202 0.08935815 -0.1841182 0.9808039 -0.005005002 0.1948912 0.1897641 9.15555e-5 0.981811 -0.001831054 -0.25898 0.9658803 0.6543169 -0.1540879 0.740318 0.7034211 0.08871728 0.7051607 -0.9343852 0.05761891 0.3515427 -0.9838863 0.02166813 -0.1773125 -0.9494308 -0.1038545 0.2961821 -0.9938963 0.08532971 -0.06976526 -0.9444869 -0.1274148 0.3027436 -0.783227 0.06741535 -0.6180608 -0.835078 0.3641774 -0.4122745 0.9617298 -0.06686604 0.2656942 0.9402447 -0.1541795 0.3035371 0.9920957 0.1156041 -0.04849386 0.9915464 -0.0117191 -0.1291238 0.9262062 0.03930783 -0.3749199 0.6898404 0.1701712 -0.7036653 0.5598316 -0.4433119 0.700003 -0.6167791 -0.2343211 0.7514268 -0.6646016 -0.3617359 0.6537675 -0.4863735 -0.06381416 0.871395 -0.4314707 0.5656606 -0.7027192 -0.328898 0.07501447 -0.9413434 0.1147801 0.1539964 -0.9813532 0.1243324 0.6201362 -0.7745598 -0.91995 0.2248298 -0.3211157 -0.9959411 0.07791376 0.04458749 -0.9335307 -0.1529588 0.3241676 -0.989288 -0.06698811 0.1296426 -0.848323 -0.3353068 0.4096805 0.1284524 0.3612171 -0.9235512 -0.01413005 -0.05960261 -0.9981079 -0.5814997 0.006469905 -0.8135014 -0.5613574 0.3389691 -0.7549364 -0.9535203 0.006744563 -0.3011566 0.9225745 0.2751549 -0.2703329 0.9955443 -0.06320381 0.06973475 0.943022 0.130253 -0.3061006 0.8493607 -0.3532212 0.3921018 -0.7489547 -0.5070956 0.4264351 -0.1478927 -0.9840083 0.09903252 -0.6432081 -0.4348582 -0.6301767 -0.5142064 -0.7705314 -0.3765984 -0.7224952 -0.6913663 -0.00112915 -0.924192 -0.3291726 -0.1935178 0.710593 -0.5489364 0.4401074 0.6004822 -0.6232795 0.5009003 -0.8829005 -0.4028138 0.2411878 -0.173223 -0.5543077 -0.8140507 -0.1614124 -0.8931852 -0.4196906 -0.5939818 -0.6723838 0.4416334 0.3160497 -0.6156194 -0.7218543 0.3491318 -0.9306314 -0.1095309 0.1839351 -0.8551287 -0.4846644 -0.6172369 -0.7255775 0.3041169 0.6655782 0.2671896 -0.6968291 0.5558642 -0.1938841 -0.8083133 -0.2014527 -0.9778131 0.05728322 -0.6294748 -0.4549089 0.6299021 0.6803186 0.4577776 -0.5723136 0.3964354 -0.8865322 0.2384411 0.4107181 -0.8104801 0.4175543 -0.216834 -0.9281899 0.3023164 -0.1443525 -0.6363109 0.7577746 -0.1077303 -0.815363 0.568804 0.4290292 -0.587695 0.685934 -0.1158177 -0.5258949 0.842616 -0.2763451 -0.845027 0.4576861 -0.1387371 -0.8882718 0.437788 0.9606922 -0.2771996 -0.01492351 0.7836543 -0.5667898 -0.2540971 0.6296884 -0.3805048 -0.6772363 0.8460341 -0.02914518 -0.5322734 -0.136021 -0.9827876 0.1248207 0.8582415 -0.4031495 0.3175756 0.730369 -0.6767174 0.09244054 -0.2053285 -0.3488876 -0.9143651 -0.03646957 -0.002868711 -0.9993286 -0.5063631 -0.3110752 0.8042238 -0.4518265 -0.3152257 0.8345286 -0.3825801 -0.3150426 0.8685263 -0.2280648 -0.2955412 0.9276711 0.003662168 -0.4119083 -0.9111912 -0.3085727 -0.3896298 -0.8677023 -0.3928343 -0.7759636 -0.4934843 0.566393 -0.7245705 -0.3926512 -0.6474196 -0.7590869 -0.06756794 0.6621906 -0.7491989 -0.01330602 -0.6868496 -0.5271767 0.5002899 -0.1412397 -0.6331065 0.7610401 0.1991637 -0.817072 0.5409711 -0.8276925 -0.4917448 0.2703024 -0.1751152 -0.2013916 -0.9637135 -0.1999267 -0.1915951 -0.9608753 -0.6934721 -0.1358989 0.7075106 -0.3436689 -0.24485 -0.9065828 0.1942808 -0.3403729 -0.9199805 0.6028016 0.4567705 -0.6541643 -0.01879936 0.5946837 -0.8037049 -0.6288034 -0.07336646 -0.7740715 -0.556444 0.4537797 -0.6960051 -0.5335551 -0.5480819 -0.6441237 -0.3734245 -0.5747246 -0.7281411 -0.1283913 -0.6421705 -0.7556993 0.7532884 -0.1026337 0.6495865 0.07843255 -0.1939146 0.9778436 0.006836116 -0.2005066 0.9796442 0.6459243 -0.1234779 0.7533189 0.9954223 0.09280675 0.02148503 0.9117405 0.2540056 -0.3227332 -0.7825251 0.05178987 -0.6204108 -0.776574 -0.3660695 -0.512711 -0.6888638 -0.0464186 0.7233802 -0.9713736 0.05661183 0.2305673 -0.9670095 -0.03927731 0.2516251 -0.6214484 -0.1770684 0.7631459 -0.02285832 -0.345378 0.9381695 -0.9851985 -0.04818868 -0.1643422 0.7470932 -0.3833735 0.5429853 -0.9498886 0.06323432 -0.3060701 0.2785119 -0.1677602 -0.9456465 0.3016144 -0.6102176 -0.7325358 0.1834467 -0.4224677 -0.8876003 -0.09494304 -0.298471 0.949675 -0.14597 -0.4603717 0.8756065 0.5571764 -0.4046449 0.7250893 0.6400037 -0.2206793 0.7359539 0.3455001 -0.8824427 -0.3191931 0.4299753 -0.7554552 -0.4943388 0.3250526 -0.9397259 -0.1059603 -0.1580553 -0.9091769 -0.3851436 -0.6419874 -0.22837 0.7318644 -0.5862606 -0.3729057 0.7191687 -0.1398968 0.3562731 -0.9238258 -0.1728873 0.1458479 -0.9740593 -0.6514176 0.1040376 -0.7515183 -0.6427809 0.3048494 -0.7027497 0.9048738 -0.274514 0.3252052 0.9891354 -0.04361093 0.1403546 0.6709495 -0.6720481 0.3132725 -0.1701406 -0.7000641 0.6934721 0.5288553 -0.6142766 0.5855892 -0.5470443 -0.5849788 0.5987427 0.8989227 0.2192144 -0.3792535 -0.859859 -0.5096286 -0.02948087 -0.7051302 -0.6551713 -0.2710654 -0.6199225 -0.7286905 -0.290994 -0.7540513 -0.6443983 0.1268959 -0.9522996 -0.05127108 0.3007904 -0.9526353 0.1620227 -0.2573015 -0.9747307 0.1509445 -0.1646474 -0.9244972 -0.1609546 0.3455001 -0.7908567 0.314005 -0.5252541 -0.8610187 0.3570361 -0.3621021 0.9532456 -0.07248145 0.2932829 -0.8992584 -0.3698538 -0.2334055 -0.7028108 -0.5544908 -0.4456008 -0.9123814 0.1834772 -0.3658559 -0.9946287 0.02374339 -0.1005585 0.3923765 0.1163365 -0.9123814 -0.1326639 -0.1037629 -0.9856868 -0.147557 -0.4273507 -0.891934 -0.5070956 -0.3238624 -0.7986999 -0.6009095 -0.0788598 -0.7954039 -0.9065523 -0.3120518 0.2841578 -0.8792383 -0.4448989 0.1702322 -0.5360576 -0.7348552 0.4154179 -0.9087191 -0.008178949 -0.4172796 -0.1248207 -0.6519059 -0.7479476 -0.6532182 -0.4153264 -0.6330454 -0.1685842 -0.7658315 -0.6205329 -0.1612293 -0.8380688 -0.5211646 0.8848537 0.3907285 -0.2535783 0.4272897 0.6061891 -0.6707358 0.4884793 -0.7039399 0.5155492 -0.5743584 0.5588549 -0.5981323 0.9422284 -0.112186 0.3155919 -0.1174657 -0.8182318 0.5627308 -0.9739677 -0.163274 -0.1570482 0.9848933 0.04440438 0.1672414 -0.8647725 -0.1875667 -0.4657735 0.3997314 0.37257 -0.8374584 0.8815882 -0.164922 0.4422437 0.752678 -0.3387249 0.5645314 0.6910611 -0.5841548 0.4256417 0.8157598 -0.5095065 0.273629 0.9332866 -0.3583178 -0.0237739 0.9863582 -0.02932828 0.1618396 -0.07242041 0.6482437 -0.7579577 -0.7450789 -0.1283913 -0.6544694 -0.954558 -0.1703543 -0.2444227 -0.9335612 -0.2389904 0.2670369 -0.7560656 -0.2392651 0.60918 -0.1535386 -0.2090823 -0.9657582 -0.7077547 -0.1368144 -0.6930449 -0.4042482 -0.1474349 -0.9026765 -0.3551439 -0.1514023 -0.9224525 -0.4630879 -0.2613911 0.8468582 -0.4360179 -0.2110354 0.8748131 0.02423167 0.1300699 -0.9911801 0.7841426 0.1177709 -0.6092715 -0.3037507 0.1710562 -0.937254 -0.3328654 -0.4044618 0.8518021 -0.3710135 -0.3959776 0.8399609 0.355327 -0.3281655 0.8752098 0.3630482 -0.4725791 0.803003 -0.7874081 -0.1816766 0.5890073 -0.2787255 -0.2663655 0.9226661 -0.6505936 0.07803583 -0.7553942 0.9801325 -0.06921595 0.1858272 0.9963378 0.05502486 -0.06540113 0.870449 -0.2390515 0.4302805 -0.9594104 -0.1666921 -0.2273934 -0.9583423 -0.1644948 0.2334361 -0.9880978 -0.06311225 0.1400799 -0.8272653 -0.1808221 0.5318461 0.8454238 -0.1333659 0.5171056 0.2503128 -0.4474319 0.8585467 -0.9630421 -0.0313425 -0.2674947 0.8325755 0.1586047 -0.5306559 0.8401135 -0.1676687 -0.5157933 0.5299539 -0.165746 -0.8316294 0.4659566 0.1900388 -0.8641316 0.3057954 0.395703 -0.8659322 0.1698355 0.5613574 -0.8099308 0.7504196 0.4947966 -0.4382153 0.7925047 0.3984192 -0.4617145 0.4682455 -0.8835414 -0.008331537 0.3538926 -0.9312418 0.08655047 0.06674396 -0.9094516 -0.4103824 0.1735892 -0.8265938 -0.5352947 -0.3426008 -0.752739 -0.5620899 -0.2047486 -0.6761376 -0.7077242 0.5695975 -0.8094119 -0.142735 0.9531236 0.138554 0.268868 -0.9319742 0.04504531 -0.3596606 -0.6006043 0.2941069 -0.7434614 -0.5931883 0.1835078 -0.7838374 -0.9012421 0.01187169 -0.4330881 -0.8346507 -0.2901394 0.4680929 -0.9897763 -0.1337016 0.04956203 -0.9879757 -0.1540574 -0.01113921 -0.8415784 -0.3531297 0.4086734 0.2267525 -0.4248481 0.8764001 0.8147221 -0.1592456 0.5575121 0.1639149 -0.5837886 0.7951598 0.4829859 -0.7381817 0.4709006 0.2990814 -0.6817225 -0.6676229 0.6453139 -0.6667379 -0.3728141 -0.007599055 -0.6089053 -0.7931761 0.9057894 -0.006561458 0.4236274 0.4309518 -0.531724 -0.7290567 0.6526078 -0.4817652 -0.5847651 0.1751762 -0.2496109 -0.9523301 0.2393872 -0.5719779 -0.7845088 -0.2509537 -0.3581042 -0.8992889 0.03671371 0.1144749 -0.9927366 -0.1766716 0.291818 -0.9400006 -0.2815638 0.4464247 -0.8493301 0.9429914 -0.005706906 0.3326823 -0.802881 -0.4816126 0.3512681 -0.4475539 -0.6277657 0.6368297 -0.4307077 -0.4762719 0.7665334 0.9655141 0.2091738 0.154973 -0.06460767 -0.9125645 0.4037598 0.03906369 -0.9770501 0.2092959 0.03729361 -0.9959411 0.08169806 -0.4466994 -0.05825978 -0.892758 -0.7768487 -0.2103335 -0.5934935 -0.9150975 -0.3902707 -0.1011078 -0.5406659 -0.4928434 -0.6817225 -0.6923429 -0.6112858 -0.3833125 -0.7677541 -0.6378979 0.06002986 -0.9335002 0.100589 -0.3440962 -0.8461562 0.4093447 -0.3411664 -0.8451491 -0.07083344 0.5297708 0.3546251 -0.8514664 0.3862423 0.4199347 -0.8308969 0.3650014 0.3011261 -0.7919553 0.5311442 0.2637715 -0.7824336 0.5640736 -0.8089846 -0.2659688 -0.5241554 -0.6539812 0.5368816 -0.5329142 -0.5840022 0.5941343 -0.5530869 -0.5016633 0.5942869 -0.6285592 -0.4958648 0.6740928 -0.5474105 -0.3990295 0.4750816 -0.7842342 -0.5034334 0.4380627 -0.7447127 -0.2375255 0.104709 -0.9656972 0.04895168 -0.3822443 -0.9227271 -0.03183078 -0.3528245 -0.9351177 -0.3370464 0.0723899 -0.9386883 0.2129886 -0.6742454 -0.7070834 0.2640461 -0.4792627 -0.8370007 -0.04495376 -0.06967371 -0.9965514 0.2999359 -0.6831263 -0.6658223 0.3466597 -0.9374981 -0.0293588 0.3173314 -0.8687399 -0.3801996 0.4274728 -0.8372753 -0.3408612 0.4438307 -0.8955657 0.03073209 -0.01492351 -0.8943755 0.4470046 -0.3735466 -0.8960235 0.2399365 -0.5384686 -0.6024354 0.5891293 -0.1107822 -0.8059023 0.5815607 0.09408855 -0.8307749 0.5485702 -0.1221961 -0.9919431 0.0333262 0.1696524 -0.829249 0.5324565 0.2535478 -0.9077731 0.3341166 -0.4535661 0.8907132 -0.02975553 -0.3986938 0.2220526 -0.8897672 -0.2785119 0.5566271 -0.7826777 0.234962 -0.7446211 0.6247139 0.2240363 -0.7578967 0.6126591 0.3679006 -0.7960448 -0.4805445 0.3588671 -0.92172 -0.1469466 0.1445051 -0.8386486 0.525132 0.09241002 -0.8385266 0.5369122 -0.3698233 -0.8816492 -0.2929777 0.2880337 -0.9391461 0.1871395 0.1497543 -0.8739585 0.4623249 0.5873287 -0.7379986 -0.3321635 0.5389874 -0.8407544 0.05105745 -0.510239 0.4004334 0.7610706 -0.09537035 0.216895 -0.9714957 0.1227149 0.09915459 -0.9874569 0.1150242 0.06985682 -0.990875 0.10477 -0.4458754 -0.8889126 0.117954 -0.4284799 -0.8957793 0.2817469 -0.7365947 -0.6147954 0.3379925 -0.9045076 -0.2599872 0.1012604 -0.8051698 -0.5842769 0.09561449 -0.9813532 -0.1666311 0.06561475 -0.9666738 -0.247383 0.08450573 -0.7357708 -0.671926 -0.1472213 -0.6402478 0.7538987 0.09265416 -0.8198798 0.5649586 0.2921842 -0.9531846 0.07766956 0.2133854 -0.9105502 0.3540452 -0.1504562 0.9665822 0.2074038 -0.1974852 0.6127201 0.7651906 -0.02649003 0.9880062 -0.1520737 -0.09384441 0.9770806 -0.1909848 0.05911433 0.6310617 -0.7734611 0.06042665 0.6967071 -0.714774 -0.4420301 -0.2257759 0.868099 -0.001190185 0.4988861 -0.8666341 -0.07690662 0.8864406 -0.4563432 0.1551866 -0.9040803 -0.398114 0.04940944 -0.6449782 -0.762566 0.1063265 -0.9575793 0.2677999 0.006714046 -0.8215583 0.5700553 -0.001678466 -0.7603687 0.6494644 0.07284766 -0.9665822 0.245735 0.01492351 -0.0577715 -0.9981994 0.1125828 -0.2775964 -0.9540696 -0.1643117 -0.4886013 0.8568682 -0.05972468 -0.3132725 0.9477523 -0.1626026 0.9179052 0.361858 -0.1385235 0.6410108 0.7549059 -0.09024322 0.9088412 0.4071779 -0.1007721 0.6413159 0.7605823 0.1476485 -0.9876706 -0.0514847 0.02111876 -0.9767449 0.2132328 -0.03827017 -0.7434614 0.6676535 -0.235023 0.006042659 0.9719535 -0.09137237 0.1610767 0.982696 -0.0424512 -0.2693564 0.962096 -0.06805628 0.2162541 0.9739372 -0.3390911 0.8801233 0.3322245 -0.2724082 0.5736564 0.772454 -0.07837152 0.647908 0.7576525 -0.1349528 0.9371014 0.3218177 -0.5681936 0.6715903 0.4754478 -0.4203925 0.4636372 0.779931 -0.2244941 0.03143405 0.9739372 -0.1151158 0.1379436 0.9837031 -0.4263436 0.02331614 0.9042329 -0.7723319 0.3349101 0.5396893 -0.5154271 -0.5807367 0.6301157 -0.2304757 -0.5405439 0.8091067 -0.3563646 -0.3092135 0.8816797 -0.8187201 -0.1208533 0.5612964 -0.1812189 -0.373455 0.9097568 -0.8193304 0.5586413 -0.1286965 -0.9836116 -0.1503952 -0.09930723 -0.6219367 -0.7694327 0.1453291 0.0464186 -0.4580828 -0.8876613 0.02206486 0.07046723 -0.9972534 -0.1880245 -0.6370739 0.7474899 -0.1837824 -0.7506638 0.6345409 -0.101474 -0.2804651 0.9544664 -0.264626 0.1458784 -0.9532151 -0.4983673 0.5359966 -0.6813868 -0.3234962 0.7498093 -0.5771661 -0.1079134 0.08774071 -0.9902646 -0.5972167 0.8003479 -0.05203402 -0.3865169 0.919187 -0.07525861 -0.3625904 -0.922605 0.1314737 -0.1398053 -0.9805902 0.1372417 -0.1300393 -0.9895627 -0.06164735 -0.2685018 -0.9512314 -0.1517075 -0.1548204 -0.9744865 0.1624195 -0.2904751 -0.949736 0.1166417 -0.1627552 -0.6010621 -0.7824336 -0.690054 -0.3663136 -0.6241646 -0.6746116 0.2792139 -0.6833094 -0.273629 -0.2253487 -0.9350261 -0.1927549 -0.6254768 0.756035 -0.250557 -0.792169 0.5564745 -0.07376319 0.7309488 -0.6783959 -0.3776665 -0.8041017 -0.4590594 -0.08108764 -0.8016907 -0.5921812 -0.3862728 -0.9218726 0.03045743 -0.2744224 -0.7186499 0.638905 -0.0788598 -0.8294931 -0.5529038 -0.1384014 -0.9102146 -0.3902707 -0.06598097 -0.9502549 -0.3043916 -0.07461774 -0.9501022 -0.3028352 -0.03003019 -0.7081515 -0.7053743 -0.01339757 -0.4248176 -0.9051485 0.01086455 -0.7281411 -0.6853237 -0.136906 0.9806513 -0.1398053 -0.1588488 -0.8475601 0.5063326 0.008819818 -0.5822626 0.8129215 -0.04394662 -0.2980743 0.9535203 -0.04684591 -0.2793359 0.9590442 0.02005064 -0.5935545 0.804529 0.1682791 -0.6635335 -0.7289651 0.151738 -0.6153447 -0.7734916 0.160802 -0.929136 -0.3328348 0.1792657 -0.9470504 -0.2663045 -0.09265416 0.9457991 0.3112277 -0.07287818 0.9385968 0.337199 -0.1306802 0.6010926 0.7884152 -0.1251258 0.6174505 0.776574 0.1301614 -0.9738762 0.1859798 0.07483136 -0.8134403 0.5767693 0.08630633 -0.8037355 0.5886715 0.1387981 -0.9647817 0.223365 0.02761924 0.5024262 -0.8641621 0.03079313 0.5503098 -0.834376 -0.02996915 0.9595019 -0.2800378 -0.06259346 0.949736 -0.3066195 -0.12949 0.1631214 0.9780572 -0.1107822 0.1504257 0.9823908 0.1141697 -0.1425214 -0.9831538 0.1136204 -0.1197546 -0.9862667 0.1349223 -0.9769585 0.1652577 0.05780202 -0.9831538 0.1732841 -0.07620471 -0.7448958 0.6627705 0.06295967 -0.8057497 0.5888852 0.1276589 -0.9187597 -0.373516 -0.1619006 0.106357 0.981048 -0.07492291 -0.5541551 -0.8290048 0.03790396 -0.5821101 -0.8121891 -0.07312232 -0.1002533 -0.9922483 -0.3328043 -0.151677 -0.9306925 -0.07080292 0.5933104 -0.8018128 0.05734425 -0.132786 -0.9894711 -0.1296426 0.9709159 -0.2011474 0.02624589 -0.5723441 0.8195746 -0.05307167 -0.2550737 0.965453 -0.01355022 -0.2179937 0.9758294 0.07351905 -0.5432905 0.8362987 -0.1362346 0.9207739 0.3654592 -0.1413007 0.6013367 0.7863705 0.0738548 -0.904294 -0.420423 -0.9379559 0.293527 -0.1844539 -0.4018067 0.8770714 -0.2631611 -0.3591113 0.8743858 0.3262429 -0.8706321 0.3396405 0.3557848 -0.2640156 0.4495682 -0.8532975 -0.7067477 0.148442 -0.691702 -0.09811699 0.1963561 0.9755852 -0.3278604 0.5420088 0.7737358 -0.6086001 0.3057344 0.7322001 -0.0806604 -0.5386212 0.8386486 -0.1758476 -0.3324381 0.9265725 -0.02502512 -0.9226356 0.3848079 -0.08902245 -0.7454146 0.6605731 -0.3762322 0.2583392 0.8897672 -0.4385815 0.220252 0.8712424 -0.2992035 -0.02063047 0.9539476 0.1224707 -0.7641224 0.6333201 0.05392616 -0.4939116 0.8677938 -0.04629653 -0.4424268 0.8955962 0.02529984 -0.7466353 0.6647236 -0.02517777 -0.1722465 0.9847102 -0.09079253 -0.1629078 0.9824213 -0.1728568 0.6221809 0.7635121 -0.1528977 0.6339915 0.7580493 -0.1283913 0.2414929 0.9618518 -0.1379131 0.2529984 0.9575487 -0.1951658 0.9101535 0.3653371 -0.1890011 0.9196143 0.3442793 -0.1329081 0.6345714 0.7613148 -0.1597949 0.9754326 -0.1514633 -0.1545457 0.9805292 -0.1209448 -0.1794793 0.8879971 0.4233222 -0.1591235 0.610828 0.7755669 0.1760918 -0.9567248 -0.2315439 0.1570177 -0.6787622 -0.7173376 0.08200323 -0.9694204 0.2312692 -3.35704e-4 -0.7503281 0.6610309 0.03796499 -0.7534105 0.6564226 0.1551561 -0.9630726 0.2199164 0.1531724 -0.9576098 0.2439344 0.1510666 -0.9457076 0.2877285 0.1289101 -0.7986999 0.5877255 0.1776177 -0.9764397 -0.1223792 0.06689655 -0.9519639 0.2987457 0.1227149 -0.9461959 -0.2993866 0.1334574 -0.964507 -0.2277291 -0.1867122 0.8895535 0.4169133 -0.1973937 0.958678 -0.2048097 -0.08886986 0.1792047 0.9797663 0.09341716 -0.6105839 -0.786401 0.1352275 -0.8940092 -0.4271065 -0.1008331 0.2370678 0.966216 -0.1304971 0.6099429 -0.781579 -0.1081576 0.6459548 -0.7556383 -0.2132023 0.9490036 -0.2321543 -0.07306128 -0.4481338 0.8909574 -0.05423134 -0.4751732 0.8782007 -0.09509563 0.5793634 0.8094729 -0.1497238 0.9214759 0.3583178 -0.09851372 0.9678335 -0.2314218 -0.1812189 0.9646901 -0.1911069 -0.1018403 -0.1835688 0.977691 0.005859553 -0.08365124 -0.9964599 0.0406506 -0.7479171 0.6624958 0.003051817 -0.505356 0.8628804 -0.05780202 0.1413007 0.9882504 -0.02905356 0.02578812 -0.9992371 0.04892116 -0.5562304 -0.8295542 -0.02035582 -0.2504654 0.9678946 -0.07321387 -0.231788 0.9699698 -0.3289285 0.6459548 -0.6888333 -0.6181524 0.4781945 -0.6238288 -0.8337962 0.5001679 -0.2335886 -0.3670766 0.9228187 -0.1165502 -0.5697196 -0.2719504 0.7755364 -0.631428 -0.2712485 0.7264016 -0.3671987 -0.7627491 0.5322734 -0.409009 -0.7367168 0.5384381 -0.723777 -0.2465896 0.6444594 -0.3501694 0.1800287 0.9192175 -0.5445418 0.2945036 0.7853023 0.08075195 -0.8797876 -0.4683981 0.07577741 -0.9070711 -0.4140141 0.05752736 -0.5702994 -0.8193915 -0.0846278 0.6642354 -0.7426984 -0.01702928 0.06921595 -0.9974365 -0.2093875 0.132725 -0.9687491 0.0055238 -0.9943236 0.1062349 0.0390942 -0.9832758 0.1778008 -0.02017271 -0.7813959 0.6236763 -0.1086459 -0.8395032 0.5323344 -0.1187475 -0.9828181 0.1411176 -0.1313517 -0.9251076 -0.356212 -0.05429238 -0.3185522 0.946318 -0.1683706 -0.3853877 0.9072543 -0.1138951 -0.7521897 0.6490066 -0.05136263 -0.5824763 0.811182 -0.9645985 -0.1357158 0.2260506 -0.8294931 0.4656514 0.308359 0.09643846 -0.9719535 0.2143925 0.07892084 -0.933256 -0.3503525 -0.9645375 -0.08178961 -0.2509232 -0.4404736 -0.7910398 0.4244819 -0.09442424 -0.9013642 0.4226203 -0.07492291 -0.8978546 0.4338511 -0.269631 0.4975432 0.8244575 -0.1913205 0.2480849 0.9496445 -0.1870174 0.04855489 0.9811396 -0.1586047 0.5353862 0.8295542 -0.5707572 -0.377636 -0.7290872 -0.6313364 -0.711478 -0.3085421 -0.7176733 0.0534684 -0.6942961 -0.08685564 0.9172949 0.3885312 -0.08197271 0.5618763 0.8231147 -0.1444135 0.876217 0.4597308 -0.0658589 0.1134373 0.9913328 -0.4860683 0.7935118 0.3661305 -0.1683401 -0.5053865 -0.8462783 -0.1151463 0.9775995 -0.1760918 -0.5530869 -0.8217109 0.1372417 -0.498825 0.1018097 0.860683 -0.3600574 -0.4767907 -0.8018739 -0.3539537 -0.8505508 -0.3888974 -0.0590533 -0.8873867 -0.4571673 -0.07312232 -0.5633717 -0.8229316 0.04150515 -0.7908567 0.6105533 0.002197325 -0.8207343 0.571276 -0.01385539 -0.4970244 0.8676107 -0.0109561 -0.4220405 0.9064913 -0.02200382 -0.9965819 -0.07928705 -0.01089507 -0.9681692 0.2499771 0.05734425 -0.9699088 0.2365184 0.0424512 -0.9939268 -0.101474 0.08853417 -0.5905942 -0.802057 0.0549333 -0.908536 -0.4141362 -0.4676351 -0.2269051 0.8542741 -0.6404615 -0.4376354 0.6310617 -0.006714046 -0.09454631 -0.9954833 -0.2664876 -0.0205084 -0.9635914 -0.007751643 0.9641103 0.2652974 -0.08862572 0.8996857 -0.4273812 0.04620498 0.9134801 -0.4042177 0.02322459 0.9733878 0.2279122 0.04925686 0.4820399 -0.8747521 -0.2050538 0.4634236 -0.8620563 -0.2851344 -0.9582812 -0.01818901 -0.7701041 -0.6187323 0.1550645 -0.2691428 -0.882107 0.3865169 -0.09842216 -0.5170751 0.8502457 -0.06347846 0.1128269 0.9915769 -0.02426218 0.09002959 0.9956359 -0.1091952 -0.8113651 0.5742058 -0.1902829 -0.5080111 0.840022 -0.2220526 -0.7330851 0.6428419 -0.9338969 0.1394696 0.3291726 -0.3575854 0.9033479 0.2367321 -0.2420117 0.7051912 0.6663717 -0.5496994 0.403241 0.7315592 -0.05969417 0.0866115 0.9944456 -0.1828669 -0.0120548 0.9830317 -0.3369548 -0.6409192 0.6896573 -0.6774499 0.5776544 -0.4553056 -0.6324961 0.1788384 -0.7536241 -0.02478098 0.9628285 0.2689291 -0.0678426 0.644734 0.7613758 -0.005371212 0.6324961 0.7745293 -0.05737477 0.6510819 0.756798 -0.2050538 0.4024781 0.8921476 -0.2789392 0.5132603 0.8116093 0.03033536 0.4615314 -0.8865627 0.01489299 0.8992279 -0.4371472 0.04358041 0.9439375 -0.3271584 0.04766988 0.4687338 -0.8820155 0.03045743 -0.02334666 -0.9992371 0.05188143 -0.07904291 -0.9955138 0.0572527 -0.6110416 -0.7894833 -0.08508557 0.1340678 0.9873043 -0.02685624 -0.3592944 0.9328288 -0.3893246 0.3548692 0.849971 0.03415018 -0.9763482 0.2134159 0.006500422 -0.9943236 -0.1060213 0.0644856 -0.9261147 -0.3715934 -0.8274789 -0.5060579 -0.2432325 0.0275582 -0.7571337 0.6526383 -0.06396675 0.9501022 0.3053072 -0.05899226 0.9433271 0.326548 -0.08862572 0.9366741 -0.3387249 -0.008117914 0.9764397 -0.2156133 -0.02554398 0.9615162 0.2735374 0.005737423 -0.9526048 0.3040864 0.0134586 -0.9994507 -0.02948087 -0.01635789 -0.9997559 -0.01260411 0.005096554 -0.9452803 0.3261513 -0.05154573 0.6647236 0.745262 -0.04144412 0.6608478 0.7493515 -0.05682545 0.4588153 -0.8866848 -0.05389565 0.9341716 -0.3526719 -0.006897151 0.9013642 -0.4329661 0.02563554 -0.9985351 -0.04739522 -0.01330602 -0.9997864 -0.01406902 -0.03097623 -0.9111301 -0.4108707 0.03247165 -0.9275491 -0.3722648 -0.02792441 -0.6073794 -0.7939085 -0.05316323 -0.5605335 -0.8263802 -0.03445535 -0.8801233 -0.4734336 -0.1047395 0.6328929 0.7670828 -0.02124083 -0.970214 0.2412488 -0.04406869 -0.9480575 0.3149815 0.03143405 -0.9951476 -0.09298986 -0.1739249 0.1190221 0.9775078 -0.1705374 0.1298562 0.9767449 -0.181402 -0.3639637 0.9135716 -0.1431623 -0.3382366 0.9300821 -0.1373943 0.6598407 0.7387005 -0.08227789 0.9565417 0.2796411 -0.05417031 0.9461959 0.3189795 -0.1007111 0.6841945 0.7222816 -0.01419109 -0.3368633 0.941435 -0.03833121 -0.2838832 0.9580676 -0.009002923 -0.7170019 0.6969817 0.005493283 -0.7266762 0.6869106 0.06399726 -0.9700003 -0.2344737 -0.08862572 -0.7099826 0.6985992 -0.03704947 0.6651815 0.7457503 -0.02877891 0.1744438 0.9842219 -0.06936854 0.1264687 0.9895322 -0.03958249 0.9394818 0.3402814 -0.009949028 -0.943907 0.3300272 0.006805598 -0.952971 -0.3029267 0.03845328 -0.9079562 -0.4172796 -0.03210544 0.9656361 -0.2578204 -0.06769001 -0.3672903 0.9276101 -0.03360086 -0.7011933 0.7121495 -0.05478072 0.1959593 0.9790643 -0.1288186 -0.6855373 0.7165136 -0.04882961 -0.07397687 -0.9960326 -0.05728322 -0.06579786 -0.9961852 -0.0640583 0.5290079 -0.8461562 -0.4306772 0.3421735 -0.8351085 -0.2534562 0.4213385 -0.8707236 -0.1922056 -0.06894129 -0.9789117 -0.3898739 -0.008941888 -0.9208045 -0.1149021 0.9873959 0.1086153 -0.1535081 0.7819758 0.6040834 -0.0959807 0.7374188 0.668569 -0.04678487 0.9782403 0.202002 -0.002288877 -0.06738483 -0.9977111 0.01870781 -0.5985595 -0.8008362 -0.1457259 -0.5957213 -0.7898495 -0.04449594 0.4594256 -0.8870815 0.02099668 -0.9984436 -0.05160677 0.0266121 -0.9080477 -0.4179815 0.04129153 -0.9986572 -0.03079313 -0.1993163 -0.9659109 -0.1650136 -0.1251564 -0.9067354 -0.4026612 -0.9323099 0.01687669 -0.3612476 -0.6734215 0.08862572 -0.7338786 -0.4918668 -0.5678884 -0.6599323 -0.7107761 -0.5960265 -0.373516 -0.7031465 0.690115 -0.1711173 -0.5789971 0.5845515 -0.5683462 -0.9998474 -0.01324498 -0.00854516 -0.6520585 0.6895962 0.315012 -0.649556 -0.7599719 0.02154606 -0.4044008 -0.8398999 0.361858 -0.9835811 -0.07022309 0.1661427 -0.9590747 -0.1722159 0.2247382 -0.5904111 -0.7598804 0.2719199 -0.2928861 0.8155156 -0.4991302 -0.3339641 -0.4548784 -0.8255257 -0.2348399 0.7949156 0.5593737 -0.1569262 0.4513688 0.8784143 -0.233375 0.3313089 0.914182 -0.003631651 0.8926054 -0.4507889 -0.6328929 0.5241249 0.5698416 -0.1452681 0.2817469 0.9484238 -0.05362099 -0.6938688 0.71807 0.001220703 -0.9488205 0.3157445 -0.1621753 -0.9697867 0.182165 -0.1113925 -0.2216559 0.9687185 -0.317484 -0.1354717 0.9385052 -0.2070375 -0.5653554 0.7983947 -0.03076261 -0.94055 0.3382061 -0.1142918 -0.7338481 0.6696066 -0.2735374 0.9618213 -0.007141292 -0.07922601 0.8827479 -0.4630573 -0.1016266 -0.2551652 0.9615162 -0.1049531 -0.256386 0.9608448 -0.05099642 0.361919 0.9307841 -0.05874812 0.3661 0.9287087 0.03323465 0.7129124 -0.7004303 0.0260933 0.9544664 -0.2970672 0.01638841 0.9683218 -0.2490921 0.03518784 0.6627705 -0.7479476 -0.1016266 -0.7015595 0.7053133 -0.1288491 -0.1962645 0.9720146 -0.09378337 -0.6770226 0.7299417 -0.5470443 -0.4230781 0.7222816 -0.2321543 -0.5104221 0.8279672 -0.1241493 -0.670919 0.7310099 -0.1525009 -0.9058504 0.3951842 -0.4386425 -0.01187169 0.8985565 -0.338023 -0.2652059 0.9029816 -0.9572131 -0.169042 -0.2347484 -0.5979186 -0.7796564 0.1859798 -0.5771355 -0.772454 -0.2649922 -0.1109042 0.3617664 0.9256264 -0.2183904 -0.1789605 0.9592883 -0.1492965 -0.2265694 0.9624623 -0.09533983 0.3606067 0.9278237 -0.1575365 0.3037202 0.9396344 -0.448561 0.6194037 0.6442763 -0.1895504 0.8044069 0.5629749 -0.137669 0.7334819 0.6655782 -0.2452772 0.6022217 0.7596668 -0.1782586 -0.9839778 -0.001983702 -0.8684042 0.4165776 0.2688986 -0.3168737 0.9120457 0.2602008 -0.1272011 0.6402783 0.7574999 -0.05374306 0.7623524 0.6448866 -0.1770073 -0.9050264 -0.3867 -0.9378033 -0.003906369 -0.3470565 -0.4965361 0.821894 -0.2790307 -0.5659353 -0.3200171 -0.7597888 -0.4781335 0.4287545 -0.7665029 -0.02255314 0.6914579 -0.7220069 0.004455685 0.6487625 -0.7609485 0.06979578 0.9632862 -0.2591326 0.03469949 0.9766228 -0.2120121 0.01260411 0.9631642 0.2685934 0.07000946 0.9675283 0.2428053 0.01342809 0.7878658 0.6156499 -0.4182867 -0.5002899 -0.7580798 -0.7756279 -0.1142308 -0.620716 0.05047756 -0.6632893 -0.7466353 -0.171575 -0.5988953 -0.7821894 3.05185e-4 -0.9320353 -0.3623157 -0.4917142 0.08233892 -0.8668172 -0.187994 0.0313425 -0.9816584 -0.06817835 -0.9976501 0.002594053 -0.09433269 -0.9254128 0.3669851 0.01617479 0.959685 0.2804956 0.08880883 -0.928312 -0.3610035 0.06491285 -0.6308786 -0.7731559 -0.004821896 0.7757195 0.6310312 0.01104766 -0.9982299 0.05838185 -0.04861593 -0.9279763 0.369396 -0.1028473 0.0516678 -0.993347 0.04721212 0.05325478 -0.9974365 0.0585345 0.1366618 -0.9888607 -0.03570663 0.7795038 0.6253548 -0.002655088 0.6960356 0.717948 -0.004547238 0.7459639 0.6659444 0.003814756 0.9780877 0.2080752 0.03003019 0.9649037 0.2608112 -0.04156619 -0.9136021 0.4044313 -0.01416057 -0.9979248 0.06256294 -0.08569598 -0.9959105 0.02783286 -0.07614368 -0.9278237 0.3651235 -0.06064027 -0.5540331 0.8302561 -0.07101655 -0.5583972 0.8265023 -0.07010102 0.7230445 0.6871853 -0.01361125 0.7343059 0.6786401 -0.02856528 0.3760491 0.9261452 -0.1272622 0.3897824 0.9120457 -0.01397746 0.9574877 0.2880337 -0.01293981 -0.6856288 -0.7278054 -0.06491285 -0.9458907 -0.3178808 0.009002923 -0.9753105 -0.2204962 0.003845274 -0.943144 -0.3322855 -0.04483169 -0.9114353 0.4089175 -0.09027373 -0.9177832 0.386639 -0.1025422 -0.9945067 0.02005064 -0.03353983 -0.9975891 0.06033504 -0.01278722 0.08859521 -0.9959716 -0.04358041 0.1211279 -0.9916685 -0.0653401 -0.6687521 -0.7405622 -0.1050142 0.7642445 0.6362804 -0.1934263 0.3888974 0.9007233 -0.01553392 0.3574328 0.9338054 -0.03863638 0.344615 0.9379253 -0.0723899 -0.01562547 0.9972229 -0.03018277 -0.006836116 0.9995117 -0.08780175 -0.9457381 -0.3127842 -0.04205447 0.9510788 0.3060396 -0.04181033 0.9965209 -0.07193213 -0.04358041 0.9727165 -0.2278512 -0.0386669 0.9302957 0.3646962 -0.005615353 0.7587512 -0.651326 -0.01113921 0.7446211 -0.6673788 -0.04394662 -0.01199376 0.9989318 -0.06570631 -0.5536668 0.830134 -0.004303097 -0.9104892 0.4134342 -0.09591966 -0.626545 0.7734306 -0.08001953 -0.5840022 0.8077639 -0.1856746 -0.1248207 0.9746391 -0.1290017 -0.03769034 0.9909055 0.01437419 0.9549852 0.2962431 0.05316323 -0.990997 0.1226844 0.02023375 0.9594409 -0.2811365 -0.009063959 0.9715873 -0.2364268 0.06891077 -0.9898068 -0.124546 -0.007446467 -0.9445174 -0.3283181 -0.02999967 0.9757989 -0.2164677 0.03112888 0.9844356 -0.1728568 -0.9970092 0.03741568 -0.06756794 -0.8972747 0.06674396 -0.4363842 -0.6995758 -0.5927305 -0.3990295 -0.7663503 -0.6360363 -0.09006011 -0.2864772 -0.9536119 -0.09247106 -0.3202918 -0.8811609 -0.3477279 -0.1107211 -0.9313944 -0.3467208 -0.08005005 -0.9927366 -0.08951079 -0.1331523 0.7268288 -0.6737571 -0.1201208 0.07666248 -0.9897763 -0.1104465 -0.6080203 -0.7861874 -0.01162755 -0.9994507 0.03042691 -0.3566698 0.6816614 -0.6388134 -0.4358043 0.07068085 -0.8972442 -0.03347879 0.9672842 0.2514725 -0.05206453 0.7085483 0.7036958 -0.1428266 0.9681997 0.2052674 -0.1568651 0.6886502 0.7078768 -0.0813623 0.3089389 0.9475692 -0.06778156 0.3695181 0.926725 -0.09772026 0.01843315 0.9950255 -0.111362 -0.02182072 0.9935301 -0.06079286 -0.4541459 0.8888211 -0.06833094 -0.4879605 0.8701743 -0.1259804 0.978637 -0.1622669 -0.2837306 0.9530931 -0.1051667 -0.3027436 0.9186376 0.2537614 -0.6898404 0.6816614 -0.2437513 -0.7124546 0.6863002 0.1461836 -0.2140568 0.80871 0.5478377 -0.006591975 -0.9001129 0.4355602 -0.0680868 -0.9147923 0.398114 -0.9378948 0.05395668 0.3426923 -0.8448134 0.02594071 0.5343791 -0.433546 0.6244087 0.6497086 -0.5540636 0.6810816 0.4786218 -0.2503738 -0.8970305 0.3641163 -0.6695456 -0.662862 0.3351237 -0.6081118 -0.4717246 -0.6384778 -0.380169 -0.5361186 -0.7536546 -0.5888546 0.5995361 -0.5420088 -0.5763115 0.4824366 0.6595661 -0.8242439 0.03549301 0.5650807 -0.4870754 -0.5883053 0.6454359 -0.6185187 -0.4274117 0.6593219 -0.1266213 -0.662038 0.7386395 -0.113712 0.5205543 0.8461867 -0.7205115 0.06747639 -0.690115 -0.1158483 -0.8992584 0.4217353 -0.1740776 -0.6309092 0.756035 -0.2519913 -0.6070742 0.7535936 -0.1214942 -0.8876919 0.4440748 -0.01596117 0.996643 0.08011108 0.08456677 0.9255349 -0.3690298 0.1212195 0.9225745 -0.3661916 0.008209466 0.9956359 0.09283727 -0.00338751 -0.999939 -0.009002923 -0.05682545 -0.998291 -0.01330602 -0.6218146 -0.08218634 0.7788019 -0.7296976 -0.6617634 0.1718497 -0.002288877 -0.8580889 -0.5134434 0.05465865 -0.8726768 -0.4851832 0.02240055 -0.1230201 -0.9921262 0.001525878 -0.06237983 -0.9980468 0.06939905 0.5612354 -0.8247017 0.1234779 0.5630055 -0.8171636 0.2096927 0.8982513 -0.3861812 0.1453902 0.5681936 -0.8099308 0.1596423 0.903409 -0.3978698 0.1955931 0.898587 -0.3927732 0.04776144 0.6062807 -0.7937864 0.09540086 0.9097568 -0.404004 0.1676381 0.9840694 0.0590533 0.1915951 0.9787896 0.07235938 0.09036529 0.8217719 0.5625782 0.06375312 0.845027 0.5308695 -0.2998749 -0.2774438 0.9127171 -0.3079928 0.01229894 0.9512925 -0.1993468 -0.01513713 0.9797968 -0.1149937 -0.1195715 0.9861141 -0.06598097 0.3938108 0.9168065 -0.02575761 0.3584399 0.933195 0.06897181 0.8180792 0.5709097 0.01913505 0.8629414 0.5048983 -0.07632678 0.402356 0.9122898 -0.01840263 -0.9063387 -0.4221015 -0.1686453 -0.985229 0.02868735 -0.124485 -0.6898404 -0.7131565 -0.02920621 -0.6529435 -0.756798 0.1595813 0.985931 0.04925686 -0.3177892 -0.8505203 -0.4190191 0.07473981 -0.5578173 -0.8265633 0.07577741 -0.04437386 -0.9961242 0.1116672 0.5884579 -0.8007447 -0.3052766 -0.7955565 0.5233009 0.1478011 0.6055178 -0.7819758 -0.1259194 0.8395947 0.528367 -0.08536022 0.8555559 0.5106052 0.06472975 -0.5186621 -0.852504 0.08383435 0.99588 0.0343638 -0.1067537 -0.1450545 -0.9836421 -0.3705557 0.2830592 0.8846095 -0.1862545 -0.5325175 0.8256478 -0.09894096 -0.1356853 0.9857784 -0.2214423 -0.1204565 0.9676809 -0.1730704 0.4333629 0.8844264 -0.3407086 -0.08829003 0.9359722 -0.2627643 0.4633015 0.8463088 0.1237525 0.07565534 -0.9894101 -0.2165898 -0.06671345 0.9739677 -0.178991 -0.575396 0.7980285 -0.104831 -0.8922392 0.4391919 -0.1001617 -0.04629653 0.9938658 -0.1017182 -0.01559495 0.9946593 -0.1027253 -0.5531785 0.8266854 -0.1178625 -0.5425581 0.8316904 -0.03320413 0.8094729 0.586169 -0.06509596 0.4563127 0.8874172 -0.1625416 0.4654073 0.8700217 -0.05011135 0.8392896 0.5413373 -0.04547256 -9.76592e-4 0.9989624 -0.03421121 -0.5029451 0.8636128 -0.1046479 -0.8890957 0.4455397 0.0323801 0.02612382 -0.999115 -0.005066037 0.02224797 -0.9997254 -0.03253269 -0.5758233 -0.8168889 0.04071164 -0.5800348 -0.8135319 0.001434326 0.009949028 -0.999939 -0.04342782 -0.553209 -0.8318735 -0.02832114 0.9843745 0.1736198 -0.03906369 0.9873043 0.1539048 -0.02902305 0.826838 0.5616322 -0.04062008 0.8166753 0.5756096 -0.0916776 -0.9956359 0.01736503 -0.07263404 -0.9313944 -0.3566088 -0.02294987 -0.8585162 -0.5122227 -0.05917537 -0.9977416 -0.03106784 -0.1163671 -0.8867153 0.4473708 -0.08261358 -0.8833582 0.4613178 -0.1148106 -0.9919431 -0.05301064 -0.1511582 -0.988403 -0.01251256 0.007721126 0.980102 0.1982482 0.08221685 0.9169591 -0.3903623 0.05069124 0.9924924 0.1112704 -0.01355022 0.9295023 -0.3685415 -0.03109836 0.9244972 -0.3798334 -0.003295958 0.6102786 -0.7921385 -0.003967404 0.6076235 -0.7941832 -0.02932828 0.9220252 -0.3859676 0.03997921 0.9803766 -0.1929685 -0.02728354 -0.8775292 0.4787133 0.001098632 -0.9977111 -0.06756794 -0.06292915 0.9856258 0.156621 -0.07965326 0.8412733 0.5346843 0.02716147 0.6117435 -0.7905515 -0.04663223 0.4801782 0.8759117 -0.07324439 0.4698019 0.879696 -0.078341 -0.8571734 -0.5089877 0.05926692 -0.8958404 -0.4403516 -0.1310159 -0.8646504 -0.4849391 -0.07193213 0.07415997 0.9946287 -0.04547256 -0.4275338 0.9028291 -0.08319342 0.5228736 0.8482925 -0.2089297 0.5485092 0.8095951 -0.1951963 0.131901 0.9718315 -0.16245 0.8445692 0.5101474 -0.1326029 -0.406476 0.9039583 -0.08859521 0.9858089 -0.1423993 -0.1162145 0.978637 0.1695303 -0.09552294 -0.7840815 0.6132084 -0.09741508 -0.8229926 0.5595874 -0.169103 -0.4058962 0.8980987 -0.19718 -0.2569963 0.9460738 -0.7290567 -0.01489299 0.6842555 -0.6107059 0.04751729 0.7903989 -0.3267922 0.7092196 0.6246224 -0.500412 0.6157109 0.6086307 -0.1662648 0.8633686 0.4763634 -0.1295205 0.8257088 0.548967 -0.5089877 -0.5800958 0.6358837 -0.2299569 -0.4257637 0.8750877 -0.1708426 -0.7977843 0.5781732 -0.1020234 -0.4705039 0.8764611 -0.5101779 0.09332555 0.8549761 -0.4151738 -0.24073 0.8772851 -0.2386242 0.9242531 0.2978911 -0.3284097 0.9192175 -0.2170782 -0.6844386 0.7042757 -0.1884518 -0.6421705 0.7032991 0.3048189 -0.4388867 0.4201788 0.7942137 -0.1175878 0.9631031 0.2419507 -0.1453596 0.9447615 -0.2937406 -0.1785333 0.3153783 0.9320048 -0.1924192 0.1498764 0.9697867 -0.4456008 0.02957242 -0.8947111 -0.8336741 0.05932796 -0.549028 -0.4889065 0.5393536 -0.6855678 -0.1858272 0.6074404 -0.7723014 -0.3987548 0.6595966 -0.6371044 -0.4182257 0.06109803 -0.9062777 -0.9716483 0.02117979 0.2353587 -0.04809713 -0.8654744 0.4986114 0.01989805 -0.9994812 0.02508616 -0.6807154 -0.7170324 0.1497848 -0.03180027 -0.9994202 0.01022368 -0.1243629 -0.02484202 0.9919126 -0.1094698 0.04461801 0.9929807 -0.04220706 0.09921562 0.9941405 -0.1554918 0.6814783 0.7150792 -0.1190527 0.854091 0.5062716 -0.1572313 0.8452407 0.5106662 -0.1282387 0.9712516 0.2004761 -0.07480084 0.616596 0.7836848 -0.05203402 0.465804 0.8833277 0.01272618 0.1823176 0.9831538 -0.01657152 0.3253883 0.9454329 -0.05249178 0.3774224 0.9245277 0.06079286 -0.9436933 -0.3251137 -0.2699972 -0.961272 0.05484175 -0.3486434 -0.8474685 -0.4002503 -0.1313211 -0.8968474 -0.4223151 -0.08676409 -0.9949034 0.05121004 -0.212775 0.6308786 0.7461165 -0.09173864 0.9361858 -0.3392742 0.00125122 -0.8914456 -0.4530778 -0.2237617 0.1800897 0.9578539 -0.4182867 -0.5253456 -0.7409284 -0.1702933 -0.5527207 -0.8157598 -0.6609699 -0.6811732 -0.3147069 -0.2248909 0.2014222 0.9533067 -0.4227729 -0.4239021 -0.8009278 -0.1689199 0.03079313 -0.9851375 -0.2888882 -0.8993194 -0.3282571 -0.4116031 -0.9094211 0.05914485 0.05801564 -0.9252297 -0.3749199 0.007446467 -0.9635609 -0.2672811 0.03921627 -0.9908139 0.1292459 0.1803644 -0.9725334 0.1470687 -0.3259682 -0.9419843 0.07989746 -0.1952879 -0.9280984 0.3169652 -0.2490921 -0.8717612 0.4218268 -0.0801416 -0.9647206 0.2507095 0.04617446 -0.9239784 0.3795892 0.09115874 -0.9898068 0.1093783 -0.3302713 -0.9370709 -0.11301 -0.0356456 -0.9794 -0.1986449 0.004150509 -0.9941099 0.108005 0.06433302 -0.9656361 -0.2517472 0.136021 -0.9515061 -0.2758263 0.1151463 -0.9793084 0.1663564 0.2024292 -0.9547716 -0.2176885 0.117832 -0.9761956 0.1819514 0.0811792 -0.9250466 -0.3710135 -0.01348912 -0.9122593 0.4093447 -0.1457259 -0.7752617 0.6145513 -0.1359905 -0.7050997 0.6959136 -0.05767995 -0.8898587 0.4524979 -0.002655088 -0.8698385 0.4933012 -0.01178014 -0.3542283 0.9350566 0.01886039 -0.3778802 0.9256264 -0.1239967 0.1452986 0.9815669 -0.1380657 0.01770073 0.9902341 -0.2515641 -0.02059996 0.9675893 -0.03695791 -0.8501846 0.5251625 -0.07971435 -0.8348643 0.5446028 -0.252327 -0.6352123 0.7299112 -0.05194246 -0.6827601 0.728782 -0.07519757 -0.5735649 0.8156682 -0.1094393 -0.5525987 0.8261971 -0.1684011 -0.3224281 0.931486 -0.2873623 -0.4021119 0.8692892 -0.1910458 -0.0959807 0.976867 -0.08508557 -0.0737937 0.9936217 -0.1753898 -0.1702933 0.9696341 -0.1138035 -0.392407 0.9127171 -0.02926725 -0.6423231 0.7658315 -0.05984675 -0.3375042 0.9393903 -0.002960264 -0.3772698 0.9260842 -0.007507503 -0.3694571 0.9291971 -0.1127964 -0.02154606 0.9933775 -0.1072725 0.2124393 0.9712516 -0.01867729 -0.7902158 0.612537 0.01611375 0.4029664 0.915067 -0.6050905 0.4069948 0.684225 -0.1398663 0.2420423 0.9601123 0.06402778 -0.6151006 0.7858211 -0.0754112 -0.6801965 0.7291177 -0.3319804 -0.6221809 0.7089755 -0.6550188 -0.6530656 0.3799859 -0.01266515 -0.4140446 0.9101535 0.08209478 -0.1622363 0.9833064 0.1480758 -0.1974852 0.9690237 -0.2859889 -0.113834 0.9514145 -0.2231208 0.04327523 0.9738152 -0.01846367 0.2698141 0.9627064 -0.9289224 -0.2521134 0.271157 -0.7032075 0.2092349 0.6794641 -0.2258064 -0.2178411 0.9494919 -0.4438612 -0.4614399 0.7681204 -0.5323649 -0.2824793 0.7979675 -0.8366039 -0.2016663 0.5092929 -0.7290261 -0.5248268 0.4393445 -0.5646229 -0.1181371 0.8168279 -0.7727287 0.05240023 0.6325266 -0.2979827 -0.3019806 0.9055147 -0.03323465 -0.2635579 0.9640492 -0.4313181 0.05255287 0.9006317 -0.1728568 -0.5450606 0.8203375 -0.002044737 -0.4553362 0.890286 0.05938899 0.008331537 0.9981689 -0.001739501 0.03894162 0.9992371 -0.01016265 0.5035554 0.8638874 -0.08282721 0.5131688 0.8542436 -0.2583697 0.2278206 0.9387799 -0.3250526 0.220252 0.9196753 -0.337199 0.03839224 0.9406415 -0.2224189 0.05008083 0.973632 -0.2141178 -0.1437116 0.966155 -0.3308206 -0.1514023 0.9314554 -0.03857535 -0.2928861 0.9553514 0.008362054 0.05105745 0.9986572 -0.1531724 0.4421827 0.8837245 -0.5650502 0.3184607 0.7610706 -0.1330607 0.3691824 0.9197669 0.03790396 0.3741874 0.9265419 -0.2609637 -0.3820917 0.8865017 -0.2603534 -0.3714713 0.891171 0.02490305 0.07650989 0.9967345 -0.04354989 0.0655232 0.9968871 -0.6217536 -0.2926115 0.7264626 -0.6406446 0.02240055 0.7674795 -0.04266482 0.007324397 0.999054 0.07571637 0.128605 0.9887692 0.02639847 0.1547288 0.987579 -0.01068145 0.1432234 0.9896237 -0.05413979 0.5866573 0.8080081 -0.01821953 -0.2841578 0.9585864 -0.04922634 -0.246559 0.967864 -0.03625595 -0.222663 0.9742119 0.06677448 -0.08975493 0.9937132 -0.18305 -0.1282693 0.9746696 -0.1495712 0.1873836 0.9708243 0.09537035 0.1712393 0.9805902 0.09103667 0.1709952 0.981048 -0.09558397 0.5053865 0.8575701 0.18305 0.8048036 0.5645924 0.2323984 0.9408857 0.2463759 0.1551561 0.9457076 0.2855007 0.1704764 0.8071535 0.5651417 -0.0869472 -0.3864559 0.9181799 -0.05377358 -0.1045564 0.9930418 -0.05880916 -0.1280251 0.9900205 -0.03534042 -0.4227424 0.9055452 -0.1378826 0.351146 0.9260842 -0.2889493 0.2307505 0.9291055 -0.2623066 0.3218787 0.9096958 -0.1870479 0.4918668 0.8503067 -0.2680441 0.3330485 0.9039888 -0.1748405 0.5866573 0.7907041 -0.4527726 -0.2829982 -0.8455153 -0.2435072 -0.5468307 -0.8010193 -0.00451672 0.4018372 0.9156774 -0.05572676 0.5723136 0.8181097 -0.01013213 0.4982757 0.8669393 0.005066037 0.3303934 0.9438154 -0.3200781 0.03143405 -0.9468368 -0.3369243 -0.1842707 -0.923307 -0.4181646 -0.2428663 -0.8752709 -0.3923765 -0.02581864 -0.9194312 0.6864833 -0.3769952 -0.6217231 0.5876644 -0.093997 -0.8035829 0.5866573 -0.1279641 -0.7996155 0.6336558 -0.319071 -0.7047029 -0.002471983 0.9606922 -0.2775353 0.06320381 0.9734794 0.2197638 0.08502453 0.9787896 -0.1861934 0.06866663 -0.4737083 0.877987 -0.006134212 -0.1432844 0.9896543 -0.3048799 0.1622974 0.9384441 -0.03549301 -0.3854793 0.9220252 -0.1237831 -0.3570361 0.92584 -0.08996856 -0.07745593 0.9929197 -0.003051817 -0.1099582 0.9939268 -0.1322977 0.02969449 0.9907529 -0.05575728 0.1259499 0.9904477 -0.1907712 -0.03012174 0.9811396 -0.2743309 -0.09060943 0.9573351 0.2926115 0.8747521 -0.3861812 0.1191442 0.9869686 0.1080965 -0.01287877 0.9957274 -0.09121978 0.005188107 0.8511918 -0.5247963 -0.07733386 0.3301187 -0.9407331 -0.1584521 0.3425397 -0.9260231 -0.1807916 -0.01611375 -0.9833674 -0.09155553 0.06067079 -0.9939268 0.1468551 -0.7372356 0.659444 -0.007934808 -0.6911527 0.7226173 -0.2082583 0.1131931 -0.9714957 -0.1347087 0.1080965 -0.9849544 -0.007965326 0.2645955 -0.9642934 -0.1282998 0.2767113 -0.9523301 -0.01895195 0.3246864 0.945616 0.03051847 0.3636586 0.9310282 0.06286811 0.6237373 0.7790765 0.02105772 0.4366283 0.8993805 0.008026361 -0.00326544 0.999939 -0.02316349 -0.1065401 0.9940184 -0.03674423 -0.385815 0.9218116 0.05584883 -0.3063143 0.9502549 -0.0705893 -0.8790857 -0.4713889 -0.02929776 -0.9989318 0.03555405 -0.1036409 0.4588458 0.8824427 0.07016205 -0.3081454 0.9487289 0.06643879 -0.303415 0.9505295 0.160802 -0.5634938 0.810297 -0.09002959 0.5533921 0.8279977 -0.1132541 0.6904508 0.7144383 -0.04379403 0.2416455 0.9693594 -0.1248817 0.1961424 0.9725639 -0.2596515 0.2867825 0.9221168 -0.1928464 0.3830989 0.9033173 -0.1102328 0.2733543 0.955565 0.385937 0.9183019 -0.08783227 0.2766197 0.8901944 0.3618885 0.1933042 -0.1153294 -0.974334 0.1349528 0.09875786 -0.9859005 -0.0878933 -0.2143925 -0.9727775 -0.1993468 -0.5541856 -0.8081302 -0.2693869 -0.5798212 -0.7688834 -0.01178014 -0.8759422 -0.4822535 -0.05349892 -0.8358104 -0.5463729 0.1488693 0.6045412 -0.7825251 0.3454085 0.3950621 -0.8512223 0.07699817 0.1636097 -0.9834895 -0.1333659 0.1608325 -0.9779046 -0.6682638 -0.1125217 -0.7353129 -0.6467483 0.1456343 -0.7486495 -0.4996796 0.6192816 -0.6056093 -0.4019593 0.4207892 -0.8132267 -0.457564 0.2468337 -0.8541826 -0.3192541 0.6569414 -0.6829738 -0.07181 0.1620532 0.9841304 0.06292915 0.8384655 0.5412763 0.09183019 0.9898068 0.1086764 0.06805628 0.8497574 0.5227516 -0.207007 -0.3867916 0.898587 -0.1792352 -0.4983673 0.8482314 -0.01928764 -0.5546434 0.831843 0.07202368 -0.6053957 0.7926267 0.03350931 -0.9992981 -0.01513713 0.09363079 -0.9912106 -0.09320348 0.01266515 -0.1891232 0.9818415 0.04696798 -0.2552568 0.9656972 -0.004608273 -0.1894894 0.9818415 -0.2092959 -0.1508225 0.9661245 0.6310617 -0.5604419 -0.5363018 0.6961577 -0.6062502 -0.3844112 -0.01892143 0.5938902 -0.8042848 0.1890621 0.3534044 -0.9161351 0.2708823 0.6240425 -0.732902 0.02331614 0.3859065 0.9222083 0.03906369 0.5012055 0.8644368 0.1224707 0.690115 0.7132176 0.1313211 0.6012757 0.7881711 -0.1860408 0.1125828 -0.976043 -0.3033845 -0.1041902 -0.947142 -0.307474 -0.147557 -0.9400311 -0.02142399 0.2600482 0.965331 -0.03274631 0.260506 0.9649037 -0.02600175 0.3226722 0.9461348 -0.002990782 0.253853 0.9672231 -0.009826958 0.3552355 0.9346904 -0.008453607 -0.1244239 0.9921873 -0.02304142 -0.08307135 0.9962462 -0.03973507 0.04608291 0.9981384 -0.02380442 0.02130192 0.9994812 -3.66222e-4 -0.1603137 0.9870601 0.05685597 -0.217658 0.9743645 0.01785331 -0.3172399 0.948149 0.01586961 -0.1762749 0.9841914 0.0055238 0.004852414 0.9999695 0.3156834 -0.2162846 -0.9238563 0.006439387 0.238319 -0.97116 0.345317 0.24897 -0.9048433 -0.505234 0.0529496 -0.8613239 -0.7091891 -0.1949217 -0.6774804 -0.5197607 -0.003784239 -0.8542741 -0.4358654 0.01678514 -0.8998383 0.2031006 -0.3924375 -0.8970611 0.220954 -0.6022828 -0.7670522 -0.3976562 -0.01492351 -0.9173864 0.03274631 -0.157567 -0.9869381 0.0773949 -0.1768547 -0.9811701 -0.194586 -0.06942957 -0.9783929 0.3806574 0.7633595 -0.5218665 0.03830069 0.6555987 -0.7541124 0.1566515 0.7596057 0.6312143 0.2306283 0.8484451 0.4763329 -0.09466838 -0.3415021 -0.9350872 0.2322153 -0.2764672 -0.9325236 -0.4271981 -0.03021329 -0.9036226 0.0374462 0.03018277 0.9988403 0.0363475 -0.07242041 0.996704 -0.1749321 0.3955504 -0.9016084 -0.3856319 0.5221107 -0.7606738 0.06921595 0.58623 0.8071535 0.2211676 0.6871548 0.6920072 0.2876064 0.7899716 0.5414594 -0.005676388 0.06149476 0.9980773 -0.03442484 0.2288583 0.9728385 -0.03817862 0.1466719 0.9884335 -0.1885433 0.08594012 0.9782708 -0.3045442 0.08294928 0.948851 -0.09161657 -0.6703085 0.7363811 0.06671345 -0.8934599 0.4440748 -0.07217627 -0.885342 0.4592425 0.4793237 0.09152501 -0.8728294 0.3422346 0.1840876 -0.9213843 -0.01062041 0.5371563 -0.843379 0.190405 0.3254799 -0.9261452 0.1368755 0.4289681 -0.8928495 -0.1370891 -0.5686514 0.8110294 -0.07977539 -0.7222511 0.6869717 -0.006195247 -0.7266457 0.6869412 -0.07492291 -0.5938292 0.8010498 -0.1329691 -0.450972 0.8825343 -0.1996826 -0.5798822 0.789819 -0.1302835 0.4788049 0.8681906 -0.02533036 0.1235084 0.9920042 0.002716124 -0.9992981 0.03674423 0.2412488 -0.9627369 0.1220435 -0.1767327 0.6199225 -0.7644581 -0.1267433 0.315836 -0.9402753 -0.3054292 0.2586444 -0.9164098 -0.00753802 -0.9147008 0.4040346 -0.1228675 -0.1101718 0.9862667 -0.005218625 0.1173742 0.9930723 -0.02951139 0.1677907 0.9853511 0.4311044 -0.8547319 0.2889798 0.2615436 -0.8439894 0.4682149 -0.3838923 -0.229194 -0.894467 -0.3571887 -0.1698355 -0.918424 -0.4168218 -0.2273629 -0.8800623 -0.3937803 -0.2669149 -0.879574 0.5312662 -0.5505234 -0.6439101 -0.05987727 0.1012909 -0.9930418 -0.07580798 0.1453902 -0.9864498 -0.06076234 0.6568194 -0.7515488 -0.0172429 0.6224555 -0.7824336 0.6130253 -0.7896054 -0.02655106 0.4804224 -0.8444777 -0.236671 -0.02093565 0.3614612 0.9321268 -0.1624195 0.2177801 0.9623707 -0.2096621 -0.02496409 -0.9774468 0.2570879 0.8923918 -0.3707999 0.2620319 0.952147 0.1571093 -0.08902245 0.2752159 0.9572436 -0.03781241 0.118778 0.9921873 -0.09991759 -0.1715445 -0.9800714 -0.3658254 0.6120487 -0.7010712 -0.4902493 0.6342357 -0.5977966 -0.1429487 0.2690206 0.9524522 -0.2189092 0.4907071 -0.8433485 -0.2964263 -0.1420636 0.9443953 -0.273751 -0.4683066 0.8400525 -0.4777062 0.03442484 -0.8778344 0.05719166 0.9312418 -0.3598132 -0.07242041 0.6576129 -0.7498398 -0.05850398 0.7847225 0.6170538 -0.5456404 -0.05676442 -0.8360546 -0.3642079 -0.2657552 -0.8925749 -0.3087252 0.1362346 -0.9413129 -0.02624589 -0.1267433 -0.9915769 -0.4415723 -0.05005031 -0.8958098 -0.02221745 0.3302713 0.9436018 0.193701 0.9520554 -0.236671 -0.3774224 0.2937101 -0.8782007 -0.4793542 0.2054506 -0.853206 0.1363872 -0.8764916 -0.4616535 -0.3661 -0.2427137 -0.8983429 -0.3156529 0.1524094 0.9365521 -0.07043671 0.09405803 0.9930418 -0.004364132 -0.03408914 0.9993897 0.1890621 -0.5960265 0.7803583 0.1316568 -0.5971252 0.7912229 0.01754814 -0.1134678 0.9933775 -0.2240363 0.1650441 0.9604786 -0.2713401 0.2052674 0.9403058 0.004211544 0.3123875 0.9499191 -0.1544541 0.5049898 0.8491775 0.00967431 -0.04635757 0.9988708 2.44148e-4 -0.1224707 0.9924619 -0.1332133 -0.5301675 -0.8373364 -0.08154541 -0.7287515 -0.6798914 0.04135257 -0.9108859 0.410535 0.0839259 -0.8872036 0.4536271 -0.1084933 -0.2282479 -0.9675283 -0.09103667 0.0643025 -0.9937437 -0.09112823 -0.1454512 -0.9851375 2.44148e-4 0.2139042 0.9768365 -0.05420082 -0.02978605 -0.9980773 -0.4613788 -0.03476053 -0.8865017 -0.5371563 -0.0458998 -0.8421888 -0.08493298 -0.1183202 -0.9893186 0.07412946 0.0313425 -0.9967345 -0.2645649 -0.311716 -0.9125645 -0.2481154 -0.06491285 -0.9665212 -0.1161229 -0.2345957 -0.9651173 0.09671312 -0.1611987 -0.9821467 -0.03405863 0.3933836 0.9187292 -0.2707297 0.1036714 0.9570299 -0.6044191 0.06619465 -0.7939085 -0.02768027 0.886227 0.4623859 0.09204381 -0.297708 0.9501938 0.08050781 -0.309183 0.9475692 -0.9827265 -0.109653 -0.1488998 -0.9644765 -0.1906796 -0.1827753 -0.9454939 -0.1228064 -0.3015534 -0.8305307 -0.5018769 -0.2414624 -0.8789026 -0.4163945 -0.2325815 -0.88287 -0.3890805 -0.2629169 -0.8544267 -0.4589374 -0.2435377 -0.9602649 -0.2518388 -0.1199988 -0.9717399 -0.2152165 -0.0966826 -0.9765923 -0.1817377 -0.1149327 -0.961974 -0.2399975 -0.1301614 -0.7686087 -0.6079592 -0.1989196 -0.7853328 -0.558916 -0.2660909 -0.8557695 -0.4889675 -0.1689504 -0.8568377 -0.2974029 -0.4211249 -0.8438368 -0.360271 -0.3976256 -0.8030641 -0.5758233 -0.1531724 -0.8764611 -0.447615 -0.1771599 -0.8497269 -0.4412671 -0.2884304 -0.7532274 -0.6159245 -0.2307199 -0.882931 -0.4182867 -0.2131413 -0.8680074 -0.3552965 -0.3467818 -0.8520157 -0.5146336 -0.09582811 -0.7506638 -0.6605731 0.009643793 -0.8130741 -0.5792413 -0.05780202 -0.7111423 -0.6994537 -0.0707724 -0.6911527 -0.7216101 0.03912472 -0.3608509 -0.9097873 -0.2050538 -0.382458 -0.9143956 -0.1325724 -0.4150212 -0.9072848 -0.06720173 -0.4453261 -0.8525345 -0.2735069 -0.4827723 -0.8604999 -0.1626331 -0.6598407 -0.7340922 -0.1603137 -0.6243782 -0.7583544 -0.1870784 -0.4929044 -0.8603168 -0.1298562 -0.4813379 -0.8591266 -0.1737418 -0.5836055 -0.8118839 -0.01443523 -0.5227211 -0.8422803 -0.1314737 -0.4790796 -0.8726768 -0.0941801 -0.876278 -0.4279305 -0.2213202 -0.5364239 -0.7795343 -0.3232825 -0.7718131 -0.6306345 -0.0808435 -0.5840327 -0.8056887 -0.0984832 -0.9797968 -0.1862545 -0.07281714 -0.9863277 -0.1395916 -0.08749651 -0.9929197 -0.1091647 0.04629653 -0.9836116 -0.1741386 0.04666274 -0.495468 -0.8551897 0.1519211 -0.7410809 -0.6599017 0.1235389 -0.09222692 -0.9179357 0.3857845 -0.1958678 -0.8548845 0.4803919 -0.08255255 -0.9221168 0.3779107 -0.302591 -0.8858303 0.3516953 -0.6070742 -0.699881 0.3762627 -0.01635789 -0.9405805 0.3390911 -0.8414869 -0.5401471 -0.009155511 -0.4756004 -0.8684653 0.1397747 -0.5052645 -0.7759941 0.3774529 -0.4981536 -0.7833186 0.3717765 -0.4280526 -0.8616596 0.2724997 -0.382458 -0.840907 0.3827937 -0.5759758 -0.7121495 0.4013184 -0.4150822 -0.9051485 0.09140288 -0.391644 -0.8982208 0.1993468 -0.3482467 -0.8043459 0.4813379 -0.4797815 -0.6797693 0.5546739 -0.3488571 -0.8925749 0.2855922 -0.4864345 -0.8672445 0.1058687 -0.4149907 -0.9073153 0.06701862 -0.4045534 -0.9144261 0.01037627 -0.4362926 -0.8994721 -0.02392649 -0.475753 -0.8790552 -0.02957242 -0.4928739 -0.8700217 0.008270502 -0.640553 -0.7531968 -0.1494491 -0.6229133 -0.7770928 -0.08981597 -0.4249397 -0.877987 0.2202826 -0.5157933 -0.8221076 0.2409131 -0.4869228 -0.8480178 0.2091433 -0.3350017 -0.9001435 0.2783593 -0.6010621 -0.787347 0.1369976 -0.5775018 -0.8154851 0.03772085 -0.477279 -0.8783838 0.02471995 -0.6097598 -0.7838374 0.1173437 -0.5964232 -0.8026368 0.001281738 -0.6059145 -0.7941222 -0.0469985 -0.5018769 -0.854854 0.1315958 -0.3617664 -0.8827784 0.2996307 -0.7740715 -0.2048402 -0.5989868 -0.7980896 -0.2777795 -0.5346233 -0.8031556 -0.4859768 -0.3445234 -0.6462905 -0.08145385 -0.7586901 -0.7222816 -0.6587115 -0.2106387 -0.6180608 -0.7788629 -0.1064485 -0.9911191 -0.1134373 0.06894129 -0.9838252 -0.1787774 0.009857475 -0.9815363 -0.1828974 -0.05563521 -0.9797052 -0.1831721 0.08099609 -0.9725639 -0.2182378 0.0803247 -0.9667348 -0.2368541 0.09640794 -0.9725334 -0.2281258 0.04562515 -0.9966735 -0.06579786 0.04745626 -0.9864193 -0.1636707 0.01348912 -0.9692068 -0.1986449 0.1452986 -0.9747612 -0.0808435 0.2080447 -0.9907224 -0.1321756 -0.03155612 -0.9709159 -0.2392956 -0.004486203 -0.9707938 -0.2364879 -0.04019284 -0.9502549 -0.2999054 -0.0839259 -0.9632557 -0.2682577 -0.01156651 -0.6950591 -0.6985687 -0.1697134 -0.9111301 -0.410474 0.03631699 -0.922544 -0.3668935 0.1194494 -0.9482712 -0.3167211 0.02047789 -0.7682119 -0.5326396 0.3551134 -0.3890805 -0.7915281 0.4712363 -0.6171758 -0.5952941 0.5144505 -0.812891 -0.5818659 -0.02505564 -0.3340861 -0.7970519 0.5030366 -0.4659566 -0.6606647 0.5885494 -0.253151 -0.8240913 0.5067293 -0.2378612 -0.9259011 0.2933439 -0.8576617 -0.4999237 0.1202429 -0.9342936 -0.3537706 0.04333627 -0.9231544 -0.3806574 0.05331581 -0.8636738 -0.5014191 0.05084383 -0.8908963 -0.4372692 0.1227149 -0.844966 -0.5340129 -0.02896201 -0.3696097 -0.707358 0.6024659 -0.858211 -0.4817652 -0.1769768 -0.6335642 -0.7734611 -0.01760917 -0.4120609 -0.9067965 0.08874779 -0.1272927 -0.963683 0.2347179 -0.6673178 -0.08175909 -0.740257 -0.6138798 -0.07406842 -0.7858821 -0.6987518 -0.1144139 -0.7061068 -0.8181707 -0.09967344 -0.5662099 -0.8787195 -0.3102207 -0.3627735 -0.802881 -0.3376263 -0.4912564 -0.8179571 -0.4912259 -0.2993561 -0.9400006 -0.08478039 -0.3303629 -0.9548631 -0.1739555 -0.2406995 -0.893582 -0.3810236 -0.2372204 -0.9725028 -0.1244544 -0.1967223 -0.7966857 0.03698843 -0.6032289 -0.8860744 -0.03369241 -0.4622943 -0.7817621 -0.1778618 -0.5976135 -0.6811426 -0.07187104 -0.7285684 -0.04544204 -0.9432966 -0.3287454 -0.04940944 -0.9886776 0.1415143 -0.05890071 0.02615433 0.9978942 -0.3158665 0.2583697 0.9129307 -0.1373028 0.674337 0.725486 -0.00213629 0.5372784 0.843379 -0.07473981 0.848384 -0.5240638 -0.1190832 0.6568804 -0.744499 -0.6532182 0.6606647 -0.3698538 -0.7298807 0.4537492 -0.5112156 -0.04879909 0.9896848 -0.1345561 0.005035519 0.9227271 0.3853267 -0.7278054 0.2289499 -0.6464126 -0.167394 -0.3050325 -0.9374981 -0.7171545 -0.06259346 -0.6940824 -0.6383252 -0.2413403 -0.7309183 -0.1020539 -0.3167516 0.9429914 -0.09518718 -0.6285287 0.7719047 -0.7514573 0.6324046 0.1878719 -0.8414869 0.5395367 -0.02728354 -0.07055878 -0.854915 0.5139012 -0.6449477 -0.4507889 -0.6170538 -0.3089084 -0.2564165 0.9158605 -0.2930998 -0.5030366 0.8130131 -0.5750297 -0.6844386 -0.4481338 -0.5745415 -0.8046205 -0.1498153 -0.4475845 -0.8595843 0.246437 -0.469161 -0.7227699 0.5074008 -0.530076 -0.8463698 -0.05142366 -0.5633106 -0.821192 -0.09097564 -0.454268 -0.8906827 0.01696825 -0.4619587 -0.8629414 -0.2047181 -0.2279122 -0.9675588 0.1089205 -0.1295511 -0.9601734 -0.2474746 0 -0.975982 0.2178106 0 -0.9731132 -0.2302316 0 -0.7661061 -0.6426588 -0.1673635 -0.7878353 -0.5926694 -0.4653767 -0.7966857 -0.3855708 -0.6701254 -0.7169103 -0.1921445 -0.5007172 -0.7666555 -0.4018372 -0.4155095 -0.9095737 0.004547238 0.06134217 -0.6567583 0.7515794 -0.1837214 -0.6895352 -0.7005219 -0.5361492 -0.4844813 0.6912137 -0.6159551 -0.7876522 0.01330602 -0.5633412 -0.132847 0.8154546 -1.22074e-4 -0.05767995 0.9983215 -0.5415509 -0.6697592 0.5080111 -0.3024384 -0.4245735 0.8533586 -0.6635945 -0.7480697 -0.004364132 -0.3946654 -0.8628804 0.3156834 -0.480636 -0.8583636 -0.1792352 -0.2484817 -0.6226081 0.7419965 -0.3787958 -0.5842769 -0.7177038 0.4369029 -0.3515427 -0.8279367 -0.04544204 -0.2970061 -0.9537644 -0.5342876 -0.6765953 -0.5066683 -0.9354839 -0.2154607 0.2800073 -0.5493026 0.1494491 0.8221381 -0.9805902 -0.195471 0.01364177 -0.06823939 -0.01690721 -0.9974975 -0.3166601 -0.2046571 -0.9261757 -0.1018097 0.1600695 0.981811 -0.6383557 0.6396069 -0.4282052 0.1943418 0.043733 -0.9799494 0.5270547 0.3156224 -0.788995 0.07382422 -0.08069092 -0.9939879 0.1157567 -0.3068941 -0.94467 -0.208594 -0.6522111 -0.728721 -0.1279031 -0.5486007 -0.8262276 -0.001983702 -0.1694387 -0.9855343 -0.1447798 -0.2669454 -0.9527574 -0.2825403 -0.8784143 -0.3854182 -0.282815 -0.8164922 -0.5033113 -0.4811243 -0.8114261 -0.3317362 -0.4456313 -0.8824732 -0.1503036 -0.3944517 -0.9156774 0.07690662 0.2548906 0.3429975 -0.9040803 0.03857535 0.312418 -0.9491562 -0.333903 -0.9157994 -0.2231208 -0.3145238 -0.8413038 -0.4395581 -0.2999969 -0.7660146 -0.5684988 -0.2423169 -0.7142247 -0.6565752 -0.3927427 -0.9169591 -0.07000946 -0.5684988 -0.8222602 0.02539139 -0.8720054 -0.4882962 0.03326517 -0.7279275 -0.6829432 0.06064027 -0.7148045 -0.4282968 -0.5527818 -0.1251258 -0.4609516 -0.8785364 0.0869472 -0.1271706 -0.9880368 -0.5718864 -0.5197302 -0.6346324 -0.6792505 -0.3490402 -0.6455581 -0.9014863 -0.3099154 -0.3020417 -0.4745934 0.1684011 -0.863918 -0.32078 0.127079 -0.9385663 -0.653676 -0.6902371 -0.3101596 -0.6212958 -0.7722709 -0.1325418 -0.8329722 -0.553148 -0.01318395 -0.3956114 -0.3755303 -0.8380993 -0.7195349 -0.6542863 -0.232612 -0.160802 -0.5284585 -0.8335826 -0.1050752 -0.2762535 -0.9552904 -0.9689627 -0.2434766 0.04223757 -0.2109134 -0.6494644 -0.7305216 -0.5284891 -0.2016053 -0.8246406 -0.2798547 -0.05685597 -0.9583423 -0.6996673 -0.09405803 -0.7082126 0.1852778 0.3582568 -0.9150364 -0.7547227 -0.3889889 0.5282449 -0.7986084 -0.4122745 0.4384289 -0.7447432 -0.5752434 0.3382672 -0.7026582 -0.4117252 0.5802484 0.1434065 0.14185 -0.9794305 0.01443523 0.2969756 -0.9547411 0.3427839 -0.1502731 -0.9273049 -0.7673879 -0.5380413 0.3486739 -0.8826869 -0.2791528 0.3779717 -0.7702566 -0.4041261 0.4932706 -0.8458205 -0.4614704 0.2674947 0.03131198 -0.8104496 -0.5849483 0.01385539 -0.7556383 -0.6548051 -0.2948393 -0.5702078 -0.7667471 -0.3931394 -0.6462905 -0.6539812 -0.858211 -0.3590808 -0.3667104 -0.603412 -0.793115 -0.08261358 -0.4144719 -0.902707 -0.1153294 -0.6591387 -0.7426984 0.1178625 -0.7624134 -0.5683157 -0.3093051 -0.7859737 -0.5695975 0.2403637 0.4087039 0.02945035 -0.9121677 -0.8346507 -0.5269936 0.1600085 -0.8283944 -0.4002503 0.3917966 -0.7825862 -0.3980224 -0.4785913 -0.2897732 -0.8546709 -0.4307077 0.2311472 -0.8605304 -0.4539018 -0.2749718 -0.9592883 -0.06396675 -0.1928159 -0.8693808 -0.4549089 0.2349315 -0.4664754 -0.8527482 -0.4062929 -0.9054842 -0.1224707 -0.4289681 -0.9015168 -0.05645924 -0.8075503 -0.5573595 0.1927854 -0.6414685 -0.7395246 0.2039857 -0.2326731 -0.9724418 -0.01254308 -0.5626087 -0.7586596 -0.3284097 -0.3393964 -0.92996 0.1412702 0 -0.7359539 0.6770226 0.191412 -0.7544786 0.6277657 0.1544236 -0.7665944 0.6232795 0 -0.7608265 0.6489151 0 -0.7025361 0.7116001 0.2487564 -0.7341228 0.6317942 0 -0.6714988 0.7409894 0.2881252 -0.6852016 0.6689047 -0.1645253 -0.9179663 0.3608509 0.1133457 -0.8515275 0.511887 0.1853083 -0.7823725 0.5945921 -0.1105685 -0.8586993 0.5003815 0 -0.7429426 0.669332 0.2855312 -0.7034822 0.6508072 -0.1537522 -0.8544877 0.4961699 -0.02725303 -0.8681906 0.4954375 0 -0.8876003 0.4605854 0.2885525 -0.8215278 0.4917142 -0.4921415 -0.6112858 0.6197394 -0.2891324 -0.4828944 0.8265328 -0.3574938 -0.6829738 0.6369518 -0.3766289 -0.5665151 0.732902 0 -0.9783929 0.2066713 0.1787164 -0.9396344 0.2916959 0.3744316 -0.7325053 0.5684988 0.2609332 -0.8688315 0.4206976 0.3005158 -0.7315592 0.6119266 0.1246376 -0.8437758 0.5219886 -0.07742542 -0.7031159 0.7068392 -0.2292245 -0.6120487 0.7568285 -0.377575 -0.7866451 0.4884487 -0.2277596 -0.6756493 0.7011322 -0.3438826 -0.6461379 0.6813257 0.09595018 -0.7413251 0.6642048 -0.1353191 -0.7942748 0.5922727 -0.06558424 -0.4990692 0.86404 -0.6386914 -0.4262215 0.6405835 -0.6469924 -0.2999969 0.7009491 -0.1224402 -0.4863735 0.8651082 -0.5699332 -0.5346538 0.6239204 -0.1543931 -0.5079196 0.847438 0.09756767 -0.8957183 0.4336985 -0.08801537 -0.8836939 0.4596393 0.1297037 -0.2218085 0.9663991 0.2903226 -0.5957823 0.7488021 -0.1050142 -0.5225685 0.8460952 -0.2257759 -0.8988006 0.3756523 -0.6615803 -0.09082305 0.7443464 -0.159154 -0.3524582 0.9221778 0.003082334 -0.8980987 0.4397412 0.201178 -0.4290597 0.8805811 0.4377575 -0.06106752 0.897 0 -0.8804895 0.4739829 0 -0.7791376 0.6268197 -0.2716453 0.04446542 0.9613636 -0.6519364 0.2731102 0.707358 -0.201178 0.7167577 0.6676229 -0.2973418 0.479812 0.8254036 -0.5240638 0.6467788 0.5540636 -0.3331705 0.851619 0.4046144 -0.05423134 0.7881405 0.6130558 -0.1712393 0.9293802 0.3269143 3.05185e-5 0.8558 0.5172582 0.01931822 0.8070925 0.5900754 -0.05728322 0.9501938 0.3062533 0 0.9553514 0.2953581 0.155797 -0.8065432 0.5702078 0 -0.4835658 0.8753014 0 -0.901822 0.4320505 0.2125919 -0.8745384 -0.4358043 0.1864376 -0.9801935 0.06662189 0 -0.9962767 -0.08609271 0 -0.7977843 -0.6029237 0.480636 -0.8583636 -0.1792352 0.3946654 -0.8628804 0.3156834 0.2484817 -0.6226081 0.7419965 -0.1864376 -0.9801935 0.06662189 -0.155797 -0.8065432 0.5702078 -0.2125919 -0.8745384 -0.4358043 0.1673635 -0.7878353 -0.5926694 0.4653767 -0.7966857 -0.3855708 0.1011383 -0.9885556 -0.1116672 0.03949093 -0.9610889 0.2733238 0 -0.9479659 0.3183691 0 -0.9948118 -0.1015655 -0.06060975 -0.8413343 0.5370953 0 -0.7924131 0.6099429 -0.3086642 -0.9510178 0.01577806 -0.1965087 -0.9626148 0.186346 -0.128727 -0.8915067 0.4342784 -0.3131504 -0.9071627 0.2809839 0.3086642 -0.9510178 0.01577806 0.3131504 -0.9071627 0.2809839 0.128727 -0.8915067 0.4342784 0.1965087 -0.9626148 0.186346 0.2825403 -0.8784143 -0.3854182 0.333903 -0.9157994 -0.2231208 0.2906888 -0.9300821 -0.2245551 0.3944517 -0.9156774 0.07690662 -0.03949093 -0.9610889 0.2733238 -0.218604 -0.9661855 -0.1366618 -0.1011383 -0.9885556 -0.1116672 0.06060975 -0.8413343 0.5370953 -0.2906888 -0.9300821 -0.2245551 0.218604 -0.9661855 -0.1366618 0.1092257 0.2733238 -0.9556871 0.2146672 -0.5248268 -0.8236641 0 -0.5921506 -0.8058108 0 0.5977661 -0.8016297 -0.1439863 -0.8648335 0.4809107 0 -0.8463393 0.5326091 0.1860103 -0.4754784 -0.859798 0.0132755 0.404828 -0.9142735 0.06649982 -0.8936735 0.4437086 -0.1864376 -0.896176 -0.4025391 -0.2304452 -0.8562883 -0.4621723 -0.1860103 -0.4754784 -0.859798 -0.2146672 -0.5248268 -0.8236641 0.2704245 -0.8872951 0.3735466 0 -0.9311503 -0.3646046 0.2106692 -0.4406872 -0.8725852 0.02279728 0.5122837 -0.8584857 -0.2838526 -0.7725761 -0.5678884 0.1447798 -0.2669454 -0.9527574 -0.03857535 0.312418 -0.9491562 -0.2106692 -0.4406872 -0.8725852 0.3617664 -0.8827784 0.2996307 0.1864376 -0.896176 -0.4025391 0.208594 -0.6522111 -0.728721 0.2838526 -0.7725761 -0.5678884 0.2304452 -0.8562883 -0.4621723 -0.02279728 0.5122837 -0.8584857 -0.0132755 0.404828 -0.9142735 -0.2704245 -0.8872951 0.3735466 -0.06649982 -0.8936735 0.4437086 0.1439863 -0.8648335 0.4809107 -0.1092257 0.2733238 -0.9556871 -0.1762444 0.9555956 0.2361217 -0.04937893 0.9807733 0.1887264 0.4921415 -0.6112858 0.6197394 0.7621693 -0.5456709 0.3482162 0.6371044 -0.6951201 0.3329264 0.3438826 -0.6461379 0.6813257 -0.7621693 -0.5456709 0.3482162 -0.8732566 -0.3204138 0.3670156 0.2149418 -0.9287087 0.3021332 -0.1246376 -0.8437758 0.5219886 0.1353191 -0.7942748 0.5922727 0.4429762 -0.8398389 0.3137302 -0.3939634 0.8646199 0.311716 -0.6301157 0.6456191 0.4314097 0.2277596 -0.6756493 0.7011322 0.5739921 -0.7556383 0.3154393 -0.7736442 0.3821833 0.5053255 0.7509384 -0.6563311 0.07266455 0.6496475 -0.7579577 0.05862605 -0.1254921 -0.9891354 0.07617419 -0.1168553 -0.970275 0.2117679 0.4822535 -0.8745995 0.04998928 -0.2149418 -0.9287087 0.3021332 0.9482712 -0.2985321 0.1076998 0.8509171 -0.5156713 0.09997862 -0.880398 0.03213596 0.4730979 -0.8371838 0.1775261 0.5172582 0.1762444 0.9555956 0.2361217 0.2381054 0.971221 0.004821896 0.4344004 0.8988617 0.05749684 0.3939634 0.8646199 0.311716 -0.6371044 -0.6951201 0.3329264 -0.5739921 -0.7556383 0.3154393 0.3331705 0.851619 0.4046144 0.1712393 0.9293802 0.3269143 -0.4429762 -0.8398389 0.3137302 0.6615803 -0.09082305 0.7443464 0.8371838 0.1775261 0.5172582 0.880398 0.03213596 0.4730979 0.6469924 -0.2999969 0.7009491 0.8753319 0.4702292 0.1124302 0.9244056 0.3682363 0.09921562 0.8732566 -0.3204138 0.3670156 0.994171 -0.04580825 0.09756767 0 -0.9982299 0.05932796 0.4381847 -0.8979156 -0.04119998 0.1168553 -0.970275 0.2117679 -0.4344004 0.8988617 0.05749684 -0.2381054 0.971221 0.004821896 -0.4381847 -0.8979156 -0.04119998 -0.4822535 -0.8745995 0.04998928 -0.2609332 -0.8688315 0.4206976 -0.6496475 -0.7579577 0.05862605 0.1254921 -0.9891354 0.07617419 -0.1787164 -0.9396344 0.2916959 -0.7509384 -0.6563311 0.07266455 -0.8509171 -0.5156713 0.09997862 0.7736442 0.3821833 0.5053255 0.6301157 0.6456191 0.4314097 0.6518144 0.7508164 0.1065706 0.8068178 0.5766167 0.1284829 -0.9482712 -0.2985321 0.1076998 0.6519364 0.2731102 0.707358 0.5240638 0.6467788 0.5540636 0 0.9986572 -0.05175936 0 0.9842525 0.1766411 -0.09375286 0.9944151 -0.04803609 0.5699332 -0.5346538 0.6239204 0.04937893 0.9807733 0.1887264 0.09375286 0.9944151 -0.04803609 -0.6518144 0.7508164 0.1065706 0.05728322 0.9501938 0.3062533 -0.8068178 0.5766167 0.1284829 -0.8753319 0.4702292 0.1124302 -0.9244056 0.3682363 0.09921562 -0.9763482 0.1976379 0.08755761 -0.9079867 -0.1181676 0.4019593 -0.994171 -0.04580825 0.09756767 0.6386914 -0.4262215 0.6405835 0.9079867 -0.1181676 0.4019593 0.9763482 0.1976379 0.08755761 0 -0.9914243 -0.1305887 -0.3933225 -0.9132359 -0.1060823 -0.2949004 -0.9523301 -0.07773059 0 -0.9978637 -0.06518751 -0.4749901 -0.8763085 -0.08020263 0.3933225 -0.9132359 -0.1060823 0.2949004 -0.9523301 -0.07773059 0.4749901 -0.8763085 -0.08020263 -0.4435255 -0.704001 -0.5546434 -0.3086032 -0.7161169 -0.6259957 -0.4832301 0.842494 -0.2379833 -0.6638997 0.728843 -0.1672719 0.990051 -0.1324503 -0.04681539 0.9878537 0.1468856 -0.05029445 0.9808649 0.1712393 -0.09237951 0.9898679 -0.02853477 -0.1390728 -0.7203589 -0.6327403 -0.2840052 -0.5891293 -0.6796167 -0.4370251 0 0.9719535 -0.2350535 -0.1811578 0.9572436 -0.2255012 -0.1648915 0.9317911 -0.3232825 0 0.9482101 -0.3175756 -0.7639698 0.6367687 -0.1040071 -0.6387829 0.768395 -0.03827017 -0.7563707 0.6541337 -0.002227842 0.9578844 -0.2529069 -0.1357463 0.9369488 -0.3464461 -0.04522842 0.9828181 0.1296426 -0.1312906 0.9481796 0.2538225 -0.1909848 0.8393201 -0.5399029 -0.06317329 0.7438887 -0.6610614 -0.09775078 -0.9317911 0.359386 -0.05041652 0.8772851 -0.4590289 -0.1399884 0.7917112 -0.5827509 -0.1831415 -0.8245491 0.5657522 0.002502501 0.4435255 -0.704001 -0.5546434 0.3086032 -0.7161169 -0.6259957 0.3722037 0.8844569 -0.2813501 0.1648915 0.9317911 -0.3232825 0 -0.7200843 -0.6938688 -0.9878537 0.1468856 -0.05029445 -0.9808649 0.1712393 -0.09237951 -0.3853267 -0.8863491 -0.2566301 -0.5016022 -0.8123417 -0.2974029 0.7203589 -0.6327403 -0.2840052 0.5891293 -0.6796167 -0.4370251 -0.3722037 0.8844569 -0.2813501 -0.3100375 0.9378033 -0.1561632 0.9317911 0.359386 -0.05041652 0.9344767 0.3555101 -0.01715135 0.8877835 0.4588153 -0.03592026 -0.839137 0.5426496 -0.0361644 -0.8088015 0.585223 -0.05767995 -0.865566 0.500473 -0.01690721 0.6378674 -0.7530748 -0.1611682 -0.8877835 0.4588153 -0.03592026 -0.9344767 0.3555101 -0.01715135 0.8245491 0.5657522 0.002502501 0.865566 0.500473 -0.01690721 -0.7438887 -0.6610614 -0.09775078 -0.7917112 -0.5827509 -0.1831415 -0.8772851 -0.4590289 -0.1399884 -0.8393201 -0.5399029 -0.06317329 0.9548631 -0.1739555 -0.2406995 0.9725028 -0.1244544 -0.1967223 0.9814753 0.05468916 -0.1835688 0.9784234 0.03787344 -0.2030091 0.3100375 0.9378033 -0.1561632 0.4580218 0.8835414 -0.09772026 0.9895627 0.007141292 -0.1438032 0.1811578 0.9572436 -0.2255012 0 -0.9696646 -0.2443006 0.3853267 -0.8863491 -0.2566301 -0.9895627 0.007141292 -0.1438032 0.5016022 -0.8123417 -0.2974029 0.839137 0.5426496 -0.0361644 0.8088015 0.585223 -0.05767995 0.5371868 -0.8064516 -0.2469863 0.8179571 -0.4912259 -0.2993561 -0.6378674 -0.7530748 -0.1611682 -0.9369488 -0.3464461 -0.04522842 0.7563707 0.6541337 -0.002227842 0.7639698 0.6367687 -0.1040071 -0.4580218 0.8835414 -0.09772026 0.6638997 0.728843 -0.1672719 0.6387829 0.768395 -0.03827017 -0.9578844 -0.2529069 -0.1357463 -0.990051 -0.1324503 -0.04681539 -0.9898679 -0.02853477 -0.1390728 0.4832301 0.842494 -0.2379833 0.893582 -0.3810236 -0.2372204 -0.5371868 -0.8064516 -0.2469863 0.6957915 -0.6061891 0.3851436 0.8534806 -0.4638203 0.2374645 0.8075503 -0.5573595 0.1927854 0.6414685 -0.7395246 0.2039857 0.7431257 -0.563921 0.3601794 0.8247017 -0.5013276 0.2617267 0.7009797 -0.6287118 0.3366191 0.6713157 -0.6160161 0.4120914 0.5052645 -0.7759941 0.3774529 0.4981536 -0.7833186 0.3717765 0.6461379 -0.6293222 0.4317148 0 -0.8336741 0.5522325 0 -0.8192999 0.5733208 -0.6957915 -0.6061891 0.3851436 -0.6713157 -0.6160161 0.4120914 0 -0.8780176 0.4785913 -0.7009797 -0.6287118 0.3366191 0.668691 -0.6484268 0.3637806 0 -0.8774377 0.4796594 -0.8709372 -0.3873714 0.3022553 -0.764153 -0.4980926 0.409772 -0.8546709 -0.4288766 0.2924894 -0.8882718 -0.3751335 0.2649312 0.5759758 -0.7121495 0.4013184 0.8283944 -0.4002503 0.3917966 0.8651998 -0.4371166 0.2456129 0.6099734 -0.6408887 0.4660176 0.6621601 -0.6353648 0.3971984 0 -0.8523209 0.5229957 -0.8651998 -0.4371166 0.2456129 0.8546709 -0.4288766 0.2924894 0.8882718 -0.3751335 0.2649312 0.4756004 -0.8684653 0.1397747 0.8709372 -0.3873714 0.3022553 0.764153 -0.4980926 0.409772 0.6171758 -0.5952941 0.5144505 0.7682119 -0.5326396 0.3551134 -0.668691 -0.6484268 0.3637806 -0.6621601 -0.6353648 0.3971984 -0.8534806 -0.4638203 0.2374645 -0.6099734 -0.6408887 0.4660176 -0.6461379 -0.6293222 0.4317148 -0.8247017 -0.5013276 0.2617267 -0.7431257 -0.563921 0.3601794 0.8458205 -0.4614704 0.2674947 0.4797815 -0.6797693 0.5546739 0.7702566 -0.4041261 0.4932706 0 -0.8312937 0.5557726 -0.05533003 -0.9906003 -0.1248817 -0.5355998 -0.7360149 -0.4139836 -0.5212256 -0.8199408 -0.2365489 -0.3155919 -0.8707236 -0.3770867 0.2362437 -0.754326 -0.6125065 0.2870571 -0.782342 -0.5527207 0.5355998 -0.7360149 -0.4139836 0.4870144 -0.7341838 -0.4730064 -0.1629078 -0.971221 -0.1737113 0 -0.99588 -0.09051787 0 -0.9970702 -0.07638782 0.1869869 -0.9154943 -0.3561205 0.1552782 -0.9528489 -0.2606281 0.3155919 -0.8707236 -0.3770867 0.05700856 -0.9974975 0.04123049 -0.02166813 -0.9966735 0.07843255 0.05533003 -0.9906003 -0.1248817 0.5212256 -0.8199408 -0.2365489 0.1629078 -0.971221 -0.1737113 0.3393964 -0.92996 0.1412702 0.2709738 -0.9229103 0.2734153 0.3350017 -0.9001435 0.2783593 0.4249397 -0.877987 0.2202826 -0.1393475 -0.9566943 0.255501 0 -0.9756463 0.2192144 0.2326731 -0.9724418 -0.01254308 0.06637775 -0.961211 0.2676473 -0.06637775 -0.961211 0.2676473 0.1393475 -0.9566943 0.255501 0.01959288 -0.984283 -0.1754204 0.5626087 -0.7586596 -0.3284097 0.7825862 -0.3980224 -0.4785913 0.4249092 -0.4144719 -0.8047426 0.2000793 -0.7195959 -0.6649067 0 -0.6929228 -0.7209693 -0.2000793 -0.7195959 -0.6649067 0 -0.9830012 -0.1834467 -0.01959288 -0.984283 -0.1754204 -0.2709738 -0.9229103 0.2734153 0.6996673 -0.09405803 -0.7082126 0.4372997 -0.2750939 -0.8561663 0 -0.2783593 -0.960448 0 -0.3793451 -0.9252297 -0.4372997 -0.2750939 -0.8561663 -0.4249092 -0.4144719 -0.8047426 0.8709678 -0.4836878 0.08624529 0.7603381 -0.6380505 -0.1214026 0.6954863 -0.7155675 0.06497389 0.7755059 -0.5757012 0.2590106 0.856502 -0.4351634 0.2774743 0.9063387 -0.3918271 0.1579943 0 -0.9930112 0.1178014 0.3032014 -0.95291 -7.93481e-4 -0.5927916 -0.6622822 0.4581744 -0.856502 -0.4351634 0.2774743 0.4828028 -0.7485275 0.4544511 0.5927916 -0.6622822 0.4581744 0.4168523 -0.8646199 0.280343 -0.3032014 -0.95291 -7.93481e-4 -0.4828028 -0.7485275 0.4544511 0 -0.8377331 0.5460372 0 -0.9222083 0.3866695 -0.4168523 -0.8646199 0.280343 -0.8709678 -0.4836878 0.08624529 -0.9063387 -0.3918271 0.1579943 0 -0.8280282 0.560625 -0.6954863 -0.7155675 0.06497389 -0.7603381 -0.6380505 -0.1214026 -0.7755059 -0.5757012 0.2590106 0.8414869 -0.5401471 -0.009155511 0.7067171 -0.6713157 -0.2233039 0.8576617 -0.4999237 0.1202429 0.7624134 -0.5683157 -0.3093051 0.5949584 -0.3150426 -0.7394025 0.5284891 -0.2016053 -0.8246406 0.7195349 -0.6542863 -0.232612 0.7778863 -0.5266274 -0.3427839 0.6265145 -0.4304025 -0.6497696 0 -0.738609 -0.6741234 -0.3592029 -0.6078066 -0.708182 -0.5949584 -0.3150426 -0.7394025 0.3592029 -0.6078066 -0.708182 0 -0.9292886 0.369335 -0.5766777 -0.7676931 0.2793359 -0.5135045 -0.8247017 -0.2369762 0 -0.9856868 -0.1684316 0.5766777 -0.7676931 0.2793359 0.5135045 -0.8247017 -0.2369762 -0.7778863 -0.5266274 -0.3427839 0.8346507 -0.5269936 0.1600085 0.7859737 -0.5695975 0.2403637 -0.6265145 -0.4304025 -0.6497696 0.638081 -0.2083804 -0.741203 0.9929807 0.01715135 -0.1169164 0.8891263 -0.3189489 0.328135 0.7040315 -0.6412244 -0.3050935 0.9212318 -0.03772085 0.3871273 0.8527177 0.1122165 0.5101169 0.8633686 -0.4637898 0.1986144 0.9354534 -0.3465071 0.06958216 0.4652852 -0.03967404 -0.8842433 0.4528031 -0.2790613 -0.8467666 0.8438673 -0.2338938 0.4828333 0.9119541 -0.04748678 0.4074831 0.1348002 0.6332591 0.7620777 0.1993774 0.3439741 0.917539 0.5756707 -0.8173772 0.0212714 0.9711905 0.09112823 0.2200384 0.1701406 0.777337 0.6056093 -0.5741447 0.4662618 0.6729637 -0.5677664 0.4123966 0.7124241 -0.5186926 0.5633717 0.6430555 -0.5050508 0.5991394 0.6212348 0.08847314 -0.7606738 -0.643025 0.02871787 -0.8221381 -0.5685293 -0.5034944 0.7809992 0.3694266 -0.5292825 0.7329325 0.4273507 -0.4621112 0.8427992 0.2758568 -0.5449385 0.8069704 0.2275765 0.1186559 -0.586932 -0.8008667 -0.5134739 0.7073885 0.4856715 -0.5385296 0.672811 0.5072482 0.02706986 -0.4906461 -0.8709067 -0.1033967 -0.6985687 -0.7080295 -0.1077303 -0.8830531 -0.456679 -0.366863 0.1245155 0.9218726 -0.5443892 0.1181676 0.8304392 0.9292276 -0.3220618 0.1810968 0.1266518 0.2179021 0.9676809 0.139378 0.4219489 0.8958098 -0.1579027 0.8917204 0.4241157 -0.1839656 0.9504685 0.2504959 0.9834895 -0.1576281 -0.08865624 0.989288 -0.1419416 -0.033845 0.7374493 -0.6512955 0.1786859 0.5406354 -0.3837397 0.7485885 0.8665731 -0.4990081 -0.003845274 0.6817835 0.6583453 -0.3189489 0.1405682 -0.8480789 0.5108494 0.7451094 -0.6631367 0.0707724 0.3511765 -0.9330729 0.07760852 0.1201208 0.1331828 0.9837642 0.2168645 0.8977325 0.3833735 -0.02706986 0.7342754 0.6782739 0.04083377 -0.9221778 -0.3845638 -0.02905356 -0.9928892 -0.1153905 0.968627 0.2306588 -0.09234899 0.9676198 0.2439954 0.06451612 0.2931608 0.02270573 -0.9557787 0.2580035 -0.1836909 -0.9484848 0.8248848 -0.4685202 0.3162023 0.8655354 -0.5005951 -0.0140385 0.9061861 -0.02993863 0.4217963 0.2702414 0.00653094 0.9627674 0.155858 -0.3363445 -0.9287393 0.8196051 -0.4170659 0.3927732 0.1609546 -0.1742607 0.9714347 0.29017 -0.5636464 0.773339 0.5029145 -0.7489547 0.4313791 -0.3420209 -0.3555101 0.869808 0.3261208 0.9425337 0.07248145 0.4277474 0.3730278 -0.8232979 0.01590013 -0.9921873 -0.1236305 0.1127964 -0.9918516 0.0587176 0.9064608 0.03790396 -0.4205451 0.9930112 -0.1016877 0.05981624 0.09582811 -0.2992035 -0.9493393 0.8709372 -0.4913175 0.005096554 0.6527299 0.7126988 -0.2568438 0.9974975 -0.06958216 -0.01001006 -0.4651021 0.879574 0.09991759 0.9420759 -0.2462233 0.227607 0.9833979 -0.03759878 0.177343 0.3027741 0.9425947 -0.1405987 0.4829554 0.6425367 -0.5948668 0.9899289 -0.1196631 -0.07544171 0.9723808 0.09826958 0.2116153 0.4309824 -0.8362682 -0.3389385 0.4525589 -0.7944884 -0.4048891 0.2415845 -0.8190863 -0.5202795 0.1587573 -0.9515671 -0.2631916 0.9562365 -0.146031 0.2535173 0.9850154 -0.1383709 0.1026337 0.8642231 -0.4993133 -0.06106752 0.8581805 -0.4647664 0.2179327 0.9468978 -0.3202918 0.02749717 0.9014558 -0.4048891 -0.1528672 0.4403516 0.1284829 -0.8885769 0.8169195 -0.4445631 -0.3673818 0.7835627 -0.5992004 -0.164159 0.7801752 -0.5955687 -0.19129 0.5190894 -0.7396466 -0.4282357 0.7747124 -0.5825068 -0.2458571 0.9890133 -0.1315653 -0.06723225 0.1391034 -0.2779015 -0.9504685 0.5470443 -0.3895077 -0.7409284 0.6333506 -0.3356731 -0.6972259 0.6407361 -0.7624439 -0.08996856 0.7049471 -0.4606464 0.5392926 0.7171239 -0.6956694 -0.04153567 0.99588 -0.0811792 0.04022336 0.8066958 -0.5899228 -0.03439432 0.7133091 -0.6763817 0.1835078 0.679281 -0.6989654 0.2235481 0.7557909 -0.5699942 -0.3221839 0.9346294 -0.2236091 -0.2764366 0.9165624 -0.009094476 0.3997619 0.9306314 -0.0167241 0.3655202 0.3204444 -0.7336955 -0.5991394 0.1489914 -0.6139714 -0.7751091 0.5549486 -0.520951 -0.6485489 0.4841762 0.27781 0.8296762 0.449202 0.3870052 0.8052309 0.9147008 -0.4025697 0.03457742 0.6685385 -0.7133091 0.2102725 0.3714408 -0.8497574 0.3740043 0.4011353 -0.729545 0.5538805 0.8992279 0.03112888 0.4363536 0.4483779 0.2953276 0.8436232 0.9377422 -0.1788079 -0.297708 0.9138463 -0.3929563 -0.1021149 0.9659109 -0.2425611 0.0902127 0.9710379 -0.1620227 0.1754204 0.496231 -0.634846 0.5921812 0.8830226 -0.3672903 0.2920926 0.7394635 -0.6707968 -0.05661183 0.9670095 0.06140321 0.2470778 0.5309 -0.5491806 -0.6453749 0.3995788 -0.6812647 -0.6133305 0.5785394 -0.7299417 -0.3639027 0.9040803 -0.3979614 -0.1556444 0.6383862 -0.7610401 -0.1151768 0.5680105 -0.8224128 0.03100675 0.998291 0.04910427 0.03085416 0.4915006 -0.8540605 0.1702322 0.3867916 -0.6155278 0.686636 0.7286294 -0.5996887 -0.3307596 0.8720359 -0.1547288 -0.4642781 0.5105746 -0.8392896 0.1867427 0.9285256 -0.3250831 0.1792047 0.5488754 -0.3561205 0.7562181 0.911069 -0.4101077 -0.04150515 0.7232887 0.6571856 -0.211951 0.6667684 -0.5081942 -0.5450911 0.5723441 -0.6047853 -0.5536973 0.3803827 -0.7325663 -0.5644704 0.7242958 -0.4796289 -0.4953154 0.793115 -0.5515305 -0.2583392 0.541673 -0.7202674 -0.4333323 0.2109744 0.9769585 -0.03195285 0.6089969 0.7295145 0.3112277 0.8110294 0.5849483 -0.001770019 0.9039888 -0.3819391 -0.1920835 0.5309 -0.8422498 -0.09332555 0.4927213 -0.8382824 -0.2334055 0.7389752 0.6624958 -0.1224097 0.6495255 -0.7602771 -0.007293879 0.6940214 -0.7145299 -0.08792382 0.3519089 -0.9088717 -0.2237312 0.3104038 -0.9396649 0.1437422 0.8518937 -0.5191199 0.06894129 0.9739983 0.2119205 0.07998901 0.8922697 -0.2570574 0.3711356 0.9840388 -0.1754814 -0.02841269 0.3142491 0.9374371 0.1497848 0.9054537 -0.4013794 0.1379436 0.563921 0.1307412 0.8153935 0.4797204 -0.0946989 0.8722801 0.5193335 -0.7711722 0.3681142 0.6045412 -0.4130375 0.6810816 0.970275 -0.1511582 0.188879 0.5088962 0.6156194 0.6016419 0.7371746 0.244789 -0.6297799 0.6554766 -0.1743828 -0.7347636 0.9844966 -0.01577806 -0.1746574 0.6510208 -0.6122928 -0.448561 0.7207556 -0.01116973 0.6930754 0.6850795 -0.5839412 0.4354686 0.65215 -0.5594348 -0.5115818 0.885342 -0.0241096 0.4642475 0.8904996 -0.3599353 -0.2782983 0.8179571 0.310007 -0.4845729 0.5402082 -0.8128605 -0.2176885 0.9365521 -0.1973631 -0.2896206 0.7728202 -0.6142155 0.1595202 0.5850399 -0.5184789 -0.6235847 0.6805322 -0.4969939 -0.5383465 0.9962157 -0.03607285 -0.07901239 0.9823603 -0.009063959 -0.1867427 0.666982 0.6406446 0.3803521 0.5629444 0.8233894 -0.07119965 0.9434187 -0.1479232 -0.2967315 0.9411298 -0.3249 0.09295934 0.5002289 -0.2240669 -0.8363597 0.09387493 -0.08417004 -0.9920042 -0.2236701 0.453444 -0.8627278 0.2331614 0.3420209 -0.9102756 0.9426558 0.2110354 -0.2584918 0.8481704 -0.5264748 0.05813771 0.5574206 -0.8238167 -0.1028779 0.6023133 -0.6399121 -0.4771569 0.9118015 -0.410535 0.002288877 0.7472457 0.1094698 -0.6554461 0.5810725 0.3822138 -0.7184668 0.9543749 0.01794487 -0.2980437 0.9760125 -0.01956236 -0.2167119 0.9748222 0.01181066 -0.2226325 0.9452193 0.1056246 -0.3088473 0.9608142 -0.2766503 0.01596117 0.9424726 -0.2469252 -0.2252266 0.8118839 0.1374859 -0.5673391 0.8339488 0.3035981 -0.460799 0.7009491 0.493698 -0.5146642 0.8156072 -0.2194281 -0.5353557 0.9518723 -0.008239984 -0.3063143 0.9666128 -0.02624589 -0.254799 0.8594012 -0.3826106 -0.3390911 0.3987854 -0.6057009 -0.6884976 -0.2808619 0.8164007 -0.5045625 -0.1293985 0.885464 -0.4462416 0.4415418 -0.8543657 -0.2739341 0.9245887 0.07943964 -0.37257 0.3412274 0.9230629 -0.1774041 0.9473861 0.2069765 -0.244087 0.8419141 -0.5380108 0.04126101 0.3435469 -0.9114048 0.2264473 0.5260781 -0.8387402 0.1404156 0.7823725 -0.6214789 0.04037594 0.9279153 0.04199343 -0.3704031 0.1364482 0.7580187 -0.6377758 -0.2468337 0.8979156 -0.364391 0.6764428 0.5513169 -0.4883267 0.5487228 0.6844996 -0.479873 0.8867153 0.05334633 -0.459212 0.9233375 0.1136509 -0.3667104 0.258034 0.8538163 -0.4520707 -0.4787439 0.8550981 -0.1988586 -0.3966491 0.9129612 -0.09537035 -0.5527513 0.77987 -0.2936796 0.03878897 0.8541215 -0.5186011 -0.07690662 0.9417707 -0.327311 -0.5692617 0.8095951 -0.1430097 0.2033753 -0.9766839 0.06857508 0.02633744 -0.9935606 0.1101108 -0.3952147 0.9010895 -0.1783196 -0.5142979 0.7968383 -0.3170263 -0.666982 0.6670431 -0.3318583 -0.5681936 0.8192083 0.077578 -0.1911374 0.981048 0.03094571 0.4048891 0.8779259 -0.2554705 0.8960235 -0.06427198 -0.439314 0.08255255 0.6597186 -0.7469405 0.1296426 0.7994629 -0.5865047 0.5271767 0.7614063 -0.3772393 0.934904 -0.3547776 0.004974484 0.09945982 0.8160039 -0.5694144 -0.5703909 0.8210089 -0.02352976 -0.6615498 0.7229225 -0.1991943 -0.1743828 0.9742729 -0.1427045 0.9071932 -0.4191717 -0.03585922 -0.02966398 -0.9636524 0.265389 0.07000946 -0.9562365 0.2839747 0.1679433 -0.9384136 0.301828 0.2555315 -0.9178442 0.3036592 0.1537217 -0.9871517 0.04318368 0.2367321 -0.9665212 0.09872734 -0.1688894 -0.9814142 0.09100615 -0.1748405 -0.9845576 -0.007965326 -0.2735374 -0.9444869 -0.1818597 -0.3271584 -0.9448836 -0.01092559 0.405652 -0.877224 -0.2566606 0.5023347 -0.8272958 -0.2513809 0.5650807 -0.7705924 0.2946562 0.5026093 -0.850032 -0.1573839 0.05050808 -0.9793695 -0.1955015 0.1740776 -0.955504 0.2380443 0.2299264 -0.9688406 0.09173864 0.08511608 -0.9778436 0.1911374 0.05008083 -0.821955 0.567278 0.6503189 -0.7353435 0.190527 0.4052248 -0.6666768 0.6255074 0.08645892 -0.3858455 0.9184851 0.4384899 -0.7575305 0.4835352 -0.1195105 -0.8281198 0.5476546 -0.0648213 -0.9723502 0.224311 -0.1001312 -0.480697 0.8711203 0.5378887 -0.05136263 0.8414258 0.05331581 -0.6503189 0.7577441 0.3916745 0.1670888 0.9047822 -0.2520524 -0.9355754 0.2472304 -0.1336405 -0.9768365 0.1670583 0.4222541 -0.7632679 -0.4889675 0.8000428 -0.5399945 -0.26133 0.4141667 -0.7921995 -0.4481338 0.6228523 -0.6106144 -0.4890591 0.7497788 -0.2634968 -0.6069216 0.9869991 0.09280675 0.1310769 0.8305307 0.4947661 -0.2556841 0.8682211 0.3779107 0.321482 -0.08584856 0.8922086 0.4433424 0.1338847 -0.7019867 0.6994537 0.1128269 -0.978637 -0.1717276 0.2587054 -0.9616993 -0.09042632 0.3881955 -0.9100314 -0.1453291 0.2628864 -0.9549242 -0.13773 0.006714046 -0.6176641 0.7863705 0.001831054 -0.6497391 0.7601245 -0.2082278 0.87463 0.437727 -0.2831507 0.8687704 0.4062319 -0.1716361 0.8919645 0.4182257 0.02822959 -0.6530351 0.7567675 0.01156651 -0.9787591 -0.204535 0.102176 -0.9899594 -0.09750664 -0.1317789 0.9143651 0.3827632 -0.003723204 -0.704825 0.7093417 -0.1481063 -0.9690542 -0.1973937 -0.0716269 -0.9942015 -0.08001953 0.3736991 -0.8785364 0.2974944 0.4879299 -0.8393506 0.2395092 0.2117679 -0.9216895 0.3249306 -0.03524887 -0.952971 0.3009125 0.05749684 -0.9514451 0.3023164 0.009216547 -0.9433882 0.331492 0.09222692 -0.9179357 0.3857845 0.1272927 -0.963683 0.2347179 0.07992798 -0.9586169 0.2731407 0.3615833 -0.922544 0.1345866 0.2923063 -0.9255654 0.2405164 0.4938811 -0.8424024 0.2153996 0.5776239 -0.8084964 0.1124302 0.7256386 -0.6747947 0.134373 0.6202277 -0.7539293 0.2164067 0.01989805 -0.6369518 0.7706229 -0.4605548 0.8304086 0.3134556 0.03671371 -0.5401471 0.8407544 -0.289285 0.9083834 0.301828 0.421308 -0.9051179 -0.05685597 0.603473 -0.7772454 0.1778313 0.5471358 -0.8336131 -0.07544171 0.6675619 -0.7416608 0.06527906 0.690878 -0.7149571 0.107242 0.6514176 -0.6877651 0.3202612 0.02642899 -0.4420606 0.8965728 -0.01058989 0.9145177 0.4043703 -0.05456709 -0.5735649 0.8173162 -0.4815515 -0.8564104 0.1861019 -0.1494186 0.7214576 0.6761071 0.1597949 0.7972655 0.582049 0.6010316 -0.7358318 0.3118686 0.6121708 -0.790521 0.01681566 0.680929 -0.7260964 0.09524822 0.680105 -0.7280496 0.08572649 0.5875729 -0.7795038 0.2169865 0.8142644 -0.5524156 0.1782586 0.7029023 -0.6731163 0.2298654 0.6566973 -0.7251808 0.2068239 0.760796 -0.6149785 0.2072817 0.749321 -0.6151921 0.2449415 0.8400525 -0.4936369 0.2248909 0.8341319 -0.5152135 0.1968749 0.6844386 -0.7112644 0.1599169 0.7446821 -0.6613361 0.08975493 0.703238 -0.7093722 -0.04672384 0.8135319 -0.5761284 0.07876825 0.7817011 -0.6212043 -0.05456709 0.398114 -0.8720359 0.2846156 0.5468612 -0.7957091 0.2602618 0.3564562 -0.9159826 0.1840876 0.69747 -0.6821497 0.2194281 0.9665822 -0.2550432 0.02536088 0.9507737 -0.3054903 0.05151522 0.9606311 -0.2672811 0.07565534 0.9254128 -0.3757439 0.04852437 0.8511307 -0.5117649 0.1167027 0.5708182 -0.02975553 -0.8205206 0.5641041 0.5269631 -0.6356395 0.1539964 0.557329 -0.8158513 0.422956 0.1095309 -0.8994721 0.4638813 -0.7269204 -0.5063021 0.633076 -0.717185 -0.2912076 0.1854304 -0.07135224 -0.9800409 0.5868709 0.01867729 -0.8094424 0.1164891 -0.6607868 -0.7414472 0.1810968 -0.7621387 -0.62154 -0.05902278 -0.9911801 -0.1184118 -0.2692953 -0.9615162 -0.05417031 0.06048768 -0.9234596 -0.3788263 0.05987727 -0.8148747 -0.5764946 0.1371807 -0.6211432 -0.771569 0.07748645 -0.6495255 -0.7563707 -0.03131198 -0.8508256 -0.5244606 0.01767021 -0.9464401 -0.322367 -0.2489395 -0.9669485 -0.05487227 0.2959685 -0.6706442 -0.6801355 0.154973 -0.985992 -0.06128114 -0.05664235 -0.9904172 -0.1258583 0.3021637 -0.8794214 -0.3677785 0.5295572 -0.7992492 -0.2840663 0.747734 -0.6599323 -0.07315284 0.582812 -0.8110904 -0.04922634 0.001861572 -0.8050783 -0.5931273 0.3399457 -0.727073 -0.5964537 0.4704123 -0.6499222 -0.596881 0.575457 -0.1539658 -0.8031861 0.2218085 -0.7597888 -0.6111332 0.1151768 -0.6740013 -0.7296671 0.5571154 -0.5280312 -0.6408887 0.4939116 -0.4968413 -0.7135533 0.1656544 -0.9084445 -0.3837092 0.1380657 -0.8305307 -0.5395367 0.2757347 -0.94879 -0.1540879 0.195532 -0.9319437 -0.3053377 0.1215857 -0.6476638 -0.7521287 0.1545457 -0.979461 -0.129368 0.1249122 -0.6462905 -0.7527695 0.1754509 -0.7787714 -0.6022217 0.1296121 -0.6109501 -0.7809382 0.3745232 -0.9047517 0.202826 0.2215033 -0.9751274 0.002502501 -0.04831075 -0.7692801 -0.6370434 -0.1058077 -0.8265633 -0.5527513 0.5499436 -0.7480087 -0.3715018 0.4306161 -0.8405713 -0.3285318 0.0819422 -0.7531663 -0.6526688 0.2262337 -0.8033082 -0.5508591 -0.2142399 -0.06433302 -0.9746391 -0.441969 -0.08273565 -0.8931852 0.2088686 -0.9350261 -0.2865077 0.3357036 -0.8894619 -0.310007 -0.2469863 0.5221717 -0.8162481 -0.5504624 0.5619068 -0.61742 0.07803583 -0.6657918 -0.7419965 0.1967833 -0.9361858 -0.2911466 0.2909024 -0.9524522 -0.09030425 -0.04110842 -0.0788598 -0.9960326 0.3946043 -0.9176306 0.04709005 0.2724387 -0.9376202 -0.2158879 0.4380016 -0.8938872 -0.09527873 0.7000946 -0.704886 0.113712 0.5314798 -0.8408765 0.1019623 0.6005127 -0.7926267 -0.1053498 0.3879513 -0.9215369 0.01574754 0.7339397 -0.6523637 -0.1889706 0.4823451 -0.8370922 0.2580035 0.6129643 -0.736137 0.2869656 0.7902158 -0.5595569 0.2498245 0.8694418 -0.4889675 0.07025361 0.5039216 -0.8061159 -0.3101291 0.5930662 -0.7574999 -0.2727744 0.6852016 -0.6456191 -0.3371074 0.6279183 -0.6883755 -0.3630787 0.4075136 -0.8337047 -0.3726005 -0.2562944 -0.6323741 -0.7310099 0.6528519 -0.7206031 -0.233314 0.4879605 -0.8676107 -0.0954619 0.03552353 -0.8621174 -0.5054171 0.7431257 -0.6358227 -0.2084109 -0.4730369 -0.2467421 -0.8457595 -0.7300943 0.6429334 0.2314218 0.4153264 -0.9024628 -0.1141087 -0.7296976 0.5947753 -0.33726 0.9270913 -0.3747978 0.001831054 0.9403363 -0.3285928 0.08810693 0.9133275 -0.3844417 0.1341593 0.8380078 -0.5358745 -0.1026032 0.8175299 -0.530076 -0.2248909 0.7984253 -0.540727 -0.264748 0.9564196 -0.2689291 0.1135594 0.9467757 -0.3046358 0.1037629 0.9190955 -0.3936582 0.01608324 0.9169591 -0.3966186 0.04327523 0.9725639 -0.2182378 0.0803247 -0.02795493 0.108951 -0.9936217 -0.5046541 0.8612323 0.05984675 -0.8218024 0.5688345 0.03158664 -0.2815333 -0.0723899 -0.9567858 -0.9928892 -0.0055238 0.118717 -0.9964599 -0.01513713 0.08261358 -0.9154638 0.3990905 0.05093538 -0.9301736 0.354442 0.09527873 -0.1348612 -0.7605212 0.6351207 0.6110721 -0.674459 0.4142583 0.5891599 -0.8032777 0.0871303 -0.1702933 -0.9576098 0.2323068 0.9962767 0.08206427 0.02591019 0.9930418 0.1059297 -0.05124056 0.932371 -0.3553575 0.06595045 0.9486679 -0.2198858 0.2272713 0.7311319 0.6690268 -0.1333964 0.4353771 0.8984039 -0.05700856 0.08722186 -0.07599109 -0.9932554 0.1326639 0.1357158 -0.981811 0.810419 -0.5197302 0.2703024 0.7998291 -0.5995972 0.0267952 -0.04153567 0.292581 -0.9553209 0.1586352 0.1611072 -0.9740898 0.8219856 0.5552538 0.1263771 0.817835 0.5475631 0.1768242 0.8060244 0.5843074 0.093997 0.7347636 0.6752831 0.06369209 0.9105502 0.4015625 0.09793388 0.8495743 0.5114902 0.128727 -0.853206 0.4986114 0.1529588 -0.612537 0.7625965 0.20777 -0.6199835 0.7141942 0.324778 -0.8794214 0.4094363 0.2427747 0.1760613 0.1323587 -0.9754326 -0.07977539 0.9920347 0.0974456 0.7029634 0.7064425 -0.08206427 0.8010498 0.5906552 -0.09689623 0.8297373 0.5580615 -0.007171809 0.9498581 -0.3108005 -0.03375345 -0.03936886 0.02731406 -0.9988403 -0.1292154 -0.3769952 -0.9171423 0.9767144 0.1978515 -0.08255255 -0.7208167 -0.6653341 0.1941282 -0.2068544 -0.07116913 -0.9757683 0.04889065 -0.3444014 -0.9375286 -0.869747 -0.4706259 0.1483199 -0.9969787 -0.02752768 0.07223731 -0.9096347 -0.3183691 0.2667012 -0.9968261 0.06802576 0.04116946 0.8276315 -0.3324686 0.4521622 0.9471114 -0.04638808 0.317484 0.9852901 0.144261 0.09128081 -0.7869503 -0.3192846 0.5279702 -0.7360149 -0.523423 0.4292429 -0.1331217 0.2476882 -0.959624 0.9570605 0.2857753 0.04855489 0.9197974 0.3918271 0.01977598 -0.05404824 0.07522809 -0.9956969 0.02374339 -0.1093478 -0.9937132 -0.2141484 0.05026394 -0.9754936 -0.122898 0.9589221 0.2556231 -0.02877891 0.9462264 0.3221229 0.03180027 0.2625812 -0.9643544 -0.9664297 0.2469558 0.07080292 0.5095065 0.8422803 0.1758781 0.5939818 0.7694327 0.2347484 0.5345317 -0.5001984 0.6812037 -0.9260537 0.04376351 0.3748283 -0.9728996 0.02447581 0.2298654 -0.8547319 -0.1131016 0.5065767 -0.8010804 -0.1050142 0.5892209 0.7243874 -0.4091311 0.554857 0.7753533 -0.3509018 0.5250099 0.8041933 0.3083896 -0.5080416 0.859798 0.2259895 -0.4578387 0.9768059 0.1990722 -0.07873773 0.9553819 0.259682 -0.1405682 0.5679495 -0.4046754 0.7166662 0.4703818 -0.4553667 0.7558519 0.4420911 -0.4459059 0.7782525 0.5145115 -0.3673513 0.7747734 0.9475997 -0.09866631 0.3037812 0.9832758 0.001342773 -0.1820124 0.9767754 0.1116367 -0.1828058 0.9345683 -0.02764976 0.3546251 0.739494 -0.1068148 0.6646016 0.7223426 -0.08917504 0.6857204 0.619892 -0.1636402 0.7674185 0.7078768 -0.1647084 0.6868191 -0.9992981 0.0361644 0.008362054 -0.9642629 0.2443311 -0.1023591 -0.9403668 0.03640854 0.3381146 -0.9360332 -0.09375286 0.3391522 0.6943572 0.03921627 -0.7185278 0.7336955 0.2074953 -0.6469924 0.9300821 0.04226809 0.3648183 0.353679 -0.02487254 -0.9350261 0.3427839 0.184637 -0.9210487 0.274636 -0.4829249 0.8314463 0.2713096 -0.5272988 0.8051698 0.2038941 -0.5263527 0.8254342 0.2067934 -0.5371563 0.817713 -0.6412549 0.3882565 -0.6618244 -0.775811 0.1090426 -0.6214179 0.09308141 -0.05926692 -0.9938658 0.02362132 0.1418195 -0.9895932 0.9595324 0.2309336 -0.1609546 -0.1277199 -0.5693534 0.8120976 -0.1563768 0.2471389 -0.956267 -0.2347484 0.1670583 -0.9575793 -0.1184728 0.05230867 -0.9915464 0.0147404 0.1526231 -0.9881588 0.7323527 0.3076876 -0.6073794 -0.7002778 -0.2565386 0.666158 -0.8155462 -0.1951048 0.5447554 -0.8088931 -0.1329386 0.5726798 -0.7337566 -0.1980041 0.6498612 -0.002410948 -0.2877895 -0.9576708 -0.3109531 -0.2393566 -0.9197669 -0.2258675 0.009308099 -0.9740898 0.0572527 -0.001068115 -0.998352 0.5160375 0.2990509 -0.8026368 0.5718559 0.1985534 -0.7959228 0.9294717 0.1084322 0.3525498 -0.3175145 0.3235267 -0.8913236 0.04922634 0.2145451 -0.9754631 0.396588 0.2789392 -0.8745689 -0.8904691 0.4030579 -0.211066 -0.7624439 -0.2495193 -0.5969726 -0.83755 -0.04690694 -0.5442976 -0.4258248 0.5309 -0.7326273 -0.2108523 0.1844233 -0.9599597 0.07528913 0.2251656 -0.9714041 -0.8835108 0.2742698 -0.3796502 -0.9893491 -0.1117588 0.09311193 0.82284 -0.08706927 0.5615406 -0.1029389 0.200293 -0.9743034 0.2017273 0.2602924 -0.9442121 -0.9730522 -0.1984313 -0.1173437 0.7384869 -0.1889401 0.6472365 -0.2722556 0.2939848 -0.9161962 -0.08255255 0.3737907 -0.9237953 -0.9502549 -0.1540574 0.2705771 -0.9201941 -0.1266518 0.3704031 -0.4962005 -0.2744835 0.8236336 -0.0341807 -0.4422132 0.8962371 -0.09677416 -0.4589068 0.8831751 -0.4810327 -0.3236488 0.8147526 -0.2882168 0.1980041 -0.9368572 -0.2108218 -0.4969024 0.8417921 -0.4652852 -0.3819696 0.7984558 -0.7526475 -0.159093 0.6388745 -0.7369304 -0.1468856 0.6597797 0.02880942 -0.5569018 0.8300729 0.1519516 -0.5200049 0.8405103 0.2878201 -0.5150609 0.8073672 0.2345347 -0.5749687 0.7838069 0.3845027 -0.5550096 0.7376019 0.4618061 -0.5205543 0.7181311 0.2796411 -0.5590991 0.7804804 0.09100615 -0.1258888 -0.9878537 -0.02945035 -0.01049834 -0.9994812 0.09381389 -0.01971495 -0.9953917 0.5963011 -0.4686422 0.6517228 -0.746025 -0.2906583 0.5990784 -0.6765343 -0.3020417 0.6715598 -0.7949461 -0.1986755 0.5731986 -0.593463 -0.2790002 0.7549364 -0.1177404 -0.4381847 0.89111 -0.01309239 -0.4851832 0.8742943 -0.4834437 -0.3060091 0.8201239 -0.8514969 -0.06762897 -0.5199133 -0.4020814 -0.08899194 -0.9112522 -0.3633534 0.08044677 -0.9281594 -0.1774956 -0.005249142 -0.9840999 -0.259682 0.1254616 -0.9574877 0.4684591 -0.3466902 0.8125858 0.5080721 -0.2728049 0.81695 0.6302073 -0.2936491 0.7187414 0.5716117 -0.3738212 0.730369 0.7474594 -0.3326212 0.5749992 0.6729332 -0.405652 0.6185187 -0.335551 -0.4853664 0.8073366 -0.5082553 -0.3888058 0.768395 0.03335672 0.1186864 -0.9923399 0.3023469 0.1878414 -0.9344767 0.8313242 -0.2365795 0.502884 0.9739983 0.1112399 0.1973326 -0.9931944 0.06277656 -0.09793388 0.4167608 0.117069 -0.9014253 0.2601093 0.1180761 -0.9583117 0.3114414 0.247444 -0.9174475 0.4823756 0.2509842 -0.839198 0.8209174 0.1582079 -0.5486618 0.9761345 0.1948912 -0.09576708 0.9771111 0.1800592 0.1131321 0.06872767 0.01367229 -0.997528 0.1090731 0.101474 -0.9888302 0.2770165 0.0707724 -0.9582202 0.1414838 0.2446364 -0.9592273 0.9697256 0.2371288 0.0577715 0.2057253 0.9293192 -0.3066195 0.6285898 0.7402875 -0.2383495 0.4635151 0.5050203 -0.7280496 0.194647 0.5806757 -0.7904905 0.7562487 0.1544846 -0.6357616 0.9608753 0.2175664 -0.1713004 0.155797 0.9775078 0.1420636 0.6565142 0.7363811 0.163274 -0.9936217 0.1009857 0.04953151 -0.888638 0.04525893 -0.4563127 0.8779565 0.3168432 -0.3587756 0.9377422 0.3472091 -0.007263362 0.5082553 0.107242 -0.8544572 0.7222816 0.4328135 -0.5394147 0.8373059 0.5326701 -0.1230811 -0.9100925 0.4085513 0.06891077 -0.5524156 0.8236336 0.1282082 -0.3976867 0.7825251 -0.478988 -0.8297983 0.3430891 -0.4400769 0.6740623 0.2104251 -0.7080295 -0.4621418 -0.03833121 -0.8859524 -0.4092532 0.2156133 -0.8865627 -0.1950438 0.4451125 -0.8739585 -0.1440778 -0.0521866 -0.9881588 -0.1100803 0.1076083 -0.9880673 -0.03213596 0.217719 -0.9754631 0.002929747 -0.1169469 0.9931028 -0.3831294 -0.1998047 0.9017915 -0.4091922 -0.2172307 0.8861965 -0.07028412 -0.2567827 0.9638966 -0.1371502 -0.3723258 0.9178747 -0.4380016 -0.214484 0.872982 -0.4016236 -0.04678487 0.9145787 -0.3522751 0.07095551 0.933195 0.3537095 -0.244026 0.9029511 0.3149815 0.06076234 0.9471114 0.4310739 -0.01477092 0.9021577 0.5793634 -0.0678426 0.8122196 0.4513382 -0.05691701 0.8904996 0.7206031 -0.05035549 0.6914884 -0.5967285 -0.2865383 0.7495041 0.5074923 -0.3380841 0.7925047 0.6823633 -0.1486862 0.7156895 0.796411 -0.08923608 0.5981017 0.3807184 -0.2032837 0.9020356 0.6207465 -0.1118503 0.7759636 -0.5374004 -0.3272805 0.7772149 -0.6283456 -0.3646046 0.6871853 -0.4717246 -0.5007477 0.7257302 0.4011963 -0.5578173 0.7265236 0.6790063 -0.3457137 0.6476028 -0.6121097 -0.4381847 0.6582232 -0.4496292 -0.6552324 0.6070132 0.7691275 -0.29429 0.567278 -0.03241062 0.0439161 0.9985046 0.03863638 -0.3566393 0.9334086 -0.01284825 -0.07721179 0.9969176 -0.05420082 -0.6418653 0.7648854 -0.04849386 -0.8251289 0.5627918 0.5188757 -0.6510208 0.553972 0.4577776 -0.6428114 0.6141545 0.3747978 -0.6704306 0.6403089 0.4578081 -0.6722007 0.5818049 0.461623 -0.6416517 0.6125065 0.4430067 -0.7314066 0.5184179 -0.3067721 -0.7494431 0.5866573 -0.41789 -0.6807154 0.6016114 -0.3680532 -0.6923734 0.6205939 -0.2652059 -0.7756584 0.5726798 0.2932829 -0.7417524 0.6031373 0.3557848 -0.8615986 0.3619495 0.3634449 -0.6841945 0.632252 0.3810236 -0.6630756 0.6442763 0.2537614 -0.7257912 0.6393628 -0.3099765 -0.7266762 0.6130253 0.1209448 -0.9401532 0.3185217 0.0595721 -0.9234291 0.3790399 -0.1885433 -0.8875698 0.4203009 0.06393623 -0.7806635 0.621662 -0.1568041 -0.7906125 0.5918455 0.06176942 -0.7599414 0.6470229 -0.1087985 -0.7843257 0.6107059 0.06891077 -0.6931974 0.7173986 0.04516738 -0.7849971 0.6178167 0.02063047 -0.6717124 0.7405011 -0.2702414 -0.6871548 0.674337 0.02380442 -0.7342448 0.678457 0.3142186 -0.7472763 0.5854671 0.5946531 -0.6243172 0.5065157 0.5594043 -0.5401166 0.6287118 0.4908597 -0.7421491 0.4562822 -0.1682485 -0.7600024 0.6277352 0.1479842 -0.7614368 0.6310923 0.1750541 -0.6566973 0.7335124 -0.2657857 -0.6385388 0.7222205 0.4298532 -0.6577349 0.6185187 0.6023133 -0.5723136 0.556444 0.3140965 -0.7889645 0.5280312 0.1333048 -0.6772668 0.7235328 0.150853 -0.5435652 0.8256478 0.3789789 -0.6635945 0.6449477 -0.2410047 -0.5101779 0.8255867 -0.2134159 -0.4488357 0.8677328 -0.2655416 -0.7621998 0.5903195 0.2058779 -0.8062075 0.5546129 0.543962 -0.6939299 0.4717246 -0.2536088 -0.5542467 0.7927488 0.1962035 -0.6003906 0.7752312 0.5162816 -0.5908078 0.619953 0.5948058 -0.6466567 0.4774621 0.4508194 -0.6896268 0.5666677 -0.4315623 -0.5155492 0.7402265 -0.4823451 -0.6028932 0.6354564 0.5601062 -0.7093417 0.4278695 0.5244606 -0.8506425 -0.03625595 0.4893948 -0.7330241 0.472335 -0.07995849 -0.7712943 0.6313974 -0.3929258 -0.6210822 0.6781213 -0.4306772 -0.7360149 0.5222327 -0.401532 -0.9145177 0.04873806 0.1148106 -0.9261757 -0.3591113 0.0916776 -0.9677419 -0.2345957 -0.1343424 -0.9849849 -0.1081271 0.4645223 -0.8855251 0.006958186 0.6461379 -0.760094 0.06866663 0.519364 -0.8348643 0.182287 0.3846858 -0.9230324 0.002868711 0.6548662 -0.7093112 0.2607501 0.6057619 -0.7390972 0.2945036 -0.3987548 -0.6564531 0.6403394 -0.5900449 -0.7229225 0.359447 -0.4435255 -0.7986694 0.4066286 -0.2974029 -0.6738182 0.6763512 0.4908902 -0.7203284 0.4899747 0.5097202 -0.7201453 0.470687 -0.4126713 -0.9085055 0.06527906 -0.1512497 -0.9880978 0.02786338 -0.1066927 -0.9888607 -0.1037019 -0.2525407 -0.9522996 0.1711783 0.5741142 -0.7998291 -0.1750541 0.3914304 -0.887814 -0.2419812 -0.3570361 -0.7359539 0.5752129 -0.5811335 -0.7178869 0.3832514 0.1941282 -0.8470413 0.4947661 0.1698049 -0.7402875 0.6504715 0.1339152 -0.9865108 0.09381389 0.1167943 -0.9927671 -0.02764976 0.1272011 -0.7501145 0.6489151 0.1750541 -0.9838252 0.03735464 0.4590289 -0.7941222 0.398236 0.04226809 -0.8471023 0.5296792 0.7852107 -0.6189154 0.01922661 0.8021485 -0.5683157 0.1831721 0.8367565 -0.500351 0.2223273 0.7464827 -0.6338084 0.2024598 0.5745415 -0.8120365 -0.1023285 0.5729545 -0.8090762 0.1305887 0.155858 -0.9809564 -0.1156651 0.5966063 -0.7836238 -0.173101 0.4207892 -0.8907437 -0.1717276 0.1304361 -0.9889218 -0.07061982 -0.03729361 -0.9959411 0.08169806 0.2026124 -0.9792474 0.002777159 -0.03906369 -0.9770501 0.2092959 0.3186743 -0.9065828 0.2766197 0.06460767 -0.9125645 0.4037598 0.6547746 -0.662923 0.3629872 0.490585 -0.7079073 0.5080721 0.5182653 -0.5346843 0.6674398 0.7990967 -0.4731284 0.3708915 0.1933347 -0.7216407 0.6646931 0.2142399 -0.5164037 0.8290963 0.06994843 -0.74926 0.6585589 0.4882962 -0.6914884 0.5323344 0.5263222 -0.621662 0.5800653 0.1453291 -0.6548662 0.7415998 -0.1216773 -0.7047029 0.6989654 -0.2529069 -0.9287698 0.2708823 -0.2437818 -0.8467971 0.4727317 -0.2616962 -0.746849 0.6112858 0.02099668 -0.7727287 0.6343578 -0.1639149 -0.5837886 0.7951598 -0.4829859 -0.7381817 0.4709006 -0.9863277 -0.02343821 0.1629993 -0.9575793 -0.03781241 -0.2855922 0.8899198 -0.2810145 0.3592334 0.9361858 0.07953119 0.3423261 0.9613025 0.1885128 -0.2008423 0.7036958 -0.5715812 -0.4219794 0.9394513 0.03546249 0.3408002 0.9494308 0.2613911 -0.1738639 -0.7035432 -0.1110263 0.7018952 -0.8702659 -0.05322426 0.4896389 -0.873043 -0.02883994 0.4867702 -0.6522416 -0.1454207 0.7438887 -0.9915464 0.0745567 0.1059603 -0.8407544 -0.1600695 0.5171362 0.486343 -0.1148411 0.8661763 0.5226295 -0.227485 0.8216193 -0.6902066 -0.1843013 0.6997284 -0.2500076 -0.1938841 0.9486069 -0.1807611 -0.2643513 0.9473251 -0.03540146 -0.309244 -0.9503159 0.07861566 -0.06683552 -0.9946593 -0.4324167 -0.08862572 -0.8972747 -0.737022 -0.06530958 -0.6726585 -0.6627094 0.203711 -0.7206031 -0.9141514 0.1621143 -0.3715323 0.1610462 -0.4277169 -0.8894314 0.6830043 0.02087461 -0.7300943 0.1586657 0.177221 -0.9712821 -0.3383282 0.2028565 -0.9188818 0.711478 0.2626423 -0.6517533 0.3391522 -0.3018891 0.8909574 -0.3128452 -0.2620319 0.9129307 -0.03726309 -0.4630268 -0.8855251 -0.1626026 -0.7737663 -0.6122013 0.2742698 -0.4473098 0.8512528 -0.6263619 0.1689504 -0.7609791 -0.912656 0.07504498 -0.4017151 0.315714 -0.5294656 0.7873775 0.1842402 -0.4967803 0.8480789 -0.9968566 -0.006805598 0.0788598 0.531724 -0.5542467 0.6403394 0.6101871 -0.5760064 0.5439009 -0.1478316 -0.9808649 -0.1264687 -0.2926115 0.173986 -0.9402447 0.09619432 -0.9063387 0.4113895 0.832728 -0.2743003 0.4809107 0.9022187 -0.3655507 0.2287667 0.9457686 -0.09164708 0.3116245 0.9337138 0.2677084 -0.2376171 0.6309092 0.268807 -0.7277749 0.9535508 -0.1807306 -0.2409131 0.8867458 -0.3898129 -0.2483291 0.935667 -0.05236971 0.3488876 -0.9221473 0.223365 -0.315775 -0.9502549 0.05395668 -0.3067415 -0.9887387 -0.1184423 0.0912503 -0.9998474 -9.46074e-4 -0.01641893 0.5596485 -0.1578417 -0.8135319 0.9620655 -0.05966365 -0.2661824 0.5051424 -0.3961913 -0.766686 -0.08645892 -0.395703 0.9142735 0.49382 -0.3259987 0.8061159 -0.8470718 -0.2093265 -0.4884487 -0.5581836 -0.1849116 -0.8088321 -0.6076235 -0.3690909 -0.7032075 -0.8181097 -0.3080843 -0.4855495 -0.271218 -0.4518876 0.8498184 -0.4925077 -0.2982574 0.8175604 -0.5467696 -0.299234 0.7819452 -0.9679251 -0.2439344 -0.06006038 -0.9155553 -0.3845027 -0.1177709 0.01565599 -0.56798 0.8228706 -0.7498703 -0.3138523 0.5823542 -0.7185583 -0.4832606 0.5000763 -0.4527726 -0.7804499 0.4311044 0.4379711 -0.7340922 0.5188757 0.5544603 -0.71807 0.4206061 -0.02511668 -0.9240394 0.3814203 0.5508591 -0.7139195 -0.4322642 -0.288522 -0.02591019 -0.957091 -0.5938902 -0.06195253 -0.8021485 0.1398968 0.2113712 -0.9673147 -0.2660604 -0.1799371 -0.9469894 -0.3069857 -0.4185308 -0.8547014 0.02261418 -0.1843013 -0.9826045 0.02798545 -0.4415113 -0.8967864 0.06054872 -0.01553392 -0.9980163 -0.4018983 -0.7286294 -0.5545518 -0.7500229 -0.5984374 -0.2815943 0.02728354 -0.8492081 -0.5273293 -0.9871822 -0.1582079 0.02023375 -0.8810389 -0.110477 -0.4598834 0.6012147 0.04449594 -0.7978149 0.9446395 0.03146457 0.326548 0.9293802 -0.05224764 0.3653371 0.9598681 0.1030915 -0.2607196 -0.01019316 -0.998413 -0.05508589 0.5464339 -0.8335521 0.0808435 -0.5039827 -0.8635517 -0.01580858 -0.8580584 -0.1428877 0.4932401 -0.8397473 -0.215186 0.4984588 -0.8471023 -0.2398754 0.4741356 -0.8819544 -0.3498032 0.315836 -0.7842037 -0.6012452 0.1532639 -0.04751729 -0.4556413 -0.8888821 0.1719107 -0.2487564 -0.9531846 0.01647996 -0.1227454 -0.9922788 0.1395001 -0.1136509 -0.9836726 0.07962274 -0.1423078 -0.9866024 -0.2782983 -0.8894009 -0.3626209 -0.7266762 -0.6868496 -0.010773 0.4575945 -0.5044404 -0.7322001 0.6068606 -0.3505051 -0.7133091 0.1903439 -0.4809107 -0.8558306 0.5560168 -0.5673086 -0.6074099 0.02926725 -0.7089755 -0.7045809 0.7544786 -0.5742668 -0.3176977 0.9644765 -0.1215247 -0.2344431 -0.05298012 -0.6227912 -0.7805414 0.05395668 -0.3270363 -0.9434492 -0.2461012 -0.7475509 -0.6169012 -0.03820914 -0.716422 -0.696585 -0.3236182 -0.7228309 -0.6105228 -0.8127384 -0.4904935 -0.3143712 -0.1425519 -0.7248756 -0.6739403 -0.6355785 -0.6157109 -0.4657124 -0.9499191 -0.3112583 -0.02734458 -0.3971374 -0.8840297 -0.2464064 0.9577929 -0.01461833 -0.2869961 0.3942686 -0.5277871 0.7522813 0.6876431 -0.6568804 0.3092135 -0.02777183 -0.8880276 0.4589374 0.04800558 -0.7257302 0.6863002 0.9019135 -0.3377178 0.2691428 -0.4085818 -0.8316904 0.3758965 0.9607227 0.2235175 0.1644337 -0.1255226 -0.6000244 0.7900326 0.6671347 -0.07263404 0.7413557 -0.1116367 -0.3092746 0.9443648 0.2524491 -0.4454787 0.8589435 -0.791467 -0.5658132 0.2310251 -0.7357708 -0.276162 0.618305 -0.980224 -0.1292154 0.1497543 -0.839198 -0.1010468 0.5343486 0.5651723 0.2082888 0.7982116 0.5141453 0.008697748 0.8576312 0.9452498 0.1354717 0.2967925 -0.9650258 -0.2359996 -0.1138951 -0.3168126 -0.02539139 0.9481185 -0.8050478 -0.1608936 0.5709403 -0.9916074 -0.04196292 0.1221045 -0.3382366 -0.1081271 0.9348125 0.9814447 -0.06369209 0.1807916 0.9444258 -0.0152592 -0.3282876 0.9795526 -0.04535049 0.1959899 0.9822993 0.0916776 -0.163274 0.6118351 -0.2068239 -0.7634205 0.7171239 0.2315134 -0.6573382 -0.8995331 -0.07348853 -0.4305551 -0.9906308 -0.008087396 -0.136143 0.2055116 0.3473312 -0.9149144 0.07989746 -0.3040559 -0.9492782 -0.666036 -0.2044129 -0.7173376 -0.6910306 0.2361522 -0.6831263 -0.9031342 0.1366618 -0.4069948 0.5513474 -0.2364574 0.8000428 -0.3464461 -0.3165685 -0.8830226 -0.3249611 0.3227638 -0.8889126 -0.2112491 -0.266274 0.9404278 -0.3391827 -0.7571032 0.5583056 0.06637775 -0.8858913 0.4590594 0.7770013 -0.4647359 0.4245735 0.5476546 -0.7086398 0.4448072 -0.2197332 0.583697 -0.7816401 -0.6685385 0.4307993 -0.6061281 0.3385418 0.5727103 -0.7465438 0.9475387 -0.1940672 -0.2538835 0.95291 -0.2327342 0.1943418 0.6952422 -0.6400952 0.3269448 0.6417738 -0.7668386 -0.008758783 0.6678366 -0.4211859 0.6136052 -0.01293981 -0.6392407 0.7688834 0.009186029 -0.654561 0.755913 -0.01739555 -0.665212 0.7464217 -0.4034852 -0.6856594 0.6058229 -0.5718864 -0.5624867 0.5970641 -0.5550096 -0.6143376 0.5607776 -0.4498123 -0.6534318 0.6088138 -0.6557818 -0.5005646 0.5651112 0.6552935 -0.3352153 0.6768701 -0.05978572 -0.492996 0.8679464 -0.378399 -0.6644185 0.6444289 -0.7191687 -0.3750115 0.5849177 0.9044771 -0.2054811 0.3737297 0.9600818 -0.04675436 0.2757652 0.4563432 0.2963652 -0.8389539 0.8002564 0.4185919 -0.4293344 0.9163793 0.2232429 -0.3322245 -0.9465926 -0.2213507 0.2343821 -0.8820765 -0.3321024 0.3340556 -0.5732902 0.2142704 -0.7907956 0.979461 0.2009338 -0.01660203 0.9936217 0.07345801 0.08536022 -0.9733878 -0.1567431 0.1669973 -0.9956664 -0.001800537 -0.09274572 -0.07977539 0.3011566 -0.9502243 0.05664235 -0.3683279 -0.9279458 -0.3885617 -0.3773919 -0.8405713 0.554857 -0.2521439 -0.7927793 0.1110263 -0.8526872 -0.5104221 -0.2164067 -0.8662068 -0.4503311 0.4663839 -0.7358928 -0.4908292 0.1017487 -0.9898374 0.0992462 -0.7293313 -0.5297403 0.4328745 -0.4239021 -0.9036836 -0.06033504 -0.8331553 -0.4375439 -0.3381756 -0.8176214 -0.5287637 0.2277596 0.1433759 -0.889523 0.4337291 -0.4389172 -0.8344371 0.3331705 0.09421062 -0.8823207 0.4610736 -0.4168523 -0.7724235 0.4791101 0.782342 -0.1995605 -0.5899533 0.6720786 -0.4931791 -0.552324 0.8937041 -0.4176458 -0.1637928 0.9889218 0.04306161 -0.1419416 0.9334086 -0.2496109 0.2576678 0.9611194 0.145085 0.2348094 -0.1076693 -0.3112888 0.9441816 -0.3395795 -0.03277683 0.9399701 0.3627735 0.07220679 0.9290445 0.5710013 -0.1252785 0.811304 -0.5634938 -0.4719687 0.6779992 -0.7368389 -0.06265449 0.6731163 0.04257327 -0.2819605 -0.9584643 0.02365183 -0.4743797 -0.8799707 -0.2605975 -0.5746025 -0.775811 -0.004699826 -0.5081027 -0.8612629 -0.3698843 -0.5092319 -0.7770318 0.1953489 -0.2927641 -0.9360027 0.3588061 -0.3825801 -0.8513749 0.2970367 -0.4068728 -0.8638264 -0.1593066 -0.8828089 0.441847 0.7298502 -0.5991394 0.3290506 -0.3350322 -0.7571032 0.5608081 0.5628529 -0.4713584 0.6789453 0.08633685 -0.7744988 0.6266366 0.4007385 -0.3807795 0.8332774 -0.2021851 -0.9602039 -0.1926633 -0.811945 -0.3752556 -0.4470657 0.1854915 -0.7279886 -0.6599628 -0.5501877 -0.609241 -0.5710318 -0.976867 -0.1942808 -0.08908349 0.1308023 -0.4007996 -0.9067659 0.3257241 -0.3581957 0.8749657 0.0217902 -0.06894129 -0.9973754 -0.04406869 -0.02368235 -0.9987182 -0.9586169 -0.1310464 0.2526627 0.7580187 -0.1501815 -0.6346629 -0.9804682 -0.1599169 -0.1142308 -0.9808039 -0.005005002 0.1948912 0.9788202 0.08935815 -0.1841182 -0.7034211 0.08871728 0.7051607 0.9343852 0.05761891 0.3515427 -0.1897641 9.15555e-5 0.981811 0.4863735 -0.06381416 0.871395 0.6167791 -0.2343211 0.7514268 0.9494308 -0.1038545 0.2961821 0.6646016 -0.3617359 0.6537675 0.9444869 -0.1274148 0.3027436 -0.6543169 -0.1540879 0.740318 -0.9617298 -0.06686604 0.2656942 -0.5598316 -0.4433119 0.700003 -0.9402447 -0.1541795 0.3035371 -0.6898404 0.1701712 -0.7036653 -0.9262062 0.03930783 -0.3749199 -0.6803186 0.4577776 -0.5723136 -0.9225745 0.2751549 -0.2703329 0.328898 0.07501447 -0.9413434 0.783227 0.06741535 -0.6180608 0.4314707 0.5656606 -0.7027192 0.835078 0.3641774 -0.4122745 -0.9915464 -0.0117191 -0.1291238 -0.9920957 0.1156041 -0.04849386 -0.9422284 -0.112186 0.3155919 -0.9848933 0.04440438 0.1672414 -0.9891354 -0.04361093 0.1403546 -0.9048738 -0.274514 0.3252052 0.9838863 0.02166813 -0.1773125 0.9938963 0.08532971 -0.06976526 -0.8848537 0.3907285 -0.2535783 -0.8989227 0.2192144 -0.3792535 0.001831054 -0.25898 0.9658803 -0.1147801 0.1539964 -0.9813532 -0.1243324 0.6201362 -0.7745598 -0.9955443 -0.06320381 0.06973475 -0.8493607 -0.3532212 0.3921018 -0.943022 0.130253 -0.3061006 0.91995 0.2248298 -0.3211157 0.9959411 0.07791376 0.04458749 0.989288 -0.06698811 0.1296426 0.9535203 0.006744563 -0.3011566 0.216834 -0.9281899 0.3023164 0.6172369 -0.7255775 0.3041169 0.5939818 -0.6723838 0.4416334 0.2763756 -0.845027 0.4576861 0.9335307 -0.1529588 0.3241676 0.848323 -0.3353068 0.4096805 -0.5558642 -0.1938841 -0.8083133 0.01413005 -0.05960261 -0.9981079 0.173223 -0.5543077 -0.8140507 -0.3160497 -0.6156194 -0.7218543 0.6294748 -0.4549089 0.6299021 -0.4290292 -0.587695 0.685934 -0.9039583 -0.2509842 -0.3461409 -0.9255654 -0.350444 0.1430402 -0.710593 -0.5489364 0.4401074 -0.6655782 0.2671896 -0.6968291 0.1158177 -0.5258949 0.842616 0.5814997 0.006469905 -0.8135014 0.6432081 -0.4348582 -0.6301767 0.5613574 0.3389691 -0.7549364 0.1614124 -0.8931852 -0.4196906 -0.1839351 -0.8551287 -0.4846644 -0.2821741 -0.7627797 0.5818049 0.1443525 -0.6363109 0.7577746 0.4952543 -0.6519364 0.5741447 0.7489547 -0.5070956 0.4264351 0.5912046 -0.6384472 0.4927824 0.531663 -0.6697287 0.5184179 0.1077303 -0.815363 0.568804 0.08386486 -0.8313242 0.5493637 0.3424787 -0.7926267 0.5043794 -0.3964354 -0.8865322 0.2384411 -0.3491318 -0.9306314 -0.1095309 0.2014527 -0.9778131 0.05728322 -0.2370067 -0.9219337 0.3063448 -0.1284524 0.3612171 -0.9235512 -0.4054079 -0.671041 0.6207465 -0.3372905 -0.8015686 0.4936063 0.1478927 -0.9840083 0.09903252 0.136021 -0.9827876 0.1248207 0.924192 -0.3291726 -0.1935178 0.8829005 -0.4028138 0.2411878 0.7224952 -0.6913663 -0.00112915 0.1387371 -0.8882718 0.437788 0.5142064 -0.7705314 -0.3765984 -0.6004822 -0.6232795 0.5009003 -0.4107181 -0.8104801 0.4175543 -0.6823328 -0.6972259 -0.2196417 -0.7532274 -0.6186102 0.223365 0.5063631 -0.3110752 0.8042238 0.6868496 -0.5271767 0.5002899 0.1412397 -0.6331065 0.7610401 0.2280648 -0.2955412 0.9276711 0.4518265 -0.3152257 0.8345286 0.3825801 -0.3150426 0.8685263 0.03646957 -0.002868711 -0.9993286 0.1999267 -0.1915951 -0.9608753 0.1751152 -0.2013916 -0.9637135 0.2053285 -0.3488876 -0.9143651 -0.566393 -0.7245705 -0.3926512 -0.6621906 -0.7491989 -0.01330602 0.6474196 -0.7590869 -0.06756794 0.3928343 -0.7759636 -0.4934843 0.3085727 -0.3896298 -0.8677023 -0.003662168 -0.4119083 -0.9111912 0.6288034 -0.07336646 -0.7740715 0.5335551 -0.5480819 -0.6441237 0.776574 -0.3660695 -0.512711 0.7825251 0.05178987 -0.6204108 -0.9953307 -0.00225836 -0.09619432 -0.9576098 -0.02426218 0.2869656 -0.9620655 -0.02020323 0.272042 -0.8471023 -0.1868648 -0.4974517 -0.7532884 -0.1026337 0.6495865 -0.07843255 -0.1939146 0.9778436 0.02285832 -0.345378 0.9381695 -0.7470932 -0.3833735 0.5429853 -0.1942808 -0.3403729 -0.9199805 -0.6028016 0.4567705 -0.6541643 -0.9117405 0.2540056 -0.3227332 0.9713736 0.05661183 0.2305673 0.9670095 -0.03927731 0.2516251 0.9498886 0.06323432 -0.3060701 0.9851985 -0.04818868 -0.1643422 0.6934721 -0.1358989 0.7075106 0.8276925 -0.4917448 0.2703024 0.6888638 -0.0464186 0.7233802 0.556444 0.4537797 -0.6960051 0.7908567 0.314005 -0.5252541 0.3436689 -0.24485 -0.9065828 0.01879936 0.5946837 -0.8037049 -0.006836116 -0.2005066 0.9796442 0.6214484 -0.1770684 0.7631459 0.1283913 -0.6421705 -0.7556993 0.3734245 -0.5747246 -0.7281411 -0.6459243 -0.1234779 0.7533189 -0.1991637 -0.817072 0.5409711 -0.9954223 0.09280675 0.02148503 0.1580553 -0.9091769 -0.3851436 0.6199225 -0.7286905 -0.290994 -0.730369 -0.6767174 0.09244054 -0.7836543 -0.5667898 -0.2540971 -0.4299753 -0.7554552 -0.4943388 -0.3455001 -0.8824427 -0.3191931 0.5360576 -0.7348552 0.4154179 0.1174657 -0.8182318 0.5627308 -0.2785119 -0.1677602 -0.9456465 -0.1834467 -0.4224677 -0.8876003 -0.3016144 -0.6102176 -0.7325358 -0.6296884 -0.3805048 -0.6772363 -0.4272897 0.6061891 -0.6707358 0.07242041 0.6482437 -0.7579577 0.1398968 0.3562731 -0.9238258 -0.3997314 0.37257 -0.8374584 0.859859 -0.5096286 -0.02948087 0.7540513 -0.6443983 0.1268959 0.7051302 -0.6551713 -0.2710654 0.1612293 -0.8380688 -0.5211646 -0.9532456 -0.07248145 0.2932829 0.6419874 -0.22837 0.7318644 0.5862606 -0.3729057 0.7191687 0.9244972 -0.1609546 0.3455001 0.9522996 -0.05127108 0.3007904 -0.3923765 0.1163365 -0.9123814 -0.8460341 -0.02914518 -0.5322734 0.6846218 -0.7036653 0.1899472 -0.6709495 -0.6720481 0.3132725 -0.3250526 -0.9397259 -0.1059603 0.1685842 -0.7658315 -0.6205329 -0.9606922 -0.2771996 -0.01492351 -0.8582415 -0.4031495 0.3175756 0.6009095 -0.0788598 -0.7954039 0.8647725 -0.1875667 -0.4657735 0.6532182 -0.4153264 -0.6330454 0.5070956 -0.3238624 -0.7986999 0.5470443 -0.5849788 0.5987427 0.9065523 -0.3120518 0.2841578 0.6427809 0.3048494 -0.7027497 0.6514176 0.1040376 -0.7515183 0.1728873 0.1458479 -0.9740593 0.5743584 0.5588549 -0.5981323 0.8610187 0.3570361 -0.3621021 0.8792383 -0.4448989 0.1702322 0.7028108 -0.5544908 -0.4456008 0.14597 -0.4603717 0.8756065 -0.5571764 -0.4046449 0.7250893 -0.5288553 -0.6142766 0.5855892 0.1701406 -0.7000641 0.6934721 0.9123814 0.1834772 -0.3658559 0.9946287 0.02374339 -0.1005585 0.9739677 -0.163274 -0.1570482 0.9087191 -0.008178949 -0.4172796 -0.6400037 -0.2206793 0.7359539 -0.4884793 -0.7039399 0.5155492 0.1248207 -0.6519059 -0.7479476 0.9526353 0.1620227 -0.2573015 0.9747307 0.1509445 -0.1646474 0.147557 -0.4273507 -0.891934 0.09494304 -0.298471 0.949675 0.1326639 -0.1037629 -0.9856868 0.8992584 -0.3698538 -0.2334055 0.954558 -0.1703543 -0.2444227 0.7450789 -0.1283913 -0.6544694 0.4630879 -0.2613911 0.8468582 0.4042482 -0.1474349 -0.9026765 0.3551439 -0.1514023 -0.9224525 0.1535386 -0.2090823 -0.9657582 0.4360179 -0.2110354 0.8748131 0.7077547 -0.1368144 -0.6930449 0.7560656 -0.2392651 0.60918 0.9335612 -0.2389904 0.2670369 0.9594104 -0.1666921 -0.2273934 -0.9801325 -0.06921595 0.1858272 -0.870449 -0.2390515 0.4302805 -0.2503128 -0.4474319 0.8585467 0.7874081 -0.1816766 0.5890073 0.9583423 -0.1644948 0.2334361 0.8272653 -0.1808221 0.5318461 0.9880978 -0.06311225 0.1400799 0.9630421 -0.0313425 -0.2674947 0.6505936 0.07803583 -0.7553942 -0.7841426 0.1177709 -0.6092715 -0.9963378 0.05502486 -0.06540113 0.3037507 0.1710562 -0.937254 0.2787255 -0.2663655 0.9226661 0.3328654 -0.4044618 0.8518021 -0.3630482 -0.4725791 0.803003 -0.355327 -0.3281655 0.8752098 0.3710135 -0.3959776 0.8399609 -0.02423167 0.1300699 -0.9911801 0.7376324 -0.6615498 -0.1348918 0.802881 -0.4816126 0.3512681 0.7623218 -0.6044496 0.2312082 0.7900021 -0.6123539 0.02929776 0.9897763 -0.1337016 0.04956203 0.9879757 -0.1540574 -0.01113921 0.9012421 0.01187169 -0.4330881 0.9319742 0.04504531 -0.3596606 -0.3538926 -0.9312418 0.08655047 0.9150975 -0.3902707 -0.1011078 0.7768487 -0.2103335 -0.5934935 0.4427015 -0.8111515 -0.3820612 0.6006043 0.2941069 -0.7434614 0.5931883 0.1835078 -0.7838374 0.4466994 -0.05825978 -0.892758 0.8346507 -0.2901394 0.4680929 -0.7504196 0.4947966 -0.4382153 -0.9655141 0.2091738 0.154973 0.4307077 -0.4762719 0.7665334 0.8415784 -0.3531297 0.4086734 -0.7925047 0.3984192 -0.4617145 -0.9531236 0.138554 0.268868 0.5406659 -0.4928434 -0.6817225 0.6923429 -0.6112858 -0.3833125 0.3426008 -0.752739 -0.5620899 0.2047486 -0.6761376 -0.7077242 -0.8325755 0.1586047 -0.5306559 -0.9863582 -0.02932828 0.1618396 -0.9429914 -0.005706906 0.3326823 -0.8454238 -0.1333659 0.5171056 -0.3057954 0.395703 -0.8659322 -0.1698355 0.5613574 -0.8099308 -0.2267525 -0.4248481 0.8764001 0.4475539 -0.6277657 0.6368297 0.2815638 0.4464247 -0.8493301 -0.9057894 -0.006561458 0.4236274 -0.8147221 -0.1592456 0.5575121 0.1766716 0.291818 -0.9400006 -0.8815882 -0.164922 0.4422437 -0.03671371 0.1144749 -0.9927366 -0.4659566 0.1900388 -0.8641316 -0.5299539 -0.165746 -0.8316294 -0.8401135 -0.1676687 -0.5157933 -0.1751762 -0.2496109 -0.9523301 0.2509537 -0.3581042 -0.8992889 0.007599055 -0.6089053 -0.7931761 -0.2393872 -0.5719779 -0.7845088 -0.4309518 -0.531724 -0.7290567 -0.752678 -0.3387249 0.5645314 -0.2990814 -0.6817225 -0.6676229 -0.1735892 -0.8265938 -0.5352947 -0.5695975 -0.8094119 -0.142735 -0.6453139 -0.6667379 -0.3728141 -0.6526078 -0.4817652 -0.5847651 -0.6910611 -0.5841548 0.4256417 -0.9332866 -0.3583178 -0.0237739 -0.8157598 -0.5095065 0.273629 -0.06674396 -0.9094516 -0.4103824 -0.4682455 -0.8835414 -0.008331537 0.08832055 -0.9672231 -0.2380138 0.437727 -0.7603381 0.479812 0.8461562 0.4093447 -0.3411664 0.5034334 0.4380627 -0.7447127 0.5840022 0.5941343 -0.5530869 0.9335002 0.100589 -0.3440962 -0.3546251 -0.8514664 0.3862423 -0.2637715 -0.7824336 0.5640736 -0.3011261 -0.7919553 0.5311442 -0.4199347 -0.8308969 0.3650014 -0.04895168 -0.3822443 -0.9227271 0.03183078 -0.3528245 -0.9351177 -0.2129886 -0.6742454 -0.7070834 -0.2999359 -0.6831263 -0.6658223 -0.1696524 -0.829249 0.5324565 -0.1497543 -0.8739585 0.4623249 -0.09241002 -0.8385266 0.5369122 -0.1445051 -0.8386486 0.525132 -0.3679006 -0.7960448 -0.4805445 -0.3173314 -0.8687399 -0.3801996 -0.2640461 -0.4792627 -0.8370007 0.1107822 -0.8059023 0.5815607 0.01492351 -0.8943755 0.4470046 -0.2240363 -0.7578967 0.6126591 -0.234962 -0.7446211 0.6247139 0.7677541 -0.6378979 0.06002986 0.8451491 -0.07083344 0.5297708 -0.09408855 -0.8307749 0.5485702 -0.4438307 -0.8955657 0.03073209 -0.5389874 -0.8407544 0.05105745 0.04495376 -0.06967371 -0.9965514 -0.3466597 -0.9374981 -0.0293588 -0.3588671 -0.92172 -0.1469466 -0.2880337 -0.9391461 0.1871395 -0.2535478 -0.9077731 0.3341166 0.3698233 -0.8816492 -0.2929777 0.8089846 -0.2659688 -0.5241554 0.3990295 0.4750816 -0.7842342 0.4958648 0.6740928 -0.5474105 -0.5873287 -0.7379986 -0.3321635 -0.4274728 -0.8372753 -0.3408612 0.3370464 0.0723899 -0.9386883 0.3986938 0.2220526 -0.8897672 0.2375255 0.104709 -0.9656972 0.1221961 -0.9919431 0.0333262 0.3735466 -0.8960235 0.2399365 0.4535661 0.8907132 -0.02975553 0.510239 0.4004334 0.7610706 0.5384686 -0.6024354 0.5891293 0.2785119 0.5566271 -0.7826777 0.1504562 0.9665822 0.2074038 0.1626026 0.9179052 0.361858 0.09384441 0.9770806 -0.1909848 0.07690662 0.8864406 -0.4563432 -0.08450573 -0.7357708 -0.671926 -0.1012604 -0.8051698 -0.5842769 -0.10477 -0.4458754 -0.8889126 -0.117954 -0.4284799 -0.8957793 -0.01492351 -0.0577715 -0.9981994 -0.1150242 0.06985682 -0.990875 -0.04940944 -0.6449782 -0.762566 -0.1551866 -0.9040803 -0.398114 -0.3379925 -0.9045076 -0.2599872 -0.2921842 -0.9531846 0.07766956 -0.2133854 -0.9105502 0.3540452 -0.1476485 -0.9876706 -0.0514847 -0.1063265 -0.9575793 0.2677999 0.09137237 0.1610767 0.982696 0.06805628 0.2162541 0.9739372 0.1007721 0.6413159 0.7605823 0.1385235 0.6410108 0.7549059 0.1643117 -0.4886013 0.8568682 0.05972468 -0.3132725 0.9477523 0.235023 0.006042659 0.9719535 -0.09561449 -0.9813532 -0.1666311 -0.09265416 -0.8198798 0.5649586 -0.006714046 -0.8215583 0.5700553 -0.2817469 -0.7365947 -0.6147954 0.09537035 0.216895 -0.9714957 -0.1125828 -0.2775964 -0.9540696 0.001190185 0.4988861 -0.8666341 -0.05911433 0.6310617 -0.7734611 0.1974852 0.6127201 0.7651906 0.1472213 -0.6402478 0.7538987 0.4420301 -0.2257759 0.868099 0.02649003 0.9880062 -0.1520737 -0.06042665 0.6967071 -0.714774 0.09024322 0.9088412 0.4071779 -0.07284766 -0.9665822 0.245735 -0.06561475 -0.9666738 -0.247383 0.03827017 -0.7434614 0.6676535 0.001678466 -0.7603687 0.6494644 -0.02111876 -0.9767449 0.2132328 0.0424512 -0.2693564 0.962096 -0.1227149 0.09915459 -0.9874569 0.1880245 -0.6370739 0.7474899 0.1812189 -0.373455 0.9097568 0.101474 -0.2804651 0.9544664 0.1837824 -0.7506638 0.6345409 0.5154271 -0.5807367 0.6301157 0.2304757 -0.5405439 0.8091067 0.1927549 -0.6254768 0.756035 0.2744224 -0.7186499 0.638905 0.136906 0.9806513 -0.1398053 0.1349528 0.9371014 0.3218177 0.7723319 0.3349101 0.5396893 0.8187201 -0.1208533 0.5612964 0.9836116 -0.1503952 -0.09930723 0.8193304 0.5586413 -0.1286965 0.3862728 -0.9218726 0.03045743 0.6219367 -0.7694327 0.1453291 0.2244941 0.03143405 0.9739372 0.1151158 0.1379436 0.9837031 0.273629 -0.2253487 -0.9350261 0.01339757 -0.4248176 -0.9051485 0.1079134 0.08774071 -0.9902646 0.264626 0.1458784 -0.9532151 0.3563646 -0.3092135 0.8816797 0.07376319 0.7309488 -0.6783959 -0.02206486 0.07046723 -0.9972534 0.1384014 -0.9102146 -0.3902707 0.08108764 -0.8016907 -0.5921812 0.06598097 -0.9502549 -0.3043916 0.2685018 -0.9512314 -0.1517075 -0.0464186 -0.4580828 -0.8876613 0.3776665 -0.8041017 -0.4590594 0.0788598 -0.8294931 -0.5529038 0.07461774 -0.9501022 -0.3028352 -0.01086455 -0.7281411 -0.6853237 0.690054 -0.3663136 -0.6241646 0.1548204 -0.9744865 0.1624195 0.2904751 -0.949736 0.1166417 0.5681936 0.6715903 0.4754478 0.4203925 0.4636372 0.779931 0.4263436 0.02331614 0.9042329 0.3865169 0.919187 -0.07525861 0.3234962 0.7498093 -0.5771661 0.2724082 0.5736564 0.772454 0.07837152 0.647908 0.7576525 0.1627552 -0.6010621 -0.7824336 0.03003019 -0.7081515 -0.7053743 0.5972167 0.8003479 -0.05203402 0.4983673 0.5359966 -0.6813868 0.3625904 -0.922605 0.1314737 0.250557 -0.792169 0.5564745 0.3390911 0.8801233 0.3322245 0.6746116 0.2792139 -0.6833094 0.1300393 -0.9895627 -0.06164735 0.1398053 -0.9805902 0.1372417 0.1588488 -0.8475601 0.5063326 0.05307167 -0.2550737 0.965453 0.12949 0.1631214 0.9780572 0.1107822 0.1504257 0.9823908 0.04684591 -0.2793359 0.9590442 -0.02624589 -0.5723441 0.8195746 -0.02005064 -0.5935545 0.804529 0.07080292 0.5933104 -0.8018128 -0.05734425 -0.132786 -0.9894711 -0.1141697 -0.1425214 -0.9831538 -0.03079313 0.5503098 -0.834376 -0.1682791 -0.6635335 -0.7289651 -0.151738 -0.6153447 -0.7734916 -0.1136204 -0.1197546 -0.9862667 -0.02761924 0.5024262 -0.8641621 0.1251258 0.6174505 0.776574 0.1306802 0.6010926 0.7884152 -0.07483136 -0.8134403 0.5767693 -0.08630633 -0.8037355 0.5886715 0.09265416 0.9457991 0.3112277 0.07287818 0.9385968 0.337199 0.02996915 0.9595019 -0.2800378 0.06259346 0.949736 -0.3066195 0.3762322 0.2583392 0.8897672 0.2992035 -0.02063047 0.9539476 0.1619006 0.106357 0.981048 0.3278604 0.5420088 0.7737358 -0.1792657 -0.9470504 -0.2663045 -0.160802 -0.929136 -0.3328348 -0.1301614 -0.9738762 0.1859798 -0.1387981 -0.9647817 0.223365 0.07492291 -0.5541551 -0.8290048 0.3328043 -0.151677 -0.9306925 0.07312232 -0.1002533 -0.9922483 -0.03790396 -0.5821101 -0.8121891 0.7067477 0.148442 -0.691702 0.2640156 0.4495682 -0.8532975 -0.008819818 -0.5822626 0.8129215 0.04394662 -0.2980743 0.9535203 -0.06295967 -0.8057497 0.5888852 0.3591113 0.8743858 0.3262429 0.4018067 0.8770714 -0.2631611 0.07620471 -0.7448958 0.6627705 0.0806604 -0.5386212 0.8386486 -0.1276589 -0.9187597 -0.373516 -0.0738548 -0.904294 -0.420423 0.9379559 0.293527 -0.1844539 0.8706321 0.3396405 0.3557848 -0.1349223 -0.9769585 0.1652577 0.6086001 0.3057344 0.7322001 0.09811699 0.1963561 0.9755852 0.1413007 0.6013367 0.7863705 -0.05780202 -0.9831538 0.1732841 0.08902245 -0.7454146 0.6605731 0.02502512 -0.9226356 0.3848079 0.4385815 0.220252 0.8712424 0.1758476 -0.3324381 0.9265725 0.1362346 0.9207739 0.3654592 0.1296426 0.9709159 -0.2011474 0.01355022 -0.2179937 0.9758294 0.1867122 0.8895535 0.4169133 0.1728568 0.6221809 0.7635121 0.1528977 0.6339915 0.7580493 0.1951658 0.9101535 0.3653371 -0.1570177 -0.6787622 -0.7173376 -0.1334574 -0.964507 -0.2277291 -0.1776177 -0.9764397 -0.1223792 -0.1760918 -0.9567248 -0.2315439 -0.02529984 -0.7466353 0.6647236 -0.06689655 -0.9519639 0.2987457 -0.08200323 -0.9694204 0.2312692 3.35704e-4 -0.7503281 0.6610309 -0.1227149 -0.9461959 -0.2993866 0.1973937 0.958678 -0.2048097 0.1597949 0.9754326 -0.1514633 -0.1510666 -0.9457076 0.2877285 0.1379131 0.2529984 0.9575487 0.1283913 0.2414929 0.9618518 0.1794793 0.8879971 0.4233222 0.1545457 0.9805292 -0.1209448 -0.1531724 -0.9576098 0.2439344 -0.07351905 -0.5432905 0.8362987 0.1890011 0.9196143 0.3442793 0.2132023 0.9490036 -0.2321543 -0.1289101 -0.7986999 0.5877255 0.1304971 0.6099429 -0.781579 0.1081576 0.6459548 -0.7556383 -0.1224707 -0.7641224 0.6333201 0.07306128 -0.4481338 0.8909574 0.04629653 -0.4424268 0.8955962 0.1591235 0.610828 0.7755669 0.1329081 0.6345714 0.7613148 -0.05392616 -0.4939116 0.8677938 0.02517777 -0.1722465 0.9847102 0.1008331 0.2370678 0.966216 0.09079253 -0.1629078 0.9824213 0.1018403 -0.1835688 0.977691 -0.1551561 -0.9630726 0.2199164 -0.03796499 -0.7534105 0.6564226 -0.1352275 -0.8940092 -0.4271065 -0.04892116 -0.5562304 -0.8295542 -0.09341716 -0.6105839 -0.786401 0.05423134 -0.4751732 0.8782007 0.07321387 -0.231788 0.9699698 0.08886986 0.1792047 0.9797663 -0.003051817 -0.505356 0.8628804 0.02035582 -0.2504654 0.9678946 0.05780202 0.1413007 0.9882504 0.02905356 0.02578812 -0.9992371 -0.005859553 -0.08365124 -0.9964599 0.1812189 0.9646901 -0.1911069 0.09851372 0.9678335 -0.2314218 0.09509563 0.5793634 0.8094729 -0.0406506 -0.7479171 0.6624958 0.1497238 0.9214759 0.3583178 -0.0390942 -0.9832758 0.1778008 -0.09643846 -0.9719535 0.2143925 -0.07892084 -0.933256 -0.3503525 -0.08075195 -0.8797876 -0.4683981 0.5697196 -0.2719504 0.7755364 0.409009 -0.7367168 0.5384381 0.3671987 -0.7627491 0.5322734 0.631428 -0.2712485 0.7264016 0.1444135 0.876217 0.4597308 0.08685564 0.9172949 0.3885312 0.08197271 0.5618763 0.8231147 0.1586047 0.5353862 0.8295542 0.498825 0.1018097 0.860683 0.3501694 0.1800287 0.9192175 0.0658589 0.1134373 0.9913328 0.3289285 0.6459548 -0.6888333 0.3670766 0.9228187 -0.1165502 0.8337962 0.5001679 -0.2335886 0.6181524 0.4781945 -0.6238288 0.6313364 -0.711478 -0.3085421 0.1313517 -0.9251076 -0.356212 0.1683401 -0.5053865 -0.8462783 0.5707572 -0.377636 -0.7290872 0.4404736 -0.7910398 0.4244819 0.07492291 -0.8978546 0.4338511 0.09442424 -0.9013642 0.4226203 0.269631 0.4975432 0.8244575 0.1870174 0.04855489 0.9811396 0.1913205 0.2480849 0.9496445 0.1138951 -0.7521897 0.6490066 0.1086459 -0.8395032 0.5323344 -0.0055238 -0.9943236 0.1062349 0.1187475 -0.9828181 0.1411176 0.02017271 -0.7813959 0.6236763 0.05136263 -0.5824763 0.811182 0.4860683 0.7935118 0.3661305 0.8294931 0.4656514 0.308359 0.5530869 -0.8217109 0.1372417 -0.07577741 -0.9070711 -0.4140141 0.1151463 0.9775995 -0.1760918 -0.05752736 -0.5702994 -0.8193915 0.05429238 -0.3185522 0.946318 0.5445418 0.2945036 0.7853023 0.1683706 -0.3853877 0.9072543 0.7176733 0.0534684 -0.6942961 0.9645375 -0.08178961 -0.2509232 0.2093875 0.132725 -0.9687491 0.01702928 0.06921595 -0.9974365 0.0846278 0.6642354 -0.7426984 0.9645985 -0.1357158 0.2260506 0.723777 -0.2465896 0.6444594 0.3600574 -0.4767907 -0.8018739 0.07312232 -0.5633717 -0.8229316 0.0590533 -0.8873867 -0.4571673 0.3539537 -0.8505508 -0.3888974 -0.03033536 0.4615314 -0.8865627 -0.04766988 0.4687338 -0.8820155 -0.04358041 0.9439375 -0.3271584 -0.01489299 0.8992279 -0.4371472 0.02200382 -0.9965819 -0.07928705 -0.0424512 -0.9939268 -0.101474 -0.05734425 -0.9699088 0.2365184 0.01089507 -0.9681692 0.2499771 0.05969417 0.0866115 0.9944456 0.08508557 0.1340678 0.9873043 0.1047395 0.6328929 0.7670828 0.0678426 0.644734 0.7613758 -0.02322459 0.9733878 0.2279122 0.02478098 0.9628285 0.2689291 -0.04620498 0.9134801 -0.4042177 0.6774499 0.5776544 -0.4553056 0.08862572 0.8996857 -0.4273812 0.2050538 0.4634236 -0.8620563 0.6324961 0.1788384 -0.7536241 -0.04925686 0.4820399 -0.8747521 0.006714046 -0.09454631 -0.9954833 0.2664876 -0.0205084 -0.9635914 0.0109561 -0.4220405 0.9064913 0.02426218 0.09002959 0.9956359 0.01385539 -0.4970244 0.8676107 -0.08853417 -0.5905942 -0.802057 -0.0572527 -0.6110416 -0.7894833 -0.0644856 -0.9261147 -0.3715934 -0.0549333 -0.908536 -0.4141362 0.3575854 0.9033479 0.2367321 0.007751643 0.9641103 0.2652974 0.06396675 0.9501022 0.3053072 0.8274789 -0.5060579 -0.2432325 0.2851344 -0.9582812 -0.01818901 0.7701041 -0.6187323 0.1550645 0.3369548 -0.6409192 0.6896573 0.4676351 -0.2269051 0.8542741 0.6404615 -0.4376354 0.6310617 0.2691428 -0.882107 0.3865169 -0.04150515 -0.7908567 0.6105533 -0.002197325 -0.8207343 0.571276 0.1091952 -0.8113651 0.5742058 -0.006500422 -0.9943236 -0.1060213 0.05737477 0.6510819 0.756798 0.2420117 0.7051912 0.6663717 0.2789392 0.5132603 0.8116093 0.2050538 0.4024781 0.8921476 -0.05188143 -0.07904291 -0.9955138 -0.03415018 -0.9763482 0.2134159 0.06347846 0.1128269 0.9915769 0.1828669 -0.0120548 0.9830317 0.1902829 -0.5080111 0.840022 0.09842216 -0.5170751 0.8502457 -0.0275582 -0.7571337 0.6526383 0.005371212 0.6324961 0.7745293 0.2220526 -0.7330851 0.6428419 -0.03045743 -0.02334666 -0.9992371 0.5496994 0.403241 0.7315592 0.3893246 0.3548692 0.849971 0.02685624 -0.3592944 0.9328288 0.9338969 0.1394696 0.3291726 0.02124083 -0.970214 0.2412488 0.08862572 -0.7099826 0.6985992 0.05154573 0.6647236 0.745262 0.02554398 0.9615162 0.2735374 0.05899226 0.9433271 0.326548 0.04144412 0.6608478 0.7493515 0.04882961 -0.07397687 -0.9960326 0.02792441 -0.6073794 -0.7939085 0.05316323 -0.5605335 -0.8263802 0.05728322 -0.06579786 -0.9961852 0.1739249 0.1190221 0.9775078 0.1431623 -0.3382366 0.9300821 0.181402 -0.3639637 0.9135716 0.1705374 0.1298562 0.9767449 0.1007111 0.6841945 0.7222816 0.1373943 0.6598407 0.7387005 -0.02563554 -0.9985351 -0.04739522 -0.03247165 -0.9275491 -0.3722648 0.03097623 -0.9111301 -0.4108707 0.01330602 -0.9997864 -0.01406902 0.03958249 0.9394818 0.3402814 0.08862572 0.9366741 -0.3387249 0.05389565 0.9341716 -0.3526719 0.009949028 -0.943907 0.3300272 -0.005096554 -0.9452803 0.3261513 -0.005493283 -0.7266762 0.6869106 0.03360086 -0.7011933 0.7121495 -0.005737423 -0.9526048 0.3040864 0.01635789 -0.9997559 -0.01260411 -0.0134586 -0.9994507 -0.02948087 0.02877891 0.1744438 0.9842219 0.01419109 -0.3368633 0.941435 0.03833121 -0.2838832 0.9580676 0.05478072 0.1959593 0.9790643 0.1288186 -0.6855373 0.7165136 0.06936854 0.1264687 0.9895322 0.03704947 0.6651815 0.7457503 -0.06399726 -0.9700003 -0.2344737 0.08227789 0.9565417 0.2796411 0.03210544 0.9656361 -0.2578204 0.05417031 0.9461959 0.3189795 0.008117914 0.9764397 -0.2156133 0.009002923 -0.7170019 0.6969817 -0.03143405 -0.9951476 -0.09298986 0.006897151 0.9013642 -0.4329661 0.04406869 -0.9480575 0.3149815 0.06769001 -0.3672903 0.9276101 0.03445535 -0.8801233 -0.4734336 0.05682545 0.4588153 -0.8866848 -0.03845328 -0.9079562 -0.4172796 -0.006805598 -0.952971 -0.3029267 0.0640583 0.5290079 -0.8461562 0.002288877 -0.06738483 -0.9977111 -0.01870781 -0.5985595 -0.8008362 0.0959807 0.7374188 0.668569 0.04678487 0.9782403 0.202002 0.1452681 0.2817469 0.9484238 0.1113925 -0.2216559 0.9687185 0.317484 -0.1354717 0.9385052 0.233375 0.3313089 0.914182 0.1149021 0.9873959 0.1086153 0.07922601 0.8827479 -0.4630573 0.003631651 0.8926054 -0.4507889 0.6520585 0.6895962 0.315012 0.7031465 0.690115 -0.1711173 0.2735374 0.9618213 -0.007141292 0.2348399 0.7949156 0.5593737 0.1621753 -0.9697867 0.182165 0.1142918 -0.7338481 0.6696066 0.2070375 -0.5653554 0.7983947 0.03076261 -0.94055 0.3382061 0.9998474 -0.01324498 -0.00854516 0.6328929 0.5241249 0.5698416 0.9835811 -0.07022309 0.1661427 0.05362099 -0.6938688 0.71807 0.7107761 -0.5960265 -0.373516 0.1993163 -0.9659109 -0.1650136 0.1251564 -0.9067354 -0.4026612 0.4918668 -0.5678884 -0.6599323 0.2928861 0.8155156 -0.4991302 0.2534562 0.4213385 -0.8707236 0.1922056 -0.06894129 -0.9789117 0.04449594 0.4594256 -0.8870815 0.1535081 0.7819758 0.6040834 0.649556 -0.7599719 0.02154606 0.4044008 -0.8398999 0.361858 0.1569262 0.4513688 0.8784143 0.1457259 -0.5957213 -0.7898495 -0.0266121 -0.9080477 -0.4179815 -0.02099668 -0.9984436 -0.05160677 -0.001220703 -0.9488205 0.3157445 -0.04129153 -0.9986572 -0.03079313 0.5789971 0.5845515 -0.5683462 0.3339641 -0.4548784 -0.8255257 0.9323099 0.01687669 -0.3612476 0.4306772 0.3421735 -0.8351085 0.3898739 -0.008941888 -0.9208045 0.6050905 0.4069948 0.684225 0.9590747 -0.1722159 0.2247382 0.6734215 0.08862572 -0.7338786 0.5904111 -0.7598804 0.2719199 -0.07000946 0.9675283 0.2428053 -0.01617479 0.959685 0.2804956 -0.01638841 0.9683218 -0.2490921 -0.06979578 0.9632862 -0.2591326 -0.03518784 0.6627705 -0.7479476 -0.04721212 0.05325478 -0.9974365 0.1028473 0.0516678 -0.993347 -0.004455685 0.6487625 -0.7609485 0.2321543 -0.5104221 0.8279672 0.1492965 -0.2265694 0.9624623 0.2183904 -0.1789605 0.9592883 0.338023 -0.2652059 0.9029816 0.1241493 -0.670919 0.7310099 0.1049531 -0.256386 0.9608448 0.3168737 0.9120457 0.2602008 -0.01260411 0.9631642 0.2685934 -0.03469949 0.9766228 -0.2120121 0.4965361 0.821894 -0.2790307 0.9572131 -0.169042 -0.2347484 0.9378033 -0.003906369 -0.3470565 0.8684042 0.4165776 0.2688986 0.05874812 0.3661 0.9287087 0.1109042 0.3617664 0.9256264 0.03570663 0.7795038 0.6253548 0.004821896 0.7757195 0.6310312 -0.0585345 0.1366618 -0.9888607 -0.06491285 -0.6308786 -0.7731559 -0.05047756 -0.6632893 -0.7466353 0.5470443 -0.4230781 0.7222816 0.1525009 -0.9058504 0.3951842 0.1016266 -0.2551652 0.9615162 0.1288491 -0.1962645 0.9720146 0.5771355 -0.772454 -0.2649922 0.5979186 -0.7796564 0.1859798 0.1782586 -0.9839778 -0.001983702 0.06817835 -0.9976501 0.002594053 0.09433269 -0.9254128 0.3669851 0.05374306 0.7623524 0.6448866 0.09533983 0.3606067 0.9278237 0.05099642 0.361919 0.9307841 -0.01342809 0.7878658 0.6156499 0.1895504 0.8044069 0.5629749 0.02255314 0.6914579 -0.7220069 0.4781335 0.4287545 -0.7665029 0.4182867 -0.5002899 -0.7580798 0.187994 0.0313425 -0.9816584 0.171575 -0.5988953 -0.7821894 0.5659353 -0.3200171 -0.7597888 0.1016266 -0.7015595 0.7053133 0.09378337 -0.6770226 0.7299417 0.1770073 -0.9050264 -0.3867 -0.01104766 -0.9982299 0.05838185 -3.05185e-4 -0.9320353 -0.3623157 -0.08880883 -0.928312 -0.3610035 0.1272011 0.6402783 0.7574999 0.1575365 0.3037202 0.9396344 0.448561 0.6194037 0.6442763 0.2452772 0.6022217 0.7596668 0.137669 0.7334819 0.6655782 0.7756279 -0.1142308 -0.620716 0.4917142 0.08233892 -0.8668172 0.4386425 -0.01187169 0.8985565 -0.03323465 0.7129124 -0.7004303 0.09591966 -0.626545 0.7734306 0.1856746 -0.1248207 0.9746391 0.04483169 -0.9114353 0.4089175 0.09027373 -0.9177832 0.386639 0.06570631 -0.5536668 0.830134 0.08001953 -0.5840022 0.8077639 0.02856528 0.3760491 0.9261452 0.04394662 -0.01199376 0.9989318 0.03018277 -0.006836116 0.9995117 0.01553392 0.3574328 0.9338054 0.04861593 -0.9279763 0.369396 0.08569598 -0.9959105 0.02783286 0.1025422 -0.9945067 0.02005064 0.08780175 -0.9457381 -0.3127842 0.06491285 -0.9458907 -0.3178808 0.01293981 -0.6856288 -0.7278054 0.0653401 -0.6687521 -0.7405622 0.01113921 0.7446211 -0.6673788 0.04358041 0.1211279 -0.9916685 -0.01437419 0.9549852 0.2962431 -0.0260933 0.9544664 -0.2970672 0.1934263 0.3888974 0.9007233 0.005615353 0.7587512 -0.651326 0.01278722 0.08859521 -0.9959716 -0.003845274 -0.943144 -0.3322855 -0.009002923 -0.9753105 -0.2204962 0.04358041 0.9727165 -0.2278512 0.009063959 0.9715873 -0.2364268 -0.02023375 0.9594409 -0.2811365 -0.03112888 0.9844356 -0.1728568 0.02999967 0.9757989 -0.2164677 0.004303097 -0.9104892 0.4134342 0.002655088 0.6960356 0.717948 0.004547238 0.7459639 0.6659444 0.03863638 0.344615 0.9379253 0.1290017 -0.03769034 0.9909055 0.04156619 -0.9136021 0.4044313 0.07101655 -0.5583972 0.8265023 0.06064027 -0.5540331 0.8302561 0.07614368 -0.9278237 0.3651235 0.0723899 -0.01562547 0.9972229 -0.003814756 0.9780877 0.2080752 -0.03003019 0.9649037 0.2608112 0.01416057 -0.9979248 0.06256294 0.007446467 -0.9445174 -0.3283181 0.1272622 0.3897824 0.9120457 0.01361125 0.7343059 0.6786401 -0.05316323 -0.990997 0.1226844 0.03353983 -0.9975891 0.06033504 -0.06891077 -0.9898068 -0.124546 0.1050142 0.7642445 0.6362804 0.07010102 0.7230445 0.6871853 0.0386669 0.9302957 0.3646962 0.04205447 0.9510788 0.3060396 0.01397746 0.9574877 0.2880337 0.04181033 0.9965209 -0.07193213 0.1568651 0.6886502 0.7078768 0.05206453 0.7085483 0.7036958 0.0813623 0.3089389 0.9475692 0.06778156 0.3695181 0.926725 0.0680868 -0.9147923 0.398114 0.06079286 -0.4541459 0.8888211 0.06833094 -0.4879605 0.8701743 0.006591975 -0.9001129 0.4355602 0.2140568 0.80871 0.5478377 0.113712 0.5205543 0.8461867 0.433546 0.6244087 0.6497086 0.5540636 0.6810816 0.4786218 0.6695456 -0.662862 0.3351237 0.4870754 -0.5883053 0.6454359 0.1266213 -0.662038 0.7386395 0.2503738 -0.8970305 0.3641163 0.3027436 0.9186376 0.2537614 0.7124546 0.6863002 0.1461836 0.6898404 0.6816614 -0.2437513 0.2837306 0.9530931 -0.1051667 0.111362 -0.02182072 0.9935301 0.1428266 0.9681997 0.2052674 0.1259804 0.978637 -0.1622669 0.03347879 0.9672842 0.2514725 0.09772026 0.01843315 0.9950255 0.1331523 0.7268288 -0.6737571 0.3566698 0.6816614 -0.6388134 0.7205115 0.06747639 -0.690115 0.5888546 0.5995361 -0.5420088 0.8972747 0.06674396 -0.4363842 0.6081118 -0.4717246 -0.6384778 0.6995758 -0.5927305 -0.3990295 0.01162755 -0.9994507 0.03042691 0.380169 -0.5361186 -0.7536546 0.4358043 0.07068085 -0.8972442 0.08005005 -0.9927366 -0.08951079 0.1104465 -0.6080203 -0.7861874 0.1201208 0.07666248 -0.9897763 0.1107211 -0.9313944 -0.3467208 0.2864772 -0.9536119 -0.09247106 0.3202918 -0.8811609 -0.3477279 0.9970092 0.03741568 -0.06756794 0.7663503 -0.6360363 -0.09006011 0.9378948 0.05395668 0.3426923 0.8448134 0.02594071 0.5343791 0.8242439 0.03549301 0.5650807 0.6185187 -0.4274117 0.6593219 0.5763115 0.4824366 0.6595661 -0.2096927 0.8982513 -0.3861812 -0.1955931 0.898587 -0.3927732 -0.1676381 0.9840694 0.0590533 -0.1915951 0.9787896 0.07235938 -0.06375312 0.845027 0.5308695 -0.09036529 0.8217719 0.5625782 0.2680441 0.3330485 0.9039888 0.1748405 0.5866573 0.7907041 0.3705557 0.2830592 0.8846095 -0.09540086 0.9097568 -0.404004 -0.06939905 0.5612354 -0.8247017 -0.1234779 0.5630055 -0.8171636 -0.1596423 0.903409 -0.3978698 -0.1453902 0.5681936 -0.8099308 -0.04776144 0.6062807 -0.7937864 0.6218146 -0.08218634 0.7788019 0.01840263 -0.9063387 -0.4221015 0.1686453 -0.985229 0.02868735 0.7296976 -0.6617634 0.1718497 0.3177892 -0.8505203 -0.4190191 0.1067537 -0.1450545 -0.9836421 -0.02240055 -0.1230201 -0.9921262 0.124485 -0.6898404 -0.7131565 -0.001525878 -0.06237983 -0.9980468 0.02920621 -0.6529435 -0.756798 -0.08456677 0.9255349 -0.3690298 -0.1116672 0.5884579 -0.8007447 -0.06472975 -0.5186621 -0.852504 0.002288877 -0.8580889 -0.5134434 -0.05465865 -0.8726768 -0.4851832 -0.07473981 -0.5578173 -0.8265633 0.05682545 -0.998291 -0.01330602 0.00338751 -0.999939 -0.009002923 0.01596117 0.996643 0.08011108 0.08536022 0.8555559 0.5106052 0.1259194 0.8395947 0.528367 -0.008209466 0.9956359 0.09283727 0.1214942 -0.8876919 0.4440748 0.1158483 -0.8992584 0.4217353 -0.1212195 0.9225745 -0.3661916 -0.1478011 0.6055178 -0.7819758 0.2519913 -0.6070742 0.7535936 0.1740776 -0.6309092 0.756035 0.1730704 0.4333629 0.8844264 0.2627643 0.4633015 0.8463088 -0.1237525 0.07565534 -0.9894101 -0.07577741 -0.04437386 -0.9961242 -0.01913505 0.8629414 0.5048983 -0.08383435 0.99588 0.0343638 -0.1595813 0.985931 0.04925686 -0.06897181 0.8180792 0.5709097 0.3407086 -0.08829003 0.9359722 0.2214423 -0.1204565 0.9676809 0.2998749 -0.2774438 0.9127171 0.3079928 0.01229894 0.9512925 0.07632678 0.402356 0.9122898 0.09894096 -0.1356853 0.9857784 0.1862545 -0.5325175 0.8256478 0.3052766 -0.7955565 0.5233009 0.06598097 0.3938108 0.9168065 0.02575761 0.3584399 0.933195 0.1149937 -0.1195715 0.9861141 0.1993468 -0.01513713 0.9797968 0.1017182 -0.01559495 0.9946593 0.1027253 -0.5531785 0.8266854 0.03421121 -0.5029451 0.8636128 0.04547256 -9.76592e-4 0.9989624 -0.001098632 -0.9977111 -0.06756794 0.1148106 -0.9919431 -0.05301064 0.078341 -0.8571734 -0.5089877 -0.05926692 -0.8958404 -0.4403516 0.08261358 -0.8833582 0.4613178 0.02728354 -0.8775292 0.4787133 0.04547256 -0.4275338 0.9028291 0.06509596 0.4563127 0.8874172 0.1001617 -0.04629653 0.9938658 0.07324439 0.4698019 0.879696 0.1046479 -0.8890957 0.4455397 0.1163671 -0.8867153 0.4473708 0.1178625 -0.5425581 0.8316904 0.1625416 0.4654073 0.8700217 0.2165898 -0.06671345 0.9739677 0.04062008 0.8166753 0.5756096 0.03320413 0.8094729 0.586169 0.178991 -0.575396 0.7980285 0.04663223 0.4801782 0.8759117 0.02902305 0.826838 0.5616322 -0.02716147 0.6117435 -0.7905515 -0.08221685 0.9169591 -0.3903623 -0.03997921 0.9803766 -0.1929685 0.01355022 0.9295023 -0.3685415 0.03906369 0.9873043 0.1539048 0.07965326 0.8412733 0.5346843 0.06292915 0.9856258 0.156621 -0.007721126 0.980102 0.1982482 -0.05069124 0.9924924 0.1112704 0.05011135 0.8392896 0.5413373 0.04342782 -0.553209 -0.8318735 0.02294987 -0.8585162 -0.5122227 0.05917537 -0.9977416 -0.03106784 0.0916776 -0.9956359 0.01736503 0.104831 -0.8922392 0.4391919 0.003295958 0.6102786 -0.7921385 0.03109836 0.9244972 -0.3798334 0.02932828 0.9220252 -0.3859676 0.003967404 0.6076235 -0.7941832 0.02832114 0.9843745 0.1736198 0.1511582 -0.988403 -0.01251256 0.07263404 -0.9313944 -0.3566088 0.1310159 -0.8646504 -0.4849391 0.03253269 -0.5758233 -0.8168889 0.08319342 0.5228736 0.8482925 0.005066037 0.02224797 -0.9997254 -0.001434326 0.009949028 -0.999939 0.16245 0.8445692 0.5101474 0.1162145 0.978637 0.1695303 0.08859521 0.9858089 -0.1423993 0.2089297 0.5485092 0.8095951 -0.0323801 0.02612382 -0.999115 -0.04071164 -0.5800348 -0.8135319 0.07193213 0.07415997 0.9946287 0.1951963 0.131901 0.9718315 0.1326029 -0.406476 0.9039583 0.04809713 -0.8654744 0.4986114 -0.01989805 -0.9994812 0.02508616 0.03180027 -0.9994202 0.01022368 0.09741508 -0.8229926 0.5595874 0.5089877 -0.5800958 0.6358837 0.7290567 -0.01489299 0.6842555 0.6107059 0.04751729 0.7903989 0.2299569 -0.4257637 0.8750877 0.500412 0.6157109 0.6086307 0.6421705 0.7032991 0.3048189 0.2386242 0.9242531 0.2978911 0.1662648 0.8633686 0.4763634 0.3267922 0.7092196 0.6246224 0.1858272 0.6074404 -0.7723014 0.09173864 0.9361858 -0.3392742 0.1453596 0.9447615 -0.2937406 0.6807154 -0.7170324 0.1497848 0.9716483 0.02117979 0.2353587 0.3284097 0.9192175 -0.2170782 0.3987548 0.6595966 -0.6371044 0.4456008 0.02957242 -0.8947111 0.4889065 0.5393536 -0.6855678 0.6844386 0.7042757 -0.1884518 0.8336741 0.05932796 -0.549028 0.1282387 0.9712516 0.2004761 0.1175878 0.9631031 0.2419507 0.6609699 -0.6811732 -0.3147069 0.1689199 0.03079313 -0.9851375 0.1708426 -0.7977843 0.5781732 0.2699972 -0.961272 0.05484175 0.1702933 -0.5527207 -0.8157598 0.1020234 -0.4705039 0.8764611 0.4182257 0.06109803 -0.9062777 0.1295205 0.8257088 0.548967 0.4182867 -0.5253456 -0.7409284 0.09552294 -0.7840815 0.6132084 0.19718 -0.2569963 0.9460738 0.169103 -0.4058962 0.8980987 0.2237617 0.1800897 0.9578539 0.2248909 0.2014222 0.9533067 0.212775 0.6308786 0.7461165 0.4227729 -0.4239021 -0.8009278 0.1190527 0.854091 0.5062716 0.1572313 0.8452407 0.5106662 0.1554918 0.6814783 0.7150792 0.01657152 0.3253883 0.9454329 -0.07571637 0.128605 0.9887692 0.04220706 0.09921562 0.9941405 -0.01272618 0.1823176 0.9831538 0.04266482 0.007324397 0.999054 0.1094698 0.04461801 0.9929807 0.08676409 -0.9949034 0.05121004 0.05203402 0.465804 0.8833277 0.05249178 0.3774224 0.9245277 0.1785333 0.3153783 0.9320048 0.4388867 0.4201788 0.7942137 0.07480084 0.616596 0.7836848 -0.00125122 -0.8914456 -0.4530778 -0.06079286 -0.9436933 -0.3251137 0.1243629 -0.02484202 0.9919126 -0.06677448 -0.08975493 0.9937132 0.3486434 -0.8474685 -0.4002503 0.1313211 -0.8968474 -0.4223151 0.1924192 0.1498764 0.9697867 0.5101779 0.09332555 0.8549761 0.4151738 -0.24073 0.8772851 0.1457259 -0.7752617 0.6145513 -0.04617446 -0.9239784 0.3795892 0.2490921 -0.8717612 0.4218268 -0.03921627 -0.9908139 0.1292459 -0.1803644 -0.9725334 0.1470687 0.01348912 -0.9122593 0.4093447 -0.117832 -0.9761956 0.1819514 -0.1151463 -0.9793084 0.1663564 0.002655088 -0.8698385 0.4933012 0.1359905 -0.7050997 0.6959136 0.05767995 -0.8898587 0.4524979 -0.2024292 -0.9547716 -0.2176885 -0.004150509 -0.9941099 0.108005 -0.0811792 -0.9250466 -0.3710135 -0.136021 -0.9515061 -0.2758263 -0.05801564 -0.9252297 -0.3749199 -0.06433302 -0.9656361 -0.2517472 0.4116031 -0.9094211 0.05914485 0.3259682 -0.9419843 0.07989746 0.3302713 -0.9370709 -0.11301 0.2888882 -0.8993194 -0.3282571 -0.007446467 -0.9635609 -0.2672811 0.0356456 -0.9794 -0.1986449 -0.09115874 -0.9898068 0.1093783 0.1952879 -0.9280984 0.3169652 0.0801416 -0.9647206 0.2507095 0.1072725 0.2124393 0.9712516 0.1239967 0.1452986 0.9815669 0.07971435 -0.8348643 0.5446028 0.03695791 -0.8501846 0.5251625 0.1380657 0.01770073 0.9902341 0.2515641 -0.02059996 0.9675893 0.252327 -0.6352123 0.7299112 0.05194246 -0.6827601 0.728782 0.01867729 -0.7902158 0.612537 0.007507503 -0.3694571 0.9291971 0.1138035 -0.392407 0.9127171 0.02926725 -0.6423231 0.7658315 0.07519757 -0.5735649 0.8156682 0.1094393 -0.5525987 0.8261971 0.1684011 -0.3224281 0.931486 0.05984675 -0.3375042 0.9393903 0.08508557 -0.0737937 0.9936217 0.1910458 -0.0959807 0.976867 0.002960264 -0.3772698 0.9260842 0.1127964 -0.02154606 0.9933775 0.1753898 -0.1702933 0.9696341 0.2873623 -0.4021119 0.8692892 -0.01886039 -0.3778802 0.9256264 0.01178014 -0.3542283 0.9350566 0.01266515 -0.4140446 0.9101535 -0.08209478 -0.1622363 0.9833064 0.2859889 -0.113834 0.9514145 0.2258064 -0.2178411 0.9494919 0.0754112 -0.6801965 0.7291177 -0.06402778 -0.6151006 0.7858211 0.1398663 0.2420423 0.9601123 0.4313181 0.05255287 0.9006317 0.7032075 0.2092349 0.6794641 0.6550188 -0.6530656 0.3799859 0.3319804 -0.6221809 0.7089755 -0.01611375 0.4029664 0.915067 0.2231208 0.04327523 0.9738152 0.01846367 0.2698141 0.9627064 0.2979827 -0.3019806 0.9055147 0.4438612 -0.4614399 0.7681204 0.5323649 -0.2824793 0.7979675 0.7290261 -0.5248268 0.4393445 0.5646229 -0.1181371 0.8168279 0.7727287 0.05240023 0.6325266 0.03323465 -0.2635579 0.9640492 -0.1480758 -0.1974852 0.9690237 0.9289224 -0.2521134 0.271157 0.8366039 -0.2016663 0.5092929 0.1728568 -0.5450606 0.8203375 0.001739501 0.03894162 0.9992371 -0.05938899 0.008331537 0.9981689 0.002044737 -0.4553362 0.890286 -0.008362054 0.05105745 0.9986572 0.03857535 -0.2928861 0.9553514 0.6406446 0.02240055 0.7674795 0.6217536 -0.2926115 0.7264626 0.5650502 0.3184607 0.7610706 0.08282721 0.5131688 0.8542436 0.01016265 0.5035554 0.8638874 0.3250526 0.220252 0.9196753 0.337199 0.03839224 0.9406415 0.3308206 -0.1514023 0.9314554 0.04354989 0.0655232 0.9968871 0.2603534 -0.3714713 0.891171 0.2141178 -0.1437116 0.966155 0.2224189 0.05008083 0.973632 0.1330607 0.3691824 0.9197669 0.2583697 0.2278206 0.9387799 0.1531724 0.4421827 0.8837245 -0.02490305 0.07650989 0.9967345 0.2609637 -0.3820917 0.8865017 -0.03790396 0.3741874 0.9265419 0.03625595 -0.222663 0.9742119 -0.09103667 0.1709952 0.981048 -0.02639847 0.1547288 0.987579 0.01821953 -0.2841578 0.9585864 -0.09537035 0.1712393 0.9805902 0.04922634 -0.246559 0.967864 0.01068145 0.1432234 0.9896237 0.1495712 0.1873836 0.9708243 0.18305 -0.1282693 0.9746696 0.05413979 0.5866573 0.8080081 0.09558397 0.5053865 0.8575701 0.5197607 -0.003784239 -0.8542741 0.1322977 0.02969449 0.9907529 0.1885433 0.08594012 0.9782708 0.3045442 0.08294928 0.948851 0.2743309 -0.09060943 0.9573351 0.273751 -0.4683066 0.8400525 0.2964263 -0.1420636 0.9443953 -0.002716124 -0.9992981 0.03674423 -0.2412488 -0.9627369 0.1220435 -0.06671345 -0.8934599 0.4440748 0.07217627 -0.885342 0.4592425 -0.193701 0.9520554 -0.236671 -0.2570879 0.8923918 -0.3707999 -0.2620319 0.952147 0.1571093 -0.2323984 0.9408857 0.2463759 0.03442484 0.2288583 0.9728385 -0.004211544 0.3123875 0.9499191 -0.03051847 0.3636586 0.9310282 -0.06286811 0.6237373 0.7790765 0.02093565 0.3614612 0.9321268 -0.03906369 0.5012055 0.8644368 -0.06921595 0.58623 0.8071535 -0.02105772 0.4366283 0.8993805 0.0172429 0.6224555 -0.7824336 0.05987727 0.1012909 -0.9930418 0.1860408 0.1125828 -0.976043 -0.03830069 0.6555987 -0.7541124 0.3033845 -0.1041902 -0.947142 0.3838923 -0.229194 -0.894467 0.3571887 -0.1698355 -0.918424 0.2096621 -0.02496409 -0.9774468 0.7091891 -0.1949217 -0.6774804 0.1237831 -0.3570361 0.92584 0.08996856 -0.07745593 0.9929197 0.09161657 -0.6703085 0.7363811 0.007934808 -0.6911527 0.7226173 -0.3806574 0.7633595 -0.5218665 -0.385937 0.9183019 -0.08783227 0.006134212 -0.1432844 0.9896543 0.004364132 -0.03408914 0.9993897 0.005676388 0.06149476 0.9980773 -0.0374462 0.03018277 0.9988403 0.03781241 0.118778 0.9921873 0.005218625 0.1173742 0.9930723 -0.0055238 0.004852414 0.9999695 0.09991759 -0.1715445 -0.9800714 0.307474 -0.147557 -0.9400311 0.3937803 -0.2669149 -0.879574 0.4168218 -0.2273629 -0.8800623 0.505234 0.0529496 -0.8613239 0.4358654 0.01678514 -0.8998383 0.03549301 -0.3854793 0.9220252 0.003051817 -0.1099582 0.9939268 0.2092959 -0.1508225 0.9661245 0.207007 -0.3867916 0.898587 -0.2766197 0.8901944 0.3618885 -0.2306283 0.8484451 0.4763329 -0.06866663 -0.4737083 0.877987 -0.07016205 -0.3081454 0.9487289 -0.04696798 -0.2552568 0.9656972 -0.006439387 0.238319 -0.97116 0.2189092 0.4907071 -0.8433485 0.07580798 0.1453902 -0.9864498 0.02624589 -0.1267433 -0.9915769 -0.1488693 0.6045412 -0.7825251 -0.3454085 0.3950621 -0.8512223 0.4613788 -0.03476053 -0.8865017 0.1928464 0.3830989 0.9033173 0.1624195 0.2177801 0.9623707 0.1792352 -0.4983673 0.8482314 -0.5312662 -0.5505234 -0.6439101 -0.6864833 -0.3769952 -0.6217231 -0.5876644 -0.093997 -0.8035829 -0.3156834 -0.2162846 -0.9238563 0.05850398 0.7847225 0.6170538 0.08902245 0.2752159 0.9572436 -0.345317 0.24897 -0.9048433 -0.1368755 0.4289681 -0.8928495 0.06076234 0.6568194 -0.7515488 -0.1933042 -0.1153294 -0.974334 -0.1349528 0.09875786 -0.9859005 -0.3422346 0.1840876 -0.9213843 -0.4793237 0.09152501 -0.8728294 -0.01754814 -0.1134678 0.9933775 3.66222e-4 -0.1603137 0.9870601 0.004608273 -0.1894894 0.9818415 -0.01266515 -0.1891232 0.9818415 0.1347087 0.1080965 -0.9849544 0.05420082 -0.02978605 -0.9980773 0.04379403 0.2416455 0.9693594 0.02951139 0.1677907 0.9853511 -0.005066037 0.3303934 0.9438154 0.05575728 0.1259499 0.9904477 0.1907712 -0.03012174 0.9811396 0.1102328 0.2733543 0.955565 0.3087252 0.1362346 -0.9413129 0.07242041 0.6576129 -0.7498398 0.4271981 -0.03021329 -0.9036226 0.05880916 -0.1280251 0.9900205 0.2596515 0.2867825 0.9221168 0.1767327 0.6199225 -0.7644581 0.01062041 0.5371563 -0.843379 -0.190405 0.3254799 -0.9261452 0.1267433 0.315836 -0.9402753 -0.0363475 -0.07242041 0.996704 -0.01785331 -0.3172399 0.948149 0.1329691 -0.450972 0.8825343 0.1228675 -0.1101718 0.9862667 -0.1890621 0.3534044 -0.9161351 -0.2708823 0.6240425 -0.732902 0.07733386 0.3301187 -0.9407331 0.09155553 0.06067079 -0.9939268 0.1807916 -0.01611375 -0.9833674 0.1584521 0.3425397 -0.9260231 0.2082583 0.1131931 -0.9714957 0.1993468 -0.5541856 -0.8081302 0.05349892 -0.8358104 -0.5463729 0.01178014 -0.8759422 -0.4822535 0.2693869 -0.5798212 -0.7688834 0.03534042 -0.4227424 0.9055452 0.1248817 0.1961424 0.9725639 -0.02331614 0.3859065 0.9222083 -0.1313211 0.6012757 0.7881711 -0.1224707 0.690115 0.7132176 0.01892143 0.5938902 -0.8042848 -0.05685597 -0.217658 0.9743645 -0.01586961 -0.1762749 0.9841914 -2.44148e-4 -0.1224707 0.9924619 0.2435072 -0.5468307 -0.8010193 0.0705893 -0.8790857 -0.4713889 -0.5866573 -0.1279641 -0.7996155 0.1333659 0.1608325 -0.9779046 0.3661 -0.2427137 -0.8983429 0.3642079 -0.2657552 -0.8925749 0.0878933 -0.2143925 -0.9727775 0.2713401 0.2052674 0.9403058 0.07181 0.1620532 0.9841304 -0.09363079 -0.9912106 -0.09320348 -0.2322153 -0.2764672 -0.9325236 0.02533036 0.1235084 0.9920042 0.02380442 0.02130192 0.9994812 -0.1566515 0.7596057 0.6312143 0.008453607 -0.1244239 0.9921873 0.05572676 0.5723136 0.8181097 0.1132541 0.6904508 0.7144383 0.1870479 0.4918668 0.8503067 0.02929776 -0.9989318 0.03555405 -0.6336558 -0.319071 -0.7047029 0.03817862 0.1466719 0.9884335 0.03973507 0.04608291 0.9981384 -0.2211676 0.6871548 0.6920072 -0.07699817 0.1636097 -0.9834895 0.167394 -0.3050325 -0.9374981 0.09002959 0.5533921 0.8279977 0.08493298 -0.1183202 -0.9893186 0.194586 -0.06942957 -0.9783929 0.6044191 0.06619465 -0.7939085 0.5371563 -0.0458998 -0.8421888 -0.03350931 -0.9992981 -0.01513713 -0.2031006 -0.3924375 -0.8970611 -0.2876064 0.7899716 0.5414594 0.1190832 0.6568804 -0.744499 0.02304142 -0.08307135 0.9962462 0.01013213 0.4982757 0.8669393 0.3976562 -0.01492351 -0.9173864 0.6467483 0.1456343 -0.7486495 0.1036409 0.4588458 0.8824427 -0.6310617 -0.5604419 -0.5363018 -0.220954 -0.6022828 -0.7670522 -0.06643879 -0.303415 0.9505295 0.02316349 -0.1065401 0.9940184 0.03674423 -0.385815 0.9218116 0.00451672 0.4018372 0.9156774 0.2889493 0.2307505 0.9291055 0.2623066 0.3218787 0.9096958 0.3048799 0.1622974 0.9384441 -0.6961577 -0.6062502 -0.3844112 0.01928764 -0.5546434 0.831843 0.3774224 0.2937101 -0.8782007 0.4793542 0.2054506 -0.853206 -0.2926115 0.8747521 -0.3861812 -0.1191442 0.9869686 0.1080965 -0.160802 -0.5634938 0.810297 0.002471983 0.9606922 -0.2775353 -0.06320381 0.9734794 0.2197638 -0.09183019 0.9898068 0.1086764 -0.05719166 0.9312418 -0.3598132 -0.008026361 -0.00326544 0.999939 -0.05584883 -0.3063143 0.9502549 0.1378826 0.351146 0.9260842 -0.0773949 -0.1768547 -0.9811701 -0.03274631 -0.157567 -0.9869381 -0.005188107 0.8511918 -0.5247963 0.01287877 0.9957274 -0.09121978 -0.1890621 -0.5960265 0.7803583 0.01895195 0.3246864 0.945616 -0.07202368 -0.6053957 0.7926267 0.6539812 0.5368816 -0.5329142 -2.44148e-4 0.2139042 0.9768365 0.006195247 -0.7266457 0.6869412 0.07492291 -0.5938292 0.8010498 -0.09671312 -0.1611987 -0.9821467 -0.00967431 -0.04635757 0.9988708 -0.08050781 -0.309183 0.9475692 0.2707297 0.1036714 0.9570299 0.457564 0.2468337 -0.8541826 0.4181646 -0.2428663 -0.8752709 0.3923765 -0.02581864 -0.9194312 -0.0839259 -0.8872036 0.4536271 -0.04135257 -0.9108859 0.410535 0.09112823 -0.1454512 -0.9851375 0.1161229 -0.2345957 -0.9651173 0.1996826 -0.5798822 0.789819 0.02221745 0.3302713 0.9436018 0.009826958 0.3552355 0.9346904 -0.1316568 -0.5971252 0.7912229 0.002990782 0.253853 0.9672231 0.1084933 -0.2282479 -0.9675283 0.2240363 0.1650441 0.9604786 0.07043671 0.09405803 0.9930418 -0.09204381 -0.297708 0.9501938 -0.06805628 0.8497574 0.5227516 -0.06292915 0.8384655 0.5412763 0.1302835 0.4788049 0.8681906 0.1544541 0.5049898 0.8491775 0.02600175 0.3226722 0.9461348 0.1429487 0.2690206 0.9524522 0.3156529 0.1524094 0.9365521 0.5456404 -0.05676442 -0.8360546 0.4527726 -0.2829982 -0.8455153 0.2645649 -0.311716 -0.9125645 0.2481154 -0.06491285 -0.9665212 -0.6130253 -0.7896054 -0.02655106 -0.4311044 -0.8547319 0.2889798 -0.4804224 -0.8444777 -0.236671 -0.1704764 0.8071535 0.5651417 0.3369243 -0.1842707 -0.923307 0.1370891 -0.5686514 0.8110294 -0.2615436 -0.8439894 0.4682149 0.02142399 0.2600482 0.965331 -0.18305 0.8048036 0.5645924 -0.1551561 0.9457076 0.2855007 0.07977539 -0.7222511 0.6869717 -0.1468551 -0.7372356 0.659444 0.007965326 0.2645955 -0.9642934 -0.07412946 0.0313425 -0.9967345 0.4902493 0.6342357 -0.5977966 0.3192541 0.6569414 -0.6829738 0.4996796 0.6192816 -0.6056093 0.02768027 0.886227 0.4623859 0.03274631 0.260506 0.9649037 0.03405863 0.3933836 0.9187292 0.4415723 -0.05005031 -0.8958098 0.1332133 -0.5301675 -0.8373364 0.09466838 -0.3415021 -0.9350872 0.4777062 0.03442484 -0.8778344 0.08154541 -0.7287515 -0.6798914 0.4019593 0.4207892 -0.8132267 0.05377358 -0.1045564 0.9930418 0.3054292 0.2586444 -0.9164098 0.1282998 0.2767113 -0.9523301 0.5016633 0.5942869 -0.6285592 0.0869472 -0.3864559 0.9181799 0.00753802 -0.9147008 0.4040346 -0.1363872 -0.8764916 -0.4616535 0.04544204 -0.9432966 -0.3287454 0.6682638 -0.1125217 -0.7353129 0.3856319 0.5221107 -0.7606738 -0.08502453 0.9787896 -0.1861934 0.1749321 0.3955504 -0.9016084 0.3200781 0.03143405 -0.9468368 0.09103667 0.0643025 -0.9937437 0.3658254 0.6120487 -0.7010712 0.4813379 -0.8591266 -0.1737418 0.3608509 -0.9097873 -0.2050538 0.5227211 -0.8422803 -0.1314737 0.5836055 -0.8118839 -0.01443523 0.8030641 -0.5758233 -0.1531724 0.8764611 -0.447615 -0.1771599 0.8520157 -0.5146336 -0.09582811 0.8130741 -0.5792413 -0.05780202 0.7532274 -0.6159245 -0.2307199 0.8497269 -0.4412671 -0.2884304 0.8305307 -0.5018769 -0.2414624 0.8789026 -0.4163945 -0.2325815 0.876278 -0.4279305 -0.2213202 0.7853328 -0.558916 -0.2660909 0.8680074 -0.3552965 -0.3467818 0.882931 -0.4182867 -0.2131413 0.8557695 -0.4889675 -0.1689504 0.8438368 -0.360271 -0.3976256 0.8544267 -0.4589374 -0.2435377 0.8568377 -0.2974029 -0.4211249 0.88287 -0.3890805 -0.2629169 0.9644765 -0.1906796 -0.1827753 0.961974 -0.2399975 -0.1301614 0.9602649 -0.2518388 -0.1199988 0.9827265 -0.109653 -0.1488998 0.9765923 -0.1817377 -0.1149327 0.9717399 -0.2152165 -0.0966826 0.9454939 -0.1228064 -0.3015534 0.7686087 -0.6079592 -0.1989196 0.4827723 -0.8604999 -0.1626331 0.4929044 -0.8603168 -0.1298562 0.6243782 -0.7583544 -0.1870784 0.6598407 -0.7340922 -0.1603137 0.7111423 -0.6994537 -0.0707724 0.6911527 -0.7216101 0.03912472 0.7718131 -0.6306345 -0.0808435 0.7506638 -0.6605731 0.009643793 0.4150212 -0.9072848 -0.06720173 0.5840327 -0.8056887 -0.0984832 0.4790796 -0.8726768 -0.0941801 0.382458 -0.9143956 -0.1325724 0.5364239 -0.7795343 -0.3232825 0.4453261 -0.8525345 -0.2735069 0.9836116 -0.1741386 0.04666274 0.9797968 -0.1862545 -0.07281714 0.9863277 -0.1395916 -0.08749651 0.9929197 -0.1091647 0.04629653 0.9725334 -0.2281258 0.04562515 0.9707938 -0.2364879 -0.04019284 0.3328959 -0.8880887 0.3169347 0.6247444 -0.6872463 0.3705557 0.4064455 -0.7719352 0.4887539 0.1164586 -0.9094821 0.39906 0.07690662 -0.9104892 0.4062319 0.1958678 -0.8548845 0.4803919 -0.01553392 -0.9344462 0.3556932 0.495468 -0.8551897 0.1519211 0.7410809 -0.6599017 0.1235389 0.6010621 -0.787347 0.1369976 0.5775018 -0.8154851 0.03772085 0.5157933 -0.8221076 0.2409131 0.4864345 -0.8672445 0.1058687 0.4149907 -0.9073153 0.06701862 0.5964232 -0.8026368 0.001281738 0.6097598 -0.7838374 0.1173437 0.640553 -0.7531968 -0.1494491 0.6229133 -0.7770928 -0.08981597 0.6059145 -0.7941222 -0.0469985 0.3482467 -0.8043459 0.4813379 0.382458 -0.840907 0.3827937 0.4869228 -0.8480178 0.2091433 0.5018769 -0.854854 0.1315958 0.4280526 -0.8616596 0.2724997 0.475753 -0.8790552 -0.02957242 0.4362926 -0.8994721 -0.02392649 0.4150822 -0.9051485 0.09140288 0.4045534 -0.9144261 0.01037627 0.4928739 -0.8700217 0.008270502 0.477279 -0.8783838 0.02471995 0.3488571 -0.8925749 0.2855922 0.391644 -0.8982208 0.1993468 0.7222816 -0.6587115 -0.2106387 0.6180608 -0.7788629 -0.1064485 0.8031556 -0.4859768 -0.3445234 0.6462905 -0.08145385 -0.7586901 0.7980896 -0.2777795 -0.5346233 0.9966735 -0.06579786 0.04745626 0.9864193 -0.1636707 0.01348912 0.9907224 -0.1321756 -0.03155612 0.9667348 -0.2368541 0.09640794 0.9797052 -0.1831721 0.08099609 0.9911191 -0.1134373 0.06894129 0.9838252 -0.1787774 0.009857475 0.9815363 -0.1828974 -0.05563521 0.9747612 -0.0808435 0.2080447 0.9692068 -0.1986449 0.1452986 0.9709159 -0.2392956 -0.004486203 0.3340861 -0.7970519 0.5030366 0.4659566 -0.6606647 0.5885494 0.3696097 -0.707358 0.6024659 0.8636738 -0.5014191 0.05084383 0.844966 -0.5340129 -0.02896201 0.9342936 -0.3537706 0.04333627 0.9231544 -0.3806574 0.05331581 0.9482712 -0.3167211 0.02047789 0.8908963 -0.4372692 0.1227149 0.253151 -0.8240913 0.5067293 0.2378612 -0.9259011 0.2933439 0.812891 -0.5818659 -0.02505564 0.9111301 -0.410474 0.03631699 0.922544 -0.3668935 0.1194494 0.9502549 -0.2999054 -0.0839259 0.9632557 -0.2682577 -0.01156651 0.4120609 -0.9067965 0.08874779 0.6335642 -0.7734611 -0.01760917 0.6950591 -0.6985687 -0.1697134 0.858211 -0.4817652 -0.1769768 0.8181707 -0.09967344 -0.5662099 0.8787195 -0.3102207 -0.3627735 0.9400006 -0.08478039 -0.3303629 0.802881 -0.3376263 -0.4912564 0.6138798 -0.07406842 -0.7858821 0.6987518 -0.1144139 -0.7061068 0.6673178 -0.08175909 -0.740257 0.7740715 -0.2048402 -0.5989868 0.7966857 0.03698843 -0.6032289 0.6811426 -0.07187104 -0.7285684 0.7817621 -0.1778618 -0.5976135 0.8860744 -0.03369241 -0.4622943 0.05890071 0.02615433 0.9978942 0.00213629 0.5372784 0.843379 0.08877831 0.6496475 0.7549974 0.2514114 0.2838832 0.9252907 0.04940944 -0.9886776 0.1415143 0.04879909 0.9896848 -0.1345561 0.8428602 0.5373699 -0.0278939 0.7484664 0.6348766 0.1915646 -0.005035519 0.9227271 0.3853267 0.724601 0.2299569 -0.6496475 0.7322001 0.4506668 -0.5106052 0.09518718 -0.6285287 0.7719047 0.1020539 -0.3167516 0.9429914 0.3440657 -0.249794 0.9050874 0.3267617 -0.4991302 0.8025147 0.65038 -0.4481338 -0.6133 0.6708884 -0.2425001 -0.700766 0.4714499 -0.7247231 0.5024567 0.4365673 -0.8649556 0.2474135 0.07055878 -0.854915 0.5139012 0.07473981 0.848384 -0.5240638 0.6551103 0.6593219 -0.3689078 0.7599414 -0.006469905 -0.6499222 0.5714286 -0.8073672 -0.1468551 0.5751518 -0.6843165 -0.4481948 0.454268 -0.8906827 0.01696825 0.2279122 -0.9675588 0.1089205 0.5633106 -0.821192 -0.09097564 0.4619587 -0.8629414 -0.2047181 0.530076 -0.8463698 -0.05142366 0.1295511 -0.9601734 -0.2474746 0.6701254 -0.7169103 -0.1921445 0.5342876 -0.6765953 -0.5066683 0.5007172 -0.7666555 -0.4018372 0.2705466 -0.2472609 -0.9303873 -0.3736686 -0.1108737 -0.920896 0.2063966 0.8602252 -0.4662312 0.9238868 -0.3525498 -0.1486862 0.6635945 -0.7480697 -0.004364132 0.6159551 -0.7876522 0.01330602 0.4155095 -0.9095737 0.004547238 0.04544204 -0.2970061 -0.9537644 0.06823939 -0.01690721 -0.9974975 0.9354839 -0.2154607 0.2800073 -0.4369029 -0.3515427 -0.8279367 0.3024384 -0.4245735 0.8533586 0.5633412 -0.132847 0.8154546 0.1018097 0.1600695 0.981811 1.22074e-4 -0.05767995 0.9983215 0.5493026 0.1494491 0.8221381 0.3787958 -0.5842769 -0.7177038 0.1837214 -0.6895352 -0.7005219 0.5415509 -0.6697592 0.5080111 0.5361492 -0.4844813 0.6912137 -0.06134217 -0.6567583 0.7515794 0.2423169 -0.7142247 -0.6565752 -0.1157567 -0.3068941 -0.94467 0.4456313 -0.8824732 -0.1503036 0.4811243 -0.8114261 -0.3317362 -0.006439387 -0.1801202 -0.9836116 0.1279031 -0.5486007 -0.8262276 -0.08081299 -0.1101413 -0.9906003 0.282815 -0.8164922 -0.5033113 0.3145238 -0.8413038 -0.4395581 0.2999969 -0.7660146 -0.5684988 -0.3145848 0.3013398 -0.9001129 -0.4293954 0.3606067 -0.8279672 0.1251258 -0.4609516 -0.8785364 -0.0869472 -0.1271706 -0.9880368 -0.3615833 -0.03244113 -0.9317606 -0.252327 -0.4264046 -0.8685873 0.3927427 -0.9169591 -0.07000946 0.5684988 -0.8222602 0.02539139 -0.1434065 0.14185 -0.9794305 -0.117191 -0.5936766 -0.7961059 0.7447432 -0.5752434 0.3382672 0.7026582 -0.4117252 0.5802484 0.8329722 -0.553148 -0.01318395 0.9689627 -0.2434766 0.04223757 0.8826869 -0.2791528 0.3779717 0.7986084 -0.4122745 0.4384289 0.603412 -0.793115 -0.08261358 0.4144719 -0.902707 -0.1153294 0.6591387 -0.7426984 0.1178625 0.7279275 -0.6829432 0.06064027 0.8720054 -0.4882962 0.03326517 0.858211 -0.3590808 -0.3667104 0.2948393 -0.5702078 -0.7667471 0.3931394 -0.6462905 -0.6539812 -0.07910394 -0.8846706 -0.4593951 -0.07699817 -0.760033 -0.6452528 0.3171789 -0.8738975 -0.3682973 0.3172094 -0.5873287 -0.7445601 0.653676 -0.6902371 -0.3101596 0.2749718 -0.9592883 -0.06396675 0.3956114 -0.3755303 -0.8380993 0.2798547 -0.05685597 -0.9583423 -0.1852778 0.3582568 -0.9150364 0.4745934 0.1684011 -0.863918 0.32078 0.127079 -0.9385663 0.1461226 -0.4925382 -0.8579058 0.6792505 -0.3490402 -0.6455581 0.7673879 -0.5380413 0.3486739 0.02792441 -0.3178502 -0.9477218 0.9014863 -0.3099154 -0.3020417 0.6212958 -0.7722709 -0.1325418 0.4062929 -0.9054842 -0.1224707 0.2897732 -0.8546709 -0.4307077 0.4289681 -0.9015168 -0.05645924 0.7547227 -0.3889889 0.5282449 -0.1391034 0.118839 -0.9830927 -0.06311225 -0.9772942 -0.2022461 0.5718864 -0.5197302 -0.6346324 0.7148045 -0.4282968 -0.5527818 -0.09595018 -0.7413251 0.6642048 -0.3005158 -0.7315592 0.6119266 0.3766289 -0.5665151 0.732902 0.3584704 -0.6827906 0.6365856 0.2098758 -0.5059664 0.8366039 0.07742542 -0.7031159 0.7068392 0.2292245 -0.6120487 0.7568285 0.1105685 -0.8586993 0.5003815 0.377575 -0.7866451 0.4884487 -0.2855312 -0.7034822 0.6508072 -0.2885525 -0.8215278 0.4917142 -0.2487564 -0.7341228 0.6317942 -0.3744316 -0.7325053 0.5684988 -0.2881252 -0.6852016 0.6689047 0.1578417 -0.8545488 0.4947355 0.1645253 -0.9179663 0.3608509 -0.1133457 -0.8515275 0.511887 0.02725303 -0.8681906 0.4954375 -0.280282 -0.6035646 0.7463912 -0.09756767 -0.8957183 0.4336985 -0.1853083 -0.7823725 0.5945921 -0.1544236 -0.7665944 0.6232795 -0.191412 -0.7544786 0.6277657 0.08801537 -0.8836939 0.4596393 0.0390942 -0.4640034 0.8849452 0.1239356 -0.4862819 0.8649556 0.002563536 -0.8979461 0.4400464 0.2409436 -0.24897 0.9380474 -0.1290627 -0.2354198 0.9632557 -0.4378491 -0.06762897 0.8964812 -0.2007812 -0.4377575 0.8763695 0.2255012 -0.8988617 0.3757134 0.1066011 -0.521012 0.8468582 0.08865624 -0.4509415 0.8881192 0.05362099 0.7870724 0.6144902 0.2012085 0.7160558 0.6683554 0.3375958 0.02331614 0.9409772 0.3016144 0.4805139 0.8234505 -0.02035582 0.8060549 0.5914487 0.1873226 -0.872219 0.451735 0 -0.872097 0.4892727 0 -0.9264199 0.3764153 0.1445661 -0.9264199 0.3475753 -0.3480026 -0.9265419 0.142735 -0.3759575 -0.926603 -0.001403808 -0.4334239 -0.9011811 -0.002838194 -0.3995178 -0.9021577 0.1625721 -0.1850642 -0.8750267 -0.4472793 0 -0.8751183 -0.4838709 0 -0.926725 -0.3757134 -0.1433454 -0.926664 -0.3474227 -0.3071688 -0.9014863 0.3048799 -0.4024781 -0.9005097 0.1644337 -0.2671896 -0.9572741 0.1103244 -0.2040773 -0.9576098 0.2031617 0.3455916 -0.8725852 0.3451338 0.2668233 -0.9264504 0.2654195 -0.3424177 -0.8747215 -0.3429059 -0.2650532 -0.926664 -0.2664876 0 -0.9039888 0.4274728 0.1648915 -0.9036531 0.3951842 -0.1664479 -0.9013947 0.3996704 -0.111301 -0.9572436 0.2669454 0.4954985 -0.7133396 0.495529 0.2681661 -0.7133396 0.6474502 -0.495468 -0.7133702 -0.495529 -0.2681356 -0.7133396 -0.6474502 0.3049104 -0.9031648 0.3021027 0 -0.9019441 0.4318369 0 -0.9575487 0.2881863 0.5860775 0.4276254 0.6881924 0.3454085 0.4574419 0.8193915 0.3480636 -0.9265114 0.1427655 0.3995483 -0.9021577 0.1626026 0.1664479 -0.9013947 0.3996704 0.1111789 -0.957091 0.2675558 -0.174047 -0.9806513 0.0894497 -0.134495 -0.98175 0.134373 0.3759575 -0.926603 -0.001373291 0.4334239 -0.9011505 -0.002838194 0.3071383 -0.9014863 0.3048189 0.2045961 -0.9573656 0.2038636 0 -0.7133396 0.7007966 0.4024476 -0.9005402 0.1644337 0.2686849 -0.9567858 0.1110263 0.4016846 -0.8999603 -0.1692556 0.435194 -0.900296 -0.002227842 0.4033021 -0.8992584 -0.1692556 -0.7837153 0.5530564 0.2826014 -0.8132267 0.5782647 -0.06518751 -0.700766 -0.7133396 0 -0.6474196 -0.7133396 0.2681661 0.9249245 0.04214602 -0.3777581 0.9906003 0.1276284 0.04907375 0.7007966 -0.7133396 0 0.6474196 -0.7133396 -0.2681661 0.3080233 -0.8990753 -0.3110446 0.3082675 -0.8991363 -0.3105869 -0.08914452 -0.9805597 0.1747184 -0.4864956 -0.8736534 -4.27259e-4 -0.4505752 -0.8730735 0.1861934 0.4865261 -0.8736534 -4.27259e-4 0.4483474 -0.8742333 -0.1861629 0.1670583 -0.8983123 -0.4062929 0.1672414 -0.8983734 -0.4061098 0.2702719 -0.9561449 -0.1127964 0.2905057 -0.9568468 -1.52593e-4 0.1928159 -0.9812006 0.005493283 0.1831721 -0.9790338 -0.08902245 0.8497574 0.302591 0.4316233 0.6474502 -0.7133396 0.2681661 -0.8524125 0.04977566 -0.5204626 -0.6942045 0.1598559 -0.7017731 -0.6474196 -0.7133702 -0.2681661 0.3466902 -0.926664 -0.1450545 0 -0.8982208 -0.4394971 0 -0.898648 -0.438612 -0.4352245 -0.900296 -0.002227842 -0.2890103 -0.9573046 -2.1363e-4 0.2063051 -0.9562975 -0.2071291 0.144261 -0.9789117 -0.1444135 0.4506058 -0.8730735 0.1861934 -0.3455611 -0.8725852 0.3451338 -0.2667928 -0.9264809 0.265389 -0.4483474 -0.8742333 -0.1861629 0.3424177 -0.874691 -0.3429059 0.2650227 -0.926664 -0.2664876 -0.1670888 -0.8983123 -0.4063234 -0.1672414 -0.8983734 -0.4061098 0.1119724 -0.9560228 -0.2709738 0.08960235 -0.9786676 -0.184759 0.6948149 0.05990779 -0.7166662 0.4954985 -0.7133702 -0.495529 -0.4954985 -0.7133396 0.495529 -0.3467208 -0.926664 -0.145085 -0.3080843 -0.8990448 -0.3111057 -0.308298 -0.8991363 -0.3105869 -1.83111e-4 -0.9564196 -0.2919095 -6.1037e-5 -0.9799494 -0.1991027 0.3471175 0.1193274 -0.9301736 0.2681356 -0.7133396 -0.6474502 -0.6053957 0.5357219 0.58858 -0.4016846 -0.8999603 -0.1692861 -0.4033021 -0.8992584 -0.1692556 -0.1119724 -0.956328 -0.2699057 -0.09036529 -0.9787591 -0.1839045 0.001861572 -0.981811 0.1897641 -0.2054201 -0.9567248 -0.206061 -0.1446577 -0.9789117 -0.1441389 -0.1445661 -0.9264199 0.3475753 -0.1648915 -0.9036836 0.3951537 -0.2684713 -0.9567248 -0.1119724 -0.1828669 -0.9791864 -0.08767968 -0.1933042 -0.981109 0.004913449 -0.3048494 -0.9031953 0.3021027 0.1293374 -0.9915159 0.01174962 0.1084017 -0.9882809 -0.1073641 -0.1074861 -0.9886471 -0.1047395 -0.1248207 -0.9920957 0.01019316 -0.3580431 0.5134129 0.7798395 -0.2681661 -0.7133396 0.6474196 0.00213629 -0.9918211 -0.1275063 -0.1873226 -0.872219 0.451735 0.1850947 -0.8750267 -0.4472793 0.08899194 -0.981048 0.1720023 0.1433454 -0.926664 -0.3474227 0.1309549 -0.9826655 0.1309854 0 -0.7133396 -0.7007966 0.1720328 -0.9809259 0.09027373 0.009460687 -0.9998779 0.01165807 -0.04000973 0.4833521 0.8744774 -0.006561458 0.1698049 -0.9854427 0.00451672 -0.9918211 0.1273232 0.1056246 -0.9886166 0.1068453 -0.3722037 0.17481 -0.9115269 -0.1037019 -0.9888607 0.1066927 0.1664479 -0.9013947 0.3996704 0.111301 -0.9572436 0.2669454 0.2040773 -0.9576098 0.2031617 0.3071688 -0.9014863 0.3048799 0.3759575 -0.926603 -0.001403808 0.4334239 -0.9011811 -0.002838194 0.4016846 -0.8999603 -0.1692861 0.3467208 -0.926664 -0.145085 -0.2905057 -0.9568468 -1.52593e-4 -0.1928159 -0.9812006 0.005493283 -0.1720328 -0.9809259 0.09027373 -0.2686849 -0.9567858 0.1110263 0.134495 -0.98175 0.134373 0.174047 -0.9806513 0.0894497 0.2671896 -0.9572741 0.1103244 -0.009460687 -0.9998779 0.01165807 -0.00451672 -0.9918211 0.1273232 -0.1056246 -0.9886166 0.1068453 -0.1293374 -0.9915159 0.01174962 0.4024781 -0.9005097 0.1644337 -0.2702719 -0.9561449 -0.1127964 -0.1831721 -0.9790338 -0.08902245 -0.1670583 -0.8983123 -0.4062929 -0.1672414 -0.8983734 -0.4061098 -0.3082675 -0.8991363 -0.3105869 -0.3080233 -0.8990753 -0.3110446 -0.00213629 -0.9918211 -0.1275063 0.1074861 -0.9886471 -0.1047395 0.1248207 -0.9920957 0.01019316 0.3080843 -0.8990448 -0.3111057 0.2650532 -0.926664 -0.2664876 -0.9713126 0.1962035 0.1341288 -0.7007966 -0.7133396 0 -0.6474502 -0.7133396 0.2681661 -0.803766 0.4101077 0.4309824 -0.1084017 -0.9882809 -0.1073641 0.2890103 -0.9573046 -2.1363e-4 0.4352245 -0.900296 -0.002227842 0.1670888 -0.8983123 -0.4063234 0.1433454 -0.926664 -0.3474227 -0.08899194 -0.981048 0.1720023 -0.001861572 -0.981811 0.1897641 0.2684713 -0.9567248 -0.1119724 0.4033021 -0.8992584 -0.1692556 0 -0.8982208 -0.4394971 0 -0.926725 -0.3757134 0.6053957 0.5357219 0.58858 0.4954985 -0.7133396 0.495529 0.6474196 -0.7133396 0.2681661 0.7856075 0.5538805 0.2757042 -0.1309549 -0.9826655 0.1309854 0.2054201 -0.9567248 -0.206061 0.308298 -0.8991363 -0.3105869 0.3455611 -0.8725852 0.3451338 0.4505752 -0.8730735 0.1861934 -0.4033021 -0.8992584 -0.1692556 -0.435194 -0.900296 -0.002227842 0.1119724 -0.956328 -0.2699057 0.1672414 -0.8983734 -0.4061098 -0.1433454 -0.926664 -0.3474227 -0.2650227 -0.926664 -0.2664876 0.0109561 0.1721854 -0.9849849 0 -0.7133396 -0.7007966 -0.2681356 -0.7133396 -0.6474502 -0.364452 0.1406292 -0.9204993 0.2667928 -0.9264809 0.265389 0.3480026 -0.9265419 0.142735 -0.4506058 -0.8730735 0.1861934 -0.3455916 -0.8725852 0.3451338 -0.4954985 -0.7133396 0.495529 1.83111e-4 -0.9564196 -0.2919095 0 -0.898648 -0.438612 -0.1111789 -0.957091 0.2675558 0 -0.9575487 0.2881863 -0.08960235 -0.9786676 -0.184759 -0.144261 -0.9789117 -0.1444135 -0.3466902 -0.926664 -0.1450545 -0.4016846 -0.8999603 -0.1692556 -0.4334239 -0.9011505 -0.002838194 -0.3759575 -0.926603 -0.001373291 -0.1119724 -0.9560228 -0.2709738 0 -0.8751183 -0.4838709 -0.1850947 -0.8750267 -0.4472793 0.4864956 -0.8736534 -4.27259e-4 0.700766 -0.7133396 0 6.1037e-5 -0.9799494 -0.1991027 -0.2063051 -0.9562975 -0.2071291 -0.4024476 -0.9005402 0.1644337 -0.3995483 -0.9021577 0.1626026 -0.3424177 -0.874691 -0.3429059 0.8248543 0.5442061 -0.1529282 -0.3071383 -0.9014863 0.3048189 -0.3049104 -0.9031648 0.3021027 -0.1664479 -0.9013947 0.3996704 -0.1648915 -0.9036531 0.3951842 -0.4954985 -0.7133702 -0.495529 -0.6796167 0.07708972 -0.7294839 0 -0.9019441 0.4318369 0 -0.9039888 0.4274728 -0.3480636 -0.9265114 0.1427655 -0.2668233 -0.9264504 0.2654195 -0.2045961 -0.9573656 0.2038636 -0.4865261 -0.8736534 -4.27259e-4 -0.5927 0.4854274 0.6426588 -0.1873226 -0.872219 0.451735 -0.2681661 -0.7133396 0.6474502 0.1648915 -0.9036836 0.3951537 0.3048494 -0.9031953 0.3021027 -0.1445661 -0.9264199 0.3475753 -0.3304849 0.5040437 0.797937 0 -0.7133396 0.7007966 0 -0.872097 0.4892727 0.1873226 -0.872219 0.451735 0.2681661 -0.7133396 0.6474196 0.4483474 -0.8742333 -0.1861629 0.6474196 -0.7133702 -0.2681661 0.3424177 -0.8747215 -0.3429059 0.495468 -0.7133702 -0.495529 0.1850642 -0.8750267 -0.4472793 0.2681356 -0.7133396 -0.6474502 0.08914452 -0.9805597 0.1747184 0.90759 0.1695913 -0.3840449 -0.6474196 -0.7133396 -0.2681661 -0.4483474 -0.8742333 -0.1861629 0.3995178 -0.9021577 0.1625721 0.1445661 -0.9264199 0.3475753 0 -0.9264199 0.3764153 -0.9251686 0.04144412 -0.3772393 0.1933042 -0.981109 0.004913449 0.1828669 -0.9791864 -0.08767968 0.1446577 -0.9789117 -0.1441389 0.6984161 0.1564073 -0.6983551 0.09036529 -0.9787591 -0.1839045 0.01461833 0.509476 0.8603168 0.3389996 0.5238502 0.7814264 0.1037019 -0.9888607 0.1066927 0.3633839 0.1807001 -0.9139073 -0.1200903 -0.9016999 0.4152958 0.1404461 0.6815699 0.7181006 -0.001464843 0.8789941 0.4767907 0.01062041 0.7453231 0.6665548 -0.4615314 0.4068117 0.7882931 -0.1309854 0.6563616 0.7429731 0.4925077 0.403119 0.7712638 0.1696829 0.3104038 0.9353008 -0.8001038 0.1309244 0.5853756 -0.1514328 0.3124485 0.9377728 0.7018952 0.4248176 0.5716727 -0.0661031 -0.8441115 0.5320292 0.1251258 -0.8538163 0.505295 0.1353496 -0.9244972 0.3563036 0.04553359 -0.8557085 0.5154271 -0.1373028 -0.9226966 0.3601794 -0.1253395 -0.8536943 0.5054171 0.06653034 -0.8439894 0.5321817 -0.04516738 -0.8558306 0.515244 0.2806177 -0.6700339 0.6872158 0.09930723 -0.7085177 0.6986297 -0.09436321 -0.7930845 0.6017335 -0.2808313 -0.6657308 0.6913053 2.1363e-4 -0.8308359 0.556505 2.74667e-4 -0.8308359 0.556505 0.1785333 -0.7219459 0.6684774 -0.5989563 0.5526292 0.579455 0.5525071 0.7461165 0.3714713 -0.1800897 -0.7242653 0.6655782 -0.0241096 -0.7564013 0.6536455 -0.8552202 -0.1799677 0.4859768 0.4155095 0.6235237 -0.6622211 -0.2450026 0.5566881 -0.7937254 -0.03457742 -0.4936369 0.8689535 -0.7541429 -0.28605 0.5910825 0.295053 0.908414 -0.2961211 -0.1045564 0.5861385 0.8034303 0.0563066 -0.0961638 0.9937437 -0.7990356 -0.06204408 0.5980407 0.09945982 -0.04242068 0.9941099 -0.05584883 -0.07950067 0.9952391 -0.8806421 -0.1046785 -0.4620502 -0.1468551 -0.7747734 -0.6149175 0.68099 -0.6320078 -0.3698233 0.8209174 -0.1209143 -0.5580615 -0.9922483 0.1230811 -0.01690721 -0.9181494 0.3317057 0.2166509 0.9904477 0.07940912 -0.1126438 0.9512314 0.3079317 0.01718187 -0.760857 0.631489 0.1492965 0.8150578 0.5780511 0.03900265 -0.6483657 0.7326579 0.2068849 0.7458114 0.6600849 0.08929711 -0.6154973 0.781579 0.1013519 0.6047853 0.7904905 0.09640794 -0.3057649 -0.8726768 0.3806879 0.4291818 -0.8654134 0.2584918 9.15555e-4 -0.9140294 0.405591 0.06839197 0.5435957 0.8365429 -0.002502501 0.5148473 0.8572344 -0.01577806 0.516892 0.8558611 0.4833827 0.3425703 0.8055666 -0.03540146 0.1983093 0.9794915 0.1354717 -0.6722007 0.727836 -0.1520127 -0.3768121 0.9136937 0.1484725 -0.420484 0.8950468 -0.1252785 -0.6695761 0.7320475 -0.02435374 -0.5133824 0.8577837 0.1841792 -0.476455 0.8596759 -0.1417585 -0.5091403 0.8489029 0.1810663 -0.4701071 0.8637959 -0.147618 -0.3762627 0.9146397 0.3534654 -0.3555101 0.8652303 0.9451277 0.1163671 0.3051546 -0.1682791 -0.04736471 0.9845882 0.6664937 0.002349913 0.7454757 0.6062807 0.4650716 0.6450392 -0.4534135 0.333781 0.8264107 -0.4761498 -0.05465865 0.8776513 0.6353343 -0.3344218 0.6960356 -0.4928434 -0.3004547 0.8165532 0.5101779 -0.5617848 0.6511734 -0.4133121 -0.5202185 0.7473068 0.3669241 -0.6911832 0.6225471 -0.3374127 -0.6547441 0.6762902 0.3612781 -0.765923 0.531785 -0.3598437 -0.7522507 0.5518968 0.3881039 -0.7932066 0.4691916 -0.3760491 -0.797235 0.4721518 0.1416364 0.9285867 0.3429975 -0.164861 0.8791467 0.4470962 -0.01361125 0.9650258 0.2617878</float_array> + <technique_common> + <accessor source="#_6-mesh-normals-array" count="7845" stride="3"> + <param name="X" type="float"/> + <param name="Y" type="float"/> + <param name="Z" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6-mesh-map-0"> + <float_array id="_6-mesh-map-0-array" count="63146">0.5721 0.8385 0.5482 0.8425 0.5452 0.7998 0.5693 0.7986 0.462 0.8824 0.4589 0.9251 0.435 0.921 0.4379 0.8812 0.5702 0.7524 0.5693 0.7986 0.5452 0.7998 0.5444 0.7522 0.462 0.8824 0.4379 0.8812 0.4371 0.8349 0.4628 0.8347 0.5716 0.7071 0.5702 0.7524 0.5444 0.7522 0.5452 0.7064 0.4628 0.8347 0.4371 0.8349 0.4358 0.7896 0.4622 0.789 0.5733 0.6605 0.5716 0.7071 0.5452 0.7064 0.5466 0.6597 0.4622 0.789 0.4358 0.7896 0.4342 0.743 0.4608 0.7423 0.575 0.6143 0.5733 0.6605 0.5466 0.6597 0.5481 0.6132 0.4608 0.7423 0.4342 0.743 0.4325 0.6968 0.4595 0.6958 0.5771 0.5705 0.575 0.6143 0.5481 0.6132 0.5521 0.5679 0.4595 0.6958 0.4325 0.6968 0.4305 0.6531 0.4556 0.6505 0.5823 0.5301 0.5771 0.5705 0.5521 0.5679 0.5601 0.526 0.4556 0.6505 0.4305 0.6531 0.4254 0.6126 0.4476 0.6086 0.5721 0.8385 0.5844 0.8858 0.5618 0.8921 0.5482 0.8425 0.4452 0.9747 0.4226 0.9683 0.435 0.921 0.4589 0.9251 0.9812 0.3369 0.946 0.369 0.9283 0.3409 0.9749 0.3194 0.5417 0.3409 0.5239 0.369 0.4887 0.3368 0.495 0.3194 0.04699999 0.4125 0.005999982 0.3751 0.01709997 0.36 0.06339997 0.3888 0.4666 0.3601 0.4778 0.3751 0.4367 0.4126 0.4203 0.3888 0.05559998 0.5236 0.05619996 0.4733 0.09369999 0.4926 0.1118 0.5316 0.39 0.4926 0.4276 0.4733 0.4281 0.5236 0.372 0.5316 0.05429995 0.5715 0.05559998 0.5236 0.1118 0.5316 0.09079998 0.5667 0.372 0.5316 0.4281 0.5236 0.4294 0.5715 0.3929 0.5667 0.9128 0.4596 0.9095 0.5007 0.8736 0.502 0.8711 0.4643 0.5963 0.502 0.5604 0.5007 0.5571 0.4595 0.5988 0.4643 0.9237 0.4185 0.9128 0.4596 0.8711 0.4643 0.8641 0.434 0.5988 0.4643 0.5571 0.4595 0.5462 0.4185 0.6058 0.434 0.9237 0.4185 0.8641 0.434 0.8468 0.4132 0.8957 0.3924 0.6231 0.4132 0.6058 0.434 0.5462 0.4185 0.5742 0.3924 0.946 0.369 0.9237 0.4185 0.8957 0.3924 0.9283 0.3409 0.5742 0.3924 0.5462 0.4185 0.5239 0.369 0.5417 0.3409 0.09369999 0.4926 0.05619996 0.4733 0.0758 0.4277 0.1097 0.4479 0.4079 0.4277 0.4276 0.4733 0.39 0.4926 0.374 0.448 0.05619996 0.4733 0.04699999 0.4125 0.06339997 0.3888 0.0758 0.4277 0.4203 0.3888 0.4367 0.4126 0.4276 0.4733 0.4079 0.4277 0.8957 0.3924 0.8468 0.4132 0.8205 0.401 0.8622 0.3647 0.6495 0.401 0.6231 0.4132 0.5742 0.3924 0.6077 0.3647 0.7674 0.3388 0.7644 0.3783 0.735 0.3565 0.735 0.3298 0.735 0.3565 0.7055 0.3783 0.7025 0.3388 0.735 0.3298 0.06339997 0.3888 0.01709997 0.36 0.01679998 0.3252 0.07139998 0.3456 0.4669 0.3253 0.4666 0.3601 0.4203 0.3888 0.4123 0.3457 0.9749 0.3194 0.9283 0.3409 0.9041 0.3167 0.9532 0.2944 0.5658 0.3167 0.5417 0.3409 0.495 0.3194 0.5167 0.2943 0.9532 0.2944 0.9041 0.3167 0.8946 0.287 0.9439 0.2685 0.5753 0.287 0.5658 0.3167 0.5167 0.2943 0.526 0.2685 0.07139998 0.3456 0.01679998 0.3252 0.02169996 0.2968 0.08219999 0.3071 0.4621 0.2969 0.4669 0.3253 0.4123 0.3457 0.4015 0.3071 0.925 0.1945 0.8716 0.2168 0.887 0.1604 0.9301 0.1462 0.583 0.1604 0.5983 0.2168 0.5449 0.1944 0.5399 0.1462 0.09789997 0.2326 0.03569996 0.2193 0.05679994 0.1734 0.112 0.179 0.427 0.1734 0.4481 0.2193 0.3859 0.2326 0.3718 0.179 0.9283 0.3409 0.8957 0.3924 0.8622 0.3647 0.9041 0.3167 0.6077 0.3647 0.5742 0.3924 0.5417 0.3409 0.5658 0.3167 0.7674 0.3388 0.735 0.3298 0.735 0.293 0.7591 0.302 0.735 0.293 0.735 0.3298 0.7025 0.3388 0.7109 0.302 0.8622 0.3647 0.8373 0.3095 0.8946 0.287 0.9041 0.3167 0.5753 0.287 0.6327 0.3095 0.6077 0.3647 0.5658 0.3167 0.7591 0.302 0.735 0.293 0.735 0.2585 0.7501 0.2598 0.735 0.2585 0.735 0.293 0.7109 0.302 0.7199 0.2598 0.7501 0.2598 0.735 0.2585 0.735 0.2182 0.7618 0.2154 0.735 0.2182 0.735 0.2585 0.7199 0.2598 0.7081 0.2154 0.7618 0.2154 0.735 0.2182 0.735 0.1718 0.7603 0.1680999 0.735 0.1718 0.735 0.2182 0.7081 0.2154 0.7096 0.1680999 0.8716 0.2168 0.8283 0.212 0.8296 0.1644999 0.887 0.1604 0.6404 0.1644999 0.6417 0.212 0.5983 0.2168 0.583 0.1604 0.02169996 0.2968 0.03119999 0.2578 0.09209996 0.2701 0.08219999 0.3071 0.3916 0.2701 0.4526 0.2578 0.4621 0.2969 0.4015 0.3071 0.03119999 0.2578 0.03569996 0.2193 0.09789997 0.2326 0.09209996 0.2701 0.3859 0.2326 0.4481 0.2193 0.4526 0.2578 0.3916 0.2701 0.8946 0.287 0.8847 0.2522 0.9354 0.2301 0.9439 0.2685 0.5346 0.2301 0.5852 0.2522 0.5753 0.287 0.526 0.2685 0.8847 0.2522 0.8716 0.2168 0.925 0.1945 0.9354 0.2301 0.5449 0.1944 0.5983 0.2168 0.5852 0.2522 0.5346 0.2301 0.8946 0.287 0.8373 0.3095 0.8363 0.2648 0.8847 0.2522 0.6337 0.2648 0.6327 0.3095 0.5753 0.287 0.5852 0.2522 0.8363 0.2648 0.8283 0.212 0.8716 0.2168 0.8847 0.2522 0.5983 0.2168 0.6417 0.212 0.6337 0.2648 0.5852 0.2522 0.8205 0.401 0.792 0.3962 0.7971 0.3554 0.8622 0.3647 0.6728 0.3554 0.6779 0.3962 0.6495 0.401 0.6077 0.3647 0.792 0.3962 0.7644 0.3783 0.7674 0.3388 0.7971 0.3554 0.7025 0.3388 0.7055 0.3783 0.6779 0.3962 0.6728 0.3554 0.8622 0.3647 0.7971 0.3554 0.7893 0.3076 0.8373 0.3095 0.6806 0.3076 0.6728 0.3554 0.6077 0.3647 0.6327 0.3095 0.7971 0.3554 0.7674 0.3388 0.7591 0.302 0.7893 0.3076 0.7109 0.302 0.7025 0.3388 0.6728 0.3554 0.6806 0.3076 0.8373 0.3095 0.7893 0.3076 0.7872 0.26 0.8363 0.2648 0.6827 0.26 0.6806 0.3076 0.6327 0.3095 0.6337 0.2648 0.7893 0.3076 0.7591 0.302 0.7501 0.2598 0.7872 0.26 0.7199 0.2598 0.7109 0.302 0.6806 0.3076 0.6827 0.26 0.8363 0.2648 0.7872 0.26 0.7936 0.2164 0.8283 0.212 0.6763 0.2164 0.6827 0.26 0.6337 0.2648 0.6417 0.212 0.7872 0.26 0.7501 0.2598 0.7618 0.2154 0.7936 0.2164 0.7081 0.2154 0.7199 0.2598 0.6827 0.26 0.6763 0.2164 0.8283 0.212 0.7936 0.2164 0.7921 0.1687999 0.8296 0.1644999 0.6778 0.1687999 0.6763 0.2164 0.6417 0.212 0.6404 0.1644999 0.7936 0.2164 0.7618 0.2154 0.7603 0.1680999 0.7921 0.1687999 0.7096 0.1680999 0.7081 0.2154 0.6763 0.2164 0.6778 0.1687999 0.09209996 0.2701 0.09789997 0.2326 0.1402 0.2394 0.1385 0.2778 0.3436 0.2394 0.3859 0.2326 0.3916 0.2701 0.3452 0.2778 0.08219999 0.3071 0.09209996 0.2701 0.1385 0.2778 0.1299999 0.3153 0.3452 0.2778 0.3916 0.2701 0.4015 0.3071 0.3537 0.3153 0.09789997 0.2326 0.112 0.179 0.1466 0.1847 0.1402 0.2394 0.3372 0.1847 0.3718 0.179 0.3859 0.2326 0.3436 0.2394 0.07139998 0.3456 0.08219999 0.3071 0.1299999 0.3153 0.1241 0.3539 0.3537 0.3153 0.4015 0.3071 0.4123 0.3457 0.3597 0.354 0.06339997 0.3888 0.07139998 0.3456 0.1241 0.3539 0.1184 0.3995 0.3597 0.354 0.4123 0.3457 0.4203 0.3888 0.3653 0.3995 0.06339997 0.3888 0.1184 0.3995 0.1097 0.4479 0.0758 0.4277 0.374 0.448 0.3653 0.3995 0.4203 0.3888 0.4079 0.4277 0.1097 0.4479 0.1184 0.3995 0.1543 0.393 0.1444 0.4371 0.3294 0.393 0.3653 0.3995 0.374 0.448 0.3393 0.4371 0.1184 0.3995 0.1241 0.3539 0.1614 0.3472 0.1543 0.393 0.3223 0.3473 0.3597 0.354 0.3653 0.3995 0.3294 0.393 0.1241 0.3539 0.1299999 0.3153 0.1588 0.3059 0.1614 0.3472 0.325 0.306 0.3537 0.3153 0.3597 0.354 0.3223 0.3473 0.1402 0.2394 0.1466 0.1847 0.1843 0.1805 0.1791999 0.2358 0.2994 0.1805 0.3372 0.1847 0.3436 0.2394 0.3046 0.2358 0.1299999 0.3153 0.1385 0.2778 0.1675 0.2685 0.1588 0.3059 0.3162 0.2685 0.3452 0.2778 0.3537 0.3153 0.325 0.306 0.1385 0.2778 0.1402 0.2394 0.1791999 0.2358 0.1675 0.2685 0.3046 0.2358 0.3436 0.2394 0.3452 0.2778 0.3162 0.2685 0.09369999 0.4926 0.1097 0.4479 0.1444 0.4371 0.1345 0.4852 0.3393 0.4371 0.374 0.448 0.39 0.4926 0.3493 0.4852 0.1675 0.2685 0.1791999 0.2358 0.208 0.2305999 0.2098 0.263 0.2758 0.2305999 0.3046 0.2358 0.3162 0.2685 0.274 0.263 0.1588 0.3059 0.1675 0.2685 0.2098 0.263 0.207 0.3034 0.274 0.263 0.3162 0.2685 0.325 0.306 0.2767 0.3034 0.1791999 0.2358 0.1843 0.1805 0.2142 0.1748999 0.208 0.2305999 0.2696 0.1748999 0.2994 0.1805 0.3046 0.2358 0.2758 0.2305999 0.1614 0.3472 0.1588 0.3059 0.207 0.3034 0.2011 0.3451 0.2767 0.3034 0.325 0.306 0.3223 0.3473 0.2826 0.3451 0.1543 0.393 0.1614 0.3472 0.2011 0.3451 0.1957 0.3896 0.2826 0.3451 0.3223 0.3473 0.3294 0.393 0.288 0.3896 0.1444 0.4371 0.1543 0.393 0.1957 0.3896 0.1949 0.4336 0.288 0.3896 0.3294 0.393 0.3393 0.4371 0.2889 0.4336 0.1949 0.4336 0.1957 0.3896 0.2419 0.3877 0.2419 0.4299 0.2419 0.3877 0.288 0.3896 0.2889 0.4336 0.2419 0.4299 0.1957 0.3896 0.2011 0.3451 0.2419 0.3413 0.2419 0.3877 0.2419 0.3413 0.2826 0.3451 0.288 0.3896 0.2419 0.3877 0.2011 0.3451 0.207 0.3034 0.2419 0.2993 0.2419 0.3413 0.2419 0.2993 0.2767 0.3034 0.2826 0.3451 0.2419 0.3413 0.208 0.2305999 0.2142 0.1748999 0.2419 0.1721 0.2419 0.2258 0.2419 0.1721 0.2696 0.1748999 0.2758 0.2305999 0.2419 0.2258 0.207 0.3034 0.2098 0.263 0.2419 0.2612 0.2419 0.2993 0.2419 0.2612 0.274 0.263 0.2767 0.3034 0.2419 0.2993 0.2098 0.263 0.208 0.2305999 0.2419 0.2258 0.2419 0.2612 0.2419 0.2258 0.2758 0.2305999 0.274 0.263 0.2419 0.2612 0.09369999 0.4926 0.1345 0.4852 0.1684 0.4961 0.1118 0.5316 0.3154 0.4961 0.3493 0.4852 0.39 0.4926 0.372 0.5316 0.1444 0.4371 0.1949 0.4336 0.1684 0.4961 0.1345 0.4852 0.3154 0.4961 0.2889 0.4336 0.3393 0.4371 0.3493 0.4852 0.1949 0.4336 0.2419 0.4299 0.2419 0.4871 0.1684 0.4961 0.2419 0.4871 0.2419 0.4299 0.2889 0.4336 0.3154 0.4961 0.2419 0.1721 0.2142 0.1748999 0.2115 0.1163 0.2419 0.1133 0.2723 0.1164 0.2696 0.1748999 0.2419 0.1721 0.2419 0.1133 0.2142 0.1748999 0.1843 0.1805 0.1808 0.1234 0.2115 0.1163 0.303 0.1234 0.2994 0.1805 0.2696 0.1748999 0.2723 0.1164 0.1843 0.1805 0.1466 0.1847 0.1448 0.1321 0.1808 0.1234 0.339 0.1321 0.3372 0.1847 0.2994 0.1805 0.303 0.1234 0.1466 0.1847 0.112 0.179 0.1124 0.1306 0.1448 0.1321 0.3714 0.1307 0.3718 0.179 0.3372 0.1847 0.339 0.1321 0.7921 0.1687999 0.7603 0.1680999 0.7637 0.1143 0.795 0.118 0.7062 0.1143 0.7096 0.1680999 0.6778 0.1687999 0.6749 0.118 0.8296 0.1644999 0.7921 0.1687999 0.795 0.118 0.8327 0.1179 0.6749 0.118 0.6778 0.1687999 0.6404 0.1644999 0.6372 0.1179 0.887 0.1604 0.8296 0.1644999 0.8327 0.1179 0.8881 0.118 0.6372 0.1179 0.6404 0.1644999 0.583 0.1604 0.5819 0.118 0.7603 0.1680999 0.735 0.1718 0.735 0.114 0.7637 0.1143 0.735 0.114 0.735 0.1718 0.7096 0.1680999 0.7062 0.1143 0.112 0.179 0.05679994 0.1734 0.06149995 0.1335999 0.1124 0.1306 0.4223 0.1337 0.427 0.1734 0.3718 0.179 0.3714 0.1307 0.9301 0.1462 0.887 0.1604 0.8881 0.118 0.9295 0.1071 0.5819 0.118 0.583 0.1604 0.5399 0.1462 0.5405 0.1071 0.9295 0.1071 0.8881 0.118 0.8898 0.0769 0.9345 0.06549996 0.5802 0.0769 0.5819 0.118 0.5405 0.1071 0.5354 0.06549996 0.1124 0.1306 0.06149995 0.1335999 0.05919998 0.0927 0.1087 0.0841 0.4246 0.0927 0.4223 0.1337 0.3714 0.1307 0.3751 0.08419996 0.7637 0.1143 0.735 0.114 0.735 0.07370001 0.7646 0.07359999 0.735 0.07370001 0.735 0.114 0.7062 0.1143 0.7053 0.07359999 0.8881 0.118 0.8327 0.1179 0.8344 0.07629996 0.8898 0.0769 0.6355 0.07629996 0.6372 0.1179 0.5819 0.118 0.5802 0.0769 0.8327 0.1179 0.795 0.118 0.7972 0.07779997 0.8344 0.07629996 0.6728 0.07779997 0.6749 0.118 0.6372 0.1179 0.6355 0.07629996 0.795 0.118 0.7637 0.1143 0.7646 0.07359999 0.7972 0.07779997 0.7053 0.07359999 0.7062 0.1143 0.6749 0.118 0.6728 0.07779997 0.1448 0.1321 0.1124 0.1306 0.1087 0.0841 0.1407999 0.08529996 0.3751 0.08419996 0.3714 0.1307 0.339 0.1321 0.343 0.08529996 0.1808 0.1234 0.1448 0.1321 0.1407999 0.08529996 0.1784 0.07899999 0.343 0.08529996 0.339 0.1321 0.303 0.1234 0.3054 0.07909995 0.2115 0.1163 0.1808 0.1234 0.1784 0.07899999 0.2128 0.07319998 0.3054 0.07909995 0.303 0.1234 0.2723 0.1164 0.271 0.07319998 0.2419 0.1133 0.2115 0.1163 0.2128 0.07319998 0.2419 0.06839996 0.271 0.07319998 0.2723 0.1164 0.2419 0.1133 0.2419 0.06839996 0.2419 0.06839996 0.2128 0.07319998 0.2069 0.008899986 0.2419 0.005399942 0.2769 0.008899986 0.271 0.07319998 0.2419 0.06839996 0.2419 0.005399942 0.2128 0.07319998 0.1784 0.07899999 0.1748 0.01799994 0.2069 0.008899986 0.309 0.01799994 0.3054 0.07909995 0.271 0.07319998 0.2769 0.008899986 0.1784 0.07899999 0.1407999 0.08529996 0.1326 0.01769995 0.1748 0.01799994 0.3512 0.01769995 0.343 0.08529996 0.3054 0.07909995 0.309 0.01799994 0.1407999 0.08529996 0.1087 0.0841 0.09679996 0.03059995 0.1326 0.01769995 0.387 0.03069996 0.3751 0.08419996 0.343 0.08529996 0.3512 0.01769995 0.7972 0.07779997 0.7646 0.07359999 0.7701 0.01759999 0.8044 0.02259999 0.6999 0.01759999 0.7053 0.07359999 0.6728 0.07779997 0.6656 0.02259999 0.8344 0.07629996 0.7972 0.07779997 0.8044 0.02259999 0.8423 0.02369999 0.6656 0.02259999 0.6728 0.07779997 0.6355 0.07629996 0.6277 0.02369999 0.8898 0.0769 0.8344 0.07629996 0.8423 0.02369999 0.8909 0.01849997 0.6277 0.02369999 0.6355 0.07629996 0.5802 0.0769 0.579 0.01849997 0.7646 0.07359999 0.735 0.07370001 0.735 0.01599997 0.7701 0.01759999 0.735 0.01599997 0.735 0.07370001 0.7053 0.07359999 0.6999 0.01759999 0.1087 0.0841 0.05919998 0.0927 0.05349999 0.03409999 0.09679996 0.03059995 0.4303 0.03409999 0.4246 0.0927 0.3751 0.08419996 0.387 0.03069996 0.9345 0.06549996 0.8898 0.0769 0.8909 0.01849997 0.9383 0.005099952 0.579 0.01849997 0.5802 0.0769 0.5354 0.06549996 0.5317 0.005099952 0.1684 0.4961 0.2419 0.4871 0.2419 0.5144 0.1902 0.519 0.2419 0.5144 0.2419 0.4871 0.3154 0.4961 0.2935 0.519 0.1118 0.5316 0.1684 0.4961 0.1902 0.519 0.1568 0.5475 0.2935 0.519 0.3154 0.4961 0.372 0.5316 0.3269 0.5475 0.7644 0.3783 0.792 0.3962 0.7781 0.4187 0.7602 0.4069 0.6918 0.4187 0.6779 0.3962 0.7055 0.3783 0.7097 0.4069 0.792 0.3962 0.8205 0.401 0.7994 0.4275 0.7781 0.4187 0.6705 0.4275 0.6495 0.401 0.6779 0.3962 0.6918 0.4187 0.735 0.3565 0.7644 0.3783 0.7602 0.4069 0.735 0.3875 0.7097 0.4069 0.7055 0.3783 0.735 0.3565 0.735 0.3875 0.8205 0.401 0.8468 0.4132 0.8101 0.4454 0.7994 0.4275 0.6598 0.4454 0.6231 0.4132 0.6495 0.401 0.6705 0.4275 0.8468 0.4132 0.8641 0.434 0.8214 0.463 0.8101 0.4454 0.6485 0.463 0.6058 0.434 0.6231 0.4132 0.6598 0.4454 0.8641 0.434 0.8711 0.4643 0.8263 0.4807 0.8214 0.463 0.6436 0.4807 0.5988 0.4643 0.6058 0.434 0.6485 0.463 0.8711 0.4643 0.8736 0.502 0.8246 0.5028 0.8263 0.4807 0.6454 0.5028 0.5963 0.502 0.5988 0.4643 0.6436 0.4807 0.09079998 0.5667 0.1118 0.5316 0.1568 0.5475 0.1413 0.5708 0.3269 0.5475 0.372 0.5316 0.3929 0.5667 0.3424 0.5708 0.8682 0.949 0.8539 0.9401 0.854 0.9193 0.8738 0.9293 0.7399 0.9233 0.7415 0.9441 0.7279 0.954 0.7209 0.9347 0.8809 0.9546 0.8682 0.949 0.8738 0.9293 0.8867 0.9355 0.7209 0.9347 0.7279 0.954 0.7155 0.9605 0.7085 0.9418 0.8902 0.9605 0.8809 0.9546 0.8867 0.9355 0.8982 0.9419 0.7085 0.9418 0.7155 0.9605 0.7067 0.967 0.6974 0.949 0.9006 0.9683 0.8902 0.9605 0.8982 0.9419 0.9079 0.9509 0.6974 0.949 0.7067 0.967 0.6969 0.9755 0.6884 0.9586 0.9105 0.9764 0.9006 0.9683 0.9079 0.9509 0.9216 0.9603 0.6884 0.9586 0.6969 0.9755 0.6875 0.9843 0.6754 0.969 0.9227 0.9855 0.9105 0.9764 0.9216 0.9603 0.93 0.9705 0.6754 0.969 0.6875 0.9843 0.676 0.9943 0.6677 0.9797 0.8539 0.9401 0.8285 0.9313 0.8263 0.9099 0.854 0.9193 0.7669 0.912 0.7662 0.9335 0.7415 0.9441 0.7399 0.9233 0.8285 0.9313 0.7973 0.9299 0.7967 0.9131 0.8263 0.9099 0.7967 0.9131 0.7973 0.9299 0.7662 0.9335 0.7669 0.912 0.8263 0.9099 0.7967 0.9131 0.7965 0.9096 0.8262 0.9063 0.7965 0.9096 0.7967 0.9131 0.7669 0.912 0.7667 0.9084 0.854 0.9193 0.8263 0.9099 0.8262 0.9063 0.851 0.9149 0.7667 0.9084 0.7669 0.912 0.7399 0.9233 0.7425 0.9187 0.93 0.9705 0.9216 0.9603 0.9272 0.9605 0.9346 0.9712 0.6698 0.9696 0.6754 0.969 0.6677 0.9797 0.6632 0.9808 0.9216 0.9603 0.9079 0.9509 0.9116 0.9495 0.9272 0.9605 0.6846 0.9575 0.6884 0.9586 0.6754 0.969 0.6698 0.9696 0.9079 0.9509 0.8982 0.9419 0.9006 0.9404 0.9116 0.9495 0.6949 0.9477 0.6974 0.949 0.6884 0.9586 0.6846 0.9575 0.8982 0.9419 0.8867 0.9355 0.8889 0.9328 0.9006 0.9404 0.7061 0.9393 0.7085 0.9418 0.6974 0.949 0.6949 0.9477 0.8867 0.9355 0.8738 0.9293 0.8738 0.9252 0.8889 0.9328 0.7206 0.9306 0.7209 0.9347 0.7085 0.9418 0.7061 0.9393 0.8738 0.9293 0.8738 0.9252 0.851 0.9149 0.854 0.9193 0.7425 0.9187 0.7399 0.9233 0.7209 0.9347 0.7206 0.9306 0.8738 0.9252 0.851 0.9149 0.8636 0.8961 0.8859 0.9043 0.7287 0.9009 0.7425 0.9187 0.7206 0.9306 0.707 0.9106 0.8889 0.9328 0.8738 0.9252 0.8859 0.9043 0.9054 0.9175 0.707 0.9106 0.7206 0.9306 0.7061 0.9393 0.6885 0.9252 0.9006 0.9404 0.8889 0.9328 0.9054 0.9175 0.9202 0.9312 0.6885 0.9252 0.7061 0.9393 0.6949 0.9477 0.6747 0.9398 0.9116 0.9495 0.9006 0.9404 0.9202 0.9312 0.9331 0.9398 0.6747 0.9398 0.6949 0.9477 0.6846 0.9575 0.6624 0.9494 0.9272 0.9605 0.9116 0.9495 0.9331 0.9398 0.9493 0.9546 0.6624 0.9494 0.6846 0.9575 0.6698 0.9696 0.6473 0.9653 0.9346 0.9712 0.9272 0.9605 0.9493 0.9546 0.9676 0.9714 0.6473 0.9653 0.6698 0.9696 0.6632 0.9808 0.6303 0.9833 0.851 0.9149 0.8262 0.9063 0.828 0.8844 0.8636 0.8961 0.7633 0.8867 0.7667 0.9084 0.7425 0.9187 0.7287 0.9009 0.8262 0.9063 0.7965 0.9096 0.7953 0.8751 0.828 0.8844 0.7953 0.8751 0.7965 0.9096 0.7667 0.9084 0.7633 0.8867 0.9383 0.005099952 0.8909 0.01849997 0.8907 0.01229995 0.934 0 0.5793 0.01229995 0.579 0.01849997 0.5317 0.005099952 0.536 0 0.09679996 0.03059995 0.05349999 0.03409999 0.05379998 0.02849996 0.0952 0.0259 0.43 0.02859997 0.4303 0.03409999 0.387 0.03069996 0.3886 0.0259 0.7701 0.01759999 0.735 0.01599997 0.735 0.01039999 0.7729 0.01269996 0.735 0.01039999 0.735 0.01599997 0.6999 0.01759999 0.6971 0.01269996 0.8909 0.01849997 0.8423 0.02369999 0.8447 0.01859998 0.8907 0.01229995 0.6252 0.01859998 0.6277 0.02369999 0.579 0.01849997 0.5793 0.01229995 0.8423 0.02369999 0.8044 0.02259999 0.8071 0.01779997 0.8447 0.01859998 0.6628 0.01779997 0.6656 0.02259999 0.6277 0.02369999 0.6252 0.01859998 0.8044 0.02259999 0.7701 0.01759999 0.7729 0.01269996 0.8071 0.01779997 0.6971 0.01269996 0.6999 0.01759999 0.6656 0.02259999 0.6628 0.01779997 0.1326 0.01769995 0.09679996 0.03059995 0.0952 0.0259 0.1307 0.01279997 0.3886 0.0259 0.387 0.03069996 0.3512 0.01769995 0.3531 0.01279997 0.1748 0.01799994 0.1326 0.01769995 0.1307 0.01279997 0.1714 0.01359999 0.3531 0.01279997 0.3512 0.01769995 0.309 0.01799994 0.3124 0.01359999 0.2069 0.008899986 0.1748 0.01799994 0.1714 0.01359999 0.2034 0.004199981 0.3124 0.01359999 0.309 0.01799994 0.2769 0.008899986 0.2804 0.004199981 0.2419 0.005399942 0.2069 0.008899986 0.2034 0.004199981 0.2419 0 0.2804 0.004199981 0.2769 0.008899986 0.2419 0.005399942 0.2419 0 0.5721 0.8385 0.5693 0.7986 0.6415 0.7876 0.6446 0.8239 0.3657 0.87 0.4379 0.8812 0.435 0.921 0.3625 0.9063 0.5702 0.7524 0.6424 0.7467 0.6415 0.7876 0.5693 0.7986 0.3657 0.87 0.3649 0.8291 0.4371 0.8349 0.4379 0.8812 0.5716 0.7071 0.6442 0.7071 0.6424 0.7467 0.5702 0.7524 0.3649 0.8291 0.3632 0.7895 0.4358 0.7896 0.4371 0.8349 0.5733 0.6605 0.6455 0.6685 0.6442 0.7071 0.5716 0.7071 0.3632 0.7895 0.3619 0.7509 0.4342 0.743 0.4358 0.7896 0.575 0.6143 0.6464 0.6246 0.6455 0.6685 0.5733 0.6605 0.3619 0.7509 0.3612 0.707 0.4325 0.6968 0.4342 0.743 0.5771 0.5705 0.6476 0.5919 0.6464 0.6246 0.575 0.6143 0.3612 0.707 0.36 0.6743 0.4305 0.6531 0.4325 0.6968 0.5823 0.5301 0.653 0.5393 0.6476 0.5919 0.5771 0.5705 0.36 0.6743 0.3547 0.6217 0.4254 0.6126 0.4305 0.6531 0.5721 0.8385 0.6446 0.8239 0.6537 0.864 0.5844 0.8858 0.3533 0.9464 0.3625 0.9063 0.435 0.921 0.4226 0.9683 0.815 0.8111 0.8098 0.775 0.9069 0.7656 0.9092 0.7932 0.1003 0.8474 0.1975 0.8571 0.1921 0.8931 0.09789997 0.8751 0.8065 0.7388 0.9042 0.7382 0.9069 0.7656 0.8098 0.775 0.1003 0.8474 0.1031 0.8201 0.2008 0.8209 0.1975 0.8571 0.8097 0.7047 0.9005 0.7078 0.9042 0.7382 0.8065 0.7388 0.1031 0.8201 0.1068 0.7896 0.1977 0.7867 0.2008 0.8209 0.8117 0.6701 0.9011 0.6729 0.9005 0.7078 0.8097 0.7047 0.1068 0.7896 0.1062999 0.7547 0.1957 0.7522 0.1977 0.7867 0.8149 0.6333 0.9038 0.6386 0.9011 0.6729 0.8117 0.6701 0.1062999 0.7547 0.1037 0.7204 0.1926 0.7153 0.1957 0.7522 0.8178 0.5964 0.9061 0.603 0.9038 0.6386 0.8149 0.6333 0.1037 0.7204 0.1015 0.6849 0.1897 0.6785 0.1926 0.7153 0.8204 0.5609 0.9073 0.5678 0.9061 0.603 0.8178 0.5964 0.1015 0.6849 0.1003 0.6497 0.1872 0.6429 0.1897 0.6785 0.815 0.8111 0.9092 0.7932 0.9092 0.8232 0.8248 0.8458 0.09789997 0.905 0.09789997 0.8751 0.1921 0.8931 0.1823 0.9278 0.9092 0.8232 0.9092 0.7932 0.9148 0.7933 0.9157 0.8252 0.09229999 0.8752 0.09789997 0.8751 0.09789997 0.905 0.09139996 0.907 0.9061 0.603 0.9073 0.5678 0.9133 0.5667 0.9122 0.6037 0.09429997 0.6485 0.1003 0.6497 0.1015 0.6849 0.09539997 0.6855 0.9038 0.6386 0.9061 0.603 0.9122 0.6037 0.9108 0.6392 0.09539997 0.6855 0.1015 0.6849 0.1037 0.7204 0.09669995 0.721 0.9011 0.6729 0.9038 0.6386 0.9108 0.6392 0.9073 0.6728 0.09669995 0.721 0.1037 0.7204 0.1062999 0.7547 0.1001 0.7547 0.9005 0.7078 0.9011 0.6729 0.9073 0.6728 0.9063 0.7072 0.1001 0.7547 0.1062999 0.7547 0.1068 0.7896 0.101 0.7891 0.9042 0.7382 0.9005 0.7078 0.9063 0.7072 0.9089 0.7377 0.101 0.7891 0.1068 0.7896 0.1031 0.8201 0.09829998 0.8195 0.9069 0.7656 0.9042 0.7382 0.9089 0.7377 0.9123 0.7652 0.09829998 0.8195 0.1031 0.8201 0.1003 0.8474 0.09489995 0.8471 0.9069 0.7656 0.9123 0.7652 0.9148 0.7933 0.9092 0.7932 0.09229999 0.8752 0.09489995 0.8471 0.1003 0.8474 0.09789997 0.8751 0.9668 0.7807 0.9756 0.8107 0.971 0.8128 0.9618 0.7811 0.03609997 0.8946 0.03149998 0.8925 0.04039996 0.8624 0.04539996 0.8628 0.9761 0.5857 0.9673 0.6184 0.9618 0.6182 0.9711 0.5836 0.04579997 0.6999 0.04019999 0.7001 0.03149998 0.6675 0.03649997 0.6653 0.9673 0.6184 0.9621 0.6462 0.9564 0.6458 0.9618 0.6182 0.05099999 0.7276 0.04539996 0.7279 0.04019999 0.7001 0.04579997 0.6999 0.9621 0.6462 0.9603 0.6719 0.9551 0.671 0.9564 0.6458 0.05229997 0.7528 0.04709994 0.7537 0.04539996 0.7279 0.05099999 0.7276 0.9603 0.6719 0.9599 0.7028 0.955 0.7029 0.9551 0.671 0.05239999 0.7847 0.04749995 0.7846 0.04709994 0.7537 0.05229997 0.7528 0.9599 0.7028 0.9613 0.7331 0.9564 0.7341 0.955 0.7029 0.05089998 0.8159 0.046 0.8148 0.04749995 0.7846 0.05239999 0.7847 0.9613 0.7331 0.964 0.7576 0.9585 0.7583 0.9564 0.7341 0.04879999 0.84 0.04329997 0.8393 0.046 0.8148 0.05089998 0.8159 0.9668 0.7807 0.9618 0.7811 0.9585 0.7583 0.964 0.7576 0.04879999 0.84 0.04539996 0.8628 0.04039996 0.8624 0.04329997 0.8393 0.9148 0.7933 0.9618 0.7811 0.971 0.8128 0.9157 0.8252 0.03609997 0.8946 0.04539996 0.8628 0.09229999 0.8752 0.09139996 0.907 0.9133 0.5667 0.9711 0.5836 0.9618 0.6182 0.9122 0.6037 0.04579997 0.6999 0.03649997 0.6653 0.09429997 0.6485 0.09539997 0.6855 0.9122 0.6037 0.9618 0.6182 0.9564 0.6458 0.9108 0.6392 0.05099999 0.7276 0.04579997 0.6999 0.09539997 0.6855 0.09669995 0.721 0.9108 0.6392 0.9564 0.6458 0.9551 0.671 0.9073 0.6728 0.05229997 0.7528 0.05099999 0.7276 0.09669995 0.721 0.1001 0.7547 0.9073 0.6728 0.9551 0.671 0.955 0.7029 0.9063 0.7072 0.05239999 0.7847 0.05229997 0.7528 0.1001 0.7547 0.101 0.7891 0.9063 0.7072 0.955 0.7029 0.9564 0.7341 0.9089 0.7377 0.05089998 0.8159 0.05239999 0.7847 0.101 0.7891 0.09829998 0.8195 0.9089 0.7377 0.9564 0.7341 0.9585 0.7583 0.9123 0.7652 0.04879999 0.84 0.05089998 0.8159 0.09829998 0.8195 0.09489995 0.8471 0.9148 0.7933 0.9123 0.7652 0.9585 0.7583 0.9618 0.7811 0.04879999 0.84 0.09489995 0.8471 0.09229999 0.8752 0.04539996 0.8628 0.7478 0.8182 0.7594 0.8175 0.7662 0.8522 0.7541 0.8531 0.2409 0.9344 0.2477 0.8996 0.2593 0.9004 0.2529 0.9353 0.7594 0.8175 0.815 0.8111 0.8248 0.8458 0.7662 0.8522 0.1823 0.9278 0.1921 0.8931 0.2477 0.8996 0.2409 0.9344 0.7502 0.5565 0.7622 0.5569 0.7603 0.592 0.7483 0.5917 0.2473 0.6742 0.2455 0.639 0.2575 0.6386 0.2593 0.6739 0.7622 0.5569 0.8204 0.5609 0.8178 0.5964 0.7603 0.592 0.1897 0.6785 0.1872 0.6429 0.2455 0.639 0.2473 0.6742 0.7483 0.5917 0.7603 0.592 0.7561 0.6327 0.7437 0.6324 0.2514 0.7148 0.2473 0.6742 0.2593 0.6739 0.2638 0.7146 0.7603 0.592 0.8178 0.5964 0.8149 0.6333 0.7561 0.6327 0.1926 0.7153 0.1897 0.6785 0.2473 0.6742 0.2514 0.7148 0.7437 0.6324 0.7561 0.6327 0.7534 0.6691 0.7412 0.6689 0.254 0.7512 0.2514 0.7148 0.2638 0.7146 0.2662 0.7511 0.7561 0.6327 0.8149 0.6333 0.8117 0.6701 0.7534 0.6691 0.1957 0.7522 0.1926 0.7153 0.2514 0.7148 0.254 0.7512 0.7412 0.6689 0.7534 0.6691 0.7519 0.7051 0.7398 0.7051 0.2554 0.7872 0.254 0.7512 0.2662 0.7511 0.2676 0.7873 0.7534 0.6691 0.8117 0.6701 0.8097 0.7047 0.7519 0.7051 0.1977 0.7867 0.1957 0.7522 0.254 0.7512 0.2554 0.7872 0.7398 0.7051 0.7519 0.7051 0.7505 0.7409 0.7388 0.7413 0.2568 0.8231 0.2554 0.7872 0.2676 0.7873 0.2685 0.8235 0.7519 0.7051 0.8097 0.7047 0.8065 0.7388 0.7505 0.7409 0.2008 0.8209 0.1977 0.7867 0.2554 0.7872 0.2568 0.8231 0.7388 0.7413 0.7505 0.7409 0.7531 0.7772 0.7412 0.7777 0.2541 0.8594 0.2568 0.8231 0.2685 0.8235 0.266 0.8599 0.7505 0.7409 0.8065 0.7388 0.8098 0.775 0.7531 0.7772 0.1975 0.8571 0.2008 0.8209 0.2568 0.8231 0.2541 0.8594 0.7478 0.8182 0.7412 0.7777 0.7531 0.7772 0.7594 0.8175 0.2541 0.8594 0.266 0.8599 0.2593 0.9004 0.2477 0.8996 0.7594 0.8175 0.7531 0.7772 0.8098 0.775 0.815 0.8111 0.1975 0.8571 0.2541 0.8594 0.2477 0.8996 0.1921 0.8931 0.6446 0.8239 0.6415 0.7876 0.7238 0.7795 0.7291 0.8164 0.2834 0.8617 0.3657 0.87 0.3625 0.9063 0.278 0.8986 0.7291 0.8164 0.7238 0.7795 0.7412 0.7777 0.7478 0.8182 0.266 0.8599 0.2834 0.8617 0.278 0.8986 0.2593 0.9004 0.6424 0.7467 0.722 0.7423 0.7238 0.7795 0.6415 0.7876 0.2834 0.8617 0.2853 0.8245 0.3649 0.8291 0.3657 0.87 0.722 0.7423 0.7388 0.7413 0.7412 0.7777 0.7238 0.7795 0.266 0.8599 0.2685 0.8235 0.2853 0.8245 0.2834 0.8617 0.6442 0.7071 0.7231 0.7055 0.722 0.7423 0.6424 0.7467 0.2853 0.8245 0.2842 0.7877 0.3632 0.7895 0.3649 0.8291 0.7231 0.7055 0.7398 0.7051 0.7388 0.7413 0.722 0.7423 0.2685 0.8235 0.2676 0.7873 0.2842 0.7877 0.2853 0.8245 0.6455 0.6685 0.7244 0.6686 0.7231 0.7055 0.6442 0.7071 0.2842 0.7877 0.283 0.7509 0.3619 0.7509 0.3632 0.7895 0.7244 0.6686 0.7412 0.6689 0.7398 0.7051 0.7231 0.7055 0.2676 0.7873 0.2662 0.7511 0.283 0.7509 0.2842 0.7877 0.6464 0.6246 0.726 0.6311 0.7244 0.6686 0.6455 0.6685 0.283 0.7509 0.2815 0.7133 0.3612 0.707 0.3619 0.7509 0.726 0.6311 0.7437 0.6324 0.7412 0.6689 0.7244 0.6686 0.2662 0.7511 0.2638 0.7146 0.2815 0.7133 0.283 0.7509 0.6476 0.5919 0.7293 0.5932 0.726 0.6311 0.6464 0.6246 0.2815 0.7133 0.2783 0.6755 0.36 0.6743 0.3612 0.707 0.7293 0.5932 0.7483 0.5917 0.7437 0.6324 0.726 0.6311 0.2638 0.7146 0.2593 0.6739 0.2783 0.6755 0.2815 0.7133 0.653 0.5393 0.7315 0.5568 0.7293 0.5932 0.6476 0.5919 0.2783 0.6755 0.2761 0.639 0.3547 0.6217 0.36 0.6743 0.7315 0.5568 0.7502 0.5565 0.7483 0.5917 0.7293 0.5932 0.2593 0.6739 0.2575 0.6386 0.2761 0.639 0.2783 0.6755 0.6446 0.8239 0.7291 0.8164 0.7354 0.8532 0.6537 0.864 0.2716 0.9354 0.278 0.8986 0.3625 0.9063 0.3533 0.9464 0.7291 0.8164 0.7478 0.8182 0.7541 0.8531 0.7354 0.8532 0.2529 0.9353 0.2593 0.9004 0.278 0.8986 0.2716 0.9354 0.5618 0.8921 0.5428 0.9001 0.5222 0.8522 0.5482 0.8425 0.4849 0.9348 0.4641 0.9827 0.4452 0.9747 0.4589 0.9251 0 0.3812 0.005999982 0.3751 0.04699999 0.4125 0.03729999 0.4199 0.4367 0.4126 0.4778 0.3751 0.4837 0.3812 0.4464 0.42 0.5521 0.5679 0.5283 0.5641 0.5402 0.5189 0.5601 0.526 0.4675 0.6015 0.4794 0.6468 0.4556 0.6505 0.4476 0.6086 0.955 0.3755 0.946 0.369 0.9812 0.3369 0.9862 0.343 0.4887 0.3368 0.5239 0.369 0.5149 0.3755 0.4837 0.3429 0.5481 0.6132 0.5201 0.6142 0.5283 0.5641 0.5521 0.5679 0.4794 0.6468 0.4875 0.6969 0.4595 0.6958 0.4556 0.6505 0.9409 0.4221 0.9237 0.4185 0.946 0.369 0.955 0.3755 0.5239 0.369 0.5462 0.4185 0.529 0.4221 0.5149 0.3755 0.5466 0.6597 0.5137 0.6575 0.5201 0.6142 0.5481 0.6132 0.4875 0.6969 0.4937 0.7402 0.4608 0.7423 0.4595 0.6958 0.9356 0.4626 0.9128 0.4596 0.9237 0.4185 0.9409 0.4221 0.5462 0.4185 0.5571 0.4595 0.5344 0.4626 0.529 0.4221 0.5452 0.7064 0.5137 0.7024 0.5137 0.6575 0.5466 0.6597 0.4937 0.7402 0.4936 0.7851 0.4622 0.789 0.4608 0.7423 0.9341 0.5039 0.9095 0.5007 0.9128 0.4596 0.9356 0.4626 0.5571 0.4595 0.5604 0.5007 0.5358 0.5039 0.5344 0.4626 0.5444 0.7522 0.5148 0.7511 0.5137 0.7024 0.5452 0.7064 0.4936 0.7851 0.4925 0.8337 0.4628 0.8347 0.4622 0.789 0.03299999 0.5217 0.05559998 0.5236 0.05429995 0.5715 0.0291 0.5677 0.4294 0.5715 0.4281 0.5236 0.4507 0.5217 0.4546 0.5677 0.5452 0.7998 0.5201 0.7991 0.5148 0.7511 0.5444 0.7522 0.4925 0.8337 0.4871 0.8817 0.462 0.8824 0.4628 0.8347 0.03769999 0.4737 0.05619996 0.4733 0.05559998 0.5236 0.03299999 0.5217 0.4281 0.5236 0.4276 0.4733 0.4461 0.4737 0.4507 0.5217 0.5452 0.7998 0.5482 0.8425 0.5222 0.8522 0.5201 0.7991 0.4849 0.9348 0.4589 0.9251 0.462 0.8824 0.4871 0.8817 0.03769999 0.4737 0.03729999 0.4199 0.04699999 0.4125 0.05619996 0.4733 0.4367 0.4126 0.4464 0.42 0.4461 0.4737 0.4276 0.4733 0.2281 0.8082 0.1583999 0.8024 0.1647 0.8558 0.234 0.8547 0.8466 0.1529999 0.8504 0.2067 0.7811 0.1975 0.7774 0.1507 0.1583999 0.8024 0.09619998 0.7872 0.105 0.8136 0.1647 0.8558 0.9043 0.1981 0.9118 0.2248 0.8504 0.2067 0.8466 0.1529999 0.09619998 0.7872 0.02239996 0.7424 0.02069997 0.7598 0.105 0.8136 0.9859 0.2558 0.9833 0.2732 0.9118 0.2248 0.9043 0.1981 0.4778 0.773 0.4867 0.8114 0.5491 0.7483 0.5404 0.7311 0.4576 0.2418 0.5229 0.1818 0.53 0.2206 0.4654 0.2594 0.4778 0.773 0.4097 0.7896 0.4076 0.8441 0.4867 0.8114 0.6035 0.1529999 0.5988 0.2073 0.53 0.2206 0.5229 0.1818 0.3455 0.8162 0.3446 0.8591 0.4076 0.8441 0.4097 0.7896 0.6035 0.1529999 0.6672 0.1411 0.6642 0.1838 0.5988 0.2073 0.3455 0.8162 0.2898 0.8197 0.2885 0.8617 0.3446 0.8591 0.7233 0.1412 0.72 0.183 0.6642 0.1838 0.6672 0.1411 0.2281 0.8082 0.234 0.8547 0.2885 0.8617 0.2898 0.8197 0.7233 0.1412 0.7774 0.1507 0.7811 0.1975 0.72 0.183 0.4867 0.8114 0.4871 0.869 0.5557 0.7723 0.5491 0.7483 0.4521 0.2176 0.5253 0.1243 0.5229 0.1818 0.4576 0.2418 0.105 0.8136 0.02069997 0.7598 0.01299995 0.7822 0.09719997 0.8426 0.9947 0.2337999 0.9859 0.2558 0.9043 0.1981 0.9134 0.1694999 0.4867 0.8114 0.4076 0.8441 0.4641 0.9183 0.4871 0.869 0.5507 0.07609999 0.6035 0.1529999 0.5229 0.1818 0.5253 0.1243 0.1647 0.8558 0.105 0.8136 0.09719997 0.8426 0.1089 0.8913 0.9134 0.1694999 0.9043 0.1981 0.8466 0.1529999 0.9041 0.1202 0.2885 0.8617 0.234 0.8547 0.2348 0.8931 0.284 0.8943 0.7785 0.1124 0.7774 0.1507 0.7233 0.1412 0.7294 0.1088 0.284 0.8943 0.2348 0.8931 0.2369 0.9226 0.2823 0.9259 0.7778 0.08279997 0.7785 0.1124 0.7294 0.1088 0.7326 0.07729995 0.2885 0.8617 0.284 0.8943 0.3347 0.8976 0.3446 0.8591 0.6789 0.1031 0.7294 0.1088 0.7233 0.1412 0.6672 0.1411 0.284 0.8943 0.2823 0.9259 0.3283 0.9279 0.3347 0.8976 0.6868 0.07309997 0.7326 0.07729995 0.7294 0.1088 0.6789 0.1031 0.3446 0.8591 0.3347 0.8976 0.3916 0.9144 0.4076 0.8441 0.6229 0.08359998 0.6789 0.1031 0.6672 0.1411 0.6035 0.1529999 0.1647 0.8558 0.1758 0.8969 0.2348 0.8931 0.234 0.8547 0.7785 0.1124 0.8376 0.1115 0.8466 0.1529999 0.7774 0.1507 0.1647 0.8558 0.1089 0.8913 0.1206 0.9188 0.1758 0.8969 0.8938 0.09219998 0.9041 0.1202 0.8466 0.1529999 0.8376 0.1115 0.2369 0.9226 0.2348 0.8931 0.1758 0.8969 0.1866 0.9302 0.8376 0.1115 0.7785 0.1124 0.7778 0.08279997 0.8284 0.07769995 0.1866 0.9302 0.1758 0.8969 0.1206 0.9188 0.1386 0.9534 0.8938 0.09219998 0.8376 0.1115 0.8284 0.07769995 0.8774 0.05679994 0.4076 0.8441 0.3916 0.9144 0.4492 0.9489 0.4641 0.9183 0.5671 0.04629999 0.6229 0.08359998 0.6035 0.1529999 0.5507 0.07609999 0.3916 0.9144 0.382 0.9444 0.4359 0.9757 0.4492 0.9489 0.5816 0.02019995 0.634 0.05409997 0.6229 0.08359998 0.5671 0.04629999 0.3283 0.9279 0.382 0.9444 0.3916 0.9144 0.3347 0.8976 0.6229 0.08359998 0.634 0.05409997 0.6868 0.07309997 0.6789 0.1031 0.2895 0.7141 0.2342 0.7116 0.2301 0.7594 0.2928 0.765 0.7767 0.2462 0.7703 0.2937 0.7151 0.2885 0.7143 0.2375 0.2928 0.765 0.2301 0.7594 0.2281 0.8082 0.2898 0.8197 0.7811 0.1975 0.7767 0.2462 0.7143 0.2375 0.72 0.183 0.2895 0.7141 0.2928 0.765 0.3482 0.7601 0.3418 0.7117 0.6588 0.2398 0.7143 0.2375 0.7151 0.2885 0.6628 0.2884 0.2928 0.765 0.2898 0.8197 0.3455 0.8162 0.3482 0.7601 0.6642 0.1838 0.72 0.183 0.7143 0.2375 0.6588 0.2398 0.401 0.6889 0.3418 0.7117 0.3482 0.7601 0.4062 0.7348 0.6588 0.2398 0.6628 0.2884 0.6026 0.3084 0.5996 0.2622 0.4062 0.7348 0.3482 0.7601 0.3455 0.8162 0.4097 0.7896 0.6642 0.1838 0.6588 0.2398 0.5996 0.2622 0.5988 0.2073 0.401 0.6889 0.4062 0.7348 0.4598 0.7162 0.4499 0.6682 0.5452 0.2782 0.5996 0.2622 0.6026 0.3084 0.5528 0.3267 0.4062 0.7348 0.4097 0.7896 0.4778 0.773 0.4598 0.7162 0.53 0.2206 0.5988 0.2073 0.5996 0.2622 0.5452 0.2782 0.5062 0.651 0.4499 0.6682 0.4598 0.7162 0.5196 0.6899 0.5452 0.2782 0.5528 0.3267 0.4957 0.3411 0.4842 0.3016 0.5196 0.6899 0.4598 0.7162 0.4778 0.773 0.5404 0.7311 0.53 0.2206 0.5452 0.2782 0.4842 0.3016 0.4654 0.2594 0.03849995 0.6609 0.02809995 0.699 0.09469997 0.7324 0.09679996 0.6795 0.9106 0.2797 0.9756 0.3162 0.9633 0.3538 0.9059 0.3324 0.02809995 0.699 0.02239996 0.7424 0.09619998 0.7872 0.09469997 0.7324 0.9118 0.2248 0.9833 0.2732 0.9756 0.3162 0.9106 0.2797 0.09679996 0.6795 0.09469997 0.7324 0.1613 0.7526 0.1668 0.6998 0.8451 0.2562 0.9106 0.2797 0.9059 0.3324 0.837 0.3087 0.09469997 0.7324 0.09619998 0.7872 0.1583999 0.8024 0.1613 0.7526 0.8504 0.2067 0.9118 0.2248 0.9106 0.2797 0.8451 0.2562 0.1668 0.6998 0.1613 0.7526 0.2301 0.7594 0.2342 0.7116 0.7767 0.2462 0.8451 0.2562 0.837 0.3087 0.7703 0.2937 0.1613 0.7526 0.1583999 0.8024 0.2281 0.8082 0.2301 0.7594 0.7811 0.1975 0.8504 0.2067 0.8451 0.2562 0.7767 0.2462 0.2828 0.6134 0.2291 0.6117 0.2342 0.7116 0.2895 0.7141 0.7703 0.2937 0.7706 0.3937 0.717 0.3895 0.7151 0.2885 0.2828 0.6134 0.2895 0.7141 0.3418 0.7117 0.3355 0.612 0.6628 0.2884 0.7151 0.2885 0.717 0.3895 0.6643 0.3883 0.3872 0.5962 0.3355 0.612 0.3418 0.7117 0.401 0.6889 0.6628 0.2884 0.6643 0.3883 0.6119 0.4015 0.6026 0.3084 0.3872 0.5962 0.401 0.6889 0.4499 0.6682 0.4339 0.5807 0.5528 0.3267 0.6026 0.3084 0.6119 0.4015 0.5645 0.4148 0.4875 0.5663 0.4339 0.5807 0.4499 0.6682 0.5062 0.651 0.5528 0.3267 0.5645 0.4148 0.5103 0.4266 0.4957 0.3411 0.06459999 0.5791 0.03849995 0.6609 0.09679996 0.6795 0.1175 0.5865 0.9059 0.3324 0.9633 0.3538 0.9333 0.4342 0.8808 0.4243 0.1175 0.5865 0.09679996 0.6795 0.1668 0.6998 0.1743 0.5997 0.837 0.3087 0.9059 0.3324 0.8808 0.4243 0.8247 0.4084 0.1743 0.5997 0.1668 0.6998 0.2342 0.7116 0.2291 0.6117 0.7703 0.2937 0.837 0.3087 0.8247 0.4084 0.7706 0.3937 0.2251 0.3796 0.2261 0.2859 0.1928 0.2844 0.1888999 0.3756 0.791 0.7224 0.7578 0.7193 0.7633 0.6258 0.7993 0.6315 0.2261 0.2859 0.2333 0.1982 0.2062 0.2003 0.1928 0.2844 0.7736 0.8058 0.7463 0.8065 0.7578 0.7193 0.791 0.7224 0.1773 0.1924 0.1572999 0.2811 0.1928 0.2844 0.2062 0.2003 0.791 0.7224 0.8263 0.7274 0.802 0.815 0.7736 0.8058 0.1572999 0.2811 0.1524 0.3744 0.1888999 0.3756 0.1928 0.2844 0.7993 0.6315 0.8357 0.6344 0.8263 0.7274 0.791 0.7224 0.1395 0.1773999 0.1162 0.2741 0.1572999 0.2811 0.1773 0.1924 0.8263 0.7274 0.867 0.7364 0.8391 0.8319 0.802 0.815 0.1162 0.2741 0.1128 0.3735 0.1524 0.3744 0.1572999 0.2811 0.8357 0.6344 0.8752 0.6373 0.867 0.7364 0.8263 0.7274 0.3871 0.1655 0.3515 0.1827999 0.3779 0.2729 0.4204 0.2602 0.6056 0.7249 0.6276 0.8162 0.5912 0.8318 0.5625 0.7356 0.4204 0.2602 0.3779 0.2729 0.4014 0.3773 0.4498 0.3567 0.5871 0.6195 0.6056 0.7249 0.5625 0.7356 0.5378 0.6378 0.3226 0.1929 0.3411 0.2769 0.3779 0.2729 0.3515 0.1827999 0.6056 0.7249 0.6425 0.7228 0.657 0.8075 0.6276 0.8162 0.3411 0.2769 0.3566 0.3829 0.4014 0.3773 0.3779 0.2729 0.5871 0.6195 0.6321 0.6161 0.6425 0.7228 0.6056 0.7249 0.3226 0.1929 0.2983 0.1927 0.311 0.282 0.3411 0.2769 0.6729 0.7191 0.6812 0.8089 0.657 0.8075 0.6425 0.7228 0.3411 0.2769 0.311 0.282 0.3154 0.3836 0.3566 0.3829 0.6734 0.6174 0.6729 0.7191 0.6425 0.7228 0.6321 0.6161 0.2653 0.1951 0.2658 0.2818 0.311 0.282 0.2983 0.1927 0.6729 0.7191 0.718 0.7215 0.7143 0.8081 0.6812 0.8089 0.2658 0.2818 0.2677 0.3757 0.3154 0.3836 0.311 0.282 0.6734 0.6174 0.7206 0.6276 0.718 0.7215 0.6729 0.7191 0.2251 0.3796 0.2677 0.3757 0.2658 0.2818 0.2261 0.2859 0.718 0.7215 0.7206 0.6276 0.7633 0.6258 0.7578 0.7193 0.2653 0.1951 0.2333 0.1982 0.2261 0.2859 0.2658 0.2818 0.7578 0.7193 0.7463 0.8065 0.7143 0.8081 0.718 0.7215 0.1888999 0.3756 0.1847 0.4605 0.2287 0.4656 0.2251 0.3796 0.7639 0.5396 0.8076 0.5469 0.7993 0.6315 0.7633 0.6258 0.1847 0.4605 0.1833 0.4829 0.231 0.4873 0.2287 0.4656 0.7627 0.5179 0.8101 0.5246 0.8076 0.5469 0.7639 0.5396 0.1524 0.3744 0.1368 0.4602 0.1847 0.4605 0.1888999 0.3756 0.8076 0.5469 0.8554 0.5495 0.8357 0.6344 0.7993 0.6315 0.1368 0.4602 0.1319 0.4808 0.1833 0.4829 0.1847 0.4605 0.8101 0.5246 0.8614 0.5292 0.8554 0.5495 0.8076 0.5469 0.1128 0.3735 0.083 0.4665 0.1368 0.4602 0.1524 0.3744 0.8554 0.5495 0.9095 0.5458 0.8752 0.6373 0.8357 0.6344 0.083 0.4665 0.07609999 0.4858 0.1319 0.4808 0.1368 0.4602 0.8614 0.5292 0.9173 0.5269 0.9095 0.5458 0.8554 0.5495 0.4498 0.3567 0.4014 0.3773 0.4074 0.4702 0.4566 0.4552 0.5857 0.5265 0.5871 0.6195 0.5378 0.6378 0.5358 0.539 0.4566 0.4552 0.4074 0.4702 0.4086 0.4883 0.4588 0.476 0.5853 0.5083 0.5857 0.5265 0.5358 0.539 0.5346 0.5182 0.3566 0.3829 0.3694 0.4779 0.4074 0.4702 0.4014 0.3773 0.5857 0.5265 0.624 0.5206 0.6321 0.6161 0.5871 0.6195 0.3694 0.4779 0.3721 0.4956 0.4086 0.4883 0.4074 0.4702 0.5853 0.5083 0.6221 0.5028 0.624 0.5206 0.5857 0.5265 0.3566 0.3829 0.3154 0.3836 0.3333 0.4763 0.3694 0.4779 0.6599 0.5239 0.6734 0.6174 0.6321 0.6161 0.624 0.5206 0.3694 0.4779 0.3333 0.4763 0.3376 0.4952 0.3721 0.4956 0.6566 0.5049 0.6599 0.5239 0.624 0.5206 0.6221 0.5028 0.2677 0.3757 0.2827 0.4681 0.3333 0.4763 0.3154 0.3836 0.6599 0.5239 0.7101 0.5346 0.7206 0.6276 0.6734 0.6174 0.2827 0.4681 0.2868 0.4892 0.3376 0.4952 0.3333 0.4763 0.6566 0.5049 0.707 0.5133 0.7101 0.5346 0.6599 0.5239 0.2677 0.3757 0.2251 0.3796 0.2287 0.4656 0.2827 0.4681 0.7639 0.5396 0.7633 0.6258 0.7206 0.6276 0.7101 0.5346 0.2827 0.4681 0.2287 0.4656 0.231 0.4873 0.2868 0.4892 0.7627 0.5179 0.7639 0.5396 0.7101 0.5346 0.707 0.5133 0.2868 0.4892 0.231 0.4873 0.2297 0.5116 0.2847 0.5125 0.7651 0.4937 0.7627 0.5179 0.707 0.5133 0.7103 0.4902 0.2847 0.5125 0.2297 0.5116 0.2291 0.6117 0.2828 0.6134 0.7706 0.3937 0.7651 0.4937 0.7103 0.4902 0.717 0.3895 0.2868 0.4892 0.2847 0.5125 0.3362 0.5164 0.3376 0.4952 0.659 0.4838 0.7103 0.4902 0.707 0.5133 0.6566 0.5049 0.2847 0.5125 0.2828 0.6134 0.3355 0.612 0.3362 0.5164 0.6643 0.3883 0.717 0.3895 0.7103 0.4902 0.659 0.4838 0.3721 0.4956 0.3376 0.4952 0.3362 0.5164 0.3745 0.5132 0.659 0.4838 0.6566 0.5049 0.6221 0.5028 0.6206 0.4851 0.3745 0.5132 0.3362 0.5164 0.3355 0.612 0.3872 0.5962 0.6643 0.3883 0.659 0.4838 0.6206 0.4851 0.6119 0.4015 0.3721 0.4956 0.3745 0.5132 0.4135 0.5044 0.4086 0.4883 0.5812 0.492 0.6206 0.4851 0.6221 0.5028 0.5853 0.5083 0.3745 0.5132 0.3872 0.5962 0.4339 0.5807 0.4135 0.5044 0.5645 0.4148 0.6119 0.4015 0.6206 0.4851 0.5812 0.492 0.4588 0.476 0.4086 0.4883 0.4135 0.5044 0.4647 0.4921 0.5812 0.492 0.5853 0.5083 0.5346 0.5182 0.5295 0.5018 0.4647 0.4921 0.4135 0.5044 0.4339 0.5807 0.4875 0.5663 0.5645 0.4148 0.5812 0.492 0.5295 0.5018 0.5103 0.4266 0.07609999 0.4858 0.0751 0.5032 0.1303 0.5005 0.1319 0.4808 0.8639 0.5096 0.9191 0.5095 0.9173 0.5269 0.8614 0.5292 0.0751 0.5032 0.06459999 0.5791 0.1175 0.5865 0.1303 0.5005 0.8808 0.4243 0.9333 0.4342 0.9191 0.5095 0.8639 0.5096 0.1319 0.4808 0.1303 0.5005 0.1817 0.5053 0.1833 0.4829 0.8128 0.5023 0.8639 0.5096 0.8614 0.5292 0.8101 0.5246 0.1303 0.5005 0.1175 0.5865 0.1743 0.5997 0.1817 0.5053 0.8247 0.4084 0.8808 0.4243 0.8639 0.5096 0.8128 0.5023 0.1833 0.4829 0.1817 0.5053 0.2297 0.5116 0.231 0.4873 0.7651 0.4937 0.8128 0.5023 0.8101 0.5246 0.7627 0.5179 0.1817 0.5053 0.1743 0.5997 0.2291 0.6117 0.2297 0.5116 0.7706 0.3937 0.8247 0.4084 0.8128 0.5023 0.7651 0.4937 0.382 0.9444 0.3283 0.9279 0.3244 0.9337 0.3735 0.9492 0.6909 0.06749999 0.6868 0.07309997 0.634 0.05409997 0.6426 0.0496 0.4359 0.9757 0.382 0.9444 0.3735 0.9492 0.4278 0.9837 0.6426 0.0496 0.634 0.05409997 0.5816 0.02019995 0.5901 0.0126 0.1866 0.9302 0.1386 0.9534 0.1427 0.9616 0.1928 0.9363 0.8738 0.04839998 0.8774 0.05679994 0.8284 0.07769995 0.8225 0.07129997 0.2369 0.9226 0.1866 0.9302 0.1928 0.9363 0.2402 0.9288 0.8225 0.07129997 0.8284 0.07769995 0.7778 0.08279997 0.7748 0.07649999 0.3283 0.9279 0.2823 0.9259 0.2823 0.9314 0.3244 0.9337 0.7329 0.07179999 0.7326 0.07729995 0.6868 0.07309997 0.6909 0.06749999 0.2823 0.9259 0.2369 0.9226 0.2402 0.9288 0.2823 0.9314 0.7748 0.07649999 0.7778 0.08279997 0.7326 0.07729995 0.7329 0.07179999 0.2062 0.2003 0.2333 0.1982 0.2345 0.1935 0.2064 0.1947 0.745 0.8112 0.7463 0.8065 0.7736 0.8058 0.7731 0.8113 0.1773 0.1924 0.2062 0.2003 0.2064 0.1947 0.1775 0.1872 0.7731 0.8113 0.7736 0.8058 0.802 0.815 0.8016 0.8202 0.1395 0.1773999 0.1773 0.1924 0.1775 0.1872 0.1435 0.1735 0.8016 0.8202 0.802 0.815 0.8391 0.8319 0.8348 0.8356 0.3515 0.1827999 0.3871 0.1655 0.3832 0.1619 0.3507 0.1777999 0.5949 0.8356 0.5912 0.8318 0.6276 0.8162 0.6281 0.8213 0.3226 0.1929 0.3515 0.1827999 0.3507 0.1777999 0.3212 0.1876 0.6281 0.8213 0.6276 0.8162 0.657 0.8075 0.658 0.8129 0.2983 0.1927 0.3226 0.1929 0.3212 0.1876 0.2959 0.188 0.658 0.8129 0.657 0.8075 0.6812 0.8089 0.6833 0.8137 0.2653 0.1951 0.2983 0.1927 0.2959 0.188 0.2653 0.1911 0.6833 0.8137 0.6812 0.8089 0.7143 0.8081 0.7141 0.8121 0.2333 0.1982 0.2653 0.1951 0.2653 0.1911 0.2345 0.1935 0.7141 0.8121 0.7143 0.8081 0.7463 0.8065 0.745 0.8112 0.140859 0.486222 0.126201 0.479684 0.12578 0.467792 0.140152 0.475789 0.12578 0.180365 0.110154 0.189646 0.109428 0.175595 0.126201 0.168473 0.147481 0.09078699 0.160546 0.06963098 0.169745 0.07437795 0.158307 0.09410196 0.120082 0.521991 0.107736 0.524101 0.092449 0.503672 0.106965 0.504309 0.107736 0.524101 0.120082 0.521991 0.133711 0.538424 0.122253 0.54035 0.124101 0.563912 0.139043 0.584815 0.127863 0.588639 0.111989 0.568454 0.140859 0.161934 0.140152 0.172367 0.12578 0.180365 0.126201 0.168473 0.07264596 0.478295 0.081272 0.50177 0.06956899 0.502697 0.06172698 0.47513 0.092449 0.503672 0.081272 0.50177 0.07264596 0.478295 0.08367496 0.481812 0.099478 0.574321 0.111989 0.568454 0.127863 0.588639 0.116051 0.593721 0.136153 0.560218 0.149845 0.581382 0.139043 0.584815 0.124101 0.563912 0.147481 0.55737 0.158307 0.554055 0.169745 0.573779 0.160546 0.578526 0.1710799 0.48029 0.15975 0.469115 0.165567 0.462006 0.176643 0.473767 0.078278 0.06068795 0.06694799 0.05346995 0.08337599 0.03016698 0.09402596 0.04091298 0.166968 0.09666395 0.174996 0.08141797 0.188306 0.07390898 0.17729 0.09523797 0.078278 0.587469 0.08744597 0.581184 0.104221 0.600311 0.09402596 0.607243 0.06305295 0.08290398 0.04831099 0.110077 0.03749996 0.1058109 0.05176699 0.07680696 0.122293 0.143342 0.112596 0.159708 0.09737598 0.16285 0.106965 0.143847 0.099478 0.574321 0.08455395 0.55538 0.09718 0.54964 0.111989 0.568454 0.168853 0.510066 0.1673319 0.502257 0.178784 0.50961 0.180679 0.516183 0.07326495 0.560257 0.06305295 0.565253 0.04831099 0.53808 0.05816596 0.534944 0.09718 0.098517 0.082488 0.120039 0.07057297 0.116681 0.08455395 0.09277695 0.09737598 0.485307 0.08367496 0.481812 0.08089995 0.461263 0.09408396 0.467349 0.136153 0.560218 0.147481 0.55737 0.160546 0.578526 0.149845 0.581382 0.078278 0.06068795 0.08744597 0.06697297 0.07326495 0.08789896 0.06305295 0.08290398 0.12578 0.467792 0.126201 0.479684 0.109428 0.472561 0.110154 0.458511 0.140152 0.172367 0.142527 0.181894 0.129919 0.1904979 0.12578 0.180365 0.06172698 0.173026 0.051045 0.175391 0.05786997 0.1447769 0.06956899 0.14546 0.155524 0.171385 0.15975 0.179041 0.1473219 0.190528 0.142527 0.181894 0.099478 0.07383495 0.111989 0.07970297 0.09718 0.098517 0.08455395 0.09277695 0.1710799 0.48029 0.1672199 0.487179 0.155524 0.476772 0.15975 0.469115 0.155524 0.476772 0.142527 0.466263 0.1473219 0.457629 0.15975 0.469115 0.02513098 0.142962 0.01989299 0.179843 0.008718967 0.1805289 0.01331299 0.1412709 0.08367496 0.166345 0.080899 0.1868939 0.07062 0.1933889 0.07264596 0.169862 0.04831099 0.53808 0.03749996 0.542345 0.02513098 0.505195 0.03584396 0.50422 0.099478 0.07383495 0.08744597 0.06697297 0.104221 0.04784494 0.116051 0.05443495 0.109428 0.472561 0.09408396 0.467349 0.095995 0.4504 0.110154 0.458511 0.129919 0.1904979 0.114978 0.203123 0.110154 0.189646 0.12578 0.180365 0.129882 0.492795 0.1441619 0.497476 0.15007 0.50956 0.136963 0.506099 0.122253 0.54035 0.1094689 0.54493 0.09512299 0.526307 0.107736 0.524101 0.107736 0.524101 0.09512299 0.526307 0.081272 0.50177 0.092449 0.503672 0.136963 0.142058 0.122293 0.143342 0.1337299 0.127385 0.146888 0.127828 0.02547895 0.1018069 0.03749996 0.1058109 0.02513098 0.142962 0.01331299 0.1412709 0.15613 0.113037 0.146888 0.127828 0.1337299 0.127385 0.145597 0.111617 0.157241 0.522351 0.146888 0.520328 0.136963 0.506099 0.15007 0.50956 0.15613 0.53512 0.164438 0.535151 0.17729 0.552918 0.166968 0.551492 0.122253 0.107807 0.107736 0.124055 0.09512299 0.12185 0.1094689 0.103226 0.078278 0.587469 0.06694799 0.594687 0.05176699 0.571349 0.06305295 0.565253 0.153842 0.1631889 0.155524 0.171385 0.142527 0.181894 0.140152 0.172367 0.1710799 0.167867 0.176643 0.174389 0.165567 0.186151 0.15975 0.179041 0.168853 0.138091 0.180679 0.131974 0.178784 0.138547 0.1673319 0.1458989 0.181766 0.110825 0.172496 0.1119289 0.1849189 0.096345 0.191817 0.09948498 0.158307 0.09410196 0.166968 0.09666395 0.15613 0.113037 0.145597 0.111617 0.136153 0.560218 0.124101 0.563912 0.1094689 0.54493 0.122253 0.54035 0.122253 0.107807 0.136153 0.08793896 0.147481 0.09078699 0.133711 0.109732 0.166968 0.09666395 0.158307 0.09410196 0.169745 0.07437795 0.174996 0.08141797 0.1673319 0.1458989 0.154757 0.153515 0.157344 0.143877 0.168853 0.138091 0.1337299 0.520771 0.120082 0.521991 0.106965 0.504309 0.122293 0.504815 0.107736 0.124055 0.092449 0.1444849 0.081272 0.146387 0.09512299 0.12185 0.129882 0.1553609 0.136963 0.142058 0.15007 0.138597 0.1441619 0.15068 0.142527 0.466263 0.129919 0.457659 0.13511 0.447653 0.1473219 0.457629 0.140152 0.475789 0.12578 0.467792 0.129919 0.457659 0.142527 0.466263 0.1094689 0.54493 0.124101 0.563912 0.111989 0.568454 0.09718 0.54964 0.120082 0.521991 0.1337299 0.520771 0.145597 0.53654 0.133711 0.538424 0.126201 0.479684 0.140859 0.486222 0.1441619 0.497476 0.129882 0.492795 0.126201 0.168473 0.109428 0.175595 0.112596 0.159708 0.129882 0.1553609 0.140859 0.486222 0.154757 0.494641 0.157344 0.504279 0.1441619 0.497476 0.153842 0.484967 0.140152 0.475789 0.142527 0.466263 0.155524 0.476772 0.112596 0.488448 0.09737598 0.485307 0.09408396 0.467349 0.109428 0.472561 0.1094689 0.103226 0.09512299 0.12185 0.082488 0.120039 0.09718 0.098517 0.05816596 0.113212 0.04579198 0.1438429 0.03584396 0.143936 0.04831099 0.110077 0.07057297 0.116681 0.082488 0.120039 0.06956899 0.14546 0.05786997 0.1447769 0.082488 0.528118 0.06956899 0.502697 0.081272 0.50177 0.09512299 0.526307 0.120082 0.126165 0.106965 0.143847 0.092449 0.1444849 0.107736 0.124055 0.122253 0.54035 0.133711 0.538424 0.147481 0.55737 0.136153 0.560218 0.1672199 0.487179 0.1667219 0.494875 0.153842 0.484967 0.155524 0.476772 0.1710799 0.167867 0.15975 0.179041 0.155524 0.171385 0.1672199 0.160977 0.109428 0.175595 0.110154 0.189646 0.095995 0.197757 0.09408396 0.180808 0.08455395 0.09277695 0.07057297 0.116681 0.05816596 0.113212 0.07326495 0.08789896 0.078278 0.06068795 0.09402596 0.04091298 0.104221 0.04784494 0.08744597 0.06697297 0.04038494 0.47096 0.04579198 0.504314 0.03584396 0.50422 0.03023999 0.469362 0.106965 0.143847 0.09737598 0.16285 0.08367496 0.166345 0.092449 0.1444849 0.107736 0.124055 0.122253 0.107807 0.133711 0.109732 0.120082 0.126165 0.146888 0.520328 0.157241 0.522351 0.164438 0.535151 0.15613 0.53512 0.126201 0.479684 0.129882 0.492795 0.112596 0.488448 0.109428 0.472561 0.02547895 0.54635 0.01331299 0.506886 0.02513098 0.505195 0.03749996 0.542345 0.133711 0.109732 0.147481 0.09078699 0.158307 0.09410196 0.145597 0.111617 0.04038494 0.177196 0.03023999 0.178794 0.03584396 0.143936 0.04579198 0.1438429 0.06694799 0.05346995 0.05176699 0.07680696 0.03959494 0.07155096 0.05433696 0.04620498 0.07057297 0.531475 0.05786997 0.50338 0.06956899 0.502697 0.082488 0.528118 0.1958259 0.082735 0.1849189 0.096345 0.17729 0.09523797 0.188306 0.07390898 0.08367496 0.481812 0.07264596 0.478295 0.07062 0.454767 0.08089995 0.461263 0.1723 0.518836 0.175786 0.528022 0.165669 0.525007 0.161642 0.514331 0.142527 0.181894 0.1473219 0.190528 0.13511 0.200503 0.129919 0.1904979 0.122293 0.504815 0.106965 0.504309 0.09737598 0.485307 0.112596 0.488448 0.129882 0.492795 0.136963 0.506099 0.122293 0.504815 0.112596 0.488448 0.1667219 0.494875 0.1672199 0.487179 0.177021 0.498457 0.177994 0.503882 0.051045 0.175391 0.04038494 0.177196 0.04579198 0.1438429 0.05786997 0.1447769 0.1337299 0.127385 0.122293 0.143342 0.106965 0.143847 0.120082 0.126165 0.15613 0.113037 0.166968 0.09666395 0.17729 0.09523797 0.164438 0.113005 0.1723 0.518836 0.168853 0.510066 0.180679 0.516183 0.18431 0.523224 0.07264596 0.169862 0.06172698 0.173026 0.06956899 0.14546 0.081272 0.146387 0.07057297 0.531475 0.05816596 0.534944 0.04579198 0.504314 0.05786997 0.50338 0.1672199 0.160977 0.155524 0.171385 0.153842 0.1631889 0.1667219 0.153282 0.06172698 0.47513 0.06956899 0.502697 0.05786997 0.50338 0.051045 0.472766 0.136963 0.506099 0.146888 0.520328 0.1337299 0.520771 0.122293 0.504815 0.175786 0.120134 0.165669 0.123149 0.172496 0.1119289 0.181766 0.110825 0.129882 0.1553609 0.112596 0.159708 0.122293 0.143342 0.136963 0.142058 0.133711 0.538424 0.145597 0.53654 0.158307 0.554055 0.147481 0.55737 0.051045 0.472766 0.05786997 0.50338 0.04579198 0.504314 0.04038494 0.47096 0.106965 0.504309 0.092449 0.503672 0.08367496 0.481812 0.09737598 0.485307 0.07326495 0.08789896 0.05816596 0.113212 0.04831099 0.110077 0.06305295 0.08290398 0.05816596 0.534944 0.04831099 0.53808 0.03584396 0.50422 0.04579198 0.504314 0.078278 0.587469 0.06305295 0.565253 0.07326495 0.560257 0.08744597 0.581184 0.140859 0.161934 0.1441619 0.15068 0.157344 0.143877 0.154757 0.153515 0.09737598 0.16285 0.09408396 0.180808 0.080899 0.1868939 0.08367496 0.166345 0.03584396 0.143936 0.03023999 0.178794 0.01989299 0.179843 0.02513098 0.142962 0.146888 0.127828 0.15613 0.113037 0.164438 0.113005 0.157241 0.125805 0.05176699 0.571349 0.03959494 0.576605 0.02547895 0.54635 0.03749996 0.542345 0.126201 0.168473 0.129882 0.1553609 0.1441619 0.15068 0.140859 0.161934 0.157241 0.125805 0.164438 0.113005 0.172496 0.1119289 0.165669 0.123149 0.136153 0.08793896 0.149845 0.06677401 0.160546 0.06963098 0.147481 0.09078699 0.136153 0.08793896 0.122253 0.107807 0.1094689 0.103226 0.124101 0.08424496 0.06305295 0.565253 0.05176699 0.571349 0.03749996 0.542345 0.04831099 0.53808 0.099478 0.574321 0.08744597 0.581184 0.07326495 0.560257 0.08455395 0.55538 0.1441619 0.15068 0.15007 0.138597 0.161642 0.133825 0.157344 0.143877 0.165669 0.123149 0.161642 0.133825 0.15007 0.138597 0.157241 0.125805 0.136153 0.08793896 0.124101 0.08424496 0.139043 0.06334197 0.149845 0.06677401 0.1094689 0.54493 0.09718 0.54964 0.082488 0.528118 0.09512299 0.526307 0.099478 0.574321 0.116051 0.593721 0.104221 0.600311 0.08744597 0.581184 0.1441619 0.497476 0.157344 0.504279 0.161642 0.514331 0.15007 0.50956 0.157241 0.125805 0.15007 0.138597 0.136963 0.142058 0.146888 0.127828 0.1094689 0.103226 0.09718 0.098517 0.111989 0.07970297 0.124101 0.08424496 0.082488 0.120039 0.09512299 0.12185 0.081272 0.146387 0.06956899 0.14546 0.09718 0.54964 0.08455395 0.55538 0.07057297 0.531475 0.082488 0.528118 0.154757 0.153515 0.153842 0.1631889 0.140152 0.172367 0.140859 0.161934 0.099478 0.07383495 0.116051 0.05443495 0.127863 0.05951797 0.111989 0.07970297 0.129919 0.457659 0.12578 0.467792 0.110154 0.458511 0.114978 0.445034 0.071662 0.627949 0.05433696 0.601952 0.06694799 0.594687 0.08337599 0.61799 0.191817 0.09948498 0.1849189 0.096345 0.1958259 0.082735 0.201144 0.08823096 0.15613 0.53512 0.145597 0.53654 0.1337299 0.520771 0.146888 0.520328 0.158307 0.554055 0.145597 0.53654 0.15613 0.53512 0.166968 0.551492 0.092449 0.1444849 0.08367496 0.166345 0.07264596 0.169862 0.081272 0.146387 0.078278 0.06068795 0.06305295 0.08290398 0.05176699 0.07680696 0.06694799 0.05346995 0.08455395 0.55538 0.07326495 0.560257 0.05816596 0.534944 0.07057297 0.531475 0.06694799 0.594687 0.05433696 0.601952 0.03959494 0.576605 0.05176699 0.571349 0.04831099 0.110077 0.03584396 0.143936 0.02513098 0.142962 0.03749996 0.1058109 0.1723 0.12932 0.161642 0.133825 0.165669 0.123149 0.175786 0.120134 0.168853 0.138091 0.157344 0.143877 0.161642 0.133825 0.1723 0.12932 0.078278 0.587469 0.09402596 0.607243 0.08337599 0.61799 0.06694799 0.594687 0.1673319 0.502257 0.1667219 0.494875 0.177994 0.503882 0.178784 0.50961 0.120082 0.126165 0.133711 0.109732 0.145597 0.111617 0.1337299 0.127385 0.164438 0.535151 0.172496 0.536228 0.1849189 0.551812 0.17729 0.552918 0.099478 0.07383495 0.08455395 0.09277695 0.07326495 0.08789896 0.08744597 0.06697297 0.1673319 0.502257 0.168853 0.510066 0.157344 0.504279 0.154757 0.494641 0.181766 0.537331 0.191817 0.548671 0.1849189 0.551812 0.172496 0.536228 0.02513098 0.505195 0.01331299 0.506886 0.008718967 0.467627 0.01989299 0.468314 0.164438 0.113005 0.17729 0.09523797 0.1849189 0.096345 0.172496 0.1119289 0.07057297 0.116681 0.05786997 0.1447769 0.04579198 0.1438429 0.05816596 0.113212 0.165669 0.525007 0.157241 0.522351 0.15007 0.50956 0.161642 0.514331 0.175786 0.528022 0.181766 0.537331 0.172496 0.536228 0.165669 0.525007 0.03584396 0.50422 0.02513098 0.505195 0.01989299 0.468314 0.03023999 0.469362 0.071662 0.02020698 0.08337599 0.03016698 0.06694799 0.05346995 0.05433696 0.04620498 0.166968 0.551492 0.17729 0.552918 0.188306 0.574247 0.174996 0.566738 0.05176699 0.07680696 0.03749996 0.1058109 0.02547895 0.1018069 0.03959494 0.07155096 0.168853 0.510066 0.1723 0.518836 0.161642 0.514331 0.157344 0.504279 0.1667219 0.494875 0.1673319 0.502257 0.154757 0.494641 0.153842 0.484967 0.112596 0.159708 0.109428 0.175595 0.09408396 0.180808 0.09737598 0.16285 0.154757 0.494641 0.140859 0.486222 0.140152 0.475789 0.153842 0.484967 0.157241 0.522351 0.165669 0.525007 0.172496 0.536228 0.164438 0.535151 0.1667219 0.153282 0.153842 0.1631889 0.154757 0.153515 0.1673319 0.1458989 0.166968 0.551492 0.174996 0.566738 0.169745 0.573779 0.158307 0.554055 0.124101 0.08424496 0.111989 0.07970297 0.127863 0.05951797 0.139043 0.06334197 0.118407 0.36947 0.1369079 0.362158 0.135881 0.374543 0.1191869 0.382669 0.1191869 0.382669 0.135881 0.374543 0.136918 0.388417 0.1219879 0.397429 0.153025 0.267592 0.136918 0.25974 0.139396 0.246527 0.153163 0.255027 0.117798 0.30095 0.117847 0.290514 0.137776 0.29588 0.139389 0.304602 0.17514 0.31869 0.158299 0.318171 0.157506 0.3125 0.174167 0.31325 0.153163 0.255027 0.139396 0.246527 0.144704 0.233217 0.157424 0.241301 0.171523 0.356125 0.170557 0.364661 0.153328 0.369029 0.154371 0.35927 0.153163 0.39313 0.157424 0.406855 0.144704 0.414939 0.139396 0.40163 0.137776 0.352277 0.156244 0.349832 0.154371 0.35927 0.1369079 0.362158 0.136918 0.25974 0.1219879 0.250728 0.126496 0.237756 0.139396 0.246527 0.153328 0.369029 0.170557 0.364661 0.170037 0.375716 0.153025 0.380565 0.1369079 0.285998 0.135881 0.273613 0.153328 0.279128 0.154371 0.288887 0.17514 0.329467 0.158299 0.329986 0.159029 0.32408 0.175765 0.32408 0.117847 0.290514 0.118407 0.278687 0.1369079 0.285998 0.137776 0.29588 0.14184 0.318187 0.143073 0.324077 0.121918 0.324077 0.12031 0.317629 0.153328 0.279128 0.153025 0.267592 0.170037 0.272441 0.170557 0.283495 0.17514 0.329467 0.174167 0.334907 0.157506 0.335657 0.158299 0.329986 0.172657 0.348086 0.171523 0.356125 0.154371 0.35927 0.156244 0.349832 0.169814 0.261208 0.153163 0.255027 0.157424 0.241301 0.171612 0.249875 0.11867 0.338083 0.1403329 0.336444 0.139389 0.343554 0.117798 0.347206 0.14184 0.329969 0.158299 0.329986 0.157506 0.335657 0.1403329 0.336444 0.139389 0.304602 0.137776 0.29588 0.156244 0.298324 0.156726 0.30593 0.118407 0.278687 0.1191869 0.265488 0.135881 0.273613 0.1369079 0.285998 0.17572 0.237426 0.171612 0.249875 0.157424 0.241301 0.16405 0.228181 0.172657 0.30007 0.156244 0.298324 0.154371 0.288887 0.171523 0.292032 0.173457 0.34096 0.172657 0.348086 0.156244 0.349832 0.156726 0.342227 0.136918 0.388417 0.139396 0.40163 0.126496 0.4104 0.1219879 0.397429 0.173457 0.307196 0.156726 0.30593 0.156244 0.298324 0.172657 0.30007 0.174167 0.334907 0.173457 0.34096 0.156726 0.342227 0.157506 0.335657 0.137776 0.29588 0.1369079 0.285998 0.154371 0.288887 0.156244 0.298324 0.1369079 0.362158 0.154371 0.35927 0.153328 0.369029 0.135881 0.374543 0.170037 0.272441 0.153025 0.267592 0.153163 0.255027 0.169814 0.261208 0.1403329 0.311712 0.139389 0.304602 0.156726 0.30593 0.157506 0.3125 0.169814 0.386949 0.171612 0.398282 0.157424 0.406855 0.153163 0.39313 0.117847 0.357643 0.137776 0.352277 0.1369079 0.362158 0.118407 0.36947 0.135881 0.273613 0.136918 0.25974 0.153025 0.267592 0.153328 0.279128 0.1403329 0.336444 0.157506 0.335657 0.156726 0.342227 0.139389 0.343554 0.158299 0.318171 0.159029 0.324077 0.143073 0.324077 0.14184 0.318187 0.170037 0.375716 0.169814 0.386949 0.153163 0.39313 0.153025 0.380565 0.14184 0.318187 0.1403329 0.311712 0.157506 0.3125 0.158299 0.318171 0.153025 0.380565 0.153163 0.39313 0.139396 0.40163 0.136918 0.388417 0.139389 0.343554 0.156726 0.342227 0.156244 0.349832 0.137776 0.352277 0.1191869 0.265488 0.1219879 0.250728 0.136918 0.25974 0.135881 0.273613 0.12031 0.330528 0.14184 0.329969 0.1403329 0.336444 0.11867 0.338083 0.135881 0.374543 0.153328 0.369029 0.153025 0.380565 0.136918 0.388417 0.174167 0.31325 0.157506 0.3125 0.156726 0.30593 0.173457 0.307196 0.171523 0.292032 0.154371 0.288887 0.153328 0.279128 0.170557 0.283495 0.12031 0.317629 0.11867 0.310074 0.1403329 0.311712 0.14184 0.318187 0.17514 0.31869 0.175765 0.324077 0.159029 0.324077 0.158299 0.318171 0.158299 0.329986 0.14184 0.329969 0.143073 0.32408 0.159029 0.32408 0.117798 0.347206 0.139389 0.343554 0.137776 0.352277 0.117847 0.357643 0.17572 0.41073 0.16405 0.419976 0.157424 0.406855 0.171612 0.398282 0.14184 0.329969 0.12031 0.330528 0.121918 0.32408 0.143073 0.32408 0.11867 0.310074 0.117798 0.30095 0.139389 0.304602 0.1403329 0.311712 0.09139198 0.345739 0.06475895 0.368433 0.05896496 0.359912 0.08946198 0.334758 0.117847 0.290514 0.09670299 0.279735 0.09965199 0.267018 0.118407 0.278687 0.067739 0.4217 0.06114494 0.448801 0.05182898 0.443185 0.06032198 0.412287 0.08725595 0.409816 0.08183699 0.398427 0.09965199 0.381139 0.102852 0.3943 0.117847 0.357643 0.118407 0.36947 0.09965199 0.381139 0.09670299 0.368422 0.117798 0.30095 0.11867 0.310074 0.09139198 0.302417 0.09365797 0.29133 0.117798 0.347206 0.09365797 0.356826 0.09139198 0.345739 0.11867 0.338083 0.09670299 0.368422 0.07563596 0.387054 0.07022297 0.377409 0.09365797 0.356826 0.12031 0.317629 0.08946198 0.313399 0.09139198 0.302417 0.11867 0.310074 0.095995 0.197757 0.102477 0.213647 0.09244698 0.226069 0.08416098 0.207146 0.12031 0.317629 0.121918 0.324077 0.08779197 0.324077 0.08946198 0.313399 0.110154 0.189646 0.114978 0.203123 0.102477 0.213647 0.095995 0.197757 0.09244698 0.226069 0.08725595 0.23834 0.07510095 0.217388 0.08416098 0.207146 0.102477 0.213647 0.114055 0.22705 0.107295 0.239756 0.09244698 0.226069 0.09244698 0.226069 0.107295 0.239756 0.102852 0.253857 0.08725595 0.23834 0.114978 0.203123 0.122236 0.21473 0.114055 0.22705 0.102477 0.213647 0.12031 0.330528 0.11867 0.338083 0.09139198 0.345739 0.08946198 0.334758 0.1191869 0.265488 0.118407 0.278687 0.09965199 0.267018 0.102852 0.253857 0.126496 0.237756 0.114055 0.22705 0.122236 0.21473 0.1331059 0.224556 0.1191869 0.382669 0.1219879 0.397429 0.107295 0.408401 0.102852 0.3943 0.1191869 0.265488 0.102852 0.253857 0.107295 0.239756 0.1219879 0.250728 0.1219879 0.250728 0.107295 0.239756 0.114055 0.22705 0.126496 0.237756 0.05182898 0.204971 0.04243195 0.210198 0.04038494 0.177196 0.051045 0.175391 0.07563596 0.387054 0.08183699 0.398427 0.067739 0.4217 0.06032198 0.412287 0.06475895 0.368433 0.07022297 0.377409 0.05295097 0.404523 0.04569399 0.39758 0.033454 0.214501 0.02459597 0.218079 0.01989299 0.179843 0.03023999 0.178794 0.12031 0.330528 0.08946198 0.334758 0.08779197 0.32408 0.121918 0.32408 0.09965199 0.381139 0.08183699 0.398427 0.07563596 0.387054 0.09670299 0.368422 0.04243195 0.210198 0.033454 0.214501 0.03023999 0.178794 0.04038494 0.177196 0.07510197 0.430769 0.08416098 0.44101 0.08089995 0.461263 0.07062 0.454767 0.06114494 0.199355 0.05182898 0.204971 0.051045 0.175391 0.06172698 0.173026 0.07062 0.1933889 0.06114494 0.199355 0.06172698 0.173026 0.07264596 0.169862 0.09244698 0.422088 0.08725595 0.409816 0.102852 0.3943 0.107295 0.408401 0.07510095 0.217388 0.067739 0.2264569 0.06114494 0.199355 0.07062 0.1933889 0.1191869 0.382669 0.102852 0.3943 0.09965199 0.381139 0.118407 0.36947 0.067739 0.2264569 0.06032198 0.235869 0.05182898 0.204971 0.06114494 0.199355 0.06032198 0.235869 0.05295097 0.243634 0.04243195 0.210198 0.05182898 0.204971 0.03821295 0.256953 0.02459597 0.218079 0.033454 0.214501 0.04569399 0.250577 0.03014796 0.262384 0.01392495 0.221455 0.02459597 0.218079 0.03821295 0.256953 0.06032198 0.412287 0.05182898 0.443185 0.04243195 0.437959 0.05295097 0.404523 0.04569399 0.250577 0.033454 0.214501 0.04243195 0.210198 0.05295097 0.243634 0.126496 0.4104 0.1331059 0.423601 0.122236 0.433426 0.114055 0.421107 0.03014796 0.385773 0.03821295 0.391204 0.02459597 0.430077 0.01392495 0.426702 0.03821295 0.391204 0.04569399 0.39758 0.033454 0.433656 0.02459597 0.430077 0.09365797 0.356826 0.07022297 0.377409 0.06475895 0.368433 0.09139198 0.345739 0.09408396 0.467349 0.08089995 0.461263 0.08416098 0.44101 0.095995 0.4504 0.07510095 0.217388 0.07062 0.1933889 0.080899 0.1868939 0.08416098 0.207146 0.07510197 0.430769 0.07062 0.454767 0.06114494 0.448801 0.067739 0.4217 0.114978 0.445034 0.102477 0.43451 0.114055 0.421107 0.122236 0.433426 0.05896496 0.359912 0.06475895 0.368433 0.04569399 0.39758 0.03821295 0.391204 0.117798 0.347206 0.117847 0.357643 0.09670299 0.368422 0.09365797 0.356826 0.08725595 0.23834 0.08183699 0.249729 0.067739 0.2264569 0.07510095 0.217388 0.102477 0.43451 0.09244698 0.422088 0.107295 0.408401 0.114055 0.421107 0.117798 0.30095 0.09365797 0.29133 0.09670299 0.279735 0.117847 0.290514 0.04569399 0.39758 0.05295097 0.404523 0.04243195 0.437959 0.033454 0.433656 0.05303496 0.352623 0.05896496 0.359912 0.03821295 0.391204 0.03014796 0.385773 0.05896496 0.288244 0.03821295 0.256953 0.04569399 0.250577 0.06475895 0.279724 0.110154 0.458511 0.095995 0.4504 0.102477 0.43451 0.114978 0.445034 0.08946198 0.334758 0.05896496 0.359912 0.05303496 0.352623 0.08779197 0.32408 0.05303496 0.295533 0.03014796 0.262384 0.03821295 0.256953 0.05896496 0.288244 0.095995 0.4504 0.08416098 0.44101 0.09244698 0.422088 0.102477 0.43451 0.06475895 0.279724 0.04569399 0.250577 0.05295097 0.243634 0.07022297 0.270748 0.07022297 0.270748 0.05295097 0.243634 0.06032198 0.235869 0.07563596 0.261103 0.09408396 0.180808 0.095995 0.197757 0.08416098 0.207146 0.080899 0.1868939 0.07563596 0.261103 0.06032198 0.235869 0.067739 0.2264569 0.08183699 0.249729 0.1219879 0.397429 0.126496 0.4104 0.114055 0.421107 0.107295 0.408401 0.01392495 0.221455 0.008718967 0.1805289 0.01989299 0.179843 0.02459597 0.218079 0.09244698 0.422088 0.08416098 0.44101 0.07510197 0.430769 0.08725595 0.409816 0.09139198 0.302417 0.08946198 0.313399 0.05896496 0.288244 0.06475895 0.279724 0.06114494 0.448801 0.06172698 0.47513 0.051045 0.472766 0.05182898 0.443185 0.08946198 0.313399 0.08779197 0.324077 0.05303496 0.295533 0.05896496 0.288244 0.05182898 0.443185 0.051045 0.472766 0.04038494 0.47096 0.04243195 0.437959 0.08725595 0.409816 0.07510197 0.430769 0.067739 0.4217 0.08183699 0.398427 0.09365797 0.29133 0.09139198 0.302417 0.06475895 0.279724 0.07022297 0.270748 0.04243195 0.437959 0.04038494 0.47096 0.03023999 0.469362 0.033454 0.433656 0.09670299 0.279735 0.09365797 0.29133 0.07022297 0.270748 0.07563596 0.261103 0.033454 0.433656 0.03023999 0.469362 0.01989299 0.468314 0.02459597 0.430077 0.07022297 0.377409 0.07563596 0.387054 0.06032198 0.412287 0.05295097 0.404523 0.09965199 0.267018 0.09670299 0.279735 0.07563596 0.261103 0.08183699 0.249729 0.07062 0.454767 0.07264596 0.478295 0.06172698 0.47513 0.06114494 0.448801 0.08725595 0.23834 0.102852 0.253857 0.09965199 0.267018 0.08183699 0.249729 0.01392495 0.426702 0.02459597 0.430077 0.01989299 0.468314 0.008718967 0.467627 0.302841 0.317509 0.301785 0.316149 0.302672 0.314512 0.304613 0.316103 0.301391 0.313914 0.302672 0.314512 0.301785 0.316149 0.300843 0.315412 0.301391 0.334242 0.300843 0.332744 0.301785 0.332008 0.302672 0.333644 0.307272 0.324079 0.306379 0.328216 0.303902 0.327451 0.303981 0.324079 0.301391 0.313914 0.300843 0.315412 0.300199 0.31519 0.300633 0.31328 0.301391 0.334242 0.300633 0.334876 0.300199 0.332966 0.300843 0.332744 0.30687 0.332604 0.304613 0.332053 0.306379 0.328216 0.309135 0.32855 0.304613 0.332053 0.30687 0.332604 0.304493 0.334569 0.302672 0.333644 0.302841 0.330647 0.304613 0.332053 0.302672 0.333644 0.301785 0.332008 0.304613 0.316103 0.302672 0.314512 0.304493 0.313587 0.30687 0.315552 0.306379 0.31994 0.303902 0.320706 0.302841 0.317509 0.304613 0.316103 0.30687 0.315552 0.309135 0.319606 0.306379 0.31994 0.304613 0.316103 0.306379 0.328216 0.304613 0.332053 0.302841 0.330647 0.303902 0.327451 0.307272 0.324077 0.303981 0.324077 0.303902 0.320706 0.306379 0.31994 0.370327 0.32408 0.369873 0.339208 0.359089 0.339043 0.361019 0.32408 0.337856 0.336147 0.342559 0.336412 0.340224 0.350472 0.335237 0.347658 0.359089 0.309113 0.357921 0.293116 0.369262 0.291764 0.369873 0.308949 0.337856 0.31201 0.335237 0.300498 0.340224 0.297685 0.342559 0.311745 0.337304 0.32408 0.337856 0.336147 0.332453 0.335229 0.332029 0.32408 0.337856 0.336147 0.335237 0.347658 0.330653 0.345551 0.332453 0.335229 0.340224 0.350472 0.342559 0.336412 0.348303 0.337454 0.34687 0.352618 0.337304 0.32408 0.343035 0.32408 0.342559 0.336412 0.337856 0.336147 0.337304 0.324077 0.337856 0.31201 0.342559 0.311745 0.343035 0.324077 0.359089 0.339043 0.369873 0.339208 0.369262 0.356392 0.357921 0.35504 0.359089 0.339043 0.357921 0.35504 0.34687 0.352618 0.348303 0.337454 0.361019 0.32408 0.359089 0.339043 0.348303 0.337454 0.349199 0.32408 0.361019 0.324077 0.349199 0.324077 0.348303 0.310702 0.359089 0.309113 0.340224 0.297685 0.34687 0.295539 0.348303 0.310702 0.342559 0.311745 0.343035 0.324077 0.342559 0.311745 0.348303 0.310702 0.349199 0.324077 0.370327 0.324077 0.361019 0.324077 0.359089 0.309113 0.369873 0.308949 0.337856 0.31201 0.332453 0.312927 0.330653 0.302605 0.335237 0.300498 0.343035 0.32408 0.349199 0.32408 0.348303 0.337454 0.342559 0.336412 0.359089 0.309113 0.348303 0.310702 0.34687 0.295539 0.357921 0.293116 0.337304 0.324077 0.332029 0.324077 0.332453 0.312927 0.337856 0.31201 0.369873 0.308949 0.369262 0.291764 0.384051 0.286192 0.386917 0.305391 0.386917 0.305391 0.384051 0.286192 0.402347 0.270368 0.410672 0.295011 0.369873 0.339208 0.386917 0.342766 0.384051 0.361965 0.369262 0.356392 0.370327 0.32408 0.388598 0.32408 0.386917 0.342766 0.369873 0.339208 0.369262 0.291764 0.367009 0.268659 0.379936 0.26292 0.384051 0.286192 0.384051 0.286192 0.379936 0.26292 0.392547 0.246998 0.402347 0.270368 0.370327 0.324077 0.369873 0.308949 0.386917 0.305391 0.388598 0.324077 0.388598 0.324077 0.386917 0.305391 0.410672 0.295011 0.413423 0.324077 0.386917 0.342766 0.410672 0.353146 0.402347 0.377789 0.384051 0.361965 0.384051 0.361965 0.402347 0.377789 0.392547 0.401159 0.379936 0.385236 0.369262 0.356392 0.384051 0.361965 0.379936 0.385236 0.367009 0.379498 0.388598 0.32408 0.413423 0.32408 0.410672 0.353146 0.386917 0.342766 0.371752 0.40883 0.379936 0.385236 0.392547 0.401159 0.380047 0.423919 0.371752 0.239326 0.380047 0.224238 0.392547 0.246998 0.379936 0.26292 0.206345 0.161556 0.207558 0.160486 0.208139 0.161097 0.207311 0.161942 0.20017 0.1619549 0.199116 0.164339 0.196826 0.168242 0.1967149 0.164477 0.207558 0.160486 0.208949 0.1597599 0.209229 0.1603839 0.208139 0.161097 0.208949 0.1597599 0.210623 0.159062 0.210526 0.159739 0.209229 0.1603839 0.19831 0.16076 0.2004539 0.157847 0.204317 0.1576589 0.202092 0.1594499 0.204711 0.16286 0.206345 0.161556 0.207311 0.161942 0.205893 0.1630319 0.2030799 0.173651 0.209993 0.176733 0.2107869 0.179305 0.20029 0.1766459 0.2004539 0.157847 0.202388 0.155811 0.206176 0.156388 0.204317 0.1576589 0.210702 0.162075 0.2100459 0.161198 0.21112 0.160616 0.211587 0.161679 0.204317 0.1576589 0.206176 0.156388 0.207998 0.158127 0.206558 0.159033 0.207112 0.1689209 0.210348 0.171736 0.209703 0.17277 0.206351 0.169934 0.198776 0.17066 0.2005749 0.164956 0.203644 0.164443 0.201786 0.168547 0.2005749 0.164956 0.198776 0.17066 0.196826 0.168242 0.199116 0.164339 0.198776 0.17066 0.201786 0.168547 0.2030799 0.173651 0.20029 0.1766459 0.2030799 0.173651 0.201786 0.168547 0.2035239 0.167735 0.204535 0.171603 0.202092 0.1594499 0.204317 0.1576589 0.206558 0.159033 0.2046779 0.160201 0.20017 0.1619549 0.202092 0.1594499 0.2046779 0.160201 0.2026039 0.162361 0.206176 0.156388 0.2082149 0.155219 0.2098979 0.1571 0.207998 0.158127 0.202388 0.155811 0.204713 0.154012 0.2082149 0.155219 0.206176 0.156388 0.207998 0.158127 0.2098979 0.1571 0.210623 0.159062 0.208949 0.1597599 0.2026039 0.162361 0.2046779 0.160201 0.206345 0.161556 0.204711 0.16286 0.211696 0.166025 0.207918 0.168277 0.208033 0.166655 0.210286 0.165535 0.1672199 0.160977 0.177021 0.149699 0.180572 0.156058 0.1710799 0.167867 0.210526 0.159739 0.210623 0.159062 0.211852 0.158434 0.211782 0.159337 0.206351 0.169934 0.209703 0.17277 0.2093459 0.174086 0.204535 0.171603 0.204711 0.16286 0.203644 0.164443 0.2005749 0.164956 0.2026039 0.162361 0.176643 0.174389 0.183743 0.163046 0.187611 0.168816 0.183555 0.180029 0.211953 0.162235 0.211587 0.161679 0.212832 0.161357 0.212978 0.1619279 0.211782 0.159337 0.212315 0.160202 0.21112 0.160616 0.210526 0.159739 0.2059389 0.166405 0.2035239 0.167735 0.204985 0.164342 0.206526 0.1644999 0.204535 0.171603 0.2093459 0.174086 0.209993 0.176733 0.2030799 0.173651 0.191323 0.184975 0.192719 0.171853 0.20029 0.1766459 0.199315 0.188482 0.209626 0.163606 0.209201 0.163145 0.209894 0.162567 0.210254 0.163054 0.1667219 0.153282 0.177994 0.144275 0.177021 0.149699 0.1672199 0.160977 0.2059389 0.166405 0.206351 0.169934 0.204535 0.171603 0.2035239 0.167735 0.1967149 0.164477 0.19831 0.16076 0.202092 0.1594499 0.20017 0.1619549 0.211567 0.163608 0.211088 0.16258 0.211953 0.162235 0.2128019 0.163175 0.210526 0.159739 0.21112 0.160616 0.2100459 0.161198 0.209229 0.1603839 0.210286 0.165535 0.208033 0.166655 0.208563 0.165269 0.210003 0.164502 0.210732 0.164062 0.210254 0.163054 0.211088 0.16258 0.211567 0.163608 0.211852 0.158434 0.210623 0.159062 0.2098979 0.1571 0.211446 0.156318 0.210003 0.164502 0.209626 0.163606 0.210254 0.163054 0.210732 0.164062 0.210702 0.162075 0.211088 0.16258 0.210254 0.163054 0.209894 0.162567 0.2046779 0.160201 0.206558 0.159033 0.207558 0.160486 0.206345 0.161556 0.2035239 0.167735 0.201786 0.168547 0.203644 0.164443 0.204985 0.164342 0.207903 0.164986 0.206526 0.1644999 0.207244 0.163474 0.208329 0.164283 0.206558 0.159033 0.207998 0.158127 0.208949 0.1597599 0.207558 0.160486 0.209024 0.161774 0.209894 0.162567 0.209201 0.163145 0.208154 0.162385 0.209894 0.162567 0.209024 0.161774 0.2100459 0.161198 0.210702 0.162075 0.209024 0.161774 0.208139 0.161097 0.209229 0.1603839 0.2100459 0.161198 0.1673319 0.1458989 0.178784 0.138547 0.177994 0.144275 0.1667219 0.153282 0.207244 0.163474 0.205893 0.1630319 0.207311 0.161942 0.208154 0.162385 0.208909 0.164565 0.208329 0.164283 0.209201 0.163145 0.209626 0.163606 0.208154 0.162385 0.207311 0.161942 0.208139 0.161097 0.209024 0.161774 0.207918 0.168277 0.2097859 0.167833 0.210445 0.168805 0.209717 0.170154 0.1710799 0.167867 0.180572 0.156058 0.183743 0.163046 0.176643 0.174389 0.210003 0.164502 0.208563 0.165269 0.208909 0.164565 0.209626 0.163606 0.207112 0.1689209 0.207918 0.168277 0.209717 0.170154 0.210348 0.171736 0.211587 0.161679 0.211953 0.162235 0.211088 0.16258 0.210702 0.162075 0.204985 0.164342 0.203644 0.164443 0.204711 0.16286 0.205893 0.1630319 0.207248 0.166526 0.207112 0.1689209 0.206351 0.169934 0.2059389 0.166405 0.207248 0.166526 0.208033 0.166655 0.207918 0.168277 0.207112 0.1689209 0.183555 0.180029 0.187611 0.168816 0.192719 0.171853 0.191323 0.184975 0.208329 0.164283 0.207244 0.163474 0.208154 0.162385 0.209201 0.163145 0.208563 0.165269 0.207903 0.164986 0.208329 0.164283 0.208909 0.164565 0.208033 0.166655 0.207248 0.166526 0.207903 0.164986 0.208563 0.165269 0.2107869 0.179305 0.209159 0.189163 0.199315 0.188482 0.20029 0.1766459 0.206526 0.1644999 0.204985 0.164342 0.205893 0.1630319 0.207244 0.163474 0.207248 0.166526 0.2059389 0.166405 0.206526 0.1644999 0.207903 0.164986 0.211587 0.161679 0.21112 0.160616 0.212315 0.160202 0.212832 0.161357 0.2005749 0.164956 0.199116 0.164339 0.20017 0.1619549 0.2026039 0.162361 0.211696 0.166025 0.210286 0.165535 0.2117429 0.164918 0.212706 0.16561 0.218589 0.164783 0.216883 0.16546 0.215848 0.164976 0.217029 0.164707 0.218323 0.169115 0.218372 0.168183 0.219892 0.1679559 0.219783 0.168982 0.2093459 0.174086 0.209703 0.17277 0.213505 0.173521 0.21489 0.174544 0.225643 0.167174 0.227248 0.168766 0.22528 0.168591 0.224265 0.167169 0.221987 0.164947 0.218589 0.164783 0.218141 0.16403 0.221728 0.164049 0.227071 0.174396 0.231232 0.173564 0.232243 0.176432 0.2296119 0.179639 0.224265 0.167169 0.22528 0.168591 0.224472 0.169384 0.22338 0.168555 0.218141 0.16403 0.218589 0.164783 0.217029 0.164707 0.21605 0.163909 0.244542 0.1728309 0.236977 0.174324 0.234575 0.173352 0.241856 0.172193 0.225049 0.173038 0.225791 0.171884 0.226962 0.172357 0.226651 0.173128 0.216883 0.16546 0.21777 0.166782 0.217172 0.167026 0.2159219 0.165973 0.248842 0.173542 0.240638 0.177486 0.236977 0.174324 0.244542 0.1728309 0.213247 0.172728 0.213505 0.173521 0.209703 0.17277 0.210348 0.171736 0.234244 0.171633 0.234575 0.173352 0.231232 0.173564 0.2315649 0.171936 0.225626 0.164783 0.224265 0.167169 0.222458 0.1657789 0.221987 0.164947 0.2296119 0.179639 0.224992 0.177054 0.2247509 0.174512 0.227071 0.174396 0.240638 0.177486 0.2296119 0.179639 0.232243 0.176432 0.236977 0.174324 0.218932 0.188359 0.218078 0.1782169 0.2296119 0.179639 0.232345 0.187012 0.213329 0.165101 0.214471 0.165819 0.213817 0.166416 0.212706 0.16561 0.210003 0.164502 0.210732 0.164062 0.2117429 0.164918 0.210286 0.165535 0.216996 0.169683 0.2177399 0.170002 0.217396 0.17147 0.2163619 0.170832 0.2130129 0.167113 0.213817 0.166416 0.215028 0.166837 0.214622 0.167652 0.2296119 0.179639 0.218078 0.1782169 0.220227 0.1772029 0.224992 0.177054 0.234244 0.171633 0.233063 0.1679069 0.240113 0.168668 0.239066 0.170707 0.2151899 0.165346 0.2159219 0.165973 0.2154549 0.166356 0.214471 0.165819 0.2117429 0.164918 0.21242 0.164336 0.213329 0.165101 0.212706 0.16561 0.211696 0.166025 0.2130129 0.167113 0.211524 0.167514 0.210976 0.1673 0.212405 0.16886 0.210348 0.171736 0.209717 0.170154 0.210445 0.168805 0.234244 0.171633 0.239066 0.170707 0.241856 0.172193 0.234575 0.173352 0.21741 0.16884 0.218323 0.169115 0.2177399 0.170002 0.216996 0.169683 0.210732 0.164062 0.211567 0.163608 0.21242 0.164336 0.2117429 0.164918 0.228397 0.166819 0.225626 0.164783 0.226312 0.163801 0.2298009 0.1665509 0.216177 0.176154 0.209993 0.176733 0.2093459 0.174086 0.21489 0.174544 0.219576 0.170126 0.2177399 0.170002 0.218323 0.169115 0.219783 0.168982 0.2214249 0.169439 0.221177 0.170805 0.219576 0.170126 0.219783 0.168982 0.224002 0.1727319 0.223204 0.174538 0.221695 0.17436 0.223166 0.172206 0.240638 0.177486 0.247591 0.185044 0.232345 0.187012 0.2296119 0.179639 0.218932 0.188359 0.209159 0.189163 0.2107869 0.179305 0.218078 0.1782169 0.224002 0.1727319 0.2252849 0.171705 0.225791 0.171884 0.225049 0.173038 0.223166 0.172206 0.224836 0.171468 0.2252849 0.171705 0.224002 0.1727319 0.220227 0.1772029 0.223204 0.174538 0.2247509 0.174512 0.224992 0.177054 0.218078 0.1782169 0.221695 0.17436 0.223204 0.174538 0.220227 0.1772029 0.226312 0.163801 0.227749 0.162852 0.23232 0.164229 0.2298009 0.1665509 0.207918 0.168277 0.211696 0.166025 0.210976 0.1673 0.2097859 0.167833 0.215813 0.168363 0.214488 0.1687639 0.214622 0.167652 0.215028 0.166837 0.214488 0.1687639 0.215813 0.168363 0.215184 0.1709499 0.213941 0.170211 0.216996 0.169683 0.215813 0.168363 0.216406 0.167495 0.21741 0.16884 0.225049 0.173038 0.2247509 0.174512 0.223204 0.174538 0.224002 0.1727319 0.215813 0.168363 0.216996 0.169683 0.2163619 0.170832 0.215184 0.1709499 0.219669 0.166205 0.218589 0.164783 0.221987 0.164947 0.222458 0.1657789 0.21741 0.16884 0.216406 0.167495 0.217172 0.167026 0.217799 0.168074 0.2097859 0.167833 0.210976 0.1673 0.211524 0.167514 0.210445 0.168805 0.217799 0.168074 0.218519 0.166648 0.2189739 0.16708 0.218372 0.168183 0.2154549 0.166356 0.216406 0.167495 0.215813 0.168363 0.215028 0.166837 0.224265 0.167169 0.225626 0.164783 0.228397 0.166819 0.225643 0.167174 0.210445 0.168805 0.211524 0.167514 0.2130129 0.167113 0.212405 0.16886 0.226312 0.163801 0.221728 0.164049 0.22154 0.163529 0.222656 0.162291 0.221728 0.164049 0.226312 0.163801 0.225626 0.164783 0.221987 0.164947 0.217172 0.167026 0.21777 0.166782 0.218519 0.166648 0.217799 0.168074 0.218372 0.168183 0.2189739 0.16708 0.219669 0.166205 0.219892 0.1679559 0.21492 0.164166 0.214114 0.163376 0.215085 0.163049 0.21605 0.163909 0.21407 0.164606 0.2132019 0.1639 0.214114 0.163376 0.21492 0.164166 0.216977 0.162977 0.22154 0.163529 0.221728 0.164049 0.218141 0.16403 0.215848 0.164976 0.216883 0.16546 0.2159219 0.165973 0.2151899 0.165346 0.21492 0.164166 0.215848 0.164976 0.2151899 0.165346 0.21407 0.164606 0.215184 0.1709499 0.213247 0.172728 0.210348 0.171736 0.213941 0.170211 0.2315649 0.171936 0.2296169 0.171313 0.2294459 0.170934 0.230534 0.168786 0.230534 0.168786 0.2294459 0.170934 0.228978 0.168949 0.228397 0.166819 0.222948 0.170002 0.224243 0.1702229 0.224265 0.170776 0.2228879 0.1710399 0.2228879 0.1710399 0.224265 0.170776 0.224836 0.171468 0.223166 0.172206 0.228397 0.166819 0.228978 0.168949 0.227248 0.168766 0.225643 0.167174 0.226651 0.173128 0.226962 0.172357 0.2296169 0.171313 0.2315649 0.171936 0.22338 0.168555 0.224472 0.169384 0.224243 0.1702229 0.222948 0.170002 0.233063 0.1679069 0.230534 0.168786 0.228397 0.166819 0.2298009 0.1665509 0.236977 0.174324 0.232243 0.176432 0.231232 0.173564 0.234575 0.173352 0.227071 0.174396 0.2247509 0.174512 0.225049 0.173038 0.226651 0.173128 0.21685 0.1620669 0.222656 0.162291 0.22154 0.163529 0.216977 0.162977 0.222948 0.170002 0.2228879 0.1710399 0.221177 0.170805 0.2214249 0.169439 0.221177 0.170805 0.221114 0.172003 0.219144 0.171358 0.219576 0.170126 0.2228879 0.1710399 0.223166 0.172206 0.221114 0.172003 0.221177 0.170805 0.21605 0.163909 0.217029 0.164707 0.215848 0.164976 0.21492 0.164166 0.21242 0.164336 0.2132019 0.1639 0.21407 0.164606 0.213329 0.165101 0.211567 0.163608 0.2128019 0.163175 0.2132019 0.1639 0.21242 0.164336 0.213247 0.172728 0.215184 0.1709499 0.2163619 0.170832 0.215412 0.172278 0.219892 0.1679559 0.219669 0.166205 0.222458 0.1657789 0.221728 0.167913 0.215412 0.172278 0.216803 0.172915 0.213505 0.173521 0.213247 0.172728 0.218078 0.1782169 0.2107869 0.179305 0.209993 0.176733 0.216177 0.176154 0.215085 0.163049 0.216977 0.162977 0.218141 0.16403 0.21605 0.163909 0.219783 0.168982 0.219892 0.1679559 0.221728 0.167913 0.2214249 0.169439 0.220425 0.174414 0.221114 0.172003 0.223166 0.172206 0.221695 0.17436 0.21813 0.173129 0.219144 0.171358 0.221114 0.172003 0.220425 0.174414 0.21489 0.174544 0.213505 0.173521 0.216803 0.172915 0.21813 0.173129 0.234244 0.171633 0.2315649 0.171936 0.230534 0.168786 0.233063 0.1679069 0.227071 0.174396 0.226651 0.173128 0.2315649 0.171936 0.231232 0.173564 0.214471 0.165819 0.2154549 0.166356 0.215028 0.166837 0.213817 0.166416 0.212706 0.16561 0.213817 0.166416 0.2130129 0.167113 0.211696 0.166025 0.221728 0.167913 0.222458 0.1657789 0.224265 0.167169 0.22338 0.168555 0.219144 0.171358 0.217396 0.17147 0.2177399 0.170002 0.219576 0.170126 0.213941 0.170211 0.210348 0.171736 0.212405 0.16886 0.214488 0.1687639 0.21407 0.164606 0.2151899 0.165346 0.214471 0.165819 0.213329 0.165101 0.218372 0.168183 0.218323 0.169115 0.21741 0.16884 0.217799 0.168074 0.217396 0.17147 0.216803 0.172915 0.215412 0.172278 0.2163619 0.170832 0.216803 0.172915 0.217396 0.17147 0.219144 0.171358 0.21813 0.173129 0.214488 0.1687639 0.212405 0.16886 0.2130129 0.167113 0.214622 0.167652 0.221695 0.17436 0.218078 0.1782169 0.216177 0.176154 0.220425 0.174414 0.220425 0.174414 0.216177 0.176154 0.21489 0.174544 0.21813 0.173129 0.218589 0.164783 0.218519 0.166648 0.21777 0.166782 0.216883 0.16546 0.218519 0.166648 0.218589 0.164783 0.219669 0.166205 0.2189739 0.16708 0.2159219 0.165973 0.217172 0.167026 0.216406 0.167495 0.2154549 0.166356 0.2214249 0.169439 0.221728 0.167913 0.22338 0.168555 0.222948 0.170002 0.239612 0.161906 0.238264 0.159692 0.239062 0.158578 0.241363 0.161541 0.261714 0.178944 0.247591 0.185044 0.240638 0.177486 0.248842 0.173542 0.240113 0.168668 0.240433 0.165183 0.243321 0.164543 0.244116 0.168502 0.235004 0.159063 0.235716 0.15668 0.239062 0.158578 0.238264 0.159692 0.235493 0.161673 0.235004 0.159063 0.238264 0.159692 0.239612 0.161906 0.233063 0.1679069 0.235493 0.164007 0.240433 0.165183 0.240113 0.168668 0.235493 0.164007 0.235493 0.161673 0.239612 0.161906 0.240433 0.165183 0.240433 0.165183 0.239612 0.161906 0.241363 0.161541 0.243321 0.164543 0.240113 0.168668 0.244116 0.168502 0.241856 0.172193 0.239066 0.170707 0.244116 0.168502 0.243321 0.164543 0.246954 0.164367 0.2471629 0.168052 0.298549 0.177678 0.290377 0.184204 0.271873 0.173187 0.278014 0.1662639 0.258163 0.156881 0.254546 0.149803 0.276064 0.150075 0.278699 0.158731 0.620475 0.862551 0.618578 0.862958 0.616115 0.857586 0.61947 0.857187 0.271873 0.173187 0.290377 0.184204 0.277363 0.191726 0.261714 0.178944 0.237027 0.155115 0.238607 0.149962 0.245916 0.155382 0.240846 0.156167 0.244542 0.1728309 0.2471629 0.168052 0.251996 0.166424 0.248842 0.173542 0.241856 0.172193 0.244116 0.168502 0.2471629 0.168052 0.244542 0.1728309 0.239062 0.158578 0.235716 0.15668 0.237027 0.155115 0.240846 0.156167 0.246954 0.164367 0.244397 0.160971 0.248933 0.158807 0.251472 0.162343 0.243321 0.164543 0.241363 0.161541 0.244397 0.160971 0.246954 0.164367 0.244397 0.160971 0.240846 0.156167 0.245916 0.155382 0.248933 0.158807 0.241363 0.161541 0.239062 0.158578 0.240846 0.156167 0.244397 0.160971 0.2471629 0.168052 0.246954 0.164367 0.251472 0.162343 0.251996 0.166424 0.248842 0.173542 0.25845 0.169018 0.271873 0.173187 0.261714 0.178944 0.278014 0.1662639 0.271873 0.173187 0.25845 0.169018 0.261211 0.16331 0.254546 0.149803 0.2453539 0.142791 0.269422 0.137822 0.276064 0.150075 0.261211 0.16331 0.258163 0.156881 0.278699 0.158731 0.278014 0.1662639 0.213243 0.158936 0.213685 0.15988 0.212315 0.160202 0.211782 0.159337 0.212832 0.161357 0.212315 0.160202 0.213685 0.15988 0.214249 0.161081 0.2332749 0.156944 0.22914 0.156879 0.2297289 0.155484 0.234033 0.154605 0.22458 0.157039 0.216373 0.158223 0.215987 0.157126 0.224775 0.155418 0.235716 0.15668 0.2332749 0.156944 0.234033 0.154605 0.237027 0.155115 0.22914 0.156879 0.22458 0.157039 0.224775 0.155418 0.2297289 0.155484 0.214618 0.162487 0.21685 0.1620669 0.216977 0.162977 0.215085 0.163049 0.227906 0.161096 0.232069 0.161938 0.23232 0.164229 0.227749 0.162852 0.225916 0.149434 0.224296 0.1509529 0.220736 0.1512359 0.21973 0.149295 0.228184 0.1590639 0.22914 0.156879 0.2332749 0.156944 0.2323279 0.159093 0.175786 0.120134 0.181766 0.110825 0.192237 0.112381 0.187894 0.119216 0.238607 0.149962 0.237027 0.155115 0.234033 0.154605 0.230381 0.151857 0.228184 0.1590639 0.2323279 0.159093 0.232069 0.161938 0.227906 0.161096 0.22466 0.158726 0.216311 0.159588 0.216373 0.158223 0.22458 0.157039 0.21325 0.152757 0.210364 0.154178 0.2079499 0.152585 0.211719 0.151003 0.224718 0.160575 0.216682 0.160805 0.216311 0.159588 0.22466 0.158726 0.213384 0.1555269 0.211446 0.156318 0.210364 0.154178 0.21325 0.152757 0.224718 0.160575 0.223694 0.161222 0.2167299 0.161204 0.216682 0.160805 0.224296 0.1509529 0.225916 0.149434 0.230381 0.151857 0.225273 0.152512 0.222656 0.162291 0.21685 0.1620669 0.2167299 0.161204 0.223694 0.161222 0.211446 0.156318 0.2098979 0.1571 0.2082149 0.155219 0.210364 0.154178 0.220736 0.1512359 0.216634 0.151776 0.215296 0.150131 0.21973 0.149295 0.230381 0.151857 0.225916 0.149434 0.231404 0.148084 0.238607 0.149962 0.210364 0.154178 0.2082149 0.155219 0.204713 0.154012 0.2079499 0.152585 0.201037 0.105539 0.192237 0.112381 0.181766 0.110825 0.191817 0.09948498 0.2297289 0.155484 0.224775 0.155418 0.220912 0.153216 0.225273 0.152512 0.220912 0.153216 0.216093 0.154563 0.216634 0.151776 0.220736 0.1512359 0.214114 0.163376 0.213723 0.162901 0.214618 0.162487 0.215085 0.163049 0.212978 0.1619279 0.212832 0.161357 0.214249 0.161081 0.214196 0.161592 0.216373 0.158223 0.213243 0.158936 0.213487 0.157977 0.215987 0.157126 0.191817 0.09948498 0.201144 0.08823096 0.20642 0.09880095 0.201037 0.105539 0.623336 0.860567 0.623491 0.862865 0.620475 0.862551 0.61947 0.857187 0.187894 0.119216 0.18431 0.124933 0.1723 0.12932 0.175786 0.120134 0.225273 0.152512 0.220912 0.153216 0.220736 0.1512359 0.224296 0.1509529 0.235004 0.159063 0.235493 0.161673 0.232069 0.161938 0.2323279 0.159093 0.214196 0.161592 0.2167299 0.161204 0.21685 0.1620669 0.214618 0.162487 0.214249 0.161081 0.216682 0.160805 0.2167299 0.161204 0.214196 0.161592 0.223694 0.161222 0.227749 0.162852 0.226312 0.163801 0.222656 0.162291 0.22466 0.158726 0.22458 0.157039 0.22914 0.156879 0.228184 0.1590639 0.235493 0.164007 0.233063 0.1679069 0.2298009 0.1665509 0.23232 0.164229 0.216634 0.151776 0.21325 0.152757 0.211719 0.151003 0.215296 0.150131 0.235493 0.161673 0.235493 0.164007 0.23232 0.164229 0.232069 0.161938 0.216093 0.154563 0.213384 0.1555269 0.21325 0.152757 0.216634 0.151776 0.2323279 0.159093 0.2332749 0.156944 0.235716 0.15668 0.235004 0.159063 0.213487 0.157977 0.211852 0.158434 0.211446 0.156318 0.213384 0.1555269 0.234033 0.154605 0.2297289 0.155484 0.225273 0.152512 0.230381 0.151857 0.224775 0.155418 0.215987 0.157126 0.216093 0.154563 0.220912 0.153216 0.215987 0.157126 0.213487 0.157977 0.213384 0.1555269 0.216093 0.154563 0.224718 0.160575 0.227906 0.161096 0.227749 0.162852 0.223694 0.161222 0.211782 0.159337 0.211852 0.158434 0.213487 0.157977 0.213243 0.158936 0.216311 0.159588 0.213685 0.15988 0.213243 0.158936 0.216373 0.158223 0.2132019 0.1639 0.2128019 0.163175 0.213723 0.162901 0.214114 0.163376 0.214249 0.161081 0.213685 0.15988 0.216311 0.159588 0.216682 0.160805 0.1723 0.12932 0.18431 0.124933 0.180679 0.131974 0.168853 0.138091 0.224718 0.160575 0.22466 0.158726 0.228184 0.1590639 0.227906 0.161096 0.213723 0.162901 0.212978 0.1619279 0.214196 0.161592 0.214618 0.162487 0.2128019 0.163175 0.211953 0.162235 0.212978 0.1619279 0.213723 0.162901 0.198239 0.319232 0.187728 0.318716 0.187132 0.31344 0.197686 0.31428 0.187132 0.31344 0.174167 0.31325 0.173457 0.307196 0.186542 0.308179 0.197686 0.31428 0.187132 0.31344 0.186542 0.308179 0.196726 0.308978 0.187728 0.318716 0.17514 0.31869 0.174167 0.31325 0.187132 0.31344 0.187728 0.318716 0.198239 0.319232 0.198593 0.324077 0.188141 0.324077 0.187728 0.318716 0.188141 0.324077 0.175765 0.324077 0.17514 0.31869 0.186542 0.308179 0.173457 0.307196 0.172657 0.30007 0.185668 0.301682 0.186542 0.308179 0.185668 0.301682 0.19538 0.303069 0.196726 0.308978 0.225576 0.293629 0.223695 0.292761 0.22569 0.291688 0.2271749 0.291751 0.224761 0.295025 0.223399 0.294134 0.223695 0.292761 0.225576 0.293629 0.223066 0.296613 0.223567 0.296618 0.223713 0.29726 0.223352 0.297334 0.2226459 0.293194 0.221888 0.290862 0.2220889 0.290671 0.223695 0.292761 0.221821 0.294035 0.2211959 0.29349 0.2226459 0.293194 0.222809 0.293933 0.223066 0.296613 0.222456 0.295834 0.223542 0.295315 0.223567 0.296618 0.227545 0.296037 0.2265779 0.294578 0.227916 0.292671 0.22916 0.293589 0.226197 0.29771 0.22559 0.296183 0.2265779 0.294578 0.227545 0.296037 0.2265779 0.294578 0.225576 0.293629 0.2271749 0.291751 0.227916 0.292671 0.22559 0.296183 0.224761 0.295025 0.225576 0.293629 0.2265779 0.294578 0.223542 0.295315 0.223034 0.294701 0.222809 0.293933 0.223399 0.294134 0.223713 0.29726 0.224123 0.296407 0.224813 0.297196 0.2238579 0.297935 0.223399 0.294134 0.222809 0.293933 0.2226459 0.293194 0.223695 0.292761 0.223567 0.296618 0.223542 0.295315 0.224123 0.296407 0.223713 0.29726 0.224813 0.297196 0.22559 0.296183 0.226197 0.29771 0.225147 0.298714 0.224123 0.296407 0.224761 0.295025 0.22559 0.296183 0.224813 0.297196 0.223542 0.295315 0.223399 0.294134 0.224761 0.295025 0.224123 0.296407 0.2238579 0.297935 0.224813 0.297196 0.225147 0.298714 0.22411 0.299375 0.223352 0.297334 0.223713 0.29726 0.2238579 0.297935 0.223055 0.297986 0.22916 0.293589 0.227916 0.292671 0.228933 0.290329 0.23048 0.290942 0.227916 0.292671 0.2271749 0.291751 0.2278299 0.29014 0.228933 0.290329 0.2271749 0.291751 0.22569 0.291688 0.2224839 0.289878 0.2278299 0.29014 0.2224839 0.289878 0.22569 0.291688 0.223695 0.292761 0.2220889 0.290671 0.229726 0.285711 0.2292529 0.283307 0.231114 0.281851 0.231531 0.284935 0.229604 0.287699 0.229726 0.285711 0.231531 0.284935 0.231451 0.287718 0.228558 0.28778 0.228653 0.285925 0.229726 0.285711 0.229604 0.287699 0.222596 0.288452 0.222508 0.287208 0.228653 0.285925 0.228558 0.28778 0.2224839 0.289878 0.222596 0.288452 0.228558 0.28778 0.2278299 0.29014 0.2278299 0.29014 0.228558 0.28778 0.229604 0.287699 0.228933 0.290329 0.228933 0.290329 0.229604 0.287699 0.231451 0.287718 0.23048 0.290942 0.228653 0.285925 0.22829 0.283881 0.2292529 0.283307 0.229726 0.285711 0.222508 0.287208 0.222175 0.285921 0.22829 0.283881 0.228653 0.285925 0.222175 0.285921 0.221465 0.284663 0.227441 0.28191 0.22829 0.283881 0.22829 0.283881 0.227441 0.28191 0.228291 0.281278 0.2292529 0.283307 0.2292529 0.283307 0.228291 0.281278 0.229803 0.278952 0.231114 0.281851 0.2335309 0.292023 0.235206 0.28748 0.238598 0.288406 0.236539 0.294031 0.238849 0.276831 0.244226 0.273625 0.243925 0.282072 0.239421 0.283032 0.238598 0.288406 0.235206 0.28748 0.235516 0.283709 0.239421 0.283032 0.234847 0.279298 0.233259 0.27472 0.236658 0.270411 0.238849 0.276831 0.234847 0.279298 0.238849 0.276831 0.239421 0.283032 0.235516 0.283709 0.238849 0.276831 0.236658 0.270411 0.24208 0.264573 0.244226 0.273625 0.231451 0.287718 0.231531 0.284935 0.235516 0.283709 0.235206 0.28748 0.23048 0.290942 0.231451 0.287718 0.235206 0.28748 0.2335309 0.292023 0.231531 0.284935 0.231114 0.281851 0.234847 0.279298 0.235516 0.283709 0.231114 0.281851 0.229803 0.278952 0.233259 0.27472 0.234847 0.279298 0.22291 0.276439 0.222653 0.27831 0.220642 0.277908 0.220962 0.275389 0.222653 0.27831 0.220266 0.282572 0.220077 0.282245 0.220642 0.277908 0.220642 0.277908 0.220077 0.282245 0.219843 0.282105 0.2190639 0.277995 0.22291 0.276439 0.225047 0.277692 0.2244009 0.278919 0.222653 0.27831 0.223441 0.273466 0.225866 0.274592 0.225047 0.277692 0.22291 0.276439 0.2269549 0.279322 0.225047 0.277692 0.225866 0.274592 0.227991 0.276596 0.226319 0.280429 0.2244009 0.278919 0.225047 0.277692 0.2269549 0.279322 0.221642 0.273029 0.223441 0.273466 0.22291 0.276439 0.220962 0.275389 0.220965 0.28368 0.220533 0.283014 0.2244009 0.278919 0.226319 0.280429 0.221465 0.284663 0.220965 0.28368 0.226319 0.280429 0.227441 0.28191 0.227441 0.28191 0.226319 0.280429 0.2269549 0.279322 0.228291 0.281278 0.228291 0.281278 0.2269549 0.279322 0.227991 0.276596 0.229803 0.278952 0.220962 0.275389 0.220642 0.277908 0.2190639 0.277995 0.21905 0.274813 0.222653 0.27831 0.2244009 0.278919 0.220533 0.283014 0.220266 0.282572 0.220962 0.275389 0.21905 0.274813 0.220782 0.270847 0.221642 0.273029 0.2183859 0.267924 0.2174029 0.26113 0.220786 0.258256 0.220961 0.265301 0.224469 0.263949 0.2255859 0.256231 0.231627 0.255815 0.228721 0.263708 0.223441 0.273466 0.221642 0.273029 0.220782 0.270847 0.223752 0.269031 0.224469 0.263949 0.223752 0.269031 0.220782 0.270847 0.220961 0.265301 0.224469 0.263949 0.220961 0.265301 0.220786 0.258256 0.2255859 0.256231 0.228721 0.263708 0.226853 0.269198 0.223752 0.269031 0.224469 0.263949 0.230442 0.271492 0.226853 0.269198 0.228721 0.263708 0.233128 0.265494 0.233259 0.27472 0.230442 0.271492 0.233128 0.265494 0.236658 0.270411 0.223441 0.273466 0.223752 0.269031 0.226853 0.269198 0.225866 0.274592 0.227991 0.276596 0.225866 0.274592 0.226853 0.269198 0.230442 0.271492 0.233128 0.265494 0.228721 0.263708 0.231627 0.255815 0.237855 0.257861 0.229803 0.278952 0.227991 0.276596 0.230442 0.271492 0.233259 0.27472 0.21905 0.274813 0.2183859 0.267924 0.220961 0.265301 0.220782 0.270847 0.236658 0.270411 0.233128 0.265494 0.237855 0.257861 0.24208 0.264573 0.1843129 0.294155 0.171523 0.292032 0.170557 0.283495 0.182964 0.285874 0.185668 0.301682 0.172657 0.30007 0.171523 0.292032 0.1843129 0.294155 0.170557 0.283495 0.170037 0.272441 0.1824679 0.276839 0.182964 0.285874 0.182685 0.223089 0.191937 0.23461 0.187104 0.246647 0.17572 0.237426 0.182887 0.267453 0.169814 0.261208 0.171612 0.249875 0.184613 0.258996 0.1824679 0.276839 0.170037 0.272441 0.169814 0.261208 0.182887 0.267453 0.187104 0.246647 0.184613 0.258996 0.171612 0.249875 0.17572 0.237426 0.217138 0.295204 0.219986 0.296684 0.219657 0.29766 0.216561 0.296032 0.221348 0.294926 0.222456 0.295834 0.222078 0.297008 0.220632 0.295745 0.218527 0.29373 0.220483 0.290457 0.221558 0.290917 0.2211959 0.29349 0.213357 0.293657 0.214586 0.293049 0.217138 0.295204 0.216561 0.296032 0.2211959 0.29349 0.221558 0.290917 0.221888 0.290862 0.2226459 0.293194 0.222456 0.295834 0.221348 0.294926 0.221821 0.294035 0.222452 0.294811 0.222456 0.295834 0.222452 0.294811 0.223034 0.294701 0.223542 0.295315 0.222809 0.293933 0.223034 0.294701 0.222452 0.294811 0.221821 0.294035 0.221803 0.29781 0.223055 0.297986 0.2230949 0.299193 0.221734 0.298737 0.218527 0.29373 0.2211959 0.29349 0.221821 0.294035 0.221348 0.294926 0.223999 0.304633 0.221866 0.304309 0.2225559 0.301288 0.224079 0.301377 0.219666 0.302587 0.217175 0.301059 0.218654 0.298927 0.220672 0.300175 0.221866 0.304309 0.219666 0.302587 0.220672 0.300175 0.2225559 0.301288 0.215363 0.297154 0.218654 0.298927 0.217175 0.301059 0.213106 0.298941 0.220632 0.295745 0.222078 0.297008 0.221803 0.29781 0.219986 0.296684 0.217175 0.301059 0.219666 0.302587 0.2183859 0.306138 0.2153069 0.303738 0.219666 0.302587 0.221866 0.304309 0.221195 0.307594 0.2183859 0.306138 0.215363 0.297154 0.213106 0.298941 0.209604 0.2951 0.211808 0.294036 0.218527 0.29373 0.221348 0.294926 0.220632 0.295745 0.218151 0.294151 0.218151 0.294151 0.220632 0.295745 0.219986 0.296684 0.217138 0.295204 0.219986 0.296684 0.221803 0.29781 0.221734 0.298737 0.219657 0.29766 0.222456 0.295834 0.223066 0.296613 0.223352 0.297334 0.222078 0.297008 0.222078 0.297008 0.223352 0.297334 0.223055 0.297986 0.221803 0.29781 0.221734 0.298737 0.2230949 0.299193 0.2225559 0.301288 0.220672 0.300175 0.2238579 0.297935 0.22411 0.299375 0.2230949 0.299193 0.223055 0.297986 0.2230949 0.299193 0.22411 0.299375 0.224079 0.301377 0.2225559 0.301288 0.219657 0.29766 0.221734 0.298737 0.220672 0.300175 0.218654 0.298927 0.213106 0.298941 0.217175 0.301059 0.2153069 0.303738 0.210623 0.300976 0.216561 0.296032 0.219657 0.29766 0.218654 0.298927 0.215363 0.297154 0.207288 0.29617 0.209604 0.2951 0.213106 0.298941 0.210623 0.300976 0.218527 0.29373 0.216794 0.291848 0.218444 0.288044 0.220483 0.290457 0.214586 0.293049 0.215736 0.292324 0.218151 0.294151 0.217138 0.295204 0.215736 0.292324 0.216794 0.291848 0.218527 0.29373 0.218151 0.294151 0.211808 0.294036 0.213357 0.293657 0.216561 0.296032 0.215363 0.297154 0.199607 0.296723 0.201951 0.303325 0.19538 0.303069 0.193976 0.296107 0.207083 0.302546 0.212153 0.307784 0.204268 0.308978 0.201951 0.303325 0.196726 0.308978 0.204268 0.308978 0.205873 0.314208 0.197686 0.31428 0.199607 0.296723 0.204031 0.29648 0.207083 0.302546 0.201951 0.303325 0.210623 0.300976 0.2153069 0.303738 0.212153 0.307784 0.207083 0.302546 0.204031 0.29648 0.207288 0.29617 0.210623 0.300976 0.207083 0.302546 0.196726 0.308978 0.19538 0.303069 0.201951 0.303325 0.204268 0.308978 0.210563 0.288721 0.212054 0.288538 0.214586 0.293049 0.213357 0.293657 0.210563 0.288721 0.210159 0.285079 0.211777 0.285252 0.212054 0.288538 0.212204 0.277102 0.213656 0.278304 0.211175 0.281281 0.210182 0.281019 0.2093729 0.288897 0.210563 0.288721 0.213357 0.293657 0.211808 0.294036 0.212054 0.288538 0.213638 0.288074 0.215736 0.292324 0.214586 0.293049 0.213638 0.288074 0.218444 0.288044 0.216794 0.291848 0.215736 0.292324 0.211808 0.294036 0.209604 0.2951 0.207333 0.289882 0.2093729 0.288897 0.204836 0.290157 0.204062 0.284732 0.206824 0.284948 0.207333 0.289882 0.204836 0.290157 0.207333 0.289882 0.209604 0.2951 0.207288 0.29617 0.212054 0.288538 0.211777 0.285252 0.213461 0.284959 0.213638 0.288074 0.213638 0.288074 0.213461 0.284959 0.217787 0.285209 0.218444 0.288044 0.2093729 0.288897 0.2090719 0.284892 0.210159 0.285079 0.210563 0.288721 0.207333 0.289882 0.206824 0.284948 0.2090719 0.284892 0.2093729 0.288897 0.206982 0.274669 0.20942 0.276381 0.207624 0.280177 0.204945 0.279346 0.204945 0.279346 0.207624 0.280177 0.206824 0.284948 0.204062 0.284732 0.20942 0.276381 0.212204 0.277102 0.210182 0.281019 0.207624 0.280177 0.207624 0.280177 0.210182 0.281019 0.2090719 0.284892 0.206824 0.284948 0.210182 0.281019 0.211175 0.281281 0.210159 0.285079 0.2090719 0.284892 0.211175 0.281281 0.212612 0.282345 0.211777 0.285252 0.210159 0.285079 0.212612 0.282345 0.214153 0.282194 0.213461 0.284959 0.211777 0.285252 0.214153 0.282194 0.21818 0.283289 0.217787 0.285209 0.213461 0.284959 0.199315 0.268792 0.203911 0.271817 0.20217 0.278051 0.198316 0.276318 0.20217 0.278051 0.204945 0.279346 0.204062 0.284732 0.201457 0.284064 0.203911 0.271817 0.206982 0.274669 0.204945 0.279346 0.20217 0.278051 0.1843129 0.294155 0.182964 0.285874 0.192412 0.28853 0.193976 0.296107 0.182964 0.285874 0.1824679 0.276839 0.192247 0.280925 0.192412 0.28853 0.182887 0.267453 0.192185 0.272801 0.192247 0.280925 0.1824679 0.276839 0.192247 0.280925 0.197762 0.283082 0.198115 0.289807 0.192412 0.28853 0.193976 0.296107 0.192412 0.28853 0.198115 0.289807 0.199607 0.296723 0.202046 0.290095 0.204836 0.290157 0.207288 0.29617 0.204031 0.29648 0.198115 0.289807 0.202046 0.290095 0.204031 0.29648 0.199607 0.296723 0.202046 0.290095 0.201457 0.284064 0.204062 0.284732 0.204836 0.290157 0.198115 0.289807 0.197762 0.283082 0.201457 0.284064 0.202046 0.290095 0.192185 0.272801 0.198316 0.276318 0.197762 0.283082 0.192247 0.280925 0.185668 0.301682 0.1843129 0.294155 0.193976 0.296107 0.19538 0.303069 0.198316 0.276318 0.20217 0.278051 0.201457 0.284064 0.197762 0.283082 0.215643 0.279995 0.219334 0.282331 0.21818 0.283289 0.214153 0.282194 0.213134 0.275218 0.211458 0.273378 0.213571 0.271788 0.214743 0.275825 0.21905 0.274813 0.2190639 0.277995 0.217339 0.27838 0.216495 0.276903 0.216495 0.276903 0.217339 0.27838 0.215643 0.279995 0.21457 0.279414 0.214743 0.275825 0.216495 0.276903 0.21457 0.279414 0.213656 0.278304 0.213656 0.278304 0.21457 0.279414 0.212612 0.282345 0.211175 0.281281 0.21457 0.279414 0.215643 0.279995 0.214153 0.282194 0.212612 0.282345 0.211458 0.273378 0.209297 0.270436 0.211884 0.267154 0.213571 0.271788 0.21905 0.274813 0.216495 0.276903 0.216006 0.270148 0.2183859 0.267924 0.2183859 0.267924 0.216006 0.270148 0.214521 0.26415 0.2174029 0.26113 0.213571 0.271788 0.211884 0.267154 0.214521 0.26415 0.216006 0.270148 0.214743 0.275825 0.213571 0.271788 0.216006 0.270148 0.216495 0.276903 0.212204 0.277102 0.20942 0.276381 0.211458 0.273378 0.213134 0.275218 0.20942 0.276381 0.206982 0.274669 0.209297 0.270436 0.211458 0.273378 0.212204 0.277102 0.213134 0.275218 0.214743 0.275825 0.213656 0.278304 0.2190639 0.277995 0.219843 0.282105 0.219713 0.282083 0.217339 0.27838 0.217339 0.27838 0.219713 0.282083 0.219334 0.282331 0.215643 0.279995 0.199315 0.268792 0.20147 0.260725 0.206392 0.266357 0.203911 0.271817 0.193494 0.264481 0.199315 0.268792 0.198316 0.276318 0.192185 0.272801 0.209297 0.270436 0.206392 0.266357 0.209284 0.261557 0.211884 0.267154 0.206392 0.266357 0.20147 0.260725 0.204319 0.2529 0.209284 0.261557 0.199315 0.268792 0.193494 0.264481 0.195518 0.254708 0.20147 0.260725 0.209284 0.261557 0.204319 0.2529 0.2082239 0.246365 0.212074 0.25668 0.2043409 0.237067 0.2082239 0.246365 0.204319 0.2529 0.199057 0.245141 0.206982 0.274669 0.203911 0.271817 0.206392 0.266357 0.209297 0.270436 0.199057 0.245141 0.204319 0.2529 0.20147 0.260725 0.195518 0.254708 0.195518 0.254708 0.193494 0.264481 0.184613 0.258996 0.187104 0.246647 0.184613 0.258996 0.193494 0.264481 0.192185 0.272801 0.182887 0.267453 0.211884 0.267154 0.209284 0.261557 0.212074 0.25668 0.214521 0.26415 0.195518 0.254708 0.187104 0.246647 0.191937 0.23461 0.199057 0.245141 0.433321 0.140946 0.435407 0.148932 0.431635 0.149722 0.429773 0.1423439 0.437263 0.138193 0.440952 0.145798 0.435407 0.148932 0.433321 0.140946 0.461502 0.15277 0.464566 0.169402 0.455799 0.1716459 0.452648 0.156284 0.424117 0.150258 0.422532 0.142551 0.425621 0.142762 0.427601 0.150352 0.44534 0.158787 0.452648 0.156284 0.455799 0.1716459 0.449485 0.173698 0.432771 0.177132 0.427917 0.1619859 0.431621 0.163438 0.436347 0.17689 0.476427 0.12252 0.465384 0.128655 0.4612 0.112421 0.472735 0.101351 0.480689 0.143931 0.484072 0.164452 0.475272 0.166265 0.471692 0.147651 0.461502 0.15277 0.471692 0.147651 0.475272 0.166265 0.464566 0.169402 0.403156 0.164583 0.411032 0.164127 0.415344 0.179036 0.40656 0.178754 0.516207 0.140795 0.517682 0.155237 0.507852 0.156529 0.505325 0.140325 0.443916 0.131844 0.437263 0.138193 0.43277 0.132095 0.437662 0.125324 0.496636 0.140328 0.488925 0.140539 0.487256 0.11677 0.495785 0.119325 0.480689 0.143931 0.471692 0.147651 0.465384 0.128655 0.476427 0.12252 0.431621 0.163438 0.427601 0.150352 0.431635 0.149722 0.435164 0.163429 0.515715 0.106527 0.521957 0.116925 0.517013 0.127507 0.507659 0.124222 0.496636 0.140328 0.498687 0.1590149 0.491493 0.161548 0.488925 0.140539 0.480689 0.143931 0.488925 0.140539 0.491493 0.161548 0.484072 0.164452 0.44534 0.158787 0.449485 0.173698 0.444031 0.175217 0.439669 0.160548 0.421051 0.151781 0.41952 0.142778 0.422532 0.142551 0.424117 0.150258 0.439669 0.160548 0.444031 0.175217 0.439666 0.176497 0.435164 0.163429 0.453327 0.122216 0.4612 0.112421 0.465384 0.128655 0.45818 0.135771 0.397553 0.151575 0.396454 0.139253 0.406866 0.142834 0.407815 0.152906 0.411032 0.164127 0.418288 0.164251 0.423141 0.178435 0.415344 0.179036 0.443916 0.131844 0.437662 0.125324 0.445604 0.111235 0.453327 0.122216 0.435164 0.163429 0.439666 0.176497 0.436347 0.17689 0.431621 0.163438 0.496636 0.140328 0.495785 0.119325 0.507659 0.124222 0.505325 0.140325 0.431635 0.149722 0.427601 0.150352 0.425621 0.142762 0.429773 0.1423439 0.488925 0.140539 0.480689 0.143931 0.476427 0.12252 0.487256 0.11677 0.439669 0.160548 0.435407 0.148932 0.440952 0.145798 0.44534 0.158787 0.461502 0.15277 0.45818 0.135771 0.465384 0.128655 0.471692 0.147651 0.403156 0.164583 0.397553 0.151575 0.407815 0.152906 0.411032 0.164127 0.427917 0.1619859 0.424117 0.150258 0.427601 0.150352 0.431621 0.163438 0.461502 0.15277 0.452648 0.156284 0.449051 0.14226 0.45818 0.135771 0.44534 0.158787 0.440952 0.145798 0.449051 0.14226 0.452648 0.156284 0.440952 0.145798 0.437263 0.138193 0.443916 0.131844 0.449051 0.14226 0.439669 0.160548 0.435164 0.163429 0.431635 0.149722 0.435407 0.148932 0.516207 0.140795 0.505325 0.140325 0.507659 0.124222 0.517013 0.127507 0.407815 0.152906 0.406866 0.142834 0.415629 0.142984 0.416303 0.152604 0.427917 0.1619859 0.42469 0.16294 0.421051 0.151781 0.424117 0.150258 0.443916 0.131844 0.453327 0.122216 0.45818 0.135771 0.449051 0.14226 0.418288 0.164251 0.416303 0.152604 0.421051 0.151781 0.42469 0.16294 0.428546 0.1777949 0.42469 0.16294 0.427917 0.1619859 0.432771 0.177132 0.496636 0.140328 0.505325 0.140325 0.507852 0.156529 0.498687 0.1590149 0.418288 0.164251 0.411032 0.164127 0.407815 0.152906 0.416303 0.152604 0.416303 0.152604 0.415629 0.142984 0.41952 0.142778 0.421051 0.151781 0.428546 0.1777949 0.423141 0.178435 0.418288 0.164251 0.42469 0.16294 0.429773 0.1423439 0.426865 0.135622 0.429085 0.134705 0.433321 0.140946 0.433321 0.140946 0.429085 0.134705 0.43277 0.132095 0.437263 0.138193 0.4612 0.112421 0.453658 0.09920597 0.457691 0.09165 0.46241 0.100692 0.426709 0.07641398 0.430669 0.07568401 0.432142 0.08204495 0.427212 0.08309495 0.412993 0.09720897 0.407733 0.083404 0.413892 0.08369696 0.417202 0.093867 0.476736 0.06635695 0.478289 0.07791399 0.472635 0.07935196 0.469869 0.06801897 0.392317 0.09612596 0.400898 0.08884 0.40575 0.100367 0.396006 0.104097 0.466869 0.083094 0.461996 0.08577996 0.457962 0.07599699 0.463345 0.07218396 0.449257 0.08677595 0.444399 0.07334595 0.448047 0.07000797 0.453245 0.08127599 0.407733 0.083404 0.402423 0.07659596 0.409548 0.07582896 0.413892 0.08369696 0.486781 0.097449 0.485193 0.07785898 0.490301 0.07723397 0.490819 0.08887797 0.499578 0.06088197 0.497684 0.06879997 0.490799 0.06749099 0.492456 0.058191 0.463345 0.07218396 0.457962 0.07599699 0.45279 0.06605696 0.458745 0.06171 0.427212 0.08309495 0.423509 0.08331596 0.422852 0.07620996 0.426709 0.07641398 0.486781 0.097449 0.480862 0.08957898 0.478289 0.07791399 0.485193 0.07785898 0.461996 0.08577996 0.4665 0.09689497 0.46241 0.100692 0.457691 0.09165 0.400898 0.08884 0.407733 0.083404 0.412993 0.09720897 0.40575 0.100367 0.492456 0.058191 0.484051 0.05460298 0.484249 0.04405295 0.495172 0.05087995 0.457962 0.07599699 0.461996 0.08577996 0.457691 0.09165 0.453245 0.08127599 0.497684 0.06879997 0.496133 0.077865 0.490301 0.07723397 0.490799 0.06749099 0.475622 0.05435097 0.484051 0.05460298 0.484324 0.066338 0.476736 0.06635695 0.499578 0.06088197 0.501001 0.05396097 0.505949 0.05783396 0.503576 0.063847 0.500997 0.10013 0.49551 0.08967095 0.499162 0.08821898 0.501201 0.09166598 0.396006 0.104097 0.40575 0.100367 0.408213 0.115383 0.404453 0.119864 0.478289 0.07791399 0.480862 0.08957898 0.475872 0.09127795 0.472635 0.07935196 0.504457 0.04923796 0.509109 0.05244898 0.505949 0.05783396 0.501001 0.05396097 0.521857 0.07829499 0.523698 0.08666998 0.514581 0.09376895 0.514361 0.08034896 0.521826 0.05895197 0.514442 0.05951899 0.517879 0.053312 0.523514 0.05451995 0.524078 0.05110496 0.523514 0.05451995 0.517879 0.053312 0.520012 0.04924297 0.487256 0.11677 0.476427 0.12252 0.472735 0.101351 0.486781 0.097449 0.504457 0.04923796 0.501001 0.05396097 0.495172 0.05087995 0.499556 0.04664099 0.513551 0.05361598 0.51049 0.05910396 0.505949 0.05783396 0.509109 0.05244898 0.402423 0.07659596 0.395306 0.07090896 0.405814 0.06761497 0.409548 0.07582896 0.486781 0.097449 0.472735 0.101351 0.475872 0.09127795 0.480862 0.08957898 0.413981 0.112311 0.412993 0.09720897 0.417202 0.093867 0.419389 0.109883 0.395306 0.07090896 0.388664 0.07280498 0.383789 0.06833499 0.389768 0.06413596 0.521826 0.05895197 0.523514 0.05451995 0.529536 0.05359399 0.528189 0.05826896 0.500997 0.10013 0.501201 0.09166598 0.504013 0.08417296 0.508026 0.09044396 0.51049 0.05910396 0.507836 0.06646895 0.503576 0.063847 0.505949 0.05783396 0.509109 0.05244898 0.512255 0.04717499 0.515658 0.04902696 0.513551 0.05361598 0.429237 0.09193795 0.430466 0.110881 0.427292 0.111146 0.42575 0.091645 0.472735 0.101351 0.466869 0.083094 0.472635 0.07935196 0.475872 0.09127795 0.395306 0.07090896 0.389768 0.06413596 0.3995 0.06150096 0.405814 0.06761497 0.453658 0.09920597 0.449257 0.08677595 0.453245 0.08127599 0.457691 0.09165 0.485193 0.07785898 0.478289 0.07791399 0.476736 0.06635695 0.484324 0.066338 0.492456 0.058191 0.490799 0.06749099 0.484324 0.066338 0.484051 0.05460298 0.466869 0.083094 0.463345 0.07218396 0.469869 0.06801897 0.472635 0.07935196 0.438504 0.089558 0.432585 0.09213399 0.432142 0.08204495 0.436349 0.08030498 0.432585 0.09213399 0.429237 0.09193795 0.427212 0.08309495 0.432142 0.08204495 0.497684 0.06879997 0.50186 0.07082599 0.499805 0.08003997 0.496133 0.077865 0.405814 0.06761497 0.3995 0.06150096 0.410095 0.06101 0.41508 0.06714797 0.438504 0.089558 0.436349 0.08030498 0.441925 0.07889997 0.444316 0.09152495 0.463345 0.07218396 0.458745 0.06171 0.466356 0.05690896 0.469869 0.06801897 0.387184 0.08626997 0.382062 0.0776 0.388664 0.07280498 0.395864 0.080724 0.508026 0.09044396 0.504013 0.08417296 0.506126 0.07443195 0.509607 0.07750397 0.417202 0.093867 0.422617 0.09207296 0.424566 0.110399 0.419389 0.109883 0.509607 0.07750397 0.506126 0.07443195 0.507836 0.06646895 0.510943 0.06700396 0.514581 0.09376895 0.508026 0.09044396 0.509607 0.07750397 0.514361 0.08034896 0.45279 0.06605696 0.457962 0.07599699 0.453245 0.08127599 0.448047 0.07000797 0.50186 0.07082599 0.503576 0.063847 0.507836 0.06646895 0.506126 0.07443195 0.402423 0.07659596 0.395864 0.080724 0.388664 0.07280498 0.395306 0.07090896 0.510943 0.06700396 0.514442 0.05951899 0.521826 0.05895197 0.518254 0.06786096 0.485193 0.07785898 0.484324 0.066338 0.490799 0.06749099 0.490301 0.07723397 0.513551 0.05361598 0.517879 0.053312 0.514442 0.05951899 0.51049 0.05910396 0.392317 0.09612596 0.387184 0.08626997 0.395864 0.080724 0.400898 0.08884 0.438595 0.07173198 0.438268 0.06562697 0.444399 0.07334595 0.441925 0.07889997 0.472735 0.101351 0.4665 0.09689497 0.461996 0.08577996 0.466869 0.083094 0.515658 0.04902696 0.520012 0.04924297 0.517879 0.053312 0.513551 0.05361598 0.413892 0.08369696 0.419268 0.08333897 0.422617 0.09207296 0.417202 0.093867 0.444316 0.09152495 0.441925 0.07889997 0.444399 0.07334595 0.449257 0.08677595 0.409548 0.07582896 0.416549 0.07575398 0.419268 0.08333897 0.413892 0.08369696 0.496133 0.077865 0.49551 0.08967095 0.490819 0.08887797 0.490301 0.07723397 0.409548 0.07582896 0.405814 0.06761497 0.41508 0.06714797 0.416549 0.07575398 0.496133 0.077865 0.499805 0.08003997 0.499162 0.08821898 0.49551 0.08967095 0.514361 0.08034896 0.509607 0.07750397 0.510943 0.06700396 0.518254 0.06786096 0.521857 0.07829499 0.514361 0.08034896 0.518254 0.06786096 0.524662 0.06728196 0.383789 0.06833499 0.388664 0.07280498 0.382062 0.0776 0.38062 0.07287698 0.42575 0.091645 0.423509 0.08331596 0.427212 0.08309495 0.429237 0.09193795 0.380596 0.066141 0.383789 0.06833499 0.38062 0.07287698 0.377537 0.06956297 0.514581 0.09376895 0.515715 0.106527 0.500997 0.10013 0.508026 0.09044396 0.521826 0.05895197 0.528189 0.05826896 0.524662 0.06728196 0.518254 0.06786096 0.400898 0.08884 0.395864 0.080724 0.402423 0.07659596 0.407733 0.083404 0.475622 0.05435097 0.476736 0.06635695 0.469869 0.06801897 0.466356 0.05690896 0.499805 0.08003997 0.50186 0.07082599 0.506126 0.07443195 0.504013 0.08417296 0.515715 0.106527 0.507659 0.124222 0.495785 0.119325 0.500997 0.10013 0.425108 0.07051396 0.426709 0.07641398 0.422852 0.07620996 0.42094 0.06865298 0.438268 0.06562697 0.438595 0.07173198 0.435269 0.073529 0.4337 0.06714296 0.42094 0.06865298 0.422852 0.07620996 0.416549 0.07575398 0.41508 0.06714797 0.471799 0.04446095 0.484249 0.04405295 0.484051 0.05460298 0.475622 0.05435097 0.429657 0.06953799 0.430669 0.07568401 0.426709 0.07641398 0.425108 0.07051396 0.472735 0.101351 0.4612 0.112421 0.46241 0.100692 0.4665 0.09689497 0.499578 0.06088197 0.503576 0.063847 0.50186 0.07082599 0.497684 0.06879997 0.445604 0.111235 0.453658 0.09920597 0.4612 0.112421 0.453327 0.122216 0.423509 0.08331596 0.42575 0.091645 0.422617 0.09207296 0.419268 0.08333897 0.435269 0.073529 0.438595 0.07173198 0.441925 0.07889997 0.436349 0.08030498 0.4337 0.06714296 0.435269 0.073529 0.430669 0.07568401 0.429657 0.06953799 0.444316 0.09152495 0.449257 0.08677595 0.453658 0.09920597 0.445604 0.111235 0.510943 0.06700396 0.507836 0.06646895 0.51049 0.05910396 0.514442 0.05951899 0.487256 0.11677 0.486781 0.097449 0.500997 0.10013 0.495785 0.119325 0.438504 0.089558 0.444316 0.09152495 0.445604 0.111235 0.438709 0.110574 0.40575 0.100367 0.412993 0.09720897 0.413981 0.112311 0.408213 0.115383 0.430669 0.07568401 0.435269 0.073529 0.436349 0.08030498 0.432142 0.08204495 0.42575 0.091645 0.427292 0.111146 0.424566 0.110399 0.422617 0.09207296 0.492456 0.058191 0.495172 0.05087995 0.501001 0.05396097 0.499578 0.06088197 0.501201 0.09166598 0.499162 0.08821898 0.499805 0.08003997 0.504013 0.08417296 0.432585 0.09213399 0.438504 0.089558 0.438709 0.110574 0.434325 0.111837 0.528692 0.04951697 0.529536 0.05359399 0.523514 0.05451995 0.524078 0.05110496 0.429237 0.09193795 0.432585 0.09213399 0.434325 0.111837 0.430466 0.110881 0.422852 0.07620996 0.423509 0.08331596 0.419268 0.08333897 0.416549 0.07575398 0.486781 0.097449 0.490819 0.08887797 0.49551 0.08967095 0.500997 0.10013 0.411872 0.128544 0.404453 0.119864 0.408213 0.115383 0.413158 0.125926 0.418671 0.1333799 0.41572 0.131914 0.416163 0.1299909 0.418362 0.131374 0.418671 0.1333799 0.418362 0.131374 0.420607 0.131732 0.421095 0.133971 0.408213 0.115383 0.413981 0.112311 0.414575 0.124011 0.413158 0.125926 0.413158 0.125926 0.414575 0.124011 0.416546 0.128229 0.416163 0.1299909 0.416163 0.1299909 0.416546 0.128229 0.418493 0.1301 0.418362 0.131374 0.418362 0.131374 0.418493 0.1301 0.420192 0.130353 0.420607 0.131732 0.424312 0.129859 0.42391 0.128422 0.425194 0.126954 0.425787 0.128386 0.413981 0.112311 0.419389 0.109883 0.418302 0.121892 0.414575 0.124011 0.414575 0.124011 0.418302 0.121892 0.419608 0.127523 0.416546 0.128229 0.527954 0.1083559 0.514581 0.09376895 0.523698 0.08666998 0.533642 0.100057 0.420192 0.130353 0.418493 0.1301 0.416546 0.128229 0.419608 0.127523 0.42755 0.120541 0.430466 0.110881 0.434325 0.111837 0.430838 0.121295 0.426865 0.135622 0.429773 0.1423439 0.425621 0.142762 0.424439 0.137048 0.4342 0.121277 0.430838 0.121295 0.434325 0.111837 0.438709 0.110574 0.42531 0.131941 0.426865 0.135622 0.424439 0.137048 0.422914 0.133377 0.4342 0.121277 0.438709 0.110574 0.445604 0.111235 0.437662 0.125324 0.424312 0.129859 0.42531 0.131941 0.422914 0.133377 0.422229 0.131256 0.4342 0.121277 0.437662 0.125324 0.43277 0.132095 0.430434 0.127782 0.42391 0.128422 0.424312 0.129859 0.422229 0.131256 0.421837 0.130075 0.425787 0.128386 0.427356 0.13049 0.42531 0.131941 0.424312 0.129859 0.42755 0.120541 0.430838 0.121295 0.428091 0.125979 0.426247 0.123817 0.425549 0.120378 0.424634 0.123943 0.42271 0.125345 0.423119 0.120596 0.398919 0.128394 0.404453 0.119864 0.411872 0.128544 0.409006 0.133513 0.4342 0.121277 0.430434 0.127782 0.428091 0.125979 0.430838 0.121295 0.415631 0.135919 0.41572 0.131914 0.418671 0.1333799 0.41912 0.136833 0.426247 0.123817 0.428091 0.125979 0.425787 0.128386 0.425194 0.126954 0.409006 0.133513 0.406866 0.142834 0.396454 0.139253 0.398919 0.128394 0.42755 0.120541 0.426247 0.123817 0.424634 0.123943 0.425549 0.120378 0.426247 0.123817 0.425194 0.126954 0.42391 0.128422 0.424634 0.123943 0.424634 0.123943 0.42391 0.128422 0.421837 0.130075 0.42271 0.125345 0.422029 0.137219 0.421095 0.133971 0.422914 0.133377 0.424439 0.137048 0.419389 0.109883 0.424566 0.110399 0.423119 0.120596 0.418302 0.121892 0.527954 0.1083559 0.521957 0.116925 0.515715 0.106527 0.514581 0.09376895 0.427292 0.111146 0.425549 0.120378 0.423119 0.120596 0.424566 0.110399 0.418302 0.121892 0.423119 0.120596 0.42271 0.125345 0.419608 0.127523 0.425549 0.120378 0.427292 0.111146 0.430466 0.110881 0.42755 0.120541 0.420192 0.130353 0.419608 0.127523 0.42271 0.125345 0.421837 0.130075 0.406866 0.142834 0.409006 0.133513 0.415631 0.135919 0.415629 0.142984 0.420607 0.131732 0.420192 0.130353 0.421837 0.130075 0.422229 0.131256 0.415629 0.142984 0.415631 0.135919 0.41912 0.136833 0.41952 0.142778 0.421095 0.133971 0.420607 0.131732 0.422229 0.131256 0.422914 0.133377 0.411872 0.128544 0.413158 0.125926 0.416163 0.1299909 0.41572 0.131914 0.409006 0.133513 0.411872 0.128544 0.41572 0.131914 0.415631 0.135919 0.422532 0.142551 0.422029 0.137219 0.424439 0.137048 0.425621 0.142762 0.430434 0.127782 0.43277 0.132095 0.429085 0.134705 0.427356 0.13049 0.427356 0.13049 0.429085 0.134705 0.426865 0.135622 0.42531 0.131941 0.428091 0.125979 0.430434 0.127782 0.427356 0.13049 0.425787 0.128386 0.41952 0.142778 0.41912 0.136833 0.422029 0.137219 0.422532 0.142551 0.41912 0.136833 0.418671 0.1333799 0.421095 0.133971 0.422029 0.137219 0.519418 0.02546495 0.519633 0.02683395 0.516471 0.02494996 0.517957 0.02372497 0.520981 0.02503198 0.519418 0.02546495 0.517957 0.02372497 0.519195 0.02256596 0.522211 0.023328 0.520981 0.02503198 0.519195 0.02256596 0.52065 0.02111798 0.52065 0.02111798 0.519195 0.02256596 0.517419 0.02045899 0.519147 0.01905995 0.519147 0.01905995 0.521095 0.018543 0.522402 0.02014899 0.52065 0.02111798 0.52065 0.02111798 0.522402 0.02014899 0.523087 0.02200096 0.522211 0.023328 0.521409 0.01833599 0.521869 0.01755899 0.523853 0.01919096 0.522825 0.01978498 0.522402 0.02014899 0.522825 0.01978498 0.523477 0.02168995 0.523087 0.02200096 0.522825 0.01978498 0.523853 0.01919096 0.524261 0.02146697 0.523477 0.02168995 0.519195 0.02256596 0.517957 0.02372497 0.516715 0.02207297 0.517419 0.02045899 0.519633 0.02683395 0.519418 0.02546495 0.520981 0.02503198 0.522193 0.02645999 0.518021 0.01785498 0.520409 0.01787996 0.521095 0.018543 0.519147 0.01905995 0.518021 0.01785498 0.520188 0.01716196 0.520534 0.01766997 0.520409 0.01787996 0.517957 0.02372497 0.516471 0.02494996 0.514932 0.02072 0.516715 0.02207297 0.521095 0.018543 0.521409 0.01833599 0.522825 0.01978498 0.522402 0.02014899 0.514932 0.02072 0.515947 0.01914095 0.517419 0.02045899 0.516715 0.02207297 0.515947 0.01914095 0.518021 0.01785498 0.519147 0.01905995 0.517419 0.02045899 0.520981 0.02503198 0.522211 0.023328 0.523238 0.02481895 0.522193 0.02645999 0.515947 0.01914095 0.51508 0.01857596 0.517206 0.01706194 0.518021 0.01785498 0.51508 0.01857596 0.513833 0.01570898 0.516027 0.01470297 0.517206 0.01706194 0.522211 0.023328 0.523087 0.02200096 0.523378 0.02335095 0.523238 0.02481895 0.523087 0.02200096 0.523477 0.02168995 0.523588 0.022798 0.523378 0.02335095 0.521095 0.018543 0.520409 0.01787996 0.520534 0.01766997 0.521409 0.01833599 0.523238 0.02481895 0.523378 0.02335095 0.523588 0.022798 0.52399 0.02336096 0.523477 0.02168995 0.524261 0.02146697 0.52399 0.02336096 0.523588 0.022798 0.520534 0.01766997 0.520188 0.01716196 0.521869 0.01755899 0.521409 0.01833599 0.518021 0.01785498 0.517206 0.01706194 0.519704 0.01659399 0.520188 0.01716196 0.485414 0.00355798 0.485882 0.003763973 0.485609 0.004597961 0.485312 0.004683971 0.485414 0.00355798 0.486309 0.002433955 0.486479 0.002676963 0.485882 0.003763973 0.486309 0.002433955 0.486953 0.002582967 0.487035 0.002752959 0.486479 0.002676963 0.48968 0.003461956 0.489271 0.003529965 0.488784 0.003309965 0.488934 0.003198981 0.485882 0.003763973 0.48607 0.003829956 0.485843 0.00444597 0.485609 0.004597961 0.486479 0.002676963 0.486678 0.002896964 0.48607 0.003829956 0.485882 0.003763973 0.487997 0.003005981 0.488007 0.003505945 0.486678 0.002896964 0.48704 0.00288099 0.487035 0.002752959 0.48704 0.00288099 0.486678 0.002896964 0.486479 0.002676963 0.487729 0.004704952 0.487563 0.005406975 0.485843 0.00444597 0.48607 0.003829956 0.487996 0.002875983 0.487997 0.003005981 0.48704 0.00288099 0.487035 0.002752959 0.485609 0.004597961 0.485843 0.00444597 0.487563 0.005406975 0.487544 0.005753993 0.489655 0.00574696 0.489431 0.005527973 0.490073 0.004547953 0.490254 0.004559993 0.487544 0.005753993 0.487563 0.005406975 0.489431 0.005527973 0.489655 0.00574696 0.488784 0.003309965 0.489271 0.003529965 0.488007 0.003505945 0.487997 0.003005981 0.489271 0.003529965 0.490073 0.004547953 0.487729 0.004704952 0.488007 0.003505945 0.488007 0.003505945 0.487729 0.004704952 0.48607 0.003829956 0.486678 0.002896964 0.490073 0.004547953 0.489431 0.005527973 0.487563 0.005406975 0.487729 0.004704952 0.488934 0.003198981 0.488784 0.003309965 0.487997 0.003005981 0.487996 0.002875983 0.490254 0.004559993 0.490073 0.004547953 0.489271 0.003529965 0.48968 0.003461956 0.485148 0.003296971 0.485414 0.00355798 0.485312 0.004683971 0.484528 0.005721986 0.486048 0.002201974 0.486309 0.002433955 0.485414 0.00355798 0.485148 0.003296971 0.452991 0.01171797 0.453278 0.01181697 0.453639 0.01265996 0.453407 0.01283299 0.453611 0.01387 0.453407 0.01283299 0.453839 0.01339095 0.453931 0.01368999 0.452183 0.01152795 0.452567 0.01167899 0.453611 0.01387 0.453353 0.014126 0.453407 0.01283299 0.453639 0.01265996 0.454019 0.01308298 0.453839 0.01339095 0.456863 0.010176 0.456536 0.01067596 0.456277 0.01037198 0.45631 0.01015299 0.452567 0.01167899 0.453399 0.01126098 0.453523 0.01138299 0.452991 0.01171797 0.453611 0.01387 0.452567 0.01167899 0.452991 0.01171797 0.453407 0.01283299 0.457189 0.01176095 0.456956 0.01164394 0.456792 0.01117098 0.457127 0.01109296 0.45739 0.01200199 0.457189 0.01176095 0.457127 0.01109296 0.45738 0.010966 0.453523 0.01138299 0.4537 0.01145899 0.453278 0.01181697 0.452991 0.01171797 0.456723 0.009628951 0.456863 0.010176 0.45631 0.01015299 0.456336 0.009914994 0.454771 0.01058197 0.454968 0.01071095 0.4537 0.01145899 0.453523 0.01138299 0.45738 0.010966 0.457127 0.01109296 0.456863 0.010176 0.456723 0.009628951 0.453353 0.014126 0.453611 0.01387 0.453931 0.01368999 0.454572 0.01470398 0.456536 0.01067596 0.456792 0.01117098 0.455326 0.01179999 0.455179 0.01114499 0.455179 0.01114499 0.455326 0.01179999 0.453639 0.01265996 0.453278 0.01181697 0.457709 0.01086699 0.45738 0.010966 0.456723 0.009628951 0.456739 0.00930196 0.457127 0.01109296 0.456792 0.01117098 0.456536 0.01067596 0.456863 0.010176 0.458003 0.01258999 0.45739 0.01200199 0.45738 0.010966 0.457709 0.01086699 0.456792 0.01117098 0.456956 0.01164394 0.455538 0.01254898 0.455326 0.01179999 0.455326 0.01179999 0.455538 0.01254898 0.454019 0.01308298 0.453639 0.01265996 0.456277 0.01037198 0.456536 0.01067596 0.455179 0.01114499 0.454968 0.01071095 0.454968 0.01071095 0.455179 0.01114499 0.453278 0.01181697 0.4537 0.01145899 0.453839 0.01339095 0.454019 0.01308298 0.455538 0.01254898 0.455602 0.01297998 0.455602 0.01297998 0.455538 0.01254898 0.456956 0.01164394 0.457189 0.01176095 0.45631 0.01015299 0.456277 0.01037198 0.454968 0.01071095 0.454771 0.01058197 0.453931 0.01368999 0.453839 0.01339095 0.455602 0.01297998 0.455809 0.01318198 0.455809 0.01318198 0.455602 0.01297998 0.457189 0.01176095 0.45739 0.01200199 0.437632 0.03078496 0.437545 0.03064495 0.438529 0.03020197 0.438682 0.03028398 0.437213 0.028162 0.437173 0.02835196 0.436674 0.02875494 0.436493 0.02870798 0.439476 0.02915894 0.439238 0.02907699 0.438429 0.02803099 0.438539 0.027906 0.435829 0.02957797 0.436067 0.02925795 0.436221 0.02937096 0.436161 0.029697 0.437396 0.02769994 0.437552 0.028014 0.437213 0.028162 0.43707 0.02805495 0.436577 0.03041195 0.436584 0.03022497 0.437411 0.03052794 0.437545 0.03064495 0.437173 0.02835196 0.437679 0.02837097 0.436924 0.02887594 0.436674 0.02875494 0.438429 0.02803099 0.438276 0.028279 0.437679 0.02837097 0.437552 0.028014 0.436161 0.029697 0.436526 0.02966594 0.436584 0.03022497 0.436577 0.03041195 0.439238 0.02907699 0.439049 0.02906 0.438276 0.028279 0.438429 0.02803099 0.436221 0.02937096 0.436376 0.02937299 0.436526 0.02966594 0.436161 0.029697 0.437396 0.02769994 0.43707 0.02805495 0.436346 0.02850997 0.436136 0.02836894 0.437679 0.02837097 0.438276 0.028279 0.437361 0.02926099 0.436924 0.02887594 0.436425 0.03068798 0.435829 0.02957797 0.436161 0.029697 0.436577 0.03041195 0.436136 0.02836894 0.436346 0.02850997 0.436067 0.02925795 0.435829 0.02957797 0.436346 0.02850997 0.436493 0.02870798 0.436221 0.02937096 0.436067 0.02925795 0.43707 0.02805495 0.437213 0.028162 0.436493 0.02870798 0.436346 0.02850997 0.436493 0.02870798 0.436674 0.02875494 0.436376 0.02937299 0.436221 0.02937096 0.437545 0.03064495 0.437411 0.03052794 0.438392 0.03011196 0.438529 0.03020197 0.438529 0.03020197 0.438392 0.03011196 0.439049 0.02906 0.439238 0.02907699 0.436674 0.02875494 0.436924 0.02887594 0.436526 0.02966594 0.436376 0.02937299 0.436924 0.02887594 0.437361 0.02926099 0.436584 0.03022497 0.436526 0.02966594 0.437361 0.02926099 0.438392 0.03011196 0.437411 0.03052794 0.436584 0.03022497 0.438682 0.03028398 0.438529 0.03020197 0.439238 0.02907699 0.439476 0.02915894 0.437552 0.028014 0.437679 0.02837097 0.437173 0.02835196 0.437213 0.028162 0.438539 0.027906 0.438429 0.02803099 0.437552 0.028014 0.437396 0.02769994 0.438276 0.028279 0.439049 0.02906 0.438392 0.03011196 0.437361 0.02926099 0.436425 0.03068798 0.436577 0.03041195 0.437545 0.03064495 0.437632 0.03078496 0.426133 0.04250597 0.426248 0.04247295 0.426695 0.04266798 0.426764 0.04298698 0.428196 0.04252499 0.427756 0.04183399 0.428806 0.04114598 0.429065 0.04093897 0.424195 0.040757 0.425464 0.04145097 0.425737 0.042391 0.424816 0.04229199 0.427256 0.04119098 0.427553 0.04163396 0.426248 0.04247295 0.42641 0.04181998 0.427034 0.04086697 0.427256 0.04119098 0.42641 0.04181998 0.426458 0.041224 0.428309 0.04057097 0.428479 0.04083895 0.427553 0.04163396 0.427256 0.04119098 0.424976 0.03936296 0.426026 0.03986996 0.425464 0.04145097 0.424195 0.040757 0.425737 0.042391 0.425464 0.04145097 0.426082 0.04222798 0.426133 0.04250597 0.426764 0.04298698 0.426695 0.04266798 0.427756 0.04183399 0.428196 0.04252499 0.426887 0.04078698 0.427034 0.04086697 0.426458 0.041224 0.426269 0.04119795 0.426026 0.03986996 0.426512 0.04028099 0.426113 0.04095 0.425464 0.04145097 0.426269 0.04119795 0.426458 0.041224 0.42641 0.04181998 0.426082 0.04222798 0.426082 0.04222798 0.42641 0.04181998 0.426248 0.04247295 0.426133 0.04250597 0.429065 0.04093897 0.428806 0.04114598 0.428479 0.04083895 0.428753 0.04060196 0.428753 0.04060196 0.428479 0.04083895 0.428309 0.04057097 0.428148 0.04030597 0.427553 0.04163396 0.427756 0.04183399 0.426695 0.04266798 0.426248 0.04247295 0.425464 0.04145097 0.426113 0.04095 0.426269 0.04119795 0.426082 0.04222798 0.426512 0.04028099 0.426887 0.04078698 0.426269 0.04119795 0.426113 0.04095 0.429261 0.04102098 0.429065 0.04093897 0.428753 0.04060196 0.428957 0.04043799 0.425737 0.042391 0.426133 0.04250597 0.426764 0.04298698 0.426596 0.04307496 0.428957 0.04043799 0.428753 0.04060196 0.428148 0.04030597 0.427854 0.03959196 0.426596 0.04307496 0.426764 0.04298698 0.428196 0.04252499 0.428355 0.04270595 0.428479 0.04083895 0.428806 0.04114598 0.427756 0.04183399 0.427553 0.04163396 0.428355 0.04270595 0.428196 0.04252499 0.429065 0.04093897 0.429261 0.04102098 0.504719 0.03113597 0.502736 0.02564895 0.505744 0.02288299 0.507726 0.027152 0.493344 0.03433495 0.498615 0.03736799 0.499556 0.04664099 0.486114 0.03848695 0.505101 0.04153698 0.508342 0.03513997 0.512434 0.03856599 0.508718 0.04465997 0.373048 0.06664395 0.370157 0.06470596 0.37089 0.06191295 0.373901 0.06377899 0.496585 0.02489197 0.499268 0.01549899 0.500437 0.01519596 0.499284 0.02681899 0.504719 0.03113597 0.507726 0.027152 0.511151 0.03127098 0.508342 0.03513997 0.504457 0.04923796 0.499556 0.04664099 0.505101 0.04153698 0.508718 0.04465997 0.499284 0.02681899 0.500437 0.01519596 0.501858 0.01630896 0.502736 0.02564895 0.501792 0.03452396 0.504719 0.03113597 0.508342 0.03513997 0.505101 0.04153698 0.373901 0.06377899 0.37089 0.06191295 0.371551 0.05800199 0.374109 0.06031399 0.512255 0.04717499 0.51537 0.04071599 0.518578 0.04274296 0.515658 0.04902696 0.518578 0.04274296 0.521859 0.04450196 0.520012 0.04924297 0.515658 0.04902696 0.376386 0.06577301 0.373901 0.06377899 0.374109 0.06031399 0.377657 0.06321901 0.377537 0.06956297 0.373048 0.06664395 0.373901 0.06377899 0.376386 0.06577301 0.524805 0.04487395 0.521859 0.04450196 0.523518 0.04077899 0.526032 0.04131197 0.524078 0.05110496 0.520012 0.04924297 0.521859 0.04450196 0.524805 0.04487395 0.508718 0.04465997 0.512434 0.03856599 0.51537 0.04071599 0.512255 0.04717499 0.504457 0.04923796 0.508718 0.04465997 0.512255 0.04717499 0.509109 0.05244898 0.377657 0.06321901 0.37881 0.05918198 0.38162 0.06202596 0.380596 0.066141 0.51537 0.04071599 0.51795 0.03650295 0.521166 0.03838294 0.518578 0.04274296 0.512434 0.03856599 0.515179 0.03448897 0.51795 0.03650295 0.51537 0.04071599 0.521166 0.03838294 0.522787 0.03540098 0.52525 0.03658294 0.523518 0.04077899 0.502736 0.02564895 0.501858 0.01630896 0.504189 0.01608598 0.505744 0.02288299 0.501792 0.03452396 0.499284 0.02681899 0.502736 0.02564895 0.504719 0.03113597 0.377657 0.06321901 0.380596 0.066141 0.377537 0.06956297 0.376386 0.06577301 0.499284 0.02681899 0.498981 0.03222197 0.496874 0.03106999 0.496585 0.02489197 0.524805 0.04487395 0.526032 0.04131197 0.528473 0.04153198 0.527526 0.04471796 0.498615 0.03736799 0.498981 0.03222197 0.499284 0.02681899 0.501792 0.03452396 0.524078 0.05110496 0.524805 0.04487395 0.527526 0.04471796 0.528692 0.04951697 0.377657 0.06321901 0.375715 0.05736696 0.376309 0.05647599 0.37881 0.05918198 0.493344 0.03433495 0.496874 0.03106999 0.498981 0.03222197 0.498615 0.03736799 0.374109 0.06031399 0.371551 0.05800199 0.37265 0.054847 0.374407 0.05601495 0.374109 0.06031399 0.374407 0.05601495 0.375715 0.05736696 0.377657 0.06321901 0.518578 0.04274296 0.521166 0.03838294 0.523518 0.04077899 0.521859 0.04450196 0.508342 0.03513997 0.511151 0.03127098 0.515179 0.03448897 0.512434 0.03856599 0.498615 0.03736799 0.501792 0.03452396 0.505101 0.04153698 0.499556 0.04664099 0.526032 0.04131197 0.523518 0.04077899 0.52525 0.03658294 0.527309 0.03832596 0.524951 0.023898 0.525302 0.02150499 0.526902 0.02252596 0.526328 0.02429896 0.362876 0.04847598 0.360569 0.05204194 0.357587 0.04859596 0.360332 0.04765599 0.521869 0.01755899 0.520188 0.01716196 0.519704 0.01659399 0.521879 0.01682698 0.52399 0.02336096 0.524261 0.02146697 0.525302 0.02150499 0.524951 0.023898 0.525683 0.013659 0.525296 0.016402 0.522272 0.01526194 0.522002 0.01271897 0.515958 0.02544295 0.516471 0.02494996 0.519633 0.02683395 0.519743 0.02743697 0.37089 0.06191295 0.36806 0.06058496 0.368432 0.05640697 0.371551 0.05800199 0.511002 0.02447599 0.514281 0.02049899 0.515958 0.02544295 0.513635 0.02818 0.523238 0.02481895 0.52399 0.02336096 0.524951 0.023898 0.523734 0.02536296 0.521879 0.01682698 0.519704 0.01659399 0.519027 0.01434397 0.522272 0.01526194 0.525967 0.02989196 0.527043 0.026865 0.528446 0.02809 0.527907 0.03043699 0.527907 0.03043699 0.528446 0.02809 0.52998 0.027646 0.529893 0.03090095 0.526902 0.02252596 0.525302 0.02150499 0.525008 0.01886999 0.526916 0.01873695 0.362821 0.05324095 0.360569 0.05204194 0.362876 0.04847598 0.364591 0.04960495 0.36806 0.06058496 0.364187 0.058308 0.365177 0.05447697 0.368432 0.05640697 0.35511 0.05113697 0.358873 0.05491995 0.357196 0.05727195 0.354194 0.05540394 0.371551 0.05800199 0.368432 0.05640697 0.370114 0.05360698 0.37265 0.054847 0.514281 0.02049899 0.514932 0.02072 0.516471 0.02494996 0.515958 0.02544295 0.523587 0.02811294 0.525209 0.02613699 0.527043 0.026865 0.525967 0.02989196 0.522234 0.026775 0.523734 0.02536296 0.525209 0.02613699 0.523587 0.02811294 0.361324 0.05643397 0.358873 0.05491995 0.360569 0.05204194 0.362821 0.05324095 0.505744 0.02288299 0.504189 0.01608598 0.507163 0.01390498 0.508494 0.01957398 0.507726 0.027152 0.511002 0.02447599 0.513635 0.02818 0.511151 0.03127098 0.522787 0.03540098 0.524516 0.03223395 0.526821 0.03329396 0.52525 0.03658294 0.513635 0.02818 0.515958 0.02544295 0.519743 0.02743697 0.51737 0.03116095 0.528913 0.033975 0.526821 0.03329396 0.527907 0.03043699 0.529893 0.03090095 0.365177 0.05447697 0.362821 0.05324095 0.364591 0.04960495 0.367398 0.05161899 0.514281 0.02049899 0.510842 0.01788097 0.513833 0.01570898 0.51508 0.01857596 0.367375 0.06323695 0.363547 0.06112694 0.364187 0.058308 0.36806 0.06058496 0.527309 0.03832596 0.52525 0.03658294 0.526821 0.03329396 0.528913 0.033975 0.519743 0.02743697 0.519633 0.02683395 0.522193 0.02645999 0.522234 0.026775 0.514281 0.02049899 0.51508 0.01857596 0.515947 0.01914095 0.514932 0.02072 0.370157 0.06470596 0.367375 0.06323695 0.36806 0.06058496 0.37089 0.06191295 0.357587 0.04859596 0.360569 0.05204194 0.358873 0.05491995 0.35511 0.05113697 0.523853 0.01919096 0.525008 0.01886999 0.525302 0.02150499 0.524261 0.02146697 0.521869 0.01755899 0.521879 0.01682698 0.524583 0.018233 0.523853 0.01919096 0.511002 0.02447599 0.508494 0.01957398 0.510842 0.01788097 0.514281 0.02049899 0.525296 0.016402 0.524583 0.018233 0.521879 0.01682698 0.522272 0.01526194 0.507726 0.027152 0.505744 0.02288299 0.508494 0.01957398 0.511002 0.02447599 0.522097 0.03074795 0.523587 0.02811294 0.525967 0.02989196 0.524516 0.03223395 0.360262 0.05875396 0.357196 0.05727195 0.358873 0.05491995 0.361324 0.05643397 0.510842 0.01788097 0.510257 0.01257199 0.513697 0.01211297 0.513833 0.01570898 0.519743 0.02743697 0.522234 0.026775 0.523587 0.02811294 0.522097 0.03074795 0.363547 0.06112694 0.360262 0.05875396 0.361324 0.05643397 0.364187 0.058308 0.520217 0.03332197 0.522097 0.03074795 0.524516 0.03223395 0.522787 0.03540098 0.51737 0.03116095 0.519743 0.02743697 0.522097 0.03074795 0.520217 0.03332197 0.511151 0.03127098 0.513635 0.02818 0.51737 0.03116095 0.515179 0.03448897 0.51795 0.03650295 0.520217 0.03332197 0.522787 0.03540098 0.521166 0.03838294 0.517206 0.01706194 0.516027 0.01470297 0.519027 0.01434397 0.519704 0.01659399 0.522272 0.01526194 0.519027 0.01434397 0.518844 0.01266795 0.522002 0.01271897 0.526328 0.02429896 0.526902 0.02252596 0.529605 0.02406799 0.527977 0.02524399 0.515179 0.03448897 0.51737 0.03116095 0.520217 0.03332197 0.51795 0.03650295 0.491347 0.014292 0.49177 0.01178395 0.493999 0.01128798 0.493421 0.01445096 0.373131 0.047387 0.371313 0.04733097 0.37043 0.04392194 0.371768 0.04304397 0.508494 0.01957398 0.507163 0.01390498 0.510257 0.01257199 0.510842 0.01788097 0.52998 0.027646 0.528446 0.02809 0.527043 0.026865 0.527977 0.02524399 0.525209 0.02613699 0.526328 0.02429896 0.527977 0.02524399 0.527043 0.026865 0.515943 0.01239895 0.518844 0.01266795 0.519027 0.01434397 0.516027 0.01470297 0.523734 0.02536296 0.524951 0.023898 0.526328 0.02429896 0.525209 0.02613699 0.513833 0.01570898 0.513697 0.01211297 0.515943 0.01239895 0.516027 0.01470297 0.52998 0.027646 0.527977 0.02524399 0.529605 0.02406799 0.531227 0.02734595 0.526032 0.04131197 0.527309 0.03832596 0.529695 0.03871399 0.528473 0.04153198 0.368432 0.05640697 0.365177 0.05447697 0.367398 0.05161899 0.370114 0.05360698 0.529605 0.02406799 0.526902 0.02252596 0.526916 0.01873695 0.529505 0.01945799 0.524516 0.03223395 0.525967 0.02989196 0.527907 0.03043699 0.526821 0.03329396 0.522193 0.02645999 0.523238 0.02481895 0.523734 0.02536296 0.522234 0.026775 0.529893 0.03090095 0.52998 0.027646 0.531227 0.02734595 0.53183 0.03072798 0.364187 0.058308 0.361324 0.05643397 0.362821 0.05324095 0.365177 0.05447697 0.528913 0.033975 0.529893 0.03090095 0.53183 0.03072798 0.531012 0.034648 0.527309 0.03832596 0.528913 0.033975 0.531012 0.034648 0.529695 0.03871399 0.38666 0.058833 0.389768 0.06413596 0.385627 0.063771 0.384118 0.06124997 0.38162 0.06202596 0.383617 0.06505095 0.383789 0.06833499 0.380596 0.066141 0.384118 0.06124997 0.385627 0.063771 0.383617 0.06505095 0.38162 0.06202596 0.471799 0.04446095 0.468061 0.03816795 0.486114 0.03848695 0.484249 0.04405295 0.477901 0.03121 0.486114 0.03848695 0.468061 0.03816795 0.471188 0.03092795 0.487487 0.03020596 0.486114 0.03848695 0.477901 0.03121 0.480225 0.02686095 0.470856 0.02036595 0.468566 0.01278698 0.469238 0.012609 0.473532 0.02132296 0.477901 0.03121 0.474206 0.026048 0.473532 0.02132296 0.480225 0.02686095 0.493344 0.03433495 0.49215 0.02912396 0.496585 0.02489197 0.496874 0.03106999 0.477901 0.03121 0.471188 0.03092795 0.471873 0.025424 0.474206 0.026048 0.385124 0.05144798 0.384646 0.05493199 0.38301 0.05124497 0.383734 0.04798495 0.383789 0.06833499 0.383617 0.06505095 0.385627 0.063771 0.389768 0.06413596 0.390448 0.05647397 0.391812 0.06091296 0.389768 0.06413596 0.38666 0.058833 0.388361 0.05428999 0.38693 0.05508399 0.386399 0.05321496 0.387128 0.05279594 0.380067 0.057401 0.381817 0.05722194 0.384118 0.06124997 0.38162 0.06202596 0.473532 0.02132296 0.474206 0.026048 0.471873 0.025424 0.470856 0.02036595 0.377697 0.05335098 0.379398 0.05325394 0.381817 0.05722194 0.380067 0.057401 0.390448 0.05647397 0.38666 0.058833 0.38693 0.05508399 0.388361 0.05428999 0.381817 0.05722194 0.383815 0.05621898 0.38666 0.058833 0.384118 0.06124997 0.379398 0.05325394 0.381474 0.05221796 0.383815 0.05621898 0.381817 0.05722194 0.38162 0.06202596 0.37881 0.05918198 0.378271 0.05644398 0.380067 0.057401 0.473532 0.02132296 0.469238 0.012609 0.470773 0.01303297 0.476842 0.02036595 0.386399 0.05321496 0.38693 0.05508399 0.384646 0.05493199 0.385124 0.05144798 0.384646 0.05493199 0.383815 0.05621898 0.381474 0.05221796 0.38301 0.05124497 0.38693 0.05508399 0.38666 0.058833 0.383815 0.05621898 0.384646 0.05493199 0.484249 0.04405295 0.486114 0.03848695 0.499556 0.04664099 0.495172 0.05087995 0.49215 0.02912396 0.493344 0.03433495 0.486114 0.03848695 0.487487 0.03020596 0.37881 0.05918198 0.376309 0.05647599 0.375335 0.05504 0.378271 0.05644398 0.499268 0.01549899 0.496585 0.02489197 0.495498 0.02187997 0.49734 0.01743698 0.377697 0.05335098 0.376089 0.053213 0.374609 0.05055499 0.376093 0.05024498 0.376093 0.05024498 0.374609 0.05055499 0.373131 0.047387 0.374548 0.04672795 0.378158 0.04488098 0.379356 0.04424595 0.381036 0.04780197 0.379644 0.04881495 0.493332 0.01973599 0.492316 0.01748895 0.493667 0.01727396 0.49522 0.018323 0.374609 0.05055499 0.372561 0.05075496 0.371313 0.04733097 0.373131 0.047387 0.480249 0.01612299 0.47579 0.01344394 0.478346 0.01184695 0.481303 0.01291197 0.38301 0.05124497 0.381036 0.04780197 0.382684 0.04563599 0.383734 0.04798495 0.376089 0.053213 0.374109 0.05304598 0.372561 0.05075496 0.374609 0.05055499 0.479709 0.01910197 0.473214 0.01389294 0.47579 0.01344394 0.480249 0.01612299 0.491523 0.02456295 0.486774 0.02437394 0.48676 0.02123296 0.490358 0.02094697 0.486774 0.02437394 0.481953 0.02316999 0.48295 0.02049899 0.48676 0.02123296 0.487487 0.03020596 0.480225 0.02686095 0.481953 0.02316999 0.486774 0.02437394 0.380067 0.057401 0.378271 0.05644398 0.376089 0.053213 0.377697 0.05335098 0.476842 0.02036595 0.470773 0.01303297 0.473214 0.01389294 0.479709 0.01910197 0.378271 0.05644398 0.375335 0.05504 0.374109 0.05304598 0.376089 0.053213 0.49734 0.01743698 0.495498 0.02187997 0.493332 0.01973599 0.49522 0.018323 0.481953 0.02316999 0.476842 0.02036595 0.479709 0.01910197 0.48295 0.02049899 0.480225 0.02686095 0.473532 0.02132296 0.476842 0.02036595 0.481953 0.02316999 0.495498 0.02187997 0.491523 0.02456295 0.490358 0.02094697 0.493332 0.01973599 0.381036 0.04780197 0.379356 0.04424595 0.381499 0.04213798 0.382684 0.04563599 0.496585 0.02489197 0.49215 0.02912396 0.491523 0.02456295 0.495498 0.02187997 0.48676 0.02123296 0.486508 0.01771998 0.489547 0.01770895 0.490358 0.02094697 0.48295 0.02049899 0.483724 0.01745396 0.486508 0.01771998 0.48676 0.02123296 0.379398 0.05325394 0.377684 0.050107 0.379644 0.04881495 0.381474 0.05221796 0.377697 0.05335098 0.376093 0.05024498 0.377684 0.050107 0.379398 0.05325394 0.379644 0.04881495 0.381036 0.04780197 0.38301 0.05124497 0.381474 0.05221796 0.49215 0.02912396 0.487487 0.03020596 0.486774 0.02437394 0.491523 0.02456295 0.48295 0.02049899 0.479709 0.01910197 0.480249 0.01612299 0.483724 0.01745396 0.489547 0.01770895 0.492316 0.01748895 0.493332 0.01973599 0.490358 0.02094697 0.492316 0.01748895 0.491347 0.014292 0.493421 0.01445096 0.493667 0.01727396 0.377684 0.050107 0.37632 0.045852 0.378158 0.04488098 0.379644 0.04881495 0.376093 0.05024498 0.374548 0.04672795 0.37632 0.045852 0.377684 0.050107 0.483757 0.003898978 0.4857 0.001881957 0.486048 0.002201974 0.485148 0.003296971 0.488028 0.001462996 0.488096 0.001959979 0.4857 0.001881957 0.485235 0.001637995 0.372083 0.03698098 0.370809 0.03722196 0.370946 0.03569096 0.371555 0.03579199 0.490936 0.002214968 0.490707 0.002833962 0.488091 0.001911997 0.488032 0.001411974 0.371756 0.03333395 0.372046 0.03457295 0.370946 0.03569096 0.369831 0.03505498 0.491667 0.004442989 0.490707 0.002833962 0.490936 0.002214968 0.492508 0.003398954 0.374114 0.03307199 0.373432 0.03441298 0.372046 0.03457295 0.371756 0.03333395 0.372046 0.03457295 0.372363 0.03545695 0.371555 0.03579199 0.370946 0.03569096 0.482928 0.005718946 0.480871 0.005056977 0.482426 0.003058969 0.483757 0.003898978 0.377873 0.03557598 0.376643 0.03709197 0.375071 0.03529399 0.376465 0.03401798 0.369369 0.04031997 0.368867 0.03667098 0.370809 0.03722196 0.370768 0.03981596 0.490295 0.007558941 0.49113 0.004406988 0.491667 0.004442989 0.49224 0.007583975 0.489973 0.003219962 0.48968 0.003461956 0.488934 0.003198981 0.489047 0.00308299 0.37388 0.03615999 0.373145 0.03510695 0.373432 0.03441298 0.375071 0.03529399 0.49113 0.004406988 0.490227 0.003116965 0.490707 0.002833962 0.491667 0.004442989 0.370809 0.03722196 0.368867 0.03667098 0.369831 0.03505498 0.370946 0.03569096 0.37474 0.03823298 0.37388 0.03615999 0.375071 0.03529399 0.376643 0.03709197 0.373432 0.03441298 0.373145 0.03510695 0.372363 0.03545695 0.372046 0.03457295 0.372541 0.03913998 0.370768 0.03981596 0.370809 0.03722196 0.372083 0.03698098 0.482928 0.005718946 0.483757 0.003898978 0.485148 0.003296971 0.484528 0.005721986 0.486508 0.01771998 0.486241 0.01448297 0.489161 0.01465696 0.489547 0.01770895 0.372768 0.03662794 0.372363 0.03545695 0.373145 0.03510695 0.37388 0.03615999 0.377455 0.03995394 0.376643 0.03709197 0.377873 0.03557598 0.379603 0.03894698 0.483724 0.01745396 0.483885 0.01401895 0.486241 0.01448297 0.486508 0.01771998 0.372083 0.03698098 0.371555 0.03579199 0.372363 0.03545695 0.372768 0.03662794 0.379356 0.04424595 0.377455 0.03995394 0.379603 0.03894698 0.381499 0.04213798 0.481982 0.01052695 0.478959 0.008387982 0.480871 0.005056977 0.482928 0.005718946 0.486241 0.01448297 0.486573 0.01213198 0.489702 0.011967 0.489161 0.01465696 0.49177 0.01178395 0.49224 0.007583975 0.494206 0.007232964 0.493999 0.01128798 0.373808 0.03873497 0.372768 0.03662794 0.37388 0.03615999 0.37474 0.03823298 0.481303 0.01291197 0.478346 0.01184695 0.478959 0.008387982 0.481982 0.01052695 0.483724 0.01745396 0.480249 0.01612299 0.481303 0.01291197 0.483885 0.01401895 0.483816 0.011123 0.484528 0.005721986 0.487382 0.007499992 0.486573 0.01213198 0.37632 0.045852 0.374788 0.04154795 0.376052 0.04067599 0.378158 0.04488098 0.489161 0.01465696 0.491347 0.014292 0.492316 0.01748895 0.489547 0.01770895 0.381979 0.03652697 0.382761 0.03457397 0.38431 0.03485196 0.384191 0.03629797 0.374548 0.04672795 0.373059 0.04247695 0.374788 0.04154795 0.37632 0.045852 0.489702 0.011967 0.49177 0.01178395 0.491347 0.014292 0.489161 0.01465696 0.374788 0.04154795 0.373808 0.03873497 0.37474 0.03823298 0.376052 0.04067599 0.490295 0.007558941 0.49224 0.007583975 0.49177 0.01178395 0.489702 0.011967 0.373059 0.04247695 0.372541 0.03913998 0.373808 0.03873497 0.374788 0.04154795 0.374548 0.04672795 0.373131 0.047387 0.371768 0.04304397 0.373059 0.04247695 0.487675 0.006336987 0.487544 0.005753993 0.489655 0.00574696 0.490045 0.006120979 0.373059 0.04247695 0.371768 0.04304397 0.370768 0.03981596 0.372541 0.03913998 0.488005 0.002710998 0.487996 0.002875983 0.487035 0.002752959 0.486953 0.002582967 0.489047 0.00308299 0.488934 0.003198981 0.487996 0.002875983 0.488005 0.002710998 0.488 0.002512991 0.488005 0.002710998 0.486953 0.002582967 0.486309 0.002433955 0.490045 0.006120979 0.489655 0.00574696 0.490254 0.004559993 0.490728 0.004502952 0.486573 0.01213198 0.487382 0.007499992 0.490295 0.007558941 0.489702 0.011967 0.489973 0.003219962 0.489047 0.00308299 0.488005 0.002710998 0.488 0.002512991 0.372541 0.03913998 0.372083 0.03698098 0.372768 0.03662794 0.373808 0.03873497 0.483885 0.01401895 0.481303 0.01291197 0.481982 0.01052695 0.483816 0.011123 0.376052 0.04067599 0.377455 0.03995394 0.379356 0.04424595 0.378158 0.04488098 0.37474 0.03823298 0.376643 0.03709197 0.377455 0.03995394 0.376052 0.04067599 0.483816 0.011123 0.481982 0.01052695 0.482928 0.005718946 0.484528 0.005721986 0.482426 0.003058969 0.485235 0.001637995 0.4857 0.001881957 0.483757 0.003898978 0.494206 0.007232964 0.49224 0.007583975 0.491667 0.004442989 0.492508 0.003398954 0.488112 0.002282977 0.488 0.002512991 0.486309 0.002433955 0.486048 0.002201974 0.490728 0.004502952 0.490254 0.004559993 0.48968 0.003461956 0.489973 0.003219962 0.371768 0.04304397 0.37043 0.04392194 0.369369 0.04031997 0.370768 0.03981596 0.490227 0.003116965 0.489973 0.003219962 0.488 0.002512991 0.488108 0.002263963 0.49113 0.004406988 0.490728 0.004502952 0.489973 0.003219962 0.490227 0.003116965 0.487382 0.007499992 0.487675 0.006336987 0.490045 0.006120979 0.490295 0.007558941 0.490707 0.002833962 0.490227 0.003116965 0.488108 0.002263963 0.488091 0.001911997 0.490295 0.007558941 0.490045 0.006120979 0.490728 0.004502952 0.49113 0.004406988 0.483885 0.01401895 0.483816 0.011123 0.486573 0.01213198 0.486241 0.01448297 0.485312 0.004683971 0.485609 0.004597961 0.487544 0.005753993 0.487675 0.006336987 0.488096 0.001959979 0.488112 0.002282977 0.486048 0.002201974 0.4857 0.001881957 0.484528 0.005721986 0.485312 0.004683971 0.487675 0.006336987 0.487382 0.007499992 0.375071 0.03529399 0.373432 0.03441298 0.374114 0.03307199 0.376465 0.03401798 0.388361 0.05428999 0.387128 0.05279594 0.386157 0.05041497 0.387947 0.05120295 0.394025 0.05079799 0.395234 0.04898595 0.398362 0.05054098 0.398487 0.05584698 0.392457 0.04771399 0.393884 0.046422 0.395234 0.04898595 0.394025 0.05079799 0.390084 0.05256199 0.387947 0.05120295 0.38738 0.04854398 0.38899 0.04884195 0.390448 0.05647397 0.388361 0.05428999 0.387947 0.05120295 0.390084 0.05256199 0.464703 0.02253198 0.467048 0.01901596 0.470856 0.02036595 0.467688 0.02621096 0.398487 0.05584698 0.3995 0.06150096 0.395165 0.06013494 0.393667 0.05642199 0.393667 0.05642199 0.395165 0.06013494 0.391812 0.06091296 0.390448 0.05647397 0.461008 0.04869198 0.45516 0.04399394 0.468061 0.03816795 0.471799 0.04446095 0.458401 0.03442299 0.468061 0.03816795 0.45516 0.04399394 0.454295 0.03635597 0.468061 0.03816795 0.464888 0.02894097 0.467688 0.02621096 0.471188 0.03092795 0.458401 0.03442299 0.458991 0.03061097 0.464888 0.02894097 0.468061 0.03816795 0.467688 0.02621096 0.464888 0.02894097 0.462314 0.02421396 0.464703 0.02253198 0.398362 0.05054098 0.39722 0.04622596 0.397733 0.04580599 0.400166 0.050336 0.387947 0.05120295 0.386157 0.05041497 0.385083 0.04821896 0.38738 0.04854398 0.461008 0.04869198 0.471799 0.04446095 0.475622 0.05435097 0.466356 0.05690896 0.458401 0.03442299 0.454295 0.03635597 0.453226 0.03350096 0.454138 0.03294795 0.400351 0.04771995 0.397801 0.04450398 0.397557 0.04326498 0.399613 0.04419296 0.400166 0.050336 0.397733 0.04580599 0.397801 0.04450398 0.400351 0.04771995 0.450538 0.03095495 0.448061 0.02693897 0.448236 0.02632099 0.453397 0.028831 0.453226 0.03350096 0.450538 0.03095495 0.453397 0.028831 0.454138 0.03294795 0.447606 0.02774995 0.448563 0.03114295 0.446603 0.03108495 0.446728 0.02847498 0.458401 0.03442299 0.454138 0.03294795 0.453397 0.028831 0.458991 0.03061097 0.471188 0.03092795 0.467688 0.02621096 0.470856 0.02036595 0.471873 0.025424 0.394025 0.05079799 0.39196 0.05212897 0.390856 0.04896199 0.392457 0.04771399 0.393667 0.05642199 0.390448 0.05647397 0.390084 0.05256199 0.39196 0.05212897 0.453397 0.028831 0.448236 0.02632099 0.449684 0.025002 0.454886 0.02591699 0.398487 0.05584698 0.393667 0.05642199 0.39196 0.05212897 0.394025 0.05079799 0.39196 0.05212897 0.390084 0.05256199 0.38899 0.04884195 0.390856 0.04896199 0.464888 0.02894097 0.458991 0.03061097 0.459304 0.02579396 0.462314 0.02421396 0.468566 0.01278698 0.470856 0.02036595 0.467048 0.01901596 0.467674 0.01492899 0.395234 0.04898595 0.396677 0.04623496 0.39722 0.04622596 0.398362 0.05054098 0.458991 0.03061097 0.453397 0.028831 0.454886 0.02591699 0.459304 0.02579396 0.391812 0.06091296 0.395165 0.06013494 0.3995 0.06150096 0.389768 0.06413596 0.398487 0.05584698 0.402434 0.05556696 0.40258 0.05882495 0.3995 0.06150096 0.398487 0.05584698 0.398362 0.05054098 0.400166 0.050336 0.402434 0.05556696 0.450538 0.03095495 0.448563 0.03114295 0.447606 0.02774995 0.448061 0.02693897 0.393884 0.046422 0.39538 0.04429298 0.396677 0.04623496 0.395234 0.04898595 0.467674 0.01492899 0.467048 0.01901596 0.464987 0.01823997 0.466155 0.01574295 0.460732 0.02215296 0.459676 0.02029198 0.461311 0.019436 0.462718 0.02087396 0.455697 0.02385395 0.451037 0.02340894 0.451797 0.02134996 0.45535 0.02168297 0.45535 0.02168297 0.451797 0.02134996 0.45188 0.01949399 0.454367 0.019418 0.392165 0.04221898 0.39067 0.03894996 0.392737 0.03868699 0.39381 0.04136395 0.462974 0.01792699 0.461761 0.01539695 0.463209 0.01336395 0.464356 0.01554995 0.38899 0.04884195 0.38738 0.04854398 0.385215 0.04450696 0.386544 0.04403996 0.460163 0.01722097 0.461761 0.01539695 0.462974 0.01792699 0.461311 0.019436 0.461311 0.019436 0.462974 0.01792699 0.464987 0.01823997 0.462718 0.02087396 0.457986 0.02115398 0.45535 0.02168297 0.454367 0.019418 0.456727 0.01908296 0.458648 0.02308696 0.455697 0.02385395 0.45535 0.02168297 0.457986 0.02115398 0.388775 0.039361 0.39067 0.03894996 0.392165 0.04221898 0.389853 0.04357194 0.454886 0.02591699 0.449684 0.025002 0.451037 0.02340894 0.455697 0.02385395 0.458648 0.02308696 0.457986 0.02115398 0.459676 0.02029198 0.460732 0.02215296 0.464703 0.02253198 0.462314 0.02421396 0.460732 0.02215296 0.462718 0.02087396 0.464987 0.01823997 0.462974 0.01792699 0.464356 0.01554995 0.466155 0.01574295 0.389853 0.04357194 0.392165 0.04221898 0.393884 0.046422 0.392457 0.04771399 0.462314 0.02421396 0.459304 0.02579396 0.458648 0.02308696 0.460732 0.02215296 0.462718 0.02087396 0.464987 0.01823997 0.467048 0.01901596 0.464703 0.02253198 0.393884 0.046422 0.392165 0.04221898 0.39381 0.04136395 0.39538 0.04429298 0.459304 0.02579396 0.454886 0.02591699 0.455697 0.02385395 0.458648 0.02308696 0.388824 0.04381096 0.387661 0.03975498 0.388775 0.039361 0.389853 0.04357194 0.38899 0.04884195 0.386544 0.04403996 0.388824 0.04381096 0.390856 0.04896199 0.38738 0.04854398 0.385083 0.04821896 0.383664 0.045246 0.385215 0.04450696 0.390856 0.04896199 0.388824 0.04381096 0.389853 0.04357194 0.392457 0.04771399 0.39067 0.03894996 0.389763 0.03674596 0.391516 0.03648096 0.392737 0.03868699 0.453512 0.01773399 0.45096 0.01738995 0.450838 0.01510798 0.453059 0.01514899 0.38681 0.03802597 0.386352 0.03629398 0.387351 0.03608399 0.388137 0.03750795 0.389763 0.03674596 0.389019 0.03510195 0.390453 0.03441995 0.391516 0.03648096 0.384366 0.04078996 0.38264 0.04151999 0.381794 0.03930795 0.384034 0.03876894 0.461761 0.01539695 0.460774 0.01352 0.461918 0.01194095 0.463209 0.01336395 0.385215 0.04450696 0.383664 0.045246 0.38264 0.04151999 0.384366 0.04078996 0.453059 0.01514899 0.452514 0.01404595 0.453353 0.014126 0.454572 0.01470398 0.456336 0.009914994 0.45631 0.01015299 0.454771 0.01058197 0.454649 0.01036298 0.386926 0.03446096 0.386605 0.03410899 0.387276 0.03355896 0.388127 0.03405398 0.460032 0.009945988 0.459343 0.01138496 0.45817 0.01030397 0.457955 0.008847951 0.390453 0.03441995 0.389019 0.03510195 0.388127 0.03405398 0.388992 0.03324794 0.453059 0.01514899 0.450838 0.01510798 0.450998 0.01290094 0.452514 0.01404595 0.3861 0.03482794 0.385838 0.03417599 0.386605 0.03410899 0.386926 0.03446096 0.454367 0.019418 0.45188 0.01949399 0.45096 0.01738995 0.453512 0.01773399 0.452514 0.01404595 0.451805 0.01147198 0.452183 0.01152795 0.453353 0.014126 0.385226 0.03528898 0.38431 0.03485196 0.384654 0.03423595 0.385229 0.03455299 0.385226 0.03528898 0.385229 0.03455299 0.385838 0.03417599 0.3861 0.03482794 0.450998 0.01290094 0.451689 0.01096194 0.451805 0.01147198 0.452514 0.01404595 0.385514 0.038396 0.385172 0.036219 0.386352 0.03629398 0.38681 0.03802597 0.385709 0.03347396 0.385838 0.03417599 0.385229 0.03455299 0.384654 0.03423595 0.388127 0.03405398 0.387276 0.03355896 0.387387 0.03282499 0.388992 0.03324794 0.387661 0.03975498 0.38681 0.03802597 0.388137 0.03750795 0.388775 0.039361 0.387276 0.03355896 0.386605 0.03410899 0.385838 0.03417599 0.385709 0.03347396 0.455473 0.01738399 0.453512 0.01773399 0.453059 0.01514899 0.454572 0.01470398 0.38588 0.04019898 0.385514 0.038396 0.38681 0.03802597 0.387661 0.03975498 0.38431 0.03485196 0.382761 0.03457397 0.383652 0.03365397 0.384654 0.03423595 0.457709 0.01086699 0.456739 0.00930196 0.456729 0.008969962 0.45817 0.01030397 0.385555 0.03276795 0.385709 0.03347396 0.384654 0.03423595 0.383652 0.03365397 0.387351 0.03608399 0.389019 0.03510195 0.389763 0.03674596 0.388137 0.03750795 0.386544 0.04403996 0.38588 0.04019898 0.387661 0.03975498 0.388824 0.04381096 0.387387 0.03282499 0.387276 0.03355896 0.385709 0.03347396 0.385555 0.03276795 0.388137 0.03750795 0.389763 0.03674596 0.39067 0.03894996 0.388775 0.039361 0.457527 0.01673299 0.45621 0.01376497 0.458003 0.01258999 0.45935 0.01555895 0.455473 0.01738399 0.454572 0.01470398 0.45621 0.01376497 0.457527 0.01673299 0.384034 0.03876894 0.381794 0.03930795 0.381979 0.03652697 0.384191 0.03629797 0.387351 0.03608399 0.386926 0.03446096 0.388127 0.03405398 0.389019 0.03510195 0.458003 0.01258999 0.457709 0.01086699 0.45817 0.01030397 0.459343 0.01138496 0.385172 0.036219 0.384191 0.03629797 0.38431 0.03485196 0.385226 0.03528898 0.45817 0.01030397 0.456729 0.008969962 0.456452 0.008458971 0.457955 0.008847951 0.385514 0.038396 0.384034 0.03876894 0.384191 0.03629797 0.385172 0.036219 0.38588 0.04019898 0.384366 0.04078996 0.384034 0.03876894 0.385514 0.038396 0.458511 0.01843595 0.457527 0.01673299 0.45935 0.01555895 0.460163 0.01722097 0.453835 0.009825944 0.454286 0.009879946 0.452183 0.01152795 0.451805 0.01147198 0.386544 0.04403996 0.385215 0.04450696 0.384366 0.04078996 0.38588 0.04019898 0.456727 0.01908296 0.455473 0.01738399 0.457527 0.01673299 0.458511 0.01843595 0.456729 0.008969962 0.456739 0.00930196 0.454273 0.009853959 0.453578 0.009665966 0.458003 0.01258999 0.459343 0.01138496 0.460774 0.01352 0.45935 0.01555895 0.459676 0.02029198 0.458511 0.01843595 0.460163 0.01722097 0.461311 0.019436 0.45935 0.01555895 0.460774 0.01352 0.461761 0.01539695 0.460163 0.01722097 0.457986 0.02115398 0.456727 0.01908296 0.458511 0.01843595 0.459676 0.02029198 0.454572 0.01470398 0.453931 0.01368999 0.455809 0.01318198 0.45621 0.01376497 0.456727 0.01908296 0.454367 0.019418 0.453512 0.01773399 0.455473 0.01738399 0.397378 0.03520095 0.398043 0.03404295 0.399122 0.03472197 0.398911 0.03591996 0.454286 0.009879946 0.454541 0.01013898 0.452567 0.01167899 0.452183 0.01152795 0.439424 0.02577799 0.439715 0.02715694 0.438286 0.02701997 0.437964 0.02601999 0.456739 0.00930196 0.456723 0.009628951 0.454541 0.01013898 0.454273 0.009853959 0.460774 0.01352 0.459343 0.01138496 0.460032 0.009945988 0.461918 0.01194095 0.386352 0.03629398 0.3861 0.03482794 0.386926 0.03446096 0.387351 0.03608399 0.385172 0.036219 0.385226 0.03528898 0.3861 0.03482794 0.386352 0.03629398 0.454649 0.01036298 0.454771 0.01058197 0.453523 0.01138299 0.453399 0.01126098 0.453578 0.009502947 0.453835 0.009825944 0.451805 0.01147198 0.451689 0.01096194 0.456452 0.008458971 0.456729 0.008969962 0.453578 0.009665966 0.453383 0.009211957 0.45621 0.01376497 0.455809 0.01318198 0.45739 0.01200199 0.458003 0.01258999 0.454541 0.01013898 0.454649 0.01036298 0.453399 0.01126098 0.452567 0.01167899 0.456723 0.009628951 0.456336 0.009914994 0.454649 0.01036298 0.454541 0.01013898 0.405746 0.05603599 0.406326 0.05878597 0.40258 0.05882495 0.402434 0.05556696 0.448122 0.048895 0.453392 0.05432695 0.447269 0.05841296 0.443125 0.05299597 0.448122 0.048895 0.45516 0.04399394 0.461008 0.04869198 0.453392 0.05432695 0.414619 0.05442196 0.409892 0.05565196 0.411587 0.05144494 0.412634 0.05045199 0.412634 0.05045199 0.411587 0.05144494 0.410463 0.04518496 0.411399 0.04626798 0.444438 0.04706597 0.442237 0.04851299 0.440439 0.04568195 0.441848 0.04317796 0.453392 0.05432695 0.461008 0.04869198 0.466356 0.05690896 0.458745 0.06171 0.448122 0.048895 0.443125 0.05299597 0.442237 0.04851299 0.444438 0.04706597 0.440439 0.04568195 0.438128 0.04116696 0.439297 0.04190194 0.441848 0.04317796 0.409892 0.05565196 0.410095 0.06101 0.406326 0.05878597 0.405746 0.05603599 0.414619 0.05442196 0.414648 0.060148 0.410095 0.06101 0.409892 0.05565196 0.447269 0.05841296 0.453392 0.05432695 0.458745 0.06171 0.45279 0.06605696 0.417396 0.06329298 0.41508 0.06714797 0.410095 0.06101 0.414648 0.060148 0.40258 0.05882495 0.406326 0.05878597 0.410095 0.06101 0.3995 0.06150096 0.448122 0.048895 0.444438 0.04706597 0.441848 0.04317796 0.446267 0.04286199 0.403789 0.045385 0.401746 0.04531794 0.400549 0.04124099 0.402201 0.04087895 0.405516 0.04451996 0.403789 0.045385 0.402201 0.04087895 0.404161 0.04086798 0.406841 0.04875695 0.405279 0.05019199 0.403789 0.045385 0.405516 0.04451996 0.405279 0.05019199 0.40256 0.04989099 0.401746 0.04531794 0.403789 0.045385 0.448348 0.03446996 0.447587 0.03747898 0.445641 0.03563594 0.446129 0.03378397 0.399613 0.04419296 0.397557 0.04326498 0.397085 0.04187798 0.398761 0.04194796 0.405516 0.04451996 0.406573 0.04360795 0.40781 0.04650896 0.406841 0.04875695 0.401746 0.04531794 0.399613 0.04419296 0.398761 0.04194796 0.400549 0.04124099 0.40256 0.04989099 0.400351 0.04771995 0.399613 0.04419296 0.401746 0.04531794 0.446129 0.03378397 0.446603 0.03108495 0.448563 0.03114295 0.448348 0.03446996 0.445078 0.03984898 0.441721 0.04062396 0.441469 0.03829395 0.443996 0.03702795 0.447587 0.03747898 0.445078 0.03984898 0.443996 0.03702795 0.445641 0.03563594 0.405746 0.05603599 0.405279 0.05019199 0.406841 0.04875695 0.409892 0.05565196 0.402434 0.05556696 0.40256 0.04989099 0.405279 0.05019199 0.405746 0.05603599 0.447587 0.03747898 0.450116 0.03952598 0.446267 0.04286199 0.445078 0.03984898 0.411587 0.05144494 0.40781 0.04650896 0.409387 0.04379498 0.410463 0.04518496 0.446267 0.04286199 0.441848 0.04317796 0.441721 0.04062396 0.445078 0.03984898 0.45083 0.03539299 0.450538 0.03095495 0.453226 0.03350096 0.454295 0.03635597 0.448348 0.03446996 0.45083 0.03539299 0.450116 0.03952598 0.447587 0.03747898 0.45516 0.04399394 0.450116 0.03952598 0.45083 0.03539299 0.454295 0.03635597 0.441721 0.04062396 0.44019 0.04099696 0.440058 0.03913199 0.441469 0.03829395 0.409387 0.04379498 0.40781 0.04650896 0.406573 0.04360795 0.40793 0.04190999 0.448122 0.048895 0.446267 0.04286199 0.450116 0.03952598 0.45516 0.04399394 0.40256 0.04989099 0.402434 0.05556696 0.400166 0.050336 0.400351 0.04771995 0.406841 0.04875695 0.40781 0.04650896 0.411587 0.05144494 0.409892 0.05565196 0.441848 0.04317796 0.439297 0.04190194 0.44019 0.04099696 0.441721 0.04062396 0.45083 0.03539299 0.448348 0.03446996 0.448563 0.03114295 0.450538 0.03095495 0.400086 0.03522294 0.399122 0.03472197 0.399492 0.03402799 0.399952 0.03460395 0.443864 0.03413999 0.442746 0.033252 0.443133 0.03186595 0.444647 0.032709 0.438286 0.02701997 0.436948 0.027197 0.436854 0.02643495 0.437964 0.02601999 0.437188 0.02754294 0.437396 0.02769994 0.436136 0.02836894 0.435936 0.02818399 0.442233 0.03549295 0.441451 0.03451299 0.442746 0.033252 0.443864 0.03413999 0.401407 0.03687494 0.401198 0.03590595 0.402309 0.03560596 0.40264 0.03679096 0.441866 0.02874296 0.439715 0.02715694 0.439424 0.02577799 0.442076 0.02632898 0.446129 0.03378397 0.445641 0.03563594 0.443864 0.03413999 0.444647 0.032709 0.438549 0.02757495 0.437188 0.02754294 0.436948 0.027197 0.438286 0.02701997 0.442746 0.033252 0.44078 0.03180897 0.441501 0.03037297 0.443133 0.03186595 0.441451 0.03451299 0.439719 0.03311699 0.44078 0.03180897 0.442746 0.033252 0.39876 0.03726899 0.396935 0.03756397 0.397378 0.03520095 0.398911 0.03591996 0.445641 0.03563594 0.443996 0.03702795 0.442233 0.03549295 0.443864 0.03413999 0.435831 0.03105795 0.435358 0.02996695 0.435633 0.029679 0.43631 0.03086495 0.440713 0.036704 0.439271 0.03766095 0.438498 0.03638797 0.43985 0.03527599 0.405603 0.04035997 0.404752 0.03799295 0.4066 0.03785598 0.407032 0.03969699 0.446728 0.02847498 0.446603 0.03108495 0.444979 0.03045195 0.445607 0.02846097 0.435306 0.03098696 0.43473 0.02999597 0.435358 0.02996695 0.435831 0.03105795 0.444647 0.032709 0.444979 0.03045195 0.446603 0.03108495 0.446129 0.03378397 0.404752 0.03799295 0.404026 0.03630095 0.406007 0.03589999 0.4066 0.03785598 0.443996 0.03702795 0.441469 0.03829395 0.440713 0.036704 0.442233 0.03549295 0.438549 0.02757495 0.438539 0.027906 0.437396 0.02769994 0.437188 0.02754294 0.400117 0.03597396 0.400086 0.03522294 0.400915 0.03516 0.401198 0.03590595 0.435633 0.029679 0.435829 0.02957797 0.436425 0.03068798 0.43631 0.03086495 0.400915 0.03516 0.400773 0.03431898 0.401741 0.03436595 0.401958 0.03482598 0.439719 0.03311699 0.438768 0.03404295 0.436969 0.03220295 0.437708 0.03102999 0.400086 0.03522294 0.399952 0.03460395 0.400773 0.03431898 0.400915 0.03516 0.402309 0.03560596 0.40344 0.03487497 0.404026 0.03630095 0.40264 0.03679096 0.400502 0.03342998 0.400773 0.03431898 0.399952 0.03460395 0.399492 0.03402799 0.404161 0.04086798 0.405603 0.04035997 0.406573 0.04360795 0.405516 0.04451996 0.402345 0.03320395 0.402092 0.03387099 0.400502 0.03342998 0.400458 0.03293496 0.434997 0.02809798 0.435407 0.02815395 0.435358 0.02996695 0.43473 0.02999597 0.400549 0.04124099 0.398761 0.04194796 0.398736 0.03872996 0.400628 0.03809398 0.436854 0.02643495 0.436948 0.027197 0.43555 0.02783995 0.435209 0.027538 0.439715 0.02914196 0.439715 0.02715694 0.441866 0.02874296 0.441501 0.03037297 0.40264 0.03679096 0.404026 0.03630095 0.404752 0.03799295 0.402988 0.03792196 0.435407 0.02815395 0.435889 0.02826595 0.435633 0.029679 0.435358 0.02996695 0.441501 0.03037297 0.441866 0.02874296 0.443728 0.03007096 0.443133 0.03186595 0.436948 0.027197 0.437188 0.02754294 0.435936 0.02818399 0.43555 0.02783995 0.43985 0.03527599 0.438498 0.03638797 0.437417 0.034684 0.438768 0.03404295 0.443133 0.03186595 0.443728 0.03007096 0.444979 0.03045195 0.444647 0.032709 0.438874 0.03048896 0.438682 0.03028398 0.439476 0.02915894 0.439715 0.02914196 0.441451 0.03451299 0.43985 0.03527599 0.438768 0.03404295 0.439719 0.03311699 0.437708 0.03102999 0.437632 0.03078496 0.438682 0.03028398 0.438874 0.03048896 0.442233 0.03549295 0.440713 0.036704 0.43985 0.03527599 0.441451 0.03451299 0.404026 0.03630095 0.40344 0.03487497 0.404314 0.03414595 0.406007 0.03589999 0.438768 0.03404295 0.437417 0.034684 0.435752 0.03238499 0.436969 0.03220295 0.398736 0.03872996 0.396611 0.03992694 0.396935 0.03756397 0.39876 0.03726899 0.443728 0.03007096 0.441866 0.02874296 0.442076 0.02632898 0.444087 0.02794295 0.400117 0.03597396 0.398911 0.03591996 0.399122 0.03472197 0.400086 0.03522294 0.404314 0.03414595 0.40344 0.03487497 0.402825 0.034051 0.403323 0.03327298 0.436969 0.03220295 0.435752 0.03238499 0.435306 0.03098696 0.435831 0.03105795 0.399122 0.03472197 0.398043 0.03404295 0.39883 0.03339499 0.399492 0.03402799 0.402825 0.034051 0.402092 0.03387099 0.402345 0.03320395 0.403323 0.03327298 0.439715 0.02914196 0.439476 0.02915894 0.438539 0.027906 0.438549 0.02757495 0.43631 0.03086495 0.436425 0.03068798 0.437632 0.03078496 0.437708 0.03102999 0.402988 0.03792196 0.404752 0.03799295 0.405603 0.04035997 0.404161 0.04086798 0.400445 0.03706395 0.39876 0.03726899 0.398911 0.03591996 0.400117 0.03597396 0.400628 0.03809398 0.398736 0.03872996 0.39876 0.03726899 0.400445 0.03706395 0.431729 0.03858697 0.431558 0.04056495 0.429513 0.03885799 0.429335 0.03724199 0.415244 0.04030895 0.417263 0.03913199 0.417827 0.040564 0.416626 0.04164099 0.398761 0.04194796 0.397085 0.04187798 0.396611 0.03992694 0.398736 0.03872996 0.401198 0.03590595 0.400915 0.03516 0.401958 0.03482598 0.402309 0.03560596 0.402092 0.03387099 0.401741 0.03436595 0.400773 0.03431898 0.400502 0.03342998 0.400458 0.03293496 0.400502 0.03342998 0.399492 0.03402799 0.39883 0.03339499 0.400445 0.03706395 0.400117 0.03597396 0.401198 0.03590595 0.401407 0.03687494 0.435889 0.02826595 0.436136 0.02836894 0.435829 0.02957797 0.435633 0.029679 0.439719 0.03311699 0.437708 0.03102999 0.438874 0.03048896 0.44078 0.03180897 0.444979 0.03045195 0.443728 0.03007096 0.444087 0.02794295 0.445607 0.02846097 0.401757 0.03800696 0.401407 0.03687494 0.40264 0.03679096 0.402988 0.03792196 0.436969 0.03220295 0.435831 0.03105795 0.43631 0.03086495 0.437708 0.03102999 0.400628 0.03809398 0.400445 0.03706395 0.401407 0.03687494 0.401757 0.03800696 0.402309 0.03560596 0.401958 0.03482598 0.402825 0.034051 0.40344 0.03487497 0.402201 0.04087895 0.401757 0.03800696 0.402988 0.03792196 0.404161 0.04086798 0.401958 0.03482598 0.401741 0.03436595 0.402092 0.03387099 0.402825 0.034051 0.400549 0.04124099 0.400628 0.03809398 0.401757 0.03800696 0.402201 0.04087895 0.439715 0.02914196 0.438549 0.02757495 0.438286 0.02701997 0.439715 0.02715694 0.44078 0.03180897 0.438874 0.03048896 0.439715 0.02914196 0.441501 0.03037297 0.429657 0.06953799 0.425108 0.07051396 0.4255 0.065759 0.428415 0.06500399 0.4337 0.06714296 0.429657 0.06953799 0.428415 0.06500399 0.432738 0.06265497 0.438268 0.06562697 0.4337 0.06714296 0.432738 0.06265497 0.436509 0.05901199 0.418274 0.056095 0.417396 0.06329298 0.414648 0.060148 0.414619 0.05442196 0.42416 0.05670797 0.4255 0.065759 0.421336 0.065032 0.420889 0.05671197 0.438268 0.06562697 0.442708 0.06301599 0.448047 0.07000797 0.444399 0.07334595 0.442708 0.06301599 0.447269 0.05841296 0.45279 0.06605696 0.448047 0.07000797 0.436509 0.05901199 0.439487 0.05721396 0.442708 0.06301599 0.438268 0.06562697 0.443125 0.05299597 0.447269 0.05841296 0.442708 0.06301599 0.439487 0.05721396 0.41508 0.06714797 0.417396 0.06329298 0.421336 0.065032 0.42094 0.06865298 0.420889 0.05671197 0.421336 0.065032 0.417396 0.06329298 0.418274 0.056095 0.4255 0.065759 0.425108 0.07051396 0.42094 0.06865298 0.421336 0.065032 0.418294 0.05192196 0.418274 0.056095 0.414619 0.05442196 0.415208 0.04938995 0.420377 0.05250895 0.420889 0.05671197 0.418274 0.056095 0.418294 0.05192196 0.43517 0.04951798 0.432797 0.04751896 0.434283 0.04515498 0.437079 0.04709899 0.436509 0.05901199 0.435849 0.05424195 0.438013 0.05245494 0.439487 0.05721396 0.423334 0.05279594 0.42416 0.05670797 0.420889 0.05671197 0.420377 0.05250895 0.411399 0.04626798 0.411934 0.045946 0.412946 0.04736697 0.412634 0.05045199 0.440439 0.04568195 0.437118 0.04402095 0.436969 0.04144698 0.438128 0.04116696 0.432738 0.06265497 0.428415 0.06500399 0.426901 0.05778294 0.431388 0.05602699 0.435849 0.05424195 0.431388 0.05602699 0.429345 0.05189096 0.432128 0.05087196 0.436509 0.05901199 0.432738 0.06265497 0.431388 0.05602699 0.435849 0.05424195 0.437079 0.04709899 0.434283 0.04515498 0.434612 0.04319196 0.437118 0.04402095 0.439959 0.04955196 0.437079 0.04709899 0.437118 0.04402095 0.440439 0.04568195 0.443125 0.05299597 0.439959 0.04955196 0.440439 0.04568195 0.442237 0.04851299 0.426901 0.05778294 0.42416 0.05670797 0.423334 0.05279594 0.425957 0.05275297 0.438013 0.05245494 0.43517 0.04951798 0.437079 0.04709899 0.439959 0.04955196 0.435849 0.05424195 0.432128 0.05087196 0.43517 0.04951798 0.438013 0.05245494 0.439487 0.05721396 0.438013 0.05245494 0.439959 0.04955196 0.443125 0.05299597 0.414619 0.05442196 0.412634 0.05045199 0.412946 0.04736697 0.415208 0.04938995 0.428415 0.06500399 0.4255 0.065759 0.42416 0.05670797 0.426901 0.05778294 0.431388 0.05602699 0.426901 0.05778294 0.425957 0.05275297 0.429345 0.05189096 0.417997 0.04273295 0.418395 0.04146695 0.419389 0.04185998 0.419264 0.04317498 0.419453 0.04541695 0.419393 0.04712998 0.41669 0.04652196 0.417444 0.04450297 0.427314 0.037539 0.427353 0.03820699 0.425519 0.03885096 0.425433 0.03741598 0.422866 0.03838199 0.423721 0.03867596 0.42325 0.04052996 0.422168 0.04015195 0.417997 0.04273295 0.416626 0.04164099 0.417827 0.040564 0.418395 0.04146695 0.427222 0.036596 0.427314 0.037539 0.425433 0.03741598 0.425463 0.03651398 0.417444 0.04450297 0.415492 0.04287099 0.416626 0.04164099 0.417997 0.04273295 0.424946 0.04884397 0.422387 0.04849594 0.421978 0.04611098 0.424219 0.04657399 0.430277 0.04864495 0.428094 0.04896795 0.42661 0.04703199 0.428684 0.04654794 0.434283 0.04515498 0.432449 0.04353797 0.433093 0.04198896 0.434612 0.04319196 0.43128 0.04231697 0.429105 0.03933298 0.429513 0.03885799 0.431558 0.04056495 0.420102 0.03959596 0.419775 0.04031699 0.418958 0.04004496 0.418923 0.03905099 0.432449 0.04353797 0.43128 0.04231697 0.431558 0.04056495 0.433093 0.04198896 0.421136 0.04070299 0.420508 0.04118299 0.419775 0.04031699 0.420102 0.03959596 0.433093 0.04198896 0.431558 0.04056495 0.431729 0.03858697 0.433375 0.03986299 0.419775 0.04031699 0.419513 0.04090499 0.419002 0.04082095 0.418958 0.04004496 0.420093 0.04212296 0.419939 0.04135996 0.420508 0.04118299 0.420847 0.04230797 0.420508 0.04118299 0.419939 0.04135996 0.419513 0.04090499 0.419775 0.04031699 0.419264 0.04317498 0.419453 0.04541695 0.417444 0.04450297 0.417997 0.04273295 0.413865 0.04185199 0.415244 0.04030895 0.416626 0.04164099 0.415492 0.04287099 0.420255 0.04349899 0.420557 0.04566997 0.419453 0.04541695 0.419264 0.04317498 0.420557 0.04566997 0.420697 0.04782199 0.419393 0.04712998 0.419453 0.04541695 0.437118 0.04402095 0.434612 0.04319196 0.434988 0.04086399 0.436969 0.04144698 0.434612 0.04319196 0.433093 0.04198896 0.433375 0.03986299 0.434988 0.04086399 0.428684 0.04654794 0.427988 0.04526895 0.429528 0.04394996 0.430961 0.04547494 0.432797 0.04751896 0.430961 0.04547494 0.432449 0.04353797 0.434283 0.04515498 0.430277 0.04864495 0.428684 0.04654794 0.430961 0.04547494 0.432797 0.04751896 0.432128 0.05087196 0.430277 0.04864495 0.432797 0.04751896 0.43517 0.04951798 0.41669 0.04652196 0.414458 0.04471999 0.415492 0.04287099 0.417444 0.04450297 0.428148 0.04030597 0.428309 0.04057097 0.427678 0.04047197 0.427514 0.04015696 0.415208 0.04938995 0.412946 0.04736697 0.414458 0.04471999 0.41669 0.04652196 0.427854 0.03959196 0.428148 0.04030597 0.427514 0.04015696 0.427258 0.04005497 0.424219 0.04657399 0.421978 0.04611098 0.42133 0.04370498 0.422997 0.04425597 0.412992 0.04387199 0.413865 0.04185199 0.415492 0.04287099 0.414458 0.04471999 0.411934 0.045946 0.412992 0.04387199 0.414458 0.04471999 0.412946 0.04736697 0.441469 0.03829395 0.440058 0.03913199 0.439271 0.03766095 0.440713 0.036704 0.425957 0.05275297 0.423334 0.05279594 0.422387 0.04849594 0.424946 0.04884397 0.40793 0.04190999 0.406573 0.04360795 0.405603 0.04035997 0.407032 0.03969699 0.427678 0.04047197 0.428309 0.04057097 0.427256 0.04119098 0.427034 0.04086697 0.427988 0.04526895 0.426596 0.04307496 0.428355 0.04270595 0.429528 0.04394996 0.423721 0.03867596 0.424976 0.03936296 0.424195 0.040757 0.42325 0.04052996 0.419389 0.04185998 0.419513 0.04090499 0.419939 0.04135996 0.420093 0.04212296 0.418395 0.04146695 0.419002 0.04082095 0.419513 0.04090499 0.419389 0.04185998 0.42661 0.04703199 0.424219 0.04657399 0.422997 0.04425597 0.425567 0.04497694 0.419264 0.04317498 0.419389 0.04185998 0.420093 0.04212296 0.420255 0.04349899 0.419393 0.04712998 0.418294 0.05192196 0.415208 0.04938995 0.41669 0.04652196 0.420697 0.04782199 0.420377 0.05250895 0.418294 0.05192196 0.419393 0.04712998 0.430961 0.04547494 0.429528 0.04394996 0.43128 0.04231697 0.432449 0.04353797 0.429105 0.03933298 0.428957 0.04043799 0.427854 0.03959196 0.427353 0.03820699 0.424816 0.04229199 0.425737 0.042391 0.426596 0.04307496 0.427988 0.04526895 0.43128 0.04231697 0.429261 0.04102098 0.428957 0.04043799 0.429105 0.03933298 0.420847 0.04230797 0.420508 0.04118299 0.421136 0.04070299 0.42225 0.04210895 0.429513 0.03885799 0.427314 0.037539 0.427222 0.036596 0.429335 0.03724199 0.427514 0.04015696 0.427678 0.04047197 0.427034 0.04086697 0.426887 0.04078698 0.418395 0.04146695 0.417827 0.040564 0.418958 0.04004496 0.419002 0.04082095 0.425567 0.04497694 0.422997 0.04425597 0.42225 0.04210895 0.423869 0.04225295 0.422997 0.04425597 0.42133 0.04370498 0.420847 0.04230797 0.42225 0.04210895 0.428094 0.04896795 0.424946 0.04884397 0.424219 0.04657399 0.42661 0.04703199 0.420255 0.04349899 0.420093 0.04212296 0.420847 0.04230797 0.42133 0.04370498 0.42133 0.04370498 0.421978 0.04611098 0.420557 0.04566997 0.420255 0.04349899 0.421978 0.04611098 0.422387 0.04849594 0.420697 0.04782199 0.420557 0.04566997 0.422387 0.04849594 0.423334 0.05279594 0.420377 0.05250895 0.420697 0.04782199 0.425567 0.04497694 0.423869 0.04225295 0.424816 0.04229199 0.427988 0.04526895 0.42225 0.04210895 0.422168 0.04015195 0.42325 0.04052996 0.423869 0.04225295 0.427258 0.04005497 0.427514 0.04015696 0.426887 0.04078698 0.426512 0.04028099 0.429345 0.05189096 0.425957 0.05275297 0.424946 0.04884397 0.428094 0.04896795 0.423869 0.04225295 0.42325 0.04052996 0.424195 0.040757 0.424816 0.04229199 0.428684 0.04654794 0.42661 0.04703199 0.425567 0.04497694 0.427988 0.04526895 0.429105 0.03933298 0.427353 0.03820699 0.427314 0.037539 0.429513 0.03885799 0.427854 0.03959196 0.427258 0.04005497 0.426512 0.04028099 0.426026 0.03986996 0.427353 0.03820699 0.427854 0.03959196 0.426026 0.03986996 0.425519 0.03885096 0.417827 0.040564 0.417263 0.03913199 0.418923 0.03905099 0.418958 0.04004496 0.429528 0.04394996 0.428355 0.04270595 0.429261 0.04102098 0.43128 0.04231697 0.432128 0.05087196 0.429345 0.05189096 0.428094 0.04896795 0.430277 0.04864495 0.109401 0.736536 0.117431 0.742072 0.115392 0.74586 0.109049 0.739207 0.134773 0.799041 0.141745 0.801606 0.142065 0.809687 0.133976 0.806939 0.117562 0.736334 0.124953 0.741713 0.126824 0.748412 0.117431 0.742072 0.124953 0.741713 0.135667 0.742945 0.13503 0.751188 0.126824 0.748412 0.126824 0.748412 0.13503 0.751188 0.136005 0.760151 0.127905 0.756141 0.135039 0.766921 0.135013 0.773387 0.12932 0.772184 0.12883 0.764805 0.12932 0.772184 0.129737 0.778411 0.1241739 0.775475 0.123506 0.770236 0.135013 0.773387 0.135316 0.779627 0.129737 0.778411 0.12932 0.772184 0.129734 0.788658 0.129988 0.783877 0.1353549 0.785445 0.134985 0.791076 0.114541 0.810797 0.105545 0.806928 0.106449 0.800597 0.113686 0.801711 0.11345 0.818196 0.102335 0.81201 0.105545 0.806928 0.114541 0.810797 0.12883 0.764805 0.127905 0.756141 0.136005 0.760151 0.135039 0.766921 0.134773 0.799041 0.133976 0.806939 0.12843 0.80155 0.130053 0.79614 0.110548 0.748027 0.115392 0.74586 0.122115 0.76149 0.115416 0.758753 0.133976 0.806939 0.142065 0.809687 0.141451 0.818702 0.12796 0.817441 0.122115 0.76149 0.115392 0.74586 0.127905 0.756141 0.12883 0.764805 0.12883 0.764805 0.12932 0.772184 0.123506 0.770236 0.122115 0.76149 0.124341 0.780979 0.1241739 0.775475 0.129737 0.778411 0.129988 0.783877 0.124431 0.785079 0.124341 0.780979 0.129988 0.783877 0.129734 0.788658 0.123526 0.808285 0.114541 0.810797 0.113686 0.801711 0.120276 0.800054 0.12796 0.817441 0.11345 0.818196 0.114541 0.810797 0.123526 0.808285 0.105545 0.806928 0.098248 0.801217 0.09793496 0.798734 0.106449 0.800597 0.102335 0.81201 0.09713399 0.804152 0.098248 0.801217 0.105545 0.806928 0.129734 0.788658 0.130053 0.79614 0.124613 0.790213 0.124431 0.785079 0.134985 0.791076 0.134773 0.799041 0.130053 0.79614 0.129734 0.788658 0.12843 0.80155 0.123526 0.808285 0.120276 0.800054 0.123686 0.795594 0.133976 0.806939 0.12796 0.817441 0.123526 0.808285 0.12843 0.80155 0.130053 0.79614 0.12843 0.80155 0.123686 0.795594 0.124613 0.790213 0.109739 0.733634 0.117562 0.736334 0.117431 0.742072 0.109401 0.736536 0.115392 0.74586 0.117431 0.742072 0.126824 0.748412 0.127905 0.756141 0.134985 0.791076 0.1353549 0.785445 0.141616 0.787447 0.14226 0.793924 0.110548 0.748027 0.107538 0.741672 0.109049 0.739207 0.115392 0.74586 0.129988 0.783877 0.129737 0.778411 0.135316 0.779627 0.1353549 0.785445 0.115416 0.758753 0.122115 0.76149 0.123506 0.770236 0.117276 0.766782 0.134985 0.791076 0.14226 0.793924 0.141745 0.801606 0.134773 0.799041 0.09651297 0.76172 0.101824 0.76325 0.102888 0.768021 0.09648495 0.765881 0.117979 0.77668 0.124341 0.780979 0.124431 0.785079 0.118383 0.781223 0.103563 0.772283 0.103714 0.7762 0.09647697 0.772953 0.09625995 0.769042 0.110528 0.794098 0.114026 0.791997 0.120276 0.800054 0.113686 0.801711 0.11793 0.78526 0.124613 0.790213 0.123686 0.795594 0.116639 0.788813 0.110548 0.748027 0.106073 0.749046 0.105145 0.744034 0.107538 0.741672 0.09447199 0.753188 0.100092 0.753415 0.100912 0.759162 0.09591597 0.757886 0.110528 0.794098 0.113686 0.801711 0.106449 0.800597 0.104658 0.795429 0.117276 0.766782 0.109108 0.76155 0.107602 0.755057 0.115416 0.758753 0.111861 0.776917 0.111013 0.772419 0.117979 0.77668 0.118383 0.781223 0.111861 0.776917 0.103563 0.772283 0.102888 0.768021 0.111013 0.772419 0.109511 0.784059 0.1075209 0.78694 0.101221 0.783892 0.102628 0.780781 0.117979 0.77668 0.111013 0.772419 0.109848 0.767279 0.117764 0.772126 0.1075209 0.78694 0.104868 0.789752 0.097952 0.787167 0.101221 0.783892 0.105145 0.744034 0.106073 0.749046 0.100711 0.748634 0.101073 0.745186 0.101073 0.745186 0.100711 0.748634 0.09540098 0.748169 0.09614098 0.745489 0.11793 0.78526 0.111008 0.780219 0.111861 0.776917 0.118383 0.781223 0.116639 0.788813 0.109511 0.784059 0.111008 0.780219 0.11793 0.78526 0.09625995 0.769042 0.09648495 0.765881 0.102888 0.768021 0.103563 0.772283 0.104658 0.795429 0.106449 0.800597 0.09793496 0.798734 0.09687995 0.796258 0.117764 0.772126 0.1241739 0.775475 0.124341 0.780979 0.117979 0.77668 0.102628 0.780781 0.095613 0.777002 0.09647697 0.772953 0.103714 0.7762 0.09651297 0.76172 0.09591597 0.757886 0.100912 0.759162 0.101824 0.76325 0.09335798 0.780323 0.095613 0.777002 0.102628 0.780781 0.101221 0.783892 0.116639 0.788813 0.123686 0.795594 0.120276 0.800054 0.114026 0.791997 0.110528 0.794098 0.104868 0.789752 0.1075209 0.78694 0.114026 0.791997 0.114026 0.791997 0.1075209 0.78694 0.109511 0.784059 0.116639 0.788813 0.117276 0.766782 0.123506 0.770236 0.1241739 0.775475 0.117764 0.772126 0.09687995 0.796258 0.09451097 0.793967 0.100365 0.79186 0.104658 0.795429 0.115416 0.758753 0.107602 0.755057 0.106073 0.749046 0.110548 0.748027 0.104658 0.795429 0.100365 0.79186 0.104868 0.789752 0.110528 0.794098 0.117764 0.772126 0.109848 0.767279 0.109108 0.76155 0.117276 0.766782 0.111861 0.776917 0.111008 0.780219 0.103714 0.7762 0.103563 0.772283 0.111008 0.780219 0.109511 0.784059 0.102628 0.780781 0.103714 0.7762 0.107602 0.755057 0.109108 0.76155 0.100912 0.759162 0.100092 0.753415 0.109848 0.767279 0.111013 0.772419 0.102888 0.768021 0.101824 0.76325 0.109108 0.76155 0.109848 0.767279 0.101824 0.76325 0.100912 0.759162 0.104868 0.789752 0.100365 0.79186 0.09509795 0.789094 0.097952 0.787167 0.106073 0.749046 0.107602 0.755057 0.100092 0.753415 0.100711 0.748634 0.100365 0.79186 0.09451097 0.793967 0.091075 0.791315 0.09509795 0.789094 0.101221 0.783892 0.097952 0.787167 0.09139996 0.784076 0.09335798 0.780323 0.100711 0.748634 0.100092 0.753415 0.09447199 0.753188 0.09540098 0.748169 0.097952 0.787167 0.09509795 0.789094 0.08943098 0.786078 0.09139996 0.784076 0.118383 0.781223 0.124431 0.785079 0.124613 0.790213 0.11793 0.78526 0.09509795 0.789094 0.091075 0.791315 0.08686196 0.788325 0.08943098 0.786078 0.08296799 0.749282 0.08310097 0.746222 0.08747297 0.745642 0.086304 0.749219 0.07898598 0.74894 0.08038997 0.746635 0.08310097 0.746222 0.08296799 0.749282 0.075477 0.780107 0.07745897 0.778423 0.080877 0.781256 0.07909399 0.783536 0.07395297 0.777353 0.07529497 0.775519 0.07745897 0.778423 0.075477 0.780107 0.07133299 0.775441 0.07250499 0.772614 0.07529497 0.775519 0.07395297 0.777353 0.07548898 0.770808 0.07739299 0.774909 0.07663595 0.774724 0.07357698 0.771107 0.07529497 0.775519 0.07663595 0.774724 0.079068 0.777434 0.07745897 0.778423 0.07250499 0.772614 0.06930595 0.769789 0.07240897 0.767026 0.07357698 0.771107 0.07548898 0.770808 0.07357698 0.771107 0.07240897 0.767026 0.07597196 0.767422 0.09648495 0.765881 0.08943295 0.763804 0.08925098 0.760357 0.09651297 0.76172 0.07739299 0.774909 0.082354 0.777114 0.079068 0.777434 0.07663595 0.774724 0.082354 0.777114 0.08630996 0.777526 0.082699 0.779953 0.079068 0.777434 0.08208096 0.759575 0.07983195 0.757202 0.08323395 0.756365 0.08560198 0.759806 0.07745897 0.778423 0.079068 0.777434 0.082699 0.779953 0.080877 0.781256 0.07250499 0.772614 0.07133299 0.775441 0.06809896 0.772484 0.06930595 0.769789 0.08296799 0.749282 0.082538 0.752139 0.07881796 0.752628 0.07898598 0.74894 0.08498197 0.771921 0.08414095 0.771533 0.08543795 0.76734 0.08624899 0.767171 0.08953499 0.773906 0.08630996 0.777526 0.082354 0.777114 0.08695399 0.772615 0.081918 0.763701 0.07754296 0.763428 0.077614 0.760703 0.08173 0.761486 0.07663595 0.774724 0.07529497 0.775519 0.07250499 0.772614 0.07357698 0.771107 0.082354 0.777114 0.07739299 0.774909 0.078112 0.774435 0.08207798 0.776291 0.082354 0.777114 0.08207798 0.776291 0.08498197 0.771921 0.08695399 0.772615 0.088207 0.756878 0.09591597 0.757886 0.09651297 0.76172 0.08925098 0.760357 0.082538 0.752139 0.08323395 0.756365 0.07983195 0.757202 0.07881796 0.752628 0.07817995 0.764873 0.07754296 0.763428 0.081918 0.763701 0.08236598 0.764874 0.08208096 0.759575 0.08173 0.761486 0.077614 0.760703 0.07885998 0.758766 0.08943098 0.786078 0.080877 0.781256 0.082699 0.779953 0.09139996 0.784076 0.07548898 0.770808 0.07597196 0.767422 0.07686096 0.767626 0.07630395 0.770742 0.077614 0.760703 0.07754296 0.763428 0.07416999 0.764346 0.07375699 0.760551 0.07817995 0.764873 0.07924199 0.765539 0.07686096 0.767626 0.07597196 0.767422 0.08762699 0.767219 0.08624899 0.767171 0.08295196 0.765733 0.08236598 0.764874 0.08953499 0.773906 0.08695399 0.772615 0.08762699 0.767219 0.09079599 0.769856 0.08686196 0.788325 0.07909399 0.783536 0.080877 0.781256 0.08943098 0.786078 0.08677297 0.764979 0.08638 0.762739 0.08943295 0.763804 0.08993697 0.766889 0.07817995 0.764873 0.07597196 0.767422 0.07416999 0.764346 0.07754296 0.763428 0.09614098 0.745489 0.09540098 0.748169 0.086304 0.749219 0.08747297 0.745642 0.077614 0.760703 0.07375699 0.760551 0.073924 0.757911 0.07885998 0.758766 0.09625995 0.769042 0.08993697 0.766889 0.08943295 0.763804 0.09648495 0.765881 0.07817995 0.764873 0.08236598 0.764874 0.08295196 0.765733 0.07924199 0.765539 0.086304 0.749219 0.086766 0.752883 0.082538 0.752139 0.08296799 0.749282 0.086766 0.752883 0.086304 0.749219 0.09540098 0.748169 0.09447199 0.753188 0.08762699 0.767219 0.08695399 0.772615 0.08498197 0.771921 0.08624899 0.767171 0.088207 0.756878 0.086766 0.752883 0.09447199 0.753188 0.09591597 0.757886 0.09079599 0.769856 0.09647697 0.772953 0.095613 0.777002 0.08953499 0.773906 0.07548898 0.770808 0.07630395 0.770742 0.078112 0.774435 0.07739299 0.774909 0.08953499 0.773906 0.095613 0.777002 0.09335798 0.780323 0.08630996 0.777526 0.09139996 0.784076 0.082699 0.779953 0.08630996 0.777526 0.09335798 0.780323 0.09079599 0.769856 0.08993697 0.766889 0.09625995 0.769042 0.09647697 0.772953 0.08762699 0.767219 0.08236598 0.764874 0.081918 0.763701 0.08677297 0.764979 0.08762699 0.767219 0.08677297 0.764979 0.08993697 0.766889 0.09079599 0.769856 0.081918 0.763701 0.08173 0.761486 0.08638 0.762739 0.08677297 0.764979 0.08638 0.762739 0.08560198 0.759806 0.08925098 0.760357 0.08943295 0.763804 0.086766 0.752883 0.088207 0.756878 0.08323395 0.756365 0.082538 0.752139 0.08173 0.761486 0.08208096 0.759575 0.08560198 0.759806 0.08638 0.762739 0.08498197 0.771921 0.08207798 0.776291 0.08194899 0.775489 0.08414095 0.771533 0.08560198 0.759806 0.08323395 0.756365 0.088207 0.756878 0.08925098 0.760357 0.07652699 0.821284 0.07526797 0.824503 0.07165998 0.822367 0.072245 0.818994 0.100819 0.70608 0.103859 0.710212 0.101182 0.712189 0.09851098 0.708482 0.06290197 0.830842 0.060449 0.827884 0.06373298 0.825097 0.067779 0.827787 0.07316595 0.813385 0.07275599 0.81616 0.06847798 0.814044 0.06902796 0.811408 0.112302 0.705357 0.109629 0.702202 0.113505 0.700571 0.115417 0.702881 0.067779 0.827787 0.06373298 0.825097 0.06585597 0.822176 0.07013899 0.824956 0.104897 0.7039 0.107733 0.708078 0.103859 0.710212 0.100819 0.70608 0.077344 0.815065 0.08191996 0.816463 0.08236199 0.821006 0.07710796 0.818214 0.077344 0.815065 0.07316595 0.813385 0.073776 0.810521 0.07763797 0.811656 0.07461798 0.828195 0.07013899 0.824956 0.07165998 0.822367 0.07526797 0.824503 0.108482 0.716282 0.106373 0.713322 0.110191 0.711352 0.112767 0.713985 0.06902796 0.811408 0.06964099 0.808607 0.073776 0.810521 0.07316595 0.813385 0.105942 0.696563 0.109629 0.702202 0.104897 0.7039 0.101084 0.698854 0.105942 0.696563 0.1109099 0.696285 0.113505 0.700571 0.109629 0.702202 0.06789696 0.816662 0.06717699 0.819756 0.06277698 0.816804 0.06397897 0.814196 0.06373298 0.825097 0.060449 0.827884 0.05701994 0.824819 0.05924999 0.822205 0.106373 0.713322 0.10329 0.715486 0.101182 0.712189 0.103859 0.710212 0.077344 0.815065 0.07763797 0.811656 0.08105498 0.811835 0.08191996 0.816463 0.106373 0.713322 0.103859 0.710212 0.107733 0.708078 0.110191 0.711352 0.05925899 0.836951 0.059062 0.834916 0.06424695 0.833739 0.06404495 0.837135 0.108482 0.716282 0.105241 0.71818 0.10329 0.715486 0.106373 0.713322 0.06789696 0.816662 0.072245 0.818994 0.07165998 0.822367 0.06717699 0.819756 0.114838 0.707911 0.112302 0.705357 0.115417 0.702881 0.117124 0.704392 0.07710796 0.818214 0.07652699 0.821284 0.072245 0.818994 0.07275599 0.81616 0.06717699 0.819756 0.07165998 0.822367 0.07013899 0.824956 0.06585597 0.822176 0.112767 0.713985 0.110191 0.711352 0.114838 0.707911 0.11819 0.710071 0.06290197 0.830842 0.05810099 0.832801 0.05627095 0.830299 0.060449 0.827884 0.07275599 0.81616 0.072245 0.818994 0.06789696 0.816662 0.06847798 0.814044 0.109629 0.702202 0.112302 0.705357 0.107733 0.708078 0.104897 0.7039 0.06585597 0.822176 0.06124198 0.819006 0.06277698 0.816804 0.06717699 0.819756 0.060449 0.827884 0.05627095 0.830299 0.05332696 0.826598 0.05701994 0.824819 0.06404495 0.837135 0.06424695 0.833739 0.07149899 0.83224 0.07083398 0.837333 0.08206999 0.82426 0.08200895 0.827705 0.07526797 0.824503 0.07652699 0.821284 0.06585597 0.822176 0.06373298 0.825097 0.05924999 0.822205 0.06124198 0.819006 0.08236199 0.821006 0.08191996 0.816463 0.08483898 0.818416 0.08502596 0.820899 0.08178198 0.83528 0.08040797 0.838582 0.07083398 0.837333 0.07149899 0.83224 0.077344 0.815065 0.07710796 0.818214 0.07275599 0.81616 0.07316595 0.813385 0.08217996 0.831383 0.07461798 0.828195 0.07526797 0.824503 0.08200895 0.827705 0.119141 0.705346 0.11819 0.710071 0.114838 0.707911 0.117124 0.704392 0.114838 0.707911 0.110191 0.711352 0.107733 0.708078 0.112302 0.705357 0.08178198 0.83528 0.07149899 0.83224 0.07461798 0.828195 0.08217996 0.831383 0.06424695 0.833739 0.059062 0.834916 0.05810099 0.832801 0.06290197 0.830842 0.08236199 0.821006 0.08206999 0.82426 0.07652699 0.821284 0.07710796 0.818214 0.07149899 0.83224 0.06424695 0.833739 0.06290197 0.830842 0.067779 0.827787 0.07461798 0.828195 0.07149899 0.83224 0.067779 0.827787 0.07013899 0.824956 0.06154894 0.810309 0.06059294 0.812055 0.05702197 0.809801 0.058366 0.808376 0.05916798 0.814438 0.05569398 0.812051 0.05702197 0.809801 0.06059294 0.812055 0.052432 0.817678 0.04910695 0.8154 0.05136895 0.812569 0.05422896 0.814407 0.04732698 0.81807 0.04371398 0.815598 0.04586094 0.813144 0.04910695 0.8154 0.105942 0.696563 0.107551 0.691393 0.10975 0.693925 0.1109099 0.696285 0.05395495 0.822168 0.05562394 0.819816 0.05924999 0.822205 0.05701994 0.824819 0.100819 0.70608 0.09851098 0.708482 0.09568196 0.704544 0.09670799 0.700638 0.05646198 0.803645 0.05521899 0.80596 0.05201596 0.80318 0.05288296 0.800663 0.06541895 0.809345 0.06575095 0.806294 0.06964099 0.808607 0.06902796 0.811408 0.06254595 0.807979 0.06541895 0.809345 0.06478697 0.811908 0.06154894 0.810309 0.06254595 0.807979 0.06351596 0.805499 0.06575095 0.806294 0.06541895 0.809345 0.05701994 0.824819 0.05332696 0.826598 0.05184096 0.824774 0.05395495 0.822168 0.05969899 0.806421 0.05646198 0.803645 0.05800497 0.799911 0.06208896 0.803565 0.051126 0.820282 0.04921597 0.823155 0.04482799 0.820446 0.04732698 0.81807 0.09670799 0.700638 0.09568196 0.704544 0.09371298 0.702825 0.093019 0.700463 0.04910695 0.8154 0.04586094 0.813144 0.04814898 0.810352 0.05136895 0.812569 0.09670799 0.700638 0.093019 0.700463 0.09067898 0.695446 0.09310197 0.693989 0.05288296 0.800663 0.05318695 0.796274 0.05800497 0.799911 0.05646198 0.803645 0.051126 0.820282 0.04732698 0.81807 0.04910695 0.8154 0.052432 0.817678 0.052432 0.817678 0.05422896 0.814407 0.05766797 0.816704 0.05562394 0.819816 0.10081 0.689301 0.09631496 0.683094 0.100789 0.683286 0.104082 0.687327 0.05395495 0.822168 0.05184096 0.824774 0.04921597 0.823155 0.051126 0.820282 0.058366 0.808376 0.05521899 0.80596 0.05646198 0.803645 0.05969899 0.806421 0.05562394 0.819816 0.05766797 0.816704 0.06124198 0.819006 0.05924999 0.822205 0.05521899 0.80596 0.05425995 0.807535 0.05119597 0.805081 0.05201596 0.80318 0.04311996 0.81077 0.04586094 0.813144 0.04371398 0.815598 0.04093199 0.813693 0.09631496 0.683094 0.098104 0.679664 0.09977096 0.681374 0.100789 0.683286 0.101084 0.698854 0.104897 0.7039 0.100819 0.70608 0.09670799 0.700638 0.06154894 0.810309 0.06478697 0.811908 0.06397897 0.814196 0.06059294 0.812055 0.05422896 0.814407 0.05136895 0.812569 0.05275797 0.810052 0.05569398 0.812051 0.05569398 0.812051 0.05275797 0.810052 0.05425995 0.807535 0.05702197 0.809801 0.06277698 0.816804 0.05916798 0.814438 0.06059294 0.812055 0.06397897 0.814196 0.06847798 0.814044 0.06478697 0.811908 0.06541895 0.809345 0.06902796 0.811408 0.105942 0.696563 0.101084 0.698854 0.09642195 0.692233 0.10081 0.689301 0.09670799 0.700638 0.09310197 0.693989 0.09642195 0.692233 0.101084 0.698854 0.06154894 0.810309 0.058366 0.808376 0.05969899 0.806421 0.06254595 0.807979 0.04371398 0.815598 0.04056096 0.817429 0.03899997 0.815877 0.04093199 0.813693 0.058366 0.808376 0.05702197 0.809801 0.05425995 0.807535 0.05521899 0.80596 0.04941099 0.801246 0.05201596 0.80318 0.05119597 0.805081 0.04841297 0.803511 0.04732698 0.81807 0.04482799 0.820446 0.04056096 0.817429 0.04371398 0.815598 0.04311996 0.81077 0.04507499 0.808748 0.04814898 0.810352 0.04586094 0.813144 0.09631496 0.683094 0.10081 0.689301 0.09642195 0.692233 0.09264397 0.685479 0.09264397 0.685479 0.09642195 0.692233 0.09310197 0.693989 0.08900499 0.687651 0.04814898 0.810352 0.04507499 0.808748 0.04677295 0.806146 0.04959297 0.807744 0.05766797 0.816704 0.05422896 0.814407 0.05569398 0.812051 0.05916798 0.814438 0.06124198 0.819006 0.05766797 0.816704 0.05916798 0.814438 0.06277698 0.816804 0.04959297 0.807744 0.04677295 0.806146 0.04841297 0.803511 0.05119597 0.805081 0.06789696 0.816662 0.06397897 0.814196 0.06478697 0.811908 0.06847798 0.814044 0.05136895 0.812569 0.04814898 0.810352 0.04959297 0.807744 0.05275797 0.810052 0.06254595 0.807979 0.05969899 0.806421 0.06208896 0.803565 0.06351596 0.805499 0.105942 0.696563 0.10081 0.689301 0.104082 0.687327 0.107551 0.691393 0.05275797 0.810052 0.04959297 0.807744 0.05119597 0.805081 0.05425995 0.807535 0.05562394 0.819816 0.05395495 0.822168 0.051126 0.820282 0.052432 0.817678 0.08900499 0.687651 0.09310197 0.693989 0.09067898 0.695446 0.08791899 0.690311 0.08991599 0.673564 0.08698898 0.671266 0.08670496 0.669454 0.09143495 0.670989 0.03114598 0.796351 0.03045195 0.796135 0.03210699 0.79365 0.03228896 0.794401 0.02940899 0.795743 0.03045195 0.796135 0.029841 0.798873 0.02907395 0.798844 0.08900499 0.687651 0.08608996 0.686678 0.08392697 0.682721 0.0859 0.682046 0.08991599 0.673564 0.09282296 0.678156 0.08908998 0.680058 0.08733201 0.676375 0.04335099 0.794098 0.04735797 0.796963 0.04578596 0.798861 0.04188597 0.795794 0.037642 0.79179 0.03796797 0.789966 0.044384 0.79153 0.04335099 0.794098 0.04303497 0.803343 0.03934395 0.801041 0.040555 0.796278 0.04464399 0.80056 0.02754294 0.795638 0.02940899 0.795743 0.02907395 0.798844 0.02734595 0.798715 0.05026596 0.798871 0.05118197 0.795746 0.05318695 0.796274 0.05288296 0.800663 0.04335099 0.794098 0.044384 0.79153 0.04923498 0.793793 0.04735797 0.796963 0.02734595 0.798715 0.02529895 0.79902 0.02513694 0.795634 0.02754294 0.795638 0.04735797 0.796963 0.04923498 0.793793 0.05118197 0.795746 0.05026596 0.798871 0.03185194 0.793107 0.03692698 0.793156 0.03660798 0.793992 0.03210699 0.79365 0.031735 0.80222 0.02907395 0.798844 0.029841 0.798873 0.032269 0.801105 0.031735 0.80222 0.032269 0.801105 0.03663295 0.803662 0.03581595 0.805724 0.03185194 0.793107 0.03210699 0.79365 0.03045195 0.796135 0.02942895 0.795736 0.08908998 0.680058 0.09264397 0.685479 0.08900499 0.687651 0.0859 0.682046 0.08357 0.673635 0.08195495 0.673197 0.084082 0.670234 0.08499395 0.67212 0.08499395 0.67212 0.084082 0.670234 0.08670496 0.669454 0.08698898 0.671266 0.04311996 0.81077 0.04093199 0.813693 0.03750497 0.811492 0.03943794 0.808361 0.03435397 0.808683 0.03581595 0.805724 0.03943794 0.808361 0.03750497 0.811492 0.04507499 0.808748 0.040892 0.806294 0.04303497 0.803343 0.04677295 0.806146 0.02884399 0.80298 0.02752196 0.805091 0.02529895 0.79902 0.02734595 0.798715 0.04188597 0.795794 0.03692698 0.793156 0.037642 0.79179 0.04335099 0.794098 0.04941099 0.801246 0.04578596 0.798861 0.04735797 0.796963 0.05026596 0.798871 0.08195495 0.673197 0.08357 0.673635 0.08430695 0.677399 0.08192098 0.677897 0.08698898 0.671266 0.08991599 0.673564 0.08733201 0.676375 0.08499395 0.67212 0.08499395 0.67212 0.08733201 0.676375 0.08430695 0.677399 0.08357 0.673635 0.09282296 0.678156 0.09557598 0.675877 0.098104 0.679664 0.09631496 0.683094 0.04941099 0.801246 0.05026596 0.798871 0.05288296 0.800663 0.05201596 0.80318 0.04677295 0.806146 0.04303497 0.803343 0.04464399 0.80056 0.04841297 0.803511 0.04093199 0.813693 0.03899997 0.815877 0.03657895 0.81469 0.03750497 0.811492 0.040892 0.806294 0.03663295 0.803662 0.03934395 0.801041 0.04303497 0.803343 0.03750497 0.811492 0.03657895 0.81469 0.03226995 0.811549 0.03435397 0.808683 0.09282296 0.678156 0.08991599 0.673564 0.09143495 0.670989 0.09557598 0.675877 0.03435397 0.808683 0.03226995 0.811549 0.02752196 0.805091 0.02884399 0.80298 0.04311996 0.81077 0.03943794 0.808361 0.040892 0.806294 0.04507499 0.808748 0.03185194 0.793107 0.031964 0.791806 0.037642 0.79179 0.03692698 0.793156 0.04188597 0.795794 0.04578596 0.798861 0.04464399 0.80056 0.040555 0.796278 0.031964 0.791806 0.03185194 0.793107 0.02942895 0.795736 0.02810698 0.794412 0.03031897 0.798251 0.029841 0.798873 0.03045195 0.796135 0.03114598 0.796351 0.03581595 0.805724 0.03663295 0.803662 0.040892 0.806294 0.03943794 0.808361 0.02810698 0.794412 0.02752596 0.79192 0.03175497 0.790088 0.031964 0.791806 0.031964 0.791806 0.03175497 0.790088 0.03796797 0.789966 0.037642 0.79179 0.08733201 0.676375 0.08908998 0.680058 0.0859 0.682046 0.08430695 0.677399 0.02907395 0.798844 0.031735 0.80222 0.02884399 0.80298 0.02734595 0.798715 0.03581595 0.805724 0.03435397 0.808683 0.02884399 0.80298 0.031735 0.80222 0.09282296 0.678156 0.09631496 0.683094 0.09264397 0.685479 0.08908998 0.680058 0.04941099 0.801246 0.04841297 0.803511 0.04464399 0.80056 0.04578596 0.798861 0.03692698 0.793156 0.04188597 0.795794 0.040555 0.796278 0.03660798 0.793992 0.08900499 0.687651 0.08791899 0.690311 0.086389 0.688993 0.08608996 0.686678 0.08430695 0.677399 0.0859 0.682046 0.08392697 0.682721 0.08192098 0.677897 0.124178 0.702196 0.12163 0.702128 0.120851 0.698421 0.12327 0.697796 0.055857 0.855395 0.06071394 0.853712 0.06169694 0.8581 0.05671799 0.859227 0.05647999 0.846125 0.05885499 0.849148 0.05477595 0.851242 0.05288296 0.848083 0.121205 0.692937 0.12327 0.697796 0.120851 0.698421 0.1189669 0.694253 0.07083398 0.837333 0.08040797 0.838582 0.07829695 0.841859 0.06864595 0.840607 0.12648 0.696613 0.128014 0.701369 0.124178 0.702196 0.12327 0.697796 0.067209 0.874665 0.062967 0.88037 0.05931496 0.878992 0.06087499 0.873622 0.129979 0.694515 0.132094 0.698772 0.128014 0.701369 0.12648 0.696613 0.05962496 0.842904 0.06233996 0.839644 0.06864595 0.840607 0.06546396 0.845448 0.06169694 0.8581 0.06726998 0.857033 0.06755697 0.861932 0.06151497 0.862658 0.06071394 0.853712 0.06651997 0.851484 0.06726998 0.857033 0.06169694 0.8581 0.07558196 0.85565 0.06726998 0.857033 0.06651997 0.851484 0.07506597 0.849733 0.069781 0.880675 0.06905198 0.87794 0.07528495 0.871273 0.07711297 0.875906 0.05671799 0.859227 0.06169694 0.8581 0.06151497 0.862658 0.05713999 0.863165 0.07817 0.859587 0.06755697 0.861932 0.06726998 0.857033 0.07558196 0.85565 0.07608497 0.84529 0.06546396 0.845448 0.06864595 0.840607 0.07829695 0.841859 0.137063 0.697985 0.136021 0.702822 0.132094 0.698772 0.135903 0.695377 0.06087499 0.873622 0.05662697 0.873009 0.05728799 0.866998 0.06166899 0.866542 0.06992 0.866988 0.08057796 0.863756 0.08365797 0.867343 0.07528495 0.871273 0.125878 0.683674 0.131003 0.68499 0.132824 0.688175 0.128037 0.689539 0.06992 0.866988 0.06166899 0.866542 0.06151497 0.862658 0.06755697 0.861932 0.06166899 0.866542 0.06992 0.866988 0.067209 0.874665 0.06087499 0.873622 0.06992 0.866988 0.07528495 0.871273 0.06905198 0.87794 0.067209 0.874665 0.06166899 0.866542 0.05728799 0.866998 0.05713999 0.863165 0.06151497 0.862658 0.05885499 0.849148 0.06071394 0.853712 0.055857 0.855395 0.05477595 0.851242 0.122376 0.685221 0.12463 0.691466 0.121205 0.692937 0.118566 0.686568 0.129979 0.694515 0.128037 0.689539 0.132824 0.688175 0.134314 0.691958 0.05713999 0.863165 0.05280697 0.863715 0.05266195 0.860064 0.05671799 0.859227 0.129979 0.694515 0.134314 0.691958 0.135903 0.695377 0.132094 0.698772 0.07528495 0.871273 0.08365797 0.867343 0.08524596 0.871746 0.07711297 0.875906 0.05477595 0.851242 0.05095797 0.852558 0.04942494 0.849452 0.05288296 0.848083 0.06407999 0.883121 0.062967 0.88037 0.067209 0.874665 0.06905198 0.87794 0.125878 0.683674 0.128037 0.689539 0.12463 0.691466 0.122376 0.685221 0.06755697 0.861932 0.07817 0.859587 0.08057796 0.863756 0.06992 0.866988 0.07608497 0.84529 0.07506597 0.849733 0.06651997 0.851484 0.06546396 0.845448 0.04942494 0.849452 0.04775398 0.847019 0.05138897 0.846188 0.05288296 0.848083 0.05841398 0.838575 0.06233996 0.839644 0.05962496 0.842904 0.05719596 0.841331 0.121205 0.692937 0.1189669 0.694253 0.117575 0.690269 0.118566 0.686568 0.055857 0.855395 0.05671799 0.859227 0.05266195 0.860064 0.05189096 0.856498 0.12463 0.691466 0.12648 0.696613 0.12327 0.697796 0.121205 0.692937 0.05841398 0.838575 0.05925899 0.836951 0.06404495 0.837135 0.06233996 0.839644 0.06087499 0.873622 0.05931496 0.878992 0.055408 0.878453 0.05662697 0.873009 0.06546396 0.845448 0.06651997 0.851484 0.06071394 0.853712 0.05885499 0.849148 0.05288296 0.848083 0.05138897 0.846188 0.05496096 0.844142 0.05647999 0.846125 0.055857 0.855395 0.05189096 0.856498 0.05095797 0.852558 0.05477595 0.851242 0.05496096 0.844142 0.05719596 0.841331 0.05962496 0.842904 0.05647999 0.846125 0.06233996 0.839644 0.06404495 0.837135 0.07083398 0.837333 0.06864595 0.840607 0.06546396 0.845448 0.05885499 0.849148 0.05647999 0.846125 0.05962496 0.842904 0.128037 0.689539 0.129979 0.694515 0.12648 0.696613 0.12463 0.691466 0.05662697 0.873009 0.055408 0.878453 0.05194699 0.878739 0.05264395 0.872907 0.033149 0.873407 0.031798 0.878637 0.02929198 0.877593 0.02946698 0.874151 0.02813297 0.857226 0.02732199 0.855254 0.03210097 0.854259 0.03317695 0.85648 0.02892297 0.870377 0.03339797 0.869951 0.033149 0.873407 0.02946698 0.874151 0.125878 0.683674 0.121723 0.674425 0.125231 0.672894 0.128422 0.680133 0.04306197 0.851422 0.03742998 0.85279 0.03665399 0.84933 0.04325896 0.847754 0.11057 0.668052 0.114931 0.677945 0.113006 0.679098 0.110146 0.670581 0.05728799 0.866998 0.05662697 0.873009 0.05264395 0.872907 0.05277997 0.867164 0.04723399 0.853818 0.04350399 0.854805 0.04306197 0.851422 0.04650199 0.850475 0.04890596 0.86417 0.04453295 0.864992 0.04428595 0.861249 0.04903995 0.8607 0.118566 0.686568 0.115804 0.685556 0.113006 0.679098 0.114931 0.677945 0.04961198 0.867764 0.04969298 0.873457 0.044752 0.873332 0.04455399 0.868987 0.03325599 0.862441 0.02820295 0.863611 0.028521 0.859554 0.033427 0.858466 0.118566 0.686568 0.117575 0.690269 0.116002 0.687949 0.115804 0.685556 0.04723399 0.853818 0.05095797 0.852558 0.05189096 0.856498 0.04848694 0.857477 0.03988498 0.869497 0.03339797 0.869951 0.033553 0.866712 0.03953599 0.86568 0.05713999 0.863165 0.05728799 0.866998 0.05277997 0.867164 0.05280697 0.863715 0.044752 0.873332 0.039617 0.873572 0.03988498 0.869497 0.04455399 0.868987 0.04350399 0.854805 0.03821796 0.855393 0.03742998 0.85279 0.04306197 0.851422 0.11057 0.668052 0.110146 0.670581 0.108254 0.669511 0.108174 0.666855 0.04650199 0.850475 0.04306197 0.851422 0.04325896 0.847754 0.04554897 0.848118 0.044752 0.873332 0.047028 0.878967 0.039267 0.87929 0.039617 0.873572 0.04650199 0.850475 0.04942494 0.849452 0.05095797 0.852558 0.04723399 0.853818 0.04969298 0.873457 0.04948699 0.877673 0.047028 0.878967 0.044752 0.873332 0.05264395 0.872907 0.05194699 0.878739 0.04948699 0.877673 0.04969298 0.873457 0.125878 0.683674 0.128422 0.680133 0.130294 0.682166 0.131003 0.68499 0.05266195 0.860064 0.04903995 0.8607 0.04848694 0.857477 0.05189096 0.856498 0.03923898 0.861664 0.03325599 0.862441 0.033427 0.858466 0.03858697 0.85816 0.05280697 0.863715 0.04890596 0.86417 0.04903995 0.8607 0.05266195 0.860064 0.02892297 0.870377 0.02869999 0.867321 0.033553 0.866712 0.03339797 0.869951 0.04903995 0.8607 0.04428595 0.861249 0.04374098 0.858049 0.04848694 0.857477 0.03742998 0.85279 0.03821796 0.855393 0.03317695 0.85648 0.03210097 0.854259 0.04428595 0.861249 0.03923898 0.861664 0.03858697 0.85816 0.04374098 0.858049 0.04453295 0.864992 0.03953599 0.86568 0.03923898 0.861664 0.04428595 0.861249 0.04455399 0.868987 0.03988498 0.869497 0.03953599 0.86568 0.04453295 0.864992 0.04455399 0.868987 0.04453295 0.864992 0.04890596 0.86417 0.04961198 0.867764 0.03953599 0.86568 0.033553 0.866712 0.03325599 0.862441 0.03923898 0.861664 0.04350399 0.854805 0.04374098 0.858049 0.03858697 0.85816 0.03821796 0.855393 0.04723399 0.853818 0.04848694 0.857477 0.04374098 0.858049 0.04350399 0.854805 0.033553 0.866712 0.02869999 0.867321 0.02820295 0.863611 0.03325599 0.862441 0.03210097 0.854259 0.02761596 0.851182 0.03665399 0.84933 0.03742998 0.85279 0.113916 0.666499 0.117985 0.676225 0.114931 0.677945 0.11057 0.668052 0.118655 0.665356 0.121723 0.674425 0.117985 0.676225 0.113916 0.666499 0.118566 0.686568 0.114931 0.677945 0.117985 0.676225 0.122376 0.685221 0.04650199 0.850475 0.04554897 0.848118 0.04775398 0.847019 0.04942494 0.849452 0.02813297 0.857226 0.03317695 0.85648 0.033427 0.858466 0.028521 0.859554 0.02732199 0.855254 0.02652698 0.85317 0.02761596 0.851182 0.03210097 0.854259 0.03821796 0.855393 0.03858697 0.85816 0.033427 0.858466 0.03317695 0.85648 0.04961198 0.867764 0.04890596 0.86417 0.05280697 0.863715 0.05277997 0.867164 0.039617 0.873572 0.039267 0.87929 0.031798 0.878637 0.033149 0.873407 0.121723 0.674425 0.118655 0.665356 0.12188 0.666319 0.125231 0.672894 0.04969298 0.873457 0.04961198 0.867764 0.05277997 0.867164 0.05264395 0.872907 0.039617 0.873572 0.033149 0.873407 0.03339797 0.869951 0.03988498 0.869497 0.125878 0.683674 0.122376 0.685221 0.117985 0.676225 0.121723 0.674425 0.111726 0.653091 0.112939 0.654886 0.109758 0.656785 0.108739 0.65443 0.01952099 0.875067 0.01964896 0.87218 0.02393198 0.871581 0.02471596 0.874829 0.109758 0.656785 0.111306 0.660184 0.107676 0.662108 0.106368 0.657871 0.02892297 0.870377 0.02946698 0.874151 0.02471596 0.874829 0.02393198 0.871581 0.112939 0.654886 0.114707 0.657982 0.111306 0.660184 0.109758 0.656785 0.01809698 0.856903 0.01761698 0.854706 0.02336394 0.85287 0.02297896 0.855973 0.111306 0.660184 0.113916 0.666499 0.11057 0.668052 0.107676 0.662108 0.02297896 0.855973 0.02336394 0.85287 0.02652698 0.85317 0.02732199 0.855254 0.01298499 0.859585 0.01304799 0.857803 0.01761698 0.854706 0.01809698 0.856903 0.007780969 0.865389 0.006215989 0.863954 0.009088993 0.861413 0.009574949 0.862756 0.11057 0.668052 0.108174 0.666855 0.10628 0.662238 0.107676 0.662108 0.01075899 0.871494 0.01003295 0.873162 0.006655991 0.870692 0.007679998 0.86852 0.106368 0.657871 0.107676 0.662108 0.10628 0.662238 0.104476 0.658063 0.007679998 0.86852 0.009152948 0.867234 0.01158696 0.870278 0.01075899 0.871494 0.009574949 0.862756 0.01062899 0.863689 0.009223997 0.866375 0.007780969 0.865389 0.01062899 0.863689 0.01136696 0.864191 0.01028096 0.866759 0.009223997 0.866375 0.01103198 0.866571 0.01028096 0.866759 0.01136696 0.864191 0.011388 0.864775 0.112939 0.654886 0.111726 0.653091 0.11122 0.650159 0.113879 0.653374 0.104695 0.653246 0.106296 0.655795 0.106368 0.657871 0.104476 0.658063 0.01523196 0.871602 0.01563298 0.869667 0.01954299 0.869291 0.01964896 0.87218 0.118655 0.665356 0.119438 0.662464 0.121485 0.663754 0.12188 0.666319 0.009152948 0.867234 0.01028096 0.866759 0.01179599 0.86877 0.01158696 0.870278 0.02892297 0.870377 0.02393198 0.871581 0.02332299 0.868416 0.02869999 0.867321 0.02813297 0.857226 0.028521 0.859554 0.02302098 0.860555 0.02323496 0.858111 0.01062899 0.863689 0.009574949 0.862756 0.01298499 0.859585 0.01352494 0.860663 0.02317297 0.864552 0.02032095 0.865521 0.01871198 0.862314 0.02302098 0.860555 0.01853698 0.859102 0.01352494 0.860663 0.01298499 0.859585 0.01809698 0.856903 0.01853698 0.859102 0.02323496 0.858111 0.02302098 0.860555 0.01871198 0.862314 0.01062899 0.863689 0.01352494 0.860663 0.01468294 0.862559 0.01136696 0.864191 0.01964896 0.87218 0.01952099 0.875067 0.01449698 0.874291 0.01523196 0.871602 0.01964896 0.87218 0.01954299 0.869291 0.02332299 0.868416 0.02393198 0.871581 0.01523196 0.871602 0.01158696 0.870278 0.01179599 0.86877 0.01563298 0.869667 0.02820295 0.863611 0.02317297 0.864552 0.02302098 0.860555 0.028521 0.859554 0.01952099 0.875067 0.01912796 0.878899 0.01355499 0.877231 0.01449698 0.874291 0.02869999 0.867321 0.02332299 0.868416 0.02317297 0.864552 0.02820295 0.863611 0.02471596 0.874829 0.02682095 0.879289 0.01912796 0.878899 0.01952099 0.875067 0.02946698 0.874151 0.02929198 0.877593 0.02682095 0.879289 0.02471596 0.874829 0.02332299 0.868416 0.01954299 0.869291 0.02032095 0.865521 0.02317297 0.864552 0.108739 0.65443 0.109758 0.656785 0.106368 0.657871 0.106296 0.655795 0.114707 0.657982 0.112939 0.654886 0.113879 0.653374 0.116478 0.657011 0.114707 0.657982 0.118655 0.665356 0.113916 0.666499 0.111306 0.660184 0.108739 0.65443 0.107554 0.650707 0.11122 0.650159 0.111726 0.653091 0.01352494 0.860663 0.01853698 0.859102 0.01871198 0.862314 0.01468294 0.862559 0.01158696 0.870278 0.01523196 0.871602 0.01449698 0.874291 0.01075899 0.871494 0.01449698 0.874291 0.01355499 0.877231 0.01003295 0.873162 0.01075899 0.871494 0.114707 0.657982 0.116478 0.657011 0.119438 0.662464 0.118655 0.665356 0.01809698 0.856903 0.02297896 0.855973 0.02323496 0.858111 0.01853698 0.859102 0.106296 0.655795 0.104695 0.653246 0.107554 0.650707 0.108739 0.65443 0.009574949 0.862756 0.009088993 0.861413 0.01304799 0.857803 0.01298499 0.859585 0.02813297 0.857226 0.02323496 0.858111 0.02297896 0.855973 0.02732199 0.855254 0.07595998 0.896627 0.07854795 0.893678 0.08138698 0.897363 0.07871896 0.90003 0.149163 0.679843 0.152893 0.681061 0.154208 0.684215 0.150889 0.684945 0.07270497 0.894165 0.07595998 0.896627 0.07334297 0.900195 0.07030999 0.8977 0.07626497 0.881627 0.08019697 0.884918 0.07489997 0.890557 0.07177197 0.889134 0.08587098 0.876742 0.087426 0.880172 0.08019697 0.884918 0.07626497 0.881627 0.06503999 0.884394 0.069781 0.880675 0.06968295 0.884113 0.06621199 0.886127 0.07871896 0.90003 0.07585197 0.902875 0.07334297 0.900195 0.07595998 0.896627 0.08019697 0.884918 0.087426 0.880172 0.08920395 0.884714 0.08342099 0.889108 0.086142 0.893565 0.08342099 0.889108 0.08920395 0.884714 0.09189295 0.888631 0.09699898 0.903625 0.09461295 0.900244 0.09838396 0.895569 0.101085 0.899155 0.07626497 0.881627 0.07177197 0.889134 0.06868696 0.888189 0.06968295 0.884113 0.09699898 0.903625 0.09376496 0.907992 0.09214895 0.905266 0.09461295 0.900244 0.09479898 0.892394 0.08934396 0.898301 0.086142 0.893565 0.09189295 0.888631 0.06968295 0.884113 0.06868696 0.888189 0.066064 0.888678 0.06621199 0.886127 0.09214895 0.905266 0.09376496 0.907992 0.09232896 0.910241 0.09125298 0.908421 0.157591 0.692609 0.159296 0.694039 0.161738 0.696863 0.15557 0.696197 0.153349 0.691477 0.151923 0.688397 0.155108 0.686662 0.156045 0.689715 0.09479898 0.892394 0.09838396 0.895569 0.09461295 0.900244 0.08934396 0.898301 0.08861899 0.904436 0.08474397 0.905561 0.08341699 0.901433 0.08934396 0.898301 0.08587098 0.876742 0.07626497 0.881627 0.07711297 0.875906 0.08524596 0.871746 0.08934396 0.898301 0.08341699 0.901433 0.08138698 0.897363 0.086142 0.893565 0.138611 0.697674 0.139424 0.695584 0.142915 0.695817 0.142048 0.701058 0.069781 0.880675 0.07711297 0.875906 0.07626497 0.881627 0.06968295 0.884113 0.08019697 0.884918 0.08342099 0.889108 0.07854795 0.893678 0.07489997 0.890557 0.09214895 0.905266 0.08861899 0.904436 0.08934396 0.898301 0.09461295 0.900244 0.141017 0.688621 0.14276 0.691874 0.1397359 0.692824 0.138909 0.689646 0.09214895 0.905266 0.09125298 0.908421 0.08869898 0.90766 0.08861899 0.904436 0.153349 0.691477 0.15557 0.696197 0.149154 0.699599 0.1485199 0.694246 0.142915 0.695817 0.139424 0.695584 0.1397359 0.692824 0.14276 0.691874 0.06755799 0.892 0.065342 0.891619 0.066064 0.888678 0.06868696 0.888189 0.06868696 0.888189 0.07177197 0.889134 0.07036596 0.89275 0.06755799 0.892 0.151923 0.688397 0.150889 0.684945 0.154208 0.684215 0.155108 0.686662 0.08474397 0.905561 0.08569997 0.908363 0.08343398 0.909238 0.08228796 0.906701 0.07177197 0.889134 0.07489997 0.890557 0.07270497 0.894165 0.07036596 0.89275 0.07270497 0.894165 0.07489997 0.890557 0.07854795 0.893678 0.07595998 0.896627 0.141017 0.688621 0.138909 0.689646 0.138193 0.685661 0.1399469 0.68302 0.08341699 0.901433 0.08069199 0.903241 0.07871896 0.90003 0.08138698 0.897363 0.06612896 0.89444 0.06300598 0.894325 0.065342 0.891619 0.06755799 0.892 0.07270497 0.894165 0.07030999 0.8977 0.06827396 0.895881 0.07036596 0.89275 0.150889 0.684945 0.151923 0.688397 0.147991 0.690473 0.146695 0.68657 0.146695 0.68657 0.147991 0.690473 0.14276 0.691874 0.141017 0.688621 0.142915 0.695817 0.1485199 0.694246 0.149154 0.699599 0.142048 0.701058 0.153349 0.691477 0.1485199 0.694246 0.147991 0.690473 0.151923 0.688397 0.142915 0.695817 0.14276 0.691874 0.147991 0.690473 0.1485199 0.694246 0.08869898 0.90766 0.08569997 0.908363 0.08474397 0.905561 0.08861899 0.904436 0.086142 0.893565 0.08138698 0.897363 0.07854795 0.893678 0.08342099 0.889108 0.149163 0.679843 0.150889 0.684945 0.146695 0.68657 0.144951 0.680693 0.08474397 0.905561 0.08228796 0.906701 0.08069199 0.903241 0.08341699 0.901433 0.07036596 0.89275 0.06827396 0.895881 0.06612896 0.89444 0.06755799 0.892 0.07871896 0.90003 0.08069199 0.903241 0.077995 0.905722 0.07585197 0.902875 0.06503999 0.884394 0.06407999 0.883121 0.06905198 0.87794 0.069781 0.880675 0.144951 0.680693 0.146695 0.68657 0.141017 0.688621 0.1399469 0.68302 0.15557 0.696197 0.153349 0.691477 0.156045 0.689715 0.157591 0.692609 0.06380295 0.919805 0.06724399 0.91686 0.068174 0.91877 0.065104 0.921139 0.05486595 0.911589 0.05379295 0.910585 0.05604898 0.907345 0.05768996 0.908215 0.05486595 0.911589 0.05768996 0.908215 0.05989199 0.909878 0.05676895 0.913192 0.07377195 0.910377 0.071105 0.913154 0.068713 0.911115 0.07140499 0.908119 0.07228195 0.914224 0.068174 0.91877 0.06724399 0.91686 0.071105 0.913154 0.134128 0.665877 0.133023 0.668766 0.131555 0.667219 0.131797 0.664787 0.06384199 0.901004 0.06134295 0.904118 0.059466 0.902409 0.06244897 0.898913 0.138934 0.664488 0.142114 0.673014 0.137142 0.675196 0.134128 0.665877 0.07589596 0.90802 0.07371598 0.905466 0.07585197 0.902875 0.077995 0.905722 0.071105 0.913154 0.06724399 0.91686 0.06502997 0.914708 0.068713 0.911115 0.06502997 0.914708 0.06175994 0.917996 0.05910795 0.915741 0.06247496 0.912161 0.06247496 0.912161 0.05910795 0.915741 0.05676895 0.913192 0.05989199 0.909878 0.134128 0.665877 0.137142 0.675196 0.134838 0.676253 0.133023 0.668766 0.07739895 0.909658 0.07895696 0.911188 0.07784497 0.912784 0.07502597 0.910885 0.143093 0.662839 0.146619 0.671889 0.142114 0.673014 0.138934 0.664488 0.068713 0.911115 0.06502997 0.914708 0.06247496 0.912161 0.06593197 0.908504 0.05604898 0.907345 0.05289798 0.907149 0.05782896 0.901462 0.059466 0.902409 0.06593197 0.908504 0.06247496 0.912161 0.05989199 0.909878 0.06319898 0.905929 0.06623297 0.898543 0.06829696 0.900175 0.06559699 0.903007 0.06384199 0.901004 0.07585197 0.902875 0.07371598 0.905466 0.07117396 0.90273 0.07334297 0.900195 0.07140499 0.908119 0.068713 0.911115 0.06593197 0.908504 0.06874495 0.905649 0.06384199 0.901004 0.06559699 0.903007 0.06319898 0.905929 0.06134295 0.904118 0.07739895 0.909658 0.07589596 0.90802 0.077995 0.905722 0.07948595 0.908208 0.07334297 0.900195 0.07117396 0.90273 0.06829696 0.900175 0.07030999 0.8977 0.059466 0.902409 0.06134295 0.904118 0.05768996 0.908215 0.05604898 0.907345 0.149163 0.679843 0.1515139 0.677108 0.152881 0.678828 0.152893 0.681061 0.06454598 0.896806 0.06612896 0.89444 0.06827396 0.895881 0.06623297 0.898543 0.05379295 0.910585 0.05251896 0.909279 0.05289798 0.907149 0.05604898 0.907345 0.08069199 0.903241 0.08228796 0.906701 0.07948595 0.908208 0.077995 0.905722 0.146619 0.671889 0.143093 0.662839 0.145777 0.664352 0.1491129 0.671544 0.07228195 0.914224 0.07391697 0.916494 0.06859999 0.922109 0.068174 0.91877 0.06454598 0.896806 0.06339299 0.89613 0.06300598 0.894325 0.06612896 0.89444 0.07948595 0.908208 0.08089798 0.910941 0.07895696 0.911188 0.07739895 0.909658 0.06454598 0.896806 0.06244897 0.898913 0.06146597 0.896752 0.06339299 0.89613 0.06244897 0.898913 0.059466 0.902409 0.05782896 0.901462 0.06146597 0.896752 0.07502597 0.910885 0.07784497 0.912784 0.07391697 0.916494 0.07228195 0.914224 0.07377195 0.910377 0.07140499 0.908119 0.07371598 0.905466 0.07589596 0.90802 0.06623297 0.898543 0.06384199 0.901004 0.06244897 0.898913 0.06454598 0.896806 0.06134295 0.904118 0.06319898 0.905929 0.05989199 0.909878 0.05768996 0.908215 0.1399469 0.68302 0.136986 0.68262 0.134838 0.676253 0.137142 0.675196 0.07502597 0.910885 0.07228195 0.914224 0.071105 0.913154 0.07377195 0.910377 0.06380295 0.919805 0.06175994 0.917996 0.06502997 0.914708 0.06724399 0.91686 0.143093 0.662839 0.144393 0.659835 0.145792 0.662022 0.145777 0.664352 0.068174 0.91877 0.06859999 0.922109 0.06640696 0.922918 0.065104 0.921139 0.06874495 0.905649 0.06593197 0.908504 0.06319898 0.905929 0.06559699 0.903007 0.07371598 0.905466 0.07140499 0.908119 0.06874495 0.905649 0.07117396 0.90273 0.07117396 0.90273 0.06874495 0.905649 0.06559699 0.903007 0.06829696 0.900175 0.08228796 0.906701 0.08343398 0.909238 0.08089798 0.910941 0.07948595 0.908208 0.1399469 0.68302 0.138193 0.685661 0.136395 0.684683 0.136986 0.68262 0.149163 0.679843 0.146619 0.671889 0.1491129 0.671544 0.1515139 0.677108 0.06623297 0.898543 0.06827396 0.895881 0.07030999 0.8977 0.06829696 0.900175 0.149163 0.679843 0.144951 0.680693 0.142114 0.673014 0.146619 0.671889 0.1399469 0.68302 0.137142 0.675196 0.142114 0.673014 0.144951 0.680693 0.07589596 0.90802 0.07739895 0.909658 0.07502597 0.910885 0.07377195 0.910377 0.045228 0.928163 0.04343098 0.928087 0.04359495 0.924594 0.04534798 0.925019 0.04626995 0.92106 0.04372495 0.920906 0.04549294 0.916619 0.04770594 0.917649 0.139167 0.655115 0.143093 0.662839 0.138934 0.664488 0.13603 0.657057 0.13603 0.657057 0.138934 0.664488 0.134128 0.665877 0.132687 0.658053 0.04770594 0.917649 0.04549294 0.916619 0.05005496 0.910463 0.05112695 0.91349 0.1374779 0.652082 0.139167 0.655115 0.13603 0.657057 0.1345379 0.653229 0.06380295 0.919805 0.065104 0.921139 0.06263995 0.92346 0.06092 0.922576 0.057024 0.927846 0.05636298 0.926293 0.06092 0.922576 0.06263995 0.92346 0.05902296 0.920879 0.05607295 0.924603 0.05439394 0.921217 0.05630296 0.918631 0.05630296 0.918631 0.05439394 0.921217 0.05118 0.919585 0.05381798 0.91651 0.06263995 0.92346 0.06464397 0.925071 0.05831897 0.929346 0.057024 0.927846 0.06175994 0.917996 0.05902296 0.920879 0.05630296 0.918631 0.05910795 0.915741 0.057024 0.927846 0.05831897 0.929346 0.05416798 0.93101 0.05346995 0.929289 0.05910795 0.915741 0.05630296 0.918631 0.05381798 0.91651 0.05676895 0.913192 0.05346995 0.929289 0.05416798 0.93101 0.05136299 0.931454 0.05101996 0.929912 0.05112695 0.91349 0.05005496 0.910463 0.05251896 0.909279 0.05379295 0.910585 0.05636298 0.926293 0.057024 0.927846 0.05346995 0.929289 0.05349797 0.928056 0.04770594 0.917649 0.05112695 0.91349 0.05214297 0.915139 0.04924094 0.918749 0.04761099 0.928033 0.04787498 0.927387 0.05101394 0.927899 0.05116695 0.928796 0.05486595 0.911589 0.05214297 0.915139 0.05112695 0.91349 0.05379295 0.910585 0.139167 0.655115 0.1374779 0.652082 0.1389999 0.65022 0.1414369 0.653401 0.065104 0.921139 0.06640696 0.922918 0.06464397 0.925071 0.06263995 0.92346 0.04924094 0.918749 0.04773497 0.921522 0.04626995 0.92106 0.04770594 0.917649 0.04672998 0.924769 0.04534798 0.925019 0.04626995 0.92106 0.04773497 0.921522 0.05636298 0.926293 0.05607295 0.924603 0.05902296 0.920879 0.06092 0.922576 0.05116695 0.928796 0.05349797 0.928056 0.05346995 0.929289 0.05101996 0.929912 0.06380295 0.919805 0.06092 0.922576 0.05902296 0.920879 0.06175994 0.917996 0.05101996 0.929912 0.05136299 0.931454 0.04744595 0.93159 0.04718297 0.929846 0.1303589 0.651078 0.131583 0.652528 0.132055 0.654248 0.1298069 0.654242 0.1374779 0.652082 0.136792 0.650591 0.1368629 0.648856 0.1389999 0.65022 0.05044096 0.927522 0.05101394 0.927899 0.04787498 0.927387 0.04846096 0.926927 0.04846096 0.926927 0.04787498 0.927387 0.04759097 0.924591 0.04803895 0.925113 0.04534798 0.925019 0.04359495 0.924594 0.04372495 0.920906 0.04626995 0.92106 0.132055 0.654248 0.132687 0.658053 0.129901 0.658248 0.1298069 0.654242 0.134128 0.665877 0.131797 0.664787 0.129901 0.658248 0.132687 0.658053 0.139167 0.655115 0.1414369 0.653401 0.144393 0.659835 0.143093 0.662839 0.04672998 0.924769 0.04773497 0.921522 0.04864394 0.921958 0.04759097 0.924591 0.05349797 0.928056 0.05116695 0.928796 0.05101394 0.927899 0.05365496 0.927073 0.04924094 0.918749 0.05214297 0.915139 0.05381798 0.91651 0.05118 0.919585 0.05486595 0.911589 0.05676895 0.913192 0.05381798 0.91651 0.05214297 0.915139 0.04773497 0.921522 0.04924094 0.918749 0.05118 0.919585 0.04864394 0.921958 0.05349797 0.928056 0.05365496 0.927073 0.05607295 0.924603 0.05636298 0.926293 0.04672998 0.924769 0.04759097 0.924591 0.04787498 0.927387 0.04716396 0.927736 0.04534798 0.925019 0.04672998 0.924769 0.04716396 0.927736 0.045228 0.928163 0.04718297 0.929846 0.04761099 0.928033 0.05116695 0.928796 0.05101996 0.929912 0.1345379 0.653229 0.13603 0.657057 0.132687 0.658053 0.132055 0.654248 0.136792 0.650591 0.1374779 0.652082 0.1345379 0.653229 0.13386 0.651285 0.13386 0.651285 0.1345379 0.653229 0.132055 0.654248 0.131583 0.652528 0.131583 0.652528 0.1303589 0.651078 0.133128 0.649341 0.13386 0.651285 0.13386 0.651285 0.133128 0.649341 0.1368629 0.648856 0.136792 0.650591 0.09642899 0.916519 0.099738 0.9164 0.09900295 0.918559 0.09613597 0.918567 0.111197 0.920748 0.113492 0.922709 0.112841 0.925048 0.110576 0.922924 0.09375298 0.916972 0.09642899 0.916519 0.09613597 0.918567 0.09351599 0.918835 0.09836095 0.908295 0.09445101 0.911225 0.09376496 0.907992 0.09699898 0.903625 0.09351599 0.918835 0.09132599 0.919292 0.09162598 0.917557 0.09375298 0.916972 0.170234 0.695651 0.170772 0.692766 0.174132 0.692511 0.174042 0.695445 0.177385 0.698631 0.173995 0.698457 0.174042 0.695445 0.1772429 0.695251 0.177534 0.701893 0.173873 0.701458 0.173995 0.698457 0.177385 0.698631 0.1770589 0.69209 0.1772429 0.695251 0.174042 0.695445 0.174132 0.692511 0.117796 0.910279 0.115514 0.913346 0.113182 0.910844 0.115708 0.907375 0.102214 0.909089 0.105801 0.904424 0.108355 0.906156 0.105635 0.910751 0.1108649 0.908202 0.108343 0.91236 0.105635 0.910751 0.108355 0.906156 0.111192 0.914456 0.110171 0.917175 0.10682 0.915544 0.108343 0.91236 0.091928 0.915711 0.09418898 0.914405 0.09375298 0.916972 0.09162598 0.917557 0.165257 0.694515 0.166494 0.69228 0.170772 0.692766 0.170234 0.695651 0.117819 0.915487 0.115514 0.913346 0.117796 0.910279 0.12005 0.913106 0.111192 0.914456 0.108343 0.91236 0.1108649 0.908202 0.113182 0.910844 0.117819 0.915487 0.115896 0.918268 0.113653 0.916432 0.115514 0.913346 0.091928 0.915711 0.09211999 0.913658 0.09445101 0.911225 0.09418898 0.914405 0.166494 0.69228 0.167231 0.689924 0.170898 0.6904 0.170772 0.692766 0.09376496 0.907992 0.09445101 0.911225 0.09211999 0.913658 0.09232896 0.910241 0.174132 0.692511 0.170772 0.692766 0.170898 0.6904 0.174323 0.690202 0.09836095 0.908295 0.09724998 0.913434 0.09418898 0.914405 0.09445101 0.911225 0.174323 0.690202 0.1744329 0.686596 0.176585 0.686899 0.176895 0.689768 0.111197 0.920748 0.110576 0.922924 0.10836 0.921511 0.109093 0.919556 0.165257 0.694515 0.161738 0.696863 0.159296 0.694039 0.16285 0.693662 0.167719 0.686751 0.167231 0.689924 0.164955 0.689402 0.165269 0.687172 0.110171 0.917175 0.112273 0.918933 0.111197 0.920748 0.109093 0.919556 0.169516 0.698664 0.170234 0.695651 0.174042 0.695445 0.173995 0.698457 0.161738 0.696863 0.165257 0.694515 0.170234 0.695651 0.169516 0.698664 0.103306 0.902654 0.09836095 0.908295 0.09699898 0.903625 0.101085 0.899155 0.09836095 0.908295 0.102214 0.909089 0.100564 0.913618 0.09724998 0.913434 0.09836095 0.908295 0.103306 0.902654 0.105801 0.904424 0.102214 0.909089 0.114423 0.920903 0.112273 0.918933 0.113653 0.916432 0.115896 0.918268 0.113653 0.916432 0.111192 0.914456 0.113182 0.910844 0.115514 0.913346 0.100564 0.913618 0.104189 0.914517 0.103326 0.917081 0.099738 0.9164 0.110171 0.917175 0.111192 0.914456 0.113653 0.916432 0.112273 0.918933 0.09724998 0.913434 0.09642899 0.916519 0.09375298 0.916972 0.09418898 0.914405 0.165257 0.694515 0.16285 0.693662 0.164273 0.691658 0.166494 0.69228 0.10682 0.915544 0.105956 0.917883 0.103326 0.917081 0.104189 0.914517 0.110171 0.917175 0.109093 0.919556 0.105956 0.917883 0.10682 0.915544 0.102726 0.919115 0.103326 0.917081 0.105956 0.917883 0.105697 0.920023 0.09724998 0.913434 0.100564 0.913618 0.099738 0.9164 0.09642899 0.916519 0.10682 0.915544 0.104189 0.914517 0.105635 0.910751 0.108343 0.91236 0.100564 0.913618 0.102214 0.909089 0.105635 0.910751 0.104189 0.914517 0.09900295 0.918559 0.099738 0.9164 0.103326 0.917081 0.102726 0.919115 0.164273 0.691658 0.164955 0.689402 0.167231 0.689924 0.166494 0.69228 0.1770589 0.69209 0.174132 0.692511 0.174323 0.690202 0.176895 0.689768 0.171496 0.686506 0.170898 0.6904 0.167231 0.689924 0.167719 0.686751 0.112273 0.918933 0.114423 0.920903 0.113492 0.922709 0.111197 0.920748 0.109093 0.919556 0.10836 0.921511 0.105697 0.920023 0.105956 0.917883 0.1744329 0.686596 0.174323 0.690202 0.170898 0.6904 0.171496 0.686506 0.09900295 0.918559 0.102726 0.919115 0.102212 0.921113 0.09840595 0.920344 0.09900295 0.918559 0.09840595 0.920344 0.09563601 0.92035 0.09613597 0.918567 0.101782 0.923041 0.101388 0.925196 0.097525 0.924461 0.09812396 0.922235 0.107159 0.925176 0.104797 0.924044 0.105349 0.922147 0.10789 0.923492 0.101388 0.925196 0.100687 0.927758 0.09720396 0.927147 0.097525 0.924461 0.09528398 0.922091 0.09563601 0.92035 0.09840595 0.920344 0.09812396 0.922235 0.17056 0.672832 0.170818 0.677829 0.167426 0.677986 0.167276 0.673081 0.171011 0.683067 0.171496 0.686506 0.167719 0.686751 0.167538 0.6829 0.108656 0.928558 0.107725 0.931037 0.105642 0.929787 0.106498 0.927304 0.09321296 0.922292 0.09156697 0.922397 0.09096395 0.921364 0.09327399 0.920607 0.09493398 0.924263 0.09477698 0.926799 0.09221696 0.92657 0.09280198 0.924081 0.107159 0.925176 0.109135 0.926721 0.108656 0.928558 0.106498 0.927304 0.110576 0.922924 0.112841 0.925048 0.112156 0.927305 0.110032 0.925127 0.108656 0.928558 0.111012 0.929644 0.110047 0.932892 0.107725 0.931037 0.10836 0.921511 0.110576 0.922924 0.110032 0.925127 0.10789 0.923492 0.174232 0.677676 0.1733469 0.672775 0.17539 0.67386 0.175833 0.677677 0.109135 0.926721 0.110976 0.927909 0.111012 0.929644 0.108656 0.928558 0.09321296 0.922292 0.09327399 0.920607 0.09563601 0.92035 0.09528398 0.922091 0.105697 0.920023 0.10836 0.921511 0.10789 0.923492 0.105349 0.922147 0.09528398 0.922091 0.09812396 0.922235 0.097525 0.924461 0.09493398 0.924263 0.09613597 0.918567 0.09563601 0.92035 0.09327399 0.920607 0.09351599 0.918835 0.09221696 0.92657 0.09477698 0.926799 0.09441995 0.929486 0.09151798 0.929351 0.09327399 0.920607 0.09096395 0.921364 0.09132599 0.919292 0.09351599 0.918835 0.109135 0.926721 0.107159 0.925176 0.10789 0.923492 0.110032 0.925127 0.167719 0.686751 0.165269 0.687172 0.165394 0.684526 0.167538 0.6829 0.107725 0.931037 0.10653 0.933665 0.104699 0.932497 0.105642 0.929787 0.174401 0.683192 0.176401 0.684112 0.176585 0.686899 0.1744329 0.686596 0.106498 0.927304 0.105642 0.929787 0.103497 0.928712 0.104232 0.926116 0.174401 0.683192 0.1764619 0.681103 0.177214 0.68272 0.176401 0.684112 0.106498 0.927304 0.104232 0.926116 0.104797 0.924044 0.107159 0.925176 0.102212 0.921113 0.101782 0.923041 0.09812396 0.922235 0.09840595 0.920344 0.105349 0.922147 0.104797 0.924044 0.101782 0.923041 0.102212 0.921113 0.104797 0.924044 0.104232 0.926116 0.101388 0.925196 0.101782 0.923041 0.167276 0.673081 0.167426 0.677986 0.165629 0.678295 0.164991 0.674612 0.104232 0.926116 0.103497 0.928712 0.100687 0.927758 0.101388 0.925196 0.167538 0.6829 0.167426 0.677986 0.170818 0.677829 0.171011 0.683067 0.167538 0.6829 0.165301 0.681615 0.165629 0.678295 0.167426 0.677986 0.09321296 0.922292 0.09280198 0.924081 0.09065699 0.923739 0.09156697 0.922397 0.105697 0.920023 0.105349 0.922147 0.102212 0.921113 0.102726 0.919115 0.100687 0.927758 0.100143 0.930551 0.09693497 0.92989 0.09720396 0.927147 0.102864 0.931444 0.102232 0.934066 0.09947299 0.933103 0.100143 0.930551 0.09528398 0.922091 0.09493398 0.924263 0.09280198 0.924081 0.09321296 0.922292 0.103497 0.928712 0.102864 0.931444 0.100143 0.930551 0.100687 0.927758 0.110032 0.925127 0.112156 0.927305 0.110976 0.927909 0.109135 0.926721 0.107725 0.931037 0.110047 0.932892 0.108304 0.936548 0.10653 0.933665 0.09493398 0.924263 0.097525 0.924461 0.09720396 0.927147 0.09477698 0.926799 0.09151798 0.929351 0.08953499 0.930491 0.08973997 0.926739 0.09221696 0.92657 0.103859 0.935077 0.102232 0.934066 0.102864 0.931444 0.104699 0.932497 0.100143 0.930551 0.09947299 0.933103 0.09625196 0.932427 0.09693497 0.92989 0.1733469 0.672775 0.174232 0.677676 0.170818 0.677829 0.17056 0.672832 0.174401 0.683192 0.1744329 0.686596 0.171496 0.686506 0.171011 0.683067 0.10653 0.933665 0.108304 0.936548 0.106811 0.937394 0.105471 0.936104 0.103859 0.935077 0.104699 0.932497 0.10653 0.933665 0.105471 0.936104 0.105642 0.929787 0.104699 0.932497 0.102864 0.931444 0.103497 0.928712 0.174401 0.683192 0.171011 0.683067 0.170818 0.677829 0.174232 0.677676 0.167538 0.6829 0.165394 0.684526 0.164629 0.683204 0.165301 0.681615 0.09280198 0.924081 0.09221696 0.92657 0.08973997 0.926739 0.09065699 0.923739 0.09477698 0.926799 0.09720396 0.927147 0.09693497 0.92989 0.09441995 0.929486 0.174401 0.683192 0.174232 0.677676 0.175833 0.677677 0.1764619 0.681103 0.09331697 0.935736 0.09347295 0.934245 0.09563398 0.934406 0.09564596 0.935638 0.09540998 0.943675 0.09573495 0.94285 0.09832298 0.942852 0.097844 0.943916 0.100448 0.941831 0.097844 0.943916 0.09832298 0.942852 0.100248 0.941385 0.09371298 0.941748 0.09426999 0.940772 0.09573495 0.94285 0.09528195 0.943581 0.09371298 0.941748 0.092817 0.938454 0.09411895 0.93868 0.09426999 0.940772 0.09599 0.942362 0.09573495 0.94285 0.09426999 0.940772 0.09512799 0.941521 0.100914 0.942748 0.102022 0.944138 0.09885597 0.946135 0.09810495 0.944734 0.09724998 0.942645 0.09832298 0.942852 0.09573495 0.94285 0.09599 0.942362 0.1032029 0.940187 0.104888 0.941877 0.102022 0.944138 0.100914 0.942748 0.09691995 0.942454 0.09724998 0.942645 0.09599 0.942362 0.09611296 0.942198 0.169921 0.663503 0.169905 0.662463 0.172339 0.662857 0.17163 0.664476 0.172552 0.668684 0.172435 0.665927 0.173864 0.665563 0.174466 0.668521 0.17163 0.664476 0.172435 0.665927 0.170016 0.665991 0.169921 0.663503 0.09810495 0.944734 0.09885597 0.946135 0.09700298 0.948061 0.09572398 0.945381 0.172435 0.665927 0.17163 0.664476 0.172339 0.662857 0.173864 0.665563 0.09572398 0.945381 0.09540998 0.943675 0.097844 0.943916 0.09810495 0.944734 0.09384596 0.93208 0.09133297 0.932027 0.09151798 0.929351 0.09441995 0.929486 0.09261298 0.942524 0.09371298 0.941748 0.09528195 0.943581 0.09431499 0.944914 0.09384596 0.93208 0.09347295 0.934245 0.09083598 0.934167 0.09133297 0.932027 0.09540295 0.941668 0.095582 0.941685 0.09610795 0.942073 0.09611296 0.942198 0.100448 0.941831 0.100248 0.941385 0.101597 0.937874 0.102316 0.938999 0.092817 0.938454 0.09331697 0.935736 0.09564596 0.935638 0.09411895 0.93868 0.1032029 0.940187 0.102316 0.938999 0.103183 0.937084 0.104602 0.938001 0.09852695 0.941739 0.09832298 0.942852 0.09724998 0.942645 0.097925 0.942069 0.09691995 0.942454 0.09678596 0.942305 0.09695595 0.942265 0.09739595 0.942202 0.103859 0.935077 0.105471 0.936104 0.104602 0.938001 0.103183 0.937084 0.09133297 0.932027 0.08993595 0.932157 0.08953499 0.930491 0.09151798 0.929351 0.097925 0.942069 0.09724998 0.942645 0.09691995 0.942454 0.09739595 0.942202 0.09128898 0.939013 0.089298 0.940427 0.088804 0.936593 0.090985 0.936141 0.097844 0.943916 0.100448 0.941831 0.100914 0.942748 0.09810495 0.944734 0.102316 0.938999 0.101597 0.937874 0.102123 0.93629 0.103183 0.937084 0.09384596 0.93208 0.09625196 0.932427 0.09563398 0.934406 0.09347295 0.934245 0.104602 0.938001 0.106778 0.939145 0.104888 0.941877 0.1032029 0.940187 0.105471 0.936104 0.106811 0.937394 0.106778 0.939145 0.104602 0.938001 0.090985 0.936141 0.09083598 0.934167 0.09347295 0.934245 0.09331697 0.935736 0.090985 0.936141 0.088804 0.936593 0.08880299 0.933854 0.09083598 0.934167 0.09083598 0.934167 0.08880299 0.933854 0.08993595 0.932157 0.09133297 0.932027 0.09947299 0.933103 0.09907698 0.934722 0.09563398 0.934406 0.09625196 0.932427 0.103859 0.935077 0.103183 0.937084 0.102123 0.93629 0.102232 0.934066 0.167684 0.665946 0.167468 0.668746 0.165075 0.669267 0.165899 0.66618 0.09371298 0.941748 0.09261298 0.942524 0.09128898 0.939013 0.092817 0.938454 0.102232 0.934066 0.102123 0.93629 0.09907698 0.934722 0.09947299 0.933103 0.09261298 0.942524 0.09100997 0.943353 0.089298 0.940427 0.09128898 0.939013 0.102123 0.93629 0.101597 0.937874 0.09870696 0.935936 0.09907698 0.934722 0.09431499 0.944914 0.091946 0.946351 0.09100997 0.943353 0.09261298 0.942524 0.09611296 0.942198 0.09599 0.942362 0.09512799 0.941521 0.09540295 0.941668 0.09611296 0.942198 0.09610795 0.942073 0.09678596 0.942305 0.09691995 0.942454 0.16703 0.663433 0.16832 0.664093 0.167684 0.665946 0.165899 0.66618 0.167276 0.673081 0.164991 0.674612 0.164308 0.673124 0.16511 0.671594 0.1733469 0.672775 0.175019 0.671276 0.1760039 0.672372 0.17539 0.67386 0.09384596 0.93208 0.09441995 0.929486 0.09693497 0.92989 0.09625196 0.932427 0.16832 0.664093 0.16703 0.663433 0.169905 0.662463 0.169921 0.663503 0.172552 0.668684 0.174466 0.668521 0.175019 0.671276 0.1733469 0.672775 0.169921 0.663503 0.170016 0.665991 0.167684 0.665946 0.16832 0.664093 0.167276 0.673081 0.16511 0.671594 0.165075 0.669267 0.167468 0.668746 0.170016 0.665991 0.170072 0.669067 0.167468 0.668746 0.167684 0.665946 0.172435 0.665927 0.172552 0.668684 0.170072 0.669067 0.170016 0.665991 0.170072 0.669067 0.17056 0.672832 0.167276 0.673081 0.167468 0.668746 0.09331697 0.935736 0.092817 0.938454 0.09128898 0.939013 0.090985 0.936141 0.09907698 0.934722 0.09870696 0.935936 0.09564596 0.935638 0.09563398 0.934406 0.172552 0.668684 0.1733469 0.672775 0.17056 0.672832 0.170072 0.669067 0.102316 0.938999 0.1032029 0.940187 0.100914 0.942748 0.100448 0.941831 0.07686096 0.767626 0.07924199 0.765539 0.07892799 0.766161 0.07735997 0.767849 0.07924199 0.765539 0.07980298 0.76616 0.07908797 0.766323 0.07892799 0.766161 0.07980298 0.76616 0.07867699 0.768538 0.07830995 0.76835 0.07908797 0.766323 0.07735997 0.767849 0.07758897 0.767949 0.07717299 0.769147 0.07671296 0.769906 0.07671296 0.769906 0.07717299 0.769147 0.077335 0.769081 0.07729095 0.769744 0.07717299 0.769147 0.07758897 0.767949 0.07775795 0.767989 0.077335 0.769081 0.07824897 0.767111 0.078489 0.766958 0.07775795 0.767989 0.07758897 0.767949 0.07908797 0.766323 0.07830995 0.76835 0.07775795 0.767989 0.078489 0.766958 0.07927 0.768832 0.08028399 0.766615 0.08237695 0.766883 0.081155 0.769993 0.08460199 0.767647 0.08336699 0.771244 0.081155 0.769993 0.08237695 0.766883 0.07980298 0.76616 0.08271896 0.766257 0.08237695 0.766883 0.08028399 0.766615 0.07980298 0.76616 0.08028399 0.766615 0.07927 0.768832 0.07867699 0.768538 0.08194899 0.775489 0.081523 0.774871 0.08336699 0.771244 0.08414095 0.771533 0.08543795 0.76734 0.08414095 0.771533 0.08336699 0.771244 0.08460199 0.767647 0.07630395 0.770742 0.07688099 0.770756 0.07848095 0.773946 0.078112 0.774435 0.07630395 0.770742 0.07671296 0.769906 0.07729095 0.769744 0.07688099 0.770756 0.07686096 0.767626 0.07735997 0.767849 0.07671296 0.769906 0.07630395 0.770742 0.07729095 0.769744 0.077335 0.769081 0.07775795 0.767989 0.07830995 0.76835 0.07892799 0.766161 0.07908797 0.766323 0.078489 0.766958 0.07824897 0.767111 0.07735997 0.767849 0.07892799 0.766161 0.07824897 0.767111 0.07758897 0.767949 0.08543795 0.76734 0.08460199 0.767647 0.08237695 0.766883 0.08271896 0.766257 0.08624899 0.767171 0.08543795 0.76734 0.08271896 0.766257 0.08295196 0.765733 0.07924199 0.765539 0.08295196 0.765733 0.08271896 0.766257 0.07980298 0.76616 0.07688099 0.770756 0.07867699 0.768538 0.07927 0.768832 0.07771199 0.771008 0.07688099 0.770756 0.07771199 0.771008 0.07901096 0.773448 0.07848095 0.773946 0.08207798 0.776291 0.078112 0.774435 0.07848095 0.773946 0.08194899 0.775489 0.08194899 0.775489 0.07848095 0.773946 0.07901096 0.773448 0.081523 0.774871 0.081523 0.774871 0.07901096 0.773448 0.081155 0.769993 0.08336699 0.771244 0.07927 0.768832 0.081155 0.769993 0.07901096 0.773448 0.07771199 0.771008 0.07688099 0.770756 0.07729095 0.769744 0.07830995 0.76835 0.07867699 0.768538 0.03210794 0.796832 0.03259396 0.796989 0.03126394 0.799106 0.03107398 0.79864 0.03126394 0.799106 0.03031897 0.798251 0.03060096 0.798067 0.03107398 0.79864 0.03210699 0.79365 0.03420799 0.794595 0.03326195 0.794651 0.03228896 0.794401 0.03221398 0.7949 0.03275698 0.794944 0.03237295 0.795232 0.03217697 0.795245 0.03221398 0.7949 0.03217697 0.795245 0.03153896 0.796609 0.03142994 0.796334 0.03060096 0.798067 0.03083497 0.797969 0.03098398 0.798123 0.03107398 0.79864 0.03663295 0.803662 0.03626197 0.802389 0.03835594 0.800309 0.03934395 0.801041 0.03934395 0.801041 0.03835594 0.800309 0.03887397 0.797243 0.040555 0.796278 0.03142994 0.796334 0.03153896 0.796609 0.03083497 0.797969 0.03060096 0.798067 0.03107398 0.79864 0.03098398 0.798123 0.03173297 0.796714 0.03210794 0.796832 0.03210794 0.796832 0.03173297 0.796714 0.03237295 0.795232 0.03275698 0.794944 0.03142994 0.796334 0.03114598 0.796351 0.03228896 0.794401 0.03221398 0.7949 0.03338396 0.797342 0.03464996 0.797913 0.03293097 0.800678 0.03171098 0.799806 0.03098398 0.798123 0.03083497 0.797969 0.03153896 0.796609 0.03173297 0.796714 0.03237295 0.795232 0.03173297 0.796714 0.03153896 0.796609 0.03217697 0.795245 0.036071 0.795024 0.03887397 0.797243 0.03835594 0.800309 0.03464996 0.797913 0.03228896 0.794401 0.03326195 0.794651 0.03275698 0.794944 0.03221398 0.7949 0.032269 0.801105 0.029841 0.798873 0.03171098 0.799806 0.03293097 0.800678 0.03275698 0.794944 0.03326195 0.794651 0.03259396 0.796989 0.03210794 0.796832 0.03171098 0.799806 0.029841 0.798873 0.03031897 0.798251 0.03126394 0.799106 0.03060096 0.798067 0.03031897 0.798251 0.03114598 0.796351 0.03142994 0.796334 0.03464996 0.797913 0.03835594 0.800309 0.03626197 0.802389 0.03293097 0.800678 0.03420799 0.794595 0.036071 0.795024 0.03464996 0.797913 0.03338396 0.797342 0.03663295 0.803662 0.032269 0.801105 0.03293097 0.800678 0.03626197 0.802389 0.03660798 0.793992 0.040555 0.796278 0.03887397 0.797243 0.036071 0.795024 0.03210699 0.79365 0.03660798 0.793992 0.036071 0.795024 0.03420799 0.794595 0.03326195 0.794651 0.03420799 0.794595 0.03338396 0.797342 0.03259396 0.796989 0.03259396 0.796989 0.03338396 0.797342 0.03171098 0.799806 0.03126394 0.799106 0.01344096 0.868515 0.01179599 0.86877 0.01174598 0.86828 0.01247894 0.867857 0.01136696 0.864191 0.01288795 0.864347 0.01220595 0.864856 0.011388 0.864775 0.011388 0.864775 0.01220595 0.864856 0.01185595 0.865276 0.011473 0.865177 0.01174598 0.86828 0.01179599 0.86877 0.01028096 0.866759 0.01103198 0.866571 0.01288795 0.864347 0.01494795 0.86333 0.01559495 0.866135 0.01387196 0.86632 0.01559495 0.866135 0.01881796 0.865709 0.01851898 0.86849 0.01556998 0.868994 0.01123499 0.866453 0.01103198 0.866571 0.011388 0.864775 0.011473 0.865177 0.01172298 0.867836 0.01174598 0.86828 0.01103198 0.866571 0.01123499 0.866453 0.01494795 0.86333 0.01777797 0.862984 0.01881796 0.865709 0.01559495 0.866135 0.01468294 0.862559 0.01871198 0.862314 0.01777797 0.862984 0.01494795 0.86333 0.01169097 0.865665 0.01156997 0.866387 0.01137995 0.866409 0.01153194 0.865589 0.011792 0.867179 0.01167196 0.867337 0.01137995 0.866409 0.01156997 0.866387 0.01387196 0.86632 0.01559495 0.866135 0.01556998 0.868994 0.01344096 0.868515 0.01123499 0.866453 0.01137995 0.866409 0.01167196 0.867337 0.01172298 0.867836 0.01205098 0.866346 0.01156997 0.866387 0.01169097 0.865665 0.01185595 0.865276 0.01205098 0.866346 0.01270699 0.866337 0.01247894 0.867857 0.01208996 0.867507 0.011473 0.865177 0.01153194 0.865589 0.01137995 0.866409 0.01123499 0.866453 0.011473 0.865177 0.01185595 0.865276 0.01169097 0.865665 0.01153194 0.865589 0.01136696 0.864191 0.01468294 0.862559 0.01494795 0.86333 0.01288795 0.864347 0.01563298 0.869667 0.01179599 0.86877 0.01344096 0.868515 0.01556998 0.868994 0.01954299 0.869291 0.01563298 0.869667 0.01556998 0.868994 0.01851898 0.86849 0.01247894 0.867857 0.01174598 0.86828 0.01172298 0.867836 0.01208996 0.867507 0.01208996 0.867507 0.011792 0.867179 0.01156997 0.866387 0.01205098 0.866346 0.01185595 0.865276 0.01220595 0.864856 0.01270699 0.866337 0.01205098 0.866346 0.01270699 0.866337 0.01387196 0.86632 0.01344096 0.868515 0.01247894 0.867857 0.01220595 0.864856 0.01288795 0.864347 0.01387196 0.86632 0.01270699 0.866337 0.02032095 0.865521 0.01881796 0.865709 0.01777797 0.862984 0.01871198 0.862314 0.01954299 0.869291 0.01851898 0.86849 0.01881796 0.865709 0.02032095 0.865521 0.01172298 0.867836 0.01167196 0.867337 0.011792 0.867179 0.01208996 0.867507 0.04858398 0.924089 0.04932695 0.922357 0.05154097 0.923917 0.05055195 0.925003 0.05055195 0.925003 0.05154097 0.923917 0.05329495 0.926286 0.05132198 0.927073 0.04999697 0.926706 0.049905 0.926794 0.04920297 0.926152 0.04930698 0.926082 0.04869598 0.925394 0.04930698 0.926082 0.04920297 0.926152 0.04859697 0.925505 0.04932695 0.922357 0.05132997 0.920113 0.05408996 0.921659 0.05154097 0.923917 0.05077797 0.927032 0.05044096 0.927522 0.05006098 0.927065 0.05036896 0.926899 0.05132198 0.927073 0.05101394 0.927899 0.05044096 0.927522 0.05077797 0.927032 0.05607295 0.924603 0.05365496 0.927073 0.05329495 0.926286 0.05535399 0.924315 0.04759097 0.924591 0.04858398 0.924089 0.04859697 0.924557 0.04803895 0.925113 0.04864394 0.921958 0.05118 0.919585 0.05132997 0.920113 0.04932695 0.922357 0.05365496 0.927073 0.05101394 0.927899 0.05132198 0.927073 0.05329495 0.926286 0.05439394 0.921217 0.05408996 0.921659 0.05132997 0.920113 0.05118 0.919585 0.04759097 0.924591 0.04864394 0.921958 0.04932695 0.922357 0.04858398 0.924089 0.048608 0.924951 0.04859697 0.924557 0.05001097 0.925552 0.04964697 0.925831 0.04840099 0.925437 0.048608 0.924951 0.04869598 0.925394 0.04859697 0.925505 0.05154097 0.923917 0.05408996 0.921659 0.05535399 0.924315 0.05329495 0.926286 0.05607295 0.924603 0.05535399 0.924315 0.05408996 0.921659 0.05439394 0.921217 0.05001097 0.925552 0.05055195 0.925003 0.05132198 0.927073 0.05077797 0.927032 0.04803895 0.925113 0.04859697 0.924557 0.048608 0.924951 0.04840099 0.925437 0.05006098 0.927065 0.049905 0.926794 0.04999697 0.926706 0.05036896 0.926899 0.04859697 0.924557 0.04858398 0.924089 0.05055195 0.925003 0.05001097 0.925552 0.04964697 0.925831 0.05001097 0.925552 0.05077797 0.927032 0.05036896 0.926899 0.05036896 0.926899 0.04999697 0.926706 0.04930698 0.926082 0.04964697 0.925831 0.04964697 0.925831 0.04930698 0.926082 0.04869598 0.925394 0.048608 0.924951 0.04840099 0.925437 0.04859697 0.925505 0.04920297 0.926152 0.04906898 0.926337 0.04906898 0.926337 0.04920297 0.926152 0.049905 0.926794 0.05006098 0.927065 0.05006098 0.927065 0.05044096 0.927522 0.04846096 0.926927 0.04906898 0.926337 0.04906898 0.926337 0.04846096 0.926927 0.04803895 0.925113 0.04840099 0.925437 0.09550899 0.941496 0.09621196 0.941894 0.09610795 0.942073 0.095582 0.941685 0.09695595 0.942265 0.09678596 0.942305 0.09610795 0.942073 0.09621196 0.941894 0.09687995 0.940571 0.09729295 0.939364 0.09941697 0.940655 0.09852695 0.941739 0.09494996 0.940114 0.09493899 0.938748 0.09729295 0.939364 0.09687995 0.940571 0.09512799 0.941521 0.09498697 0.940661 0.09529399 0.941099 0.09540295 0.941668 0.09493899 0.938748 0.09584897 0.936318 0.09839999 0.936559 0.09729295 0.939364 0.09638899 0.941558 0.09621196 0.941894 0.09550899 0.941496 0.09529399 0.941099 0.09739595 0.942202 0.09695595 0.942265 0.09621196 0.941894 0.09638899 0.941558 0.09426999 0.940772 0.09411895 0.93868 0.09493899 0.938748 0.09494996 0.940114 0.09529399 0.941099 0.09498697 0.940661 0.09659397 0.94115 0.09638899 0.941558 0.09659397 0.94115 0.09687995 0.940571 0.09852695 0.941739 0.097925 0.942069 0.09498697 0.940661 0.09494996 0.940114 0.09687995 0.940571 0.09659397 0.94115 0.101597 0.937874 0.100789 0.937991 0.09839999 0.936559 0.09870696 0.935936 0.09540295 0.941668 0.09529399 0.941099 0.09550899 0.941496 0.095582 0.941685 0.09729295 0.939364 0.09839999 0.936559 0.100789 0.937991 0.09941697 0.940655 0.09638899 0.941558 0.09659397 0.94115 0.097925 0.942069 0.09739595 0.942202 0.100248 0.941385 0.09832298 0.942852 0.09852695 0.941739 0.09941697 0.940655 0.09411895 0.93868 0.09564596 0.935638 0.09584897 0.936318 0.09493899 0.938748 0.101597 0.937874 0.100248 0.941385 0.09941697 0.940655 0.100789 0.937991 0.09426999 0.940772 0.09494996 0.940114 0.09498697 0.940661 0.09512799 0.941521 0.09870696 0.935936 0.09839999 0.936559 0.09584897 0.936318 0.09564596 0.935638 0.1392199 0.888815 0.139215 0.895483 0.130986 0.899405 0.129244 0.893992 0.1769019 0.833775 0.177218 0.844652 0.169393 0.845516 0.168059 0.833574 0.11532 0.889014 0.112289 0.89555 0.10984 0.895441 0.109409 0.891911 0.107072 0.898416 0.103306 0.902654 0.101085 0.899155 0.105283 0.895018 0.112767 0.713985 0.115184 0.717336 0.110769 0.719083 0.108482 0.716282 0.111283 0.882176 0.10689 0.887977 0.103752 0.88601 0.103908 0.882333 0.1562229 0.739951 0.160856 0.738323 0.162786 0.7412 0.15903 0.743974 0.15005 0.783861 0.150441 0.77811 0.163987 0.784002 0.1625919 0.788191 0.126457 0.907649 0.12448 0.903726 0.130986 0.899405 0.1326439 0.903638 0.1594009 0.832977 0.168059 0.833574 0.169393 0.845516 0.162563 0.845372 0.112289 0.89555 0.109359 0.900132 0.107072 0.898416 0.10984 0.895441 0.09154999 0.847916 0.08962297 0.845737 0.09253597 0.842791 0.100583 0.843737 0.1004 0.873141 0.102805 0.87705 0.09669697 0.880123 0.09463298 0.876521 0.177432 0.884058 0.175072 0.876778 0.183271 0.874532 0.183791 0.881346 0.191853 0.773284 0.201984 0.780425 0.198513 0.78761 0.188642 0.780878 0.1594009 0.832977 0.156884 0.823481 0.165814 0.825613 0.168059 0.833574 0.129113 0.720156 0.134782 0.718395 0.137911 0.726546 0.1332589 0.728038 0.146043 0.866258 0.1593379 0.861817 0.163455 0.866048 0.147401 0.871008 0.1012639 0.836743 0.09490799 0.834125 0.09473997 0.831059 0.101214 0.83177 0.08191996 0.816463 0.08105498 0.811835 0.08432596 0.811112 0.08607995 0.81586 0.1108649 0.908202 0.113728 0.904022 0.115708 0.907375 0.113182 0.910844 0.1594009 0.832977 0.156198 0.837494 0.140682 0.834657 0.141206 0.828363 0.100196 0.888123 0.103752 0.88601 0.10689 0.887977 0.102795 0.89143 0.095999 0.863365 0.097687 0.868021 0.09149497 0.869602 0.090056 0.865553 0.103908 0.882333 0.098333 0.884625 0.09669697 0.880123 0.102805 0.87705 0.165859 0.887206 0.1644819 0.87907 0.175072 0.876778 0.177432 0.884058 0.1794379 0.784191 0.1831769 0.77737 0.188642 0.780878 0.185738 0.787393 0.113264 0.723209 0.115303 0.729129 0.1097519 0.728783 0.109066 0.724215 0.1824679 0.74074 0.183125 0.755795 0.177302 0.752041 0.177742 0.740173 0.15557 0.696197 0.161738 0.696863 0.1632 0.700653 0.157469 0.701706 0.148195 0.748847 0.152694 0.741945 0.160215 0.747658 0.156816 0.756946 0.1012639 0.836743 0.100583 0.843737 0.09253597 0.842791 0.09364897 0.838898 0.122472 0.899672 0.12448 0.903726 0.1205 0.907257 0.118505 0.903945 0.09473997 0.831059 0.08887296 0.830018 0.08843696 0.826747 0.09447395 0.827865 0.101214 0.83177 0.09473997 0.831059 0.09447395 0.827865 0.100361 0.826562 0.09089398 0.815443 0.08823096 0.809353 0.09295696 0.807911 0.09662395 0.814628 0.1405619 0.838613 0.156906 0.84086 0.162563 0.845372 0.141605 0.842909 0.09490799 0.834125 0.08945399 0.833007 0.08887296 0.830018 0.09473997 0.831059 0.08206999 0.82426 0.08843696 0.826747 0.08887296 0.830018 0.08200895 0.827705 0.1625919 0.788191 0.161639 0.793313 0.150022 0.789632 0.15005 0.783861 0.18573 0.887289 0.189872 0.892663 0.1843529 0.893343 0.181179 0.888204 0.126709 0.886344 0.136861 0.880813 0.138095 0.884499 0.128268 0.889945 0.176028 0.729534 0.177742 0.740173 0.174495 0.740126 0.173138 0.731563 0.132507 0.867232 0.145186 0.861805 0.146043 0.866258 0.134172 0.872114 0.119497 0.871018 0.132507 0.867232 0.134172 0.872114 0.121576 0.877409 0.12964 0.848393 0.141894 0.848205 0.143406 0.853292 0.130497 0.8547 0.128341 0.842063 0.141605 0.842909 0.141894 0.848205 0.12964 0.848393 0.102852 0.850694 0.09301096 0.852476 0.09154999 0.847916 0.100583 0.843737 0.115083 0.848675 0.12964 0.848393 0.130497 0.8547 0.116453 0.856289 0.1405619 0.838613 0.140682 0.834657 0.156198 0.837494 0.156906 0.84086 0.150441 0.77811 0.141147 0.774737 0.141915 0.768794 0.1520079 0.77145 0.126694 0.714001 0.124416 0.707603 0.130396 0.706459 0.132544 0.712147 0.08217996 0.831383 0.08200895 0.827705 0.08887296 0.830018 0.08945399 0.833007 0.1780019 0.791816 0.1766639 0.79645 0.161639 0.793313 0.1625919 0.788191 0.159894 0.708095 0.162043 0.717209 0.15535 0.719146 0.153847 0.710397 0.132094 0.698772 0.136021 0.702822 0.130396 0.706459 0.128014 0.701369 0.190468 0.751493 0.192937 0.764768 0.1886579 0.768914 0.183125 0.755795 0.180196 0.726571 0.1824679 0.74074 0.177742 0.740173 0.176028 0.729534 0.138095 0.884499 0.148427 0.879462 0.150434 0.884537 0.1392199 0.888815 0.1794379 0.784191 0.185738 0.787393 0.184974 0.791539 0.178296 0.78886 0.16925 0.701123 0.169516 0.698664 0.173995 0.698457 0.173873 0.701458 0.103592 0.858921 0.09403198 0.85759 0.09301096 0.852476 0.102852 0.850694 0.137911 0.726546 0.143938 0.735042 0.141206 0.738285 0.1332589 0.728038 0.14726 0.87547 0.157874 0.871288 0.158483 0.876212 0.148427 0.879462 0.143406 0.853292 0.159424 0.85188 0.163255 0.854913 0.144901 0.858131 0.09149497 0.869602 0.097687 0.868021 0.09722995 0.871592 0.09257596 0.873574 0.177334 0.825864 0.165814 0.825613 0.164656 0.816633 0.1762599 0.818778 0.1625919 0.788191 0.163987 0.784002 0.178296 0.78886 0.1780019 0.791816 0.1794379 0.784191 0.1662819 0.778068 0.17267 0.769462 0.1831769 0.77737 0.155023 0.764092 0.1679649 0.764556 0.17267 0.769462 0.153954 0.767154 0.08830398 0.824232 0.08884 0.822233 0.09412896 0.823654 0.09304195 0.825927 0.09189295 0.888631 0.08920395 0.884714 0.09669697 0.880123 0.098333 0.884625 0.08534997 0.853682 0.07558196 0.85565 0.07506597 0.849733 0.08415597 0.849051 0.120168 0.895934 0.128268 0.889945 0.129244 0.893992 0.122472 0.899672 0.147401 0.871008 0.163455 0.866048 0.157874 0.871288 0.14726 0.87547 0.130497 0.8547 0.143406 0.853292 0.144901 0.858131 0.131637 0.860947 0.175283 0.809979 0.1762599 0.818778 0.164656 0.816633 0.163505 0.807178 0.155582 0.761339 0.166563 0.760279 0.1679649 0.764556 0.155023 0.764092 0.135667 0.742945 0.125742 0.730735 0.1332589 0.728038 0.141206 0.738285 0.08502596 0.820899 0.08483898 0.818416 0.087659 0.818597 0.08884 0.822233 0.08689296 0.85829 0.07817 0.859587 0.07558196 0.85565 0.08534997 0.853682 0.136861 0.880813 0.14726 0.87547 0.148427 0.879462 0.138095 0.884499 0.116453 0.856289 0.130497 0.8547 0.131637 0.860947 0.117658 0.864076 0.09291297 0.860931 0.09403198 0.85759 0.103592 0.858921 0.095999 0.863365 0.151267 0.804861 0.163505 0.807178 0.164656 0.816633 0.1538659 0.813906 0.163987 0.784002 0.1662819 0.778068 0.1794379 0.784191 0.178296 0.78886 0.170707 0.74066 0.170906 0.748142 0.166452 0.747405 0.166048 0.743582 0.141187 0.78109 0.135316 0.779627 0.135013 0.773387 0.141147 0.774737 0.173763 0.720356 0.1715469 0.713156 0.175454 0.711237 0.177478 0.718149 0.14226 0.793924 0.141616 0.787447 0.150022 0.789632 0.1507149 0.795896 0.1507149 0.795896 0.150022 0.789632 0.161639 0.793313 0.162465 0.799872 0.08607995 0.81586 0.08432596 0.811112 0.08823096 0.809353 0.09089398 0.815443 0.09301096 0.852476 0.08534997 0.853682 0.08415597 0.849051 0.09154999 0.847916 0.136066 0.876446 0.147401 0.871008 0.14726 0.87547 0.136861 0.880813 0.08817297 0.862084 0.09291297 0.860931 0.095999 0.863365 0.090056 0.865553 0.156884 0.823481 0.1538659 0.813906 0.164656 0.816633 0.165814 0.825613 0.150441 0.77811 0.1520079 0.77145 0.1662819 0.778068 0.163987 0.784002 0.174495 0.740126 0.173861 0.750103 0.170906 0.748142 0.170707 0.74066 0.08830398 0.824232 0.09304195 0.825927 0.09447395 0.827865 0.08843696 0.826747 0.09403198 0.85759 0.08689296 0.85829 0.08534997 0.853682 0.09301096 0.852476 0.190468 0.751493 0.183125 0.755795 0.1824679 0.74074 0.188203 0.738624 0.141187 0.78109 0.141147 0.774737 0.150441 0.77811 0.15005 0.783861 0.115303 0.729129 0.117562 0.736334 0.109739 0.733634 0.1097519 0.728783 0.08057796 0.863756 0.08817297 0.862084 0.090056 0.865553 0.08365797 0.867343 0.098333 0.884625 0.103908 0.882333 0.103752 0.88601 0.100196 0.888123 0.1644819 0.87907 0.165859 0.887206 0.151573 0.890495 0.150434 0.884537 0.1507149 0.795896 0.162465 0.799872 0.163505 0.807178 0.151267 0.804861 0.162563 0.845372 0.169393 0.845516 0.172051 0.855606 0.163255 0.854913 0.177478 0.718149 0.180196 0.726571 0.176028 0.729534 0.173763 0.720356 0.103592 0.858921 0.106194 0.867728 0.097687 0.868021 0.095999 0.863365 0.173763 0.720356 0.176028 0.729534 0.173138 0.731563 0.1705639 0.722734 0.155023 0.764092 0.145373 0.757173 0.145802 0.753217 0.155582 0.761339 0.148427 0.879462 0.158483 0.876212 0.1644819 0.87907 0.150434 0.884537 0.119077 0.892198 0.126709 0.886344 0.128268 0.889945 0.120168 0.895934 0.167657 0.892884 0.154716 0.89669 0.151573 0.890495 0.165859 0.887206 0.08365797 0.867343 0.090056 0.865553 0.09149497 0.869602 0.08524596 0.871746 0.141915 0.768794 0.143504 0.763734 0.153954 0.767154 0.1520079 0.77145 0.08603495 0.842568 0.09253597 0.842791 0.08962297 0.845737 0.08443796 0.845666 0.124953 0.741713 0.119708 0.730072 0.125742 0.730735 0.135667 0.742945 0.178358 0.705462 0.180206 0.710014 0.175454 0.711237 0.174139 0.705851 0.163255 0.854913 0.172051 0.855606 0.173476 0.866059 0.163455 0.866048 0.11819 0.710071 0.120717 0.715526 0.115184 0.717336 0.112767 0.713985 0.160856 0.738323 0.164134 0.736909 0.166048 0.743582 0.162786 0.7412 0.169629 0.706392 0.1715469 0.713156 0.167726 0.71511 0.164484 0.706961 0.152694 0.741945 0.1562229 0.739951 0.15903 0.743974 0.160215 0.747658 0.122472 0.899672 0.129244 0.893992 0.130986 0.899405 0.12448 0.903726 0.11532 0.889014 0.124904 0.882555 0.126709 0.886344 0.119077 0.892198 0.140749 0.900723 0.139215 0.895483 0.151573 0.890495 0.154716 0.89669 0.135039 0.766921 0.136005 0.760151 0.143504 0.763734 0.141915 0.768794 0.165057 0.755853 0.156816 0.756946 0.160215 0.747658 0.1629689 0.750422 0.08443796 0.845666 0.07608497 0.84529 0.07829695 0.841859 0.08603495 0.842568 0.1766639 0.79645 0.175525 0.802998 0.162465 0.799872 0.161639 0.793313 0.1594009 0.832977 0.162563 0.845372 0.156906 0.84086 0.156198 0.837494 0.169226 0.734905 0.170707 0.74066 0.166048 0.743582 0.164134 0.736909 0.174139 0.705851 0.175454 0.711237 0.1715469 0.713156 0.169629 0.706392 0.128268 0.889945 0.138095 0.884499 0.1392199 0.888815 0.129244 0.893992 0.175283 0.809979 0.163505 0.807178 0.162465 0.799872 0.175525 0.802998 0.112289 0.89555 0.11532 0.889014 0.119077 0.892198 0.114682 0.897393 0.1392199 0.888815 0.150434 0.884537 0.151573 0.890495 0.139215 0.895483 0.103592 0.858921 0.116453 0.856289 0.117658 0.864076 0.106194 0.867728 0.09490799 0.834125 0.1012639 0.836743 0.09364897 0.838898 0.09285098 0.836212 0.177334 0.825864 0.1769019 0.833775 0.168059 0.833574 0.165814 0.825613 0.141745 0.801606 0.151267 0.804861 0.1538659 0.813906 0.142065 0.809687 0.162563 0.845372 0.163255 0.854913 0.159424 0.85188 0.1586149 0.848604 0.173138 0.731563 0.174495 0.740126 0.170707 0.74066 0.169226 0.734905 0.185346 0.724949 0.188203 0.738624 0.1824679 0.74074 0.180196 0.726571 0.12796 0.817441 0.126321 0.825763 0.114238 0.826092 0.11345 0.818196 0.128012 0.836791 0.1405619 0.838613 0.141605 0.842909 0.128341 0.842063 0.07608497 0.84529 0.08443796 0.845666 0.08415597 0.849051 0.07506597 0.849733 0.08900797 0.836508 0.09285098 0.836212 0.09364897 0.838898 0.08789896 0.839236 0.141451 0.818702 0.142065 0.809687 0.1538659 0.813906 0.156884 0.823481 0.163255 0.854913 0.163455 0.866048 0.1593379 0.861817 0.159137 0.85837 0.153954 0.767154 0.143504 0.763734 0.145373 0.757173 0.155023 0.764092 0.08789896 0.839236 0.09364897 0.838898 0.09253597 0.842791 0.08603495 0.842568 0.08040797 0.838582 0.08789896 0.839236 0.08603495 0.842568 0.07829695 0.841859 0.144901 0.858131 0.163255 0.854913 0.159137 0.85837 0.145186 0.861805 0.118505 0.903945 0.116736 0.900206 0.120168 0.895934 0.122472 0.899672 0.114138 0.836368 0.128012 0.836791 0.128341 0.842063 0.113982 0.842639 0.08178198 0.83528 0.08900797 0.836508 0.08789896 0.839236 0.08040797 0.838582 0.1644819 0.87907 0.158483 0.876212 0.157874 0.871288 0.163455 0.866048 0.183163 0.716766 0.185346 0.724949 0.180196 0.726571 0.177478 0.718149 0.145373 0.757173 0.13503 0.751188 0.135667 0.742945 0.145802 0.753217 0.192516 0.799003 0.191662 0.804134 0.1766639 0.79645 0.1780019 0.791816 0.100361 0.826562 0.09412896 0.823654 0.09305095 0.819151 0.09961497 0.819712 0.1012639 0.836743 0.114138 0.836368 0.113982 0.842639 0.100583 0.843737 0.11345 0.818196 0.09961497 0.819712 0.09662395 0.814628 0.102335 0.81201 0.14226 0.793924 0.1507149 0.795896 0.151267 0.804861 0.141745 0.801606 0.162043 0.717209 0.167726 0.71511 0.1705639 0.722734 0.165035 0.726241 0.143504 0.763734 0.136005 0.760151 0.13503 0.751188 0.145373 0.757173 0.09479898 0.892394 0.100196 0.888123 0.102795 0.89143 0.09838396 0.895569 0.09838396 0.895569 0.102795 0.89143 0.105283 0.895018 0.101085 0.899155 0.09961497 0.819712 0.09305095 0.819151 0.09089398 0.815443 0.09662395 0.814628 0.173138 0.731563 0.169226 0.734905 0.165035 0.726241 0.1705639 0.722734 0.169629 0.706392 0.16925 0.701123 0.173873 0.701458 0.174139 0.705851 0.124904 0.882555 0.136066 0.876446 0.136861 0.880813 0.126709 0.886344 0.131637 0.860947 0.144901 0.858131 0.145186 0.861805 0.132507 0.867232 0.09305095 0.819151 0.087659 0.818597 0.08607995 0.81586 0.09089398 0.815443 0.164484 0.706961 0.1632 0.700653 0.16925 0.701123 0.169629 0.706392 0.08236199 0.821006 0.08502596 0.820899 0.08884 0.822233 0.08830398 0.824232 0.145186 0.861805 0.159137 0.85837 0.1593379 0.861817 0.146043 0.866258 0.117658 0.864076 0.131637 0.860947 0.132507 0.867232 0.119497 0.871018 0.156884 0.823481 0.1594009 0.832977 0.141206 0.828363 0.141451 0.818702 0.141616 0.787447 0.1353549 0.785445 0.135316 0.779627 0.141187 0.78109 0.08191996 0.816463 0.08607995 0.81586 0.087659 0.818597 0.08483898 0.818416 0.1562229 0.739951 0.149444 0.732275 0.154502 0.731118 0.160856 0.738323 0.119497 0.871018 0.109898 0.874226 0.106194 0.867728 0.117658 0.864076 0.109359 0.900132 0.105801 0.904424 0.103306 0.902654 0.107072 0.898416 0.140618 0.716002 0.1383309 0.709569 0.144271 0.707153 0.145557 0.713267 0.144098 0.723654 0.149444 0.732275 0.143938 0.735042 0.137911 0.726546 0.155582 0.761339 0.156816 0.756946 0.165057 0.755853 0.166563 0.760279 0.180206 0.710014 0.183163 0.716766 0.177478 0.718149 0.175454 0.711237 0.1632 0.700653 0.161738 0.696863 0.169516 0.698664 0.16925 0.701123 0.121576 0.877409 0.111283 0.882176 0.109898 0.874226 0.119497 0.871018 0.136021 0.702822 0.142048 0.701058 0.144271 0.707153 0.1383309 0.709569 0.145802 0.753217 0.148195 0.748847 0.156816 0.756946 0.155582 0.761339 0.119708 0.730072 0.117509 0.721884 0.122717 0.720975 0.125742 0.730735 0.09722995 0.871592 0.097687 0.868021 0.106194 0.867728 0.1004 0.873141 0.109898 0.874226 0.102805 0.87705 0.1004 0.873141 0.106194 0.867728 0.138611 0.697674 0.142048 0.701058 0.136021 0.702822 0.137063 0.697985 0.164134 0.736909 0.159806 0.72964 0.165035 0.726241 0.169226 0.734905 0.115303 0.729129 0.113264 0.723209 0.117509 0.721884 0.119708 0.730072 0.111283 0.882176 0.103908 0.882333 0.102805 0.87705 0.109898 0.874226 0.128014 0.701369 0.130396 0.706459 0.124416 0.707603 0.124178 0.702196 0.122717 0.720975 0.120717 0.715526 0.126694 0.714001 0.129113 0.720156 0.08884 0.822233 0.087659 0.818597 0.09305095 0.819151 0.09412896 0.823654 0.152694 0.741945 0.143938 0.735042 0.149444 0.732275 0.1562229 0.739951 0.160856 0.738323 0.154502 0.731118 0.159806 0.72964 0.164134 0.736909 0.141894 0.848205 0.1586149 0.848604 0.159424 0.85188 0.143406 0.853292 0.14974 0.721355 0.154502 0.731118 0.149444 0.732275 0.144098 0.723654 0.124416 0.707603 0.126694 0.714001 0.120717 0.715526 0.11819 0.710071 0.08945399 0.833007 0.08900797 0.836508 0.08178198 0.83528 0.08217996 0.831383 0.1205 0.907257 0.117796 0.910279 0.115708 0.907375 0.118505 0.903945 0.148195 0.748847 0.141206 0.738285 0.143938 0.735042 0.152694 0.741945 0.159806 0.72964 0.15535 0.719146 0.162043 0.717209 0.165035 0.726241 0.117562 0.736334 0.115303 0.729129 0.119708 0.730072 0.124953 0.741713 0.130986 0.899405 0.139215 0.895483 0.140749 0.900723 0.1326439 0.903638 0.141605 0.842909 0.162563 0.845372 0.1586149 0.848604 0.141894 0.848205 0.1211529 0.70505 0.12163 0.702128 0.124178 0.702196 0.124416 0.707603 0.1211529 0.70505 0.124416 0.707603 0.11819 0.710071 0.119141 0.705346 0.117796 0.910279 0.1205 0.907257 0.122704 0.910686 0.12005 0.913106 0.135667 0.742945 0.141206 0.738285 0.148195 0.748847 0.145802 0.753217 0.141616 0.787447 0.141187 0.78109 0.15005 0.783861 0.150022 0.789632 0.154502 0.731118 0.14974 0.721355 0.15535 0.719146 0.159806 0.72964 0.08236199 0.821006 0.08830398 0.824232 0.08843696 0.826747 0.08206999 0.82426 0.113264 0.723209 0.109066 0.724215 0.1071079 0.720719 0.110769 0.719083 0.153847 0.710397 0.15535 0.719146 0.14974 0.721355 0.145557 0.713267 0.177742 0.740173 0.177302 0.752041 0.173861 0.750103 0.174495 0.740126 0.09662395 0.814628 0.09295696 0.807911 0.09713399 0.804152 0.102335 0.81201 0.08057796 0.863756 0.07817 0.859587 0.08689296 0.85829 0.08817297 0.862084 0.122717 0.720975 0.129113 0.720156 0.1332589 0.728038 0.125742 0.730735 0.177218 0.844652 0.179785 0.855607 0.172051 0.855606 0.169393 0.845516 0.112289 0.89555 0.114682 0.897393 0.111497 0.901832 0.109359 0.900132 0.1705639 0.722734 0.167726 0.71511 0.1715469 0.713156 0.173763 0.720356 0.126457 0.907649 0.122704 0.910686 0.1205 0.907257 0.12448 0.903726 0.09479898 0.892394 0.09189295 0.888631 0.098333 0.884625 0.100196 0.888123 0.164484 0.706961 0.167726 0.71511 0.162043 0.717209 0.159894 0.708095 0.151537 0.703625 0.149154 0.699599 0.15557 0.696197 0.157469 0.701706 0.179785 0.855607 0.182125 0.865696 0.173476 0.866059 0.172051 0.855606 0.120717 0.715526 0.122717 0.720975 0.117509 0.721884 0.115184 0.717336 0.116736 0.900206 0.113728 0.904022 0.111497 0.901832 0.114682 0.897393 0.164484 0.706961 0.159894 0.708095 0.157469 0.701706 0.1632 0.700653 0.113982 0.842639 0.128341 0.842063 0.12964 0.848393 0.115083 0.848675 0.09463298 0.876521 0.087426 0.880172 0.08587098 0.876742 0.09257596 0.873574 0.127386 0.832619 0.140682 0.834657 0.1405619 0.838613 0.128012 0.836791 0.145557 0.713267 0.14974 0.721355 0.144098 0.723654 0.140618 0.716002 0.100361 0.826562 0.09961497 0.819712 0.11345 0.818196 0.114238 0.826092 0.144271 0.707153 0.142048 0.701058 0.149154 0.699599 0.151537 0.703625 0.183271 0.874532 0.175072 0.876778 0.173476 0.866059 0.182125 0.865696 0.1629689 0.750422 0.160215 0.747658 0.166048 0.743582 0.166452 0.747405 0.118505 0.903945 0.115708 0.907375 0.113728 0.904022 0.116736 0.900206 0.102852 0.850694 0.115083 0.848675 0.116453 0.856289 0.103592 0.858921 0.12796 0.817441 0.141451 0.818702 0.141206 0.828363 0.126321 0.825763 0.178358 0.705462 0.174139 0.705851 0.173873 0.701458 0.177534 0.701893 0.126321 0.825763 0.141206 0.828363 0.140682 0.834657 0.127386 0.832619 0.09490799 0.834125 0.09285098 0.836212 0.08900797 0.836508 0.08945399 0.833007 0.140618 0.716002 0.144098 0.723654 0.137911 0.726546 0.134782 0.718395 0.153847 0.710397 0.151537 0.703625 0.157469 0.701706 0.159894 0.708095 0.160215 0.747658 0.15903 0.743974 0.162786 0.7412 0.166048 0.743582 0.120168 0.895934 0.116736 0.900206 0.114682 0.897393 0.119077 0.892198 0.100583 0.843737 0.113982 0.842639 0.115083 0.848675 0.102852 0.850694 0.114639 0.83132 0.127386 0.832619 0.128012 0.836791 0.114138 0.836368 0.08443796 0.845666 0.08962297 0.845737 0.09154999 0.847916 0.08415597 0.849051 0.134172 0.872114 0.146043 0.866258 0.147401 0.871008 0.136066 0.876446 0.100361 0.826562 0.09447395 0.827865 0.09304195 0.825927 0.09412896 0.823654 0.145557 0.713267 0.144271 0.707153 0.151537 0.703625 0.153847 0.710397 0.1644819 0.87907 0.163455 0.866048 0.173476 0.866059 0.175072 0.876778 0.17267 0.769462 0.183125 0.755795 0.1886579 0.768914 0.1831769 0.77737 0.110769 0.719083 0.1071079 0.720719 0.105241 0.71818 0.108482 0.716282 0.1108649 0.908202 0.108355 0.906156 0.111497 0.901832 0.113728 0.904022 0.115184 0.717336 0.117509 0.721884 0.113264 0.723209 0.110769 0.719083 0.09257596 0.873574 0.08587098 0.876742 0.08524596 0.871746 0.09149497 0.869602 0.132544 0.712147 0.134782 0.718395 0.129113 0.720156 0.126694 0.714001 0.114238 0.826092 0.126321 0.825763 0.127386 0.832619 0.114639 0.83132 0.08689296 0.85829 0.09403198 0.85759 0.09291297 0.860931 0.08817297 0.862084 0.121576 0.877409 0.134172 0.872114 0.136066 0.876446 0.124904 0.882555 0.10689 0.887977 0.109409 0.891911 0.105283 0.895018 0.102795 0.89143 0.1520079 0.77145 0.153954 0.767154 0.17267 0.769462 0.1662819 0.778068 0.105801 0.904424 0.109359 0.900132 0.111497 0.901832 0.108355 0.906156 0.166563 0.760279 0.165057 0.755853 0.170906 0.748142 0.173861 0.750103 0.1383309 0.709569 0.140618 0.716002 0.134782 0.718395 0.132544 0.712147 0.114639 0.83132 0.101214 0.83177 0.100361 0.826562 0.114238 0.826092 0.1004 0.873141 0.09463298 0.876521 0.09257596 0.873574 0.09722995 0.871592 0.111283 0.882176 0.121576 0.877409 0.124904 0.882555 0.11532 0.889014 0.135013 0.773387 0.135039 0.766921 0.141915 0.768794 0.141147 0.774737 0.105283 0.895018 0.109409 0.891911 0.10984 0.895441 0.107072 0.898416 0.087426 0.880172 0.09463298 0.876521 0.09669697 0.880123 0.08920395 0.884714 0.181179 0.888204 0.177432 0.884058 0.183791 0.881346 0.18573 0.887289 0.165057 0.755853 0.1629689 0.750422 0.166452 0.747405 0.170906 0.748142 0.177302 0.752041 0.1679649 0.764556 0.166563 0.760279 0.173861 0.750103 0.192516 0.799003 0.1780019 0.791816 0.178296 0.78886 0.184974 0.791539 0.132544 0.712147 0.130396 0.706459 0.136021 0.702822 0.1383309 0.709569 0.114138 0.836368 0.1012639 0.836743 0.101214 0.83177 0.114639 0.83132 0.111283 0.882176 0.11532 0.889014 0.109409 0.891911 0.10689 0.887977 0.167657 0.892884 0.165859 0.887206 0.177432 0.884058 0.181179 0.888204 0.1831769 0.77737 0.1886579 0.768914 0.191853 0.773284 0.188642 0.780878 0.183125 0.755795 0.17267 0.769462 0.1679649 0.764556 0.177302 0.752041 0.259028 0.1995159 0.247591 0.185044 0.261714 0.178944 0.277363 0.191726 0.283731 0.21593 0.259028 0.1995159 0.277363 0.191726 0.296224 0.209801 0.290779 0.253643 0.28378 0.239397 0.29907 0.235083 0.305972 0.251324 0.259758 0.232914 0.245313 0.2254559 0.252479 0.213665 0.271463 0.224243 0.282293 0.268105 0.276299 0.258989 0.290779 0.253643 0.295598 0.262898 0.305972 0.251324 0.29907 0.235083 0.313656 0.231923 0.321218 0.250832 0.311479 0.27754 0.311173 0.269336 0.322325 0.271912 0.319831 0.280026 0.295598 0.262898 0.290779 0.253643 0.305972 0.251324 0.309409 0.260398 0.309409 0.260398 0.305972 0.251324 0.321218 0.250832 0.323205 0.262237 0.299362 0.270829 0.295598 0.262898 0.309409 0.260398 0.311173 0.269336 0.290812 0.280432 0.301597 0.277838 0.302222 0.284162 0.292992 0.286179 0.322325 0.271912 0.311173 0.269336 0.309409 0.260398 0.323205 0.262237 0.311479 0.27754 0.301597 0.277838 0.299362 0.270829 0.311173 0.269336 0.300169 0.295686 0.305217 0.295972 0.30363 0.301611 0.299824 0.300447 0.307176 0.291305 0.310026 0.284609 0.316908 0.28664 0.313461 0.29306 0.283731 0.21593 0.271463 0.224243 0.252479 0.213665 0.259028 0.1995159 0.295082 0.298087 0.293923 0.293197 0.300864 0.291277 0.300169 0.295686 0.300864 0.291277 0.307176 0.291305 0.305217 0.295972 0.300169 0.295686 0.305217 0.295972 0.307176 0.291305 0.313461 0.29306 0.310433 0.298215 0.301597 0.277838 0.311479 0.27754 0.310026 0.284609 0.302222 0.284162 0.28378 0.239397 0.270141 0.245495 0.259758 0.232914 0.271463 0.224243 0.296048 0.301204 0.295082 0.298087 0.300169 0.295686 0.299824 0.300447 0.302222 0.284162 0.310026 0.284609 0.307176 0.291305 0.300864 0.291277 0.29907 0.235083 0.283731 0.21593 0.296224 0.209801 0.313656 0.231923 0.287472 0.274937 0.282293 0.268105 0.295598 0.262898 0.299362 0.270829 0.311479 0.27754 0.319831 0.280026 0.316908 0.28664 0.310026 0.284609 0.293923 0.293197 0.292992 0.286179 0.302222 0.284162 0.300864 0.291277 0.28378 0.239397 0.271463 0.224243 0.283731 0.21593 0.29907 0.235083 0.290779 0.253643 0.276299 0.258989 0.270141 0.245495 0.28378 0.239397 0.287472 0.274937 0.299362 0.270829 0.301597 0.277838 0.290812 0.280432 0.30363 0.301611 0.305217 0.295972 0.310433 0.298215 0.307314 0.304374 0.252479 0.213665 0.233939 0.212495 0.2356089 0.199868 0.259028 0.1995159 0.259028 0.1995159 0.2356089 0.199868 0.232345 0.187012 0.247591 0.185044 0.2356089 0.199868 0.220475 0.201521 0.218932 0.188359 0.232345 0.187012 0.220631 0.21435 0.220475 0.201521 0.2356089 0.199868 0.233939 0.212495 0.223999 0.304633 0.224079 0.301377 0.2255139 0.300775 0.2262009 0.304178 0.236539 0.294031 0.23938 0.295594 0.236813 0.299465 0.234382 0.297975 0.2274 0.299869 0.228919 0.303312 0.2262009 0.304178 0.2255139 0.300775 0.225147 0.298714 0.226197 0.29771 0.2274 0.299869 0.2255139 0.300775 0.22411 0.299375 0.225147 0.298714 0.2255139 0.300775 0.224079 0.301377 0.2335309 0.292023 0.236539 0.294031 0.234382 0.297975 0.2316049 0.295406 0.223999 0.304633 0.2239879 0.308141 0.221195 0.307594 0.221866 0.304309 0.22916 0.293589 0.23048 0.290942 0.2335309 0.292023 0.2316049 0.295406 0.254322 0.305436 0.251288 0.307682 0.2479889 0.307292 0.251575 0.302533 0.248334 0.301211 0.251575 0.302533 0.2479889 0.307292 0.243591 0.307177 0.257552 0.297441 0.251575 0.302533 0.248334 0.301211 0.253479 0.294742 0.244893 0.298721 0.248334 0.301211 0.243591 0.307177 0.240877 0.303505 0.253479 0.294742 0.248334 0.301211 0.244893 0.298721 0.249226 0.2923 0.273717 0.29772 0.267986 0.302144 0.260422 0.301364 0.270053 0.294188 0.270053 0.294188 0.260422 0.301364 0.257552 0.297441 0.26594 0.290168 0.26594 0.290168 0.257552 0.297441 0.253479 0.294742 0.261083 0.286409 0.26594 0.290168 0.261083 0.286409 0.27037 0.275929 0.275614 0.28149 0.27231 0.30768 0.277994 0.302761 0.281496 0.305381 0.276683 0.310152 0.277994 0.302761 0.286237 0.297013 0.288591 0.301408 0.281496 0.305381 0.286237 0.297013 0.293923 0.293197 0.295082 0.298087 0.288591 0.301408 0.261083 0.286409 0.253479 0.294742 0.249226 0.2923 0.255583 0.283002 0.293923 0.293197 0.286237 0.297013 0.283743 0.290848 0.292992 0.286179 0.277994 0.302761 0.273717 0.29772 0.283743 0.290848 0.286237 0.297013 0.275614 0.28149 0.279846 0.286152 0.270053 0.294188 0.26594 0.290168 0.287472 0.274937 0.290812 0.280432 0.279846 0.286152 0.275614 0.28149 0.281496 0.305381 0.288591 0.301408 0.291029 0.305311 0.286289 0.30939 0.288591 0.301408 0.295082 0.298087 0.296048 0.301204 0.291029 0.305311 0.276683 0.310152 0.281496 0.305381 0.286289 0.30939 0.282841 0.313322 0.287472 0.274937 0.275614 0.28149 0.27037 0.275929 0.282293 0.268105 0.257552 0.297441 0.260422 0.301364 0.254322 0.305436 0.251575 0.302533 0.279846 0.286152 0.283743 0.290848 0.273717 0.29772 0.270053 0.294188 0.290812 0.280432 0.292992 0.286179 0.283743 0.290848 0.279846 0.286152 0.27231 0.30768 0.267986 0.302144 0.273717 0.29772 0.277994 0.302761 0.323205 0.262237 0.321218 0.250832 0.338474 0.251058 0.341171 0.272921 0.322325 0.271912 0.323205 0.262237 0.341171 0.272921 0.334251 0.28135 0.334251 0.28135 0.341171 0.272921 0.34687 0.295539 0.340224 0.297685 0.34687 0.295539 0.341171 0.272921 0.355686 0.271722 0.357921 0.293116 0.328885 0.28788 0.324547 0.292763 0.316908 0.28664 0.319831 0.280026 0.369262 0.291764 0.357921 0.293116 0.355686 0.271722 0.367009 0.268659 0.319831 0.280026 0.322325 0.271912 0.334251 0.28135 0.328885 0.28788 0.335237 0.300498 0.330653 0.302605 0.324547 0.292763 0.328885 0.28788 0.335237 0.300498 0.328885 0.28788 0.334251 0.28135 0.340224 0.297685 0.199315 0.188482 0.209159 0.189163 0.207592 0.203691 0.1947579 0.207002 0.191323 0.184975 0.199315 0.188482 0.1947579 0.207002 0.183073 0.200168 0.207592 0.203691 0.209079 0.217773 0.199358 0.224179 0.1947579 0.207002 0.220475 0.201521 0.220631 0.21435 0.209079 0.217773 0.207592 0.203691 0.211205 0.23098 0.209079 0.217773 0.220631 0.21435 0.2199929 0.227008 0.218932 0.188359 0.220475 0.201521 0.207592 0.203691 0.209159 0.189163 0.2043409 0.237067 0.199358 0.224179 0.209079 0.217773 0.211205 0.23098 0.154004 0.198535 0.162688 0.206339 0.152966 0.219472 0.142861 0.210366 0.165567 0.186151 0.173951 0.192831 0.162688 0.206339 0.154004 0.198535 0.162688 0.206339 0.172594 0.214862 0.16405 0.228181 0.152966 0.219472 0.173951 0.192831 0.183073 0.200168 0.172594 0.214862 0.162688 0.206339 0.1473219 0.190528 0.154004 0.198535 0.142861 0.210366 0.13511 0.200503 0.15975 0.179041 0.165567 0.186151 0.154004 0.198535 0.1473219 0.190528 0.172594 0.214862 0.182685 0.223089 0.17572 0.237426 0.16405 0.228181 0.183073 0.200168 0.1947579 0.207002 0.182685 0.223089 0.172594 0.214862 0.1947579 0.207002 0.199358 0.224179 0.191937 0.23461 0.182685 0.223089 0.199057 0.245141 0.191937 0.23461 0.199358 0.224179 0.2043409 0.237067 0.139396 0.246527 0.126496 0.237756 0.1331059 0.224556 0.144704 0.233217 0.152966 0.219472 0.144704 0.233217 0.1331059 0.224556 0.142861 0.210366 0.16405 0.228181 0.157424 0.241301 0.144704 0.233217 0.152966 0.219472 0.183555 0.180029 0.173951 0.192831 0.165567 0.186151 0.176643 0.174389 0.191323 0.184975 0.183073 0.200168 0.173951 0.192831 0.183555 0.180029 0.220631 0.21435 0.233939 0.212495 0.231298 0.2248319 0.2199929 0.227008 0.13511 0.200503 0.122236 0.21473 0.114978 0.203123 0.129919 0.1904979 0.1331059 0.224556 0.122236 0.21473 0.13511 0.200503 0.142861 0.210366 0.245313 0.2254559 0.231298 0.2248319 0.233939 0.212495 0.252479 0.213665 0.250889 0.241147 0.239864 0.236228 0.245313 0.2254559 0.259758 0.232914 0.282293 0.268105 0.27037 0.275929 0.262627 0.268559 0.276299 0.258989 0.243541 0.249586 0.235376 0.245966 0.239864 0.236228 0.250889 0.241147 0.27037 0.275929 0.261083 0.286409 0.255583 0.283002 0.262627 0.268559 0.228826 0.235319 0.231298 0.2248319 0.245313 0.2254559 0.239864 0.236228 0.230565 0.306814 0.228919 0.303312 0.232157 0.301469 0.235189 0.30505 0.24208 0.264573 0.237855 0.257861 0.243541 0.249586 0.249387 0.258577 0.232157 0.301469 0.234768 0.301516 0.236072 0.302858 0.235189 0.30505 0.241959 0.297009 0.245337 0.290574 0.249226 0.2923 0.244893 0.298721 0.230565 0.306814 0.227003 0.307808 0.2262009 0.304178 0.228919 0.303312 0.2199929 0.227008 0.219839 0.23746 0.2132019 0.241335 0.211205 0.23098 0.2255859 0.256231 0.220786 0.258256 0.220429 0.249045 0.22701 0.246491 0.228826 0.235319 0.22701 0.246491 0.220429 0.249045 0.219839 0.23746 0.215727 0.252724 0.212074 0.25668 0.2082239 0.246365 0.2132019 0.241335 0.2174029 0.26113 0.214521 0.26415 0.212074 0.25668 0.215727 0.252724 0.215727 0.252724 0.2132019 0.241335 0.219839 0.23746 0.220429 0.249045 0.2174029 0.26113 0.215727 0.252724 0.220429 0.249045 0.220786 0.258256 0.211205 0.23098 0.2132019 0.241335 0.2082239 0.246365 0.2043409 0.237067 0.238949 0.301029 0.240877 0.303505 0.235189 0.30505 0.236072 0.302858 0.236072 0.302858 0.234768 0.301516 0.236813 0.299465 0.238949 0.301029 0.234768 0.301516 0.232157 0.301469 0.234382 0.297975 0.236813 0.299465 0.244893 0.298721 0.240877 0.303505 0.238949 0.301029 0.241959 0.297009 0.241959 0.297009 0.238949 0.301029 0.236813 0.299465 0.23938 0.295594 0.237855 0.257861 0.231627 0.255815 0.235376 0.245966 0.243541 0.249586 0.250889 0.241147 0.259758 0.232914 0.270141 0.245495 0.258973 0.252462 0.262627 0.268559 0.258973 0.252462 0.270141 0.245495 0.276299 0.258989 0.262627 0.268559 0.251646 0.270817 0.249387 0.258577 0.258973 0.252462 0.250889 0.241147 0.258973 0.252462 0.249387 0.258577 0.243541 0.249586 0.262627 0.268559 0.255583 0.283002 0.249372 0.28206 0.251646 0.270817 0.24208 0.264573 0.249387 0.258577 0.251646 0.270817 0.244226 0.273625 0.243925 0.282072 0.244226 0.273625 0.251646 0.270817 0.249372 0.28206 0.255583 0.283002 0.249226 0.2923 0.245337 0.290574 0.249372 0.28206 0.24184 0.289306 0.243925 0.282072 0.249372 0.28206 0.245337 0.290574 0.243925 0.282072 0.24184 0.289306 0.238598 0.288406 0.239421 0.283032 0.236539 0.294031 0.238598 0.288406 0.24184 0.289306 0.23938 0.295594 0.23938 0.295594 0.24184 0.289306 0.245337 0.290574 0.241959 0.297009 0.223999 0.304633 0.2262009 0.304178 0.227003 0.307808 0.2239879 0.308141 0.22701 0.246491 0.235376 0.245966 0.231627 0.255815 0.2255859 0.256231 0.22701 0.246491 0.228826 0.235319 0.239864 0.236228 0.235376 0.245966 0.219839 0.23746 0.2199929 0.227008 0.231298 0.2248319 0.228826 0.235319 0.367009 0.268659 0.355686 0.271722 0.351864 0.2492409 0.362039 0.244882 0.362039 0.244882 0.371752 0.239326 0.379936 0.26292 0.367009 0.268659 0.349892 0.2182739 0.32869 0.1903139 0.335798 0.180855 0.357365 0.209191 0.362039 0.244882 0.349892 0.2182739 0.357365 0.209191 0.371752 0.239326 0.371752 0.239326 0.357365 0.209191 0.363883 0.196707 0.380047 0.224238 0.32869 0.1903139 0.304021 0.1701869 0.308453 0.160254 0.335798 0.180855 0.357365 0.209191 0.335798 0.180855 0.34268 0.169728 0.363883 0.196707 0.335798 0.180855 0.308453 0.160254 0.31222 0.145344 0.34268 0.169728 0.308453 0.160254 0.276064 0.150075 0.269422 0.137822 0.31222 0.145344 0.308453 0.160254 0.304021 0.1701869 0.278699 0.158731 0.276064 0.150075 0.298549 0.177678 0.278014 0.1662639 0.278699 0.158731 0.304021 0.1701869 0.298549 0.177678 0.320164 0.197152 0.308927 0.203674 0.290377 0.184204 0.308927 0.203674 0.296224 0.209801 0.277363 0.191726 0.290377 0.184204 0.32699 0.227187 0.313656 0.231923 0.296224 0.209801 0.308927 0.203674 0.32699 0.227187 0.338474 0.251058 0.321218 0.250832 0.313656 0.231923 0.32699 0.227187 0.308927 0.203674 0.320164 0.197152 0.340639 0.223868 0.349892 0.2182739 0.362039 0.244882 0.351864 0.2492409 0.340639 0.223868 0.351864 0.2492409 0.338474 0.251058 0.32699 0.227187 0.340639 0.223868 0.32869 0.1903139 0.349892 0.2182739 0.340639 0.223868 0.320164 0.197152 0.298549 0.177678 0.304021 0.1701869 0.32869 0.1903139 0.320164 0.197152 0.355686 0.271722 0.341171 0.272921 0.338474 0.251058 0.351864 0.2492409 0.191662 0.804134 0.190739 0.809503 0.175525 0.802998 0.1766639 0.79645 0.190275 0.815385 0.175283 0.809979 0.175525 0.802998 0.190739 0.809503 0.332769 0.704584 0.347614 0.713444 0.345462 0.718805 0.330874 0.710038 0.197446 0.878024 0.1997179 0.883048 0.18573 0.887289 0.183791 0.881346 0.324445 0.72213 0.339126 0.731665 0.336939 0.735037 0.32334 0.724762 0.196763 0.871886 0.183271 0.874532 0.182125 0.865696 0.19409 0.863301 0.192653 0.853947 0.19409 0.863301 0.182125 0.865696 0.179785 0.855607 0.334253 0.738926 0.321684 0.727789 0.32334 0.724762 0.336939 0.735037 0.190402 0.844426 0.192653 0.853947 0.179785 0.855607 0.177218 0.844652 0.345044 0.675678 0.346685 0.672902 0.362598 0.679237 0.361107 0.682645 0.190321 0.834587 0.190402 0.844426 0.177218 0.844652 0.1769019 0.833775 0.363654 0.674825 0.362598 0.679237 0.346685 0.672902 0.348111 0.669199 0.1899 0.827805 0.190321 0.834587 0.1769019 0.833775 0.177334 0.825864 0.18573 0.887289 0.1997179 0.883048 0.202196 0.889539 0.189872 0.892663 0.330874 0.710038 0.345462 0.718805 0.343385 0.724551 0.328384 0.714847 0.185738 0.787393 0.188642 0.780878 0.198513 0.78761 0.195378 0.79284 0.326426 0.719495 0.328384 0.714847 0.343385 0.724551 0.341439 0.728426 0.1899 0.827805 0.177334 0.825864 0.1762599 0.818778 0.190497 0.822045 0.324445 0.72213 0.326426 0.719495 0.341439 0.728426 0.339126 0.731665 0.343176 0.679107 0.345044 0.675678 0.361107 0.682645 0.359445 0.685889 0.192516 0.799003 0.184974 0.791539 0.185738 0.787393 0.195378 0.79284 0.33553 0.699349 0.349774 0.708154 0.347614 0.713444 0.332769 0.704584 0.337045 0.695505 0.351438 0.704276 0.349774 0.708154 0.33553 0.699349 0.196763 0.871886 0.197446 0.878024 0.183791 0.881346 0.183271 0.874532 0.343176 0.679107 0.359445 0.685889 0.357809 0.689281 0.342319 0.681948 0.342319 0.681948 0.357809 0.689281 0.355841 0.693734 0.341157 0.685015 0.339962 0.688406 0.341157 0.685015 0.355841 0.693734 0.354028 0.697613 0.190497 0.822045 0.1762599 0.818778 0.175283 0.809979 0.190275 0.815385 0.352741 0.70106 0.338714 0.692375 0.339962 0.688406 0.354028 0.697613 0.351438 0.704276 0.337045 0.695505 0.338714 0.692375 0.352741 0.70106 0.310433 0.298215 0.313461 0.29306 0.320061 0.297346 0.315325 0.301486 0.315325 0.301486 0.320061 0.297346 0.325286 0.30452 0.319732 0.307254 0.325286 0.30452 0.327419 0.313692 0.323243 0.314927 0.319732 0.307254 0.327419 0.313692 0.327821 0.324077 0.323819 0.324077 0.323243 0.314927 0.327821 0.324077 0.327419 0.313692 0.332453 0.312927 0.332029 0.324077 0.325286 0.30452 0.330653 0.302605 0.332453 0.312927 0.327419 0.313692 0.323243 0.314927 0.323819 0.324077 0.32007 0.324077 0.317154 0.316566 0.319732 0.307254 0.323243 0.314927 0.317154 0.316566 0.31444 0.311215 0.313461 0.29306 0.316908 0.28664 0.324547 0.292763 0.320061 0.297346 0.307314 0.304374 0.310433 0.298215 0.315325 0.301486 0.311364 0.308076 0.325286 0.30452 0.320061 0.297346 0.324547 0.292763 0.330653 0.302605 0.31444 0.311215 0.311364 0.308076 0.315325 0.301486 0.319732 0.307254 0.299829 0.304087 0.302686 0.305655 0.301904 0.308289 0.299478 0.306627 0.30469 0.309622 0.301904 0.308289 0.302686 0.305655 0.305724 0.307053 0.30307 0.311529 0.301189 0.310395 0.301904 0.308289 0.30469 0.309622 0.30469 0.309622 0.307676 0.311087 0.306035 0.312687 0.30307 0.311529 0.305724 0.307053 0.309729 0.309728 0.307676 0.311087 0.30469 0.309622 0.310917 0.313845 0.307676 0.311087 0.309729 0.309728 0.313017 0.312304 0.308805 0.31513 0.306035 0.312687 0.307676 0.311087 0.310917 0.313845 0.296798 0.306925 0.299478 0.306627 0.299448 0.309155 0.297192 0.308817 0.296303 0.305248 0.299829 0.304087 0.299478 0.306627 0.296798 0.306925 0.299535 0.311176 0.300952 0.312021 0.300633 0.31328 0.299896 0.312815 0.299448 0.309155 0.301189 0.310395 0.300952 0.312021 0.299535 0.311176 0.30687 0.315552 0.304493 0.313587 0.306035 0.312687 0.308805 0.31513 0.298043 0.310861 0.299535 0.311176 0.299896 0.312815 0.299181 0.312712 0.30196 0.312725 0.300952 0.312021 0.301189 0.310395 0.30307 0.311529 0.304493 0.313587 0.30196 0.312725 0.30307 0.311529 0.306035 0.312687 0.299824 0.300447 0.30363 0.301611 0.302686 0.305655 0.299829 0.304087 0.299896 0.312815 0.300633 0.31328 0.300199 0.31519 0.299748 0.315224 0.299181 0.312712 0.299206 0.315232 0.298314 0.315906 0.2966 0.313034 0.307314 0.304374 0.305724 0.307053 0.302686 0.305655 0.30363 0.301611 0.307314 0.304374 0.311364 0.308076 0.309729 0.309728 0.305724 0.307053 0.313017 0.312304 0.309729 0.309728 0.311364 0.308076 0.31444 0.311215 0.299181 0.312712 0.299896 0.312815 0.299748 0.315224 0.299206 0.315232 0.296048 0.301204 0.299824 0.300447 0.299829 0.304087 0.296303 0.305248 0.297192 0.308817 0.299448 0.309155 0.299535 0.311176 0.298043 0.310861 0.295176 0.311371 0.298043 0.310861 0.299181 0.312712 0.2966 0.313034 0.299478 0.306627 0.301904 0.308289 0.301189 0.310395 0.299448 0.309155 0.289819 0.316117 0.29181 0.313282 0.294158 0.3149 0.292236 0.317105 0.287757 0.315301 0.290108 0.311973 0.29181 0.313282 0.289819 0.316117 0.301391 0.313914 0.300633 0.31328 0.300952 0.312021 0.30196 0.312725 0.302672 0.314512 0.301391 0.313914 0.30196 0.312725 0.304493 0.313587 0.291029 0.305311 0.292421 0.307366 0.288173 0.31072 0.286289 0.30939 0.296048 0.301204 0.296303 0.305248 0.292421 0.307366 0.291029 0.305311 0.286289 0.30939 0.288173 0.31072 0.285249 0.314043 0.282841 0.313322 0.294158 0.3149 0.296962 0.316917 0.295799 0.318832 0.292236 0.317105 0.2966 0.313034 0.298314 0.315906 0.296962 0.316917 0.294158 0.3149 0.286109 0.3146 0.288814 0.311141 0.290108 0.311973 0.287757 0.315301 0.285249 0.314043 0.288173 0.31072 0.288814 0.311141 0.286109 0.3146 0.293338 0.308093 0.296798 0.306925 0.297192 0.308817 0.294117 0.309362 0.292421 0.307366 0.296303 0.305248 0.296798 0.306925 0.293338 0.308093 0.288814 0.311141 0.293338 0.308093 0.294117 0.309362 0.290108 0.311973 0.288173 0.31072 0.292421 0.307366 0.293338 0.308093 0.288814 0.311141 0.29181 0.313282 0.295176 0.311371 0.2966 0.313034 0.294158 0.3149 0.290108 0.311973 0.294117 0.309362 0.295176 0.311371 0.29181 0.313282 0.294117 0.309362 0.297192 0.308817 0.298043 0.310861 0.295176 0.311371 0.260071 0.304489 0.265803 0.305221 0.263221 0.307762 0.258756 0.308157 0.264143 0.313831 0.265057 0.314973 0.264605 0.315845 0.263663 0.31526 0.267335 0.318751 0.267908 0.319224 0.265569 0.319344 0.266085 0.318656 0.268129 0.318447 0.269208 0.318609 0.267908 0.319224 0.267335 0.318751 0.261625 0.314721 0.263663 0.31526 0.263441 0.317028 0.261426 0.317529 0.26677 0.318214 0.267335 0.318751 0.266085 0.318656 0.266191 0.318172 0.262113 0.311872 0.264143 0.313831 0.263663 0.31526 0.261625 0.314721 0.267301 0.318064 0.268129 0.318447 0.267335 0.318751 0.26677 0.318214 0.263255 0.319676 0.263707 0.318804 0.265569 0.319344 0.265612 0.320713 0.261426 0.317529 0.263441 0.317028 0.263707 0.318804 0.263255 0.319676 0.263707 0.318804 0.264609 0.317746 0.266085 0.318656 0.265569 0.319344 0.255758 0.314372 0.258897 0.31446 0.259063 0.31662 0.256892 0.316067 0.263441 0.317028 0.264464 0.316926 0.264609 0.317746 0.263707 0.318804 0.265539 0.317818 0.264609 0.317746 0.264464 0.316926 0.265522 0.317571 0.255042 0.311618 0.258701 0.31127 0.258897 0.31446 0.255758 0.314372 0.266191 0.318172 0.266085 0.318656 0.264609 0.317746 0.265539 0.317818 0.256892 0.316067 0.256372 0.317315 0.254251 0.315499 0.255758 0.314372 0.267912 0.315521 0.266879 0.315263 0.266712 0.313833 0.268622 0.313683 0.266712 0.313833 0.266121 0.310482 0.269383 0.309487 0.268622 0.313683 0.261625 0.314721 0.258897 0.31446 0.258701 0.31127 0.262113 0.311872 0.263221 0.307762 0.265803 0.305221 0.269383 0.309487 0.266121 0.310482 0.261426 0.317529 0.259063 0.31662 0.258897 0.31446 0.261625 0.314721 0.25656 0.306222 0.260071 0.304489 0.258756 0.308157 0.255247 0.309015 0.261426 0.317529 0.260923 0.31968 0.258952 0.318349 0.259063 0.31662 0.264605 0.315845 0.265292 0.316813 0.265522 0.317571 0.264464 0.316926 0.256372 0.317315 0.258952 0.318349 0.258749 0.319996 0.255976 0.318754 0.256372 0.317315 0.256892 0.316067 0.259063 0.31662 0.258952 0.318349 0.266121 0.310482 0.264143 0.313831 0.262113 0.311872 0.263221 0.307762 0.263663 0.31526 0.264605 0.315845 0.264464 0.316926 0.263441 0.317028 0.267908 0.319224 0.268418 0.320601 0.265612 0.320713 0.265569 0.319344 0.266121 0.310482 0.266712 0.313833 0.265057 0.314973 0.264143 0.313831 0.269672 0.315408 0.26838 0.316446 0.267912 0.315521 0.268622 0.313683 0.268973 0.317742 0.267878 0.317632 0.26838 0.316446 0.269672 0.315408 0.266712 0.313833 0.266879 0.315263 0.265719 0.315955 0.265057 0.314973 0.262113 0.311872 0.258701 0.31127 0.258756 0.308157 0.263221 0.307762 0.269383 0.309487 0.271294 0.31523 0.269672 0.315408 0.268622 0.313683 0.271294 0.31523 0.270645 0.317899 0.268973 0.317742 0.269672 0.315408 0.269208 0.318609 0.268129 0.318447 0.268973 0.317742 0.270645 0.317899 0.267878 0.317632 0.268973 0.317742 0.268129 0.318447 0.267301 0.318064 0.255247 0.309015 0.258756 0.308157 0.258701 0.31127 0.255042 0.311618 0.253004 0.313178 0.255042 0.311618 0.255758 0.314372 0.254251 0.315499 0.253004 0.313178 0.252755 0.310257 0.255247 0.309015 0.255042 0.311618 0.254322 0.305436 0.25656 0.306222 0.255247 0.309015 0.252755 0.310257 0.254322 0.305436 0.260422 0.301364 0.260071 0.304489 0.25656 0.306222 0.265057 0.314973 0.265719 0.315955 0.265292 0.316813 0.264605 0.315845 0.260422 0.301364 0.267986 0.302144 0.265803 0.305221 0.260071 0.304489 0.267986 0.302144 0.27231 0.30768 0.269383 0.309487 0.265803 0.305221 0.2743 0.318807 0.270487 0.319804 0.269208 0.318609 0.270645 0.317899 0.273713 0.3154 0.2743 0.318807 0.270645 0.317899 0.271294 0.31523 0.27231 0.30768 0.273713 0.3154 0.271294 0.31523 0.269383 0.309487 0.269208 0.318609 0.270487 0.319804 0.268418 0.320601 0.267908 0.319224 0.642738 0.751409 0.633348 0.751344 0.63386 0.747817 0.642738 0.74786 0.642738 0.751409 0.642738 0.755678 0.632732 0.75624 0.633348 0.751344 0.642738 0.759174 0.635796 0.759952 0.632732 0.75624 0.642738 0.755678 0.614308 0.753913 0.625246 0.752324 0.624808 0.757941 0.614108 0.758825 0.642738 0.759174 0.642738 0.763556 0.63792 0.763334 0.635796 0.759952 0.614317 0.750331 0.625263 0.748268 0.625246 0.752324 0.614308 0.753913 0.642738 0.770009 0.637213 0.769583 0.63792 0.763334 0.642738 0.763556 0.592155 0.791939 0.577695 0.778745 0.588962 0.769556 0.593758 0.776581 0.642738 0.770009 0.642738 0.7769 0.636273 0.776656 0.637213 0.769583 0.637213 0.769583 0.633153 0.767403 0.635796 0.759952 0.63792 0.763334 0.636273 0.776656 0.631237 0.776177 0.633153 0.767403 0.637213 0.769583 0.628985 0.765582 0.633153 0.767403 0.631237 0.776177 0.626247 0.776236 0.632732 0.75624 0.635796 0.759952 0.633153 0.767403 0.628985 0.765582 0.613591 0.76704 0.603817 0.77096 0.601204 0.762392 0.614108 0.758825 0.612626 0.779362 0.602895 0.785037 0.603817 0.77096 0.613591 0.76704 0.622211 0.766802 0.628985 0.765582 0.626247 0.776236 0.619912 0.777679 0.624808 0.757941 0.632732 0.75624 0.628985 0.765582 0.622211 0.766802 0.613591 0.76704 0.622211 0.766802 0.619912 0.777679 0.612626 0.779362 0.614108 0.758825 0.624808 0.757941 0.622211 0.766802 0.613591 0.76704 0.588962 0.769556 0.601204 0.762392 0.603817 0.77096 0.593758 0.776581 0.561998 0.796938 0.576524 0.814817 0.571693 0.824696 0.556141 0.808125 0.592155 0.791939 0.582742 0.803046 0.568427 0.78847 0.577695 0.778745 0.568427 0.78847 0.582742 0.803046 0.576524 0.814817 0.561998 0.796938 0.593758 0.776581 0.603817 0.77096 0.602895 0.785037 0.592155 0.791939 0.634778 0.743142 0.625825 0.744092 0.626419 0.738188 0.635345 0.736786 0.586063 0.763192 0.599551 0.757813 0.601204 0.762392 0.588962 0.769556 0.568544 0.832601 0.551721 0.818632 0.556141 0.808125 0.571693 0.824696 0.599551 0.757813 0.614308 0.753913 0.614108 0.758825 0.601204 0.762392 0.625263 0.748268 0.614317 0.750331 0.614381 0.745588 0.625825 0.744092 0.597378 0.753142 0.614317 0.750331 0.614308 0.753913 0.599551 0.757813 0.626419 0.738188 0.625825 0.744092 0.614381 0.745588 0.615263 0.73969 0.634778 0.743142 0.63386 0.747817 0.625263 0.748268 0.625825 0.744092 0.642738 0.743436 0.634778 0.743142 0.635345 0.736786 0.642738 0.736947 0.633348 0.751344 0.625246 0.752324 0.625263 0.748268 0.63386 0.747817 0.642738 0.743436 0.642738 0.74786 0.63386 0.747817 0.634778 0.743142 0.632732 0.75624 0.624808 0.757941 0.625246 0.752324 0.633348 0.751344 0.548922 0.829793 0.551721 0.818632 0.568544 0.832601 0.566529 0.840681 0.552129 0.851129 0.549279 0.840797 0.563721 0.849274 0.562715 0.856657 0.548922 0.829793 0.566529 0.840681 0.563721 0.849274 0.549279 0.840797 0.552237 0.858064 0.552129 0.851129 0.562715 0.856657 0.562063 0.863213 0.554711 0.879187 0.552611 0.866091 0.562407 0.870446 0.562982 0.878246 0.552237 0.858064 0.562063 0.863213 0.562407 0.870446 0.552611 0.866091 0.310981 0.32899 0.309135 0.32855 0.310264 0.324079 0.311793 0.32408 0.315629 0.33081 0.313856 0.330016 0.315131 0.32408 0.317613 0.32408 0.313856 0.330016 0.310981 0.32899 0.311793 0.32408 0.315131 0.32408 0.313017 0.335852 0.310917 0.334312 0.313856 0.330016 0.315629 0.33081 0.310917 0.334312 0.308805 0.333027 0.310981 0.32899 0.313856 0.330016 0.310917 0.313845 0.313856 0.31814 0.310981 0.319167 0.308805 0.31513 0.313017 0.312304 0.315629 0.317346 0.313856 0.31814 0.310917 0.313845 0.313856 0.31814 0.315131 0.324077 0.311793 0.324077 0.310981 0.319167 0.315629 0.317346 0.317613 0.324077 0.315131 0.324077 0.313856 0.31814 0.310981 0.319167 0.311793 0.324077 0.310264 0.324077 0.309135 0.319606 0.308805 0.31513 0.310981 0.319167 0.309135 0.319606 0.30687 0.315552 0.32007 0.324077 0.317613 0.324077 0.315629 0.317346 0.317154 0.316566 0.32007 0.32408 0.317154 0.331591 0.315629 0.33081 0.317613 0.32408 0.317154 0.316566 0.315629 0.317346 0.313017 0.312304 0.31444 0.311215 0.317154 0.331591 0.31444 0.336942 0.313017 0.335852 0.315629 0.33081 0.308805 0.333027 0.30687 0.332604 0.309135 0.32855 0.310981 0.32899 0.285724 0.326063 0.283763 0.326497 0.284148 0.32408 0.285911 0.32408 0.283763 0.326497 0.282939 0.326564 0.28326 0.32408 0.284148 0.32408 0.28418 0.317354 0.283544 0.320022 0.282589 0.319716 0.283339 0.316965 0.28418 0.330803 0.283339 0.331192 0.282589 0.328441 0.283544 0.328134 0.287757 0.332855 0.286109 0.333557 0.28418 0.330803 0.286131 0.330086 0.286109 0.333557 0.285249 0.334113 0.283339 0.331192 0.28418 0.330803 0.282939 0.326564 0.283763 0.326497 0.283544 0.328134 0.282589 0.328441 0.283763 0.321659 0.283544 0.320022 0.285498 0.320378 0.285724 0.322094 0.282939 0.321592 0.282589 0.319716 0.283544 0.320022 0.283763 0.321659 0.286109 0.3146 0.28418 0.317354 0.283339 0.316965 0.285249 0.314043 0.287757 0.315301 0.286131 0.318071 0.28418 0.317354 0.286109 0.3146 0.283763 0.326497 0.285724 0.326063 0.285498 0.327778 0.283544 0.328134 0.295114 0.325226 0.289961 0.325052 0.289765 0.324079 0.29553 0.324079 0.286131 0.318071 0.285498 0.320378 0.283544 0.320022 0.28418 0.317354 0.282939 0.326564 0.280532 0.326677 0.28117 0.32408 0.28326 0.32408 0.283763 0.321659 0.284148 0.324077 0.28326 0.324077 0.282939 0.321592 0.29006 0.326622 0.289961 0.325052 0.295114 0.325226 0.295376 0.326055 0.285724 0.322094 0.285911 0.324077 0.284148 0.324077 0.283763 0.321659 0.280415 0.328875 0.280532 0.326677 0.282939 0.326564 0.282589 0.328441 0.287719 0.32248 0.28778 0.320885 0.29006 0.321535 0.289961 0.323105 0.280693 0.332141 0.280415 0.328875 0.282589 0.328441 0.283339 0.331192 0.287719 0.32248 0.287713 0.324077 0.285911 0.324077 0.285724 0.322094 0.290588 0.328801 0.29006 0.326622 0.295376 0.326055 0.295694 0.327877 0.289819 0.316117 0.288246 0.318476 0.286131 0.318071 0.287757 0.315301 0.292236 0.331052 0.290588 0.328801 0.295694 0.327877 0.295799 0.329325 0.292236 0.317105 0.290588 0.319356 0.288246 0.318476 0.289819 0.316117 0.282841 0.334835 0.280693 0.332141 0.283339 0.331192 0.285249 0.334113 0.288246 0.318476 0.28778 0.320885 0.285498 0.320378 0.286131 0.318071 0.286131 0.330086 0.28418 0.330803 0.283544 0.328134 0.285498 0.327778 0.309135 0.32855 0.306379 0.328216 0.307272 0.324079 0.310264 0.324079 0.290588 0.319356 0.29006 0.321535 0.28778 0.320885 0.288246 0.318476 0.289961 0.325052 0.287719 0.325677 0.287713 0.32408 0.289765 0.324079 0.287719 0.325677 0.285724 0.326063 0.285911 0.32408 0.287713 0.32408 0.289819 0.332039 0.287757 0.332855 0.286131 0.330086 0.288246 0.329681 0.289961 0.323105 0.289765 0.324077 0.287713 0.324077 0.287719 0.32248 0.309135 0.319606 0.310264 0.324077 0.307272 0.324077 0.306379 0.31994 0.288246 0.329681 0.286131 0.330086 0.285498 0.327778 0.28778 0.327272 0.292236 0.317105 0.295799 0.318832 0.295694 0.32028 0.290588 0.319356 0.285724 0.322094 0.285498 0.320378 0.28778 0.320885 0.287719 0.32248 0.290588 0.319356 0.295694 0.32028 0.295376 0.322102 0.29006 0.321535 0.280693 0.316015 0.283339 0.316965 0.282589 0.319716 0.280415 0.319282 0.290588 0.328801 0.288246 0.329681 0.28778 0.327272 0.29006 0.326622 0.280415 0.319282 0.282589 0.319716 0.282939 0.321592 0.280532 0.32148 0.29006 0.321535 0.295376 0.322102 0.295114 0.32293 0.289961 0.323105 0.292236 0.331052 0.289819 0.332039 0.288246 0.329681 0.290588 0.328801 0.282939 0.321592 0.28326 0.324077 0.28117 0.324077 0.280532 0.32148 0.295114 0.32293 0.29553 0.324077 0.289765 0.324077 0.289961 0.323105 0.285724 0.326063 0.287719 0.325677 0.28778 0.327272 0.285498 0.327778 0.282841 0.313322 0.285249 0.314043 0.283339 0.316965 0.280693 0.316015 0.287719 0.325677 0.289961 0.325052 0.29006 0.326622 0.28778 0.327272 0.574614 0.869678 0.574482 0.87497 0.562407 0.870446 0.562063 0.863213 0.693321 0.791939 0.689511 0.816227 0.683101 0.808507 0.68258 0.785037 0.595965 0.816227 0.590291 0.825176 0.582742 0.803046 0.592155 0.791939 0.662191 0.794573 0.659229 0.776236 0.665563 0.777679 0.669863 0.798623 0.575876 0.863901 0.562715 0.856657 0.563721 0.849274 0.576573 0.858143 0.669863 0.798623 0.665563 0.777679 0.67285 0.779362 0.676223 0.802893 0.577515 0.852837 0.576573 0.858143 0.563721 0.849274 0.566529 0.840681 0.669863 0.798623 0.676223 0.802893 0.676318 0.821014 0.670472 0.816269 0.635125 0.792391 0.629022 0.792881 0.631237 0.776177 0.636273 0.776656 0.662191 0.794573 0.669863 0.798623 0.670472 0.816269 0.664345 0.813073 0.623285 0.794573 0.626247 0.776236 0.631237 0.776177 0.629022 0.792881 0.689511 0.816227 0.685451 0.833516 0.681469 0.826629 0.683101 0.808507 0.568544 0.832601 0.571693 0.824696 0.581435 0.84048 0.579173 0.846817 0.710861 0.869678 0.699655 0.874173 0.698301 0.870098 0.7096 0.863901 0.602375 0.808507 0.602895 0.785037 0.612626 0.779362 0.609252 0.802893 0.710861 0.869678 0.7096 0.863901 0.72276 0.856657 0.723412 0.863213 0.574614 0.869678 0.562063 0.863213 0.562715 0.856657 0.575876 0.863901 0.683101 0.808507 0.676223 0.802893 0.67285 0.779362 0.68258 0.785037 0.615613 0.798623 0.609252 0.802893 0.612626 0.779362 0.619912 0.777679 0.716932 0.832601 0.706303 0.846817 0.704041 0.84048 0.713782 0.824696 0.623285 0.794573 0.615613 0.798623 0.619912 0.777679 0.626247 0.776236 0.706303 0.846817 0.694724 0.85646 0.692877 0.851589 0.704041 0.84048 0.592155 0.791939 0.602895 0.785037 0.602375 0.808507 0.595965 0.816227 0.695184 0.825176 0.688381 0.840501 0.685451 0.833516 0.689511 0.816227 0.642738 0.7769 0.642738 0.788155 0.635125 0.792391 0.636273 0.776656 0.662191 0.794573 0.664345 0.813073 0.658731 0.812477 0.656454 0.792881 0.587175 0.870098 0.58582 0.874173 0.574614 0.869678 0.575876 0.863901 0.626745 0.812477 0.621131 0.813073 0.623285 0.794573 0.629022 0.792881 0.662191 0.794573 0.656454 0.792881 0.654239 0.776177 0.659229 0.776236 0.621131 0.813073 0.615004 0.816269 0.615613 0.798623 0.623285 0.794573 0.650351 0.792391 0.649203 0.776656 0.654239 0.776177 0.656454 0.792881 0.609158 0.821014 0.609252 0.802893 0.615613 0.798623 0.615004 0.816269 0.642738 0.788155 0.642738 0.7769 0.649203 0.776656 0.650351 0.792391 0.609158 0.821014 0.604007 0.826629 0.602375 0.808507 0.609252 0.802893 0.707961 0.852837 0.708902 0.858143 0.697394 0.866129 0.696445 0.861908 0.604007 0.826629 0.600024 0.833516 0.595965 0.816227 0.602375 0.808507 0.707961 0.852837 0.718946 0.840681 0.721755 0.849274 0.708902 0.858143 0.7096 0.863901 0.708902 0.858143 0.721755 0.849274 0.72276 0.856657 0.583362 0.882068 0.573927 0.87919 0.574482 0.87497 0.584625 0.878681 0.7096 0.863901 0.698301 0.870098 0.697394 0.866129 0.708902 0.858143 0.584625 0.878681 0.574482 0.87497 0.574614 0.869678 0.58582 0.874173 0.689511 0.816227 0.693321 0.791939 0.702734 0.803046 0.695184 0.825176 0.710861 0.869678 0.710994 0.87497 0.700851 0.878681 0.699655 0.874173 0.588081 0.866129 0.587175 0.870098 0.575876 0.863901 0.576573 0.858143 0.710861 0.869678 0.723412 0.863213 0.723068 0.870446 0.710994 0.87497 0.707961 0.852837 0.696445 0.861908 0.694724 0.85646 0.706303 0.846817 0.588081 0.866129 0.576573 0.858143 0.577515 0.852837 0.589031 0.861908 0.590752 0.85646 0.589031 0.861908 0.577515 0.852837 0.579173 0.846817 0.716932 0.832601 0.718946 0.840681 0.707961 0.852837 0.706303 0.846817 0.590752 0.85646 0.579173 0.846817 0.581435 0.84048 0.592599 0.851589 0.702114 0.882068 0.700851 0.878681 0.710994 0.87497 0.711549 0.87919 0.594624 0.845943 0.592599 0.851589 0.581435 0.84048 0.585904 0.833149 0.711549 0.87919 0.710994 0.87497 0.723068 0.870446 0.722494 0.878246 0.594624 0.845943 0.585904 0.833149 0.590291 0.825176 0.597095 0.840501 0.702734 0.803046 0.708952 0.814817 0.699572 0.833149 0.695184 0.825176 0.597095 0.840501 0.590291 0.825176 0.595965 0.816227 0.600024 0.833516 0.708952 0.814817 0.713782 0.824696 0.704041 0.84048 0.699572 0.833149 0.695184 0.825176 0.699572 0.833149 0.690852 0.845943 0.688381 0.840501 0.699572 0.833149 0.704041 0.84048 0.692877 0.851589 0.690852 0.845943 0.576524 0.814817 0.585904 0.833149 0.581435 0.84048 0.571693 0.824696 0.573927 0.87919 0.562982 0.878246 0.562407 0.870446 0.574482 0.87497 0.582742 0.803046 0.590291 0.825176 0.585904 0.833149 0.576524 0.814817 0.568544 0.832601 0.579173 0.846817 0.577515 0.852837 0.566529 0.840681 0.681469 0.826629 0.676318 0.821014 0.676223 0.802893 0.683101 0.808507 0.642738 0.814079 0.636619 0.813476 0.638036 0.799345 0.642738 0.797698 0.632345 0.812137 0.635125 0.792391 0.638036 0.799345 0.636619 0.813476 0.626745 0.812477 0.629022 0.792881 0.635125 0.792391 0.632345 0.812137 0.648857 0.813476 0.64744 0.799345 0.650351 0.792391 0.65313 0.812137 0.64744 0.799345 0.648857 0.813476 0.642738 0.814079 0.642738 0.797698 0.650351 0.792391 0.656454 0.792881 0.658731 0.812477 0.65313 0.812137 0.642738 0.788155 0.650351 0.792391 0.64744 0.799345 0.642738 0.797698 0.642738 0.797698 0.638036 0.799345 0.635125 0.792391 0.642738 0.788155 0.634418 0.826697 0.638741 0.82684 0.639674 0.831528 0.636554 0.831367 0.116051 0.05443495 0.104221 0.04784494 0.117229 0.02996599 0.129612 0.03492397 0.679931 0.844981 0.679936 0.853247 0.673547 0.856334 0.674837 0.850461 0.624393 0.829208 0.629592 0.82723 0.632777 0.831254 0.62829 0.832079 0.591334 0.885792 0.593638 0.881811 0.597946 0.88459 0.595278 0.887994 0.603596 0.871712 0.602197 0.874711 0.596934 0.871066 0.598149 0.86719 0.679931 0.844981 0.674837 0.850461 0.673911 0.844343 0.677773 0.837704 0.669359 0.857586 0.673547 0.856334 0.669846 0.86345 0.666896 0.862958 0.674091 0.83123 0.668876 0.826208 0.670472 0.816269 0.676318 0.821014 0.184219 0.05472397 0.188306 0.07390898 0.174996 0.08141797 0.169745 0.07437795 0.127863 0.05951797 0.116051 0.05443495 0.129612 0.03492397 0.141719 0.03942197 0.668876 0.826208 0.674091 0.83123 0.671039 0.837174 0.66622 0.832118 0.59815 0.86719 0.589031 0.861908 0.590752 0.85646 0.599567 0.863548 0.674091 0.83123 0.676318 0.821014 0.681469 0.826629 0.677773 0.837704 0.651056 0.826697 0.64892 0.831367 0.645801 0.831528 0.646733 0.82684 0.09402596 0.607243 0.105586 0.624139 0.09229499 0.63065 0.08337599 0.61799 0.642737 0.826977 0.646733 0.82684 0.645801 0.831528 0.642737 0.831836 0.605539 0.853247 0.611927 0.856334 0.615628 0.86345 0.610612 0.861971 0.637521 0.821041 0.638743 0.82684 0.634419 0.826697 0.632923 0.82117 0.661082 0.829208 0.657184 0.832079 0.652697 0.831254 0.655883 0.82723 0.599469 0.880952 0.597946 0.88459 0.593638 0.881811 0.594455 0.878287 0.674863 0.861971 0.679936 0.853247 0.682681 0.85646 0.677532 0.863678 0.679936 0.853247 0.674863 0.861971 0.669846 0.86345 0.673547 0.856334 0.642738 0.826977 0.642738 0.831836 0.639674 0.831528 0.638741 0.82684 0.651056 0.826697 0.655883 0.82723 0.652697 0.831254 0.64892 0.831367 0.606236 0.86621 0.604917 0.868892 0.599566 0.863548 0.600914 0.859885 0.681469 0.826629 0.685451 0.833516 0.679931 0.844981 0.677773 0.837704 0.668876 0.826208 0.66622 0.832118 0.661082 0.829208 0.66334 0.823167 0.607943 0.863678 0.606236 0.86621 0.600914 0.859885 0.602793 0.85646 0.599567 0.863548 0.590752 0.85646 0.592599 0.851589 0.600915 0.859885 0.685908 0.863548 0.684561 0.859885 0.692877 0.851589 0.694724 0.85646 0.668876 0.826208 0.66334 0.823167 0.664345 0.813073 0.670472 0.816269 0.616599 0.826208 0.619256 0.832118 0.614437 0.837174 0.611385 0.83123 0.308453 0.487902 0.31222 0.502812 0.269422 0.510335 0.276064 0.498082 0.691019 0.878287 0.689745 0.874644 0.698301 0.870098 0.699655 0.874173 0.597095 0.840501 0.60554 0.853247 0.602795 0.85646 0.594624 0.845943 0.670004 0.848711 0.671482 0.852583 0.669359 0.857586 0.666005 0.857187 0.688381 0.840501 0.690852 0.845943 0.682681 0.85646 0.679936 0.853247 0.69414 0.885792 0.690197 0.887994 0.687529 0.88459 0.691836 0.881811 0.642738 0.821212 0.647955 0.821041 0.646733 0.82684 0.642738 0.826977 0.61547 0.848711 0.61947 0.857187 0.616115 0.857586 0.613992 0.852583 0.690852 0.845943 0.692877 0.851589 0.684561 0.859885 0.682681 0.85646 0.642738 0.821212 0.637521 0.821041 0.636619 0.813476 0.642738 0.814079 0.647955 0.821041 0.652552 0.82117 0.651056 0.826697 0.646733 0.82684 0.591336 0.885792 0.583362 0.882068 0.584625 0.878681 0.59364 0.881811 0.149845 0.581382 0.1640599 0.602933 0.153178 0.605443 0.139043 0.584815 0.149845 0.06677401 0.139043 0.06334197 0.153178 0.04271298 0.1640599 0.04522395 0.66334 0.823167 0.661082 0.829208 0.655883 0.82723 0.657847 0.821601 0.08066999 0.641226 0.071662 0.627949 0.08337599 0.61799 0.09229499 0.63065 0.663095 0.83473 0.657184 0.832079 0.661082 0.829208 0.66622 0.832118 0.616599 0.826208 0.622136 0.823167 0.624394 0.829208 0.619256 0.832118 0.679238 0.86621 0.684561 0.859885 0.685908 0.863548 0.680557 0.868892 0.611385 0.83123 0.607703 0.837704 0.604007 0.826629 0.609158 0.821014 0.687326 0.86719 0.685908 0.863548 0.694724 0.85646 0.696445 0.861908 0.66334 0.823167 0.657847 0.821601 0.658731 0.812477 0.664345 0.813073 0.617378 0.84033 0.614436 0.837174 0.619255 0.832118 0.62238 0.83473 0.184219 0.593433 0.169745 0.573779 0.174996 0.566738 0.188306 0.574247 0.652552 0.82117 0.65313 0.812137 0.658731 0.812477 0.657847 0.821601 0.139043 0.584815 0.153178 0.605443 0.141719 0.608734 0.127863 0.588639 0.594457 0.878287 0.58582 0.874173 0.587175 0.870098 0.595731 0.874644 0.652552 0.82117 0.657847 0.821601 0.655883 0.82723 0.651056 0.826697 0.680557 0.868892 0.685908 0.863548 0.687326 0.86719 0.681878 0.871712 0.679931 0.844981 0.685451 0.833516 0.688381 0.840501 0.679936 0.853247 0.127863 0.588639 0.141719 0.608734 0.129612 0.613232 0.116051 0.593721 0.169745 0.07437795 0.160546 0.06963098 0.174801 0.04824894 0.184219 0.05472397 0.594624 0.845943 0.602795 0.85646 0.600915 0.859885 0.592599 0.851589 0.687326 0.86719 0.696445 0.861908 0.697394 0.866129 0.688541 0.871066 0.681878 0.871712 0.687326 0.86719 0.688541 0.871066 0.683277 0.874711 0.594457 0.878287 0.59364 0.881811 0.584625 0.878681 0.58582 0.874173 0.689745 0.874644 0.688541 0.871066 0.697394 0.866129 0.698301 0.870098 0.607703 0.837704 0.611385 0.83123 0.614437 0.837174 0.611565 0.844343 0.611385 0.83123 0.609158 0.821014 0.615004 0.816269 0.616599 0.826208 0.605545 0.844981 0.610639 0.850461 0.611928 0.856334 0.60554 0.853247 0.116051 0.593721 0.129612 0.613232 0.117229 0.61819 0.104221 0.600311 0.104221 0.600311 0.117229 0.61819 0.105586 0.624139 0.09402596 0.607243 0.613994 0.852583 0.616117 0.857586 0.611928 0.856334 0.610639 0.850461 0.595731 0.874644 0.587175 0.870098 0.588081 0.866129 0.596935 0.871066 0.683277 0.874711 0.688541 0.871066 0.689745 0.874644 0.68458 0.877863 0.642738 0.821212 0.642738 0.814079 0.648857 0.813476 0.647955 0.821041 0.59815 0.86719 0.596935 0.871066 0.588081 0.866129 0.589031 0.861908 0.616115 0.857586 0.618578 0.862958 0.615628 0.86345 0.611927 0.856334 0.605545 0.844981 0.60554 0.853247 0.597095 0.840501 0.600024 0.833516 0.61547 0.848711 0.613992 0.852583 0.610637 0.850461 0.611564 0.844343 0.670004 0.848711 0.668097 0.84033 0.671039 0.837174 0.673911 0.844343 0.632923 0.82117 0.634419 0.826697 0.629593 0.82723 0.627628 0.821601 0.632923 0.82117 0.632345 0.812137 0.636619 0.813476 0.637521 0.821041 0.61547 0.848711 0.611564 0.844343 0.614436 0.837174 0.617378 0.84033 0.610612 0.861971 0.607943 0.863678 0.602793 0.85646 0.605539 0.853247 0.670004 0.848711 0.673911 0.844343 0.674837 0.850461 0.671482 0.852583 0.632923 0.82117 0.627628 0.821601 0.626745 0.812477 0.632345 0.812137 0.622136 0.823167 0.621131 0.813073 0.626745 0.812477 0.627628 0.821601 0.68458 0.877863 0.689745 0.874644 0.691019 0.878287 0.686005 0.880952 0.604917 0.868892 0.603596 0.871712 0.598149 0.86719 0.599566 0.863548 0.160546 0.06963098 0.149845 0.06677401 0.1640599 0.04522395 0.174801 0.04824894 0.677773 0.837704 0.673911 0.844343 0.671039 0.837174 0.674091 0.83123 0.160546 0.578526 0.174801 0.599908 0.1640599 0.602933 0.149845 0.581382 0.652552 0.82117 0.647955 0.821041 0.648857 0.813476 0.65313 0.812137 0.642738 0.821212 0.642738 0.826977 0.638743 0.82684 0.637521 0.821041 0.600894 0.877863 0.599469 0.880952 0.594455 0.878287 0.59573 0.874644 0.677532 0.863678 0.682681 0.85646 0.684561 0.859885 0.679238 0.86621 0.62238 0.83473 0.619255 0.832118 0.624393 0.829208 0.62829 0.832079 0.671482 0.852583 0.674837 0.850461 0.673547 0.856334 0.669359 0.857586 0.686005 0.880952 0.691019 0.878287 0.691836 0.881811 0.687529 0.88459 0.605545 0.844981 0.607703 0.837704 0.611565 0.844343 0.610639 0.850461 0.69414 0.885792 0.691836 0.881811 0.700851 0.878681 0.702114 0.882068 0.104221 0.04784494 0.09402596 0.04091298 0.105586 0.02401697 0.117229 0.02996599 0.169745 0.573779 0.184219 0.593433 0.174801 0.599908 0.160546 0.578526 0.616599 0.826208 0.615004 0.816269 0.621131 0.813073 0.622136 0.823167 0.08066999 0.006929993 0.09229499 0.01750695 0.08337599 0.03016698 0.071662 0.02020698 0.09402596 0.04091298 0.08337599 0.03016698 0.09229499 0.01750695 0.105586 0.02401697 0.604007 0.826629 0.607703 0.837704 0.605545 0.844981 0.600024 0.833516 0.139043 0.06334197 0.127863 0.05951797 0.141719 0.03942197 0.153178 0.04271298 0.634418 0.826697 0.636554 0.831367 0.632777 0.831254 0.629592 0.82723 0.668097 0.84033 0.663095 0.83473 0.66622 0.832118 0.671039 0.837174 0.691019 0.878287 0.699655 0.874173 0.700851 0.878681 0.691836 0.881811 0.602197 0.874711 0.600894 0.877863 0.59573 0.874644 0.596934 0.871066 0.622136 0.823167 0.627628 0.821601 0.629593 0.82723 0.624394 0.829208 0.250501 0.336611 0.252068 0.331456 0.253004 0.334979 0.252755 0.3379 0.247424 0.335261 0.243368 0.333939 0.244679 0.328831 0.249989 0.328733 0.250501 0.336611 0.251288 0.340475 0.2479889 0.340864 0.247424 0.335261 0.253358 0.327882 0.249989 0.328733 0.250504 0.32408 0.253287 0.32408 0.250501 0.311546 0.251288 0.307682 0.254322 0.305436 0.252755 0.310257 0.249989 0.319423 0.250504 0.324077 0.246159 0.324077 0.244679 0.319326 0.244679 0.328831 0.239244 0.328751 0.240328 0.32408 0.246159 0.32408 0.232192 0.310876 0.237278 0.309866 0.237875 0.314716 0.2331759 0.315054 0.243591 0.340979 0.243368 0.333939 0.247424 0.335261 0.2479889 0.340864 0.255976 0.329402 0.253676 0.330761 0.253358 0.327882 0.255422 0.327294 0.239244 0.328751 0.234309 0.328917 0.2354609 0.32408 0.240328 0.32408 0.253676 0.317396 0.254251 0.315499 0.256372 0.317315 0.255976 0.318754 0.239244 0.328751 0.237875 0.33344 0.2331759 0.333103 0.234309 0.328917 0.250501 0.336611 0.252755 0.3379 0.254322 0.342721 0.251288 0.340475 0.232192 0.33728 0.237278 0.338291 0.235189 0.343107 0.230565 0.341343 0.232192 0.310876 0.230565 0.306814 0.235189 0.30505 0.237278 0.309866 0.243591 0.340979 0.237278 0.338291 0.237875 0.33344 0.243368 0.333939 0.253676 0.330761 0.252068 0.331456 0.249989 0.328733 0.253358 0.327882 0.239244 0.319406 0.240328 0.324077 0.2354609 0.324077 0.234309 0.31924 0.239244 0.319406 0.234309 0.31924 0.2331759 0.315054 0.237875 0.314716 0.253004 0.313178 0.254251 0.315499 0.253676 0.317396 0.252068 0.316701 0.243368 0.333939 0.237875 0.33344 0.239244 0.328751 0.244679 0.328831 0.240877 0.303505 0.243591 0.307177 0.237278 0.309866 0.235189 0.30505 0.232192 0.33728 0.2331759 0.333103 0.237875 0.33344 0.237278 0.338291 0.255976 0.318754 0.255422 0.320863 0.253358 0.320275 0.253676 0.317396 0.243368 0.314218 0.244679 0.319326 0.239244 0.319406 0.237875 0.314716 0.250501 0.311546 0.247424 0.312895 0.2479889 0.307292 0.251288 0.307682 0.252068 0.331456 0.253676 0.330761 0.254251 0.332658 0.253004 0.334979 0.240877 0.344651 0.235189 0.343107 0.237278 0.338291 0.243591 0.340979 0.243591 0.307177 0.243368 0.314218 0.237875 0.314716 0.237278 0.309866 0.244679 0.319326 0.246159 0.324077 0.240328 0.324077 0.239244 0.319406 0.249989 0.319423 0.252068 0.316701 0.253676 0.317396 0.253358 0.320275 0.250501 0.311546 0.252068 0.316701 0.249989 0.319423 0.247424 0.312895 0.249989 0.328733 0.244679 0.328831 0.246159 0.32408 0.250504 0.32408 0.253676 0.330761 0.255976 0.329402 0.256372 0.330842 0.254251 0.332658 0.250501 0.311546 0.252755 0.310257 0.253004 0.313178 0.252068 0.316701 0.243591 0.307177 0.2479889 0.307292 0.247424 0.312895 0.243368 0.314218 0.25536 0.324077 0.253287 0.324077 0.253358 0.320275 0.255422 0.320863 0.247424 0.312895 0.249989 0.319423 0.244679 0.319326 0.243368 0.314218 0.250501 0.336611 0.247424 0.335261 0.249989 0.328733 0.252068 0.331456 0.255422 0.327294 0.253358 0.327882 0.253287 0.32408 0.25536 0.32408 0.250504 0.324077 0.249989 0.319423 0.253358 0.320275 0.253287 0.324077 0.197686 0.31428 0.205873 0.314208 0.20678 0.319127 0.198239 0.319232 0.212153 0.307784 0.216677 0.310338 0.216437 0.314919 0.212161 0.314355 0.2153069 0.344418 0.212153 0.340373 0.216677 0.337818 0.2183859 0.342019 0.205873 0.314208 0.212161 0.314355 0.212371 0.319098 0.20678 0.319127 0.212371 0.319098 0.212719 0.324077 0.207269 0.324077 0.20678 0.319127 0.204268 0.339179 0.205873 0.333948 0.212161 0.333802 0.212153 0.340373 0.197686 0.333877 0.198239 0.328924 0.20678 0.329029 0.205873 0.333948 0.212153 0.340373 0.212161 0.333802 0.216437 0.333238 0.216677 0.337818 0.20678 0.329029 0.198239 0.328924 0.198593 0.32408 0.207269 0.32408 0.205873 0.333948 0.20678 0.329029 0.212371 0.329059 0.212161 0.333802 0.2153069 0.303738 0.2183859 0.306138 0.216677 0.310338 0.212153 0.307784 0.20678 0.319127 0.207269 0.324077 0.198593 0.324077 0.198239 0.319232 0.204268 0.308978 0.212153 0.307784 0.212161 0.314355 0.205873 0.314208 0.212371 0.329059 0.20678 0.329029 0.207269 0.32408 0.212719 0.32408 0.273713 0.332756 0.276466 0.332211 0.276683 0.338004 0.27231 0.340476 0.277726 0.326886 0.27738 0.32408 0.28117 0.32408 0.280532 0.326677 0.273713 0.332756 0.2743 0.329349 0.2772 0.329219 0.276466 0.332211 0.2743 0.318807 0.2772 0.318938 0.277726 0.321271 0.274595 0.321503 0.270487 0.328353 0.268418 0.327556 0.268226 0.32594 0.270625 0.326182 0.270853 0.324077 0.270625 0.321975 0.274595 0.321503 0.274729 0.324077 0.274595 0.326654 0.2743 0.329349 0.270487 0.328353 0.270625 0.326182 0.2772 0.329219 0.277726 0.326886 0.280532 0.326677 0.280415 0.328875 0.273713 0.3154 0.276466 0.315946 0.2772 0.318938 0.2743 0.318807 0.265612 0.327443 0.264204 0.325907 0.268226 0.32594 0.268418 0.327556 0.2743 0.318807 0.274595 0.321503 0.270625 0.321975 0.270487 0.319804 0.273713 0.3154 0.27231 0.30768 0.276683 0.310152 0.276466 0.315946 0.270625 0.326182 0.268226 0.32594 0.267764 0.32408 0.270853 0.32408 0.264416 0.324077 0.264204 0.322249 0.268226 0.322216 0.267764 0.324077 0.274595 0.326654 0.270625 0.326182 0.270853 0.32408 0.274729 0.32408 0.270487 0.319804 0.270625 0.321975 0.268226 0.322216 0.268418 0.320601 0.264416 0.32408 0.267764 0.32408 0.268226 0.32594 0.264204 0.325907 0.270853 0.324077 0.267764 0.324077 0.268226 0.322216 0.270625 0.321975 0.2743 0.329349 0.274595 0.326654 0.277726 0.326886 0.2772 0.329219 0.277726 0.321271 0.280532 0.32148 0.28117 0.324077 0.27738 0.324077 0.265612 0.320713 0.268418 0.320601 0.268226 0.322216 0.264204 0.322249 0.2772 0.318938 0.280415 0.319282 0.280532 0.32148 0.277726 0.321271 0.276466 0.332211 0.280693 0.332141 0.282841 0.334835 0.276683 0.338004 0.274595 0.326654 0.274729 0.32408 0.27738 0.32408 0.277726 0.326886 0.276466 0.315946 0.280693 0.316015 0.280415 0.319282 0.2772 0.318938 0.276466 0.332211 0.2772 0.329219 0.280415 0.328875 0.280693 0.332141 0.274595 0.321503 0.277726 0.321271 0.27738 0.324077 0.274729 0.324077 0.276466 0.315946 0.276683 0.310152 0.282841 0.313322 0.280693 0.316015 0.224005 0.336604 0.2205049 0.336932 0.220259 0.33281 0.224277 0.332443 0.224005 0.336604 0.224277 0.332443 0.228706 0.332641 0.2278 0.336723 0.212371 0.329059 0.212719 0.32408 0.216997 0.32408 0.216516 0.328912 0.216677 0.337818 0.216437 0.333238 0.220259 0.33281 0.2205049 0.336932 0.229258 0.319303 0.228706 0.315516 0.2331759 0.315054 0.234309 0.31924 0.228706 0.332641 0.224277 0.332443 0.224489 0.328789 0.229258 0.328854 0.220286 0.328802 0.224489 0.328789 0.224277 0.332443 0.220259 0.33281 0.212371 0.319098 0.212161 0.314355 0.216437 0.314919 0.216516 0.319245 0.224489 0.319367 0.225349 0.324077 0.220368 0.324077 0.220286 0.319355 0.224005 0.311552 0.2239879 0.308141 0.227003 0.307808 0.2278 0.311434 0.212371 0.319098 0.216516 0.319245 0.216997 0.324077 0.212719 0.324077 0.229258 0.328854 0.224489 0.328789 0.225349 0.32408 0.230155 0.32408 0.220286 0.319355 0.216516 0.319245 0.216437 0.314919 0.220259 0.315347 0.229258 0.319303 0.230155 0.324077 0.225349 0.324077 0.224489 0.319367 0.216677 0.310338 0.2183859 0.306138 0.221195 0.307594 0.2205049 0.311225 0.232192 0.310876 0.2331759 0.315054 0.228706 0.315516 0.2278 0.311434 0.224489 0.328789 0.220286 0.328802 0.220368 0.32408 0.225349 0.32408 0.228706 0.315516 0.229258 0.319303 0.224489 0.319367 0.224277 0.315713 0.220286 0.319355 0.220368 0.324077 0.216997 0.324077 0.216516 0.319245 0.224005 0.311552 0.224277 0.315713 0.220259 0.315347 0.2205049 0.311225 0.232192 0.310876 0.2278 0.311434 0.227003 0.307808 0.230565 0.306814 0.224005 0.311552 0.2278 0.311434 0.228706 0.315516 0.224277 0.315713 0.224005 0.336604 0.2239879 0.340016 0.221195 0.340562 0.2205049 0.336932 0.229258 0.328854 0.234309 0.328917 0.2331759 0.333103 0.228706 0.332641 0.220286 0.328802 0.216516 0.328912 0.216997 0.32408 0.220368 0.32408 0.216677 0.310338 0.2205049 0.311225 0.220259 0.315347 0.216437 0.314919 0.224005 0.311552 0.2205049 0.311225 0.221195 0.307594 0.2239879 0.308141 0.232192 0.33728 0.230565 0.341343 0.227003 0.340348 0.2278 0.336723 0.229258 0.328854 0.230155 0.32408 0.2354609 0.32408 0.234309 0.328917 0.220286 0.328802 0.220259 0.33281 0.216437 0.333238 0.216516 0.328912 0.220286 0.319355 0.220259 0.315347 0.224277 0.315713 0.224489 0.319367 0.216677 0.337818 0.2205049 0.336932 0.221195 0.340562 0.2183859 0.342019 0.232192 0.33728 0.2278 0.336723 0.228706 0.332641 0.2331759 0.333103 0.212371 0.329059 0.216516 0.328912 0.216437 0.333238 0.212161 0.333802 0.229258 0.319303 0.234309 0.31924 0.2354609 0.324077 0.230155 0.324077 0.224005 0.336604 0.2278 0.336723 0.227003 0.340348 0.2239879 0.340016 0.260923 0.328477 0.262663 0.327389 0.263255 0.32848 0.261426 0.330627 0.260625 0.327352 0.261904 0.326794 0.262663 0.327389 0.260923 0.328477 0.261847 0.324077 0.261986 0.322608 0.264204 0.322249 0.264416 0.324077 0.260923 0.31968 0.261426 0.317529 0.263255 0.319676 0.262663 0.320767 0.262663 0.327389 0.261904 0.326794 0.261986 0.325548 0.264204 0.325907 0.257993 0.324077 0.258443 0.321769 0.260338 0.322107 0.260217 0.324077 0.258443 0.326388 0.255422 0.327294 0.25536 0.32408 0.257993 0.32408 0.260625 0.327352 0.260338 0.32605 0.261986 0.325548 0.261904 0.326794 0.265612 0.320713 0.264204 0.322249 0.262663 0.320767 0.263255 0.319676 0.257993 0.324077 0.25536 0.324077 0.255422 0.320863 0.258443 0.321769 0.258443 0.326388 0.257993 0.32408 0.260217 0.32408 0.260338 0.32605 0.258749 0.319996 0.260625 0.320804 0.260338 0.322107 0.258443 0.321769 0.258749 0.319996 0.258952 0.318349 0.260923 0.31968 0.260625 0.320804 0.258749 0.32816 0.255976 0.329402 0.255422 0.327294 0.258443 0.326388 0.258749 0.319996 0.258443 0.321769 0.255422 0.320863 0.255976 0.318754 0.258749 0.32816 0.260625 0.327352 0.260923 0.328477 0.258952 0.329807 0.262663 0.320767 0.264204 0.322249 0.261986 0.322608 0.261904 0.321363 0.261986 0.325548 0.260338 0.32605 0.260217 0.32408 0.261847 0.32408 0.258749 0.32816 0.258443 0.326388 0.260338 0.32605 0.260625 0.327352 0.261986 0.325548 0.261847 0.32408 0.264416 0.32408 0.264204 0.325907 0.260625 0.320804 0.260923 0.31968 0.262663 0.320767 0.261904 0.321363 0.260625 0.320804 0.261904 0.321363 0.261986 0.322608 0.260338 0.322107 0.265612 0.327443 0.263255 0.32848 0.262663 0.327389 0.264204 0.325907 0.261847 0.324077 0.260217 0.324077 0.260338 0.322107 0.261986 0.322608 0.207918 0.47988 0.209717 0.478002 0.210446 0.479351 0.2097859 0.480324 0.1710799 0.48029 0.176643 0.473767 0.183743 0.48511 0.180572 0.492099 0.210286 0.482621 0.210003 0.483655 0.208563 0.482888 0.208033 0.481502 0.208154 0.485771 0.209024 0.486383 0.208139 0.48706 0.207311 0.486215 0.211696 0.482132 0.210286 0.482621 0.208033 0.481502 0.207918 0.47988 0.209024 0.486383 0.2100459 0.486958 0.209229 0.487772 0.208139 0.48706 0.2026039 0.485796 0.204711 0.485296 0.206345 0.4866 0.2046779 0.487956 0.209894 0.48559 0.210702 0.486082 0.2100459 0.486958 0.209024 0.486383 0.207998 0.49003 0.208949 0.488396 0.210624 0.489094 0.2098979 0.491056 0.209024 0.486383 0.208154 0.485771 0.209202 0.485012 0.209894 0.48559 0.206558 0.489124 0.207558 0.487671 0.208949 0.488396 0.207998 0.49003 0.209626 0.484551 0.210254 0.485103 0.209894 0.48559 0.209202 0.485012 0.2046779 0.487956 0.206345 0.4866 0.207558 0.487671 0.206558 0.489124 0.210702 0.486082 0.209894 0.48559 0.210254 0.485103 0.211088 0.485577 0.204711 0.485296 0.2026039 0.485796 0.2005749 0.483201 0.203644 0.483713 0.210003 0.483655 0.210732 0.484095 0.210254 0.485103 0.209626 0.484551 0.1967149 0.483679 0.20017 0.486202 0.202092 0.488706 0.19831 0.487396 0.1672199 0.487179 0.1710799 0.48029 0.180572 0.492099 0.177021 0.498457 0.202388 0.492346 0.206176 0.491769 0.2082149 0.492938 0.204713 0.494144 0.191323 0.463182 0.199315 0.459675 0.20029 0.47151 0.192719 0.476304 0.212405 0.479296 0.210446 0.479351 0.209717 0.478002 0.210348 0.47642 0.2030799 0.474505 0.20029 0.47151 0.210788 0.468852 0.209993 0.471424 0.204711 0.485296 0.205893 0.485124 0.207311 0.486215 0.206345 0.4866 0.206176 0.491769 0.207998 0.49003 0.2098979 0.491056 0.2082149 0.492938 0.208949 0.488396 0.209229 0.487772 0.210526 0.488418 0.210624 0.489094 0.2004539 0.49031 0.204317 0.490497 0.206176 0.491769 0.202388 0.492346 0.207558 0.487671 0.208139 0.48706 0.209229 0.487772 0.208949 0.488396 0.204317 0.490497 0.206558 0.489124 0.207998 0.49003 0.206176 0.491769 0.206345 0.4866 0.207311 0.486215 0.208139 0.48706 0.207558 0.487671 0.19831 0.487396 0.202092 0.488706 0.204317 0.490497 0.2004539 0.49031 0.211587 0.486477 0.212833 0.4868 0.212315 0.487955 0.21112 0.48754 0.202092 0.488706 0.2046779 0.487956 0.206558 0.489124 0.204317 0.490497 0.207248 0.481631 0.207903 0.48317 0.206526 0.483657 0.2059389 0.481751 0.20017 0.486202 0.1967149 0.483679 0.196826 0.479914 0.199116 0.483817 0.207903 0.48317 0.208329 0.483874 0.207244 0.484682 0.206526 0.483657 0.2005749 0.483201 0.2026039 0.485796 0.20017 0.486202 0.199116 0.483817 0.2059389 0.481751 0.206526 0.483657 0.204985 0.483815 0.2035239 0.480421 0.2030799 0.474505 0.204535 0.476553 0.2035239 0.480421 0.201786 0.47961 0.206526 0.483657 0.207244 0.484682 0.205893 0.485124 0.204985 0.483815 0.198776 0.477496 0.20029 0.47151 0.2030799 0.474505 0.201786 0.47961 0.211782 0.488819 0.210526 0.488418 0.21112 0.48754 0.212315 0.487955 0.207248 0.481631 0.207113 0.479235 0.207918 0.47988 0.208033 0.481502 0.2005749 0.483201 0.199116 0.483817 0.196826 0.479914 0.198776 0.477496 0.211953 0.485921 0.212978 0.486228 0.212833 0.4868 0.211587 0.486477 0.20017 0.486202 0.2026039 0.485796 0.2046779 0.487956 0.202092 0.488706 0.207248 0.481631 0.2059389 0.481751 0.206351 0.478223 0.207113 0.479235 0.198776 0.477496 0.201786 0.47961 0.203644 0.483713 0.2005749 0.483201 0.208033 0.481502 0.208563 0.482888 0.207903 0.48317 0.207248 0.481631 0.2059389 0.481751 0.2035239 0.480421 0.204535 0.476553 0.206351 0.478223 0.210788 0.468852 0.20029 0.47151 0.199315 0.459675 0.209159 0.458994 0.208563 0.482888 0.208909 0.483591 0.208329 0.483874 0.207903 0.48317 0.206351 0.478223 0.204535 0.476553 0.209347 0.474071 0.209703 0.475387 0.176643 0.473767 0.183555 0.468128 0.187611 0.479341 0.183743 0.48511 0.207113 0.479235 0.206351 0.478223 0.209703 0.475387 0.210348 0.47642 0.183555 0.468128 0.191323 0.463182 0.192719 0.476304 0.187611 0.479341 0.210702 0.486082 0.211587 0.486477 0.21112 0.48754 0.2100459 0.486958 0.2035239 0.480421 0.204985 0.483815 0.203644 0.483713 0.201786 0.47961 0.208329 0.483874 0.209202 0.485012 0.208154 0.485771 0.207244 0.484682 0.204985 0.483815 0.205893 0.485124 0.204711 0.485296 0.203644 0.483713 0.207244 0.484682 0.208154 0.485771 0.207311 0.486215 0.205893 0.485124 0.210526 0.488418 0.211782 0.488819 0.211852 0.489722 0.210624 0.489094 0.210526 0.488418 0.209229 0.487772 0.2100459 0.486958 0.21112 0.48754 0.207113 0.479235 0.210348 0.47642 0.209717 0.478002 0.207918 0.47988 0.211587 0.486477 0.210702 0.486082 0.211088 0.485577 0.211953 0.485921 0.210732 0.484095 0.211567 0.484548 0.211088 0.485577 0.210254 0.485103 0.210003 0.483655 0.209626 0.484551 0.208909 0.483591 0.208563 0.482888 0.211567 0.484548 0.2128019 0.484982 0.211953 0.485921 0.211088 0.485577 0.208909 0.483591 0.209626 0.484551 0.209202 0.485012 0.208329 0.483874 0.204535 0.476553 0.2030799 0.474505 0.209993 0.471424 0.209347 0.474071 0.225049 0.475118 0.224002 0.475425 0.223204 0.473619 0.2247509 0.473644 0.215848 0.483181 0.2151899 0.48281 0.2159219 0.482183 0.216883 0.482696 0.211567 0.484548 0.21242 0.48382 0.2132019 0.484256 0.2128019 0.484982 0.226312 0.484355 0.2298009 0.481605 0.23232 0.483927 0.227749 0.485305 0.224002 0.475425 0.223166 0.475951 0.221695 0.473797 0.223204 0.473619 0.21242 0.48382 0.213329 0.483056 0.21407 0.48355 0.2132019 0.484256 0.21407 0.48355 0.213329 0.483056 0.214471 0.482337 0.2151899 0.48281 0.21407 0.48355 0.21492 0.483991 0.214114 0.48478 0.2132019 0.484256 0.2228879 0.477116 0.221177 0.477352 0.221114 0.476153 0.223166 0.475951 0.211696 0.482132 0.210976 0.480856 0.211524 0.480643 0.213014 0.481044 0.218932 0.459797 0.218078 0.46994 0.210788 0.468852 0.209159 0.458994 0.220227 0.470954 0.224992 0.471102 0.2247509 0.473644 0.223204 0.473619 0.21492 0.483991 0.21605 0.484248 0.215085 0.485108 0.214114 0.48478 0.221177 0.477352 0.219576 0.478031 0.219144 0.476799 0.221114 0.476153 0.2151899 0.48281 0.214471 0.482337 0.2154549 0.481801 0.2159219 0.482183 0.222948 0.478154 0.2214249 0.478718 0.221177 0.477352 0.2228879 0.477116 0.219144 0.476799 0.219576 0.478031 0.217741 0.478154 0.217396 0.476686 0.2296119 0.468517 0.224992 0.471102 0.220227 0.470954 0.218078 0.46994 0.221728 0.484108 0.221987 0.483209 0.225626 0.483373 0.226312 0.484355 0.2214249 0.478718 0.219783 0.479175 0.219576 0.478031 0.221177 0.477352 0.219576 0.478031 0.219783 0.479175 0.218323 0.479042 0.217741 0.478154 0.226312 0.484355 0.222656 0.485865 0.22154 0.484627 0.221728 0.484108 0.21741 0.479316 0.216996 0.478474 0.217741 0.478154 0.218323 0.479042 0.228397 0.481338 0.2298009 0.481605 0.226312 0.484355 0.225626 0.483373 0.2117429 0.483238 0.212706 0.482547 0.213329 0.483056 0.21242 0.48382 0.216996 0.478474 0.2163619 0.477324 0.217396 0.476686 0.217741 0.478154 0.213014 0.481044 0.214622 0.480505 0.215028 0.48132 0.213817 0.48174 0.210003 0.483655 0.210286 0.482621 0.2117429 0.483238 0.210732 0.484095 0.213329 0.483056 0.212706 0.482547 0.213817 0.48174 0.214471 0.482337 0.210446 0.479351 0.212405 0.479296 0.213014 0.481044 0.211524 0.480643 0.240638 0.47067 0.236977 0.473833 0.232243 0.471724 0.2296119 0.468517 0.212706 0.482547 0.211696 0.482132 0.213014 0.481044 0.213817 0.48174 0.2132019 0.484256 0.214114 0.48478 0.213723 0.485255 0.2128019 0.484982 0.210732 0.484095 0.2117429 0.483238 0.21242 0.48382 0.211567 0.484548 0.224265 0.480988 0.225643 0.480983 0.228397 0.481338 0.225626 0.483373 0.236977 0.473833 0.234575 0.474805 0.231232 0.474592 0.232243 0.471724 0.214471 0.482337 0.213817 0.48174 0.215028 0.48132 0.2154549 0.481801 0.225626 0.483373 0.221987 0.483209 0.222458 0.482377 0.224265 0.480988 0.233063 0.480249 0.2298009 0.481605 0.228397 0.481338 0.230534 0.47937 0.234245 0.476523 0.2315649 0.476221 0.231232 0.474592 0.234575 0.474805 0.2154549 0.481801 0.215028 0.48132 0.215813 0.479794 0.216406 0.480662 0.22338 0.479601 0.222948 0.478154 0.224243 0.477934 0.224472 0.478772 0.234245 0.476523 0.233063 0.480249 0.230534 0.47937 0.2315649 0.476221 0.2159219 0.482183 0.2154549 0.481801 0.216406 0.480662 0.217172 0.481131 0.226651 0.475028 0.2315649 0.476221 0.2296169 0.476843 0.226962 0.475799 0.248842 0.474615 0.244542 0.475326 0.236977 0.473833 0.240638 0.47067 0.216883 0.482696 0.2159219 0.482183 0.217172 0.481131 0.21777 0.481375 0.225049 0.475118 0.226651 0.475028 0.226962 0.475799 0.225791 0.476273 0.244542 0.475326 0.241856 0.475963 0.234575 0.474805 0.236977 0.473833 0.218142 0.484127 0.21605 0.484248 0.217029 0.483449 0.218589 0.483374 0.224265 0.480988 0.22338 0.479601 0.224472 0.478772 0.22528 0.479566 0.227071 0.47376 0.2296119 0.468517 0.232243 0.471724 0.231232 0.474592 0.221987 0.483209 0.221728 0.484108 0.218142 0.484127 0.218589 0.483374 0.225643 0.480983 0.224265 0.480988 0.22528 0.479566 0.227248 0.479391 0.209347 0.474071 0.21489 0.473613 0.213505 0.474636 0.209703 0.475387 0.217799 0.480083 0.218372 0.479974 0.2189739 0.481076 0.218519 0.481508 0.228397 0.481338 0.225643 0.480983 0.227248 0.479391 0.228978 0.479207 0.21489 0.473613 0.21813 0.475028 0.216803 0.475241 0.213505 0.474636 0.2097859 0.480324 0.210446 0.479351 0.211524 0.480643 0.210976 0.480856 0.2228879 0.477116 0.223166 0.475951 0.224836 0.476689 0.224265 0.47738 0.2296119 0.468517 0.227071 0.47376 0.2247509 0.473644 0.224992 0.471102 0.214114 0.48478 0.215085 0.485108 0.214618 0.48567 0.213723 0.485255 0.211696 0.482132 0.212706 0.482547 0.2117429 0.483238 0.210286 0.482621 0.222948 0.478154 0.2228879 0.477116 0.224265 0.47738 0.224243 0.477934 0.21813 0.475028 0.220425 0.473743 0.221114 0.476153 0.219144 0.476799 0.21741 0.479316 0.217799 0.480083 0.217172 0.481131 0.216406 0.480662 0.230534 0.47937 0.228397 0.481338 0.228978 0.479207 0.2294459 0.477222 0.220425 0.473743 0.221695 0.473797 0.223166 0.475951 0.221114 0.476153 0.2196699 0.481951 0.222458 0.482377 0.221987 0.483209 0.218589 0.483374 0.2315649 0.476221 0.230534 0.47937 0.2294459 0.477222 0.2296169 0.476843 0.219783 0.479175 0.2214249 0.478718 0.221728 0.480243 0.219892 0.480201 0.218589 0.483374 0.217029 0.483449 0.215848 0.483181 0.216883 0.482696 0.2214249 0.478718 0.222948 0.478154 0.22338 0.479601 0.221728 0.480243 0.218078 0.46994 0.220227 0.470954 0.223204 0.473619 0.221695 0.473797 0.218519 0.481508 0.2189739 0.481076 0.2196699 0.481951 0.218589 0.483374 0.215085 0.485108 0.21605 0.484248 0.218142 0.484127 0.216977 0.48518 0.223166 0.475951 0.224002 0.475425 0.2252849 0.476452 0.224836 0.476689 0.218589 0.483374 0.216883 0.482696 0.21777 0.481375 0.218519 0.481508 0.220425 0.473743 0.21813 0.475028 0.21489 0.473613 0.216177 0.472003 0.224002 0.475425 0.225049 0.475118 0.225791 0.476273 0.2252849 0.476452 0.215813 0.479794 0.215184 0.477206 0.2163619 0.477324 0.216996 0.478474 0.221695 0.473797 0.220425 0.473743 0.216177 0.472003 0.218078 0.46994 0.234245 0.476523 0.234575 0.474805 0.241856 0.475963 0.239067 0.47745 0.216996 0.478474 0.21741 0.479316 0.216406 0.480662 0.215813 0.479794 0.216177 0.472003 0.21489 0.473613 0.209347 0.474071 0.209993 0.471424 0.216803 0.475241 0.21813 0.475028 0.219144 0.476799 0.217396 0.476686 0.214488 0.479393 0.213942 0.477946 0.215184 0.477206 0.215813 0.479794 0.218078 0.46994 0.216177 0.472003 0.209993 0.471424 0.210788 0.468852 0.218932 0.459797 0.232345 0.461145 0.2296119 0.468517 0.218078 0.46994 0.218323 0.479042 0.219783 0.479175 0.219892 0.480201 0.218372 0.479974 0.240638 0.47067 0.2296119 0.468517 0.232345 0.461145 0.247591 0.463113 0.215813 0.479794 0.215028 0.48132 0.214622 0.480505 0.214488 0.479393 0.219892 0.480201 0.221728 0.480243 0.222458 0.482377 0.2196699 0.481951 0.215412 0.475879 0.213247 0.475429 0.213505 0.474636 0.216803 0.475241 0.217396 0.476686 0.2163619 0.477324 0.215412 0.475879 0.216803 0.475241 0.214488 0.479393 0.214622 0.480505 0.213014 0.481044 0.212405 0.479296 0.213247 0.475429 0.210348 0.47642 0.209703 0.475387 0.213505 0.474636 0.218372 0.479974 0.217799 0.480083 0.21741 0.479316 0.218323 0.479042 0.207918 0.47988 0.2097859 0.480324 0.210976 0.480856 0.211696 0.482132 0.227071 0.47376 0.231232 0.474592 0.2315649 0.476221 0.226651 0.475028 0.213942 0.477946 0.214488 0.479393 0.212405 0.479296 0.210348 0.47642 0.221728 0.480243 0.22338 0.479601 0.224265 0.480988 0.222458 0.482377 0.227071 0.47376 0.226651 0.475028 0.225049 0.475118 0.2247509 0.473644 0.214618 0.48567 0.215085 0.485108 0.216977 0.48518 0.21685 0.486089 0.213247 0.475429 0.215412 0.475879 0.2163619 0.477324 0.215184 0.477206 0.21605 0.484248 0.21492 0.483991 0.215848 0.483181 0.217029 0.483449 0.21685 0.486089 0.216977 0.48518 0.22154 0.484627 0.222656 0.485865 0.235493 0.484149 0.23232 0.483927 0.2298009 0.481605 0.233063 0.480249 0.215184 0.477206 0.213942 0.477946 0.210348 0.47642 0.213247 0.475429 0.21492 0.483991 0.21407 0.48355 0.2151899 0.48281 0.215848 0.483181 0.216977 0.48518 0.218142 0.484127 0.221728 0.484108 0.22154 0.484627 0.217172 0.481131 0.217799 0.480083 0.218519 0.481508 0.21777 0.481375 0.218372 0.479974 0.219892 0.480201 0.2196699 0.481951 0.2189739 0.481076 0.241363 0.486615 0.244397 0.487185 0.240846 0.49199 0.239062 0.489579 0.664999 0.862551 0.666005 0.857187 0.669359 0.857586 0.666896 0.862958 0.240113 0.479488 0.244116 0.479655 0.243321 0.483614 0.240433 0.482974 0.234245 0.476523 0.239067 0.47745 0.240113 0.479488 0.233063 0.480249 0.244397 0.487185 0.248933 0.48935 0.245916 0.492775 0.240846 0.49199 0.271873 0.47497 0.261714 0.469212 0.277363 0.456431 0.290377 0.463952 0.233063 0.480249 0.240113 0.479488 0.240433 0.482974 0.235493 0.484149 0.235493 0.486484 0.239612 0.486251 0.238264 0.488465 0.235004 0.489093 0.254547 0.498353 0.276064 0.498082 0.269422 0.510335 0.2453539 0.505366 0.239612 0.486251 0.241363 0.486615 0.239062 0.489579 0.238264 0.488465 0.261211 0.484847 0.278014 0.481893 0.278699 0.489425 0.258163 0.491275 0.278014 0.481893 0.261211 0.484847 0.258451 0.479138 0.271873 0.47497 0.235493 0.484149 0.240433 0.482974 0.239612 0.486251 0.235493 0.486484 0.248842 0.474615 0.261714 0.469212 0.271873 0.47497 0.258451 0.479138 0.246954 0.48379 0.251472 0.485813 0.248933 0.48935 0.244397 0.487185 0.1958259 0.565422 0.188306 0.574247 0.17729 0.552918 0.1849189 0.551812 0.240113 0.479488 0.239067 0.47745 0.241856 0.475963 0.244116 0.479655 0.243321 0.483614 0.246954 0.48379 0.244397 0.487185 0.241363 0.486615 0.239062 0.489579 0.240846 0.49199 0.237028 0.493041 0.235716 0.491476 0.235004 0.489093 0.238264 0.488465 0.239062 0.489579 0.235716 0.491476 0.244542 0.475326 0.248842 0.474615 0.251997 0.481732 0.2471629 0.480104 0.244116 0.479655 0.2471629 0.480104 0.246954 0.48379 0.243321 0.483614 0.237028 0.493041 0.240846 0.49199 0.245916 0.492775 0.238607 0.498194 0.241856 0.475963 0.244542 0.475326 0.2471629 0.480104 0.244116 0.479655 0.191817 0.548671 0.201144 0.559925 0.1958259 0.565422 0.1849189 0.551812 0.298549 0.470479 0.278014 0.481893 0.271873 0.47497 0.290377 0.463952 0.261714 0.469212 0.248842 0.474615 0.240638 0.47067 0.247591 0.463113 0.2471629 0.480104 0.251997 0.481732 0.251472 0.485813 0.246954 0.48379 0.240433 0.482974 0.243321 0.483614 0.241363 0.486615 0.239612 0.486251 0.258163 0.491275 0.278699 0.489425 0.276064 0.498082 0.254547 0.498353 0.213243 0.48922 0.211782 0.488819 0.212315 0.487955 0.213685 0.488277 0.224718 0.487581 0.216683 0.487352 0.2167299 0.486952 0.223694 0.486935 0.2323279 0.489063 0.235004 0.489093 0.235716 0.491476 0.2332749 0.491212 0.230381 0.4963 0.238607 0.498194 0.231404 0.500073 0.225916 0.498722 0.224718 0.487581 0.22466 0.489431 0.216311 0.488569 0.216683 0.487352 0.216373 0.489933 0.215987 0.49103 0.213488 0.490179 0.213243 0.48922 0.220912 0.494941 0.220736 0.49692 0.216635 0.496381 0.216093 0.493593 0.212978 0.486228 0.214196 0.486564 0.214249 0.487076 0.212833 0.4868 0.234033 0.493551 0.230381 0.4963 0.225273 0.495645 0.2297289 0.492673 0.211446 0.491839 0.210364 0.493978 0.2082149 0.492938 0.2098979 0.491056 0.187894 0.528941 0.175786 0.528022 0.1723 0.518836 0.18431 0.523224 0.22466 0.489431 0.228184 0.489092 0.22914 0.491277 0.22458 0.491117 0.220736 0.49692 0.21973 0.498862 0.215296 0.498026 0.216635 0.496381 0.235493 0.486484 0.232069 0.486218 0.23232 0.483927 0.235493 0.484149 0.22466 0.489431 0.22458 0.491117 0.216373 0.489933 0.216311 0.488569 0.222656 0.485865 0.223694 0.486935 0.2167299 0.486952 0.21685 0.486089 0.224297 0.497203 0.225273 0.495645 0.230381 0.4963 0.225916 0.498722 0.175786 0.528022 0.187894 0.528941 0.192237 0.535776 0.181766 0.537331 0.225916 0.498722 0.21973 0.498862 0.220736 0.49692 0.224297 0.497203 0.235716 0.491476 0.237028 0.493041 0.234033 0.493551 0.2332749 0.491212 0.228184 0.489092 0.2323279 0.489063 0.2332749 0.491212 0.22914 0.491277 0.235004 0.489093 0.2323279 0.489063 0.232069 0.486218 0.235493 0.486484 0.213723 0.485255 0.214618 0.48567 0.214196 0.486564 0.212978 0.486228 0.213488 0.490179 0.213384 0.49263 0.211446 0.491839 0.211852 0.489722 0.223694 0.486935 0.222656 0.485865 0.226312 0.484355 0.227749 0.485305 0.210364 0.493978 0.2079499 0.495572 0.204713 0.494144 0.2082149 0.492938 0.201038 0.542618 0.191817 0.548671 0.181766 0.537331 0.192237 0.535776 0.22458 0.491117 0.224776 0.492739 0.215987 0.49103 0.216373 0.489933 0.22914 0.491277 0.2297289 0.492673 0.224776 0.492739 0.22458 0.491117 0.211782 0.488819 0.213243 0.48922 0.213488 0.490179 0.211852 0.489722 0.216093 0.493593 0.216635 0.496381 0.21325 0.4954 0.213384 0.49263 0.214249 0.487076 0.214196 0.486564 0.2167299 0.486952 0.216683 0.487352 0.213384 0.49263 0.21325 0.4954 0.210364 0.493978 0.211446 0.491839 0.662138 0.860567 0.666005 0.857187 0.664999 0.862551 0.661984 0.862865 0.191817 0.548671 0.201038 0.542618 0.20642 0.549356 0.201144 0.559925 0.212833 0.4868 0.214249 0.487076 0.213685 0.488277 0.212315 0.487955 0.2332749 0.491212 0.234033 0.493551 0.2297289 0.492673 0.22914 0.491277 0.215987 0.49103 0.216093 0.493593 0.213384 0.49263 0.213488 0.490179 0.224718 0.487581 0.227906 0.48706 0.228184 0.489092 0.22466 0.489431 0.216635 0.496381 0.215296 0.498026 0.211719 0.497154 0.21325 0.4954 0.2128019 0.484982 0.213723 0.485255 0.212978 0.486228 0.211953 0.485921 0.214196 0.486564 0.214618 0.48567 0.21685 0.486089 0.2167299 0.486952 0.21325 0.4954 0.211719 0.497154 0.2079499 0.495572 0.210364 0.493978 0.228184 0.489092 0.227906 0.48706 0.232069 0.486218 0.2323279 0.489063 0.2297289 0.492673 0.225273 0.495645 0.220912 0.494941 0.224776 0.492739 0.214249 0.487076 0.216683 0.487352 0.216311 0.488569 0.213685 0.488277 0.225273 0.495645 0.224297 0.497203 0.220736 0.49692 0.220912 0.494941 0.224776 0.492739 0.220912 0.494941 0.216093 0.493593 0.215987 0.49103 0.216311 0.488569 0.216373 0.489933 0.213243 0.48922 0.213685 0.488277 0.238607 0.498194 0.230381 0.4963 0.234033 0.493551 0.237028 0.493041 0.227906 0.48706 0.227749 0.485305 0.23232 0.483927 0.232069 0.486218 0.211852 0.489722 0.211446 0.491839 0.2098979 0.491056 0.210624 0.489094 0.224718 0.487581 0.223694 0.486935 0.227749 0.485305 0.227906 0.48706 0.187728 0.329441 0.17514 0.329467 0.175765 0.32408 0.188141 0.32408 0.187132 0.334717 0.186542 0.339977 0.173457 0.34096 0.174167 0.334907 0.186542 0.339977 0.185668 0.346475 0.172657 0.348086 0.173457 0.34096 0.187728 0.329441 0.188141 0.32408 0.198593 0.32408 0.198239 0.328924 0.187728 0.329441 0.187132 0.334717 0.174167 0.334907 0.17514 0.329467 0.198239 0.328924 0.197686 0.333877 0.187132 0.334717 0.187728 0.329441 0.197686 0.333877 0.196726 0.339178 0.186542 0.339977 0.187132 0.334717 0.186542 0.339977 0.196726 0.339178 0.19538 0.345087 0.185668 0.346475 0.22916 0.354568 0.23048 0.357214 0.228933 0.357828 0.227916 0.355486 0.223066 0.351543 0.223352 0.350823 0.223713 0.350897 0.223567 0.351538 0.223352 0.350823 0.223055 0.350171 0.2238579 0.350221 0.223713 0.350897 0.2238579 0.350221 0.22411 0.348781 0.225147 0.349442 0.224813 0.350961 0.223542 0.352841 0.224123 0.351749 0.224761 0.353132 0.223399 0.354023 0.224123 0.351749 0.224813 0.350961 0.22559 0.351973 0.224761 0.353132 0.224813 0.350961 0.225147 0.349442 0.226197 0.350447 0.22559 0.351973 0.223567 0.351538 0.223713 0.350897 0.224123 0.351749 0.223542 0.352841 0.223713 0.350897 0.2238579 0.350221 0.224813 0.350961 0.224123 0.351749 0.224761 0.353132 0.225576 0.354527 0.223695 0.355396 0.223399 0.354023 0.225576 0.354527 0.2271749 0.356406 0.22569 0.356469 0.223695 0.355396 0.22559 0.351973 0.2265779 0.353578 0.225576 0.354527 0.224761 0.353132 0.2265779 0.353578 0.227916 0.355486 0.2271749 0.356406 0.225576 0.354527 0.226197 0.350447 0.227545 0.352119 0.2265779 0.353578 0.22559 0.351973 0.227545 0.352119 0.22916 0.354568 0.227916 0.355486 0.2265779 0.353578 0.223066 0.351543 0.223567 0.351538 0.223542 0.352841 0.222456 0.352322 0.223399 0.354023 0.223695 0.355396 0.2226459 0.354963 0.222809 0.354223 0.223542 0.352841 0.223399 0.354023 0.222809 0.354223 0.223034 0.353455 0.2211959 0.354667 0.2226459 0.354963 0.221888 0.357295 0.221558 0.357239 0.2226459 0.354963 0.223695 0.355396 0.2220889 0.357485 0.221888 0.357295 0.2224839 0.358279 0.2220889 0.357485 0.223695 0.355396 0.22569 0.356469 0.2271749 0.356406 0.2278299 0.358016 0.2224839 0.358279 0.22569 0.356469 0.227916 0.355486 0.228933 0.357828 0.2278299 0.358016 0.2271749 0.356406 0.2292529 0.36485 0.231114 0.366306 0.229803 0.369205 0.228291 0.366879 0.22829 0.364276 0.2292529 0.36485 0.228291 0.366879 0.227441 0.366246 0.222175 0.362236 0.22829 0.364276 0.227441 0.366246 0.221465 0.363494 0.222508 0.360948 0.228653 0.362232 0.22829 0.364276 0.222175 0.362236 0.228653 0.362232 0.229726 0.362446 0.2292529 0.36485 0.22829 0.364276 0.229726 0.362446 0.231531 0.363222 0.231114 0.366306 0.2292529 0.36485 0.222596 0.359704 0.228558 0.360377 0.228653 0.362232 0.222508 0.360948 0.2278299 0.358016 0.228933 0.357828 0.229604 0.360457 0.228558 0.360377 0.228933 0.357828 0.23048 0.357214 0.231451 0.360438 0.229604 0.360457 0.2224839 0.358279 0.2278299 0.358016 0.228558 0.360377 0.222596 0.359704 0.228558 0.360377 0.229604 0.360457 0.229726 0.362446 0.228653 0.362232 0.229604 0.360457 0.231451 0.360438 0.231531 0.363222 0.229726 0.362446 0.231114 0.366306 0.234847 0.368858 0.233259 0.373436 0.229803 0.369205 0.231531 0.363222 0.235516 0.364448 0.234847 0.368858 0.231114 0.366306 0.23048 0.357214 0.2335309 0.356133 0.235206 0.360677 0.231451 0.360438 0.236539 0.354126 0.23938 0.352563 0.24184 0.358851 0.238598 0.35975 0.231451 0.360438 0.235206 0.360677 0.235516 0.364448 0.231531 0.363222 0.243925 0.366085 0.239421 0.365124 0.238598 0.35975 0.24184 0.358851 0.238849 0.371326 0.239421 0.365124 0.243925 0.366085 0.244226 0.374531 0.238849 0.371326 0.244226 0.374531 0.24208 0.383584 0.236658 0.377746 0.2335309 0.356133 0.236539 0.354126 0.238598 0.35975 0.235206 0.360677 0.238598 0.35975 0.239421 0.365124 0.235516 0.364448 0.235206 0.360677 0.234847 0.368858 0.235516 0.364448 0.239421 0.365124 0.238849 0.371326 0.234847 0.368858 0.238849 0.371326 0.236658 0.377746 0.233259 0.373436 0.221465 0.363494 0.227441 0.366246 0.226319 0.367727 0.220965 0.364476 0.220965 0.364476 0.226319 0.367727 0.2244009 0.369237 0.220533 0.365142 0.226319 0.367727 0.2269549 0.368835 0.225047 0.370465 0.2244009 0.369237 0.2269549 0.368835 0.227991 0.371561 0.225866 0.373564 0.225047 0.370465 0.228291 0.366879 0.229803 0.369205 0.227991 0.371561 0.2269549 0.368835 0.223441 0.374691 0.22291 0.371718 0.225047 0.370465 0.225866 0.373564 0.222653 0.369846 0.220266 0.365584 0.220533 0.365142 0.2244009 0.369237 0.22291 0.371718 0.222653 0.369846 0.2244009 0.369237 0.225047 0.370465 0.220642 0.370248 0.2190639 0.370161 0.219843 0.366052 0.220077 0.365911 0.222653 0.369846 0.220642 0.370248 0.220077 0.365911 0.220266 0.365584 0.22291 0.371718 0.220962 0.372767 0.220642 0.370248 0.222653 0.369846 0.220962 0.372767 0.21905 0.373344 0.2190639 0.370161 0.220642 0.370248 0.221642 0.375128 0.220962 0.372767 0.22291 0.371718 0.223441 0.374691 0.220962 0.372767 0.221642 0.375128 0.220782 0.377309 0.21905 0.373344 0.227441 0.366246 0.228291 0.366879 0.2269549 0.368835 0.226319 0.367727 0.229803 0.369205 0.233259 0.373436 0.230442 0.376665 0.227991 0.371561 0.236658 0.377746 0.24208 0.383584 0.237855 0.390295 0.233128 0.382663 0.227991 0.371561 0.230442 0.376665 0.226853 0.378959 0.225866 0.373564 0.224469 0.384208 0.228721 0.384448 0.231627 0.392342 0.2255859 0.391925 0.223441 0.374691 0.225866 0.373564 0.226853 0.378959 0.223752 0.379126 0.233259 0.373436 0.236658 0.377746 0.233128 0.382663 0.230442 0.376665 0.230442 0.376665 0.233128 0.382663 0.228721 0.384448 0.226853 0.378959 0.233128 0.382663 0.237855 0.390295 0.231627 0.392342 0.228721 0.384448 0.228721 0.384448 0.224469 0.384208 0.223752 0.379126 0.226853 0.378959 0.21905 0.373344 0.220782 0.377309 0.220961 0.382856 0.2183859 0.380232 0.2183859 0.380232 0.220961 0.382856 0.220786 0.3899 0.2174029 0.387026 0.224469 0.384208 0.2255859 0.391925 0.220786 0.3899 0.220961 0.382856 0.224469 0.384208 0.220961 0.382856 0.220782 0.377309 0.223752 0.379126 0.223441 0.374691 0.223752 0.379126 0.220782 0.377309 0.221642 0.375128 0.185668 0.346475 0.1843129 0.354002 0.171523 0.356125 0.172657 0.348086 0.1843129 0.354002 0.182964 0.362283 0.170557 0.364661 0.171523 0.356125 0.185668 0.346475 0.19538 0.345087 0.193976 0.35205 0.1843129 0.354002 0.170557 0.364661 0.182964 0.362283 0.1824679 0.371318 0.170037 0.375716 0.182685 0.425068 0.17572 0.41073 0.187104 0.40151 0.191937 0.413546 0.187104 0.40151 0.17572 0.41073 0.171612 0.398282 0.184613 0.389161 0.1824679 0.371318 0.182887 0.380704 0.169814 0.386949 0.170037 0.375716 0.182887 0.380704 0.184613 0.389161 0.171612 0.398282 0.169814 0.386949 0.218527 0.354427 0.220483 0.3577 0.218444 0.360112 0.216794 0.356309 0.219666 0.34557 0.2183859 0.342019 0.221195 0.340562 0.221866 0.343848 0.215736 0.355832 0.218151 0.354006 0.218527 0.354427 0.216794 0.356309 0.214586 0.355107 0.217138 0.352953 0.218151 0.354006 0.215736 0.355832 0.213357 0.354499 0.216561 0.352125 0.217138 0.352953 0.214586 0.355107 0.207288 0.351986 0.210623 0.347181 0.213106 0.349215 0.209604 0.353056 0.216561 0.352125 0.215363 0.351003 0.218654 0.349229 0.219657 0.350496 0.213106 0.349215 0.210623 0.347181 0.2153069 0.344418 0.217175 0.347097 0.217175 0.347097 0.2153069 0.344418 0.2183859 0.342019 0.219666 0.34557 0.2238579 0.350221 0.223055 0.350171 0.2230949 0.348964 0.22411 0.348781 0.221734 0.34942 0.220672 0.347982 0.2225559 0.346869 0.2230949 0.348964 0.223999 0.343523 0.224079 0.346779 0.2225559 0.346869 0.221866 0.343848 0.2230949 0.348964 0.2225559 0.346869 0.224079 0.346779 0.22411 0.348781 0.221803 0.350346 0.221734 0.34942 0.2230949 0.348964 0.223055 0.350171 0.222078 0.351149 0.221803 0.350346 0.223055 0.350171 0.223352 0.350823 0.222456 0.352322 0.222078 0.351149 0.223352 0.350823 0.223066 0.351543 0.221348 0.353231 0.220632 0.352411 0.222078 0.351149 0.222456 0.352322 0.220632 0.352411 0.219986 0.351472 0.221803 0.350346 0.222078 0.351149 0.219986 0.351472 0.219657 0.350496 0.221734 0.34942 0.221803 0.350346 0.217138 0.352953 0.216561 0.352125 0.219657 0.350496 0.219986 0.351472 0.218151 0.354006 0.217138 0.352953 0.219986 0.351472 0.220632 0.352411 0.218527 0.354427 0.218151 0.354006 0.220632 0.352411 0.221348 0.353231 0.215363 0.351003 0.211808 0.35412 0.209604 0.353056 0.213106 0.349215 0.211808 0.35412 0.215363 0.351003 0.216561 0.352125 0.213357 0.354499 0.215363 0.351003 0.213106 0.349215 0.217175 0.347097 0.218654 0.349229 0.219666 0.34557 0.220672 0.347982 0.218654 0.349229 0.217175 0.347097 0.221866 0.343848 0.2225559 0.346869 0.220672 0.347982 0.219666 0.34557 0.221821 0.354122 0.222809 0.354223 0.2226459 0.354963 0.2211959 0.354667 0.218527 0.354427 0.221348 0.353231 0.221821 0.354122 0.2211959 0.354667 0.219657 0.350496 0.218654 0.349229 0.220672 0.347982 0.221734 0.34942 0.222809 0.354223 0.221821 0.354122 0.222452 0.353346 0.223034 0.353455 0.222456 0.352322 0.223542 0.352841 0.223034 0.353455 0.222452 0.353346 0.222456 0.352322 0.222452 0.353346 0.221821 0.354122 0.221348 0.353231 0.218527 0.354427 0.2211959 0.354667 0.221558 0.357239 0.220483 0.3577 0.204031 0.351676 0.207083 0.345611 0.210623 0.347181 0.207288 0.351986 0.210623 0.347181 0.207083 0.345611 0.212153 0.340373 0.2153069 0.344418 0.199607 0.351434 0.201951 0.344831 0.207083 0.345611 0.204031 0.351676 0.207083 0.345611 0.201951 0.344831 0.204268 0.339179 0.212153 0.340373 0.204268 0.339179 0.201951 0.344831 0.19538 0.345087 0.196726 0.339178 0.199607 0.351434 0.193976 0.35205 0.19538 0.345087 0.201951 0.344831 0.196726 0.339178 0.197686 0.333877 0.205873 0.333948 0.204268 0.339179 0.2093729 0.359259 0.211808 0.35412 0.213357 0.354499 0.210563 0.359435 0.207333 0.358274 0.2093729 0.359259 0.2090719 0.363265 0.206824 0.363208 0.211175 0.366876 0.210159 0.363077 0.211777 0.362904 0.212612 0.365812 0.211808 0.35412 0.2093729 0.359259 0.207333 0.358274 0.209604 0.353056 0.206982 0.373487 0.204945 0.36881 0.207624 0.367979 0.20942 0.371775 0.212612 0.365812 0.211777 0.362904 0.213461 0.363198 0.214153 0.365963 0.204836 0.357999 0.207333 0.358274 0.206824 0.363208 0.204062 0.363425 0.204945 0.36881 0.204062 0.363425 0.206824 0.363208 0.207624 0.367979 0.214153 0.365963 0.213461 0.363198 0.217787 0.362948 0.21818 0.364867 0.204836 0.357999 0.207288 0.351986 0.209604 0.353056 0.207333 0.358274 0.210563 0.359435 0.212054 0.359619 0.211777 0.362904 0.210159 0.363077 0.20942 0.371775 0.207624 0.367979 0.210182 0.367138 0.212204 0.371054 0.210563 0.359435 0.213357 0.354499 0.214586 0.355107 0.212054 0.359619 0.212054 0.359619 0.213638 0.360082 0.213461 0.363198 0.211777 0.362904 0.207624 0.367979 0.206824 0.363208 0.2090719 0.363265 0.210182 0.367138 0.212204 0.371054 0.210182 0.367138 0.211175 0.366876 0.213656 0.369852 0.212054 0.359619 0.214586 0.355107 0.215736 0.355832 0.213638 0.360082 0.213638 0.360082 0.215736 0.355832 0.216794 0.356309 0.218444 0.360112 0.2093729 0.359259 0.210563 0.359435 0.210159 0.363077 0.2090719 0.363265 0.213638 0.360082 0.218444 0.360112 0.217787 0.362948 0.213461 0.363198 0.210182 0.367138 0.2090719 0.363265 0.210159 0.363077 0.211175 0.366876 0.202046 0.358061 0.204836 0.357999 0.204062 0.363425 0.201457 0.364093 0.198316 0.371839 0.197762 0.365075 0.201457 0.364093 0.20217 0.370105 0.198115 0.358349 0.202046 0.358061 0.201457 0.364093 0.197762 0.365075 0.203911 0.376339 0.20217 0.370105 0.204945 0.36881 0.206982 0.373487 0.192412 0.359626 0.198115 0.358349 0.197762 0.365075 0.192247 0.367231 0.20217 0.370105 0.201457 0.364093 0.204062 0.363425 0.204945 0.36881 0.202046 0.358061 0.204031 0.351676 0.207288 0.351986 0.204836 0.357999 0.198115 0.358349 0.199607 0.351434 0.204031 0.351676 0.202046 0.358061 0.182887 0.380704 0.1824679 0.371318 0.192247 0.367231 0.192185 0.375356 0.198115 0.358349 0.192412 0.359626 0.193976 0.35205 0.199607 0.351434 0.192185 0.375356 0.192247 0.367231 0.197762 0.365075 0.198316 0.371839 0.182964 0.362283 0.192412 0.359626 0.192247 0.367231 0.1824679 0.371318 0.1843129 0.354002 0.193976 0.35205 0.192412 0.359626 0.182964 0.362283 0.199315 0.379365 0.198316 0.371839 0.20217 0.370105 0.203911 0.376339 0.211458 0.374779 0.213571 0.376369 0.211884 0.381003 0.209297 0.377721 0.21905 0.373344 0.216495 0.371254 0.217339 0.369777 0.2190639 0.370161 0.21905 0.373344 0.2183859 0.380232 0.216006 0.378008 0.216495 0.371254 0.214743 0.372331 0.213656 0.369852 0.21457 0.368742 0.216495 0.371254 0.213656 0.369852 0.211175 0.366876 0.212612 0.365812 0.21457 0.368742 0.213571 0.376369 0.216006 0.378008 0.214521 0.384006 0.211884 0.381003 0.21457 0.368742 0.212612 0.365812 0.214153 0.365963 0.215643 0.368161 0.2190639 0.370161 0.217339 0.369777 0.219713 0.366073 0.219843 0.366052 0.214743 0.372331 0.216495 0.371254 0.216006 0.378008 0.213571 0.376369 0.212204 0.371054 0.213656 0.369852 0.214743 0.372331 0.213134 0.372938 0.215643 0.368161 0.214153 0.365963 0.21818 0.364867 0.219334 0.365826 0.212204 0.371054 0.213134 0.372938 0.211458 0.374779 0.20942 0.371775 0.2183859 0.380232 0.2174029 0.387026 0.214521 0.384006 0.216006 0.378008 0.217339 0.369777 0.215643 0.368161 0.219334 0.365826 0.219713 0.366073 0.213134 0.372938 0.214743 0.372331 0.213571 0.376369 0.211458 0.374779 0.20942 0.371775 0.211458 0.374779 0.209297 0.377721 0.206982 0.373487 0.216495 0.371254 0.21457 0.368742 0.215643 0.368161 0.217339 0.369777 0.199315 0.379365 0.20147 0.387432 0.195518 0.393448 0.193494 0.383676 0.211884 0.381003 0.214521 0.384006 0.212074 0.391476 0.209284 0.3866 0.195518 0.393448 0.187104 0.40151 0.184613 0.389161 0.193494 0.383676 0.206982 0.373487 0.209297 0.377721 0.206392 0.3818 0.203911 0.376339 0.184613 0.389161 0.182887 0.380704 0.192185 0.375356 0.193494 0.383676 0.199315 0.379365 0.203911 0.376339 0.206392 0.3818 0.20147 0.387432 0.193494 0.383676 0.192185 0.375356 0.198316 0.371839 0.199315 0.379365 0.2043409 0.411089 0.199057 0.403016 0.204319 0.395257 0.2082239 0.401792 0.209297 0.377721 0.211884 0.381003 0.209284 0.3866 0.206392 0.3818 0.199057 0.403016 0.195518 0.393448 0.20147 0.387432 0.204319 0.395257 0.206392 0.3818 0.209284 0.3866 0.204319 0.395257 0.20147 0.387432 0.195518 0.393448 0.199057 0.403016 0.191937 0.413546 0.187104 0.40151 0.209284 0.3866 0.212074 0.391476 0.2082239 0.401792 0.204319 0.395257 0.199057 0.403016 0.2043409 0.411089 0.199358 0.423977 0.191937 0.413546 0.856929 0.1777949 0.860786 0.16294 0.867188 0.164251 0.862335 0.178435 0.887923 0.151575 0.88232 0.164583 0.874444 0.164127 0.877661 0.152906 0.79822 0.11677 0.809049 0.12252 0.804787 0.143931 0.796551 0.140539 0.84156 0.131844 0.836425 0.14226 0.827295 0.135771 0.832149 0.122216 0.850312 0.163429 0.853855 0.163438 0.849128 0.17689 0.84581 0.176497 0.809049 0.12252 0.820092 0.128655 0.813784 0.147651 0.804787 0.143931 0.88232 0.164583 0.878915 0.178754 0.870132 0.179036 0.874444 0.164127 0.852155 0.140946 0.855702 0.1423439 0.85384 0.149722 0.850069 0.148932 0.855702 0.1423439 0.852155 0.140946 0.856391 0.134705 0.858611 0.135622 0.869173 0.152604 0.864425 0.151781 0.865956 0.142778 0.869847 0.142984 0.852704 0.177132 0.849128 0.17689 0.853855 0.163438 0.857559 0.1619859 0.874444 0.164127 0.867188 0.164251 0.869173 0.152604 0.877661 0.152906 0.845807 0.160548 0.840136 0.158787 0.844524 0.145798 0.850069 0.148932 0.823974 0.15277 0.82091 0.169402 0.810204 0.166265 0.813784 0.147651 0.832828 0.156284 0.836425 0.14226 0.844524 0.145798 0.840136 0.158787 0.823974 0.15277 0.813784 0.147651 0.820092 0.128655 0.827295 0.135771 0.874444 0.164127 0.870132 0.179036 0.862335 0.178435 0.867188 0.164251 0.78884 0.140328 0.786789 0.1590149 0.777624 0.156529 0.78015 0.140325 0.769761 0.106527 0.777817 0.124222 0.768463 0.127507 0.763518 0.116925 0.832149 0.122216 0.827295 0.135771 0.820092 0.128655 0.824276 0.112421 0.84156 0.131844 0.832149 0.122216 0.839872 0.111235 0.847814 0.125324 0.832828 0.156284 0.823974 0.15277 0.827295 0.135771 0.836425 0.14226 0.769269 0.140795 0.78015 0.140325 0.777624 0.156529 0.767794 0.155237 0.769761 0.106527 0.784479 0.10013 0.78969 0.119325 0.777817 0.124222 0.856929 0.1777949 0.852704 0.177132 0.857559 0.1619859 0.860786 0.16294 0.845807 0.160548 0.850312 0.163429 0.84581 0.176497 0.841445 0.175217 0.850312 0.163429 0.845807 0.160548 0.850069 0.148932 0.85384 0.149722 0.867188 0.164251 0.860786 0.16294 0.864425 0.151781 0.869173 0.152604 0.84156 0.131844 0.847814 0.125324 0.852705 0.132095 0.848213 0.138193 0.852155 0.140946 0.848213 0.138193 0.852705 0.132095 0.856391 0.134705 0.823974 0.15277 0.832828 0.156284 0.829677 0.1716459 0.82091 0.169402 0.804787 0.143931 0.801404 0.164452 0.793983 0.161548 0.796551 0.140539 0.78884 0.140328 0.78015 0.140325 0.777817 0.124222 0.78969 0.119325 0.848213 0.138193 0.852155 0.140946 0.850069 0.148932 0.844524 0.145798 0.864425 0.151781 0.861359 0.150258 0.862944 0.142551 0.865956 0.142778 0.840136 0.158787 0.835991 0.173698 0.829677 0.1716459 0.832828 0.156284 0.78884 0.140328 0.796551 0.140539 0.793983 0.161548 0.786789 0.1590149 0.887923 0.151575 0.877661 0.152906 0.87861 0.142834 0.889022 0.139253 0.861359 0.150258 0.857875 0.150352 0.859855 0.142762 0.862944 0.142551 0.85384 0.149722 0.855702 0.1423439 0.859855 0.142762 0.857875 0.150352 0.769269 0.140795 0.768463 0.127507 0.777817 0.124222 0.78015 0.140325 0.844524 0.145798 0.836425 0.14226 0.84156 0.131844 0.848213 0.138193 0.85384 0.149722 0.857875 0.150352 0.853855 0.163438 0.850312 0.163429 0.804787 0.143931 0.813784 0.147651 0.810204 0.166265 0.801404 0.164452 0.853855 0.163438 0.857875 0.150352 0.861359 0.150258 0.857559 0.1619859 0.809049 0.12252 0.812741 0.101351 0.824276 0.112421 0.820092 0.128655 0.877661 0.152906 0.869173 0.152604 0.869847 0.142984 0.87861 0.142834 0.860786 0.16294 0.857559 0.1619859 0.861359 0.150258 0.864425 0.151781 0.840136 0.158787 0.845807 0.160548 0.841445 0.175217 0.835991 0.173698 0.78884 0.140328 0.78969 0.119325 0.79822 0.11677 0.796551 0.140539 0.774533 0.06700396 0.771034 0.05951899 0.774986 0.05910396 0.77764 0.06646895 0.812741 0.101351 0.818975 0.09689497 0.823066 0.100692 0.824276 0.112421 0.856239 0.09193795 0.85501 0.110881 0.85115 0.111837 0.85289 0.09213399 0.82213 0.07218396 0.815607 0.06801897 0.819119 0.05690896 0.826731 0.06171 0.851776 0.06714296 0.855819 0.06953799 0.854806 0.07568401 0.850207 0.073529 0.846881 0.07173198 0.843551 0.07889997 0.841077 0.07334595 0.847207 0.06562697 0.770895 0.09376895 0.771114 0.08034896 0.775869 0.07750397 0.77745 0.09044396 0.855819 0.06953799 0.860368 0.07051396 0.858767 0.07641398 0.854806 0.07568401 0.850207 0.073529 0.849127 0.08030498 0.843551 0.07889997 0.846881 0.07173198 0.770895 0.09376895 0.77745 0.09044396 0.784479 0.10013 0.769761 0.106527 0.860368 0.07051396 0.864536 0.06865298 0.862624 0.07620996 0.858767 0.07641398 0.813677 0.04446095 0.809854 0.05435097 0.801425 0.05460298 0.801227 0.04405295 0.763618 0.07829499 0.771114 0.08034896 0.770895 0.09376895 0.761778 0.08666998 0.864536 0.06865298 0.870396 0.06714797 0.868927 0.07575398 0.862624 0.07620996 0.854806 0.07568401 0.853334 0.08204495 0.849127 0.08030498 0.850207 0.073529 0.79822 0.11677 0.798694 0.097449 0.812741 0.101351 0.809049 0.12252 0.883053 0.07659596 0.875928 0.07582896 0.879662 0.06761497 0.89017 0.07090896 0.858767 0.07641398 0.858263 0.08309495 0.853334 0.08204495 0.854806 0.07568401 0.85289 0.09213399 0.853334 0.08204495 0.858263 0.08309495 0.856239 0.09193795 0.785671 0.08003997 0.781463 0.08417296 0.77935 0.07443195 0.783616 0.07082599 0.90488 0.066141 0.907939 0.06956297 0.904856 0.07287698 0.901687 0.06833499 0.856239 0.09193795 0.859726 0.091645 0.858184 0.111146 0.85501 0.110881 0.846972 0.089558 0.849127 0.08030498 0.853334 0.08204495 0.85289 0.09213399 0.901687 0.06833499 0.904856 0.07287698 0.903414 0.0776 0.896812 0.07280498 0.859726 0.091645 0.856239 0.09193795 0.858263 0.08309495 0.861967 0.08331596 0.771114 0.08034896 0.767222 0.06786096 0.774533 0.06700396 0.775869 0.07750397 0.875928 0.07582896 0.868927 0.07575398 0.870396 0.06714797 0.879662 0.06761497 0.756784 0.04951697 0.761398 0.05110496 0.761962 0.05451995 0.75594 0.05359399 0.763618 0.07829499 0.760814 0.06728196 0.767222 0.06786096 0.771114 0.08034896 0.875928 0.07582896 0.871584 0.08369696 0.866208 0.08333897 0.868927 0.07575398 0.76365 0.05895197 0.761962 0.05451995 0.767597 0.053312 0.771034 0.05951899 0.846972 0.089558 0.841159 0.09152495 0.843551 0.07889997 0.849127 0.08030498 0.871584 0.08369696 0.868274 0.093867 0.862859 0.09207296 0.866208 0.08333897 0.761398 0.05110496 0.765464 0.04924297 0.767597 0.053312 0.761962 0.05451995 0.841159 0.09152495 0.836218 0.08677595 0.841077 0.07334595 0.843551 0.07889997 0.893158 0.09612596 0.884578 0.08884 0.889612 0.080724 0.898292 0.08626997 0.769818 0.04902696 0.771925 0.05361598 0.767597 0.053312 0.765464 0.04924297 0.785898 0.06088197 0.79302 0.058191 0.794677 0.06749099 0.787791 0.06879997 0.884578 0.08884 0.877743 0.083404 0.883053 0.07659596 0.889612 0.080724 0.771925 0.05361598 0.774986 0.05910396 0.771034 0.05951899 0.767597 0.053312 0.787791 0.06879997 0.794677 0.06749099 0.795175 0.07723397 0.789343 0.077865 0.76365 0.05895197 0.767222 0.06786096 0.760814 0.06728196 0.757287 0.05826896 0.774986 0.05910396 0.779526 0.05783396 0.7819 0.063847 0.77764 0.06646895 0.800282 0.07785898 0.795175 0.07723397 0.794677 0.06749099 0.801152 0.066338 0.785898 0.06088197 0.787791 0.06879997 0.783616 0.07082599 0.7819 0.063847 0.79302 0.058191 0.801425 0.05460298 0.801152 0.066338 0.794677 0.06749099 0.898292 0.08626997 0.889612 0.080724 0.896812 0.07280498 0.903414 0.0776 0.783616 0.07082599 0.77935 0.07443195 0.77764 0.06646895 0.7819 0.063847 0.809854 0.05435097 0.819119 0.05690896 0.815607 0.06801897 0.80874 0.06635695 0.798694 0.097449 0.804614 0.08957898 0.809604 0.09127795 0.812741 0.101351 0.883053 0.07659596 0.89017 0.07090896 0.896812 0.07280498 0.889612 0.080724 0.775869 0.07750397 0.774533 0.06700396 0.77764 0.06646895 0.77935 0.07443195 0.80874 0.06635695 0.815607 0.06801897 0.812841 0.07935196 0.807187 0.07791399 0.77745 0.09044396 0.775869 0.07750397 0.77935 0.07443195 0.781463 0.08417296 0.807187 0.07791399 0.812841 0.07935196 0.809604 0.09127795 0.804614 0.08957898 0.879662 0.06761497 0.870396 0.06714797 0.875381 0.06101 0.885976 0.06150096 0.787791 0.06879997 0.789343 0.077865 0.785671 0.08003997 0.783616 0.07082599 0.89017 0.07090896 0.879662 0.06761497 0.885976 0.06150096 0.895708 0.06413596 0.818607 0.083094 0.812841 0.07935196 0.815607 0.06801897 0.82213 0.07218396 0.89017 0.07090896 0.895708 0.06413596 0.901687 0.06833499 0.896812 0.07280498 0.784275 0.09166598 0.781463 0.08417296 0.785671 0.08003997 0.786314 0.08821898 0.812741 0.101351 0.809604 0.09127795 0.812841 0.07935196 0.818607 0.083094 0.771925 0.05361598 0.776367 0.05244898 0.779526 0.05783396 0.774986 0.05910396 0.784479 0.10013 0.77745 0.09044396 0.781463 0.08417296 0.784275 0.09166598 0.781019 0.04923796 0.78592 0.04664099 0.790304 0.05087995 0.784475 0.05396097 0.76365 0.05895197 0.757287 0.05826896 0.75594 0.05359399 0.761962 0.05451995 0.798694 0.097449 0.800282 0.07785898 0.807187 0.07791399 0.804614 0.08957898 0.774533 0.06700396 0.767222 0.06786096 0.76365 0.05895197 0.771034 0.05951899 0.781019 0.04923796 0.784475 0.05396097 0.779526 0.05783396 0.776367 0.05244898 0.88947 0.104097 0.881023 0.119864 0.877263 0.115383 0.879726 0.100367 0.800282 0.07785898 0.801152 0.066338 0.80874 0.06635695 0.807187 0.07791399 0.785898 0.06088197 0.7819 0.063847 0.779526 0.05783396 0.784475 0.05396097 0.893158 0.09612596 0.88947 0.104097 0.879726 0.100367 0.884578 0.08884 0.809854 0.05435097 0.80874 0.06635695 0.801152 0.066338 0.801425 0.05460298 0.79302 0.058191 0.785898 0.06088197 0.784475 0.05396097 0.790304 0.05087995 0.879726 0.100367 0.877263 0.115383 0.871495 0.112311 0.872483 0.09720897 0.832685 0.06605696 0.837428 0.07000797 0.83223 0.08127599 0.827514 0.07599699 0.79302 0.058191 0.790304 0.05087995 0.801227 0.04405295 0.801425 0.05460298 0.884578 0.08884 0.879726 0.100367 0.872483 0.09720897 0.877743 0.083404 0.827514 0.07599699 0.83223 0.08127599 0.827785 0.09165 0.82348 0.08577996 0.789343 0.077865 0.795175 0.07723397 0.794657 0.08887797 0.789966 0.08967095 0.858263 0.08309495 0.858767 0.07641398 0.862624 0.07620996 0.861967 0.08331596 0.82348 0.08577996 0.827785 0.09165 0.823066 0.100692 0.818975 0.09689497 0.798694 0.097449 0.794657 0.08887797 0.795175 0.07723397 0.800282 0.07785898 0.877743 0.083404 0.871584 0.08369696 0.875928 0.07582896 0.883053 0.07659596 0.82213 0.07218396 0.826731 0.06171 0.832685 0.06605696 0.827514 0.07599699 0.789343 0.077865 0.789966 0.08967095 0.786314 0.08821898 0.785671 0.08003997 0.868274 0.093867 0.866087 0.109883 0.86091 0.110399 0.862859 0.09207296 0.872483 0.09720897 0.868274 0.093867 0.871584 0.08369696 0.877743 0.083404 0.836218 0.08677595 0.83223 0.08127599 0.837428 0.07000797 0.841077 0.07334595 0.784479 0.10013 0.784275 0.09166598 0.786314 0.08821898 0.789966 0.08967095 0.871495 0.112311 0.866087 0.109883 0.868274 0.093867 0.872483 0.09720897 0.831818 0.09920597 0.827785 0.09165 0.83223 0.08127599 0.836218 0.08677595 0.839872 0.111235 0.832149 0.122216 0.824276 0.112421 0.831818 0.09920597 0.798694 0.097449 0.784479 0.10013 0.789966 0.08967095 0.794657 0.08887797 0.862624 0.07620996 0.868927 0.07575398 0.866208 0.08333897 0.861967 0.08331596 0.818607 0.083094 0.82213 0.07218396 0.827514 0.07599699 0.82348 0.08577996 0.841159 0.09152495 0.839872 0.111235 0.831818 0.09920597 0.836218 0.08677595 0.79822 0.11677 0.78969 0.119325 0.784479 0.10013 0.798694 0.097449 0.861967 0.08331596 0.866208 0.08333897 0.862859 0.09207296 0.859726 0.091645 0.824276 0.112421 0.823066 0.100692 0.827785 0.09165 0.831818 0.09920597 0.846972 0.089558 0.846767 0.110574 0.839872 0.111235 0.841159 0.09152495 0.847207 0.06562697 0.851776 0.06714296 0.850207 0.073529 0.846881 0.07173198 0.859726 0.091645 0.862859 0.09207296 0.86091 0.110399 0.858184 0.111146 0.812741 0.101351 0.818607 0.083094 0.82348 0.08577996 0.818975 0.09689497 0.85289 0.09213399 0.85115 0.111837 0.846767 0.110574 0.846972 0.089558 0.757522 0.1083559 0.751834 0.100057 0.761778 0.08666998 0.770895 0.09376895 0.860842 0.123943 0.862766 0.125345 0.863639 0.130075 0.861566 0.128422 0.857925 0.120541 0.854638 0.121295 0.85115 0.111837 0.85501 0.110881 0.851275 0.121277 0.846767 0.110574 0.85115 0.111837 0.854638 0.121295 0.867174 0.121892 0.865867 0.127523 0.862766 0.125345 0.862357 0.120596 0.851275 0.121277 0.847814 0.125324 0.839872 0.111235 0.846767 0.110574 0.865284 0.130353 0.863639 0.130075 0.862766 0.125345 0.865867 0.127523 0.851275 0.121277 0.855041 0.127782 0.852705 0.132095 0.847814 0.125324 0.86438 0.133971 0.862562 0.133377 0.863247 0.131256 0.864869 0.131732 0.857925 0.120541 0.859229 0.123817 0.857384 0.125979 0.854638 0.121295 0.863447 0.137219 0.861037 0.137048 0.862562 0.133377 0.86438 0.133971 0.886556 0.128394 0.876469 0.133513 0.873603 0.128544 0.881023 0.119864 0.862944 0.142551 0.859855 0.142762 0.861037 0.137048 0.863447 0.137219 0.876469 0.133513 0.886556 0.128394 0.889022 0.139253 0.87861 0.142834 0.757522 0.1083559 0.770895 0.09376895 0.769761 0.106527 0.763518 0.116925 0.857384 0.125979 0.859689 0.128386 0.85812 0.13049 0.855041 0.127782 0.859927 0.120378 0.857925 0.120541 0.85501 0.110881 0.858184 0.111146 0.859689 0.128386 0.861164 0.129859 0.860166 0.131941 0.85812 0.13049 0.87861 0.142834 0.869847 0.142984 0.869845 0.135919 0.876469 0.133513 0.865956 0.142778 0.862944 0.142551 0.863447 0.137219 0.866356 0.136833 0.869847 0.142984 0.865956 0.142778 0.866356 0.136833 0.869845 0.135919 0.866356 0.136833 0.863447 0.137219 0.86438 0.133971 0.866805 0.1333799 0.876469 0.133513 0.869845 0.135919 0.869756 0.131914 0.873603 0.128544 0.861164 0.129859 0.859689 0.128386 0.860282 0.126954 0.861566 0.128422 0.869845 0.135919 0.866356 0.136833 0.866805 0.1333799 0.869756 0.131914 0.859229 0.123817 0.860282 0.126954 0.859689 0.128386 0.857384 0.125979 0.873603 0.128544 0.872318 0.125926 0.877263 0.115383 0.881023 0.119864 0.85812 0.13049 0.860166 0.131941 0.858611 0.135622 0.856391 0.134705 0.873603 0.128544 0.869756 0.131914 0.869313 0.1299909 0.872318 0.125926 0.864869 0.131732 0.863247 0.131256 0.863639 0.130075 0.865284 0.130353 0.866087 0.109883 0.867174 0.121892 0.862357 0.120596 0.86091 0.110399 0.866805 0.1333799 0.867114 0.131374 0.869313 0.1299909 0.869756 0.131914 0.866805 0.1333799 0.86438 0.133971 0.864869 0.131732 0.867114 0.131374 0.855041 0.127782 0.85812 0.13049 0.856391 0.134705 0.852705 0.132095 0.877263 0.115383 0.872318 0.125926 0.870901 0.124011 0.871495 0.112311 0.872318 0.125926 0.869313 0.1299909 0.86893 0.128229 0.870901 0.124011 0.869313 0.1299909 0.867114 0.131374 0.866982 0.1301 0.86893 0.128229 0.851275 0.121277 0.854638 0.121295 0.857384 0.125979 0.855041 0.127782 0.867114 0.131374 0.864869 0.131732 0.865284 0.130353 0.866982 0.1301 0.857925 0.120541 0.859927 0.120378 0.860842 0.123943 0.859229 0.123817 0.859229 0.123817 0.860842 0.123943 0.861566 0.128422 0.860282 0.126954 0.871495 0.112311 0.870901 0.124011 0.867174 0.121892 0.866087 0.109883 0.870901 0.124011 0.86893 0.128229 0.865867 0.127523 0.867174 0.121892 0.865284 0.130353 0.865867 0.127523 0.86893 0.128229 0.866982 0.1301 0.858611 0.135622 0.861037 0.137048 0.859855 0.142762 0.855702 0.1423439 0.860166 0.131941 0.862562 0.133377 0.861037 0.137048 0.858611 0.135622 0.861164 0.129859 0.863247 0.131256 0.862562 0.133377 0.860166 0.131941 0.861566 0.128422 0.863639 0.130075 0.863247 0.131256 0.861164 0.129859 0.858184 0.111146 0.86091 0.110399 0.862357 0.120596 0.859927 0.120378 0.859927 0.120378 0.862357 0.120596 0.862766 0.125345 0.860842 0.123943 0.764826 0.02111798 0.763265 0.023328 0.762389 0.02200096 0.763074 0.02014899 0.765843 0.02683395 0.763283 0.02645999 0.764495 0.02503198 0.766058 0.02546495 0.770544 0.02072 0.768761 0.02207297 0.768057 0.02045899 0.769529 0.01914095 0.769529 0.01914095 0.768057 0.02045899 0.766329 0.01905995 0.767455 0.01785498 0.764495 0.02503198 0.763283 0.02645999 0.762238 0.02481895 0.763265 0.023328 0.771195 0.02049899 0.770544 0.02072 0.769529 0.01914095 0.770396 0.01857596 0.769529 0.01914095 0.767455 0.01785498 0.76827 0.01706194 0.770396 0.01857596 0.767455 0.01785498 0.766329 0.01905995 0.764381 0.018543 0.765067 0.01787996 0.763265 0.023328 0.762238 0.02481895 0.762098 0.02335095 0.762389 0.02200096 0.762389 0.02200096 0.762098 0.02335095 0.761888 0.022798 0.761999 0.02168995 0.764381 0.018543 0.764067 0.01833599 0.764942 0.01766997 0.765067 0.01787996 0.762238 0.02481895 0.761486 0.02336096 0.761888 0.022798 0.762098 0.02335095 0.761999 0.02168995 0.761888 0.022798 0.761486 0.02336096 0.761215 0.02146697 0.767455 0.01785498 0.765067 0.01787996 0.764942 0.01766997 0.765288 0.01716196 0.766058 0.02546495 0.767519 0.02372497 0.769004 0.02494996 0.765843 0.02683395 0.767519 0.02372497 0.768761 0.02207297 0.770544 0.02072 0.769004 0.02494996 0.764495 0.02503198 0.76628 0.02256596 0.767519 0.02372497 0.766058 0.02546495 0.76628 0.02256596 0.768057 0.02045899 0.768761 0.02207297 0.767519 0.02372497 0.763265 0.023328 0.764826 0.02111798 0.76628 0.02256596 0.764495 0.02503198 0.764826 0.02111798 0.766329 0.01905995 0.768057 0.02045899 0.76628 0.02256596 0.766329 0.01905995 0.764826 0.02111798 0.763074 0.02014899 0.764381 0.018543 0.764381 0.018543 0.763074 0.02014899 0.762651 0.01978498 0.764067 0.01833599 0.763074 0.02014899 0.762389 0.02200096 0.761999 0.02168995 0.762651 0.01978498 0.762651 0.01978498 0.761999 0.02168995 0.761215 0.02146697 0.761623 0.01919096 0.800061 0.00355798 0.800163 0.004683971 0.799867 0.004597961 0.799594 0.003763973 0.800061 0.00355798 0.799594 0.003763973 0.798997 0.002676963 0.799167 0.002433955 0.795821 0.00574696 0.795221 0.004559993 0.795403 0.004547953 0.796045 0.005527973 0.799167 0.002433955 0.798997 0.002676963 0.798441 0.002752959 0.798523 0.002582967 0.798997 0.002676963 0.799594 0.003763973 0.799406 0.003829956 0.798798 0.002896964 0.798441 0.002752959 0.798997 0.002676963 0.798798 0.002896964 0.798436 0.00288099 0.795503 0.003219962 0.797475 0.002512991 0.797471 0.002710998 0.796429 0.00308299 0.797475 0.002512991 0.799167 0.002433955 0.798523 0.002582967 0.797471 0.002710998 0.796429 0.00308299 0.797471 0.002710998 0.797479 0.002875983 0.796542 0.003198981 0.797471 0.002710998 0.798523 0.002582967 0.798441 0.002752959 0.797479 0.002875983 0.796542 0.003198981 0.797479 0.002875983 0.797479 0.003005981 0.796692 0.003309965 0.797479 0.002875983 0.798441 0.002752959 0.798436 0.00288099 0.797479 0.003005981 0.797932 0.005753993 0.795821 0.00574696 0.796045 0.005527973 0.797913 0.005406975 0.796692 0.003309965 0.797479 0.003005981 0.797469 0.003505945 0.796205 0.003529965 0.797479 0.003005981 0.798436 0.00288099 0.798798 0.002896964 0.797469 0.003505945 0.796205 0.003529965 0.797469 0.003505945 0.797747 0.004704952 0.795403 0.004547953 0.797469 0.003505945 0.798798 0.002896964 0.799406 0.003829956 0.797747 0.004704952 0.795403 0.004547953 0.797747 0.004704952 0.797913 0.005406975 0.796045 0.005527973 0.797747 0.004704952 0.799406 0.003829956 0.799633 0.00444597 0.797913 0.005406975 0.799594 0.003763973 0.799867 0.004597961 0.799633 0.00444597 0.799406 0.003829956 0.799867 0.004597961 0.797932 0.005753993 0.797913 0.005406975 0.799633 0.00444597 0.800328 0.003296971 0.800948 0.005721986 0.800163 0.004683971 0.800061 0.00355798 0.799428 0.002201974 0.800328 0.003296971 0.800061 0.00355798 0.799167 0.002433955 0.829199 0.01037198 0.830508 0.01071095 0.830297 0.01114499 0.82894 0.01067596 0.830508 0.01071095 0.831776 0.01145899 0.832198 0.01181697 0.830297 0.01114499 0.831637 0.01339095 0.829874 0.01297998 0.829938 0.01254898 0.831457 0.01308298 0.829874 0.01297998 0.828287 0.01176095 0.82852 0.01164394 0.829938 0.01254898 0.829166 0.01015299 0.830705 0.01058197 0.830508 0.01071095 0.829199 0.01037198 0.830705 0.01058197 0.831953 0.01138299 0.831776 0.01145899 0.830508 0.01071095 0.828684 0.01117098 0.83015 0.01179999 0.829938 0.01254898 0.82852 0.01164394 0.830297 0.01114499 0.832198 0.01181697 0.831837 0.01265996 0.83015 0.01179999 0.831953 0.01138299 0.832485 0.01171797 0.832198 0.01181697 0.831776 0.01145899 0.832485 0.01171797 0.832069 0.01283299 0.831837 0.01265996 0.832198 0.01181697 0.828287 0.01176095 0.828349 0.01109296 0.828684 0.01117098 0.82852 0.01164394 0.832069 0.01283299 0.831637 0.01339095 0.831457 0.01308298 0.831837 0.01265996 0.828612 0.010176 0.829166 0.01015299 0.829199 0.01037198 0.82894 0.01067596 0.828349 0.01109296 0.828612 0.010176 0.82894 0.01067596 0.828684 0.01117098 0.832909 0.01167899 0.832485 0.01171797 0.831953 0.01138299 0.832076 0.01126098 0.831864 0.01387 0.832069 0.01283299 0.832485 0.01171797 0.832909 0.01167899 0.828086 0.01200199 0.828096 0.010966 0.828349 0.01109296 0.828287 0.01176095 0.828096 0.010966 0.828752 0.009628951 0.828612 0.010176 0.828349 0.01109296 0.83015 0.01179999 0.831837 0.01265996 0.831457 0.01308298 0.829938 0.01254898 0.82894 0.01067596 0.830297 0.01114499 0.83015 0.01179999 0.828684 0.01117098 0.84808 0.02769994 0.84934 0.02836894 0.84913 0.02850997 0.848406 0.02805495 0.849255 0.02937096 0.849315 0.029697 0.84895 0.02966594 0.8491 0.02937299 0.849315 0.029697 0.848899 0.03041195 0.848891 0.03022497 0.84895 0.02966594 0.846237 0.02907699 0.847047 0.02803099 0.8472 0.028279 0.846427 0.02906 0.848899 0.03041195 0.847931 0.03064495 0.848064 0.03052794 0.848891 0.03022497 0.847924 0.028014 0.848263 0.028162 0.848303 0.02835196 0.847797 0.02837097 0.847047 0.02803099 0.847924 0.028014 0.847797 0.02837097 0.8472 0.028279 0.849646 0.02957797 0.849315 0.029697 0.849255 0.02937096 0.849409 0.02925795 0.846 0.02915894 0.846937 0.027906 0.847047 0.02803099 0.846237 0.02907699 0.84808 0.02769994 0.848406 0.02805495 0.848263 0.028162 0.847924 0.028014 0.846937 0.027906 0.84808 0.02769994 0.847924 0.028014 0.847047 0.02803099 0.8472 0.028279 0.848115 0.02926099 0.847084 0.03011196 0.846427 0.02906 0.848115 0.02926099 0.848891 0.03022497 0.848064 0.03052794 0.847084 0.03011196 0.847797 0.02837097 0.848552 0.02887594 0.848115 0.02926099 0.8472 0.028279 0.848552 0.02887594 0.84895 0.02966594 0.848891 0.03022497 0.848115 0.02926099 0.848303 0.02835196 0.848802 0.02875494 0.848552 0.02887594 0.847797 0.02837097 0.848802 0.02875494 0.8491 0.02937299 0.84895 0.02966594 0.848552 0.02887594 0.847931 0.03064495 0.846947 0.03020197 0.847084 0.03011196 0.848064 0.03052794 0.846947 0.03020197 0.846237 0.02907699 0.846427 0.02906 0.847084 0.03011196 0.848263 0.028162 0.848983 0.02870798 0.848802 0.02875494 0.848303 0.02835196 0.847844 0.03078496 0.846794 0.03028398 0.846947 0.03020197 0.847931 0.03064495 0.846794 0.03028398 0.846 0.02915894 0.846237 0.02907699 0.846947 0.03020197 0.84934 0.02836894 0.849646 0.02957797 0.849409 0.02925795 0.84913 0.02850997 0.848983 0.02870798 0.849255 0.02937096 0.8491 0.02937299 0.848802 0.02875494 0.848406 0.02805495 0.84913 0.02850997 0.848983 0.02870798 0.848263 0.028162 0.84913 0.02850997 0.849409 0.02925795 0.849255 0.02937096 0.848983 0.02870798 0.859394 0.04222798 0.859343 0.04250597 0.859228 0.04247295 0.859066 0.04181998 0.859207 0.04119795 0.859394 0.04222798 0.859066 0.04181998 0.859018 0.041224 0.859449 0.03986996 0.860012 0.04145097 0.859362 0.04095 0.858964 0.04028099 0.858218 0.04005497 0.858964 0.04028099 0.858589 0.04078698 0.857961 0.04015696 0.858964 0.04028099 0.859362 0.04095 0.859207 0.04119795 0.858589 0.04078698 0.857961 0.04015696 0.858589 0.04078698 0.858442 0.04086697 0.857798 0.04047197 0.858589 0.04078698 0.859207 0.04119795 0.859018 0.041224 0.858442 0.04086697 0.858712 0.04298698 0.85728 0.04252499 0.85772 0.04183399 0.858781 0.04266798 0.85728 0.04252499 0.856411 0.04093897 0.856669 0.04114598 0.85772 0.04183399 0.857167 0.04057097 0.85822 0.04119098 0.857923 0.04163396 0.856997 0.04083895 0.856411 0.04093897 0.856723 0.04060196 0.856997 0.04083895 0.856669 0.04114598 0.85822 0.04119098 0.859066 0.04181998 0.859228 0.04247295 0.857923 0.04163396 0.856997 0.04083895 0.857923 0.04163396 0.85772 0.04183399 0.856669 0.04114598 0.857923 0.04163396 0.859228 0.04247295 0.858781 0.04266798 0.85772 0.04183399 0.857622 0.03959196 0.859449 0.03986996 0.858964 0.04028099 0.858218 0.04005497 0.857328 0.04030597 0.857961 0.04015696 0.857798 0.04047197 0.857167 0.04057097 0.857622 0.03959196 0.858218 0.04005497 0.857961 0.04015696 0.857328 0.04030597 0.857798 0.04047197 0.858442 0.04086697 0.85822 0.04119098 0.857167 0.04057097 0.856519 0.04043799 0.857622 0.03959196 0.857328 0.04030597 0.856723 0.04060196 0.858442 0.04086697 0.859018 0.041224 0.859066 0.04181998 0.85822 0.04119098 0.856214 0.04102098 0.856519 0.04043799 0.856723 0.04060196 0.856411 0.04093897 0.860012 0.04145097 0.859394 0.04222798 0.859207 0.04119795 0.859362 0.04095 0.856723 0.04060196 0.857328 0.04030597 0.857167 0.04057097 0.856997 0.04083895 0.859343 0.04250597 0.858712 0.04298698 0.858781 0.04266798 0.859228 0.04247295 0.854196 0.04231697 0.856371 0.03933298 0.856519 0.04043799 0.856214 0.04102098 0.766898 0.04274296 0.769818 0.04902696 0.765464 0.04924297 0.763617 0.04450196 0.786192 0.02681899 0.78274 0.02564895 0.783618 0.01630896 0.785039 0.01519596 0.78274 0.02564895 0.779732 0.02288299 0.781287 0.01608598 0.783618 0.01630896 0.773042 0.03856599 0.770105 0.04071599 0.767526 0.03650295 0.770297 0.03448897 0.770105 0.04071599 0.766898 0.04274296 0.76431 0.03838294 0.767526 0.03650295 0.776367 0.05244898 0.771925 0.05361598 0.769818 0.04902696 0.773221 0.04717499 0.780756 0.03113597 0.77775 0.027152 0.779732 0.02288299 0.78274 0.02564895 0.773221 0.04717499 0.769818 0.04902696 0.766898 0.04274296 0.770105 0.04071599 0.781019 0.04923796 0.776367 0.05244898 0.773221 0.04717499 0.776758 0.04465997 0.777134 0.03513997 0.773042 0.03856599 0.770297 0.03448897 0.774325 0.03127098 0.907939 0.06956297 0.909089 0.06577301 0.911574 0.06377899 0.912427 0.06664395 0.760671 0.04487395 0.759444 0.04131197 0.761958 0.04077899 0.763617 0.04450196 0.909089 0.06577301 0.907819 0.06321901 0.911367 0.06031399 0.911574 0.06377899 0.912427 0.06664395 0.911574 0.06377899 0.914586 0.06191295 0.915319 0.06470596 0.761398 0.05110496 0.760671 0.04487395 0.763617 0.04450196 0.765464 0.04924297 0.911574 0.06377899 0.911367 0.06031399 0.913925 0.05800199 0.914586 0.06191295 0.783684 0.03452396 0.780375 0.04153698 0.777134 0.03513997 0.780756 0.03113597 0.780375 0.04153698 0.776758 0.04465997 0.773042 0.03856599 0.777134 0.03513997 0.907819 0.06321901 0.90488 0.066141 0.903856 0.06202596 0.906666 0.05918198 0.786861 0.03736799 0.78592 0.04664099 0.780375 0.04153698 0.783684 0.03452396 0.783684 0.03452396 0.780756 0.03113597 0.78274 0.02564895 0.786192 0.02681899 0.781019 0.04923796 0.776758 0.04465997 0.780375 0.04153698 0.78592 0.04664099 0.907819 0.06321901 0.909089 0.06577301 0.907939 0.06956297 0.90488 0.066141 0.776758 0.04465997 0.773221 0.04717499 0.770105 0.04071599 0.773042 0.03856599 0.759444 0.04131197 0.758167 0.03832596 0.760225 0.03658294 0.761958 0.04077899 0.792132 0.03433495 0.799362 0.03848695 0.78592 0.04664099 0.786861 0.03736799 0.76431 0.03838294 0.761958 0.04077899 0.760225 0.03658294 0.762689 0.03540098 0.761398 0.05110496 0.756784 0.04951697 0.75795 0.04471796 0.760671 0.04487395 0.911367 0.06031399 0.907819 0.06321901 0.90976 0.05736696 0.911069 0.05601495 0.911367 0.06031399 0.911069 0.05601495 0.912826 0.054847 0.913925 0.05800199 0.792132 0.03433495 0.786861 0.03736799 0.786495 0.03222197 0.788601 0.03106999 0.766898 0.04274296 0.763617 0.04450196 0.761958 0.04077899 0.76431 0.03838294 0.907819 0.06321901 0.906666 0.05918198 0.909166 0.05647599 0.90976 0.05736696 0.760671 0.04487395 0.75795 0.04471796 0.757003 0.04153198 0.759444 0.04131197 0.780756 0.03113597 0.777134 0.03513997 0.774325 0.03127098 0.77775 0.027152 0.759444 0.04131197 0.757003 0.04153198 0.755781 0.03871399 0.758167 0.03832596 0.786192 0.02681899 0.788891 0.02489197 0.788601 0.03106999 0.786495 0.03222197 0.786861 0.03736799 0.783684 0.03452396 0.786192 0.02681899 0.786495 0.03222197 0.788891 0.02489197 0.786192 0.02681899 0.785039 0.01519596 0.786208 0.01549899 0.76827 0.01706194 0.765772 0.01659399 0.766449 0.01434397 0.769449 0.01470297 0.913925 0.05800199 0.912826 0.054847 0.915362 0.05360698 0.917044 0.05640697 0.769533 0.01239895 0.769449 0.01470297 0.766449 0.01434397 0.766632 0.01266795 0.770396 0.01857596 0.76827 0.01706194 0.769449 0.01470297 0.771643 0.01570898 0.913708 0.04304397 0.914708 0.03981596 0.916106 0.04031997 0.915046 0.04392194 0.922655 0.05324095 0.920885 0.04960495 0.9226 0.04847598 0.924907 0.05204194 0.77775 0.027152 0.774325 0.03127098 0.771841 0.02818 0.774474 0.02447599 0.757569 0.03043699 0.755583 0.03090095 0.755496 0.027646 0.75703 0.02809 0.765733 0.02743697 0.763242 0.026775 0.763283 0.02645999 0.765843 0.02683395 0.774325 0.03127098 0.770297 0.03448897 0.768106 0.03116095 0.771841 0.02818 0.759509 0.02989196 0.757569 0.03043699 0.75703 0.02809 0.758432 0.026865 0.774474 0.02447599 0.771841 0.02818 0.769518 0.02544295 0.771195 0.02049899 0.762238 0.02481895 0.761742 0.02536296 0.760525 0.023898 0.761486 0.02336096 0.771841 0.02818 0.768106 0.03116095 0.765733 0.02743697 0.769518 0.02544295 0.761486 0.02336096 0.760525 0.023898 0.760174 0.02150499 0.761215 0.02146697 0.771195 0.02049899 0.769518 0.02544295 0.769004 0.02494996 0.770544 0.02072 0.764942 0.01766997 0.764067 0.01833599 0.763607 0.01755899 0.765288 0.01716196 0.771643 0.01570898 0.769449 0.01470297 0.769533 0.01239895 0.771779 0.01211297 0.769518 0.02544295 0.765733 0.02743697 0.765843 0.02683395 0.769004 0.02494996 0.763607 0.01755899 0.763597 0.01682698 0.765772 0.01659399 0.765288 0.01716196 0.767455 0.01785498 0.765288 0.01716196 0.765772 0.01659399 0.76827 0.01706194 0.763607 0.01755899 0.761623 0.01919096 0.760892 0.018233 0.763597 0.01682698 0.9226 0.04847598 0.925144 0.04765599 0.927889 0.04859596 0.924907 0.05204194 0.761623 0.01919096 0.761215 0.02146697 0.760174 0.02150499 0.760468 0.01886999 0.758167 0.03832596 0.755781 0.03871399 0.754463 0.034648 0.756562 0.033975 0.915319 0.06470596 0.914586 0.06191295 0.917416 0.06058496 0.918101 0.06323695 0.756562 0.033975 0.754463 0.034648 0.753646 0.03072798 0.755583 0.03090095 0.914586 0.06191295 0.913925 0.05800199 0.917044 0.05640697 0.917416 0.06058496 0.755583 0.03090095 0.753646 0.03072798 0.754249 0.02734595 0.755496 0.027646 0.924152 0.05643397 0.922655 0.05324095 0.924907 0.05204194 0.926602 0.05491995 0.918101 0.06323695 0.917416 0.06058496 0.921289 0.058308 0.921929 0.06112694 0.755496 0.027646 0.754249 0.02734595 0.755871 0.02406799 0.757499 0.02524399 0.927889 0.04859596 0.930366 0.05113697 0.926602 0.05491995 0.924907 0.05204194 0.76096 0.03223395 0.758655 0.03329396 0.757569 0.03043699 0.759509 0.02989196 0.917416 0.06058496 0.917044 0.05640697 0.920299 0.05447697 0.921289 0.058308 0.755496 0.027646 0.757499 0.02524399 0.758432 0.026865 0.75703 0.02809 0.930366 0.05113697 0.931282 0.05540394 0.92828 0.05727195 0.926602 0.05491995 0.921929 0.06112694 0.921289 0.058308 0.924152 0.05643397 0.925214 0.05875396 0.764067 0.01833599 0.762651 0.01978498 0.761623 0.01919096 0.763607 0.01755899 0.776981 0.01957398 0.774634 0.01788097 0.775219 0.01257199 0.778313 0.01390498 0.76018 0.016402 0.763204 0.01526194 0.763597 0.01682698 0.760892 0.018233 0.925214 0.05875396 0.924152 0.05643397 0.926602 0.05491995 0.92828 0.05727195 0.774634 0.01788097 0.771643 0.01570898 0.771779 0.01211297 0.775219 0.01257199 0.755871 0.02406799 0.755971 0.01945799 0.758559 0.01873695 0.758573 0.02252596 0.759793 0.013659 0.763474 0.01271897 0.763204 0.01526194 0.76018 0.016402 0.770297 0.03448897 0.767526 0.03650295 0.765259 0.03332197 0.768106 0.03116095 0.767526 0.03650295 0.76431 0.03838294 0.762689 0.03540098 0.765259 0.03332197 0.768106 0.03116095 0.765259 0.03332197 0.763379 0.03074795 0.765733 0.02743697 0.765259 0.03332197 0.762689 0.03540098 0.76096 0.03223395 0.763379 0.03074795 0.77775 0.027152 0.774474 0.02447599 0.776981 0.01957398 0.779732 0.02288299 0.765733 0.02743697 0.763379 0.03074795 0.761889 0.02811294 0.763242 0.026775 0.774474 0.02447599 0.771195 0.02049899 0.774634 0.01788097 0.776981 0.01957398 0.763379 0.03074795 0.76096 0.03223395 0.759509 0.02989196 0.761889 0.02811294 0.763242 0.026775 0.761889 0.02811294 0.760267 0.02613699 0.761742 0.02536296 0.763283 0.02645999 0.763242 0.026775 0.761742 0.02536296 0.762238 0.02481895 0.779732 0.02288299 0.776981 0.01957398 0.778313 0.01390498 0.781287 0.01608598 0.758573 0.02252596 0.758559 0.01873695 0.760468 0.01886999 0.760174 0.02150499 0.761889 0.02811294 0.759509 0.02989196 0.758432 0.026865 0.760267 0.02613699 0.758167 0.03832596 0.756562 0.033975 0.758655 0.03329396 0.760225 0.03658294 0.761742 0.02536296 0.760267 0.02613699 0.759148 0.02429896 0.760525 0.023898 0.756562 0.033975 0.755583 0.03090095 0.757569 0.03043699 0.758655 0.03329396 0.760267 0.02613699 0.758432 0.026865 0.757499 0.02524399 0.759148 0.02429896 0.762689 0.03540098 0.760225 0.03658294 0.758655 0.03329396 0.76096 0.03223395 0.760525 0.023898 0.759148 0.02429896 0.758573 0.02252596 0.760174 0.02150499 0.921289 0.058308 0.920299 0.05447697 0.922655 0.05324095 0.924152 0.05643397 0.759148 0.02429896 0.757499 0.02524399 0.755871 0.02406799 0.758573 0.02252596 0.771195 0.02049899 0.770396 0.01857596 0.771643 0.01570898 0.774634 0.01788097 0.763597 0.01682698 0.763204 0.01526194 0.766449 0.01434397 0.765772 0.01659399 0.920299 0.05447697 0.918078 0.05161899 0.920885 0.04960495 0.922655 0.05324095 0.763204 0.01526194 0.763474 0.01271897 0.766632 0.01266795 0.766449 0.01434397 0.917044 0.05640697 0.915362 0.05360698 0.918078 0.05161899 0.920299 0.05447697 0.895028 0.05647397 0.898816 0.058833 0.895708 0.06413596 0.893664 0.06091296 0.901687 0.06833499 0.895708 0.06413596 0.899849 0.063771 0.901859 0.06505095 0.801227 0.04405295 0.790304 0.05087995 0.78592 0.04664099 0.799362 0.03848695 0.906666 0.05918198 0.907205 0.05644398 0.910141 0.05504 0.909166 0.05647599 0.898545 0.05508399 0.90083 0.05493199 0.901661 0.05621898 0.898816 0.058833 0.90083 0.05493199 0.902466 0.05124497 0.904001 0.05221796 0.901661 0.05621898 0.899076 0.05321496 0.900352 0.05144798 0.90083 0.05493199 0.898545 0.05508399 0.903659 0.05722194 0.901358 0.06124997 0.898816 0.058833 0.901661 0.05621898 0.895028 0.05647397 0.897114 0.05428999 0.898545 0.05508399 0.898816 0.058833 0.903856 0.06202596 0.905409 0.057401 0.907205 0.05644398 0.906666 0.05918198 0.905409 0.057401 0.907779 0.05335098 0.909387 0.053213 0.907205 0.05644398 0.906078 0.05325394 0.903659 0.05722194 0.901661 0.05621898 0.904001 0.05221796 0.907779 0.05335098 0.905409 0.057401 0.903659 0.05722194 0.906078 0.05325394 0.905409 0.057401 0.903856 0.06202596 0.901358 0.06124997 0.903659 0.05722194 0.897114 0.05428999 0.897529 0.05120295 0.899319 0.05041497 0.898348 0.05279594 0.900352 0.05144798 0.901742 0.04798495 0.902466 0.05124497 0.90083 0.05493199 0.807574 0.03121 0.811269 0.026048 0.813603 0.025424 0.814288 0.03092795 0.811944 0.02132296 0.81462 0.02036595 0.813603 0.025424 0.811269 0.026048 0.811944 0.02132296 0.808634 0.02036595 0.814702 0.01303297 0.816238 0.012609 0.792132 0.03433495 0.788601 0.03106999 0.788891 0.02489197 0.793326 0.02912396 0.807574 0.03121 0.805251 0.02686095 0.811944 0.02132296 0.811269 0.026048 0.81462 0.02036595 0.811944 0.02132296 0.816238 0.012609 0.81691 0.01278698 0.897114 0.05428999 0.898348 0.05279594 0.899076 0.05321496 0.898545 0.05508399 0.793326 0.02912396 0.797989 0.03020596 0.799362 0.03848695 0.792132 0.03433495 0.797989 0.03020596 0.805251 0.02686095 0.807574 0.03121 0.799362 0.03848695 0.807574 0.03121 0.814288 0.03092795 0.817415 0.03816795 0.799362 0.03848695 0.813677 0.04446095 0.801227 0.04405295 0.799362 0.03848695 0.817415 0.03816795 0.903856 0.06202596 0.90488 0.066141 0.901687 0.06833499 0.901859 0.06505095 0.898816 0.058833 0.901358 0.06124997 0.899849 0.063771 0.895708 0.06413596 0.901358 0.06124997 0.903856 0.06202596 0.901859 0.06505095 0.899849 0.063771 0.788891 0.02489197 0.789978 0.02187997 0.793953 0.02456295 0.793326 0.02912396 0.789978 0.02187997 0.792144 0.01973599 0.795118 0.02094697 0.793953 0.02456295 0.805251 0.02686095 0.803523 0.02316999 0.808634 0.02036595 0.811944 0.02132296 0.803523 0.02316999 0.802526 0.02049899 0.805767 0.01910197 0.808634 0.02036595 0.786208 0.01549899 0.788136 0.01743698 0.789978 0.02187997 0.788891 0.02489197 0.788136 0.01743698 0.790256 0.018323 0.792144 0.01973599 0.789978 0.02187997 0.808634 0.02036595 0.805767 0.01910197 0.812262 0.01389294 0.814702 0.01303297 0.797989 0.03020596 0.798702 0.02437394 0.803523 0.02316999 0.805251 0.02686095 0.795929 0.01770895 0.795118 0.02094697 0.792144 0.01973599 0.79316 0.01748895 0.798702 0.02437394 0.798715 0.02123296 0.802526 0.02049899 0.803523 0.02316999 0.793326 0.02912396 0.793953 0.02456295 0.798702 0.02437394 0.797989 0.03020596 0.907205 0.05644398 0.909387 0.053213 0.911367 0.05304598 0.910141 0.05504 0.793953 0.02456295 0.795118 0.02094697 0.798715 0.02123296 0.798702 0.02437394 0.805767 0.01910197 0.805227 0.01612299 0.809686 0.01344394 0.812262 0.01389294 0.805227 0.01612299 0.804173 0.01291197 0.80713 0.01184695 0.809686 0.01344394 0.90444 0.04780197 0.902792 0.04563599 0.903977 0.04213798 0.90612 0.04424595 0.909387 0.053213 0.910867 0.05055499 0.912915 0.05075496 0.911367 0.05304598 0.792144 0.01973599 0.790256 0.018323 0.791809 0.01727396 0.79316 0.01748895 0.907318 0.04488098 0.905832 0.04881495 0.90444 0.04780197 0.90612 0.04424595 0.905832 0.04881495 0.904001 0.05221796 0.902466 0.05124497 0.90444 0.04780197 0.909383 0.05024498 0.910928 0.04672795 0.912345 0.047387 0.910867 0.05055499 0.907779 0.05335098 0.909383 0.05024498 0.910867 0.05055499 0.909387 0.053213 0.802526 0.02049899 0.801752 0.01745396 0.805227 0.01612299 0.805767 0.01910197 0.909383 0.05024498 0.907792 0.050107 0.909156 0.045852 0.910928 0.04672795 0.907792 0.050107 0.905832 0.04881495 0.907318 0.04488098 0.909156 0.045852 0.907779 0.05335098 0.906078 0.05325394 0.907792 0.050107 0.909383 0.05024498 0.906078 0.05325394 0.904001 0.05221796 0.905832 0.04881495 0.907792 0.050107 0.902466 0.05124497 0.901742 0.04798495 0.902792 0.04563599 0.90444 0.04780197 0.802526 0.02049899 0.798715 0.02123296 0.798968 0.01771998 0.801752 0.01745396 0.798715 0.02123296 0.795118 0.02094697 0.795929 0.01770895 0.798968 0.01771998 0.795249 0.003116965 0.797368 0.002263963 0.797475 0.002512991 0.795503 0.003219962 0.801718 0.003898978 0.800328 0.003296971 0.799428 0.002201974 0.799776 0.001881957 0.910928 0.04672795 0.909156 0.045852 0.910688 0.04154795 0.912417 0.04247695 0.797364 0.002282977 0.799428 0.002201974 0.799167 0.002433955 0.797475 0.002512991 0.909156 0.045852 0.907318 0.04488098 0.909424 0.04067599 0.910688 0.04154795 0.910405 0.03529399 0.909011 0.03401798 0.911362 0.03307199 0.912044 0.03441298 0.80166 0.011123 0.798902 0.01213198 0.798094 0.007499992 0.800948 0.005721986 0.797801 0.006336987 0.79543 0.006120979 0.795821 0.00574696 0.797932 0.005753993 0.795181 0.007558941 0.794345 0.004406988 0.794747 0.004502952 0.79543 0.006120979 0.798902 0.01213198 0.795774 0.011967 0.795181 0.007558941 0.798094 0.007499992 0.801591 0.01401895 0.799235 0.01448297 0.798902 0.01213198 0.80166 0.011123 0.794747 0.004502952 0.795503 0.003219962 0.795796 0.003461956 0.795221 0.004559993 0.799235 0.01448297 0.796315 0.01465696 0.795774 0.011967 0.798902 0.01213198 0.795503 0.003219962 0.796429 0.00308299 0.796542 0.003198981 0.795796 0.003461956 0.801752 0.01745396 0.798968 0.01771998 0.799235 0.01448297 0.801591 0.01401895 0.79543 0.006120979 0.794747 0.004502952 0.795221 0.004559993 0.795821 0.00574696 0.798968 0.01771998 0.795929 0.01770895 0.796315 0.01465696 0.799235 0.01448297 0.795221 0.004559993 0.795796 0.003461956 0.796205 0.003529965 0.795403 0.004547953 0.795796 0.003461956 0.796542 0.003198981 0.796692 0.003309965 0.796205 0.003529965 0.80166 0.011123 0.800948 0.005721986 0.802548 0.005718946 0.803494 0.01052695 0.910736 0.03823298 0.909424 0.04067599 0.908021 0.03995394 0.908833 0.03709197 0.909424 0.04067599 0.907318 0.04488098 0.90612 0.04424595 0.908021 0.03995394 0.793706 0.01178395 0.791477 0.01128798 0.79127 0.007232964 0.793236 0.007583975 0.912417 0.04247695 0.912935 0.03913998 0.914708 0.03981596 0.913708 0.04304397 0.804173 0.01291197 0.803494 0.01052695 0.806517 0.008387982 0.80713 0.01184695 0.910928 0.04672795 0.912417 0.04247695 0.913708 0.04304397 0.912345 0.047387 0.90612 0.04424595 0.903977 0.04213798 0.905873 0.03894698 0.908021 0.03995394 0.795181 0.007558941 0.795774 0.011967 0.793706 0.01178395 0.793236 0.007583975 0.803494 0.01052695 0.802548 0.005718946 0.804605 0.005056977 0.806517 0.008387982 0.795774 0.011967 0.796315 0.01465696 0.794129 0.014292 0.793706 0.01178395 0.908021 0.03995394 0.905873 0.03894698 0.907603 0.03557598 0.908833 0.03709197 0.796315 0.01465696 0.795929 0.01770895 0.79316 0.01748895 0.794129 0.014292 0.912345 0.047387 0.913708 0.04304397 0.915046 0.04392194 0.914163 0.04733097 0.801591 0.01401895 0.80166 0.011123 0.803494 0.01052695 0.804173 0.01291197 0.794129 0.014292 0.792055 0.01445096 0.791477 0.01128798 0.793706 0.01178395 0.80305 0.003058969 0.801718 0.003898978 0.799776 0.001881957 0.80024 0.001637995 0.801752 0.01745396 0.801591 0.01401895 0.804173 0.01291197 0.805227 0.01612299 0.910867 0.05055499 0.912345 0.047387 0.914163 0.04733097 0.912915 0.05075496 0.912935 0.03913998 0.911668 0.03873497 0.912708 0.03662794 0.913393 0.03698098 0.79316 0.01748895 0.791809 0.01727396 0.792055 0.01445096 0.794129 0.014292 0.911668 0.03873497 0.910736 0.03823298 0.911596 0.03615999 0.912708 0.03662794 0.802548 0.005718946 0.800948 0.005721986 0.800328 0.003296971 0.801718 0.003898978 0.800163 0.004683971 0.797801 0.006336987 0.797932 0.005753993 0.799867 0.004597961 0.913393 0.03698098 0.912708 0.03662794 0.913113 0.03545695 0.913921 0.03579199 0.910736 0.03823298 0.908833 0.03709197 0.910405 0.03529399 0.911596 0.03615999 0.912708 0.03662794 0.911596 0.03615999 0.912331 0.03510695 0.913113 0.03545695 0.911596 0.03615999 0.910405 0.03529399 0.912044 0.03441298 0.912331 0.03510695 0.912044 0.03441298 0.91343 0.03457295 0.913113 0.03545695 0.912331 0.03510695 0.795181 0.007558941 0.793236 0.007583975 0.793809 0.004442989 0.794345 0.004406988 0.91343 0.03457295 0.91453 0.03569096 0.913921 0.03579199 0.913113 0.03545695 0.916106 0.04031997 0.914708 0.03981596 0.914667 0.03722196 0.916609 0.03667098 0.911362 0.03307199 0.91372 0.03333395 0.91343 0.03457295 0.912044 0.03441298 0.79127 0.007232964 0.792967 0.003398954 0.793809 0.004442989 0.793236 0.007583975 0.91372 0.03333395 0.915645 0.03505498 0.91453 0.03569096 0.91343 0.03457295 0.912935 0.03913998 0.913393 0.03698098 0.914667 0.03722196 0.914708 0.03981596 0.79454 0.002214968 0.797444 0.001411974 0.797384 0.001911997 0.794769 0.002833962 0.907603 0.03557598 0.909011 0.03401798 0.910405 0.03529399 0.908833 0.03709197 0.797448 0.001462996 0.80024 0.001637995 0.799776 0.001881957 0.79738 0.001959979 0.802548 0.005718946 0.801718 0.003898978 0.80305 0.003058969 0.804605 0.005056977 0.794769 0.002833962 0.797384 0.001911997 0.797368 0.002263963 0.795249 0.003116965 0.913393 0.03698098 0.913921 0.03579199 0.91453 0.03569096 0.914667 0.03722196 0.79738 0.001959979 0.799776 0.001881957 0.799428 0.002201974 0.797364 0.002282977 0.793809 0.004442989 0.792967 0.003398954 0.79454 0.002214968 0.794769 0.002833962 0.800948 0.005721986 0.798094 0.007499992 0.797801 0.006336987 0.800163 0.004683971 0.914667 0.03722196 0.91453 0.03569096 0.915645 0.03505498 0.916609 0.03667098 0.912417 0.04247695 0.910688 0.04154795 0.911668 0.03873497 0.912935 0.03913998 0.798094 0.007499992 0.795181 0.007558941 0.79543 0.006120979 0.797801 0.006336987 0.794345 0.004406988 0.793809 0.004442989 0.794769 0.002833962 0.795249 0.003116965 0.910688 0.04154795 0.909424 0.04067599 0.910736 0.03823298 0.911668 0.03873497 0.794345 0.004406988 0.795249 0.003116965 0.795503 0.003219962 0.794747 0.004502952 0.890242 0.04898595 0.887113 0.05054098 0.888256 0.04622596 0.888799 0.04623496 0.832079 0.028831 0.83059 0.02591699 0.835792 0.025002 0.83724 0.02632099 0.820588 0.02894097 0.823162 0.02421396 0.826172 0.02579396 0.826485 0.03061097 0.817788 0.02621096 0.820773 0.02253198 0.823162 0.02421396 0.820588 0.02894097 0.891809 0.05642199 0.893516 0.05212897 0.895392 0.05256199 0.895028 0.05647397 0.893516 0.05212897 0.89462 0.04896199 0.896486 0.04884195 0.895392 0.05256199 0.886989 0.05584698 0.891451 0.05079799 0.893516 0.05212897 0.891809 0.05642199 0.891451 0.05079799 0.893019 0.04771399 0.89462 0.04896199 0.893516 0.05212897 0.832249 0.03350096 0.831338 0.03294795 0.832079 0.028831 0.834938 0.03095495 0.827075 0.03442299 0.826485 0.03061097 0.832079 0.028831 0.831338 0.03294795 0.814288 0.03092795 0.813603 0.025424 0.81462 0.02036595 0.817788 0.02621096 0.827075 0.03442299 0.831338 0.03294795 0.832249 0.03350096 0.831181 0.03635597 0.824468 0.04869198 0.819119 0.05690896 0.809854 0.05435097 0.813677 0.04446095 0.834938 0.03095495 0.832079 0.028831 0.83724 0.02632099 0.837415 0.02693897 0.895392 0.05256199 0.896486 0.04884195 0.898096 0.04854398 0.897529 0.05120295 0.887113 0.05054098 0.88531 0.050336 0.887743 0.04580599 0.888256 0.04622596 0.88531 0.050336 0.885125 0.04771995 0.887675 0.04450398 0.887743 0.04580599 0.886989 0.05584698 0.883042 0.05556696 0.88531 0.050336 0.887113 0.05054098 0.827075 0.03442299 0.817415 0.03816795 0.820588 0.02894097 0.826485 0.03061097 0.817415 0.03816795 0.814288 0.03092795 0.817788 0.02621096 0.820588 0.02894097 0.827075 0.03442299 0.831181 0.03635597 0.830316 0.04399394 0.817415 0.03816795 0.824468 0.04869198 0.813677 0.04446095 0.817415 0.03816795 0.830316 0.04399394 0.891809 0.05642199 0.895028 0.05647397 0.893664 0.06091296 0.890311 0.06013494 0.886989 0.05584698 0.891809 0.05642199 0.890311 0.06013494 0.885976 0.06150096 0.886989 0.05584698 0.885976 0.06150096 0.882895 0.05882495 0.883042 0.05556696 0.893664 0.06091296 0.895708 0.06413596 0.885976 0.06150096 0.890311 0.06013494 0.820773 0.02253198 0.817788 0.02621096 0.81462 0.02036595 0.818428 0.01901596 0.895028 0.05647397 0.895392 0.05256199 0.897529 0.05120295 0.897114 0.05428999 0.893019 0.04771399 0.891451 0.05079799 0.890242 0.04898595 0.891592 0.046422 0.891451 0.05079799 0.886989 0.05584698 0.887113 0.05054098 0.890242 0.04898595 0.897529 0.05120295 0.898096 0.04854398 0.900393 0.04821896 0.899319 0.05041497 0.81691 0.01278698 0.817802 0.01492899 0.818428 0.01901596 0.81462 0.02036595 0.826485 0.03061097 0.826172 0.02579396 0.83059 0.02591699 0.832079 0.028831 0.817802 0.01492899 0.81932 0.01574295 0.820489 0.01823997 0.818428 0.01901596 0.891592 0.046422 0.890242 0.04898595 0.888799 0.04623496 0.890096 0.04429298 0.822758 0.02087396 0.820773 0.02253198 0.818428 0.01901596 0.820489 0.01823997 0.83059 0.02591699 0.829778 0.02385395 0.834439 0.02340894 0.835792 0.025002 0.823162 0.02421396 0.824744 0.02215296 0.826827 0.02308696 0.826172 0.02579396 0.820773 0.02253198 0.822758 0.02087396 0.824744 0.02215296 0.823162 0.02421396 0.826827 0.02308696 0.82749 0.02115398 0.830126 0.02168297 0.829778 0.02385395 0.82749 0.02115398 0.828749 0.01908296 0.831109 0.019418 0.830126 0.02168297 0.824165 0.019436 0.822758 0.02087396 0.820489 0.01823997 0.822502 0.01792699 0.825312 0.01722097 0.824165 0.019436 0.822502 0.01792699 0.823715 0.01539695 0.896486 0.04884195 0.898932 0.04403996 0.900261 0.04450696 0.898096 0.04854398 0.898932 0.04403996 0.899596 0.04019898 0.90111 0.04078996 0.900261 0.04450696 0.895623 0.04357194 0.893019 0.04771399 0.891592 0.046422 0.893311 0.04221898 0.896701 0.039361 0.895623 0.04357194 0.893311 0.04221898 0.894806 0.03894996 0.820489 0.01823997 0.81932 0.01574295 0.82112 0.01554995 0.822502 0.01792699 0.898096 0.04854398 0.900261 0.04450696 0.901811 0.045246 0.900393 0.04821896 0.822502 0.01792699 0.82112 0.01554995 0.822267 0.01336395 0.823715 0.01539695 0.841748 0.03007096 0.841388 0.02794295 0.8434 0.02632898 0.84361 0.02874296 0.900261 0.04450696 0.90111 0.04078996 0.902836 0.04151999 0.901811 0.045246 0.893311 0.04221898 0.891666 0.04136395 0.892739 0.03868699 0.894806 0.03894996 0.830126 0.02168297 0.831109 0.019418 0.833596 0.01949399 0.833679 0.02134996 0.891592 0.046422 0.890096 0.04429298 0.891666 0.04136395 0.893311 0.04221898 0.829778 0.02385395 0.830126 0.02168297 0.833679 0.02134996 0.834439 0.02340894 0.88674 0.03872996 0.886716 0.03726899 0.888541 0.03756397 0.888865 0.03992694 0.826827 0.02308696 0.824744 0.02215296 0.8258 0.02029198 0.82749 0.02115398 0.824744 0.02215296 0.822758 0.02087396 0.824165 0.019436 0.8258 0.02029198 0.896486 0.04884195 0.89462 0.04896199 0.896652 0.04381096 0.898932 0.04403996 0.89462 0.04896199 0.893019 0.04771399 0.895623 0.04357194 0.896652 0.04381096 0.898932 0.04403996 0.896652 0.04381096 0.897815 0.03975498 0.899596 0.04019898 0.896652 0.04381096 0.895623 0.04357194 0.896701 0.039361 0.897815 0.03975498 0.826172 0.02579396 0.826827 0.02308696 0.829778 0.02385395 0.83059 0.02591699 0.823715 0.01539695 0.822267 0.01336395 0.823558 0.01194095 0.824702 0.01352 0.90111 0.04078996 0.901441 0.03876894 0.903682 0.03930795 0.902836 0.04151999 0.895713 0.03674596 0.893959 0.03648096 0.895023 0.03441995 0.896457 0.03510195 0.831898 0.009502947 0.833787 0.01096194 0.833671 0.01147198 0.831641 0.009825944 0.831964 0.01773399 0.832417 0.01514899 0.834638 0.01510798 0.834516 0.01738995 0.900304 0.036219 0.899124 0.03629398 0.899376 0.03482794 0.90025 0.03528898 0.894806 0.03894996 0.892739 0.03868699 0.893959 0.03648096 0.895713 0.03674596 0.828749 0.01908296 0.830002 0.01738399 0.831964 0.01773399 0.831109 0.019418 0.831109 0.019418 0.831964 0.01773399 0.834516 0.01738995 0.833596 0.01949399 0.826126 0.01555895 0.825312 0.01722097 0.823715 0.01539695 0.824702 0.01352 0.901441 0.03876894 0.901285 0.03629797 0.903496 0.03652697 0.903682 0.03930795 0.824702 0.01352 0.823558 0.01194095 0.825444 0.009945988 0.826133 0.01138496 0.899596 0.04019898 0.899962 0.038396 0.901441 0.03876894 0.90111 0.04078996 0.82749 0.02115398 0.8258 0.02029198 0.826965 0.01843595 0.828749 0.01908296 0.899962 0.038396 0.900304 0.036219 0.901285 0.03629797 0.901441 0.03876894 0.899124 0.03629398 0.898125 0.03608399 0.89855 0.03446096 0.899376 0.03482794 0.8258 0.02029198 0.824165 0.019436 0.825312 0.01722097 0.826965 0.01843595 0.897339 0.03750795 0.896701 0.039361 0.894806 0.03894996 0.895713 0.03674596 0.90025 0.03528898 0.899376 0.03482794 0.899638 0.03417599 0.900247 0.03455299 0.827473 0.01258999 0.826126 0.01555895 0.824702 0.01352 0.826133 0.01138496 0.828749 0.01908296 0.826965 0.01843595 0.827949 0.01673299 0.830002 0.01738399 0.898125 0.03608399 0.897339 0.03750795 0.895713 0.03674596 0.896457 0.03510195 0.826965 0.01843595 0.825312 0.01722097 0.826126 0.01555895 0.827949 0.01673299 0.830002 0.01738399 0.830903 0.01470398 0.832417 0.01514899 0.831964 0.01773399 0.832962 0.01404595 0.832123 0.014126 0.833293 0.01152795 0.833671 0.01147198 0.830903 0.01470398 0.829266 0.01376497 0.829667 0.01318198 0.831545 0.01368999 0.830002 0.01738399 0.827949 0.01673299 0.829266 0.01376497 0.830903 0.01470398 0.831864 0.01387 0.831545 0.01368999 0.831637 0.01339095 0.832069 0.01283299 0.899921 0.03276795 0.901823 0.03365397 0.900822 0.03423595 0.899767 0.03347396 0.827949 0.01673299 0.826126 0.01555895 0.827473 0.01258999 0.829266 0.01376497 0.828752 0.009628951 0.82914 0.009914994 0.829166 0.01015299 0.828612 0.010176 0.899596 0.04019898 0.897815 0.03975498 0.898665 0.03802597 0.899962 0.038396 0.833293 0.01152795 0.832123 0.014126 0.831864 0.01387 0.832909 0.01167899 0.897815 0.03975498 0.896701 0.039361 0.897339 0.03750795 0.898665 0.03802597 0.827767 0.01086699 0.828737 0.00930196 0.828752 0.009628951 0.828096 0.010966 0.830827 0.01036298 0.832076 0.01126098 0.831953 0.01138299 0.830705 0.01058197 0.899962 0.038396 0.898665 0.03802597 0.899124 0.03629398 0.900304 0.036219 0.832123 0.014126 0.830903 0.01470398 0.831545 0.01368999 0.831864 0.01387 0.829266 0.01376497 0.827473 0.01258999 0.828086 0.01200199 0.829667 0.01318198 0.898665 0.03802597 0.897339 0.03750795 0.898125 0.03608399 0.899124 0.03629398 0.827473 0.01258999 0.827767 0.01086699 0.828096 0.010966 0.828086 0.01200199 0.830935 0.01013898 0.832909 0.01167899 0.832076 0.01126098 0.830827 0.01036298 0.831545 0.01368999 0.829667 0.01318198 0.829874 0.01297998 0.831637 0.01339095 0.897349 0.03405398 0.896484 0.03324794 0.898089 0.03282499 0.8982 0.03355896 0.828737 0.00930196 0.831203 0.009853959 0.830935 0.01013898 0.828752 0.009628951 0.829667 0.01318198 0.828086 0.01200199 0.828287 0.01176095 0.829874 0.01297998 0.834478 0.01290094 0.832962 0.01404595 0.833671 0.01147198 0.833787 0.01096194 0.83119 0.009879946 0.833293 0.01152795 0.832909 0.01167899 0.830935 0.01013898 0.82914 0.009914994 0.830827 0.01036298 0.830705 0.01058197 0.829166 0.01015299 0.89855 0.03446096 0.897349 0.03405398 0.8982 0.03355896 0.898871 0.03410899 0.827767 0.01086699 0.827306 0.01030397 0.828747 0.008969962 0.828737 0.00930196 0.828747 0.008969962 0.831898 0.009665966 0.831203 0.009853959 0.828737 0.00930196 0.828752 0.009628951 0.830935 0.01013898 0.830827 0.01036298 0.82914 0.009914994 0.901165 0.03485196 0.900822 0.03423595 0.901823 0.03365397 0.902715 0.03457397 0.899767 0.03347396 0.900822 0.03423595 0.900247 0.03455299 0.899638 0.03417599 0.90025 0.03528898 0.900247 0.03455299 0.900822 0.03423595 0.901165 0.03485196 0.832417 0.01514899 0.832962 0.01404595 0.834478 0.01290094 0.834638 0.01510798 0.895023 0.03441995 0.896484 0.03324794 0.897349 0.03405398 0.896457 0.03510195 0.898089 0.03282499 0.899921 0.03276795 0.899767 0.03347396 0.8982 0.03355896 0.827306 0.01030397 0.827521 0.008847951 0.829023 0.008458971 0.828747 0.008969962 0.831641 0.009825944 0.833671 0.01147198 0.833293 0.01152795 0.83119 0.009879946 0.900304 0.036219 0.90025 0.03528898 0.901165 0.03485196 0.901285 0.03629797 0.825444 0.009945988 0.827521 0.008847951 0.827306 0.01030397 0.826133 0.01138496 0.8982 0.03355896 0.899767 0.03347396 0.899638 0.03417599 0.898871 0.03410899 0.903496 0.03652697 0.901285 0.03629797 0.901165 0.03485196 0.902715 0.03457397 0.827473 0.01258999 0.826133 0.01138496 0.827306 0.01030397 0.827767 0.01086699 0.829023 0.008458971 0.832093 0.009211957 0.831898 0.009665966 0.828747 0.008969962 0.898125 0.03608399 0.896457 0.03510195 0.897349 0.03405398 0.89855 0.03446096 0.899376 0.03482794 0.89855 0.03446096 0.898871 0.03410899 0.899638 0.03417599 0.832417 0.01514899 0.830903 0.01470398 0.832123 0.014126 0.832962 0.01404595 0.837354 0.048895 0.841038 0.04706597 0.843239 0.04851299 0.842351 0.05299597 0.837354 0.048895 0.832084 0.05432695 0.824468 0.04869198 0.830316 0.04399394 0.837354 0.048895 0.842351 0.05299597 0.838207 0.05841296 0.832084 0.05432695 0.882895 0.05882495 0.885976 0.06150096 0.875381 0.06101 0.87915 0.05878597 0.86808 0.06329298 0.870827 0.060148 0.875381 0.06101 0.870396 0.06714797 0.87973 0.05603599 0.883042 0.05556696 0.882895 0.05882495 0.87915 0.05878597 0.872842 0.05045199 0.874077 0.04626798 0.875013 0.04518496 0.873889 0.05144494 0.838207 0.05841296 0.832685 0.06605696 0.826731 0.06171 0.832084 0.05432695 0.875583 0.05565196 0.87973 0.05603599 0.87915 0.05878597 0.875381 0.06101 0.832084 0.05432695 0.826731 0.06171 0.819119 0.05690896 0.824468 0.04869198 0.870857 0.05442196 0.875583 0.05565196 0.875381 0.06101 0.870827 0.060148 0.870857 0.05442196 0.872842 0.05045199 0.873889 0.05144494 0.875583 0.05565196 0.87996 0.04451996 0.878635 0.04875695 0.877665 0.04650896 0.878903 0.04360795 0.83787 0.02774995 0.838748 0.02847498 0.838873 0.03108495 0.836913 0.03114295 0.885125 0.04771995 0.885863 0.04419296 0.887919 0.04326498 0.887675 0.04450398 0.837128 0.03446996 0.837889 0.03747898 0.83536 0.03952598 0.834645 0.03539299 0.88373 0.04531794 0.884927 0.04124099 0.886714 0.04194796 0.885863 0.04419296 0.843755 0.04062396 0.844007 0.03829395 0.845418 0.03913199 0.845286 0.04099696 0.837354 0.048895 0.839209 0.04286199 0.843628 0.04317796 0.841038 0.04706597 0.873889 0.05144494 0.875013 0.04518496 0.876089 0.04379498 0.877665 0.04650896 0.837889 0.03747898 0.840398 0.03984898 0.839209 0.04286199 0.83536 0.03952598 0.881315 0.04086798 0.87996 0.04451996 0.878903 0.04360795 0.879873 0.04035997 0.881687 0.045385 0.883275 0.04087895 0.884927 0.04124099 0.88373 0.04531794 0.837889 0.03747898 0.839834 0.03563594 0.84148 0.03702795 0.840398 0.03984898 0.834645 0.03539299 0.831181 0.03635597 0.832249 0.03350096 0.834938 0.03095495 0.87996 0.04451996 0.881315 0.04086798 0.883275 0.04087895 0.881687 0.045385 0.834938 0.03095495 0.837415 0.02693897 0.83787 0.02774995 0.836913 0.03114295 0.882916 0.04989099 0.885125 0.04771995 0.88531 0.050336 0.883042 0.05556696 0.883042 0.05556696 0.87973 0.05603599 0.880197 0.05019199 0.882916 0.04989099 0.837128 0.03446996 0.839347 0.03378397 0.839834 0.03563594 0.837889 0.03747898 0.841038 0.04706597 0.843628 0.04317796 0.845037 0.04568195 0.843239 0.04851299 0.878635 0.04875695 0.875583 0.05565196 0.873889 0.05144494 0.877665 0.04650896 0.834645 0.03539299 0.834938 0.03095495 0.836913 0.03114295 0.837128 0.03446996 0.843628 0.04317796 0.843755 0.04062396 0.845286 0.04099696 0.846178 0.04190194 0.845037 0.04568195 0.843628 0.04317796 0.846178 0.04190194 0.847347 0.04116696 0.840398 0.03984898 0.84148 0.03702795 0.844007 0.03829395 0.843755 0.04062396 0.839209 0.04286199 0.840398 0.03984898 0.843755 0.04062396 0.843628 0.04317796 0.837354 0.048895 0.830316 0.04399394 0.83536 0.03952598 0.839209 0.04286199 0.839347 0.03378397 0.837128 0.03446996 0.836913 0.03114295 0.838873 0.03108495 0.87973 0.05603599 0.875583 0.05565196 0.878635 0.04875695 0.880197 0.05019199 0.885863 0.04419296 0.886714 0.04194796 0.88839 0.04187798 0.887919 0.04326498 0.878635 0.04875695 0.87996 0.04451996 0.881687 0.045385 0.880197 0.05019199 0.830316 0.04399394 0.831181 0.03635597 0.834645 0.03539299 0.83536 0.03952598 0.882916 0.04989099 0.88373 0.04531794 0.885863 0.04419296 0.885125 0.04771995 0.876089 0.04379498 0.877546 0.04190999 0.878903 0.04360795 0.877665 0.04650896 0.880197 0.05019199 0.881687 0.045385 0.88373 0.04531794 0.882916 0.04989099 0.849587 0.02826595 0.849843 0.029679 0.849646 0.02957797 0.84934 0.02836894 0.84719 0.02701997 0.847512 0.02601999 0.848622 0.02643495 0.848528 0.027197 0.847768 0.03102999 0.846602 0.03048896 0.846794 0.03028398 0.847844 0.03078496 0.88539 0.03522294 0.885524 0.03460395 0.885984 0.03402799 0.886354 0.03472197 0.884848 0.03809398 0.883719 0.03800696 0.884069 0.03687494 0.885031 0.03706395 0.849645 0.03105795 0.849166 0.03086495 0.849843 0.029679 0.850118 0.02996695 0.850069 0.02815395 0.850118 0.02996695 0.849843 0.029679 0.849587 0.02826595 0.840497 0.03045195 0.839869 0.02846097 0.841388 0.02794295 0.841748 0.03007096 0.843243 0.03549295 0.844024 0.03451299 0.845626 0.03527599 0.844763 0.036704 0.885031 0.03706395 0.885359 0.03597396 0.886565 0.03591996 0.886716 0.03726899 0.849843 0.029679 0.849166 0.03086495 0.84905 0.03068798 0.849646 0.02957797 0.846927 0.02757495 0.84719 0.02701997 0.848528 0.027197 0.848288 0.02754294 0.848622 0.02643495 0.850267 0.027538 0.849926 0.02783995 0.848528 0.027197 0.846052 0.02577799 0.847512 0.02601999 0.84719 0.02701997 0.845761 0.02715694 0.883518 0.03482598 0.882651 0.034051 0.883384 0.03387099 0.883734 0.03436595 0.844024 0.03451299 0.845757 0.03311699 0.846708 0.03404295 0.845626 0.03527599 0.884069 0.03687494 0.882836 0.03679096 0.883167 0.03560596 0.884278 0.03590595 0.886716 0.03726899 0.886565 0.03591996 0.888098 0.03520095 0.888541 0.03756397 0.882488 0.03792196 0.881315 0.04086798 0.879873 0.04035997 0.880723 0.03799295 0.848507 0.03220295 0.847768 0.03102999 0.849166 0.03086495 0.849645 0.03105795 0.883275 0.04087895 0.881315 0.04086798 0.882488 0.03792196 0.883719 0.03800696 0.846927 0.02757495 0.848288 0.02754294 0.84808 0.02769994 0.846937 0.027906 0.886354 0.03472197 0.885984 0.03402799 0.886646 0.03339499 0.887433 0.03404295 0.850479 0.02809798 0.850746 0.02999597 0.850118 0.02996695 0.850069 0.02815395 0.842729 0.033252 0.842343 0.03186595 0.843975 0.03037297 0.844696 0.03180897 0.888098 0.03520095 0.886565 0.03591996 0.886354 0.03472197 0.887433 0.03404295 0.881449 0.03630095 0.879469 0.03589999 0.881162 0.03414595 0.882036 0.03487497 0.842343 0.03186595 0.840828 0.032709 0.840497 0.03045195 0.841748 0.03007096 0.84361 0.02874296 0.8434 0.02632898 0.846052 0.02577799 0.845761 0.02715694 0.84905 0.03068798 0.847844 0.03078496 0.847931 0.03064495 0.848899 0.03041195 0.882836 0.03679096 0.882488 0.03792196 0.880723 0.03799295 0.881449 0.03630095 0.845761 0.02914196 0.843975 0.03037297 0.84361 0.02874296 0.845761 0.02715694 0.883131 0.03320395 0.885018 0.03293496 0.884974 0.03342998 0.883384 0.03387099 0.885018 0.03293496 0.886646 0.03339499 0.885984 0.03402799 0.884974 0.03342998 0.885031 0.03706395 0.884069 0.03687494 0.884278 0.03590595 0.885359 0.03597396 0.879873 0.04035997 0.878444 0.03969699 0.878876 0.03785598 0.880723 0.03799295 0.845626 0.03527599 0.846708 0.03404295 0.848059 0.034684 0.846978 0.03638797 0.884848 0.03809398 0.885031 0.03706395 0.886716 0.03726899 0.88674 0.03872996 0.883384 0.03387099 0.884974 0.03342998 0.884703 0.03431898 0.883734 0.03436595 0.845761 0.02914196 0.845761 0.02715694 0.84719 0.02701997 0.846927 0.02757495 0.844763 0.036704 0.845626 0.03527599 0.846978 0.03638797 0.846205 0.03766095 0.846708 0.03404295 0.848507 0.03220295 0.849724 0.03238499 0.848059 0.034684 0.884974 0.03342998 0.885984 0.03402799 0.885524 0.03460395 0.884703 0.03431898 0.843975 0.03037297 0.842343 0.03186595 0.841748 0.03007096 0.84361 0.02874296 0.884927 0.04124099 0.883275 0.04087895 0.883719 0.03800696 0.884848 0.03809398 0.843243 0.03549295 0.841612 0.03413999 0.842729 0.033252 0.844024 0.03451299 0.88539 0.03522294 0.884561 0.03516 0.884703 0.03431898 0.885524 0.03460395 0.883167 0.03560596 0.882836 0.03679096 0.881449 0.03630095 0.882036 0.03487497 0.884561 0.03516 0.883518 0.03482598 0.883734 0.03436595 0.884703 0.03431898 0.845761 0.02914196 0.846927 0.02757495 0.846937 0.027906 0.846 0.02915894 0.844024 0.03451299 0.842729 0.033252 0.844696 0.03180897 0.845757 0.03311699 0.885359 0.03597396 0.884278 0.03590595 0.884561 0.03516 0.88539 0.03522294 0.849166 0.03086495 0.847768 0.03102999 0.847844 0.03078496 0.84905 0.03068798 0.884278 0.03590595 0.883167 0.03560596 0.883518 0.03482598 0.884561 0.03516 0.84148 0.03702795 0.843243 0.03549295 0.844763 0.036704 0.844007 0.03829395 0.885359 0.03597396 0.88539 0.03522294 0.886354 0.03472197 0.886565 0.03591996 0.841612 0.03413999 0.840828 0.032709 0.842343 0.03186595 0.842729 0.033252 0.840828 0.032709 0.839347 0.03378397 0.838873 0.03108495 0.840497 0.03045195 0.845757 0.03311699 0.847768 0.03102999 0.848507 0.03220295 0.846708 0.03404295 0.845757 0.03311699 0.844696 0.03180897 0.846602 0.03048896 0.847768 0.03102999 0.838748 0.02847498 0.839869 0.02846097 0.840497 0.03045195 0.838873 0.03108495 0.882651 0.034051 0.882152 0.03327298 0.883131 0.03320395 0.883384 0.03387099 0.883719 0.03800696 0.882488 0.03792196 0.882836 0.03679096 0.884069 0.03687494 0.880723 0.03799295 0.878876 0.03785598 0.879469 0.03589999 0.881449 0.03630095 0.877546 0.04190999 0.878444 0.03969699 0.879873 0.04035997 0.878903 0.04360795 0.848507 0.03220295 0.849645 0.03105795 0.850169 0.03098696 0.849724 0.03238499 0.844007 0.03829395 0.844763 0.036704 0.846205 0.03766095 0.845418 0.03913199 0.883167 0.03560596 0.882036 0.03487497 0.882651 0.034051 0.883518 0.03482598 0.844696 0.03180897 0.843975 0.03037297 0.845761 0.02914196 0.846602 0.03048896 0.839834 0.03563594 0.841612 0.03413999 0.843243 0.03549295 0.84148 0.03702795 0.884927 0.04124099 0.884848 0.03809398 0.88674 0.03872996 0.886714 0.04194796 0.839347 0.03378397 0.840828 0.032709 0.841612 0.03413999 0.839834 0.03563594 0.84905 0.03068798 0.848899 0.03041195 0.849315 0.029697 0.849646 0.02957797 0.850169 0.03098696 0.849645 0.03105795 0.850118 0.02996695 0.850746 0.02999597 0.848528 0.027197 0.849926 0.02783995 0.84954 0.02818399 0.848288 0.02754294 0.881162 0.03414595 0.882152 0.03327298 0.882651 0.034051 0.882036 0.03487497 0.848288 0.02754294 0.84954 0.02818399 0.84934 0.02836894 0.84808 0.02769994 0.886714 0.04194796 0.88674 0.03872996 0.888865 0.03992694 0.88839 0.04187798 0.846602 0.03048896 0.845761 0.02914196 0.846 0.02915894 0.846794 0.03028398 0.855819 0.06953799 0.857061 0.06500399 0.859976 0.065759 0.860368 0.07051396 0.842768 0.06301599 0.837428 0.07000797 0.832685 0.06605696 0.838207 0.05841296 0.847207 0.06562697 0.841077 0.07334595 0.837428 0.07000797 0.842768 0.06301599 0.859976 0.065759 0.86414 0.065032 0.864536 0.06865298 0.860368 0.07051396 0.864587 0.05671197 0.867202 0.056095 0.86808 0.06329298 0.86414 0.065032 0.870396 0.06714797 0.864536 0.06865298 0.86414 0.065032 0.86808 0.06329298 0.842351 0.05299597 0.845989 0.05721396 0.842768 0.06301599 0.838207 0.05841296 0.867202 0.056095 0.870857 0.05442196 0.870827 0.060148 0.86808 0.06329298 0.861315 0.05670797 0.864587 0.05671197 0.86414 0.065032 0.859976 0.065759 0.848967 0.05901199 0.847207 0.06562697 0.842768 0.06301599 0.845989 0.05721396 0.847207 0.06562697 0.848967 0.05901199 0.852738 0.06265497 0.851776 0.06714296 0.851776 0.06714296 0.852738 0.06265497 0.857061 0.06500399 0.855819 0.06953799 0.857061 0.06500399 0.858575 0.05778294 0.861315 0.05670797 0.859976 0.065759 0.845037 0.04568195 0.847347 0.04116696 0.848506 0.04144698 0.848358 0.04402095 0.842351 0.05299597 0.843239 0.04851299 0.845037 0.04568195 0.845517 0.04955196 0.848967 0.05901199 0.849627 0.05424195 0.854088 0.05602699 0.852738 0.06265497 0.849627 0.05424195 0.853348 0.05087196 0.85613 0.05189096 0.854088 0.05602699 0.852738 0.06265497 0.854088 0.05602699 0.858575 0.05778294 0.857061 0.06500399 0.854088 0.05602699 0.85613 0.05189096 0.859519 0.05275297 0.858575 0.05778294 0.858575 0.05778294 0.859519 0.05275297 0.862142 0.05279594 0.861315 0.05670797 0.870857 0.05442196 0.870268 0.04938995 0.872529 0.04736697 0.872842 0.05045199 0.874077 0.04626798 0.872842 0.05045199 0.872529 0.04736697 0.873542 0.045946 0.862142 0.05279594 0.865099 0.05250895 0.864587 0.05671197 0.861315 0.05670797 0.848967 0.05901199 0.845989 0.05721396 0.847462 0.05245494 0.849627 0.05424195 0.845989 0.05721396 0.842351 0.05299597 0.845517 0.04955196 0.847462 0.05245494 0.849627 0.05424195 0.847462 0.05245494 0.850306 0.04951798 0.853348 0.05087196 0.847462 0.05245494 0.845517 0.04955196 0.848397 0.04709899 0.850306 0.04951798 0.850306 0.04951798 0.848397 0.04709899 0.851193 0.04515498 0.852679 0.04751896 0.865099 0.05250895 0.867182 0.05192196 0.867202 0.056095 0.864587 0.05671197 0.867182 0.05192196 0.870268 0.04938995 0.870857 0.05442196 0.867202 0.056095 0.845517 0.04955196 0.845037 0.04568195 0.848358 0.04402095 0.848397 0.04709899 0.86066 0.04229199 0.857488 0.04526895 0.858879 0.04307496 0.859739 0.042391 0.857382 0.04896795 0.858866 0.04703199 0.861257 0.04657399 0.860529 0.04884397 0.856371 0.03933298 0.858122 0.03820699 0.857622 0.03959196 0.856519 0.04043799 0.858866 0.04703199 0.859909 0.04497694 0.862479 0.04425597 0.861257 0.04657399 0.86128 0.040757 0.86066 0.04229199 0.859739 0.042391 0.860012 0.04145097 0.859519 0.05275297 0.860529 0.04884397 0.863089 0.04849594 0.862142 0.05279594 0.859739 0.042391 0.859343 0.04250597 0.859394 0.04222798 0.860012 0.04145097 0.860529 0.04884397 0.861257 0.04657399 0.863498 0.04611098 0.863089 0.04849594 0.861257 0.04657399 0.862479 0.04425597 0.864146 0.04370498 0.863498 0.04611098 0.853348 0.05087196 0.850306 0.04951798 0.852679 0.04751896 0.855199 0.04864495 0.870268 0.04938995 0.868786 0.04652196 0.871017 0.04471999 0.872529 0.04736697 0.855199 0.04864495 0.852679 0.04751896 0.854515 0.04547494 0.856791 0.04654794 0.868786 0.04652196 0.868032 0.04450297 0.869984 0.04287099 0.871017 0.04471999 0.863226 0.04210895 0.861607 0.04225295 0.862225 0.04052996 0.863307 0.04015195 0.868032 0.04450297 0.867479 0.04273295 0.86885 0.04164099 0.869984 0.04287099 0.848358 0.04402095 0.848506 0.04144698 0.850488 0.04086399 0.850864 0.04319196 0.866023 0.04541695 0.868032 0.04450297 0.868786 0.04652196 0.866083 0.04712998 0.854515 0.04547494 0.853026 0.04353797 0.854196 0.04231697 0.855948 0.04394996 0.864778 0.04782199 0.866083 0.04712998 0.867182 0.05192196 0.865099 0.05250895 0.850864 0.04319196 0.850488 0.04086399 0.852101 0.03986299 0.852382 0.04198896 0.866083 0.04712998 0.868786 0.04652196 0.870268 0.04938995 0.867182 0.05192196 0.872484 0.04387199 0.871017 0.04471999 0.869984 0.04287099 0.871611 0.04185199 0.864919 0.04566997 0.866023 0.04541695 0.866083 0.04712998 0.864778 0.04782199 0.871611 0.04185199 0.869984 0.04287099 0.86885 0.04164099 0.870232 0.04030895 0.859909 0.04497694 0.857488 0.04526895 0.86066 0.04229199 0.861607 0.04225295 0.86522 0.04349899 0.866211 0.04317498 0.866023 0.04541695 0.864919 0.04566997 0.863089 0.04849594 0.864778 0.04782199 0.865099 0.05250895 0.862142 0.05279594 0.866211 0.04317498 0.867479 0.04273295 0.868032 0.04450297 0.866023 0.04541695 0.863498 0.04611098 0.864919 0.04566997 0.864778 0.04782199 0.863089 0.04849594 0.867479 0.04273295 0.866211 0.04317498 0.866087 0.04185998 0.86708 0.04146695 0.866211 0.04317498 0.86522 0.04349899 0.865383 0.04212296 0.866087 0.04185998 0.86522 0.04349899 0.864146 0.04370498 0.864628 0.04230797 0.865383 0.04212296 0.852679 0.04751896 0.851193 0.04515498 0.853026 0.04353797 0.854515 0.04547494 0.865383 0.04212296 0.864628 0.04230797 0.864968 0.04118299 0.865537 0.04135996 0.866087 0.04185998 0.865383 0.04212296 0.865537 0.04135996 0.865963 0.04090499 0.852382 0.04198896 0.852101 0.03986299 0.853746 0.03858697 0.853918 0.04056495 0.864968 0.04118299 0.8657 0.04031699 0.865963 0.04090499 0.865537 0.04135996 0.853026 0.04353797 0.852382 0.04198896 0.853918 0.04056495 0.854196 0.04231697 0.865374 0.03959596 0.866553 0.03905099 0.866518 0.04004496 0.8657 0.04031699 0.856791 0.04654794 0.854515 0.04547494 0.855948 0.04394996 0.857488 0.04526895 0.8657 0.04031699 0.866518 0.04004496 0.866474 0.04082095 0.865963 0.04090499 0.854196 0.04231697 0.853918 0.04056495 0.855962 0.03885799 0.856371 0.03933298 0.864339 0.04070299 0.865374 0.03959596 0.8657 0.04031699 0.864968 0.04118299 0.870232 0.04030895 0.86885 0.04164099 0.867649 0.040564 0.868213 0.03913199 0.86708 0.04146695 0.866087 0.04185998 0.865963 0.04090499 0.866474 0.04082095 0.853746 0.03858697 0.856141 0.03724199 0.855962 0.03885799 0.853918 0.04056495 0.858253 0.036596 0.860012 0.03651398 0.860043 0.03741598 0.858162 0.037539 0.867479 0.04273295 0.86708 0.04146695 0.867649 0.040564 0.86885 0.04164099 0.86261 0.03838199 0.863307 0.04015195 0.862225 0.04052996 0.861755 0.03867596 0.862479 0.04425597 0.863226 0.04210895 0.864628 0.04230797 0.864146 0.04370498 0.858162 0.037539 0.860043 0.03741598 0.859956 0.03885096 0.858122 0.03820699 0.859909 0.04497694 0.861607 0.04225295 0.863226 0.04210895 0.862479 0.04425597 0.861755 0.03867596 0.862225 0.04052996 0.86128 0.040757 0.8605 0.03936296 0.86708 0.04146695 0.866474 0.04082095 0.866518 0.04004496 0.867649 0.040564 0.857488 0.04526895 0.855948 0.04394996 0.857121 0.04270595 0.858879 0.04307496 0.855962 0.03885799 0.856141 0.03724199 0.858253 0.036596 0.858162 0.037539 0.848397 0.04709899 0.848358 0.04402095 0.850864 0.04319196 0.851193 0.04515498 0.873542 0.045946 0.872529 0.04736697 0.871017 0.04471999 0.872484 0.04387199 0.855948 0.04394996 0.854196 0.04231697 0.856214 0.04102098 0.857121 0.04270595 0.867649 0.040564 0.866518 0.04004496 0.866553 0.03905099 0.868213 0.03913199 0.851193 0.04515498 0.850864 0.04319196 0.852382 0.04198896 0.853026 0.04353797 0.864146 0.04370498 0.86522 0.04349899 0.864919 0.04566997 0.863498 0.04611098 0.858122 0.03820699 0.859956 0.03885096 0.859449 0.03986996 0.857622 0.03959196 0.856371 0.03933298 0.855962 0.03885799 0.858162 0.037539 0.858122 0.03820699 0.853348 0.05087196 0.855199 0.04864495 0.857382 0.04896795 0.85613 0.05189096 0.8605 0.03936296 0.86128 0.040757 0.860012 0.04145097 0.859449 0.03986996 0.861607 0.04225295 0.86066 0.04229199 0.86128 0.040757 0.862225 0.04052996 0.855199 0.04864495 0.856791 0.04654794 0.858866 0.04703199 0.857382 0.04896795 0.857121 0.04270595 0.856214 0.04102098 0.856411 0.04093897 0.85728 0.04252499 0.858879 0.04307496 0.857121 0.04270595 0.85728 0.04252499 0.858712 0.04298698 0.859739 0.042391 0.858879 0.04307496 0.858712 0.04298698 0.859343 0.04250597 0.856791 0.04654794 0.857488 0.04526895 0.859909 0.04497694 0.858866 0.04703199 0.864628 0.04230797 0.863226 0.04210895 0.864339 0.04070299 0.864968 0.04118299 0.85613 0.05189096 0.857382 0.04896795 0.860529 0.04884397 0.859519 0.05275297 0.294978 0.74586 0.282465 0.756141 0.283546 0.748412 0.292939 0.742072 0.275597 0.799041 0.276395 0.806939 0.268305 0.809687 0.268626 0.801606 0.275357 0.773387 0.28105 0.772184 0.280634 0.778411 0.275054 0.779627 0.281941 0.80155 0.286684 0.795594 0.290094 0.800054 0.286845 0.808285 0.28603 0.780979 0.280382 0.783877 0.280634 0.778411 0.286196 0.775475 0.286845 0.808285 0.290094 0.800054 0.296685 0.801711 0.29583 0.810797 0.276395 0.806939 0.28241 0.817441 0.268919 0.818702 0.268305 0.809687 0.300969 0.736536 0.301322 0.739207 0.294978 0.74586 0.292939 0.742072 0.28241 0.817441 0.286845 0.808285 0.29583 0.810797 0.29692 0.818196 0.275385 0.791076 0.275597 0.799041 0.268626 0.801606 0.26811 0.793924 0.28105 0.772184 0.286865 0.770236 0.286196 0.775475 0.280634 0.778411 0.280636 0.788658 0.285939 0.785079 0.285757 0.790213 0.280317 0.79614 0.300631 0.733634 0.300969 0.736536 0.292939 0.742072 0.292808 0.736334 0.275385 0.791076 0.280636 0.788658 0.280317 0.79614 0.275597 0.799041 0.283546 0.748412 0.282465 0.756141 0.274366 0.760151 0.27534 0.751188 0.275385 0.791076 0.26811 0.793924 0.268755 0.787447 0.275015 0.785445 0.28154 0.764805 0.288255 0.76149 0.286865 0.770236 0.28105 0.772184 0.280636 0.788658 0.275385 0.791076 0.275015 0.785445 0.280382 0.783877 0.280317 0.79614 0.285757 0.790213 0.286684 0.795594 0.281941 0.80155 0.275331 0.766921 0.28154 0.764805 0.28105 0.772184 0.275357 0.773387 0.288255 0.76149 0.28154 0.764805 0.282465 0.756141 0.294978 0.74586 0.28154 0.764805 0.275331 0.766921 0.274366 0.760151 0.282465 0.756141 0.308036 0.81201 0.304825 0.806928 0.312122 0.801217 0.313237 0.804152 0.275597 0.799041 0.280317 0.79614 0.281941 0.80155 0.276395 0.806939 0.299823 0.748027 0.294978 0.74586 0.301322 0.739207 0.302832 0.741672 0.304825 0.806928 0.303921 0.800597 0.312435 0.798734 0.312122 0.801217 0.285939 0.785079 0.280636 0.788658 0.280382 0.783877 0.28603 0.780979 0.29583 0.810797 0.296685 0.801711 0.303921 0.800597 0.304825 0.806928 0.29692 0.818196 0.29583 0.810797 0.304825 0.806928 0.308036 0.81201 0.280382 0.783877 0.275015 0.785445 0.275054 0.779627 0.280634 0.778411 0.299823 0.748027 0.294954 0.758753 0.288255 0.76149 0.294978 0.74586 0.276395 0.806939 0.281941 0.80155 0.286845 0.808285 0.28241 0.817441 0.304297 0.749046 0.30966 0.748634 0.310279 0.753415 0.302768 0.755057 0.31411 0.769042 0.306807 0.772283 0.307482 0.768021 0.313885 0.765881 0.300523 0.767279 0.308546 0.76325 0.307482 0.768021 0.299358 0.772419 0.29851 0.776917 0.299358 0.772419 0.307482 0.768021 0.306807 0.772283 0.291988 0.781223 0.29244 0.78526 0.285757 0.790213 0.285939 0.785079 0.293731 0.788813 0.29244 0.78526 0.299362 0.780219 0.30086 0.784059 0.315273 0.789094 0.32094 0.786078 0.323508 0.788325 0.319295 0.791315 0.305503 0.789752 0.312418 0.787167 0.315273 0.789094 0.310006 0.79186 0.29851 0.776917 0.306807 0.772283 0.306657 0.7762 0.299362 0.780219 0.296344 0.791997 0.293731 0.788813 0.30086 0.784059 0.302849 0.78694 0.29851 0.776917 0.291988 0.781223 0.292392 0.77668 0.299358 0.772419 0.294954 0.758753 0.293094 0.766782 0.286865 0.770236 0.288255 0.76149 0.292606 0.772126 0.293094 0.766782 0.301263 0.76155 0.300523 0.767279 0.301263 0.76155 0.309459 0.759162 0.308546 0.76325 0.300523 0.767279 0.299823 0.748027 0.302832 0.741672 0.305226 0.744034 0.304297 0.749046 0.299843 0.794098 0.296344 0.791997 0.302849 0.78694 0.305503 0.789752 0.299843 0.794098 0.305712 0.795429 0.303921 0.800597 0.296685 0.801711 0.315898 0.753188 0.314454 0.757886 0.309459 0.759162 0.310279 0.753415 0.30966 0.748634 0.31497 0.748169 0.315898 0.753188 0.310279 0.753415 0.299362 0.780219 0.306657 0.7762 0.307743 0.780781 0.30086 0.784059 0.293731 0.788813 0.296344 0.791997 0.290094 0.800054 0.286684 0.795594 0.299843 0.794098 0.296685 0.801711 0.290094 0.800054 0.296344 0.791997 0.306807 0.772283 0.31411 0.769042 0.313893 0.772953 0.306657 0.7762 0.317013 0.780323 0.309149 0.783892 0.307743 0.780781 0.314757 0.777002 0.309149 0.783892 0.317013 0.780323 0.31897 0.784076 0.312418 0.787167 0.30086 0.784059 0.307743 0.780781 0.309149 0.783892 0.302849 0.78694 0.294954 0.758753 0.299823 0.748027 0.304297 0.749046 0.302768 0.755057 0.292392 0.77668 0.291988 0.781223 0.285939 0.785079 0.28603 0.780979 0.313491 0.796258 0.305712 0.795429 0.310006 0.79186 0.315859 0.793967 0.305712 0.795429 0.313491 0.796258 0.312435 0.798734 0.303921 0.800597 0.292606 0.772126 0.292392 0.77668 0.28603 0.780979 0.286196 0.775475 0.313858 0.76172 0.313885 0.765881 0.307482 0.768021 0.308546 0.76325 0.309298 0.745186 0.314229 0.745489 0.31497 0.748169 0.30966 0.748634 0.292392 0.77668 0.292606 0.772126 0.300523 0.767279 0.299358 0.772419 0.312418 0.787167 0.31897 0.784076 0.32094 0.786078 0.315273 0.789094 0.293094 0.766782 0.292606 0.772126 0.286196 0.775475 0.286865 0.770236 0.305226 0.744034 0.309298 0.745186 0.30966 0.748634 0.304297 0.749046 0.305712 0.795429 0.299843 0.794098 0.305503 0.789752 0.310006 0.79186 0.307743 0.780781 0.306657 0.7762 0.313893 0.772953 0.314757 0.777002 0.29244 0.78526 0.291988 0.781223 0.29851 0.776917 0.299362 0.780219 0.29244 0.78526 0.293731 0.788813 0.286684 0.795594 0.285757 0.790213 0.313858 0.76172 0.308546 0.76325 0.309459 0.759162 0.314454 0.757886 0.302849 0.78694 0.309149 0.783892 0.312418 0.787167 0.305503 0.789752 0.310006 0.79186 0.315273 0.789094 0.319295 0.791315 0.315859 0.793967 0.302768 0.755057 0.310279 0.753415 0.309459 0.759162 0.301263 0.76155 0.293094 0.766782 0.294954 0.758753 0.302768 0.755057 0.301263 0.76155 0.328017 0.777114 0.331302 0.777434 0.327671 0.779953 0.32406 0.777526 0.334881 0.770808 0.332978 0.774909 0.332258 0.774435 0.334067 0.770742 0.323604 0.752883 0.315898 0.753188 0.31497 0.748169 0.324066 0.749219 0.337866 0.772614 0.336794 0.771107 0.337961 0.767026 0.341064 0.769789 0.334881 0.770808 0.334067 0.770742 0.333509 0.767626 0.334398 0.767422 0.332912 0.778423 0.329493 0.781256 0.327671 0.779953 0.331302 0.777434 0.328641 0.761486 0.323991 0.762739 0.324768 0.759806 0.328289 0.759575 0.332978 0.774909 0.333735 0.774724 0.331302 0.777434 0.328017 0.777114 0.322164 0.756878 0.321119 0.760357 0.313858 0.76172 0.314454 0.757886 0.334881 0.770808 0.336794 0.771107 0.333735 0.774724 0.332978 0.774909 0.322743 0.767219 0.328005 0.764874 0.327418 0.765733 0.324122 0.767171 0.323991 0.762739 0.320937 0.763804 0.321119 0.760357 0.324768 0.759806 0.332191 0.764873 0.334398 0.767422 0.333509 0.767626 0.331128 0.765539 0.319575 0.769856 0.313893 0.772953 0.31411 0.769042 0.320433 0.766889 0.332191 0.764873 0.332827 0.763428 0.336201 0.764346 0.334398 0.767422 0.320835 0.773906 0.319575 0.769856 0.322743 0.767219 0.323417 0.772615 0.313885 0.765881 0.313858 0.76172 0.321119 0.760357 0.320937 0.763804 0.339037 0.775441 0.336418 0.777353 0.335075 0.775519 0.337866 0.772614 0.323604 0.752883 0.327832 0.752139 0.327137 0.756365 0.322164 0.756878 0.334893 0.780107 0.331276 0.783536 0.329493 0.781256 0.332912 0.778423 0.328453 0.763701 0.323597 0.764979 0.323991 0.762739 0.328641 0.761486 0.31897 0.784076 0.317013 0.780323 0.32406 0.777526 0.327671 0.779953 0.336418 0.777353 0.334893 0.780107 0.332912 0.778423 0.335075 0.775519 0.31411 0.769042 0.313885 0.765881 0.320937 0.763804 0.320433 0.766889 0.327832 0.752139 0.331553 0.752628 0.330538 0.757202 0.327137 0.756365 0.328017 0.777114 0.323417 0.772615 0.325389 0.771921 0.328292 0.776291 0.331384 0.74894 0.327403 0.749282 0.327269 0.746222 0.32998 0.746635 0.328289 0.759575 0.33151 0.758766 0.332757 0.760703 0.328641 0.761486 0.323597 0.764979 0.320433 0.766889 0.320937 0.763804 0.323991 0.762739 0.332757 0.760703 0.33151 0.758766 0.336446 0.757911 0.336613 0.760551 0.325389 0.771921 0.324122 0.767171 0.324932 0.76734 0.326229 0.771533 0.320835 0.773906 0.32406 0.777526 0.317013 0.780323 0.314757 0.777002 0.320835 0.773906 0.323417 0.772615 0.328017 0.777114 0.32406 0.777526 0.314229 0.745489 0.322897 0.745642 0.324066 0.749219 0.31497 0.748169 0.333735 0.774724 0.336794 0.771107 0.337866 0.772614 0.335075 0.775519 0.325389 0.771921 0.326229 0.771533 0.328422 0.775489 0.328292 0.776291 0.324066 0.749219 0.327403 0.749282 0.327832 0.752139 0.323604 0.752883 0.327403 0.749282 0.324066 0.749219 0.322897 0.745642 0.327269 0.746222 0.322743 0.767219 0.319575 0.769856 0.320433 0.766889 0.323597 0.764979 0.334881 0.770808 0.334398 0.767422 0.337961 0.767026 0.336794 0.771107 0.319575 0.769856 0.320835 0.773906 0.314757 0.777002 0.313893 0.772953 0.323508 0.788325 0.32094 0.786078 0.329493 0.781256 0.331276 0.783536 0.328453 0.763701 0.328641 0.761486 0.332757 0.760703 0.332827 0.763428 0.32094 0.786078 0.31897 0.784076 0.327671 0.779953 0.329493 0.781256 0.328017 0.777114 0.328292 0.776291 0.332258 0.774435 0.332978 0.774909 0.327403 0.749282 0.331384 0.74894 0.331553 0.752628 0.327832 0.752139 0.328289 0.759575 0.324768 0.759806 0.327137 0.756365 0.330538 0.757202 0.332191 0.764873 0.328005 0.764874 0.328453 0.763701 0.332827 0.763428 0.322743 0.767219 0.323597 0.764979 0.328453 0.763701 0.328005 0.764874 0.332757 0.760703 0.336613 0.760551 0.336201 0.764346 0.332827 0.763428 0.322164 0.756878 0.314454 0.757886 0.315898 0.753188 0.323604 0.752883 0.322743 0.767219 0.324122 0.767171 0.325389 0.771921 0.323417 0.772615 0.335075 0.775519 0.332912 0.778423 0.331302 0.777434 0.333735 0.774724 0.324768 0.759806 0.321119 0.760357 0.322164 0.756878 0.327137 0.756365 0.332191 0.764873 0.331128 0.765539 0.327418 0.765733 0.328005 0.764874 0.337866 0.772614 0.341064 0.769789 0.342271 0.772484 0.339037 0.775441 0.343193 0.819756 0.344515 0.822176 0.340231 0.824956 0.33871 0.822367 0.342474 0.816662 0.343193 0.819756 0.33871 0.822367 0.338125 0.818994 0.304428 0.696563 0.309286 0.698854 0.305474 0.7039 0.300741 0.702202 0.305474 0.7039 0.309551 0.70608 0.306512 0.710212 0.302638 0.708078 0.300741 0.702202 0.305474 0.7039 0.302638 0.708078 0.298069 0.705357 0.342592 0.827787 0.340231 0.824956 0.344515 0.822176 0.346638 0.825097 0.337615 0.81616 0.341893 0.814044 0.342474 0.816662 0.338125 0.818994 0.347468 0.830842 0.349921 0.827884 0.3541 0.830299 0.35227 0.832801 0.328589 0.83528 0.32819 0.831383 0.335753 0.828195 0.338872 0.83224 0.298069 0.705357 0.294953 0.702881 0.296865 0.700571 0.300741 0.702202 0.309551 0.70608 0.311859 0.708482 0.309188 0.712189 0.306512 0.710212 0.337205 0.813385 0.341342 0.811408 0.341893 0.814044 0.337615 0.81616 0.347468 0.830842 0.342592 0.827787 0.346638 0.825097 0.349921 0.827884 0.341342 0.811408 0.337205 0.813385 0.336594 0.810521 0.34073 0.808607 0.301889 0.716282 0.297604 0.713985 0.300179 0.711352 0.303997 0.713322 0.297604 0.713985 0.29218 0.710071 0.295533 0.707911 0.300179 0.711352 0.333844 0.821284 0.338125 0.818994 0.33871 0.822367 0.335103 0.824503 0.335753 0.828195 0.340231 0.824956 0.342592 0.827787 0.338872 0.83224 0.333262 0.818214 0.337615 0.81616 0.338125 0.818994 0.333844 0.821284 0.338872 0.83224 0.342592 0.827787 0.347468 0.830842 0.346124 0.833739 0.346124 0.833739 0.347468 0.830842 0.35227 0.832801 0.351309 0.834916 0.328008 0.821006 0.333262 0.818214 0.333844 0.821284 0.3283 0.82426 0.295533 0.707911 0.293246 0.704392 0.294953 0.702881 0.298069 0.705357 0.295533 0.707911 0.298069 0.705357 0.302638 0.708078 0.300179 0.711352 0.301889 0.716282 0.303997 0.713322 0.30708 0.715486 0.305129 0.71818 0.303997 0.713322 0.300179 0.711352 0.302638 0.708078 0.306512 0.710212 0.291229 0.705346 0.293246 0.704392 0.295533 0.707911 0.29218 0.710071 0.335753 0.828195 0.335103 0.824503 0.33871 0.822367 0.340231 0.824956 0.303997 0.713322 0.306512 0.710212 0.309188 0.712189 0.30708 0.715486 0.351112 0.836951 0.346325 0.837135 0.346124 0.833739 0.351309 0.834916 0.333026 0.815065 0.332732 0.811656 0.336594 0.810521 0.337205 0.813385 0.346325 0.837135 0.339536 0.837333 0.338872 0.83224 0.346124 0.833739 0.344515 0.822176 0.349128 0.819006 0.35112 0.822205 0.346638 0.825097 0.333026 0.815065 0.337205 0.813385 0.337615 0.81616 0.333262 0.818214 0.333026 0.815065 0.32845 0.816463 0.329316 0.811835 0.332732 0.811656 0.328008 0.821006 0.325345 0.820899 0.325531 0.818416 0.32845 0.816463 0.328589 0.83528 0.338872 0.83224 0.339536 0.837333 0.329963 0.838582 0.333026 0.815065 0.333262 0.818214 0.328008 0.821006 0.32845 0.816463 0.32819 0.831383 0.328362 0.827705 0.335103 0.824503 0.335753 0.828195 0.3283 0.82426 0.333844 0.821284 0.335103 0.824503 0.328362 0.827705 0.349921 0.827884 0.35335 0.824819 0.357043 0.826598 0.3541 0.830299 0.346638 0.825097 0.35112 0.822205 0.35335 0.824819 0.349921 0.827884 0.344515 0.822176 0.343193 0.819756 0.347594 0.816804 0.349128 0.819006 0.304428 0.696563 0.300741 0.702202 0.296865 0.700571 0.29946 0.696285 0.359244 0.820282 0.357938 0.817678 0.361264 0.8154 0.363043 0.81807 0.313662 0.700638 0.317352 0.700463 0.316657 0.702825 0.314688 0.704544 0.352005 0.808376 0.350672 0.806421 0.353908 0.803645 0.355151 0.80596 0.350672 0.806421 0.348282 0.803565 0.352365 0.799911 0.353908 0.803645 0.359244 0.820282 0.363043 0.81807 0.365542 0.820446 0.361154 0.823155 0.347825 0.807979 0.346855 0.805499 0.348282 0.803565 0.350672 0.806421 0.357938 0.817678 0.356142 0.814407 0.359001 0.812569 0.361264 0.8154 0.356415 0.822168 0.359244 0.820282 0.361154 0.823155 0.358529 0.824774 0.347825 0.807979 0.344951 0.809345 0.34462 0.806294 0.346855 0.805499 0.35335 0.824819 0.356415 0.822168 0.358529 0.824774 0.357043 0.826598 0.342474 0.816662 0.346392 0.814196 0.347594 0.816804 0.343193 0.819756 0.363043 0.81807 0.366657 0.815598 0.369809 0.817429 0.365542 0.820446 0.342474 0.816662 0.341893 0.814044 0.345583 0.811908 0.346392 0.814196 0.309561 0.689301 0.306288 0.687327 0.309582 0.683286 0.314055 0.683094 0.341893 0.814044 0.341342 0.811408 0.344951 0.809345 0.345583 0.811908 0.347825 0.807979 0.348821 0.810309 0.345583 0.811908 0.344951 0.809345 0.344951 0.809345 0.341342 0.811408 0.34073 0.808607 0.34462 0.806294 0.352005 0.808376 0.355151 0.80596 0.35611 0.807535 0.353348 0.809801 0.309551 0.70608 0.313662 0.700638 0.314688 0.704544 0.311859 0.708482 0.356415 0.822168 0.35335 0.824819 0.35112 0.822205 0.354747 0.819816 0.304428 0.696563 0.29946 0.696285 0.30062 0.693925 0.302819 0.691393 0.363043 0.81807 0.361264 0.8154 0.364509 0.813144 0.366657 0.815598 0.347594 0.816804 0.346392 0.814196 0.349777 0.812055 0.351203 0.814438 0.349128 0.819006 0.347594 0.816804 0.351203 0.814438 0.352702 0.816704 0.357938 0.817678 0.354747 0.819816 0.352702 0.816704 0.356142 0.814407 0.351203 0.814438 0.349777 0.812055 0.353348 0.809801 0.354676 0.812051 0.352702 0.816704 0.351203 0.814438 0.354676 0.812051 0.356142 0.814407 0.348821 0.810309 0.352005 0.808376 0.353348 0.809801 0.349777 0.812055 0.354676 0.812051 0.353348 0.809801 0.35611 0.807535 0.357613 0.810052 0.353908 0.803645 0.357487 0.800663 0.358355 0.80318 0.355151 0.80596 0.357487 0.800663 0.353908 0.803645 0.352365 0.799911 0.357183 0.796274 0.356142 0.814407 0.354676 0.812051 0.357613 0.810052 0.359001 0.812569 0.321365 0.687651 0.322451 0.690311 0.319691 0.695446 0.317268 0.693989 0.357613 0.810052 0.35611 0.807535 0.359174 0.805081 0.360778 0.807744 0.359001 0.812569 0.357613 0.810052 0.360778 0.807744 0.362221 0.810352 0.360778 0.807744 0.359174 0.805081 0.361957 0.803511 0.363598 0.806146 0.362221 0.810352 0.360778 0.807744 0.363598 0.806146 0.365295 0.808748 0.317727 0.685479 0.321365 0.687651 0.317268 0.693989 0.313948 0.692233 0.361264 0.8154 0.359001 0.812569 0.362221 0.810352 0.364509 0.813144 0.314055 0.683094 0.317727 0.685479 0.313948 0.692233 0.309561 0.689301 0.309286 0.698854 0.313662 0.700638 0.309551 0.70608 0.305474 0.7039 0.314055 0.683094 0.309582 0.683286 0.310599 0.681374 0.312267 0.679664 0.36725 0.81077 0.364509 0.813144 0.362221 0.810352 0.365295 0.808748 0.360959 0.801246 0.361957 0.803511 0.359174 0.805081 0.358355 0.80318 0.366657 0.815598 0.369439 0.813693 0.37137 0.815877 0.369809 0.817429 0.36725 0.81077 0.369439 0.813693 0.366657 0.815598 0.364509 0.813144 0.355151 0.80596 0.358355 0.80318 0.359174 0.805081 0.35611 0.807535 0.348821 0.810309 0.347825 0.807979 0.350672 0.806421 0.352005 0.808376 0.313662 0.700638 0.309286 0.698854 0.313948 0.692233 0.317268 0.693989 0.354747 0.819816 0.357938 0.817678 0.359244 0.820282 0.356415 0.822168 0.304428 0.696563 0.309561 0.689301 0.313948 0.692233 0.309286 0.698854 0.354747 0.819816 0.35112 0.822205 0.349128 0.819006 0.352702 0.816704 0.304428 0.696563 0.302819 0.691393 0.306288 0.687327 0.309561 0.689301 0.348821 0.810309 0.349777 0.812055 0.346392 0.814196 0.345583 0.811908 0.313662 0.700638 0.317268 0.693989 0.319691 0.695446 0.317352 0.700463 0.363012 0.796963 0.360104 0.798871 0.359188 0.795746 0.361136 0.793793 0.379224 0.796351 0.378082 0.794401 0.378263 0.79365 0.379918 0.796135 0.376016 0.808683 0.372866 0.811492 0.370933 0.808361 0.374554 0.805724 0.380051 0.798251 0.379224 0.796351 0.379918 0.796135 0.38053 0.798873 0.36725 0.81077 0.365295 0.808748 0.369479 0.806294 0.370933 0.808361 0.320455 0.673564 0.318935 0.670989 0.323665 0.669454 0.323382 0.671266 0.328415 0.673197 0.328449 0.677897 0.326063 0.677399 0.3268 0.673635 0.378519 0.793107 0.378263 0.79365 0.373762 0.793992 0.373444 0.793156 0.360959 0.801246 0.358355 0.80318 0.357487 0.800663 0.360104 0.798871 0.378635 0.80222 0.374554 0.805724 0.373738 0.803662 0.378101 0.801105 0.360104 0.798871 0.357487 0.800663 0.357183 0.796274 0.359188 0.795746 0.373444 0.793156 0.373762 0.793992 0.369816 0.796278 0.368484 0.795794 0.321365 0.687651 0.32428 0.686678 0.323982 0.688993 0.322451 0.690311 0.368484 0.795794 0.367019 0.794098 0.372728 0.79179 0.373444 0.793156 0.360959 0.801246 0.364585 0.798861 0.365726 0.80056 0.361957 0.803511 0.381527 0.80298 0.383024 0.798715 0.385072 0.79902 0.382849 0.805091 0.360959 0.801246 0.360104 0.798871 0.363012 0.796963 0.364585 0.798861 0.378519 0.793107 0.373444 0.793156 0.372728 0.79179 0.378407 0.791806 0.372728 0.79179 0.367019 0.794098 0.365986 0.79153 0.372402 0.789966 0.374554 0.805724 0.378635 0.80222 0.381527 0.80298 0.376016 0.808683 0.376016 0.808683 0.381527 0.80298 0.382849 0.805091 0.378101 0.811549 0.367019 0.794098 0.368484 0.795794 0.364585 0.798861 0.363012 0.796963 0.321365 0.687651 0.324471 0.682046 0.326443 0.682721 0.32428 0.686678 0.363598 0.806146 0.361957 0.803511 0.365726 0.80056 0.367335 0.803343 0.381297 0.798844 0.383024 0.798715 0.381527 0.80298 0.378635 0.80222 0.365295 0.808748 0.363598 0.806146 0.367335 0.803343 0.369479 0.806294 0.367335 0.803343 0.365726 0.80056 0.369816 0.796278 0.371027 0.801041 0.369479 0.806294 0.367335 0.803343 0.371027 0.801041 0.373738 0.803662 0.326063 0.677399 0.328449 0.677897 0.326443 0.682721 0.324471 0.682046 0.3268 0.673635 0.325376 0.67212 0.326288 0.670234 0.328415 0.673197 0.374554 0.805724 0.370933 0.808361 0.369479 0.806294 0.373738 0.803662 0.325376 0.67212 0.3268 0.673635 0.326063 0.677399 0.323038 0.676375 0.369439 0.813693 0.372866 0.811492 0.373791 0.81469 0.37137 0.815877 0.323382 0.671266 0.325376 0.67212 0.323038 0.676375 0.320455 0.673564 0.36725 0.81077 0.370933 0.808361 0.372866 0.811492 0.369439 0.813693 0.323038 0.676375 0.326063 0.677399 0.324471 0.682046 0.32128 0.680058 0.378407 0.791806 0.372728 0.79179 0.372402 0.789966 0.378616 0.790088 0.320455 0.673564 0.323038 0.676375 0.32128 0.680058 0.317548 0.678156 0.325376 0.67212 0.323382 0.671266 0.323665 0.669454 0.326288 0.670234 0.32128 0.680058 0.324471 0.682046 0.321365 0.687651 0.317727 0.685479 0.368484 0.795794 0.369816 0.796278 0.365726 0.80056 0.364585 0.798861 0.317548 0.678156 0.32128 0.680058 0.317727 0.685479 0.314055 0.683094 0.317548 0.678156 0.314795 0.675877 0.318935 0.670989 0.320455 0.673564 0.382264 0.794412 0.378407 0.791806 0.378616 0.790088 0.382844 0.79192 0.367019 0.794098 0.363012 0.796963 0.361136 0.793793 0.365986 0.79153 0.383024 0.798715 0.382828 0.795638 0.385234 0.795634 0.385072 0.79902 0.372866 0.811492 0.376016 0.808683 0.378101 0.811549 0.373791 0.81469 0.382828 0.795638 0.383024 0.798715 0.381297 0.798844 0.380961 0.795743 0.378407 0.791806 0.382264 0.794412 0.380942 0.795736 0.378519 0.793107 0.378635 0.80222 0.378101 0.801105 0.38053 0.798873 0.381297 0.798844 0.380961 0.795743 0.381297 0.798844 0.38053 0.798873 0.379918 0.796135 0.317548 0.678156 0.314055 0.683094 0.312267 0.679664 0.314795 0.675877 0.378519 0.793107 0.380942 0.795736 0.379918 0.796135 0.378263 0.79365 0.286192 0.702196 0.2871 0.697796 0.289519 0.698421 0.288741 0.702128 0.284492 0.683674 0.282334 0.689539 0.277546 0.688175 0.279367 0.68499 0.35389 0.846125 0.357487 0.848083 0.355594 0.851242 0.351515 0.849148 0.35323 0.863165 0.357563 0.863715 0.35759 0.867164 0.353082 0.866998 0.349495 0.873622 0.353743 0.873009 0.354962 0.878453 0.351055 0.878992 0.273307 0.697985 0.274467 0.695377 0.278276 0.698772 0.274349 0.702822 0.280391 0.694515 0.283891 0.696613 0.282356 0.701369 0.278276 0.698772 0.353653 0.859227 0.35323 0.863165 0.348856 0.862658 0.348674 0.8581 0.289165 0.692937 0.291804 0.686568 0.292795 0.690269 0.291403 0.694253 0.34629 0.883121 0.341318 0.87794 0.343161 0.874665 0.347403 0.88037 0.353082 0.866998 0.35759 0.867164 0.357727 0.872907 0.353743 0.873009 0.351956 0.838575 0.353175 0.841331 0.350745 0.842904 0.34803 0.839644 0.334285 0.84529 0.332074 0.841859 0.341725 0.840607 0.344906 0.845448 0.283891 0.696613 0.2871 0.697796 0.286192 0.702196 0.282356 0.701369 0.354513 0.855395 0.353653 0.859227 0.348674 0.8581 0.349656 0.853712 0.344906 0.845448 0.351515 0.849148 0.349656 0.853712 0.34385 0.851484 0.339536 0.837333 0.341725 0.840607 0.332074 0.841859 0.329963 0.838582 0.355409 0.844142 0.35389 0.846125 0.350745 0.842904 0.353175 0.841331 0.360946 0.849452 0.357487 0.848083 0.358982 0.846188 0.362616 0.847019 0.353743 0.873009 0.357727 0.872907 0.358423 0.878739 0.354962 0.878453 0.343161 0.874665 0.349495 0.873622 0.351055 0.878992 0.347403 0.88037 0.351515 0.849148 0.355594 0.851242 0.354513 0.855395 0.349656 0.853712 0.34045 0.866988 0.335086 0.871273 0.326712 0.867343 0.329792 0.863756 0.282334 0.689539 0.285741 0.691466 0.283891 0.696613 0.280391 0.694515 0.34803 0.839644 0.341725 0.840607 0.339536 0.837333 0.346325 0.837135 0.357487 0.848083 0.35389 0.846125 0.355409 0.844142 0.358982 0.846188 0.355594 0.851242 0.357487 0.848083 0.360946 0.849452 0.359412 0.852558 0.342813 0.861932 0.34045 0.866988 0.329792 0.863756 0.332201 0.859587 0.280391 0.694515 0.276057 0.691958 0.277546 0.688175 0.282334 0.689539 0.344906 0.845448 0.350745 0.842904 0.35389 0.846125 0.351515 0.849148 0.332201 0.859587 0.334789 0.85565 0.343101 0.857033 0.342813 0.861932 0.285741 0.691466 0.289165 0.692937 0.2871 0.697796 0.283891 0.696613 0.351956 0.838575 0.34803 0.839644 0.346325 0.837135 0.351112 0.836951 0.354513 0.855395 0.355594 0.851242 0.359412 0.852558 0.358479 0.856498 0.348701 0.866542 0.349495 0.873622 0.343161 0.874665 0.34045 0.866988 0.334789 0.85565 0.335304 0.849733 0.34385 0.851484 0.343101 0.857033 0.284492 0.683674 0.287995 0.685221 0.285741 0.691466 0.282334 0.689539 0.335086 0.871273 0.333257 0.875906 0.325125 0.871746 0.326712 0.867343 0.34045 0.866988 0.342813 0.861932 0.348856 0.862658 0.348701 0.866542 0.349495 0.873622 0.348701 0.866542 0.353082 0.866998 0.353743 0.873009 0.354513 0.855395 0.358479 0.856498 0.357708 0.860064 0.353653 0.859227 0.350745 0.842904 0.344906 0.845448 0.341725 0.840607 0.34803 0.839644 0.348701 0.866542 0.348856 0.862658 0.35323 0.863165 0.353082 0.866998 0.349656 0.853712 0.348674 0.8581 0.343101 0.857033 0.34385 0.851484 0.280391 0.694515 0.278276 0.698772 0.274467 0.695377 0.276057 0.691958 0.287995 0.685221 0.291804 0.686568 0.289165 0.692937 0.285741 0.691466 0.289165 0.692937 0.291403 0.694253 0.289519 0.698421 0.2871 0.697796 0.340589 0.880675 0.333257 0.875906 0.335086 0.871273 0.341318 0.87794 0.35323 0.863165 0.353653 0.859227 0.357708 0.860064 0.357563 0.863715 0.34045 0.866988 0.343161 0.874665 0.341318 0.87794 0.335086 0.871273 0.334285 0.84529 0.344906 0.845448 0.34385 0.851484 0.335304 0.849733 0.348674 0.8581 0.348856 0.862658 0.342813 0.861932 0.343101 0.857033 0.363136 0.853818 0.361883 0.857477 0.358479 0.856498 0.359412 0.852558 0.381448 0.870377 0.380903 0.874151 0.377221 0.873407 0.376973 0.869951 0.296455 0.666499 0.2998 0.668052 0.29544 0.677945 0.292385 0.676225 0.361464 0.86417 0.36133 0.8607 0.366084 0.861249 0.365837 0.864992 0.365817 0.868987 0.360758 0.867764 0.361464 0.86417 0.365837 0.864992 0.367309 0.851422 0.367112 0.847754 0.373716 0.84933 0.372941 0.85279 0.370753 0.873572 0.377221 0.873407 0.378573 0.878637 0.371104 0.87929 0.360758 0.867764 0.35759 0.867164 0.357563 0.863715 0.361464 0.86417 0.372152 0.855393 0.377194 0.85648 0.376943 0.858466 0.371784 0.85816 0.382237 0.857226 0.377194 0.85648 0.378269 0.854259 0.383049 0.855254 0.376817 0.866712 0.377115 0.862441 0.382167 0.863611 0.381671 0.867321 0.36133 0.8607 0.361883 0.857477 0.366629 0.858049 0.366084 0.861249 0.365817 0.868987 0.365837 0.864992 0.370835 0.86568 0.370485 0.869497 0.291804 0.686568 0.294567 0.685556 0.294368 0.687949 0.292795 0.690269 0.357727 0.872907 0.360678 0.873457 0.360883 0.877673 0.358423 0.878739 0.381448 0.870377 0.376973 0.869951 0.376817 0.866712 0.381671 0.867321 0.360758 0.867764 0.365817 0.868987 0.365618 0.873332 0.360678 0.873457 0.377221 0.873407 0.380903 0.874151 0.381078 0.877593 0.378573 0.878637 0.377115 0.862441 0.376943 0.858466 0.381849 0.859554 0.382167 0.863611 0.363868 0.850475 0.363136 0.853818 0.359412 0.852558 0.360946 0.849452 0.357563 0.863715 0.357708 0.860064 0.36133 0.8607 0.361464 0.86417 0.370753 0.873572 0.370485 0.869497 0.376973 0.869951 0.377221 0.873407 0.291804 0.686568 0.29544 0.677945 0.297365 0.679098 0.294567 0.685556 0.360678 0.873457 0.365618 0.873332 0.363343 0.878967 0.360883 0.877673 0.363136 0.853818 0.363868 0.850475 0.367309 0.851422 0.366866 0.854805 0.382237 0.857226 0.381849 0.859554 0.376943 0.858466 0.377194 0.85648 0.370835 0.86568 0.371131 0.861664 0.377115 0.862441 0.376817 0.866712 0.2998 0.668052 0.300224 0.670581 0.297365 0.679098 0.29544 0.677945 0.357708 0.860064 0.358479 0.856498 0.361883 0.857477 0.36133 0.8607 0.360678 0.873457 0.357727 0.872907 0.35759 0.867164 0.360758 0.867764 0.284492 0.683674 0.281948 0.680133 0.28514 0.672894 0.288647 0.674425 0.365618 0.873332 0.370753 0.873572 0.371104 0.87929 0.363343 0.878967 0.371131 0.861664 0.371784 0.85816 0.376943 0.858466 0.377115 0.862441 0.378269 0.854259 0.372941 0.85279 0.373716 0.84933 0.382754 0.851182 0.284492 0.683674 0.279367 0.68499 0.280076 0.682166 0.281948 0.680133 0.372941 0.85279 0.378269 0.854259 0.377194 0.85648 0.372152 0.855393 0.284492 0.683674 0.288647 0.674425 0.292385 0.676225 0.287995 0.685221 0.366866 0.854805 0.367309 0.851422 0.372941 0.85279 0.372152 0.855393 0.370485 0.869497 0.370835 0.86568 0.376817 0.866712 0.376973 0.869951 0.2998 0.668052 0.302196 0.666855 0.302116 0.669511 0.300224 0.670581 0.365837 0.864992 0.366084 0.861249 0.371131 0.861664 0.370835 0.86568 0.363136 0.853818 0.366866 0.854805 0.366629 0.858049 0.361883 0.857477 0.363868 0.850475 0.360946 0.849452 0.362616 0.847019 0.364822 0.848118 0.365618 0.873332 0.365817 0.868987 0.370485 0.869497 0.370753 0.873572 0.383049 0.855254 0.378269 0.854259 0.382754 0.851182 0.383843 0.85317 0.291715 0.665356 0.296455 0.666499 0.292385 0.676225 0.288647 0.674425 0.366084 0.861249 0.366629 0.858049 0.371784 0.85816 0.371131 0.861664 0.366866 0.854805 0.372152 0.855393 0.371784 0.85816 0.366629 0.858049 0.363868 0.850475 0.364822 0.848118 0.367112 0.847754 0.367309 0.851422 0.288647 0.674425 0.28514 0.672894 0.28849 0.666319 0.291715 0.665356 0.291804 0.686568 0.287995 0.685221 0.292385 0.676225 0.29544 0.677945 0.299065 0.660184 0.302694 0.662108 0.2998 0.668052 0.296455 0.666499 0.381448 0.870377 0.386438 0.871581 0.385654 0.874829 0.380903 0.874151 0.387047 0.868416 0.387197 0.864552 0.390049 0.865521 0.390827 0.869291 0.385654 0.874829 0.39085 0.875067 0.391243 0.878899 0.38355 0.879289 0.398784 0.870278 0.399611 0.871494 0.395874 0.874291 0.395138 0.871602 0.396845 0.860663 0.395687 0.862559 0.391658 0.862314 0.391833 0.859102 0.401218 0.867234 0.398784 0.870278 0.398575 0.86877 0.40009 0.866759 0.387197 0.864552 0.387349 0.860555 0.391658 0.862314 0.390049 0.865521 0.400795 0.862756 0.397386 0.859585 0.397322 0.857803 0.401281 0.861413 0.39085 0.875067 0.395874 0.874291 0.396815 0.877231 0.391243 0.878899 0.297431 0.654886 0.300613 0.656785 0.299065 0.660184 0.295663 0.657982 0.39085 0.875067 0.385654 0.874829 0.386438 0.871581 0.390721 0.87218 0.399741 0.863689 0.399003 0.864191 0.395687 0.862559 0.396845 0.860663 0.390721 0.87218 0.395138 0.871602 0.395874 0.874291 0.39085 0.875067 0.395138 0.871602 0.390721 0.87218 0.390827 0.869291 0.394737 0.869667 0.304002 0.657871 0.305894 0.658063 0.30409 0.662238 0.302694 0.662108 0.390721 0.87218 0.386438 0.871581 0.387047 0.868416 0.390827 0.869291 0.392274 0.856903 0.391833 0.859102 0.387136 0.858111 0.387392 0.855973 0.381671 0.867321 0.382167 0.863611 0.387197 0.864552 0.387047 0.868416 0.395874 0.874291 0.399611 0.871494 0.400338 0.873162 0.396815 0.877231 0.391833 0.859102 0.392274 0.856903 0.397386 0.859585 0.396845 0.860663 0.305675 0.653246 0.305894 0.658063 0.304002 0.657871 0.304074 0.655795 0.402691 0.86852 0.399611 0.871494 0.398784 0.870278 0.401218 0.867234 0.382167 0.863611 0.381849 0.859554 0.387349 0.860555 0.387197 0.864552 0.291715 0.665356 0.28849 0.666319 0.288886 0.663754 0.290932 0.662464 0.297431 0.654886 0.296491 0.653374 0.29915 0.650159 0.298644 0.653091 0.400795 0.862756 0.402589 0.865389 0.401147 0.866375 0.399741 0.863689 0.397386 0.859585 0.392274 0.856903 0.392753 0.854706 0.397322 0.857803 0.399741 0.863689 0.396845 0.860663 0.397386 0.859585 0.400795 0.862756 0.301631 0.65443 0.304074 0.655795 0.304002 0.657871 0.300613 0.656785 0.295663 0.657982 0.291715 0.665356 0.290932 0.662464 0.293893 0.657011 0.395138 0.871602 0.394737 0.869667 0.398575 0.86877 0.398784 0.870278 0.398624 0.86828 0.399339 0.866571 0.40009 0.866759 0.398575 0.86877 0.381448 0.870377 0.381671 0.867321 0.387047 0.868416 0.386438 0.871581 0.300613 0.656785 0.304002 0.657871 0.302694 0.662108 0.299065 0.660184 0.402589 0.865389 0.400795 0.862756 0.401281 0.861413 0.404154 0.863954 0.387392 0.855973 0.383049 0.855254 0.383843 0.85317 0.387006 0.85287 0.304074 0.655795 0.301631 0.65443 0.302816 0.650707 0.305675 0.653246 0.295663 0.657982 0.293893 0.657011 0.296491 0.653374 0.297431 0.654886 0.391833 0.859102 0.391658 0.862314 0.387349 0.860555 0.387136 0.858111 0.2998 0.668052 0.302694 0.662108 0.30409 0.662238 0.302196 0.666855 0.382237 0.857226 0.387136 0.858111 0.387349 0.860555 0.381849 0.859554 0.399611 0.871494 0.402691 0.86852 0.403714 0.870692 0.400338 0.873162 0.399339 0.866571 0.398982 0.864775 0.399003 0.864191 0.40009 0.866759 0.295663 0.657982 0.299065 0.660184 0.296455 0.666499 0.291715 0.665356 0.392274 0.856903 0.387392 0.855973 0.387006 0.85287 0.392753 0.854706 0.301631 0.65443 0.298644 0.653091 0.29915 0.650159 0.302816 0.650707 0.380903 0.874151 0.385654 0.874829 0.38355 0.879289 0.381078 0.877593 0.399741 0.863689 0.401147 0.866375 0.40009 0.866759 0.399003 0.864191 0.298644 0.653091 0.301631 0.65443 0.300613 0.656785 0.297431 0.654886 0.382237 0.857226 0.383049 0.855254 0.387392 0.855973 0.387136 0.858111 0.325627 0.905561 0.328082 0.906701 0.326936 0.909238 0.324671 0.908363 0.259482 0.684945 0.263675 0.68657 0.26238 0.690473 0.258448 0.688397 0.330174 0.884918 0.32695 0.889108 0.321166 0.884714 0.322944 0.880172 0.330174 0.884918 0.33547 0.890557 0.331823 0.893678 0.32695 0.889108 0.318222 0.905266 0.321751 0.904436 0.321671 0.90766 0.319117 0.908421 0.34533 0.884394 0.340589 0.880675 0.341318 0.87794 0.34629 0.883121 0.318222 0.905266 0.319117 0.908421 0.318041 0.910241 0.316606 0.907992 0.331651 0.90003 0.334518 0.902875 0.332375 0.905722 0.329678 0.903241 0.265419 0.680693 0.270424 0.68302 0.269354 0.688621 0.263675 0.68657 0.258448 0.688397 0.255262 0.686662 0.256163 0.684215 0.259482 0.684945 0.334105 0.881627 0.338598 0.889134 0.33547 0.890557 0.330174 0.884918 0.331651 0.90003 0.33441 0.896627 0.337027 0.900195 0.334518 0.902875 0.34533 0.884394 0.344159 0.886127 0.340688 0.884113 0.340589 0.880675 0.341683 0.888189 0.342812 0.892 0.340004 0.89275 0.338598 0.889134 0.321026 0.898301 0.324228 0.893565 0.328984 0.897363 0.326953 0.901433 0.318222 0.905266 0.315758 0.900244 0.321026 0.898301 0.321751 0.904436 0.257021 0.691477 0.254325 0.689715 0.255262 0.686662 0.258448 0.688397 0.2548 0.696197 0.25278 0.692609 0.254325 0.689715 0.257021 0.691477 0.267456 0.695817 0.261851 0.694246 0.26238 0.690473 0.26761 0.691874 0.25278 0.692609 0.2548 0.696197 0.248633 0.696863 0.251075 0.694039 0.337666 0.894165 0.34006 0.8977 0.337027 0.900195 0.33441 0.896627 0.325627 0.905561 0.326953 0.901433 0.329678 0.903241 0.328082 0.906701 0.321751 0.904436 0.321026 0.898301 0.326953 0.901433 0.325627 0.905561 0.340589 0.880675 0.340688 0.884113 0.334105 0.881627 0.333257 0.875906 0.257021 0.691477 0.258448 0.688397 0.26238 0.690473 0.261851 0.694246 0.340688 0.884113 0.344159 0.886127 0.344307 0.888678 0.341683 0.888189 0.334105 0.881627 0.340688 0.884113 0.341683 0.888189 0.338598 0.889134 0.344242 0.89444 0.342812 0.892 0.345028 0.891619 0.347364 0.894325 0.342812 0.892 0.341683 0.888189 0.344307 0.888678 0.345028 0.891619 0.315571 0.892394 0.318477 0.888631 0.324228 0.893565 0.321026 0.898301 0.321671 0.90766 0.321751 0.904436 0.325627 0.905561 0.324671 0.908363 0.313371 0.903625 0.309285 0.899155 0.311986 0.895569 0.315758 0.900244 0.27176 0.697674 0.268322 0.701058 0.267456 0.695817 0.270946 0.695584 0.257021 0.691477 0.261851 0.694246 0.261216 0.699599 0.2548 0.696197 0.324228 0.893565 0.318477 0.888631 0.321166 0.884714 0.32695 0.889108 0.269354 0.688621 0.270424 0.68302 0.272178 0.685661 0.271461 0.689646 0.326953 0.901433 0.328984 0.897363 0.331651 0.90003 0.329678 0.903241 0.324499 0.876742 0.334105 0.881627 0.330174 0.884918 0.322944 0.880172 0.324499 0.876742 0.325125 0.871746 0.333257 0.875906 0.334105 0.881627 0.267456 0.695817 0.268322 0.701058 0.261216 0.699599 0.261851 0.694246 0.313371 0.903625 0.315758 0.900244 0.318222 0.905266 0.316606 0.907992 0.33441 0.896627 0.331651 0.90003 0.328984 0.897363 0.331823 0.893678 0.338598 0.889134 0.340004 0.89275 0.337666 0.894165 0.33547 0.890557 0.324228 0.893565 0.32695 0.889108 0.331823 0.893678 0.328984 0.897363 0.267456 0.695817 0.26761 0.691874 0.270634 0.692824 0.270946 0.695584 0.315571 0.892394 0.321026 0.898301 0.315758 0.900244 0.311986 0.895569 0.261207 0.679843 0.265419 0.680693 0.263675 0.68657 0.259482 0.684945 0.269354 0.688621 0.271461 0.689646 0.270634 0.692824 0.26761 0.691874 0.263675 0.68657 0.269354 0.688621 0.26761 0.691874 0.26238 0.690473 0.337666 0.894165 0.33441 0.896627 0.331823 0.893678 0.33547 0.890557 0.337027 0.900195 0.34006 0.8977 0.342073 0.900175 0.339197 0.90273 0.346528 0.901004 0.349027 0.904118 0.347172 0.905929 0.344773 0.903007 0.341658 0.911115 0.344438 0.908504 0.347895 0.912161 0.34534 0.914708 0.340004 0.89275 0.342812 0.892 0.344242 0.89444 0.342096 0.895881 0.354322 0.907345 0.350904 0.902409 0.352541 0.901462 0.357472 0.907149 0.276242 0.665877 0.277347 0.668766 0.275532 0.676253 0.273228 0.675196 0.261207 0.679843 0.263751 0.671889 0.268257 0.673014 0.265419 0.680693 0.328082 0.906701 0.330885 0.908208 0.329473 0.910941 0.326936 0.909238 0.334518 0.902875 0.337027 0.900195 0.339197 0.90273 0.336655 0.905466 0.267277 0.662839 0.271436 0.664488 0.268257 0.673014 0.263751 0.671889 0.276242 0.665877 0.278574 0.664787 0.278815 0.667219 0.277347 0.668766 0.261207 0.679843 0.258856 0.677108 0.261258 0.671544 0.263751 0.671889 0.267277 0.662839 0.264593 0.664352 0.264579 0.662022 0.265977 0.659835 0.344138 0.898543 0.346528 0.901004 0.344773 0.903007 0.342073 0.900175 0.329678 0.903241 0.332375 0.905722 0.330885 0.908208 0.328082 0.906701 0.346567 0.919805 0.343127 0.91686 0.34534 0.914708 0.34861 0.917996 0.339197 0.90273 0.342073 0.900175 0.344773 0.903007 0.341625 0.905649 0.355504 0.911589 0.353601 0.913192 0.350478 0.909878 0.35268 0.908215 0.34534 0.914708 0.347895 0.912161 0.351262 0.915741 0.34861 0.917996 0.342196 0.91877 0.345266 0.921139 0.343963 0.922918 0.341771 0.922109 0.347895 0.912161 0.350478 0.909878 0.353601 0.913192 0.351262 0.915741 0.355504 0.911589 0.35268 0.908215 0.354322 0.907345 0.356578 0.910585 0.270424 0.68302 0.273228 0.675196 0.275532 0.676253 0.273384 0.68262 0.346567 0.919805 0.345266 0.921139 0.342196 0.91877 0.343127 0.91686 0.356578 0.910585 0.354322 0.907345 0.357472 0.907149 0.357852 0.909279 0.336655 0.905466 0.339197 0.90273 0.341625 0.905649 0.338966 0.908119 0.339265 0.913154 0.341658 0.911115 0.34534 0.914708 0.343127 0.91686 0.349027 0.904118 0.35268 0.908215 0.350478 0.909878 0.347172 0.905929 0.271436 0.664488 0.276242 0.665877 0.273228 0.675196 0.268257 0.673014 0.344138 0.898543 0.345825 0.896806 0.347921 0.898913 0.346528 0.901004 0.270424 0.68302 0.273384 0.68262 0.273975 0.684683 0.272178 0.685661 0.334474 0.90802 0.336599 0.910377 0.335345 0.910885 0.332972 0.909658 0.334474 0.90802 0.332375 0.905722 0.334518 0.902875 0.336655 0.905466 0.341625 0.905649 0.344773 0.903007 0.347172 0.905929 0.344438 0.908504 0.344138 0.898543 0.342073 0.900175 0.34006 0.8977 0.342096 0.895881 0.335345 0.910885 0.336599 0.910377 0.339265 0.913154 0.338089 0.914224 0.346528 0.901004 0.347921 0.898913 0.350904 0.902409 0.349027 0.904118 0.335345 0.910885 0.338089 0.914224 0.336454 0.916494 0.332526 0.912784 0.261207 0.679843 0.259482 0.684945 0.256163 0.684215 0.257477 0.681061 0.332972 0.909658 0.335345 0.910885 0.332526 0.912784 0.331413 0.911188 0.338966 0.908119 0.341625 0.905649 0.344438 0.908504 0.341658 0.911115 0.330885 0.908208 0.332972 0.909658 0.331413 0.911188 0.329473 0.910941 0.338089 0.914224 0.342196 0.91877 0.341771 0.922109 0.336454 0.916494 0.263751 0.671889 0.261258 0.671544 0.264593 0.664352 0.267277 0.662839 0.336599 0.910377 0.338966 0.908119 0.341658 0.911115 0.339265 0.913154 0.345825 0.896806 0.346977 0.89613 0.348905 0.896752 0.347921 0.898913 0.345825 0.896806 0.344138 0.898543 0.342096 0.895881 0.344242 0.89444 0.347921 0.898913 0.348905 0.896752 0.352541 0.901462 0.350904 0.902409 0.261207 0.679843 0.257477 0.681061 0.257489 0.678828 0.258856 0.677108 0.350904 0.902409 0.354322 0.907345 0.35268 0.908215 0.349027 0.904118 0.344438 0.908504 0.347172 0.905929 0.350478 0.909878 0.347895 0.912161 0.332972 0.909658 0.330885 0.908208 0.332375 0.905722 0.334474 0.90802 0.338089 0.914224 0.339265 0.913154 0.343127 0.91686 0.342196 0.91877 0.270424 0.68302 0.265419 0.680693 0.268257 0.673014 0.273228 0.675196 0.345825 0.896806 0.344242 0.89444 0.347364 0.894325 0.346977 0.89613 0.336599 0.910377 0.334474 0.90802 0.336655 0.905466 0.338966 0.908119 0.337666 0.894165 0.340004 0.89275 0.342096 0.895881 0.34006 0.8977 0.354007 0.926293 0.34945 0.922576 0.351347 0.920879 0.354298 0.924603 0.361129 0.918749 0.35919 0.919585 0.356553 0.91651 0.358228 0.915139 0.356872 0.928056 0.356715 0.927073 0.359356 0.927899 0.359203 0.928796 0.36364 0.924769 0.362779 0.924591 0.361726 0.921958 0.362636 0.921522 0.3569 0.929289 0.359351 0.929912 0.359008 0.931454 0.356202 0.93101 0.351262 0.915741 0.353601 0.913192 0.356553 0.91651 0.354067 0.918631 0.353346 0.927846 0.3569 0.929289 0.356202 0.93101 0.352051 0.929346 0.34861 0.917996 0.351262 0.915741 0.354067 0.918631 0.351347 0.920879 0.34773 0.92346 0.353346 0.927846 0.352051 0.929346 0.345726 0.925071 0.354067 0.918631 0.356553 0.91651 0.35919 0.919585 0.355976 0.921217 0.345266 0.921139 0.34773 0.92346 0.345726 0.925071 0.343963 0.922918 0.351347 0.920879 0.354067 0.918631 0.355976 0.921217 0.354298 0.924603 0.271203 0.655115 0.268933 0.653401 0.27137 0.65022 0.272893 0.652082 0.27651 0.651285 0.273578 0.650591 0.273507 0.648856 0.277243 0.649341 0.271203 0.655115 0.267277 0.662839 0.265977 0.659835 0.268933 0.653401 0.278788 0.652528 0.27651 0.651285 0.277243 0.649341 0.280012 0.651078 0.355504 0.911589 0.356578 0.910585 0.359243 0.91349 0.358228 0.915139 0.27651 0.651285 0.278788 0.652528 0.278315 0.654248 0.275832 0.653229 0.362665 0.917649 0.361129 0.918749 0.358228 0.915139 0.359243 0.91349 0.353346 0.927846 0.34773 0.92346 0.34945 0.922576 0.354007 0.926293 0.275832 0.653229 0.278315 0.654248 0.277683 0.658053 0.27434 0.657057 0.346567 0.919805 0.34945 0.922576 0.34773 0.92346 0.345266 0.921139 0.272893 0.652082 0.275832 0.653229 0.27434 0.657057 0.271203 0.655115 0.362665 0.917649 0.359243 0.91349 0.360316 0.910463 0.364877 0.916619 0.27434 0.657057 0.277683 0.658053 0.276242 0.665877 0.271436 0.664488 0.359243 0.91349 0.356578 0.910585 0.357852 0.909279 0.360316 0.910463 0.271203 0.655115 0.27434 0.657057 0.271436 0.664488 0.267277 0.662839 0.3641 0.92106 0.362665 0.917649 0.364877 0.916619 0.366645 0.920906 0.365142 0.928163 0.365023 0.925019 0.366775 0.924594 0.366939 0.928087 0.276242 0.665877 0.277683 0.658053 0.280469 0.658248 0.278574 0.664787 0.359351 0.929912 0.363187 0.929846 0.362925 0.93159 0.359008 0.931454 0.278315 0.654248 0.280563 0.654242 0.280469 0.658248 0.277683 0.658053 0.363187 0.929846 0.359351 0.929912 0.359203 0.928796 0.362759 0.928033 0.365023 0.925019 0.3641 0.92106 0.366645 0.920906 0.366775 0.924594 0.365023 0.925019 0.365142 0.928163 0.363206 0.927736 0.36364 0.924769 0.362759 0.928033 0.359203 0.928796 0.359356 0.927899 0.362495 0.927387 0.36364 0.924769 0.363206 0.927736 0.362495 0.927387 0.362779 0.924591 0.36191 0.926927 0.362331 0.925113 0.362779 0.924591 0.362495 0.927387 0.35993 0.927522 0.36191 0.926927 0.362495 0.927387 0.359356 0.927899 0.272893 0.652082 0.27137 0.65022 0.273507 0.648856 0.273578 0.650591 0.273578 0.650591 0.27651 0.651285 0.275832 0.653229 0.272893 0.652082 0.280012 0.651078 0.280563 0.654242 0.278315 0.654248 0.278788 0.652528 0.356872 0.928056 0.354007 0.926293 0.354298 0.924603 0.356715 0.927073 0.362636 0.921522 0.361726 0.921958 0.35919 0.919585 0.361129 0.918749 0.355504 0.911589 0.358228 0.915139 0.356553 0.91651 0.353601 0.913192 0.346567 0.919805 0.34861 0.917996 0.351347 0.920879 0.34945 0.922576 0.36364 0.924769 0.362636 0.921522 0.3641 0.92106 0.365023 0.925019 0.361129 0.918749 0.362665 0.917649 0.3641 0.92106 0.362636 0.921522 0.359203 0.928796 0.359351 0.929912 0.3569 0.929289 0.356872 0.928056 0.354007 0.926293 0.356872 0.928056 0.3569 0.929289 0.353346 0.927846 0.292551 0.915487 0.290321 0.913106 0.292575 0.910279 0.294856 0.913346 0.292575 0.910279 0.294663 0.907375 0.297189 0.910844 0.294856 0.913346 0.303298 0.898416 0.305088 0.895018 0.309285 0.899155 0.307065 0.902654 0.233312 0.69209 0.236238 0.692511 0.236328 0.695445 0.2331269 0.695251 0.232836 0.701893 0.232985 0.698631 0.236375 0.698457 0.236497 0.701458 0.232985 0.698631 0.2331269 0.695251 0.236328 0.695445 0.236375 0.698457 0.307065 0.902654 0.309285 0.899155 0.313371 0.903625 0.31201 0.908295 0.318442 0.915711 0.316181 0.914405 0.315919 0.911225 0.31825 0.913658 0.248633 0.696863 0.240854 0.698664 0.240137 0.695651 0.245113 0.694515 0.240854 0.698664 0.236375 0.698457 0.236328 0.695445 0.240137 0.695651 0.245113 0.694515 0.240137 0.695651 0.239598 0.692766 0.243876 0.69228 0.240137 0.695651 0.236328 0.695445 0.236238 0.692511 0.239598 0.692766 0.233312 0.69209 0.233475 0.689768 0.236048 0.690202 0.236238 0.692511 0.242651 0.686751 0.245101 0.687172 0.245415 0.689402 0.24314 0.689924 0.316855 0.918835 0.316618 0.916972 0.318744 0.917557 0.319044 0.919292 0.299173 0.920748 0.301278 0.919556 0.30201 0.921511 0.299794 0.922924 0.316618 0.916972 0.316855 0.918835 0.314234 0.918567 0.313941 0.916519 0.236048 0.690202 0.233475 0.689768 0.233786 0.686899 0.235938 0.686596 0.299173 0.920748 0.299794 0.922924 0.297529 0.925048 0.296878 0.922709 0.313941 0.916519 0.314234 0.918567 0.311368 0.918559 0.310632 0.9164 0.301278 0.919556 0.304414 0.917883 0.304673 0.920023 0.30201 0.921511 0.235938 0.686596 0.238874 0.686506 0.239473 0.6904 0.236048 0.690202 0.238874 0.686506 0.242651 0.686751 0.24314 0.689924 0.239473 0.6904 0.300199 0.917175 0.298097 0.918933 0.296717 0.916432 0.299179 0.914456 0.311368 0.918559 0.307644 0.919115 0.307044 0.917081 0.310632 0.9164 0.295947 0.920903 0.294474 0.918268 0.296717 0.916432 0.298097 0.918933 0.31201 0.908295 0.308157 0.909089 0.304569 0.904424 0.307065 0.902654 0.307644 0.919115 0.304673 0.920023 0.304414 0.917883 0.307044 0.917081 0.292551 0.915487 0.294856 0.913346 0.296717 0.916432 0.294474 0.918268 0.30355 0.915544 0.306181 0.914517 0.307044 0.917081 0.304414 0.917883 0.245113 0.694515 0.243876 0.69228 0.246097 0.691658 0.24752 0.693662 0.309806 0.913618 0.310632 0.9164 0.307044 0.917081 0.306181 0.914517 0.245113 0.694515 0.24752 0.693662 0.251075 0.694039 0.248633 0.696863 0.313121 0.913434 0.313941 0.916519 0.310632 0.9164 0.309806 0.913618 0.31201 0.908295 0.313371 0.903625 0.316606 0.907992 0.315919 0.911225 0.243876 0.69228 0.239598 0.692766 0.239473 0.6904 0.24314 0.689924 0.300199 0.917175 0.30355 0.915544 0.304414 0.917883 0.301278 0.919556 0.31201 0.908295 0.315919 0.911225 0.316181 0.914405 0.313121 0.913434 0.246097 0.691658 0.243876 0.69228 0.24314 0.689924 0.245415 0.689402 0.300199 0.917175 0.301278 0.919556 0.299173 0.920748 0.298097 0.918933 0.316606 0.907992 0.318041 0.910241 0.31825 0.913658 0.315919 0.911225 0.318442 0.915711 0.318744 0.917557 0.316618 0.916972 0.316181 0.914405 0.298097 0.918933 0.299173 0.920748 0.296878 0.922709 0.295947 0.920903 0.313121 0.913434 0.316181 0.914405 0.316618 0.916972 0.313941 0.916519 0.299179 0.914456 0.297189 0.910844 0.299506 0.908202 0.302027 0.91236 0.309806 0.913618 0.306181 0.914517 0.304735 0.910751 0.308157 0.909089 0.236238 0.692511 0.236048 0.690202 0.239473 0.6904 0.239598 0.692766 0.296717 0.916432 0.294856 0.913346 0.297189 0.910844 0.299179 0.914456 0.30355 0.915544 0.302027 0.91236 0.304735 0.910751 0.306181 0.914517 0.299506 0.908202 0.302015 0.906156 0.304735 0.910751 0.302027 0.91236 0.31201 0.908295 0.313121 0.913434 0.309806 0.913618 0.308157 0.909089 0.308157 0.909089 0.304735 0.910751 0.302015 0.906156 0.304569 0.904424 0.299179 0.914456 0.302027 0.91236 0.30355 0.915544 0.300199 0.917175 0.308982 0.925196 0.312845 0.924461 0.313167 0.927147 0.309683 0.927758 0.318852 0.929351 0.318153 0.92657 0.32063 0.926739 0.320835 0.930491 0.315593 0.926799 0.31595 0.929486 0.313435 0.92989 0.313167 0.927147 0.305573 0.924044 0.308588 0.923041 0.308982 0.925196 0.306138 0.926116 0.315086 0.922091 0.315436 0.924263 0.312845 0.924461 0.312247 0.922235 0.308588 0.923041 0.312247 0.922235 0.312845 0.924461 0.308982 0.925196 0.315436 0.924263 0.315593 0.926799 0.313167 0.927147 0.312845 0.924461 0.305022 0.922147 0.308159 0.921113 0.308588 0.923041 0.305573 0.924044 0.303873 0.927304 0.303211 0.925176 0.305573 0.924044 0.306138 0.926116 0.308159 0.921113 0.311965 0.920344 0.312247 0.922235 0.308588 0.923041 0.303873 0.927304 0.306138 0.926116 0.306874 0.928712 0.304728 0.929787 0.235969 0.683192 0.233969 0.684112 0.233156 0.68272 0.233909 0.681103 0.302645 0.931037 0.304728 0.929787 0.305671 0.932497 0.30384 0.933665 0.235969 0.683192 0.235938 0.686596 0.233786 0.686899 0.233969 0.684112 0.301236 0.926721 0.300338 0.925127 0.30248 0.923492 0.303211 0.925176 0.242651 0.686751 0.242832 0.6829 0.244976 0.684526 0.245101 0.687172 0.318153 0.92657 0.318852 0.929351 0.31595 0.929486 0.315593 0.926799 0.317097 0.920607 0.316855 0.918835 0.319044 0.919292 0.319406 0.921364 0.317157 0.922292 0.315086 0.922091 0.314734 0.92035 0.317097 0.920607 0.314234 0.918567 0.316855 0.918835 0.317097 0.920607 0.314734 0.92035 0.2361389 0.677676 0.234538 0.677677 0.23498 0.67386 0.2370229 0.672775 0.311368 0.918559 0.314234 0.918567 0.314734 0.92035 0.311965 0.920344 0.302645 0.931037 0.30384 0.933665 0.302067 0.936548 0.300324 0.932892 0.311368 0.918559 0.311965 0.920344 0.308159 0.921113 0.307644 0.919115 0.300338 0.925127 0.301236 0.926721 0.299395 0.927909 0.298214 0.927305 0.304673 0.920023 0.307644 0.919115 0.308159 0.921113 0.305022 0.922147 0.301236 0.926721 0.301714 0.928558 0.299358 0.929644 0.299395 0.927909 0.304673 0.920023 0.305022 0.922147 0.30248 0.923492 0.30201 0.921511 0.301714 0.928558 0.302645 0.931037 0.300324 0.932892 0.299358 0.929644 0.30201 0.921511 0.30248 0.923492 0.300338 0.925127 0.299794 0.922924 0.315436 0.924263 0.317569 0.924081 0.318153 0.92657 0.315593 0.926799 0.299794 0.922924 0.300338 0.925127 0.298214 0.927305 0.297529 0.925048 0.301714 0.928558 0.303873 0.927304 0.304728 0.929787 0.302645 0.931037 0.317157 0.922292 0.317097 0.920607 0.319406 0.921364 0.318804 0.922397 0.315086 0.922091 0.312247 0.922235 0.311965 0.920344 0.314734 0.92035 0.317157 0.922292 0.318804 0.922397 0.319713 0.923739 0.317569 0.924081 0.303211 0.925176 0.303873 0.927304 0.301714 0.928558 0.301236 0.926721 0.242832 0.6829 0.24507 0.681615 0.245742 0.683204 0.244976 0.684526 0.315086 0.922091 0.317157 0.922292 0.317569 0.924081 0.315436 0.924263 0.303211 0.925176 0.30248 0.923492 0.305022 0.922147 0.305573 0.924044 0.242832 0.6829 0.242944 0.677986 0.244741 0.678295 0.24507 0.681615 0.235969 0.683192 0.233909 0.681103 0.234538 0.677677 0.2361389 0.677676 0.304728 0.929787 0.306874 0.928712 0.307507 0.931444 0.305671 0.932497 0.235969 0.683192 0.2361389 0.677676 0.239553 0.677829 0.23936 0.683067 0.306511 0.935077 0.304899 0.936104 0.30384 0.933665 0.305671 0.932497 0.242832 0.6829 0.23936 0.683067 0.239553 0.677829 0.242944 0.677986 0.30384 0.933665 0.304899 0.936104 0.303559 0.937394 0.302067 0.936548 0.306511 0.935077 0.305671 0.932497 0.307507 0.931444 0.308139 0.934066 0.317569 0.924081 0.319713 0.923739 0.32063 0.926739 0.318153 0.92657 0.235969 0.683192 0.23936 0.683067 0.238874 0.686506 0.235938 0.686596 0.23936 0.683067 0.242832 0.6829 0.242651 0.686751 0.238874 0.686506 0.2370229 0.672775 0.23981 0.672832 0.239553 0.677829 0.2361389 0.677676 0.23981 0.672832 0.243094 0.673081 0.242944 0.677986 0.239553 0.677829 0.307507 0.931444 0.310227 0.930551 0.310897 0.933103 0.308139 0.934066 0.310227 0.930551 0.313435 0.92989 0.314118 0.932427 0.310897 0.933103 0.306874 0.928712 0.309683 0.927758 0.310227 0.930551 0.307507 0.931444 0.309683 0.927758 0.313167 0.927147 0.313435 0.92989 0.310227 0.930551 0.306138 0.926116 0.308982 0.925196 0.309683 0.927758 0.306874 0.928712 0.243094 0.673081 0.245379 0.674612 0.244741 0.678295 0.242944 0.677986 0.316524 0.93208 0.319037 0.932027 0.319534 0.934167 0.316897 0.934245 0.316657 0.941748 0.315088 0.943581 0.314635 0.94285 0.3161 0.940772 0.316524 0.93208 0.31595 0.929486 0.318852 0.929351 0.319037 0.932027 0.312526 0.943916 0.312266 0.944734 0.309456 0.942748 0.309922 0.941831 0.314961 0.943675 0.312526 0.943916 0.312047 0.942852 0.314635 0.94285 0.237818 0.668684 0.2370229 0.672775 0.235351 0.671276 0.235904 0.668521 0.317757 0.942524 0.316056 0.944914 0.315088 0.943581 0.316657 0.941748 0.237818 0.668684 0.235904 0.668521 0.236506 0.665563 0.237936 0.665927 0.240449 0.663503 0.23874 0.664476 0.238031 0.662857 0.240465 0.662463 0.314646 0.945381 0.312266 0.944734 0.312526 0.943916 0.314961 0.943675 0.304899 0.936104 0.305769 0.938001 0.303592 0.939145 0.303559 0.937394 0.312266 0.944734 0.314646 0.945381 0.313368 0.948061 0.311514 0.946135 0.305769 0.938001 0.307168 0.940187 0.305482 0.941877 0.303592 0.939145 0.316056 0.944914 0.317757 0.942524 0.31936 0.943353 0.318424 0.946351 0.307168 0.940187 0.309456 0.942748 0.308349 0.944138 0.305482 0.941877 0.237818 0.668684 0.240299 0.669067 0.23981 0.672832 0.2370229 0.672775 0.309456 0.942748 0.312266 0.944734 0.311514 0.946135 0.308349 0.944138 0.316657 0.941748 0.317553 0.938454 0.319081 0.939013 0.317757 0.942524 0.240299 0.669067 0.242902 0.668746 0.243094 0.673081 0.23981 0.672832 0.316657 0.941748 0.3161 0.940772 0.316252 0.93868 0.317553 0.938454 0.237936 0.665927 0.240354 0.665991 0.240299 0.669067 0.237818 0.668684 0.309922 0.941831 0.310122 0.941385 0.312047 0.942852 0.312526 0.943916 0.240354 0.665991 0.242686 0.665946 0.242902 0.668746 0.240299 0.669067 0.317053 0.935736 0.314724 0.935638 0.314736 0.934406 0.316897 0.934245 0.311293 0.934722 0.314736 0.934406 0.314724 0.935638 0.311663 0.935936 0.23874 0.664476 0.240449 0.663503 0.240354 0.665991 0.237936 0.665927 0.316524 0.93208 0.314118 0.932427 0.313435 0.92989 0.31595 0.929486 0.308139 0.934066 0.310897 0.933103 0.311293 0.934722 0.308248 0.93629 0.240449 0.663503 0.242051 0.664093 0.242686 0.665946 0.240354 0.665991 0.308054 0.938999 0.307187 0.937084 0.308248 0.93629 0.308773 0.937874 0.310897 0.933103 0.314118 0.932427 0.314736 0.934406 0.311293 0.934722 0.242051 0.664093 0.240449 0.663503 0.240465 0.662463 0.24334 0.663433 0.313415 0.942265 0.314158 0.941894 0.314262 0.942073 0.313584 0.942305 0.308054 0.938999 0.309922 0.941831 0.309456 0.942748 0.307168 0.940187 0.314861 0.941496 0.314788 0.941685 0.314262 0.942073 0.314158 0.941894 0.308248 0.93629 0.311293 0.934722 0.311663 0.935936 0.308773 0.937874 0.317053 0.935736 0.319385 0.936141 0.319081 0.939013 0.317553 0.938454 0.306511 0.935077 0.308139 0.934066 0.308248 0.93629 0.307187 0.937084 0.316524 0.93208 0.316897 0.934245 0.314736 0.934406 0.314118 0.932427 0.312445 0.942069 0.312975 0.942202 0.31345 0.942454 0.313121 0.942645 0.311844 0.941739 0.312445 0.942069 0.313121 0.942645 0.312047 0.942852 0.2370229 0.672775 0.23498 0.67386 0.2343659 0.672372 0.235351 0.671276 0.243094 0.673081 0.24526 0.671594 0.246062 0.673124 0.245379 0.674612 0.314968 0.941668 0.314788 0.941685 0.314861 0.941496 0.315076 0.941099 0.31345 0.942454 0.312975 0.942202 0.313415 0.942265 0.313584 0.942305 0.317757 0.942524 0.319081 0.939013 0.321072 0.940427 0.31936 0.943353 0.317553 0.938454 0.316252 0.93868 0.314724 0.935638 0.317053 0.935736 0.242686 0.665946 0.244471 0.66618 0.245295 0.669267 0.242902 0.668746 0.309922 0.941831 0.308054 0.938999 0.308773 0.937874 0.310122 0.941385 0.243094 0.673081 0.242902 0.668746 0.245295 0.669267 0.24526 0.671594 0.24334 0.663433 0.244471 0.66618 0.242686 0.665946 0.242051 0.664093 0.319081 0.939013 0.319385 0.936141 0.321566 0.936593 0.321072 0.940427 0.237936 0.665927 0.236506 0.665563 0.238031 0.662857 0.23874 0.664476 0.319037 0.932027 0.318852 0.929351 0.320835 0.930491 0.320434 0.932157 0.314968 0.941668 0.314257 0.942198 0.314262 0.942073 0.314788 0.941685 0.319534 0.934167 0.319037 0.932027 0.320434 0.932157 0.321568 0.933854 0.314257 0.942198 0.31345 0.942454 0.313584 0.942305 0.314262 0.942073 0.319385 0.936141 0.319534 0.934167 0.321568 0.933854 0.321566 0.936593 0.31345 0.942454 0.314257 0.942198 0.31438 0.942362 0.313121 0.942645 0.306511 0.935077 0.307187 0.937084 0.305769 0.938001 0.304899 0.936104 0.314257 0.942198 0.314968 0.941668 0.315243 0.941521 0.31438 0.942362 0.307168 0.940187 0.305769 0.938001 0.307187 0.937084 0.308054 0.938999 0.313121 0.942645 0.31438 0.942362 0.314635 0.94285 0.312047 0.942852 0.319385 0.936141 0.317053 0.935736 0.316897 0.934245 0.319534 0.934167 0.31438 0.942362 0.315243 0.941521 0.3161 0.940772 0.314635 0.94285 0.334067 0.770742 0.33349 0.770756 0.33308 0.769744 0.333657 0.769906 0.33349 0.770756 0.331693 0.768538 0.332061 0.76835 0.33308 0.769744 0.328847 0.774871 0.327003 0.771244 0.329216 0.769993 0.331359 0.773448 0.33349 0.770756 0.33189 0.773946 0.331359 0.773448 0.332659 0.771008 0.328292 0.776291 0.328422 0.775489 0.33189 0.773946 0.332258 0.774435 0.334067 0.770742 0.332258 0.774435 0.33189 0.773946 0.33349 0.770756 0.324932 0.76734 0.325769 0.767647 0.327003 0.771244 0.326229 0.771533 0.328422 0.775489 0.326229 0.771533 0.327003 0.771244 0.328847 0.774871 0.3311 0.768832 0.332659 0.771008 0.331359 0.773448 0.329216 0.769993 0.324122 0.767171 0.327418 0.765733 0.327651 0.766257 0.324932 0.76734 0.324932 0.76734 0.327651 0.766257 0.327993 0.766883 0.325769 0.767647 0.330568 0.76616 0.331693 0.768538 0.3311 0.768832 0.330087 0.766615 0.330568 0.76616 0.330087 0.766615 0.327993 0.766883 0.327651 0.766257 0.331128 0.765539 0.330568 0.76616 0.327651 0.766257 0.327418 0.765733 0.325769 0.767647 0.327993 0.766883 0.329216 0.769993 0.327003 0.771244 0.33301 0.767849 0.332781 0.767949 0.332121 0.767111 0.331442 0.766161 0.3311 0.768832 0.329216 0.769993 0.327993 0.766883 0.330087 0.766615 0.330568 0.76616 0.331283 0.766323 0.332061 0.76835 0.331693 0.768538 0.331128 0.765539 0.331442 0.766161 0.331283 0.766323 0.330568 0.76616 0.333509 0.767626 0.33301 0.767849 0.331442 0.766161 0.331128 0.765539 0.331442 0.766161 0.332121 0.767111 0.331882 0.766958 0.331283 0.766323 0.331283 0.766323 0.331882 0.766958 0.332612 0.767989 0.332061 0.76835 0.33349 0.770756 0.332659 0.771008 0.3311 0.768832 0.331693 0.768538 0.332121 0.767111 0.332781 0.767949 0.332612 0.767989 0.331882 0.766958 0.333197 0.769147 0.333035 0.769081 0.332612 0.767989 0.332781 0.767949 0.33308 0.769744 0.332061 0.76835 0.332612 0.767989 0.333035 0.769081 0.333657 0.769906 0.33308 0.769744 0.333035 0.769081 0.333197 0.769147 0.328422 0.775489 0.328847 0.774871 0.331359 0.773448 0.33189 0.773946 0.33301 0.767849 0.333657 0.769906 0.333197 0.769147 0.332781 0.767949 0.333509 0.767626 0.334067 0.770742 0.333657 0.769906 0.33301 0.767849 0.37866 0.799806 0.379106 0.799106 0.380051 0.798251 0.38053 0.798873 0.378263 0.79365 0.378082 0.794401 0.377109 0.794651 0.376162 0.794595 0.379106 0.799106 0.379296 0.79864 0.37977 0.798067 0.380051 0.798251 0.378082 0.794401 0.378156 0.7949 0.377614 0.794944 0.377109 0.794651 0.378263 0.79365 0.376162 0.794595 0.374299 0.795024 0.373762 0.793992 0.374299 0.795024 0.37572 0.797913 0.372014 0.800309 0.371496 0.797243 0.377998 0.795232 0.378193 0.795245 0.378832 0.796609 0.378637 0.796714 0.379387 0.798123 0.378637 0.796714 0.378832 0.796609 0.379535 0.797969 0.376986 0.797342 0.37866 0.799806 0.37744 0.800678 0.37572 0.797913 0.376162 0.794595 0.376986 0.797342 0.37572 0.797913 0.374299 0.795024 0.37572 0.797913 0.37744 0.800678 0.374108 0.802389 0.372014 0.800309 0.378941 0.796334 0.378156 0.7949 0.378082 0.794401 0.379224 0.796351 0.37977 0.798067 0.378941 0.796334 0.379224 0.796351 0.380051 0.798251 0.377109 0.794651 0.377776 0.796989 0.376986 0.797342 0.376162 0.794595 0.378941 0.796334 0.37977 0.798067 0.379535 0.797969 0.378832 0.796609 0.378156 0.7949 0.378941 0.796334 0.378832 0.796609 0.378193 0.795245 0.378263 0.796832 0.377614 0.794944 0.377998 0.795232 0.378637 0.796714 0.379296 0.79864 0.378263 0.796832 0.378637 0.796714 0.379387 0.798123 0.378263 0.796832 0.379296 0.79864 0.379106 0.799106 0.377776 0.796989 0.377614 0.794944 0.378263 0.796832 0.377776 0.796989 0.377109 0.794651 0.377776 0.796989 0.379106 0.799106 0.37866 0.799806 0.376986 0.797342 0.371027 0.801041 0.369816 0.796278 0.371496 0.797243 0.372014 0.800309 0.373738 0.803662 0.371027 0.801041 0.372014 0.800309 0.374108 0.802389 0.37977 0.798067 0.379296 0.79864 0.379387 0.798123 0.379535 0.797969 0.378156 0.7949 0.378193 0.795245 0.377998 0.795232 0.377614 0.794944 0.378101 0.801105 0.37744 0.800678 0.37866 0.799806 0.38053 0.798873 0.373762 0.793992 0.374299 0.795024 0.371496 0.797243 0.369816 0.796278 0.373738 0.803662 0.374108 0.802389 0.37744 0.800678 0.378101 0.801105 0.395422 0.86333 0.394775 0.866135 0.391552 0.865709 0.392592 0.862984 0.399003 0.864191 0.398982 0.864775 0.398165 0.864856 0.397482 0.864347 0.397891 0.867857 0.39828 0.867507 0.398647 0.867836 0.398624 0.86828 0.398982 0.864775 0.398897 0.865177 0.398514 0.865276 0.398165 0.864856 0.396929 0.868515 0.397891 0.867857 0.398624 0.86828 0.398575 0.86877 0.390827 0.869291 0.391852 0.86849 0.394801 0.868994 0.394737 0.869667 0.39832 0.866346 0.398514 0.865276 0.398679 0.865665 0.3988 0.866387 0.395687 0.862559 0.395422 0.86333 0.392592 0.862984 0.391658 0.862314 0.394737 0.869667 0.394801 0.868994 0.396929 0.868515 0.398575 0.86877 0.399003 0.864191 0.397482 0.864347 0.395422 0.86333 0.395687 0.862559 0.398897 0.865177 0.398838 0.865589 0.398679 0.865665 0.398514 0.865276 0.398647 0.867836 0.39828 0.867507 0.398579 0.867179 0.398698 0.867337 0.390827 0.869291 0.390049 0.865521 0.391552 0.865709 0.391852 0.86849 0.390049 0.865521 0.391658 0.862314 0.392592 0.862984 0.391552 0.865709 0.397663 0.866337 0.397891 0.867857 0.396929 0.868515 0.396498 0.86632 0.398165 0.864856 0.397663 0.866337 0.396498 0.86632 0.397482 0.864347 0.398514 0.865276 0.39832 0.866346 0.397663 0.866337 0.398165 0.864856 0.39832 0.866346 0.39828 0.867507 0.397891 0.867857 0.397663 0.866337 0.39828 0.867507 0.39832 0.866346 0.3988 0.866387 0.398579 0.867179 0.398897 0.865177 0.399136 0.866453 0.398991 0.866409 0.398838 0.865589 0.399136 0.866453 0.398647 0.867836 0.398698 0.867337 0.398991 0.866409 0.398647 0.867836 0.399136 0.866453 0.399339 0.866571 0.398624 0.86828 0.398679 0.865665 0.398838 0.865589 0.398991 0.866409 0.3988 0.866387 0.399136 0.866453 0.398897 0.865177 0.398982 0.864775 0.399339 0.866571 0.394775 0.866135 0.394801 0.868994 0.391852 0.86849 0.391552 0.865709 0.397482 0.864347 0.396498 0.86632 0.394775 0.866135 0.395422 0.86333 0.396498 0.86632 0.396929 0.868515 0.394801 0.868994 0.394775 0.866135 0.398579 0.867179 0.3988 0.866387 0.398991 0.866409 0.398698 0.867337 0.361786 0.924089 0.359818 0.925003 0.358829 0.923917 0.361044 0.922357 0.361044 0.922357 0.358829 0.923917 0.35628 0.921659 0.35904 0.920113 0.361301 0.926337 0.361969 0.925437 0.362331 0.925113 0.36191 0.926927 0.36031 0.927065 0.361301 0.926337 0.36191 0.926927 0.35993 0.927522 0.359818 0.925003 0.359048 0.927073 0.357075 0.926286 0.358829 0.923917 0.361301 0.926337 0.36031 0.927065 0.360465 0.926794 0.361168 0.926152 0.361969 0.925437 0.361301 0.926337 0.361168 0.926152 0.361773 0.925505 0.360723 0.925831 0.361762 0.924951 0.361674 0.925394 0.361064 0.926082 0.360001 0.926899 0.360723 0.925831 0.361064 0.926082 0.360374 0.926706 0.360723 0.925831 0.360001 0.926899 0.359592 0.927032 0.36036 0.925552 0.36036 0.925552 0.359592 0.927032 0.359048 0.927073 0.359818 0.925003 0.361773 0.924557 0.36036 0.925552 0.359818 0.925003 0.361786 0.924089 0.359048 0.927073 0.359592 0.927032 0.35993 0.927522 0.359356 0.927899 0.355976 0.921217 0.35919 0.919585 0.35904 0.920113 0.35628 0.921659 0.354298 0.924603 0.355976 0.921217 0.35628 0.921659 0.355016 0.924315 0.358829 0.923917 0.357075 0.926286 0.355016 0.924315 0.35628 0.921659 0.354298 0.924603 0.355016 0.924315 0.357075 0.926286 0.356715 0.927073 0.36031 0.927065 0.360001 0.926899 0.360374 0.926706 0.360465 0.926794 0.362779 0.924591 0.361786 0.924089 0.361044 0.922357 0.361726 0.921958 0.356715 0.927073 0.357075 0.926286 0.359048 0.927073 0.359356 0.927899 0.361726 0.921958 0.361044 0.922357 0.35904 0.920113 0.35919 0.919585 0.361969 0.925437 0.361773 0.925505 0.361674 0.925394 0.361762 0.924951 0.362779 0.924591 0.362331 0.925113 0.361773 0.924557 0.361786 0.924089 0.362331 0.925113 0.361969 0.925437 0.361762 0.924951 0.361773 0.924557 0.359592 0.927032 0.360001 0.926899 0.36031 0.927065 0.35993 0.927522 0.361762 0.924951 0.360723 0.925831 0.36036 0.925552 0.361773 0.924557 0.361674 0.925394 0.361773 0.925505 0.361168 0.926152 0.361064 0.926082 0.360374 0.926706 0.361064 0.926082 0.361168 0.926152 0.360465 0.926794 0.315384 0.940661 0.313776 0.94115 0.313491 0.940571 0.31542 0.940114 0.313776 0.94115 0.312445 0.942069 0.311844 0.941739 0.313491 0.940571 0.315076 0.941099 0.313981 0.941558 0.313776 0.94115 0.315384 0.940661 0.313981 0.941558 0.312975 0.942202 0.312445 0.942069 0.313776 0.94115 0.312975 0.942202 0.313981 0.941558 0.314158 0.941894 0.313415 0.942265 0.313981 0.941558 0.315076 0.941099 0.314861 0.941496 0.314158 0.941894 0.315431 0.938748 0.313077 0.939364 0.31197 0.936559 0.314521 0.936318 0.313077 0.939364 0.310953 0.940655 0.309582 0.937991 0.31197 0.936559 0.31542 0.940114 0.313491 0.940571 0.313077 0.939364 0.315431 0.938748 0.313491 0.940571 0.311844 0.941739 0.310953 0.940655 0.313077 0.939364 0.3161 0.940772 0.31542 0.940114 0.315431 0.938748 0.316252 0.93868 0.3161 0.940772 0.315243 0.941521 0.315384 0.940661 0.31542 0.940114 0.308773 0.937874 0.309582 0.937991 0.310953 0.940655 0.310122 0.941385 0.308773 0.937874 0.311663 0.935936 0.31197 0.936559 0.309582 0.937991 0.316252 0.93868 0.315431 0.938748 0.314521 0.936318 0.314724 0.935638 0.310122 0.941385 0.310953 0.940655 0.311844 0.941739 0.312047 0.942852 0.311663 0.935936 0.314724 0.935638 0.314521 0.936318 0.31197 0.936559 0.315243 0.941521 0.314968 0.941668 0.315076 0.941099 0.315384 0.940661 0.278276 0.698772 0.282356 0.701369 0.279974 0.706459 0.274349 0.702822 0.30997 0.873141 0.313141 0.871592 0.317794 0.873574 0.315738 0.876521 0.325933 0.845666 0.324336 0.842568 0.332074 0.841859 0.334285 0.84529 0.235088 0.809979 0.246866 0.807178 0.245715 0.816633 0.2341099 0.818778 0.269621 0.900723 0.255654 0.89669 0.258797 0.890495 0.271155 0.895483 0.247116 0.854913 0.251234 0.85837 0.251033 0.861817 0.2469159 0.866048 0.274304 0.876446 0.27351 0.880813 0.263111 0.87547 0.26297 0.871008 0.232892 0.718149 0.236607 0.720356 0.234342 0.729534 0.230174 0.726571 0.235876 0.740126 0.239664 0.74066 0.239464 0.748142 0.236509 0.750103 0.282356 0.701369 0.286192 0.702196 0.285954 0.707603 0.279974 0.706459 0.324336 0.842568 0.325933 0.845666 0.320748 0.845737 0.317834 0.842791 0.233036 0.825864 0.2341099 0.818778 0.245715 0.816633 0.244556 0.825613 0.242713 0.892884 0.244511 0.887206 0.258797 0.890495 0.255654 0.89669 0.247808 0.845372 0.251755 0.848604 0.250946 0.85188 0.247116 0.854913 0.306779 0.858921 0.304177 0.867728 0.292712 0.864076 0.293917 0.856289 0.236607 0.720356 0.239807 0.722734 0.237232 0.731563 0.234342 0.729534 0.239664 0.74066 0.244322 0.743582 0.243918 0.747405 0.239464 0.748142 0.283677 0.714001 0.277826 0.712147 0.279974 0.706459 0.285954 0.707603 0.31882 0.847916 0.309787 0.843737 0.317834 0.842791 0.320748 0.845737 0.32819 0.831383 0.320916 0.833007 0.321497 0.830018 0.328362 0.827705 0.245889 0.87907 0.259937 0.884537 0.258797 0.890495 0.244511 0.887206 0.25097 0.832977 0.254172 0.837494 0.253464 0.84086 0.247808 0.845372 0.275331 0.766921 0.268456 0.768794 0.266866 0.763734 0.274366 0.760151 0.239807 0.722734 0.236607 0.720356 0.2388229 0.713156 0.242645 0.71511 0.219902 0.751493 0.222167 0.738624 0.2279019 0.74074 0.227245 0.755795 0.277826 0.712147 0.27204 0.709569 0.274349 0.702822 0.279974 0.706459 0.329792 0.863756 0.326712 0.867343 0.320314 0.865553 0.322197 0.862084 0.3283 0.82426 0.328362 0.827705 0.321497 0.830018 0.321934 0.826747 0.269184 0.78109 0.26032 0.783861 0.259929 0.77811 0.269223 0.774737 0.247116 0.854913 0.2469159 0.866048 0.236894 0.866059 0.238319 0.855606 0.268456 0.768794 0.258362 0.77145 0.256416 0.767154 0.266866 0.763734 0.236607 0.720356 0.232892 0.718149 0.234916 0.711237 0.2388229 0.713156 0.2309319 0.784191 0.2271929 0.77737 0.2377 0.769462 0.2440879 0.778068 0.282359 0.836791 0.282029 0.842063 0.268766 0.842909 0.269809 0.838613 0.27204 0.709569 0.277826 0.712147 0.275588 0.718395 0.269752 0.716002 0.322197 0.862084 0.320314 0.865553 0.314371 0.863365 0.317457 0.860931 0.306462 0.882333 0.307566 0.87705 0.313673 0.880123 0.312037 0.884625 0.240742 0.706392 0.236231 0.705851 0.236497 0.701458 0.24112 0.701123 0.269184 0.78109 0.269223 0.774737 0.275357 0.773387 0.275054 0.779627 0.247808 0.845372 0.247116 0.854913 0.238319 0.855606 0.240977 0.845516 0.326712 0.867343 0.325125 0.871746 0.318875 0.869602 0.320314 0.865553 0.254789 0.761339 0.255348 0.764092 0.2424049 0.764556 0.243807 0.760279 0.316338 0.85759 0.317359 0.852476 0.325021 0.853682 0.323477 0.85829 0.219902 0.751493 0.227245 0.755795 0.2217119 0.768914 0.217433 0.764768 0.218517 0.773284 0.221729 0.780878 0.211857 0.78761 0.208386 0.780425 0.277826 0.712147 0.283677 0.714001 0.281258 0.720156 0.275588 0.718395 0.323477 0.85829 0.322197 0.862084 0.317457 0.860931 0.316338 0.85759 0.30997 0.873141 0.315738 0.876521 0.313673 0.880123 0.307566 0.87705 0.297107 0.723209 0.301304 0.724215 0.300619 0.728783 0.295067 0.729129 0.25097 0.832977 0.247808 0.845372 0.240977 0.845516 0.242312 0.833574 0.314371 0.863365 0.320314 0.865553 0.318875 0.869602 0.312683 0.868021 0.283662 0.886344 0.282103 0.889945 0.272275 0.884499 0.27351 0.880813 0.255348 0.764092 0.256416 0.767154 0.2377 0.769462 0.2424049 0.764556 0.224641 0.887289 0.229192 0.888204 0.226018 0.893343 0.220498 0.892663 0.309787 0.843737 0.307518 0.850694 0.295288 0.848675 0.296388 0.842639 0.317794 0.873574 0.318875 0.869602 0.325125 0.871746 0.324499 0.876742 0.318477 0.888631 0.312037 0.884625 0.313673 0.880123 0.321166 0.884714 0.299601 0.719083 0.301889 0.716282 0.305129 0.71818 0.303262 0.720719 0.259929 0.77811 0.246383 0.784002 0.2440879 0.778068 0.258362 0.77145 0.306779 0.858921 0.314371 0.863365 0.312683 0.868021 0.304177 0.867728 0.230174 0.726571 0.234342 0.729534 0.232629 0.740173 0.2279019 0.74074 0.241144 0.734905 0.246236 0.736909 0.244322 0.743582 0.239664 0.74066 0.2309319 0.784191 0.224632 0.787393 0.221729 0.780878 0.2271929 0.77737 0.307518 0.850694 0.306779 0.858921 0.293917 0.856289 0.295288 0.848675 0.318875 0.869602 0.317794 0.873574 0.313141 0.871592 0.312683 0.868021 0.322944 0.880172 0.321166 0.884714 0.313673 0.880123 0.315738 0.876521 0.322471 0.839236 0.324336 0.842568 0.317834 0.842791 0.316722 0.838898 0.313746 0.814628 0.308036 0.81201 0.313237 0.804152 0.317413 0.807911 0.246383 0.784002 0.232074 0.78886 0.2309319 0.784191 0.2440879 0.778068 0.293917 0.856289 0.292712 0.864076 0.278734 0.860947 0.279874 0.8547 0.27351 0.880813 0.272275 0.884499 0.261943 0.879462 0.263111 0.87547 0.234342 0.729534 0.237232 0.731563 0.235876 0.740126 0.232629 0.740173 0.296388 0.842639 0.295288 0.848675 0.28073 0.848393 0.282029 0.842063 0.313141 0.871592 0.30997 0.873141 0.304177 0.867728 0.312683 0.868021 0.30348 0.887977 0.307576 0.89143 0.305088 0.895018 0.300961 0.891911 0.32845 0.816463 0.32429 0.81586 0.326044 0.811112 0.329316 0.811835 0.26032 0.783861 0.2477779 0.788191 0.246383 0.784002 0.259929 0.77811 0.279874 0.8547 0.278734 0.860947 0.26547 0.858131 0.266964 0.853292 0.26297 0.871008 0.263111 0.87547 0.252496 0.871288 0.2469159 0.866048 0.2279019 0.74074 0.232629 0.740173 0.233068 0.752041 0.227245 0.755795 0.224632 0.787393 0.214992 0.79284 0.211857 0.78761 0.221729 0.780878 0.295288 0.848675 0.293917 0.856289 0.279874 0.8547 0.28073 0.848393 0.315571 0.892394 0.311986 0.895569 0.307576 0.89143 0.310174 0.888123 0.264814 0.713267 0.256523 0.710397 0.258833 0.703625 0.266099 0.707153 0.319477 0.815443 0.313746 0.814628 0.317413 0.807911 0.322139 0.809353 0.2477779 0.788191 0.232368 0.791816 0.232074 0.78886 0.246383 0.784002 0.266964 0.853292 0.26547 0.858131 0.247116 0.854913 0.250946 0.85188 0.263111 0.87547 0.261943 0.879462 0.251887 0.876212 0.252496 0.871288 0.232629 0.740173 0.235876 0.740126 0.236509 0.750103 0.233068 0.752041 0.224641 0.887289 0.220498 0.892663 0.208175 0.889539 0.210653 0.883048 0.282029 0.842063 0.28073 0.848393 0.268476 0.848205 0.268766 0.842909 0.310174 0.888123 0.307576 0.89143 0.30348 0.887977 0.306618 0.88601 0.256523 0.710397 0.250476 0.708095 0.252901 0.701706 0.258833 0.703625 0.299506 0.908202 0.297189 0.910844 0.294663 0.907375 0.296643 0.904022 0.232368 0.791816 0.2477779 0.788191 0.248731 0.793313 0.2337059 0.79645 0.269809 0.838613 0.253464 0.84086 0.254172 0.837494 0.269688 0.834657 0.315462 0.834125 0.31563 0.831059 0.321497 0.830018 0.320916 0.833007 0.227245 0.755795 0.233068 0.752041 0.2424049 0.764556 0.2377 0.769462 0.2271929 0.77737 0.221729 0.780878 0.218517 0.773284 0.2217119 0.768914 0.28073 0.848393 0.279874 0.8547 0.266964 0.853292 0.268476 0.848205 0.299087 0.882176 0.306462 0.882333 0.306618 0.88601 0.30348 0.887977 0.266099 0.707153 0.258833 0.703625 0.261216 0.699599 0.268322 0.701058 0.298081 0.89555 0.30053 0.895441 0.303298 0.898416 0.301011 0.900132 0.2477779 0.788191 0.26032 0.783861 0.260349 0.789632 0.248731 0.793313 0.269809 0.838613 0.268766 0.842909 0.247808 0.845372 0.253464 0.84086 0.31563 0.831059 0.315897 0.827865 0.321934 0.826747 0.321497 0.830018 0.233068 0.752041 0.236509 0.750103 0.243807 0.760279 0.2424049 0.764556 0.245314 0.755853 0.239464 0.748142 0.243918 0.747405 0.247402 0.750422 0.268766 0.842909 0.268476 0.848205 0.251755 0.848604 0.247808 0.845372 0.305088 0.895018 0.303298 0.898416 0.30053 0.895441 0.300961 0.891911 0.258833 0.703625 0.252901 0.701706 0.2548 0.696197 0.261216 0.699599 0.312037 0.884625 0.310174 0.888123 0.306618 0.88601 0.306462 0.882333 0.244511 0.887206 0.232939 0.884058 0.235298 0.876778 0.245889 0.87907 0.25097 0.832977 0.269164 0.828363 0.269688 0.834657 0.254172 0.837494 0.283914 0.907649 0.285891 0.903726 0.28987 0.907257 0.287666 0.910686 0.309106 0.836743 0.309156 0.83177 0.31563 0.831059 0.315462 0.834125 0.243807 0.760279 0.236509 0.750103 0.239464 0.748142 0.245314 0.755853 0.268476 0.848205 0.266964 0.853292 0.250946 0.85188 0.251755 0.848604 0.29505 0.889014 0.300961 0.891911 0.30053 0.895441 0.298081 0.89555 0.250476 0.708095 0.256523 0.710397 0.25502 0.719146 0.248328 0.717209 0.232939 0.884058 0.22658 0.881346 0.227099 0.874532 0.235298 0.876778 0.28241 0.817441 0.284049 0.825763 0.269164 0.828363 0.268919 0.818702 0.264327 0.866258 0.26297 0.871008 0.2469159 0.866048 0.251033 0.861817 0.309156 0.83177 0.310009 0.826562 0.315897 0.827865 0.31563 0.831059 0.292808 0.736334 0.292939 0.742072 0.283546 0.748412 0.285417 0.741713 0.2377 0.769462 0.2271929 0.77737 0.2217119 0.768914 0.227245 0.755795 0.299087 0.882176 0.300472 0.874226 0.307566 0.87705 0.306462 0.882333 0.310009 0.826562 0.316242 0.823654 0.317328 0.825927 0.315897 0.827865 0.256523 0.710397 0.264814 0.713267 0.26063 0.721355 0.25502 0.719146 0.242713 0.892884 0.229192 0.888204 0.232939 0.884058 0.244511 0.887206 0.289217 0.70505 0.285954 0.707603 0.286192 0.702196 0.288741 0.702128 0.299087 0.882176 0.30348 0.887977 0.300961 0.891911 0.29505 0.889014 0.296233 0.836368 0.295732 0.83132 0.309156 0.83177 0.309106 0.836743 0.304569 0.904424 0.302015 0.906156 0.298873 0.901832 0.301011 0.900132 0.250156 0.747658 0.244322 0.743582 0.247584 0.7412 0.25134 0.743974 0.300472 0.874226 0.304177 0.867728 0.30997 0.873141 0.307566 0.87705 0.310009 0.826562 0.310755 0.819712 0.317319 0.819151 0.316242 0.823654 0.255868 0.731118 0.250564 0.72964 0.25502 0.719146 0.26063 0.721355 0.325933 0.845666 0.326214 0.849051 0.31882 0.847916 0.320748 0.845737 0.229192 0.888204 0.224641 0.887289 0.22658 0.881346 0.232939 0.884058 0.301011 0.900132 0.303298 0.898416 0.307065 0.902654 0.304569 0.904424 0.299087 0.882176 0.29505 0.889014 0.285467 0.882555 0.288794 0.877409 0.295732 0.83132 0.296133 0.826092 0.310009 0.826562 0.309156 0.83177 0.299506 0.908202 0.296643 0.904022 0.298873 0.901832 0.302015 0.906156 0.247402 0.750422 0.243918 0.747405 0.244322 0.743582 0.250156 0.747658 0.288794 0.877409 0.290874 0.871018 0.300472 0.874226 0.299087 0.882176 0.310009 0.826562 0.296133 0.826092 0.29692 0.818196 0.310755 0.819712 0.250564 0.72964 0.2453359 0.726241 0.248328 0.717209 0.25502 0.719146 0.315462 0.834125 0.320916 0.833007 0.321363 0.836508 0.317519 0.836212 0.258362 0.77145 0.2440879 0.778068 0.2377 0.769462 0.256416 0.767154 0.296133 0.826092 0.295732 0.83132 0.282984 0.832619 0.284049 0.825763 0.291865 0.903945 0.287899 0.899672 0.290203 0.895934 0.293634 0.900206 0.288794 0.877409 0.285467 0.882555 0.274304 0.876446 0.276199 0.872114 0.323477 0.85829 0.325021 0.853682 0.334789 0.85565 0.332201 0.859587 0.290203 0.895934 0.291293 0.892198 0.295688 0.897393 0.293634 0.900206 0.289653 0.715526 0.295186 0.717336 0.292861 0.721884 0.287653 0.720975 0.29692 0.818196 0.308036 0.81201 0.313746 0.814628 0.310755 0.819712 0.290874 0.871018 0.292712 0.864076 0.304177 0.867728 0.300472 0.874226 0.259656 0.795896 0.259104 0.804861 0.246866 0.807178 0.247905 0.799872 0.290203 0.895934 0.287899 0.899672 0.281126 0.893992 0.282103 0.889945 0.2495149 0.738323 0.246236 0.736909 0.250564 0.72964 0.255868 0.731118 0.322067 0.824232 0.321934 0.826747 0.315897 0.827865 0.317328 0.825927 0.245889 0.87907 0.235298 0.876778 0.236894 0.866059 0.2469159 0.866048 0.268626 0.801606 0.268305 0.809687 0.256504 0.813906 0.259104 0.804861 0.315738 0.876521 0.317794 0.873574 0.324499 0.876742 0.322944 0.880172 0.276199 0.872114 0.274304 0.876446 0.26297 0.871008 0.264327 0.866258 0.295732 0.83132 0.296233 0.836368 0.282359 0.836791 0.282984 0.832619 0.291865 0.903945 0.293634 0.900206 0.296643 0.904022 0.294663 0.907375 0.295186 0.717336 0.299601 0.719083 0.297107 0.723209 0.292861 0.721884 0.292712 0.864076 0.290874 0.871018 0.277863 0.867232 0.278734 0.860947 0.27115 0.888815 0.281126 0.893992 0.279384 0.899405 0.271155 0.895483 0.246236 0.736909 0.241144 0.734905 0.2453359 0.726241 0.250564 0.72964 0.322067 0.824232 0.317328 0.825927 0.316242 0.823654 0.321531 0.822233 0.25097 0.832977 0.242312 0.833574 0.244556 0.825613 0.253486 0.823481 0.315571 0.892394 0.310174 0.888123 0.312037 0.884625 0.318477 0.888631 0.269752 0.716002 0.275588 0.718395 0.272459 0.726546 0.266272 0.723654 0.284049 0.825763 0.282984 0.832619 0.269688 0.834657 0.269164 0.828363 0.293634 0.900206 0.295688 0.897393 0.298873 0.901832 0.296643 0.904022 0.29218 0.710071 0.297604 0.713985 0.295186 0.717336 0.289653 0.715526 0.290874 0.871018 0.288794 0.877409 0.276199 0.872114 0.277863 0.867232 0.232012 0.705462 0.232836 0.701893 0.236497 0.701458 0.236231 0.705851 0.264568 0.753217 0.254789 0.761339 0.253554 0.756946 0.262175 0.748847 0.32429 0.81586 0.319477 0.815443 0.322139 0.809353 0.326044 0.811112 0.227099 0.874532 0.228245 0.865696 0.236894 0.866059 0.235298 0.876778 0.329792 0.863756 0.322197 0.862084 0.323477 0.85829 0.332201 0.859587 0.264814 0.713267 0.269752 0.716002 0.266272 0.723654 0.26063 0.721355 0.282984 0.832619 0.282359 0.836791 0.269809 0.838613 0.269688 0.834657 0.298081 0.89555 0.301011 0.900132 0.298873 0.901832 0.295688 0.897393 0.297604 0.713985 0.301889 0.716282 0.299601 0.719083 0.295186 0.717336 0.278734 0.860947 0.277863 0.867232 0.265185 0.861805 0.26547 0.858131 0.268755 0.787447 0.260349 0.789632 0.26032 0.783861 0.269184 0.78109 0.254789 0.761339 0.243807 0.760279 0.245314 0.755853 0.253554 0.756946 0.297107 0.723209 0.299601 0.719083 0.303262 0.720719 0.301304 0.724215 0.230585 0.855607 0.238319 0.855606 0.236894 0.866059 0.228245 0.865696 0.328008 0.821006 0.3283 0.82426 0.321934 0.826747 0.322067 0.824232 0.245886 0.706961 0.250476 0.708095 0.248328 0.717209 0.242645 0.71511 0.329963 0.838582 0.332074 0.841859 0.324336 0.842568 0.322471 0.839236 0.217854 0.799003 0.214992 0.79284 0.224632 0.787393 0.225396 0.791539 0.292808 0.736334 0.285417 0.741713 0.290662 0.730072 0.295067 0.729129 0.334285 0.84529 0.335304 0.849733 0.326214 0.849051 0.325933 0.845666 0.277863 0.867232 0.276199 0.872114 0.264327 0.866258 0.265185 0.861805 0.217854 0.799003 0.232368 0.791816 0.2337059 0.79645 0.218708 0.804134 0.262175 0.748847 0.253554 0.756946 0.250156 0.747658 0.257676 0.741945 0.292575 0.910279 0.290321 0.913106 0.287666 0.910686 0.28987 0.907257 0.233152 0.844652 0.240977 0.845516 0.238319 0.855606 0.230585 0.855607 0.320916 0.833007 0.32819 0.831383 0.328589 0.83528 0.321363 0.836508 0.287653 0.720975 0.284628 0.730735 0.277111 0.728038 0.281258 0.720156 0.285417 0.741713 0.274703 0.742945 0.284628 0.730735 0.290662 0.730072 0.26547 0.858131 0.265185 0.861805 0.251234 0.85837 0.247116 0.854913 0.26811 0.793924 0.259656 0.795896 0.260349 0.789632 0.268755 0.787447 0.245314 0.755853 0.247402 0.750422 0.250156 0.747658 0.253554 0.756946 0.28987 0.907257 0.291865 0.903945 0.294663 0.907375 0.292575 0.910279 0.2334679 0.833775 0.242312 0.833574 0.240977 0.845516 0.233152 0.844652 0.268755 0.787447 0.269184 0.78109 0.275054 0.779627 0.275015 0.785445 0.281258 0.720156 0.277111 0.728038 0.272459 0.726546 0.275588 0.718395 0.309106 0.836743 0.316722 0.838898 0.317834 0.842791 0.309787 0.843737 0.295067 0.729129 0.290662 0.730072 0.292861 0.721884 0.297107 0.723209 0.265185 0.861805 0.264327 0.866258 0.251033 0.861817 0.251234 0.85837 0.311986 0.895569 0.309285 0.899155 0.305088 0.895018 0.307576 0.89143 0.28241 0.817441 0.29692 0.818196 0.296133 0.826092 0.284049 0.825763 0.232012 0.705462 0.236231 0.705851 0.234916 0.711237 0.230164 0.710014 0.321531 0.822233 0.316242 0.823654 0.317319 0.819151 0.322711 0.818597 0.218708 0.804134 0.2337059 0.79645 0.234845 0.802998 0.219631 0.809503 0.24717 0.700653 0.24112 0.701123 0.240854 0.698664 0.248633 0.696863 0.274703 0.742945 0.264568 0.753217 0.262175 0.748847 0.269165 0.738285 0.289217 0.70505 0.291229 0.705346 0.29218 0.710071 0.285954 0.707603 0.290662 0.730072 0.284628 0.730735 0.287653 0.720975 0.292861 0.721884 0.298081 0.89555 0.295688 0.897393 0.291293 0.892198 0.29505 0.889014 0.282103 0.889945 0.281126 0.893992 0.27115 0.888815 0.272275 0.884499 0.230164 0.710014 0.234916 0.711237 0.232892 0.718149 0.227208 0.716766 0.325345 0.820899 0.321531 0.822233 0.322711 0.818597 0.325531 0.818416 0.26811 0.793924 0.268626 0.801606 0.259104 0.804861 0.259656 0.795896 0.295067 0.729129 0.300619 0.728783 0.300631 0.733634 0.292808 0.736334 0.262175 0.748847 0.257676 0.741945 0.266432 0.735042 0.269165 0.738285 0.285417 0.741713 0.283546 0.748412 0.27534 0.751188 0.274703 0.742945 0.285954 0.707603 0.29218 0.710071 0.289653 0.715526 0.283677 0.714001 0.29505 0.889014 0.291293 0.892198 0.283662 0.886344 0.285467 0.882555 0.227208 0.716766 0.232892 0.718149 0.230174 0.726571 0.225024 0.724949 0.2309319 0.784191 0.232074 0.78886 0.225396 0.791539 0.224632 0.787393 0.233036 0.825864 0.244556 0.825613 0.242312 0.833574 0.2334679 0.833775 0.259929 0.77811 0.258362 0.77145 0.268456 0.768794 0.269223 0.774737 0.257676 0.741945 0.254147 0.739951 0.260926 0.732275 0.266432 0.735042 0.287653 0.720975 0.281258 0.720156 0.283677 0.714001 0.289653 0.715526 0.24112 0.701123 0.236497 0.701458 0.236375 0.698457 0.240854 0.698664 0.261943 0.879462 0.259937 0.884537 0.245889 0.87907 0.251887 0.876212 0.225024 0.724949 0.230174 0.726571 0.2279019 0.74074 0.222167 0.738624 0.217854 0.799003 0.225396 0.791539 0.232074 0.78886 0.232368 0.791816 0.268919 0.818702 0.253486 0.823481 0.256504 0.813906 0.268305 0.809687 0.275357 0.773387 0.269223 0.774737 0.268456 0.768794 0.275331 0.766921 0.274703 0.742945 0.269165 0.738285 0.277111 0.728038 0.284628 0.730735 0.245886 0.706961 0.240742 0.706392 0.24112 0.701123 0.24717 0.700653 0.285467 0.882555 0.283662 0.886344 0.27351 0.880813 0.274304 0.876446 0.279384 0.899405 0.277726 0.903638 0.269621 0.900723 0.271155 0.895483 0.237232 0.731563 0.241144 0.734905 0.239664 0.74066 0.235876 0.740126 0.32845 0.816463 0.325531 0.818416 0.322711 0.818597 0.32429 0.81586 0.253486 0.823481 0.268919 0.818702 0.269164 0.828363 0.25097 0.832977 0.272459 0.726546 0.277111 0.728038 0.269165 0.738285 0.266432 0.735042 0.283914 0.907649 0.277726 0.903638 0.279384 0.899405 0.285891 0.903726 0.274349 0.702822 0.27204 0.709569 0.266099 0.707153 0.268322 0.701058 0.317457 0.860931 0.314371 0.863365 0.306779 0.858921 0.316338 0.85759 0.317319 0.819151 0.319477 0.815443 0.32429 0.81586 0.322711 0.818597 0.2337059 0.79645 0.248731 0.793313 0.247905 0.799872 0.234845 0.802998 0.328008 0.821006 0.322067 0.824232 0.321531 0.822233 0.325345 0.820899 0.266272 0.723654 0.272459 0.726546 0.266432 0.735042 0.260926 0.732275 0.269752 0.716002 0.264814 0.713267 0.266099 0.707153 0.27204 0.709569 0.266866 0.763734 0.264997 0.757173 0.27534 0.751188 0.274366 0.760151 0.317359 0.852476 0.31882 0.847916 0.326214 0.849051 0.325021 0.853682 0.2495149 0.738323 0.247584 0.7412 0.244322 0.743582 0.246236 0.736909 0.310755 0.819712 0.313746 0.814628 0.319477 0.815443 0.317319 0.819151 0.259656 0.795896 0.247905 0.799872 0.248731 0.793313 0.260349 0.789632 0.254147 0.739951 0.2495149 0.738323 0.255868 0.731118 0.260926 0.732275 0.245886 0.706961 0.24717 0.700653 0.252901 0.701706 0.250476 0.708095 0.264997 0.757173 0.264568 0.753217 0.274703 0.742945 0.27534 0.751188 0.291293 0.892198 0.290203 0.895934 0.282103 0.889945 0.283662 0.886344 0.287899 0.899672 0.291865 0.903945 0.28987 0.907257 0.285891 0.903726 0.26063 0.721355 0.266272 0.723654 0.260926 0.732275 0.255868 0.731118 0.2548 0.696197 0.252901 0.701706 0.24717 0.700653 0.248633 0.696863 0.256416 0.767154 0.255348 0.764092 0.264997 0.757173 0.266866 0.763734 0.248328 0.717209 0.2453359 0.726241 0.239807 0.722734 0.242645 0.71511 0.325021 0.853682 0.326214 0.849051 0.335304 0.849733 0.334789 0.85565 0.328589 0.83528 0.329963 0.838582 0.322471 0.839236 0.321363 0.836508 0.235088 0.809979 0.234845 0.802998 0.247905 0.799872 0.246866 0.807178 0.287899 0.899672 0.285891 0.903726 0.279384 0.899405 0.281126 0.893992 0.237232 0.731563 0.239807 0.722734 0.2453359 0.726241 0.241144 0.734905 0.255348 0.764092 0.254789 0.761339 0.264568 0.753217 0.264997 0.757173 0.272275 0.884499 0.27115 0.888815 0.259937 0.884537 0.261943 0.879462 0.306779 0.858921 0.307518 0.850694 0.317359 0.852476 0.316338 0.85759 0.27176 0.697674 0.273307 0.697985 0.274349 0.702822 0.268322 0.701058 0.321363 0.836508 0.322471 0.839236 0.316722 0.838898 0.317519 0.836212 0.253486 0.823481 0.244556 0.825613 0.245715 0.816633 0.256504 0.813906 0.309106 0.836743 0.309787 0.843737 0.296388 0.842639 0.296233 0.836368 0.236231 0.705851 0.240742 0.706392 0.2388229 0.713156 0.234916 0.711237 0.254147 0.739951 0.25134 0.743974 0.247584 0.7412 0.2495149 0.738323 0.307518 0.850694 0.309787 0.843737 0.31882 0.847916 0.317359 0.852476 0.315462 0.834125 0.317519 0.836212 0.316722 0.838898 0.309106 0.836743 0.259104 0.804861 0.256504 0.813906 0.245715 0.816633 0.246866 0.807178 0.27115 0.888815 0.271155 0.895483 0.258797 0.890495 0.259937 0.884537 0.245889 0.87907 0.2469159 0.866048 0.252496 0.871288 0.251887 0.876212 0.296233 0.836368 0.296388 0.842639 0.282029 0.842063 0.282359 0.836791 0.240742 0.706392 0.245886 0.706961 0.242645 0.71511 0.2388229 0.713156 0.257676 0.741945 0.250156 0.747658 0.25134 0.743974 0.254147 0.739951 0.295082 0.350069 0.300169 0.35247 0.300864 0.35688 0.293923 0.354959 0.311479 0.370617 0.311173 0.378821 0.299362 0.377327 0.301597 0.370318 0.311479 0.370617 0.319831 0.368131 0.322325 0.376244 0.311173 0.378821 0.290779 0.394513 0.28378 0.40876 0.270141 0.402662 0.276299 0.389168 0.322325 0.376244 0.323205 0.38592 0.309409 0.387759 0.311173 0.378821 0.299362 0.377327 0.311173 0.378821 0.309409 0.387759 0.295598 0.385259 0.309409 0.387759 0.323205 0.38592 0.321218 0.397325 0.305972 0.396832 0.295598 0.385259 0.309409 0.387759 0.305972 0.396832 0.290779 0.394513 0.305972 0.396832 0.321218 0.397325 0.313656 0.416234 0.29907 0.413073 0.290779 0.394513 0.305972 0.396832 0.29907 0.413073 0.28378 0.40876 0.28378 0.40876 0.29907 0.413073 0.283731 0.432226 0.271463 0.423913 0.28378 0.40876 0.271463 0.423913 0.259758 0.415242 0.270141 0.402662 0.283731 0.432226 0.259028 0.448641 0.252479 0.434491 0.271463 0.423913 0.259758 0.415242 0.271463 0.423913 0.252479 0.434491 0.245313 0.422701 0.283731 0.432226 0.296224 0.438355 0.277363 0.456431 0.259028 0.448641 0.282293 0.380052 0.295598 0.385259 0.290779 0.394513 0.276299 0.389168 0.259028 0.448641 0.277363 0.456431 0.261714 0.469212 0.247591 0.463113 0.307176 0.356851 0.313461 0.355097 0.316908 0.361517 0.310026 0.363547 0.293923 0.354959 0.300864 0.35688 0.302222 0.363995 0.292992 0.361978 0.301597 0.370318 0.302222 0.363995 0.310026 0.363547 0.311479 0.370617 0.287472 0.37322 0.299362 0.377327 0.295598 0.385259 0.282293 0.380052 0.287472 0.37322 0.290812 0.367725 0.301597 0.370318 0.299362 0.377327 0.30363 0.346546 0.307314 0.343782 0.310433 0.349941 0.305217 0.352185 0.290812 0.367725 0.292992 0.361978 0.302222 0.363995 0.301597 0.370318 0.311479 0.370617 0.310026 0.363547 0.316908 0.361517 0.319831 0.368131 0.296048 0.346952 0.299824 0.347709 0.300169 0.35247 0.295082 0.350069 0.300169 0.35247 0.299824 0.347709 0.30363 0.346546 0.305217 0.352185 0.29907 0.413073 0.313656 0.416234 0.296224 0.438355 0.283731 0.432226 0.302222 0.363995 0.300864 0.35688 0.307176 0.356851 0.310026 0.363547 0.305217 0.352185 0.310433 0.349941 0.313461 0.355097 0.307176 0.356851 0.300864 0.35688 0.300169 0.35247 0.305217 0.352185 0.307176 0.356851 0.220631 0.433807 0.233939 0.435662 0.2356089 0.448288 0.220475 0.446636 0.259028 0.448641 0.247591 0.463113 0.232345 0.461145 0.2356089 0.448288 0.252479 0.434491 0.259028 0.448641 0.2356089 0.448288 0.233939 0.435662 0.220631 0.433807 0.2199929 0.421148 0.231298 0.423324 0.233939 0.435662 0.2356089 0.448288 0.232345 0.461145 0.218932 0.459797 0.220475 0.446636 0.2274 0.348288 0.228919 0.344844 0.232157 0.346687 0.22947 0.349909 0.2274 0.348288 0.22947 0.349909 0.227545 0.352119 0.226197 0.350447 0.236539 0.354126 0.234382 0.350181 0.236813 0.348692 0.23938 0.352563 0.223999 0.343523 0.221866 0.343848 0.221195 0.340562 0.2239879 0.340016 0.22916 0.354568 0.2316049 0.352751 0.2335309 0.356133 0.23048 0.357214 0.22411 0.348781 0.224079 0.346779 0.2255139 0.347381 0.225147 0.349442 0.225147 0.349442 0.2255139 0.347381 0.2274 0.348288 0.226197 0.350447 0.223999 0.343523 0.2262009 0.343978 0.2255139 0.347381 0.224079 0.346779 0.22947 0.349909 0.2316049 0.352751 0.22916 0.354568 0.227545 0.352119 0.2316049 0.352751 0.22947 0.349909 0.232157 0.346687 0.234382 0.350181 0.2335309 0.356133 0.2316049 0.352751 0.234382 0.350181 0.236539 0.354126 0.2274 0.348288 0.2255139 0.347381 0.2262009 0.343978 0.228919 0.344844 0.286237 0.351144 0.288591 0.346749 0.295082 0.350069 0.293923 0.354959 0.27231 0.340476 0.277994 0.345396 0.273717 0.350436 0.267986 0.346013 0.290812 0.367725 0.279846 0.362004 0.283743 0.357308 0.292992 0.361978 0.287472 0.37322 0.282293 0.380052 0.27037 0.372228 0.275614 0.366667 0.288591 0.346749 0.291029 0.342845 0.296048 0.346952 0.295082 0.350069 0.244893 0.349436 0.240877 0.344651 0.243591 0.340979 0.248334 0.346946 0.281496 0.342775 0.286289 0.338766 0.291029 0.342845 0.288591 0.346749 0.248334 0.346946 0.243591 0.340979 0.2479889 0.340864 0.251575 0.345623 0.275614 0.366667 0.26594 0.357989 0.270053 0.353968 0.279846 0.362004 0.287472 0.37322 0.275614 0.366667 0.279846 0.362004 0.290812 0.367725 0.254322 0.342721 0.251575 0.345623 0.2479889 0.340864 0.251288 0.340475 0.277994 0.345396 0.286237 0.351144 0.283743 0.357308 0.273717 0.350436 0.257552 0.350716 0.251575 0.345623 0.254322 0.342721 0.260422 0.346793 0.261083 0.361747 0.255583 0.365154 0.249226 0.355856 0.253479 0.353414 0.277994 0.345396 0.281496 0.342775 0.288591 0.346749 0.286237 0.351144 0.27231 0.340476 0.276683 0.338004 0.281496 0.342775 0.277994 0.345396 0.26594 0.357989 0.275614 0.366667 0.27037 0.372228 0.261083 0.361747 0.26594 0.357989 0.261083 0.361747 0.253479 0.353414 0.257552 0.350716 0.279846 0.362004 0.270053 0.353968 0.273717 0.350436 0.283743 0.357308 0.273717 0.350436 0.270053 0.353968 0.260422 0.346793 0.267986 0.346013 0.253479 0.353414 0.249226 0.355856 0.244893 0.349436 0.248334 0.346946 0.257552 0.350716 0.253479 0.353414 0.248334 0.346946 0.251575 0.345623 0.293923 0.354959 0.292992 0.361978 0.283743 0.357308 0.286237 0.351144 0.276683 0.338004 0.282841 0.334835 0.286289 0.338766 0.281496 0.342775 0.270053 0.353968 0.26594 0.357989 0.257552 0.350716 0.260422 0.346793 0.335237 0.347658 0.328885 0.360276 0.324547 0.355394 0.330653 0.345551 0.328885 0.360276 0.319831 0.368131 0.316908 0.361517 0.324547 0.355394 0.319831 0.368131 0.328885 0.360276 0.334251 0.366807 0.322325 0.376244 0.369262 0.356392 0.367009 0.379498 0.355686 0.376435 0.357921 0.35504 0.335237 0.347658 0.340224 0.350472 0.334251 0.366807 0.328885 0.360276 0.334251 0.366807 0.340224 0.350472 0.34687 0.352618 0.341171 0.375235 0.322325 0.376244 0.334251 0.366807 0.341171 0.375235 0.323205 0.38592 0.34687 0.352618 0.357921 0.35504 0.355686 0.376435 0.341171 0.375235 0.165567 0.462006 0.154004 0.449622 0.162688 0.441818 0.173951 0.455326 0.2043409 0.411089 0.211205 0.417176 0.209079 0.430384 0.199358 0.423977 0.211205 0.417176 0.2199929 0.421148 0.220631 0.433807 0.209079 0.430384 0.207592 0.444466 0.1947579 0.441154 0.199358 0.423977 0.209079 0.430384 0.191323 0.463182 0.183073 0.447989 0.1947579 0.441154 0.199315 0.459675 0.199315 0.459675 0.1947579 0.441154 0.207592 0.444466 0.209159 0.458994 0.154004 0.449622 0.142861 0.437791 0.152966 0.428685 0.162688 0.441818 0.218932 0.459797 0.209159 0.458994 0.207592 0.444466 0.220475 0.446636 0.1331059 0.423601 0.142861 0.437791 0.13511 0.447653 0.122236 0.433426 0.13511 0.447653 0.129919 0.457659 0.114978 0.445034 0.122236 0.433426 0.191323 0.463182 0.183555 0.468128 0.173951 0.455326 0.183073 0.447989 0.220475 0.446636 0.207592 0.444466 0.209079 0.430384 0.220631 0.433807 0.183555 0.468128 0.176643 0.473767 0.165567 0.462006 0.173951 0.455326 0.16405 0.419976 0.152966 0.428685 0.144704 0.414939 0.157424 0.406855 0.152966 0.428685 0.142861 0.437791 0.1331059 0.423601 0.144704 0.414939 0.139396 0.40163 0.144704 0.414939 0.1331059 0.423601 0.126496 0.4104 0.1947579 0.441154 0.182685 0.425068 0.191937 0.413546 0.199358 0.423977 0.183073 0.447989 0.172594 0.433295 0.182685 0.425068 0.1947579 0.441154 0.172594 0.433295 0.16405 0.419976 0.17572 0.41073 0.182685 0.425068 0.15975 0.469115 0.1473219 0.457629 0.154004 0.449622 0.165567 0.462006 0.1473219 0.457629 0.13511 0.447653 0.142861 0.437791 0.154004 0.449622 0.173951 0.455326 0.162688 0.441818 0.172594 0.433295 0.183073 0.447989 0.162688 0.441818 0.152966 0.428685 0.16405 0.419976 0.172594 0.433295 0.234768 0.34664 0.236813 0.348692 0.234382 0.350181 0.232157 0.346687 0.236072 0.345299 0.238949 0.347127 0.236813 0.348692 0.234768 0.34664 0.245313 0.422701 0.252479 0.434491 0.233939 0.435662 0.231298 0.423324 0.2174029 0.387026 0.220786 0.3899 0.220429 0.399112 0.215727 0.395432 0.215727 0.395432 0.220429 0.399112 0.219839 0.410697 0.2132019 0.406821 0.2174029 0.387026 0.215727 0.395432 0.212074 0.391476 0.214521 0.384006 0.215727 0.395432 0.2132019 0.406821 0.2082239 0.401792 0.212074 0.391476 0.228826 0.412838 0.219839 0.410697 0.220429 0.399112 0.22701 0.401666 0.2255859 0.391925 0.22701 0.401666 0.220429 0.399112 0.220786 0.3899 0.230565 0.341343 0.228919 0.344844 0.2262009 0.343978 0.227003 0.340348 0.2199929 0.421148 0.211205 0.417176 0.2132019 0.406821 0.219839 0.410697 0.241959 0.351148 0.244893 0.349436 0.249226 0.355856 0.245337 0.357583 0.211205 0.417176 0.2043409 0.411089 0.2082239 0.401792 0.2132019 0.406821 0.24208 0.383584 0.249387 0.38958 0.243541 0.39857 0.237855 0.390295 0.232157 0.346687 0.235189 0.343107 0.236072 0.345299 0.234768 0.34664 0.237855 0.390295 0.243541 0.39857 0.235376 0.402191 0.231627 0.392342 0.238949 0.347127 0.236072 0.345299 0.235189 0.343107 0.240877 0.344651 0.230565 0.341343 0.235189 0.343107 0.232157 0.346687 0.228919 0.344844 0.243541 0.39857 0.250889 0.40701 0.239864 0.411929 0.235376 0.402191 0.250889 0.40701 0.259758 0.415242 0.245313 0.422701 0.239864 0.411929 0.228826 0.412838 0.239864 0.411929 0.245313 0.422701 0.231298 0.423324 0.219839 0.410697 0.228826 0.412838 0.231298 0.423324 0.2199929 0.421148 0.22701 0.401666 0.235376 0.402191 0.239864 0.411929 0.228826 0.412838 0.22701 0.401666 0.2255859 0.391925 0.231627 0.392342 0.235376 0.402191 0.223999 0.343523 0.2239879 0.340016 0.227003 0.340348 0.2262009 0.343978 0.23938 0.352563 0.241959 0.351148 0.245337 0.357583 0.24184 0.358851 0.24184 0.358851 0.245337 0.357583 0.249372 0.366096 0.243925 0.366085 0.255583 0.365154 0.249372 0.366096 0.245337 0.357583 0.249226 0.355856 0.243925 0.366085 0.249372 0.366096 0.251646 0.37734 0.244226 0.374531 0.24208 0.383584 0.244226 0.374531 0.251646 0.37734 0.249387 0.38958 0.262627 0.379598 0.251646 0.37734 0.249372 0.366096 0.255583 0.365154 0.250889 0.40701 0.243541 0.39857 0.249387 0.38958 0.258973 0.395694 0.262627 0.379598 0.258973 0.395694 0.249387 0.38958 0.251646 0.37734 0.27037 0.372228 0.262627 0.379598 0.255583 0.365154 0.261083 0.361747 0.282293 0.380052 0.276299 0.389168 0.262627 0.379598 0.27037 0.372228 0.262627 0.379598 0.276299 0.389168 0.270141 0.402662 0.258973 0.395694 0.250889 0.40701 0.258973 0.395694 0.270141 0.402662 0.259758 0.415242 0.241959 0.351148 0.23938 0.352563 0.236813 0.348692 0.238949 0.347127 0.244893 0.349436 0.241959 0.351148 0.238949 0.347127 0.240877 0.344651 0.32869 0.457842 0.335798 0.467301 0.308453 0.487902 0.304021 0.47797 0.335798 0.467301 0.34268 0.478429 0.31222 0.502812 0.308453 0.487902 0.357365 0.438965 0.363883 0.451449 0.34268 0.478429 0.335798 0.467301 0.371752 0.40883 0.380047 0.423919 0.363883 0.451449 0.357365 0.438965 0.362039 0.403274 0.371752 0.40883 0.357365 0.438965 0.349892 0.429883 0.349892 0.429883 0.357365 0.438965 0.335798 0.467301 0.32869 0.457842 0.362039 0.403274 0.367009 0.379498 0.379936 0.385236 0.371752 0.40883 0.367009 0.379498 0.362039 0.403274 0.351864 0.398915 0.355686 0.376435 0.355686 0.376435 0.351864 0.398915 0.338474 0.397099 0.341171 0.375235 0.298549 0.470479 0.320164 0.451004 0.32869 0.457842 0.304021 0.47797 0.351864 0.398915 0.340639 0.424288 0.32699 0.420969 0.338474 0.397099 0.32869 0.457842 0.320164 0.451004 0.340639 0.424288 0.349892 0.429883 0.349892 0.429883 0.340639 0.424288 0.351864 0.398915 0.362039 0.403274 0.32699 0.420969 0.340639 0.424288 0.320164 0.451004 0.308927 0.444482 0.323205 0.38592 0.341171 0.375235 0.338474 0.397099 0.321218 0.397325 0.32699 0.420969 0.313656 0.416234 0.321218 0.397325 0.338474 0.397099 0.298549 0.470479 0.304021 0.47797 0.278699 0.489425 0.278014 0.481893 0.32699 0.420969 0.308927 0.444482 0.296224 0.438355 0.313656 0.416234 0.308927 0.444482 0.290377 0.463952 0.277363 0.456431 0.296224 0.438355 0.298549 0.470479 0.290377 0.463952 0.308927 0.444482 0.320164 0.451004 0.308453 0.487902 0.276064 0.498082 0.278699 0.489425 0.304021 0.47797 0.952705 0.704584 0.954601 0.710038 0.940012 0.718805 0.937861 0.713444 0.220095 0.815385 0.219631 0.809503 0.234845 0.802998 0.235088 0.809979 0.219969 0.844426 0.233152 0.844652 0.230585 0.855607 0.217718 0.853947 0.959048 0.719495 0.944036 0.728426 0.942089 0.724551 0.957091 0.714847 0.951222 0.738926 0.948535 0.735037 0.962134 0.724762 0.96379 0.727789 0.94843 0.695505 0.949945 0.699349 0.9357 0.708154 0.934036 0.704276 0.942298 0.679107 0.926029 0.685889 0.924367 0.682645 0.940431 0.675678 0.932733 0.70106 0.931446 0.697613 0.945513 0.688406 0.94676 0.692375 0.934036 0.704276 0.932733 0.70106 0.94676 0.692375 0.94843 0.695505 0.22005 0.834587 0.2334679 0.833775 0.233152 0.844652 0.219969 0.844426 0.219873 0.822045 0.220095 0.815385 0.235088 0.809979 0.2341099 0.818778 0.961029 0.72213 0.946348 0.731665 0.944036 0.728426 0.959048 0.719495 0.921821 0.674825 0.937363 0.669199 0.93879 0.672902 0.922877 0.679237 0.217718 0.853947 0.230585 0.855607 0.228245 0.865696 0.2162809 0.863301 0.220471 0.827805 0.219873 0.822045 0.2341099 0.818778 0.233036 0.825864 0.220471 0.827805 0.233036 0.825864 0.2334679 0.833775 0.22005 0.834587 0.213608 0.871886 0.2162809 0.863301 0.228245 0.865696 0.227099 0.874532 0.945513 0.688406 0.931446 0.697613 0.929633 0.693734 0.944318 0.685015 0.943155 0.681948 0.944318 0.685015 0.929633 0.693734 0.927665 0.689281 0.942298 0.679107 0.943155 0.681948 0.927665 0.689281 0.926029 0.685889 0.213608 0.871886 0.227099 0.874532 0.22658 0.881346 0.212925 0.878024 0.954601 0.710038 0.957091 0.714847 0.942089 0.724551 0.940012 0.718805 0.961029 0.72213 0.962134 0.724762 0.948535 0.735037 0.946348 0.731665 0.949945 0.699349 0.952705 0.704584 0.937861 0.713444 0.9357 0.708154 0.212925 0.878024 0.22658 0.881346 0.224641 0.887289 0.210653 0.883048 0.940431 0.675678 0.924367 0.682645 0.922877 0.679237 0.93879 0.672902 0.325286 0.343637 0.327419 0.334465 0.332453 0.335229 0.330653 0.345551 0.315325 0.346671 0.319732 0.340902 0.325286 0.343637 0.320061 0.35081 0.327821 0.32408 0.332029 0.32408 0.332453 0.335229 0.327419 0.334465 0.327419 0.334465 0.323243 0.33323 0.323819 0.32408 0.327821 0.32408 0.325286 0.343637 0.319732 0.340902 0.323243 0.33323 0.327419 0.334465 0.310433 0.349941 0.315325 0.346671 0.320061 0.35081 0.313461 0.355097 0.31444 0.336942 0.319732 0.340902 0.315325 0.346671 0.311364 0.34008 0.325286 0.343637 0.330653 0.345551 0.324547 0.355394 0.320061 0.35081 0.307314 0.343782 0.311364 0.34008 0.315325 0.346671 0.310433 0.349941 0.313461 0.355097 0.320061 0.35081 0.324547 0.355394 0.316908 0.361517 0.319732 0.340902 0.31444 0.336942 0.317154 0.331591 0.323243 0.33323 0.323243 0.33323 0.317154 0.331591 0.32007 0.32408 0.323819 0.32408 0.296048 0.346952 0.296303 0.342909 0.299829 0.344069 0.299824 0.347709 0.299181 0.335445 0.299206 0.332925 0.299748 0.332933 0.299896 0.335342 0.313017 0.335852 0.31444 0.336942 0.311364 0.34008 0.309729 0.338429 0.307314 0.343782 0.305724 0.341103 0.309729 0.338429 0.311364 0.34008 0.307314 0.343782 0.30363 0.346546 0.302686 0.342502 0.305724 0.341103 0.299896 0.335342 0.299748 0.332933 0.300199 0.332966 0.300633 0.334876 0.297192 0.339339 0.298043 0.337296 0.299535 0.336981 0.299448 0.339002 0.299824 0.347709 0.299829 0.344069 0.302686 0.342502 0.30363 0.346546 0.304493 0.334569 0.306035 0.33547 0.30307 0.336628 0.30196 0.335432 0.30196 0.335432 0.30307 0.336628 0.301189 0.337761 0.300952 0.336136 0.298043 0.337296 0.299181 0.335445 0.299896 0.335342 0.299535 0.336981 0.30687 0.332604 0.308805 0.333027 0.306035 0.33547 0.304493 0.334569 0.299535 0.336981 0.299896 0.335342 0.300633 0.334876 0.300952 0.336136 0.296303 0.342909 0.296798 0.341231 0.299478 0.34153 0.299829 0.344069 0.296798 0.341231 0.297192 0.339339 0.299448 0.339002 0.299478 0.34153 0.308805 0.333027 0.310917 0.334312 0.307676 0.33707 0.306035 0.33547 0.310917 0.334312 0.313017 0.335852 0.309729 0.338429 0.307676 0.33707 0.305724 0.341103 0.30469 0.338534 0.307676 0.33707 0.309729 0.338429 0.30469 0.338534 0.30307 0.336628 0.306035 0.33547 0.307676 0.33707 0.30307 0.336628 0.30469 0.338534 0.301904 0.339868 0.301189 0.337761 0.299448 0.339002 0.299535 0.336981 0.300952 0.336136 0.301189 0.337761 0.30469 0.338534 0.305724 0.341103 0.302686 0.342502 0.301904 0.339868 0.299829 0.344069 0.299478 0.34153 0.301904 0.339868 0.302686 0.342502 0.299478 0.34153 0.299448 0.339002 0.301189 0.337761 0.301904 0.339868 0.294117 0.338794 0.295176 0.336785 0.298043 0.337296 0.297192 0.339339 0.291029 0.342845 0.286289 0.338766 0.288173 0.337437 0.292421 0.34079 0.302672 0.333644 0.304493 0.334569 0.30196 0.335432 0.301391 0.334242 0.301391 0.334242 0.30196 0.335432 0.300952 0.336136 0.300633 0.334876 0.296048 0.346952 0.291029 0.342845 0.292421 0.34079 0.296303 0.342909 0.289819 0.332039 0.292236 0.331052 0.294158 0.333257 0.29181 0.334874 0.295176 0.336785 0.2966 0.335123 0.299181 0.335445 0.298043 0.337296 0.290108 0.336184 0.29181 0.334874 0.295176 0.336785 0.294117 0.338794 0.288173 0.337437 0.288814 0.337016 0.293338 0.340063 0.292421 0.34079 0.293338 0.340063 0.294117 0.338794 0.297192 0.339339 0.296798 0.341231 0.292421 0.34079 0.293338 0.340063 0.296798 0.341231 0.296303 0.342909 0.29181 0.334874 0.294158 0.333257 0.2966 0.335123 0.295176 0.336785 0.286109 0.333557 0.287757 0.332855 0.290108 0.336184 0.288814 0.337016 0.285249 0.334113 0.286109 0.333557 0.288814 0.337016 0.288173 0.337437 0.287757 0.332855 0.289819 0.332039 0.29181 0.334874 0.290108 0.336184 0.288814 0.337016 0.290108 0.336184 0.294117 0.338794 0.293338 0.340063 0.2966 0.335123 0.294158 0.333257 0.296962 0.33124 0.298314 0.332251 0.299181 0.335445 0.2966 0.335123 0.298314 0.332251 0.299206 0.332925 0.294158 0.333257 0.292236 0.331052 0.295799 0.329325 0.296962 0.33124 0.286289 0.338766 0.282841 0.334835 0.285249 0.334113 0.288173 0.337437 0.265057 0.333184 0.264605 0.332312 0.265292 0.331343 0.265719 0.332201 0.267986 0.346013 0.260422 0.346793 0.260071 0.343667 0.265803 0.342936 0.264605 0.332312 0.264464 0.33123 0.265522 0.330585 0.265292 0.331343 0.256372 0.330842 0.258952 0.329807 0.259063 0.331537 0.256892 0.33209 0.261625 0.333436 0.262113 0.336285 0.258701 0.336887 0.258897 0.333696 0.27231 0.340476 0.267986 0.346013 0.265803 0.342936 0.269383 0.338669 0.261426 0.330627 0.259063 0.331537 0.258952 0.329807 0.260923 0.328477 0.25656 0.341934 0.255247 0.339142 0.258756 0.34 0.260071 0.343667 0.260071 0.343667 0.258756 0.34 0.263221 0.340394 0.265803 0.342936 0.263221 0.340394 0.266121 0.337675 0.269383 0.338669 0.265803 0.342936 0.266712 0.334323 0.268622 0.334474 0.269383 0.338669 0.266121 0.337675 0.261426 0.330627 0.261625 0.333436 0.258897 0.333696 0.259063 0.331537 0.267912 0.332636 0.268622 0.334474 0.266712 0.334323 0.266879 0.332894 0.267878 0.330524 0.267301 0.330093 0.268129 0.329709 0.268973 0.330415 0.263441 0.331128 0.263707 0.329353 0.264609 0.330411 0.264464 0.33123 0.263707 0.329353 0.265569 0.328813 0.266085 0.3295 0.264609 0.330411 0.263255 0.32848 0.265612 0.327443 0.265569 0.328813 0.263707 0.329353 0.267301 0.330093 0.26677 0.329943 0.267335 0.329405 0.268129 0.329709 0.255042 0.336538 0.255247 0.339142 0.252755 0.3379 0.253004 0.334979 0.26677 0.329943 0.266191 0.329985 0.266085 0.3295 0.267335 0.329405 0.25656 0.341934 0.260071 0.343667 0.260422 0.346793 0.254322 0.342721 0.255247 0.339142 0.255042 0.336538 0.258701 0.336887 0.258756 0.34 0.256372 0.330842 0.255976 0.329402 0.258749 0.32816 0.258952 0.329807 0.268129 0.329709 0.267335 0.329405 0.267908 0.328933 0.269208 0.329547 0.267335 0.329405 0.266085 0.3295 0.265569 0.328813 0.267908 0.328933 0.271294 0.332927 0.269672 0.332748 0.268973 0.330415 0.270645 0.330258 0.269208 0.329547 0.270645 0.330258 0.268973 0.330415 0.268129 0.329709 0.269208 0.329547 0.267908 0.328933 0.268418 0.327556 0.270487 0.328353 0.2743 0.329349 0.273713 0.332756 0.271294 0.332927 0.270645 0.330258 0.2743 0.329349 0.270645 0.330258 0.269208 0.329547 0.270487 0.328353 0.267908 0.328933 0.265569 0.328813 0.265612 0.327443 0.268418 0.327556 0.256892 0.33209 0.255758 0.333784 0.254251 0.332658 0.256372 0.330842 0.265539 0.330339 0.265522 0.330585 0.264464 0.33123 0.264609 0.330411 0.269383 0.338669 0.268622 0.334474 0.269672 0.332748 0.271294 0.332927 0.255758 0.333784 0.255042 0.336538 0.253004 0.334979 0.254251 0.332658 0.261426 0.330627 0.263255 0.32848 0.263707 0.329353 0.263441 0.331128 0.262113 0.336285 0.263221 0.340394 0.258756 0.34 0.258701 0.336887 0.255042 0.336538 0.255758 0.333784 0.258897 0.333696 0.258701 0.336887 0.266712 0.334323 0.265057 0.333184 0.265719 0.332201 0.266879 0.332894 0.255758 0.333784 0.256892 0.33209 0.259063 0.331537 0.258897 0.333696 0.268973 0.330415 0.269672 0.332748 0.26838 0.33171 0.267878 0.330524 0.252755 0.3379 0.255247 0.339142 0.25656 0.341934 0.254322 0.342721 0.269672 0.332748 0.268622 0.334474 0.267912 0.332636 0.26838 0.33171 0.273713 0.332756 0.27231 0.340476 0.269383 0.338669 0.271294 0.332927 0.262113 0.336285 0.261625 0.333436 0.263663 0.332897 0.264143 0.334326 0.261625 0.333436 0.261426 0.330627 0.263441 0.331128 0.263663 0.332897 0.266121 0.337675 0.264143 0.334326 0.265057 0.333184 0.266712 0.334323 0.264143 0.334326 0.263663 0.332897 0.264605 0.332312 0.265057 0.333184 0.266121 0.337675 0.263221 0.340394 0.262113 0.336285 0.264143 0.334326 0.263663 0.332897 0.263441 0.331128 0.264464 0.33123 0.264605 0.332312 0.266191 0.329985 0.265539 0.330339 0.264609 0.330411 0.266085 0.3295 0.663265 0.766802 0.665563 0.777679 0.659229 0.776236 0.656491 0.765582 0.693321 0.791939 0.691718 0.776581 0.696514 0.769556 0.707781 0.778745 0.67285 0.779362 0.671885 0.76704 0.681659 0.77096 0.68258 0.785037 0.671885 0.76704 0.671368 0.758825 0.684272 0.762392 0.681659 0.77096 0.647555 0.763334 0.648263 0.769583 0.642738 0.770009 0.642738 0.763556 0.648263 0.769583 0.649203 0.776656 0.642738 0.7769 0.642738 0.770009 0.652744 0.75624 0.656491 0.765582 0.652323 0.767403 0.64968 0.759952 0.656491 0.765582 0.659229 0.776236 0.654239 0.776177 0.652323 0.767403 0.671158 0.750331 0.671168 0.753913 0.66023 0.752324 0.660213 0.748268 0.649203 0.776656 0.648263 0.769583 0.652323 0.767403 0.654239 0.776177 0.642738 0.736947 0.650131 0.736786 0.650698 0.743142 0.642738 0.743436 0.648263 0.769583 0.647555 0.763334 0.64968 0.759952 0.652323 0.767403 0.660668 0.757941 0.663265 0.766802 0.656491 0.765582 0.652744 0.75624 0.642738 0.751409 0.642738 0.74786 0.651616 0.747817 0.652127 0.751344 0.642738 0.74786 0.642738 0.743436 0.650698 0.743142 0.651616 0.747817 0.650698 0.743142 0.65965 0.744092 0.660213 0.748268 0.651616 0.747817 0.671168 0.753913 0.671368 0.758825 0.660668 0.757941 0.66023 0.752324 0.723477 0.796938 0.729335 0.808125 0.713782 0.824696 0.708952 0.814817 0.660213 0.748268 0.65965 0.744092 0.671095 0.745588 0.671158 0.750331 0.652744 0.75624 0.652127 0.751344 0.66023 0.752324 0.660668 0.757941 0.716932 0.832601 0.713782 0.824696 0.729335 0.808125 0.733755 0.818632 0.652127 0.751344 0.651616 0.747817 0.660213 0.748268 0.66023 0.752324 0.659057 0.738188 0.670213 0.73969 0.671095 0.745588 0.65965 0.744092 0.688098 0.753142 0.685925 0.757813 0.671168 0.753913 0.671158 0.750331 0.642738 0.755678 0.652744 0.75624 0.64968 0.759952 0.642738 0.759174 0.685925 0.757813 0.684272 0.762392 0.671368 0.758825 0.671168 0.753913 0.642738 0.763556 0.642738 0.759174 0.64968 0.759952 0.647555 0.763334 0.699413 0.763192 0.696514 0.769556 0.684272 0.762392 0.685925 0.757813 0.650698 0.743142 0.650131 0.736786 0.659057 0.738188 0.65965 0.744092 0.642738 0.755678 0.642738 0.751409 0.652127 0.751344 0.652744 0.75624 0.693321 0.791939 0.707781 0.778745 0.717049 0.78847 0.702734 0.803046 0.717049 0.78847 0.723477 0.796938 0.708952 0.814817 0.702734 0.803046 0.696514 0.769556 0.691718 0.776581 0.681659 0.77096 0.684272 0.762392 0.691718 0.776581 0.693321 0.791939 0.68258 0.785037 0.681659 0.77096 0.671368 0.758825 0.671885 0.76704 0.663265 0.766802 0.660668 0.757941 0.671885 0.76704 0.67285 0.779362 0.665563 0.777679 0.663265 0.766802 0.733239 0.858064 0.723412 0.863213 0.72276 0.856657 0.733347 0.851129 0.736554 0.829793 0.736197 0.840797 0.721755 0.849274 0.718946 0.840681 0.733347 0.851129 0.72276 0.856657 0.721755 0.849274 0.736197 0.840797 0.736554 0.829793 0.718946 0.840681 0.716932 0.832601 0.733755 0.818632 0.733239 0.858064 0.732864 0.866091 0.723068 0.870446 0.723412 0.863213 0.722494 0.878246 0.723068 0.870446 0.732864 0.866091 0.730765 0.879187 0.94549 0.350399 0.939215 0.351661 0.939202 0.34606 0.943319 0.34523 0.929288 0.339404 0.928492 0.335302 0.929198 0.335288 0.929939 0.339122 0.9329 0.320158 0.939157 0.318902 0.939182 0.324659 0.935114 0.32547 0.933281 0.341205 0.931491 0.338481 0.933843 0.337521 0.935026 0.339474 0.950801 0.346831 0.94549 0.350399 0.943319 0.34523 0.946798 0.342884 0.927595 0.32371 0.9329 0.320158 0.935114 0.32547 0.931653 0.327768 0.943319 0.34523 0.939202 0.34606 0.939197 0.345348 0.943045 0.344576 0.935997 0.343015 0.933281 0.341205 0.935026 0.339474 0.936978 0.340661 0.956365 0.352368 0.948509 0.357642 0.94549 0.350399 0.950801 0.346831 0.922016 0.318145 0.929872 0.312878 0.9329 0.320158 0.927595 0.32371 0.946798 0.342884 0.943319 0.34523 0.943045 0.344576 0.946299 0.342388 0.939197 0.343667 0.935997 0.343015 0.936978 0.340661 0.939197 0.341204 0.961886 0.357867 0.951504 0.364834 0.948509 0.357642 0.956365 0.352368 0.949103 0.339386 0.946798 0.342884 0.946299 0.342388 0.948456 0.339122 0.942398 0.343015 0.939197 0.343667 0.939197 0.341204 0.941417 0.340661 0.935026 0.339474 0.933843 0.337521 0.935753 0.336855 0.93634 0.338181 0.949892 0.335283 0.949103 0.339386 0.948456 0.339122 0.949196 0.335288 0.945114 0.341205 0.942398 0.343015 0.941417 0.340661 0.943368 0.339474 0.948509 0.357642 0.93923 0.359505 0.939215 0.351661 0.94549 0.350399 0.946903 0.338481 0.945114 0.341205 0.943368 0.339474 0.944551 0.337521 0.948412 0.331471 0.949196 0.335288 0.947535 0.33529 0.946875 0.33211 0.909607 0.347567 0.907148 0.335311 0.914943 0.335297 0.916801 0.344571 0.96876 0.322939 0.971224 0.335193 0.96343 0.335208 0.961564 0.325935 0.946237 0.328248 0.948412 0.331471 0.946875 0.33211 0.945073 0.329414 0.936978 0.340661 0.935026 0.339474 0.93634 0.338181 0.937649 0.338808 0.916801 0.344571 0.914943 0.335297 0.922808 0.335289 0.924058 0.341558 0.961564 0.325935 0.96343 0.335208 0.955566 0.33523 0.954297 0.328967 0.943001 0.326104 0.946237 0.328248 0.945073 0.329414 0.942369 0.327633 0.944547 0.333088 0.945092 0.335303 0.943163 0.335314 0.942787 0.3337 0.96881 0.347458 0.961886 0.357867 0.956365 0.352368 0.961605 0.34449 0.924058 0.341558 0.922808 0.335289 0.928492 0.335302 0.929288 0.339404 0.909568 0.323046 0.916494 0.312642 0.922016 0.318145 0.916775 0.326017 0.949892 0.335283 0.949048 0.331199 0.954297 0.328967 0.955566 0.33523 0.939197 0.325351 0.943001 0.326104 0.942369 0.327633 0.939197 0.326992 0.931491 0.338481 0.930859 0.33529 0.933303 0.335303 0.933843 0.337521 0.943362 0.331139 0.944547 0.333088 0.942787 0.3337 0.942148 0.332368 0.961605 0.34449 0.956365 0.352368 0.950801 0.346831 0.954337 0.341503 0.927615 0.346873 0.924058 0.341558 0.929288 0.339404 0.931599 0.342898 0.916775 0.326017 0.922016 0.318145 0.927595 0.32371 0.924052 0.329022 0.950735 0.323667 0.954297 0.328967 0.949048 0.331199 0.946717 0.327753 0.947535 0.33529 0.946903 0.338481 0.944551 0.337521 0.945092 0.335303 0.935393 0.326104 0.939197 0.325351 0.939197 0.326992 0.936025 0.327633 0.941412 0.329958 0.943362 0.331139 0.942148 0.332368 0.940774 0.331747 0.961796 0.312559 0.96876 0.322939 0.961564 0.325935 0.956292 0.318083 0.954337 0.341503 0.950801 0.346831 0.946798 0.342884 0.949103 0.339386 0.92207 0.352432 0.916801 0.344571 0.924058 0.341558 0.927615 0.346873 0.924052 0.329022 0.927595 0.32371 0.931653 0.327768 0.929329 0.331217 0.956292 0.318083 0.961564 0.325935 0.954297 0.328967 0.950735 0.323667 0.932158 0.328248 0.935393 0.326104 0.936025 0.327633 0.933321 0.329414 0.939197 0.329416 0.941412 0.329958 0.940774 0.331747 0.939205 0.331442 0.95139 0.305636 0.961796 0.312559 0.956292 0.318083 0.94842 0.312845 0.949103 0.339386 0.949892 0.335283 0.955566 0.33523 0.954337 0.341503 0.916571 0.357951 0.909607 0.347567 0.916801 0.344571 0.92207 0.352432 0.946299 0.342388 0.943045 0.344576 0.942398 0.343015 0.945114 0.341205 0.929982 0.331471 0.932158 0.328248 0.933321 0.329414 0.93152 0.33211 0.936983 0.329958 0.939197 0.329416 0.939205 0.331442 0.93764 0.331829 0.939197 0.341204 0.936978 0.340661 0.937649 0.338808 0.939202 0.33919 0.96343 0.335208 0.961605 0.34449 0.954337 0.341503 0.955566 0.33523 0.914943 0.335297 0.916775 0.326017 0.924052 0.329022 0.922808 0.335289 0.929198 0.335288 0.929982 0.331471 0.93152 0.33211 0.930859 0.33529 0.935033 0.331139 0.936983 0.329958 0.93764 0.331829 0.936341 0.33245 0.971224 0.335193 0.96881 0.347458 0.961605 0.34449 0.96343 0.335208 0.939202 0.34606 0.935083 0.345236 0.935349 0.344576 0.939197 0.345348 0.907148 0.335311 0.909568 0.323046 0.916775 0.326017 0.914943 0.335297 0.929939 0.339122 0.929198 0.335288 0.930859 0.33529 0.931491 0.338481 0.933848 0.333088 0.935033 0.331139 0.936341 0.33245 0.935744 0.333781 0.933303 0.335303 0.933848 0.333088 0.935744 0.333781 0.935416 0.335315 0.935349 0.344576 0.932096 0.342388 0.933281 0.341205 0.935997 0.343015 0.933843 0.337521 0.933303 0.335303 0.935416 0.335315 0.935753 0.336855 0.939197 0.345348 0.935349 0.344576 0.935997 0.343015 0.939197 0.343667 0.942787 0.3337 0.943163 0.335314 0.94138 0.335313 0.940921 0.333488 0.943045 0.344576 0.939197 0.345348 0.939197 0.343667 0.942398 0.343015 0.939197 0.326992 0.942369 0.327633 0.941412 0.329958 0.939197 0.329416 0.935416 0.335315 0.935744 0.333781 0.937494 0.333644 0.937183 0.335322 0.926978 0.364879 0.916571 0.357951 0.92207 0.352432 0.929947 0.357676 0.93764 0.331829 0.939205 0.331442 0.93921 0.3332 0.937494 0.333644 0.929947 0.357676 0.92207 0.352432 0.927615 0.346873 0.932938 0.350421 0.94842 0.312845 0.956292 0.318083 0.950735 0.323667 0.945418 0.320136 0.948456 0.339122 0.946299 0.342388 0.945114 0.341205 0.946903 0.338481 0.941417 0.340661 0.939197 0.341204 0.939202 0.33919 0.94077 0.338882 0.939205 0.331442 0.940774 0.331747 0.940921 0.333488 0.93921 0.3332 0.932938 0.350421 0.927615 0.346873 0.931599 0.342898 0.935083 0.345236 0.945418 0.320136 0.950735 0.323667 0.946717 0.327753 0.943253 0.325463 0.936341 0.33245 0.93764 0.331829 0.937494 0.333644 0.935744 0.333781 0.939215 0.351661 0.932938 0.350421 0.935083 0.345236 0.939202 0.34606 0.949196 0.335288 0.948456 0.339122 0.946903 0.338481 0.947535 0.33529 0.939157 0.318902 0.945418 0.320136 0.943253 0.325463 0.939182 0.324659 0.949048 0.331199 0.949892 0.335283 0.949196 0.335288 0.948412 0.331471 0.943368 0.339474 0.941417 0.340661 0.94077 0.338882 0.942149 0.338262 0.942148 0.332368 0.942787 0.3337 0.940921 0.333488 0.940774 0.331747 0.93923 0.359505 0.929947 0.357676 0.932938 0.350421 0.939215 0.351661 0.929329 0.331217 0.931653 0.327768 0.932158 0.328248 0.929982 0.331471 0.939141 0.311017 0.94842 0.312845 0.945418 0.320136 0.939157 0.318902 0.946717 0.327753 0.949048 0.331199 0.948412 0.331471 0.946237 0.328248 0.945092 0.335303 0.944551 0.337521 0.942783 0.336928 0.943163 0.335314 0.939282 0.335317 0.93921 0.3332 0.940921 0.333488 0.94138 0.335313 0.939245 0.367295 0.926978 0.364879 0.929947 0.357676 0.93923 0.359505 0.939127 0.30322 0.95139 0.305636 0.94842 0.312845 0.939141 0.311017 0.943253 0.325463 0.946717 0.327753 0.946237 0.328248 0.943001 0.326104 0.946875 0.33211 0.947535 0.33529 0.945092 0.335303 0.944547 0.333088 0.939282 0.335317 0.937183 0.335322 0.937494 0.333644 0.93921 0.3332 0.939182 0.324659 0.943253 0.325463 0.943001 0.326104 0.939197 0.325351 0.945073 0.329414 0.946875 0.33211 0.944547 0.333088 0.943362 0.331139 0.94077 0.338882 0.939202 0.33919 0.939195 0.337436 0.940892 0.337129 0.932096 0.342388 0.929939 0.339122 0.931491 0.338481 0.933281 0.341205 0.935114 0.32547 0.939182 0.324659 0.939197 0.325351 0.935393 0.326104 0.942369 0.327633 0.945073 0.329414 0.943362 0.331139 0.941412 0.329958 0.916494 0.312642 0.926875 0.305681 0.929872 0.312878 0.922016 0.318145 0.939202 0.33919 0.937649 0.338808 0.937552 0.337024 0.939195 0.337436 0.931653 0.327768 0.935114 0.32547 0.935393 0.326104 0.932158 0.328248 0.944551 0.337521 0.943368 0.339474 0.942149 0.338262 0.942783 0.336928 0.942149 0.338262 0.94077 0.338882 0.940892 0.337129 0.942783 0.336928 0.935416 0.335315 0.937183 0.335322 0.937552 0.337024 0.935753 0.336855 0.936025 0.327633 0.939197 0.326992 0.939197 0.329416 0.936983 0.329958 0.933321 0.329414 0.936025 0.327633 0.936983 0.329958 0.935033 0.331139 0.943163 0.335314 0.942783 0.336928 0.940892 0.337129 0.94138 0.335313 0.922808 0.335289 0.924052 0.329022 0.929329 0.331217 0.928492 0.335302 0.928492 0.335302 0.929329 0.331217 0.929982 0.331471 0.929198 0.335288 0.93152 0.33211 0.933321 0.329414 0.935033 0.331139 0.933848 0.333088 0.93634 0.338181 0.935753 0.336855 0.937552 0.337024 0.937649 0.338808 0.951504 0.364834 0.939245 0.367295 0.93923 0.359505 0.948509 0.357642 0.926875 0.305681 0.939127 0.30322 0.939141 0.311017 0.929872 0.312878 0.931599 0.342898 0.929288 0.339404 0.929939 0.339122 0.932096 0.342388 0.930859 0.33529 0.93152 0.33211 0.933848 0.333088 0.933303 0.335303 0.939282 0.335317 0.939195 0.337436 0.937552 0.337024 0.937183 0.335322 0.929872 0.312878 0.939141 0.311017 0.939157 0.318902 0.9329 0.320158 0.935083 0.345236 0.931599 0.342898 0.932096 0.342388 0.935349 0.344576 0.939282 0.335317 0.94138 0.335313 0.940892 0.337129 0.939195 0.337436 0.289635 0.583323 0.288653 0.580969 0.290606 0.579782 0.292352 0.581512 0.297117 0.575613 0.296436 0.575594 0.295651 0.571775 0.29628 0.571527 0.280536 0.575609 0.282466 0.57562 0.282846 0.577235 0.281077 0.577828 0.290606 0.579782 0.289291 0.578487 0.289879 0.577161 0.29179 0.577828 0.286349 0.575623 0.286435 0.577743 0.284738 0.577435 0.28425 0.575619 0.292352 0.581512 0.290606 0.579782 0.29179 0.577828 0.294142 0.578788 0.281082 0.573393 0.282842 0.574005 0.282466 0.57562 0.280536 0.575609 0.282628 0.566407 0.283261 0.567936 0.280555 0.569717 0.279391 0.568551 0.286349 0.575623 0.286421 0.573505 0.288138 0.573949 0.288448 0.575628 0.29628 0.571527 0.295651 0.571775 0.293475 0.568551 0.293955 0.568077 0.254359 0.57551 0.262154 0.575525 0.263979 0.584806 0.256773 0.587775 0.284709 0.573793 0.286421 0.573505 0.286349 0.575623 0.28425 0.575619 0.294142 0.578788 0.29179 0.577828 0.29233 0.575609 0.294775 0.575595 0.293955 0.568077 0.293475 0.568551 0.290239 0.566407 0.290494 0.56578 0.28486 0.579189 0.284738 0.577435 0.286435 0.577743 0.286429 0.579497 0.294775 0.575595 0.29233 0.575609 0.291785 0.573393 0.294114 0.572415 0.290494 0.56578 0.290239 0.566407 0.286433 0.565653 0.286425 0.564969 0.309012 0.598268 0.303514 0.592748 0.308782 0.584888 0.315976 0.587884 0.282846 0.577235 0.284738 0.577435 0.28486 0.579189 0.283481 0.578569 0.294114 0.572415 0.291785 0.573393 0.290599 0.571443 0.292311 0.569717 0.303514 0.592748 0.297968 0.58719 0.301524 0.581874 0.308782 0.584888 0.278753 0.572415 0.281082 0.573393 0.280536 0.575609 0.278092 0.575595 0.282846 0.577235 0.282466 0.57562 0.28425 0.575619 0.284738 0.577435 0.292311 0.569717 0.290599 0.571443 0.288648 0.570262 0.289607 0.567936 0.282353 0.565772 0.282628 0.566407 0.279391 0.568551 0.278889 0.568063 0.286457 0.543537 0.286442 0.551334 0.277163 0.553161 0.274194 0.545953 0.297968 0.58719 0.294009 0.58321 0.296321 0.579716 0.301524 0.581874 0.263979 0.584806 0.271247 0.581819 0.274783 0.587148 0.269219 0.592684 0.282466 0.57562 0.282842 0.574005 0.284709 0.573793 0.28425 0.575619 0.289607 0.567936 0.288648 0.570262 0.286433 0.56972 0.286433 0.567295 0.284213 0.580969 0.28486 0.579189 0.286429 0.579497 0.286433 0.581512 0.284856 0.572051 0.284709 0.573793 0.282842 0.574005 0.283481 0.572672 0.276558 0.57151 0.277215 0.571775 0.27643 0.575594 0.275714 0.575594 0.286433 0.567295 0.286433 0.56972 0.284218 0.570262 0.283261 0.567936 0.286426 0.559219 0.286425 0.564969 0.282353 0.565772 0.280165 0.560453 0.308782 0.584888 0.301524 0.581874 0.302776 0.575606 0.310641 0.575613 0.286425 0.571746 0.286421 0.573505 0.284709 0.573793 0.284856 0.572051 0.283261 0.567936 0.284218 0.570262 0.282267 0.571443 0.280555 0.569717 0.27643 0.575594 0.278092 0.575595 0.278725 0.578788 0.277171 0.579429 0.280165 0.560453 0.282353 0.565772 0.278889 0.568063 0.274848 0.563984 0.315976 0.587884 0.308782 0.584888 0.310641 0.575613 0.318435 0.575628 0.280555 0.569717 0.282267 0.571443 0.281082 0.573393 0.278753 0.572415 0.277171 0.579429 0.278725 0.578788 0.280515 0.581512 0.279329 0.582696 0.279329 0.582696 0.280515 0.581512 0.283232 0.583323 0.282584 0.584885 0.274194 0.545953 0.277163 0.553161 0.269291 0.5584 0.263788 0.552876 0.282584 0.584885 0.283232 0.583323 0.286433 0.583976 0.286433 0.585657 0.271247 0.581819 0.276502 0.579698 0.278807 0.583197 0.274783 0.587148 0.281077 0.577828 0.282846 0.577235 0.283481 0.578569 0.28226 0.579782 0.262154 0.575525 0.270017 0.575546 0.271247 0.581819 0.263979 0.584806 0.28226 0.579782 0.283481 0.578569 0.28486 0.579189 0.284213 0.580969 0.256773 0.587775 0.263979 0.584806 0.269219 0.592684 0.263698 0.598183 0.269219 0.592684 0.274783 0.587148 0.280094 0.590715 0.277075 0.597959 0.290283 0.584885 0.289635 0.583323 0.292352 0.581512 0.293537 0.582696 0.274783 0.587148 0.278807 0.583197 0.282287 0.585543 0.280094 0.590715 0.263698 0.598183 0.269219 0.592684 0.277075 0.597959 0.27408 0.60515 0.286354 0.599821 0.286368 0.591977 0.292646 0.590737 0.295637 0.597992 0.301524 0.581874 0.296321 0.579716 0.297117 0.575613 0.302776 0.575606 0.310641 0.575613 0.302776 0.575606 0.301532 0.569339 0.308809 0.566334 0.308809 0.566334 0.301532 0.569339 0.297989 0.564026 0.303567 0.558462 0.303567 0.558462 0.297989 0.564026 0.292683 0.560474 0.295711 0.553195 0.295711 0.553195 0.292683 0.560474 0.286426 0.559219 0.286442 0.551334 0.286433 0.581512 0.286429 0.579497 0.287982 0.579115 0.288653 0.580969 0.286442 0.551334 0.286426 0.559219 0.280165 0.560453 0.277163 0.553161 0.277163 0.553161 0.280165 0.560453 0.274848 0.563984 0.269291 0.5584 0.318435 0.575628 0.310641 0.575613 0.308809 0.566334 0.316016 0.563363 0.26402 0.566251 0.271286 0.569283 0.270017 0.575546 0.262154 0.575525 0.275714 0.575594 0.27643 0.575594 0.277171 0.579429 0.276502 0.579698 0.288653 0.580969 0.287982 0.579115 0.289291 0.578487 0.290606 0.579782 0.296321 0.579716 0.295695 0.579429 0.296436 0.575594 0.297117 0.575613 0.292646 0.590737 0.290525 0.585549 0.294009 0.58321 0.297968 0.58719 0.286425 0.564969 0.286433 0.565653 0.282628 0.566407 0.282353 0.565772 0.278889 0.568063 0.279391 0.568551 0.277215 0.571775 0.276558 0.57151 0.280094 0.590715 0.282287 0.585543 0.286405 0.586373 0.286368 0.591977 0.263788 0.552876 0.269291 0.5584 0.26402 0.566251 0.256824 0.563255 0.302776 0.575606 0.297117 0.575613 0.29628 0.571527 0.301532 0.569339 0.277075 0.597959 0.280094 0.590715 0.286368 0.591977 0.286354 0.599821 0.29179 0.577828 0.289879 0.577161 0.290216 0.575621 0.29233 0.575609 0.269291 0.5584 0.274848 0.563984 0.271286 0.569283 0.26402 0.566251 0.301532 0.569339 0.29628 0.571527 0.293955 0.568077 0.297989 0.564026 0.29233 0.575609 0.290216 0.575621 0.289888 0.574087 0.291785 0.573393 0.293537 0.582696 0.292352 0.581512 0.294142 0.578788 0.295695 0.579429 0.274848 0.563984 0.278889 0.568063 0.276558 0.57151 0.271286 0.569283 0.291785 0.573393 0.289888 0.574087 0.289291 0.572754 0.290599 0.571443 0.295695 0.579429 0.294142 0.578788 0.294775 0.575595 0.296436 0.575594 0.275714 0.575594 0.270017 0.575546 0.271286 0.569283 0.276558 0.57151 0.316016 0.563363 0.308809 0.566334 0.303567 0.558462 0.309089 0.552959 0.290599 0.571443 0.289291 0.572754 0.287991 0.572133 0.288648 0.570262 0.296436 0.575594 0.294775 0.575595 0.294114 0.572415 0.295651 0.571775 0.288648 0.570262 0.287991 0.572133 0.286425 0.571746 0.286433 0.56972 0.295651 0.571775 0.294114 0.572415 0.292311 0.569717 0.293475 0.568551 0.256824 0.563255 0.26402 0.566251 0.262154 0.575525 0.254359 0.57551 0.276502 0.579698 0.271247 0.581819 0.270017 0.575546 0.275714 0.575594 0.286433 0.56972 0.286425 0.571746 0.284856 0.572051 0.284218 0.570262 0.293475 0.568551 0.292311 0.569717 0.289607 0.567936 0.290239 0.566407 0.284218 0.570262 0.284856 0.572051 0.283481 0.572672 0.282267 0.571443 0.290239 0.566407 0.289607 0.567936 0.286433 0.567295 0.286433 0.565653 0.282267 0.571443 0.283481 0.572672 0.282842 0.574005 0.281082 0.573393 0.286433 0.565653 0.286433 0.567295 0.283261 0.567936 0.282628 0.566407 0.286339 0.607612 0.286354 0.599821 0.295637 0.597992 0.298606 0.605195 0.287982 0.579115 0.288079 0.577331 0.289879 0.577161 0.289291 0.578487 0.279391 0.568551 0.280555 0.569717 0.278753 0.572415 0.277215 0.571775 0.276502 0.579698 0.277171 0.579429 0.279329 0.582696 0.278807 0.583197 0.309089 0.552959 0.303567 0.558462 0.295711 0.553195 0.298709 0.545998 0.286368 0.591977 0.286405 0.586373 0.290525 0.585549 0.292646 0.590737 0.286429 0.579497 0.286435 0.577743 0.288079 0.577331 0.287982 0.579115 0.277215 0.571775 0.278753 0.572415 0.278092 0.575595 0.27643 0.575594 0.278807 0.583197 0.279329 0.582696 0.282584 0.584885 0.282287 0.585543 0.289879 0.577161 0.288079 0.577331 0.288448 0.575628 0.290216 0.575621 0.278092 0.575595 0.280536 0.575609 0.281077 0.577828 0.278725 0.578788 0.27408 0.60515 0.277075 0.597959 0.286354 0.599821 0.286339 0.607612 0.282287 0.585543 0.282584 0.584885 0.286433 0.585657 0.286405 0.586373 0.297989 0.564026 0.293955 0.568077 0.290494 0.56578 0.292683 0.560474 0.295637 0.597992 0.292646 0.590737 0.297968 0.58719 0.303514 0.592748 0.286349 0.575623 0.288448 0.575628 0.288079 0.577331 0.286435 0.577743 0.278725 0.578788 0.281077 0.577828 0.28226 0.579782 0.280515 0.581512 0.286405 0.586373 0.286433 0.585657 0.290283 0.584885 0.290525 0.585549 0.292683 0.560474 0.290494 0.56578 0.286425 0.564969 0.286426 0.559219 0.298606 0.605195 0.295637 0.597992 0.303514 0.592748 0.309012 0.598268 0.290216 0.575621 0.288448 0.575628 0.288138 0.573949 0.289888 0.574087 0.280515 0.581512 0.28226 0.579782 0.284213 0.580969 0.283232 0.583323 0.286433 0.585657 0.286433 0.583976 0.289635 0.583323 0.290283 0.584885 0.290525 0.585549 0.290283 0.584885 0.293537 0.582696 0.294009 0.58321 0.289888 0.574087 0.288138 0.573949 0.287991 0.572133 0.289291 0.572754 0.283232 0.583323 0.284213 0.580969 0.286433 0.581512 0.286433 0.583976 0.294009 0.58321 0.293537 0.582696 0.295695 0.579429 0.296321 0.579716 0.298709 0.545998 0.295711 0.553195 0.286442 0.551334 0.286457 0.543537 0.287991 0.572133 0.288138 0.573949 0.286421 0.573505 0.286425 0.571746 0.286433 0.583976 0.286433 0.581512 0.288653 0.580969 0.289635 0.583323 0 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 0 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 1 0 0.1684 0.4961 0.2419 0.4871 0.2419 0.5144 0.1902 0.519 0.2419 0.5144 0.2419 0.4871 0.3154 0.4961 0.2935 0.519 0.1118 0.5316 0.1684 0.4961 0.1902 0.519 0.1568 0.5475 0.2935 0.519 0.3154 0.4961 0.372 0.5316 0.3269 0.5475 0.7644 0.3783 0.792 0.3962 0.7781 0.4187 0.7602 0.4069 0.6918 0.4187 0.6779 0.3962 0.7055 0.3783 0.7097 0.4069 0.792 0.3962 0.8205 0.401 0.7994 0.4275 0.7781 0.4187 0.6705 0.4275 0.6495 0.401 0.6779 0.3962 0.6918 0.4187 0.735 0.3565 0.7644 0.3783 0.7602 0.4069 0.735 0.3875 0.7097 0.4069 0.7055 0.3783 0.735 0.3565 0.735 0.3875 0.8205 0.401 0.8468 0.4132 0.8101 0.4454 0.7994 0.4275 0.6598 0.4454 0.6231 0.4132 0.6495 0.401 0.6705 0.4275 0.8468 0.4132 0.8641 0.434 0.8214 0.463 0.8101 0.4454 0.6485 0.463 0.6058 0.434 0.6231 0.4132 0.6598 0.4454 0.8641 0.434 0.8711 0.4643 0.8263 0.4807 0.8214 0.463 0.6436 0.4807 0.6485 0.463 0.6058 0.434 0.5988 0.4643 0.8711 0.4643 0.8736 0.502 0.8246 0.5028 0.8263 0.4807 0.6454 0.5028 0.5963 0.502 0.5988 0.4643 0.6436 0.4807 0.09079998 0.5667 0.1118 0.5316 0.1568 0.5475 0.1413 0.5708 0.3269 0.5475 0.372 0.5316 0.3929 0.5667 0.3424 0.5708 0.8682 0.949 0.8738 0.9293 0.854 0.9193 0.8539 0.9401 0.7399 0.9233 0.7209 0.9347 0.7279 0.954 0.7415 0.9441 0.8809 0.9546 0.8867 0.9355 0.8738 0.9293 0.8682 0.949 0.8902 0.9605 0.8982 0.9419 0.8867 0.9355 0.8809 0.9546 0.7085 0.9418 0.6974 0.949 0.7067 0.967 0.7155 0.9605 0.9006 0.9683 0.9079 0.9509 0.8982 0.9419 0.8902 0.9605 0.6974 0.949 0.6884 0.9586 0.6969 0.9755 0.7067 0.967 0.9105 0.9764 0.9216 0.9603 0.9079 0.9509 0.9006 0.9683 0.6884 0.9586 0.6754 0.969 0.6875 0.9843 0.6969 0.9755 0.9227 0.9855 0.93 0.9705 0.9216 0.9603 0.9105 0.9764 0.6754 0.969 0.6677 0.9797 0.676 0.9943 0.6875 0.9843 0.8539 0.9401 0.854 0.9193 0.8263 0.9099 0.8285 0.9313 0.7669 0.912 0.7399 0.9233 0.7415 0.9441 0.7662 0.9335 0.8285 0.9313 0.8263 0.9099 0.7967 0.9131 0.7973 0.9299 0.7967 0.9131 0.7669 0.912 0.7662 0.9335 0.7973 0.9299 0.8263 0.9099 0.8262 0.9063 0.7965 0.9096 0.7967 0.9131 0.7965 0.9096 0.7667 0.9084 0.7669 0.912 0.7967 0.9131 0.854 0.9193 0.851 0.9149 0.8262 0.9063 0.8263 0.9099 0.7667 0.9084 0.7425 0.9187 0.7399 0.9233 0.7669 0.912 0.93 0.9705 0.9346 0.9712 0.9272 0.9605 0.9216 0.9603 0.6698 0.9696 0.6632 0.9808 0.6677 0.9797 0.6754 0.969 0.9216 0.9603 0.9272 0.9605 0.9116 0.9495 0.9079 0.9509 0.6846 0.9575 0.6698 0.9696 0.6754 0.969 0.6884 0.9586 0.9079 0.9509 0.9116 0.9495 0.9006 0.9404 0.8982 0.9419 0.6949 0.9477 0.6846 0.9575 0.6884 0.9586 0.6974 0.949 0.8982 0.9419 0.9006 0.9404 0.8889 0.9328 0.8867 0.9355 0.7061 0.9393 0.6949 0.9477 0.6974 0.949 0.7085 0.9418 0.8867 0.9355 0.8889 0.9328 0.8738 0.9252 0.8738 0.9293 0.7206 0.9306 0.7061 0.9393 0.7085 0.9418 0.7209 0.9347 0.8738 0.9293 0.854 0.9193 0.851 0.9149 0.8738 0.9252 0.8738 0.9252 0.8859 0.9043 0.8636 0.8961 0.851 0.9149 0.7287 0.9009 0.707 0.9106 0.7206 0.9306 0.7425 0.9187 0.8889 0.9328 0.9054 0.9175 0.8859 0.9043 0.8738 0.9252 0.707 0.9106 0.6885 0.9252 0.7061 0.9393 0.7206 0.9306 0.9006 0.9404 0.9202 0.9312 0.9054 0.9175 0.8889 0.9328 0.6885 0.9252 0.6747 0.9398 0.6949 0.9477 0.7061 0.9393 0.9116 0.9495 0.9331 0.9398 0.9202 0.9312 0.9006 0.9404 0.6747 0.9398 0.6624 0.9494 0.6846 0.9575 0.6949 0.9477 0.9272 0.9605 0.9493 0.9546 0.9331 0.9398 0.9116 0.9495 0.6624 0.9494 0.6473 0.9653 0.6698 0.9696 0.6846 0.9575 0.9346 0.9712 0.9676 0.9714 0.9493 0.9546 0.9272 0.9605 0.6473 0.9653 0.6303 0.9833 0.6632 0.9808 0.6698 0.9696 0.851 0.9149 0.8636 0.8961 0.828 0.8844 0.8262 0.9063 0.7633 0.8867 0.7287 0.9009 0.7425 0.9187 0.7667 0.9084 0.8262 0.9063 0.828 0.8844 0.7953 0.8751 0.7965 0.9096 0.7953 0.8751 0.7633 0.8867 0.7667 0.9084 0.7965 0.9096</float_array> + <technique_common> + <accessor source="#_6-mesh-map-0-array" count="31573" stride="2"> + <param name="S" type="float"/> + <param name="T" type="float"/> + </accessor> + </technique_common> + </source> + <vertices id="_6-mesh-vertices"> + <input semantic="POSITION" source="#_6-mesh-positions"/> + </vertices> + <polylist material="eyes-white" count="164"> + <input semantic="VERTEX" source="#_6-mesh-vertices" offset="0"/> + <input semantic="NORMAL" source="#_6-mesh-normals" offset="1"/> + <input semantic="TEXCOORD" source="#_6-mesh-map-0" offset="2" set="0"/> + <vcount>4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 </vcount> + <p>857 7479 29312 854 7480 29313 855 7481 29314 856 7482 29315 825 7487 29320 822 7488 29321 823 7489 29322 824 7490 29323 862 7495 29328 857 7479 29329 856 7482 29330 863 7496 29331 830 7497 29332 825 7487 29333 824 7490 29334 831 7498 29335 861 7503 29344 858 7504 29345 857 7479 29346 862 7495 29347 829 7505 29348 826 7506 29349 825 7487 29350 830 7497 29351 860 7510 29360 859 7511 29361 858 7504 29362 861 7503 29363 858 7504 29384 853 7522 29385 854 7480 29386 857 7479 29387 843 7528 29396 836 7529 29397 837 7530 29398 842 7531 29399 811 7532 29400 805 7533 29401 806 7534 29402 810 7535 29403 842 7531 29412 837 7530 29413 838 7539 29414 841 7540 29415 810 7535 29416 806 7534 29417 807 7541 29418 809 7542 29419 867 7549 29428 860 7510 29429 861 7503 29430 866 7550 29431 841 7540 29432 838 7539 29433 839 7484 29434 840 7483 29435 835 7551 29436 828 7552 29437 829 7505 29438 834 7553 29439 868 7518 29440 808 7554 29441 809 7542 29442 807 7541 29443 866 7550 29456 861 7503 29457 862 7495 29458 865 7561 29459 846 7562 29460 841 7540 29461 840 7483 29462 847 7563 29463 834 7553 29464 829 7505 29465 830 7497 29466 833 7564 29467 814 7565 29468 809 7542 29469 808 7554 29470 815 7566 29471 812 7571 29484 811 7532 29485 810 7535 29486 813 7572 29487 865 7561 29488 862 7495 29489 863 7496 29490 864 7512 29491 845 7573 29492 842 7531 29493 841 7540 29494 846 7562 29495 833 7564 29496 830 7497 29497 831 7498 29498 832 7574 29499 813 7572 29500 810 7535 29501 809 7542 29502 814 7565 29503 819 7579 29512 812 7571 29513 813 7572 29514 818 7580 29515 864 7512 29516 868 7518 29517 807 7541 29518 865 7561 29519 844 7581 29520 843 7528 29521 842 7531 29522 845 7573 29523 806 7534 29540 866 7550 29541 865 7561 29542 807 7541 29543 837 7530 29544 834 7553 29545 833 7564 29546 838 7539 29547 805 7533 29556 867 7549 29557 866 7550 29558 806 7534 29559 836 7529 29564 835 7551 29565 834 7553 29566 837 7530 29567 851 7599 29608 844 7581 29609 845 7573 29610 850 7600 29611 850 7600 29616 845 7573 29617 846 7562 29618 849 7602 29619 818 7580 29620 813 7572 29621 814 7565 29622 817 7603 29623 849 7602 29636 846 7562 29637 847 7563 29638 848 7589 29639 817 7603 29640 814 7565 29641 815 7566 29642 816 7605 29643 854 7480 29648 849 7602 29649 848 7589 29650 855 7481 29651 822 7488 29656 817 7603 29657 816 7605 29658 823 7489 29659 853 7522 29672 850 7600 29673 849 7602 29674 854 7480 29675 821 7607 29680 818 7580 29681 817 7603 29682 822 7488 29683 852 7610 29696 851 7599 29697 850 7600 29698 853 7522 29699 820 7611 29700 819 7579 29701 818 7580 29702 821 7607 29703 828 7552 29740 827 7614 29741 826 7506 29742 829 7505 29743 838 7539 29776 833 7564 29777 832 7574 29778 839 7484 29779 859 7511 29792 852 7610 29793 853 7522 29794 858 7504 29795 827 7614 29796 820 7611 29797 821 7607 29798 826 7506 29799 826 7506 29812 821 7607 29813 822 7488 29814 825 7487 29815 6668 7647 29864 6667 7648 29865 6607 7649 29866 6606 7650 29867 6629 7662 29892 6628 7663 29893 6631 7664 29894 6630 7665 29895 6628 7663 29904 6627 7669 29905 6632 7670 29906 6631 7664 29907 6653 7677 29924 6652 7678 29925 6655 7679 29926 6654 7680 29927 6627 7669 29928 6626 7681 29929 6633 7682 29930 6632 7670 29931 6607 7649 29932 6608 7683 29933 6611 7684 29934 6612 7685 29935 6651 7697 29960 6650 7661 29961 6657 7675 29962 6656 7698 29963 6631 7664 29964 6632 7670 29965 6635 7699 29966 6636 7700 29967 6656 7698 29980 6657 7675 29981 6658 7676 29982 6659 7705 29983 6630 7665 29984 6631 7664 29985 6636 7700 29986 6637 7706 29987 6654 7680 30000 6655 7679 30001 6660 7711 30002 6661 7712 30003 6608 7683 30008 6609 7715 30009 6610 7716 30010 6611 7684 30011 6667 7648 30016 6666 7718 30017 6608 7683 30018 6607 7649 30019 6606 7650 30024 6607 7649 30025 6612 7685 30026 6613 7719 30027 6612 7685 30028 6611 7684 30029 6616 7720 30030 6615 7721 30031 6611 7684 30036 6610 7716 30037 6617 7724 30038 6616 7720 30039 6613 7719 30040 6612 7685 30041 6615 7721 30042 6614 7725 30043 6620 7726 30044 6619 7727 30045 6624 7728 30046 6623 7729 30047 6632 7670 30048 6633 7682 30049 6634 7620 30050 6635 7699 30051 6636 7700 30052 6635 7699 30053 6640 7730 30054 6639 7731 30055 6639 7731 30056 6640 7730 30057 6643 7732 30058 6644 7733 30059 6644 7733 30060 6643 7732 30061 6648 7734 30062 6647 7735 30063 6647 7735 30064 6648 7734 30065 6651 7697 30066 6652 7678 30067 6652 7678 30072 6651 7697 30073 6656 7698 30074 6655 7679 30075 6655 7679 30076 6656 7698 30077 6659 7705 30078 6660 7711 30079 6637 7706 30080 6636 7700 30081 6639 7731 30082 6638 7737 30083 6663 7738 30084 6664 7739 30085 6666 7718 30086 6667 7648 30087 6624 7728 30100 6625 7741 30101 6626 7681 30102 6627 7669 30103 6616 7720 30112 6617 7724 30113 6618 7742 30114 6619 7727 30115 6661 7712 30116 6660 7711 30117 6663 7738 30118 6662 7743 30119 6635 7699 30120 6634 7620 30121 6641 7623 30122 6640 7730 30123 6615 7721 30124 6616 7720 30125 6619 7727 30126 6620 7726 30127 6660 7711 30132 6659 7705 30133 6664 7739 30134 6663 7738 30135 6640 7730 30136 6641 7623 30137 6642 7646 30138 6643 7732 30139 6659 7705 30148 6658 7676 30149 6665 7692 30150 6664 7739 30151 6605 7695 30160 6666 7718 30161 6664 7739 30162 6665 7692 30163 6638 7737 30164 6639 7731 30165 6644 7733 30166 6645 7747 30167 6662 7743 30184 6663 7738 30185 6667 7648 30186 6668 7647 30187 6609 7715 30188 6608 7683 30189 6666 7718 30190 6605 7695 30191 6621 7749 30216 6620 7726 30217 6623 7729 30218 6622 7750 30219 6645 7747 30232 6644 7733 30233 6647 7735 30234 6646 7752 30235 6619 7727 30236 6618 7742 30237 6625 7741 30238 6624 7728 30239 6614 7725 30260 6615 7721 30261 6620 7726 30262 6621 7749 30263 6643 7732 30268 6642 7646 30269 6649 7655 30270 6648 7734 30271 6623 7729 30272 6624 7728 30273 6627 7669 30274 6628 7663 30275 6648 7734 30288 6649 7655 30289 6650 7661 30290 6651 7697 30291 6622 7750 30292 6623 7729 30293 6628 7663 30294 6629 7662 30295 6646 7752 30324 6647 7735 30325 6652 7678 30326 6653 7677 30327 805 7533 30544 1063 4917 30545 1066 5029 30546 805 7533 30547 1066 5029 30548 867 7549 30549 867 7549 30550 1066 5029 30551 1177 5031 30552 860 7510 30553 867 7549 30554 1177 5031 30555 860 7510 30556 1177 5031 30557 3338 5001 30558 859 7511 30559 860 7510 30560 3338 5001 30561 852 7610 30562 859 7511 30563 3338 5001 30564 852 7610 30565 3338 5001 30566 2049 5000 30567 851 7599 30568 852 7610 30569 2049 5000 30570 851 7599 30571 2049 5000 30572 1173 4947 30573 844 7581 30574 851 7599 30575 1173 4947 30576 844 7581 30577 1173 4947 30578 3915 4946 30579 843 7528 30580 844 7581 30581 3915 4946 30582 836 7529 30583 843 7528 30584 3915 4946 30585 836 7529 30586 3915 4946 30587 3913 4868 30588 836 7529 30589 3913 4868 30590 3916 4869 30591 835 7551 30592 3916 4869 30593 3913 4868 30594 835 7551 30595 3916 4869 30596 999 4870 30597 828 7552 30598 835 7551 30599 999 4870 30600 828 7552 30601 999 4870 30602 1034 4884 30603 828 7552 30604 1034 4884 30605 1247 4880 30606 827 7614 30607 828 7552 30608 1247 4880 30609 827 7614 30610 1247 4880 30611 1032 4878 30612 820 7611 30613 827 7614 30614 1032 4878 30615 820 7611 30616 1032 4878 30617 1033 4879 30618 819 7579 30619 820 7611 30620 1033 4879 30621 819 7579 30622 1033 4879 30623 1052 4904 30624 819 7579 30625 1052 4904 30626 1054 4906 30627 812 7571 30628 819 7579 30629 1054 4906 30630 812 7571 30631 1054 4906 30632 1060 4914 30633 811 7532 30634 812 7571 30635 1060 4914 30636 811 7532 30637 1060 4914 30638 1064 4918 30639 811 7532 30640 1064 4918 30641 1063 4917 30642 805 7533 30643 811 7532 30644 1063 4917 30645 6393 1472 30646 6395 1471 30647 6638 7737 30648 6393 1472 30649 6638 7737 30650 6645 7747 30651 6393 1472 30652 6645 7747 30653 6588 1494 30654 6564 1503 30655 6588 1494 30656 6645 7747 30657 6564 1503 30658 6645 7747 30659 6646 7752 30660 6461 1504 30661 6564 1503 30662 6646 7752 30663 6461 1504 30664 6646 7752 30665 6653 7677 30666 6461 1504 30667 6653 7677 30668 6566 1506 30669 6565 1507 30670 6566 1506 30671 6653 7677 30672 6565 1507 30673 6653 7677 30674 6654 7680 30675 6550 1540 30676 6565 1507 30677 6654 7680 30678 6550 1540 30679 6654 7680 30680 6661 7712 30681 6548 1541 30682 6550 1540 30683 6661 7712 30684 6542 1528 30685 6548 1541 30686 6661 7712 30687 6538 1529 30688 6542 1528 30689 6661 7712 30690 6538 1529 30691 6661 7712 30692 6662 7743 30693 6538 1529 30694 6662 7743 30695 6539 1530 30696 6539 1530 30697 6662 7743 30698 6668 7647 30699 6536 1658 30700 6539 1530 30701 6668 7647 30702 6489 1646 30703 6536 1658 30704 6668 7647 30705 6489 1646 30706 6668 7647 30707 6606 7650 30708 6403 1633 30709 6489 1646 30710 6606 7650 30711 6403 1633 30712 6606 7650 30713 6613 7719 30714 6403 1633 30715 6613 7719 30716 6415 1625 30717 6415 1625 30718 6613 7719 30719 6614 7725 30720 6415 1625 30721 6614 7725 30722 6621 7749 30723 6415 1625 30724 6621 7749 30725 6493 1600 30726 6493 1600 30727 6621 7749 30728 6622 7750 30729 6493 1600 30730 6622 7750 30731 6629 7662 30732 6394 1573 30733 6493 1600 30734 6629 7662 30735 6394 1573 30736 6629 7662 30737 6630 7665 30738 6394 1573 30739 6630 7665 30740 6396 1574 30741 6396 1574 30742 6630 7665 30743 6637 7706 30744 6395 1471 30745 6396 1574 30746 6637 7706 30747</p> + </polylist> + <polylist material="eyes-brown" count="128"> + <input semantic="VERTEX" source="#_6-mesh-vertices" offset="0"/> + <input semantic="NORMAL" source="#_6-mesh-normals" offset="1"/> + <input semantic="TEXCOORD" source="#_6-mesh-map-0" offset="2" set="0"/> + <vcount>4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 </vcount> + <p>840 7483 29316 839 7484 29317 796 7485 29318 797 7486 29319 782 7491 29324 781 7492 29325 765 7493 29326 766 7494 29327 856 7482 29336 855 7481 29337 800 7499 29338 801 7500 29339 783 7501 29340 782 7491 29341 766 7494 29342 767 7502 29343 863 7496 29352 856 7482 29353 801 7500 29354 802 7507 29355 784 7508 29356 783 7501 29357 767 7502 29358 768 7509 29359 864 7512 29364 863 7496 29365 802 7507 29366 803 7513 29367 785 7514 29368 784 7508 29369 768 7509 29370 769 7515 29371 766 7494 29372 765 7493 29373 749 7516 29374 750 7517 29375 868 7518 29376 864 7512 29377 803 7513 29378 804 7519 29379 786 7520 29380 785 7514 29381 769 7515 29382 770 7521 29383 787 7523 29388 786 7520 29389 770 7521 29390 771 7524 29391 789 7525 29392 804 7519 29393 788 7526 29394 773 7527 29395 790 7536 29404 789 7525 29405 773 7527 29406 774 7537 29407 767 7502 29408 766 7494 29409 750 7517 29410 751 7538 29411 791 7543 29420 790 7536 29421 774 7537 29422 775 7544 29423 757 7545 29424 772 7546 29425 755 7547 29426 741 7548 29427 792 7555 29444 791 7543 29445 775 7544 29446 776 7556 29447 781 7492 29448 780 7557 29449 764 7558 29450 765 7493 29451 758 7559 29452 757 7545 29453 741 7548 29454 742 7560 29455 788 7526 29472 787 7523 29473 771 7524 29474 772 7546 29475 793 7567 29476 792 7555 29477 776 7556 29478 777 7568 29479 759 7569 29480 758 7559 29481 742 7560 29482 743 7570 29483 794 7575 29504 793 7567 29505 777 7568 29506 778 7576 29507 760 7577 29508 759 7569 29509 743 7570 29510 744 7578 29511 802 7507 29524 801 7500 29525 785 7514 29526 786 7520 29527 795 7582 29528 794 7575 29529 778 7576 29530 779 7583 29531 761 7584 29532 760 7577 29533 744 7578 29534 745 7585 29535 768 7509 29536 767 7502 29537 751 7538 29538 752 7586 29539 796 7485 29548 795 7582 29549 779 7583 29550 780 7557 29551 762 7587 29552 761 7584 29553 745 7585 29554 746 7588 29555 855 7481 29560 848 7589 29561 799 7590 29562 800 7499 29563 797 7486 29568 796 7485 29569 780 7557 29570 781 7492 29571 763 7591 29572 762 7587 29573 746 7588 29574 747 7592 29575 764 7558 29576 763 7591 29577 747 7592 29578 748 7593 29579 799 7590 29580 798 7594 29581 782 7491 29582 783 7501 29583 765 7493 29584 764 7558 29585 748 7593 29586 749 7516 29587 800 7499 29588 799 7590 29589 783 7501 29590 784 7508 29591 801 7500 29596 800 7499 29597 784 7508 29598 785 7514 29599 776 7556 29600 775 7544 29601 759 7569 29602 760 7577 29603 803 7513 29624 802 7507 29625 786 7520 29626 787 7523 29627 769 7515 29628 768 7509 29629 752 7586 29630 753 7604 29631 804 7519 29652 803 7513 29653 787 7523 29654 788 7526 29655 808 7554 29660 868 7518 29661 804 7519 29662 789 7525 29663 770 7521 29664 769 7515 29665 753 7604 29666 754 7606 29667 832 7574 29676 831 7498 29677 794 7575 29678 795 7582 29679 815 7566 29684 808 7554 29685 789 7525 29686 790 7536 29687 772 7546 29688 771 7524 29689 756 7608 29690 755 7547 29691 816 7605 29704 815 7566 29705 790 7536 29706 791 7543 29707 773 7527 29708 788 7526 29709 772 7546 29710 757 7545 29711 823 7489 29716 816 7605 29717 791 7543 29718 792 7555 29719 774 7537 29720 773 7527 29721 757 7545 29722 758 7559 29723 798 7594 29728 797 7486 29729 781 7492 29730 782 7491 29731 824 7490 29732 823 7489 29733 792 7555 29734 793 7567 29735 775 7544 29736 774 7537 29737 758 7559 29738 759 7569 29739 831 7498 29748 824 7490 29749 793 7567 29750 794 7575 29751 771 7524 29752 770 7521 29753 754 7606 29754 756 7608 29755 777 7568 29764 776 7556 29765 760 7577 29766 761 7584 29767 778 7576 29768 777 7568 29769 761 7584 29770 762 7587 29771 839 7484 29780 832 7574 29781 795 7582 29782 796 7485 29783 779 7583 29784 778 7576 29785 762 7587 29786 763 7591 29787 847 7563 29800 840 7483 29801 797 7486 29802 798 7594 29803 780 7557 29804 779 7583 29805 763 7591 29806 764 7558 29807 848 7589 29816 847 7563 29817 798 7594 29818 799 7590 29819 6690 7616 29824 6706 7617 29825 6707 7618 29826 6691 7619 29827 6634 7620 29828 6677 7621 29829 6678 7622 29830 6641 7623 29831 6701 7624 29832 6718 7625 29833 6717 7626 29834 6702 7627 29835 6707 7618 29836 6723 7628 29837 6724 7629 29838 6708 7630 29839 6691 7619 29844 6707 7618 29845 6708 7630 29846 6692 7635 29847 6716 7636 29848 6732 7637 29849 6718 7625 29850 6701 7624 29851 6682 7638 29852 6698 7639 29853 6699 7640 29854 6683 7641 29855 6641 7623 29860 6678 7622 29861 6679 7645 29862 6642 7646 29863 6692 7635 29872 6708 7630 29873 6709 7652 29874 6693 7653 29875 6642 7646 29876 6679 7645 29877 6680 7654 29878 6649 7655 29879 6693 7653 29884 6709 7652 29885 6710 7658 29886 6694 7659 29887 6649 7655 29888 6680 7654 29889 6681 7660 29890 6650 7661 29891 6694 7659 29900 6710 7658 29901 6711 7667 29902 6695 7668 29903 6700 7671 29908 6716 7636 29909 6701 7624 29910 6685 7672 29911 6695 7668 29916 6711 7667 29917 6712 7673 29918 6696 7674 29919 6657 7675 29920 6682 7638 29921 6683 7641 29922 6658 7676 29923 6696 7674 29940 6712 7673 29941 6713 7686 29942 6697 7687 29943 6704 7688 29944 6720 7656 29945 6721 7657 29946 6705 7689 29947 6665 7692 29952 6684 7693 29953 6669 7694 29954 6605 7695 29955 6697 7687 29956 6713 7686 29957 6714 7696 29958 6698 7639 29959 6698 7639 29972 6714 7696 29973 6715 7702 29974 6699 7640 29975 6669 7694 29976 6685 7672 29977 6686 7703 29978 6670 7704 29979 6699 7640 29988 6715 7702 29989 6716 7636 29990 6700 7671 29991 6670 7704 29992 6686 7703 29993 6687 7707 29994 6671 7708 29995 6671 7708 29996 6687 7707 29997 6688 7709 29998 6672 7710 29999 6672 7710 30004 6688 7709 30005 6689 7713 30006 6673 7714 30007 6702 7627 30012 6717 7626 30013 6719 7666 30014 6703 7717 30015 6703 7717 30020 6719 7666 30021 6720 7656 30022 6704 7688 30023 6674 7722 30032 6690 7616 30033 6691 7619 30034 6675 7723 30035 6705 7689 30068 6721 7657 30069 6722 7736 30070 6706 7617 30071 6605 7695 30088 6669 7694 30089 6670 7704 30090 6609 7715 30091 6706 7617 30092 6722 7736 30093 6723 7628 30094 6707 7618 30095 6633 7682 30096 6676 7740 30097 6677 7621 30098 6634 7620 30099 6650 7661 30104 6681 7660 30105 6682 7638 30106 6657 7675 30107 6658 7676 30108 6683 7641 30109 6684 7693 30110 6665 7692 30111 6708 7630 30128 6724 7629 30129 6725 7744 30130 6709 7652 30131 6709 7652 30140 6725 7744 30141 6726 7745 30142 6710 7658 30143 6675 7723 30144 6691 7619 30145 6692 7635 30146 6676 7740 30147 6710 7658 30152 6726 7745 30153 6727 7746 30154 6711 7667 30155 6676 7740 30156 6692 7635 30157 6693 7653 30158 6677 7621 30159 6711 7667 30168 6727 7746 30169 6728 7748 30170 6712 7673 30171 6677 7621 30172 6693 7653 30173 6694 7659 30174 6678 7622 30175 6712 7673 30176 6728 7748 30177 6729 7701 30178 6713 7686 30179 6678 7622 30180 6694 7659 30181 6695 7668 30182 6679 7645 30183 6713 7686 30192 6729 7701 30193 6730 7690 30194 6714 7696 30195 6679 7645 30196 6695 7668 30197 6696 7674 30198 6680 7654 30199 6714 7696 30200 6730 7690 30201 6731 7691 30202 6715 7702 30203 6680 7654 30204 6696 7674 30205 6697 7687 30206 6681 7660 30207 6715 7702 30208 6731 7691 30209 6732 7637 30210 6716 7636 30211 6681 7660 30212 6697 7687 30213 6698 7639 30214 6682 7638 30215 6683 7641 30224 6699 7640 30225 6700 7671 30226 6684 7693 30227 6609 7715 30228 6670 7704 30229 6671 7708 30230 6610 7716 30231 6684 7693 30244 6700 7671 30245 6685 7672 30246 6669 7694 30247 6610 7716 30248 6671 7708 30249 6672 7710 30250 6617 7724 30251 6685 7672 30256 6701 7624 30257 6702 7627 30258 6686 7703 30259 6617 7724 30264 6672 7710 30265 6673 7714 30266 6618 7742 30267 6686 7703 30280 6702 7627 30281 6703 7717 30282 6687 7707 30283 6618 7742 30284 6673 7714 30285 6674 7722 30286 6625 7741 30287 6687 7707 30300 6703 7717 30301 6704 7688 30302 6688 7709 30303 6673 7714 30304 6689 7713 30305 6690 7616 30306 6674 7722 30307 6625 7741 30308 6674 7722 30309 6675 7723 30310 6626 7681 30311 6688 7709 30316 6704 7688 30317 6705 7689 30318 6689 7713 30319 6626 7681 30320 6675 7723 30321 6676 7740 30322 6633 7682 30323 6689 7713 30332 6705 7689 30333 6706 7617 30334 6690 7616 30335</p> + </polylist> + <polylist material="eyes-black" count="32"> + <input semantic="VERTEX" source="#_6-mesh-vertices" offset="0"/> + <input semantic="NORMAL" source="#_6-mesh-normals" offset="1"/> + <input semantic="TEXCOORD" source="#_6-mesh-map-0" offset="2" set="0"/> + <vcount>4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 </vcount> + <p>741 7548 29592 755 7547 29593 7737 7595 29594 7741 7596 29595 748 7593 29604 747 7592 29605 7740 7597 29606 7738 7598 29607 745 7585 29612 744 7578 29613 7739 7601 29614 7740 7597 29615 744 7578 29632 743 7570 29633 7741 7596 29634 7739 7601 29635 746 7588 29644 745 7585 29645 7740 7597 29646 747 7592 29647 742 7560 29668 741 7548 29669 7741 7596 29670 743 7570 29671 740 7609 29692 7739 7601 29693 7741 7596 29694 7737 7595 29695 740 7609 29712 7738 7598 29713 7740 7597 29714 7739 7601 29715 753 7604 29724 752 7586 29725 7742 7612 29726 7743 7613 29727 752 7586 29744 751 7538 29745 7744 7615 29746 7742 7612 29747 754 7606 29756 753 7604 29757 7743 7613 29758 756 7608 29759 748 7593 29760 7738 7598 29761 7744 7615 29762 749 7516 29763 755 7547 29772 756 7608 29773 7743 7613 29774 7737 7595 29775 750 7517 29788 749 7516 29789 7744 7615 29790 751 7538 29791 740 7609 29808 7742 7612 29809 7744 7615 29810 7738 7598 29811 740 7609 29820 7737 7595 29821 7743 7613 29822 7742 7612 29823 6733 7631 29840 7747 7632 29841 7746 7633 29842 7752 7634 29843 6733 7631 29856 7750 7642 29857 7749 7643 29858 7751 7644 29859 7748 7651 29868 7750 7642 29869 6733 7631 29870 7752 7634 29871 6720 7656 29880 7746 7633 29881 7747 7632 29882 6721 7657 29883 6717 7626 29896 7746 7633 29897 6720 7656 29898 6719 7666 29899 6717 7626 29912 6718 7625 29913 7752 7634 29914 7746 7633 29915 6718 7625 29936 6732 7637 29937 7748 7651 29938 7752 7634 29939 6730 7690 29948 7748 7651 29949 6732 7637 29950 6731 7691 29951 6729 7701 29968 7750 7642 29969 7748 7651 29970 6730 7690 29971 6722 7736 30220 7745 7751 30221 6724 7629 30222 6723 7628 30223 6721 7657 30240 7747 7632 30241 7745 7751 30242 6722 7736 30243 6724 7629 30252 7745 7751 30253 7751 7644 30254 6725 7744 30255 6733 7631 30276 7751 7644 30277 7745 7751 30278 7747 7632 30279 6725 7744 30296 7751 7644 30297 7749 7643 30298 6726 7745 30299 6726 7745 30312 7749 7643 30313 6728 7748 30314 6727 7746 30315 6728 7748 30328 7749 7643 30329 7750 7642 30330 6729 7701 30331</p> + </polylist> + <polylist material="skin-mat" count="6843"> + <input semantic="VERTEX" source="#_6-mesh-vertices" offset="0"/> + <input semantic="NORMAL" source="#_6-mesh-normals" offset="1"/> + <input semantic="TEXCOORD" source="#_6-mesh-map-0" offset="2" set="0"/> + <vcount>4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 </vcount> + <p>3943 740 2792 2084 741 2793 2081 742 2794 3942 743 2795 4485 744 2796 4484 745 2797 4471 746 2798 4482 747 2799 4134 748 2800 4135 749 2801 4614 750 2802 4613 751 2803 3345 752 2804 2088 753 2805 2128 754 2806 3347 755 2807 2088 753 2808 3345 752 2809 3327 756 2810 1265 757 2811 1800 758 2812 1799 759 2813 1268 760 2814 1259 761 2815 4111 762 2816 4112 763 2817 4485 744 2818 4482 747 2819 2151 764 2820 2155 765 2821 2156 766 2822 2152 767 2823 2128 754 2824 2155 765 2825 2151 764 2826 2129 768 2827 1264 769 2828 1259 761 2829 1268 760 2830 1258 770 2831 1270 771 2832 1262 772 2833 1799 759 2834 1800 758 2835 3326 773 2836 1805 774 2837 1804 775 2838 3325 776 2839 1976 777 2840 2061 778 2841 2060 779 2842 3025 780 2843 4658 781 2844 4610 782 2845 4609 783 2846 4650 784 2847 4858 785 2848 4469 786 2849 4106 787 2850 4108 788 2851 1263 789 2852 1257 790 2853 1269 791 2854 1271 792 2855 4661 793 2856 4475 794 2857 4472 795 2858 4611 796 2859 4470 797 2860 4439 798 2861 4121 799 2862 4122 800 2863 1264 769 2864 1261 801 2865 1266 802 2866 1259 761 2867 3111 803 2868 3026 804 2869 3035 805 2870 3125 806 2871 1267 807 2872 1260 808 2873 2091 809 2874 2090 810 2875 4655 811 2876 4474 812 2877 4477 813 2878 4660 814 2879 3348 815 2880 2129 768 2881 2130 816 2882 3349 817 2883 1270 771 2884 3326 773 2885 3325 776 2886 1262 772 2887 4658 781 2888 4664 818 2889 4654 819 2890 4661 793 2891 2081 742 2892 2084 741 2893 2095 820 2894 2082 821 2895 4112 763 2896 4113 822 2897 4493 823 2898 4485 744 2899 4414 824 2900 4413 825 2901 4409 826 2902 4410 827 2903 4494 828 2904 4505 829 2905 4114 830 2906 4113 822 2907 4657 831 2908 4662 832 2909 4655 811 2910 4660 814 2911 1976 777 2912 3039 833 2913 2072 834 2914 2061 778 2915 2072 834 2916 3941 835 2917 3940 836 2918 2061 778 2919 4406 837 2920 4404 838 2921 4085 839 2922 4084 840 2923 4437 841 2924 4436 842 2925 4421 843 2926 4415 844 2927 2091 809 2928 2094 845 2929 2160 846 2930 2159 847 2931 4657 831 2932 4664 818 2933 4652 848 2934 4663 849 2935 2095 820 2936 3349 817 2937 3344 850 2938 2082 821 2939 4493 823 2940 4492 851 2941 4484 745 2942 4485 744 2943 2126 852 2944 3953 853 2945 3944 854 2946 2085 855 2947 1265 757 2948 1801 856 2949 2093 857 2950 2088 753 2951 2088 753 2952 2093 857 2953 2155 765 2954 2128 754 2955 4481 858 2956 4470 797 2957 4479 859 2958 4480 860 2959 4078 861 2960 4472 795 2961 4406 837 2962 4084 840 2963 4859 862 2964 4480 860 2965 4479 859 2966 4612 863 2967 3945 864 2968 2086 865 2969 2085 855 2970 3944 854 2971 869 866 2972 3947 867 2973 3946 868 2974 870 869 2975 4656 870 2976 4478 871 2977 4473 872 2978 4617 873 2979 1263 789 2980 1808 874 2981 1807 875 2982 1260 808 2983 4496 876 2984 4494 828 2985 4113 822 2986 4112 763 2987 4563 877 2988 4268 878 2989 4506 879 2990 4505 829 2991 4182 880 2992 4168 881 2993 4258 882 2994 4267 883 2995 4556 884 2996 4497 885 2997 4498 886 2998 4557 887 2999 4613 751 3000 4858 785 3001 4859 862 3002 4612 863 3003 1270 771 3004 1800 758 3005 1801 856 3006 1265 757 3007 4656 870 3008 4651 888 3009 4134 748 3010 4133 889 3011 4858 785 3012 4613 751 3013 4614 750 3014 4469 786 3015 4267 883 3016 4495 890 3017 4441 891 3018 4182 880 3019 2087 892 3020 3345 752 3021 3347 755 3022 2096 893 3023 4478 871 3024 4438 894 3025 4411 895 3026 4473 872 3027 4440 896 3028 4481 858 3029 4110 897 3030 4101 898 3031 3941 835 3032 2073 899 3033 2064 900 3034 3940 836 3035 3942 743 3036 2081 742 3037 2073 899 3038 3941 835 3039 1801 856 3040 1800 758 3041 1259 761 3042 1266 802 3043 3345 752 3044 2087 892 3045 1806 901 3046 3327 756 3047 2084 741 3048 3943 740 3049 3953 853 3050 2126 852 3051 4482 747 3052 4471 746 3053 4439 798 3054 4440 896 3055 3943 740 3056 2071 902 3057 2125 903 3058 3953 853 3059 2070 904 3060 3942 743 3061 3941 835 3062 2072 834 3063 2127 905 3064 3348 815 3065 3349 817 3066 2095 820 3067 4617 873 3068 4473 872 3069 4474 812 3070 4655 811 3071 4476 906 3072 4408 907 3073 4407 908 3074 4475 794 3075 4477 813 3076 4474 812 3077 4410 827 3078 4409 826 3079 2092 909 3080 2156 766 3081 2155 765 3082 2093 857 3083 4124 910 3084 4122 800 3085 4438 894 3086 4478 871 3087 1265 757 3088 3327 756 3089 3326 773 3090 1270 771 3091 3039 833 3092 2943 911 3093 2070 904 3094 2072 834 3095 4563 877 3096 4505 829 3097 4494 828 3098 4254 912 3099 4471 746 3100 4484 745 3101 4125 913 3102 4120 914 3103 4660 814 3104 4477 813 3105 4476 906 3106 4654 819 3107 4658 781 3108 4650 784 3109 4652 848 3110 4664 818 3111 2154 915 3112 2158 916 3113 2159 847 3114 2161 917 3115 4122 800 3116 4121 799 3117 4437 841 3118 4438 894 3119 4478 871 3120 4656 870 3121 4133 889 3122 4124 910 3123 2086 865 3124 3945 864 3125 3947 867 3126 869 866 3127 2084 741 3128 2126 852 3129 2127 905 3130 2095 820 3131 4078 861 3132 4084 840 3133 2160 846 3134 2094 845 3135 4133 889 3136 4134 748 3137 4613 751 3138 4612 863 3139 4412 918 3140 4405 919 3141 4407 908 3142 4408 907 3143 4610 782 3144 4611 796 3145 4056 920 3146 4057 921 3147 2089 922 3148 2157 923 3149 2156 766 3150 2092 909 3151 4553 924 3152 4498 886 3153 4108 788 3154 4106 787 3155 2129 768 3156 2151 764 3157 2145 925 3158 2130 816 3159 2944 926 3160 2946 927 3161 2067 928 3162 2066 929 3163 4113 822 3164 4114 830 3165 4502 930 3166 4493 823 3167 2096 893 3168 3347 755 3169 3348 815 3170 2127 905 3171 2126 852 3172 2085 855 3173 2096 893 3174 2127 905 3175 2943 911 3176 3039 833 3177 3048 931 3178 3003 932 3179 4413 825 3180 4412 918 3181 4408 907 3182 4409 826 3183 4479 859 3184 4470 797 3185 4122 800 3186 4124 910 3187 4859 862 3188 4858 785 3189 4108 788 3190 4107 933 3191 2944 926 3192 3111 803 3193 3125 806 3194 3007 934 3195 4415 844 3196 4414 824 3197 4410 827 3198 4411 895 3199 2089 922 3200 2090 810 3201 2158 916 3202 2157 923 3203 4254 912 3204 4494 828 3205 4496 876 3206 4350 935 3207 2152 767 3208 2156 766 3209 2157 923 3210 2153 936 3211 2085 855 3212 2086 865 3213 2087 892 3214 2096 893 3215 4347 937 3216 4499 938 3217 4497 885 3218 4556 884 3219 4440 896 3220 4439 798 3221 4470 797 3222 4481 858 3223 3327 756 3224 1806 901 3225 1805 774 3226 3326 773 3227 2153 936 3228 2157 923 3229 2158 916 3230 2154 915 3231 3347 755 3232 2128 754 3233 2129 768 3234 3348 815 3235 4654 819 3236 4476 906 3237 4475 794 3238 4661 793 3239 2090 810 3240 2091 809 3241 2159 847 3242 2158 916 3243 1263 789 3244 1260 808 3245 1267 807 3246 1257 790 3247 4111 762 3248 4101 898 3249 4441 891 3250 4495 890 3251 4121 799 3252 4120 914 3253 4436 842 3254 4437 841 3255 4407 908 3256 4405 919 3257 4404 838 3258 4406 837 3259 4480 860 3260 4859 862 3261 4107 933 3262 4109 939 3263 1807 875 3264 4056 920 3265 4078 861 3266 2094 845 3267 4482 747 3268 4440 896 3269 4101 898 3270 4111 762 3271 4109 939 3272 4107 933 3273 4497 885 3274 4499 938 3275 4651 888 3276 4659 940 3277 4135 749 3278 4134 748 3279 4651 888 3280 4656 870 3281 4617 873 3282 4618 941 3283 1260 808 3284 1807 875 3285 2094 845 3286 2091 809 3287 1264 769 3288 1257 790 3289 1267 807 3290 1261 801 3291 4101 898 3292 4110 897 3293 4500 942 3294 4441 891 3295 4499 938 3296 4500 942 3297 4110 897 3298 4109 939 3299 4651 888 3300 4618 941 3301 4619 943 3302 4659 940 3303 1801 856 3304 1266 802 3305 2092 909 3306 2093 857 3307 1264 769 3308 1258 770 3309 1269 791 3310 1257 790 3311 3953 853 3312 2125 903 3313 2066 929 3314 3944 854 3315 4109 939 3316 4110 897 3317 4481 858 3318 4480 860 3319 4617 873 3320 4655 811 3321 4662 832 3322 4618 941 3323 4474 812 3324 4473 872 3325 4411 895 3326 4410 827 3327 1266 802 3328 1261 801 3329 2089 922 3330 2092 909 3331 4495 890 3332 4496 876 3333 4112 763 3334 4111 762 3335 4657 831 3336 4663 849 3337 4653 944 3338 4662 832 3339 2073 899 3340 2081 742 3341 2082 821 3342 2074 945 3343 4050 946 3344 4057 921 3345 1808 874 3346 1809 947 3347 4557 887 3348 4498 886 3349 4553 924 3350 4293 948 3351 869 866 3352 1806 901 3353 2087 892 3354 2086 865 3355 1805 774 3356 1806 901 3357 869 866 3358 870 869 3359 4438 894 3360 4437 841 3361 4415 844 3362 4411 895 3363 4658 781 3364 4661 793 3365 4611 796 3366 4610 782 3367 1261 801 3368 1267 807 3369 2090 810 3370 2089 922 3371 1808 874 3372 4057 921 3373 4056 920 3374 1807 875 3375 4475 794 3376 4407 908 3377 4406 837 3378 4472 795 3379 4349 949 3380 4500 942 3381 4499 938 3382 4347 937 3383 4182 880 3384 4441 891 3385 4500 942 3386 4349 949 3387 1263 789 3388 1271 792 3389 1809 947 3390 1808 874 3391 3026 804 3392 2943 911 3393 3003 932 3394 3035 805 3395 4124 910 3396 4133 889 3397 4612 863 3398 4479 859 3399 3947 867 3400 2069 950 3401 2068 951 3402 3946 868 3403 4657 831 3404 4660 814 3405 4654 819 3406 4664 818 3407 3026 804 3408 3111 803 3409 2125 903 3410 2071 902 3411 1983 952 3412 1982 953 3413 2068 951 3414 2069 950 3415 2160 846 3416 4084 840 3417 4085 839 3418 2162 954 3419 4107 933 3420 4108 788 3421 4498 886 3422 4497 885 3423 4477 813 3424 4409 826 3425 4408 907 3426 4476 906 3427 2067 928 3428 3945 864 3429 3944 854 3430 2066 929 3431 2946 927 3432 1983 952 3433 2069 950 3434 2067 928 3435 2159 847 3436 2160 846 3437 2162 954 3438 2161 917 3439 4050 946 3440 4609 783 3441 4610 782 3442 4057 921 3443 870 869 3444 3946 868 3445 3948 955 3446 2097 956 3447 4611 796 3448 4472 795 3449 4078 861 3450 4056 920 3451 3111 803 3452 2944 926 3453 2066 929 3454 2125 903 3455 2943 911 3456 3026 804 3457 2071 902 3458 2070 904 3459 4439 798 3460 4471 746 3461 4120 914 3462 4121 799 3463 2071 902 3464 3943 740 3465 3942 743 3466 2070 904 3467 3945 864 3468 2067 928 3469 2069 950 3470 3947 867 3471 4350 935 3472 4496 876 3473 4495 890 3474 4267 883 3475 870 869 3476 2097 956 3477 1804 775 3478 1805 774 3479 4618 941 3480 4662 832 3481 4653 944 3482 4619 943 3483 878 957 3484 2117 958 3485 2118 959 3486 877 960 3487 877 960 3488 2118 959 3489 2120 961 3490 2040 962 3491 4516 963 3492 4446 964 3493 4123 965 3494 4129 966 3495 4857 967 3496 4853 968 3497 4450 969 3498 4451 970 3499 4769 971 3500 4855 972 3501 4527 973 3502 4525 974 3503 4129 966 3504 4123 965 3505 4444 975 3506 4508 976 3507 980 977 3508 1097 978 3509 880 979 3510 879 980 3511 3340 981 3512 2058 982 3513 2122 983 3514 3346 984 3515 2116 985 3516 876 986 3517 879 980 3518 2117 958 3519 4446 964 3520 4517 987 3521 4128 988 3522 4123 965 3523 880 979 3524 1097 978 3525 2042 989 3526 2041 990 3527 4449 991 3528 4448 992 3529 4848 993 3530 4849 994 3531 982 995 3532 873 996 3533 4065 997 3534 4071 998 3535 4853 968 3536 4850 999 3537 4449 991 3538 4450 969 3539 4452 1000 3540 4079 1001 3541 4064 1002 3542 4856 1003 3543 4848 993 3544 4516 963 3545 4515 1004 3546 4721 1005 3547 982 995 3548 2032 1006 3549 2030 1007 3550 873 996 3551 979 1008 3552 980 977 3553 879 980 3554 876 986 3555 4130 1009 3556 4129 966 3557 4508 976 3558 4509 1010 3559 2029 1011 3560 2119 1012 3561 2115 1013 3562 871 1014 3563 2114 1015 3564 873 996 3565 2030 1007 3566 2119 1012 3567 4451 970 3568 4450 969 3569 4852 1016 3570 4854 1017 3571 4850 999 3572 4851 1018 3573 4448 992 3574 4449 991 3575 4510 1019 3576 4509 1010 3577 4508 976 3578 4504 1020 3579 4772 1021 3580 4852 1016 3581 4849 994 3582 4771 1022 3583 981 1023 3584 979 1008 3585 876 986 3586 874 1024 3587 2120 961 3588 3346 984 3589 3341 1025 3590 2040 962 3591 4770 1026 3592 4854 1017 3593 4852 1016 3594 4772 1021 3595 2032 1006 3596 981 1023 3597 874 1024 3598 2030 1007 3599 4450 969 3600 4449 991 3601 4849 994 3602 4852 1016 3603 2117 958 3604 879 980 3605 880 979 3606 2118 959 3607 4515 1004 3608 4516 963 3609 4129 966 3610 4130 1009 3611 4447 1027 3612 4451 970 3613 4854 1017 3614 4527 973 3615 3339 1028 3616 2057 1029 3617 2058 982 3618 3340 981 3619 875 1030 3620 2116 985 3621 2117 958 3622 878 957 3623 4448 992 3624 4446 964 3625 4516 963 3626 4848 993 3627 2119 1012 3628 2030 1007 3629 874 1024 3630 2115 1013 3631 4855 972 3632 4065 997 3633 4079 1001 3634 4452 1000 3635 2042 989 3636 3339 1028 3637 3340 981 3638 2041 990 3639 4452 1000 3640 4447 1027 3641 4527 973 3642 4855 972 3643 2041 990 3644 3340 981 3645 3346 984 3646 2120 961 3647 2115 1013 3648 874 1024 3649 876 986 3650 2116 985 3651 4851 1018 3652 4517 987 3653 4446 964 3654 4448 992 3655 872 1031 3656 2114 1015 3657 2119 1012 3658 2029 1011 3659 2118 959 3660 880 979 3661 2041 990 3662 2120 961 3663 4525 974 3664 4527 973 3665 4854 1017 3666 4770 1026 3667 4771 1022 3668 4849 994 3669 4848 993 3670 4721 1005 3671 4856 1003 3672 4528 1032 3673 4447 1027 3674 4452 1000 3675 4769 971 3676 4071 998 3677 4065 997 3678 4855 972 3679 873 996 3680 2114 1015 3681 4079 1001 3682 4065 997 3683 871 1014 3684 2115 1013 3685 2116 985 3686 875 1030 3687 2056 1033 3688 2062 1034 3689 2058 982 3690 2057 1029 3691 2114 1015 3692 872 1031 3693 4064 1002 3694 4079 1001 3695 4528 1032 3696 4857 967 3697 4451 970 3698 4447 1027 3699 2133 1035 3700 2138 1036 3701 2139 1037 3702 2134 1038 3703 4853 968 3704 4435 1039 3705 4488 1040 3706 4850 999 3707 2140 1041 3708 2146 1042 3709 2147 1043 3710 2141 1044 3711 2076 1045 3712 2135 1046 3713 2078 1047 3714 2079 1048 3715 875 1030 3716 878 957 3717 2078 1047 3718 2131 1049 3719 4857 967 3720 4528 1032 3721 4433 1050 3722 4434 1051 3723 871 1014 3724 2132 1052 3725 2133 1035 3726 2029 1011 3727 2131 1049 3728 2136 1053 3729 2137 1054 3730 2132 1052 3731 4856 1003 3732 4432 1055 3733 4433 1050 3734 4528 1032 3735 4125 913 3736 4127 1056 3737 4491 1057 3738 4483 1058 3739 4856 1003 3740 4064 1002 3741 4080 1059 3742 4432 1055 3743 4484 745 3744 4492 851 3745 4127 1056 3746 4125 913 3747 4491 1057 3748 4490 1060 3749 4489 1061 3750 4483 1058 3751 4127 1056 3752 4126 1062 3753 4486 1063 3754 4491 1057 3755 4491 1057 3756 4486 1063 3757 4487 1064 3758 4490 1060 3759 4492 851 3760 4501 1065 3761 4126 1062 3762 4127 1056 3763 872 1031 3764 2029 1011 3765 2133 1035 3766 2134 1038 3767 4851 1018 3768 4850 999 3769 4488 1040 3770 4487 1064 3771 4128 988 3772 4126 1062 3773 4501 1065 3774 4507 1066 3775 877 960 3776 2040 962 3777 2080 1067 3778 2079 1048 3779 4851 1018 3780 4487 1064 3781 4486 1063 3782 4517 987 3783 4517 987 3784 4486 1063 3785 4126 1062 3786 4128 988 3787 4419 1068 3788 4418 1069 3789 4412 918 3790 4413 825 3791 2136 1053 3792 2135 1046 3793 2140 1041 3794 2141 1044 3795 2138 1036 3796 2137 1054 3797 2142 1070 3798 2143 1071 3799 4417 1072 3800 4416 1073 3801 4404 838 3802 4405 919 3803 872 1031 3804 2134 1038 3805 4080 1059 3806 4064 1002 3807 2078 1047 3808 2135 1046 3809 2136 1053 3810 2131 1049 3811 4418 1069 3812 4417 1072 3813 4405 919 3814 4412 918 3815 2077 1074 3816 2083 1075 3817 2130 816 3818 2145 925 3819 4420 1076 3820 4419 1068 3821 4413 825 3822 4414 824 3823 4421 843 3824 4420 1076 3825 4414 824 3826 4415 844 3827 2075 1077 3828 2076 1045 3829 2079 1048 3830 2080 1067 3831 4489 1061 3832 4426 1078 3833 4420 1076 3834 4421 843 3835 877 960 3836 2079 1048 3837 2078 1047 3838 878 957 3839 4426 1078 3840 4425 1079 3841 4419 1068 3842 4420 1076 3843 4425 1079 3844 4424 1080 3845 4418 1069 3846 4419 1068 3847 4422 1081 3848 4416 1073 3849 4417 1072 3850 4423 1082 3851 4082 1083 3852 4083 1084 3853 4416 1073 3854 4422 1081 3855 2141 1044 3856 2147 1043 3857 2148 1085 3858 2142 1070 3859 4423 1082 3860 4417 1072 3861 4418 1069 3862 4424 1080 3863 3341 1025 3864 2059 1086 3865 2065 1087 3866 3343 1088 3867 4082 1083 3868 2144 1089 3869 2150 1090 3870 4083 1084 3871 2144 1089 3872 2143 1071 3873 2149 1091 3874 2150 1090 3875 2132 1052 3876 2137 1054 3877 2138 1036 3878 2133 1035 3879 3349 817 3880 2130 816 3881 2083 1075 3882 3344 850 3883 4489 1061 3884 4421 843 3885 4436 842 3886 4483 1058 3887 2077 1074 3888 2145 925 3889 2146 1042 3890 2140 1041 3891 2074 945 3892 3342 1092 3893 3343 1088 3894 2065 1087 3895 2139 1037 3896 2138 1036 3897 2143 1071 3898 2144 1089 3899 871 1014 3900 875 1030 3901 2131 1049 3902 2132 1052 3903 4490 1060 3904 4431 1093 3905 4426 1078 3906 4489 1061 3907 3342 1092 3908 2075 1077 3909 2080 1067 3910 3343 1088 3911 4857 967 3912 4434 1051 3913 4435 1039 3914 4853 968 3915 2143 1071 3916 2142 1070 3917 2148 1085 3918 2149 1091 3919 4081 1094 3920 2139 1037 3921 2144 1089 3922 4082 1083 3923 4427 1095 3924 4422 1081 3925 4423 1082 3926 4428 1096 3927 2082 821 3928 3344 850 3929 3342 1092 3930 2074 945 3931 2134 1038 3932 2139 1037 3933 4081 1094 3934 4080 1059 3935 4081 1094 3936 4082 1083 3937 4422 1081 3938 4427 1095 3939 3344 850 3940 2083 1075 3941 2075 1077 3942 3342 1092 3943 4428 1096 3944 4423 1082 3945 4424 1080 3946 4429 1097 3947 4429 1097 3948 4424 1080 3949 4425 1079 3950 4430 1098 3951 4120 914 3952 4125 913 3953 4483 1058 3954 4436 842 3955 4430 1098 3956 4425 1079 3957 4426 1078 3958 4431 1093 3959 2040 962 3960 3341 1025 3961 3343 1088 3962 2080 1067 3963 4083 1084 3964 4085 839 3965 4404 838 3966 4416 1073 3967 2075 1077 3968 2083 1075 3969 2077 1074 3970 2076 1045 3971 4433 1050 3972 4432 1055 3973 4427 1095 3974 4428 1096 3975 2146 1042 3976 2152 767 3977 2153 936 3978 2147 1043 3979 4432 1055 3980 4080 1059 3981 4081 1094 3982 4427 1095 3983 2147 1043 3984 2153 936 3985 2154 915 3986 2148 1085 3987 2076 1045 3988 2077 1074 3989 2140 1041 3990 2135 1046 3991 4434 1051 3992 4433 1050 3993 4428 1096 3994 4429 1097 3995 2148 1085 3996 2154 915 3997 2161 917 3998 2149 1091 3999 4435 1039 4000 4434 1051 4001 4429 1097 4002 4430 1098 4003 2149 1091 4004 2161 917 4005 2162 954 4006 2150 1090 4007 2137 1054 4008 2136 1053 4009 2141 1044 4010 2142 1070 4011 4488 1040 4012 4435 1039 4013 4430 1098 4014 4431 1093 4015 2145 925 4016 2151 764 4017 2152 767 4018 2146 1042 4019 4490 1060 4020 4487 1064 4021 4488 1040 4022 4431 1093 4023 4083 1084 4024 2150 1090 4025 2162 954 4026 4085 839 4027 4836 1099 4028 4833 1100 4029 4834 1101 4030 4835 1102 4031 4832 1103 4032 4834 1101 4033 4833 1100 4034 4831 1104 4035 896 1105 4036 897 1106 4037 895 1107 4038 894 1108 4039 4025 1109 4040 902 1110 4041 903 1111 4042 4026 1112 4043 4832 1103 4044 4831 1104 4045 4830 1113 4046 4749 1114 4047 896 1105 4048 1020 1115 4049 898 1116 4050 897 1106 4051 1856 1117 4052 893 1118 4053 902 1110 4054 1857 1119 4055 893 1118 4056 1856 1117 4057 1858 1120 4058 894 1108 4059 892 1121 4060 893 1118 4061 894 1108 4062 895 1107 4063 4835 1102 4064 4834 1101 4065 4593 1122 4066 4595 1123 4067 4826 1124 4068 4825 1125 4069 4836 1099 4070 4835 1102 4071 4595 1123 4072 4594 1126 4073 4826 1124 4074 4835 1102 4075 902 1110 4076 893 1118 4077 892 1121 4078 903 1111 4079 4025 1109 4080 4026 1112 4081 4825 1125 4082 4826 1124 4083 4022 1127 4084 886 1128 4085 885 1129 4086 4021 1130 4087 881 1131 4088 889 1132 4089 890 1133 4090 883 1134 4091 4843 1135 4092 4567 1136 4093 4841 1137 4094 4842 1138 4095 4847 1139 4096 4845 1140 4097 4838 1141 4098 4839 1142 4099 4019 1143 4100 881 1131 4101 882 1144 4102 4020 1145 4103 881 1131 4104 883 1134 4105 884 1146 4106 882 1144 4107 890 1133 4108 889 1132 4109 888 1147 4110 891 1148 4111 4019 1143 4112 4023 1149 4113 889 1132 4114 881 1131 4115 4019 1143 4116 4847 1139 4117 4839 1142 4118 4023 1149 4119 885 1129 4120 886 1128 4121 887 1150 4122 1972 1151 4123 885 1129 4124 1972 1151 4125 891 1148 4126 888 1147 4127 4021 1130 4128 885 1129 4129 888 1147 4130 4024 1152 4131 4021 1130 4132 4024 1152 4133 4840 1153 4134 4843 1135 4135 4838 1141 4136 4837 1154 4137 4840 1153 4138 4839 1142 4139 4023 1149 4140 4839 1142 4141 4840 1153 4142 4024 1152 4143 4022 1127 4144 4021 1130 4145 4843 1135 4146 4842 1138 4147 4847 1139 4148 4846 1155 4149 4844 1156 4150 4845 1140 4151 4023 1149 4152 4024 1152 4153 888 1147 4154 889 1132 4155 4843 1135 4156 4840 1153 4157 4837 1154 4158 4567 1136 4159 4019 1143 4160 4020 1145 4161 4846 1155 4162 4847 1139 4163 4842 1138 4164 4841 1137 4165 4817 1157 4166 4819 1158 4167 4819 1158 4168 4817 1157 4169 4818 1159 4170 4820 1160 4171 886 1128 4172 909 1161 4173 911 1162 4174 887 1150 4175 4022 1127 4176 4028 1163 4177 909 1161 4178 886 1128 4179 4841 1137 4180 4814 1164 4181 4815 1165 4182 4817 1157 4183 4817 1157 4184 4815 1165 4185 4816 1166 4186 4818 1159 4187 4022 1127 4188 4842 1138 4189 4819 1158 4190 4028 1163 4191 4028 1163 4192 4819 1158 4193 4820 1160 4194 4029 1167 4195 909 1161 4196 908 1168 4197 910 1169 4198 911 1162 4199 911 1162 4200 910 1169 4201 912 1170 4202 913 1171 4203 887 1150 4204 911 1162 4205 913 1171 4206 914 1172 4207 4028 1163 4208 4029 1167 4209 908 1168 4210 909 1161 4211 995 1173 4212 913 1171 4213 912 1170 4214 996 1174 4215 4756 1175 4216 4755 1176 4217 4816 1166 4218 4815 1165 4219 4218 1177 4220 4201 1178 4221 4256 1179 4222 4393 1180 4223 4141 1181 4224 4142 1182 4225 4169 1183 4226 4259 1184 4227 4201 1178 4228 4219 1185 4229 4392 1186 4230 4256 1179 4231 4219 1185 4232 4204 1187 4233 4269 1188 4234 4392 1186 4235 4289 1189 4236 4245 1190 4237 4143 1191 4238 4144 1192 4239 4205 1193 4240 4218 1177 4241 4393 1180 4242 4270 1194 4243 4216 1195 4244 4233 1196 4245 4351 1197 4246 4287 1198 4247 4245 1190 4248 4290 1199 4249 4145 1200 4250 4143 1191 4251 4403 1201 4252 4400 1202 4253 4273 1203 4254 4274 1204 4255 4143 1191 4256 4145 1200 4257 4158 1205 4258 4156 1206 4259 4395 1207 4260 4314 1208 4261 4383 1209 4262 4394 1210 4263 4288 1211 4264 4155 1212 4265 4164 1213 4266 4217 1214 4267 4155 1212 4268 4288 1211 4269 4169 1183 4270 4142 1182 4271 4288 1211 4272 4217 1214 4273 4216 1195 4274 4287 1198 4275 4216 1195 4276 4217 1214 4277 4391 1215 4278 4390 1216 4279 4144 1192 4280 4143 1191 4281 4156 1206 4282 4157 1217 4283 4141 1181 4284 4144 1192 4285 4157 1217 4286 4154 1218 4287 4145 1200 4288 4139 1219 4289 4152 1220 4290 4158 1205 4291 4290 1199 4292 4258 882 4293 4139 1219 4294 4145 1200 4295 4158 1205 4296 4152 1220 4297 4204 1187 4298 4219 1185 4299 4154 1218 4300 4157 1217 4301 4218 1177 4302 4205 1193 4303 4329 1221 4304 4165 1222 4305 4180 1223 4306 4226 1224 4307 4254 912 4308 4245 1190 4309 4289 1189 4310 4563 877 4311 4269 1188 4312 4204 1187 4313 4163 1225 4314 4183 1226 4315 4394 1210 4316 4383 1209 4317 4384 1227 4318 4390 1216 4319 4205 1193 4320 4164 1213 4321 4155 1212 4322 4154 1218 4323 4268 878 4324 4259 1184 4325 4169 1183 4326 4445 1228 4327 4263 1229 4328 4274 1204 4329 4188 1230 4330 4177 1231 4331 4183 1226 4332 4187 1232 4333 4273 1203 4334 4269 1188 4335 4396 1233 4336 4391 1215 4337 4184 1234 4338 4185 1235 4339 4390 1216 4340 4384 1227 4341 4233 1196 4342 4216 1195 4343 4562 1236 4344 4288 1211 4345 4287 1198 4346 4561 1237 4347 4323 1238 4348 4398 1239 4349 4255 1240 4350 4248 1241 4351 4350 935 4352 4290 1199 4353 4245 1190 4354 4254 912 4355 4396 1233 4356 4394 1210 4357 4390 1216 4358 4391 1215 4359 4259 1184 4360 4289 1189 4361 4144 1192 4362 4141 1181 4363 4337 1242 4364 4325 1243 4365 4263 1229 4366 4266 1244 4367 4269 1188 4368 4273 1203 4369 4400 1202 4370 4392 1186 4371 4226 1224 4372 4180 1223 4373 4176 1245 4374 4335 1246 4375 4250 1247 4376 4248 1241 4377 4325 1243 4378 4337 1242 4379 4163 1225 4380 4204 1187 4381 4152 1220 4382 4153 1248 4383 4335 1246 4384 4323 1238 4385 4248 1241 4386 4250 1247 4387 4403 1201 4388 4325 1243 4389 4248 1241 4390 4255 1240 4391 4157 1217 4392 4156 1206 4393 4201 1178 4394 4218 1177 4395 4391 1215 4396 4217 1214 4397 4164 1213 4398 4184 1234 4399 4186 1249 4400 4185 1235 4401 4271 1250 4402 4272 1251 4403 4156 1206 4404 4158 1205 4405 4219 1185 4406 4201 1178 4407 4257 1252 4408 4255 1240 4409 4398 1239 4410 4397 1253 4411 4255 1240 4412 4257 1252 4413 4400 1202 4414 4403 1201 4415 4257 1252 4416 4256 1179 4417 4392 1186 4418 4400 1202 4419 4267 883 4420 4258 882 4421 4290 1199 4422 4350 935 4423 4271 1250 4424 4270 1194 4425 4393 1180 4426 4397 1253 4427 4262 1254 4428 4272 1251 4429 4398 1239 4430 4323 1238 4431 4397 1253 4432 4393 1180 4433 4256 1179 4434 4257 1252 4435 4165 1222 4436 4227 1255 4437 4330 1256 4438 4328 1257 4439 4563 877 4440 4289 1189 4441 4259 1184 4442 4268 878 4443 4335 1246 4444 4176 1245 4445 4262 1254 4446 4323 1238 4447 4395 1207 4448 4165 1222 4449 4328 1257 4450 4314 1208 4451 4274 1204 4452 4263 1229 4453 4325 1243 4454 4403 1201 4455 4184 1234 4456 4164 1213 4457 4205 1193 4458 4270 1194 4459 4399 1258 4460 4395 1207 4461 4394 1210 4462 4396 1233 4463 4399 1258 4464 4180 1223 4465 4165 1222 4466 4395 1207 4467 4445 1228 4468 4169 1183 4469 4288 1211 4470 4562 1236 4471 4272 1251 4472 4271 1250 4473 4397 1253 4474 4398 1239 4475 4176 1245 4476 4186 1249 4477 4272 1251 4478 4262 1254 4479 4180 1223 4480 4399 1258 4481 4186 1249 4482 4176 1245 4483 4351 1197 4484 4092 1259 4485 4561 1237 4486 4287 1198 4487 4185 1235 4488 4184 1234 4489 4270 1194 4490 4271 1250 4491 4399 1258 4492 4396 1233 4493 4185 1235 4494 4186 1249 4495 4274 1204 4496 4273 1203 4497 4187 1232 4498 4188 1230 4499 4155 1212 4500 4142 1182 4501 4141 1181 4502 4154 1218 4503 4329 1221 4504 4226 1224 4505 4202 1260 4506 4249 1261 4507 4312 1262 4508 4173 1263 4509 4175 1264 4510 4316 1265 4511 4343 1266 4512 4339 1267 4513 4340 1268 4514 4342 1269 4515 4384 1227 4516 4383 1209 4517 4236 1270 4518 4237 1271 4519 4297 1272 4520 4192 1273 4521 4193 1274 4522 4298 1275 4523 4313 1276 4524 4312 1262 4525 4326 1277 4526 4327 1278 4527 4377 1279 4528 4379 1280 4529 4239 1281 4530 4378 1282 4531 4298 1275 4532 4193 1274 4533 4198 1283 4534 4338 1284 4535 4326 1277 4536 4312 1262 4537 4316 1265 4538 4331 1285 4539 4241 1286 4540 4240 1287 4541 4381 1288 4542 4388 1289 4543 4309 1290 4544 4195 1291 4545 4196 1292 4546 4310 1293 4547 4173 1263 4548 4301 1294 4549 4303 1295 4550 4260 1296 4551 4387 1297 4552 4382 1298 4553 4240 1287 4554 4241 1286 4555 4222 1299 4556 4236 1270 4557 4383 1209 4558 4314 1208 4559 4386 1300 4560 4381 1288 4561 4379 1280 4562 4311 1301 4563 4220 1302 4564 4298 1275 4565 4221 1303 4566 4313 1276 4567 4378 1282 4568 4235 1304 4569 4376 1305 4570 4377 1279 4571 4382 1298 4572 4378 1282 4573 4239 1281 4574 4240 1287 4575 4456 1306 4576 4234 1307 4577 4378 1282 4578 4243 1308 4579 4332 1309 4580 4317 1310 4581 4246 1311 4582 4249 1261 4583 4335 1246 4584 4250 1247 4585 4202 1260 4586 4226 1224 4587 4247 1312 4588 4252 1313 4589 4344 1314 4590 4318 1315 4591 4174 1316 4592 4246 1311 4593 4170 1317 4594 4172 1318 4595 4378 1282 4596 4234 1307 4597 4088 1319 4598 4235 1304 4599 4386 1300 4600 4385 1320 4601 4372 1321 4602 4380 1322 4603 4261 1323 4604 4260 1296 4605 4308 1324 4606 4317 1310 4607 4202 1260 4608 4229 1325 4609 4332 1309 4610 4249 1261 4611 4329 1221 4612 4174 1316 4613 4178 1326 4614 4264 1327 4615 4315 1328 4616 4314 1208 4617 4328 1257 4618 4330 1256 4619 4386 1300 4620 4380 1322 4621 4388 1289 4622 4381 1288 4623 4244 1329 4624 4343 1266 4625 4252 1313 4626 4247 1312 4627 4250 1247 4628 4337 1242 4629 4229 1325 4630 4202 1260 4631 4299 1330 4632 4220 1302 4633 4224 1331 4634 4291 1332 4635 4200 1333 4636 4233 1196 4637 4384 1227 4638 4237 1271 4639 4253 1334 4640 4252 1313 4641 4343 1266 4642 4342 1269 4643 4231 1335 4644 4203 1336 4645 4253 1334 4646 4342 1269 4647 4090 1337 4648 4089 1338 4649 4375 1339 4650 4346 1340 4651 4382 1298 4652 4284 1341 4653 4243 1308 4654 4378 1282 4655 4456 1306 4656 4092 1259 4657 4351 1197 4658 4234 1307 4659 4090 1337 4660 4087 1342 4661 4195 1291 4662 4309 1290 4663 4346 1340 4664 4194 1343 4665 4087 1342 4666 4090 1337 4667 4088 1319 4668 4089 1338 4669 4376 1305 4670 4235 1304 4671 4234 1307 4672 4375 1339 4673 4089 1338 4674 4088 1319 4675 4224 1331 4676 4321 1344 4677 4292 1345 4678 4291 1332 4679 4165 1222 4680 4329 1221 4681 4264 1327 4682 4227 1255 4683 4167 1346 4684 4307 1347 4685 4172 1318 4686 4170 1317 4687 4307 1347 4688 4167 1346 4689 4275 1348 4690 4306 1349 4691 4247 1312 4692 4167 1346 4693 4171 1350 4694 4244 1329 4695 4309 1290 4696 4376 1305 4697 4089 1338 4698 4090 1337 4699 4167 1346 4700 4247 1312 4701 4318 1315 4702 4275 1348 4703 4304 1351 4704 4312 1262 4705 4313 1276 4706 4221 1303 4707 4244 1329 4708 4171 1350 4709 4303 1295 4710 4300 1352 4711 4227 1255 4712 4264 1327 4713 4178 1326 4714 4330 1256 4715 4300 1352 4716 4302 1353 4717 4305 1354 4718 4339 1267 4719 4308 1324 4720 4171 1350 4721 4167 1346 4722 4170 1317 4723 4298 1275 4724 4220 1302 4725 4299 1330 4726 4297 1272 4727 4330 1256 4728 4178 1326 4729 4174 1316 4730 4315 1328 4731 4224 1331 4732 4327 1278 4733 4225 1355 4734 4334 1356 4735 4327 1278 4736 4224 1331 4737 4220 1302 4738 4313 1276 4739 4303 1295 4740 4301 1294 4741 4302 1353 4742 4300 1352 4743 4339 1267 4744 4305 1354 4745 4304 1351 4746 4340 1268 4747 4179 1357 4748 4166 1358 4749 4228 1359 4750 4331 1285 4751 4265 1360 4752 4206 1361 4753 4166 1358 4754 4179 1357 4755 4223 1362 4756 4225 1355 4757 4327 1278 4758 4326 1277 4759 4175 1264 4760 4173 1263 4761 4260 1296 4762 4261 1323 4763 4179 1357 4764 4175 1264 4765 4261 1323 4766 4265 1360 4767 4275 1348 4768 4222 1299 4769 4314 1208 4770 4306 1349 4771 4311 1301 4772 4197 1363 4773 4189 1364 4774 4242 1365 4775 4242 1365 4776 4189 1364 4777 4191 1366 4778 4299 1330 4779 4341 1367 4780 4199 1368 4781 4190 1369 4782 4251 1370 4783 4251 1370 4784 4190 1369 4785 4194 1343 4786 4346 1340 4787 4299 1330 4788 4191 1366 4789 4192 1273 4790 4297 1272 4791 4310 1293 4792 4196 1292 4793 4197 1363 4794 4311 1301 4795 4338 1284 4796 4198 1283 4797 4199 1368 4798 4341 1367 4799 4385 1320 4800 4242 1365 4801 4299 1330 4802 4291 1332 4803 4240 1287 4804 4239 1281 4805 4379 1280 4806 4381 1288 4807 4377 1279 4808 4376 1305 4809 4309 1290 4810 4310 1293 4811 4333 1371 4812 4334 1356 4813 4225 1355 4814 4223 1362 4815 4341 1367 4816 4251 1370 4817 4203 1336 4818 4231 1335 4819 4203 1336 4820 4232 1372 4821 4345 1373 4822 4253 1334 4823 4251 1370 4824 4346 1340 4825 4232 1372 4826 4203 1336 4827 4331 1285 4828 4316 1265 4829 4175 1264 4830 4179 1357 4831 4229 1325 4832 4206 1361 4833 4265 1360 4834 4332 1309 4835 4337 1242 4836 4266 1244 4837 4206 1361 4838 4229 1325 4839 4222 1299 4840 4275 1348 4841 4318 1315 4842 4319 1374 4843 4340 1268 4844 4304 1351 4845 4221 1303 4846 4230 1375 4847 4319 1374 4848 4352 1376 4849 4236 1270 4850 4222 1299 4851 4234 1307 4852 4351 1197 4853 4233 1196 4854 4200 1333 4855 4228 1359 4856 4223 1362 4857 4326 1277 4858 4331 1285 4859 4342 1269 4860 4340 1268 4861 4230 1375 4862 4231 1335 4863 4238 1377 4864 4232 1372 4865 4346 1340 4866 4375 1339 4867 4374 1378 4868 4345 1373 4869 4232 1372 4870 4238 1377 4871 4237 1271 4872 4236 1270 4873 4352 1376 4874 4374 1378 4875 4386 1300 4876 4311 1301 4877 4242 1365 4878 4385 1320 4879 4377 1279 4880 4310 1293 4881 4311 1301 4882 4379 1280 4883 4317 1310 4884 4308 1324 4885 4170 1317 4886 4246 1311 4887 4249 1261 4888 4246 1311 4889 4174 1316 4890 4329 1221 4891 4230 1375 4892 4221 1303 4893 4298 1275 4894 4338 1284 4895 4345 1373 4896 4344 1314 4897 4252 1313 4898 4253 1334 4899 4306 1349 4900 4314 1208 4901 4315 1328 4902 4307 1347 4903 4265 1360 4904 4261 1323 4905 4317 1310 4906 4332 1309 4907 4339 1267 4908 4343 1266 4909 4244 1329 4910 4300 1352 4911 4344 1314 4912 4352 1376 4913 4319 1374 4914 4318 1315 4915 4352 1376 4916 4344 1314 4917 4345 1373 4918 4374 1378 4919 4307 1347 4920 4315 1328 4921 4174 1316 4922 4172 1318 4923 4375 1339 4924 4234 1307 4925 4200 1333 4926 4238 1377 4927 4238 1377 4928 4200 1333 4929 4237 1271 4930 4374 1378 4931 4312 1262 4932 4302 1353 4933 4301 1294 4934 4173 1263 4935 4302 1353 4936 4312 1262 4937 4304 1351 4938 4305 1354 4939 4260 1296 4940 4303 1295 4941 4171 1350 4942 4308 1324 4943 4231 1335 4944 4230 1375 4945 4338 1284 4946 4341 1367 4947 4367 1379 4948 4364 1380 4949 4368 1381 4950 4369 1382 4951 4285 1383 4952 4284 1341 4953 4382 1298 4954 4387 1297 4955 4372 1321 4956 4370 1384 4957 4371 1385 4958 4373 1386 4959 4363 1387 4960 4362 1388 4961 4368 1381 4962 4364 1380 4963 4365 1389 4964 4363 1387 4965 4364 1380 4966 4367 1379 4967 4385 1320 4968 4366 1390 4969 4370 1384 4970 4372 1321 4971 4366 1390 4972 4365 1389 4973 4367 1379 4974 4370 1384 4975 4370 1384 4976 4367 1379 4977 4369 1382 4978 4371 1385 4979 4372 1321 4980 4373 1386 4981 4388 1289 4982 4380 1322 4983 4373 1386 4984 4371 1385 4985 4213 1391 4986 4214 1392 4987 4773 1393 4988 4454 1394 4989 4555 1395 4990 4560 1396 4991 4281 1397 4992 4280 1398 4993 4559 1399 4994 4348 1400 4995 4293 948 4996 4553 924 4997 4554 1401 4998 4558 1402 4999 4555 1395 5000 4454 1394 5001 4455 1403 5002 4285 1383 5003 4210 1404 5004 4279 1405 5005 4280 1398 5006 4211 1406 5007 4241 1286 5008 4214 1392 5009 4283 1407 5010 4387 1297 5011 4388 1289 5012 4373 1386 5013 4214 1392 5014 4241 1286 5015 4368 1381 5016 4362 1388 5017 4210 1404 5018 4211 1406 5019 4213 1391 5020 4212 1408 5021 4281 1397 5022 4282 1409 5023 4371 1385 5024 4369 1382 5025 4212 1408 5026 4213 1391 5027 4212 1408 5028 4211 1406 5029 4280 1398 5030 4281 1397 5031 4369 1382 5032 4368 1381 5033 4211 1406 5034 4212 1408 5035 4214 1392 5036 4213 1391 5037 4282 1409 5038 4283 1407 5039 4387 1297 5040 4283 1407 5041 4555 1395 5042 4285 1383 5043 4560 1396 5044 4555 1395 5045 4283 1407 5046 4282 1409 5047 4280 1398 5048 4279 1405 5049 4558 1402 5050 4559 1399 5051 4282 1409 5052 4281 1397 5053 4348 1400 5054 4560 1396 5055 4389 1410 5056 4401 1411 5057 4187 1232 5058 4183 1226 5059 4188 1230 5060 4187 1232 5061 4401 1411 5062 4402 1412 5063 4294 1413 5064 4354 1414 5065 4208 1415 5066 4162 1416 5067 4353 1417 5068 4355 1418 5069 4209 1419 5070 4207 1420 5071 4362 1388 5072 4294 1413 5073 4162 1416 5074 4210 1404 5075 4354 1414 5076 4353 1417 5077 4207 1420 5078 4208 1415 5079 4336 1421 5080 4333 1371 5081 4223 1362 5082 4228 1359 5083 4360 1422 5084 4295 1423 5085 4292 1345 5086 4321 1344 5087 4148 1424 5088 4146 1425 5089 4149 1426 5090 4277 1427 5091 4361 1428 5092 4354 1414 5093 4294 1413 5094 4296 1429 5095 4347 937 5096 4556 884 5097 4277 1427 5098 4278 1430 5099 4279 1405 5100 4210 1404 5101 4162 1416 5102 4150 1431 5103 4361 1428 5104 4296 1429 5105 4295 1423 5106 4360 1422 5107 4358 1432 5108 4356 1433 5109 4355 1418 5110 4353 1417 5111 4138 1434 5112 4140 1435 5113 4168 881 5114 4286 1436 5115 4359 1437 5116 4357 1438 5117 4356 1433 5118 4358 1432 5119 4151 1439 5120 4153 1248 5121 4140 1435 5122 4138 1434 5123 4359 1437 5124 4322 1440 5125 4320 1441 5126 4357 1438 5127 4146 1425 5128 4148 1424 5129 4150 1431 5130 4159 1442 5131 4334 1356 5132 4333 1371 5133 4320 1441 5134 4322 1440 5135 4153 1248 5136 4152 1220 5137 4139 1219 5138 4140 1435 5139 4149 1426 5140 4147 1443 5141 4278 1430 5142 4277 1427 5143 4150 1431 5144 4148 1424 5145 4276 1444 5146 4279 1405 5147 4140 1435 5148 4139 1219 5149 4258 882 5150 4168 881 5151 4148 1424 5152 4277 1427 5153 4556 884 5154 4557 887 5155 4208 1415 5156 4207 1420 5157 4161 1445 5158 4159 1442 5159 4161 1445 5160 4160 1446 5161 4147 1443 5162 4149 1426 5163 4166 1358 5164 4181 1447 5165 4336 1421 5166 4228 1359 5167 4177 1231 5168 4188 1230 5169 4402 1412 5170 4324 1448 5171 4355 1418 5172 4389 1410 5173 4215 1449 5174 4209 1419 5175 4557 887 5176 4293 948 5177 4276 1444 5178 4148 1424 5179 4279 1405 5180 4276 1444 5181 4293 948 5182 4558 1402 5183 4278 1430 5184 4286 1436 5185 4349 949 5186 4347 937 5187 4159 1442 5188 4161 1445 5189 4149 1426 5190 4146 1425 5191 4363 1387 5192 4365 1389 5193 4295 1423 5194 4296 1429 5195 4324 1448 5196 4320 1441 5197 4333 1371 5198 4336 1421 5199 4402 1412 5200 4357 1438 5201 4320 1441 5202 4324 1448 5203 4322 1440 5204 4321 1344 5205 4224 1331 5206 4334 1356 5207 4358 1432 5208 4353 1417 5209 4354 1414 5210 4361 1428 5211 4366 1390 5212 4385 1320 5213 4291 1332 5214 4292 1345 5215 4147 1443 5216 4138 1434 5217 4286 1436 5218 4278 1430 5219 4365 1389 5220 4366 1390 5221 4292 1345 5222 4295 1423 5223 4160 1446 5224 4151 1439 5225 4138 1434 5226 4147 1443 5227 4296 1429 5228 4294 1413 5229 4362 1388 5230 4363 1387 5231 4215 1449 5232 4163 1225 5233 4153 1248 5234 4151 1439 5235 4162 1416 5236 4208 1415 5237 4159 1442 5238 4150 1431 5239 4207 1420 5240 4209 1419 5241 4160 1446 5242 4161 1445 5243 4209 1419 5244 4215 1449 5245 4151 1439 5246 4160 1446 5247 4359 1437 5248 4360 1422 5249 4321 1344 5250 4322 1440 5251 4183 1226 5252 4163 1225 5253 4215 1449 5254 4389 1410 5255 4356 1433 5256 4401 1411 5257 4389 1410 5258 4355 1418 5259 4206 1361 5260 4266 1244 5261 4181 1447 5262 4166 1358 5263 4402 1412 5264 4401 1411 5265 4356 1433 5266 4357 1438 5267 4349 949 5268 4286 1436 5269 4168 881 5270 4182 880 5271 4359 1437 5272 4358 1432 5273 4361 1428 5274 4360 1422 5275 4181 1447 5276 4177 1231 5277 4324 1448 5278 4336 1421 5279 4266 1244 5280 4263 1229 5281 4177 1231 5282 4181 1447 5283 4529 1450 5284 4802 1451 5285 4526 1452 5286 4524 1453 5287 4526 1452 5288 4525 974 5289 4770 1026 5290 4800 1454 5291 4524 1453 5292 4526 1452 5293 4800 1454 5294 4669 1455 5295 4802 1451 5296 4769 971 5297 4525 974 5298 4526 1452 5299 4802 1451 5300 4529 1450 5301 4076 1456 5302 4066 1457 5303 4802 1451 5304 4066 1457 5305 4071 998 5306 4769 971 5307 4800 1454 5308 4770 1026 5309 4772 1021 5310 4768 1458 5311 4800 1454 5312 4768 1458 5313 4670 1459 5314 4669 1455 5315 6425 1460 5316 6427 1461 5317 6435 1462 5318 6590 1463 5319 6437 1464 5320 6438 1465 5321 6427 1461 5322 6425 1460 5323 6452 1466 5324 6443 1467 5325 6439 1468 5326 6451 1469 5327 6399 1470 5328 6395 1471 5329 6393 1472 5330 6427 1461 5331 6402 1473 5332 6400 1474 5333 6399 1470 5334 6401 1475 5335 6452 1466 5336 6450 1476 5337 6444 1477 5338 6443 1467 5339 6428 1478 5340 6426 1479 5341 6587 1480 5342 6585 1481 5343 6583 1482 5344 6436 1483 5345 6426 1479 5346 6428 1478 5347 6426 1479 5348 6425 1460 5349 6590 1463 5350 6587 1480 5351 6436 1483 5352 6437 1464 5353 6425 1460 5354 6426 1479 5355 6444 1477 5356 6398 1484 5357 6401 1475 5358 6438 1465 5359 6439 1468 5360 6442 1485 5361 6441 1486 5362 6440 1487 5363 6438 1465 5364 6401 1475 5365 6399 1470 5366 6427 1461 5367 6443 1467 5368 6444 1477 5369 6442 1485 5370 6439 1468 5371 6441 1486 5372 6436 1483 5373 6583 1482 5374 6466 1488 5375 6442 1485 5376 6437 1464 5377 6436 1483 5378 6441 1486 5379 6444 1477 5380 6438 1465 5381 6437 1464 5382 6442 1485 5383 6440 1487 5384 6441 1486 5385 6466 1488 5386 6582 1489 5387 6451 1469 5388 6439 1468 5389 6440 1487 5390 6453 1490 5391 6585 1481 5392 6587 1480 5393 6586 1491 5394 6584 1492 5395 6587 1480 5396 6590 1463 5397 6589 1493 5398 6586 1491 5399 6590 1463 5400 6435 1462 5401 6588 1494 5402 6589 1493 5403 6588 1494 5404 6435 1462 5405 6427 1461 5406 6393 1472 5407 6459 1495 5408 6572 1496 5409 6571 1497 5410 6458 1498 5411 6562 1499 5412 6459 1495 5413 6458 1498 5414 6561 1500 5415 6563 1501 5416 6460 1502 5417 6459 1495 5418 6562 1499 5419 6564 1503 5420 6461 1504 5421 6460 1502 5422 6563 1501 5423 6588 1494 5424 6564 1503 5425 6563 1501 5426 6589 1493 5427 6589 1493 5428 6563 1501 5429 6562 1499 5430 6586 1491 5431 6586 1491 5432 6562 1499 5433 6561 1500 5434 6584 1492 5435 6460 1502 5436 6568 1505 5437 6572 1496 5438 6459 1495 5439 6461 1504 5440 6566 1506 5441 6568 1505 5442 6460 1502 5443 6566 1506 5444 6565 1507 5445 6567 1508 5446 6568 1505 5447 6568 1505 5448 6567 1508 5449 6569 1509 5450 6572 1496 5451 6572 1496 5452 6569 1509 5453 6570 1510 5454 6571 1497 5455 6581 1511 5456 6554 1512 5457 6555 1513 5458 6573 1514 5459 6558 1515 5460 6434 1516 5461 6455 1517 5462 6456 1518 5463 6555 1513 5464 6554 1512 5465 6457 1519 5466 6456 1518 5467 6560 1520 5468 6559 1521 5469 6557 1522 5470 6558 1515 5471 6560 1520 5472 6558 1515 5473 6456 1518 5474 6457 1519 5475 6558 1515 5476 6557 1522 5477 6556 1523 5478 6434 1516 5479 6561 1500 5480 6458 1498 5481 6457 1519 5482 6554 1512 5483 6584 1492 5484 6561 1500 5485 6554 1512 5486 6581 1511 5487 6458 1498 5488 6571 1497 5489 6560 1520 5490 6457 1519 5491 6571 1497 5492 6570 1510 5493 6559 1521 5494 6560 1520 5495 6544 1524 5496 6543 1525 5497 6541 1526 5498 6535 1527 5499 6543 1525 5500 6542 1528 5501 6538 1529 5502 6541 1526 5503 6541 1526 5504 6538 1529 5505 6539 1530 5506 6540 1531 5507 6544 1524 5508 6547 1532 5509 6549 1533 5510 6543 1525 5511 6545 1534 5512 6546 1535 5513 6547 1532 5514 6544 1524 5515 6552 1536 5516 6547 1532 5517 6546 1535 5518 6553 1537 5519 6551 1538 5520 6549 1533 5521 6547 1532 5522 6552 1536 5523 6533 1539 5524 6545 1534 5525 6544 1524 5526 6535 1527 5527 6550 1540 5528 6548 1541 5529 6549 1533 5530 6551 1538 5531 6565 1507 5532 6550 1540 5533 6551 1538 5534 6567 1508 5535 6567 1508 5536 6551 1538 5537 6552 1536 5538 6569 1509 5539 6569 1509 5540 6552 1536 5541 6553 1537 5542 6570 1510 5543 6535 1527 5544 6541 1526 5545 6540 1531 5546 6534 1542 5547 6543 1525 5548 6549 1533 5549 6548 1541 5550 6542 1528 5551 6535 1527 5552 6534 1542 5553 6392 1543 5554 6533 1539 5555 6384 1544 5556 6382 1545 5557 6381 1546 5558 6383 1547 5559 6526 1548 5560 6525 1549 5561 6529 1550 5562 6528 1551 5563 6545 1534 5564 6533 1539 5565 6392 1543 5566 6524 1552 5567 6526 1548 5568 6524 1552 5569 6392 1543 5570 6383 1547 5571 6526 1548 5572 6383 1547 5573 6381 1546 5574 6525 1549 5575 6528 1551 5576 6527 1553 5577 6524 1552 5578 6526 1548 5579 6532 1554 5580 6527 1553 5581 6528 1551 5582 6531 1555 5583 6559 1521 5584 6532 1554 5585 6531 1555 5586 6557 1522 5587 6545 1534 5588 6524 1552 5589 6527 1553 5590 6546 1535 5591 6553 1537 5592 6546 1535 5593 6527 1553 5594 6532 1554 5595 6531 1555 5596 6528 1551 5597 6529 1550 5598 6530 1556 5599 6570 1510 5600 6553 1537 5601 6532 1554 5602 6559 1521 5603 6534 1542 5604 6384 1544 5605 6383 1547 5606 6392 1543 5607 6557 1522 5608 6531 1555 5609 6530 1556 5610 6556 1523 5611 4767 1557 5612 4771 1022 5613 4721 1005 5614 4720 1558 5615 4768 1458 5616 4772 1021 5617 4771 1022 5618 4767 1557 5619 4721 1005 5620 4515 1004 5621 4514 1559 5622 4720 1558 5623 4117 1560 5624 4119 1561 5625 4707 1562 5626 4510 1019 5627 4132 1563 5628 4130 1009 5629 4509 1010 5630 4512 1564 5631 4514 1559 5632 4515 1004 5633 4130 1009 5634 4132 1563 5635 4707 1562 5636 4512 1564 5637 4509 1010 5638 4510 1019 5639 6511 1565 5640 6447 1566 5641 6506 1567 5642 6518 1568 5643 6446 1569 5644 6450 1476 5645 6449 1570 5646 6445 1571 5647 6514 1572 5648 6394 1573 5649 6396 1574 5650 6400 1474 5651 6517 1575 5652 6512 1576 5653 6511 1565 5654 6518 1568 5655 6400 1474 5656 6396 1574 5657 6395 1471 5658 6399 1470 5659 6450 1476 5660 6446 1569 5661 6402 1473 5662 6397 1577 5663 6450 1476 5664 6397 1577 5665 6398 1484 5666 6444 1477 5667 6401 1475 5668 6398 1484 5669 6397 1577 5670 6402 1473 5671 6448 1578 5672 6453 1490 5673 6464 1579 5674 6504 1580 5675 6514 1572 5676 6400 1474 5677 6402 1473 5678 6446 1569 5679 6578 1581 5680 6577 1582 5681 6465 1583 5682 6574 1584 5683 6523 1585 5684 6519 1586 5685 6507 1587 5686 6505 1588 5687 6577 1582 5688 6523 1585 5689 6505 1588 5690 6465 1583 5691 6522 1589 5692 6507 1587 5693 6519 1586 5694 6520 1590 5695 6445 1571 5696 6449 1570 5697 6448 1578 5698 6447 1566 5699 6519 1586 5700 6523 1585 5701 6599 1591 5702 6602 1592 5703 6523 1585 5704 6577 1582 5705 6595 1593 5706 6599 1591 5707 6522 1589 5708 6520 1590 5709 6510 1594 5710 6521 1595 5711 6514 1572 5712 6446 1569 5713 6445 1571 5714 6515 1596 5715 6515 1596 5716 6445 1571 5717 6447 1566 5718 6511 1565 5719 6447 1566 5720 6448 1578 5721 6504 1580 5722 6506 1567 5723 6450 1476 5724 6452 1466 5725 6451 1469 5726 6449 1570 5727 6449 1570 5728 6451 1469 5729 6453 1490 5730 6448 1578 5731 6504 1580 5732 6464 1579 5733 6465 1583 5734 6505 1588 5735 6440 1487 5736 6582 1489 5737 6464 1579 5738 6453 1490 5739 6464 1579 5740 6582 1489 5741 6574 1584 5742 6465 1583 5743 6506 1567 5744 6504 1580 5745 6505 1588 5746 6507 1587 5747 6520 1590 5748 6519 1586 5749 6602 1592 5750 6508 1597 5751 6518 1568 5752 6506 1567 5753 6507 1587 5754 6522 1589 5755 6509 1598 5756 6510 1594 5757 6520 1590 5758 6508 1597 5759 6514 1572 5760 6513 1599 5761 6493 1600 5762 6394 1573 5763 6512 1576 5764 6516 1601 5765 6515 1596 5766 6511 1565 5767 6516 1601 5768 6513 1599 5769 6514 1572 5770 6515 1596 5771 6521 1595 5772 6517 1575 5773 6518 1568 5774 6522 1589 5775 6501 1602 5776 6500 1603 5777 4670 1459 5778 4671 1604 5779 6502 1605 5780 6601 1606 5781 6598 1607 5782 6500 1603 5783 4669 1455 5784 6598 1607 5785 4523 1608 5786 4524 1453 5787 6501 1602 5788 6503 1609 5789 6502 1605 5790 6500 1603 5791 6508 1597 5792 6602 1592 5793 6601 1606 5794 6502 1605 5795 6503 1609 5796 6509 1598 5797 6508 1597 5798 6502 1605 5799 4669 1455 5800 4670 1459 5801 6500 1603 5802 6598 1607 5803 6496 1610 5804 6495 1611 5805 6512 1576 5806 6517 1575 5807 6496 1610 5808 6418 1612 5809 6417 1613 5810 6495 1611 5811 6491 1614 5812 6492 1615 5813 6406 1616 5814 6407 1617 5815 6497 1618 5816 6496 1610 5817 6517 1575 5818 6521 1595 5819 6495 1611 5820 6494 1619 5821 6516 1601 5822 6512 1576 5823 6494 1619 5824 6493 1600 5825 6513 1599 5826 6516 1601 5827 6521 1595 5828 6510 1594 5829 6498 1620 5830 6497 1618 5831 6499 1621 5832 6420 1622 5833 6419 1623 5834 6498 1620 5835 6499 1621 5836 6498 1620 5837 6510 1594 5838 6509 1598 5839 6495 1611 5840 6417 1613 5841 6416 1624 5842 6494 1619 5843 6494 1619 5844 6416 1624 5845 6415 1625 5846 6493 1600 5847 6497 1618 5848 6414 1626 5849 6418 1612 5850 6496 1610 5851 6498 1620 5852 6419 1623 5853 6414 1626 5854 6497 1618 5855 6486 1627 5856 6487 1628 5857 6408 1629 5858 6409 1630 5859 6409 1630 5860 6408 1629 5861 6419 1623 5862 6420 1622 5863 6487 1628 5864 6491 1614 5865 6407 1617 5866 6408 1629 5867 6408 1629 5868 6407 1617 5869 6414 1626 5870 6419 1623 5871 6407 1617 5872 6406 1616 5873 6418 1612 5874 6414 1626 5875 6406 1616 5876 6405 1631 5877 6417 1613 5878 6418 1612 5879 6405 1631 5880 6404 1632 5881 6416 1624 5882 6417 1613 5883 6404 1632 5884 6403 1633 5885 6415 1625 5886 6416 1624 5887 6483 1634 5888 6482 1635 5889 6410 1636 5890 6411 1637 5891 6410 1636 5892 6409 1630 5893 6420 1622 5894 6413 1638 5895 6482 1635 5896 6486 1627 5897 6409 1630 5898 6410 1636 5899 4767 1557 5900 4720 1558 5901 4672 1639 5902 4671 1604 5903 4720 1558 5904 4514 1559 5905 4513 1640 5906 4672 1639 5907 4132 1563 5908 4131 1641 5909 4513 1640 5910 4514 1559 5911 4513 1640 5912 6412 1642 5913 6484 1643 5914 4672 1639 5915 4671 1604 5916 4672 1639 5917 6484 1643 5918 6501 1602 5919 6485 1644 5920 6499 1621 5921 6509 1598 5922 6503 1609 5923 6484 1643 5924 6485 1644 5925 6503 1609 5926 6501 1602 5927 6485 1644 5928 6413 1638 5929 6420 1622 5930 6499 1621 5931 6484 1643 5932 6412 1642 5933 6413 1638 5934 6485 1644 5935 4131 1641 5936 6411 1637 5937 6412 1642 5938 4513 1640 5939 4768 1458 5940 4767 1557 5941 4671 1604 5942 4670 1459 5943 6411 1637 5944 6410 1636 5945 6413 1638 5946 6412 1642 5947 6490 1645 5948 6489 1646 5949 6403 1633 5950 6404 1632 5951 6481 1647 5952 6391 1648 5953 6390 1649 5954 6480 1650 5955 6534 1542 5956 6540 1531 5957 6537 1651 5958 6479 1652 5959 6479 1652 5960 6537 1651 5961 6490 1645 5962 6488 1653 5963 6480 1650 5964 6479 1652 5965 6488 1653 5966 6492 1615 5967 6492 1615 5968 6488 1653 5969 6405 1631 5970 6406 1616 5971 6488 1653 5972 6490 1645 5973 6404 1632 5974 6405 1631 5975 6391 1648 5976 6389 1654 5977 6388 1655 5978 6390 1649 5979 6534 1542 5980 6479 1652 5981 6377 1656 5982 6384 1544 5983 6384 1544 5984 6377 1656 5985 6376 1657 5986 6382 1545 5987 6390 1649 5988 6388 1655 5989 6376 1657 5990 6377 1656 5991 6480 1650 5992 6390 1649 5993 6377 1656 5994 6479 1652 5995 6491 1614 5996 6487 1628 5997 6391 1648 5998 6481 1647 5999 6487 1628 6000 6486 1627 6001 6389 1654 6002 6391 1648 6003 6491 1614 6004 6481 1647 6005 6480 1650 6006 6492 1615 6007 6540 1531 6008 6539 1530 6009 6536 1658 6010 6537 1651 6011 6537 1651 6012 6536 1658 6013 6489 1646 6014 6490 1645 6015 6483 1634 6016 6477 1659 6017 6387 1660 6018 6482 1635 6019 4673 1661 6020 6483 1634 6021 6411 1637 6022 4131 1641 6023 6389 1654 6024 6387 1660 6025 6386 1662 6026 6388 1655 6027 6387 1660 6028 6477 1659 6029 6385 1663 6030 6386 1662 6031 6483 1634 6032 4673 1661 6033 4674 1664 6034 6477 1659 6035 6386 1662 6036 6385 1663 6037 6478 1665 6038 6375 1666 6039 4675 1667 6040 6478 1665 6041 6385 1663 6042 4118 1668 6043 6486 1627 6044 6482 1635 6045 6387 1660 6046 6389 1654 6047 4118 1668 6048 6385 1663 6049 6477 1659 6050 4674 1664 6051 4674 1664 6052 4673 1661 6053 4512 1564 6054 4707 1562 6055 4512 1564 6056 4673 1661 6057 4131 1641 6058 4132 1563 6059 6388 1655 6060 6386 1662 6061 6375 1666 6062 6376 1657 6063 4674 1664 6064 4707 1562 6065 4119 1561 6066 4118 1668 6067 6975 1669 6068 6976 1670 6069 7616 1671 6070 7615 1672 6071 7614 1673 6072 7618 1674 6073 6976 1670 6074 6975 1669 6075 3992 1675 6076 3993 1676 6077 4000 1677 6078 4001 1678 6079 6967 1679 6080 6966 1680 6081 6801 1681 6082 6788 1682 6083 3998 1683 6084 4001 1678 6085 4000 1677 6086 3999 1684 6087 3970 1685 6088 3968 1686 6089 3969 1687 6090 3971 1688 6091 7604 1689 6092 7603 1690 6093 7597 1691 6094 7599 1692 6095 3984 1693 6096 3985 1694 6097 3994 1695 6098 3995 1696 6099 3992 1675 6100 3995 1696 6101 3994 1695 6102 3993 1676 6103 3986 1697 6104 3991 1698 6105 3990 1699 6106 3989 1700 6107 3986 1697 6108 3989 1700 6109 3988 1701 6110 3987 1702 6111 7611 1703 6112 7614 1673 6113 7613 1704 6114 7612 1705 6115 3980 1706 6116 3981 1707 6117 7608 1708 6118 7607 1709 6119 3984 1693 6120 3995 1696 6121 7603 1690 6122 7604 1689 6123 3969 1687 6124 6788 1682 6125 7616 1671 6126 3997 1710 6127 7617 1711 6128 7591 1712 6129 7609 1713 6130 7610 1714 6131 3980 1706 6132 3983 1715 6133 3982 1716 6134 3981 1707 6135 3984 1693 6136 3981 1707 6137 3982 1716 6138 3985 1694 6139 3998 1683 6140 3999 1684 6141 3974 1717 6142 3975 1718 6143 7576 1719 6144 7574 1720 6145 6966 1680 6146 6967 1679 6147 3975 1718 6148 3974 1717 6149 3996 1721 6150 3997 1710 6151 7605 1722 6152 7597 1691 6153 7603 1690 6154 7601 1723 6155 7609 1713 6156 7591 1712 6157 7590 1724 6158 7575 1725 6159 3991 1698 6160 3973 1726 6161 3972 1727 6162 3990 1699 6163 7611 1703 6164 7612 1705 6165 7606 1728 6166 7605 1722 6167 3997 1710 6168 3996 1721 6169 3971 1688 6170 3969 1687 6171 3980 1706 6172 7607 1709 6173 7610 1714 6174 3987 1702 6175 7616 1671 6176 6788 1682 6177 6801 1681 6178 7615 1672 6179 3981 1707 6180 3984 1693 6181 7604 1689 6182 7608 1708 6183 3975 1718 6184 6976 1670 6185 7618 1674 6186 3998 1683 6187 3992 1675 6188 7601 1723 6189 7603 1690 6190 3995 1696 6191 3986 1697 6192 7609 1713 6193 7575 1725 6194 3991 1698 6195 3968 1686 6196 6967 1679 6197 6788 1682 6198 3969 1687 6199 3992 1675 6200 4001 1678 6201 7602 1729 6202 7601 1723 6203 3998 1683 6204 7618 1674 6205 7602 1729 6206 4001 1678 6207 7618 1674 6208 7614 1673 6209 7611 1703 6210 7602 1729 6211 3975 1718 6212 3997 1710 6213 7616 1671 6214 6976 1670 6215 3986 1697 6216 3987 1702 6217 7610 1714 6218 7609 1713 6219 7575 1725 6220 7590 1724 6221 6974 1730 6222 6973 1731 6223 3968 1686 6224 3978 1732 6225 7576 1719 6226 6967 1679 6227 7611 1703 6228 7605 1722 6229 7601 1723 6230 7602 1729 6231 3973 1726 6232 6973 1731 6233 7576 1719 6234 3978 1732 6235 3979 1733 6236 3978 1732 6237 3968 1686 6238 3970 1685 6239 3980 1706 6240 3987 1702 6241 3988 1701 6242 3983 1715 6243 3973 1726 6244 3991 1698 6245 7575 1725 6246 6973 1731 6247 6973 1731 6248 6974 1730 6249 7574 1720 6250 7576 1719 6251 3979 1733 6252 3972 1727 6253 3973 1726 6254 3978 1732 6255 7615 1672 6256 7573 1734 6257 6972 1735 6258 6975 1669 6259 6975 1669 6260 6972 1735 6261 7613 1704 6262 7614 1673 6263 7597 1691 6264 7593 1736 6265 7353 1737 6266 7350 1738 6267 7340 1739 6268 7341 1740 6269 7379 1741 6270 7378 1742 6271 6951 1743 6272 6950 1744 6273 6940 1745 6274 6939 1746 6275 7361 1747 6276 7359 1748 6277 7358 1749 6278 7360 1750 6279 7626 1751 6280 6955 1752 6281 6956 1753 6282 7625 1754 6283 7596 1755 6284 7352 1756 6285 7354 1757 6286 7587 1758 6287 7592 1759 6288 7368 1760 6289 7371 1761 6290 7355 1762 6291 6950 1744 6292 6946 1763 6293 6942 1764 6294 6940 1745 6295 7600 1765 6296 7595 1766 6297 7362 1767 6298 6770 1768 6299 7380 1769 6300 7364 1770 6301 7365 1771 6302 7381 1772 6303 7587 1758 6304 7354 1757 6305 7370 1773 6306 7369 1774 6307 7378 1742 6308 7302 1775 6309 6941 1776 6310 7340 1739 6311 7600 1765 6312 7356 1777 6313 7359 1748 6314 7595 1766 6315 7352 1756 6316 7351 1778 6317 7350 1738 6318 7353 1737 6319 6955 1752 6320 6950 1744 6321 6951 1743 6322 6956 1753 6323 7381 1772 6324 7366 1779 6325 7342 1780 6326 6772 1781 6327 7354 1757 6328 7352 1756 6329 7353 1737 6330 7355 1762 6331 7364 1770 6332 7363 1782 6333 7362 1767 6334 7365 1771 6335 7373 1783 6336 7366 1779 6337 7586 1784 6338 7361 1747 6339 7380 1769 6340 6773 1785 6341 7268 1786 6342 7263 1787 6343 7598 1788 6344 6771 1789 6345 7266 1790 6346 7267 1791 6347 7625 1754 6348 6956 1753 6349 6957 1792 6350 7631 1793 6351 7359 1748 6352 7356 1777 6353 7357 1794 6354 7358 1749 6355 7288 1795 6356 7270 1796 6357 7268 1786 6358 6773 1785 6359 7626 1751 6360 7625 1754 6361 7623 1797 6362 7589 1798 6363 7585 1799 6364 7284 1800 6365 7282 1801 6366 7338 1802 6367 7496 1803 6368 7338 1802 6369 7282 1801 6370 7281 1804 6371 7608 1708 6372 7604 1689 6373 7599 1692 6374 7600 1765 6375 7288 1795 6376 6773 1785 6377 6772 1781 6378 6789 1805 6379 7285 1806 6380 7283 1807 6381 7268 1786 6382 7270 1796 6383 6946 1763 6384 6945 1808 6385 6935 1809 6386 6942 1764 6387 7600 1765 6388 7599 1692 6389 7357 1794 6390 7356 1777 6391 6952 1810 6392 6951 1743 6393 6939 1746 6394 6938 1811 6395 6945 1808 6396 6785 1812 6397 6786 1813 6398 6775 1814 6399 7585 1799 6400 7338 1802 6401 7301 1815 6402 6962 1816 6403 7598 1788 6404 7267 1791 6405 7262 1817 6406 7594 1818 6407 7283 1807 6408 7260 1819 6409 7263 1787 6410 7268 1786 6411 7270 1796 6412 7269 1820 6413 7286 1821 6414 7285 1806 6415 7628 1822 6416 7621 1823 6417 7312 1824 6418 7311 1825 6419 7599 1692 6420 7596 1755 6421 7358 1749 6422 7357 1794 6423 6945 1808 6424 6775 1814 6425 6776 1826 6426 6935 1809 6427 7593 1736 6428 7592 1759 6429 7355 1762 6430 7353 1737 6431 7595 1766 6432 7359 1748 6433 7361 1747 6434 7586 1784 6435 7381 1772 6436 7365 1771 6437 7586 1784 6438 7366 1779 6439 7596 1755 6440 7587 1758 6441 7360 1750 6442 7358 1749 6443 7624 1827 6444 7627 1828 6445 7379 1741 6446 7377 1829 6447 7627 1828 6448 7628 1822 6449 7378 1742 6450 7379 1741 6451 7364 1770 6452 7264 1830 6453 7265 1831 6454 7363 1782 6455 6935 1809 6456 6776 1826 6457 6774 1832 6458 6790 1833 6459 7624 1827 6460 7377 1829 6461 7367 1834 6462 7619 1835 6463 7587 1758 6464 7369 1774 6465 7372 1836 6466 7360 1750 6467 7374 1837 6468 6962 1816 6469 6785 1812 6470 6784 1838 6471 7594 1818 6472 7262 1817 6473 7261 1839 6474 7588 1840 6475 6939 1746 6476 6794 1841 6477 6793 1842 6478 6938 1811 6479 7588 1840 6480 7261 1839 6481 7260 1819 6482 7376 1843 6483 7623 1797 6484 7594 1818 6485 7588 1840 6486 7589 1798 6487 7370 1773 6488 7354 1757 6489 7355 1762 6490 7371 1761 6491 7264 1830 6492 7263 1787 6493 7260 1819 6494 7261 1839 6495 6946 1763 6496 6784 1838 6497 6785 1812 6498 6945 1808 6499 7376 1843 6500 7284 1800 6501 7585 1799 6502 7375 1844 6503 7595 1766 6504 7586 1784 6505 7365 1771 6506 7362 1767 6507 7285 1806 6508 7282 1801 6509 7284 1800 6510 7283 1807 6511 7626 1751 6512 7374 1837 6513 6784 1838 6514 6955 1752 6515 7344 1845 6516 7577 1846 6517 7368 1760 6518 7367 1834 6519 7599 1692 6520 7351 1778 6521 7352 1756 6522 7596 1755 6523 7286 1821 6524 7281 1804 6525 7282 1801 6526 7285 1806 6527 6940 1745 6528 6795 1847 6529 6794 1841 6530 6939 1746 6531 7619 1835 6532 7367 1834 6533 7368 1760 6534 7592 1759 6535 6942 1764 6536 6796 1848 6537 6795 1847 6538 6940 1745 6539 7363 1782 6540 6771 1789 6541 6770 1768 6542 7362 1767 6543 6942 1764 6544 6935 1809 6545 6790 1833 6546 6796 1848 6547 7363 1782 6548 7265 1831 6549 7266 1790 6550 6771 1789 6551 7589 1798 6552 7588 1840 6553 7376 1843 6554 7375 1844 6555 7626 1751 6556 7589 1798 6557 7375 1844 6558 7374 1837 6559 6786 1813 6560 6785 1812 6561 6962 1816 6562 7301 1815 6563 7311 1825 6564 7302 1775 6565 7378 1742 6566 7628 1822 6567 6787 1849 6568 6786 1813 6569 7301 1815 6570 7300 1850 6571 7623 1797 6572 7617 1711 6573 7598 1788 6574 7594 1818 6575 7585 1799 6576 6962 1816 6577 7374 1837 6578 7375 1844 6579 6955 1752 6580 6784 1838 6581 6946 1763 6582 6950 1744 6583 7373 1783 6584 7361 1747 6585 7360 1750 6586 7372 1836 6587 7265 1831 6588 7264 1830 6589 7261 1839 6590 7262 1817 6591 7617 1711 6592 7610 1714 6593 7607 1709 6594 7598 1788 6595 7481 1851 6596 7340 1739 6597 6941 1776 6598 6944 1852 6599 7577 1846 6600 7344 1845 6601 7343 1853 6602 7495 1854 6603 6944 1852 6604 6941 1776 6605 6796 1848 6606 6790 1833 6607 7348 1855 6608 7342 1780 6609 7366 1779 6610 7373 1783 6611 7488 1856 6612 7341 1740 6613 7340 1739 6614 7481 1851 6615 7599 1692 6616 7597 1691 6617 7350 1738 6618 7351 1778 6619 7380 1769 6620 7263 1787 6621 7264 1830 6622 7364 1770 6623 7606 1728 6624 7593 1736 6625 7597 1691 6626 7605 1722 6627 7302 1775 6628 7311 1825 6629 6794 1841 6630 6795 1847 6631 7343 1853 6632 7344 1845 6633 7367 1834 6634 7377 1829 6635 7495 1854 6636 7343 1853 6637 7341 1740 6638 7488 1856 6639 7619 1835 6640 7592 1759 6641 7593 1736 6642 7606 1728 6643 7376 1843 6644 7260 1819 6645 7283 1807 6646 7284 1800 6647 7608 1708 6648 7600 1765 6649 7598 1788 6650 7607 1709 6651 7624 1827 6652 7619 1835 6653 7606 1728 6654 7620 1857 6655 6956 1753 6656 6951 1743 6657 6952 1810 6658 6957 1792 6659 7341 1740 6660 7343 1853 6661 7377 1829 6662 7379 1741 6663 7311 1825 6664 7312 1824 6665 6793 1842 6666 6794 1841 6667 7381 1772 6668 6772 1781 6669 6773 1785 6670 7380 1769 6671 7267 1791 6672 7266 1790 6673 7265 1831 6674 7262 1817 6675 7627 1828 6676 7624 1827 6677 7620 1857 6678 7622 1858 6679 7300 1850 6680 7301 1815 6681 7338 1802 6682 7496 1803 6683 7628 1822 6684 7627 1828 6685 7622 1858 6686 7621 1823 6687 6941 1776 6688 7302 1775 6689 6795 1847 6690 6796 1848 6691 7600 1765 6692 6770 1768 6693 6771 1789 6694 7598 1788 6695 7632 1859 6696 7631 1793 6697 6957 1792 6698 6958 1860 6699 7571 1861 6700 6970 1862 6701 6959 1863 6702 6954 1864 6703 7571 1861 6704 6954 1864 6705 6963 1865 6706 6964 1866 6707 6957 1792 6708 6952 1810 6709 6949 1867 6710 6958 1860 6711 6958 1860 6712 6949 1867 6713 6948 1868 6714 6959 1863 6715 6959 1863 6716 6948 1868 6717 6947 1869 6718 6954 1864 6719 6954 1864 6720 6947 1869 6721 6953 1870 6722 6963 1865 6723 7569 1871 6724 6961 1872 6725 6960 1873 6726 6968 1874 6727 6952 1810 6728 6938 1811 6729 6937 1875 6730 6949 1867 6731 6949 1867 6732 6937 1875 6733 6936 1876 6734 6948 1868 6735 7629 1877 6736 7623 1797 6737 7625 1754 6738 7631 1793 6739 6953 1870 6740 6947 1869 6741 6948 1868 6742 6936 1876 6743 7636 1878 6744 7621 1823 6745 7622 1858 6746 7637 1879 6747 7573 1734 6748 7615 1672 6749 6801 1681 6750 6800 1880 6751 7638 1881 6752 7637 1879 6753 7622 1858 6754 7620 1857 6755 7570 1882 6756 7573 1734 6757 6800 1880 6758 6799 1883 6759 7638 1881 6760 7620 1857 6761 7606 1728 6762 7612 1705 6763 7569 1871 6764 7570 1882 6765 6799 1883 6766 6798 1884 6767 7638 1881 6768 7612 1705 6769 7613 1704 6770 7633 1885 6771 6961 1872 6772 7569 1871 6773 6798 1884 6774 6797 1886 6775 6968 1874 6776 6969 1887 6777 7570 1882 6778 7569 1871 6779 7636 1878 6780 7637 1879 6781 7634 1888 6782 7635 1889 6783 7313 1890 6784 6943 1891 6785 6791 1892 6786 6792 1893 6787 7629 1877 6788 7631 1793 6789 7632 1859 6790 7630 1894 6791 7638 1881 6792 7633 1885 6793 7634 1888 6794 7637 1879 6795 6971 1895 6796 6970 1862 6797 7571 1861 6798 7572 1896 6799 7635 1889 6800 7634 1888 6801 6968 1874 6802 6960 1873 6803 7630 1894 6804 7590 1724 6805 7591 1712 6806 7629 1877 6807 7636 1878 6808 7635 1889 6809 6943 1891 6810 7313 1890 6811 7635 1889 6812 6960 1873 6813 6961 1872 6814 6943 1891 6815 6943 1891 6816 6961 1872 6817 6797 1886 6818 6791 1892 6819 6965 1897 6820 6964 1866 6821 6799 1883 6822 6800 1880 6823 6938 1811 6824 6793 1842 6825 6792 1893 6826 6937 1875 6827 7629 1877 6828 7591 1712 6829 7617 1711 6830 7623 1797 6831 7312 1824 6832 7313 1890 6833 6792 1893 6834 6793 1842 6835 6937 1875 6836 6792 1893 6837 6791 1892 6838 6936 1876 6839 7313 1890 6840 7312 1824 6841 7621 1823 6842 7636 1878 6843 6953 1870 6844 6936 1876 6845 6791 1892 6846 6797 1886 6847 7590 1724 6848 7630 1894 6849 6971 1895 6850 6974 1730 6851 6963 1865 6852 6953 1870 6853 6797 1886 6854 6798 1884 6855 6974 1730 6856 6971 1895 6857 7572 1896 6858 7574 1720 6859 6964 1866 6860 6963 1865 6861 6798 1884 6862 6799 1883 6863 7632 1859 6864 6958 1860 6865 6959 1863 6866 6970 1862 6867 7630 1894 6868 7632 1859 6869 6970 1862 6870 6971 1895 6871 6966 1680 6872 6965 1897 6873 6800 1880 6874 6801 1681 6875 7633 1885 6876 7613 1704 6877 6972 1735 6878 6969 1887 6879 6969 1887 6880 6972 1735 6881 7573 1734 6882 7570 1882 6883 7634 1888 6884 7633 1885 6885 6969 1887 6886 6968 1874 6887 7574 1720 6888 7572 1896 6889 6965 1897 6890 6966 1680 6891 7572 1896 6892 7571 1861 6893 6964 1866 6894 6965 1897 6895 7430 1898 6896 7435 1899 6897 6930 1900 6898 6929 1901 6899 7431 1902 6900 7430 1898 6901 6929 1901 6902 6928 1903 6903 7425 1904 6904 7431 1902 6905 6928 1903 6906 6927 1905 6907 6927 1905 6908 6928 1903 6909 7428 1906 6910 7427 1907 6911 7427 1907 6912 7333 1908 6913 6926 1909 6914 6927 1905 6915 6927 1905 6916 6926 1909 6917 7331 1910 6918 7425 1904 6919 7327 1911 6920 7323 1912 6921 6924 1913 6922 6925 1914 6923 6926 1909 6924 6925 1914 6925 7329 1915 6926 7331 1910 6927 6925 1914 6928 6924 1913 6929 7322 1916 6930 7329 1915 6931 6928 1903 6932 6929 1901 6933 7429 1917 6934 7428 1906 6935 7435 1899 6936 7430 1898 6937 7431 1902 6938 7433 1918 6939 7426 1919 6940 7332 1920 6941 7333 1908 6942 7427 1907 6943 7426 1919 6944 7316 1921 6945 7326 1922 6946 7332 1920 6947 6929 1901 6948 6930 1900 6949 7434 1923 6950 7429 1917 6951 7333 1908 6952 7327 1911 6953 6925 1914 6954 6926 1909 6955 7434 1923 6956 7432 1924 6957 7428 1906 6958 7429 1917 6959 7432 1924 6960 7426 1919 6961 7427 1907 6962 7428 1906 6963 7431 1902 6964 7425 1904 6965 7424 1925 6966 7433 1918 6967 7432 1924 6968 7421 1926 6969 7420 1927 6970 7426 1919 6971 7421 1926 6972 7403 1928 6973 7396 1929 6974 7420 1927 6975 7425 1904 6976 7331 1910 6977 7330 1930 6978 7424 1925 6979 7331 1910 6980 7329 1915 6981 7328 1931 6982 7330 1930 6983 7333 1908 6984 7332 1920 6985 7326 1922 6986 7327 1911 6987 7424 1925 6988 7330 1930 6989 7328 1931 6990 7325 1932 6991 7329 1915 6992 7322 1916 6993 7325 1932 6994 7328 1931 6995 7326 1922 6996 7316 1921 6997 7323 1912 6998 7327 1911 6999 7426 1919 7000 7420 1927 7001 7315 1933 7002 7316 1921 7003 7133 1934 7004 7122 1935 7005 7123 1936 7006 7135 1937 7007 7133 1934 7008 7131 1938 7009 7121 1939 7010 7122 1935 7011 7131 1938 7012 7129 1940 7013 7125 1941 7014 7121 1939 7015 7127 1942 7016 7119 1943 7017 7118 1944 7018 7126 1945 7019 7122 1935 7020 7114 1946 7021 7115 1947 7022 7123 1936 7023 7121 1939 7024 7113 1948 7025 7114 1946 7026 7122 1935 7027 6870 1949 7028 6868 1950 7029 7113 1948 7030 7117 1951 7031 7125 1941 7032 7117 1951 7033 7113 1948 7034 7121 1939 7035 6867 1952 7036 6869 1953 7037 7115 1947 7038 7114 1946 7039 6872 1954 7040 6870 1949 7041 7117 1951 7042 7125 1941 7043 7123 1936 7044 7115 1947 7045 6869 1953 7046 6871 1955 7047 7124 1956 7048 7116 1957 7049 7120 1958 7050 7128 1959 7051 6871 1955 7052 6869 1953 7053 7116 1957 7054 7124 1956 7055 7118 1944 7056 7119 1943 7057 6868 1950 7058 6870 1949 7059 7119 1943 7060 7120 1958 7061 6867 1952 7062 6868 1950 7063 6868 1950 7064 6867 1952 7065 7114 1946 7066 7113 1948 7067 7120 1958 7068 7116 1957 7069 6869 1953 7070 6867 1952 7071 7126 1945 7072 7118 1944 7073 6870 1949 7074 6872 1954 7075 7128 1959 7076 7120 1958 7077 7119 1943 7078 7127 1942 7079 7151 1960 7080 7133 1934 7081 7135 1937 7082 7081 1961 7083 7139 1962 7084 7131 1938 7085 7133 1934 7086 7151 1960 7087 7215 1963 7088 7223 1964 7089 7222 1965 7090 7214 1966 7091 7203 1967 7092 7214 1966 7093 7213 1968 7094 7201 1969 7095 7197 1970 7096 7205 1971 7097 7203 1967 7098 7185 1972 7099 7214 1966 7100 7222 1965 7101 7221 1973 7102 7213 1968 7103 7209 1974 7104 7217 1975 7105 7218 1976 7106 7210 1977 7107 7205 1971 7108 7207 1978 7109 7211 1979 7110 7215 1963 7111 7203 1967 7112 7205 1971 7113 7215 1963 7114 7214 1966 7115 7212 1980 7116 7220 1981 7117 7216 1982 7118 7208 1983 7119 7200 1984 7120 7212 1980 7121 7208 1983 7122 7202 1985 7123 7211 1979 7124 7219 1986 7125 7223 1964 7126 7215 1963 7127 7204 1987 7128 7209 1974 7129 7210 1977 7130 7206 1988 7131 6891 1989 7132 6893 1990 7133 7219 1986 7134 7211 1979 7135 7202 1985 7136 7208 1983 7137 7209 1974 7138 7204 1987 7139 7185 1972 7140 7203 1967 7141 7201 1969 7142 7549 1991 7143 7217 1975 7144 7216 1982 7145 6896 1992 7146 6895 1993 7147 6895 1993 7148 6896 1992 7149 7222 1965 7150 7223 1964 7151 7183 1994 7152 7202 1985 7153 7204 1987 7154 7196 1995 7155 7208 1983 7156 7216 1982 7157 7217 1975 7158 7209 1974 7159 7548 1996 7160 7200 1984 7161 7202 1985 7162 7183 1994 7163 7216 1982 7164 7220 1981 7165 6894 1997 7166 6896 1992 7167 6896 1992 7168 6894 1997 7169 7221 1973 7170 7222 1965 7171 7218 1976 7172 7217 1975 7173 6895 1993 7174 6893 1990 7175 6893 1990 7176 6895 1993 7177 7223 1964 7178 7219 1986 7179 7213 1968 7180 7221 1973 7181 6894 1997 7182 6892 1998 7183 6892 1998 7184 6894 1997 7185 7220 1981 7186 7212 1980 7187 7210 1977 7188 7218 1976 7189 6893 1990 7190 6891 1989 7191 7201 1969 7192 7213 1968 7193 6892 1998 7194 6888 1999 7195 6888 1999 7196 6892 1998 7197 7212 1980 7198 7200 1984 7199 7010 2000 7200 7022 2001 7201 6840 2002 7202 6836 2003 7203 7019 2004 7204 7027 2005 7205 6841 2006 7206 6839 2007 7207 7009 2008 7208 7021 2009 7209 7017 2010 7210 7011 2011 7211 7014 2012 7212 7016 2013 7213 7020 2014 7214 7024 2015 7215 7013 2016 7216 7018 2017 7217 7019 2004 7218 7015 2018 7219 7023 2019 7220 7031 2020 7221 7030 2021 7222 7022 2001 7223 7027 2005 7224 7026 2022 7225 6843 2023 7226 6841 2006 7227 7017 2010 7228 7025 2024 7229 7026 2022 7230 7018 2017 7231 7024 2015 7232 7032 2025 7233 7031 2020 7234 7023 2019 7235 7021 2009 7236 7029 2026 7237 7025 2024 7238 7017 2010 7239 7020 2014 7240 7028 2027 7241 7032 2025 7242 7024 2015 7243 7013 2016 7244 7015 2018 7245 6838 2028 7246 6837 2029 7247 7026 2022 7248 7025 2024 7249 6844 2030 7250 6843 2023 7251 7012 2031 7252 7014 2012 7253 7024 2015 7254 7023 2019 7255 6837 2029 7256 6838 2028 7257 7016 2013 7258 7014 2012 7259 6838 2028 7260 6839 2007 7261 7020 2014 7262 7016 2013 7263 7015 2018 7264 7019 2004 7265 6839 2007 7266 6838 2028 7267 6839 2007 7268 6841 2006 7269 7028 2027 7270 7020 2014 7271 7022 2001 7272 7030 2021 7273 6842 2032 7274 6840 2002 7275 6840 2002 7276 6842 2032 7277 7029 2026 7278 7021 2009 7279 6841 2006 7280 6843 2023 7281 7032 2025 7282 7028 2027 7283 6843 2023 7284 6844 2030 7285 7031 2020 7286 7032 2025 7287 6844 2030 7288 6842 2032 7289 7030 2021 7290 7031 2020 7291 6836 2003 7292 6840 2002 7293 7021 2009 7294 7009 2008 7295 7018 2017 7296 7026 2022 7297 7027 2005 7298 7019 2004 7299 7011 2011 7300 7017 2010 7301 7018 2017 7302 7013 2016 7303 7025 2024 7304 7029 2026 7305 6842 2032 7306 6844 2030 7307 7012 2031 7308 7023 2019 7309 7022 2001 7310 7010 2000 7311 7233 2033 7312 7225 2034 7313 7226 2035 7314 7234 2036 7315 6806 2037 7316 6804 2038 7317 7227 2039 7318 7235 2040 7319 7250 2041 7320 7242 2042 7321 7244 2043 7322 7335 2044 7323 6803 2045 7324 6802 2046 7325 7225 2034 7326 7224 2047 7327 6805 2048 7328 6803 2045 7329 7224 2047 7330 7228 2049 7331 7230 2050 7332 7231 2051 7333 6802 2046 7334 6803 2045 7335 6813 2052 7336 6809 2053 7337 7242 2042 7338 7250 2041 7339 7244 2043 7340 7242 2042 7341 7232 2054 7342 7233 2033 7343 7234 2036 7344 7226 2035 7345 6804 2038 7346 6806 2037 7347 6807 2055 7348 6805 2048 7349 7228 2049 7350 7236 2056 7351 6809 2053 7352 6808 2057 7353 7240 2058 7354 7242 2042 7355 7236 2056 7356 7228 2049 7357 7224 2047 7358 7232 2054 7359 7232 2054 7360 7224 2047 7361 7225 2034 7362 7233 2033 7363 7235 2040 7364 7227 2039 7365 7231 2051 7366 7239 2059 7367 7239 2059 7368 7231 2051 7369 7230 2050 7370 7238 2060 7371 6802 2046 7372 6804 2038 7373 7226 2035 7374 7225 2034 7375 7242 2042 7376 7240 2058 7377 7236 2056 7378 7232 2054 7379 6808 2057 7380 6807 2055 7381 7236 2056 7382 7240 2058 7383 7247 2061 7384 7235 2040 7385 7239 2059 7386 7245 2062 7387 7244 2043 7388 7233 2033 7389 7234 2036 7390 7246 2063 7391 7245 2062 7392 7239 2059 7393 7238 2060 7394 7243 2064 7395 7246 2063 7396 7234 2036 7397 6806 2037 7398 6810 2065 7399 7231 2051 7400 7227 2039 7401 6804 2038 7402 6802 2046 7403 6810 2065 7404 6806 2037 7405 7235 2040 7406 7247 2061 7407 7567 2066 7408 7504 2067 7409 7503 2068 7410 7565 2069 7411 7584 2070 7412 7582 2071 7413 6789 1805 7414 6912 2072 7415 6914 2073 7416 6934 2074 7417 7566 2075 7418 7287 2076 7419 7299 2077 7420 7298 2078 7421 6919 2079 7422 6920 2080 7423 7391 2081 7424 7390 2082 7425 7402 2083 7426 7505 2084 7427 7567 2066 7428 7565 2069 7429 6933 2085 7430 6934 2074 7431 7288 1795 7432 6789 1805 7433 6914 2073 7434 7287 2076 7435 7505 2084 7436 7402 2083 7437 7401 2086 7438 7504 2067 7439 7568 2087 7440 7567 2066 7441 6934 2074 7442 6914 2073 7443 6920 2080 7444 6919 2079 7445 7409 2088 7446 7410 2089 7447 7269 1820 7448 7280 2090 7449 7500 2091 7450 7286 1821 7451 7500 2091 7452 7417 2092 7453 7281 1804 7454 7286 1821 7455 6921 2093 7456 6920 2080 7457 7410 2089 7458 7411 2094 7459 7300 1850 7460 7299 2077 7461 6920 2080 7462 6921 2093 7463 7440 2095 7464 7417 2092 7465 7416 2096 7466 7439 2097 7467 7496 1803 7468 7281 1804 7469 7417 2092 7470 7440 2095 7471 7287 2076 7472 7566 2075 7473 7280 2090 7474 7269 1820 7475 7288 1795 7476 7287 2076 7477 7269 1820 7478 7270 1796 7479 7411 2094 7480 7339 2098 7481 7442 2099 7482 6787 1849 7483 7280 2090 7484 7279 2100 7485 7499 2101 7486 7500 2091 7487 7566 2075 7488 7564 2102 7489 7279 2100 7490 7280 2090 7491 7499 2101 7492 7498 2103 7493 7415 2104 7494 7416 2096 7495 7504 2067 7496 7401 2086 7497 7397 2105 7498 7503 2068 7499 7568 2087 7500 7505 2084 7501 7504 2067 7502 7567 2066 7503 7411 2094 7504 6787 1849 7505 7300 1850 7506 6921 2093 7507 7505 2084 7508 7405 2106 7509 7404 2107 7510 7391 2081 7511 7440 2095 7512 7439 2097 7513 7298 2078 7514 7299 2077 7515 7582 2071 7516 7405 2106 7517 7505 2084 7518 7568 2087 7519 7496 1803 7520 7440 2095 7521 7299 2077 7522 7300 1850 7523 7411 2094 7524 7402 2083 7525 7390 2082 7526 7339 2098 7527 7584 2070 7528 7404 2107 7529 7405 2106 7530 7582 2071 7531 7410 2089 7532 7409 2088 7533 7397 2105 7534 7401 2086 7535 7410 2089 7536 7401 2086 7537 7402 2083 7538 7411 2094 7539 7500 2091 7540 7499 2101 7541 7416 2096 7542 7417 2092 7543 6934 2074 7544 6933 2085 7545 7564 2102 7546 7566 2075 7547 7582 2071 7548 7568 2087 7549 6914 2073 7550 6789 1805 7551 7439 2097 7552 7416 2096 7553 7415 2104 7554 7438 2108 7555 7324 2109 7556 7321 2110 7557 7273 2111 7558 7274 2112 7559 7395 2113 7560 7394 2114 7561 7317 2115 7562 7314 2116 7563 7323 1912 7564 7316 1921 7565 7315 1933 7566 7320 2117 7567 7325 1932 7568 7322 1916 7569 7321 2110 7570 7324 2109 7571 6922 2118 7572 6913 2119 7573 7272 2120 7574 7317 2115 7575 6931 2121 7576 6930 1900 7577 7435 1899 7578 7561 2122 7579 6919 2079 7580 6918 2123 7581 7408 2124 7582 7409 2088 7583 7562 2125 7584 7560 2126 7585 6931 2121 7586 6932 2127 7587 7424 1925 7588 7325 1932 7589 7324 2109 7590 7422 2128 7591 7320 2117 7592 7315 1933 7593 7271 2129 7594 7272 2120 7595 7419 2130 7596 7418 2131 7597 7392 2132 7598 7413 2133 7599 7413 2133 7600 7392 2132 7601 7393 2134 7602 7436 2135 7603 7273 2111 7604 7321 2110 7605 6923 2136 7606 6913 2119 7607 7406 2137 7608 7394 2114 7609 7395 2113 7610 7400 2138 7611 6918 2123 7612 6917 2139 7613 7407 2140 7614 7408 2124 7615 6922 2118 7616 6915 2141 7617 7294 2142 7618 7318 2143 7619 7409 2088 7620 7408 2124 7621 7398 2144 7622 7397 2105 7623 7560 2126 7624 7434 1923 7625 6930 1900 7626 6931 2121 7627 7276 2145 7628 7275 2146 7629 7418 2131 7630 7419 2130 7631 7423 2147 7632 7422 2128 7633 7275 2146 7634 7276 2145 7635 6916 2148 7636 6915 2141 7637 7394 2114 7638 7406 2137 7639 7503 2068 7640 7397 2105 7641 7398 2144 7642 7502 2149 7643 7565 2069 7644 7562 2125 7645 6932 2127 7646 6933 2085 7647 7498 2103 7648 7497 2150 7649 7414 2151 7650 7415 2104 7651 6932 2127 7652 6931 2121 7653 7561 2122 7654 7563 2152 7655 7437 2153 7656 7414 2151 7657 7413 2133 7658 7436 2135 7659 7407 2140 7660 7406 2137 7661 7400 2138 7662 7399 2154 7663 7560 2126 7664 7501 2155 7665 7403 1928 7666 7421 1926 7667 7297 2156 7668 7296 2157 7669 6917 2139 7670 6918 2123 7671 7438 2108 7672 7415 2104 7673 7414 2151 7674 7437 2153 7675 7561 2122 7676 7435 1899 7677 7433 1918 7678 7423 2147 7679 7560 2126 7680 7421 1926 7681 7432 1924 7682 7434 1923 7683 7298 2078 7684 7297 2156 7685 6918 2123 7686 6919 2079 7687 7317 2115 7688 7394 2114 7689 6915 2141 7690 6922 2118 7691 6924 1913 7692 6923 2136 7693 7321 2110 7694 7322 1916 7695 7323 1912 7696 7320 2117 7697 6923 2136 7698 6924 1913 7699 7562 2125 7700 7502 2149 7701 7501 2155 7702 7560 2126 7703 6913 2119 7704 6923 2136 7705 7320 2117 7706 7272 2120 7707 7565 2069 7708 7503 2068 7709 7502 2149 7710 7562 2125 7711 7277 2158 7712 7276 2145 7713 7419 2130 7714 7497 2150 7715 7295 2159 7716 7294 2142 7717 6915 2141 7718 6916 2148 7719 7501 2155 7720 7399 2154 7721 7400 2138 7722 7403 1928 7723 7561 2122 7724 7423 2147 7725 7276 2145 7726 7277 2158 7727 7296 2157 7728 7295 2159 7729 6916 2148 7730 6917 2139 7731 7278 2160 7732 7277 2158 7733 7497 2150 7734 7498 2103 7735 7563 2152 7736 7561 2122 7737 7277 2158 7738 7278 2160 7739 6933 2085 7740 6932 2127 7741 7563 2152 7742 7564 2102 7743 7279 2100 7744 7278 2160 7745 7498 2103 7746 7499 2101 7747 7420 1927 7748 7396 1929 7749 7271 2129 7750 7315 1933 7751 7272 2120 7752 7271 2129 7753 7314 2116 7754 7317 2115 7755 7274 2112 7756 7273 2111 7757 7318 2143 7758 7319 2161 7759 7564 2102 7760 7563 2152 7761 7278 2160 7762 7279 2100 7763 7089 2162 7764 7090 2163 7765 7162 2164 7766 7161 2165 7767 7104 2166 7768 7161 2165 7769 7162 2164 7770 7105 2167 7771 7502 2149 7772 7398 2144 7773 7399 2154 7774 7501 2155 7775 7393 2134 7776 7392 2132 7777 7418 2131 7778 7319 2161 7779 7275 2146 7780 7274 2112 7781 7319 2161 7782 7418 2131 7783 7395 2113 7784 7314 2116 7785 7271 2129 7786 7396 1929 7787 7422 2128 7788 7324 2109 7789 7274 2112 7790 7275 2146 7791 7403 1928 7792 7400 2138 7793 7395 2113 7794 7396 1929 7795 7393 2134 7796 7319 2161 7797 7318 2143 7798 7294 2142 7799 7439 2097 7800 7438 2108 7801 7297 2156 7802 7298 2078 7803 7408 2124 7804 7407 2140 7805 7399 2154 7806 7398 2144 7807 7318 2143 7808 7273 2111 7809 6913 2119 7810 6922 2118 7811 7497 2150 7812 7419 2130 7813 7413 2133 7814 7414 2151 7815 7433 1918 7816 7424 1925 7817 7422 2128 7818 7423 2147 7819 7436 2135 7820 7393 2134 7821 7294 2142 7822 7295 2159 7823 6917 2139 7824 6916 2148 7825 7406 2137 7826 7407 2140 7827 7437 2153 7828 7436 2135 7829 7295 2159 7830 7296 2157 7831 7438 2108 7832 7437 2153 7833 7296 2157 7834 7297 2156 7835 7443 2168 7836 6775 1814 7837 6780 2169 7838 6898 2170 7839 7442 2099 7840 6781 2171 7841 6786 1813 7842 6787 1849 7843 6898 2170 7844 6780 2169 7845 6781 2171 7846 7442 2099 7847 7348 1855 7848 6911 2172 7849 6912 2072 7850 7342 1780 7851 7583 2173 7852 6912 2072 7853 6911 2172 7854 7581 2174 7855 6897 2175 7856 6912 2072 7857 7583 2173 7858 7290 2176 7859 7512 2177 7860 7389 2178 7861 7291 2179 7862 7506 2180 7863 7583 2173 7864 7382 2181 7865 7506 2180 7866 7290 2176 7867 7584 2070 7868 7289 2182 7869 7391 2081 7870 7404 2107 7871 7583 2173 7872 7581 2174 7873 7383 2183 7874 7382 2181 7875 6760 2184 7876 6761 2185 7877 7107 2186 7878 7166 2187 7879 6786 1813 7880 6781 2171 7881 6780 2169 7882 6775 1814 7883 7468 2188 7884 6783 2189 7885 6775 1814 7886 7443 2168 7887 7456 2190 7888 7412 2191 7889 7291 2179 7890 7389 2178 7891 6763 2192 7892 6758 2193 7893 6898 2170 7894 7442 2099 7895 7506 2180 7896 7382 2181 7897 7383 2183 7898 7512 2177 7899 7092 2194 7900 6862 2195 7901 6758 2193 7902 6763 2192 7903 7468 2188 7904 7443 2168 7905 7412 2191 7906 7456 2190 7907 6758 2193 7908 6762 2196 7909 7443 2168 7910 6898 2170 7911 6862 2195 7912 7093 2197 7913 6762 2196 7914 6758 2193 7915 7442 2099 7916 7339 2098 7917 6764 2198 7918 6763 2192 7919 7506 2180 7920 7291 2179 7921 6760 2184 7922 6766 2199 7923 7291 2179 7924 7412 2191 7925 6761 2185 7926 6760 2184 7927 6761 2185 7928 6762 2196 7929 7093 2197 7930 7107 2186 7931 7412 2191 7932 7443 2168 7933 6762 2196 7934 6761 2185 7935 7342 1780 7936 6912 2072 7937 6789 1805 7938 6772 1781 7939 7289 2182 7940 7584 2070 7941 6912 2072 7942 6897 2175 7943 7339 2098 7944 7390 2082 7945 6765 2200 7946 6764 2198 7947 7390 2082 7948 7391 2081 7949 6767 2201 7950 6765 2200 7951 7092 2194 7952 7102 2202 7953 7103 2203 7954 7095 2204 7955 7095 2204 7956 7103 2203 7957 7104 2166 7958 7097 2205 7959 7096 2206 7960 7109 2207 7961 7108 2208 7962 7094 2209 7963 7087 2210 7964 7088 2211 7965 7160 2212 7966 7159 2213 7967 7103 2203 7968 7160 2212 7969 7161 2165 7970 7104 2166 7971 7084 2214 7972 7165 2215 7973 7164 2216 7974 7085 2217 7975 7107 2186 7976 7108 2208 7977 7165 2215 7978 7166 2187 7979 7102 2202 7980 7159 2213 7981 7160 2212 7982 7103 2203 7983 7083 2218 7984 7166 2187 7985 7165 2215 7986 7084 2214 7987 6769 2219 7988 6759 2220 7989 6857 2221 7990 7074 2222 7991 6759 2220 7992 6768 2223 7993 7073 2224 7994 6857 2221 7995 6897 2175 7996 7290 2176 7997 6768 2223 7998 6759 2220 7999 6763 2192 8000 6764 2198 8001 7102 2202 8002 7092 2194 8003 6766 2199 8004 6760 2184 8005 7166 2187 8006 7083 2218 8007 6764 2198 8008 6765 2200 8009 7159 2213 8010 7102 2202 8011 6765 2200 8012 6767 2201 8013 7087 2210 8014 7159 2213 8015 6768 2223 8016 6766 2199 8017 7083 2218 8018 7073 2224 8019 7290 2176 8020 7506 2180 8021 6766 2199 8022 6768 2223 8023 6767 2201 8024 6769 2219 8025 7074 2222 8026 7087 2210 8027 7108 2208 8028 7109 2207 8029 7164 2216 8030 7165 2215 8031 7391 2081 8032 7289 2182 8033 6769 2219 8034 6767 2201 8035 6857 2221 8036 6858 2225 8037 7075 2226 8038 7074 2222 8039 7073 2224 8040 7076 2227 8041 6858 2225 8042 6857 2221 8043 6862 2195 8044 6863 2228 8045 7094 2209 8046 7093 2197 8047 7092 2194 8048 7095 2204 8049 6863 2228 8050 6862 2195 8051 7094 2209 8052 7108 2208 8053 7107 2186 8054 7093 2197 8055 7289 2182 8056 6897 2175 8057 6759 2220 8058 6769 2219 8059 7073 2224 8060 7083 2218 8061 7084 2214 8062 7076 2227 8063 7075 2226 8064 7088 2211 8065 7087 2210 8066 7074 2222 8067 7088 2211 8068 7089 2162 8069 7161 2165 8070 7160 2212 8071 6863 2228 8072 6864 2229 8073 7096 2206 8074 7094 2209 8075 7095 2204 8076 7097 2205 8077 6864 2229 8078 6863 2228 8079 7150 2230 8080 7138 2231 8081 7139 1962 8082 7151 1960 8083 6877 2232 8084 6876 2233 8085 7138 2231 8086 7137 2234 8087 7157 2235 8088 7147 2236 8089 7143 2237 8090 7145 2238 8091 7142 2239 8092 7141 2240 8093 6876 2233 8094 6877 2232 8095 6877 2232 8096 6879 2241 8097 7143 2237 8098 7142 2239 8099 7152 2242 8100 7141 2240 8101 7142 2239 8102 7146 2243 8103 7137 2234 8104 7155 2244 8105 6879 2241 8106 6877 2232 8107 6879 2241 8108 6880 2245 8109 7145 2238 8110 7143 2237 8111 7112 2246 8112 7158 2247 8113 7144 2248 8114 7150 2230 8115 7158 2247 8116 7111 2249 8117 7156 2250 8118 7144 2248 8119 7154 2251 8120 7146 2243 8121 7147 2236 8122 7106 2252 8123 7082 2253 8124 7153 2254 8125 7152 2242 8126 7091 2255 8127 7132 2256 8128 7127 1942 8129 7126 1945 8130 7130 2257 8131 7149 2258 8132 7148 2259 8133 7155 2244 8134 7156 2250 8135 7153 2254 8136 7140 2260 8137 7141 2240 8138 7152 2242 8139 7147 2236 8140 7146 2243 8141 7142 2239 8142 7143 2237 8143 7100 2261 8144 7149 2258 8145 7156 2250 8146 7111 2249 8147 7155 2244 8148 7148 2259 8149 6880 2245 8150 6879 2241 8151 7101 2262 8152 7106 2252 8153 7147 2236 8154 7157 2235 8155 7112 2246 8156 7150 2230 8157 7151 1960 8158 7081 1961 8159 6858 2225 8160 6859 2263 8161 7078 2264 8162 7075 2226 8163 6881 2265 8164 6880 2245 8165 7148 2259 8166 7149 2258 8167 7110 2266 8168 7111 2249 8169 7158 2247 8170 7163 2267 8171 7076 2227 8172 7077 2268 8173 6859 2263 8174 6858 2225 8175 7157 2235 8176 7145 2238 8177 6880 2245 8178 6881 2265 8179 7109 2207 8180 7110 2266 8181 7163 2267 8182 7164 2216 8183 7086 2269 8184 7163 2267 8185 7158 2247 8186 7112 2246 8187 6859 2263 8188 6860 2270 8189 7080 2271 8190 7078 2264 8191 7090 2163 8192 7091 2255 8193 7154 2251 8194 7162 2164 8195 6866 2272 8196 6881 2265 8197 7149 2258 8198 7100 2261 8199 7085 2217 8200 7164 2216 8201 7163 2267 8202 7086 2269 8203 7076 2227 8204 7084 2214 8205 7085 2217 8206 7077 2268 8207 7079 2273 8208 7081 1961 8209 6861 2274 8210 6860 2270 8211 6864 2229 8212 6865 2275 8213 7098 2276 8214 7096 2206 8215 7078 2264 8216 7089 2162 8217 7088 2211 8218 7075 2226 8219 7182 2277 8220 7190 2278 8221 7189 2279 8222 7451 2280 8223 7097 2205 8224 7099 2281 8225 6865 2275 8226 6864 2229 8227 7080 2271 8228 7090 2163 8229 7089 2162 8230 7078 2264 8231 6865 2275 8232 6866 2272 8233 7100 2261 8234 7098 2276 8235 7082 2253 8236 7091 2255 8237 7090 2163 8238 7080 2271 8239 7099 2281 8240 7101 2262 8241 6866 2272 8242 6865 2275 8243 7097 2205 8244 7104 2166 8245 7105 2167 8246 7099 2281 8247 6875 2282 8248 6871 1955 8249 7124 1956 8250 7136 2283 8251 7099 2281 8252 7105 2167 8253 7106 2252 8254 7101 2262 8255 6873 2284 8256 6872 1954 8257 7125 1941 8258 7129 1940 8259 7130 2257 8260 7126 1945 8261 6872 1954 8262 6873 2284 8263 6874 2285 8264 6873 2284 8265 7129 1940 8266 7131 1938 8267 7136 2283 8268 7124 1956 8269 7128 1959 8270 7134 2286 8271 6860 2270 8272 6861 2274 8273 7082 2253 8274 7080 2271 8275 7132 2256 8276 7130 2257 8277 6873 2284 8278 6874 2285 8279 7101 2262 8280 7157 2235 8281 6881 2265 8282 6866 2272 8283 7077 2268 8284 7085 2217 8285 7086 2269 8286 7079 2273 8287 7098 2276 8288 7110 2266 8289 7109 2207 8290 7096 2206 8291 7100 2261 8292 7111 2249 8293 7110 2266 8294 7098 2276 8295 7079 2273 8296 7086 2269 8297 7112 2246 8298 7081 1961 8299 7144 2248 8300 7137 2234 8301 7138 2231 8302 7150 2230 8303 7154 2251 8304 7091 2255 8305 7152 2242 8306 7146 2243 8307 6878 2287 8308 6874 2285 8309 7131 1938 8310 7139 1962 8311 7134 2286 8312 7128 1959 8313 7127 1942 8314 7132 2256 8315 7105 2167 8316 7162 2164 8317 7154 2251 8318 7106 2252 8319 7140 2260 8320 7132 2256 8321 6874 2285 8322 6878 2287 8323 7153 2254 8324 7134 2286 8325 7132 2256 8326 7140 2260 8327 6861 2274 8328 6875 2282 8329 7136 2283 8330 7082 2253 8331 7141 2240 8332 7140 2260 8333 6878 2287 8334 6876 2233 8335 7082 2253 8336 7136 2283 8337 7134 2286 8338 7153 2254 8339 7077 2268 8340 7079 2273 8341 6860 2270 8342 6859 2263 8343 7135 1937 8344 7123 1936 8345 6871 1955 8346 6875 2282 8347 6876 2233 8348 6878 2287 8349 7139 1962 8350 7138 2231 8351 7081 1961 8352 7135 1937 8353 6875 2282 8354 6861 2274 8355 7156 2250 8356 7155 2244 8357 7137 2234 8358 7144 2248 8359 7456 2190 8360 7389 2178 8361 6749 2288 8362 6751 2289 8363 6753 2290 8364 6750 2291 8365 7449 2292 8366 7467 2293 8367 7465 2294 8368 7450 2295 8369 6750 2291 8370 6753 2290 8371 6752 2296 8372 6751 2289 8373 7455 2297 8374 7466 2298 8375 7468 2188 8376 7456 2190 8377 6751 2289 8378 6752 2296 8379 6757 2299 8380 6754 2300 8381 7512 2177 8382 7559 2301 8383 7467 2293 8384 6776 1826 8385 6782 2302 8386 6904 2303 8387 6904 2303 8388 6782 2302 8389 6783 2189 8390 7468 2188 8391 7349 2304 8392 6856 2305 8393 6911 2172 8394 7348 1855 8395 7580 2306 8396 6911 2172 8397 6856 2305 8398 7579 2307 8399 6911 2172 8400 6910 2308 8401 7559 2301 8402 7581 2174 8403 7580 2306 8404 7558 2309 8405 6910 2308 8406 6911 2172 8407 7559 2301 8408 6910 2308 8409 6747 2310 8410 6757 2299 8411 7449 2292 8412 7292 2311 8413 7175 2312 8414 7444 2313 8415 6751 2289 8416 6749 2288 8417 7177 2314 8418 7455 2297 8419 7349 2304 8420 7348 1855 8421 7373 1783 8422 7372 1836 8423 7580 2306 8424 7579 2307 8425 7520 2315 8426 7518 2316 8427 7043 2317 8428 6986 2318 8429 6737 2319 8430 6739 2320 8431 7444 2313 8432 7175 2312 8433 6986 2318 8434 7043 2317 8435 7519 2321 8436 7175 2312 8437 7292 2311 8438 7517 2322 8439 7520 2315 8440 7519 2321 8441 7517 2322 8442 7518 2316 8443 6986 2318 8444 7058 2323 8445 6742 2324 8446 6737 2319 8447 7580 2306 8448 7518 2316 8449 7517 2322 8450 7558 2309 8451 7581 2174 8452 7559 2301 8453 7512 2177 8454 7383 2183 8455 6753 2290 8456 6746 2325 8457 6903 2326 8458 7465 2294 8459 6904 2303 8460 7468 2188 8461 6752 2296 8462 6746 2325 8463 7517 2322 8464 7292 2311 8465 6748 2327 8466 6755 2328 8467 7467 2293 8468 6904 2303 8469 6746 2325 8470 6753 2290 8471 6746 2325 8472 6752 2296 8473 7466 2298 8474 6903 2326 8475 6910 2308 8476 7558 2309 8477 6756 2329 8478 6747 2310 8479 7389 2178 8480 7512 2177 8481 6754 2300 8482 6749 2288 8483 6750 2291 8484 6748 2327 8485 7292 2311 8486 7449 2292 8487 7558 2309 8488 7517 2322 8489 6755 2328 8490 6756 2329 8491 6783 2189 8492 6782 2302 8493 6776 1826 8494 6775 1814 8495 7467 2293 8496 6978 2330 8497 6779 2331 8498 6776 1826 8499 7467 2293 8500 7449 2292 8501 7444 2313 8502 6978 2330 8503 7519 2321 8504 7058 2323 8505 6986 2318 8506 7175 2312 8507 7450 2295 8508 7167 2332 8509 6748 2327 8510 6750 2291 8511 6749 2288 8512 6754 2300 8513 7511 2333 8514 7177 2314 8515 6909 2334 8516 6908 2335 8517 7555 2336 8518 7556 2337 8519 7516 2338 8520 7167 2332 8521 7168 2339 8522 7515 2340 8523 7515 2340 8524 7168 2339 8525 7169 2341 8526 7514 2342 8527 7448 2343 8528 7447 2344 8529 7169 2341 8530 7168 2339 8531 7510 2345 8532 7509 2346 8533 7172 2347 8534 7176 2348 8535 7466 2298 8536 7455 2297 8537 7454 2349 8538 7463 2350 8539 7552 2351 8540 7509 2346 8541 7510 2345 8542 7555 2336 8543 7555 2336 8544 7510 2345 8545 7511 2333 8546 7556 2337 8547 7554 2352 8548 7515 2340 8549 7514 2342 8550 7553 2353 8551 7557 2354 8552 7516 2338 8553 7515 2340 8554 7554 2352 8555 7462 2355 8556 7447 2344 8557 7448 2343 8558 7464 2356 8559 6755 2328 8560 6748 2327 8561 7167 2332 8562 7516 2338 8563 7557 2354 8564 7554 2352 8565 6908 2335 8566 6909 2334 8567 6757 2299 8568 6747 2310 8569 6909 2334 8570 7556 2337 8571 7511 2333 8572 7510 2345 8573 7176 2348 8574 7177 2314 8575 7464 2356 8576 7448 2343 8577 7450 2295 8578 7465 2294 8579 6747 2310 8580 6756 2329 8581 7557 2354 8582 6909 2334 8583 7556 2337 8584 7511 2333 8585 6754 2300 8586 6757 2299 8587 7450 2295 8588 7448 2343 8589 7168 2339 8590 7167 2332 8591 6756 2329 8592 6755 2328 8593 7516 2338 8594 7557 2354 8595 6902 2357 8596 6901 2358 8597 7462 2355 8598 7464 2356 8599 7466 2298 8600 7463 2350 8601 6902 2357 8602 6903 2326 8603 7455 2297 8604 7177 2314 8605 7176 2348 8606 7454 2349 8607 6903 2326 8608 6902 2357 8609 7464 2356 8610 7465 2294 8611 7447 2344 8612 7446 2359 8613 7170 2360 8614 7169 2341 8615 7513 2361 8616 7170 2360 8617 7178 2362 8618 7293 2363 8619 6900 2364 8620 6899 2365 8621 7458 2366 8622 7460 2367 8623 7446 2359 8624 7445 2368 8625 7178 2362 8626 7170 2360 8627 7453 2369 8628 7172 2347 8629 7171 2370 8630 7452 2371 8631 7509 2346 8632 7508 2372 8633 7171 2370 8634 7172 2347 8635 7454 2349 8636 7176 2348 8637 7172 2347 8638 7453 2369 8639 7293 2363 8640 7186 2373 8641 7185 1972 8642 7549 1991 8643 7206 1988 8644 7210 1977 8645 6891 1989 8646 6890 2374 8647 7187 2375 8648 7188 2376 8649 7181 2377 8650 7180 2378 8651 7182 2277 8652 7507 2379 8653 7184 2380 8654 7190 2278 8655 7178 2362 8656 7445 2368 8657 7180 2378 8658 7192 2381 8659 7293 2363 8660 7178 2362 8661 7192 2381 8662 7186 2373 8663 6882 2382 8664 6883 2383 8665 7188 2376 8666 7187 2375 8667 7514 2342 8668 7169 2341 8669 7170 2360 8670 7513 2361 8671 7186 2373 8672 7198 2384 8673 7197 1970 8674 7185 1972 8675 7179 2385 8676 7189 2279 8677 7193 2386 8678 7191 2387 8679 7179 2385 8680 7191 2387 8681 6883 2383 8682 6882 2382 8683 7192 2381 8684 7199 2388 8685 7198 2384 8686 7186 2373 8687 7459 2389 8688 7457 2390 8689 6899 2365 8690 6900 2364 8691 6884 2391 8692 6883 2383 8693 7191 2387 8694 7193 2386 8695 7180 2378 8696 7181 2377 8697 7199 2388 8698 7192 2381 8699 6901 2358 8700 6900 2364 8701 7460 2367 8702 7462 2355 8703 7181 2377 8704 7188 2376 8705 6883 2383 8706 6884 2391 8707 7551 2392 8708 7513 2361 8709 7293 2363 8710 7549 1991 8711 7461 2393 8712 7459 2389 8713 6900 2364 8714 6901 2358 8715 7189 2279 8716 7190 2278 8717 7194 2394 8718 7193 2386 8719 7183 1994 8720 7196 1995 8721 7195 2395 8722 7184 2380 8723 6886 2396 8724 6884 2391 8725 7193 2386 8726 7194 2394 8727 7458 2366 8728 7445 2368 8729 7446 2359 8730 7460 2367 8731 7463 2350 8732 7461 2393 8733 6901 2358 8734 6902 2357 8735 7199 2388 8736 7181 2377 8737 6884 2391 8738 6886 2396 8739 7460 2367 8740 7446 2359 8741 7447 2344 8742 7462 2355 8743 6906 2397 8744 6905 2398 8745 7548 1996 8746 7550 2399 8747 7551 2392 8748 7549 1991 8749 6905 2398 8750 6906 2397 8751 7452 2371 8752 7171 2370 8753 7182 2277 8754 7451 2280 8755 7458 2366 8756 7187 2375 8757 7180 2378 8758 7445 2368 8759 7548 1996 8760 7183 1994 8761 7184 2380 8762 7507 2379 8763 7457 2390 8764 7451 2280 8765 7189 2279 8766 7179 2385 8767 7184 2380 8768 7195 2395 8769 7194 2394 8770 7190 2278 8771 7459 2389 8772 7452 2371 8773 7451 2280 8774 7457 2390 8775 7461 2393 8776 7453 2369 8777 7452 2371 8778 7459 2389 8779 6907 2400 8780 6906 2397 8781 7550 2399 8782 7552 2351 8783 6887 2401 8784 6885 2402 8785 7197 1970 8786 7198 2384 8787 7463 2350 8788 7454 2349 8789 7453 2369 8790 7461 2393 8791 7553 2353 8792 7551 2392 8793 6906 2397 8794 6907 2400 8795 7195 2395 8796 7196 1995 8797 6885 2402 8798 6887 2401 8799 7548 1996 8800 7507 2379 8801 7508 2372 8802 7550 2399 8803 6908 2335 8804 6907 2400 8805 7552 2351 8806 7555 2336 8807 7550 2399 8808 7508 2372 8809 7509 2346 8810 7552 2351 8811 7554 2352 8812 7553 2353 8813 6907 2400 8814 6908 2335 8815 7549 1991 8816 7201 1969 8817 6888 1999 8818 6905 2398 8819 7553 2353 8820 7514 2342 8821 7513 2361 8822 7551 2392 8823 6991 2403 8824 6999 2404 8825 6998 2405 8826 7039 2406 8827 6885 2402 8828 6889 2407 8829 7205 1971 8830 7197 1970 8831 6991 2403 8832 7054 2408 8833 6993 2409 8834 6999 2404 8835 7196 1995 8836 7204 1987 8837 6889 2407 8838 6885 2402 8839 7508 2372 8840 7507 2379 8841 7182 2277 8842 7171 2370 8843 6899 2365 8844 6882 2382 8845 7187 2375 8846 7458 2366 8847 7457 2390 8848 7179 2385 8849 6882 2382 8850 6899 2365 8851 6890 2374 8852 6891 1989 8853 7211 1979 8854 7207 1978 8855 6886 2396 8856 6887 2401 8857 7198 2384 8858 7199 2388 8859 7194 2394 8860 7195 2395 8861 6887 2401 8862 6886 2396 8863 6905 2398 8864 6888 1999 8865 7200 1984 8866 7548 1996 8867 6889 2407 8868 6890 2374 8869 7207 1978 8870 7205 1971 8871 7204 1987 8872 7206 1988 8873 6890 2374 8874 6889 2407 8875 6829 2410 8876 6778 2411 8877 6779 2331 8878 6978 2330 8879 7578 2412 8880 7345 2413 8881 7346 2414 8882 7545 2415 8883 7578 2412 8884 6856 2305 8885 7349 2304 8886 7345 2413 8887 7480 2416 8888 6977 2417 8889 7174 2418 8890 7475 2419 8891 7475 2419 8892 7174 2418 8893 7173 2420 8894 7388 2421 8895 7533 2422 8896 7532 2423 8897 7530 2424 8898 7531 2425 8899 7345 2413 8900 7349 2304 8901 7372 1836 8902 7369 1774 8903 7578 2412 8904 7545 2415 8905 7532 2423 8906 7533 2422 8907 7530 2424 8908 7388 2421 8909 7173 2420 8910 7531 2425 8911 6977 2417 8912 6774 1832 8913 6778 2411 8914 6829 2410 8915 7480 2416 8916 6777 2426 8917 6774 1832 8918 6977 2417 8919 7346 2414 8920 7345 2413 8921 7369 1774 8922 7370 1773 8923 6821 2427 8924 6790 1833 8925 6774 1832 8926 6777 2426 8927 6779 2331 8928 6778 2411 8929 6774 1832 8930 6776 1826 8931 7578 2412 8932 7533 2422 8933 7531 2425 8934 7546 2428 8935 6734 2429 8936 6740 2430 8937 7050 2431 8938 6848 2432 8939 6741 2433 8940 6734 2429 8941 6848 2432 8942 7051 2434 8943 7052 2435 8944 6849 2436 8945 6734 2429 8946 6741 2433 8947 6849 2436 8948 7053 2437 8949 6740 2430 8950 6734 2429 8951 7071 2438 8952 6854 2439 8953 6735 2440 8954 6745 2441 8955 6739 2320 8956 6737 2319 8957 6985 2442 8958 7042 2443 8959 6741 2433 8960 6738 2444 8961 7038 2445 8962 7052 2435 8963 6740 2430 8964 6739 2320 8965 7042 2443 8966 7050 2431 8967 7053 2437 8968 7043 2317 8969 6739 2320 8970 6740 2430 8971 6745 2441 8972 6742 2324 8973 7058 2323 8974 7071 2438 8975 7072 2446 8976 7062 2447 8977 6743 2448 8978 6744 2449 8979 6854 2439 8980 7072 2446 8981 6744 2449 8982 6735 2440 8983 6829 2410 8984 6849 2436 8985 7052 2435 8986 6977 2417 8987 6978 2330 8988 7053 2437 8989 6849 2436 8990 6829 2410 8991 6854 2439 8992 6855 2450 8993 7546 2428 8994 7072 2446 8995 7174 2418 8996 7038 2445 8997 6979 2451 8998 7173 2420 8999 7546 2428 9000 7531 2425 9001 7062 2447 9002 7072 2446 9003 7547 2452 9004 7519 2321 9005 7520 2315 9006 7579 2307 9007 7071 2438 9008 7547 2452 9009 6855 2450 9010 6854 2439 9011 6856 2305 9012 6855 2450 9013 7547 2452 9014 7579 2307 9015 7062 2447 9016 6979 2451 9017 6736 2453 9018 6743 2448 9019 6979 2451 9020 7038 2445 9021 6738 2444 9022 6736 2453 9023 7578 2412 9024 7546 2428 9025 6855 2450 9026 6856 2305 9027 7053 2437 9028 6978 2330 9029 7444 2313 9030 7043 2317 9031 7052 2435 9032 7038 2445 9033 7174 2418 9034 6977 2417 9035 7531 2425 9036 7173 2420 9037 6979 2451 9038 7062 2447 9039 7547 2452 9040 7071 2438 9041 7058 2323 9042 7519 2321 9043 6988 2454 9044 6998 2405 9045 7002 2455 9046 7000 2456 9047 6853 2457 9048 6852 2458 9049 7067 2459 9050 7070 2460 9051 6993 2409 9052 7004 2461 9053 7003 2462 9054 6999 2404 9055 7005 2463 9056 7013 2016 9057 6837 2029 9058 6833 2464 9059 7069 2465 9060 7068 2466 9061 6852 2458 9062 6853 2457 9063 6846 2467 9064 6845 2468 9065 7045 2469 9066 7047 2470 9067 7055 2471 9068 7054 2408 9069 6991 2403 9070 6983 2472 9071 6745 2441 9072 6735 2440 9073 6853 2457 9074 7070 2460 9075 6992 2473 9076 7005 2463 9077 7004 2461 9078 6993 2409 9079 6852 2458 9080 6851 2474 9081 7065 2475 9082 7067 2459 9083 7068 2466 9084 7066 2476 9085 6851 2474 9086 6852 2458 9087 7040 2477 9088 6983 2472 9089 6991 2403 9090 7039 2406 9091 6735 2440 9092 6744 2449 9093 7069 2465 9094 6853 2457 9095 6995 2478 9096 7007 2479 9097 7006 2480 9098 6994 2481 9099 7061 2482 9100 6980 2483 9101 6981 2484 9102 7060 2485 9103 7037 2486 9104 7036 2487 9105 6981 2484 9106 6980 2483 9107 6737 2319 9108 6742 2324 9109 7057 2488 9110 6985 2442 9111 7001 2489 9112 7008 2490 9113 7007 2479 9114 6995 2478 9115 7070 2460 9116 7057 2488 9117 6742 2324 9118 6745 2441 9119 7036 2487 9120 7035 2491 9121 6982 2492 9122 6981 2484 9123 6744 2449 9124 6743 2448 9125 7061 2482 9126 7069 2465 9127 6992 2473 9128 7011 2011 9129 7013 2016 9130 7005 2463 9131 7044 2493 9132 6988 2454 9133 6830 2494 9134 6845 2468 9135 7006 2480 9136 7014 2012 9137 7012 2031 9138 6994 2481 9139 6830 2494 9140 6831 2495 9141 6997 2496 9142 6996 2497 9143 7066 2476 9144 7059 2498 9145 7033 2499 9146 7064 2500 9147 6988 2454 9148 7000 2456 9149 6831 2495 9150 6830 2494 9151 7045 2469 9152 7034 2501 9153 7035 2491 9154 7047 2470 9155 6832 2502 9156 6831 2495 9157 7000 2456 9158 7002 2455 9159 7051 2434 9160 7037 2486 9161 6738 2444 9162 6741 2433 9163 7008 2490 9164 6990 2503 9165 6832 2502 9166 6834 2504 9167 6834 2504 9168 6835 2505 9169 7007 2479 9170 7008 2490 9171 7050 2431 9172 7042 2443 9173 7041 2506 9174 7048 2507 9175 7003 2462 9176 7004 2461 9177 6835 2505 9178 6834 2504 9179 7063 2508 9180 7054 2408 9181 7055 2471 9182 7065 2475 9183 7047 2470 9184 7035 2491 9185 7036 2487 9186 7049 2509 9187 6835 2505 9188 6833 2464 9189 7006 2480 9190 7007 2479 9191 7065 2475 9192 7055 2471 9193 7056 2510 9194 7067 2459 9195 7004 2461 9196 7005 2463 9197 6833 2464 9198 6835 2505 9199 7060 2485 9200 6981 2484 9201 6982 2492 9202 7059 2498 9203 7067 2459 9204 7056 2510 9205 7057 2488 9206 7070 2460 9207 6850 2511 9208 6836 2003 9209 7009 2008 9210 7063 2508 9211 7068 2466 9212 7060 2485 9213 7059 2498 9214 7066 2476 9215 7064 2500 9216 7010 2000 9217 6836 2003 9218 6850 2511 9219 7069 2465 9220 7061 2482 9221 7060 2485 9222 7068 2466 9223 7035 2491 9224 7034 2501 9225 6987 2512 9226 6982 2492 9227 7059 2498 9228 6982 2492 9229 6987 2512 9230 7033 2499 9231 7041 2506 9232 6984 2513 9233 6983 2472 9234 7040 2477 9235 7056 2510 9236 7055 2471 9237 6983 2472 9238 6984 2513 9239 7044 2493 9240 7039 2406 9241 6998 2405 9242 6988 2454 9243 6987 2512 9244 7034 2501 9245 6989 2514 9246 7001 2489 9247 7033 2499 9248 6987 2512 9249 7001 2489 9250 6995 2478 9251 6998 2405 9252 6999 2404 9253 7003 2462 9254 7002 2455 9255 6989 2514 9256 6990 2503 9257 7008 2490 9258 7001 2489 9259 7063 2508 9260 7009 2008 9261 7011 2011 9262 6992 2473 9263 6994 2481 9264 7012 2031 9265 7010 2000 9266 7064 2500 9267 7049 2509 9268 7036 2487 9269 7037 2486 9270 7051 2434 9271 7046 2515 9272 7040 2477 9273 7039 2406 9274 7044 2493 9275 7048 2507 9276 7041 2506 9277 7040 2477 9278 7046 2515 9279 7384 2516 9280 7259 2517 9281 7336 2518 9282 7257 2519 9283 7384 2516 9284 7257 2519 9285 7258 2520 9286 7471 2521 9287 7042 2443 9288 6985 2442 9289 6984 2513 9290 7041 2506 9291 6845 2468 9292 6830 2494 9293 6996 2497 9294 7045 2469 9295 6990 2503 9296 6997 2496 9297 6831 2495 9298 6832 2502 9299 6834 2504 9300 6832 2502 9301 7002 2455 9302 7003 2462 9303 7046 2515 9304 7044 2493 9305 6845 2468 9306 6846 2467 9307 6833 2464 9308 6837 2029 9309 7014 2012 9310 7006 2480 9311 7066 2476 9312 7064 2500 9313 6850 2511 9314 6851 2474 9315 7057 2488 9316 7056 2510 9317 6984 2513 9318 6985 2442 9319 6847 2522 9320 6846 2467 9321 7047 2470 9322 7049 2509 9323 7033 2499 9324 6995 2478 9325 6994 2481 9326 7064 2500 9327 7048 2507 9328 7046 2515 9329 6846 2467 9330 6847 2522 9331 7045 2469 9332 6996 2497 9333 6989 2514 9334 7034 2501 9335 6848 2432 9336 6847 2522 9337 7049 2509 9338 7051 2434 9339 6996 2497 9340 6997 2496 9341 6990 2503 9342 6989 2514 9343 7050 2431 9344 7048 2507 9345 6847 2522 9346 6848 2432 9347 7063 2508 9348 6992 2473 9349 6993 2409 9350 7054 2408 9351 6851 2474 9352 6850 2511 9353 7063 2508 9354 7065 2475 9355 7488 1856 9356 7481 1851 9357 7487 2523 9358 7494 2524 9359 7495 1854 9360 7488 1856 9361 7494 2524 9362 7526 2525 9363 7577 1846 9364 7495 1854 9365 7526 2525 9366 7544 2526 9367 6822 2527 9368 6821 2427 9369 6777 2426 9370 7480 2416 9371 7486 2528 9372 7487 2523 9373 7309 2529 9374 7310 2530 9375 7577 1846 9376 7347 2531 9377 7371 1761 9378 7368 1760 9379 7347 2531 9380 7346 2414 9381 7370 1773 9382 7371 1761 9383 7544 2526 9384 6828 2532 9385 7347 2531 9386 7577 1846 9387 7545 2415 9388 7346 2414 9389 7347 2531 9390 6828 2532 9391 6790 1833 9392 6821 2427 9393 7309 2529 9394 6944 1852 9395 7310 2530 9396 7309 2529 9397 6821 2427 9398 6822 2527 9399 7487 2523 9400 7481 1851 9401 6944 1852 9402 7309 2529 9403 6820 2533 9404 6822 2527 9405 7480 2416 9406 7479 2534 9407 7308 2535 9408 7310 2530 9409 6822 2527 9410 6820 2533 9411 6826 2536 9412 6825 2537 9413 7539 2538 9414 7541 2539 9415 7544 2526 9416 7542 2540 9417 6827 2541 9418 6828 2532 9419 7485 2542 9420 7486 2528 9421 7310 2530 9422 7308 2535 9423 7388 2421 9424 7387 2543 9425 7474 2544 9426 7475 2419 9427 7530 2424 9428 7529 2545 9429 7387 2543 9430 7388 2421 9431 7526 2525 9432 7494 2524 9433 7493 2546 9434 7525 2547 9435 7542 2540 9436 7525 2547 9437 7524 2548 9438 7540 2549 9439 7544 2526 9440 7526 2525 9441 7525 2547 9442 7542 2540 9443 7541 2539 9444 7539 2538 9445 7528 2550 9446 7529 2545 9447 7543 2551 9448 7541 2539 9449 7529 2545 9450 7530 2424 9451 7545 2415 9452 7543 2551 9453 7530 2424 9454 7532 2423 9455 7493 2546 9456 7486 2528 9457 7485 2542 9458 7492 2552 9459 6827 2541 9460 6826 2536 9461 7541 2539 9462 7543 2551 9463 7542 2540 9464 7540 2549 9465 6826 2536 9466 6827 2541 9467 6828 2532 9468 6827 2541 9469 7543 2551 9470 7545 2415 9471 7480 2416 9472 7475 2419 9473 7474 2544 9474 7479 2534 9475 7494 2524 9476 7487 2523 9477 7486 2528 9478 7493 2546 9479 7525 2547 9480 7493 2546 9481 7492 2552 9482 7524 2548 9483 7476 2553 9484 7470 2554 9485 6816 2555 9486 6817 2556 9487 6818 2557 9488 6819 2558 9489 7478 2559 9490 7477 2560 9491 7252 2561 9492 7251 2562 9493 6813 2052 9494 6811 2563 9495 6812 2564 9496 6811 2563 9497 7249 2565 9498 7248 2566 9499 7476 2553 9500 7471 2521 9501 7258 2520 9502 7470 2554 9503 7253 2567 9504 7252 2561 9505 6811 2563 9506 6812 2564 9507 7477 2560 9508 7472 2568 9509 7471 2521 9510 7476 2553 9511 7491 2569 9512 7484 2570 9513 7483 2571 9514 7490 2572 9515 7538 2573 9516 7523 2574 9517 7522 2575 9518 7536 2576 9519 7539 2538 9520 7537 2577 9521 7527 2578 9522 7528 2550 9523 7535 2579 9524 7337 2580 9525 7336 2518 9526 7259 2517 9527 6812 2564 9528 6814 2581 9529 7254 2582 9530 7253 2567 9531 7537 2577 9532 7535 2579 9533 7259 2517 9534 7527 2578 9535 7248 2566 9536 7441 2583 9537 6814 2581 9538 6812 2564 9539 7527 2578 9540 7259 2517 9541 7384 2516 9542 7385 2584 9543 6814 2581 9544 6815 2585 9545 7256 2586 9546 7254 2582 9547 7304 2587 9548 7303 2588 9549 7441 2583 9550 7469 2589 9551 7441 2583 9552 7303 2588 9553 6815 2585 9554 6814 2581 9555 6817 2556 9556 6818 2557 9557 7477 2560 9558 7476 2553 9559 7385 2584 9560 7384 2516 9561 7471 2521 9562 7472 2568 9563 7305 2590 9564 7306 2591 9565 6818 2557 9566 6817 2556 9567 7306 2591 9568 7307 2592 9569 6819 2558 9570 6818 2557 9571 7529 2545 9572 7528 2550 9573 7386 2593 9574 7387 2543 9575 7528 2550 9576 7527 2578 9577 7385 2584 9578 7386 2593 9579 7536 2576 9580 7534 2594 9581 6823 2595 9582 6824 2596 9583 6825 2537 9584 6824 2596 9585 7537 2577 9586 7539 2538 9587 7538 2573 9588 7536 2576 9589 6824 2596 9590 6825 2537 9591 7540 2549 9592 7538 2573 9593 6825 2537 9594 6826 2536 9595 7478 2559 9596 7473 2597 9597 7472 2568 9598 7477 2560 9599 7238 2060 9600 7230 2050 9601 7229 2598 9602 7237 2599 9603 7479 2534 9604 7474 2544 9605 7473 2597 9606 7478 2559 9607 7243 2064 9608 7238 2060 9609 7237 2599 9610 7241 2600 9611 7490 2572 9612 7483 2571 9613 7482 2601 9614 7489 2602 9615 7386 2593 9616 7385 2584 9617 7472 2568 9618 7473 2597 9619 7387 2543 9620 7386 2593 9621 7473 2597 9622 7474 2544 9623 6743 2448 9624 6736 2453 9625 6980 2483 9626 7061 2482 9627 7492 2552 9628 7485 2542 9629 7484 2570 9630 7491 2569 9631 6736 2453 9632 6738 2444 9633 7037 2486 9634 6980 2483 9635 7229 2598 9636 7230 2050 9637 6803 2045 9638 6805 2048 9639 7534 2594 9640 7246 2063 9641 6810 2065 9642 6823 2595 9643 6811 2563 9644 6813 2052 9645 7250 2041 9646 7249 2565 9647 6816 2555 9648 6815 2585 9649 7303 2588 9650 7304 2587 9651 7470 2554 9652 7256 2586 9653 6815 2585 9654 6816 2555 9655 7522 2575 9656 7490 2572 9657 7489 2602 9658 7521 2603 9659 6817 2556 9660 6816 2555 9661 7304 2587 9662 7305 2590 9663 6819 2558 9664 6820 2533 9665 7479 2534 9666 7478 2559 9667 7307 2592 9668 7308 2535 9669 6820 2533 9670 6819 2558 9671 6824 2596 9672 6823 2595 9673 7535 2579 9674 7537 2577 9675 7337 2580 9676 7245 2062 9677 7243 2064 9678 7251 2562 9679 7335 2044 9680 7244 2043 9681 7246 2063 9682 7534 2594 9683 7535 2579 9684 7247 2061 9685 7245 2062 9686 7337 2580 9687 7469 2589 9688 7441 2583 9689 7248 2566 9690 7255 2604 9691 7336 2518 9692 7252 2561 9693 7253 2567 9694 7257 2519 9695 7237 2599 9696 7229 2598 9697 6805 2048 9698 6807 2055 9699 7470 2554 9700 7258 2520 9701 7254 2582 9702 7256 2586 9703 7521 2603 9704 7489 2602 9705 7255 2604 9706 7334 2605 9707 7489 2602 9708 7482 2601 9709 7469 2589 9710 7255 2604 9711 7523 2574 9712 7491 2569 9713 7490 2572 9714 7522 2575 9715 7305 2590 9716 7304 2587 9717 7469 2589 9718 7482 2601 9719 7482 2601 9720 7483 2571 9721 7306 2591 9722 7305 2590 9723 7483 2571 9724 7484 2570 9725 7307 2592 9726 7306 2591 9727 7484 2570 9728 7485 2542 9729 7308 2535 9730 7307 2592 9731 7521 2603 9732 7334 2605 9733 7335 2044 9734 7534 2594 9735 7255 2604 9736 7248 2566 9737 7249 2565 9738 7334 2605 9739 7241 2600 9740 7237 2599 9741 6807 2055 9742 6808 2057 9743 7524 2548 9744 7492 2552 9745 7491 2569 9746 7523 2574 9747 7334 2605 9748 7249 2565 9749 7250 2041 9750 7335 2044 9751 7536 2576 9752 7522 2575 9753 7521 2603 9754 7534 2594 9755 7337 2580 9756 7251 2562 9757 7252 2561 9758 7336 2518 9759 7243 2064 9760 7241 2600 9761 6808 2057 9762 6809 2053 9763 7251 2562 9764 7243 2064 9765 6809 2053 9766 6813 2052 9767 7258 2520 9768 7257 2519 9769 7253 2567 9770 7254 2582 9771 6823 2595 9772 6810 2065 9773 7247 2061 9774 7535 2579 9775 7540 2549 9776 7524 2548 9777 7523 2574 9778 7538 2573 9779 5057 2606 9780 5058 2607 9781 6156 2608 9782 6157 2609 9783 5984 2610 9784 5983 2611 9785 5977 2612 9786 5980 2613 9787 6164 2614 9788 5041 2615 9789 5025 2616 9790 5058 2607 9791 5041 2615 9792 5468 2617 9793 5034 2618 9794 5025 2616 9795 5025 2616 9796 5034 2618 9797 5471 2619 9798 5042 2620 9799 6172 2621 9800 6173 2622 9801 5044 2623 9802 5043 2624 9803 5044 2623 9804 5045 2625 9805 5972 2626 9806 5975 2627 9807 6173 2622 9808 5981 2628 9809 5045 2625 9810 5044 2623 9811 5053 2629 9812 5046 2630 9813 5985 2631 9814 5992 2632 9815 5051 2633 9816 5052 2634 9817 5781 2635 9818 5600 2636 9819 5857 2637 9820 5744 2638 9821 5052 2634 9822 5051 2633 9823 5043 2624 9824 5042 2620 9825 5471 2619 9826 6172 2621 9827 5984 2610 9828 5980 2613 9829 5054 2639 9830 5055 2640 9831 5974 2641 9832 6156 2608 9833 5976 2642 9834 5973 2643 9835 5980 2613 9836 5977 2612 9837 5978 2644 9838 5979 2645 9839 5976 2642 9840 6156 2608 9841 5042 2620 9842 5043 2624 9843 5043 2624 9844 5044 2623 9845 5975 2627 9846 5976 2642 9847 6148 2646 9848 5972 2626 9849 5045 2625 9850 5046 2630 9851 5777 2647 9852 6148 2646 9853 5046 2630 9854 5053 2629 9855 5056 2648 9856 5051 2633 9857 5600 2636 9858 5858 2649 9859 5979 2645 9860 5857 2637 9861 5051 2633 9862 5056 2648 9863 5052 2634 9864 5057 2606 9865 6157 2609 9866 5781 2635 9867 5744 2638 9868 6165 2650 9869 5057 2606 9870 5052 2634 9871 5053 2629 9872 5055 2640 9873 5778 2651 9874 5777 2647 9875 5992 2632 9876 5984 2610 9877 5055 2640 9878 5053 2629 9879 5054 2639 9880 5056 2648 9881 5858 2649 9882 5804 2652 9883 5980 2613 9884 5979 2645 9885 5056 2648 9886 5054 2639 9887 5055 2640 9888 5054 2639 9889 5804 2652 9890 5778 2651 9891 6165 2650 9892 6164 2614 9893 5058 2607 9894 5057 2606 9895 6156 2608 9896 5058 2607 9897 5025 2616 9898 5042 2620 9899 5992 2632 9900 5985 2631 9901 5986 2653 9902 5991 2654 9903 5974 2641 9904 5779 2655 9905 6157 2609 9906 6156 2608 9907 5046 2630 9908 5045 2625 9909 5981 2628 9910 5985 2631 9911 5973 2643 9912 5976 2642 9913 5975 2627 9914 5971 2656 9915 5992 2632 9916 5991 2654 9917 5983 2611 9918 5984 2610 9919 5765 2657 9920 5764 2658 9921 5766 2659 9922 5767 2660 9923 6149 2661 9924 6148 2646 9925 5777 2647 9926 6158 2662 9927 5771 2663 9928 5769 2664 9929 5768 2665 9930 5772 2666 9931 6155 2667 9932 6154 2668 9933 5858 2649 9934 5600 2636 9935 5783 2669 9936 5778 2651 9937 5804 2652 9938 6151 2670 9939 5974 2641 9940 5750 2671 9941 5751 2672 9942 5779 2655 9943 5776 2673 9944 5773 2674 9945 5774 2675 9946 5775 2676 9947 6155 2667 9948 5600 2636 9949 5781 2635 9950 5780 2677 9951 5971 2656 9952 5741 2678 9953 5746 2679 9954 5973 2643 9955 6159 2680 9956 5739 2681 9957 6149 2661 9958 6158 2662 9959 6159 2680 9960 5771 2663 9961 5766 2659 9962 5739 2681 9963 6150 2682 9964 6153 2683 9965 5752 2684 9966 5770 2685 9967 6149 2661 9968 5739 2681 9969 5740 2686 9970 5970 2687 9971 6153 2683 9972 6152 2688 9973 5755 2689 9974 5752 2684 9975 5751 2672 9976 5750 2671 9977 5760 2690 9978 5763 2691 9979 5763 2691 9980 5760 2690 9981 5761 2692 9982 5762 2693 9983 5783 2669 9984 5782 2694 9985 6159 2680 9986 6158 2662 9987 6151 2670 9988 6150 2682 9989 5782 2694 9990 5783 2669 9991 5772 2666 9992 5767 2660 9993 5766 2659 9994 5771 2663 9995 5780 2677 9996 5781 2635 9997 6157 2609 9998 5779 2655 9999 5970 2687 10000 5972 2626 10001 6148 2646 10002 6149 2661 10003 5770 2685 10004 5601 2695 10005 5768 2665 10006 5769 2664 10007 5765 2657 10008 5775 2676 10009 5774 2675 10010 5764 2658 10011 5753 2696 10012 5601 2695 10013 5770 2685 10014 5752 2684 10015 6151 2670 10016 5804 2652 10017 5858 2649 10018 6154 2668 10019 6155 2667 10020 6152 2688 10021 6153 2683 10022 6154 2668 10023 6154 2668 10024 6153 2683 10025 6150 2682 10026 6151 2670 10027 5971 2656 10028 5975 2627 10029 5972 2626 10030 5970 2687 10031 5779 2655 10032 5751 2672 10033 5749 2697 10034 5780 2677 10035 5973 2643 10036 5746 2679 10037 5750 2671 10038 5974 2641 10039 5780 2677 10040 5749 2697 10041 6152 2688 10042 6155 2667 10043 5970 2687 10044 5740 2686 10045 5741 2678 10046 5971 2656 10047 6159 2680 10048 5782 2694 10049 5769 2664 10050 5771 2663 10051 5782 2694 10052 6150 2682 10053 5770 2685 10054 5769 2664 10055 5746 2679 10056 5741 2678 10057 5774 2675 10058 5773 2674 10059 5740 2686 10060 5739 2681 10061 5766 2659 10062 5764 2658 10063 5741 2678 10064 5740 2686 10065 5764 2658 10066 5774 2675 10067 6152 2688 10068 5749 2697 10069 5757 2698 10070 5755 2689 10071 5750 2671 10072 5746 2679 10073 5773 2674 10074 5760 2690 10075 5749 2697 10076 5751 2672 10077 5763 2691 10078 5757 2698 10079 5752 2684 10080 5755 2689 10081 5754 2699 10082 5753 2696 10083 5760 2690 10084 5773 2674 10085 5776 2673 10086 5761 2692 10087 5755 2689 10088 5757 2698 10089 5756 2700 10090 5754 2699 10091 6158 2662 10092 5777 2647 10093 5778 2651 10094 5783 2669 10095 5757 2698 10096 5763 2691 10097 5762 2693 10098 5756 2700 10099 5608 2701 10100 5605 2702 10101 5710 2703 10102 5721 2704 10103 5719 2705 10104 5713 2706 10105 5605 2702 10106 5608 2701 10107 5605 2702 10108 5606 2707 10109 5715 2708 10110 5710 2703 10111 5713 2706 10112 5714 2709 10113 5606 2707 10114 5605 2702 10115 5719 2705 10116 5720 2710 10117 5714 2709 10118 5713 2706 10119 5725 2711 10120 5724 2712 10121 5717 2713 10122 5718 2714 10123 5714 2709 10124 5717 2713 10125 5607 2715 10126 5606 2707 10127 5720 2710 10128 5821 2716 10129 5819 2717 10130 5718 2714 10131 5725 2711 10132 5718 2714 10133 5819 2717 10134 5891 2718 10135 5767 2660 10136 5707 2719 10137 5708 2720 10138 5765 2657 10139 5724 2712 10140 5723 2721 10141 5607 2715 10142 5717 2713 10143 5723 2721 10144 5722 2722 10145 5716 2723 10146 5607 2715 10147 5712 2724 10148 5823 2725 10149 5609 2726 10150 5604 2727 10151 5606 2707 10152 5607 2715 10153 5716 2723 10154 5715 2708 10155 5720 2710 10156 5719 2705 10157 5822 2728 10158 5821 2716 10159 5608 2701 10160 5610 2729 10161 5822 2728 10162 5719 2705 10163 5894 2730 10164 5676 2731 10165 5886 2732 10166 5895 2733 10167 5897 2734 10168 5722 2722 10169 5723 2721 10170 5896 2735 10171 5709 2736 10172 5820 2737 10173 5824 2738 10174 5711 2739 10175 5717 2713 10176 5714 2709 10177 5720 2710 10178 5718 2714 10179 5723 2721 10180 5724 2712 10181 5726 2740 10182 5727 2741 10183 5723 2721 10184 5727 2741 10185 5894 2730 10186 5896 2735 10187 5826 2742 10188 5775 2676 10189 5765 2657 10190 5708 2720 10191 5610 2729 10192 5609 2726 10193 5823 2725 10194 5822 2728 10195 5892 2743 10196 5820 2737 10197 5709 2736 10198 5898 2744 10199 5712 2724 10200 5711 2739 10201 5824 2738 10202 5823 2725 10203 5756 2700 10204 5715 2708 10205 5716 2723 10206 5754 2699 10207 5725 2711 10208 5891 2718 10209 5890 2745 10210 5734 2746 10211 5824 2738 10212 5820 2737 10213 5819 2717 10214 5821 2716 10215 5892 2743 10216 5889 2747 10217 5890 2745 10218 5891 2718 10219 5900 2748 10220 5895 2733 10221 5893 2749 10222 5898 2744 10223 5897 2734 10224 5896 2735 10225 5900 2748 10226 5899 2750 10227 5762 2693 10228 5710 2703 10229 5715 2708 10230 5756 2700 10231 5602 2751 10232 5603 2752 10233 5707 2719 10234 5706 2753 10235 5892 2743 10236 5891 2718 10237 5819 2717 10238 5820 2737 10239 5762 2693 10240 5761 2692 10241 5721 2704 10242 5710 2703 10243 5824 2738 10244 5821 2716 10245 5822 2728 10246 5823 2725 10247 5772 2666 10248 5706 2753 10249 5707 2719 10250 5767 2660 10251 5892 2743 10252 5898 2744 10253 5893 2749 10254 5889 2747 10255 5721 2704 10256 5825 2754 10257 5610 2729 10258 5608 2701 10259 5825 2754 10260 5721 2704 10261 5761 2692 10262 5776 2673 10263 5900 2748 10264 5896 2735 10265 5894 2730 10266 5895 2733 10267 5826 2742 10268 5825 2754 10269 5776 2673 10270 5775 2676 10271 5899 2750 10272 5768 2665 10273 5601 2695 10274 5897 2734 10275 5725 2711 10276 5734 2746 10277 5726 2740 10278 5724 2712 10279 5897 2734 10280 5601 2695 10281 5753 2696 10282 5722 2722 10283 5754 2699 10284 5716 2723 10285 5722 2722 10286 5753 2696 10287 5899 2750 10288 5706 2753 10289 5772 2666 10290 5768 2665 10291 5900 2748 10292 5898 2744 10293 5709 2736 10294 5602 2751 10295 5900 2748 10296 5602 2751 10297 5706 2753 10298 5899 2750 10299 5709 2736 10300 5711 2739 10301 5603 2752 10302 5602 2751 10303 5603 2752 10304 5604 2727 10305 5708 2720 10306 5707 2719 10307 5825 2754 10308 5826 2742 10309 5609 2726 10310 5610 2729 10311 5711 2739 10312 5712 2724 10313 5604 2727 10314 5603 2752 10315 5894 2730 10316 5727 2741 10317 5728 2755 10318 5676 2731 10319 5604 2727 10320 5609 2726 10321 5826 2742 10322 5708 2720 10323 5953 2756 10324 5413 2757 10325 5349 2758 10326 5223 2759 10327 5252 2760 10328 5249 2761 10329 5339 2762 10330 5340 2763 10331 5282 2764 10332 5316 2765 10333 5226 2766 10334 5281 2767 10335 5328 2768 10336 5283 2769 10337 5222 2770 10338 5327 2771 10339 5248 2772 10340 5251 2773 10341 5317 2774 10342 5312 2775 10343 5281 2767 10344 5226 2766 10345 5224 2776 10346 5225 2777 10347 5361 2778 10348 5360 2779 10349 5249 2761 10350 5252 2760 10351 5961 2780 10352 5743 2781 10353 5959 2782 10354 5960 2783 10355 5961 2780 10356 5328 2768 10357 5339 2762 10358 5951 2784 10359 5955 2785 10360 5225 2777 10361 5349 2758 10362 5413 2757 10363 5758 2786 10364 5952 2787 10365 5047 2788 10366 5048 2789 10367 5327 2771 10368 5340 2763 10369 5339 2762 10370 5328 2768 10371 5250 2790 10372 5251 2773 10373 5361 2778 10374 5366 2791 10375 5250 2790 10376 5319 2792 10377 5317 2774 10378 5251 2773 10379 5221 2793 10380 5379 2794 10381 5378 2795 10382 5285 2796 10383 5226 2766 10384 5316 2765 10385 5318 2797 10386 5228 2798 10387 5952 2787 10388 5951 2784 10389 5339 2762 10390 5249 2761 10391 5961 2780 10392 5951 2784 10393 5747 2799 10394 5743 2781 10395 5952 2787 10396 5249 2761 10397 5360 2779 10398 5047 2788 10399 6024 2800 10400 5683 2801 10401 5786 2802 10402 6023 2803 10403 5758 2786 10404 5747 2799 10405 5951 2784 10406 5952 2787 10407 5221 2793 10408 5223 2759 10409 5349 2758 10410 5379 2794 10411 5785 2804 10412 5248 2772 10413 5312 2775 10414 5683 2801 10415 5960 2783 10416 5953 2756 10417 5223 2759 10418 5283 2769 10419 5379 2794 10420 5349 2758 10421 5225 2777 10422 5224 2776 10423 5048 2789 10424 5047 2788 10425 5785 2804 10426 5827 2805 10427 5282 2764 10428 5312 2775 10429 5317 2774 10430 5316 2765 10431 5283 2769 10432 5223 2759 10433 5221 2793 10434 5222 2770 10435 5251 2773 10436 5248 2772 10437 5360 2779 10438 5361 2778 10439 5224 2776 10440 5227 2806 10441 5378 2795 10442 5379 2794 10443 5316 2765 10444 5317 2774 10445 5319 2792 10446 5318 2797 10447 6023 2803 10448 5786 2802 10449 5954 2807 10450 5682 2808 10451 5956 2809 10452 5414 2810 10453 5413 2757 10454 5953 2756 10455 5224 2776 10456 5226 2766 10457 5228 2798 10458 5227 2806 10459 5959 2782 10460 5743 2781 10461 5646 2811 10462 5644 2812 10463 5958 2813 10464 5599 2814 10465 5682 2808 10466 5954 2807 10467 5961 2780 10468 5960 2783 10469 5283 2769 10470 5328 2768 10471 5957 2815 10472 5955 2785 10473 5413 2757 10474 5414 2810 10475 6024 2800 10476 5827 2805 10477 5785 2804 10478 5683 2801 10479 5785 2804 10480 5047 2788 10481 5360 2779 10482 5248 2772 10483 5958 2813 10484 5954 2807 10485 5955 2785 10486 5957 2815 10487 5786 2802 10488 5683 2801 10489 5312 2775 10490 5282 2764 10491 5959 2782 10492 5956 2809 10493 5953 2756 10494 5960 2783 10495 5954 2807 10496 5786 2802 10497 5282 2764 10498 5281 2767 10499 5955 2785 10500 5954 2807 10501 5281 2767 10502 5225 2777 10503 5273 2816 10504 5284 2817 10505 5333 2818 10506 5276 2819 10507 5377 2820 10508 5376 2821 10509 5333 2818 10510 5284 2817 10511 5278 2822 10512 5236 2823 10513 5237 2824 10514 5332 2825 10515 5300 2826 10516 5320 2827 10517 5233 2828 10518 5236 2823 10519 5250 2790 10520 5311 2829 10521 5313 2830 10522 5319 2792 10523 5280 2831 10524 5277 2832 10525 5228 2798 10526 5318 2797 10527 5252 2760 10528 5340 2763 10529 5341 2833 10530 5253 2834 10531 5301 2835 10532 5241 2836 10533 5242 2837 10534 5329 2838 10535 5326 2839 10536 5341 2833 10537 5340 2763 10538 5327 2771 10539 5274 2840 10540 5326 2839 10541 5286 2841 10542 5273 2816 10543 5274 2840 10544 5380 2842 10545 5341 2833 10546 5326 2839 10547 5318 2797 10548 5319 2792 10549 5313 2830 10550 5280 2831 10551 5275 2843 10552 5301 2835 10553 5338 2844 10554 5381 2845 10555 5279 2846 10556 5311 2829 10557 5310 2847 10558 5300 2826 10559 5253 2834 10560 5341 2833 10561 5380 2842 10562 5381 2845 10563 5236 2823 10564 5233 2828 10565 5234 2848 10566 5237 2824 10567 5253 2834 10568 5381 2845 10569 5338 2844 10570 5287 2849 10571 5329 2838 10572 5337 2850 10573 5338 2844 10574 5301 2835 10575 5279 2846 10576 5300 2826 10577 5236 2823 10578 5278 2822 10579 5278 2822 10580 5332 2825 10581 5229 2851 10582 5277 2832 10583 5288 2852 10584 5255 2853 10585 5321 2854 10586 5310 2847 10587 5280 2831 10588 5313 2830 10589 5311 2829 10590 5279 2846 10591 5276 2819 10592 5241 2836 10593 5301 2835 10594 5275 2843 10595 5277 2832 10596 5229 2851 10597 5227 2806 10598 5228 2798 10599 5241 2836 10600 5240 2855 10601 5238 2856 10602 5242 2837 10603 5232 2857 10604 5233 2828 10605 5320 2827 10606 5324 2858 10607 5255 2853 10608 5323 2859 10609 5325 2860 10610 5321 2854 10611 5366 2791 10612 5361 2778 10613 5252 2760 10614 5253 2834 10615 5273 2816 10616 5286 2841 10617 5285 2796 10618 5284 2817 10619 5332 2825 10620 5237 2824 10621 5375 2861 10622 5376 2821 10623 5376 2821 10624 5375 2861 10625 5240 2855 10626 5333 2818 10627 5378 2795 10628 5377 2820 10629 5284 2817 10630 5285 2796 10631 5222 2770 10632 5286 2841 10633 5326 2839 10634 5327 2771 10635 5250 2790 10636 5366 2791 10637 5367 2862 10638 5288 2852 10639 5253 2834 10640 5287 2849 10641 5367 2862 10642 5366 2791 10643 5273 2816 10644 5276 2819 10645 5275 2843 10646 5274 2840 10647 5320 2827 10648 5321 2854 10649 5325 2860 10650 5324 2858 10651 5276 2819 10652 5333 2818 10653 5240 2855 10654 5241 2836 10655 5244 2863 10656 5242 2837 10657 5238 2856 10658 5239 2864 10659 5300 2826 10660 5310 2847 10661 5321 2854 10662 5320 2827 10663 5232 2857 10664 5235 2865 10665 5234 2848 10666 5233 2828 10667 5255 2853 10668 5288 2852 10669 5367 2862 10670 5368 2866 10671 5368 2866 10672 5367 2862 10673 5287 2849 10674 5257 2867 10675 5234 2848 10676 5235 2865 10677 5373 2868 10678 5374 2869 10679 5229 2851 10680 5332 2825 10681 5376 2821 10682 5377 2820 10683 5227 2806 10684 5229 2851 10685 5377 2820 10686 5378 2795 10687 5374 2869 10688 5373 2868 10689 5239 2864 10690 5238 2856 10691 5221 2793 10692 5285 2796 10693 5286 2841 10694 5222 2770 10695 5237 2824 10696 5234 2848 10697 5374 2869 10698 5375 2861 10699 5274 2840 10700 5275 2843 10701 5381 2845 10702 5380 2842 10703 5250 2790 10704 5288 2852 10705 5310 2847 10706 5311 2829 10707 5375 2861 10708 5374 2869 10709 5238 2856 10710 5240 2855 10711 5277 2832 10712 5280 2831 10713 5279 2846 10714 5278 2822 10715 5257 2867 10716 5287 2849 10717 5338 2844 10718 5337 2850 10719 5259 2870 10720 5348 2871 10721 5258 2872 10722 5314 2873 10723 5358 2874 10724 5362 2875 10725 5293 2876 10726 5305 2877 10727 5363 2878 10728 5362 2875 10729 5292 2879 10730 5268 2880 10731 5257 2867 10732 5334 2881 10733 5335 2882 10734 5256 2883 10735 5259 2870 10736 5254 2884 10737 5369 2885 10738 5370 2886 10739 5267 2887 10740 5331 2888 10741 5245 2889 10742 5266 2890 10743 5264 2891 10744 5342 2892 10745 5335 2882 10746 5267 2887 10747 5372 2893 10748 5350 2894 10749 5289 2895 10750 5243 2896 10751 5364 2897 10752 5363 2878 10753 5268 2880 10754 5269 2898 10755 5330 2899 10756 5336 2900 10757 5337 2850 10758 5329 2838 10759 5267 2887 10760 5335 2882 10761 5334 2881 10762 5331 2888 10763 5269 2898 10764 5258 2872 10765 5365 2901 10766 5364 2897 10767 5331 2888 10768 5334 2881 10769 5336 2900 10770 5330 2899 10771 5262 2902 10772 5263 2903 10773 5291 2904 10774 5293 2876 10775 5270 2905 10776 5268 2880 10777 5292 2879 10778 5290 2906 10779 5270 2905 10780 5290 2906 10781 5230 2907 10782 5231 2908 10783 5262 2902 10784 5293 2876 10785 5362 2875 10786 5363 2878 10787 5369 2885 10788 5368 2866 10789 5257 2867 10790 5256 2883 10791 5347 2909 10792 5261 2910 10793 5365 2901 10794 5371 2911 10795 5371 2911 10796 5365 2901 10797 5258 2872 10798 5348 2871 10799 5232 2857 10800 5324 2858 10801 5322 2912 10802 5247 2913 10803 5272 2914 10804 5231 2908 10805 5247 2913 10806 5322 2912 10807 5235 2865 10808 5246 2915 10809 5372 2893 10810 5373 2868 10811 5271 2916 10812 5314 2873 10813 5258 2872 10814 5269 2898 10815 5266 2890 10816 5263 2903 10817 5264 2891 10818 5267 2887 10819 5244 2863 10820 5245 2889 10821 5331 2888 10822 5330 2899 10823 5261 2910 10824 5347 2909 10825 5260 2917 10826 5342 2892 10827 5348 2871 10828 5259 2870 10829 5370 2886 10830 5371 2911 10831 5371 2911 10832 5370 2886 10833 5260 2917 10834 5347 2909 10835 5254 2884 10836 5315 2918 10837 5323 2859 10838 5255 2853 10839 5244 2863 10840 5330 2899 10841 5329 2838 10842 5242 2837 10843 5373 2868 10844 5372 2893 10845 5243 2896 10846 5239 2864 10847 5324 2858 10848 5325 2860 10849 5323 2859 10850 5322 2912 10851 5246 2915 10852 5230 2907 10853 5350 2894 10854 5372 2893 10855 5322 2912 10856 5323 2859 10857 5315 2918 10858 5272 2914 10859 5254 2884 10860 5259 2870 10861 5314 2873 10862 5315 2918 10863 5272 2914 10864 5315 2918 10865 5314 2873 10866 5271 2916 10867 5232 2857 10868 5247 2913 10869 5246 2915 10870 5235 2865 10871 5262 2902 10872 5265 2919 10873 5264 2891 10874 5263 2903 10875 5266 2890 10876 5245 2889 10877 5243 2896 10878 5289 2895 10879 5265 2919 10880 5262 2902 10881 5363 2878 10882 5364 2897 10883 5304 2920 10884 5292 2879 10885 5362 2875 10886 5358 2874 10887 5231 2908 10888 5230 2907 10889 5246 2915 10890 5247 2913 10891 5364 2897 10892 5365 2901 10893 5261 2910 10894 5265 2919 10895 5265 2919 10896 5261 2910 10897 5342 2892 10898 5264 2891 10899 5370 2886 10900 5369 2885 10901 5256 2883 10902 5260 2917 10903 5268 2880 10904 5270 2905 10905 5271 2916 10906 5269 2898 10907 5231 2908 10908 5272 2914 10909 5271 2916 10910 5270 2905 10911 5254 2884 10912 5255 2853 10913 5368 2866 10914 5369 2885 10915 5244 2863 10916 5239 2864 10917 5243 2896 10918 5245 2889 10919 5263 2903 10920 5266 2890 10921 5289 2895 10922 5291 2904 10923 5257 2867 10924 5337 2850 10925 5336 2900 10926 5334 2881 10927 5260 2917 10928 5256 2883 10929 5335 2882 10930 5342 2892 10931 6117 2921 10932 6022 2922 10933 5937 2923 10934 6118 2924 10935 6147 2925 10936 6145 2926 10937 5528 2927 10938 5490 2928 10939 5948 2929 10940 6081 2930 10941 6146 2931 10942 5949 2932 10943 6114 2933 10944 6118 2924 10945 5937 2923 10946 5936 2934 10947 5682 2808 10948 5599 2814 10949 5596 2935 10950 5681 2936 10951 5515 2937 10952 5517 2938 10953 6117 2921 10954 6118 2924 10955 6083 2939 10956 6051 2940 10957 6052 2941 10958 6084 2942 10959 6120 2943 10960 6119 2944 10961 5517 2938 10962 5515 2937 10963 6021 2945 10964 6025 2946 10965 5681 2936 10966 6027 2947 10967 5528 2927 10968 5529 2948 10969 6028 2949 10970 6143 2950 10971 6145 2926 10972 6029 2951 10973 5529 2948 10974 5528 2927 10975 5531 2952 10976 5529 2948 10977 6029 2951 10978 6032 2953 10979 6036 2954 10980 6034 2955 10981 5788 2956 10982 5787 2957 10983 5490 2928 10984 5528 2927 10985 6143 2950 10986 6144 2958 10987 6033 2959 10988 6028 2949 10989 5529 2948 10990 5531 2952 10991 6030 2960 10992 6027 2947 10993 5681 2936 10994 5596 2935 10995 6035 2961 10996 6019 2962 10997 6119 2944 10998 6051 2940 10999 6084 2942 11000 6047 2963 11001 6142 2964 11002 6085 2965 11003 6082 2966 11004 6031 2967 11005 5592 2968 11006 5788 2956 11007 6116 2969 11008 6044 2970 11009 6046 2971 11010 6115 2972 11011 6082 2966 11012 6085 2965 11013 6143 2950 11014 6028 2949 11015 6085 2965 11016 6082 2966 11017 6083 2939 11018 6084 2942 11019 6082 2966 11020 5788 2956 11021 6034 2955 11022 6083 2939 11023 6085 2965 11024 6142 2964 11025 6144 2958 11026 6143 2950 11027 6081 2930 11028 6145 2926 11029 6147 2925 11030 6146 2931 11031 5503 2973 11032 5514 2974 11033 6114 2933 11034 6113 2975 11035 6120 2943 11036 6115 2972 11037 6046 2971 11038 6052 2941 11039 6144 2958 11040 6141 2976 11041 5491 2977 11042 5490 2928 11043 6120 2943 11044 6052 2941 11045 6051 2940 11046 6119 2944 11047 5788 2956 11048 5592 2968 11049 5589 2978 11050 5787 2957 11051 6146 2931 11052 6078 2979 11053 5950 2980 11054 5949 2932 11055 6035 2961 11056 6051 2940 11057 6083 2939 11058 6034 2955 11059 6116 2969 11060 6115 2972 11061 5514 2974 11062 5503 2973 11063 6028 2949 11064 6033 2959 11065 6031 2967 11066 6082 2966 11067 6030 2960 11068 6032 2953 11069 6029 2951 11070 6027 2947 11071 5950 2980 11072 5935 2981 11073 5936 2934 11074 5949 2932 11075 6026 2982 11076 6025 2946 11077 6021 2945 11078 6022 2922 11079 6114 2933 11080 5936 2934 11081 5935 2981 11082 6113 2975 11083 6147 2925 11084 5490 2928 11085 5491 2977 11086 6079 2983 11087 5514 2974 11088 5515 2937 11089 6118 2924 11090 6114 2933 11091 6026 2982 11092 6024 2800 11093 6023 2803 11094 6025 2946 11095 6084 2942 11096 6052 2941 11097 6046 2971 11098 6047 2963 11099 6027 2947 11100 6029 2951 11101 6145 2926 11102 6081 2930 11103 5949 2932 11104 5936 2934 11105 5937 2923 11106 5948 2929 11107 6147 2925 11108 6079 2983 11109 6078 2979 11110 6146 2931 11111 5937 2923 11112 6022 2922 11113 6021 2945 11114 5948 2929 11115 6025 2946 11116 6023 2803 11117 5682 2808 11118 5681 2936 11119 6027 2947 11120 6081 2930 11121 5948 2929 11122 6021 2945 11123 6115 2972 11124 6120 2943 11125 5515 2937 11126 5514 2974 11127 6047 2963 11128 6046 2971 11129 6044 2970 11130 6045 2984 11131 6043 2985 11132 6042 2986 11133 6038 2987 11134 6039 2988 11135 6124 2989 11136 5946 2990 11137 5947 2991 11138 6126 2992 11139 6136 2993 11140 6135 2994 11141 6043 2985 11142 6039 2988 11143 6116 2969 11144 6076 2995 11145 6054 2996 11146 6053 2997 11147 6091 2998 11148 6063 2999 11149 5938 3000 11150 5411 3001 11151 6109 3002 11152 6077 3003 11153 5938 3000 11154 5939 3004 11155 6142 2964 11156 6047 2963 11157 6045 2984 11158 6140 3005 11159 6093 3006 11160 6090 3007 11161 6091 2998 11162 6092 3008 11163 6139 3009 11164 5944 3010 11165 5493 3011 11166 5492 3012 11167 6113 2975 11168 5411 3001 11169 5938 3000 11170 6077 3003 11171 6089 3013 11172 6086 3014 11173 6087 3015 11174 6088 3016 11175 5495 3017 11176 5496 3018 11177 6129 3019 11178 6130 3020 11179 6113 2975 11180 5935 2981 11181 5412 3021 11182 5411 3001 11183 6093 3006 11184 6078 2979 11185 6079 2983 11186 6080 3022 11187 6132 3023 11188 6135 2994 11189 6134 3024 11190 6131 3025 11191 6144 2958 11192 6142 2964 11193 6140 3005 11194 6141 2976 11195 6087 3015 11196 6064 3026 11197 6132 3023 11198 6088 3016 11199 6090 3007 11200 6127 3027 11201 6063 2999 11202 6091 2998 11203 6109 3002 11204 5939 3004 11205 5940 3028 11206 5942 3029 11207 6092 3008 11208 6091 2998 11209 5411 3001 11210 5412 3021 11211 6087 3015 11212 6053 2997 11213 6054 2996 11214 6064 3026 11215 6092 3008 11216 5950 2980 11217 6078 2979 11218 6093 3006 11219 6086 3014 11220 6050 3030 11221 6053 2997 11222 6087 3015 11223 6045 2984 11224 6044 2970 11225 6050 3030 11226 6086 3014 11227 6116 2969 11228 6053 2997 11229 6050 3030 11230 6044 2970 11231 5491 2977 11232 5492 3012 11233 6080 3022 11234 6079 2983 11235 5494 3031 11236 5495 3017 11237 6130 3020 11238 6128 3032 11239 6141 2976 11240 6139 3009 11241 5492 3012 11242 5491 2977 11243 6136 2993 11244 6133 3033 11245 6134 3024 11246 6135 2994 11247 5492 3012 11248 5493 3011 11249 5943 3034 11250 6080 3022 11251 6063 2999 11252 6127 3027 11253 6126 2992 11254 5947 2991 11255 5493 3011 11256 5494 3031 11257 6128 3032 11258 5943 3034 11259 5944 3010 11260 6131 3025 11261 5494 3031 11262 5493 3011 11263 6088 3016 11264 6132 3023 11265 6131 3025 11266 5944 3010 11267 6088 3016 11268 5944 3010 11269 6139 3009 11270 6089 3013 11271 6131 3025 11272 6134 3024 11273 5495 3017 11274 5494 3031 11275 6090 3007 11276 5943 3034 11277 6128 3032 11278 6127 3027 11279 6093 3006 11280 6080 3022 11281 5943 3034 11282 6090 3007 11283 6134 3024 11284 6133 3033 11285 5496 3018 11286 5495 3017 11287 5947 2991 11288 5939 3004 11289 5938 3000 11290 6063 2999 11291 5501 3035 11292 5502 3036 11293 6077 3003 11294 6109 3002 11295 6111 3037 11296 6076 2995 11297 5502 3036 11298 5501 3035 11299 6113 2975 11300 6077 3003 11301 5502 3036 11302 5503 2973 11303 6092 3008 11304 5412 3021 11305 5935 2981 11306 5950 2980 11307 6124 2989 11308 6126 2992 11309 6130 3020 11310 6129 3019 11311 5946 2990 11312 5940 3028 11313 5939 3004 11314 5947 2991 11315 6127 3027 11316 6128 3032 11317 6130 3020 11318 6126 2992 11319 6089 3013 11320 6139 3009 11321 6141 2976 11322 6140 3005 11323 6064 3026 11324 6054 2996 11325 6042 2986 11326 6043 2985 11327 6076 2995 11328 6111 3037 11329 6042 2986 11330 6054 2996 11331 6086 3014 11332 6089 3013 11333 6140 3005 11334 6045 2984 11335 6064 3026 11336 6043 2985 11337 6135 2994 11338 6132 3023 11339 6116 2969 11340 5503 2973 11341 5502 3036 11342 6076 2995 11343 5567 3038 11344 6107 3039 11345 5499 3040 11346 5498 3041 11347 6094 3042 11348 6137 3043 11349 6121 3044 11350 6041 3045 11351 5499 3040 11352 5500 3046 11353 6110 3047 11354 6106 3048 11355 6136 2993 11356 6039 2988 11357 6041 3045 11358 6121 3044 11359 6107 3039 11360 6112 3049 11361 5500 3046 11362 5499 3040 11363 6099 3050 11364 5941 3051 11365 5942 3029 11366 5945 3052 11367 5500 3046 11368 5501 3035 11369 6109 3002 11370 6110 3047 11371 5945 3052 11372 5942 3029 11373 5940 3028 11374 5946 2990 11375 6102 3053 11376 5934 3054 11377 5941 3051 11378 6099 3050 11379 5505 3055 11380 5504 3056 11381 6105 3057 11382 6101 3058 11383 6109 3002 11384 5942 3029 11385 5941 3051 11386 6110 3047 11387 6097 3059 11388 6108 3060 11389 5504 3056 11390 5505 3055 11391 6106 3048 11392 6110 3047 11393 5941 3051 11394 5934 3054 11395 5505 3055 11396 5506 3061 11397 6098 3062 11398 6097 3059 11399 6101 3058 11400 6104 3063 11401 5506 3061 11402 5505 3055 11403 6104 3063 11404 6071 3064 11405 5507 3065 11406 5506 3061 11407 5519 3066 11408 5507 3065 11409 6071 3064 11410 6059 3067 11411 6107 3039 11412 5567 3038 11413 6108 3060 11414 6049 3068 11415 6105 3057 11416 5568 3069 11417 6106 3048 11418 5934 3054 11419 6096 3070 11420 6074 3071 11421 6138 3072 11422 6137 3043 11423 6111 3037 11424 6040 3073 11425 6038 2987 11426 6042 2986 11427 5506 3061 11428 5507 3065 11429 6072 3074 11430 6098 3062 11431 6136 2993 11432 6121 3044 11433 6122 3075 11434 6133 3033 11435 6124 2989 11436 6129 3019 11437 6125 3076 11438 6123 3077 11439 6104 3063 11440 6101 3058 11441 6102 3053 11442 6103 3078 11443 5497 3079 11444 5527 3080 11445 6075 3081 11446 6125 3076 11447 6100 3082 11448 6103 3078 11449 6102 3053 11450 6099 3050 11451 6100 3082 11452 6123 3077 11453 6125 3076 11454 6075 3081 11455 6104 3063 11456 6103 3078 11457 6073 3083 11458 6071 3064 11459 6137 3043 11460 6094 3042 11461 6095 3084 11462 6096 3070 11463 6137 3043 11464 6138 3072 11465 6122 3075 11466 6121 3044 11467 6096 3070 11468 6098 3062 11469 6072 3074 11470 6074 3071 11471 5496 3018 11472 5497 3079 11473 6125 3076 11474 6129 3019 11475 6094 3042 11476 6048 3085 11477 6049 3068 11478 6095 3084 11479 6133 3033 11480 6122 3075 11481 5497 3079 11482 5496 3018 11483 6041 3045 11484 6040 3073 11485 6048 3085 11486 6094 3042 11487 6039 2988 11488 6038 2987 11489 6040 3073 11490 6041 3045 11491 6122 3075 11492 6138 3072 11493 5527 3080 11494 5497 3079 11495 5498 3041 11496 5499 3040 11497 6106 3048 11498 5568 3069 11499 6112 3049 11500 6107 3039 11501 6049 3068 11502 6048 3085 11503 6112 3049 11504 6111 3037 11505 5501 3035 11506 5500 3046 11507 5498 3041 11508 5504 3056 11509 6108 3060 11510 5567 3038 11511 6103 3078 11512 6100 3082 11513 6075 3081 11514 6073 3083 11515 6098 3062 11516 6096 3070 11517 6095 3084 11518 6097 3059 11519 6095 3084 11520 6049 3068 11521 6108 3060 11522 6097 3059 11523 6112 3049 11524 6048 3085 11525 6040 3073 11526 6111 3037 11527 6099 3050 11528 5945 3052 11529 6123 3077 11530 6100 3082 11531 5568 3069 11532 6105 3057 11533 5504 3056 11534 5498 3041 11535 6101 3058 11536 6105 3057 11537 5934 3054 11538 6102 3053 11539 6124 2989 11540 6123 3077 11541 5945 3052 11542 5946 2990 11543 5218 3086 11544 5188 3087 11545 5064 3088 11546 5063 3089 11547 5089 3090 11548 5158 3091 11549 5156 3092 11550 5090 3093 11551 5060 3094 11552 5218 3086 11553 5217 3095 11554 5124 3096 11555 5799 3097 11556 5798 3098 11557 5062 3099 11558 5122 3100 11559 5920 3101 11560 5794 3102 11561 5798 3098 11562 5799 3097 11563 6037 3103 11564 6036 2954 11565 5797 3104 11566 5796 3105 11567 5063 3089 11568 5066 3106 11569 5217 3095 11570 5218 3086 11571 5798 3098 11572 5794 3102 11573 5409 3107 11574 5408 3108 11575 5800 3109 11576 5408 3108 11577 5409 3107 11578 5795 3110 11579 5813 3111 11580 5793 3112 11581 5586 3113 11582 5583 3114 11583 5799 3097 11584 5122 3100 11585 5167 3115 11586 5797 3104 11587 5813 3111 11588 5699 3116 11589 5792 3117 11590 5793 3112 11591 5922 3118 11592 5802 3119 11593 5800 3109 11594 5795 3110 11595 5797 3104 11596 5167 3115 11597 5178 3120 11598 5796 3105 11599 5792 3117 11600 5699 3116 11601 5701 3121 11602 5791 3122 11603 5791 3122 11604 5701 3121 11605 5700 3123 11606 5789 3124 11607 6018 3125 11608 5087 3126 11609 5151 3127 11610 6017 3128 11611 5922 3118 11612 5586 3113 11613 5793 3112 11614 5802 3119 11615 6016 3129 11616 5121 3130 11617 5120 3131 11618 5802 3119 11619 5920 3101 11620 5799 3097 11621 5787 2957 11622 5589 2978 11623 5802 3119 11624 5120 3131 11625 5064 3088 11626 5800 3109 11627 6037 3103 11628 5796 3105 11629 5801 3132 11630 5790 3133 11631 6036 2954 11632 5787 2957 11633 5799 3097 11634 5797 3104 11635 5798 3098 11636 5408 3108 11637 5188 3087 11638 5062 3099 11639 5792 3117 11640 6016 3129 11641 5802 3119 11642 5793 3112 11643 5091 3134 11644 5088 3135 11645 5178 3120 11646 5179 3136 11647 5792 3117 11648 5791 3122 11649 6017 3128 11650 6016 3129 11651 6018 3125 11652 5789 3124 11653 5405 3137 11654 5059 3138 11655 5801 3132 11656 5796 3105 11657 5178 3120 11658 5088 3135 11659 5166 3139 11660 5179 3136 11661 5178 3120 11662 5167 3115 11663 5167 3115 11664 5122 3100 11665 5061 3140 11666 5166 3139 11667 5087 3126 11668 5090 3093 11669 5156 3092 11670 5151 3127 11671 5121 3130 11672 5151 3127 11673 5156 3092 11674 5155 3141 11675 5122 3100 11676 5062 3099 11677 5060 3094 11678 5061 3140 11679 5060 3094 11680 5062 3099 11681 5188 3087 11682 5218 3086 11683 5091 3134 11684 5179 3136 11685 5180 3142 11686 5092 3143 11687 5120 3131 11688 5065 3144 11689 5063 3089 11690 5064 3088 11691 5165 3145 11692 5180 3142 11693 5179 3136 11694 5166 3139 11695 5060 3094 11696 5124 3096 11697 5125 3146 11698 5061 3140 11699 5090 3093 11700 5087 3126 11701 5199 3147 11702 5200 3148 11703 5200 3148 11704 5199 3147 11705 5088 3135 11706 5091 3134 11707 5801 3132 11708 5059 3138 11709 5405 3137 11710 5790 3133 11711 6018 3125 11712 5059 3138 11713 5199 3147 11714 5087 3126 11715 5801 3132 11716 5088 3135 11717 5199 3147 11718 5059 3138 11719 6017 3128 11720 5151 3127 11721 5121 3130 11722 6016 3129 11723 5800 3109 11724 5064 3088 11725 5188 3087 11726 5408 3108 11727 5089 3090 11728 5090 3093 11729 5200 3148 11730 5205 3149 11731 5121 3130 11732 5155 3141 11733 5065 3144 11734 5120 3131 11735 5061 3140 11736 5125 3146 11737 5165 3145 11738 5166 3139 11739 5063 3089 11740 5065 3144 11741 5067 3150 11742 5066 3106 11743 6037 3103 11744 6035 2961 11745 6034 2955 11746 6036 2954 11747 5205 3149 11748 5200 3148 11749 5091 3134 11750 5092 3143 11751 5789 3124 11752 6018 3125 11753 6017 3128 11754 5791 3122 11755 5071 3151 11756 5072 3152 11757 5159 3153 11758 5163 3154 11759 5083 3155 11760 5169 3156 11761 5168 3157 11762 5081 3158 11763 5083 3155 11764 5081 3158 11765 5077 3159 11766 5078 3160 11767 5117 3161 11768 5075 3162 11769 5076 3163 11770 5171 3164 11771 5139 3165 11772 5159 3153 11773 5072 3152 11774 5075 3162 11775 5096 3166 11776 5176 3167 11777 5175 3168 11778 5173 3169 11779 5115 3170 11780 5080 3171 11781 5140 3172 11782 5114 3173 11783 5207 3174 11784 5206 3175 11785 5126 3176 11786 5096 3166 11787 5116 3177 11788 5068 3178 11789 5066 3106 11790 5067 3150 11791 5075 3162 11792 5072 3152 11793 5073 3179 11794 5076 3163 11795 5073 3179 11796 5074 3180 11797 5212 3181 11798 5213 3182 11799 5213 3182 11800 5212 3181 11801 5078 3160 11802 5077 3159 11803 5096 3166 11804 5126 3176 11805 5177 3183 11806 5176 3167 11807 5119 3184 11808 5152 3185 11809 5150 3186 11810 5118 3187 11811 5094 3188 11812 5127 3189 11813 5206 3175 11814 5207 3174 11815 5076 3163 11816 5073 3179 11817 5213 3182 11818 5214 3190 11819 5168 3157 11820 5176 3167 11821 5177 3183 11822 5140 3172 11823 5214 3190 11824 5213 3182 11825 5077 3159 11826 5079 3191 11827 5112 3192 11828 5123 3193 11829 5172 3194 11830 5115 3170 11831 5066 3106 11832 5068 3178 11833 5216 3195 11834 5217 3095 11835 5171 3164 11836 5076 3163 11837 5214 3190 11838 5215 3196 11839 5115 3170 11840 5172 3194 11841 5079 3191 11842 5080 3171 11843 5119 3184 11844 5116 3177 11845 5067 3150 11846 5157 3197 11847 5217 3095 11848 5216 3195 11849 5123 3193 11850 5124 3096 11851 5140 3172 11852 5080 3171 11853 5081 3158 11854 5168 3157 11855 5089 3090 11856 5150 3186 11857 5152 3185 11858 5158 3091 11859 5113 3198 11860 5165 3145 11861 5125 3146 11862 5112 3192 11863 5169 3156 11864 5175 3168 11865 5176 3167 11866 5168 3157 11867 5065 3144 11868 5155 3141 11869 5157 3197 11870 5067 3150 11871 5127 3189 11872 5094 3188 11873 5160 3199 11874 5149 3200 11875 5139 3165 11876 5149 3200 11877 5160 3199 11878 5159 3153 11879 5113 3198 11880 5219 3201 11881 5180 3142 11882 5165 3145 11883 5157 3197 11884 5158 3091 11885 5152 3185 11886 5119 3184 11887 5113 3198 11888 5114 3173 11889 5220 3202 11890 5219 3201 11891 5114 3173 11892 5140 3172 11893 5177 3183 11894 5220 3202 11895 5118 3187 11896 5150 3186 11897 5149 3200 11898 5139 3165 11899 5117 3161 11900 5171 3164 11901 5068 3178 11902 5116 3177 11903 5112 3192 11904 5115 3170 11905 5114 3173 11906 5113 3198 11907 5080 3171 11908 5079 3191 11909 5077 3159 11910 5081 3158 11911 5092 3143 11912 5220 3202 11913 5177 3183 11914 5126 3176 11915 5118 3187 11916 5139 3165 11917 5075 3162 11918 5117 3161 11919 5071 3151 11920 5074 3180 11921 5073 3179 11922 5072 3152 11923 5094 3188 11924 5162 3203 11925 5164 3204 11926 5160 3199 11927 5159 3153 11928 5160 3199 11929 5164 3204 11930 5163 3154 11931 5215 3196 11932 5214 3190 11933 5079 3191 11934 5172 3194 11935 5068 3178 11936 5171 3164 11937 5215 3196 11938 5216 3195 11939 5216 3195 11940 5215 3196 11941 5172 3194 11942 5123 3193 11943 5155 3141 11944 5156 3092 11945 5158 3091 11946 5157 3197 11947 5092 3143 11948 5180 3142 11949 5219 3201 11950 5220 3202 11951 5089 3090 11952 5127 3189 11953 5149 3200 11954 5150 3186 11955 5112 3192 11956 5125 3146 11957 5124 3096 11958 5123 3193 11959 5089 3090 11960 5205 3149 11961 5206 3175 11962 5127 3189 11963 5092 3143 11964 5126 3176 11965 5206 3175 11966 5205 3149 11967 5116 3177 11968 5119 3184 11969 5118 3187 11970 5117 3161 11971 5203 3205 11972 5204 3206 11973 5100 3207 11974 5104 3208 11975 5103 3209 11976 5181 3210 11977 5174 3211 11978 5106 3212 11979 5093 3213 11980 5094 3188 11981 5207 3174 11982 5208 3214 11983 5208 3214 11984 5207 3174 11985 5096 3166 11986 5095 3215 11987 5106 3212 11988 5174 3211 11989 5173 3169 11990 5170 3216 11991 5098 3217 11992 5093 3213 11993 5208 3214 11994 5209 3218 11995 5071 3151 11996 5163 3154 11997 5161 3219 11998 5086 3220 11999 5111 3221 12000 5070 3222 12001 5086 3220 12002 5161 3219 12003 5085 3223 12004 5069 3224 12005 5189 3225 12006 5211 3226 12007 5211 3226 12008 5189 3225 12009 5128 3227 12010 5082 3228 12011 5161 3219 12012 5162 3203 12013 5154 3229 12014 5111 3221 12015 5074 3180 12016 5085 3223 12017 5211 3226 12018 5212 3181 12019 5111 3221 12020 5154 3229 12021 5153 3230 12022 5110 3231 12023 5212 3181 12024 5211 3226 12025 5082 3228 12026 5078 3160 12027 5110 3231 12028 5153 3230 12029 5097 3232 12030 5108 3233 12031 5170 3216 12032 5173 3169 12033 5175 3168 12034 5169 3156 12035 5070 3222 12036 5111 3221 12037 5110 3231 12038 5109 3234 12039 5106 3212 12040 5170 3216 12041 5084 3235 12042 5105 3236 12043 5202 3237 12044 5201 3238 12045 5131 3239 12046 5107 3240 12047 5083 3155 12048 5084 3235 12049 5170 3216 12050 5169 3156 12051 5093 3213 12052 5098 3217 12053 5153 3230 12054 5154 3229 12055 5163 3154 12056 5164 3204 12057 5162 3203 12058 5161 3219 12059 5105 3236 12060 5102 3241 12061 5103 3209 12062 5106 3212 12063 5101 3242 12064 5104 3208 12065 5103 3209 12066 5102 3241 12067 5070 3222 12068 5069 3224 12069 5085 3223 12070 5086 3220 12071 5107 3240 12072 5109 3234 12073 5110 3231 12074 5108 3233 12075 5071 3151 12076 5086 3220 12077 5085 3223 12078 5074 3180 12079 5108 3233 12080 5097 3232 12081 5204 3206 12082 5203 3205 12083 5100 3207 12084 5186 3243 12085 5099 3244 12086 5181 3210 12087 5098 3217 12088 5187 3245 12089 5097 3232 12090 5153 3230 12091 5143 3246 12092 5131 3239 12093 5201 3238 12094 5197 3247 12095 5197 3247 12096 5201 3238 12097 5132 3248 12098 5144 3249 12099 5104 3208 12100 5100 3207 12101 5181 3210 12102 5103 3209 12103 5099 3244 12104 5095 3215 12105 5174 3211 12106 5181 3210 12107 5096 3166 12108 5173 3169 12109 5174 3211 12110 5095 3215 12111 5093 3213 12112 5154 3229 12113 5162 3203 12114 5094 3188 12115 5101 3242 12116 5102 3241 12117 5130 3250 12118 5132 3248 12119 5109 3234 12120 5107 3240 12121 5131 3239 12122 5129 3251 12123 5105 3236 12124 5084 3235 12125 5082 3228 12126 5128 3227 12127 5083 3155 12128 5078 3160 12129 5082 3228 12130 5084 3235 12131 5102 3241 12132 5105 3236 12133 5128 3227 12134 5130 3250 12135 5109 3234 12136 5129 3251 12137 5069 3224 12138 5070 3222 12139 5101 3242 12140 5132 3248 12141 5201 3238 12142 5202 3237 12143 5104 3208 12144 5101 3242 12145 5202 3237 12146 5203 3205 12147 5203 3205 12148 5202 3237 12149 5107 3240 12150 5108 3233 12151 5209 3218 12152 5208 3214 12153 5095 3215 12154 5099 3244 12155 5187 3245 12156 5098 3217 12157 5209 3218 12158 5210 3252 12159 5210 3252 12160 5209 3218 12161 5099 3244 12162 5186 3243 12163 5186 3243 12164 5100 3207 12165 5204 3206 12166 5210 3252 12167 5210 3252 12168 5204 3206 12169 5097 3232 12170 5187 3245 12171 4962 3253 12172 5022 3254 12173 5024 3255 12174 5023 3256 12175 4963 3257 12176 4933 3258 12177 4928 3259 12178 4929 3260 12179 4917 3261 12180 4962 3253 12181 5023 3256 12182 4918 3262 12183 5812 3263 12184 5698 3264 12185 5699 3116 12186 5813 3111 12187 4918 3262 12188 4905 3265 12189 4906 3266 12190 4917 3261 12191 5039 3267 12192 5035 3268 12193 5566 3269 12194 5565 3270 12195 5839 3271 12196 5564 3272 12197 5565 3270 12198 5814 3273 12199 5649 3274 12200 5563 3275 12201 5564 3272 12202 5839 3271 12203 5815 3276 12204 5814 3273 12205 5565 3270 12206 5566 3269 12207 5648 3277 12208 5836 3278 12209 5696 3279 12210 5914 3280 12211 5693 3281 12212 5692 3282 12213 4862 3283 12214 4860 3284 12215 5695 3285 12216 5694 3286 12217 4860 3284 12218 4862 3283 12219 5816 3287 12220 5850 3288 12221 5849 3289 12222 5694 3286 12223 5705 3290 12224 5697 3291 12225 4917 3261 12226 4906 3266 12227 5703 3292 12228 5704 3293 12229 5035 3268 12230 5039 3267 12231 5839 3271 12232 5836 3278 12233 5648 3277 12234 5649 3274 12235 5816 3287 12236 5694 3286 12237 5695 3285 12238 5696 3279 12239 5839 3271 12240 5814 3273 12241 5817 3294 12242 5836 3278 12243 5705 3290 12244 5702 3295 12245 5698 3264 12246 5697 3291 12247 5704 3293 12248 4996 3296 12249 4885 3297 12250 5035 3268 12251 5699 3116 12252 5698 3264 12253 5702 3295 12254 5701 3121 12255 5566 3269 12256 5035 3268 12257 4885 3297 12258 4997 3298 12259 5812 3263 12260 5852 3299 12261 5697 3291 12262 5698 3264 12263 4997 3298 12264 4994 3300 12265 4928 3259 12266 4933 3258 12267 4963 3257 12268 4929 3260 12269 5019 3301 12270 4964 3302 12271 5703 3292 12272 5700 3123 12273 5701 3121 12274 5702 3295 12275 4993 3303 12276 4996 3296 12277 4906 3266 12278 4905 3265 12279 5850 3288 12280 5818 3304 12281 4963 3257 12282 4964 3302 12283 5038 3305 12284 5039 3267 12285 5565 3270 12286 5564 3272 12287 5700 3123 12288 5703 3292 12289 5039 3267 12290 5038 3305 12291 5915 3306 12292 5812 3263 12293 5813 3111 12294 5583 3114 12295 5812 3263 12296 5693 3281 12297 5851 3307 12298 5852 3299 12299 5812 3263 12300 5915 3306 12301 5692 3282 12302 5693 3281 12303 5815 3276 12304 5818 3304 12305 5817 3294 12306 5814 3273 12307 5817 3294 12308 5816 3287 12309 5696 3279 12310 5836 3278 12311 5851 3307 12312 4863 3308 12313 4896 3309 12314 5022 3254 12315 5850 3288 12316 5816 3287 12317 5817 3294 12318 5818 3304 12319 5852 3299 12320 4962 3253 12321 4917 3261 12322 5697 3291 12323 5703 3292 12324 5702 3295 12325 5705 3290 12326 5704 3293 12327 5849 3289 12328 5020 3310 12329 4896 3309 12330 4863 3308 12331 5850 3288 12332 4964 3302 12333 5020 3310 12334 5849 3289 12335 4866 3311 12336 4896 3309 12337 5020 3310 12338 5021 3312 12339 5852 3299 12340 5851 3307 12341 5022 3254 12342 4962 3253 12343 5849 3289 12344 4863 3308 12345 4860 3284 12346 5694 3286 12347 5851 3307 12348 5693 3281 12349 4860 3284 12350 4863 3308 12351 5024 3255 12352 5022 3254 12353 4896 3309 12354 4866 3311 12355 5705 3290 12356 4906 3266 12357 4996 3296 12358 5704 3293 12359 5815 3276 12360 5566 3269 12361 4997 3298 12362 4933 3258 12363 4884 3313 12364 4885 3297 12365 4996 3296 12366 4993 3303 12367 5818 3304 12368 5815 3276 12369 4933 3258 12370 4963 3257 12371 4964 3302 12372 5019 3301 12373 5021 3312 12374 5020 3310 12375 4994 3300 12376 4997 3298 12377 4885 3297 12378 4884 3313 12379 5024 3255 12380 4866 3311 12381 4867 3314 12382 4960 3315 12383 5024 3255 12384 4960 3315 12385 4959 3316 12386 5023 3256 12387 4868 3317 12388 4869 3318 12389 4912 3319 12390 4961 3320 12391 4968 3321 12392 5016 3322 12393 5018 3323 12394 5017 3324 12395 4869 3318 12396 4870 3325 12397 5005 3326 12398 4912 3319 12399 4972 3327 12400 4959 3316 12401 4960 3315 12402 4961 3320 12403 4877 3328 12404 4878 3329 12405 4958 3330 12406 4988 3331 12407 4879 3332 12408 4884 3313 12409 4993 3303 12410 4992 3333 12411 4966 3334 12412 4945 3335 12413 5009 3336 12414 4967 3337 12415 4971 3338 12416 4865 3339 12417 4904 3340 12418 4919 3341 12419 4969 3342 12420 5004 3343 12421 4944 3344 12422 4970 3345 12423 4968 3321 12424 4965 3346 12425 4966 3334 12426 4967 3337 12427 4929 3260 12428 4928 3259 12429 4926 3347 12430 4927 3348 12431 4966 3334 12432 4934 3349 12433 4935 3350 12434 4945 3335 12435 5019 3301 12436 4929 3260 12437 4927 3348 12438 5017 3324 12439 4957 3351 12440 4990 3352 12441 4924 3353 12442 4935 3350 12443 4965 3346 12444 4932 3354 12445 4934 3349 12446 4966 3334 12447 4971 3338 12448 4919 3341 12449 4959 3316 12450 4972 3327 12451 5021 3312 12452 5019 3301 12453 5017 3324 12454 5018 3323 12455 4972 3327 12456 4961 3320 12457 4912 3319 12458 4969 3342 12459 5023 3256 12460 4959 3316 12461 4919 3341 12462 4918 3262 12463 4944 3344 12464 5004 3343 12465 5003 3355 12466 4916 3356 12467 4919 3341 12468 4904 3340 12469 4905 3265 12470 4918 3262 12471 4965 3346 12472 4968 3321 12473 5017 3324 12474 4927 3348 12475 4993 3303 12476 4905 3265 12477 4904 3340 12478 4992 3333 12479 4945 3335 12480 4925 3357 12481 5012 3358 12482 5009 3336 12483 4995 3359 12484 4926 3347 12485 4928 3259 12486 4994 3300 12487 4967 3337 12488 5009 3336 12489 5008 3360 12490 4913 3361 12491 4995 3359 12492 4934 3349 12493 4932 3354 12494 4926 3347 12495 4967 3337 12496 4913 3361 12497 5016 3322 12498 4968 3321 12499 4867 3314 12500 4868 3317 12501 4961 3320 12502 4960 3315 12503 5018 3323 12504 5016 3322 12505 4868 3317 12506 4867 3314 12507 5016 3322 12508 4913 3361 12509 4869 3318 12510 4868 3317 12511 4988 3331 12512 4958 3330 12513 4907 3362 12514 4908 3363 12515 4913 3361 12516 5008 3360 12517 4870 3325 12518 4869 3318 12519 4992 3333 12520 4958 3330 12521 4878 3329 12522 4879 3332 12523 4992 3333 12524 4864 3364 12525 4907 3362 12526 4958 3330 12527 4971 3338 12528 4970 3345 12529 4864 3364 12530 4865 3339 12531 5021 3312 12532 5018 3323 12533 4867 3314 12534 4866 3311 12535 4870 3325 12536 4871 3365 12537 5007 3366 12538 5005 3326 12539 5011 3367 12540 5010 3368 12541 4872 3369 12542 4871 3365 12543 4972 3327 12544 4969 3342 12545 4970 3345 12546 4971 3338 12547 5008 3360 12548 5011 3367 12549 4871 3365 12550 4870 3325 12551 4927 3348 12552 4926 3347 12553 4932 3354 12554 4965 3346 12555 4945 3335 12556 4935 3350 12557 4924 3353 12558 4925 3357 12559 4969 3342 12560 4912 3319 12561 5005 3326 12562 5004 3343 12563 4916 3356 12564 4908 3363 12565 4907 3362 12566 4944 3344 12567 5013 3370 12568 5010 3368 12569 5011 3367 12570 5012 3358 12571 4871 3365 12572 4872 3369 12573 5006 3371 12574 5007 3366 12575 4990 3352 12576 4957 3351 12577 4878 3329 12578 4877 3328 12579 4995 3359 12580 4994 3300 12581 4884 3313 12582 4879 3332 12583 4925 3357 12584 4924 3353 12585 4920 3372 12586 4921 3373 12587 5013 3370 12588 5012 3358 12589 4925 3357 12590 4921 3373 12591 5009 3336 12592 5012 3358 12593 5011 3367 12594 5008 3360 12595 4995 3359 12596 4879 3332 12597 4878 3329 12598 4957 3351 12599 4992 3333 12600 4904 3340 12601 4865 3339 12602 4864 3364 12603 4970 3345 12604 4944 3344 12605 4907 3362 12606 4864 3364 12607 5004 3343 12608 5005 3326 12609 5007 3366 12610 5003 3355 12611 4995 3359 12612 4957 3351 12613 4935 3350 12614 4934 3349 12615 4979 3374 12616 5000 3375 12617 5002 3376 12618 4956 3377 12619 4882 3378 12620 4883 3379 12621 4953 3380 12622 4977 3381 12623 4975 3382 12624 4977 3381 12625 4953 3380 12626 4955 3383 12627 4983 3384 12628 4952 3385 12629 4883 3379 12630 4882 3378 12631 4983 3384 12632 4982 3386 12633 4954 3387 12634 4952 3385 12635 4887 3388 12636 4883 3379 12637 4952 3385 12638 4940 3389 12639 4974 3390 12640 4931 3391 12641 4987 3392 12642 4976 3393 12643 4941 3394 12644 4953 3380 12645 4883 3379 12646 4887 3388 12647 4973 3395 12648 4930 3396 12649 4931 3391 12650 4974 3390 12651 4938 3397 12652 4941 3394 12653 4887 3388 12654 4888 3398 12655 4874 3399 12656 4880 3400 12657 4987 3392 12658 4897 3401 12659 4991 3402 12660 4986 3403 12661 4931 3391 12662 4930 3396 12663 4897 3401 12664 4986 3403 12665 4875 3404 12666 4874 3399 12667 4976 3393 12668 4987 3392 12669 4880 3400 12670 4881 3405 12671 4986 3403 12672 4897 3401 12673 4987 3392 12674 4931 3391 12675 4881 3405 12676 4882 3378 12677 4977 3381 12678 4976 3393 12679 5001 3406 12680 4915 3407 12681 4916 3356 12682 5003 3355 12683 4980 3408 12684 4983 3384 12685 4882 3378 12686 4881 3405 12687 5001 3406 12688 5000 3375 12689 4914 3409 12690 4915 3407 12691 4939 3410 12692 4899 3411 12693 4889 3412 12694 4888 3398 12695 4975 3382 12696 4955 3383 12697 5015 3413 12698 5014 3414 12699 4982 3386 12700 4979 3374 12701 4956 3377 12702 4954 3387 12703 4973 3395 12704 5014 3414 12705 4998 3415 12706 4923 3416 12707 4948 3417 12708 4953 3380 12709 4941 3394 12710 4942 3418 12711 4938 3397 12712 4900 3419 12713 4901 3420 12714 4936 3421 12715 5013 3370 12716 4921 3373 12717 4923 3416 12718 4998 3415 12719 4915 3407 12720 4909 3422 12721 4908 3363 12722 4916 3356 12723 4942 3418 12724 4941 3394 12725 4938 3397 12726 4936 3421 12727 4981 3423 12728 4903 3424 12729 4910 3425 12730 4978 3426 12731 4977 3381 12732 4975 3382 12733 4974 3390 12734 4976 3393 12735 5014 3414 12736 5015 3413 12737 4999 3427 12738 4998 3415 12739 5001 3406 12740 5006 3371 12741 5002 3376 12742 5000 3375 12743 4923 3416 12744 4922 3428 12745 4930 3396 12746 4973 3395 12747 4921 3373 12748 4920 3372 12749 4922 3428 12750 4923 3416 12751 4978 3426 12752 4914 3409 12753 5000 3375 12754 4979 3374 12755 4978 3426 12756 4910 3425 12757 4911 3429 12758 4914 3409 12759 4914 3409 12760 4911 3429 12761 4909 3422 12762 4915 3407 12763 4872 3369 12764 4873 3430 12765 5002 3376 12766 5006 3371 12767 5013 3370 12768 4998 3415 12769 4999 3427 12770 5010 3368 12771 4985 3431 12772 4989 3432 12773 4910 3425 12774 4903 3424 12775 4983 3384 12776 4980 3408 12777 4981 3423 12778 4982 3386 12779 5010 3368 12780 4999 3427 12781 4873 3430 12782 4872 3369 12783 4980 3408 12784 4984 3433 12785 4903 3424 12786 4981 3423 12787 4999 3427 12788 5015 3413 12789 4895 3434 12790 4873 3430 12791 4881 3405 12792 4880 3400 12793 4984 3433 12794 4980 3408 12795 4888 3398 12796 4887 3388 12797 4940 3389 12798 4939 3410 12799 4888 3398 12800 4889 3412 12801 4900 3419 12802 4938 3397 12803 4984 3433 12804 4898 3435 12805 4985 3431 12806 4903 3424 12807 4988 3331 12808 4908 3363 12809 4909 3422 12810 4911 3429 12811 4990 3352 12812 4922 3428 12813 4920 3372 12814 4924 3353 12815 5001 3406 12816 5003 3355 12817 5007 3366 12818 5006 3371 12819 4898 3435 12820 4984 3433 12821 4880 3400 12822 4874 3399 12823 4991 3402 12824 4930 3396 12825 4922 3428 12826 4990 3352 12827 4874 3399 12828 4875 3404 12829 4985 3431 12830 4898 3435 12831 4988 3331 12832 4911 3429 12833 4910 3425 12834 4989 3432 12835 4875 3404 12836 4876 3436 12837 4989 3432 12838 4985 3431 12839 4986 3403 12840 4991 3402 12841 4876 3436 12842 4875 3404 12843 4876 3436 12844 4877 3328 12845 4988 3331 12846 4989 3432 12847 4979 3374 12848 4982 3386 12849 4981 3423 12850 4978 3426 12851 4873 3430 12852 4895 3434 12853 4956 3377 12854 5002 3376 12855 4991 3402 12856 4990 3352 12857 4877 3328 12858 4876 3436 12859 5014 3414 12860 4973 3395 12861 4974 3390 12862 4975 3382 12863 5890 2745 12864 5889 2747 12865 5876 3437 12866 5875 3438 12867 5889 2747 12868 5888 3439 12869 5878 3440 12870 5876 3437 12871 5888 3439 12872 5882 3441 12873 5877 3442 12874 5878 3440 12875 5875 3438 12876 5874 3443 12877 5738 3444 12878 5735 3445 12879 5735 3445 12880 5738 3444 12881 5737 3446 12882 5736 3447 12883 5738 3444 12884 5874 3443 12885 5871 3448 12886 5737 3446 12887 5873 3449 12888 5872 3450 12889 5871 3448 12890 5874 3443 12891 5878 3440 12892 5877 3442 12893 5871 3448 12894 5872 3450 12895 5881 3451 12896 5880 3452 12897 5883 3453 12898 5879 3454 12899 5885 3455 12900 5884 3456 12901 5879 3454 12902 5883 3453 12903 5888 3439 12904 5887 3457 12905 5883 3453 12906 5880 3452 12907 5888 3439 12908 5880 3452 12909 5881 3451 12910 5882 3441 12911 5728 2755 12912 5730 3458 12913 5884 3456 12914 5676 2731 12915 5886 2732 12916 5676 2731 12917 5884 3456 12918 5885 3455 12919 5734 2746 12920 5733 3459 12921 5729 3460 12922 5726 2740 12923 5734 2746 12924 5735 3445 12925 5736 3447 12926 5733 3459 12927 5890 2745 12928 5875 3438 12929 5735 3445 12930 5734 2746 12931 5736 3447 12932 5737 3446 12933 5871 3448 12934 5877 3442 12935 5876 3437 12936 5878 3440 12937 5872 3450 12938 5873 3449 12939 5875 3438 12940 5876 3437 12941 5873 3449 12942 5874 3443 12943 5886 2732 12944 5885 3455 12945 5883 3453 12946 5887 3457 12947 5895 2733 12948 5886 2732 12949 5887 3457 12950 5893 2749 12951 5889 2747 12952 5893 2749 12953 5887 3457 12954 5888 3439 12955 5733 3459 12956 5882 3441 12957 5881 3451 12958 5732 3461 12959 5733 3459 12960 5732 3461 12961 5731 3462 12962 5729 3460 12963 5727 2741 12964 5726 2740 12965 5729 3460 12966 5728 2755 12967 5728 2755 12968 5729 3460 12969 5731 3462 12970 5730 3458 12971 5730 3458 12972 5731 3462 12973 5879 3454 12974 5884 3456 12975 5881 3451 12976 5879 3454 12977 5731 3462 12978 5732 3461 12979 5733 3459 12980 5736 3447 12981 5877 3442 12982 5882 3441 12983 5354 3463 12984 5353 3464 12985 5303 3465 12986 5309 3466 12987 5303 3465 12988 5304 2920 12989 5307 3467 12990 5309 3466 12991 5293 2876 12992 5294 3468 12993 5302 3469 12994 5305 2877 12995 5306 3470 12996 5308 3471 12997 5343 3472 12998 5346 3473 12999 5306 3470 13000 5346 3473 13001 5356 3474 13002 5357 3475 13003 5307 3467 13004 5345 3476 13005 5344 3477 13006 5309 3466 13007 5230 2907 13008 5299 3478 13009 5351 3479 13010 5350 2894 13011 5350 2894 13012 5351 3479 13013 5298 3480 13014 5289 2895 13015 5357 3475 13016 5356 3474 13017 5345 3476 13018 5307 3467 13019 5309 3466 13020 5344 3477 13021 5355 3481 13022 5354 3463 13023 5354 3463 13024 5355 3481 13025 5343 3472 13026 5308 3471 13027 5357 3475 13028 5358 2874 13029 5305 2877 13030 5306 3470 13031 5352 3482 13032 5359 3483 13033 5296 3484 13034 5297 3485 13035 5344 3477 13036 5345 3476 13037 5356 3474 13038 5355 3481 13039 5343 3472 13040 5355 3481 13041 5356 3474 13042 5346 3473 13043 5295 3486 13044 5298 3480 13045 5351 3479 13046 5359 3483 13047 5305 2877 13048 5302 3469 13049 5308 3471 13050 5306 3470 13051 5290 2906 13052 5292 2879 13053 5297 3485 13054 5296 3484 13055 5308 3471 13056 5302 3469 13057 5353 3464 13058 5354 3463 13059 5297 3485 13060 5292 2879 13061 5304 2920 13062 5303 3465 13063 5307 3467 13064 5304 2920 13065 5358 2874 13066 5357 3475 13067 5359 3483 13068 5351 3479 13069 5299 3478 13070 5296 3484 13071 5294 3468 13072 5295 3486 13073 5359 3483 13074 5352 3482 13075 5230 2907 13076 5290 2906 13077 5296 3484 13078 5299 3478 13079 5291 2904 13080 5289 2895 13081 5298 3480 13082 5295 3486 13083 5293 2876 13084 5291 2904 13085 5295 3486 13086 5294 3468 13087 5302 3469 13088 5294 3468 13089 5352 3482 13090 5353 3464 13091 5353 3464 13092 5352 3482 13093 5297 3485 13094 5303 3465 13095 6067 3487 13096 6072 3074 13097 6060 3488 13098 6061 3489 13099 6071 3064 13100 6070 3490 13101 6062 3491 13102 6059 3067 13103 6059 3067 13104 6062 3491 13105 6056 3492 13106 6058 3493 13107 6060 3488 13108 6072 3074 13109 5507 3065 13110 5519 3066 13111 6070 3490 13112 6069 3494 13113 5518 3495 13114 5525 3496 13115 5518 3495 13116 5526 3497 13117 6065 3498 13118 6068 3499 13119 5520 3500 13120 5519 3066 13121 6059 3067 13122 6058 3493 13123 6057 3501 13124 6060 3488 13125 5519 3066 13126 5520 3500 13127 6069 3494 13128 6066 3502 13129 5526 3497 13130 5518 3495 13131 6073 3083 13132 6075 3081 13133 6066 3502 13134 6069 3494 13135 5580 3503 13136 5522 3504 13137 5521 3505 13138 5577 3506 13139 5579 3507 13140 5578 3508 13141 5521 3505 13142 5522 3504 13143 5525 3496 13144 5518 3495 13145 6068 3499 13146 6067 3487 13147 5520 3500 13148 5521 3505 13149 5578 3508 13150 6057 3501 13151 5523 3509 13152 5522 3504 13153 5580 3503 13154 6056 3492 13155 5523 3509 13156 5524 3510 13157 6061 3489 13158 6055 3511 13159 6058 3493 13160 5577 3506 13161 5521 3505 13162 5520 3500 13163 6058 3493 13164 6056 3492 13165 5580 3503 13166 5577 3506 13167 6071 3064 13168 6073 3083 13169 6069 3494 13170 6070 3490 13171 6074 3071 13172 6072 3074 13173 6067 3487 13174 6068 3499 13175 6138 3072 13176 6074 3071 13177 6068 3499 13178 6065 3498 13179 6061 3489 13180 6060 3488 13181 6057 3501 13182 6055 3511 13183 6055 3511 13184 5579 3507 13185 5522 3504 13186 5523 3509 13187 6056 3492 13188 6062 3491 13189 5524 3510 13190 5523 3509 13191 5524 3510 13192 5525 3496 13193 6067 3487 13194 6061 3489 13195 6062 3491 13196 6070 3490 13197 5525 3496 13198 5524 3510 13199 5527 3080 13200 5526 3497 13201 6066 3502 13202 6075 3081 13203 6138 3072 13204 6065 3498 13205 5526 3497 13206 5527 3080 13207 6057 3501 13208 5578 3508 13209 5579 3507 13210 6055 3511 13211 5133 3512 13212 5134 3513 13213 5198 3514 13214 5191 3515 13215 5191 3515 13216 5198 3514 13217 5135 3516 13218 5136 3517 13219 5183 3518 13220 5184 3519 13221 5195 3520 13222 5194 3521 13223 5182 3522 13224 5194 3521 13225 5195 3520 13226 5185 3523 13227 5134 3513 13228 5137 3524 13229 5190 3525 13230 5198 3514 13231 5142 3526 13232 5143 3246 13233 5146 3527 13234 5148 3528 13235 5136 3517 13236 5131 3239 13237 5143 3246 13238 5142 3526 13239 5069 3224 13240 5129 3251 13241 5135 3516 13242 5138 3529 13243 5132 3248 13244 5133 3512 13245 5141 3530 13246 5144 3249 13247 5130 3250 13248 5128 3227 13249 5137 3524 13250 5134 3513 13251 5129 3251 13252 5131 3239 13253 5136 3517 13254 5135 3516 13255 5189 3225 13256 5190 3525 13257 5137 3524 13258 5128 3227 13259 5132 3248 13260 5130 3250 13261 5134 3513 13262 5133 3512 13263 5147 3531 13264 5141 3530 13265 5192 3532 13266 5193 3533 13267 5145 3534 13268 5147 3531 13269 5182 3522 13270 5185 3523 13271 5198 3514 13272 5190 3525 13273 5138 3529 13274 5135 3516 13275 5069 3224 13276 5138 3529 13277 5190 3525 13278 5189 3225 13279 5192 3532 13280 5191 3515 13281 5136 3517 13282 5142 3526 13283 5144 3249 13284 5141 3530 13285 5147 3531 13286 5145 3534 13287 5146 3527 13288 5184 3519 13289 5183 3518 13290 5148 3528 13291 5141 3530 13292 5133 3512 13293 5191 3515 13294 5192 3532 13295 5193 3533 13296 5192 3532 13297 5142 3526 13298 5148 3528 13299 5148 3528 13300 5183 3518 13301 5194 3521 13302 5193 3533 13303 5193 3533 13304 5194 3521 13305 5182 3522 13306 5147 3531 13307 5145 3534 13308 5185 3523 13309 5195 3520 13310 5196 3535 13311 5196 3535 13312 5195 3520 13313 5184 3519 13314 5146 3527 13315 5146 3527 13316 5143 3246 13317 5197 3247 13318 5196 3535 13319 5196 3535 13320 5197 3247 13321 5144 3249 13322 5145 3534 13323 4902 3536 13324 4890 3537 13325 4889 3412 13326 4899 3411 13327 4901 3420 13328 4900 3419 13329 4889 3412 13330 4890 3537 13331 4893 3538 13332 4886 3539 13333 4949 3540 13334 4948 3417 13335 4951 3541 13336 4950 3542 13337 4886 3539 13338 4893 3538 13339 4940 3389 13340 4943 3543 13341 4937 3544 13342 4939 3410 13343 4950 3542 13344 4947 3545 13345 4894 3546 13346 4886 3539 13347 4891 3547 13348 4890 3537 13349 4902 3536 13350 4937 3544 13351 4936 3421 13352 4901 3420 13353 4890 3537 13354 4891 3547 13355 4952 3385 13356 4954 3387 13357 4950 3542 13358 4951 3541 13359 4937 3544 13360 4943 3543 13361 4892 3548 13362 4891 3547 13363 4892 3548 13364 4893 3538 13365 4948 3417 13366 4942 3418 13367 4943 3543 13368 4951 3541 13369 4893 3538 13370 4892 3548 13371 5015 3413 13372 4946 3549 13373 4894 3546 13374 4895 3434 13375 4939 3410 13376 4937 3544 13377 4902 3536 13378 4899 3411 13379 4886 3539 13380 4894 3546 13381 4946 3549 13382 4949 3540 13383 4891 3547 13384 4892 3548 13385 4942 3418 13386 4936 3421 13387 4955 3383 13388 4953 3380 13389 4948 3417 13390 4949 3540 13391 4954 3387 13392 4956 3377 13393 4947 3545 13394 4950 3542 13395 5015 3413 13396 4955 3383 13397 4949 3540 13398 4946 3549 13399 4952 3385 13400 4951 3541 13401 4943 3543 13402 4940 3389 13403 4895 3434 13404 4894 3546 13405 4947 3545 13406 4956 3377 13407 5854 3550 13408 5828 3551 13409 5831 3552 13410 5846 3553 13411 5539 3554 13412 5538 3555 13413 5440 3556 13414 5441 3557 13415 5926 3558 13416 5924 3559 13417 5925 3560 13418 5582 3561 13419 5673 3562 13420 5915 3306 13421 5583 3114 13422 5581 3563 13423 5048 2789 13424 5049 3564 13425 5656 3565 13426 5758 2786 13427 5929 3566 13428 5585 3567 13429 5928 3568 13430 5927 3569 13431 5451 3570 13432 5449 3571 13433 5393 3572 13434 5392 3573 13435 5784 3574 13436 6169 3575 13437 5435 3576 13438 5437 3577 13439 5835 3578 13440 5834 3579 13441 5831 3552 13442 5830 3580 13443 5860 3581 13444 5441 3557 13445 5440 3556 13446 5545 3582 13447 5924 3559 13448 5674 3583 13449 5673 3562 13450 5925 3560 13451 5909 3584 13452 5848 3585 13453 5594 3586 13454 5593 3587 13455 5921 3588 13456 5488 3589 13457 5410 3590 13458 5670 3591 13459 5432 3592 13460 5433 3593 13461 5853 3594 13462 5808 3595 13463 5384 3596 13464 5382 3597 13465 5383 3598 13466 5385 3599 13467 5860 3581 13468 5859 3600 13469 5428 3601 13470 5441 3557 13471 6161 3602 13472 5512 3603 13473 5457 3604 13474 5456 3605 13475 5547 3606 13476 5541 3607 13477 5540 3608 13478 5546 3609 13479 5912 3610 13480 5913 3611 13481 5476 3612 13482 5475 3613 13483 5743 2781 13484 5747 2799 13485 5657 3614 13486 5658 3615 13487 5695 3285 13488 5675 3616 13489 5914 3280 13490 5696 3279 13491 5860 3581 13492 5464 3617 13493 5473 3618 13494 5843 3619 13495 5672 3620 13496 5928 3568 13497 5585 3567 13498 5584 3621 13499 5591 3622 13500 5588 3623 13501 5587 3624 13502 5590 3625 13503 5927 3569 13504 5671 3626 13505 5410 3590 13506 5488 3589 13507 5833 3627 13508 5856 3628 13509 5433 3593 13510 5432 3592 13511 5626 3629 13512 5387 3630 13513 5385 3599 13514 5624 3631 13515 5759 3632 13516 6167 3633 13517 6166 3634 13518 5748 3635 13519 5397 3636 13520 5391 3637 13521 5026 3638 13522 5027 3639 13523 5789 3124 13524 5700 3123 13525 5650 3640 13526 5651 3641 13527 5455 3642 13528 5453 3643 13529 5398 3644 13530 5400 3645 13531 5912 3610 13532 5593 3587 13533 5594 3586 13534 5597 3646 13535 5919 3647 13536 5834 3579 13537 5837 3648 13538 5917 3649 13539 5476 3612 13540 5477 3650 13541 5662 3651 13542 5910 3652 13543 5475 3613 13544 5476 3612 13545 5910 3652 13546 5911 3653 13547 5742 3654 13548 5748 3635 13549 6166 3634 13550 5745 3655 13551 5552 3656 13552 5465 3657 13553 5545 3582 13554 5551 3658 13555 5913 3611 13556 5663 3659 13557 5477 3650 13558 5476 3612 13559 5956 2809 13560 5662 3651 13561 5477 3650 13562 5414 2810 13563 5437 3577 13564 5434 3660 13565 5560 3661 13566 5784 3574 13567 5535 3662 13568 5384 3596 13569 5386 3663 13570 5431 3664 13571 5481 3665 13572 5480 3666 13573 5555 3667 13574 5571 3668 13575 5029 3669 13576 5027 3639 13577 5396 3670 13578 5444 3671 13579 5486 3672 13580 5485 3673 13581 5547 3606 13582 5554 3674 13583 5487 3675 13584 5486 3672 13585 5554 3674 13586 5570 3676 13587 5510 3677 13588 5509 3678 13589 5550 3679 13590 5557 3680 13591 5558 3681 13592 5551 3658 13593 5509 3678 13594 5510 3677 13595 5530 3682 13596 5532 3683 13597 5909 3584 13598 5593 3587 13599 5511 3684 13600 5510 3677 13601 5557 3680 13602 5573 3685 13603 5552 3656 13604 5473 3618 13605 5464 3617 13606 5465 3657 13607 6169 3575 13608 6171 3686 13609 6170 3687 13610 6168 3688 13611 5654 3689 13612 6020 3690 13613 5516 3691 13614 5513 3692 13615 5957 2815 13616 5414 2810 13617 5477 3650 13618 5663 3659 13619 5803 3693 13620 5561 3694 13621 5434 3660 13622 5437 3577 13623 5679 3695 13624 5461 3696 13625 5404 3697 13626 5407 3698 13627 6119 2944 13628 6019 2962 13629 5516 3691 13630 5517 2938 13631 5832 3699 13632 5431 3664 13633 5386 3663 13634 5391 3637 13635 5447 3700 13636 5397 3636 13637 5027 3639 13638 5029 3669 13639 5555 3667 13640 5548 3701 13641 5855 3702 13642 5854 3550 13643 5626 3629 13644 5624 3631 13645 5623 3703 13646 5625 3704 13647 5037 3705 13648 5038 3305 13649 5564 3272 13650 5563 3275 13651 5932 3706 13652 5931 3707 13653 5532 3683 13654 5530 3682 13655 5457 3604 13656 5452 3708 13657 5454 3709 13658 5456 3605 13659 5479 3710 13660 5478 3711 13661 5542 3712 13662 5548 3701 13663 5550 3679 13664 5544 3713 13665 5543 3714 13666 5549 3715 13667 5587 3624 13668 5588 3623 13669 5930 3716 13670 5669 3717 13671 5861 3718 13672 5428 3601 13673 5421 3719 13674 5415 3720 13675 5437 3577 13676 5435 3576 13677 5625 3704 13678 5803 3693 13679 5626 3629 13680 5436 3721 13681 5430 3722 13682 5387 3630 13683 5032 3723 13684 5028 3724 13685 5430 3722 13686 5469 3725 13687 5661 3726 13688 5645 3727 13689 5842 3728 13690 5841 3729 13691 5795 3110 13692 5409 3107 13693 5410 3590 13694 5671 3626 13695 5533 3730 13696 5531 2952 13697 6032 2953 13698 5666 3731 13699 5918 3732 13700 5571 3668 13701 5846 3553 13702 5919 3647 13703 5546 3609 13704 5540 3608 13705 5478 3711 13706 5479 3710 13707 5557 3680 13708 5550 3679 13709 5549 3715 13710 5556 3733 13711 5427 3734 13712 5415 3720 13713 5421 3719 13714 5422 3735 13715 5463 3736 13716 5429 3737 13717 5028 3724 13718 5032 3723 13719 5468 2617 13720 5466 3738 13721 5456 3605 13722 5454 3709 13723 5644 2812 13724 5646 2811 13725 5647 3739 13726 5645 3727 13727 5667 3740 13728 6033 2959 13729 5531 2952 13730 5533 3730 13731 5480 3666 13732 5479 3710 13733 5548 3701 13734 5555 3667 13735 5573 3685 13736 5557 3680 13737 5556 3733 13738 5572 3741 13739 5933 3742 13740 5931 3707 13741 5932 3706 13742 5591 3622 13743 5425 3743 13744 5422 3735 13745 5421 3719 13746 5424 3744 13747 5435 3576 13748 5436 3721 13749 5626 3629 13750 5625 3704 13751 5395 3745 13752 5389 3746 13753 5388 3747 13754 5394 3748 13755 5982 3749 13756 5981 2628 13757 6173 2622 13758 6171 3686 13759 5030 3750 13760 5031 3751 13761 5459 3752 13762 5446 3753 13763 5991 2654 13764 5986 2653 13765 5560 3661 13766 5805 3754 13767 5805 3754 13768 5560 3661 13769 5434 3660 13770 5423 3755 13771 5658 3615 13772 5657 3614 13773 5748 3635 13774 5742 3654 13775 5532 3683 13776 5533 3730 13777 5666 3731 13778 5909 3584 13779 5553 3756 13780 5546 3609 13781 5479 3710 13782 5480 3666 13783 5668 3757 13784 5933 3742 13785 5591 3622 13786 5590 3625 13787 5859 3600 13788 5424 3744 13789 5421 3719 13790 5428 3601 13791 6169 3575 13792 6168 3688 13793 5436 3721 13794 5435 3576 13795 5396 3670 13796 5390 3758 13797 5389 3746 13798 5395 3745 13799 5661 3726 13800 5841 3729 13801 5910 3652 13802 5662 3651 13803 5931 3707 13804 5667 3740 13805 5533 3730 13806 5532 3683 13807 5832 3699 13808 5391 3637 13809 5397 3636 13810 5806 3759 13811 5982 3749 13812 6171 3686 13813 6169 3575 13814 5784 3574 13815 6167 3633 13816 6164 2614 13817 6165 2650 13818 6166 3634 13819 6031 2967 13820 5668 3757 13821 5590 3625 13822 5592 2968 13823 5671 3626 13824 5927 3569 13825 5928 3568 13826 5672 3620 13827 5856 3628 13828 5833 3627 13829 5807 3760 13830 5855 3702 13831 5805 3754 13832 5423 3755 13833 5422 3735 13834 5425 3743 13835 5545 3582 13836 5440 3556 13837 5439 3761 13838 5543 3714 13839 5446 3753 13840 5447 3700 13841 5029 3669 13842 5030 3750 13843 5932 3706 13844 5923 3762 13845 5588 3623 13846 5591 3622 13847 5030 3750 13848 5029 3669 13849 5444 3671 13850 5445 3763 13851 5032 3723 13852 5033 3764 13853 5467 3765 13854 5463 3736 13855 5548 3701 13856 5542 3712 13857 5856 3628 13858 5855 3702 13859 5483 3766 13860 5481 3665 13861 5571 3668 13862 5918 3732 13863 5832 3699 13864 5806 3759 13865 5807 3760 13866 5833 3627 13867 5592 2968 13868 5590 3625 13869 5587 3624 13870 5589 2978 13871 6170 3687 13872 5470 3767 13873 5469 3725 13874 6168 3688 13875 5595 3768 13876 5594 3586 13877 5848 3585 13878 5665 3769 13879 5041 2615 13880 5040 3770 13881 5466 3738 13882 5468 2617 13883 5838 3771 13884 5835 3578 13885 5459 3752 13886 5562 3772 13887 5543 3714 13888 5439 3761 13889 5438 3773 13890 5540 3608 13891 5827 2805 13892 5655 3774 13893 5049 3564 13894 5048 2789 13895 5449 3571 13896 5402 3775 13897 5394 3748 13898 5393 3572 13899 5036 3776 13900 5031 3751 13901 5460 3777 13902 5680 3778 13903 5453 3643 13904 5451 3570 13905 5392 3573 13906 5398 3644 13907 5919 3647 13908 5846 3553 13909 5831 3552 13910 5834 3579 13911 5926 3558 13912 5569 3779 13913 5481 3665 13914 5483 3766 13915 5829 3780 13916 5828 3551 13917 5807 3760 13918 5806 3759 13919 6172 2621 13920 5471 2619 13921 5470 3767 13922 6170 3687 13923 5401 3781 13924 5400 3645 13925 5398 3644 13926 5399 3782 13927 5665 3769 13928 6030 2960 13929 5596 2935 13930 5595 3768 13931 5561 3694 13932 5426 3783 13933 5423 3755 13934 5434 3660 13935 5860 3581 13936 5545 3582 13937 5465 3657 13938 5464 3617 13939 5442 3784 13940 5395 3745 13941 5394 3748 13942 5402 3775 13943 5562 3772 13944 5459 3752 13945 5031 3751 13946 5036 3776 13947 5571 3668 13948 5555 3667 13949 5854 3550 13950 5846 3553 13951 5427 3734 13952 5422 3735 13953 5423 3755 13954 5426 3783 13955 5924 3559 13956 5926 3558 13957 5483 3766 13958 5482 3785 13959 5854 3550 13960 5855 3702 13961 5807 3760 13962 5828 3551 13963 5932 3706 13964 5573 3685 13965 5572 3741 13966 5923 3762 13967 5913 3611 13968 5912 3610 13969 5597 3646 13970 5847 3786 13971 5861 3718 13972 5539 3554 13973 5441 3557 13974 5428 3601 13975 5983 2611 13976 5425 3743 13977 5424 3744 13978 5977 2612 13979 5545 3582 13980 5543 3714 13981 5544 3713 13982 5508 3787 13983 5444 3671 13984 5396 3670 13985 5395 3745 13986 5442 3784 13987 5829 3780 13988 5806 3759 13989 5397 3636 13990 5447 3700 13991 5979 2645 13992 5844 3788 13993 5576 3789 13994 5857 2637 13995 5559 3790 13996 5552 3656 13997 5551 3658 13998 5558 3681 13999 6030 2960 14000 5665 3769 14001 5666 3731 14002 6032 2953 14003 5664 3791 14004 5847 3786 14005 5597 3646 14006 5598 3792 14007 5978 2644 14008 5977 2612 14009 5424 3744 14010 5859 3600 14011 5543 3714 14012 5540 3608 14013 5541 3607 14014 5484 3793 14015 5469 3725 14016 5470 3767 14017 5033 3764 14018 5032 3723 14019 5598 3792 14020 5597 3646 14021 5594 3586 14022 5595 3768 14023 5599 2814 14024 5598 3792 14025 5595 3768 14026 5596 2935 14027 5549 3715 14028 5543 3714 14029 5484 3793 14030 5485 3673 14031 5917 3649 14032 5916 3794 14033 5918 3732 14034 5919 3647 14035 5575 3795 14036 5559 3790 14037 5558 3681 14038 5574 3796 14039 5958 2813 14040 5664 3791 14041 5598 3792 14042 5599 2814 14043 5856 3628 14044 5542 3712 14045 5478 3711 14046 5540 3608 14047 5830 3580 14048 5829 3780 14049 5447 3700 14050 5446 3753 14051 5033 3764 14052 5034 2618 14053 5468 2617 14054 5467 3765 14055 5863 3797 14056 5862 3798 14057 5561 3694 14058 5803 3693 14059 5911 3653 14060 5842 3728 14061 5840 3799 14062 5845 3800 14063 5912 3610 14064 5575 3795 14065 5574 3796 14066 5593 3587 14067 5857 2637 14068 5845 3800 14069 5745 3655 14070 5744 2638 14071 5991 2654 14072 5805 3754 14073 5425 3743 14074 5983 2611 14075 5461 3696 14076 5460 3777 14077 5445 3763 14078 5443 3801 14079 5470 3767 14080 5471 2619 14081 5034 2618 14082 5033 3764 14083 5922 3118 14084 5672 3620 14085 5584 3621 14086 5586 3113 14087 5586 3113 14088 5584 3621 14089 5581 3563 14090 5583 3114 14091 5845 3800 14092 5840 3799 14093 5742 3654 14094 5745 3655 14095 5444 3671 14096 5442 3784 14097 5443 3801 14098 5445 3763 14099 5036 3776 14100 5037 3705 14101 5563 3275 14102 5562 3772 14103 5569 3779 14104 5553 3756 14105 5480 3666 14106 5481 3665 14107 5556 3733 14108 5549 3715 14109 5485 3673 14110 5486 3672 14111 5840 3799 14112 5647 3739 14113 5658 3615 14114 5742 3654 14115 5680 3778 14116 5650 3640 14117 5037 3705 14118 5036 3776 14119 5959 2782 14120 5644 2812 14121 5645 3727 14122 5661 3726 14123 5485 3673 14124 5484 3793 14125 5541 3607 14126 5547 3606 14127 5572 3741 14128 5556 3733 14129 5486 3672 14130 5487 3675 14131 5859 3600 14132 5860 3581 14133 5843 3619 14134 5978 2644 14135 5986 2653 14136 5985 2631 14137 5981 2628 14138 5982 3749 14139 5743 2781 14140 5658 3615 14141 5647 3739 14142 5646 2811 14143 5451 3570 14144 5450 3802 14145 5448 3803 14146 5449 3571 14147 5487 3675 14148 5489 3804 14149 5923 3762 14150 5572 3741 14151 5674 3583 14152 5692 3282 14153 5915 3306 14154 5673 3562 14155 6162 3805 14156 5653 3806 14157 5652 3807 14158 6160 3808 14159 5458 3809 14160 5450 3802 14161 5452 3708 14162 5457 3604 14163 5463 3736 14164 5400 3645 14165 5401 3781 14166 5429 3737 14167 5835 3578 14168 5830 3580 14169 5446 3753 14170 5459 3752 14171 5650 3640 14172 5700 3123 14173 5038 3305 14174 5037 3705 14175 5570 3676 14176 5929 3566 14177 5489 3804 14178 5487 3675 14179 6019 2962 14180 5790 3133 14181 5652 3807 14182 5653 3806 14183 5467 3765 14184 5455 3642 14185 5400 3645 14186 5463 3736 14187 5040 3770 14188 5050 3810 14189 6163 3811 14190 5466 3738 14191 5930 3716 14192 5588 3623 14193 5923 3762 14194 5921 3588 14195 5489 3804 14196 5488 3589 14197 5921 3588 14198 5923 3762 14199 6037 3103 14200 5790 3133 14201 6019 2962 14202 6035 2961 14203 5402 3775 14204 5403 3812 14205 5443 3801 14206 5442 3784 14207 6167 3633 14208 5759 3632 14209 5050 3810 14210 5040 3770 14211 5929 3566 14212 5927 3569 14213 5488 3589 14214 5489 3804 14215 5517 2938 14216 5516 3691 14217 6020 3690 14218 6117 2921 14219 6163 3811 14220 5655 3774 14221 5654 3689 14222 6161 3602 14223 5645 3727 14224 5647 3739 14225 5840 3799 14226 5842 3728 14227 5453 3643 14228 5452 3708 14229 5450 3802 14230 5451 3570 14231 5449 3571 14232 5448 3803 14233 5403 3812 14234 5402 3775 14235 5509 3678 14236 5508 3787 14237 5544 3713 14238 5550 3679 14239 5462 3813 14240 5448 3803 14241 5450 3802 14242 5458 3809 14243 6020 3690 14244 5654 3689 14245 5655 3774 14246 5827 2805 14247 5663 3659 14248 5664 3791 14249 5958 2813 14250 5957 2815 14251 5837 3648 14252 5648 3277 14253 5914 3280 14254 5917 3649 14255 5455 3642 14256 5454 3709 14257 5452 3708 14258 5453 3643 14259 5403 3812 14260 5404 3697 14261 5461 3696 14262 5443 3801 14263 6164 2614 14264 6167 3633 14265 5040 3770 14266 5041 2615 14267 5831 3552 14268 5828 3551 14269 5829 3780 14270 5830 3580 14271 5551 3658 14272 5545 3582 14273 5508 3787 14274 5509 3678 14275 6026 2982 14276 6022 2922 14277 6117 2921 14278 6020 3690 14279 6026 2982 14280 6020 3690 14281 5827 2805 14282 6024 2800 14283 5648 3277 14284 5837 3648 14285 5838 3771 14286 5649 3274 14287 5468 2617 14288 5454 3709 14289 5455 3642 14290 5467 3765 14291 5986 2653 14292 5982 3749 14293 5784 3574 14294 5560 3661 14295 5448 3803 14296 5462 3813 14297 5404 3697 14298 5403 3812 14299 5959 2782 14300 5661 3726 14301 5662 3651 14302 5956 2809 14303 5759 3632 14304 5748 3635 14305 5657 3614 14306 5656 3565 14307 5407 3698 14308 5404 3697 14309 5462 3813 14310 6160 3808 14311 5027 3639 14312 5026 3638 14313 5390 3758 14314 5396 3670 14315 5745 3655 14316 6166 3634 14317 6165 2650 14318 5744 2638 14319 6031 2967 14320 6033 2959 14321 5667 3740 14322 5668 3757 14323 6163 3811 14324 6161 3602 14325 5456 3605 14326 5466 3738 14327 5538 3555 14328 5537 3814 14329 5439 3761 14330 5440 3556 14331 5924 3559 14332 5482 3785 14333 4861 3815 14334 5674 3583 14335 5445 3763 14336 5460 3777 14337 5031 3751 14338 5030 3750 14339 5835 3578 14340 5838 3771 14341 5837 3648 14342 5834 3579 14343 5922 3118 14344 5795 3110 14345 5671 3626 14346 5672 3620 14347 5680 3778 14348 5460 3777 14349 5461 3696 14350 5679 3695 14351 5406 3816 14352 5405 3137 14353 5789 3124 14354 5651 3641 14355 5537 3814 14356 5536 3817 14357 5438 3773 14358 5439 3761 14359 5655 3774 14360 6163 3811 14361 5050 3810 14362 5049 3564 14363 5916 3794 14364 5675 3616 14365 4861 3815 14366 5482 3785 14367 5680 3778 14368 5679 3695 14369 5651 3641 14370 5650 3640 14371 5574 3796 14372 5558 3681 14373 5510 3677 14374 5511 3684 14375 5670 3591 14376 5794 3102 14377 5920 3101 14378 5669 3717 14379 5472 3818 14380 5473 3618 14381 5552 3656 14382 5559 3790 14383 6160 3808 14384 5462 3813 14385 5458 3809 14386 6162 3805 14387 5911 3653 14388 5845 3800 14389 5857 2637 14390 5576 3789 14391 5652 3807 14392 5790 3133 14393 5405 3137 14394 5406 3816 14395 5853 3594 14396 5433 3593 14397 5438 3773 14398 5536 3817 14399 5399 3782 14400 5398 3644 14401 5394 3748 14402 5388 3747 14403 5917 3649 14404 5914 3280 14405 5675 3616 14406 5916 3794 14407 5530 3682 14408 5511 3684 14409 5573 3685 14410 5932 3706 14411 5979 2645 14412 5978 2644 14413 5843 3619 14414 5844 3788 14415 5838 3771 14416 5562 3772 14417 5563 3275 14418 5649 3274 14419 5844 3788 14420 5843 3619 14421 5473 3618 14422 5472 3818 14423 5913 3611 14424 5847 3786 14425 5664 3791 14426 5663 3659 14427 6162 3805 14428 5458 3809 14429 5457 3604 14430 5512 3603 14431 5407 3698 14432 5406 3816 14433 5651 3641 14434 5679 3695 14435 5398 3644 14436 5392 3573 14437 5393 3572 14438 5394 3748 14439 5918 3732 14440 5916 3794 14441 5482 3785 14442 5483 3766 14443 5593 3587 14444 5574 3796 14445 5511 3684 14446 5530 3682 14447 5474 3819 14448 5472 3818 14449 5559 3790 14450 5575 3795 14451 5665 3769 14452 5848 3585 14453 5909 3584 14454 5666 3731 14455 5554 3674 14456 5547 3606 14457 5546 3609 14458 5553 3756 14459 5911 3653 14460 5910 3652 14461 5841 3729 14462 5842 3728 14463 6160 3808 14464 5652 3807 14465 5406 3816 14466 5407 3698 14467 5856 3628 14468 5540 3608 14469 5438 3773 14470 5433 3593 14471 5430 3722 14472 5391 3637 14473 5386 3663 14474 5387 3630 14475 5656 3565 14476 5657 3614 14477 5747 2799 14478 5758 2786 14479 5695 3285 14480 4862 3283 14481 4861 3815 14482 5675 3616 14483 5049 3564 14484 5050 3810 14485 5759 3632 14486 5656 3565 14487 5669 3717 14488 5920 3101 14489 5589 2978 14490 5587 3624 14491 5513 3692 14492 5512 3603 14493 6161 3602 14494 5654 3689 14495 5576 3789 14496 5844 3788 14497 5472 3818 14498 5474 3819 14499 5667 3740 14500 5931 3707 14501 5933 3742 14502 5668 3757 14503 5570 3676 14504 5554 3674 14505 5553 3756 14506 5569 3779 14507 5585 3567 14508 5582 3561 14509 5581 3563 14510 5584 3621 14511 6168 3688 14512 5469 3725 14513 5430 3722 14514 5436 3721 14515 5692 3282 14516 5674 3583 14517 4861 3815 14518 4862 3283 14519 5429 3737 14520 5401 3781 14521 5389 3746 14522 5390 3758 14523 5653 3806 14524 6162 3805 14525 5512 3603 14526 5513 3692 14527 5474 3819 14528 5475 3613 14529 5911 3653 14530 5576 3789 14531 5921 3588 14532 5670 3591 14533 5669 3717 14534 5930 3716 14535 5929 3566 14536 5570 3676 14537 5569 3779 14538 5926 3558 14539 6173 2622 14540 6172 2621 14541 6170 3687 14542 6171 3686 14543 5581 3563 14544 5582 3561 14545 5925 3560 14546 5673 3562 14547 5794 3102 14548 5670 3591 14549 5410 3590 14550 5409 3107 14551 5431 3664 14552 5432 3592 14553 5808 3595 14554 5535 3662 14555 5401 3781 14556 5399 3782 14557 5388 3747 14558 5389 3746 14559 5026 3638 14560 5028 3724 14561 5429 3737 14562 5390 3758 14563 5863 3797 14564 5803 3693 14565 5625 3704 14566 5623 3703 14567 5513 3692 14568 5516 3691 14569 6019 2962 14570 5653 3806 14571 5575 3795 14572 5912 3610 14573 5475 3613 14574 5474 3819 14575 5929 3566 14576 5926 3558 14577 5582 3561 14578 5585 3567 14579 5832 3699 14580 5833 3627 14581 5432 3592 14582 5431 3664 14583 5387 3630 14584 5386 3663 14585 5384 3596 14586 5385 3599 14587 5391 3637 14588 5430 3722 14589 5028 3724 14590 5026 3638 14591 4459 3820 14592 4284 1341 14593 4285 1383 14594 4455 1403 14595 4463 3821 14596 4459 3820 14597 4455 1403 14598 4461 3822 14599 4681 3823 14600 4680 3824 14601 4465 3825 14602 4467 3826 14603 4679 3827 14604 4678 3828 14605 4460 3829 14606 4462 3830 14607 4782 3831 14608 4546 3832 14609 4681 3823 14610 4682 3833 14611 4467 3826 14612 4465 3825 14613 4464 3834 14614 4466 3835 14615 4779 3836 14616 4568 3837 14617 4777 3838 14618 4778 3839 14619 4682 3833 14620 4681 3823 14621 4467 3826 14622 4468 3840 14623 4468 3840 14624 4467 3826 14625 4466 3835 14626 4569 3841 14627 4683 3842 14628 4682 3833 14629 4468 3840 14630 4568 3837 14631 4780 3843 14632 4684 3844 14633 4685 3845 14634 4783 3846 14635 4777 3838 14636 4568 3837 14637 4468 3840 14638 4569 3841 14639 4779 3836 14640 4684 3844 14641 4683 3842 14642 4568 3837 14643 4603 3847 14644 4604 3848 14645 4776 3849 14646 4687 3850 14647 4788 3851 14648 4785 3852 14649 4786 3853 14650 4787 3854 14651 4463 3821 14652 4462 3830 14653 4460 3829 14654 4459 3820 14655 4602 3855 14656 4784 3856 14657 4686 3857 14658 4603 3847 14659 4686 3857 14660 4788 3851 14661 4604 3848 14662 4603 3847 14663 4604 3848 14664 4788 3851 14665 4787 3854 14666 4605 3858 14667 4684 3844 14668 4779 3836 14669 4785 3852 14670 4685 3845 14671 4680 3824 14672 4545 3859 14673 4679 3827 14674 4462 3830 14675 4774 3860 14676 4602 3855 14677 4603 3847 14678 4687 3850 14679 4685 3845 14680 4785 3852 14681 4788 3851 14682 4686 3857 14683 4465 3825 14684 4463 3821 14685 4461 3822 14686 4464 3834 14687 4781 3861 14688 4782 3831 14689 4682 3833 14690 4683 3842 14691 4779 3836 14692 4778 3839 14693 4786 3853 14694 4785 3852 14695 4784 3856 14696 4783 3846 14697 4685 3845 14698 4686 3857 14699 4680 3824 14700 4462 3830 14701 4463 3821 14702 4465 3825 14703 4681 3823 14704 4546 3832 14705 4545 3859 14706 4680 3824 14707 4781 3861 14708 4683 3842 14709 4684 3844 14710 4780 3843 14711 4776 3849 14712 4604 3848 14713 4605 3858 14714 4775 3862 14715 4460 3829 14716 4458 3863 14717 4457 3864 14718 4459 3820 14719 4459 3820 14720 4457 3864 14721 4243 1308 14722 4284 1341 14723 4457 3864 14724 4453 3865 14725 4456 1306 14726 4243 1308 14727 4718 3866 14728 4453 3865 14729 4457 3864 14730 4458 3863 14731 6578 1581 14732 6574 1584 14733 6467 3867 14734 6576 3868 14735 6573 1514 14736 6462 3869 14737 6430 3870 14738 6429 3871 14739 6579 3872 14740 6575 3873 14741 6576 3868 14742 6467 3867 14743 6466 1488 14744 6583 1482 14745 6579 3872 14746 6467 3867 14747 6582 1489 14748 6466 1488 14749 6467 3867 14750 6574 1584 14751 6581 1511 14752 6573 1514 14753 6429 3871 14754 6580 3874 14755 6578 1581 14756 6596 3875 14757 6595 1593 14758 6577 1582 14759 6585 1481 14760 6584 1492 14761 6581 1511 14762 6580 3874 14763 4728 3876 14764 4539 3877 14765 4537 3878 14766 4533 3879 14767 4543 3880 14768 4533 3879 14769 4537 3878 14770 4542 3881 14771 4737 3882 14772 4533 3879 14773 4543 3880 14774 4736 3883 14775 4722 3884 14776 4543 3880 14777 4542 3881 14778 4544 3885 14779 4736 3883 14780 4543 3880 14781 4722 3884 14782 4730 3886 14783 4734 3887 14784 4733 3888 14785 4729 3889 14786 4739 3890 14787 4739 3890 14788 4729 3889 14789 4737 3882 14790 4738 3891 14791 4738 3891 14792 4737 3882 14793 4736 3883 14794 4665 3892 14795 4738 3891 14796 4665 3892 14797 4727 3893 14798 4726 3894 14799 4794 3895 14800 4735 3896 14801 4600 3897 14802 4599 3898 14803 4735 3896 14804 4724 3899 14805 4601 3900 14806 4600 3897 14807 4724 3899 14808 4784 3856 14809 4602 3855 14810 4601 3900 14811 4665 3892 14812 4736 3883 14813 4730 3886 14814 4666 3901 14815 4784 3856 14816 4724 3899 14817 4731 3902 14818 4783 3846 14819 4735 3896 14820 4734 3887 14821 4731 3902 14822 4724 3899 14823 4726 3894 14824 4732 3903 14825 4739 3890 14826 4738 3891 14827 4781 3861 14828 4780 3843 14829 4732 3903 14830 4726 3894 14831 4600 3897 14832 4601 3900 14833 4723 3904 14834 4725 3905 14835 4601 3900 14836 4602 3855 14837 4774 3860 14838 4723 3904 14839 4599 3898 14840 4600 3897 14841 4725 3905 14842 4795 3906 14843 4781 3861 14844 4726 3894 14845 4727 3893 14846 4782 3831 14847 4737 3882 14848 4729 3889 14849 4728 3876 14850 4533 3879 14851 4732 3903 14852 4731 3902 14853 4734 3887 14854 4739 3890 14855 4780 3843 14856 4783 3846 14857 4731 3902 14858 4732 3903 14859 4794 3895 14860 4733 3888 14861 4734 3887 14862 4735 3896 14863 4569 3841 14864 4466 3835 14865 4551 3907 14866 4550 3908 14867 4777 3838 14868 4569 3841 14869 4550 3908 14870 4566 3909 14871 4566 3909 14872 4550 3908 14873 4837 1154 14874 4838 1141 14875 4837 1154 14876 4550 3908 14877 4565 3910 14878 4567 1136 14879 4719 3911 14880 4741 3912 14881 4786 3853 14882 4778 3839 14883 4841 1137 14884 4567 1136 14885 4565 3910 14886 4814 1164 14887 4778 3839 14888 4777 3838 14889 4566 3909 14890 4719 3911 14891 4845 1140 14892 4844 1156 14893 4741 3912 14894 4719 3911 14895 4845 1140 14896 4719 3911 14897 4566 3909 14898 4838 1141 14899 4561 1237 14900 4092 1259 14901 4091 3913 14902 4518 3914 14903 4562 1236 14904 4561 1237 14905 4518 3914 14906 4511 3915 14907 4091 3913 14908 4094 3916 14909 4717 3917 14910 4518 3914 14911 4453 3865 14912 4718 3866 14913 4094 3916 14914 4091 3913 14915 4093 3918 14916 4094 3916 14917 4718 3866 14918 4676 3919 14919 4456 1306 14920 4453 3865 14921 4091 3913 14922 4092 1259 14923 4675 1667 14924 4717 3917 14925 4094 3916 14926 4093 3918 14927 4115 3920 14928 4102 3921 14929 4442 3922 14930 4503 3923 14931 4506 879 14932 4443 3924 14933 4102 3921 14934 4115 3920 14935 4102 3921 14936 4116 3925 14937 4504 1020 14938 4442 3922 14939 4443 3924 14940 4511 3915 14941 4116 3925 14942 4102 3921 14943 4114 830 14944 4115 3920 14945 4503 3923 14946 4502 930 14947 4505 829 14948 4506 879 14949 4115 3920 14950 4114 830 14951 4116 3925 14952 4117 1560 14953 4510 1019 14954 4504 1020 14955 4511 3915 14956 4518 3914 14957 4117 1560 14958 4116 3925 14959 4518 3914 14960 4717 3917 14961 4119 1561 14962 4117 1560 14963 4118 1668 14964 4119 1561 14965 4717 3917 14966 4675 1667 14967 4123 965 14968 4128 988 14969 4507 1066 14970 4444 975 14971 4442 3922 14972 4444 975 14973 4507 1066 14974 4503 3923 14975 4504 1020 14976 4508 976 14977 4444 975 14978 4442 3922 14979 4445 1228 14980 4443 3924 14981 4506 879 14982 4268 878 14983 4562 1236 14984 4511 3915 14985 4443 3924 14986 4445 1228 14987 4718 3866 14988 4458 3863 14989 4677 3926 14990 4676 3919 14991 4502 930 14992 4501 1065 14993 4492 851 14994 4493 823 14995 4507 1066 14996 4501 1065 14997 4502 930 14998 4503 3923 14999 4678 3828 15000 4677 3926 15001 4458 3863 15002 4460 3829 15003 6591 3927 15004 6471 3928 15005 4678 3828 15006 4679 3827 15007 4782 3831 15008 4727 3893 15009 4706 3929 15010 4546 3832 15011 6473 3930 15012 6472 3931 15013 6471 3928 15014 6591 3927 15015 4727 3893 15016 4665 3892 15017 4666 3901 15018 4706 3929 15019 6470 3932 15020 4677 3926 15021 4678 3828 15022 6471 3928 15023 6603 3933 15024 6575 3873 15025 6424 3934 15026 6422 3935 15027 6556 1523 15028 6530 1556 15029 6473 3930 15030 6476 3936 15031 6424 3934 15032 6423 3937 15033 6421 3938 15034 6422 3935 15035 6474 3939 15036 6475 3940 15037 4730 3886 15038 4722 3884 15039 6603 3933 15040 6593 3941 15041 6576 3868 15042 6575 3873 15043 4676 3919 15044 6469 3942 15045 6378 3943 15046 4093 3918 15047 6525 1549 15048 6381 1546 15049 6380 3944 15050 6468 3945 15051 6470 3932 15052 6468 3945 15053 6380 3944 15054 6469 3942 15055 6379 3946 15056 6375 1666 15057 6478 1665 15058 6378 3943 15059 6382 1545 15060 6376 1657 15061 6375 1666 15062 6379 3946 15063 6379 3946 15064 6378 3943 15065 6469 3942 15066 6380 3944 15067 6382 1545 15068 6379 3946 15069 6380 3944 15070 6381 1546 15071 4093 3918 15072 6378 3943 15073 6478 1665 15074 4675 1667 15075 6431 3947 15076 4544 3885 15077 6422 3935 15078 6421 3938 15079 6421 3938 15080 6423 3937 15081 6430 3870 15082 6431 3947 15083 6423 3937 15084 6424 3934 15085 6429 3871 15086 6430 3870 15087 4722 3884 15088 4544 3885 15089 6431 3947 15090 6474 3939 15091 6474 3939 15092 6431 3947 15093 6430 3870 15094 6462 3869 15095 6530 1556 15096 6529 1550 15097 6472 3931 15098 6473 3930 15099 6591 3927 15100 4679 3827 15101 4545 3859 15102 6432 3948 15103 4706 3929 15104 6432 3948 15105 4545 3859 15106 4546 3832 15107 4706 3929 15108 6433 3949 15109 6476 3936 15110 6432 3948 15111 6591 3927 15112 6432 3948 15113 6476 3936 15114 6473 3930 15115 4706 3929 15116 4666 3901 15117 6454 3950 15118 6433 3949 15119 6556 1523 15120 6476 3936 15121 6433 3949 15122 6434 1516 15123 6455 1517 15124 6434 1516 15125 6433 3949 15126 6454 3950 15127 4666 3901 15128 4730 3886 15129 6475 3940 15130 6454 3950 15131 6463 3951 15132 6455 1517 15133 6454 3950 15134 6475 3940 15135 6455 1517 15136 6463 3951 15137 6555 1513 15138 6456 1518 15139 6573 1514 15140 6555 1513 15141 6463 3951 15142 6462 3869 15143 6462 3869 15144 6463 3951 15145 6475 3940 15146 6474 3939 15147 6578 1581 15148 6576 3868 15149 6593 3941 15150 6596 3875 15151 6468 3945 15152 6472 3931 15153 6529 1550 15154 6525 1549 15155 6468 3945 15156 6470 3932 15157 6471 3928 15158 6472 3931 15159 6469 3942 15160 4676 3919 15161 4677 3926 15162 6470 3932 15163 4814 1164 15164 4565 3910 15165 4564 3952 15166 4757 3953 15167 4757 3953 15168 4756 1175 15169 4815 1165 15170 4814 1164 15171 4758 3954 15172 4763 3955 15173 4762 3956 15174 4760 3957 15175 4757 3953 15176 4758 3954 15177 4760 3957 15178 4756 1175 15179 4756 1175 15180 4760 3957 15181 4759 3958 15182 4755 1176 15183 4763 3955 15184 4764 3959 15185 4766 3960 15186 4762 3956 15187 4760 3957 15188 4762 3956 15189 4761 3961 15190 4759 3958 15191 4762 3956 15192 4766 3960 15193 4765 3962 15194 4761 3961 15195 4766 3960 15196 4559 1399 15197 4558 1402 15198 4765 3962 15199 4766 3960 15200 4764 3959 15201 4348 1400 15202 4559 1399 15203 4773 1393 15204 4560 1396 15205 4348 1400 15206 4764 3959 15207 4773 1393 15208 4548 3963 15209 4547 3964 15210 4454 1394 15211 4547 3964 15212 4461 3822 15213 4455 1403 15214 4454 1394 15215 4552 3965 15216 4464 3834 15217 4461 3822 15218 4547 3964 15219 4552 3965 15220 4551 3907 15221 4466 3835 15222 4464 3834 15223 4552 3965 15224 4547 3964 15225 4548 3963 15226 4549 3966 15227 4758 3954 15228 4757 3953 15229 4564 3952 15230 4549 3966 15231 4564 3952 15232 4551 3907 15233 4552 3965 15234 4549 3966 15235 4763 3955 15236 4758 3954 15237 4549 3966 15238 4548 3963 15239 4773 1393 15240 4764 3959 15241 4763 3955 15242 4548 3963 15243 4565 3910 15244 4550 3908 15245 4551 3907 15246 4564 3952 15247 5862 3798 15248 5684 3967 15249 5426 3783 15250 5561 3694 15251 5866 3968 15252 5427 3734 15253 5426 3783 15254 5684 3967 15255 5865 3969 15256 5618 3970 15257 5611 3971 15258 5864 3972 15259 5870 3973 15260 5534 3974 15261 5535 3662 15262 5808 3595 15263 5870 3973 15264 5620 3975 15265 5621 3976 15266 5534 3974 15267 5869 3977 15268 5853 3594 15269 5536 3817 15270 5613 3978 15271 5864 3972 15272 5613 3978 15273 5536 3817 15274 5537 3814 15275 5622 3979 15276 5382 3597 15277 5534 3974 15278 5621 3976 15279 5865 3969 15280 5864 3972 15281 5537 3814 15282 5538 3555 15283 5617 3980 15284 5383 3598 15285 5615 3981 15286 5616 3982 15287 5867 3983 15288 5865 3969 15289 5538 3555 15290 5539 3554 15291 5622 3979 15292 5615 3981 15293 5383 3598 15294 5382 3597 15295 5868 3984 15296 5867 3983 15297 5539 3554 15298 5861 3718 15299 5535 3662 15300 5534 3974 15301 5382 3597 15302 5384 3596 15303 5864 3972 15304 5611 3971 15305 5612 3985 15306 5613 3978 15307 5624 3631 15308 5385 3599 15309 5383 3598 15310 5617 3980 15311 5869 3977 15312 5613 3978 15313 5612 3985 15314 5614 3986 15315 5868 3984 15316 5861 3718 15317 5415 3720 15318 5417 3987 15319 5870 3973 15320 5869 3977 15321 5614 3986 15322 5620 3975 15323 5863 3797 15324 5617 3980 15325 5616 3982 15326 5631 3988 15327 5863 3797 15328 5623 3703 15329 5624 3631 15330 5617 3980 15331 5867 3983 15332 5619 3989 15333 5618 3970 15334 5865 3969 15335 5868 3984 15336 5627 3990 15337 5619 3989 15338 5867 3983 15339 5869 3977 15340 5870 3973 15341 5808 3595 15342 5853 3594 15343 5863 3797 15344 5631 3988 15345 5630 3991 15346 5862 3798 15347 5862 3798 15348 5630 3991 15349 5629 3992 15350 5684 3967 15351 5866 3968 15352 5684 3967 15353 5629 3992 15354 5628 3993 15355 5417 3987 15356 5415 3720 15357 5427 3734 15358 5866 3968 15359 5416 3994 15360 5417 3987 15361 5866 3968 15362 5628 3993 15363 5627 3990 15364 5868 3984 15365 5417 3987 15366 5416 3994 15367 4605 3858 15368 4787 3854 15369 4742 3995 15370 4606 3996 15371 4606 3996 15372 4742 3995 15373 4743 3997 15374 4607 3998 15375 4743 3997 15376 4740 3999 15377 4608 4000 15378 4607 3998 15379 4740 3999 15380 4040 4001 15381 4058 4002 15382 4608 4000 15383 4040 4001 15384 4740 3999 15385 4846 1155 15386 4020 1145 15387 4743 3997 15388 4844 1156 15389 4846 1155 15390 4740 3999 15391 4608 4000 15392 4058 4002 15393 4032 4003 15394 4809 4004 15395 4607 3998 15396 4608 4000 15397 4809 4004 15398 4808 4005 15399 4787 3854 15400 4786 3853 15401 4741 3912 15402 4742 3995 15403 4775 3862 15404 4605 3858 15405 4606 3996 15406 4745 4006 15407 4743 3997 15408 4742 3995 15409 4741 3912 15410 4844 1156 15411 4808 4005 15412 4745 4006 15413 4606 3996 15414 4607 3998 15415 4688 4007 15416 4751 4008 15417 4576 4009 15418 4579 4010 15419 4577 4011 15420 4576 4009 15421 4751 4008 15422 4744 4012 15423 4753 4013 15424 4748 4014 15425 4576 4009 15426 4577 4011 15427 4577 4011 15428 4578 4015 15429 4754 4016 15430 4753 4013 15431 4744 4012 15432 4746 4017 15433 4578 4015 15434 4577 4011 15435 4581 4018 15436 4578 4015 15437 4746 4017 15438 4810 4019 15439 4813 4020 15440 4754 4016 15441 4578 4015 15442 4581 4018 15443 4580 4021 15444 4579 4010 15445 4689 4022 15446 4747 4023 15447 4752 4024 15448 4688 4007 15449 4579 4010 15450 4580 4021 15451 4589 4025 15452 4591 4026 15453 4749 1114 15454 4690 4027 15455 4689 4022 15456 4748 4014 15457 4591 4026 15458 4589 4025 15459 4595 1123 15460 4593 1122 15461 4754 4016 15462 4813 4020 15463 4590 4028 15464 4589 4025 15465 4690 4027 15466 4750 4029 15467 4592 4030 15468 4591 4026 15469 4748 4014 15470 4753 4013 15471 4593 1122 15472 4592 4030 15473 4753 4013 15474 4754 4016 15475 4687 3850 15476 4776 3849 15477 4751 4008 15478 4688 4007 15479 4690 4027 15480 4749 1114 15481 4830 1113 15482 4691 4031 15483 4750 4029 15484 4829 4032 15485 4821 4033 15486 4716 4034 15487 4775 3862 15488 4744 4012 15489 4751 4008 15490 4776 3849 15491 4775 3862 15492 4745 4006 15493 4746 4017 15494 4744 4012 15495 4810 4019 15496 4746 4017 15497 4745 4006 15498 4808 4005 15499 4750 4029 15500 4690 4027 15501 4691 4031 15502 4829 4032 15503 4774 3860 15504 4687 3850 15505 4688 4007 15506 4752 4024 15507 4747 4023 15508 4689 4022 15509 4589 4025 15510 4590 4028 15511 4586 4035 15512 4590 4028 15513 4750 4029 15514 4716 4034 15515 4579 4010 15516 4576 4009 15517 4748 4014 15518 4689 4022 15519 4588 4036 15520 4587 4037 15521 4715 4038 15522 4714 4039 15523 4713 4040 15524 4712 4041 15525 4587 4037 15526 4588 4036 15527 4832 1103 15528 4749 1114 15529 4591 4026 15530 4592 4030 15531 4834 1101 15532 4832 1103 15533 4592 4030 15534 4593 1122 15535 4723 3904 15536 4709 4042 15537 4710 4043 15538 4725 3905 15539 4774 3860 15540 4752 4024 15541 4709 4042 15542 4723 3904 15543 4725 3905 15544 4710 4043 15545 4708 4044 15546 4795 3906 15547 4715 4038 15548 4824 4045 15549 4823 4046 15550 4714 4039 15551 4716 4034 15552 4821 4033 15553 4824 4045 15554 4715 4038 15555 4573 4047 15556 4575 4048 15557 4712 4041 15558 4713 4040 15559 4708 4044 15560 4710 4043 15561 4575 4048 15562 4573 4047 15563 4574 4049 15564 4580 4021 15565 4747 4023 15566 4711 4050 15567 4709 4042 15568 4752 4024 15569 4580 4021 15570 4574 4049 15571 4575 4048 15572 4574 4049 15573 4711 4050 15574 4712 4041 15575 4710 4043 15576 4709 4042 15577 4574 4049 15578 4575 4048 15579 4587 4037 15580 4586 4035 15581 4716 4034 15582 4715 4038 15583 4712 4041 15584 4711 4050 15585 4586 4035 15586 4587 4037 15587 4711 4050 15588 4747 4023 15589 4590 4028 15590 4586 4035 15591 7726 4051 15592 7704 4052 15593 7709 4053 15594 7717 4054 15595 7697 4055 15596 7696 4056 15597 7670 4057 15598 7671 4058 15599 7682 4059 15600 7680 4060 15601 7689 4061 15602 7691 4062 15603 7710 4063 15604 7702 4064 15605 7680 4060 15606 7682 4059 15607 7672 4065 15608 7671 4058 15609 7721 4066 15610 7692 4067 15611 7681 4068 15612 7682 4059 15613 7691 4062 15614 7690 4069 15615 7698 4070 15616 7697 4055 15617 7671 4058 15618 7672 4065 15619 7711 4071 15620 7710 4063 15621 7682 4059 15622 7681 4068 15623 7683 4072 15624 7685 4073 15625 7689 4061 15626 7688 4074 15627 7692 4067 15628 7721 4066 15629 7685 4073 15630 7683 4072 15631 7685 4073 15632 7687 4075 15633 7691 4062 15634 7689 4061 15635 7675 4076 15636 7674 4077 15637 7722 4078 15638 7723 4079 15639 7721 4066 15640 7719 4080 15641 7687 4075 15642 7685 4073 15643 7686 4081 15644 7687 4075 15645 7719 4080 15646 7720 4082 15647 7724 4083 15648 7718 4084 15649 7674 4077 15650 7675 4076 15651 7690 4069 15652 7691 4062 15653 7687 4075 15654 7686 4081 15655 7723 4079 15656 7735 4085 15657 7676 4086 15658 7675 4076 15659 7716 4087 15660 7712 4088 15661 7708 4089 15662 7707 4090 15663 7708 4089 15664 7705 4091 15665 7706 4092 15666 7707 4090 15667 7672 4065 15668 7674 4077 15669 7718 4084 15670 7698 4070 15671 7709 4053 15672 7704 4052 15673 7706 4092 15674 7705 4091 15675 7692 4067 15676 7722 4078 15677 7674 4077 15678 7672 4065 15679 7727 4093 15680 7726 4051 15681 7717 4054 15682 7725 4094 15683 7692 4067 15684 7693 4095 15685 7694 4096 15686 7722 4078 15687 7670 4057 15688 7673 4097 15689 7720 4082 15690 7719 4080 15691 7735 4085 15692 7694 4096 15693 7732 4098 15694 7736 4099 15695 7735 4085 15696 7723 4079 15697 7722 4078 15698 7694 4096 15699 7705 4091 15700 7697 4055 15701 7698 4070 15702 7709 4053 15703 7671 4058 15704 7670 4057 15705 7719 4080 15706 7721 4066 15707 7680 4060 15708 7679 4100 15709 7688 4074 15710 7689 4061 15711 7705 4091 15712 7708 4089 15713 7696 4056 15714 7697 4055 15715 7699 4101 15716 7715 4102 15717 7716 4087 15718 7707 4090 15719 7703 4103 15720 7714 4104 15721 7715 4102 15722 7699 4101 15723 7708 4089 15724 7712 4088 15725 7713 4105 15726 7696 4056 15727 7698 4070 15728 7718 4084 15729 7717 4054 15730 7709 4053 15731 7706 4092 15732 7700 4106 15733 7699 4101 15734 7707 4090 15735 7700 4106 15736 7701 4107 15737 7703 4103 15738 7699 4101 15739 7702 4064 15740 7710 4063 15741 7703 4103 15742 7701 4107 15743 7714 4104 15744 7703 4103 15745 7710 4063 15746 7711 4071 15747 7725 4094 15748 7717 4054 15749 7718 4084 15750 7724 4083 15751 4803 4108 15752 7724 4083 15753 7675 4076 15754 7676 4086 15755 4803 4108 15756 4804 4109 15757 7725 4094 15758 7724 4083 15759 4728 3876 15760 7727 4093 15761 7725 4094 15762 4804 4109 15763 4728 3876 15764 4729 3889 15765 7726 4051 15766 7727 4093 15767 7696 4056 15768 7713 4105 15769 7673 4097 15770 7670 4057 15771 4729 3889 15772 4733 3888 15773 7704 4052 15774 7726 4051 15775 4733 3888 15776 4794 3895 15777 7706 4092 15778 7704 4052 15779 4798 4110 15780 7733 4111 15781 7702 4064 15782 7701 4107 15783 4797 4112 15784 4798 4110 15785 7701 4107 15786 7700 4106 15787 4794 3895 15788 4797 4112 15789 7700 4106 15790 7706 4092 15791 7702 4064 15792 7733 4111 15793 7679 4100 15794 7680 4060 15795 3976 4113 15796 5636 4114 15797 5988 4115 15798 4006 4116 15799 3976 4113 15800 4007 4117 15801 5987 4118 15802 5636 4114 15803 4002 4119 15804 5809 4120 15805 5987 4118 15806 4007 4117 15807 5635 4121 15808 5634 4122 15809 5963 4123 15810 6005 4124 15811 4002 4119 15812 4003 4125 15813 5906 4126 15814 5809 4120 15815 5999 4127 15816 6002 4128 15817 5634 4122 15818 5635 4121 15819 3977 4129 15820 5638 4130 15821 5906 4126 15822 4003 4125 15823 5964 4131 15824 5660 4132 15825 5659 4133 15826 5643 4134 15827 3977 4129 15828 4054 4135 15829 5905 4136 15830 5638 4130 15831 5638 4130 15832 5637 4137 15833 5809 4120 15834 5906 4126 15835 5905 4136 15836 5810 4138 15837 5637 4137 15838 5638 4130 15839 5639 4139 15840 5637 4137 15841 5810 4138 15842 5965 4140 15843 5987 4118 15844 5809 4120 15845 5637 4137 15846 5639 4139 15847 5641 4141 15848 5642 4142 15849 6004 4143 15850 6005 4124 15851 6008 4144 15852 6007 4145 15853 5642 4142 15854 5641 4141 15855 5640 4146 15856 5639 4139 15857 5965 4140 15858 5966 4147 15859 5963 4123 15860 5987 4118 15861 5639 4139 15862 5640 4146 15863 5641 4141 15864 5640 4146 15865 5966 4147 15866 6008 4144 15867 6005 4124 15868 5963 4123 15869 5640 4146 15870 5641 4141 15871 5659 4133 15872 6004 4143 15873 5642 4142 15874 5643 4134 15875 5418 4148 15876 5420 4149 15877 6015 4150 15878 6010 4151 15879 5964 4131 15880 5902 4152 15881 5903 4153 15882 5660 4132 15883 5903 4153 15884 5902 4152 15885 5420 4149 15886 5418 4148 15887 5643 4134 15888 5642 4142 15889 6007 4145 15890 5964 4131 15891 5962 4154 15892 6001 4155 15893 5990 4156 15894 5678 4157 15895 5632 4158 15896 5633 4159 15897 6004 4143 15898 5659 4133 15899 6014 4160 15900 6011 4161 15901 6010 4151 15902 6015 4150 15903 5633 4159 15904 5635 4121 15905 6005 4124 15906 6004 4143 15907 6002 4128 15908 5999 4127 15909 6000 4162 15910 6001 4155 15911 5901 4163 15912 5999 4127 15913 5635 4121 15914 5633 4159 15915 5990 4156 15916 6001 4155 15917 6000 4162 15918 5989 4164 15919 5962 4154 15920 5988 4115 15921 6002 4128 15922 6001 4155 15923 4004 4165 15924 5962 4154 15925 5678 4157 15926 4005 4166 15927 5636 4114 15928 5634 4122 15929 6002 4128 15930 5988 4115 15931 4004 4165 15932 4006 4116 15933 5988 4115 15934 5962 4154 15935 5987 4118 15936 5963 4123 15937 5634 4122 15938 5636 4114 15939 5689 4167 15940 6011 4161 15941 6014 4160 15942 6009 4168 15943 5995 4169 15944 5690 4170 15945 5687 4171 15946 5996 4172 15947 5689 4167 15948 6009 4168 15949 5687 4171 15950 5690 4170 15951 5998 4173 15952 5995 4169 15953 5996 4172 15954 5997 4174 15955 4008 4175 15956 5691 4176 15957 5686 4177 15958 4049 4178 15959 5998 4173 15960 5997 4174 15961 5686 4177 15962 5691 4176 15963 916 4179 15964 1857 1119 15965 4060 4180 15966 4030 4181 15967 917 4182 15968 1869 4183 15969 4062 4184 15970 4031 4185 15971 1869 4183 15972 916 4179 15973 4030 4181 15974 4062 4184 15975 918 4186 15976 1870 4187 15977 1869 4183 15978 917 4182 15979 1870 4187 15980 915 4188 15981 916 4179 15982 1869 4183 15983 4581 4018 15984 4582 4189 15985 4812 4190 15986 4813 4020 15987 4810 4019 15988 4811 4191 15989 4582 4189 15990 4581 4018 15991 4582 4189 15992 4062 4184 15993 4030 4181 15994 4812 4190 15995 4811 4191 15996 4031 4185 15997 4062 4184 15998 4582 4189 15999 4812 4190 16000 4030 4181 16001 4060 4180 16002 4594 1126 16003 4813 4020 16004 4812 4190 16005 4594 1126 16006 4595 1123 16007 4032 4003 16008 4031 4185 16009 4811 4191 16010 4809 4004 16011 4032 4003 16012 919 4192 16013 917 4182 16014 4031 4185 16015 4809 4004 16016 4811 4191 16017 4810 4019 16018 4808 4005 16019 919 4192 16020 920 4193 16021 918 4186 16022 917 4182 16023 915 4188 16024 1856 1117 16025 1857 1119 16026 916 4179 16027 1203 4194 16028 1879 4195 16029 4063 4196 16030 4043 4197 16031 1879 4195 16032 1202 4198 16033 4042 4199 16034 4063 4196 16035 4571 4200 16036 4570 4201 16037 4699 4202 16038 4700 4203 16039 1880 4204 16040 1206 4205 16041 1207 4206 16042 1881 4207 16043 1161 4208 16044 1878 4209 16045 1880 4204 16046 1205 4210 16047 1878 4209 16048 1166 4211 16049 1206 4205 16050 1880 4204 16051 1202 4198 16052 1879 4195 16053 1881 4207 16054 1207 4206 16055 4572 4212 16056 4570 4201 16057 4702 4213 16058 4703 4214 16059 4704 4215 16060 4699 4202 16061 4570 4201 16062 4572 4212 16063 4573 4047 16064 4571 4200 16065 4700 4203 16066 4708 4044 16067 4713 4040 16068 4701 4216 16069 4571 4200 16070 4573 4047 16071 1879 4195 16072 1203 4194 16073 1204 4217 16074 1881 4207 16075 901 4218 16076 1201 4219 16077 4041 4220 16078 4027 4221 16079 4701 4216 16080 4702 4213 16081 4570 4201 16082 4571 4200 16083 1202 4198 16084 947 4222 16085 4036 4223 16086 4042 4199 16087 4572 4212 16088 4063 4196 16089 4042 4199 16090 4704 4215 16091 1208 4224 16092 1201 4219 16093 901 4218 16094 900 4225 16095 4703 4214 16096 4043 4197 16097 4063 4196 16098 4572 4212 16099 946 4226 16100 947 4222 16101 1202 4198 16102 1207 4206 16103 4585 4227 16104 4583 4228 16105 4698 4229 16106 4705 4230 16107 943 4231 16108 946 4226 16109 1207 4206 16110 1206 4205 16111 4585 4227 16112 4061 4232 16113 4043 4197 16114 4703 4214 16115 1209 4233 16116 1208 4224 16117 900 4225 16118 906 4234 16119 4588 4036 16120 4584 4235 16121 4701 4216 16122 4713 4040 16123 1160 4236 16124 1209 4233 16125 906 4234 16126 905 4237 16127 4714 4039 16128 4697 4238 16129 4584 4235 16130 4588 4036 16131 944 4239 16132 943 4231 16133 1206 4205 16134 1166 4211 16135 4584 4235 16136 4583 4228 16137 4702 4213 16138 4701 4216 16139 1205 4210 16140 1880 4204 16141 1881 4207 16142 1204 4217 16143 1857 1119 16144 902 1110 16145 4025 1109 16146 4060 4180 16147 4697 4238 16148 4698 4229 16149 4583 4228 16150 4584 4235 16151 1201 4219 16152 1866 4240 16153 4061 4232 16154 4041 4220 16155 1866 4240 16156 1203 4194 16157 4043 4197 16158 4061 4232 16159 1863 4241 16160 1161 4208 16161 1205 4210 16162 1867 4242 16163 4705 4230 16164 4041 4220 16165 4061 4232 16166 4585 4227 16167 4594 1126 16168 4060 4180 16169 4025 1109 16170 4826 1124 16171 1867 4242 16172 1205 4210 16173 1204 4217 16174 1868 4243 16175 4714 4039 16176 4823 4046 16177 4822 4244 16178 4697 4238 16179 4703 4214 16180 4702 4213 16181 4583 4228 16182 4585 4227 16183 4697 4238 16184 4822 4244 16185 4828 4245 16186 4698 4229 16187 4796 4246 16188 4700 4203 16189 4699 4202 16190 4793 4247 16191 1209 4233 16192 1867 4242 16193 1868 4243 16194 1208 4224 16195 4793 4247 16196 4699 4202 16197 4704 4215 16198 4792 4248 16199 4698 4229 16200 4828 4245 16201 4827 4249 16202 4705 4230 16203 1160 4236 16204 1863 4241 16205 1867 4242 16206 1209 4233 16207 4704 4215 16208 4042 4199 16209 4036 4223 16210 4792 4248 16211 4827 4249 16212 4027 4221 16213 4041 4220 16214 4705 4230 16215 1203 4194 16216 1866 4240 16217 1868 4243 16218 1204 4217 16219 4795 3906 16220 4708 4044 16221 4700 4203 16222 4796 4246 16223 1866 4240 16224 1201 4219 16225 1208 4224 16226 1868 4243 16227 5994 4250 16228 5685 4251 16229 5686 4177 16230 5997 4174 16231 1492 4252 16232 1480 4253 16233 1439 4254 16234 1438 4255 16235 5969 4256 16236 5904 4257 16237 5902 4152 16238 5964 4131 16239 1483 4258 16240 1491 4259 16241 1490 4260 16242 1484 4261 16243 5993 4262 16244 5996 4172 16245 5687 4171 16246 5688 4263 16247 1484 4261 16248 1490 4260 16249 1437 4264 16250 1442 4265 16251 6013 4266 16252 5688 4263 16253 5687 4171 16254 6009 4168 16255 1484 4261 16256 1442 4265 16257 1487 4267 16258 1485 4268 16259 5907 4269 16260 5811 4270 16261 5810 4138 16262 5905 4136 16263 1483 4258 16264 1484 4261 16265 1485 4268 16266 1486 4271 16267 5968 4272 16268 5965 4140 16269 5810 4138 16270 5811 4270 16271 1480 4253 16272 1481 4273 16273 1482 4274 16274 1439 4254 16275 6014 4160 16276 6015 4150 16277 6012 4275 16278 5677 4276 16279 1451 4277 16280 1455 4278 16281 1456 4279 16282 1452 4280 16283 6006 4281 16284 6007 4145 16285 6008 4144 16286 6003 4282 16287 1451 4277 16288 1452 4280 16289 1449 4283 16290 1448 4284 16291 5994 4250 16292 5997 4174 16293 5996 4172 16294 5993 4262 16295 1439 4254 16296 1442 4265 16297 1437 4264 16298 1438 4255 16299 5967 4285 16300 6003 4282 16301 6008 4144 16302 5966 4147 16303 1431 4286 16304 1796 4287 16305 1433 4288 16306 1430 4289 16307 5968 4272 16308 5967 4285 16309 5966 4147 16310 5965 4140 16311 1796 4287 16312 1797 4290 16313 1561 4291 16314 1433 4288 16315 5964 4131 16316 6007 4145 16317 6006 4281 16318 5969 4256 16319 1562 4292 16320 1802 4293 16321 1481 4273 16322 1480 4253 16323 4054 4135 16324 4055 4294 16325 5907 4269 16326 5905 4136 16327 1483 4258 16328 1486 4271 16329 1657 4295 16330 1658 4296 16331 4648 4297 16332 4649 4298 16333 5994 4250 16334 5993 4262 16335 4626 4299 16336 4642 4300 16337 5968 4272 16338 5811 4270 16339 1483 4258 16340 1658 4296 16341 1659 4301 16342 1491 4259 16343 4642 4300 16344 4643 4302 16345 5967 4285 16346 5968 4272 16347 1556 4303 16348 1559 4304 16349 1659 4301 16350 1658 4296 16351 4641 4305 16352 6003 4282 16353 5967 4285 16354 4643 4302 16355 4055 4294 16356 4054 4135 16357 1559 4304 16358 1556 4303 16359 4641 4305 16360 4644 4306 16361 6006 4281 16362 6003 4282 16363 1432 4307 16364 1784 4308 16365 1783 4309 16366 1560 4310 16367 4644 4306 16368 4645 4311 16369 5969 4256 16370 6006 4281 16371 1432 4307 16372 1436 4312 16373 1785 4313 16374 1784 4308 16375 1452 4280 16376 1784 4308 16377 1785 4313 16378 1449 4283 16379 4047 4314 16380 4048 4315 16381 5685 4251 16382 4622 4316 16383 1452 4280 16384 1456 4279 16385 1783 4309 16386 1784 4308 16387 4622 4316 16388 5685 4251 16389 5994 4250 16390 4649 4298 16391 1480 4253 16392 1492 4252 16393 1564 4317 16394 1562 4292 16395 1451 4277 16396 1787 4318 16397 1788 4319 16398 1455 4278 16399 4623 4320 16400 4648 4297 16401 5993 4262 16402 5688 4263 16403 1451 4277 16404 1448 4284 16405 1786 4321 16406 1787 4318 16407 1432 4307 16408 1560 4310 16409 1797 4290 16410 1796 4287 16411 4623 4320 16412 5688 4263 16413 6013 4266 16414 4630 4322 16415 4621 4323 16416 4630 4322 16417 6013 4266 16418 5677 4276 16419 1431 4286 16420 1436 4312 16421 1432 4307 16422 1796 4287 16423 4621 4323 16424 5677 4276 16425 6012 4275 16426 4629 4324 16427 4047 4314 16428 1788 4319 16429 1787 4318 16430 4048 4315 16431 4137 4325 16432 4629 4324 16433 6012 4275 16434 5419 4326 16435 4048 4315 16436 1787 4318 16437 1786 4321 16438 4049 4178 16439 4137 4325 16440 5419 4326 16441 5904 4257 16442 4616 4327 16443 1564 4317 16444 3319 4328 16445 3320 4329 16446 1562 4292 16447 4616 4327 16448 5904 4257 16449 5969 4256 16450 4645 4311 16451 3319 4328 16452 1430 4289 16453 1433 4288 16454 3320 4329 16455 1562 4292 16456 3320 4329 16457 3323 4330 16458 1802 4293 16459 3320 4329 16460 1433 4288 16461 1561 4291 16462 3323 4330 16463 5420 4149 16464 5419 4326 16465 6012 4275 16466 6015 4150 16467 4048 4315 16468 4049 4178 16469 5686 4177 16470 5685 4251 16471 5902 4152 16472 5904 4257 16473 5419 4326 16474 5420 4149 16475 6014 4160 16476 5677 4276 16477 6013 4266 16478 6009 4168 16479 1482 4274 16480 1487 4267 16481 1442 4265 16482 1439 4254 16483 4052 4331 16484 4632 4332 16485 5908 4333 16486 4053 4334 16487 4631 4335 16488 5907 4269 16489 5908 4333 16490 4632 4332 16491 4626 4299 16492 5811 4270 16493 5907 4269 16494 4631 4335 16495 1554 4336 16496 1555 4337 16497 1556 4303 16498 1557 4338 16499 1555 4337 16500 1554 4336 16501 4052 4331 16502 4053 4334 16503 1556 4303 16504 1658 4296 16505 1657 4295 16506 1557 4338 16507 4055 4294 16508 1556 4303 16509 1555 4337 16510 4053 4334 16511 4053 4334 16512 5908 4333 16513 5907 4269 16514 4055 4294 16515 4694 4339 16516 4693 4340 16517 4820 1160 16518 4818 1159 16519 4663 849 16520 4652 848 16521 4098 4341 16522 4099 4342 16523 1494 4343 16524 1803 4344 16525 4013 4345 16526 4012 4346 16527 4695 4347 16528 4692 4348 16529 4816 1166 16530 4755 1176 16531 4046 4349 16532 4634 4350 16533 4097 4351 16534 4086 4352 16535 4100 4353 16536 4099 4342 16537 4624 4354 16538 4625 4355 16539 1494 4343 16540 4012 4346 16541 4011 4356 16542 1495 4357 16543 1985 4358 16544 4013 4345 16545 3948 955 16546 1986 4359 16547 1605 4360 16548 1488 4361 16549 1485 4268 16550 1487 4267 16551 4105 4362 16552 4106 787 16553 4469 786 16554 4614 750 16555 4653 944 16556 4663 849 16557 4099 4342 16558 4100 4353 16559 1488 4361 16560 1605 4360 16561 4010 4363 16562 4009 4364 16563 4625 4355 16564 4630 4322 16565 4621 4323 16566 4620 4365 16567 1605 4360 16568 1487 4267 16569 1482 4274 16570 1495 4357 16571 1212 4366 16572 910 1169 16573 908 1168 16574 1213 4367 16575 1271 792 16576 3958 4368 16577 3957 4369 16578 1809 947 16579 4044 4370 16580 1213 4367 16581 908 1168 16582 4029 1167 16583 4615 4371 16584 4014 4372 16585 4106 787 16586 4105 4362 16587 4636 4373 16588 4693 4340 16589 4694 4339 16590 4635 4374 16591 1211 4375 16592 996 1174 16593 912 1170 16594 1214 4376 16595 4096 4377 16596 4097 4351 16597 4634 4350 16598 4647 4378 16599 3949 4379 16600 1803 4344 16601 3324 4380 16602 3959 4381 16603 1803 4344 16604 3949 4379 16605 3948 955 16606 4013 4345 16607 4044 4370 16608 4029 1167 16609 4820 1160 16610 4693 4340 16611 1212 4366 16612 1214 4376 16613 912 1170 16614 910 1169 16615 4104 4382 16616 4103 4383 16617 4620 4365 16618 4633 4384 16619 1482 4274 16620 1481 4273 16621 1494 4343 16622 1495 4357 16623 1488 4361 16624 4009 4364 16625 1211 4375 16626 1489 4385 16627 4095 4386 16628 4104 4382 16629 4633 4384 16630 4136 4387 16631 4620 4365 16632 4621 4323 16633 4629 4324 16634 4633 4384 16635 1798 4388 16636 1553 4389 16637 1561 4291 16638 1797 4290 16639 1488 4361 16640 1489 4385 16641 1486 4271 16642 1485 4268 16643 4640 4390 16644 4018 4391 16645 4017 4392 16646 4628 4393 16647 985 4394 16648 986 4395 16649 1981 4396 16650 1980 4397 16651 1457 4398 16652 1458 4399 16653 1456 4279 16654 1455 4278 16655 4616 4327 16656 4615 4371 16657 4136 4387 16658 4137 4325 16659 986 4395 16660 1210 4400 16661 1985 4358 16662 1981 4396 16663 1802 4293 16664 3323 4330 16665 3324 4380 16666 1803 4344 16667 4046 4349 16668 4086 4352 16669 3957 4369 16670 1552 4401 16671 4051 4402 16672 1550 4403 16673 1213 4367 16674 4044 4370 16675 4765 3962 16676 4558 1402 16677 4554 1401 16678 4696 4404 16679 3323 4330 16680 1561 4291 16681 1553 4389 16682 3324 4380 16683 4051 4402 16684 4636 4373 16685 4632 4332 16686 4052 4331 16687 1550 4403 16688 1551 4405 16689 1212 4366 16690 1213 4367 16691 4046 4349 16692 4047 4314 16693 4622 4316 16694 4634 4350 16695 1262 772 16696 3950 4406 16697 3951 4407 16698 1799 759 16699 4659 940 16700 4619 943 16701 4103 4383 16702 4104 4382 16703 1489 4385 16704 1211 4375 16705 1214 4376 16706 1656 4408 16707 4086 4352 16708 4050 946 16709 1809 947 16710 3957 4369 16711 992 4409 16712 996 1174 16713 1211 4375 16714 4009 4364 16715 4640 4390 16716 4639 4410 16717 4695 4347 16718 4018 4391 16719 3950 4406 16720 1553 4389 16721 1798 4388 16722 3951 4407 16723 4628 4393 16724 4637 4411 16725 4644 4306 16726 4641 4305 16727 1764 4412 16728 1798 4388 16729 1797 4290 16730 1560 4310 16731 1489 4385 16732 1656 4408 16733 1657 4295 16734 1486 4271 16735 4761 3961 16736 4017 4392 16737 4018 4391 16738 4759 3958 16739 3949 4379 16740 1804 775 16741 2097 956 16742 3948 955 16743 1551 4405 16744 1557 4338 16745 1657 4295 16746 1656 4408 16747 1799 759 16748 3951 4407 16749 3954 4413 16750 1268 760 16751 4647 4378 16752 4649 4298 16753 4648 4297 16754 4646 4414 16755 1551 4405 16756 1656 4408 16757 1214 4376 16758 1212 4366 16759 3951 4407 16760 1798 4388 16761 1764 4412 16762 3954 4413 16763 1494 4343 16764 1481 4273 16765 1802 4293 16766 1803 4344 16767 1268 760 16768 3954 4413 16769 3955 4415 16770 1258 770 16771 4614 750 16772 4135 749 16773 4095 4386 16774 4105 4362 16775 4137 4325 16776 4136 4387 16777 4633 4384 16778 4629 4324 16779 1764 4412 16780 1560 4310 16781 1783 4309 16782 1782 4416 16783 3954 4413 16784 1764 4412 16785 1782 4416 16786 3955 4415 16787 4647 4378 16788 4634 4350 16789 4622 4316 16790 4649 4298 16791 1458 4399 16792 1782 4416 16793 1783 4309 16794 1456 4279 16795 4637 4411 16796 4628 4393 16797 4017 4392 16798 4016 4417 16799 4628 4393 16800 4641 4305 16801 4643 4302 16802 4640 4390 16803 4638 4418 16804 4015 4419 16805 4014 4372 16806 4615 4371 16807 1258 770 16808 3955 4415 16809 3956 4420 16810 1269 791 16811 1269 791 16812 3956 4420 16813 3958 4368 16814 1271 792 16815 4696 4404 16816 4554 1401 16817 4014 4372 16818 4015 4419 16819 4646 4414 16820 4648 4297 16821 4623 4320 16822 4624 4354 16823 3955 4415 16824 1782 4416 16825 1458 4399 16826 3956 4420 16827 4051 4402 16828 4052 4331 16829 1554 4336 16830 1550 4403 16831 4625 4355 16832 4624 4354 16833 4623 4320 16834 4630 4322 16835 4554 1401 16836 4553 924 16837 4106 787 16838 4014 4372 16839 4638 4418 16840 4615 4371 16841 4616 4327 16842 4645 4311 16843 4765 3962 16844 4696 4404 16845 4015 4419 16846 4016 4417 16847 986 4395 16848 990 4421 16849 4010 4363 16850 4011 4356 16851 4635 4374 16852 4694 4339 16853 4692 4348 16854 4627 4422 16855 4635 4374 16856 4631 4335 16857 4632 4332 16858 4636 4373 16859 4765 3962 16860 4016 4417 16861 4017 4392 16862 4761 3961 16863 4105 4362 16864 4095 4386 16865 4136 4387 16866 4615 4371 16867 986 4395 16868 4011 4356 16869 4012 4346 16870 1210 4400 16871 4635 4374 16872 4627 4422 16873 4626 4299 16874 4631 4335 16875 4639 4410 16876 4642 4300 16877 4626 4299 16878 4627 4422 16879 3956 4420 16880 1458 4399 16881 1457 4398 16882 3958 4368 16883 4103 4383 16884 4100 4353 16885 4625 4355 16886 4620 4365 16887 4135 749 16888 4659 940 16889 4104 4382 16890 4095 4386 16891 1495 4357 16892 4011 4356 16893 4010 4363 16894 1605 4360 16895 3325 776 16896 3959 4381 16897 3950 4406 16898 1262 772 16899 1551 4405 16900 1550 4403 16901 1554 4336 16902 1557 4338 16903 4051 4402 16904 4044 4370 16905 4693 4340 16906 4636 4373 16907 4098 4341 16908 4096 4377 16909 4647 4378 16910 4646 4414 16911 3959 4381 16912 3324 4380 16913 1553 4389 16914 3950 4406 16915 4759 3958 16916 4018 4391 16917 4695 4347 16918 4755 1176 16919 1210 4400 16920 4012 4346 16921 4013 4345 16922 1985 4358 16923 3958 4368 16924 1457 4398 16925 1552 4401 16926 3957 4369 16927 4638 4418 16928 4637 4411 16929 4016 4417 16930 4015 4419 16931 4046 4349 16932 1552 4401 16933 1788 4319 16934 4047 4314 16935 4652 848 16936 4650 784 16937 4096 4377 16938 4098 4341 16939 1804 775 16940 3949 4379 16941 3959 4381 16942 3325 776 16943 4640 4390 16944 4643 4302 16945 4642 4300 16946 4639 4410 16947 4086 4352 16948 4097 4351 16949 4609 783 16950 4050 946 16951 4650 784 16952 4609 783 16953 4097 4351 16954 4096 4377 16955 4644 4306 16956 4637 4411 16957 4638 4418 16958 4645 4311 16959 4619 943 16960 4653 944 16961 4100 4353 16962 4103 4383 16963 4694 4339 16964 4818 1159 16965 4816 1166 16966 4692 4348 16967 990 4421 16968 992 4409 16969 4009 4364 16970 4010 4363 16971 1457 4398 16972 1455 4278 16973 1788 4319 16974 1552 4401 16975 4099 4342 16976 4098 4341 16977 4646 4414 16978 4624 4354 16979 4639 4410 16980 4627 4422 16981 4692 4348 16982 4695 4347 16983 926 4423 16984 925 4424 16985 929 4425 16986 927 4426 16987 2018 4427 16988 2005 4428 16989 923 4429 16990 2016 4430 16991 926 4423 16992 2006 4431 16993 2017 4432 16994 2018 4427 16995 7661 4433 16996 2016 4430 16997 4072 4434 16998 7662 4435 16999 4805 4436 17000 4539 3877 17001 4728 3876 17002 4804 4109 17003 4538 4437 17004 4072 4434 17005 4033 4438 17006 4807 4439 17007 923 4429 17008 2019 4440 17009 4073 4441 17010 4033 4438 17011 6604 4442 17012 4541 4443 17013 4534 4444 17014 4532 4445 17015 2003 4446 17016 2005 4428 17017 2018 4427 17018 2017 4432 17019 924 4447 17020 7653 4448 17021 7661 4433 17022 1240 4449 17023 2019 4440 17024 2026 4450 17025 4074 4451 17026 4073 4441 17027 7677 4452 17028 7676 4086 17029 7735 4085 17030 7736 4099 17031 2019 4440 17032 2020 4453 17033 2025 4454 17034 2026 4450 17035 926 4423 17036 927 4426 17037 1090 4455 17038 2006 4431 17039 921 4456 17040 2004 4457 17041 2014 4458 17042 922 4459 17043 6604 4442 17044 6603 3933 17045 6422 3935 17046 4541 4443 17047 2003 4446 17048 2004 4457 17049 2020 4453 17050 2005 4428 17051 7653 4448 17052 925 4424 17053 2016 4430 17054 7661 4433 17055 4535 4460 17056 4073 4441 17057 4074 4451 17058 4531 4461 17059 4535 4460 17060 4531 4461 17061 4532 4445 17062 4534 4444 17063 4803 4108 17064 7676 4086 17065 7677 4452 17066 4806 4462 17067 2005 4428 17068 2020 4453 17069 2019 4440 17070 923 4429 17071 4544 3885 17072 4542 3881 17073 4541 4443 17074 6422 3935 17075 921 4456 17076 2025 4454 17077 2020 4453 17078 2004 4457 17079 7736 4099 17080 7695 4463 17081 7669 4464 17082 7677 4452 17083 4540 4465 17084 4807 4439 17085 4535 4460 17086 4534 4444 17087 4805 4436 17088 4536 4466 17089 4537 3878 17090 4539 3877 17091 925 4424 17092 7653 4448 17093 7654 4467 17094 929 4425 17095 2001 4468 17096 2014 4458 17097 2004 4457 17098 2003 4446 17099 4542 3881 17100 4540 4465 17101 4534 4444 17102 4541 4443 17103 4807 4439 17104 4033 4438 17105 4073 4441 17106 4535 4460 17107 4538 4437 17108 4806 4462 17109 7677 4452 17110 7669 4464 17111 4805 4436 17112 4806 4462 17113 4538 4437 17114 4536 4466 17115 2016 4430 17116 923 4429 17117 4033 4438 17118 4072 4434 17119 7653 4448 17120 924 4447 17121 928 4469 17122 7654 4467 17123 4805 4436 17124 4804 4109 17125 4803 4108 17126 4806 4462 17127 4542 3881 17128 4537 3878 17129 4536 4466 17130 4540 4465 17131 4045 4470 17132 7662 4435 17133 7669 4464 17134 7695 4463 17135 4536 4466 17136 4538 4437 17137 4807 4439 17138 4540 4465 17139 926 4423 17140 2018 4427 17141 2016 4430 17142 925 4424 17143 1240 4449 17144 7661 4433 17145 7662 4435 17146 4045 4470 17147 4072 4434 17148 4538 4437 17149 7669 4464 17150 7662 4435 17151 4524 1453 17152 4523 1608 17153 4530 4471 17154 4529 1450 17155 6601 1606 17156 6600 4472 17157 4519 4473 17158 4522 4474 17159 930 4475 17160 931 4476 17161 932 4477 17162 933 4478 17163 4523 1608 17164 4522 4474 17165 4801 4479 17166 4530 4471 17167 4801 4479 17168 4067 4480 17169 4075 4481 17170 4530 4471 17171 934 4482 17172 2034 4483 17173 2035 4484 17174 931 4476 17175 2033 4485 17176 2028 4486 17177 2027 4487 17178 2034 4483 17179 931 4476 17180 2035 4484 17181 2038 4488 17182 932 4477 17183 2027 4487 17184 2028 4486 17185 4076 1456 17186 4075 4481 17187 2034 4483 17188 2027 4487 17189 936 4489 17190 2035 4484 17191 6602 1592 17192 6599 1591 17193 6600 4472 17194 6601 1606 17195 4530 4471 17196 4075 4481 17197 4076 1456 17198 4529 1450 17199 6598 1607 17200 6601 1606 17201 4522 4474 17202 4523 1608 17203 936 4489 17204 2027 4487 17205 4075 4481 17206 4067 4480 17207 942 4490 17208 1836 4491 17209 1835 4492 17210 945 4493 17211 1838 4494 17212 4059 4495 17213 4036 4223 17214 947 4222 17215 942 4490 17216 941 4496 17217 1837 4497 17218 1836 4491 17219 4798 4110 17220 4597 4498 17221 4596 4499 17222 4799 4500 17223 940 4501 17224 7651 4502 17225 7652 4503 17226 938 4504 17227 4034 4505 17228 7734 4506 17229 4799 4500 17230 4035 4507 17231 939 4508 17232 941 4496 17233 940 4501 17234 938 4504 17235 1837 4497 17236 1838 4494 17237 947 4222 17238 946 4226 17239 4797 4112 17240 4598 4509 17241 4597 4498 17242 4798 4110 17243 7642 4510 17244 7665 4511 17245 7652 4503 17246 7651 4502 17247 4798 4110 17248 4799 4500 17249 7734 4506 17250 7733 4111 17251 4797 4112 17252 4794 3895 17253 4599 3898 17254 4598 4509 17255 938 4504 17256 7652 4503 17257 7664 4512 17258 4034 4505 17259 7663 4513 17260 7668 4514 17261 7678 4515 17262 7664 4512 17263 939 4508 17264 938 4504 17265 4034 4505 17266 4035 4507 17267 7733 4111 17268 7734 4506 17269 7678 4515 17270 7679 4100 17271 7663 4513 17272 7664 4512 17273 7652 4503 17274 7665 4511 17275 4034 4505 17276 7664 4512 17277 7678 4515 17278 7734 4506 17279 941 4496 17280 939 4508 17281 1838 4494 17282 1837 4497 17283 4596 4499 17284 4792 4248 17285 4036 4223 17286 4059 4495 17287 7688 4074 17288 7679 4100 17289 7678 4515 17290 7668 4514 17291 4597 4498 17292 4793 4247 17293 4792 4248 17294 4596 4499 17295 1836 4491 17296 943 4231 17297 944 4239 17298 1835 4492 17299 939 4508 17300 4035 4507 17301 4059 4495 17302 1838 4494 17303 4598 4509 17304 4796 4246 17305 4793 4247 17306 4597 4498 17307 1836 4491 17308 1837 4497 17309 946 4226 17310 943 4231 17311 4799 4500 17312 4596 4499 17313 4059 4495 17314 4035 4507 17315 4598 4509 17316 4599 3898 17317 4795 3906 17318 4796 4246 17319 948 4516 17320 951 4517 17321 2036 4518 17322 1238 4519 17323 948 4516 17324 1238 4519 17325 1239 4520 17326 954 4521 17327 936 4489 17328 4067 4480 17329 4077 4522 17330 2037 4523 17331 932 4477 17332 2038 4488 17333 2036 4518 17334 951 4517 17335 4789 4524 17336 4667 4525 17337 4532 4445 17338 4531 4461 17339 1239 4520 17340 1238 4519 17341 955 4526 17342 956 4527 17343 952 4528 17344 955 4526 17345 1238 4519 17346 2036 4518 17347 4801 4479 17348 4522 4474 17349 4519 4473 17350 4520 4529 17351 4790 4530 17352 4069 4531 17353 4068 4532 17354 4791 4533 17355 6597 4534 17356 6596 3875 17357 6593 3941 17358 6592 4535 17359 4801 4479 17360 4520 4529 17361 4077 4522 17362 4067 4480 17363 956 4527 17364 955 4526 17365 4069 4531 17366 4070 4536 17367 4791 4533 17368 4520 4529 17369 4519 4473 17370 4521 4537 17371 4789 4524 17372 4070 4536 17373 4069 4531 17374 4790 4530 17375 6600 4472 17376 6599 1591 17377 6595 1593 17378 6594 4538 17379 6604 4442 17380 4532 4445 17381 4667 4525 17382 6592 4535 17383 955 4526 17384 952 4528 17385 4068 4532 17386 4069 4531 17387 4667 4525 17388 4789 4524 17389 4790 4530 17390 4668 4539 17391 4791 4533 17392 4068 4532 17393 4077 4522 17394 4520 4529 17395 6597 4534 17396 4668 4539 17397 4521 4537 17398 6594 4538 17399 6604 4442 17400 6592 4535 17401 6593 3941 17402 6603 3933 17403 6597 4534 17404 6592 4535 17405 4667 4525 17406 4668 4539 17407 948 4516 17408 949 4540 17409 950 4541 17410 951 4517 17411 956 4527 17412 2026 4450 17413 2025 4454 17414 1239 4520 17415 952 4528 17416 2037 4523 17417 4077 4522 17418 4068 4532 17419 6600 4472 17420 6594 4538 17421 4521 4537 17422 4519 4473 17423 6597 4534 17424 6594 4538 17425 6595 1593 17426 6596 3875 17427 921 4456 17428 922 4459 17429 953 4542 17430 954 4521 17431 956 4527 17432 4070 4536 17433 4074 4451 17434 2026 4450 17435 952 4528 17436 2036 4518 17437 2038 4488 17438 2037 4523 17439 4791 4533 17440 4521 4537 17441 4668 4539 17442 4790 4530 17443 932 4477 17444 951 4517 17445 950 4541 17446 933 4478 17447 921 4456 17448 954 4521 17449 1239 4520 17450 2025 4454 17451 936 4489 17452 2037 4523 17453 2038 4488 17454 2035 4484 17455 4789 4524 17456 4531 4461 17457 4074 4451 17458 4070 4536 17459 948 4516 17460 954 4521 17461 953 4542 17462 949 4540 17463 2023 4543 17464 7646 4544 17465 7647 4545 17466 2024 4546 17467 958 4547 17468 7666 4548 17469 7646 4544 17470 2023 4543 17471 4038 4549 17472 7728 4550 17473 7668 4514 17474 7663 4513 17475 7693 4095 17476 7692 4067 17477 7683 4072 17478 7684 4551 17479 7646 4544 17480 7666 4548 17481 961 4552 17482 7665 4511 17483 4037 4553 17484 7730 4554 17485 7729 4555 17486 4039 4556 17487 959 4557 17488 1240 4449 17489 4045 4470 17490 4037 4553 17491 958 4547 17492 960 4558 17493 961 4552 17494 7666 4548 17495 7688 4074 17496 7668 4514 17497 7684 4551 17498 7683 4072 17499 4037 4553 17500 4045 4470 17501 7695 4463 17502 7730 4554 17503 959 4557 17504 4037 4553 17505 4039 4556 17506 960 4558 17507 7732 4098 17508 7731 4559 17509 7729 4555 17510 7730 4554 17511 7732 4098 17512 7694 4096 17513 7693 4095 17514 7731 4559 17515 957 4560 17516 924 4447 17517 1240 4449 17518 959 4557 17519 7732 4098 17520 7730 4554 17521 7695 4463 17522 7736 4099 17523 957 4560 17524 958 4547 17525 2023 4543 17526 2022 4561 17527 7684 4551 17528 7668 4514 17529 7728 4550 17530 7667 4562 17531 961 4552 17532 960 4558 17533 4039 4556 17534 4038 4549 17535 957 4560 17536 959 4557 17537 960 4558 17538 958 4547 17539 961 4552 17540 4038 4549 17541 7663 4513 17542 7665 4511 17543 7731 4559 17544 7693 4095 17545 7684 4551 17546 7667 4562 17547 7731 4559 17548 7667 4562 17549 7728 4550 17550 7729 4555 17551 7642 4510 17552 7647 4545 17553 7646 4544 17554 7665 4511 17555 4038 4549 17556 4039 4556 17557 7729 4555 17558 7728 4550 17559 3128 4563 17560 2965 4564 17561 2963 4565 17562 3066 4566 17563 1976 777 17564 3025 780 17565 3034 4567 17566 3004 4568 17567 3067 4569 17568 2958 4570 17569 3117 4571 17570 3113 4572 17571 2896 4573 17572 3036 4574 17573 3037 4575 17574 2900 4576 17575 2964 4577 17576 3067 4569 17577 3113 4572 17578 3128 4563 17579 3036 4574 17580 2893 4578 17581 2901 4579 17582 3037 4575 17583 3139 4580 17584 3088 4581 17585 3075 4582 17586 3136 4583 17587 3038 4584 17588 2890 4585 17589 2893 4578 17590 3036 4574 17591 3135 4586 17592 3074 4587 17593 3089 4588 17594 3141 4589 17595 3036 4574 17596 2896 4573 17597 2895 4590 17598 3038 4584 17599 3137 4591 17600 3092 4592 17601 3074 4587 17602 3135 4586 17603 2970 4593 17604 3045 4594 17605 3038 4584 17606 2895 4590 17607 3136 4583 17608 3075 4582 17609 3092 4592 17610 3137 4591 17611 2890 4585 17612 3038 4584 17613 3045 4594 17614 2968 4595 17615 3088 4581 17616 3139 4580 17617 3138 4596 17618 3129 4597 17619 2958 4570 17620 3043 4598 17621 3045 4594 17622 2970 4593 17623 3034 4567 17624 3152 4599 17625 3149 4600 17626 3004 4568 17627 3039 833 17628 1976 777 17629 3004 4568 17630 3048 931 17631 3003 932 17632 3148 4601 17633 3154 4602 17634 3035 805 17635 1977 4603 17636 1978 4604 17637 3006 4605 17638 3005 4606 17639 2978 4607 17640 2963 4565 17641 2965 4564 17642 2979 4608 17643 3077 4609 17644 3006 4605 17645 2942 4610 17646 3060 4611 17647 3088 4581 17648 3023 4612 17649 2900 4576 17650 3075 4582 17651 3148 4601 17652 3135 4586 17653 3141 4589 17654 3154 4602 17655 3074 4587 17656 2901 4579 17657 3024 4613 17658 3089 4588 17659 3048 931 17660 3150 4614 17661 3148 4601 17662 3003 932 17663 3092 4592 17664 3037 4575 17665 2901 4579 17666 3074 4587 17667 3150 4614 17668 3137 4591 17669 3135 4586 17670 3148 4601 17671 3075 4582 17672 2900 4576 17673 3037 4575 17674 3092 4592 17675 3004 4568 17676 3149 4600 17677 3150 4614 17678 3048 931 17679 3019 4615 17680 3105 4616 17681 3106 4617 17682 3020 4618 17683 3149 4600 17684 3136 4583 17685 3137 4591 17686 3150 4614 17687 2894 4619 17688 3107 4620 17689 3108 4621 17690 2897 4622 17691 3152 4599 17692 3034 4567 17693 3124 4623 17694 3151 4624 17695 3107 4620 17696 3021 4625 17697 3022 4626 17698 3108 4621 17699 3138 4596 17700 3139 4580 17701 3152 4599 17702 3151 4624 17703 2897 4622 17704 3108 4621 17705 3109 4627 17706 2902 4628 17707 3077 4609 17708 2903 4629 17709 2902 4628 17710 3076 4630 17711 3108 4621 17712 3022 4626 17713 3023 4612 17714 3109 4627 17715 3005 4606 17716 3006 4605 17717 3077 4609 17718 3076 4630 17719 3110 4631 17720 3024 4613 17721 3020 4618 17722 3106 4617 17723 2894 4619 17724 2898 4632 17725 3128 4563 17726 3113 4572 17727 3138 4596 17728 3151 4624 17729 3124 4623 17730 3005 4606 17731 3030 4633 17732 3116 4634 17733 3105 4616 17734 3019 4615 17735 3152 4599 17736 3139 4580 17737 3136 4583 17738 3149 4600 17739 2894 4619 17740 2897 4622 17741 2899 4635 17742 2898 4632 17743 3005 4606 17744 3076 4630 17745 3129 4597 17746 3138 4596 17747 3113 4572 17748 3117 4571 17749 3107 4620 17750 2894 4619 17751 2897 4622 17752 2902 4628 17753 2903 4629 17754 2899 4635 17755 2942 4610 17756 3006 4605 17757 1978 4604 17758 3962 4636 17759 3117 4571 17760 3031 4637 17761 3021 4625 17762 3107 4620 17763 2899 4635 17764 2903 4629 17765 2909 4638 17766 2910 4639 17767 3025 780 17768 2121 4640 17769 3124 4623 17770 3034 4567 17771 2898 4632 17772 2899 4635 17773 2910 4639 17774 2979 4608 17775 2121 4640 17776 1977 4603 17777 3005 4606 17778 3124 4623 17779 2890 4585 17780 3019 4615 17781 3020 4618 17782 2893 4578 17783 2902 4628 17784 3109 4627 17785 3129 4597 17786 3076 4630 17787 3021 4625 17788 2895 4590 17789 2896 4573 17790 3022 4626 17791 3109 4627 17792 3023 4612 17793 3088 4581 17794 3129 4597 17795 3022 4626 17796 2896 4573 17797 2900 4576 17798 3023 4612 17799 3024 4613 17800 3110 4631 17801 3130 4641 17802 3089 4588 17803 3024 4613 17804 2901 4579 17805 2893 4578 17806 3020 4618 17807 2898 4632 17808 2979 4608 17809 2965 4564 17810 3128 4563 17811 3019 4615 17812 2890 4585 17813 2968 4595 17814 3030 4633 17815 3043 4598 17816 2956 4642 17817 2968 4595 17818 3045 4594 17819 2958 4570 17820 2970 4593 17821 3031 4637 17822 3117 4571 17823 2956 4642 17824 3027 4643 17825 3030 4633 17826 2968 4595 17827 3031 4637 17828 2970 4593 17829 2895 4590 17830 3021 4625 17831 2903 4629 17832 3077 4609 17833 3060 4611 17834 2909 4638 17835 2984 4644 17836 3964 4645 17837 3965 4646 17838 2917 4647 17839 3118 4648 17840 3032 4649 17841 3033 4650 17842 3120 4651 17843 2956 4642 17844 3064 4652 17845 3087 4653 17846 3027 4643 17847 3069 4654 17848 3002 4655 17849 3001 4656 17850 2972 4657 17851 3964 4645 17852 2947 4658 17853 2918 4659 17854 3965 4646 17855 3064 4652 17856 2961 4660 17857 3028 4661 17858 3087 4653 17859 3028 4661 17860 2961 4660 17861 2976 4662 17862 3032 4649 17863 3028 4661 17864 3114 4663 17865 3127 4664 17866 3087 4653 17867 3042 4665 17868 3090 4666 17869 3061 4667 17870 2947 4658 17871 2964 4577 17872 3029 4668 17873 3115 4669 17874 3119 4670 17875 2110 4671 17876 3059 4672 17877 2942 4610 17878 3962 4636 17879 3966 4673 17880 3058 4674 17881 2917 4647 17882 3965 4646 17883 3114 4663 17884 2962 4675 17885 3065 4676 17886 3127 4664 17887 3090 4666 17888 3040 4677 17889 2948 4678 17890 3061 4667 17891 3032 4649 17892 2976 4662 17893 2985 4679 17894 3033 4650 17895 2952 4680 17896 3062 4681 17897 3090 4666 17898 3042 4665 17899 2948 4678 17900 3040 4677 17901 3041 4682 17902 2949 4683 17903 2915 4684 17904 3058 4674 17905 3966 4673 17906 3059 4672 17907 2966 4685 17908 2980 4686 17909 3073 4687 17910 3069 4654 17911 3062 4681 17912 2951 4688 17913 3040 4677 17914 3090 4666 17915 3040 4677 17916 2951 4688 17917 2950 4689 17918 3041 4682 17919 3069 4654 17920 2959 4690 17921 3068 4691 17922 2966 4685 17923 3049 4692 17924 3046 4693 17925 3041 4682 17926 2950 4689 17927 2994 4694 17928 3002 4655 17929 3069 4654 17930 3073 4687 17931 3091 4695 17932 3044 4696 17933 2961 4660 17934 3064 4652 17935 3046 4693 17936 2975 4697 17937 2949 4683 17938 3041 4682 17939 3119 4670 17940 3121 4698 17941 3123 4699 17942 3047 4700 17943 2958 4570 17944 3067 4569 17945 3091 4695 17946 3043 4598 17947 2961 4660 17948 3044 4696 17949 3047 4700 17950 2976 4662 17951 2963 4565 17952 2978 4607 17953 3119 4670 17954 3115 4669 17955 2911 4701 17956 3053 4702 17957 3054 4703 17958 2915 4684 17959 3044 4696 17960 2964 4577 17961 3119 4670 17962 3047 4700 17963 3087 4653 17964 3127 4664 17965 3112 4704 17966 3027 4643 17967 3043 4598 17968 3091 4695 17969 3064 4652 17970 2956 4642 17971 2995 4705 17972 2996 4706 17973 2994 4694 17974 3073 4687 17975 3053 4702 17976 2912 4707 17977 2914 4708 17978 3054 4703 17979 2976 4662 17980 3047 4700 17981 3123 4699 17982 2985 4679 17983 3073 4687 17984 2980 4686 17985 3072 4709 17986 2995 4705 17987 2908 4710 17988 3002 4655 17989 2994 4694 17990 3051 4711 17991 2907 4712 17992 2982 4713 17993 2914 4708 17994 2912 4707 17995 2985 4679 17996 3123 4699 17997 3126 4714 17998 3122 4715 17999 2955 4716 18000 2952 4680 18001 3094 4717 18002 3095 4718 18003 2907 4712 18004 2908 4710 18005 3051 4711 18006 2982 4713 18007 3033 4650 18008 2985 4679 18009 3122 4715 18010 2990 4719 18011 2983 4720 18012 2982 4713 18013 3096 4721 18014 3097 4722 18015 2906 4723 18016 3052 4724 18017 3053 4702 18018 2911 4701 18019 3120 4651 18020 3033 4650 18021 2990 4719 18022 2992 4725 18023 2984 4644 18024 2983 4720 18025 3097 4722 18026 3098 4726 18027 3052 4724 18028 2905 4727 18029 2912 4707 18030 3053 4702 18031 2967 4728 18032 2962 4675 18033 2977 4729 18034 2981 4730 18035 2995 4705 18036 2955 4716 18037 3095 4718 18038 3100 4731 18039 2916 4732 18040 2915 4684 18041 3054 4703 18042 2914 4708 18043 2980 4686 18044 2966 4685 18045 2967 4728 18046 2981 4730 18047 2996 4706 18048 2995 4705 18049 3100 4731 18050 3101 4733 18051 2909 4638 18052 3056 4734 18053 3057 4735 18054 2910 4639 18055 2993 4736 18056 2954 4737 18057 2988 4738 18058 2991 4739 18059 2994 4694 18060 2996 4706 18061 3101 4733 18062 3102 4740 18063 3056 4734 18064 2919 4741 18065 2941 4742 18066 3057 4735 18067 3066 4566 18068 2963 4565 18069 3115 4669 18070 3029 4668 18071 3042 4665 18072 2947 4658 18073 3099 4743 18074 3103 4744 18075 2915 4684 18076 2916 4732 18077 2917 4647 18078 3058 4674 18079 3127 4664 18080 3065 4676 18081 2957 4745 18082 3112 4704 18083 2964 4577 18084 3044 4696 18085 3091 4695 18086 3067 4569 18087 2952 4680 18088 3042 4665 18089 3103 4744 18090 3094 4717 18091 2919 4741 18092 3055 4746 18093 3061 4667 18094 2948 4678 18095 3049 4692 18096 2993 4736 18097 2990 4719 18098 3122 4715 18099 3051 4711 18100 2994 4694 18101 3102 4740 18102 3104 4747 18103 3055 4746 18104 2918 4659 18105 2947 4658 18106 3061 4667 18107 2989 4748 18108 3072 4709 18109 2980 4686 18110 2981 4730 18111 2982 4713 18112 3051 4711 18113 3104 4747 18114 3096 4721 18115 2951 4688 18116 3062 4681 18117 3063 4749 18118 2953 4750 18119 2981 4730 18120 2977 4729 18121 3118 4648 18122 3120 4651 18123 3062 4681 18124 2952 4680 18125 2955 4716 18126 3063 4749 18127 3059 4672 18128 3966 4673 18129 3965 4646 18130 2918 4659 18131 2991 4739 18132 2988 4738 18133 2989 4748 18134 2981 4730 18135 3065 4676 18136 2962 4675 18137 2967 4728 18138 3070 4751 18139 2947 4658 18140 3964 4645 18141 3967 4752 18142 3099 4743 18143 2981 4730 18144 3120 4651 18145 2992 4725 18146 2991 4739 18147 3055 4746 18148 2919 4741 18149 3056 4734 18150 3093 4753 18151 3964 4645 18152 2984 4644 18153 3098 4726 18154 3967 4752 18155 3126 4714 18156 3018 4754 18157 2975 4697 18158 3046 4693 18159 2918 4659 18160 3055 4746 18161 3093 4753 18162 3059 4672 18163 2907 4712 18164 2912 4707 18165 2905 4727 18166 2913 4755 18167 3046 4693 18168 3049 4692 18169 3122 4715 18170 3126 4714 18171 3093 4753 18172 3056 4734 18173 2909 4638 18174 3060 4611 18175 2941 4742 18176 2919 4741 18177 2948 4678 18178 2949 4683 18179 2986 4756 18180 2987 4757 18181 3018 4754 18182 3126 4714 18183 3059 4672 18184 3093 4753 18185 3060 4611 18186 2942 4610 18187 2110 4671 18188 3050 4758 18189 2915 4684 18190 3059 4672 18191 2950 4689 18192 2951 4688 18193 2953 4750 18194 2954 4737 18195 2911 4701 18196 2915 4684 18197 3050 4758 18198 3009 4759 18199 3126 4714 18200 3123 4699 18201 3121 4698 18202 2986 4756 18203 2953 4750 18204 3063 4749 18205 3072 4709 18206 2989 4748 18207 2974 4760 18208 3071 4761 18209 3057 4735 18210 2941 4742 18211 2949 4683 18212 2975 4697 18213 2974 4760 18214 2941 4742 18215 2986 4756 18216 3121 4698 18217 3119 4670 18218 2978 4607 18219 3071 4761 18220 2979 4608 18221 2910 4639 18222 3057 4735 18223 2954 4737 18224 2993 4736 18225 3049 4692 18226 2950 4689 18227 3128 4563 18228 3066 4566 18229 3029 4668 18230 2964 4577 18231 2916 4732 18232 2914 4708 18233 2982 4713 18234 2983 4720 18235 2987 4757 18236 2986 4756 18237 2978 4607 18238 2979 4608 18239 3063 4749 18240 2955 4716 18241 2995 4705 18242 3072 4709 18243 2916 4732 18244 2983 4720 18245 2984 4644 18246 2917 4647 18247 2957 4745 18248 3065 4676 18249 3070 4751 18250 2960 4762 18251 3071 4761 18252 2974 4760 18253 2975 4697 18254 3018 4754 18255 2962 4675 18256 3114 4663 18257 3118 4648 18258 2977 4729 18259 2960 4762 18260 3070 4751 18261 3068 4691 18262 2959 4690 18263 2927 4763 18264 3001 4656 18265 3002 4655 18266 2908 4710 18267 3018 4754 18268 2987 4757 18269 2979 4608 18270 3071 4761 18271 3114 4663 18272 3028 4661 18273 3032 4649 18274 3118 4648 18275 3070 4751 18276 2967 4728 18277 2966 4685 18278 3068 4691 18279 2990 4719 18280 2993 4736 18281 2991 4739 18282 2992 4725 18283 2954 4737 18284 2953 4750 18285 2989 4748 18286 2988 4738 18287 2924 4764 18288 3081 4765 18289 3082 4766 18290 2925 4767 18291 3000 4768 18292 1981 4396 18293 1985 4358 18294 1986 4359 18295 2921 4769 18296 2920 4770 18297 2922 4771 18298 2923 4772 18299 2907 4712 18300 2913 4755 18301 2921 4769 18302 2908 4710 18303 3081 4765 18304 3012 4773 18305 3013 4774 18306 3082 4766 18307 1984 4775 18308 3008 4776 18309 2111 4777 18310 2112 4778 18311 2908 4710 18312 2921 4769 18313 2923 4772 18314 2927 4763 18315 2928 4779 18316 2926 4780 18317 2929 4781 18318 2930 4782 18319 3013 4774 18320 1980 4397 18321 1981 4396 18322 3014 4783 18323 2926 4780 18324 2924 4764 18325 2925 4767 18326 2929 4781 18327 3011 4784 18328 1979 4785 18329 2945 4786 18330 3012 4773 18331 1979 4785 18332 3011 4784 18333 3010 4787 18334 1984 4775 18335 2927 4763 18336 2923 4772 18337 2926 4780 18338 2928 4779 18339 2906 4723 18340 3008 4776 18341 1984 4775 18342 3010 4787 18343 3080 4788 18344 3011 4784 18345 3012 4773 18346 3081 4765 18347 1986 4359 18348 3948 955 18349 3946 868 18350 2068 951 18351 2921 4769 18352 2913 4755 18353 2905 4727 18354 2920 4770 18355 2922 4771 18356 3080 4788 18357 3081 4765 18358 2924 4764 18359 2925 4767 18360 3082 4766 18361 3083 4789 18362 2931 4790 18363 2930 4782 18364 2929 4781 18365 2925 4767 18366 2931 4790 18367 3052 4724 18368 2906 4723 18369 3010 4787 18370 3079 4791 18371 2920 4770 18372 3079 4791 18373 3080 4788 18374 2922 4771 18375 3083 4789 18376 3082 4766 18377 3013 4774 18378 3014 4783 18379 2905 4727 18380 3052 4724 18381 3079 4791 18382 2920 4770 18383 1982 953 18384 3000 4768 18385 1986 4359 18386 2068 951 18387 978 4792 18388 1979 4785 18389 1984 4775 18390 2112 4778 18391 3008 4776 18392 2906 4723 18393 2911 4701 18394 3009 4759 18395 3079 4791 18396 3010 4787 18397 3011 4784 18398 3080 4788 18399 2923 4772 18400 2922 4771 18401 2924 4764 18402 2926 4780 18403 3012 4773 18404 2945 4786 18405 1980 4397 18406 3013 4774 18407 2904 4793 18408 3110 4631 18409 3106 4617 18410 2892 4794 18411 2934 4795 18412 2936 4796 18413 2973 4797 18414 2971 4798 18415 2997 4799 18416 2930 4782 18417 2931 4790 18418 2999 4800 18419 3143 4801 18420 3014 4783 18421 3017 4802 18422 3145 4803 18423 2934 4795 18424 2935 4804 18425 2937 4805 18426 2936 4796 18427 2938 4806 18428 3084 4807 18429 3078 4808 18430 2904 4793 18431 3132 4809 18432 3144 4810 18433 3146 4811 18434 3133 4812 18435 3116 4634 18436 2969 4813 18437 2891 4814 18438 3105 4616 18439 3131 4815 18440 3143 4801 18441 3134 4816 18442 3085 4817 18443 3140 4818 18444 3153 4819 18445 3154 4602 18446 3141 4589 18447 3015 4820 18448 2946 927 18449 2944 926 18450 3007 934 18451 2935 4804 18452 2932 4821 18453 2939 4822 18454 2940 4823 18455 3144 4810 18456 3016 4824 18457 3015 4820 18458 3146 4811 18459 2928 4779 18460 2998 4825 18461 3001 4656 18462 2927 4763 18463 2935 4804 18464 2940 4823 18465 2938 4806 18466 2937 4805 18467 2959 4690 18468 2971 4798 18469 2973 4797 18470 2960 4762 18471 3147 4826 18472 3134 4816 18473 3143 4801 18474 3145 4803 18475 2946 927 18476 3015 4820 18477 3016 4824 18478 1983 952 18479 3145 4803 18480 3016 4824 18481 3144 4810 18482 3147 4826 18483 2931 4790 18484 3083 4789 18485 3131 4815 18486 2999 4800 18487 2932 4821 18488 2997 4799 18489 2999 4800 18490 2939 4822 18491 2930 4782 18492 2997 4799 18493 2998 4825 18494 2928 4779 18495 3112 4704 18496 2957 4745 18497 2969 4813 18498 3116 4634 18499 3078 4808 18500 3142 4827 18501 3140 4818 18502 3130 4641 18503 2971 4798 18504 2959 4690 18505 3069 4654 18506 2972 4657 18507 3153 4819 18508 3125 806 18509 3035 805 18510 3154 4602 18511 3145 4803 18512 1982 953 18513 1983 952 18514 3016 4824 18515 2940 4823 18516 3086 4828 18517 3084 4807 18518 2938 4806 18519 2939 4822 18520 3085 4817 18521 3086 4828 18522 2940 4823 18523 3110 4631 18524 2904 4793 18525 3078 4808 18526 3130 4641 18527 3133 4812 18528 3146 4811 18529 3155 4829 18530 3142 4827 18531 2891 4814 18532 2969 4813 18533 2973 4797 18534 2936 4796 18535 3142 4827 18536 3155 4829 18537 3153 4819 18538 3140 4818 18539 3014 4783 18540 1981 4396 18541 3000 4768 18542 3017 4802 18543 1982 953 18544 3145 4803 18545 3017 4802 18546 3000 4768 18547 3105 4616 18548 2891 4814 18549 2892 4794 18550 3106 4617 18551 2999 4800 18552 3131 4815 18553 3085 4817 18554 2939 4822 18555 3084 4807 18556 3133 4812 18557 3142 4827 18558 3078 4808 18559 2934 4795 18560 2933 4830 18561 2932 4821 18562 2935 4804 18563 3146 4811 18564 3015 4820 18565 3007 934 18566 3155 4829 18567 3027 4643 18568 3112 4704 18569 3116 4634 18570 3030 4633 18571 2969 4813 18572 2957 4745 18573 2960 4762 18574 2973 4797 18575 3155 4829 18576 3007 934 18577 3125 806 18578 3153 4819 18579 2932 4821 18580 2933 4830 18581 2998 4825 18582 2997 4799 18583 3085 4817 18584 3134 4816 18585 3132 4809 18586 3086 4828 18587 2891 4814 18588 2936 4796 18589 2937 4805 18590 2892 4794 18591 3134 4816 18592 3147 4826 18593 3144 4810 18594 3132 4809 18595 3086 4828 18596 3132 4809 18597 3133 4812 18598 3084 4807 18599 2937 4805 18600 2938 4806 18601 2904 4793 18602 2892 4794 18603 3014 4783 18604 3143 4801 18605 3131 4815 18606 3083 4789 18607 2933 4830 18608 2972 4657 18609 3001 4656 18610 2998 4825 18611 3130 4641 18612 3140 4818 18613 3141 4589 18614 3089 4588 18615 2934 4795 18616 2971 4798 18617 2972 4657 18618 2933 4830 18619 935 4831 18620 982 995 18621 4071 998 18622 4066 1457 18623 2031 4832 18624 937 4833 18625 981 1023 18626 2032 1006 18627 937 4833 18628 983 4834 18629 979 1008 18630 981 1023 18631 935 4831 18632 4066 1457 18633 4076 1456 18634 2028 4486 18635 935 4831 18636 2031 4832 18637 2032 1006 18638 982 995 18639 2028 4486 18640 2033 4485 18641 2031 4832 18642 935 4831 18643 2033 4485 18644 1237 4835 18645 937 4833 18646 2031 4832 18647 937 4833 18648 1237 4835 18649 1236 4836 18650 983 4834 18651 1002 4837 18652 1003 4838 18653 1001 4839 18654 1000 4840 18655 1945 4841 18656 1946 4842 18657 1958 4843 18658 1954 4844 18659 1946 4842 18660 1944 4845 18661 1957 4846 18662 1958 4843 18663 1957 4846 18664 1005 4847 18665 1242 4848 18666 1956 4849 18667 1953 4850 18668 1955 4851 18669 1960 4852 18670 1959 4853 18671 1955 4851 18672 1956 4849 18673 1961 4854 18674 1960 4852 18675 1956 4849 18676 1242 4848 18677 1004 4855 18678 1961 4854 18679 1954 4844 18680 1958 4843 18681 1955 4851 18682 1953 4850 18683 1958 4843 18684 1957 4846 18685 1956 4849 18686 1955 4851 18687 1960 4852 18688 2011 4856 18689 2009 4857 18690 1959 4853 18691 2011 4856 18692 997 4858 18693 1962 4859 18694 2009 4857 18695 1961 4854 18696 2010 4860 18697 2011 4856 18698 1960 4852 18699 2010 4860 18700 1000 4840 18701 997 4858 18702 2011 4856 18703 1004 4855 18704 2007 4861 18705 2010 4860 18706 1961 4854 18707 2007 4861 18708 1002 4837 18709 1000 4840 18710 2010 4860 18711 1945 4841 18712 1954 4844 18713 1953 4850 18714 1947 4862 18715 1959 4853 18716 2009 4857 18717 3910 4863 18718 3908 4864 18719 1953 4850 18720 1959 4853 18721 3908 4864 18722 3911 4865 18723 3909 4866 18724 3910 4863 18725 3914 4867 18726 3913 4868 18727 3910 4863 18728 2009 4857 18729 3916 4869 18730 3914 4867 18731 999 4870 18732 3916 4869 18733 2009 4857 18734 1962 4859 18735 997 4858 18736 998 4871 18737 999 4870 18738 1962 4859 18739 1000 4840 18740 1001 4839 18741 998 4871 18742 997 4858 18743 1026 4872 18744 1027 4873 18745 1028 4874 18746 1029 4875 18747 1030 4876 18748 1026 4872 18749 1029 4875 18750 1031 4877 18751 1032 4878 18752 1030 4876 18753 1031 4877 18754 1033 4879 18755 1247 4880 18756 1248 4881 18757 1030 4876 18758 1032 4878 18759 1248 4881 18760 1249 4882 18761 1026 4872 18762 1030 4876 18763 1249 4882 18764 1250 4883 18765 1027 4873 18766 1026 4872 18767 1034 4884 18768 1035 4885 18769 1248 4881 18770 1247 4880 18771 998 4871 18772 1001 4839 18773 1036 4886 18774 1035 4885 18775 1001 4839 18776 1003 4838 18777 1037 4887 18778 1036 4886 18779 999 4870 18780 998 4871 18781 1035 4885 18782 1034 4884 18783 1035 4885 18784 1036 4886 18785 1249 4882 18786 1248 4881 18787 1036 4886 18788 1037 4887 18789 1250 4883 18790 1249 4882 18791 1027 4873 18792 1038 4888 18793 1039 4889 18794 1028 4874 18795 1250 4883 18796 1251 4890 18797 1038 4888 18798 1027 4873 18799 1003 4838 18800 1006 4891 18801 1044 4892 18802 1037 4887 18803 1014 4893 18804 1246 4894 18805 1245 4895 18806 1043 4896 18807 1037 4887 18808 1044 4892 18809 1251 4890 18810 1250 4883 18811 1253 4897 18812 1252 4898 18813 1043 4896 18814 1245 4895 18815 1040 4899 18816 1252 4898 18817 1253 4897 18818 1993 4900 18819 1040 4899 18820 1993 4900 18821 1042 4901 18822 1041 4902 18823 1006 4891 18824 1014 4893 18825 1043 4896 18826 1044 4892 18827 1043 4896 18828 1252 4898 18829 1251 4890 18830 1044 4892 18831 1038 4888 18832 1251 4890 18833 1252 4898 18834 1040 4899 18835 1038 4888 18836 1040 4899 18837 1041 4902 18838 1039 4889 18839 1033 4879 18840 1031 4877 18841 1051 4903 18842 1052 4904 18843 1052 4904 18844 1051 4903 18845 1053 4905 18846 1054 4906 18847 1051 4903 18848 1050 4907 18849 1055 4908 18850 1053 4905 18851 1050 4907 18852 1049 4909 18853 1056 4910 18854 1055 4908 18855 1029 4875 18856 1028 4874 18857 1049 4909 18858 1050 4907 18859 1057 4911 18860 1058 4912 18861 1055 4908 18862 1056 4910 18863 1059 4913 18864 1060 4914 18865 1054 4906 18866 1053 4905 18867 1058 4912 18868 1059 4913 18869 1053 4905 18870 1055 4908 18871 1061 4915 18872 1062 4916 18873 1063 4917 18874 1064 4918 18875 1059 4913 18876 1061 4915 18877 1064 4918 18878 1060 4914 18879 1058 4912 18880 1067 4919 18881 1061 4915 18882 1059 4913 18883 1067 4919 18884 1068 4920 18885 1062 4916 18886 1061 4915 18887 1069 4921 18888 1067 4919 18889 1058 4912 18890 1057 4911 18891 1067 4919 18892 1069 4921 18893 3917 4922 18894 1068 4920 18895 1031 4877 18896 1029 4875 18897 1050 4907 18898 1051 4903 18899 1028 4874 18900 1039 4889 18901 1070 4923 18902 1049 4909 18903 1041 4902 18904 1042 4901 18905 1072 4924 18906 1071 4925 18907 1049 4909 18908 1070 4923 18909 1075 4926 18910 1056 4910 18911 1076 4927 18912 1074 4928 18913 1073 4929 18914 1077 4930 18915 1057 4911 18916 1056 4910 18917 1075 4926 18918 1078 4931 18919 1039 4889 18920 1041 4902 18921 1071 4925 18922 1070 4923 18923 1070 4923 18924 1071 4925 18925 1074 4928 18926 1075 4926 18927 1071 4925 18928 1072 4924 18929 1073 4929 18930 1074 4928 18931 1074 4928 18932 1076 4927 18933 1078 4931 18934 1075 4926 18935 1068 4920 18936 3917 4922 18937 3926 4932 18938 3925 4933 18939 3925 4933 18940 3926 4932 18941 3928 4934 18942 3927 4935 18943 1076 4927 18944 1077 4930 18945 3928 4934 18946 3926 4932 18947 1076 4927 18948 3926 4932 18949 3917 4922 18950 1078 4931 18951 1057 4911 18952 1078 4931 18953 3917 4922 18954 1069 4921 18955 983 4834 18956 984 4936 18957 980 977 18958 979 1008 18959 984 4936 18960 1098 4937 18961 1097 978 18962 980 977 18963 983 4834 18964 1236 4836 18965 1235 4938 18966 984 4936 18967 1097 978 18968 1098 4937 18969 2043 4939 18970 2042 989 18971 3937 4940 18972 2056 1033 18973 1188 4941 18974 3935 4942 18975 1188 4941 18976 2056 1033 18977 2057 1029 18978 2054 4943 18979 2043 4939 18980 3328 4944 18981 3339 1028 18982 2042 989 18983 3328 4944 18984 2054 4943 18985 2057 1029 18986 3339 1028 18987 1143 4945 18988 3915 4946 18989 1173 4947 18990 1144 4948 18991 1134 4949 18992 933 4478 18993 950 4541 18994 1010 4950 18995 1141 4951 18996 1142 4952 18997 1143 4945 18998 1144 4948 18999 1145 4953 19000 1146 4954 19001 1142 4952 19002 1141 4951 19003 1140 4955 19004 1139 4956 19005 1146 4954 19006 1145 4953 19007 1148 4957 19008 1149 4958 19009 1137 4959 19010 1147 4960 19011 1139 4956 19012 1135 4961 19013 1150 4962 19014 1151 4963 19015 1137 4959 19016 1149 4958 19017 930 4475 19018 1138 4964 19019 1138 4964 19020 930 4475 19021 933 4478 19022 1134 4949 19023 1957 4846 19024 1944 4845 19025 1244 4965 19026 1005 4847 19027 1153 4966 19028 1152 4967 19029 1243 4968 19030 1244 4965 19031 1009 4969 19032 1013 4970 19033 1243 4968 19034 1010 4950 19035 1244 4965 19036 1243 4968 19037 1013 4970 19038 1005 4847 19039 1949 4971 19040 1153 4966 19041 1244 4965 19042 1944 4845 19043 1948 4972 19044 1949 4971 19045 1944 4845 19046 1946 4842 19047 1947 4862 19048 1948 4972 19049 1946 4842 19050 1945 4841 19051 1951 4973 19052 1952 4974 19053 1948 4972 19054 1947 4862 19055 1952 4974 19056 1950 4975 19057 1949 4971 19058 1948 4972 19059 1950 4975 19060 1151 4963 19061 1153 4966 19062 1949 4971 19063 1146 4954 19064 1139 4956 19065 1151 4963 19066 1950 4975 19067 1142 4952 19068 1146 4954 19069 1950 4975 19070 1952 4974 19071 1143 4945 19072 1142 4952 19073 1952 4974 19074 1951 4973 19075 1135 4961 19076 1136 4976 19077 1147 4960 19078 1137 4959 19079 1136 4976 19080 1135 4961 19081 1139 4956 19082 1140 4955 19083 1135 4961 19084 1137 4959 19085 1138 4964 19086 1150 4962 19087 1134 4949 19088 1152 4967 19089 1150 4962 19090 1138 4964 19091 1010 4950 19092 1243 4968 19093 1152 4967 19094 1134 4949 19095 3907 4977 19096 3908 4864 19097 3910 4863 19098 3909 4866 19099 1143 4945 19100 1951 4973 19101 3907 4977 19102 3909 4866 19103 1151 4963 19104 1150 4962 19105 1152 4967 19106 1153 4966 19107 3908 4864 19108 3907 4977 19109 3912 4978 19110 3911 4865 19111 1947 4862 19112 1953 4850 19113 3911 4865 19114 3912 4978 19115 1947 4862 19116 3912 4978 19117 3907 4977 19118 1951 4973 19119 1143 4945 19120 3909 4866 19121 3913 4868 19122 3915 4946 19123 1154 4979 19124 1155 4980 19125 1149 4958 19126 1148 4957 19127 1149 4958 19128 1155 4980 19129 931 4476 19130 930 4475 19131 1156 4981 19132 1157 4982 19133 1155 4980 19134 1154 4979 19135 1155 4980 19136 1157 4982 19137 934 4482 19138 931 4476 19139 934 4482 19140 1157 4982 19141 1236 4836 19142 1237 4835 19143 1156 4981 19144 1235 4938 19145 1236 4836 19146 1157 4982 19147 1237 4835 19148 2033 4485 19149 2034 4483 19150 934 4482 19151 1169 4983 19152 1136 4976 19153 1140 4955 19154 1170 4984 19155 1168 4985 19156 1169 4983 19157 2050 4986 19158 2045 4987 19159 3335 4988 19160 2046 4989 19161 2047 4990 19162 3336 4991 19163 1136 4976 19164 1169 4983 19165 1168 4985 19166 1147 4960 19167 1180 4992 19168 3332 4993 19169 3333 4994 19170 1179 4995 19171 3336 4991 19172 2047 4990 19173 2048 4996 19174 3337 4997 19175 1167 4998 19176 1168 4985 19177 2045 4987 19178 2044 4999 19179 3332 4993 19180 2044 4999 19181 2045 4987 19182 3333 4994 19183 3337 4997 19184 2048 4996 19185 2049 5000 19186 3338 5001 19187 1167 4998 19188 1148 4957 19189 1147 4960 19190 1168 4985 19191 1170 4984 19192 1171 5002 19193 2047 4990 19194 2046 4989 19195 1179 4995 19196 3333 4994 19197 3334 5003 19198 1175 5004 19199 1170 4984 19200 1140 4955 19201 1145 4953 19202 1171 5002 19203 1171 5002 19204 1172 5005 19205 2048 4996 19206 2047 4990 19207 3333 4994 19208 2045 4987 19209 2050 4986 19210 3334 5003 19211 1175 5004 19212 3334 5003 19213 3335 4988 19214 1174 5006 19215 1171 5002 19216 1145 4953 19217 1141 4951 19218 1172 5005 19219 1172 5005 19220 1141 4951 19221 1144 4948 19222 1173 4947 19223 1169 4983 19224 1170 4984 19225 2046 4989 19226 2050 4986 19227 1172 5005 19228 1173 4947 19229 2049 5000 19230 2048 4996 19231 3334 5003 19232 2050 4986 19233 2046 4989 19234 3335 4988 19235 1181 5007 19236 1167 4998 19237 2044 4999 19238 2051 5008 19239 3330 5009 19240 2052 5010 19241 2051 5008 19242 3331 5011 19243 1182 5012 19244 1181 5007 19245 2051 5008 19246 2052 5010 19247 1184 5013 19248 3331 5011 19249 3332 4993 19250 1180 4992 19251 1234 5014 19252 1182 5012 19253 2052 5010 19254 2053 5015 19255 3331 5011 19256 2051 5008 19257 2044 4999 19258 3332 4993 19259 1181 5007 19260 1154 4979 19261 1148 4957 19262 1167 4998 19263 1182 5012 19264 1156 4981 19265 1154 4979 19266 1181 5007 19267 3328 4944 19268 2043 4939 19269 2053 5015 19270 3329 5016 19271 1182 5012 19272 1234 5014 19273 1235 4938 19274 1156 4981 19275 3329 5016 19276 2053 5015 19277 2052 5010 19278 3330 5009 19279 1098 4937 19280 1234 5014 19281 2053 5015 19282 2043 4939 19283 984 4936 19284 1235 4938 19285 1234 5014 19286 1098 4937 19287 1183 5017 19288 3330 5009 19289 3331 5011 19290 1184 5013 19291 3918 5018 19292 3919 5019 19293 3921 5020 19294 3920 5021 19295 1068 4920 19296 1187 5022 19297 1065 5023 19298 1062 4916 19299 1068 4920 19300 3925 4933 19301 3932 5024 19302 1187 5022 19303 1186 5025 19304 1174 5006 19305 1178 5026 19306 1187 5022 19307 1174 5006 19308 3335 4988 19309 3336 4991 19310 1178 5026 19311 3919 5019 19312 3932 5024 19313 3933 5027 19314 3921 5020 19315 1178 5026 19316 3336 4991 19317 3337 4997 19318 1176 5028 19319 1062 4916 19320 1065 5023 19321 1066 5029 19322 1063 4917 19323 1186 5025 19324 1187 5022 19325 3932 5024 19326 3919 5019 19327 1175 5004 19328 1174 5006 19329 1186 5025 19330 1185 5030 19331 1176 5028 19332 3337 4997 19333 3338 5001 19334 1177 5031 19335 1175 5004 19336 1185 5030 19337 3918 5018 19338 1179 4995 19339 3925 4933 19340 3927 4935 19341 3933 5027 19342 3932 5024 19343 1065 5023 19344 1176 5028 19345 1177 5031 19346 1066 5029 19347 1185 5030 19348 1186 5025 19349 3919 5019 19350 3918 5018 19351 1179 4995 19352 3918 5018 19353 3920 5021 19354 1180 4992 19355 1187 5022 19356 1178 5026 19357 1176 5028 19358 1065 5023 19359 1183 5017 19360 1190 5032 19361 1232 5033 19362 1233 5034 19363 3921 5020 19364 3933 5027 19365 3934 5035 19366 3923 5036 19367 1232 5033 19368 1188 4941 19369 2054 4943 19370 1233 5034 19371 1180 4992 19372 3920 5021 19373 3922 5037 19374 1184 5013 19375 2054 4943 19376 3328 4944 19377 3329 5016 19378 1233 5034 19379 1183 5017 19380 1184 5013 19381 3922 5037 19382 1190 5032 19383 1233 5034 19384 3329 5016 19385 3330 5009 19386 1183 5017 19387 1231 5038 19388 3936 5039 19389 3924 5040 19390 1189 5041 19391 3920 5021 19392 3921 5020 19393 3923 5036 19394 3922 5037 19395 3936 5039 19396 1232 5033 19397 1190 5032 19398 3924 5040 19399 3922 5037 19400 3923 5036 19401 3924 5040 19402 1190 5032 19403 1232 5033 19404 3936 5039 19405 3935 4942 19406 1188 4941 19407 3923 5036 19408 3934 5035 19409 1189 5041 19410 3924 5040 19411 3936 5039 19412 1231 5038 19413 1133 5042 19414 3935 4942 19415 1942 5043 19416 1943 5044 19417 3160 5045 19418 3168 5046 19419 1911 5047 19420 1935 5048 19421 1930 5049 19422 2291 5050 19423 1912 5051 19424 1916 5052 19425 1937 5053 19426 1940 5054 19427 1909 5055 19428 1918 5056 19429 1919 5057 19430 1915 5058 19431 1924 5059 19432 3171 5060 19433 3169 5061 19434 1925 5062 19435 1916 5052 19436 1917 5063 19437 1926 5064 19438 1937 5053 19439 1935 5048 19440 1932 5065 19441 1931 5066 19442 1930 5049 19443 3157 5067 19444 1905 5068 19445 1904 5069 19446 3156 5070 19447 1905 5068 19448 3157 5067 19449 3163 5071 19450 2293 5072 19451 3162 5073 19452 2290 5074 19453 2292 5075 19454 3161 5076 19455 3170 5077 19456 3169 5061 19457 3171 5060 19458 3172 5078 19459 1930 5049 19460 3160 5045 19461 3162 5073 19462 2291 5050 19463 3158 5079 19464 1923 5080 19465 1902 5081 19466 3156 5070 19467 1929 5082 19468 1928 5083 19469 1927 5084 19470 1926 5064 19471 1920 5085 19472 1918 5056 19473 1902 5081 19474 1923 5080 19475 1929 5082 19476 1926 5064 19477 1917 5063 19478 1919 5057 19479 1930 5049 19480 1931 5066 19481 3168 5046 19482 3160 5045 19483 1941 5086 19484 1938 5087 19485 1933 5088 19486 1934 5089 19487 1903 5090 19488 1910 5091 19489 1911 5047 19490 2275 5092 19491 1915 5058 19492 1919 5057 19493 1917 5063 19494 2269 5093 19495 1909 5055 19496 1915 5058 19497 1914 5094 19498 1908 5095 19499 1920 5085 19500 1929 5082 19501 1919 5057 19502 1918 5056 19503 1935 5048 19504 1934 5089 19505 1933 5088 19506 1932 5065 19507 1903 5090 19508 2268 5096 19509 1913 5097 19510 1910 5091 19511 1942 5043 19512 3170 5077 19513 3172 5078 19514 1943 5044 19515 3158 5079 19516 1924 5059 19517 1925 5062 19518 3159 5098 19519 1924 5059 19520 3158 5079 19521 3156 5070 19522 1904 5069 19523 3160 5045 19524 1943 5044 19525 2290 5074 19526 3162 5073 19527 1909 5055 19528 1908 5095 19529 1907 5099 19530 1906 5100 19531 3157 5067 19532 1906 5100 19533 1907 5099 19534 3163 5071 19535 1929 5082 19536 1920 5085 19537 1921 5101 19538 1928 5083 19539 1937 5053 19540 1936 5102 19541 1939 5103 19542 1940 5054 19543 1941 5086 19544 1934 5089 19545 1910 5091 19546 1913 5097 19547 1906 5100 19548 3157 5067 19549 3156 5070 19550 1902 5081 19551 2290 5074 19552 3173 5104 19553 3174 5105 19554 2292 5075 19555 1923 5080 19556 1922 5106 19557 1921 5101 19558 1920 5085 19559 1941 5086 19560 1940 5054 19561 1939 5103 19562 1938 5087 19563 1911 5047 19564 2291 5050 19565 2276 5107 19566 2275 5092 19567 3173 5104 19568 6320 5108 19569 6307 5109 19570 3174 5105 19571 1904 5069 19572 1905 5068 19573 6307 5109 19574 6320 5108 19575 1935 5048 19576 1911 5047 19577 1910 5091 19578 1934 5089 19579 1902 5081 19580 1918 5056 19581 1909 5055 19582 1906 5100 19583 1904 5069 19584 6320 5108 19585 3171 5060 19586 1924 5059 19587 1937 5053 19588 1926 5064 19589 1927 5084 19590 1936 5102 19591 3171 5060 19592 6320 5108 19593 3173 5104 19594 3172 5078 19595 1916 5052 19596 2267 5110 19597 2269 5093 19598 1917 5063 19599 2291 5050 19600 3162 5073 19601 3161 5076 19602 2276 5107 19603 1943 5044 19604 3172 5078 19605 3173 5104 19606 2290 5074 19607 1923 5080 19608 3158 5079 19609 3159 5098 19610 1922 5106 19611 1941 5086 19612 1913 5097 19613 1912 5051 19614 1940 5054 19615 2490 5111 19616 2582 5112 19617 2583 5113 19618 2606 5114 19619 2267 5110 19620 2515 5115 19621 2516 5116 19622 2269 5093 19623 1892 5117 19624 1899 5118 19625 1898 5119 19626 1893 5120 19627 2279 5121 19628 2506 5122 19629 2494 5123 19630 2497 5124 19631 2371 5125 19632 2378 5126 19633 2525 5127 19634 2523 5128 19635 2522 5129 19636 2499 5130 19637 2498 5131 19638 2289 5132 19639 1897 5133 19640 2277 5134 19641 2278 5135 19642 2272 5136 19643 2378 5126 19644 2385 5137 19645 2526 5138 19646 2525 5127 19647 2523 5128 19648 2489 5139 19649 2499 5130 19650 2522 5129 19651 1897 5133 19652 2272 5136 19653 2268 5096 19654 1903 5090 19655 2385 5137 19656 3196 5140 19657 3199 5141 19658 2526 5138 19659 2518 5142 19660 2493 5143 19661 2500 5144 19662 2524 5145 19663 1894 5146 19664 2277 5134 19665 1897 5133 19666 1895 5147 19667 3196 5140 19668 6318 5148 19669 6312 5149 19670 3199 5141 19671 2525 5127 19672 2487 5150 19673 2489 5139 19674 2523 5128 19675 1912 5051 19676 2266 5151 19677 2267 5110 19678 1916 5052 19679 3194 5152 19680 3198 5153 19681 3205 5154 19682 3195 5155 19683 2526 5138 19684 2488 5156 19685 2487 5150 19686 2525 5127 19687 1893 5120 19688 2487 5150 19689 2488 5156 19690 1892 5117 19691 2601 5157 19692 2604 5158 19693 2605 5159 19694 2602 5160 19695 6321 5161 19696 2566 5162 19697 2565 5163 19698 6322 5164 19699 1892 5117 19700 2555 5165 19701 2554 5166 19702 1899 5118 19703 1896 5167 19704 2489 5139 19705 2487 5150 19706 1893 5120 19707 6322 5164 19708 2565 5163 19709 3178 5168 19710 6323 5169 19711 2555 5165 19712 1892 5117 19713 2488 5156 19714 2564 5170 19715 2277 5134 19716 2491 5171 19717 2490 5111 19718 2278 5135 19719 3198 5153 19720 6312 5149 19721 6318 5148 19722 3205 5154 19723 2566 5162 19724 2370 5172 19725 2528 5173 19726 2565 5163 19727 1894 5146 19728 2492 5174 19729 2491 5171 19730 2277 5134 19731 3198 5153 19732 3200 5175 19733 6313 5176 19734 6312 5149 19735 2281 5177 19736 2528 5173 19737 2584 5178 19738 2582 5112 19739 1896 5167 19740 1901 5179 19741 2499 5130 19742 2489 5139 19743 3200 5175 19744 3201 5180 19745 6314 5181 19746 6313 5176 19747 2370 5172 19748 2585 5182 19749 2584 5178 19750 2528 5173 19751 1901 5179 19752 2274 5183 19753 2498 5131 19754 2499 5130 19755 1894 5146 19756 3185 5184 19757 6324 5185 19758 2492 5174 19759 2580 5186 19760 2581 5187 19761 2584 5178 19762 2585 5182 19763 2486 5188 19764 2485 5189 19765 2501 5190 19766 2502 5191 19767 3185 5184 19768 3190 5192 19769 3194 5152 19770 6324 5185 19771 2581 5187 19772 2583 5113 19773 2582 5112 19774 2584 5178 19775 2502 5191 19776 2501 5190 19777 2504 5193 19778 2503 5194 19779 2281 5177 19780 2491 5171 19781 2492 5174 19782 3178 5168 19783 2583 5113 19784 2598 5195 19785 2603 5196 19786 2606 5114 19787 2271 5197 19788 2504 5193 19789 2501 5190 19790 2280 5198 19791 2486 5188 19792 2502 5191 19793 2602 5160 19794 2603 5196 19795 2485 5189 19796 2500 5144 19797 2280 5198 19798 2501 5190 19799 2492 5174 19800 6324 5185 19801 6323 5169 19802 3178 5168 19803 2602 5160 19804 2605 5159 19805 2606 5114 19806 2603 5196 19807 2493 5143 19808 2494 5123 19809 2506 5122 19810 2505 5199 19811 2266 5151 19812 2510 5200 19813 2509 5201 19814 2267 5110 19815 3194 5152 19816 3195 5155 19817 6323 5169 19818 6324 5185 19819 2278 5135 19820 2490 5111 19821 2606 5114 19822 2605 5159 19823 2505 5199 19824 2506 5122 19825 2508 5202 19826 2507 5203 19827 2272 5136 19828 2278 5135 19829 2605 5159 19830 2604 5158 19831 2507 5203 19832 2508 5202 19833 2509 5201 19834 2510 5200 19835 3205 5154 19836 6318 5148 19837 6334 5204 19838 6332 5205 19839 2502 5191 19840 2503 5194 19841 2601 5157 19842 2602 5160 19843 3195 5155 19844 3205 5154 19845 6332 5205 19846 6333 5206 19847 2270 5207 19848 2508 5202 19849 2506 5122 19850 2279 5121 19851 3195 5155 19852 6333 5206 19853 6322 5164 19854 6323 5169 19855 2599 5208 19856 2604 5158 19857 2601 5157 19858 2600 5209 19859 2267 5110 19860 2509 5201 19861 2508 5202 19862 2270 5207 19863 2581 5187 19864 2596 5210 19865 2598 5195 19866 2583 5113 19867 2268 5096 19868 2272 5136 19869 2604 5158 19870 2599 5208 19871 2578 5211 19872 6319 5212 19873 6336 5213 19874 6335 5214 19875 2281 5177 19876 3178 5168 19877 2565 5163 19878 2528 5173 19879 2266 5151 19880 2271 5197 19881 2507 5203 19882 2510 5200 19883 2490 5111 19884 2491 5171 19885 2281 5177 19886 2582 5112 19887 2578 5211 19888 6335 5214 19889 2598 5195 19890 2596 5210 19891 1895 5147 19892 1889 5215 19893 3183 5216 19894 3184 5217 19895 2271 5197 19896 2280 5198 19897 2505 5199 19898 2507 5203 19899 2486 5188 19900 2603 5196 19901 2598 5195 19902 6335 5214 19903 1894 5146 19904 1895 5147 19905 3184 5217 19906 3185 5184 19907 2493 5143 19908 2505 5199 19909 2280 5198 19910 2500 5144 19911 2485 5189 19912 2486 5188 19913 6335 5214 19914 6336 5213 19915 3184 5217 19916 3183 5216 19917 3188 5218 19918 3189 5219 19919 2496 5220 19920 2495 5221 19921 2511 5222 19922 2512 5223 19923 2485 5189 19924 6336 5213 19925 2524 5145 19926 2500 5144 19927 3185 5184 19928 3184 5217 19929 3189 5219 19930 3190 5192 19931 2512 5223 19932 2511 5222 19933 2513 5224 19934 2514 5225 19935 2503 5194 19936 2504 5193 19937 6338 5226 19938 6337 5227 19939 2488 5156 19940 2526 5138 19941 3199 5141 19942 2564 5170 19943 2514 5225 19944 2513 5224 19945 2516 5116 19946 2515 5115 19947 2266 5151 19948 6338 5226 19949 2504 5193 19950 2271 5197 19951 3190 5192 19952 3200 5175 19953 3198 5153 19954 3194 5152 19955 2279 5121 19956 2497 5124 19957 2496 5220 19958 2512 5223 19959 2503 5194 19960 6337 5227 19961 2600 5209 19962 2601 5157 19963 3201 5180 19964 3202 5228 19965 6315 5229 19966 6314 5181 19967 3189 5219 19968 3201 5180 19969 3200 5175 19970 3190 5192 19971 2274 5183 19972 2511 5222 19973 2495 5221 19974 2498 5131 19975 2268 5096 19976 2599 5208 19977 2600 5209 19978 6337 5227 19979 3188 5218 19980 3202 5228 19981 3201 5180 19982 3189 5219 19983 2273 5230 19984 2513 5224 19985 2511 5222 19986 2274 5183 19987 1914 5094 19988 1915 5058 19989 2269 5093 19990 2273 5230 19991 2266 5151 19992 2268 5096 19993 6337 5227 19994 6338 5226 19995 3199 5141 19996 6312 5149 19997 6313 5176 19998 2564 5170 19999 2270 5207 20000 2279 5121 20001 2512 5223 20002 2514 5225 20003 1901 5179 20004 1914 5094 20005 2273 5230 20006 2274 5183 20007 1912 5051 20008 1913 5097 20009 2268 5096 20010 2266 5151 20011 2564 5170 20012 6313 5176 20013 6314 5181 20014 2555 5165 20015 2269 5093 20016 2516 5116 20017 2513 5224 20018 2273 5230 20019 1896 5167 20020 1900 5231 20021 1914 5094 20022 1901 5179 20023 2289 5132 20024 2371 5125 20025 2523 5128 20026 2522 5129 20027 2555 5165 20028 6314 5181 20029 6315 5229 20030 2554 5166 20031 2267 5110 20032 2270 5207 20033 2514 5225 20034 2515 5115 20035 1893 5120 20036 1898 5119 20037 1900 5231 20038 1896 5167 20039 1891 5232 20040 1889 5215 20041 1895 5147 20042 1897 5133 20043 3197 5233 20044 6317 5234 20045 6311 5235 20046 3179 5236 20047 1884 5237 20048 1883 5238 20049 1898 5119 20050 1899 5118 20051 1882 5239 20052 1900 5231 20053 1898 5119 20054 1883 5238 20055 3203 5240 20056 3204 5241 20057 6317 5234 20058 6316 5242 20059 1882 5239 20060 1908 5095 20061 1914 5094 20062 1900 5231 20063 3187 5243 20064 6311 5235 20065 6317 5234 20066 3204 5241 20067 1882 5239 20068 1887 5244 20069 1907 5099 20070 1908 5095 20071 3176 5245 20072 6309 5246 20073 6310 5247 20074 3177 5248 20075 1884 5237 20076 1885 5249 20077 1886 5250 20078 1883 5238 20079 3175 5251 20080 6308 5252 20081 6309 5246 20082 3176 5245 20083 1891 5232 20084 1890 5253 20085 1888 5254 20086 1889 5215 20087 3174 5105 20088 6307 5109 20089 6308 5252 20090 3175 5251 20091 1890 5253 20092 1891 5232 20093 2275 5092 20094 2276 5107 20095 1891 5232 20096 1897 5133 20097 1903 5090 20098 2275 5092 20099 1886 5250 20100 3167 5255 20101 3166 5256 20102 1887 5244 20103 2553 5257 20104 1884 5237 20105 1899 5118 20106 2554 5166 20107 3167 5255 20108 2297 5258 20109 2296 5259 20110 3166 5256 20111 2276 5107 20112 3161 5076 20113 3164 5260 20114 1890 5253 20115 2292 5075 20116 3174 5105 20117 3175 5251 20118 2294 5261 20119 3161 5076 20120 2292 5075 20121 2294 5261 20122 3164 5260 20123 2294 5261 20124 3175 5251 20125 3176 5245 20126 2295 5262 20127 1890 5253 20128 3164 5260 20129 3165 5263 20130 1888 5254 20131 2297 5258 20132 3167 5255 20133 3180 5264 20134 3179 5236 20135 3164 5260 20136 2294 5261 20137 2295 5262 20138 3165 5263 20139 1885 5249 20140 3180 5264 20141 3167 5255 20142 1886 5250 20143 1888 5254 20144 3182 5265 20145 3183 5216 20146 1889 5215 20147 3166 5256 20148 2296 5259 20149 2293 5072 20150 3163 5071 20151 1888 5254 20152 3165 5263 20153 3181 5266 20154 3182 5265 20155 3177 5248 20156 6310 5247 20157 6311 5235 20158 3187 5243 20159 3202 5228 20160 3203 5240 20161 6316 5242 20162 6315 5229 20163 2295 5262 20164 3186 5267 20165 3181 5266 20166 3165 5263 20167 2295 5262 20168 3176 5245 20169 3177 5248 20170 3186 5267 20171 1887 5244 20172 3166 5256 20173 3163 5071 20174 1907 5099 20175 3183 5216 20176 3182 5265 20177 3191 5268 20178 3188 5218 20179 3182 5265 20180 3181 5266 20181 3192 5269 20182 3191 5268 20183 3181 5266 20184 3186 5267 20185 3193 5270 20186 3192 5269 20187 1882 5239 20188 1883 5238 20189 1886 5250 20190 1887 5244 20191 3186 5267 20192 3177 5248 20193 3187 5243 20194 3193 5270 20195 1884 5237 20196 2553 5257 20197 3197 5233 20198 1885 5249 20199 1885 5249 20200 3197 5233 20201 3179 5236 20202 3180 5264 20203 3188 5218 20204 3191 5268 20205 3203 5240 20206 3202 5228 20207 3191 5268 20208 3192 5269 20209 3204 5241 20210 3203 5240 20211 3187 5243 20212 3204 5241 20213 3192 5269 20214 3193 5270 20215 2293 5072 20216 6308 5252 20217 6307 5109 20218 1905 5068 20219 2296 5259 20220 6309 5246 20221 6308 5252 20222 2293 5072 20223 2297 5258 20224 6310 5247 20225 6309 5246 20226 2296 5259 20227 3179 5236 20228 6311 5235 20229 6310 5247 20230 2297 5258 20231 2554 5166 20232 6315 5229 20233 6316 5242 20234 2553 5257 20235 2553 5257 20236 6316 5242 20237 6317 5234 20238 3197 5233 20239 6181 5271 20240 2441 5272 20241 2535 5273 20242 6182 5274 20243 2431 5275 20244 2433 5276 20245 2435 5277 20246 2436 5278 20247 2432 5279 20248 2437 5280 20249 2438 5281 20250 2434 5282 20251 2434 5282 20252 2438 5281 20253 2439 5283 20254 2440 5284 20255 2435 5277 20256 2433 5276 20257 2442 5285 20258 2441 5272 20259 2306 5286 20260 2432 5279 20261 2434 5282 20262 2445 5287 20263 2434 5282 20264 2440 5284 20265 2446 5288 20266 2445 5287 20267 2440 5284 20268 2439 5283 20269 2533 5289 20270 2534 5290 20271 2441 5272 20272 2442 5285 20273 2536 5291 20274 2535 5273 20275 2535 5273 20276 2536 5291 20277 2538 5292 20278 2537 5293 20279 2533 5289 20280 2539 5294 20281 2540 5295 20282 2534 5290 20283 2442 5285 20284 2541 5296 20285 2538 5292 20286 2536 5291 20287 2537 5293 20288 2538 5292 20289 2541 5296 20290 2544 5297 20291 2440 5284 20292 2534 5290 20293 2540 5295 20294 2550 5298 20295 2436 5278 20296 6179 5299 20297 6178 5300 20298 2431 5275 20299 6179 5299 20300 2437 5280 20301 2432 5279 20302 6178 5300 20303 2435 5277 20304 6180 5301 20305 6179 5299 20306 2436 5278 20307 6180 5301 20308 2438 5281 20309 2437 5280 20310 6179 5299 20311 2441 5272 20312 6181 5271 20313 6180 5301 20314 2435 5277 20315 6181 5271 20316 2439 5283 20317 2438 5281 20318 6180 5301 20319 2439 5283 20320 6181 5271 20321 6182 5274 20322 2533 5289 20323 2533 5289 20324 6182 5274 20325 6183 5302 20326 2539 5294 20327 6182 5274 20328 2535 5273 20329 2537 5293 20330 6183 5302 20331 6183 5302 20332 2537 5293 20333 2544 5297 20334 6184 5303 20335 2733 5304 20336 2731 5305 20337 2743 5306 20338 2744 5307 20339 2733 5304 20340 2744 5307 20341 2745 5308 20342 2735 5309 20343 2742 5310 20344 2738 5311 20345 2746 5312 20346 2750 5313 20347 2735 5309 20348 2745 5308 20349 2741 5314 20350 2737 5315 20351 2745 5308 20352 2744 5307 20353 2752 5316 20354 2753 5317 20355 2741 5314 20356 2745 5308 20357 2753 5317 20358 2749 5318 20359 2734 5319 20360 6234 5320 20361 6235 5321 20362 2736 5322 20363 6234 5320 20364 2735 5309 20365 2737 5315 20366 6235 5321 20367 2736 5322 20368 6235 5321 20369 6236 5323 20370 2740 5324 20371 6235 5321 20372 2737 5315 20373 2741 5314 20374 6236 5323 20375 2740 5324 20376 6236 5323 20377 6238 5325 20378 2748 5326 20379 6236 5323 20380 2741 5314 20381 2749 5318 20382 6238 5325 20383 6237 5327 20384 2742 5310 20385 2750 5313 20386 6239 5328 20387 2748 5326 20388 6238 5325 20389 6240 5329 20390 2747 5330 20391 6238 5325 20392 2749 5318 20393 2753 5317 20394 6240 5329 20395 2747 5330 20396 6240 5329 20397 6241 5331 20398 2746 5312 20399 6240 5329 20400 2753 5317 20401 2752 5316 20402 6241 5331 20403 2746 5312 20404 6241 5331 20405 6239 5328 20406 2750 5313 20407 6241 5331 20408 2752 5316 20409 2751 5332 20410 6239 5328 20411 2744 5307 20412 2743 5306 20413 2751 5332 20414 2752 5316 20415 2743 5306 20416 6237 5327 20417 6239 5328 20418 2751 5332 20419 2715 5333 20420 2785 5334 20421 2731 5305 20422 2733 5304 20423 2727 5335 20424 2715 5333 20425 2733 5304 20426 2735 5309 20427 2648 5336 20428 6215 5337 20429 6213 5338 20430 2649 5339 20431 6215 5337 20432 2647 5340 20433 2643 5341 20434 6213 5338 20435 2653 5342 20436 6216 5343 20437 6214 5344 20438 2645 5345 20439 6216 5343 20440 2654 5346 20441 2646 5347 20442 6214 5344 20443 2656 5348 20444 6217 5349 20445 6215 5337 20446 2648 5336 20447 6217 5349 20448 2655 5350 20449 2647 5340 20450 6215 5337 20451 2650 5351 20452 6212 5352 20453 6214 5344 20454 2646 5347 20455 6213 5338 20456 2643 5341 20457 2644 5353 20458 6212 5352 20459 2655 5350 20460 2651 5354 20461 2643 5341 20462 2647 5340 20463 2651 5354 20464 2652 5355 20465 2644 5353 20466 2643 5341 20467 2654 5346 20468 2658 5356 20469 2650 5351 20470 2646 5347 20471 2652 5355 20472 2653 5342 20473 2645 5345 20474 2644 5353 20475 2657 5357 20476 2656 5348 20477 2648 5336 20478 2649 5339 20479 2658 5356 20480 2657 5357 20481 2649 5339 20482 2650 5351 20483 2661 5358 20484 2651 5354 20485 2655 5350 20486 2659 5359 20487 2663 5360 20488 2652 5355 20489 2651 5354 20490 2661 5358 20491 2666 5361 20492 2664 5362 20493 2658 5356 20494 2654 5346 20495 2664 5362 20496 2662 5363 20497 2657 5357 20498 2658 5356 20499 6212 5352 20500 2644 5353 20501 2645 5345 20502 6214 5344 20503 2649 5339 20504 6213 5338 20505 6212 5352 20506 2650 5351 20507 2853 5364 20508 6271 5365 20509 6270 5366 20510 2851 5367 20511 2846 5368 20512 2842 5369 20513 2834 5370 20514 2838 5371 20515 2842 5369 20516 2843 5372 20517 2835 5373 20518 2834 5370 20519 2845 5374 20520 2849 5375 20521 2841 5376 20522 2837 5377 20523 2843 5372 20524 2844 5378 20525 2836 5379 20526 2835 5373 20527 2848 5380 20528 2847 5381 20529 2839 5382 20530 2840 5383 20531 2849 5375 20532 2848 5380 20533 2840 5383 20534 2841 5376 20535 2852 5384 20536 2842 5369 20537 2846 5368 20538 2850 5385 20539 2857 5386 20540 2855 5387 20541 2849 5375 20542 2845 5374 20543 2853 5364 20544 2851 5367 20545 2847 5381 20546 2848 5380 20547 2855 5387 20548 2853 5364 20549 2848 5380 20550 2849 5375 20551 2841 5376 20552 6264 5388 20553 6266 5389 20554 2837 5377 20555 6264 5388 20556 2835 5373 20557 2836 5379 20558 6266 5389 20559 2840 5383 20560 6265 5390 20561 6264 5388 20562 2841 5376 20563 6265 5390 20564 2834 5370 20565 2835 5373 20566 6264 5388 20567 2839 5382 20568 6267 5391 20569 6265 5390 20570 2840 5383 20571 6267 5391 20572 2838 5371 20573 2834 5370 20574 6265 5390 20575 2844 5378 20576 6268 5392 20577 6266 5389 20578 2836 5379 20579 6268 5392 20580 2845 5374 20581 2837 5377 20582 6266 5389 20583 2847 5381 20584 6269 5393 20585 6267 5391 20586 2839 5382 20587 2856 5394 20588 6272 5395 20589 6268 5392 20590 2844 5378 20591 6272 5395 20592 2857 5386 20593 2845 5374 20594 6268 5392 20595 6271 5365 20596 2852 5384 20597 2850 5385 20598 6270 5366 20599 6269 5393 20600 2846 5368 20601 2838 5371 20602 6267 5391 20603 2851 5367 20604 6270 5366 20605 6269 5393 20606 2847 5381 20607 6270 5366 20608 2850 5385 20609 2846 5368 20610 6269 5393 20611 2634 5396 20612 2633 5397 20613 2641 5398 20614 2642 5399 20615 2630 5400 20616 2634 5396 20617 2642 5399 20618 2638 5401 20619 6299 5402 20620 2624 5403 20621 2626 5404 20622 6300 5405 20623 2625 5406 20624 6300 5405 20625 6301 5407 20626 2629 5408 20627 6300 5405 20628 2626 5404 20629 2630 5400 20630 6301 5407 20631 2629 5408 20632 6301 5407 20633 6303 5409 20634 2637 5410 20635 6301 5407 20636 2630 5400 20637 2638 5401 20638 6303 5409 20639 2632 5411 20640 6302 5412 20641 6304 5413 20642 2640 5414 20643 6302 5412 20644 2631 5415 20645 2639 5416 20646 6304 5413 20647 2636 5417 20648 6305 5418 20649 6306 5419 20650 2635 5420 20651 2631 5415 20652 2627 5421 20653 2635 5420 20654 2639 5416 20655 6305 5418 20656 2642 5399 20657 2641 5398 20658 6306 5419 20659 2635 5420 20660 6306 5419 20661 6304 5413 20662 2639 5416 20663 6306 5419 20664 2641 5398 20665 2640 5414 20666 6304 5413 20667 2623 5422 20668 6299 5402 20669 6300 5405 20670 2625 5406 20671 2628 5423 20672 2629 5408 20673 2637 5410 20674 2636 5417 20675 2623 5422 20676 2625 5406 20677 2629 5408 20678 2628 5423 20679 2637 5410 20680 6303 5409 20681 6305 5418 20682 2636 5417 20683 2621 5424 20684 2623 5422 20685 2628 5423 20686 2627 5421 20687 6303 5409 20688 2638 5401 20689 2642 5399 20690 6305 5418 20691 2619 5425 20692 2621 5424 20693 2627 5421 20694 2631 5415 20695 2624 5403 20696 2634 5396 20697 2630 5400 20698 2626 5404 20699 2627 5421 20700 2628 5423 20701 2636 5417 20702 2635 5420 20703 2633 5397 20704 2632 5411 20705 2640 5414 20706 2641 5398 20707 2331 5426 20708 2529 5427 20709 2621 5424 20710 2619 5425 20711 2366 5428 20712 2580 5186 20713 2585 5182 20714 2449 5429 20715 2361 5430 20716 2362 5431 20717 2465 5432 20718 2464 5433 20719 2362 5431 20720 2363 5434 20721 2469 5435 20722 2465 5432 20723 2300 5436 20724 2586 5437 20725 2587 5438 20726 2302 5439 20727 2586 5437 20728 2366 5428 20729 2367 5440 20730 2587 5438 20731 2596 5210 20732 2581 5187 20733 2580 5186 20734 2597 5441 20735 2299 5442 20736 2301 5443 20737 2363 5434 20738 2362 5431 20739 2597 5441 20740 2580 5186 20741 2366 5428 20742 2586 5437 20743 2578 5211 20744 2596 5210 20745 2597 5441 20746 2579 5444 20747 6174 5445 20748 2300 5436 20749 2302 5439 20750 6175 5446 20751 2566 5162 20752 6187 5447 20753 6188 5448 20754 2567 5449 20755 2426 5450 20756 2427 5451 20757 2450 5452 20758 2449 5429 20759 6187 5447 20760 2455 5453 20761 2456 5454 20762 6188 5448 20763 2567 5449 20764 6188 5448 20765 6189 5455 20766 2568 5456 20767 2370 5172 20768 2426 5450 20769 2449 5429 20770 2585 5182 20771 6188 5448 20772 2456 5454 20773 2457 5457 20774 6189 5455 20775 2298 5458 20776 6194 5459 20777 6174 5445 20778 2299 5442 20779 6194 5459 20780 2579 5444 20781 2300 5436 20782 6174 5445 20783 2455 5453 20784 6321 5161 20785 2424 5460 20786 2527 5461 20787 2284 5462 20788 6319 5212 20789 6194 5459 20790 2298 5458 20791 2298 5458 20792 2299 5442 20793 2362 5431 20794 2361 5430 20795 2578 5211 20796 2579 5444 20797 6194 5459 20798 6319 5212 20799 2455 5453 20800 6187 5447 20801 2566 5162 20802 6321 5161 20803 2579 5444 20804 2597 5441 20805 2586 5437 20806 2300 5436 20807 2427 5451 20808 2428 5463 20809 2451 5464 20810 2450 5452 20811 2282 5465 20812 6196 5466 20813 6319 5212 20814 2284 5462 20815 2367 5440 20816 2450 5452 20817 2451 5464 20818 2368 5467 20819 2370 5172 20820 2566 5162 20821 2567 5449 20822 2426 5450 20823 2456 5454 20824 2455 5453 20825 2464 5433 20826 2465 5432 20827 2456 5454 20828 2465 5432 20829 2469 5435 20830 2457 5457 20831 2282 5465 20832 2284 5462 20833 2461 5468 20834 2462 5469 20835 2366 5428 20836 2449 5429 20837 2450 5452 20838 2367 5440 20839 2455 5453 20840 2527 5461 20841 2476 5470 20842 2464 5433 20843 2426 5450 20844 2567 5449 20845 2568 5456 20846 2427 5451 20847 2299 5442 20848 6174 5445 20849 6175 5446 20850 2301 5443 20851 2427 5451 20852 2568 5456 20853 2569 5471 20854 2428 5463 20855 2361 5430 20856 2475 5472 20857 2462 5469 20858 2461 5468 20859 2284 5462 20860 2298 5458 20861 2361 5430 20862 2461 5468 20863 2475 5472 20864 2361 5430 20865 2464 5433 20866 2476 5470 20867 2446 5288 20868 2551 5473 20869 2595 5474 20870 2470 5475 20871 2457 5457 20872 2469 5435 20873 2468 5476 20874 2458 5477 20875 2471 5478 20876 2470 5475 20877 2595 5474 20878 2552 5479 20879 2445 5287 20880 2446 5288 20881 2470 5475 20882 2463 5480 20883 2761 5481 20884 2760 5482 20885 2712 5483 20886 2704 5484 20887 2460 5485 20888 2466 5486 20889 2471 5478 20890 2472 5487 20891 2301 5443 20892 6175 5446 20893 6176 5488 20894 2304 5489 20895 2453 5490 20896 2430 5491 20897 2473 5492 20898 2474 5493 20899 2305 5494 20900 2443 5495 20901 2433 5276 20902 2431 5275 20903 6175 5446 20904 2302 5439 20905 2303 5496 20906 6176 5488 20907 2447 5497 20908 2453 5490 20909 2474 5493 20910 2448 5498 20911 2304 5489 20912 6176 5488 20913 6177 5499 20914 2306 5286 20915 2442 5285 20916 2444 5500 20917 2542 5501 20918 2541 5296 20919 6176 5488 20920 2303 5496 20921 2305 5494 20922 6177 5499 20923 2541 5296 20924 2542 5501 20925 2545 5502 20926 2544 5297 20927 2306 5286 20928 6177 5499 20929 6178 5300 20930 2432 5279 20931 2540 5295 20932 2539 5294 20933 2543 5503 20934 2550 5298 20935 2463 5480 20936 2470 5475 20937 2471 5478 20938 2466 5486 20939 6177 5499 20940 2305 5494 20941 2431 5275 20942 6178 5300 20943 2543 5503 20944 2546 5504 20945 2551 5473 20946 2550 5298 20947 2440 5284 20948 2550 5298 20949 2551 5473 20950 2446 5288 20951 2543 5503 20952 6184 5303 20953 6185 5505 20954 2546 5504 20955 2471 5478 20956 2552 5479 20957 2549 5506 20958 2472 5487 20959 6184 5303 20960 2544 5297 20961 2545 5502 20962 6185 5505 20963 2428 5463 20964 2569 5471 20965 2570 5507 20966 2429 5508 20967 2568 5456 20968 6189 5455 20969 6190 5509 20970 2569 5471 20971 2429 5508 20972 2570 5507 20973 2571 5510 20974 2430 5491 20975 6189 5455 20976 2457 5457 20977 2458 5477 20978 6190 5509 20979 2430 5491 20980 2571 5510 20981 2572 5511 20982 2473 5492 20983 6192 5512 20984 2460 5485 20985 2472 5487 20986 6193 5513 20987 2569 5471 20988 6190 5509 20989 6191 5514 20990 2570 5507 20991 2473 5492 20992 2572 5511 20993 2548 5515 20994 2547 5516 20995 2549 5506 20996 6186 5517 20997 6193 5513 20998 2472 5487 20999 2369 5518 21000 2452 5519 21001 2453 5490 21002 2447 5497 21003 6190 5509 21004 2458 5477 21005 2459 5520 21006 6191 5514 21007 2473 5492 21008 2547 5516 21009 2448 5498 21010 2474 5493 21011 6186 5517 21012 2548 5515 21013 2572 5511 21014 6193 5513 21015 2570 5507 21016 6191 5514 21017 6192 5512 21018 2571 5510 21019 2539 5294 21020 6183 5302 21021 6184 5303 21022 2543 5503 21023 2364 5521 21024 2365 5522 21025 2467 5523 21026 2468 5476 21027 6195 5524 21028 2594 5525 21029 2546 5504 21030 6185 5505 21031 2571 5510 21032 6192 5512 21033 6193 5513 21034 2572 5511 21035 2365 5522 21036 2463 5480 21037 2466 5486 21038 2467 5523 21039 2548 5515 21040 6186 5517 21041 6195 5524 21042 2593 5526 21043 6186 5517 21044 2549 5506 21045 2594 5525 21046 6195 5524 21047 2302 5439 21048 2587 5438 21049 2588 5527 21050 2303 5496 21051 2587 5438 21052 2367 5440 21053 2368 5467 21054 2588 5527 21055 2303 5496 21056 2588 5527 21057 2589 5528 21058 2305 5494 21059 2588 5527 21060 2368 5467 21061 2369 5518 21062 2589 5528 21063 2301 5443 21064 2304 5489 21065 2364 5521 21066 2363 5434 21067 2305 5494 21068 2589 5528 21069 2590 5529 21070 2443 5495 21071 2304 5489 21072 2306 5286 21073 2365 5522 21074 2364 5521 21075 2589 5528 21076 2369 5518 21077 2447 5497 21078 2590 5529 21079 2443 5495 21080 2590 5529 21081 2591 5530 21082 2444 5500 21083 2433 5276 21084 2443 5495 21085 2444 5500 21086 2442 5285 21087 2363 5434 21088 2364 5521 21089 2468 5476 21090 2469 5435 21091 2593 5526 21092 6195 5524 21093 6185 5505 21094 2545 5502 21095 2590 5529 21096 2447 5497 21097 2448 5498 21098 2591 5530 21099 2428 5463 21100 2429 5508 21101 2452 5519 21102 2451 5464 21103 2444 5500 21104 2591 5530 21105 2592 5531 21106 2542 5501 21107 2429 5508 21108 2430 5491 21109 2453 5490 21110 2452 5519 21111 2591 5530 21112 2448 5498 21113 2547 5516 21114 2592 5531 21115 2368 5467 21116 2451 5464 21117 2452 5519 21118 2369 5518 21119 2542 5501 21120 2592 5531 21121 2593 5526 21122 2545 5502 21123 6191 5514 21124 2459 5520 21125 2460 5485 21126 6192 5512 21127 2592 5531 21128 2547 5516 21129 2548 5515 21130 2593 5526 21131 2306 5286 21132 2445 5287 21133 2463 5480 21134 2365 5522 21135 2546 5504 21136 2594 5525 21137 2595 5474 21138 2551 5473 21139 2459 5520 21140 2467 5523 21141 2466 5486 21142 2460 5485 21143 2594 5525 21144 2549 5506 21145 2552 5479 21146 2595 5474 21147 2458 5477 21148 2468 5476 21149 2467 5523 21150 2459 5520 21151 2398 5532 21152 2423 5533 21153 6333 5206 21154 6325 5534 21155 6322 5164 21156 6333 5206 21157 6328 5535 21158 6327 5536 21159 2524 5145 21160 6336 5213 21161 6319 5212 21162 6196 5466 21163 2527 5461 21164 6344 5537 21165 6343 5538 21166 2476 5470 21167 2454 5539 21168 6347 5540 21169 6346 5541 21170 2423 5533 21171 6347 5540 21172 2759 5542 21173 2773 5543 21174 6346 5541 21175 2575 5544 21176 6348 5545 21177 6347 5540 21178 2454 5539 21179 6350 5546 21180 6210 5547 21181 2423 5533 21182 6346 5541 21183 2398 5532 21184 2410 5548 21185 2454 5539 21186 2423 5533 21187 2424 5460 21188 6345 5549 21189 6344 5537 21190 2527 5461 21191 6345 5549 21192 2774 5550 21193 2764 5551 21194 6344 5537 21195 6246 5552 21196 6350 5546 21197 6346 5541 21198 2773 5543 21199 2774 5550 21200 6345 5549 21201 6350 5546 21202 6246 5552 21203 6345 5549 21204 2424 5460 21205 6210 5547 21206 6350 5546 21207 2410 5548 21208 6357 5553 21209 6359 5554 21210 2477 5555 21211 6348 5545 21212 2700 5556 21213 2759 5542 21214 6347 5540 21215 2283 5557 21216 2484 5558 21217 2483 5559 21218 2285 5560 21219 2360 5561 21220 2354 5562 21221 2483 5559 21222 2484 5558 21223 2360 5561 21224 6342 5563 21225 6348 5545 21226 2575 5544 21227 2282 5465 21228 2462 5469 21229 2475 5472 21230 2577 5564 21231 2283 5557 21232 2576 5565 21233 2360 5561 21234 2484 5558 21235 2354 5562 21236 2360 5561 21237 2575 5544 21238 2477 5555 21239 2410 5548 21240 2477 5555 21241 2575 5544 21242 2454 5539 21243 2577 5564 21244 6211 5566 21245 6196 5466 21246 2282 5465 21247 6211 5566 21248 2576 5565 21249 2283 5557 21250 6196 5466 21251 2283 5557 21252 2285 5560 21253 6197 5567 21254 6196 5466 21255 2518 5142 21256 2524 5145 21257 6196 5466 21258 6197 5567 21259 2424 5460 21260 6321 5161 21261 6322 5164 21262 6327 5536 21263 2423 5533 21264 6210 5547 21265 6328 5535 21266 6333 5206 21267 6210 5547 21268 2424 5460 21269 6327 5536 21270 6328 5535 21271 2475 5472 21272 6341 5568 21273 6339 5569 21274 2577 5564 21275 6341 5568 21276 2779 5570 21277 2792 5571 21278 6339 5569 21279 2576 5565 21280 6340 5572 21281 6342 5563 21282 2360 5561 21283 6340 5572 21284 2793 5573 21285 2783 5574 21286 6342 5563 21287 2476 5470 21288 6343 5538 21289 6341 5568 21290 2475 5472 21291 6343 5538 21292 2707 5575 21293 2779 5570 21294 6341 5568 21295 6342 5563 21296 2783 5574 21297 2700 5556 21298 6348 5545 21299 6211 5566 21300 6349 5576 21301 6340 5572 21302 2576 5565 21303 2791 5577 21304 2792 5571 21305 2779 5570 21306 2778 5578 21307 6349 5576 21308 6251 5579 21309 2793 5573 21310 6340 5572 21311 2577 5564 21312 6339 5569 21313 6349 5576 21314 6211 5566 21315 6344 5537 21316 2764 5551 21317 2707 5575 21318 6343 5538 21319 6339 5569 21320 2792 5571 21321 6251 5579 21322 6349 5576 21323 2783 5574 21324 2782 5580 21325 2701 5581 21326 2700 5556 21327 2782 5580 21328 2781 5582 21329 2702 5583 21330 2701 5581 21331 2758 5584 21332 2701 5581 21333 2702 5583 21334 2757 5585 21335 2764 5551 21336 2763 5586 21337 2706 5587 21338 2707 5575 21339 2779 5570 21340 2707 5575 21341 2706 5587 21342 2778 5578 21343 2770 5588 21344 2772 5589 21345 2758 5584 21346 2757 5585 21347 2772 5589 21348 2773 5543 21349 2759 5542 21350 2758 5584 21351 2771 5590 21352 2769 5591 21353 2762 5592 21354 2763 5586 21355 2774 5550 21356 2771 5590 21357 2763 5586 21358 2764 5551 21359 2793 5573 21360 2790 5593 21361 2782 5580 21362 2783 5574 21363 2771 5590 21364 6245 5594 21365 6244 5595 21366 2769 5591 21367 6245 5594 21368 2772 5589 21369 2770 5588 21370 6244 5595 21371 2774 5550 21372 6246 5552 21373 6245 5594 21374 2771 5590 21375 6246 5552 21376 2773 5543 21377 2772 5589 21378 6245 5594 21379 2759 5542 21380 2700 5556 21381 2701 5581 21382 2758 5584 21383 2793 5573 21384 6251 5579 21385 6250 5596 21386 2790 5593 21387 6251 5579 21388 2792 5571 21389 2791 5577 21390 6250 5596 21391 2726 5597 21392 6230 5598 21393 6234 5320 21394 2734 5319 21395 2716 5599 21396 2715 5333 21397 2727 5335 21398 2728 5600 21399 2769 5591 21400 6244 5595 21401 6243 5601 21402 2767 5602 21403 6230 5598 21404 2727 5335 21405 2735 5309 21406 6234 5320 21407 6244 5595 21408 2770 5588 21409 2768 5603 21410 6243 5601 21411 2710 5604 21412 2722 5605 21413 2729 5606 21414 2711 5607 21415 2787 5608 21416 6248 5609 21417 6247 5610 21418 2785 5334 21419 6233 5611 21420 2730 5612 21421 2742 5310 21422 6237 5327 21423 2784 5613 21424 2713 5614 21425 2732 5615 21426 2730 5612 21427 6248 5609 21428 2786 5616 21429 2784 5613 21430 6247 5610 21431 2789 5617 21432 6249 5618 21433 6248 5609 21434 2787 5608 21435 2732 5615 21436 2734 5319 21437 2739 5619 21438 2738 5311 21439 6249 5618 21440 2788 5620 21441 2786 5616 21442 6248 5609 21443 2734 5319 21444 2736 5322 21445 2740 5324 21446 2739 5619 21447 2790 5593 21448 6250 5596 21449 6249 5618 21450 2789 5617 21451 2730 5612 21452 2732 5615 21453 2738 5311 21454 2742 5310 21455 6250 5596 21456 2791 5577 21457 2788 5620 21458 6249 5618 21459 2738 5311 21460 2739 5619 21461 2747 5330 21462 2746 5312 21463 2739 5619 21464 2740 5324 21465 2748 5326 21466 2747 5330 21467 2787 5608 21468 2785 5334 21469 2754 5621 21470 2780 5622 21471 2766 5623 21472 2768 5603 21473 2756 5624 21474 2755 5625 21475 2768 5603 21476 2770 5588 21477 2757 5585 21478 2756 5624 21479 2776 5626 21480 2704 5484 21481 2712 5483 21482 2775 5627 21483 2767 5602 21484 2765 5628 21485 2760 5482 21486 2761 5481 21487 2781 5582 21488 2780 5622 21489 2703 5629 21490 2702 5583 21491 2769 5591 21492 2767 5602 21493 2761 5481 21494 2762 5592 21495 2757 5585 21496 2702 5583 21497 2703 5629 21498 2756 5624 21499 2784 5613 21500 2786 5616 21501 2776 5626 21502 2775 5627 21503 2780 5622 21504 2754 5621 21505 2708 5630 21506 2703 5629 21507 2786 5616 21508 2788 5620 21509 2777 5631 21510 2776 5626 21511 2756 5624 21512 2703 5629 21513 2708 5630 21514 2755 5625 21515 2788 5620 21516 2791 5577 21517 2778 5578 21518 2777 5631 21519 2762 5592 21520 2761 5481 21521 2704 5484 21522 2705 5632 21523 2789 5617 21524 2787 5608 21525 2780 5622 21526 2781 5582 21527 2777 5631 21528 2705 5632 21529 2704 5484 21530 2776 5626 21531 2722 5605 21532 2716 5599 21533 2728 5600 21534 2729 5606 21535 2790 5593 21536 2789 5617 21537 2781 5582 21538 2782 5580 21539 2763 5586 21540 2762 5592 21541 2705 5632 21542 2706 5587 21543 2765 5628 21544 6242 5633 21545 6227 5634 21546 2709 5635 21547 2778 5578 21548 2706 5587 21549 2705 5632 21550 2777 5631 21551 6242 5633 21552 2766 5623 21553 2717 5636 21554 6227 5634 21555 2754 5621 21556 2785 5334 21557 2715 5333 21558 2716 5599 21559 2731 5305 21560 6233 5611 21561 6237 5327 21562 2743 5306 21563 2709 5635 21564 6227 5634 21565 6228 5637 21566 2721 5638 21567 2766 5623 21568 2755 5625 21569 2710 5604 21570 2717 5636 21571 6227 5634 21572 2717 5636 21573 2718 5639 21574 6228 5637 21575 2717 5636 21576 2710 5604 21577 2711 5607 21578 2718 5639 21579 2711 5607 21580 6229 5640 21581 6228 5637 21582 2718 5639 21583 2784 5613 21584 2775 5627 21585 2714 5641 21586 2713 5614 21587 6229 5640 21588 2723 5642 21589 2721 5638 21590 6228 5637 21591 2712 5483 21592 2760 5482 21593 2719 5643 21594 2720 5644 21595 2729 5606 21596 6231 5645 21597 6229 5640 21598 2711 5607 21599 2712 5483 21600 2720 5644 21601 2714 5641 21602 2775 5627 21603 6231 5645 21604 2724 5646 21605 2723 5642 21606 6229 5640 21607 2765 5628 21608 2709 5635 21609 2719 5643 21610 2760 5482 21611 2724 5646 21612 6231 5645 21613 6232 5647 21614 2725 5648 21615 2708 5630 21616 2722 5605 21617 2710 5604 21618 2755 5625 21619 6231 5645 21620 2729 5606 21621 2728 5600 21622 6232 5647 21623 2754 5621 21624 2716 5599 21625 2722 5605 21626 2708 5630 21627 2725 5648 21628 6232 5647 21629 6230 5598 21630 2726 5597 21631 2709 5635 21632 2721 5638 21633 2723 5642 21634 2719 5643 21635 6232 5647 21636 2728 5600 21637 2727 5335 21638 6230 5598 21639 2714 5641 21640 2720 5644 21641 2724 5646 21642 2725 5648 21643 2785 5334 21644 6247 5610 21645 6233 5611 21646 2731 5305 21647 2719 5643 21648 2723 5642 21649 2724 5646 21650 2720 5644 21651 2767 5602 21652 6243 5601 21653 6242 5633 21654 2765 5628 21655 6247 5610 21656 2784 5613 21657 2730 5612 21658 6233 5611 21659 2713 5614 21660 2714 5641 21661 2725 5648 21662 2726 5597 21663 6243 5601 21664 2768 5603 21665 2766 5623 21666 6242 5633 21667 2713 5614 21668 2726 5597 21669 2734 5319 21670 2732 5615 21671 6358 5649 21672 2417 5650 21673 2574 5651 21674 6360 5652 21675 2349 5653 21676 6353 5654 21677 6360 5652 21678 2574 5651 21679 6198 5655 21680 6361 5656 21681 6352 5657 21682 2308 5658 21683 2307 5659 21684 6351 5660 21685 6361 5656 21686 6198 5655 21687 6204 5661 21688 6362 5662 21689 6356 5663 21690 2398 5532 21691 6362 5662 21692 6205 5664 21693 2400 5665 21694 6356 5663 21695 2399 5666 21696 6355 5667 21697 6362 5662 21698 6204 5661 21699 6355 5667 21700 2401 5668 21701 6205 5664 21702 6362 5662 21703 2346 5669 21704 2348 5670 21705 2349 5653 21706 2347 5671 21707 2286 5672 21708 2308 5658 21709 2349 5653 21710 2348 5670 21711 2285 5560 21712 2483 5559 21713 2354 5562 21714 2307 5659 21715 2286 5672 21716 2348 5670 21717 2346 5669 21718 2287 5673 21719 2517 5674 21720 2494 5123 21721 2493 5143 21722 2518 5142 21723 2347 5671 21724 2349 5653 21725 2574 5651 21726 2691 5675 21727 6356 5663 21728 2400 5665 21729 2411 5676 21730 6357 5553 21731 2417 5650 21732 2422 5677 21733 2691 5675 21734 2574 5651 21735 2422 5677 21736 2823 5678 21737 2880 5679 21738 2691 5675 21739 2399 5666 21740 2888 5680 21741 2422 5677 21742 2417 5650 21743 2286 5672 21744 6197 5567 21745 6198 5655 21746 2308 5658 21747 6197 5567 21748 2285 5560 21749 2307 5659 21750 6198 5655 21751 2286 5672 21752 2287 5673 21753 6252 5681 21754 6197 5567 21755 2517 5674 21756 2518 5142 21757 6197 5567 21758 6252 5681 21759 6204 5661 21760 2398 5532 21761 6325 5534 21762 6326 5682 21763 2399 5666 21764 6204 5661 21765 6326 5682 21766 6332 5205 21767 2399 5666 21768 6332 5205 21769 6329 5683 21770 2888 5680 21771 6325 5534 21772 6333 5206 21773 6332 5205 21774 6326 5682 21775 6351 5660 21776 2307 5659 21777 2354 5562 21778 6354 5684 21779 2398 5532 21780 6356 5663 21781 6357 5553 21782 2410 5548 21783 2401 5668 21784 6355 5667 21785 6358 5649 21786 2416 5685 21787 6355 5667 21788 2399 5666 21789 2417 5650 21790 6358 5649 21791 6357 5553 21792 2411 5676 21793 2689 5686 21794 6359 5554 21795 2477 5555 21796 6359 5554 21797 6354 5684 21798 2354 5562 21799 2308 5658 21800 6352 5657 21801 6353 5654 21802 2349 5653 21803 6359 5554 21804 2689 5686 21805 2355 5687 21806 6354 5684 21807 2416 5685 21808 6358 5649 21809 6360 5652 21810 2699 5688 21811 2310 5689 21812 6351 5660 21813 6354 5684 21814 2355 5687 21815 6353 5654 21816 2350 5690 21817 2699 5688 21818 6360 5652 21819 6361 5656 21820 6199 5691 21821 2309 5692 21822 6352 5657 21823 6351 5660 21824 2310 5689 21825 6199 5691 21826 6361 5656 21827 2309 5692 21828 2312 5693 21829 2351 5694 21830 2350 5690 21831 2312 5693 21832 2313 5695 21833 2352 5696 21834 2351 5694 21835 2311 5697 21836 2310 5689 21837 2355 5687 21838 2356 5698 21839 2314 5699 21840 2311 5697 21841 2356 5698 21842 2357 5700 21843 2400 5665 21844 2403 5701 21845 2412 5702 21846 2411 5676 21847 2403 5701 21848 2405 5703 21849 2413 5704 21850 2412 5702 21851 2402 5705 21852 2401 5668 21853 2416 5685 21854 2418 5706 21855 2404 5707 21856 2402 5705 21857 2418 5706 21858 2419 5708 21859 2355 5687 21860 2689 5686 21861 2690 5709 21862 2356 5698 21863 2411 5676 21864 2412 5702 21865 2690 5709 21866 2689 5686 21867 2356 5698 21868 2690 5709 21869 2694 5710 21870 2357 5700 21871 2810 5711 21872 2882 5712 21873 2883 5713 21874 2811 5714 21875 2412 5702 21876 2413 5704 21877 2694 5710 21878 2690 5709 21879 2418 5706 21880 2698 5715 21881 2697 5716 21882 2419 5708 21883 2351 5694 21884 2352 5696 21885 2697 5716 21886 2698 5715 21887 2416 5685 21888 2699 5688 21889 2698 5715 21890 2418 5706 21891 2350 5690 21892 2351 5694 21893 2698 5715 21894 2699 5688 21895 2825 5717 21896 2826 5718 21897 2883 5713 21898 2882 5712 21899 2309 5692 21900 6199 5691 21901 6200 5719 21902 2312 5693 21903 6199 5691 21904 2310 5689 21905 2311 5697 21906 6200 5719 21907 2400 5665 21908 6205 5664 21909 6206 5720 21910 2403 5701 21911 6205 5664 21912 2401 5668 21913 2402 5705 21914 6206 5720 21915 2403 5701 21916 6206 5720 21917 6207 5721 21918 2405 5703 21919 6206 5720 21920 2402 5705 21921 2404 5707 21922 6207 5721 21923 6352 5657 21924 2309 5692 21925 2350 5690 21926 6353 5654 21927 2357 5700 21928 2694 5710 21929 2695 5722 21930 2358 5723 21931 2413 5704 21932 2414 5724 21933 2695 5722 21934 2694 5710 21935 2420 5725 21936 2696 5726 21937 2688 5727 21938 2421 5728 21939 6222 5729 21940 2667 5730 21941 2668 5731 21942 6221 5732 21943 2353 5733 21944 2573 5734 21945 2688 5727 21946 2696 5726 21947 2409 5735 21948 6209 5736 21949 6226 5737 21950 2687 5738 21951 2419 5708 21952 2697 5716 21953 2696 5726 21954 2420 5725 21955 2313 5695 21956 2315 5739 21957 2353 5733 21958 2352 5696 21959 2352 5696 21960 2353 5733 21961 2696 5726 21962 2697 5716 21963 2316 5740 21964 2314 5699 21965 2357 5700 21966 2358 5723 21967 2414 5724 21968 2415 5741 21969 2684 5742 21970 2695 5722 21971 2358 5723 21972 2695 5722 21973 2684 5742 21974 2359 5743 21975 2405 5703 21976 2407 5744 21977 2414 5724 21978 2413 5704 21979 2312 5693 21980 6200 5719 21981 6201 5745 21982 2313 5695 21983 2407 5744 21984 2409 5735 21985 2415 5741 21986 2414 5724 21987 6209 5736 21988 2408 5746 21989 2679 5747 21990 6226 5737 21991 6200 5719 21992 2311 5697 21993 2314 5699 21994 6201 5745 21995 2406 5748 21996 2404 5707 21997 2419 5708 21998 2420 5725 21999 2687 5738 22000 6226 5737 22001 6225 5749 22002 2675 5750 22003 2318 5751 22004 2316 5740 22005 2358 5723 22006 2359 5743 22007 2313 5695 22008 6201 5745 22009 6202 5752 22010 2315 5739 22011 2408 5746 22012 2406 5748 22013 2420 5725 22014 2421 5728 22015 6201 5745 22016 2314 5699 22017 2316 5740 22018 6202 5752 22019 2315 5739 22020 2317 5753 22021 2573 5734 22022 2353 5733 22023 2680 5754 22024 2681 5755 22025 2669 5756 22026 2668 5731 22027 2317 5753 22028 6203 5757 22029 6220 5758 22030 2665 5759 22031 2315 5739 22032 6202 5752 22033 6203 5757 22034 2317 5753 22035 2663 5360 22036 2665 5759 22037 2653 5342 22038 2652 5355 22039 6222 5729 22040 2672 5760 22041 2673 5761 22042 6224 5762 22043 6202 5752 22044 2316 5740 22045 2318 5751 22046 6203 5757 22047 2662 5363 22048 2660 5763 22049 2656 5348 22050 2657 5357 22051 2405 5703 22052 6207 5721 22053 6208 5764 22054 2407 5744 22055 2669 5756 22056 2681 5755 22057 2663 5360 22058 2661 5358 22059 6207 5721 22060 2404 5707 22061 2406 5748 22062 6208 5764 22063 2683 5765 22064 2670 5766 22065 2662 5363 22066 2664 5362 22067 6218 5767 22068 2659 5359 22069 2655 5350 22070 6217 5349 22071 2407 5744 22072 6208 5764 22073 6209 5736 22074 2409 5735 22075 2681 5755 22076 2317 5753 22077 2665 5759 22078 2663 5360 22079 6203 5757 22080 2318 5751 22081 2666 5361 22082 6220 5758 22083 6208 5764 22084 2406 5748 22085 2408 5746 22086 6209 5736 22087 2318 5751 22088 2683 5765 22089 2664 5362 22090 2666 5361 22091 6219 5768 22092 2661 5358 22093 2659 5359 22094 6218 5767 22095 2665 5759 22096 6220 5758 22097 6216 5343 22098 2653 5342 22099 2686 5769 22100 2674 5770 22101 2667 5730 22102 2685 5771 22103 2670 5766 22104 6223 5772 22105 6219 5768 22106 2662 5363 22107 6220 5758 22108 2666 5361 22109 2654 5346 22110 6216 5343 22111 2674 5770 22112 2680 5754 22113 2668 5731 22114 2667 5730 22115 6223 5772 22116 2669 5756 22117 2661 5358 22118 6219 5768 22119 2660 5763 22120 6218 5767 22121 6217 5349 22122 2656 5348 22123 2679 5747 22124 2686 5769 22125 2685 5771 22126 2678 5773 22127 2683 5765 22128 2682 5774 22129 2671 5775 22130 2670 5766 22131 2671 5775 22132 6221 5732 22133 6223 5772 22134 2670 5766 22135 2662 5363 22136 6219 5768 22137 6218 5767 22138 2660 5763 22139 2677 5776 22140 2673 5761 22141 2672 5760 22142 2676 5777 22143 6224 5762 22144 2673 5761 22145 2675 5750 22146 6225 5749 22147 2687 5738 22148 2675 5750 22149 2673 5761 22150 2677 5776 22151 2573 5734 22152 2680 5754 22153 2674 5770 22154 2688 5727 22155 2688 5727 22156 2674 5770 22157 2686 5769 22158 2421 5728 22159 2667 5730 22160 6222 5729 22161 6224 5762 22162 2685 5771 22163 2682 5774 22164 2676 5777 22165 2672 5760 22166 2671 5775 22167 6221 5732 22168 2668 5731 22169 2669 5756 22170 6223 5772 22171 2409 5735 22172 2687 5738 22173 2677 5776 22174 2415 5741 22175 2684 5742 22176 2676 5777 22177 2682 5774 22178 2359 5743 22179 2685 5771 22180 6224 5762 22181 6225 5749 22182 2678 5773 22183 2684 5742 22184 2415 5741 22185 2677 5776 22186 2676 5777 22187 2318 5751 22188 2359 5743 22189 2682 5774 22190 2683 5765 22191 2672 5760 22192 6222 5729 22193 6221 5732 22194 2671 5775 22195 2408 5746 22196 2421 5728 22197 2686 5769 22198 2679 5747 22199 6226 5737 22200 2679 5747 22201 2678 5773 22202 6225 5749 22203 2573 5734 22204 2317 5753 22205 2681 5755 22206 2680 5754 22207 2288 5778 22208 2333 5779 22209 2334 5780 22210 2321 5781 22211 2288 5778 22212 2521 5782 22213 2517 5674 22214 6252 5681 22215 2288 5778 22216 2321 5781 22217 2520 5783 22218 2521 5782 22219 6329 5683 22220 6332 5205 22221 6334 5204 22222 6330 5784 22223 6287 5785 22224 6331 5786 22225 6334 5204 22226 6318 5148 22227 6279 5787 22228 2888 5680 22229 6329 5683 22230 6330 5784 22231 2391 5788 22232 2478 5789 22233 2693 5790 22234 2692 5791 22235 2520 5783 22236 2496 5220 22237 2497 5124 22238 2521 5782 22239 2889 5792 22240 6279 5787 22241 6330 5784 22242 6334 5204 22243 2521 5782 22244 2497 5124 22245 2494 5123 22246 2517 5674 22247 2386 5793 22248 2889 5792 22249 6334 5204 22250 6331 5786 22251 2386 5793 22252 2391 5788 22253 2692 5791 22254 2889 5792 22255 6367 5794 22256 2814 5795 22257 2828 5796 22258 6370 5797 22259 2880 5679 22260 6371 5798 22261 6366 5799 22262 2808 5800 22263 2823 5678 22264 6369 5801 22265 6371 5798 22266 2880 5679 22267 2795 5802 22268 6254 5803 22269 6253 5804 22270 2319 5805 22271 6368 5806 22272 2816 5807 22273 2824 5808 22274 6369 5801 22275 2804 5809 22276 6365 5810 22277 6372 5811 22278 2887 5812 22279 2288 5778 22280 2320 5813 22281 2335 5814 22282 2333 5779 22283 2692 5791 22284 2693 5790 22285 2887 5812 22286 2828 5796 22287 6254 5803 22288 2794 5815 22289 2320 5813 22290 6253 5804 22291 2815 5816 22292 6367 5794 22293 6370 5797 22294 2829 5817 22295 6374 5818 22296 6260 5819 22297 2816 5807 22298 6368 5806 22299 6254 5803 22300 6373 5820 22301 6364 5821 22302 2794 5815 22303 2319 5805 22304 2287 5673 22305 2346 5669 22306 2347 5671 22307 6367 5794 22308 2815 5816 22309 6260 5819 22310 6374 5818 22311 2347 5671 22312 2691 5675 22313 2880 5679 22314 2808 5800 22315 2813 5822 22316 2823 5678 22317 2422 5677 22318 2888 5680 22319 2888 5680 22320 6279 5787 22321 6259 5823 22322 2813 5822 22323 2795 5802 22324 6363 5824 22325 6373 5820 22326 6254 5803 22327 2333 5779 22328 2335 5814 22329 2336 5825 22330 2334 5780 22331 2814 5795 22332 2889 5792 22333 2692 5791 22334 2828 5796 22335 2319 5805 22336 2347 5671 22337 2808 5800 22338 2795 5802 22339 2335 5814 22340 2804 5809 22341 2887 5812 22342 2693 5790 22343 2336 5825 22344 2335 5814 22345 2693 5790 22346 2478 5789 22347 2794 5815 22348 6364 5821 22349 6365 5810 22350 2804 5809 22351 2320 5813 22352 2794 5815 22353 2804 5809 22354 2335 5814 22355 2288 5778 22356 6252 5681 22357 6253 5804 22358 2320 5813 22359 6363 5824 22360 2795 5802 22361 2808 5800 22362 6366 5799 22363 6279 5787 22364 2889 5792 22365 2814 5795 22366 6259 5823 22367 6369 5801 22368 2824 5808 22369 2881 5826 22370 6371 5798 22371 2814 5795 22372 6367 5794 22373 6374 5818 22374 6259 5823 22375 6252 5681 22376 2287 5673 22377 2319 5805 22378 6253 5804 22379 2813 5822 22380 6368 5806 22381 6369 5801 22382 2823 5678 22383 2887 5812 22384 6372 5811 22385 6370 5797 22386 2828 5796 22387 6259 5823 22388 6374 5818 22389 6368 5806 22390 2813 5822 22391 6275 5827 22392 2860 5828 22393 2852 5384 22394 6271 5365 22395 2873 5829 22396 2867 5830 22397 2863 5831 22398 2862 5832 22399 2802 5833 22400 6258 5834 22401 6272 5395 22402 2856 5394 22403 2878 5835 22404 2866 5836 22405 2864 5837 22406 2868 5838 22407 2818 5839 22408 6261 5840 22409 6262 5841 22410 2820 5842 22411 2871 5843 22412 2872 5844 22413 2860 5828 22414 2859 5845 22415 6273 5846 22416 2859 5845 22417 2860 5828 22418 6275 5827 22419 2809 5847 22420 2881 5826 22421 2882 5712 22422 2810 5711 22423 2797 5848 22424 2798 5849 22425 2806 5850 22426 2805 5851 22427 2820 5842 22428 2822 5852 22429 2827 5853 22430 2826 5718 22431 2860 5828 22432 2872 5844 22433 2854 5854 22434 2852 5384 22435 2874 5855 22436 2873 5829 22437 2862 5832 22438 2861 5856 22439 2863 5831 22440 6274 5857 22441 6273 5846 22442 2862 5832 22443 2875 5858 22444 2867 5830 22445 2873 5829 22446 2812 5859 22447 2870 5860 22448 2877 5861 22449 2876 5862 22450 2869 5863 22451 2798 5849 22452 2800 5864 22453 2807 5865 22454 2806 5850 22455 6262 5841 22456 2819 5866 22457 2821 5867 22458 6263 5868 22459 2826 5718 22460 2827 5853 22461 2875 5858 22462 2883 5713 22463 2817 5869 22464 2815 5816 22465 2829 5817 22466 2830 5870 22467 2833 5871 22468 2802 5833 22469 2872 5844 22470 2871 5843 22471 6260 5819 22472 2815 5816 22473 2817 5869 22474 6261 5840 22475 2874 5855 22476 2861 5856 22477 2853 5364 22478 2855 5387 22479 2868 5838 22480 2864 5837 22481 2863 5831 22482 2867 5830 22483 6274 5857 22484 2858 5872 22485 2859 5845 22486 6273 5846 22487 6256 5873 22488 2799 5874 22489 2801 5875 22490 6257 5876 22491 2875 5858 22492 2827 5853 22493 2868 5838 22494 2867 5830 22495 2831 5877 22496 2884 5878 22497 2879 5879 22498 2832 5880 22499 2799 5874 22500 2796 5881 22501 2809 5847 22502 2810 5711 22503 2811 5714 22504 2883 5713 22505 2875 5858 22506 2812 5859 22507 2854 5854 22508 2856 5394 22509 2844 5378 22510 2843 5372 22511 2819 5866 22512 2817 5869 22513 2830 5870 22514 2831 5877 22515 2803 5882 22516 2801 5875 22517 2811 5714 22518 2812 5859 22519 2858 5872 22520 6274 5857 22521 6276 5883 22522 2876 5862 22523 6274 5857 22524 2863 5831 22525 2864 5837 22526 6276 5883 22527 2820 5842 22528 6262 5841 22529 6263 5868 22530 2822 5852 22531 2829 5817 22532 2886 5884 22533 2885 5885 22534 2830 5870 22535 2806 5850 22536 2807 5865 22537 2884 5878 22538 2885 5885 22539 2818 5839 22540 2820 5842 22541 2826 5718 22542 2825 5717 22543 2876 5862 22544 6276 5883 22545 6277 5886 22546 2869 5863 22547 2803 5882 22548 2812 5859 22549 2873 5829 22550 2874 5855 22551 2805 5851 22552 2806 5850 22553 2885 5885 22554 2886 5884 22555 2807 5865 22556 2833 5871 22557 2879 5879 22558 2884 5878 22559 6276 5883 22560 2864 5837 22561 2866 5836 22562 6277 5886 22563 2801 5875 22564 2799 5874 22565 2810 5711 22566 2811 5714 22567 2816 5807 22568 6260 5819 22569 6261 5840 22570 2818 5839 22571 2797 5848 22572 6255 5887 22573 6256 5873 22574 2798 5849 22575 2878 5835 22576 6278 5888 22577 6277 5886 22578 2866 5836 22579 2821 5867 22580 2819 5866 22581 2831 5877 22582 2832 5880 22583 6278 5888 22584 2870 5860 22585 2869 5863 22586 6277 5886 22587 2803 5882 22588 2874 5855 22589 2855 5387 22590 2857 5386 22591 2798 5849 22592 6256 5873 22593 6257 5876 22594 2800 5864 22595 2822 5852 22596 6263 5868 22597 6278 5888 22598 2878 5835 22599 2872 5844 22600 2802 5833 22601 2856 5394 22602 2854 5854 22603 6263 5868 22604 2821 5867 22605 2870 5860 22606 6278 5888 22607 6364 5821 22608 2797 5848 22609 2805 5851 22610 6365 5810 22611 2822 5852 22612 2878 5835 22613 2868 5838 22614 2827 5853 22615 6255 5887 22616 2796 5881 22617 2799 5874 22618 6256 5873 22619 2796 5881 22620 6363 5824 22621 6366 5799 22622 2809 5847 22623 2800 5864 22624 2802 5833 22625 2833 5871 22626 2807 5865 22627 2800 5864 22628 6257 5876 22629 6258 5834 22630 2802 5833 22631 6371 5798 22632 2881 5826 22633 2809 5847 22634 6366 5799 22635 2877 5861 22636 2865 5889 22637 2858 5872 22638 2876 5862 22639 6261 5840 22640 2817 5869 22641 2819 5866 22642 6262 5841 22643 2830 5870 22644 2885 5885 22645 2884 5878 22646 2831 5877 22647 6372 5811 22648 2886 5884 22649 2829 5817 22650 6370 5797 22651 2833 5871 22652 2871 5843 22653 2865 5889 22654 2879 5879 22655 6365 5810 22656 2805 5851 22657 2886 5884 22658 6372 5811 22659 2821 5867 22660 2832 5880 22661 2877 5861 22662 2870 5860 22663 6257 5876 22664 2801 5875 22665 2803 5882 22666 6258 5834 22667 6373 5820 22668 6255 5887 22669 2797 5848 22670 6364 5821 22671 2816 5807 22672 2818 5839 22673 2825 5717 22674 2824 5808 22675 6363 5824 22676 2796 5881 22677 6255 5887 22678 6373 5820 22679 2854 5854 22680 2843 5372 22681 2842 5369 22682 2852 5384 22683 2865 5889 22684 2871 5843 22685 2859 5845 22686 2858 5872 22687 2862 5832 22688 6273 5846 22689 6275 5827 22690 2861 5856 22691 2879 5879 22692 2865 5889 22693 2877 5861 22694 2832 5880 22695 2861 5856 22696 6275 5827 22697 6271 5365 22698 2853 5364 22699 2824 5808 22700 2825 5717 22701 2882 5712 22702 2881 5826 22703 6258 5834 22704 2803 5882 22705 2857 5386 22706 6272 5395 22707 2378 5126 22708 2372 5890 22709 2379 5891 22710 2385 5137 22711 2519 5892 22712 2495 5221 22713 2496 5220 22714 2520 5783 22715 2289 5132 22716 2498 5131 22717 2495 5221 22718 2519 5892 22719 2379 5891 22720 2557 5893 22721 3196 5140 22722 2385 5137 22723 2556 5894 22724 6286 5895 22725 6287 5785 22726 2557 5893 22727 6318 5148 22728 3196 5140 22729 2557 5893 22730 6287 5785 22731 2321 5781 22732 6280 5896 22733 2519 5892 22734 2520 5783 22735 6286 5895 22736 2386 5793 22737 6331 5786 22738 6287 5785 22739 2380 5897 22740 2556 5894 22741 2557 5893 22742 2379 5891 22743 2322 5898 22744 2289 5132 22745 2519 5892 22746 6280 5896 22747 2289 5132 22748 2322 5898 22749 2340 5899 22750 2371 5125 22751 2371 5125 22752 2340 5899 22753 2372 5890 22754 2378 5126 22755 2372 5890 22756 2373 5900 22757 2380 5897 22758 2379 5891 22759 2336 5825 22760 2478 5789 22761 2479 5901 22762 2337 5902 22763 2321 5781 22764 2334 5780 22765 2336 5825 22766 2323 5903 22767 2322 5898 22768 2324 5904 22769 2341 5905 22770 2340 5899 22771 2324 5904 22772 2326 5906 22773 2342 5907 22774 2341 5905 22775 2340 5899 22776 2341 5905 22777 2373 5900 22778 2372 5890 22779 2341 5905 22780 2342 5907 22781 2374 5908 22782 2373 5900 22783 2373 5900 22784 2374 5908 22785 2381 5909 22786 2380 5897 22787 2386 5793 22788 2387 5910 22789 2392 5911 22790 2391 5788 22791 2478 5789 22792 2391 5788 22793 2392 5911 22794 2479 5901 22795 2381 5909 22796 2558 5912 22797 2556 5894 22798 2380 5897 22799 2322 5898 22800 6280 5896 22801 6281 5913 22802 2324 5904 22803 6280 5896 22804 2321 5781 22805 2323 5903 22806 6281 5913 22807 2324 5904 22808 6281 5913 22809 6282 5914 22810 2326 5906 22811 6281 5913 22812 2323 5903 22813 2325 5915 22814 6282 5914 22815 6282 5914 22816 2325 5915 22817 2327 5916 22818 6283 5917 22819 2558 5912 22820 6288 5918 22821 6286 5895 22822 2556 5894 22823 6288 5918 22824 2387 5910 22825 2386 5793 22826 6286 5895 22827 2323 5903 22828 2336 5825 22829 2337 5902 22830 2325 5915 22831 2531 5919 22832 2332 5920 22833 2620 5921 22834 2622 5922 22835 2343 5923 22836 2344 5924 22837 2376 5925 22838 2375 5926 22839 2529 5427 22840 2615 5927 22841 2623 5422 22842 2621 5424 22843 2344 5924 22844 2345 5928 22845 2377 5929 22846 2376 5925 22847 2616 5930 22848 2531 5919 22849 2622 5922 22850 2624 5403 22851 2374 5908 22852 2375 5926 22853 2382 5931 22854 2381 5909 22855 2622 5922 22856 2633 5397 22857 2634 5396 22858 2624 5403 22859 2375 5926 22860 2376 5925 22861 2383 5932 22862 2382 5931 22863 2376 5925 22864 2377 5929 22865 2384 5933 22866 2383 5932 22867 2326 5906 22868 6282 5914 22869 6283 5917 22870 2328 5934 22871 2387 5910 22872 2388 5935 22873 2393 5936 22874 2392 5911 22875 2328 5934 22876 6283 5917 22877 6284 5937 22878 2330 5938 22879 2388 5935 22880 2389 5939 22881 2394 5940 22882 2393 5936 22883 2611 5941 22884 2532 5942 22885 2617 5943 22886 2618 5944 22887 2389 5939 22888 2390 5945 22889 2395 5946 22890 2394 5940 22891 2337 5902 22892 2479 5901 22893 2480 5947 22894 2338 5948 22895 6290 5949 22896 2389 5939 22897 2388 5935 22898 6289 5950 22899 6284 5937 22900 2329 5951 22901 2331 5426 22902 6285 5952 22903 2559 5953 22904 6289 5950 22905 6288 5918 22906 2558 5912 22907 2338 5948 22908 2480 5947 22909 2481 5954 22910 2339 5955 22911 6289 5950 22912 2388 5935 22913 2387 5910 22914 6288 5918 22915 2480 5947 22916 2393 5936 22917 2394 5940 22918 2481 5954 22919 2560 5956 22920 6290 5949 22921 6289 5950 22922 2559 5953 22923 2481 5954 22924 2394 5940 22925 2395 5946 22926 2482 5957 22927 2345 5928 22928 2332 5920 22929 2531 5919 22930 2532 5942 22931 2561 5958 22932 6291 5959 22933 6290 5949 22934 2560 5956 22935 2382 5931 22936 2559 5953 22937 2558 5912 22938 2381 5909 22939 6291 5959 22940 2390 5945 22941 2389 5939 22942 6290 5949 22943 2383 5932 22944 2560 5956 22945 2559 5953 22946 2382 5931 22947 2390 5945 22948 6291 5959 22949 6292 5960 22950 2396 5961 22951 6291 5959 22952 2561 5958 22953 2562 5962 22954 6292 5960 22955 2561 5958 22956 2384 5933 22957 2397 5963 22958 2562 5962 22959 6283 5917 22960 2327 5916 22961 2329 5951 22962 6284 5937 22963 2562 5962 22964 2397 5963 22965 2425 5964 22966 2563 5965 22967 6292 5960 22968 2562 5962 22969 2563 5965 22970 6293 5966 22971 2339 5955 22972 2481 5954 22973 2482 5957 22974 2607 5967 22975 2425 5964 22976 6294 5968 22977 6293 5966 22978 2563 5965 22979 2329 5951 22980 2339 5955 22981 2607 5967 22982 2331 5426 22983 6296 5969 22984 2613 5970 22985 2612 5971 22986 6294 5968 22987 2330 5938 22988 6284 5937 22989 6285 5952 22990 2332 5920 22991 6294 5968 22992 2612 5971 22993 2610 5972 22994 6293 5966 22995 2331 5426 22996 2607 5967 22997 2530 5973 22998 2529 5427 22999 2618 5944 23000 6296 5969 23001 6294 5968 23002 2425 5964 23003 2482 5957 23004 2395 5946 23005 2608 5974 23006 2609 5975 23007 2396 5961 23008 6292 5960 23009 6293 5966 23010 2610 5972 23011 2482 5957 23012 2609 5975 23013 2530 5973 23014 2607 5967 23015 2613 5970 23016 6296 5969 23017 6297 5976 23018 2614 5977 23019 2390 5945 23020 2396 5961 23021 2608 5974 23022 2395 5946 23023 6296 5969 23024 2618 5944 23025 2617 5943 23026 6297 5976 23027 2377 5929 23028 2611 5941 23029 2397 5963 23030 2384 5933 23031 2614 5977 23032 6297 5976 23033 6295 5978 23034 2615 5927 23035 2345 5928 23036 2532 5942 23037 2611 5941 23038 2377 5929 23039 6297 5976 23040 2617 5943 23041 2616 5930 23042 6295 5978 23043 2396 5961 23044 2610 5972 23045 2612 5971 23046 2608 5974 23047 2332 5920 23048 6285 5952 23049 6298 5979 23050 2620 5921 23051 2530 5973 23052 2609 5975 23053 2613 5970 23054 2614 5977 23055 2325 5915 23056 2337 5902 23057 2338 5948 23058 2327 5916 23059 2479 5901 23060 2392 5911 23061 2393 5936 23062 2480 5947 23063 6285 5952 23064 2331 5426 23065 2619 5425 23066 6298 5979 23067 2608 5974 23068 2612 5971 23069 2613 5970 23070 2609 5975 23071 2327 5916 23072 2338 5948 23073 2339 5955 23074 2329 5951 23075 2384 5933 23076 2561 5958 23077 2560 5956 23078 2383 5932 23079 2615 5927 23080 6295 5978 23081 6299 5402 23082 2623 5422 23083 2529 5427 23084 2530 5973 23085 2614 5977 23086 2615 5927 23087 2326 5906 23088 2328 5934 23089 2343 5923 23090 2342 5907 23091 6295 5978 23092 2616 5930 23093 2624 5403 23094 6299 5402 23095 2532 5942 23096 2531 5919 23097 2616 5930 23098 2617 5943 23099 2328 5934 23100 2330 5938 23101 2344 5924 23102 2343 5923 23103 6298 5979 23104 2619 5425 23105 2631 5415 23106 6302 5412 23107 2620 5921 23108 6298 5979 23109 6302 5412 23110 2632 5411 23111 2622 5922 23112 2620 5921 23113 2632 5411 23114 2633 5397 23115 2330 5938 23116 2332 5920 23117 2345 5928 23118 2344 5924 23119 2397 5963 23120 2611 5941 23121 2618 5944 23122 2425 5964 23123 2342 5907 23124 2343 5923 23125 2375 5926 23126 2374 5908 23127 1289 5980 23128 3724 5981 23129 3741 5982 23130 3708 5983 23131 1465 5984 23132 1469 5985 23133 1472 5986 23134 1466 5987 23135 1272 5988 23136 3722 5989 23137 3721 5990 23138 1468 5991 23139 3712 5992 23140 1665 5993 23141 1609 5994 23142 3710 5995 23143 1297 5996 23144 3720 5997 23145 3721 5990 23146 1477 5998 23147 3710 5995 23148 1609 5994 23149 2199 5999 23150 3715 6000 23151 1469 5985 23152 1470 6001 23153 1471 6002 23154 1472 5986 23155 3709 6003 23156 1288 6004 23157 1289 5980 23158 3708 5983 23159 1470 6001 23160 3710 5995 23161 3715 6000 23162 1610 6005 23163 1453 6006 23164 1465 5984 23165 1466 5987 23166 1454 6007 23167 3722 5989 23168 1474 6008 23169 1477 5998 23170 3721 5990 23171 3713 6009 23172 1692 6010 23173 1691 6011 23174 3711 6012 23175 1280 6013 23176 3709 6003 23177 3708 5983 23178 1281 6014 23179 1453 6006 23180 3713 6009 23181 3711 6012 23182 1465 5984 23183 3741 5982 23184 3724 5981 23185 3268 6015 23186 3732 6016 23187 1453 6006 23188 1454 6007 23189 1463 6017 23190 1464 6018 23191 3723 6019 23192 1473 6020 23193 1474 6008 23194 3722 5989 23195 3713 6009 23196 1453 6006 23197 1464 6018 23198 3720 5997 23199 3711 6012 23200 1691 6011 23201 1665 5993 23202 3712 5992 23203 1273 6021 23204 3723 6019 23205 3722 5989 23206 1272 5988 23207 1473 6020 23208 3723 6019 23209 3724 5981 23210 1289 5980 23211 3723 6019 23212 1273 6021 23213 3268 6015 23214 3724 5981 23215 1725 6022 23216 3714 6023 23217 3709 6003 23218 1280 6013 23219 1465 5984 23220 3711 6012 23221 3712 5992 23222 1469 5985 23223 1475 6024 23224 1289 5980 23225 1288 6004 23226 1690 6025 23227 3714 6023 23228 1688 6026 23229 1288 6004 23230 3709 6003 23231 1692 6010 23232 3713 6009 23233 3720 5997 23234 1297 5996 23235 3715 6000 23236 2199 5999 23237 1688 6026 23238 3714 6023 23239 1610 6005 23240 3715 6000 23241 3714 6023 23242 1725 6022 23243 3720 5997 23244 1464 6018 23245 1468 5991 23246 3721 5990 23247 1475 6024 23248 1476 6027 23249 1473 6020 23250 1289 5980 23251 1469 5985 23252 3712 5992 23253 3710 5995 23254 1470 6001 23255 1719 6028 23256 1709 6029 23257 1696 6030 23258 1723 6031 23259 1697 6032 23260 1698 6033 23261 1703 6034 23262 1702 6035 23263 1729 6036 23264 1705 6037 23265 1703 6034 23266 1730 6038 23267 1286 6039 23268 1730 6038 23269 1703 6034 23270 1698 6033 23271 1287 6040 23272 1686 6041 23273 1691 6011 23274 1692 6010 23275 1294 6042 23276 1686 6041 23277 1687 6043 23278 1295 6044 23279 1712 6045 23280 1713 6046 23281 1707 6047 23282 1706 6048 23283 1293 6049 23284 1714 6050 23285 1712 6045 23286 1720 6051 23287 1286 6039 23288 1698 6033 23289 1700 6052 23290 1687 6043 23291 1291 6053 23292 1294 6042 23293 1295 6044 23294 1292 6054 23295 1286 6039 23296 1287 6040 23297 1296 6055 23298 1730 6038 23299 1476 6027 23300 1478 6056 23301 1474 6008 23302 1473 6020 23303 1479 6057 23304 1478 6056 23305 1728 6058 23306 1729 6036 23307 1728 6058 23308 1695 6059 23309 1705 6037 23310 1729 6036 23311 1475 6024 23312 1690 6025 23313 1718 6060 23314 1719 6028 23315 1290 6061 23316 1291 6053 23317 1292 6054 23318 1293 6049 23319 1290 6061 23320 1689 6062 23321 1688 6026 23322 2199 5999 23323 1693 6063 23324 1694 6064 23325 1695 6059 23326 1696 6030 23327 1709 6029 23328 1708 6065 23329 1693 6063 23330 1696 6030 23331 1687 6043 23332 1700 6052 23333 1699 6066 23334 1295 6044 23335 1294 6042 23336 1291 6053 23337 1609 5994 23338 1665 5993 23339 1290 6061 23340 2199 5999 23341 1609 5994 23342 1291 6053 23343 1698 6033 23344 1697 6032 23345 1701 6067 23346 1700 6052 23347 1716 6068 23348 1717 6069 23349 1699 6066 23350 2198 6070 23351 1717 6069 23352 1716 6068 23353 1715 6071 23354 1714 6050 23355 1295 6044 23356 1699 6066 23357 1717 6069 23358 1292 6054 23359 1476 6027 23360 1475 6024 23361 1719 6028 23362 1723 6031 23363 1296 6055 23364 1287 6040 23365 1692 6010 23366 1297 5996 23367 1690 6025 23368 1689 6062 23369 1720 6051 23370 1718 6060 23371 1689 6062 23372 1690 6025 23373 1288 6004 23374 1688 6026 23375 1479 6057 23376 1296 6055 23377 1297 5996 23378 1477 5998 23379 1704 6072 23380 1702 6035 23381 1703 6034 23382 1705 6037 23383 1706 6048 23384 1707 6047 23385 1708 6065 23386 1709 6029 23387 1296 6055 23388 1479 6057 23389 1729 6036 23390 1730 6038 23391 1714 6050 23392 1715 6071 23393 1713 6046 23394 1712 6045 23395 1478 6056 23396 1479 6057 23397 1477 5998 23398 1474 6008 23399 1718 6060 23400 1706 6048 23401 1709 6029 23402 1719 6028 23403 1689 6062 23404 1290 6061 23405 1293 6049 23406 1720 6051 23407 1699 6066 23408 1700 6052 23409 1701 6067 23410 2198 6070 23411 1686 6041 23412 1287 6040 23413 1286 6039 23414 1687 6043 23415 1686 6041 23416 1294 6042 23417 1665 5993 23418 1691 6011 23419 1704 6072 23420 1705 6037 23421 1695 6059 23422 1694 6064 23423 1292 6054 23424 1717 6069 23425 1714 6050 23426 1293 6049 23427 1720 6051 23428 1712 6045 23429 1706 6048 23430 1718 6060 23431 1723 6031 23432 1696 6030 23433 1695 6059 23434 1728 6058 23435 1478 6056 23436 1476 6027 23437 1723 6031 23438 1728 6058 23439 1746 6073 23440 2192 6074 23441 1753 6075 23442 1747 6076 23443 1744 6077 23444 1745 6078 23445 1743 6079 23446 1735 6080 23447 1642 6081 23448 1693 6063 23449 1708 6065 23450 1748 6082 23451 1749 6083 23452 1751 6084 23453 1648 6085 23454 1646 6086 23455 1744 6077 23456 1735 6080 23457 1576 6087 23458 1575 6088 23459 2193 6089 23460 1754 6090 23461 1753 6075 23462 2192 6074 23463 1758 6091 23464 2196 6092 23465 2195 6093 23466 1757 6094 23467 1745 6078 23468 1752 6095 23469 2192 6074 23470 1746 6073 23471 1641 6096 23472 1761 6097 23473 1704 6072 23474 1694 6064 23475 1744 6077 23476 1751 6084 23477 1752 6095 23478 1745 6078 23479 1566 6098 23480 1568 6099 23481 1573 6100 23482 1571 6101 23483 2196 6092 23484 1762 6102 23485 1761 6097 23486 2195 6093 23487 1574 6103 23488 1575 6088 23489 1576 6087 23490 1577 6104 23491 1567 6105 23492 1701 6067 23493 1697 6032 23494 1763 6106 23495 1574 6103 23496 1647 6107 23497 1648 6085 23498 1575 6088 23499 1569 6108 23500 1567 6105 23501 1566 6098 23502 1570 6109 23503 1702 6035 23504 1704 6072 23505 1761 6097 23506 1762 6102 23507 1750 6110 23508 1756 6111 23509 1755 6112 23510 1749 6083 23511 1642 6081 23512 2189 6113 23513 2190 6114 23514 1641 6096 23515 2194 6115 23516 1759 6116 23517 1754 6090 23518 2193 6089 23519 1760 6117 23520 2197 6118 23521 2196 6092 23522 1758 6091 23523 1715 6071 23524 1716 6068 23525 1747 6076 23526 1753 6075 23527 1756 6111 23528 2194 6115 23529 2193 6089 23530 1755 6112 23531 1697 6032 23532 1702 6035 23533 1762 6102 23534 1763 6106 23535 2189 6113 23536 1645 6119 23537 1644 6120 23538 2190 6114 23539 1746 6073 23540 1570 6109 23541 1572 6121 23542 1742 6122 23543 1750 6110 23544 2191 6123 23545 2194 6115 23546 1756 6111 23547 1757 6094 23548 1644 6120 23549 1643 6124 23550 1758 6091 23551 2197 6118 23552 1763 6106 23553 1762 6102 23554 2196 6092 23555 1643 6124 23556 1644 6120 23557 1645 6119 23558 1646 6086 23559 1572 6121 23560 1571 6101 23561 1580 6125 23562 1810 6126 23563 1569 6108 23564 1747 6076 23565 1716 6068 23566 2198 6070 23567 1569 6108 23568 1570 6109 23569 1746 6073 23570 1747 6076 23571 1707 6047 23572 1759 6116 23573 1748 6082 23574 1708 6065 23575 1752 6095 23576 1751 6084 23577 1749 6083 23578 1755 6112 23579 1572 6121 23580 1810 6126 23581 1741 6127 23582 1742 6122 23583 1748 6082 23584 2191 6123 23585 2189 6113 23586 1642 6081 23587 2191 6123 23588 1748 6082 23589 1759 6116 23590 2194 6115 23591 1566 6098 23592 1567 6105 23593 1763 6106 23594 2197 6118 23595 1744 6077 23596 1575 6088 23597 1648 6085 23598 1751 6084 23599 1567 6105 23600 1569 6108 23601 2198 6070 23602 1701 6067 23603 1707 6047 23604 1713 6046 23605 1754 6090 23606 1759 6116 23607 1760 6117 23608 1758 6091 23609 1643 6124 23610 1647 6107 23611 1713 6046 23612 1715 6071 23613 1753 6075 23614 1754 6090 23615 1746 6073 23616 1742 6122 23617 1743 6079 23618 1745 6078 23619 2191 6123 23620 1750 6110 23621 1645 6119 23622 2189 6113 23623 1757 6094 23624 2195 6093 23625 2190 6114 23626 1644 6120 23627 1574 6103 23628 1568 6099 23629 1760 6117 23630 1647 6107 23631 1566 6098 23632 2197 6118 23633 1760 6117 23634 1568 6099 23635 1643 6124 23636 1646 6086 23637 1648 6085 23638 1647 6107 23639 1641 6096 23640 1694 6064 23641 1693 6063 23642 1642 6081 23643 1566 6098 23644 1571 6101 23645 1572 6121 23646 1570 6109 23647 1755 6112 23648 2193 6089 23649 2192 6074 23650 1752 6095 23651 2195 6093 23652 1761 6097 23653 1641 6096 23654 2190 6114 23655 1574 6103 23656 1577 6104 23657 1573 6100 23658 1568 6099 23659 1749 6083 23660 1646 6086 23661 1645 6119 23662 1750 6110 23663 3387 6128 23664 3542 6129 23665 3541 6130 23666 3417 6131 23667 3545 6132 23668 3387 6128 23669 3417 6131 23670 3543 6133 23671 3516 6134 23672 3400 6135 23673 3405 6136 23674 3515 6137 23675 3405 6136 23676 3514 6138 23677 3517 6139 23678 3406 6140 23679 3515 6137 23680 3405 6136 23681 3406 6140 23682 3518 6141 23683 3485 6142 23684 3541 6130 23685 3542 6129 23686 3540 6143 23687 3483 6144 23688 3544 6145 23689 3545 6132 23690 3543 6133 23691 3484 6146 23692 3450 6147 23693 3449 6148 23694 3454 6149 23695 1500 6150 23696 1501 6151 23697 1503 6152 23698 1504 6153 23699 3518 6141 23700 3454 6149 23701 3449 6148 23702 3515 6137 23703 3514 6138 23704 3426 6154 23705 3427 6155 23706 3517 6139 23707 3438 6156 23708 3439 6157 23709 3544 6145 23710 3483 6144 23711 3484 6146 23712 3485 6142 23713 3540 6143 23714 3450 6147 23715 3439 6157 23716 3438 6156 23717 3427 6155 23718 3426 6154 23719 1711 6158 23720 3718 6159 23721 3719 6160 23722 1506 6161 23723 3718 6159 23724 1640 6162 23725 1684 6163 23726 3719 6160 23727 1505 6164 23728 3543 6133 23729 3417 6131 23730 3353 6165 23731 1503 6152 23732 3541 6130 23733 3485 6142 23734 1504 6153 23735 1498 6166 23736 3483 6144 23737 3543 6133 23738 1505 6164 23739 1504 6153 23740 3485 6142 23741 3484 6146 23742 1683 6167 23743 1683 6167 23744 3484 6146 23745 3454 6149 23746 1790 6168 23747 1499 6169 23748 1498 6166 23749 1505 6164 23750 1502 6170 23751 1684 6163 23752 1790 6168 23753 3454 6149 23754 3518 6141 23755 1684 6163 23756 3518 6141 23757 3406 6140 23758 3719 6160 23759 1711 6158 23760 1506 6161 23761 1507 6171 23762 1722 6172 23763 1506 6161 23764 3719 6160 23765 3406 6140 23766 3517 6139 23767 1421 6173 23768 1790 6168 23769 1684 6163 23770 1640 6162 23771 1503 6152 23772 3353 6165 23773 3417 6131 23774 3541 6130 23775 1506 6161 23776 3517 6139 23777 3427 6155 23778 1507 6171 23779 1421 6173 23780 1422 6174 23781 1683 6167 23782 1790 6168 23783 1497 6175 23784 1507 6171 23785 3427 6155 23786 3438 6156 23787 1422 6174 23788 1791 6176 23789 1504 6153 23790 1683 6167 23791 3542 6129 23792 3539 6177 23793 3538 6178 23794 3540 6143 23795 1497 6175 23796 3438 6156 23797 3483 6144 23798 1498 6166 23799 1497 6175 23800 1726 6179 23801 1722 6172 23802 1507 6171 23803 1499 6169 23804 1855 6180 23805 1853 6181 23806 1726 6179 23807 1500 6150 23808 1504 6153 23809 1791 6176 23810 2200 6182 23811 1497 6175 23812 1498 6166 23813 1499 6169 23814 1726 6179 23815 1501 6151 23816 3352 6183 23817 3353 6165 23818 1503 6152 23819 1502 6170 23820 1505 6164 23821 3353 6165 23822 3352 6183 23823 3450 6147 23824 3448 6184 23825 3447 6185 23826 3449 6148 23827 3540 6143 23828 3538 6178 23829 3448 6184 23830 3450 6147 23831 3542 6129 23832 3387 6128 23833 3388 6186 23834 3539 6177 23835 3516 6134 23836 3515 6137 23837 3449 6148 23838 3447 6185 23839 3487 6187 23840 3488 6188 23841 3530 6189 23842 3466 6190 23843 3513 6191 23844 3385 6192 23845 3386 6193 23846 3425 6194 23847 3490 6195 23848 3491 6196 23849 3465 6197 23850 3525 6198 23851 3491 6196 23852 3385 6192 23853 3428 6199 23854 3465 6197 23855 3487 6187 23856 3466 6190 23857 3456 6200 23858 3455 6201 23859 3492 6202 23860 3386 6193 23861 3385 6192 23862 3491 6196 23863 3488 6188 23864 3434 6203 23865 3529 6204 23866 3530 6189 23867 3486 6205 23868 3487 6187 23869 3455 6201 23870 3453 6206 23871 3492 6202 23872 3440 6207 23873 3425 6194 23874 3386 6193 23875 3448 6184 23876 3486 6205 23877 3453 6206 23878 3447 6185 23879 3545 6132 23880 3481 6208 23881 3388 6186 23882 3387 6128 23883 3466 6190 23884 3446 6209 23885 3445 6210 23886 3456 6200 23887 3545 6132 23888 3544 6145 23889 3480 6211 23890 3481 6208 23891 3478 6212 23892 3456 6200 23893 3445 6210 23894 3511 6213 23895 3544 6145 23896 3439 6157 23897 3440 6207 23898 3480 6211 23899 3492 6202 23900 3493 6214 23901 3480 6211 23902 3440 6207 23903 3440 6207 23904 3439 6157 23905 3426 6154 23906 3425 6194 23907 3490 6195 23908 3525 6198 23909 3526 6215 23910 3433 6216 23911 3514 6138 23912 3513 6191 23913 3425 6194 23914 3426 6154 23915 3486 6205 23916 3448 6184 23917 3538 6178 23918 3489 6217 23919 3516 6134 23920 3447 6185 23921 3453 6206 23922 3455 6201 23923 3466 6190 23924 3530 6189 23925 3533 6218 23926 3446 6209 23927 3388 6186 23928 3481 6208 23929 3482 6219 23930 3389 6220 23931 3539 6177 23932 3388 6186 23933 3389 6220 23934 3537 6221 23935 3488 6188 23936 3489 6217 23937 3537 6221 23938 3434 6203 23939 3389 6220 23940 3482 6219 23941 3433 6216 23942 3390 6222 23943 3537 6221 23944 3389 6220 23945 3390 6222 23946 3434 6203 23947 3493 6214 23948 3490 6195 23949 3433 6216 23950 3482 6219 23951 3390 6222 23952 3433 6216 23953 3526 6215 23954 3391 6223 23955 3465 6197 23956 3437 6224 23957 3524 6225 23958 3525 6198 23959 3437 6224 23960 3465 6197 23961 3428 6199 23962 3429 6226 23963 3434 6203 23964 3390 6222 23965 3391 6223 23966 3529 6204 23967 3509 6227 23968 3429 6226 23969 3428 6199 23970 3479 6228 23971 3391 6223 23972 3526 6215 23973 3528 6229 23974 3392 6230 23975 3529 6204 23976 3391 6223 23977 3392 6230 23978 3532 6231 23979 3392 6230 23980 3528 6229 23981 3527 6232 23982 3393 6233 23983 3532 6231 23984 3392 6230 23985 3393 6233 23986 3531 6234 23987 3398 6235 23988 3509 6227 23989 3479 6228 23990 3399 6236 23991 3530 6189 23992 3529 6204 23993 3532 6231 23994 3533 6218 23995 3511 6213 23996 3398 6235 23997 3399 6236 23998 3478 6212 23999 3400 6135 24000 3513 6191 24001 3514 6138 24002 3405 6136 24003 3511 6213 24004 3445 6210 24005 3441 6237 24006 3443 6238 24007 3534 6239 24008 3533 6218 24009 3532 6231 24010 3531 6234 24011 3522 6240 24012 3527 6232 24013 3528 6229 24014 3524 6225 24015 3446 6209 24016 3442 6241 24017 3441 6237 24018 3445 6210 24019 3534 6239 24020 3442 6241 24021 3446 6209 24022 3533 6218 24023 3525 6198 24024 3524 6225 24025 3528 6229 24026 3526 6215 24027 3493 6214 24028 3492 6202 24029 3491 6196 24030 3490 6195 24031 3513 6191 24032 3400 6135 24033 3399 6236 24034 3479 6228 24035 3489 6217 24036 3488 6188 24037 3487 6187 24038 3486 6205 24039 3516 6134 24040 3478 6212 24041 3399 6236 24042 3400 6135 24043 3489 6217 24044 3538 6178 24045 3539 6177 24046 3537 6221 24047 3516 6134 24048 3455 6201 24049 3456 6200 24050 3478 6212 24051 3493 6214 24052 3482 6219 24053 3481 6208 24054 3480 6211 24055 3513 6191 24056 3479 6228 24057 3428 6199 24058 3385 6192 24059 3435 6242 24060 3436 6243 24061 3430 6244 24062 3432 6245 24063 3408 6246 24064 3461 6247 24065 3473 6248 24066 3404 6249 24067 3494 6250 24068 3444 6251 24069 3519 6252 24070 3535 6253 24071 3462 6254 24072 3408 6246 24073 3404 6249 24074 3474 6255 24075 3534 6239 24076 3531 6234 24077 3520 6256 24078 3519 6252 24079 3507 6257 24080 3452 6258 24081 3508 6259 24082 3418 6260 24083 3505 6261 24084 3424 6262 24085 3506 6263 24086 3419 6264 24087 3504 6265 24088 3473 6248 24089 3475 6266 24090 3503 6267 24091 3522 6240 24092 3524 6225 24093 3437 6224 24094 3436 6243 24095 3496 6268 24096 3535 6253 24097 3536 6269 24098 3476 6270 24099 3436 6243 24100 3437 6224 24101 3429 6226 24102 3430 6244 24103 3503 6267 24104 3475 6266 24105 3477 6271 24106 3500 6272 24107 3509 6227 24108 3432 6245 24109 3430 6244 24110 3429 6226 24111 3500 6272 24112 3499 6273 24113 3502 6274 24114 3503 6267 24115 3522 6240 24116 3521 6275 24117 3523 6276 24118 3527 6232 24119 3495 6277 24120 3497 6278 24121 3508 6259 24122 3452 6258 24123 3522 6240 24124 3436 6243 24125 3435 6242 24126 3521 6275 24127 3504 6265 24128 3503 6267 24129 3502 6274 24130 3501 6279 24131 3502 6274 24132 3499 6273 24133 3431 6280 24134 3424 6262 24135 3535 6253 24136 3496 6268 24137 3495 6277 24138 3494 6250 24139 3494 6250 24140 3495 6277 24141 3452 6258 24142 3451 6281 24143 3499 6273 24144 3500 6272 24145 3521 6275 24146 3435 6242 24147 3509 6227 24148 3510 6282 24149 3431 6280 24150 3432 6245 24151 3393 6233 24152 3527 6232 24153 3523 6276 24154 3394 6283 24155 3498 6284 24156 3497 6278 24157 3495 6277 24158 3496 6268 24159 3531 6234 24160 3393 6233 24161 3394 6283 24162 3520 6256 24163 3394 6283 24164 3523 6276 24165 3477 6271 24166 3416 6285 24167 3520 6256 24168 3394 6283 24169 3416 6285 24170 3536 6269 24171 3506 6263 24172 3424 6262 24173 3431 6280 24174 3510 6282 24175 3419 6264 24176 3395 6286 24177 3401 6287 24178 3505 6261 24179 3535 6253 24180 3519 6252 24181 3520 6256 24182 3536 6269 24183 3395 6286 24184 3419 6264 24185 3506 6263 24186 3396 6288 24187 3442 6241 24188 3444 6251 24189 3443 6238 24190 3441 6237 24191 3418 6260 24192 3395 6286 24193 3396 6288 24194 3507 6257 24195 3534 6239 24196 3519 6252 24197 3444 6251 24198 3442 6241 24199 3396 6288 24200 3506 6263 24201 3510 6282 24202 3397 6289 24203 3501 6279 24204 3502 6274 24205 3424 6262 24206 3505 6261 24207 3507 6257 24208 3396 6288 24209 3397 6289 24210 3512 6290 24211 3395 6286 24212 3418 6260 24213 3508 6259 24214 3401 6287 24215 3397 6289 24216 3510 6282 24217 3509 6227 24218 3398 6235 24219 3500 6272 24220 3477 6271 24221 3523 6276 24222 3521 6275 24223 3512 6290 24224 3397 6289 24225 3398 6235 24226 3511 6213 24227 3512 6290 24228 3451 6281 24229 3452 6258 24230 3507 6257 24231 3402 6291 24232 3501 6279 24233 3505 6261 24234 3401 6287 24235 3499 6273 24236 3435 6242 24237 3432 6245 24238 3431 6280 24239 3497 6278 24240 3402 6291 24241 3401 6287 24242 3508 6259 24243 3444 6251 24244 3494 6250 24245 3451 6281 24246 3443 6238 24247 3402 6291 24248 3497 6278 24249 3498 6284 24250 3403 6292 24251 3501 6279 24252 3402 6291 24253 3403 6292 24254 3504 6265 24255 3496 6268 24256 3476 6270 24257 3474 6255 24258 3498 6284 24259 3403 6292 24260 3498 6284 24261 3474 6255 24262 3404 6249 24263 3512 6290 24264 3511 6213 24265 3443 6238 24266 3451 6281 24267 3504 6265 24268 3403 6292 24269 3404 6249 24270 3473 6248 24271 1328 6293 24272 1327 6294 24273 1521 6295 24274 1423 6296 24275 1329 6297 24276 1330 6298 24277 1399 6299 24278 1401 6300 24279 1510 6301 24280 1509 6302 24281 1299 6303 24282 1364 6304 24283 1301 6305 24284 1304 6306 24285 1305 6307 24286 1303 6308 24287 1361 6309 24288 1398 6310 24289 1399 6299 24290 1393 6311 24291 1410 6312 24292 1394 6313 24293 1326 6314 24294 1426 6315 24295 1325 6316 24296 3224 6317 24297 3222 6318 24298 1326 6314 24299 3249 6319 24300 1301 6305 24301 1302 6320 24302 3211 6321 24303 1331 6322 24304 1332 6323 24305 1523 6324 24306 1522 6325 24307 1410 6312 24308 1411 6326 24309 1362 6327 24310 1394 6313 24311 1303 6308 24312 1305 6307 24313 1400 6328 24314 1398 6310 24315 1419 6329 24316 1423 6296 24317 1424 6330 24318 1420 6331 24319 1415 6332 24320 2203 6333 24321 1792 6334 24322 1418 6335 24323 3224 6317 24324 1327 6294 24325 1328 6293 24326 3222 6318 24327 1298 6336 24328 3249 6319 24329 3211 6321 24330 1300 6337 24331 1418 6335 24332 1364 6304 24333 1300 6337 24334 1416 6338 24335 1791 6176 24336 1792 6334 24337 2203 6333 24338 2200 6182 24339 1521 6295 24340 1510 6301 24341 1424 6330 24342 1423 6296 24343 1508 6339 24344 1509 6302 24345 1522 6325 24346 1523 6324 24347 1398 6310 24348 1400 6328 24349 1401 6300 24350 1399 6299 24351 1362 6327 24352 1361 6309 24353 1393 6311 24354 1394 6313 24355 1364 6304 24356 1299 6303 24357 1298 6336 24358 1300 6337 24359 1363 6340 24360 1681 6341 24361 2207 6342 24362 1414 6343 24363 1330 6298 24364 3225 6344 24365 3224 6317 24366 1325 6316 24367 1420 6331 24368 1792 6334 24369 1791 6176 24370 1422 6174 24371 1509 6302 24372 1510 6301 24373 1521 6295 24374 1522 6325 24375 1299 6303 24376 1509 6302 24377 1508 6339 24378 1367 6345 24379 1417 6346 24380 1363 6340 24381 1414 6343 24382 1412 6347 24383 1325 6316 24384 1393 6311 24385 1399 6299 24386 1330 6298 24387 1418 6335 24388 1424 6330 24389 1510 6301 24390 1364 6304 24391 1412 6347 24392 3208 6348 24393 3210 6349 24394 1417 6346 24395 3225 6344 24396 1331 6322 24397 1327 6294 24398 3224 6317 24399 1419 6329 24400 1420 6331 24401 1422 6174 24402 1421 6173 24403 1298 6336 24404 1299 6303 24405 1367 6345 24406 1366 6350 24407 1360 6351 24408 1361 6309 24409 1362 6327 24410 1363 6340 24411 3208 6348 24412 1413 6352 24413 1416 6338 24414 3210 6349 24415 1329 6297 24416 3236 6353 24417 3225 6344 24418 1330 6298 24419 1681 6341 24420 1682 6354 24421 2210 6355 24422 2207 6342 24423 1363 6340 24424 1417 6346 24425 1302 6320 24426 1360 6351 24427 1361 6309 24428 1360 6351 24429 1303 6308 24430 1398 6310 24431 1298 6336 24432 1366 6350 24433 3248 6356 24434 3249 6319 24435 1424 6330 24436 1418 6335 24437 1792 6334 24438 1420 6331 24439 1360 6351 24440 1302 6320 24441 1301 6305 24442 1303 6308 24443 1300 6337 24444 3211 6321 24445 3210 6349 24446 1416 6338 24447 1325 6316 24448 1326 6314 24449 1394 6313 24450 1393 6311 24451 3236 6353 24452 1332 6323 24453 1331 6322 24454 3225 6344 24455 1331 6322 24456 1522 6325 24457 1521 6295 24458 1327 6294 24459 1409 6357 24460 1682 6354 24461 1681 6341 24462 1411 6326 24463 1301 6305 24464 3249 6319 24465 3248 6356 24466 1304 6306 24467 1363 6340 24468 1362 6327 24469 1411 6326 24470 1681 6341 24471 1415 6332 24472 1418 6335 24473 1416 6338 24474 1413 6352 24475 3211 6321 24476 1302 6320 24477 1417 6346 24478 3210 6349 24479 1352 6358 24480 1365 6359 24481 1366 6350 24482 1367 6345 24483 1309 6360 24484 1406 6361 24485 1402 6362 24486 1310 6363 24487 3238 6364 24488 1336 6365 24489 1368 6366 24490 3237 6367 24491 1306 6368 24492 3247 6369 24493 3246 6370 24494 1514 6371 24495 1357 6372 24496 1356 6373 24497 1306 6368 24498 1514 6371 24499 1354 6374 24500 3355 6375 24501 1520 6376 24502 1382 6377 24503 1381 6378 24504 1402 6362 24505 1403 6379 24506 1391 6380 24507 1356 6373 24508 1305 6307 24509 1304 6306 24510 1306 6368 24511 1318 6381 24512 1319 6382 24513 1315 6383 24514 1317 6384 24515 1321 6385 24516 1319 6382 24517 1511 6386 24518 1512 6387 24519 1311 6388 24520 3244 6389 24521 3243 6390 24522 1312 6391 24523 3247 6369 24524 1365 6359 24525 1515 6392 24526 3246 6370 24527 1357 6372 24528 1514 6371 24529 1314 6393 24530 1313 6394 24531 1332 6323 24532 3355 6375 24533 3354 6395 24534 1523 6324 24535 1400 6328 24536 1359 6396 24537 1395 6397 24538 1401 6300 24539 1309 6360 24540 1310 6363 24541 1311 6388 24542 1312 6391 24543 1356 6373 24544 1357 6372 24545 1358 6398 24546 1359 6396 24547 1402 6362 24548 1406 6361 24549 1407 6399 24550 1403 6379 24551 3244 6389 24552 1315 6383 24553 1316 6400 24554 3243 6390 24555 1353 6401 24556 1352 6358 24557 1367 6345 24558 1508 6339 24559 1304 6306 24560 3248 6356 24561 3247 6369 24562 1306 6368 24563 1381 6378 24564 1313 6394 24565 1310 6363 24566 1402 6362 24567 1332 6323 24568 1368 6366 24569 1520 6376 24570 3355 6375 24571 1359 6396 24572 1358 6398 24573 1392 6402 24574 1395 6397 24575 1352 6358 24576 1353 6401 24577 1354 6374 24578 1355 6403 24579 1321 6385 24580 1316 6400 24581 1315 6383 24582 1319 6382 24583 1314 6393 24584 3245 6404 24585 3244 6389 24586 1311 6388 24587 1336 6365 24588 1519 6405 24589 1520 6376 24590 1368 6366 24591 3248 6356 24592 1366 6350 24593 1365 6359 24594 3247 6369 24595 1359 6396 24596 1400 6328 24597 1305 6307 24598 1356 6373 24599 1329 6297 24600 1392 6402 24601 1391 6380 24602 1369 6406 24603 1358 6398 24604 1381 6378 24605 1391 6380 24606 1392 6402 24607 3245 6404 24608 1317 6384 24609 1315 6383 24610 3244 6389 24611 1511 6386 24612 1382 6377 24613 1520 6376 24614 1519 6405 24615 1329 6297 24616 1401 6300 24617 1395 6397 24618 1392 6402 24619 1382 6377 24620 1511 6386 24621 1319 6382 24622 1318 6381 24623 1329 6297 24624 1369 6406 24625 3237 6367 24626 3236 6353 24627 1355 6403 24628 1354 6374 24629 1382 6377 24630 1318 6381 24631 1313 6394 24632 1314 6393 24633 1311 6388 24634 1310 6363 24635 1336 6365 24636 1516 6407 24637 1518 6408 24638 1519 6405 24639 1514 6371 24640 3246 6370 24641 3245 6404 24642 1314 6393 24643 1352 6358 24644 1355 6403 24645 1515 6392 24646 1365 6359 24647 1353 6401 24648 1508 6339 24649 1523 6324 24650 3354 6395 24651 1358 6398 24652 1357 6372 24653 1313 6394 24654 1381 6378 24655 1512 6387 24656 1511 6386 24657 1519 6405 24658 1518 6408 24659 1334 6409 24660 3238 6364 24661 3237 6367 24662 1369 6406 24663 3246 6370 24664 1515 6392 24665 1317 6384 24666 3245 6404 24667 1355 6403 24668 1318 6381 24669 1317 6384 24670 1515 6392 24671 1353 6401 24672 3354 6395 24673 3355 6375 24674 1354 6374 24675 1369 6406 24676 1391 6380 24677 1403 6379 24678 1334 6409 24679 1332 6323 24680 3236 6353 24681 3237 6367 24682 1368 6366 24683 3239 6410 24684 1335 6411 24685 1336 6365 24686 3238 6364 24687 1309 6360 24688 1324 6412 24689 1404 6413 24690 1406 6361 24691 1323 6414 24692 3242 6415 24693 3212 6416 24694 1307 6417 24695 1404 6413 24696 1351 6418 24697 1397 6419 24698 1405 6420 24699 1347 6421 24700 1348 6422 24701 1350 6423 24702 1349 6424 24703 1342 6425 24704 1372 6426 24705 1370 6427 24706 1345 6428 24707 3233 6429 24708 1347 6421 24709 1373 6430 24710 3232 6431 24711 3242 6415 24712 1320 6432 24713 1370 6427 24714 3212 6416 24715 1344 6433 24716 1343 6434 24717 1524 6435 24718 1340 6436 24719 1351 6418 24720 1350 6423 24721 1396 6437 24722 1397 6419 24723 1338 6438 24724 3240 6439 24725 3239 6410 24726 1333 6440 24727 1351 6418 24728 1404 6413 24729 1324 6412 24730 1308 6441 24731 1341 6442 24732 1374 6443 24733 1372 6426 24734 1342 6425 24735 1308 6441 24736 1349 6424 24737 1350 6423 24738 1351 6418 24739 1349 6424 24740 1308 6441 24741 1307 6417 24742 1371 6444 24743 1339 6445 24744 1524 6435 24745 1517 6446 24746 1335 6411 24747 1308 6441 24748 1324 6412 24749 1323 6414 24750 1307 6417 24751 1346 6447 24752 1345 6428 24753 1322 6448 24754 1513 6449 24755 1312 6391 24756 3243 6390 24757 3242 6415 24758 1323 6414 24759 1350 6423 24760 1348 6422 24761 1337 6450 24762 1396 6437 24763 1345 6428 24764 1346 6447 24765 1343 6434 24766 1342 6425 24767 1340 6436 24768 1524 6435 24769 1339 6445 24770 2231 6451 24771 3234 6452 24772 1348 6422 24773 1347 6421 24774 3233 6429 24775 3243 6390 24776 1316 6400 24777 1320 6432 24778 3242 6415 24779 1334 6409 24780 1403 6379 24781 1407 6399 24782 1405 6420 24783 1338 6438 24784 1396 6437 24785 1337 6450 24786 2232 6453 24787 1344 6433 24788 3234 6452 24789 3233 6429 24790 1341 6442 24791 1343 6434 24792 1346 6447 24793 1517 6446 24794 1524 6435 24795 1341 6442 24796 1342 6425 24797 1343 6434 24798 1344 6433 24799 3241 6454 24800 2231 6451 24801 1339 6445 24802 3240 6439 24803 1333 6440 24804 1334 6409 24805 1405 6420 24806 1397 6419 24807 1349 6424 24808 1371 6444 24809 1373 6430 24810 1347 6421 24811 1385 6455 24812 3220 6456 24813 3232 6431 24814 1373 6430 24815 1309 6360 24816 1312 6391 24817 1323 6414 24818 1324 6412 24819 3240 6439 24820 1339 6445 24821 1335 6411 24822 3239 6410 24823 3234 6452 24824 1344 6433 24825 1340 6436 24826 3235 6457 24827 1513 6449 24828 1512 6387 24829 1518 6408 24830 1516 6407 24831 2231 6451 24832 3241 6454 24833 3235 6457 24834 1340 6436 24835 1333 6440 24836 1397 6419 24837 1396 6437 24838 1338 6438 24839 1345 6428 24840 1370 6427 24841 1320 6432 24842 1322 6448 24843 1336 6365 24844 1335 6411 24845 1517 6446 24846 1516 6407 24847 1321 6385 24848 1322 6448 24849 1320 6432 24850 1316 6400 24851 1348 6422 24852 3234 6452 24853 3235 6457 24854 1337 6450 24855 3220 6456 24856 1386 6458 24857 1374 6443 24858 3232 6431 24859 1333 6440 24860 3239 6410 24861 3238 6364 24862 1334 6409 24863 1346 6447 24864 1513 6449 24865 1516 6407 24866 1517 6446 24867 3241 6454 24868 2232 6453 24869 1337 6450 24870 3235 6457 24871 1406 6361 24872 1404 6413 24873 1405 6420 24874 1407 6399 24875 1341 6442 24876 3233 6429 24877 3232 6431 24878 1374 6443 24879 2232 6453 24880 3241 6454 24881 3240 6439 24882 1338 6438 24883 1321 6385 24884 1512 6387 24885 1513 6449 24886 1322 6448 24887 3645 6459 24888 3611 6460 24889 3610 6461 24890 3615 6462 24891 3676 6463 24892 3566 6464 24893 3567 6465 24894 3679 6466 24895 1671 6467 24896 3358 6468 24897 3357 6469 24898 1675 6470 24899 1671 6467 24900 3704 6471 24901 3578 6472 24902 3358 6468 24903 1677 6473 24904 1429 6474 24905 1428 6475 24906 1678 6476 24907 1408 6477 24908 1409 6357 24909 1411 6326 24910 1410 6312 24911 1677 6473 24912 1678 6476 24913 1769 6478 24914 1771 6479 24915 3703 6480 24916 3700 6481 24917 3699 6482 24918 3701 6483 24919 3561 6484 24920 3674 6485 24921 3675 6486 24922 3566 6464 24923 3679 6466 24924 3615 6462 24925 3610 6461 24926 3676 6463 24927 1670 6487 24928 3644 6488 24929 3704 6471 24930 1671 6467 24931 3703 6480 24932 3548 6489 24933 3549 6490 24934 3700 6481 24935 1408 6477 24936 1673 6491 24937 1672 6492 24938 1409 6357 24939 3599 6493 24940 3600 6494 24941 3705 6495 24942 3644 6488 24943 1667 6496 24944 1669 6497 24945 3702 6498 24946 3646 6499 24947 1677 6473 24948 1676 6500 24949 1667 6496 24950 1429 6474 24951 1427 6501 24952 1428 6475 24953 3615 6462 24954 3679 6466 24955 1680 6502 24956 1678 6476 24957 1428 6475 24958 1427 6501 24959 1668 6503 24960 3707 6504 24961 3567 6465 24962 3678 6505 24963 1678 6476 24964 1680 6502 24965 1770 6506 24966 1769 6478 24967 3706 6507 24968 3642 6508 24969 3549 6490 24970 3548 6489 24971 3645 6459 24972 3646 6499 24973 3701 6483 24974 3611 6460 24975 1429 6474 24976 1667 6496 24977 3646 6499 24978 3645 6459 24979 1409 6357 24980 1672 6492 24981 1670 6487 24982 1682 6354 24983 1427 6501 24984 3679 6466 24985 3567 6465 24986 3707 6504 24987 1672 6492 24988 1673 6491 24989 3588 6509 24990 3599 6493 24991 1670 6487 24992 1672 6492 24993 3599 6493 24994 3644 6488 24995 3601 6510 24996 3600 6494 24997 3587 6511 24998 3586 6512 24999 3600 6494 25000 3599 6493 25001 3588 6509 25002 3587 6511 25003 1536 6513 25004 1674 6514 25005 1669 6497 25006 1667 6496 25007 1428 6475 25008 1429 6474 25009 3645 6459 25010 3615 6462 25011 1654 6515 25012 2216 6516 25013 2213 6517 25014 1676 6500 25015 1408 6477 25016 1679 6518 25017 1668 6503 25018 1673 6491 25019 1427 6501 25020 3707 6504 25021 3361 6519 25022 1680 6502 25023 1669 6497 25024 1674 6514 25025 3357 6469 25026 3358 6468 25027 3675 6486 25028 3674 6485 25029 3586 6512 25030 3587 6511 25031 3646 6499 25032 3702 6498 25033 3703 6480 25034 3701 6483 25035 1538 6520 25036 1670 6487 25037 1671 6467 25038 1675 6470 25039 1538 6520 25040 2210 6355 25041 1682 6354 25042 1670 6487 25043 1668 6503 25044 1679 6518 25045 3361 6519 25046 3707 6504 25047 1654 6515 25048 1676 6500 25049 1677 6473 25050 1771 6479 25051 3548 6489 25052 3703 6480 25053 3702 6498 25054 3578 6472 25055 3644 6488 25056 3705 6495 25057 3706 6507 25058 3704 6471 25059 1669 6497 25060 3358 6468 25061 3578 6472 25062 3702 6498 25063 1668 6503 25064 3678 6505 25065 3588 6509 25066 1673 6491 25067 1536 6513 25068 1667 6496 25069 1676 6500 25070 2213 6517 25071 3677 6521 25072 3561 6484 25073 3566 6464 25074 3676 6463 25075 3675 6486 25076 3587 6511 25077 3588 6509 25078 3678 6505 25079 3566 6464 25080 3675 6486 25081 3678 6505 25082 3567 6465 25083 3706 6507 25084 3548 6489 25085 3578 6472 25086 3704 6471 25087 3549 6490 25088 3642 6508 25089 3643 6522 25090 3550 6523 25091 3651 6524 25092 3686 6525 25093 3687 6526 25094 3594 6527 25095 3690 6528 25096 3552 6529 25097 3553 6530 25098 3693 6531 25099 3705 6495 25100 3600 6494 25101 3601 6510 25102 3641 6532 25103 3598 6533 25104 3626 6534 25105 3589 6535 25106 3590 6536 25107 3670 6537 25108 3590 6536 25109 3589 6535 25110 3640 6538 25111 3677 6521 25112 3639 6539 25113 3560 6540 25114 3561 6484 25115 3611 6460 25116 3609 6541 25117 3608 6542 25118 3610 6461 25119 3700 6481 25120 3549 6490 25121 3550 6523 25122 3698 6543 25123 3672 6544 25124 3559 6545 25125 3560 6540 25126 3639 6539 25127 3670 6537 25128 3593 6546 25129 3591 6547 25130 3590 6536 25131 3677 6521 25132 3616 6548 25133 3617 6549 25134 3639 6539 25135 3672 6544 25136 3606 6550 25137 3602 6551 25138 3604 6552 25139 3654 6553 25140 3651 6524 25141 3594 6527 25142 3643 6522 25143 3701 6483 25144 3699 6482 25145 3609 6541 25146 3611 6460 25147 3695 6554 25148 3694 6555 25149 3693 6531 25150 3692 6556 25151 3550 6523 25152 3643 6522 25153 3594 6527 25154 3551 6557 25155 3683 6558 25156 3688 6559 25157 3689 6560 25158 3685 6561 25159 3693 6531 25160 3553 6530 25161 3554 6562 25162 3692 6556 25163 3607 6563 25164 3603 6564 25165 3602 6551 25166 3606 6550 25167 3553 6530 25168 3689 6560 25169 3688 6559 25170 3554 6562 25171 3683 6558 25172 3685 6561 25173 3598 6533 25174 3597 6565 25175 3674 6485 25176 3640 6538 25177 3589 6535 25178 3546 6566 25179 3695 6554 25180 3603 6564 25181 3607 6563 25182 3694 6555 25183 3597 6565 25184 3598 6533 25185 3590 6536 25186 3591 6547 25187 3698 6543 25188 3550 6523 25189 3551 6557 25190 3595 6567 25191 3691 6568 25192 3690 6528 25193 3693 6531 25194 3694 6555 25195 3686 6525 25196 3685 6561 25197 3689 6560 25198 3687 6526 25199 3559 6545 25200 3670 6537 25201 3640 6538 25202 3560 6540 25203 3654 6553 25204 3653 6569 25205 3652 6570 25206 3651 6524 25207 3674 6485 25208 3546 6566 25209 3547 6571 25210 3586 6512 25211 3650 6572 25212 3649 6573 25213 3648 6574 25214 3647 6575 25215 3650 6572 25216 3699 6482 25217 3700 6481 25218 3698 6543 25219 3551 6557 25220 3594 6527 25221 3687 6526 25222 3552 6529 25223 3654 6553 25224 3643 6522 25225 3642 6508 25226 3641 6532 25227 3648 6574 25228 3649 6573 25229 3691 6568 25230 3627 6576 25231 3651 6524 25232 3652 6570 25233 3626 6534 25234 3686 6525 25235 3648 6574 25236 3627 6576 25237 3617 6549 25238 3616 6548 25239 3677 6521 25240 3676 6463 25241 3610 6461 25242 3608 6542 25243 3647 6575 25244 3648 6574 25245 3616 6548 25246 3614 6577 25247 3595 6567 25248 3551 6557 25249 3552 6529 25250 3690 6528 25251 3609 6541 25252 3647 6575 25253 3614 6577 25254 3608 6542 25255 3627 6576 25256 3607 6563 25257 3606 6550 25258 3617 6549 25259 3639 6539 25260 3617 6549 25261 3606 6550 25262 3672 6544 25263 3649 6573 25264 3595 6567 25265 3690 6528 25266 3691 6568 25267 3653 6569 25268 3547 6571 25269 3546 6566 25270 3652 6570 25271 3653 6569 25272 3654 6553 25273 3641 6532 25274 3601 6510 25275 3652 6570 25276 3546 6566 25277 3589 6535 25278 3626 6534 25279 3677 6521 25280 3608 6542 25281 3614 6577 25282 3616 6548 25283 3626 6534 25284 3598 6533 25285 3685 6561 25286 3686 6525 25287 3552 6529 25288 3687 6526 25289 3689 6560 25290 3553 6530 25291 3647 6575 25292 3609 6541 25293 3699 6482 25294 3650 6572 25295 3627 6576 25296 3691 6568 25297 3694 6555 25298 3607 6563 25299 3674 6485 25300 3561 6484 25301 3560 6540 25302 3640 6538 25303 3653 6569 25304 3601 6510 25305 3586 6512 25306 3547 6571 25307 3649 6573 25308 3650 6572 25309 3698 6543 25310 3595 6567 25311 3706 6507 25312 3705 6495 25313 3641 6532 25314 3642 6508 25315 3696 6578 25316 3680 6579 25317 3681 6580 25318 3697 6581 25319 3661 6582 25320 3638 6583 25321 3684 6584 25322 3682 6585 25323 3657 6586 25324 3637 6587 25325 3635 6588 25326 3659 6589 25327 3665 6590 25328 3634 6591 25329 3636 6592 25330 3664 6593 25331 3656 6594 25332 3658 6595 25333 3669 6596 25334 3613 6597 25335 3554 6562 25336 3688 6559 25337 3684 6584 25338 3555 6598 25339 3655 6599 25340 3656 6594 25341 3613 6597 25342 3612 6600 25343 3692 6556 25344 3554 6562 25345 3555 6598 25346 3681 6580 25347 3605 6601 25348 3655 6599 25349 3612 6600 25350 3604 6552 25351 3555 6598 25352 3684 6584 25353 3638 6583 25354 3577 6602 25355 3603 6564 25356 3605 6601 25357 3604 6552 25358 3602 6551 25359 3681 6580 25360 3555 6598 25361 3577 6602 25362 3697 6581 25363 3673 6603 25364 3612 6600 25365 3613 6597 25366 3668 6604 25367 3556 6605 25368 3579 6606 25369 3669 6596 25370 3562 6607 25371 3673 6603 25372 3672 6544 25373 3604 6552 25374 3612 6600 25375 3580 6608 25376 3556 6605 25377 3562 6607 25378 3666 6609 25379 3683 6558 25380 3597 6565 25381 3596 6610 25382 3682 6585 25383 3556 6605 25384 3580 6608 25385 3667 6611 25386 3557 6612 25387 3660 6613 25388 3661 6582 25389 3682 6585 25390 3596 6610 25391 3655 6599 25392 3605 6601 25393 3680 6579 25394 3696 6578 25395 3557 6612 25396 3667 6611 25397 3671 6614 25398 3558 6615 25399 3695 6554 25400 3680 6579 25401 3605 6601 25402 3603 6564 25403 3668 6604 25404 3557 6612 25405 3558 6615 25406 3673 6603 25407 3660 6613 25408 3596 6610 25409 3593 6546 25410 3592 6616 25411 3558 6615 25412 3671 6614 25413 3670 6537 25414 3559 6545 25415 3596 6610 25416 3597 6565 25417 3591 6547 25418 3593 6546 25419 3673 6603 25420 3558 6615 25421 3559 6545 25422 3672 6544 25423 3663 6617 25424 3660 6613 25425 3592 6616 25426 3585 6618 25427 3563 6619 25428 3662 6620 25429 3666 6609 25430 3562 6607 25431 3670 6537 25432 3671 6614 25433 3592 6616 25434 3593 6546 25435 3658 6595 25436 3563 6619 25437 3562 6607 25438 3669 6596 25439 3667 6611 25440 3585 6618 25441 3592 6616 25442 3671 6614 25443 3563 6619 25444 3658 6595 25445 3659 6589 25446 3564 6621 25447 3662 6620 25448 3663 6617 25449 3585 6618 25450 3666 6609 25451 3662 6620 25452 3563 6619 25453 3564 6621 25454 3665 6590 25455 3564 6621 25456 3659 6589 25457 3635 6588 25458 3565 6622 25459 3665 6590 25460 3564 6621 25461 3565 6622 25462 3634 6591 25463 3569 6623 25464 3622 6624 25465 3634 6591 25466 3565 6622 25467 3623 6625 25468 3569 6623 25469 3565 6622 25470 3635 6588 25471 3668 6604 25472 3613 6597 25473 3669 6596 25474 3579 6606 25475 3579 6606 25476 3556 6605 25477 3557 6612 25478 3668 6604 25479 3666 6609 25480 3585 6618 25481 3667 6611 25482 3580 6608 25483 3657 6586 25484 3696 6578 25485 3697 6581 25486 3637 6587 25487 3664 6593 25488 3636 6592 25489 3638 6583 25490 3661 6582 25491 3683 6558 25492 3682 6585 25493 3684 6584 25494 3688 6559 25495 3695 6554 25496 3692 6556 25497 3681 6580 25498 3680 6579 25499 3665 6590 25500 3664 6593 25501 3663 6617 25502 3662 6620 25503 3661 6582 25504 3660 6613 25505 3663 6617 25506 3664 6593 25507 3659 6589 25508 3658 6595 25509 3656 6594 25510 3657 6586 25511 3696 6578 25512 3657 6586 25513 3656 6594 25514 3655 6599 25515 1628 6626 25516 1850 6627 25517 1851 6628 25518 1631 6629 25519 1851 6628 25520 1544 6630 25521 1774 6631 25522 1631 6629 25523 1813 6632 25524 2218 6633 25525 2216 6516 25526 1543 6634 25527 1652 6635 25528 2233 6636 25529 2234 6637 25530 1653 6638 25531 1850 6627 25532 1628 6626 25533 2235 6639 25534 2236 6640 25535 1628 6626 25536 1653 6638 25537 2234 6637 25538 2235 6639 25539 1543 6634 25540 2216 6516 25541 1654 6515 25542 1655 6641 25543 1765 6642 25544 1773 6643 25545 1772 6644 25546 1768 6645 25547 1770 6506 25548 3728 6646 25549 3727 6647 25550 1767 6648 25551 3728 6646 25552 2235 6639 25553 2234 6637 25554 3727 6647 25555 1767 6648 25556 3727 6647 25557 3731 6649 25558 1766 6650 25559 3727 6647 25560 2234 6637 25561 2233 6636 25562 3731 6649 25563 1652 6635 25564 3833 6651 25565 3769 6652 25566 2233 6636 25567 3773 6653 25568 3861 6654 25569 3860 6655 25570 3770 6656 25571 3848 6657 25572 3849 6658 25573 3860 6655 25574 3861 6654 25575 3803 6659 25576 3802 6660 25577 3747 6661 25578 3837 6662 25579 3849 6658 25580 3848 6657 25581 3743 6663 25582 3804 6664 25583 3769 6652 25584 3833 6651 25585 3838 6665 25586 3772 6666 25587 3803 6659 25588 3837 6662 25589 3838 6665 25590 3833 6651 25591 3804 6664 25592 3743 6663 25593 3742 6667 25594 3744 6668 25595 3802 6660 25596 3746 6669 25597 3745 6670 25598 3747 6661 25599 3772 6666 25600 3882 6671 25601 3881 6672 25602 3769 6652 25603 3882 6671 25604 3773 6653 25605 3770 6656 25606 3881 6672 25607 1617 6673 25608 1649 6674 25609 1650 6675 25610 1651 6676 25611 3742 6667 25612 3900 6677 25613 3870 6678 25614 3744 6668 25615 1652 6635 25616 1653 6638 25617 1650 6675 25618 1649 6674 25619 1655 6641 25620 1777 6679 25621 1778 6680 25622 1543 6634 25623 3900 6677 25624 3745 6670 25625 3746 6669 25626 3870 6678 25627 1628 6626 25628 1631 6629 25629 1650 6675 25630 1653 6638 25631 1618 6681 25632 3903 6682 25633 3870 6678 25634 3746 6669 25635 1767 6648 25636 1766 6650 25637 1765 6642 25638 1768 6645 25639 1616 6683 25640 3744 6668 25641 3870 6678 25642 3903 6682 25643 1767 6648 25644 1768 6645 25645 1769 6478 25646 1770 6506 25647 1615 6684 25648 3804 6664 25649 3744 6668 25650 1616 6683 25651 1655 6641 25652 1654 6515 25653 1771 6479 25654 1772 6644 25655 1766 6650 25656 3731 6649 25657 3881 6672 25658 3770 6656 25659 1617 6673 25660 1618 6681 25661 3746 6669 25662 3802 6660 25663 1655 6641 25664 1772 6644 25665 1773 6643 25666 1615 6684 25667 1765 6642 25668 1766 6650 25669 3770 6656 25670 3860 6655 25671 1617 6673 25672 3802 6660 25673 3803 6659 25674 1649 6674 25675 1771 6479 25676 1769 6478 25677 1768 6645 25678 1772 6644 25679 1765 6642 25680 3860 6655 25681 3849 6658 25682 1773 6643 25683 1649 6674 25684 3803 6659 25685 3833 6651 25686 1652 6635 25687 1615 6684 25688 1773 6643 25689 3849 6658 25690 3804 6664 25691 1651 6676 25692 1774 6631 25693 1775 6685 25694 1776 6686 25695 1616 6683 25696 3903 6682 25697 3906 6687 25698 1777 6679 25699 2233 6636 25700 3769 6652 25701 3881 6672 25702 3731 6649 25703 1650 6675 25704 1631 6629 25705 1774 6631 25706 1651 6676 25707 1618 6681 25708 1776 6686 25709 3906 6687 25710 3903 6682 25711 1775 6685 25712 3904 6688 25713 3906 6687 25714 1776 6686 25715 1655 6641 25716 1615 6684 25717 1616 6683 25718 1777 6679 25719 1777 6679 25720 3906 6687 25721 3904 6688 25722 1778 6680 25723 1651 6676 25724 1776 6686 25725 1618 6681 25726 1617 6673 25727 3897 6689 25728 3854 6690 25729 3761 6691 25730 3896 6692 25731 3850 6693 25732 3822 6694 25733 3859 6695 25734 3858 6696 25735 3762 6697 25736 3763 6698 25737 3759 6699 25738 3761 6691 25739 3750 6700 25740 3898 6701 25741 3897 6689 25742 3853 6702 25743 3794 6703 25744 3797 6704 25745 3854 6690 25746 3805 6705 25747 3898 6701 25748 3805 6705 25749 3854 6690 25750 3897 6689 25751 3797 6704 25752 3762 6697 25753 3761 6691 25754 3854 6690 25755 3748 6706 25756 3899 6707 25757 3898 6701 25758 3750 6700 25759 3799 6708 25760 3798 6709 25761 3750 6700 25762 3853 6702 25763 3899 6707 25764 3806 6710 25765 3805 6705 25766 3898 6701 25767 3799 6708 25768 3853 6702 25769 3758 6711 25770 3757 6712 25771 3771 6713 25772 3840 6714 25773 3834 6715 25774 3832 6716 25775 3821 6717 25776 3757 6712 25777 3754 6718 25778 3841 6719 25779 3771 6713 25780 3772 6666 25781 3838 6665 25782 3840 6714 25783 3801 6720 25784 3839 6721 25785 3749 6722 25786 3798 6709 25787 3773 6653 25788 3774 6723 25789 3862 6724 25790 3861 6654 25791 3822 6694 25792 3850 6693 25793 3763 6698 25794 3762 6697 25795 3847 6725 25796 3848 6657 25797 3861 6654 25798 3862 6724 25799 3795 6726 25800 3794 6703 25801 3807 6727 25802 3847 6725 25803 3743 6663 25804 3848 6657 25805 3847 6725 25806 3807 6727 25807 3809 6728 25808 3831 6729 25809 3842 6730 25810 3776 6731 25811 3742 6667 25812 3743 6663 25813 3807 6727 25814 3806 6710 25815 3821 6717 25816 3841 6719 25817 3842 6730 25818 3831 6729 25819 3742 6667 25820 3806 6710 25821 3899 6707 25822 3900 6677 25823 3839 6721 25824 3801 6720 25825 3834 6715 25826 3840 6714 25827 3745 6670 25828 3900 6677 25829 3899 6707 25830 3748 6706 25831 3801 6720 25832 3800 6732 25833 3832 6716 25834 3834 6715 25835 3745 6670 25836 3748 6706 25837 3749 6722 25838 3747 6661 25839 3800 6732 25840 3821 6717 25841 3831 6729 25842 3832 6716 25843 3747 6661 25844 3749 6722 25845 3839 6721 25846 3837 6662 25847 3797 6704 25848 3796 6733 25849 3822 6694 25850 3762 6697 25851 3837 6662 25852 3839 6721 25853 3840 6714 25854 3838 6665 25855 3800 6732 25856 3799 6708 25857 3757 6712 25858 3821 6717 25859 3795 6726 25860 3847 6725 25861 3862 6724 25862 3901 6734 25863 3794 6703 25864 3805 6705 25865 3806 6710 25866 3807 6727 25867 3795 6726 25868 3901 6734 25869 3902 6735 25870 3796 6733 25871 3798 6709 25872 3799 6708 25873 3800 6732 25874 3801 6720 25875 3774 6723 25876 3902 6735 25877 3901 6734 25878 3862 6724 25879 3794 6703 25880 3795 6726 25881 3796 6733 25882 3797 6704 25883 3798 6709 25884 3749 6722 25885 3748 6706 25886 3750 6700 25887 3774 6723 25888 3808 6736 25889 3859 6695 25890 3902 6735 25891 3771 6713 25892 3832 6716 25893 3831 6729 25894 3809 6728 25895 3757 6712 25896 3758 6711 25897 3755 6737 25898 3754 6718 25899 3771 6713 25900 3809 6728 25901 3888 6738 25902 3887 6739 25903 3753 6740 25904 3845 6741 25905 3841 6719 25906 3754 6718 25907 3774 6723 25908 3887 6739 25909 3888 6738 25910 3808 6736 25911 3841 6719 25912 3845 6741 25913 3846 6742 25914 3842 6730 25915 3753 6740 25916 3754 6718 25917 3755 6737 25918 3756 6743 25919 3796 6733 25920 3902 6735 25921 3859 6695 25922 3822 6694 25923 3771 6713 25924 3887 6739 25925 3882 6671 25926 3772 6666 25927 3887 6739 25928 3774 6723 25929 3773 6653 25930 3882 6671 25931 3776 6731 25932 3889 6744 25933 3888 6738 25934 3809 6728 25935 3889 6744 25936 3778 6745 25937 3808 6736 25938 3888 6738 25939 3755 6737 25940 3895 6746 25941 3894 6747 25942 3756 6743 25943 3895 6746 25944 3759 6699 25945 3760 6748 25946 3894 6747 25947 3758 6711 25948 3896 6692 25949 3895 6746 25950 3755 6737 25951 3896 6692 25952 3761 6691 25953 3759 6699 25954 3895 6746 25955 3853 6702 25956 3897 6689 25957 3896 6692 25958 3758 6711 25959 3778 6745 25960 3858 6696 25961 3859 6695 25962 3808 6736 25963 3765 6749 25964 3851 6750 25965 3852 6751 25966 3766 6752 25967 3783 6753 25968 3884 6754 25969 3883 6755 25970 3814 6756 25971 3765 6749 25972 3763 6698 25973 3850 6693 25974 3851 6750 25975 3789 6757 25976 3790 6758 25977 3792 6759 25978 3791 6760 25979 3884 6754 25980 3789 6757 25981 3813 6761 25982 3883 6755 25983 3775 6762 25984 3776 6731 25985 3844 6763 25986 3836 6764 25987 3786 6765 25988 3885 6766 25989 3884 6754 25990 3783 6753 25991 3775 6762 25992 3836 6764 25993 3835 6767 25994 3780 6768 25995 3892 6769 25996 3869 6770 25997 3779 6771 25998 3886 6772 25999 3885 6766 26000 3790 6758 26001 3789 6757 26002 3884 6754 26003 3845 6741 26004 3843 6773 26005 3844 6763 26006 3846 6742 26007 3790 6758 26008 3885 6766 26009 3886 6772 26010 3779 6771 26011 3843 6773 26012 3793 6774 26013 3836 6764 26014 3844 6763 26015 3885 6766 26016 3786 6765 26017 3782 6775 26018 3886 6772 26019 3793 6774 26020 3792 6759 26021 3835 6767 26022 3836 6764 26023 3775 6762 26024 3890 6776 26025 3889 6744 26026 3776 6731 26027 3792 6759 26028 3790 6758 26029 3779 6771 26030 3835 6767 26031 3783 6753 26032 3784 6777 26033 3785 6778 26034 3786 6765 26035 3890 6776 26036 3777 6779 26037 3778 6745 26038 3889 6744 26039 3783 6753 26040 3814 6756 26041 3812 6780 26042 3784 6777 26043 3780 6768 26044 3891 6781 26045 3890 6776 26046 3775 6762 26047 3791 6760 26048 3811 6782 26049 3813 6761 26050 3789 6757 26051 3891 6781 26052 3781 6783 26053 3777 6779 26054 3890 6776 26055 3787 6784 26056 3810 6785 26057 3764 6786 26058 3766 6752 26059 3893 6787 26060 3764 6786 26061 3810 6785 26062 3871 6788 26063 3869 6770 26064 3892 6769 26065 3891 6781 26066 3780 6768 26067 3765 6749 26068 3760 6748 26069 3759 6699 26070 3763 6698 26071 3756 6743 26072 3894 6747 26073 3893 6787 26074 3767 6789 26075 3892 6769 26076 3868 6790 26077 3781 6783 26078 3891 6781 26079 3752 6791 26080 3768 6792 26081 3767 6789 26082 3751 6793 26083 3894 6747 26084 3760 6748 26085 3764 6786 26086 3893 6787 26087 3868 6790 26088 3892 6769 26089 3886 6772 26090 3782 6775 26091 3865 6794 26092 3876 6795 26093 3877 6796 26094 3866 6797 26095 3752 6791 26096 3791 6760 26097 3792 6759 26098 3793 6774 26099 3864 6798 26100 3867 6799 26101 3877 6796 26102 3876 6795 26103 3767 6789 26104 3893 6787 26105 3871 6788 26106 3751 6793 26107 3787 6784 26108 3788 6800 26109 3785 6778 26110 3784 6777 26111 3753 6740 26112 3756 6743 26113 3767 6789 26114 3768 6792 26115 3765 6749 26116 3766 6752 26117 3764 6786 26118 3760 6748 26119 3824 6801 26120 3830 6802 26121 3828 6803 26122 3825 6804 26123 3818 6805 26124 3824 6801 26125 3825 6804 26126 3813 6761 26127 3776 6731 26128 3842 6730 26129 3846 6742 26130 3844 6763 26131 3778 6745 26132 3855 6806 26133 3857 6807 26134 3858 6696 26135 3827 6808 26136 3867 6799 26137 3864 6798 26138 3829 6809 26139 3828 6803 26140 3830 6802 26141 3865 6794 26142 3866 6797 26143 3786 6765 26144 3785 6778 26145 3863 6810 26146 3782 6775 26147 3784 6777 26148 3812 6780 26149 3810 6785 26150 3787 6784 26151 3781 6783 26152 3863 6810 26153 3856 6811 26154 3777 6779 26155 3791 6760 26156 3752 6791 26157 3751 6793 26158 3811 6782 26159 3778 6745 26160 3777 6779 26161 3856 6811 26162 3855 6806 26163 3782 6775 26164 3863 6810 26165 3781 6783 26166 3868 6790 26167 3785 6778 26168 3788 6800 26169 3856 6811 26170 3863 6810 26171 3780 6768 26172 3835 6767 26173 3779 6771 26174 3869 6770 26175 3851 6750 26176 3850 6693 26177 3858 6696 26178 3857 6807 26179 3827 6808 26180 3878 6812 26181 3877 6796 26182 3867 6799 26183 3852 6751 26184 3851 6750 26185 3857 6807 26186 3855 6806 26187 3878 6812 26188 3828 6803 26189 3866 6797 26190 3877 6796 26191 3788 6800 26192 3852 6751 26193 3855 6806 26194 3856 6811 26195 3828 6803 26196 3878 6812 26197 3879 6813 26198 3825 6804 26199 3753 6740 26200 3768 6792 26201 3843 6773 26202 3845 6741 26203 3878 6812 26204 3827 6808 26205 3826 6814 26206 3879 6813 26207 3793 6774 26208 3843 6773 26209 3768 6792 26210 3752 6791 26211 3825 6804 26212 3879 6813 26213 3883 6755 26214 3813 6761 26215 3788 6800 26216 3787 6784 26217 3766 6752 26218 3852 6751 26219 3879 6813 26220 3826 6814 26221 3814 6756 26222 3883 6755 26223 1735 6080 26224 1736 6815 26225 1733 6816 26226 1734 6817 26227 1736 6815 26228 1584 6818 26229 1589 6819 26230 1733 6816 26231 1739 6820 26232 1582 6821 26233 1587 6822 26234 1738 6823 26235 1736 6815 26236 1740 6824 26237 1738 6823 26238 1737 6825 26239 1742 6122 26240 1741 6127 26241 1740 6824 26242 1743 6079 26243 1735 6080 26244 1743 6079 26245 1740 6824 26246 1736 6815 26247 1580 6125 26248 1581 6826 26249 1582 6821 26250 1810 6126 26251 1741 6127 26252 1810 6126 26253 1582 6821 26254 1739 6820 26255 1585 6827 26256 1737 6825 26257 1738 6823 26258 1587 6822 26259 1571 6101 26260 1573 6100 26261 1579 6828 26262 1580 6125 26263 1580 6125 26264 1579 6828 26265 1583 6829 26266 1581 6826 26267 1578 6830 26268 1584 6818 26269 1585 6827 26270 1586 6831 26271 1578 6830 26272 1586 6831 26273 1583 6829 26274 1579 6828 26275 1577 6104 26276 1578 6830 26277 1579 6828 26278 1573 6100 26279 1581 6826 26280 1583 6829 26281 1587 6822 26282 1582 6821 26283 1591 6832 26284 1592 6833 26285 1593 6834 26286 1590 6835 26287 1585 6827 26288 1587 6822 26289 1583 6829 26290 1586 6831 26291 1578 6830 26292 1588 6836 26293 1589 6819 26294 1584 6818 26295 1577 6104 26296 1590 6835 26297 1588 6836 26298 1578 6830 26299 1576 6087 26300 1591 6832 26301 1590 6835 26302 1577 6104 26303 1590 6835 26304 1593 6834 26305 1594 6837 26306 1588 6836 26307 1588 6836 26308 1594 6837 26309 1595 6838 26310 1589 6819 26311 1736 6815 26312 1737 6825 26313 1585 6827 26314 1584 6818 26315 1593 6834 26316 1592 6833 26317 1595 6838 26318 1594 6837 26319 1731 6839 26320 1732 6840 26321 1595 6838 26322 1592 6833 26323 1733 6816 26324 1589 6819 26325 1595 6838 26326 1732 6840 26327 1734 6817 26328 1733 6816 26329 1732 6840 26330 1731 6839 26331 1741 6127 26332 1739 6820 26333 1738 6823 26334 1740 6824 26335 1591 6832 26336 1734 6817 26337 1731 6839 26338 1592 6833 26339 1576 6087 26340 1735 6080 26341 1734 6817 26342 1591 6832 26343 3469 6841 26344 3463 6842 26345 3462 6254 26346 3474 6255 26347 3473 6248 26348 3461 6247 26349 3464 6843 26350 3472 6844 26351 3463 6842 26352 3457 6845 26353 3459 6846 26354 3462 6254 26355 3461 6247 26356 3460 6847 26357 3458 6848 26358 3464 6843 26359 3473 6248 26360 3472 6844 26361 3471 6849 26362 3475 6266 26363 3471 6849 26364 3407 6850 26365 3415 6851 26366 3468 6852 26367 3423 6853 26368 3420 6854 26369 3410 6855 26370 3411 6856 26371 3422 6857 26372 3411 6856 26373 3410 6855 26374 3421 6858 26375 3414 6859 26376 3469 6841 26377 3470 6860 26378 3407 6850 26379 3472 6844 26380 3414 6859 26381 3407 6850 26382 3471 6849 26383 3407 6850 26384 3470 6860 26385 3467 6861 26386 3415 6851 26387 3409 6862 26388 3460 6847 26389 3461 6247 26390 3408 6246 26391 3459 6846 26392 3409 6862 26393 3408 6246 26394 3462 6254 26395 3464 6843 26396 3413 6863 26397 3414 6859 26398 3472 6844 26399 3409 6862 26400 3459 6846 26401 3421 6858 26402 3410 6855 26403 3460 6847 26404 3409 6862 26405 3410 6855 26406 3420 6854 26407 3412 6864 26408 3458 6848 26409 3423 6853 26410 3411 6856 26411 3457 6845 26412 3412 6864 26413 3411 6856 26414 3422 6857 26415 3412 6864 26416 3457 6845 26417 3463 6842 26418 3413 6863 26419 3458 6848 26420 3412 6864 26421 3413 6863 26422 3464 6843 26423 3413 6863 26424 3463 6842 26425 3469 6841 26426 3414 6859 26427 3416 6285 26428 3477 6271 26429 3468 6852 26430 3415 6851 26431 3536 6269 26432 3416 6285 26433 3415 6851 26434 3467 6861 26435 3459 6846 26436 3457 6845 26437 3422 6857 26438 3421 6858 26439 3460 6847 26440 3420 6854 26441 3423 6853 26442 3458 6848 26443 3476 6270 26444 3470 6860 26445 3469 6841 26446 3474 6255 26447 3475 6266 26448 3471 6849 26449 3468 6852 26450 3477 6271 26451 3536 6269 26452 3467 6861 26453 3470 6860 26454 3476 6270 26455 1376 6865 26456 3221 6866 26457 3213 6867 26458 1379 6868 26459 1374 6443 26460 1386 6458 26461 1383 6869 26462 1375 6870 26463 1384 6871 26464 1390 6872 26465 1388 6873 26466 1385 6455 26467 1386 6458 26468 1387 6874 26469 1389 6875 26470 1383 6869 26471 1378 6876 26472 1384 6871 26473 1385 6455 26474 1373 6430 26475 1307 6417 26476 1380 6877 26477 1377 6878 26478 1371 6444 26479 3216 6879 26480 1389 6875 26481 2219 6880 26482 3217 6881 26483 1372 6426 26484 1376 6865 26485 1379 6868 26486 1370 6427 26487 1371 6444 26488 1377 6878 26489 1378 6876 26490 1373 6430 26491 1374 6443 26492 1375 6870 26493 1376 6865 26494 1372 6426 26495 1387 6874 26496 2222 6882 26497 2219 6880 26498 1389 6875 26499 1388 6873 26500 1390 6872 26501 2220 6883 26502 2221 6884 26503 1307 6417 26504 3212 6416 26505 3213 6867 26506 1380 6877 26507 3212 6416 26508 1370 6427 26509 1379 6868 26510 3213 6867 26511 3215 6885 26512 1384 6871 26513 1378 6876 26514 3214 6886 26515 1383 6869 26516 3215 6885 26517 3214 6886 26518 1375 6870 26519 1389 6875 26520 3216 6879 26521 3215 6885 26522 1383 6869 26523 3216 6879 26524 1390 6872 26525 1384 6871 26526 3215 6885 26527 1390 6872 26528 3216 6879 26529 3217 6881 26530 2220 6883 26531 1387 6874 26532 3219 6887 26533 3218 6888 26534 2222 6882 26535 3219 6887 26536 1388 6873 26537 2221 6884 26538 3218 6888 26539 1388 6873 26540 3219 6887 26541 3220 6456 26542 1385 6455 26543 2219 6880 26544 2222 6882 26545 3218 6888 26546 3217 6881 26547 3219 6887 26548 1387 6874 26549 1386 6458 26550 3220 6456 26551 3221 6866 26552 1377 6878 26553 1380 6877 26554 3213 6867 26555 1375 6870 26556 3214 6886 26557 3221 6866 26558 1376 6865 26559 3214 6886 26560 1378 6876 26561 1377 6878 26562 3221 6866 26563 2220 6883 26564 3217 6881 26565 3218 6888 26566 2221 6884 26567 3633 6889 26568 3575 6890 26569 3568 6891 26570 3632 6892 26571 3632 6892 26572 3568 6891 26573 3576 6893 26574 3629 6894 26575 3570 6895 26576 3621 6896 26577 3622 6624 26578 3569 6623 26579 3620 6897 26580 3570 6895 26581 3569 6623 26582 3623 6625 26583 3575 6890 26584 3630 6898 26585 3631 6899 26586 3568 6891 26587 3570 6895 26588 3620 6897 26589 3582 6900 26590 3571 6901 26591 3621 6896 26592 3570 6895 26593 3571 6901 26594 3581 6902 26595 3573 6903 26596 3619 6904 26597 3584 6905 26598 3572 6906 26599 3618 6907 26600 3573 6903 26601 3572 6906 26602 3583 6908 26603 3573 6903 26604 3618 6907 26605 3624 6909 26606 3574 6910 26607 3574 6910 26608 3624 6909 26609 3630 6898 26610 3575 6890 26611 3625 6911 26612 3574 6910 26613 3575 6890 26614 3633 6889 26615 3630 6898 26616 3624 6909 26617 3623 6625 26618 3635 6588 26619 3577 6602 26620 3638 6583 26621 3629 6894 26622 3576 6893 26623 3697 6581 26624 3577 6602 26625 3576 6893 26626 3628 6912 26627 3568 6891 26628 3631 6899 26629 3628 6912 26630 3576 6893 26631 3697 6581 26632 3628 6912 26633 3631 6899 26634 3637 6587 26635 3620 6897 26636 3618 6907 26637 3583 6908 26638 3582 6900 26639 3634 6591 26640 3633 6889 26641 3632 6892 26642 3636 6592 26643 3637 6587 26644 3631 6899 26645 3630 6898 26646 3635 6588 26647 3636 6592 26648 3632 6892 26649 3629 6894 26650 3638 6583 26651 3621 6896 26652 3581 6902 26653 3584 6905 26654 3619 6904 26655 3634 6591 26656 3622 6624 26657 3625 6911 26658 3633 6889 26659 3622 6624 26660 3621 6896 26661 3619 6904 26662 3625 6911 26663 3624 6909 26664 3618 6907 26665 3620 6897 26666 3623 6625 26667 3619 6904 26668 3573 6903 26669 3574 6910 26670 3625 6911 26671 3584 6905 26672 3581 6902 26673 3571 6901 26674 3572 6906 26675 3583 6908 26676 3572 6906 26677 3571 6901 26678 3582 6900 26679 3823 6913 26680 3874 6914 26681 3873 6915 26682 3815 6916 26683 3874 6914 26684 3824 6801 26685 3818 6805 26686 3873 6915 26687 3829 6809 26688 3875 6917 26689 3874 6914 26690 3823 6913 26691 3875 6917 26692 3830 6802 26693 3824 6801 26694 3874 6914 26695 3830 6802 26696 3875 6917 26697 3876 6795 26698 3865 6794 26699 3875 6917 26700 3829 6809 26701 3864 6798 26702 3876 6795 26703 3816 6918 26704 3880 6919 26705 3872 6920 26706 3819 6921 26707 3880 6919 26708 3817 6922 26709 3820 6923 26710 3872 6920 26711 3815 6916 26712 3873 6915 26713 3880 6919 26714 3816 6918 26715 3873 6915 26716 3818 6805 26717 3817 6922 26718 3880 6919 26719 3814 6756 26720 3815 6916 26721 3816 6918 26722 3812 6780 26723 3814 6756 26724 3826 6814 26725 3823 6913 26726 3815 6916 26727 3751 6793 26728 3820 6923 26729 3817 6922 26730 3811 6782 26731 3751 6793 26732 3871 6788 26733 3872 6920 26734 3820 6923 26735 3812 6780 26736 3816 6918 26737 3819 6921 26738 3810 6785 26739 3811 6782 26740 3817 6922 26741 3818 6805 26742 3813 6761 26743 3871 6788 26744 3810 6785 26745 3819 6921 26746 3872 6920 26747 3826 6814 26748 3827 6808 26749 3829 6809 26750 3823 6913 26751 1326 6314 26752 3222 6318 26753 3223 6924 26754 1426 6315 26755 1537 6925 26756 1528 6926 26757 1817 6927 26758 1816 6928 26759 1821 6929 26760 2204 6930 26761 2203 6333 26762 1415 6332 26763 3312 6931 26764 3317 6932 26765 3318 6933 26766 3351 6934 26767 1638 6935 26768 1663 6936 26769 1662 6937 26770 1639 6938 26771 2256 6939 26772 3255 6940 26773 2258 6941 26774 2259 6942 26775 2246 6943 26776 3259 6944 26777 3260 6945 26778 2253 6946 26779 3293 6947 26780 3736 6948 26781 3737 6949 26782 3292 6950 26783 3370 6951 26784 3371 6952 26785 3377 6953 26786 3376 6954 26787 3222 6318 26788 1328 6293 26789 1425 6955 26790 3223 6924 26791 2204 6930 26792 1821 6929 26793 1619 6956 26794 2205 6957 26795 1606 6958 26796 3351 6934 26797 3318 6933 26798 3311 6959 26799 1635 6960 26800 1634 6961 26801 1662 6937 26802 1663 6936 26803 2254 6962 26804 3231 6963 26805 2255 6964 26806 2256 6939 26807 1526 6965 26808 1535 6966 26809 2227 6967 26810 2226 6968 26811 3736 6948 26812 3294 6969 26813 3295 6970 26814 3737 6949 26815 3371 6952 26816 3372 6971 26817 3378 6972 26818 3377 6953 26819 1845 6973 26820 3226 6974 26821 3223 6924 26822 1425 6955 26823 1549 6975 26824 2206 6976 26825 2205 6957 26826 1619 6956 26827 1501 6151 26828 1823 6977 26829 3262 6978 26830 3352 6183 26831 1611 6979 26832 1612 6980 26833 1662 6937 26834 1634 6961 26835 1607 6981 26836 3275 6982 26837 3274 6983 26838 2254 6962 26839 1273 6021 26840 1275 6984 26841 3269 6985 26842 3268 6015 26843 3294 6969 26844 3736 6948 26845 3735 6986 26846 3279 6987 26847 1635 6960 26848 1663 6936 26849 3369 6988 26850 3375 6989 26851 3226 6974 26852 1846 6990 26853 1426 6315 26854 3223 6924 26855 1414 6343 26856 2207 6342 26857 2209 6991 26858 1818 6992 26859 1502 6170 26860 3352 6183 26861 3262 6978 26862 1824 6993 26863 1467 6994 26864 1685 6995 26865 1276 6996 26866 1274 6997 26867 2256 6939 26868 2259 6942 26869 3301 6998 26870 3300 6999 26871 1275 6984 26872 1277 7000 26873 3270 7001 26874 3269 6985 26875 3736 6948 26876 3293 6947 26877 3280 7002 26878 3735 6986 26879 2173 7003 26880 3379 7004 26881 3309 7005 26882 3303 7006 26883 2240 7007 26884 2241 7008 26885 2248 7009 26886 2247 7010 26887 1846 6990 26888 3226 6974 26889 3227 7011 26890 1283 7012 26891 1818 6992 26892 2209 6991 26893 2208 7013 26894 1525 7014 26895 1531 7015 26896 3251 7016 26897 3356 7017 26898 1815 7018 26899 3730 7019 26900 2237 7020 26901 2236 6640 26902 3729 7021 26903 1467 6994 26904 1274 6997 26905 1272 5988 26906 1468 5991 26907 2254 6962 26908 2256 6939 26909 3300 6999 26910 3299 7022 26911 2207 6342 26912 2210 6355 26913 2212 7023 26914 2209 6991 26915 3276 7024 26916 3734 7025 26917 3738 7026 26918 3310 7027 26919 1527 7028 26920 3207 7029 26921 3206 7030 26922 1819 7031 26923 1635 6960 26924 3375 6989 26925 3380 7032 26926 3308 7033 26927 3382 7034 26928 3381 7035 26929 3383 7036 26930 3384 7037 26931 3226 6974 26932 1845 6973 26933 1284 7038 26934 3227 7011 26935 1819 7031 26936 1818 6992 26937 1525 7014 26938 1527 7028 26939 1537 6925 26940 1816 6928 26941 3356 7017 26942 3251 7016 26943 1710 7039 26944 1721 7040 26945 1279 7041 26946 1278 7042 26947 1607 6981 26948 2254 6962 26949 3299 7022 26950 3298 7043 26951 2208 7013 26952 2209 6991 26953 2212 7023 26954 2211 7044 26955 3258 7045 26956 2228 7046 26957 2244 7047 26958 3259 6944 26959 3734 7025 26960 3270 7001 26961 3309 7005 26962 3738 7026 26963 2264 7048 26964 3308 7033 26965 3380 7032 26966 3382 7034 26967 2206 6976 26968 3209 7049 26969 3228 7050 26970 2225 7051 26971 1817 6927 26972 2212 7023 26973 2210 6355 26974 1538 6520 26975 1674 6514 26976 1815 7018 26977 3356 7017 26978 3357 6469 26979 1843 7052 26980 1711 6158 26981 1722 6172 26982 1842 7053 26983 1276 6996 26984 3304 7054 26985 3303 7006 26986 1277 7000 26987 1526 6965 26988 2208 7013 26989 2211 7044 26990 1535 6966 26991 3292 6950 26992 3737 6949 26993 3739 7055 26994 3369 6988 26995 3297 7056 26996 3364 7057 26997 3372 6971 26998 3371 6952 26999 2173 7003 27000 2175 7058 27001 3381 7035 27002 3379 7004 27003 3209 7049 27004 1526 6965 27005 2226 6968 27006 3228 7050 27007 2212 7023 27008 1817 6927 27009 1528 6926 27010 2211 7044 27011 1675 6470 27012 3357 6469 27013 3356 7017 27014 1816 6928 27015 2201 7059 27016 2204 6930 27017 2205 6957 27018 2202 7060 27019 1724 7061 27020 1725 6022 27021 1280 6013 27022 1279 7041 27023 3304 7054 27024 2174 7062 27025 2173 7003 27026 3303 7006 27027 2226 6968 27028 2227 6967 27029 2243 7063 27030 2242 7064 27031 3259 6944 27032 2244 7047 27033 2251 7065 27034 3260 6945 27035 3737 6949 27036 3295 6970 27037 3370 6951 27038 3739 7055 27039 2225 7051 27040 3228 7050 27041 3229 7066 27042 2241 7008 27043 1528 6926 27044 1537 6925 27045 1535 6966 27046 2211 7044 27047 2214 7067 27048 2215 7068 27049 2218 6633 27050 2217 7069 27051 1726 6179 27052 1841 7070 27053 1842 7053 27054 1722 6172 27055 1685 6995 27056 3302 7071 27057 3304 7054 27058 1276 6996 27059 2242 7064 27060 2243 7063 27061 2250 7072 27062 2249 7073 27063 2253 6946 27064 3260 6945 27065 3261 7074 27066 2259 6942 27067 3369 6988 27068 3739 7055 27069 3740 7075 27070 3375 6989 27071 2175 7058 27072 2182 7076 27073 3383 7036 27074 3381 7035 27075 3228 7050 27076 2226 6968 27077 2242 7064 27078 3229 7066 27079 1536 6513 27080 2213 6517 27081 2215 7068 27082 1814 7077 27083 1285 7078 27084 3359 7079 27085 3360 7080 27086 1847 7081 27087 1727 7082 27088 1724 7061 27089 1279 7041 27090 1721 7040 27091 3302 7071 27092 1666 7083 27093 2174 7062 27094 3304 7054 27095 2249 7073 27096 2250 7072 27097 2256 6939 27098 2255 6964 27099 3260 6945 27100 2251 7065 27101 2257 7084 27102 3261 7074 27103 3739 7055 27104 3370 6951 27105 3376 6954 27106 3740 7075 27107 2264 7048 27108 3382 7034 27109 3384 7037 27110 2265 7085 27111 2241 7008 27112 3229 7066 27113 3230 7086 27114 2248 7009 27115 1814 7077 27116 2215 7068 27117 2214 7067 27118 1530 7087 27119 3359 7079 27120 1794 7088 27121 1848 7089 27122 3360 7080 27123 1775 6685 27124 1774 6631 27125 1544 6630 27126 1811 7090 27127 1666 7083 27128 3302 7071 27129 3305 7091 27130 2238 7092 27131 2247 7010 27132 3274 6983 27133 3275 6982 27134 3266 7093 27135 1545 7094 27136 3263 7095 27137 3262 6978 27138 1823 6977 27139 3375 6989 27140 3740 7075 27141 3738 7026 27142 3309 7005 27143 3379 7004 27144 3381 7035 27145 3382 7034 27146 3380 7032 27147 3229 7066 27148 2242 7064 27149 2249 7073 27150 3230 7086 27151 1529 7096 27152 1531 7015 27153 1530 7087 27154 2214 7067 27155 1847 7081 27156 3360 7080 27157 3361 6519 27158 1679 6518 27159 1534 7097 27160 1533 7098 27161 1813 6632 27162 1812 7099 27163 3302 7071 27164 1685 6995 27165 2239 7100 27166 3305 7091 27167 2247 7010 27168 2248 7009 27169 2254 6962 27170 3274 6983 27171 3263 7095 27172 1548 7101 27173 1824 6993 27174 3262 6978 27175 3740 7075 27176 3376 6954 27177 3310 7027 27178 3738 7026 27179 3365 7102 27180 3377 6953 27181 3378 6972 27182 3367 7103 27183 2248 7009 27184 3230 7086 27185 3231 6963 27186 2254 6962 27187 2218 6633 27188 1813 6632 27189 1533 7098 27190 2217 7069 27191 3360 7080 27192 1848 7089 27193 1680 6502 27194 3361 6519 27195 1815 7018 27196 1814 7077 27197 1530 7087 27198 1531 7015 27199 1634 6961 27200 3307 7104 27201 3306 7105 27202 1611 6979 27203 1607 6981 27204 1624 7106 27205 3266 7093 27206 3275 6982 27207 1632 7107 27208 1633 7108 27209 1630 7109 27210 1629 7110 27211 1546 7111 27212 3264 7112 27213 3263 7095 27214 1545 7094 27215 3310 7027 27216 3376 6954 27217 3377 6953 27218 3365 7102 27219 3230 7086 27220 2249 7073 27221 2255 6964 27222 3231 6963 27223 1532 7113 27224 2217 7069 27225 1533 7098 27226 1534 7097 27227 1794 7088 27228 3359 7079 27229 3362 7114 27230 3278 7115 27231 3307 7104 27232 1661 7116 27233 1614 7117 27234 3306 7105 27235 1470 6001 27236 1623 7118 27237 1624 7106 27238 1471 6002 27239 2252 7119 27240 2253 6946 27241 2259 6942 27242 2258 6941 27243 3264 7112 27244 1547 7120 27245 1548 7101 27246 3263 7095 27247 1281 6014 27248 3708 5983 27249 3741 5982 27250 3725 7121 27251 3309 7005 27252 3379 7004 27253 3380 7032 27254 3375 6989 27255 1529 7096 27256 3250 7122 27257 3251 7016 27258 1531 7015 27259 1547 7120 27260 1625 7123 27261 1626 7124 27262 1548 7101 27263 3359 7079 27264 1285 7078 27265 3277 7125 27266 3362 7114 27267 1635 6960 27268 3308 7033 27269 3307 7104 27270 1634 6961 27271 1419 6329 27272 1425 6955 27273 1328 6293 27274 1423 6296 27275 1529 7096 27276 2214 7067 27277 2217 7069 27278 1532 7113 27279 2224 7126 27280 3265 7127 27281 3264 7112 27282 1546 7111 27283 1778 6680 27284 3904 6688 27285 3905 7128 27286 1812 7099 27287 3368 7129 27288 3372 6971 27289 3373 7130 27290 3374 7131 27291 3250 7122 27292 1535 6966 27293 1537 6925 27294 3251 7016 27295 1547 7120 27296 1622 7132 27297 1627 7133 27298 1625 7123 27299 3291 7134 27300 3363 7135 27301 3362 7114 27302 3277 7125 27303 1821 6929 27304 1820 7136 27305 1549 6975 27306 1619 6956 27307 3308 7033 27308 2264 7048 27309 1661 7116 27310 3307 7104 27311 1812 7099 27312 1813 6632 27313 1543 6634 27314 1778 6680 27315 1529 7096 27316 1532 7113 27317 2230 7137 27318 2229 7138 27319 3265 7127 27320 2223 7139 27321 1547 7120 27322 3264 7112 27323 1775 6685 27324 1811 7090 27325 3905 7128 27326 3904 6688 27327 3367 7103 27328 3378 6972 27329 3372 6971 27330 3368 7129 27331 2229 7138 27332 3252 7140 27333 3250 7122 27334 1529 7096 27335 1547 7120 27336 2223 7139 27337 1610 6005 27338 1622 7132 27339 3363 7135 27340 3296 7141 27341 3278 7115 27342 3362 7114 27343 1545 7094 27344 1823 6977 27345 1822 7142 27346 1620 7143 27347 1277 7000 27348 3303 7006 27349 3309 7005 27350 3270 7001 27351 2223 7139 27352 3265 7127 27353 3267 7144 27354 1623 7118 27355 1541 7145 27356 1539 7146 27357 1540 7147 27358 1542 7148 27359 2229 7138 27360 2230 7137 27361 2246 6943 27362 2245 7149 27363 1819 7031 27364 3206 7030 27365 3208 6348 27366 1412 6347 27367 1540 7147 27368 3256 7150 27369 3257 7151 27370 1542 7148 27371 1844 7152 27372 3717 7153 27373 3716 7154 27374 1282 7155 27375 1610 6005 27376 1725 6022 27377 1724 7061 27378 1622 7132 27379 3252 7140 27380 2227 6967 27381 1535 6966 27382 3250 7122 27383 1664 7156 27384 3314 7157 27385 3317 6932 27386 3316 7158 27387 1540 7147 27388 1539 7146 27389 1621 7159 27390 2228 7046 27391 3290 7160 27392 3364 7057 27393 3363 7135 27394 3291 7134 27395 1825 7161 27396 1824 6993 27397 1548 7101 27398 1626 7124 27399 1611 6979 27400 3306 7105 27401 3301 6998 27402 2259 6942 27403 1466 5987 27404 1472 5986 27405 3315 7162 27406 3314 7157 27407 1816 6928 27408 1817 6927 27409 1538 6520 27410 1675 6470 27411 2245 7149 27412 2246 6943 27413 2253 6946 27414 2252 7119 27415 3265 7127 27416 2224 7126 27417 2240 7007 27418 3267 7144 27419 1541 7145 27420 1542 7148 27421 1811 7090 27422 1544 6630 27423 3717 7153 27424 1843 7052 27425 1710 7039 27426 3716 7154 27427 2227 6967 27428 3252 7140 27429 3253 7163 27430 2243 7063 27431 1613 7164 27432 1621 7159 27433 1636 7165 27434 1639 6938 27435 3364 7057 27436 3297 7056 27437 3296 7141 27438 3363 7135 27439 1825 7161 27440 1626 7124 27441 1625 7123 27442 1854 7166 27443 1607 6981 27444 3298 7043 27445 3311 6959 27446 1608 7167 27447 1536 6513 27448 1814 7077 27449 1815 7018 27450 1674 6514 27451 1283 7012 27452 3227 7011 27453 3282 7168 27454 3281 7169 27455 1623 7118 27456 3267 7144 27457 3266 7093 27458 1624 7106 27459 1542 7148 27460 3257 7151 27461 3905 7128 27462 1811 7090 27463 1640 6162 27464 3718 6159 27465 3717 7153 27466 1844 7152 27467 3252 7140 27468 2229 7138 27469 2245 7149 27470 3253 7163 27471 1629 7110 27472 1850 6627 27473 2236 6640 27474 2237 7020 27475 3272 7170 27476 3276 7024 27477 3366 7171 27478 3284 7172 27479 1841 7070 27480 1727 7082 27481 1721 7040 27482 1842 7053 27483 1614 7117 27484 2263 7173 27485 3301 6998 27486 3306 7105 27487 1414 6343 27488 1818 6992 27489 1819 7031 27490 1412 6347 27491 1285 7078 27492 1283 7012 27493 3281 7169 27494 3277 7125 27495 3267 7144 27496 2240 7007 27497 2247 7010 27498 3266 7093 27499 1534 7097 27500 1812 7099 27501 3905 7128 27502 3257 7151 27503 3718 6159 27504 1711 6158 27505 1843 7052 27506 3717 7153 27507 2243 7063 27508 3253 7163 27509 3254 7174 27510 2250 7072 27511 1463 6017 27512 2239 7100 27513 1685 6995 27514 1467 6994 27515 3276 7024 27516 3310 7027 27517 3365 7102 27518 3366 7171 27519 1710 7039 27520 1843 7052 27521 1842 7053 27522 1721 7040 27523 2262 7175 27524 3300 6999 27525 3301 6998 27526 2263 7173 27527 1499 6169 27528 1502 6170 27529 1824 6993 27530 1825 7161 27531 1793 7176 27532 1794 7088 27533 3278 7115 27534 3279 6987 27535 2200 6182 27536 2203 6333 27537 2204 6930 27538 2201 7059 27539 1603 7177 27540 2182 7076 27541 2175 7058 27542 2176 7178 27543 1281 6014 27544 3725 7121 27545 3726 7179 27546 1278 7042 27547 1415 6332 27548 1413 6352 27549 1820 7136 27550 1821 6929 27551 3253 7163 27552 2245 7149 27553 2252 7119 27554 3254 7174 27555 1603 7177 27556 1666 7083 27557 2238 7092 27558 1604 7180 27559 3284 7172 27560 3366 7171 27561 3368 7129 27562 3286 7181 27563 1851 6628 27564 1850 6627 27565 1629 7110 27566 1630 7109 27567 2261 7182 27568 3299 7022 27569 3300 6999 27570 2262 7175 27571 1823 6977 27572 1501 6151 27573 1500 6150 27574 1822 7142 27575 1282 7155 27576 3273 7183 27577 3283 7184 27578 1284 7038 27579 3725 7121 27580 3271 7185 27581 3273 7183 27582 3726 7179 27583 2250 7072 27584 3254 7174 27585 3255 6940 27586 2256 6939 27587 1454 6007 27588 1664 7156 27589 2239 7100 27590 1463 6017 27591 3365 7102 27592 3367 7103 27593 3368 7129 27594 3366 7171 27595 1630 7109 27596 1541 7145 27597 1544 6630 27598 1851 6628 27599 2260 7186 27600 3298 7043 27601 3299 7022 27602 2261 7182 27603 1463 6017 27604 1467 6994 27605 1468 5991 27606 1464 6018 27607 1284 7038 27608 3283 7184 27609 3282 7168 27610 3227 7011 27611 1546 7111 27612 2202 7060 27613 2205 6957 27614 2206 6976 27615 1278 7042 27616 3726 7179 27617 3716 7154 27618 1710 7039 27619 3254 7174 27620 2252 7119 27621 2258 6941 27622 3255 6940 27623 2213 6517 27624 2216 6516 27625 2218 6633 27626 2215 7068 27627 1470 6001 27628 1610 6005 27629 2223 7139 27630 1623 7118 27631 1629 7110 27632 2237 7020 27633 3280 7002 27634 1632 7107 27635 1854 7166 27636 1625 7123 27637 1627 7133 27638 1852 7187 27639 1604 7180 27640 2238 7092 27641 3313 7188 27642 1789 7189 27643 1849 7190 27644 3729 7021 27645 3728 6646 27646 1770 6506 27647 3271 7185 27648 3272 7170 27649 3284 7172 27650 3285 7191 27651 1419 6329 27652 1421 6173 27653 1640 6162 27654 1425 6955 27655 3726 7179 27656 3273 7183 27657 1282 7155 27658 3716 7154 27659 1534 7097 27660 3257 7151 27661 3256 7150 27662 1532 7113 27663 2228 7046 27664 1621 7159 27665 1613 7164 27666 2244 7047 27667 1632 7107 27668 3280 7002 27669 3293 6947 27670 1637 7192 27671 1855 6180 27672 1854 7166 27673 1852 7187 27674 1853 6181 27675 1454 6007 27676 1466 5987 27677 3314 7157 27678 1664 7156 27679 1278 7042 27680 1279 7041 27681 1280 6013 27682 1281 6014 27683 3284 7172 27684 3286 7181 27685 3287 7193 27686 3285 7191 27687 3725 7121 27688 3741 5982 27689 3732 6016 27690 3271 7185 27691 1425 6955 27692 1640 6162 27693 1844 7152 27694 1845 6973 27695 1532 7113 27696 3256 7150 27697 3258 7045 27698 2230 7137 27699 1637 7192 27700 3293 6947 27701 3292 6950 27702 1638 6935 27703 2173 7003 27704 2174 7062 27705 2176 7178 27706 2175 7058 27707 1606 6958 27708 3311 6959 27709 3298 7043 27710 2260 7186 27711 1276 6996 27712 1277 7000 27713 1275 6984 27714 1274 6997 27715 3286 7181 27716 3288 7194 27717 3289 7195 27718 3287 7193 27719 1282 7155 27720 1284 7038 27721 1845 6973 27722 1844 7152 27723 3729 7021 27724 2236 6640 27725 2235 6639 27726 3728 6646 27727 2251 7065 27728 1612 6980 27729 1611 6979 27730 2257 7084 27731 1638 6935 27732 3292 6950 27733 3369 6988 27734 1663 6936 27735 1603 7177 27736 2176 7178 27737 2174 7062 27738 1666 7083 27739 1471 6002 27740 1608 7167 27741 3315 7162 27742 1472 5986 27743 1272 5988 27744 1274 6997 27745 1275 6984 27746 1273 6021 27747 3271 7185 27748 3285 7191 27749 3283 7184 27750 3273 7183 27751 1793 7176 27752 3730 7019 27753 3729 7021 27754 1849 7190 27755 2230 7137 27756 3258 7045 27757 3259 6944 27758 2246 6943 27759 1636 7165 27760 1637 7192 27761 1638 6935 27762 1639 6938 27763 3295 6970 27764 3297 7056 27765 3371 6952 27766 3370 6951 27767 1726 6179 27768 1853 6181 27769 1852 7187 27770 1841 7070 27771 1608 7167 27772 1471 6002 27773 1624 7106 27774 1607 6981 27775 3282 7168 27776 3283 7184 27777 3285 7191 27778 3287 7193 27779 1632 7107 27780 1637 7192 27781 1636 7165 27782 1633 7108 27783 1426 6315 27784 1846 6990 27785 1847 7081 27786 1679 6518 27787 1525 7014 27788 2208 7013 27789 1526 6965 27790 1527 7028 27791 1627 7133 27792 1727 7082 27793 1841 7070 27794 1852 7187 27795 2238 7092 27796 3305 7091 27797 3316 7158 27798 3313 7188 27799 1499 6169 27800 1825 7161 27801 1854 7166 27802 1855 6180 27803 3281 7169 27804 3282 7168 27805 3287 7193 27806 3289 7195 27807 1283 7012 27808 1285 7078 27809 1847 7081 27810 1846 6990 27811 3269 6985 27812 3733 7196 27813 3732 6016 27814 3268 6015 27815 3207 7029 27816 1549 6975 27817 1820 7136 27818 3206 7030 27819 3290 7160 27820 3373 7130 27821 3372 6971 27822 3364 7057 27823 1622 7132 27824 1724 7061 27825 1727 7082 27826 1627 7133 27827 1664 7156 27828 3316 7158 27829 3305 7091 27830 2239 7100 27831 3288 7194 27832 3290 7160 27833 3291 7134 27834 3289 7195 27835 1793 7176 27836 1849 7190 27837 1848 7089 27838 1794 7088 27839 3733 7196 27840 3272 7170 27841 3271 7185 27842 3732 6016 27843 3256 7150 27844 1540 7147 27845 2228 7046 27846 3258 7045 27847 1539 7146 27848 1541 7145 27849 1630 7109 27850 1633 7108 27851 3277 7125 27852 3281 7169 27853 3289 7195 27854 3291 7134 27855 1680 6502 27856 1848 7089 27857 1849 7190 27858 1770 6506 27859 3270 7001 27860 3734 7025 27861 3733 7196 27862 3269 6985 27863 3278 7115 27864 3296 7141 27865 3294 6969 27866 3279 6987 27867 3206 7030 27868 1820 7136 27869 1413 6352 27870 3208 6348 27871 1500 6150 27872 2200 6182 27873 2201 7059 27874 1822 7142 27875 3312 6931 27876 3313 7188 27877 3316 7158 27878 3317 6932 27879 1539 7146 27880 1633 7108 27881 1636 7165 27882 1621 7159 27883 3295 6970 27884 3294 6969 27885 3296 7141 27886 3297 7056 27887 3734 7025 27888 3276 7024 27889 3272 7170 27890 3733 7196 27891 2244 7047 27892 1613 7164 27893 1612 6980 27894 2251 7065 27895 1526 6965 27896 3209 7049 27897 3207 7029 27898 1527 7028 27899 1408 6477 27900 1410 6312 27901 1426 6315 27902 1679 6518 27903 1822 7142 27904 2201 7059 27905 2202 7060 27906 1620 7143 27907 1608 7167 27908 3311 6959 27909 3318 6933 27910 3315 7162 27911 1546 7111 27912 2206 6976 27913 2225 7051 27914 2224 7126 27915 2237 7020 27916 3730 7019 27917 3735 6986 27918 3280 7002 27919 3288 7194 27920 3374 7131 27921 3373 7130 27922 3290 7160 27923 3209 7049 27924 2206 6976 27925 1549 6975 27926 3207 7029 27927 1545 7094 27928 1620 7143 27929 2202 7060 27930 1546 7111 27931 3314 7157 27932 3315 7162 27933 3318 6933 27934 3317 6932 27935 1613 7164 27936 1639 6938 27937 1662 6937 27938 1612 6980 27939 1611 6979 27940 2259 6942 27941 3261 7074 27942 2257 7084 27943 2224 7126 27944 2225 7051 27945 2241 7008 27946 2240 7007 27947 3730 7019 27948 1793 7176 27949 3279 6987 27950 3735 6986 27951 3286 7181 27952 3368 7129 27953 3374 7131 27954 3288 7194 27955 1832 7197 27956 1831 7198 27957 1220 7199 27958 966 7200 27959 972 7201 27960 1971 7202 27961 1223 7203 27962 1222 7204 27963 972 7201 27964 973 7205 27965 974 7206 27966 1971 7202 27967 1225 7207 27968 1226 7208 27969 1997 7209 27970 1996 7210 27971 974 7206 27972 1970 7211 27973 2098 7212 27974 1971 7202 27975 1223 7203 27976 1971 7202 27977 2098 7212 27978 1224 7213 27979 2098 7212 27980 1970 7211 27981 2100 7214 27982 2099 7215 27983 1224 7213 27984 2098 7212 27985 2099 7215 27986 1225 7207 27987 2099 7215 27988 2100 7214 27989 2102 7216 27990 2101 7217 27991 1225 7207 27992 2099 7215 27993 2101 7217 27994 1226 7208 27995 1226 7208 27996 2101 7217 27997 2103 7218 27998 2104 7219 27999 1226 7208 28000 2104 7219 28001 1227 7220 28002 1997 7209 28003 2103 7218 28004 2107 7221 28005 2106 7222 28006 2104 7219 28007 1227 7220 28008 2104 7219 28009 2106 7222 28010 1228 7223 28011 2103 7218 28012 2105 7224 28013 2111 4777 28014 2107 7221 28015 968 7225 28016 1224 7213 28017 1225 7207 28018 1996 7210 28019 2107 7221 28020 2111 4777 28021 3008 4776 28022 3009 4759 28023 962 7226 28024 963 7227 28025 964 7228 28026 965 7229 28027 966 7200 28028 1220 7199 28029 1221 7230 28030 967 7231 28031 1222 7204 28032 1221 7230 28033 965 7229 28034 972 7201 28035 969 7232 28036 1223 7203 28037 1224 7213 28038 968 7225 28039 969 7232 28040 971 7233 28041 1222 7204 28042 1223 7203 28043 975 7234 28044 976 7235 28045 1829 7236 28046 1830 7237 28047 971 7233 28048 967 7231 28049 1221 7230 28050 1222 7204 28051 972 7201 28052 965 7229 28053 964 7228 28054 973 7205 28055 977 7238 28056 1219 7239 28057 1831 7198 28058 1832 7197 28059 1831 7198 28060 1219 7239 28061 975 7234 28062 1830 7237 28063 2101 7217 28064 2102 7216 28065 2105 7224 28066 2103 7218 28067 1221 7230 28068 1220 7199 28069 962 7226 28070 965 7229 28071 1830 7237 28072 1829 7236 28073 963 7227 28074 962 7226 28075 1220 7199 28076 1831 7198 28077 1830 7237 28078 962 7226 28079 1132 7240 28080 2108 7241 28081 2109 7242 28082 2113 7243 28083 2107 7221 28084 3009 4759 28085 3050 4758 28086 2109 7242 28087 2106 7222 28088 2107 7221 28089 2109 7242 28090 2108 7241 28091 1132 7240 28092 1230 7244 28093 1229 7245 28094 2108 7241 28095 2109 7242 28096 3050 4758 28097 2110 4671 28098 2113 7243 28099 1008 7246 28100 1012 7247 28101 2012 7248 28102 2008 7249 28103 1008 7246 28104 2008 7249 28105 2007 4861 28106 1004 4855 28107 1014 4893 28108 2000 7250 28109 1999 7251 28110 1246 4894 28111 1009 4969 28112 1010 4950 28113 950 4541 28114 949 4540 28115 1002 4837 28116 1007 7252 28117 1006 4891 28118 1003 4838 28119 1005 4847 28120 1013 4970 28121 1241 7253 28122 1242 4848 28123 1242 4848 28124 1241 7253 28125 1008 7246 28126 1004 4855 28127 1009 4969 28128 1011 7254 28129 1241 7253 28130 1013 4970 28131 2008 7249 28132 1007 7252 28133 1002 4837 28134 2007 4861 28135 1007 7252 28136 2008 7249 28137 2012 7248 28138 2000 7250 28139 1006 4891 28140 1007 7252 28141 2000 7250 28142 1014 4893 28143 1008 7246 28144 1241 7253 28145 1011 7254 28146 1012 7247 28147 1094 7255 28148 1833 7256 28149 1832 7197 28150 966 7200 28151 945 4493 28152 1083 7257 28153 1084 7258 28154 1085 7259 28155 971 7233 28156 1086 7260 28157 1087 7261 28158 967 7231 28159 969 7232 28160 968 7225 28161 1091 7262 28162 1092 7263 28163 1833 7256 28164 1095 7264 28165 977 7238 28166 1832 7197 28167 1096 7265 28168 2001 4468 28169 2003 4446 28170 2002 7266 28171 1834 7267 28172 1093 7268 28173 1095 7264 28174 1833 7256 28175 2002 7266 28176 2003 4446 28177 2017 4432 28178 2021 7269 28179 1092 7263 28180 1080 7270 28181 1079 7271 28182 1086 7260 28183 969 7232 28184 1092 7263 28185 1086 7260 28186 971 7233 28187 1090 4455 28188 2021 7269 28189 2017 4432 28190 2006 4431 28191 1083 7257 28192 1094 7255 28193 1087 7261 28194 1084 7258 28195 1081 7272 28196 2021 7269 28197 1090 4455 28198 1089 7273 28199 1256 7274 28200 1255 7275 28201 1088 7276 28202 1082 7277 28203 1083 7257 28204 1834 7267 28205 1833 7256 28206 1094 7255 28207 945 4493 28208 1835 4492 28209 1834 7267 28210 1083 7257 28211 1080 7270 28212 1092 7263 28213 1091 7262 28214 1256 7274 28215 1080 7270 28216 1256 7274 28217 1082 7277 28218 1081 7272 28219 1086 7260 28220 1079 7271 28221 1084 7258 28222 1087 7261 28223 1084 7258 28224 1079 7271 28225 1089 7273 28226 1085 7259 28227 1082 7277 28228 1088 7276 28229 1096 7265 28230 2002 7266 28231 1081 7272 28232 1082 7277 28233 2002 7266 28234 2021 7269 28235 966 7200 28236 967 7231 28237 1087 7261 28238 1094 7255 28239 1835 4492 28240 944 4239 28241 1093 7268 28242 1834 7267 28243 1079 7271 28244 1080 7270 28245 1081 7272 28246 1089 7273 28247 883 1134 28248 1131 7278 28249 1047 7279 28250 884 1146 28251 1131 7278 28252 973 7205 28253 964 7228 28254 1047 7279 28255 973 7205 28256 1131 7278 28257 1973 7280 28258 974 7206 28259 887 1150 28260 914 1172 28261 1974 7281 28262 1972 1151 28263 883 1134 28264 890 1133 28265 1973 7280 28266 1131 7278 28267 1973 7280 28268 890 1133 28269 891 1148 28270 1989 7282 28271 974 7206 28272 1973 7280 28273 1989 7282 28274 1970 7211 28275 891 1148 28276 1972 1151 28277 1974 7281 28278 1989 7282 28279 2060 779 28280 3939 7283 28281 3952 7284 28282 2123 7285 28283 1231 5038 28284 3961 7286 28285 3960 7287 28286 1133 5042 28287 3961 7286 28288 1230 7244 28289 1132 7240 28290 3960 7287 28291 3963 7288 28292 2039 7289 28293 1133 5042 28294 3960 7287 28295 1977 4603 28296 2055 7290 28297 2039 7289 28298 1978 4604 28299 1978 4604 28300 2039 7289 28301 3963 7288 28302 3962 4636 28303 3939 7283 28304 2063 7291 28305 2124 7292 28306 3952 7284 28307 2110 4671 28308 3962 4636 28309 3963 7288 28310 2113 7243 28311 2059 1086 28312 2063 7291 28313 2064 900 28314 2065 1087 28315 2064 900 28316 2073 899 28317 2074 945 28318 2065 1087 28319 1977 4603 28320 2121 4640 28321 2123 7285 28322 2055 7290 28323 2113 7243 28324 3963 7288 28325 3960 7287 28326 1132 7240 28327 2121 4640 28328 3025 780 28329 2060 779 28330 2123 7285 28331 2062 1034 28332 2124 7292 28333 2122 983 28334 2058 982 28335 2124 7292 28336 2063 7291 28337 2059 1086 28338 2122 983 28339 3346 984 28340 2122 983 28341 2059 1086 28342 3341 1025 28343 2039 7289 28344 3937 4940 28345 3935 4942 28346 1133 5042 28347 2055 7290 28348 3938 7293 28349 3937 4940 28350 2039 7289 28351 3938 7293 28352 2062 1034 28353 2056 1033 28354 3937 4940 28355 2061 778 28356 3940 836 28357 3939 7283 28358 2060 779 28359 3940 836 28360 2064 900 28361 2063 7291 28362 3939 7283 28363 2123 7285 28364 3952 7284 28365 3938 7293 28366 2055 7290 28367 3952 7284 28368 2124 7292 28369 2062 1034 28370 3938 7293 28371 2013 7294 28372 1999 7251 28373 2000 7250 28374 2012 7248 28375 2015 7295 28376 1998 7296 28377 1999 7251 28378 2013 7294 28379 1228 7223 28380 2106 7222 28381 2108 7241 28382 1229 7245 28383 3927 4935 28384 3928 4934 28385 3929 7297 28386 3930 7298 28387 3930 7298 28388 3929 7297 28389 1199 7299 28390 3931 7300 28391 3927 4935 28392 3930 7298 28393 3934 5035 28394 3933 5027 28395 3930 7298 28396 3931 7300 28397 1189 5041 28398 3934 5035 28399 1198 7301 28400 1199 7299 28401 3929 7297 28402 1200 7302 28403 1077 4930 28404 1200 7302 28405 3929 7297 28406 3928 4934 28407 922 4459 28408 1012 7247 28409 1011 7254 28410 953 4542 28411 1230 7244 28412 3961 7286 28413 3931 7300 28414 1199 7299 28415 1194 7303 28416 1096 7265 28417 1088 7276 28418 1193 7304 28419 3961 7286 28420 1231 5038 28421 1189 5041 28422 3931 7300 28423 1042 4901 28424 1192 7305 28425 1195 7306 28426 1072 4924 28427 2012 7248 28428 2014 4458 28429 2015 7295 28430 2013 7294 28431 1072 4924 28432 1195 7306 28433 1196 7307 28434 1073 4929 28435 1998 7296 28436 2015 7295 28437 2014 4458 28438 2001 4468 28439 922 4459 28440 2014 4458 28441 2012 7248 28442 1012 7247 28443 1195 7306 28444 970 7308 28445 1197 7309 28446 1196 7307 28447 970 7308 28448 1227 7220 28449 1228 7223 28450 1197 7309 28451 1198 7301 28452 1197 7309 28453 1228 7223 28454 1229 7245 28455 1199 7299 28456 1198 7301 28457 1229 7245 28458 1230 7244 28459 1200 7302 28460 1196 7307 28461 1197 7309 28462 1198 7301 28463 1200 7302 28464 1077 4930 28465 1073 4929 28466 1196 7307 28467 1009 4969 28468 949 4540 28469 953 4542 28470 1011 7254 28471 1246 4894 28472 1194 7303 28473 1193 7304 28474 1245 4895 28475 1245 4895 28476 1193 7304 28477 1254 7310 28478 1253 4897 28479 1255 7275 28480 1254 7310 28481 1193 7304 28482 1088 7276 28483 1253 4897 28484 1254 7310 28485 1994 7311 28486 1993 4900 28487 1042 4901 28488 1993 4900 28489 1994 7311 28490 1192 7305 28491 1191 7312 28492 1994 7311 28493 1254 7310 28494 1255 7275 28495 970 7308 28496 1195 7306 28497 1192 7305 28498 1995 7313 28499 1191 7312 28500 1995 7313 28501 1192 7305 28502 1994 7311 28503 1091 7262 28504 1191 7312 28505 1255 7275 28506 1256 7274 28507 968 7225 28508 1996 7210 28509 1191 7312 28510 1091 7262 28511 1191 7312 28512 1996 7210 28513 1997 7209 28514 1995 7313 28515 970 7308 28516 1995 7313 28517 1997 7209 28518 1227 7220 28519 1194 7303 28520 1246 4894 28521 1999 7251 28522 1998 7296 28523 1096 7265 28524 1194 7303 28525 1998 7296 28526 2001 4468 28527 988 7314 28528 989 7315 28529 985 4394 28530 987 7316 28531 989 7315 28532 990 4421 28533 986 4395 28534 985 4394 28535 991 7317 28536 992 4409 28537 990 4421 28538 989 7315 28539 995 1173 28540 996 1174 28541 992 4409 28542 991 7317 28543 994 7318 28544 995 1173 28545 991 7317 28546 993 7319 28547 993 7319 28548 991 7317 28549 989 7315 28550 988 7314 28551 994 7318 28552 914 1172 28553 913 1171 28554 995 1173 28555 914 1172 28556 994 7318 28557 1975 7320 28558 1974 7281 28559 1974 7281 28560 1975 7320 28561 1988 7321 28562 1989 7282 28563 978 4792 28564 1991 7322 28565 988 7314 28566 987 7316 28567 1975 7320 28568 1990 7323 28569 1987 7324 28570 1988 7321 28571 988 7314 28572 1991 7322 28573 1990 7323 28574 993 7319 28575 993 7319 28576 1990 7323 28577 1975 7320 28578 994 7318 28579 1987 7324 28580 1990 7323 28581 1991 7322 28582 1992 7325 28583 1970 7211 28584 1989 7282 28585 1988 7321 28586 2100 7214 28587 1987 7324 28588 2102 7216 28589 2100 7214 28590 1988 7321 28591 978 4792 28592 987 7316 28593 2945 4786 28594 1979 4785 28595 1987 7324 28596 1992 7325 28597 2105 7224 28598 2102 7216 28599 1992 7325 28600 2112 4778 28601 2111 4777 28602 2105 7224 28603 978 4792 28604 2112 4778 28605 1992 7325 28606 1991 7322 28607 985 4394 28608 1980 4397 28609 2945 4786 28610 987 7316 28611 1601 7326 28612 1602 7327 28613 2188 7328 28614 2181 7329 28615 1600 7330 28616 1789 7189 28617 3313 7188 28618 3312 6931 28619 1601 7326 28620 2261 7182 28621 2262 7175 28622 1602 7327 28623 1597 7331 28624 2185 7332 28625 2187 7333 28626 2186 7334 28627 2177 7335 28628 2178 7336 28629 2265 7085 28630 3384 7037 28631 1598 7337 28632 1599 7338 28633 2180 7339 28634 2172 7340 28635 1603 7177 28636 2168 7341 28637 2183 7342 28638 2182 7076 28639 3350 7343 28640 2171 7344 28641 1600 7330 28642 3322 7345 28643 2172 7340 28644 3350 7343 28645 3322 7345 28646 1598 7337 28647 1599 7338 28648 2260 7186 28649 2261 7182 28650 1601 7326 28651 3322 7345 28652 1600 7330 28653 3312 6931 28654 3351 6934 28655 1596 7346 28656 2179 7347 28657 2185 7332 28658 1597 7331 28659 2177 7335 28660 3384 7037 28661 3383 7036 28662 2184 7348 28663 1602 7327 28664 2262 7175 28665 2263 7173 28666 2186 7334 28667 1598 7337 28668 3322 7345 28669 3351 6934 28670 1606 6958 28671 1598 7337 28672 1606 6958 28673 2260 7186 28674 1599 7338 28675 1597 7331 28676 2186 7334 28677 2263 7173 28678 1614 7117 28679 1600 7330 28680 2171 7344 28681 2170 7349 28682 1789 7189 28683 1604 7180 28684 1789 7189 28685 2170 7349 28686 2169 7350 28687 1603 7177 28688 1604 7180 28689 2169 7350 28690 2168 7341 28691 1597 7331 28692 1614 7117 28693 1661 7116 28694 1596 7346 28695 1602 7327 28696 2186 7334 28697 2187 7333 28698 2188 7328 28699 1596 7346 28700 2265 7085 28701 2178 7336 28702 2179 7347 28703 1599 7338 28704 1601 7326 28705 2181 7329 28706 2180 7339 28707 1596 7346 28708 1661 7116 28709 2264 7048 28710 2265 7085 28711 2182 7076 28712 2183 7342 28713 2184 7348 28714 3383 7036 28715 1045 7351 28716 1048 7352 28717 882 1144 28718 884 1146 28719 1828 7353 28720 1827 7354 28721 1045 7351 28722 1046 7355 28723 4040 4001 28724 4020 1145 28725 882 1144 28726 1048 7352 28727 1048 7352 28728 1826 7356 28729 4058 4002 28730 4040 4001 28731 1045 7351 28732 1827 7354 28733 1826 7356 28734 1048 7352 28735 1829 7236 28736 1828 7353 28737 1046 7355 28738 963 7227 28739 920 4193 28740 1827 7354 28741 1828 7353 28742 1024 7357 28743 1045 7351 28744 884 1146 28745 1047 7279 28746 1046 7355 28747 976 7235 28748 1024 7357 28749 1828 7353 28750 1829 7236 28751 963 7227 28752 1046 7355 28753 1047 7279 28754 964 7228 28755 1827 7354 28756 920 4193 28757 919 4192 28758 1826 7356 28759 1826 7356 28760 919 4192 28761 4032 4003 28762 4058 4002 28763 977 7238 28764 1017 7358 28765 1218 7359 28766 1219 7239 28767 1019 7360 28768 899 7361 28769 1215 7362 28770 1216 7363 28771 918 4186 28772 920 4193 28773 1024 7357 28774 1023 7364 28775 976 7235 28776 1025 7365 28777 1023 7364 28778 1024 7357 28779 976 7235 28780 975 7234 28781 1018 7366 28782 1025 7365 28783 1216 7363 28784 1215 7362 28785 898 1116 28786 1020 1115 28787 1022 7367 28788 1861 7368 28789 1862 7369 28790 1217 7370 28791 1219 7239 28792 1218 7359 28793 1018 7366 28794 975 7234 28795 1858 1120 28796 1015 7371 28797 1016 7372 28798 1859 7373 28799 1859 7373 28800 1016 7372 28801 1021 7374 28802 1860 7375 28803 1861 7368 28804 1019 7360 28805 1216 7363 28806 1862 7369 28807 1856 1117 28808 915 4188 28809 1015 7371 28810 1858 1120 28811 1862 7369 28812 1216 7363 28813 1020 1115 28814 1860 7375 28815 1017 7358 28816 1871 7376 28817 1872 7377 28818 1218 7359 28819 1871 7376 28820 1022 7367 28821 1217 7370 28822 1872 7377 28823 915 4188 28824 1870 4187 28825 1873 7378 28826 1015 7371 28827 1870 4187 28828 918 4186 28829 1023 7364 28830 1873 7378 28831 1025 7365 28832 1874 7379 28833 1873 7378 28834 1023 7364 28835 1874 7379 28836 1016 7372 28837 1015 7371 28838 1873 7378 28839 1016 7372 28840 1874 7379 28841 1875 7380 28842 1021 7374 28843 1217 7370 28844 1862 7369 28845 1860 7375 28846 1021 7374 28847 1874 7379 28848 1025 7365 28849 1018 7366 28850 1875 7380 28851 1218 7359 28852 1872 7377 28853 1875 7380 28854 1018 7366 28855 1872 7377 28856 1217 7370 28857 1021 7374 28858 1875 7380 28859 1163 7381 28860 1865 7382 28861 1861 7368 28862 1022 7367 28863 1095 7264 28864 1093 7268 28865 1164 7383 28866 1165 7384 28867 894 1108 28868 1858 1120 28869 1859 7373 28870 896 1105 28871 896 1105 28872 1859 7373 28873 1860 7375 28874 1020 1115 28875 977 7238 28876 1095 7264 28877 1165 7384 28878 1017 7358 28879 1863 4241 28880 1160 4236 28881 1159 7385 28882 1864 7386 28883 1865 7382 28884 1158 7387 28885 1019 7360 28886 1861 7368 28887 1162 7388 28888 1864 7386 28889 1865 7382 28890 1163 7381 28891 1164 7383 28892 1876 7389 28893 1877 7390 28894 1165 7384 28895 1877 7390 28896 1163 7381 28897 1022 7367 28898 1871 7376 28899 1165 7384 28900 1877 7390 28901 1871 7376 28902 1017 7358 28903 1864 7386 28904 1159 7385 28905 1158 7387 28906 1865 7382 28907 1878 4209 28908 1161 4208 28909 1162 7388 28910 1876 7389 28911 1166 4211 28912 1878 4209 28913 1876 7389 28914 1164 7383 28915 1161 4208 28916 1863 4241 28917 1864 7386 28918 1162 7388 28919 1876 7389 28920 1162 7388 28921 1163 7381 28922 1877 7390 28923 1158 7387 28924 1159 7385 28925 904 7391 28926 907 7392 28927 1019 7360 28928 1158 7387 28929 907 7392 28930 899 7361 28931 1159 7385 28932 1160 4236 28933 905 4237 28934 904 7391 28935 1093 7268 28936 944 4239 28937 1166 4211 28938 1164 7383 28939 1130 7393 28940 7660 7394 28941 7657 7395 28942 1113 7396 28943 1085 7259 28944 1089 7273 28945 1100 7397 28946 1122 7398 28947 7660 7394 28948 1107 7399 28949 1106 7400 28950 7657 7395 28951 928 4469 28952 2022 4561 28953 1104 7401 28954 1103 7402 28955 7658 7403 28956 1128 7404 28957 1108 7405 28958 7656 7406 28959 945 4493 28960 1085 7259 28961 1122 7398 28962 1120 7407 28963 2024 4546 28964 1104 7401 28965 2022 4561 28966 2023 4543 28967 1099 7408 28968 1101 7409 28969 1109 7410 28970 1100 7397 28971 1100 7397 28972 1109 7410 28973 1117 7411 28974 1122 7398 28975 1117 7411 28976 1121 7412 28977 1120 7407 28978 1122 7398 28979 1118 7413 28980 1119 7414 28981 1120 7407 28982 1121 7412 28983 2024 4546 28984 7658 7403 28985 7656 7406 28986 1104 7401 28987 1110 7415 28988 1119 7414 28989 1118 7413 28990 1114 7416 28991 1112 7417 28992 1115 7418 28993 1116 7419 28994 1123 7420 28995 1105 7421 28996 7645 7422 28997 7643 7423 28998 1107 7399 28999 7645 7422 29000 7641 7424 29001 7639 7425 29002 7643 7423 29003 7647 4545 29004 7642 4510 29005 7641 7424 29006 7645 7422 29007 1115 7418 29008 7649 7426 29009 7648 7427 29010 1116 7419 29011 1102 7428 29012 1101 7409 29013 927 4426 29014 929 4425 29015 7649 7426 29016 7640 7429 29017 7639 7425 29018 7648 7427 29019 1099 7408 29020 1100 7397 29021 1089 7273 29022 1090 4455 29023 1101 7409 29024 1102 7428 29025 1108 7405 29026 1109 7410 29027 928 4469 29028 924 4447 29029 957 4560 29030 2022 4561 29031 1116 7419 29032 7648 7427 29033 7650 7430 29034 1124 7431 29035 7648 7427 29036 7639 7425 29037 7641 7424 29038 7650 7430 29039 1126 7432 29040 1127 7433 29041 1123 7420 29042 1125 7434 29043 1124 7431 29044 1125 7434 29045 1123 7420 29046 1116 7419 29047 1124 7431 29048 7650 7430 29049 7651 4502 29050 940 4501 29051 941 4496 29052 942 4490 29053 1126 7432 29054 1125 7434 29055 941 4496 29056 1125 7434 29057 1124 7431 29058 940 4501 29059 7650 7430 29060 7641 7424 29061 7642 4510 29062 7651 4502 29063 1103 7402 29064 7655 7435 29065 7654 4467 29066 928 4469 29067 7644 7436 29068 1106 7400 29069 1107 7399 29070 7643 7423 29071 1120 7407 29072 1119 7414 29073 1127 7433 29074 1126 7432 29075 7655 7435 29076 1102 7428 29077 929 4425 29078 7654 4467 29079 2024 4546 29080 7647 4545 29081 7645 7422 29082 1105 7421 29083 1128 7404 29084 1117 7411 29085 1109 7410 29086 1108 7405 29087 1102 7428 29088 7655 7435 29089 7656 7406 29090 1108 7405 29091 1118 7413 29092 1130 7393 29093 1113 7396 29094 1114 7416 29095 7655 7435 29096 1103 7402 29097 1104 7401 29098 7656 7406 29099 1123 7420 29100 1127 7433 29101 1111 7437 29102 1112 7417 29103 927 4426 29104 1101 7409 29105 1099 7408 29106 1090 4455 29107 1127 7433 29108 1119 7414 29109 1110 7415 29110 1111 7437 29111 942 4490 29112 945 4493 29113 1120 7407 29114 1126 7432 29115 1128 7404 29116 7658 7403 29117 7659 7438 29118 1129 7439 29119 7658 7403 29120 2024 4546 29121 1105 7421 29122 7659 7438 29123 1121 7412 29124 1129 7439 29125 1130 7393 29126 1118 7413 29127 1129 7439 29128 7659 7438 29129 7660 7394 29130 1130 7393 29131 1121 7412 29132 1117 7411 29133 1128 7404 29134 1129 7439 29135 7659 7438 29136 1105 7421 29137 1107 7399 29138 7660 7394 29139 7640 7429 29140 7644 7436 29141 7643 7423 29142 7639 7425 29143 1966 7440 29144 1490 4260 29145 1491 4259 29146 1967 7441 29147 1492 4252 29148 1963 7442 29149 1840 7443 29150 1839 7444 29151 1437 4264 29152 1965 7445 29153 1964 7446 29154 1438 4255 29155 1965 7445 29156 1440 7447 29157 1441 7448 29158 1964 7446 29159 1558 7449 29160 1968 7450 29161 3977 4129 29162 4003 4125 29163 1968 7450 29164 1559 4304 29165 4054 4135 29166 3977 4129 29167 1462 7451 29168 1967 7441 29169 1969 7452 29170 1660 7453 29171 1967 7441 29172 1491 4259 29173 1659 4301 29174 1969 7452 29175 1446 7454 29176 2164 7455 29177 2165 7456 29178 1443 7457 29179 1559 4304 29180 1968 7450 29181 1969 7452 29182 1659 4301 29183 4005 4166 29184 1795 7458 29185 1496 7459 29186 4004 4165 29187 1968 7450 29188 1558 7449 29189 1660 7453 29190 1969 7452 29191 1493 7460 29192 1966 7440 29193 1967 7441 29194 1462 7451 29195 3976 4113 29196 4006 4116 29197 1461 7461 29198 2163 7462 29199 4006 4116 29200 4004 4165 29201 1496 7459 29202 1461 7461 29203 1496 7459 29204 1444 7463 29205 1443 7457 29206 1461 7461 29207 2164 7455 29208 1440 7447 29209 1493 7460 29210 2165 7456 29211 3321 7464 29212 1435 7465 29213 1430 4289 29214 3319 4328 29215 1443 7457 29216 1444 7463 29217 1445 7466 29218 1446 7454 29219 1462 7451 29220 2163 7462 29221 2165 7456 29222 1493 7460 29223 1431 4286 29224 1430 4289 29225 1435 7465 29226 1434 7467 29227 2163 7462 29228 1461 7461 29229 1443 7457 29230 2165 7456 29231 1459 7468 29232 1460 7469 29233 1445 7466 29234 1444 7463 29235 1565 7470 29236 2166 7471 29237 2164 7455 29238 1446 7454 29239 4007 4117 29240 1462 7451 29241 1660 7453 29242 4002 4119 29243 2166 7471 29244 1441 7448 29245 1440 7447 29246 2164 7455 29247 4003 4125 29248 4002 4119 29249 1660 7453 29250 1558 7449 29251 2167 7472 29252 1840 7443 29253 1441 7448 29254 2166 7471 29255 1496 7459 29256 1795 7458 29257 1459 7468 29258 1444 7463 29259 4007 4117 29260 3976 4113 29261 2163 7462 29262 1462 7451 29263 1492 4252 29264 1839 7444 29265 1563 7473 29266 1564 4317 29267 1563 7473 29268 3321 7464 29269 3319 4328 29270 1564 4317 29271 1840 7443 29272 1963 7442 29273 1964 7446 29274 1441 7448 29275 1963 7442 29276 1492 4252 29277 1438 4255 29278 1964 7446 29279 1440 7447 29280 1965 7445 29281 1966 7440 29282 1493 7460 29283 1965 7445 29284 1437 4264 29285 1490 4260 29286 1966 7440 29287 1447 7474 29288 1448 4284 29289 1449 4283 29290 1450 7475 29291 1781 7476 29292 1780 7477 29293 1785 4313 29294 1436 4312 29295 1450 7475 29296 1449 4283 29297 1785 4313 29298 1780 7477 29299 1781 7476 29300 1436 4312 29301 1431 4286 29302 1434 7467 29303 1447 7474 29304 1779 7478 29305 1786 4321 29306 1448 4284 29307 4049 4178 29308 1786 4321 29309 1779 7478 29310 4008 4175 29311 6428 1478 30336 6585 1481 30337 6580 3874 30338 7753 7753 30339 6579 3872 30340 6583 1482 30341 6428 1478 30342 7753 7753 30343 6424 3934 30344 7753 7753 30345 6580 3874 30346 6429 3871 30347 6575 3873 30348 6579 3872 30349 7753 7753 30350 6424 3934 30351 3096 4721 30352 3104 4747 30353 3097 4722 30354 3097 4722 30355 3104 4747 30356 3102 4740 30357 3097 4722 30358 3102 4740 30359 3101 4733 30360 3097 4722 30361 3101 4733 30362 3100 4731 30363 3095 4718 30364 3097 4722 30365 3100 4731 30366 3094 4717 30367 3097 4722 30368 3095 4718 30369 3094 4717 30370 3103 4744 30371 3097 4722 30372 3097 4722 30373 3103 4744 30374 3099 4743 30375 3097 4722 30376 3099 4743 30377 3967 4752 30378 3097 4722 30379 3967 4752 30380 3098 4726 30381 4189 1364 30382 4192 1273 30383 4191 1366 30384 4189 1364 30385 4197 1363 30386 4192 1273 30387 4192 1273 30388 4197 1363 30389 4196 1292 30390 4192 1273 30391 4196 1292 30392 4193 1274 30393 4193 1274 30394 4196 1292 30395 4198 1283 30396 4196 1292 30397 4199 1368 30398 4198 1283 30399 4190 1369 30400 4199 1368 30401 4196 1292 30402 4190 1369 30403 4196 1292 30404 4194 1343 30405 4087 1342 30406 4194 1343 30407 4196 1292 30408 4087 1342 30409 4196 1292 30410 4195 1291 30411 1110 7415 30412 1114 7416 30413 1111 7437 30414 1111 7437 30415 1114 7416 30416 1113 7396 30417 1111 7437 30418 1113 7396 30419 1112 7417 30420 1112 7417 30421 1113 7396 30422 1115 7418 30423 1113 7396 30424 7657 7395 30425 1115 7418 30426 1115 7418 30427 7657 7395 30428 7649 7426 30429 7640 7429 30430 7649 7426 30431 7657 7395 30432 7640 7429 30433 7657 7395 30434 7644 7436 30435 1106 7400 30436 7644 7436 30437 7657 7395 30438 7686 4081 30439 7720 4082 30440 7690 4069 30441 7673 4097 30442 7690 4069 30443 7720 4082 30444 7673 4097 30445 7713 4105 30446 7690 4069 30447 7681 4068 30448 7690 4069 30449 7713 4105 30450 7681 4068 30451 7713 4105 30452 7712 4088 30453 7681 4068 30454 7712 4088 30455 7711 4071 30456 7711 4071 30457 7712 4088 30458 7716 4087 30459 7711 4071 30460 7716 4087 30461 7715 4102 30462 7711 4071 30463 7715 4102 30464 7714 4104 30465 4691 4031 30466 4830 1113 30467 4829 4032 30468 4829 4032 30469 4830 1113 30470 4831 1104 30471 4821 4033 30472 4829 4032 30473 4831 1104 30474 4821 4033 30475 4831 1104 30476 4833 1100 30477 4821 4033 30478 4833 1100 30479 4836 1099 30480 4821 4033 30481 4836 1099 30482 4824 4045 30483 4823 4046 30484 4824 4045 30485 4836 1099 30486 4823 4046 30487 4836 1099 30488 4825 1125 30489 4822 4244 30490 4823 4046 30491 4825 1125 30492 4822 4244 30493 4825 1125 30494 4828 4245 30495 4026 1112 30496 4828 4245 30497 4825 1125 30498 4026 1112 30499 4827 4249 30500 4828 4245 30501 4026 1112 30502 4027 4221 30503 4827 4249 30504 901 4218 30505 4027 4221 30506 4026 1112 30507 900 4225 30508 901 4218 30509 4026 1112 30510 900 4225 30511 4026 1112 30512 903 1111 30513 900 4225 30514 903 1111 30515 906 4234 30516 903 1111 30517 905 4237 30518 906 4234 30519 892 1121 30520 905 4237 30521 903 1111 30522 892 1121 30523 904 7391 30524 905 4237 30525 892 1121 30526 907 7392 30527 904 7391 30528 892 1121 30529 895 1107 30530 907 7392 30531 895 1107 30532 899 7361 30533 907 7392 30534 895 1107 30535 897 1106 30536 899 7361 30537 897 1106 30538 898 1116 30539 899 7361 30540 898 1116 30541 1215 7362 30542 899 7361 30543 129 78 30748 4005 4166 30749 5678 4157 30750 127 80 30751 129 78 30752 5678 4157 30753 127 80 30754 5678 4157 30755 5990 4156 30756 127 80 30757 5990 4156 30758 5989 4164 30759 127 80 30760 5989 4164 30761 181 135 30762 181 135 30763 5989 4164 30764 6000 4162 30765 181 135 30766 6000 4162 30767 5999 4127 30768 181 135 30769 5999 4127 30770 5901 4163 30771 123 74 30772 181 135 30773 5901 4163 30774 123 74 30775 5901 4163 30776 5633 4159 30777 123 74 30778 5633 4159 30779 5632 4158 30780 115 66 30781 123 74 30782 5632 4158 30783 115 66 30784 5632 4158 30785 5659 4133 30786 115 66 30787 5659 4133 30788 5660 4132 30789 115 66 30790 5660 4132 30791 5903 4153 30792 111 63 30793 115 66 30794 5903 4153 30795 111 63 30796 5903 4153 30797 5418 4148 30798 109 59 30799 111 63 30800 5418 4148 30801 107 55 30802 109 59 30803 5418 4148 30804 107 55 30805 5418 4148 30806 6010 4151 30807 107 55 30808 6010 4151 30809 6011 4161 30810 107 55 30811 6011 4161 30812 5689 4167 30813 105 51 30814 107 55 30815 5689 4167 30816 105 51 30817 5689 4167 30818 5690 4170 30819 105 51 30820 5690 4170 30821 242 194 30822 242 194 30823 5690 4170 30824 5995 4169 30825 242 194 30826 5995 4169 30827 5998 4173 30828 242 194 30829 5998 4173 30830 5691 4176 30831 242 194 30832 5691 4176 30833 243 195 30834 243 195 30835 5691 4176 30836 4008 4175 30837 243 195 30838 4008 4175 30839 1779 7478 30840 241 193 30841 243 195 30842 1779 7478 30843 241 193 30844 1779 7478 30845 1447 7474 30846 241 193 30847 1447 7474 30848 1450 7475 30849 241 193 30850 1450 7475 30851 1780 7477 30852 104 47 30853 241 193 30854 1780 7477 30855 104 47 30856 1780 7477 30857 1781 7476 30858 104 47 30859 1781 7476 30860 1434 7467 30861 104 47 30862 1434 7467 30863 106 53 30864 106 53 30865 1434 7467 30866 1435 7465 30867 106 53 30868 1435 7465 30869 3321 7464 30870 106 53 30871 3321 7464 30872 108 57 30873 108 57 30874 3321 7464 30875 1563 7473 30876 108 57 30877 1563 7473 30878 110 61 30879 110 61 30880 1563 7473 30881 1839 7444 30882 110 61 30883 1839 7444 30884 114 64 30885 114 64 30886 1839 7444 30887 1840 7443 30888 114 64 30889 1840 7443 30890 2167 7472 30891 114 64 30892 2167 7472 30893 122 72 30894 122 72 30895 2167 7472 30896 2166 7471 30897 122 72 30898 2166 7471 30899 1565 7470 30900 122 72 30901 1565 7470 30902 180 132 30903 180 132 30904 1565 7470 30905 1446 7454 30906 180 132 30907 1446 7454 30908 1445 7466 30909 180 132 30910 1445 7466 30911 1460 7469 30912 126 77 30913 180 132 30914 1460 7469 30915 126 77 30916 1460 7469 30917 1459 7468 30918 126 77 30919 1459 7468 30920 1795 7458 30921 126 77 30922 1795 7458 30923 129 78 30924 129 78 30925 1795 7458 30926 4005 4166 30927 413 365 30928 2187 7333 30929 2185 7332 30930 417 376 30943 2180 7339 30944 2181 7329 30945 417 376 30946 419 380 30947 2180 7339 30948 419 380 30949 2172 7340 30950 2180 7339 30951 419 380 30952 3350 7343 30953 2172 7340 30954 419 380 30955 2171 7344 30956 3350 7343 30957 419 380 30958 421 384 30959 2171 7344 30960 421 384 30961 2170 7349 30962 2171 7344 30963 421 384 30964 2169 7350 30965 2170 7349 30966 421 384 30967 423 388 30968 2169 7350 30969 423 388 30970 2168 7341 30971 2169 7350 30972 423 388 30973 2183 7342 30974 2168 7341 30975 423 388 30976 425 392 30977 2183 7342 30978 425 392 30979 2184 7348 30980 2183 7342 30981 425 392 30982 2177 7335 30983 2184 7348 30984 425 392 30985 2178 7336 30986 2177 7335 30987 411 366 30988 2178 7336 30989 425 392 30990 411 366 30991 2179 7347 30992 2178 7336 30993 413 365 30997 2185 7332 30998 2179 7347 30999 418 377 31000 5611 3971 31001 5618 3970 31002 412 370 31021 5621 3976 31022 5620 3975 31023 412 370 31024 426 393 31025 5621 3976 31026 426 393 31027 5622 3979 31028 5621 3976 31029 426 393 31030 5615 3981 31031 5622 3979 31032 424 389 31033 5615 3981 31034 426 393 31035 424 389 31036 5616 3982 31037 5615 3981 31038 424 389 31039 5631 3988 31040 5616 3982 31041 424 389 31042 5630 3991 31043 5631 3988 31044 422 385 31045 5630 3991 31046 424 389 31047 422 385 31048 5629 3992 31049 5630 3991 31050 422 385 31051 5628 3993 31052 5629 3992 31053 420 381 31054 5628 3993 31055 422 385 31056 420 381 31057 5416 3994 31058 5628 3993 31059 420 381 31060 5627 3990 31061 5416 3994 31062 418 377 31063 5627 3990 31064 420 381 31065 418 377 31066 5619 3989 31067 5627 3990 31068 418 377 31069 5618 3970 31070 5619 3989 31071 508 627 31165 510 661 31166 4000 1677 31167 508 627 31168 3999 1684 31169 4000 1677 31170 508 627 31171 3974 1717 31172 3999 1684 31173 508 627 31174 522 626 31175 3974 1717 31176 522 626 31177 3996 1721 31178 3974 1717 31179 522 626 31180 3971 1688 31181 3996 1721 31182 522 626 31183 3970 1685 31184 3971 1688 31185 520 631 31186 3970 1685 31187 522 626 31188 520 631 31189 3979 1733 31190 3970 1685 31191 520 631 31192 3972 1727 31193 3979 1733 31194 520 631 31195 3990 1699 31196 3972 1727 31197 518 637 31198 3990 1699 31199 520 631 31200 518 637 31201 3989 1700 31202 3990 1699 31203 518 637 31204 3988 1701 31205 3989 1700 31206 516 643 31207 3988 1701 31208 518 637 31209 516 643 31210 3983 1715 31211 3988 1701 31212 516 643 31213 3982 1716 31214 3983 1715 31215 514 649 31216 3982 1716 31217 516 643 31218 512 655 31219 3982 1716 31220 514 649 31221 512 655 31222 3985 1694 31223 3982 1716 31224 512 655 31225 3994 1695 31226 3985 1694 31227 512 655 31228 3993 1676 31229 3994 1695 31230 510 661 31231 3993 1676 31232 512 655 31233 510 661 31234 4000 1677 31235 3993 1676 31236 511 652 31237 513 646 31238 1936 5102 31239 513 646 31240 1939 5103 31241 1936 5102 31242 513 646 31243 1938 5087 31244 1939 5103 31245 513 646 31246 515 640 31247 1938 5087 31248 515 640 31249 1933 5088 31250 1938 5087 31251 515 640 31252 517 634 31253 1933 5088 31254 517 634 31255 1932 5065 31256 1933 5088 31257 517 634 31258 1931 5066 31259 1932 5065 31260 517 634 31261 519 628 31262 1931 5066 31263 519 628 31264 3168 5046 31265 1931 5066 31266 519 628 31267 1942 5043 31268 3168 5046 31269 519 628 31270 3170 5077 31271 1942 5043 31272 519 628 31273 521 625 31274 3170 5077 31275 521 625 31276 3169 5061 31277 3170 5077 31278 521 625 31279 1925 5062 31280 3169 5061 31281 521 625 31282 3159 5098 31283 1925 5062 31284 507 624 31285 3159 5098 31286 521 625 31287 507 624 31288 1922 5106 31289 3159 5098 31290 507 624 31291 1921 5101 31292 1922 5106 31293 507 624 31294 509 658 31295 1921 5101 31296 509 658 31297 1928 5083 31298 1921 5101 31299 509 658 31300 1927 5084 31301 1928 5083 31302 509 658 31303 511 652 31304 1927 5084 31305 511 652 31306 1936 5102 31307 1927 5084 31308</p> + </polylist> + <polylist material="sweater-green" count="598"> + <input semantic="VERTEX" source="#_6-mesh-vertices" offset="0"/> + <input semantic="NORMAL" source="#_6-mesh-normals" offset="1"/> + <input semantic="TEXCOORD" source="#_6-mesh-map-0" offset="2" set="0"/> + <vcount>4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 </vcount> + <p>0 0 0 64 1 1 66 2 2 14 3 3 67 4 4 65 5 5 1 6 6 15 7 7 12 8 8 14 3 9 66 2 10 68 9 11 67 4 12 15 7 13 13 10 14 69 11 15 10 12 16 12 8 17 68 9 18 70 13 19 69 11 20 13 10 21 11 14 22 71 15 23 8 16 24 10 12 25 70 13 26 72 17 27 71 15 28 11 14 29 9 18 30 73 19 31 6 20 32 8 16 33 72 17 34 74 21 35 73 19 36 9 18 37 7 22 38 75 23 39 4 24 40 6 20 41 74 21 42 76 25 43 75 23 44 7 22 45 5 26 46 77 27 47 2 28 48 4 24 49 76 25 50 78 29 51 77 27 52 5 26 53 3 30 54 79 31 55 0 0 56 2 28 57 78 29 58 64 1 59 79 31 60 3 30 61 1 6 62 65 5 63 80 32 64 82 33 65 98 34 66 100 35 67 99 36 68 83 37 69 81 38 70 101 39 71 94 40 72 80 32 73 100 35 74 96 41 75 101 39 76 81 38 77 95 42 78 97 43 79 90 44 80 92 45 81 102 46 82 104 47 83 103 48 84 93 49 85 91 50 86 105 51 87 88 52 88 90 44 89 104 47 90 106 53 91 105 51 92 91 50 93 89 54 94 107 55 95 86 56 96 88 52 97 106 53 98 108 57 99 107 55 100 89 54 101 87 58 102 109 59 103 84 60 104 86 56 105 108 57 106 110 61 107 109 59 108 87 58 109 85 62 110 111 63 111 84 60 112 110 61 113 114 64 114 112 65 115 115 66 116 111 63 117 85 62 118 113 67 119 82 33 120 84 60 121 112 65 122 98 34 123 113 67 124 85 62 125 83 37 126 99 36 127 102 46 128 92 45 129 116 68 130 118 69 131 117 70 132 93 49 133 103 48 134 119 71 135 92 45 136 94 40 137 96 41 138 116 68 139 97 43 140 95 42 141 93 49 142 117 70 143 112 65 144 114 64 145 122 72 146 120 73 147 123 74 148 115 66 149 113 67 150 121 75 151 124 76 152 126 77 153 129 78 154 128 79 155 129 78 156 127 80 157 125 81 158 128 79 159 96 41 160 100 35 161 132 82 162 130 83 163 133 84 164 101 39 165 97 43 166 131 85 167 100 35 168 98 34 169 134 86 170 132 82 171 135 87 172 99 36 173 101 39 174 133 84 175 132 82 176 134 86 177 138 88 178 136 89 179 139 90 180 135 87 181 133 84 182 137 91 183 130 83 184 132 82 185 136 89 186 140 92 187 137 91 188 133 84 189 131 85 190 141 93 191 142 94 192 146 95 193 148 96 194 150 97 195 149 98 196 147 99 197 143 100 198 151 101 199 144 102 200 142 94 201 150 97 202 152 103 203 151 101 204 143 100 205 145 104 206 153 105 207 98 34 208 112 65 209 120 73 210 134 86 211 121 75 212 113 67 213 99 36 214 135 87 215 124 76 216 128 79 217 156 106 218 154 107 219 156 106 220 128 79 221 125 81 222 155 108 223 120 73 224 157 109 225 138 88 226 134 86 227 139 90 228 158 110 229 121 75 230 135 87 231 154 107 232 156 106 233 163 111 234 161 112 235 163 111 236 156 106 237 155 108 238 162 113 239 161 112 240 163 111 241 164 114 242 165 115 243 164 114 244 163 111 245 162 113 246 166 116 247 165 115 248 164 114 249 173 117 250 169 118 251 173 117 252 164 114 253 166 116 254 170 119 255 146 95 256 167 120 257 171 121 258 148 96 259 172 122 260 168 123 261 147 99 262 149 98 263 136 89 264 174 124 265 176 125 266 140 92 267 177 126 268 175 127 269 137 91 270 141 93 271 174 124 272 142 94 273 144 102 274 176 125 275 145 104 276 143 100 277 175 127 278 177 126 279 138 88 280 178 128 281 174 124 282 136 89 283 175 127 284 179 129 285 139 90 286 137 91 287 178 128 288 146 95 289 142 94 290 174 124 291 143 100 292 147 99 293 179 129 294 175 127 295 138 88 296 157 109 297 159 130 298 178 128 299 160 131 300 158 110 301 139 90 302 179 129 303 159 130 304 167 120 305 146 95 306 178 128 307 147 99 308 168 123 309 160 131 310 179 129 311 122 72 312 180 132 313 182 133 314 120 73 315 183 134 316 181 135 317 123 74 318 121 75 319 180 132 320 126 77 321 124 76 322 182 133 323 125 81 324 127 80 325 181 135 326 183 134 327 120 73 328 182 133 329 184 136 330 157 109 331 185 137 332 183 134 333 121 75 334 158 110 335 182 133 336 124 76 337 154 107 338 184 136 339 155 108 340 125 81 341 183 134 342 185 137 343 157 109 344 184 136 345 186 138 346 159 130 347 187 139 348 185 137 349 158 110 350 160 131 351 184 136 352 154 107 353 161 112 354 186 138 355 162 113 356 155 108 357 185 137 358 187 139 359 159 130 360 186 138 361 188 140 362 167 120 363 189 141 364 187 139 365 160 131 366 168 123 367 186 138 368 161 112 369 165 115 370 188 140 371 166 116 372 162 113 373 187 139 374 189 141 375 167 120 376 188 140 377 190 142 378 171 121 379 191 143 380 189 141 381 168 123 382 172 122 383 188 140 384 165 115 385 169 118 386 190 142 387 170 119 388 166 116 389 189 141 390 191 143 391 176 125 392 144 102 393 192 144 394 194 145 395 193 146 396 145 104 397 177 126 398 195 147 399 140 92 400 176 125 401 194 145 402 196 148 403 195 147 404 177 126 405 141 93 406 197 149 407 144 102 408 152 103 409 198 150 410 192 144 411 199 151 412 153 105 413 145 104 414 193 146 415 130 83 416 140 92 417 196 148 418 200 152 419 197 149 420 141 93 421 131 85 422 201 153 423 96 41 424 130 83 425 200 152 426 202 154 427 201 153 428 131 85 429 97 43 430 203 155 431 96 41 432 202 154 433 118 69 434 116 68 435 119 71 436 203 155 437 97 43 438 117 70 439 118 69 440 202 154 441 206 156 442 204 157 443 207 158 444 203 155 445 119 71 446 205 159 447 202 154 448 200 152 449 208 160 450 206 156 451 209 161 452 201 153 453 203 155 454 207 158 455 200 152 456 196 148 457 210 162 458 208 160 459 211 163 460 197 149 461 201 153 462 209 161 463 192 144 464 198 150 465 214 164 466 212 165 467 215 166 468 199 151 469 193 146 470 213 167 471 196 148 472 194 145 473 216 168 474 210 162 475 217 169 476 195 147 477 197 149 478 211 163 479 194 145 480 192 144 481 212 165 482 216 168 483 213 167 484 193 146 485 195 147 486 217 169 487 102 46 488 118 69 489 204 157 490 218 170 491 205 159 492 119 71 493 103 48 494 219 171 495 216 168 496 212 165 497 224 172 498 222 173 499 225 174 500 213 167 501 217 169 502 223 175 503 210 162 504 216 168 505 222 173 506 226 176 507 223 175 508 217 169 509 211 163 510 227 177 511 212 165 512 214 164 513 228 178 514 224 172 515 229 179 516 215 166 517 213 167 518 225 174 519 208 160 520 210 162 521 226 176 522 230 180 523 227 177 524 211 163 525 209 161 526 231 181 527 206 156 528 208 160 529 230 180 530 232 182 531 231 181 532 209 161 533 207 158 534 233 183 535 204 157 536 206 156 537 232 182 538 220 184 539 233 183 540 207 158 541 205 159 542 221 185 543 220 184 544 232 182 545 235 186 546 234 187 547 235 186 548 233 183 549 221 185 550 234 187 551 232 182 552 230 180 553 236 188 554 235 186 555 236 188 556 231 181 557 233 183 558 235 186 559 230 180 560 226 176 561 237 189 562 236 188 563 237 189 564 227 177 565 231 181 566 236 188 567 224 172 568 228 178 569 239 190 570 238 191 571 239 190 572 229 179 573 225 174 574 238 191 575 226 176 576 222 173 577 240 192 578 237 189 579 240 192 580 223 175 581 227 177 582 237 189 583 222 173 584 224 172 585 238 191 586 240 192 587 238 191 588 225 174 589 223 175 590 240 192 591 102 46 592 218 170 593 241 193 594 104 47 595 242 194 596 219 171 597 103 48 598 105 51 599 204 157 600 220 184 601 241 193 602 218 170 603 242 194 604 221 185 605 205 159 606 219 171 607 220 184 608 234 187 609 243 195 610 241 193 611 243 195 612 234 187 613 221 185 614 242 194 615 239 190 616 228 178 617 245 196 618 244 197 619 246 198 620 229 179 621 239 190 622 244 197 623 228 178 624 214 164 625 247 199 626 245 196 627 248 200 628 215 166 629 229 179 630 246 198 631 214 164 632 198 150 633 249 201 634 247 199 635 250 202 636 199 151 637 215 166 638 248 200 639 198 150 640 152 103 641 251 203 642 249 201 643 252 204 644 153 105 645 199 151 646 250 202 647 190 142 648 169 118 649 253 205 650 255 206 651 254 207 652 170 119 653 191 143 654 256 208 655 171 121 656 190 142 657 255 206 658 257 209 659 256 208 660 191 143 661 172 122 662 258 210 663 148 96 664 171 121 665 257 209 666 259 211 667 258 210 668 172 122 669 149 98 670 260 212 671 169 118 672 173 117 673 261 213 674 253 205 675 261 213 676 173 117 677 170 119 678 254 207 679 152 103 680 150 97 681 262 214 682 251 203 683 263 215 684 151 101 685 153 105 686 252 204 687 150 97 688 148 96 689 259 211 690 262 214 691 260 212 692 149 98 693 151 101 694 263 215 695 262 214 696 259 211 697 266 216 698 264 217 699 267 218 700 260 212 701 263 215 702 265 219 703 251 203 704 262 214 705 264 217 706 268 220 707 265 219 708 263 215 709 252 204 710 269 221 711 253 205 712 261 213 713 270 222 714 271 223 715 270 222 716 261 213 717 254 207 718 272 224 719 259 211 720 257 209 721 273 225 722 266 216 723 274 226 724 258 210 725 260 212 726 267 218 727 257 209 728 255 206 729 275 227 730 273 225 731 276 228 732 256 208 733 258 210 734 274 226 735 255 206 736 253 205 737 271 223 738 275 227 739 272 224 740 254 207 741 256 208 742 276 228 743 249 201 744 251 203 745 268 220 746 277 229 747 269 221 748 252 204 749 250 202 750 278 230 751 247 199 752 249 201 753 277 229 754 279 231 755 278 230 756 250 202 757 248 200 758 280 232 759 245 196 760 247 199 761 279 231 762 281 233 763 280 232 764 248 200 765 246 198 766 282 234 767 244 197 768 245 196 769 281 233 770 283 235 771 282 234 772 246 198 773 244 197 774 283 235 775 283 235 776 281 233 777 285 236 778 284 237 779 286 238 780 282 234 781 283 235 782 284 237 783 281 233 784 279 231 785 287 239 786 285 236 787 288 240 788 280 232 789 282 234 790 286 238 791 279 231 792 277 229 793 289 241 794 287 239 795 290 242 796 278 230 797 280 232 798 288 240 799 277 229 800 268 220 801 291 243 802 289 241 803 292 244 804 269 221 805 278 230 806 290 242 807 275 227 808 271 223 809 295 245 810 293 246 811 296 247 812 272 224 813 276 228 814 294 248 815 273 225 816 275 227 817 293 246 818 297 249 819 294 248 820 276 228 821 274 226 822 298 250 823 266 216 824 273 225 825 297 249 826 299 251 827 298 250 828 274 226 829 267 218 830 300 252 831 271 223 832 270 222 833 301 253 834 295 245 835 301 253 836 270 222 837 272 224 838 296 247 839 268 220 840 264 217 841 302 254 842 291 243 843 303 255 844 265 219 845 269 221 846 292 244 847 264 217 848 266 216 849 299 251 850 302 254 851 300 252 852 267 218 853 265 219 854 303 255 855 241 193 856 243 195 857 306 256 858 304 257 859 306 256 860 243 195 861 242 194 862 305 258 863 104 47 864 241 193 865 304 257 866 307 259 867 305 258 868 242 194 869 105 51 870 308 260 871 126 77 872 180 132 873 311 261 874 309 262 875 312 263 876 181 135 877 127 80 878 310 264 879 180 132 880 122 72 881 313 265 882 311 261 883 314 266 884 123 74 885 181 135 886 312 263 887 129 78 888 126 77 889 309 262 890 315 267 891 310 264 892 127 80 893 129 78 894 315 267 895 122 72 896 114 64 897 316 268 898 313 265 899 317 269 900 115 66 901 123 74 902 314 266 903 114 64 904 110 61 905 318 270 906 316 268 907 319 271 908 111 63 909 115 66 910 317 269 911 110 61 912 108 57 913 320 272 914 318 270 915 321 273 916 109 59 917 111 63 918 319 271 919 108 57 920 106 53 921 322 274 922 320 272 923 323 275 924 107 55 925 109 59 926 321 273 927 106 53 928 104 47 929 307 259 930 322 274 931 308 260 932 105 51 933 107 55 934 323 275 935 322 274 936 307 259 937 324 276 938 326 277 939 325 278 940 308 260 941 323 275 942 327 279 943 320 272 944 322 274 945 326 277 946 328 280 947 327 279 948 323 275 949 321 273 950 329 281 951 318 270 952 320 272 953 328 280 954 330 282 955 329 281 956 321 273 957 319 271 958 331 283 959 316 268 960 318 270 961 330 282 962 332 284 963 331 283 964 319 271 965 317 269 966 333 285 967 313 265 968 316 268 969 332 284 970 334 286 971 333 285 972 317 269 973 314 266 974 335 287 975 311 261 976 313 265 977 334 286 978 336 288 979 335 287 980 314 266 981 312 263 982 337 289 983 307 259 984 304 257 985 338 290 986 324 276 987 339 291 988 305 258 989 308 260 990 325 278 991 304 257 992 306 256 993 340 292 994 338 290 995 340 292 996 306 256 997 305 258 998 339 291 999 338 290 1000 340 292 1001 343 293 1002 341 294 1003 343 293 1004 340 292 1005 339 291 1006 342 295 1007 324 276 1008 338 290 1009 341 294 1010 344 296 1011 342 295 1012 339 291 1013 325 278 1014 345 297 1015 336 288 1016 334 286 1017 346 298 1018 348 299 1019 347 300 1020 335 287 1021 337 289 1022 349 301 1023 334 286 1024 332 284 1025 350 302 1026 346 298 1027 351 303 1028 333 285 1029 335 287 1030 347 300 1031 332 284 1032 330 282 1033 352 304 1034 350 302 1035 353 305 1036 331 283 1037 333 285 1038 351 303 1039 330 282 1040 328 280 1041 354 306 1042 352 304 1043 355 307 1044 329 281 1045 331 283 1046 353 305 1047 328 280 1048 326 277 1049 356 308 1050 354 306 1051 357 309 1052 327 279 1053 329 281 1054 355 307 1055 326 277 1056 356 308 1057 344 296 1058 324 276 1059 345 297 1060 325 278 1061 327 279 1062 357 309 1063 356 308 1064 344 296 1065 358 310 1066 360 311 1067 359 312 1068 345 297 1069 357 309 1070 361 313 1071 354 306 1072 356 308 1073 360 311 1074 362 314 1075 361 313 1076 357 309 1077 355 307 1078 363 315 1079 352 304 1080 354 306 1081 362 314 1082 364 316 1083 363 315 1084 355 307 1085 353 305 1086 365 317 1087 350 302 1088 352 304 1089 364 316 1090 366 318 1091 365 317 1092 353 305 1093 351 303 1094 367 319 1095 346 298 1096 350 302 1097 366 318 1098 368 320 1099 367 319 1100 351 303 1101 347 300 1102 369 321 1103 348 299 1104 346 298 1105 368 320 1106 370 322 1107 369 321 1108 347 300 1109 349 301 1110 371 323 1111 344 296 1112 341 294 1113 372 324 1114 358 310 1115 373 325 1116 342 295 1117 345 297 1118 359 312 1119 341 294 1120 343 293 1121 374 326 1122 372 324 1123 374 326 1124 343 293 1125 342 295 1126 373 325 1127 302 254 1128 299 251 1129 375 327 1130 377 328 1131 376 329 1132 300 252 1133 303 255 1134 378 330 1135 291 243 1136 302 254 1137 377 328 1138 379 331 1139 378 330 1140 303 255 1141 292 244 1142 380 332 1143 295 245 1144 301 253 1145 383 333 1146 381 334 1147 383 333 1148 301 253 1149 296 247 1150 382 335 1151 299 251 1152 297 249 1153 384 336 1154 375 327 1155 385 337 1156 298 250 1157 300 252 1158 376 329 1159 297 249 1160 293 246 1161 386 338 1162 384 336 1163 387 339 1164 294 248 1165 298 250 1166 385 337 1167 293 246 1168 295 245 1169 381 334 1170 386 338 1171 382 335 1172 296 247 1173 294 248 1174 387 339 1175 289 241 1176 291 243 1177 379 331 1178 388 340 1179 380 332 1180 292 244 1181 290 242 1182 389 341 1183 287 239 1184 289 241 1185 388 340 1186 390 342 1187 389 341 1188 290 242 1189 288 240 1190 391 343 1191 285 236 1192 287 239 1193 390 342 1194 392 344 1195 391 343 1196 288 240 1197 286 238 1198 393 345 1199 284 237 1200 285 236 1201 392 344 1202 394 346 1203 393 345 1204 286 238 1205 284 237 1206 394 346 1207 0 0 1208 14 3 1209 397 347 1210 395 348 1211 398 349 1212 15 7 1213 1 6 1214 396 350 1215 12 8 1216 399 351 1217 397 347 1218 14 3 1219 398 349 1220 400 352 1221 13 10 1222 15 7 1223 10 12 1224 401 353 1225 399 351 1226 12 8 1227 400 352 1228 402 354 1229 11 14 1230 13 10 1231 8 16 1232 403 355 1233 401 353 1234 10 12 1235 402 354 1236 404 356 1237 9 18 1238 11 14 1239 6 20 1240 405 357 1241 403 355 1242 8 16 1243 404 356 1244 406 358 1245 7 22 1246 9 18 1247 4 24 1248 407 359 1249 405 357 1250 6 20 1251 406 358 1252 408 360 1253 5 26 1254 7 22 1255 2 28 1256 409 361 1257 407 359 1258 4 24 1259 408 360 1260 410 362 1261 3 30 1262 5 26 1263 0 0 1264 395 348 1265 409 361 1266 2 28 1267 410 362 1268 396 350 1269 1 6 1270 3 30 1271 34 363 1272 46 364 1273 413 365 1274 411 366 1275 414 367 1276 47 368 1277 35 369 1278 412 370 1279 44 371 1280 415 372 1281 413 365 1282 46 364 1283 414 367 1284 416 373 1285 45 374 1286 47 368 1287 42 375 1288 417 376 1289 415 372 1290 44 371 1291 416 373 1292 418 377 1293 43 378 1294 45 374 1295 40 379 1296 419 380 1297 417 376 1298 42 375 1299 418 377 1300 420 381 1301 41 382 1302 43 378 1303 38 383 1304 421 384 1305 419 380 1306 40 379 1307 420 381 1308 422 385 1309 39 386 1310 41 382 1311 36 387 1312 423 388 1313 421 384 1314 38 383 1315 422 385 1316 424 389 1317 37 390 1318 39 386 1319 32 391 1320 425 392 1321 423 388 1322 36 387 1323 424 389 1324 426 393 1325 33 394 1326 37 390 1327 34 363 1328 411 366 1329 425 392 1330 32 391 1331 426 393 1332 412 370 1333 35 369 1334 33 394 1335 425 392 1336 411 366 1337 427 395 1338 429 396 1339 428 397 1340 412 370 1341 426 393 1342 430 398 1343 423 388 1344 425 392 1345 429 396 1346 431 399 1347 430 398 1348 426 393 1349 424 389 1350 432 400 1351 421 384 1352 423 388 1353 431 399 1354 433 401 1355 432 400 1356 424 389 1357 422 385 1358 434 402 1359 419 380 1360 421 384 1361 433 401 1362 435 403 1363 434 402 1364 422 385 1365 420 381 1366 436 404 1367 417 376 1368 419 380 1369 435 403 1370 437 405 1371 436 404 1372 420 381 1373 418 377 1374 438 406 1375 415 372 1376 417 376 1377 437 405 1378 439 407 1379 438 406 1380 418 377 1381 416 373 1382 440 408 1383 413 365 1384 415 372 1385 439 407 1386 441 409 1387 440 408 1388 416 373 1389 414 367 1390 442 410 1391 413 365 1392 441 409 1393 427 395 1394 411 366 1395 428 397 1396 442 410 1397 414 367 1398 412 370 1399 50 411 1400 62 412 1401 445 413 1402 443 414 1403 446 415 1404 63 416 1405 51 417 1406 444 418 1407 62 412 1408 60 419 1409 447 420 1410 445 413 1411 448 421 1412 61 422 1413 63 416 1414 446 415 1415 60 419 1416 58 423 1417 449 424 1418 447 420 1419 450 425 1420 59 426 1421 61 422 1422 448 421 1423 58 423 1424 56 427 1425 451 428 1426 449 424 1427 452 429 1428 57 430 1429 59 426 1430 450 425 1431 56 427 1432 54 431 1433 453 432 1434 451 428 1435 454 433 1436 55 434 1437 57 430 1438 452 429 1439 54 431 1440 52 435 1441 455 436 1442 453 432 1443 456 437 1444 53 438 1445 55 434 1446 454 433 1447 52 435 1448 48 439 1449 457 440 1450 455 436 1451 458 441 1452 49 442 1453 53 438 1454 456 437 1455 50 411 1456 443 414 1457 457 440 1458 48 439 1459 458 441 1460 444 418 1461 51 417 1462 49 442 1463 427 395 1464 443 414 1465 445 413 1466 429 396 1467 446 415 1468 444 418 1469 428 397 1470 430 398 1471 429 396 1472 445 413 1473 447 420 1474 431 399 1475 448 421 1476 446 415 1477 430 398 1478 432 400 1479 431 399 1480 447 420 1481 449 424 1482 433 401 1483 450 425 1484 448 421 1485 432 400 1486 434 402 1487 433 401 1488 449 424 1489 451 428 1490 435 403 1491 452 429 1492 450 425 1493 434 402 1494 436 404 1495 435 403 1496 451 428 1497 453 432 1498 437 405 1499 454 433 1500 452 429 1501 436 404 1502 438 406 1503 437 405 1504 453 432 1505 455 436 1506 439 407 1507 456 437 1508 454 433 1509 438 406 1510 440 408 1511 439 407 1512 455 436 1513 457 440 1514 441 409 1515 458 441 1516 456 437 1517 440 408 1518 442 410 1519 427 395 1520 441 409 1521 457 440 1522 443 414 1523 458 441 1524 442 410 1525 428 397 1526 444 418 1527 16 443 1528 459 444 1529 461 445 1530 30 446 1531 462 447 1532 460 448 1533 17 449 1534 31 450 1535 459 444 1536 34 363 1537 32 391 1538 461 445 1539 33 394 1540 35 369 1541 460 448 1542 462 447 1543 30 446 1544 461 445 1545 463 451 1546 28 452 1547 464 453 1548 462 447 1549 31 450 1550 29 454 1551 461 445 1552 32 391 1553 36 387 1554 463 451 1555 37 390 1556 33 394 1557 462 447 1558 464 453 1559 28 452 1560 463 451 1561 465 455 1562 26 456 1563 466 457 1564 464 453 1565 29 454 1566 27 458 1567 463 451 1568 36 387 1569 38 383 1570 465 455 1571 39 386 1572 37 390 1573 464 453 1574 466 457 1575 26 456 1576 465 455 1577 467 459 1578 24 460 1579 468 461 1580 466 457 1581 27 458 1582 25 462 1583 465 455 1584 38 383 1585 40 379 1586 467 459 1587 41 382 1588 39 386 1589 466 457 1590 468 461 1591 24 460 1592 467 459 1593 469 463 1594 22 464 1595 470 465 1596 468 461 1597 25 462 1598 23 466 1599 467 459 1600 40 379 1601 42 375 1602 469 463 1603 43 378 1604 41 382 1605 468 461 1606 470 465 1607 22 464 1608 469 463 1609 471 467 1610 20 468 1611 472 469 1612 470 465 1613 23 466 1614 21 470 1615 469 463 1616 42 375 1617 44 371 1618 471 467 1619 45 374 1620 43 378 1621 470 465 1622 472 469 1623 20 468 1624 471 467 1625 473 471 1626 18 472 1627 474 473 1628 472 469 1629 21 470 1630 19 474 1631 471 467 1632 44 371 1633 46 364 1634 473 471 1635 47 368 1636 45 374 1637 472 469 1638 474 473 1639 16 443 1640 18 472 1641 473 471 1642 459 444 1643 474 473 1644 19 474 1645 17 449 1646 460 448 1647 459 444 1648 473 471 1649 46 364 1650 34 363 1651 47 368 1652 474 473 1653 460 448 1654 35 369 1655 395 348 1656 397 347 1657 477 475 1658 475 476 1659 478 477 1660 398 349 1661 396 350 1662 476 478 1663 475 476 1664 477 475 1665 18 472 1666 16 443 1667 19 474 1668 478 477 1669 476 478 1670 17 449 1671 399 351 1672 479 479 1673 477 475 1674 397 347 1675 478 477 1676 480 480 1677 400 352 1678 398 349 1679 479 479 1680 20 468 1681 18 472 1682 477 475 1683 19 474 1684 21 470 1685 480 480 1686 478 477 1687 401 353 1688 481 481 1689 479 479 1690 399 351 1691 480 480 1692 482 482 1693 402 354 1694 400 352 1695 481 481 1696 22 464 1697 20 468 1698 479 479 1699 21 470 1700 23 466 1701 482 482 1702 480 480 1703 403 355 1704 483 483 1705 481 481 1706 401 353 1707 482 482 1708 484 484 1709 404 356 1710 402 354 1711 483 483 1712 24 460 1713 22 464 1714 481 481 1715 23 466 1716 25 462 1717 484 484 1718 482 482 1719 405 357 1720 485 485 1721 483 483 1722 403 355 1723 484 484 1724 486 486 1725 406 358 1726 404 356 1727 485 485 1728 26 456 1729 24 460 1730 483 483 1731 25 462 1732 27 458 1733 486 486 1734 484 484 1735 407 359 1736 487 487 1737 485 485 1738 405 357 1739 486 486 1740 488 488 1741 408 360 1742 406 358 1743 487 487 1744 28 452 1745 26 456 1746 485 485 1747 27 458 1748 29 454 1749 488 488 1750 486 486 1751 409 361 1752 489 489 1753 487 487 1754 407 359 1755 488 488 1756 490 490 1757 410 362 1758 408 360 1759 489 489 1760 30 446 1761 28 452 1762 487 487 1763 29 454 1764 31 450 1765 490 490 1766 488 488 1767 395 348 1768 475 476 1769 489 489 1770 409 361 1771 490 490 1772 476 478 1773 396 350 1774 410 362 1775 475 476 1776 16 443 1777 30 446 1778 489 489 1779 31 450 1780 17 449 1781 476 478 1782 490 490 1783 78 29 1784 491 491 1785 493 492 1786 64 1 1787 494 493 1788 492 494 1789 79 31 1790 65 5 1791 491 491 1792 80 32 1793 94 40 1794 493 492 1795 95 42 1796 81 38 1797 492 494 1798 494 493 1799 76 25 1800 495 495 1801 491 491 1802 78 29 1803 492 494 1804 496 496 1805 77 27 1806 79 31 1807 495 495 1808 82 33 1809 80 32 1810 491 491 1811 81 38 1812 83 37 1813 496 496 1814 492 494 1815 74 21 1816 497 497 1817 495 495 1818 76 25 1819 496 496 1820 498 498 1821 75 23 1822 77 27 1823 497 497 1824 84 60 1825 82 33 1826 495 495 1827 83 37 1828 85 62 1829 498 498 1830 496 496 1831 72 17 1832 499 499 1833 497 497 1834 74 21 1835 498 498 1836 500 500 1837 73 19 1838 75 23 1839 499 499 1840 86 56 1841 84 60 1842 497 497 1843 85 62 1844 87 58 1845 500 500 1846 498 498 1847 70 13 1848 501 501 1849 499 499 1850 72 17 1851 500 500 1852 502 502 1853 71 15 1854 73 19 1855 501 501 1856 88 52 1857 86 56 1858 499 499 1859 87 58 1860 89 54 1861 502 502 1862 500 500 1863 68 9 1864 503 503 1865 501 501 1866 70 13 1867 502 502 1868 504 504 1869 69 11 1870 71 15 1871 503 503 1872 90 44 1873 88 52 1874 501 501 1875 89 54 1876 91 50 1877 504 504 1878 502 502 1879 66 2 1880 505 505 1881 503 503 1882 68 9 1883 504 504 1884 506 506 1885 67 4 1886 69 11 1887 505 505 1888 92 45 1889 90 44 1890 503 503 1891 91 50 1892 93 49 1893 506 506 1894 504 504 1895 66 2 1896 64 1 1897 493 492 1898 505 505 1899 494 493 1900 65 5 1901 67 4 1902 506 506 1903 505 505 1904 493 492 1905 94 40 1906 92 45 1907 95 42 1908 494 493 1909 506 506 1910 93 49 1911 630 565 2680 575 554 2681 712 712 2682 714 713 2683 713 714 2684 576 555 2685 631 567 2686 715 715 2687 629 566 2688 630 565 2689 714 713 2690 716 716 2691 715 715 2692 631 567 2693 629 566 2694 716 716 2695 580 561 2696 627 563 2697 719 717 2698 717 718 2699 719 717 2700 627 563 2701 581 562 2702 718 719 2703 573 548 2704 580 561 2705 717 718 2706 720 720 2707 718 719 2708 581 562 2709 574 550 2710 721 721 2711 575 554 2712 571 549 2713 722 722 2714 712 712 2715 723 723 2716 572 551 2717 576 555 2718 713 714 2719 571 549 2720 573 548 2721 720 720 2722 722 722 2723 721 721 2724 574 550 2725 572 551 2726 723 723 2727 413 365 30931 415 372 30932 2187 7333 30933 415 372 30934 2188 7328 30935 2187 7333 30936 415 372 30937 2181 7329 30938 2188 7328 30939 415 372 30940 417 376 30941 2181 7329 30942 411 366 30994 413 365 30995 2179 7347 30996 416 373 31003 5611 3971 31004 418 377 31005 416 373 31006 5612 3985 31007 5611 3971 31008 414 367 31009 5612 3985 31010 416 373 31011 414 367 31012 5614 3986 31013 5612 3985 31014 414 367 31015 5620 3975 31016 5614 3986 31017 412 370 31018 5620 3975 31019 414 367 31020 280 232 31072 719 717 31073 718 719 31074 280 232 31075 282 234 31076 719 717 31077 282 234 31078 283 235 31079 719 717 31080 281 233 31081 719 717 31082 283 235 31083 281 233 31084 717 718 31085 719 717 31086 279 231 31087 717 718 31088 281 233 31089 277 229 31090 717 718 31091 279 231 31092 277 229 31093 720 720 31094 717 718 31095 268 220 31096 720 720 31097 277 229 31098 268 220 31099 722 722 31100 720 720 31101 264 217 31102 722 722 31103 268 220 31104 264 217 31105 266 216 31106 722 722 31107 266 216 31108 712 712 31109 722 722 31110 266 216 31111 273 225 31112 712 712 31113 273 225 31114 714 713 31115 712 712 31116 273 225 31117 275 227 31118 714 713 31119 271 223 31120 714 713 31121 275 227 31122 271 223 31123 716 716 31124 714 713 31125 270 222 31126 716 716 31127 271 223 31128 270 222 31129 272 224 31130 716 716 31131 272 224 31132 715 715 31133 716 716 31134 272 224 31135 276 228 31136 715 715 31137 274 226 31138 715 715 31139 276 228 31140 274 226 31141 713 714 31142 715 715 31143 267 218 31144 713 714 31145 274 226 31146 267 218 31147 723 723 31148 713 714 31149 265 219 31150 723 723 31151 267 218 31152 265 219 31153 721 721 31154 723 723 31155 265 219 31156 269 221 31157 721 721 31158 269 221 31159 718 719 31160 721 721 31161 269 221 31162 280 232 31163 718 719 31164 7771 7754 31309 7773 7755 31310 7776 7756 31311 7774 7757 31312 7776 7756 31313 7773 7755 31314 7772 7758 31315 7775 7759 31316 7754 7760 31317 7771 7754 31318 7774 7757 31319 7777 7761 31320 7775 7759 31321 7772 7758 31322 7755 7762 31323 7778 7763 31324 7766 7764 31325 7769 7765 31326 7781 7766 31327 7779 7767 31328 7782 7768 31329 7770 7769 31330 7767 7770 31331 7780 7771 31332 7769 7765 31333 7764 7772 31334 7783 7773 31335 7781 7766 31336 7784 7774 31337 7765 7775 31338 7770 7769 31339 7782 7768 31340 7768 7776 31341 7766 7764 31342 7779 7767 31343 7785 7777 31344 7780 7771 31345 7767 7770 31346 7768 7776 31347 7785 7777 31348 7764 7772 31349 7762 7778 31350 7786 7779 31351 7783 7773 31352 7787 7780 31353 7763 7781 31354 7765 7775 31355 7784 7774 31356 7762 7778 31357 7760 7782 31358 7788 7783 31359 7786 7779 31360 7789 7784 31361 7761 7785 31362 7763 7781 31363 7787 7780 31364 7760 7782 31365 7758 7786 31366 7790 7787 31367 7788 7783 31368 7791 7788 31369 7789 7784 31370 7761 7785 31371 7759 7789 31372 7758 7786 31373 7756 7790 31374 7792 7791 31375 7790 7787 31376 7793 7792 31377 7757 7793 31378 7759 7789 31379 7791 7788 31380 7756 7790 31381 7754 7760 31382 7777 7761 31383 7792 7791 31384 7778 7763 31385 7755 7762 31386 7757 7793 31387 7793 7792 31388 7792 7791 31389 7796 7794 31390 7794 7795 31391 7777 7761 31392 7795 7796 31393 7797 7797 31394 7793 7792 31395 7778 7763 31396 7790 7787 31397 7798 7798 31398 7796 7794 31399 7792 7791 31400 7788 7783 31401 7800 7799 31402 7798 7798 31403 7790 7787 31404 7799 7800 31405 7801 7801 31406 7789 7784 31407 7791 7788 31408 7786 7779 31409 7802 7802 31410 7800 7799 31411 7788 7783 31412 7801 7801 31413 7803 7803 31414 7787 7780 31415 7789 7784 31416 7783 7773 31417 7804 7804 31418 7802 7802 31419 7786 7779 31420 7803 7803 31421 7805 7805 31422 7784 7774 31423 7787 7780 31424 7781 7766 31425 7806 7806 31426 7804 7804 31427 7783 7773 31428 7805 7805 31429 7807 7807 31430 7782 7768 31431 7784 7774 31432 7777 7761 31433 7794 7795 31434 7808 7808 31435 7774 7757 31436 7809 7809 31437 7795 7796 31438 7778 7763 31439 7775 7759 31440 7774 7757 31441 7808 7808 31442 7810 7810 31443 7776 7756 31444 7810 7810 31445 7809 7809 31446 7775 7759 31447 7776 7756 31448 7808 7808 31449 7811 7811 31450 7813 7812 31451 7810 7810 31452 7813 7812 31453 7812 7813 31454 7809 7809 31455 7810 7810 31456 7794 7795 31457 7814 7814 31458 7811 7811 31459 7808 7808 31460 7812 7813 31461 7815 7815 31462 7795 7796 31463 7809 7809 31464 7806 7806 31465 7818 7816 31466 7816 7817 31467 7804 7804 31468 7817 7818 31469 7819 7819 31470 7807 7807 31471 7805 7805 31472 7804 7804 31473 7816 7817 31474 7820 7820 31475 7802 7802 31476 7821 7821 31477 7817 7818 31478 7805 7805 31479 7803 7803 31480 7802 7802 31481 7820 7820 31482 7822 7822 31483 7800 7799 31484 7823 7823 31485 7821 7821 31486 7803 7803 31487 7801 7801 31488 7800 7799 31489 7822 7822 31490 7824 7824 31491 7798 7798 31492 7825 7825 31493 7823 7823 31494 7801 7801 31495 7799 7800 31496 7798 7798 31497 7824 7824 31498 7826 7826 31499 7796 7794 31500 7827 7827 31501 7825 7825 31502 7799 7800 31503 7797 7797 31504 7796 7794 31505 7794 7795 31506 7814 7814 31507 7826 7826 31508 7826 7826 31509 7830 7828 31510 7828 7829 31511 7814 7814 31512 7829 7830 31513 7831 7831 31514 7827 7827 31515 7815 7815 31516 7824 7824 31517 7832 7832 31518 7830 7828 31519 7826 7826 31520 7831 7831 31521 7833 7833 31522 7825 7825 31523 7827 7827 31524 7822 7822 31525 7834 7834 31526 7832 7832 31527 7824 7824 31528 7833 7833 31529 7835 7835 31530 7823 7823 31531 7825 7825 31532 7820 7820 31533 7836 7836 31534 7834 7834 31535 7822 7822 31536 7835 7835 31537 7837 7837 31538 7821 7821 31539 7823 7823 31540 7816 7817 31541 7838 7838 31542 7836 7836 31543 7820 7820 31544 7837 7837 31545 7839 7839 31546 7817 7818 31547 7821 7821 31548 7818 7816 31549 7840 7840 31550 7838 7838 31551 7816 7817 31552 7839 7839 31553 7841 7841 31554 7819 7819 31555 7817 7818 31556 7814 7814 31557 7828 7829 31558 7842 7842 31559 7811 7811 31560 7843 7843 31561 7829 7830 31562 7815 7815 31563 7812 7813 31564 7811 7811 31565 7842 7842 31566 7844 7844 31567 7813 7812 31568 7844 7844 31569 7843 7843 31570 7812 7813 31571 7813 7812 31572</p> + </polylist> + <polylist material="jeans-blue" count="208"> + <input semantic="VERTEX" source="#_6-mesh-vertices" offset="0"/> + <input semantic="NORMAL" source="#_6-mesh-normals" offset="1"/> + <input semantic="TEXCOORD" source="#_6-mesh-map-0" offset="2" set="0"/> + <vcount>4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 </vcount> + <p>541 507 1912 553 508 1913 555 509 1914 557 510 1915 556 511 1916 554 512 1917 542 513 1918 558 514 1919 553 508 1920 551 515 1921 559 516 1922 555 509 1923 560 517 1924 552 518 1925 554 512 1926 556 511 1927 551 515 1928 549 519 1929 561 520 1930 559 516 1931 562 521 1932 550 522 1933 552 518 1934 560 517 1935 547 523 1936 563 524 1937 561 520 1938 549 519 1939 562 521 1940 564 525 1941 548 526 1942 550 522 1943 547 523 1944 545 527 1945 565 528 1946 563 524 1947 566 529 1948 546 530 1949 548 526 1950 564 525 1951 543 531 1952 567 532 1953 565 528 1954 545 527 1955 566 529 1956 568 533 1957 544 534 1958 546 530 1959 543 531 1960 539 535 1961 569 536 1962 567 532 1963 570 537 1964 540 538 1965 544 534 1966 568 533 1967 541 507 1968 557 510 1969 569 536 1970 539 535 1971 570 537 1972 558 514 1973 542 513 1974 540 538 1975 563 524 1976 577 539 1977 578 540 1978 561 520 1979 578 540 1980 577 539 1981 564 525 1982 562 521 1983 559 516 1984 561 520 1985 578 540 1986 579 541 1987 578 540 1988 562 521 1989 560 517 1990 579 541 1991 563 524 1992 565 528 1993 614 542 1994 577 539 1995 614 542 1996 566 529 1997 564 525 1998 577 539 1999 555 509 2000 559 516 2001 579 541 2002 615 543 2003 579 541 2004 560 517 2005 556 511 2006 615 543 2007 569 536 2008 557 510 2009 618 544 2010 616 545 2011 619 546 2012 558 514 2013 570 537 2014 617 547 2015 616 545 2016 618 544 2017 573 548 2018 571 549 2019 574 550 2020 619 546 2021 617 547 2022 572 551 2023 569 536 2024 616 545 2025 620 552 2026 567 532 2027 621 553 2028 617 547 2029 570 537 2030 568 533 2031 616 545 2032 571 549 2033 575 554 2034 620 552 2035 576 555 2036 572 551 2037 617 547 2038 621 553 2039 567 532 2040 620 552 2041 622 556 2042 565 528 2043 623 557 2044 621 553 2045 568 533 2046 566 529 2047 555 509 2048 624 558 2049 618 544 2050 557 510 2051 619 546 2052 625 559 2053 556 511 2054 558 514 2055 555 509 2056 615 543 2057 626 560 2058 624 558 2059 626 560 2060 615 543 2061 556 511 2062 625 559 2063 573 548 2064 618 544 2065 624 558 2066 580 561 2067 625 559 2068 619 546 2069 574 550 2070 581 562 2071 580 561 2072 624 558 2073 626 560 2074 627 563 2075 626 560 2076 625 559 2077 581 562 2078 627 563 2079 565 528 2080 622 556 2081 628 564 2082 614 542 2083 628 564 2084 623 557 2085 566 529 2086 614 542 2087 622 556 2088 630 565 2089 629 566 2090 628 564 2091 629 566 2092 631 567 2093 623 557 2094 628 564 2095 575 554 2096 630 565 2097 622 556 2098 620 552 2099 623 557 2100 631 567 2101 576 555 2102 621 553 2103 582 568 2104 584 569 2105 634 570 2106 632 571 2107 635 572 2108 585 573 2109 583 574 2110 633 575 2111 632 571 2112 634 570 2113 541 507 2114 539 535 2115 542 513 2116 635 572 2117 633 575 2118 540 538 2119 582 568 2120 632 571 2121 636 576 2122 586 577 2123 637 578 2124 633 575 2125 583 574 2126 587 579 2127 632 571 2128 539 535 2129 543 531 2130 636 576 2131 544 534 2132 540 538 2133 633 575 2134 637 578 2135 588 580 2136 586 577 2137 636 576 2138 638 581 2139 637 578 2140 587 579 2141 589 582 2142 639 583 2143 638 581 2144 636 576 2145 543 531 2146 545 527 2147 544 534 2148 637 578 2149 639 583 2150 546 530 2151 588 580 2152 638 581 2153 640 584 2154 590 585 2155 641 586 2156 639 583 2157 589 582 2158 591 587 2159 638 581 2160 545 527 2161 547 523 2162 640 584 2163 548 526 2164 546 530 2165 639 583 2166 641 586 2167 592 588 2168 590 585 2169 640 584 2170 642 589 2171 641 586 2172 591 587 2173 593 590 2174 643 591 2175 642 589 2176 640 584 2177 547 523 2178 549 519 2179 548 526 2180 641 586 2181 643 591 2182 550 522 2183 592 588 2184 642 589 2185 644 592 2186 594 593 2187 645 594 2188 643 591 2189 593 590 2190 595 595 2191 642 589 2192 549 519 2193 551 515 2194 644 592 2195 552 518 2196 550 522 2197 643 591 2198 645 594 2199 594 593 2200 644 592 2201 646 596 2202 596 597 2203 647 598 2204 645 594 2205 595 595 2206 597 599 2207 644 592 2208 551 515 2209 553 508 2210 646 596 2211 554 512 2212 552 518 2213 645 594 2214 647 598 2215 596 597 2216 646 596 2217 634 570 2218 584 569 2219 635 572 2220 647 598 2221 597 599 2222 585 573 2223 646 596 2224 553 508 2225 541 507 2226 634 570 2227 542 513 2228 554 512 2229 647 598 2230 635 572 2231 648 600 2232 650 601 2233 584 569 2234 582 568 2235 585 573 2236 651 602 2237 649 603 2238 583 574 2239 648 600 2240 582 568 2241 586 577 2242 652 604 2243 587 579 2244 583 574 2245 649 603 2246 653 605 2247 654 606 2248 652 604 2249 586 577 2250 588 580 2251 587 579 2252 653 605 2253 655 607 2254 589 582 2255 654 606 2256 588 580 2257 590 585 2258 656 608 2259 591 587 2260 589 582 2261 655 607 2262 657 609 2263 658 610 2264 656 608 2265 590 585 2266 592 588 2267 591 587 2268 657 609 2269 659 611 2270 593 590 2271 658 610 2272 592 588 2273 594 593 2274 660 612 2275 595 595 2276 593 590 2277 659 611 2278 661 613 2279 660 612 2280 594 593 2281 596 597 2282 662 614 2283 597 599 2284 595 595 2285 661 613 2286 663 615 2287 662 614 2288 596 597 2289 584 569 2290 650 601 2291 585 573 2292 597 599 2293 663 615 2294 651 602 2295 600 616 2296 666 617 2297 664 618 2298 598 619 2299 665 620 2300 667 621 2301 601 622 2302 599 623 2303 666 617 2304 507 624 2305 521 625 2306 664 618 2307 522 626 2308 508 627 2309 667 621 2310 665 620 2311 519 628 2312 668 629 2313 664 618 2314 521 625 2315 665 620 2316 669 630 2317 520 631 2318 522 626 2319 668 629 2320 602 632 2321 598 619 2322 664 618 2323 599 623 2324 603 633 2325 669 630 2326 665 620 2327 517 634 2328 670 635 2329 668 629 2330 519 628 2331 669 630 2332 671 636 2333 518 637 2334 520 631 2335 670 635 2336 604 638 2337 602 632 2338 668 629 2339 603 633 2340 605 639 2341 671 636 2342 669 630 2343 517 634 2344 515 640 2345 672 641 2346 670 635 2347 673 642 2348 516 643 2349 518 637 2350 671 636 2351 670 635 2352 672 641 2353 606 644 2354 604 638 2355 607 645 2356 673 642 2357 671 636 2358 605 639 2359 513 646 2360 674 647 2361 672 641 2362 515 640 2363 673 642 2364 675 648 2365 514 649 2366 516 643 2367 674 647 2368 608 650 2369 606 644 2370 672 641 2371 607 645 2372 609 651 2373 675 648 2374 673 642 2375 513 646 2376 511 652 2377 676 653 2378 674 647 2379 677 654 2380 512 655 2381 514 649 2382 675 648 2383 674 647 2384 676 653 2385 610 656 2386 608 650 2387 611 657 2388 677 654 2389 675 648 2390 609 651 2391 509 658 2392 678 659 2393 676 653 2394 511 652 2395 677 654 2396 679 660 2397 510 661 2398 512 655 2399 678 659 2400 612 662 2401 610 656 2402 676 653 2403 611 657 2404 613 663 2405 679 660 2406 677 654 2407 600 616 2408 612 662 2409 678 659 2410 666 617 2411 679 660 2412 613 663 2413 601 622 2414 667 621 2415 509 658 2416 507 624 2417 666 617 2418 678 659 2419 667 621 2420 508 627 2421 510 661 2422 679 660 2423 598 619 2424 680 664 2425 682 665 2426 600 616 2427 683 666 2428 681 667 2429 599 623 2430 601 622 2431 680 664 2432 525 668 2433 523 669 2434 682 665 2435 524 670 2436 526 671 2437 681 667 2438 683 666 2439 602 632 2440 684 672 2441 680 664 2442 598 619 2443 681 667 2444 685 673 2445 603 633 2446 599 623 2447 684 672 2448 527 674 2449 525 668 2450 680 664 2451 526 671 2452 528 675 2453 685 673 2454 681 667 2455 604 638 2456 686 676 2457 684 672 2458 602 632 2459 685 673 2460 687 677 2461 605 639 2462 603 633 2463 686 676 2464 529 678 2465 527 674 2466 684 672 2467 528 675 2468 530 679 2469 687 677 2470 685 673 2471 604 638 2472 606 644 2473 688 680 2474 686 676 2475 689 681 2476 607 645 2477 605 639 2478 687 677 2479 686 676 2480 688 680 2481 531 682 2482 529 678 2483 532 683 2484 689 681 2485 687 677 2486 530 679 2487 608 650 2488 690 684 2489 688 680 2490 606 644 2491 689 681 2492 691 685 2493 609 651 2494 607 645 2495 690 684 2496 533 686 2497 531 682 2498 688 680 2499 532 683 2500 534 687 2501 691 685 2502 689 681 2503 608 650 2504 610 656 2505 692 688 2506 690 684 2507 693 689 2508 611 657 2509 609 651 2510 691 685 2511 690 684 2512 692 688 2513 535 690 2514 533 686 2515 536 691 2516 693 689 2517 691 685 2518 534 687 2519 612 662 2520 694 692 2521 692 688 2522 610 656 2523 693 689 2524 695 693 2525 613 663 2526 611 657 2527 694 692 2528 537 694 2529 535 690 2530 692 688 2531 536 691 2532 538 695 2533 695 693 2534 693 689 2535 612 662 2536 600 616 2537 682 665 2538 694 692 2539 683 666 2540 601 622 2541 613 663 2542 695 693 2543 694 692 2544 682 665 2545 523 669 2546 537 694 2547 524 670 2548 683 666 2549 695 693 2550 538 695 2551 537 694 2552 523 669 2553 698 696 2554 696 697 2555 699 698 2556 524 670 2557 538 695 2558 697 699 2559 696 697 2560 698 696 2561 650 601 2562 648 600 2563 651 602 2564 699 698 2565 697 699 2566 649 603 2567 537 694 2568 696 697 2569 700 700 2570 535 690 2571 701 701 2572 697 699 2573 538 695 2574 536 691 2575 696 697 2576 648 600 2577 652 604 2578 700 700 2579 653 605 2580 649 603 2581 697 699 2582 701 701 2583 533 686 2584 535 690 2585 700 700 2586 702 702 2587 701 701 2588 536 691 2589 534 687 2590 703 703 2591 702 702 2592 700 700 2593 652 604 2594 654 606 2595 653 605 2596 701 701 2597 703 703 2598 655 607 2599 533 686 2600 702 702 2601 704 704 2602 531 682 2603 705 705 2604 703 703 2605 534 687 2606 532 683 2607 702 702 2608 654 606 2609 656 608 2610 704 704 2611 657 609 2612 655 607 2613 703 703 2614 705 705 2615 529 678 2616 531 682 2617 704 704 2618 706 706 2619 705 705 2620 532 683 2621 530 679 2622 707 707 2623 706 706 2624 704 704 2625 656 608 2626 658 610 2627 657 609 2628 705 705 2629 707 707 2630 659 611 2631 529 678 2632 706 706 2633 708 708 2634 527 674 2635 709 709 2636 707 707 2637 530 679 2638 528 675 2639 706 706 2640 658 610 2641 660 612 2642 708 708 2643 661 613 2644 659 611 2645 707 707 2646 709 709 2647 527 674 2648 708 708 2649 710 710 2650 525 668 2651 711 711 2652 709 709 2653 528 675 2654 526 671 2655 708 708 2656 660 612 2657 662 614 2658 710 710 2659 663 615 2660 661 613 2661 709 709 2662 711 711 2663 525 668 2664 710 710 2665 698 696 2666 523 669 2667 699 698 2668 711 711 2669 526 671 2670 524 670 2671 710 710 2672 662 614 2673 650 601 2674 698 696 2675 651 602 2676 663 615 2677 711 711 2678 699 698 2679 521 625 2728 507 624 2729 724 724 2730 726 725 2731 725 726 2732 508 627 2733 522 626 2734 727 727 2735 519 628 2736 521 625 2737 726 725 2738 728 728 2739 727 727 2740 522 626 2741 520 631 2742 729 729 2743 517 634 2744 519 628 2745 728 728 2746 730 730 2747 729 729 2748 520 631 2749 518 637 2750 731 731 2751 515 640 2752 517 634 2753 730 730 2754 732 732 2755 731 731 2756 518 637 2757 516 643 2758 733 733 2759 513 646 2760 515 640 2761 732 732 2762 734 734 2763 733 733 2764 516 643 2765 514 649 2766 735 735 2767 511 652 2768 513 646 2769 734 734 2770 736 736 2771 735 735 2772 514 649 2773 512 655 2774 737 737 2775 509 658 2776 511 652 2777 736 736 2778 738 738 2779 737 737 2780 512 655 2781 510 661 2782 739 739 2783 507 624 2784 509 658 2785 738 738 2786 724 724 2787 739 739 2788 510 661 2789 508 627 2790 725 726 2791</p> + </polylist> + </mesh> + </geometry> + </library_geometries> + <library_animations> + <animation id="_6_15_t_Hips_pose_matrix"> + <source id="_6_15_t_Hips_pose_matrix-input"> + <float_array id="_6_15_t_Hips_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_Hips_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_Hips_pose_matrix-output"> + <float_array id="_6_15_t_Hips_pose_matrix-output-array" count="2224">0.07256972 0.01169252 0.9972948 -0.01188027 0.9958643 0.053954 -0.07309824 0.003772318 -0.05466276 0.998475 -0.007728695 1.015285 0 0 0 1 0.07074534 0.009799957 0.9974462 6.49664e-4 0.9966713 0.03992015 -0.07108259 0.005482017 -0.04051482 0.9991548 -0.006943166 1.017135 0 0 0 1 0.06998628 0.007676482 0.9975184 0.01173967 0.9970274 0.03176289 -0.07019627 0.006757676 -0.03222298 0.999466 -0.005430698 1.018415 0 0 0 1 0.07039195 0.004579126 0.9975089 0.02307957 0.9971262 0.02775359 -0.07049232 0.007717192 -0.02800726 0.9996043 -0.002612292 1.019405 0 0 0 1 0.06878662 6.89839e-4 0.9976311 0.03567963 0.9973499 0.02370762 -0.06878364 0.009278059 -0.02369892 0.9997187 9.42759e-4 1.020525 0 0 0 1 0.06614851 -0.00150603 0.9978086 0.04807966 0.9975848 0.02133363 -0.06610143 0.01116138 -0.0211873 0.9997713 0.002913594 1.021355 0 0 0 1 0.06375372 -0.004606604 0.997955 0.05919963 0.9976584 0.02510648 -0.06361889 0.01278424 -0.02476209 0.9996742 0.006196498 1.021565 0 0 0 1 0.06555116 -0.006420791 0.9978286 0.0705896 0.9975628 0.02437704 -0.06537681 0.01425832 -0.02390432 0.9996822 0.008003056 1.022215 0 0 0 1 0.07195353 -0.007894098 0.9973767 0.08195966 0.9972072 0.02063345 -0.07177799 0.01549065 -0.02001267 0.9997559 0.009356737 1.024045 0 0 0 1 0.07705658 -0.01111716 0.9969648 0.09303957 0.9968839 0.01778692 -0.07685196 0.01657414 -0.01687854 0.99978 0.01245313 1.026325 0 0 0 1 0.07979357 -0.01559078 0.9966895 0.1043497 0.9967973 0.006561875 -0.07969951 0.01764523 -0.005297541 0.9998569 0.01606446 1.028035 0 0 0 1 0.08345347 -0.01879453 0.9963344 0.1150497 0.9965021 -0.002818167 -0.08352065 0.0185427 0.004377603 0.9998194 0.01849359 1.028635 0 0 0 1 0.08565515 -0.0226314 0.9960678 0.1252796 0.9962633 -0.009165585 -0.08588021 0.01913642 0.01107311 0.9997019 0.02176177 1.029365 0 0 0 1 0.08559429 -0.02616399 0.9959865 0.1352696 0.9961739 -0.01545363 -0.08601635 0.01943868 0.01764214 0.9995382 0.02474111 1.030445 0 0 0 1 0.08175587 -0.02954399 0.9962144 0.1456797 0.9961987 -0.02773469 -0.08257704 0.02031141 0.03006935 0.9991787 0.02716422 1.031435 0 0 0 1 0.07554608 -0.03210341 0.9966254 0.1561397 0.9962273 -0.04037898 -0.07681661 0.02154988 0.04270881 0.9986686 0.02893179 1.032145 0 0 0 1 0.07220596 -0.03430527 0.9967996 0.1660096 0.9962047 -0.04622352 -0.07375365 0.02218079 0.04860574 0.9983419 0.03083747 1.032805 0 0 0 1 0.0698226 -0.03747951 0.9968551 0.1764097 0.9962779 -0.04801732 -0.07158756 0.02272486 0.05054938 0.9981431 0.03398734 1.034295 0 0 0 1 0.06774884 -0.04003053 0.996899 0.1859596 0.9965257 -0.04579919 -0.06956255 0.02308917 0.04844182 0.9981483 0.03678858 1.035435 0 0 0 1 0.06492245 -0.0415799 0.9970237 0.1952096 0.9966217 -0.04766261 -0.06688398 0.02354025 0.05030179 0.9979977 0.03834503 1.035935 0 0 0 1 0.06200665 -0.04250478 0.9971702 0.2051696 0.9965322 -0.05290788 -0.06422221 0.02415877 0.05548793 0.9976944 0.03907674 1.036455 0 0 0 1 0.05704301 -0.04332345 0.9974313 0.2147796 0.9968667 -0.05236583 -0.05928522 0.02483922 0.05479979 0.9976878 0.04020059 1.037015 0 0 0 1 0.05134069 -0.04475432 0.9976779 0.2239096 0.9973534 -0.04920035 -0.05353105 0.02479434 0.05148184 0.9977858 0.0421099 1.037435 0 0 0 1 0.04674905 -0.04677248 0.997811 0.2332696 0.9977443 -0.04598981 -0.04890167 0.0243712 0.0481764 0.9978463 0.04451698 1.038025 0 0 0 1 0.04129844 -0.04769647 0.9980077 0.2434196 0.9975608 -0.05429077 -0.04387462 0.02489054 0.05627524 0.9973853 0.04533803 1.038515 0 0 0 1 0.03641176 -0.04986399 0.9980921 0.2535496 0.9970258 -0.0660727 -0.0396738 0.02561444 0.06792491 0.9965681 0.04730987 1.038475 0 0 0 1 0.03002387 -0.05295485 0.9981455 0.2633296 0.9968372 -0.07192444 -0.03380036 0.0258733 0.07358098 0.9960033 0.05062788 1.038165 0 0 0 1 0.02373427 -0.05191141 0.9983696 0.2720396 0.9973139 -0.06799125 -0.02724444 0.025568 0.06929469 0.9963344 0.0501582 1.037685 0 0 0 1 0.01758849 -0.0484218 0.9986721 0.2800296 0.9975431 -0.06689256 -0.02081197 0.02541148 0.06781148 0.9965845 0.04712629 1.036935 0 0 0 1 0.01080858 -0.04648971 0.9988603 0.2885797 0.9974859 -0.06946319 -0.01402676 0.02576959 0.07003617 0.9965007 0.04562199 1.036185 0 0 0 1 0.0076375 -0.0462923 0.9988988 0.2975796 0.9976446 -0.06774443 -0.0107674 0.02568131 0.06816828 0.9966282 0.04566586 1.035095 0 0 0 1 0.003138065 -0.04699605 0.9988901 0.3069397 0.9979346 -0.0639432 -0.00614351 0.02538836 0.064161 0.9968463 0.04669833 1.034075 0 0 0 1 -0.005077064 -0.04614663 0.9989218 0.3159196 0.997434 -0.07156974 0.001763284 0.0255233 0.07141119 0.9963675 0.0463916 1.032665 0 0 0 1 -0.007613003 -0.04472148 0.9989705 0.3246196 0.9968376 -0.0793631 0.004043877 0.02531099 0.07910054 0.9958421 0.04518419 1.030935 0 0 0 1 -0.008921921 -0.047221 0.9988446 0.3344596 0.9965692 -0.08261275 0.004996061 0.02522265 0.08228135 0.9954624 0.04779607 1.029605 0 0 0 1 -0.01170039 -0.04908317 0.9987261 0.3445696 0.9966685 -0.08119595 0.00768584 0.02561795 0.08071529 0.9954888 0.04986965 1.028415 0 0 0 1 -0.0141471 -0.04672133 0.9988078 0.3532996 0.9966021 -0.0817207 0.01029318 0.02564126 0.08114236 0.9955595 0.0477187 1.027135 0 0 0 1 -0.01558333 -0.04113268 0.9990321 0.3612896 0.9964289 -0.08356463 0.01210218 0.02503836 0.08298593 0.9956531 0.042288 1.026035 0 0 0 1 -0.01599174 -0.039312 0.999099 0.3701297 0.9964743 -0.08293455 0.01268643 0.02460283 0.0823611 0.9957793 0.04049962 1.025195 0 0 0 1 -0.0173459 -0.04099196 0.9990089 0.3797796 0.9962709 -0.08516925 0.01380366 0.02466332 0.08451902 0.9955229 0.04231643 1.024425 0 0 0 1 -0.02111339 -0.03899443 0.9990164 0.3892296 0.9957036 -0.0909304 0.01749408 0.02471143 0.09015882 0.9950935 0.04074674 1.024005 0 0 0 1 -0.02141875 -0.0356689 0.9991341 0.3983396 0.9953462 -0.09467542 0.01795762 0.02475953 0.09395295 0.994869 0.03753072 1.023275 0 0 0 1 -0.01761114 -0.0335142 0.9992831 0.4074996 0.9953725 -0.09501296 0.01435565 0.02448523 0.09446376 0.9949117 0.03503239 1.023025 0 0 0 1 -0.01684504 -0.0319519 0.9993475 0.4165896 0.9953543 -0.09529596 0.01373088 0.02423572 0.09479504 0.9949361 0.0334087 1.023075 0 0 0 1 -0.01749247 -0.02915549 0.9994218 0.4262696 0.995301 -0.0957188 0.01462799 0.024073 0.09523701 0.9949814 0.03069287 1.022805 0 0 0 1 -0.01581543 -0.0259971 0.9995369 0.4362696 0.9951691 -0.09728193 0.01321613 0.02387934 0.09689331 0.9949173 0.02741008 1.022294 0 0 0 1 -0.01371955 -0.02407014 0.9996162 0.4461697 0.9953735 -0.09540683 0.01136398 0.02362984 0.09509664 0.9951473 0.02526772 1.022345 0 0 0 1 -0.009677648 -0.02119582 0.9997285 0.4556996 0.9958696 -0.09046542 0.007722258 0.02305173 0.09027719 0.995674 0.0219838 1.022374 0 0 0 1 -0.005008995 -0.01591444 0.9998608 0.4649896 0.9961577 -0.08750396 0.003597676 0.02261 0.08743453 0.996037 0.01629161 1.022155 0 0 0 1 -0.004668653 -0.01154464 0.9999225 0.4746396 0.9953748 -0.09600245 0.003539025 0.02258992 0.09595417 0.9953141 0.0119394 1.021475 0 0 0 1 -0.003703534 -0.007296741 0.9999665 0.4843096 0.9951587 -0.09823596 0.002968907 0.02215439 0.09821099 0.9951364 0.007625222 1.020705 0 0 0 1 7.68268e-5 -0.002767741 0.9999962 0.4938896 0.9950637 -0.0992375 -3.51115e-4 0.02166306 0.09923809 0.9950599 0.002746462 1.019685 0 0 0 1 0.002438247 -9.40405e-4 0.9999966 0.5038797 0.9950936 -0.0989058 -0.002519309 0.021209 0.09890782 0.9950963 6.94634e-4 1.018855 0 0 0 1 0.003502845 -7.6238e-4 0.9999936 0.5140097 0.9947916 -0.1018679 -0.003562331 0.0206061 0.10187 0.9947977 4.01576e-4 1.018115 0 0 0 1 0.006466388 0.001312732 0.9999783 0.5238097 0.9949167 -0.1005038 -0.006301701 0.01977998 0.1004933 0.9949358 -0.001955986 1.017715 0 0 0 1 0.009799897 0.004557132 0.9999416 0.5331197 0.9954849 -0.09446102 -0.009325683 0.01886707 0.09441304 0.9955182 -0.005462229 1.016835 0 0 0 1 0.009220421 0.005033612 0.9999448 0.5428897 0.9955443 -0.09389269 -0.008707225 0.01779299 0.09384369 0.9955696 -0.005876898 1.015225 0 0 0 1 0.006871283 0.004103481 0.999968 0.5529397 0.9954488 -0.095079 -0.006450116 0.01713424 0.0950495 0.9954613 -0.004738092 1.014014 0 0 0 1 0.006990015 0.003890514 0.999968 0.5629897 0.995523 -0.0942893 -0.006592094 0.01669877 0.09426063 0.9955372 -0.004532217 1.012324 0 0 0 1 0.007021427 0.004616558 0.9999647 0.5724797 0.9953687 -0.09590828 -0.006546318 0.01575487 0.09587466 0.9953795 -0.005268573 1.010664 0 0 0 1 0.008044123 0.007744014 0.9999377 0.5815497 0.9958689 -0.09050762 -0.00731045 0.01412278 0.09044539 0.9958657 -0.008440077 1.010214 0 0 0 1 0.00730586 0.01046133 0.9999186 0.5914097 0.9960471 -0.08859872 -0.006350636 0.01296186 0.08852511 0.9960125 -0.01106727 1.010224 0 0 0 1 0.004466295 0.009327113 0.9999465 0.6020796 0.9960709 -0.08848512 -0.003623604 0.01206135 0.08844661 0.9960339 -0.009685635 1.009974 0 0 0 1 0.002026319 0.006630718 0.999976 0.6125296 0.9956883 -0.09275203 -0.001402616 0.01115465 0.09274053 0.9956672 -0.006790101 1.009014 0 0 0 1 0.001043736 0.00549978 0.9999843 0.6231997 0.9954022 -0.09578222 -5.12161e-4 0.01016116 0.09577792 0.9953871 -0.005574464 1.008024 0 0 0 1 8.4477e-4 0.005096614 0.9999867 0.6346297 0.9956399 -0.093279 -3.6568e-4 0.008882462 0.0932759 0.995627 -0.005153238 1.007154 0 0 0 1 -6.92865e-4 0.006559193 0.9999783 0.6458497 0.9955589 -0.09413129 0.001307189 0.007287561 0.09413778 0.9955382 -0.006464838 1.006664 0 0 0 1 -0.003090918 0.008430123 0.9999597 0.6565096 0.9959322 -0.09002459 0.003837406 0.005525231 0.09005331 0.9959039 -0.008117556 1.007094 0 0 0 1 -0.006482064 0.008250176 0.999945 0.6674097 0.9964636 -0.0837208 0.007150232 0.00387454 0.08377522 0.9964551 -0.007678329 1.008004 0 0 0 1 -0.008750915 0.0064525 0.9999409 0.6792497 0.9973883 -0.07163983 0.009190857 0.002453267 0.07169485 0.9974097 -0.005808711 1.009594 0 0 0 1 -0.008827686 0.004305839 0.9999518 0.6908897 0.9977737 -0.06606817 0.009092986 0.001515567 0.06610411 0.9978058 -0.003713011 1.010874 0 0 0 1 -0.008813738 0.002461135 0.9999582 0.7024797 0.9978898 -0.06431013 0.008953809 3.05073e-4 0.0643295 0.997927 -0.001889109 1.011604 0 0 0 1 -0.005185306 0.001523971 0.9999854 0.7140997 0.9986514 -0.05164998 0.005257129 -9.92227e-4 0.05165719 0.9986641 -0.001254081 1.012434 0 0 0 1 -0.002359628 0.003675937 0.9999905 0.7248697 0.9991305 -0.04161733 0.002510607 -0.001750111 0.04162615 0.9991269 -0.00357455 1.013794 0 0 0 1 5.51537e-4 0.003932535 0.9999921 0.7357897 0.9991446 -0.04135257 -3.88448e-4 -0.002526581 0.04135072 0.9991369 -0.003951966 1.015374 0 0 0 1 0.005356371 0.002386152 0.9999828 0.7477896 0.9991974 -0.03971016 -0.005257427 -0.003637909 0.03969693 0.9992084 -0.002596914 1.016734 0 0 0 1 0.01073008 7.01348e-5 0.9999424 0.7600097 0.9992845 -0.03627121 -0.01072043 -0.00490421 0.03626835 0.999342 -4.59278e-4 1.017844 0 0 0 1 0.01410001 -0.002132236 0.9998983 0.7719897 0.9993118 -0.03428328 -0.01416486 -0.006542503 0.03430998 0.9994099 0.001647353 1.019504 0 0 0 1 0.01642805 -0.003479361 0.999859 0.7829397 0.99915 -0.03775489 -0.01654773 -0.00821799 0.0378071 0.999281 0.002856135 1.021104 0 0 0 1 0.01915031 -0.003798544 0.9998094 0.7930096 0.9991933 -0.0352329 -0.01927238 -0.009750902 0.03529942 0.9993719 0.00312072 1.023084 0 0 0 1 0.02306246 -0.00468111 0.9997231 0.8036097 0.9994334 -0.02441293 -0.02317011 -0.01150703 0.02451461 0.999691 0.004115402 1.025784 0 0 0 1 0.02392613 -0.006609022 0.9996919 0.8145096 0.9995011 -0.02046447 -0.02405691 -0.01272994 0.02061712 0.9997687 0.006116092 1.027564 0 0 0 1 0.02349692 -0.006630003 0.9997019 0.8253797 0.9995605 -0.01792436 -0.02361249 -0.01397144 0.01807558 0.9998174 0.006205916 1.028744 0 0 0 1 0.02279025 -0.00760895 0.9997113 0.8369897 0.9996985 -0.008962929 -0.0228582 -0.01541751 0.009134292 0.9999309 0.00740242 1.030874 0 0 0 1 0.02291417 -0.008366227 0.9997025 0.8477998 0.9997193 0.006207644 -0.02286255 -0.0167768 -0.006014525 0.9999458 0.008506119 1.033034 0 0 0 1 0.02377957 -0.007385492 0.9996899 0.8573496 0.999621 0.01404494 -0.02367419 -0.0176897 -0.01386576 0.9998741 0.007716655 1.034584 0 0 0 1 0.02192825 -0.008811295 0.9997207 0.8674698 0.9996614 0.01420372 -0.02180176 -0.01886922 -0.01400762 0.9998603 0.009119808 1.035994 0 0 0 1 0.02183407 -0.01276683 0.9996801 0.8783498 0.9995446 0.02111124 -0.0215615 -0.02045172 -0.02082926 0.9996956 0.01322197 1.037214 0 0 0 1 0.02419483 -0.01379722 0.999612 0.8879998 0.9992104 0.03185486 -0.02374547 -0.02171182 -0.03151488 0.9993973 0.01455706 1.038024 0 0 0 1 0.02326309 -0.01246106 0.9996517 0.8968597 0.99937 0.02709978 -0.02291876 -0.02229613 -0.02680474 0.9995551 0.01308369 1.038304 0 0 0 1 0.02281814 -0.01367729 0.9996461 0.9068797 0.9994078 0.02607482 -0.02245599 -0.02300441 -0.02575844 0.9995664 0.01426416 1.038824 0 0 0 1 0.02565002 -0.01727885 0.9995216 0.9170196 0.9989438 0.03857398 -0.02496832 -0.02423971 -0.03812408 0.9991064 0.01824998 1.039544 0 0 0 1 0.02758312 -0.01722562 0.9994711 0.9262896 0.9986986 0.04338341 -0.0268141 -0.02538204 -0.04289859 0.99891 0.01839983 1.040404 0 0 0 1 0.02792686 -0.01726555 0.9994608 0.9358497 0.9988133 0.04039329 -0.02721095 -0.02585476 -0.03990173 0.9990347 0.01837313 1.041094 0 0 0 1 0.03320574 -0.01645702 0.9993131 0.9455597 0.9985336 0.04332113 -0.03246641 -0.02657544 -0.04275709 0.9989256 0.01787137 1.041234 0 0 0 1 0.04078918 -0.01574969 0.9990437 0.9541397 0.9979412 0.05017083 -0.03995323 -0.02752554 -0.04949361 0.9986165 0.01776367 1.041484 0 0 0 1 0.04228365 -0.01537907 0.9989873 0.9626198 0.9977928 0.05189228 -0.04143422 -0.02825248 -0.05120247 0.9985343 0.01753932 1.042074 0 0 0 1 0.04201334 -0.01394426 0.9990198 0.9718797 0.9977172 0.05349844 -0.04121184 -0.02860116 -0.05287134 0.9984706 0.01616007 1.042154 0 0 0 1 0.04300558 -0.01410585 0.9989752 0.9815497 0.9975237 0.05630367 -0.04214805 -0.02865225 -0.05565148 0.998314 0.01649224 1.041664 0 0 0 1 0.04774445 -0.01497262 0.9987474 0.9909496 0.9972469 0.05751073 -0.04681056 -0.02942258 -0.05673778 0.9982326 0.01767724 1.040604 0 0 0 1 0.05229234 -0.01522016 0.9985159 0.9998298 0.9970161 0.05765092 -0.05133503 -0.03012466 -0.05678403 0.9982208 0.01818943 1.039104 0 0 0 1 0.05362039 -0.01556587 0.99844 1.00881 0.9969503 0.05760926 -0.05264228 -0.03039276 -0.05669999 0.9982178 0.01860743 1.038184 0 0 0 1 0.054856 -0.01509958 0.9983801 1.01758 0.9964865 0.06420511 -0.05378091 -0.0304811 -0.06328904 0.9978225 0.01856857 1.037124 0 0 0 1 0.05712312 -0.01470392 0.9982588 1.02622 0.9960364 0.06912237 -0.05597782 -0.03064382 -0.06817889 0.9974998 0.01859408 1.035724 0 0 0 1 0.06254488 -0.01512062 0.9979276 1.03541 0.9959004 0.06641602 -0.06141149 -0.0310359 -0.06534981 0.9976775 0.0192126 1.034794 0 0 0 1 0.06766003 -0.01297569 0.997624 1.04419 0.995764 0.06327503 -0.06671088 -0.03121101 -0.06225907 0.9979118 0.0172019 1.033894 0 0 0 1 0.06912612 -0.009833514 0.9975594 1.0528 0.9954319 0.06668937 -0.06832134 -0.03103268 -0.06585478 0.9977253 0.01439857 1.032624 0 0 0 1 0.07273161 -0.0114637 0.9972857 1.06196 0.9947118 0.073538 -0.0716986 -0.03120779 -0.07251644 0.9972265 0.01675158 1.031454 0 0 0 1 0.07856869 -0.01176828 0.9968392 1.07083 0.9938305 0.07944262 -0.07739365 -0.03137052 -0.07828074 0.99677 0.01793742 1.030324 0 0 0 1 0.07964217 -0.008735001 0.9967852 1.0793 0.9931424 0.08655238 -0.07859265 -0.03122323 -0.08558762 0.996209 0.01556831 1.029234 0 0 0 1 0.08083212 -0.005493342 0.9967126 1.08829 0.9928829 0.08819282 -0.08003544 -0.03114414 -0.0874632 0.9960883 0.01258307 1.028594 0 0 0 1 0.08200627 -0.00338459 0.9966261 1.09777 0.9934591 0.08000636 -0.081474 -0.0309534 -0.07946068 0.9967886 0.009923517 1.028454 0 0 0 1 0.08323431 -8.38005e-4 0.9965296 1.10666 0.9931481 0.08238571 -0.08288258 -0.03078752 -0.08203035 0.9966002 0.007689535 1.027494 0 0 0 1 0.08912199 9.6339e-4 0.9960203 1.11544 0.99239 0.08521974 -0.08887958 -0.03126025 -0.08496618 0.9963617 0.006638884 1.026784 0 0 0 1 0.09122872 0.001799166 0.9958283 1.12489 0.992187 0.0852943 -0.09104919 -0.03142297 -0.08510231 0.9963542 0.005996108 1.026244 0 0 0 1 0.09054213 0.003919839 0.9958849 1.13424 0.9919829 0.08816659 -0.09053444 -0.03116405 -0.08815866 0.9960981 0.004094302 1.025804 0 0 0 1 0.09058386 0.006367087 0.9958685 1.14373 0.9919068 0.08875721 -0.09079098 -0.03096717 -0.08896857 0.996033 0.001724362 1.026004 0 0 0 1 0.08946788 0.008570134 0.9959529 1.15325 0.9917587 0.09130692 -0.08987683 -0.03096866 -0.09170764 0.9957859 -3.30514e-4 1.027024 0 0 0 1 0.08934104 0.0120294 0.9959285 1.16298 0.9917353 0.09137111 -0.09006851 -0.03108173 -0.09208256 0.9957442 -0.003766775 1.027584 0 0 0 1 0.08706182 0.01528984 0.9960856 1.17248 0.992154 0.08872628 -0.0880801 -0.03067404 -0.08972567 0.9959387 -0.007445216 1.025584 0 0 0 1 0.08438217 0.01782345 0.9962741 1.18181 0.9924032 0.08833277 -0.08563458 -0.03014236 -0.08952993 0.9959316 -0.01023429 1.022974 0 0 0 1 0.08676445 0.01933914 0.9960411 1.19155 0.9918614 0.09184032 -0.08818358 -0.03026789 -0.09318214 0.9955859 -0.0112133 1.021304 0 0 0 1 0.08809626 0.02029114 0.9959053 1.20144 0.9914783 0.09453642 -0.08963084 -0.0301764 -0.095968 0.9953146 -0.01178991 1.020174 0 0 0 1 0.08457517 0.02325135 0.9961458 1.21113 0.9921565 0.09038728 -0.08634626 -0.02924787 -0.09204655 0.9956352 -0.01542448 1.019164 0 0 0 1 0.08248811 0.02511256 0.9962756 1.22082 0.9924513 0.08896476 -0.08441394 -0.02861082 -0.09075331 0.9957182 -0.01758444 1.016904 0 0 0 1 0.08631241 0.02511137 0.9959516 1.23122 0.9920628 0.08958941 -0.08823424 -0.02840769 -0.0914424 0.9956622 -0.01717936 1.015414 0 0 0 1 0.09031617 0.02560806 0.9955838 1.24216 0.9917412 0.08909273 -0.09225922 -0.0279504 -0.09106189 0.9956941 -0.01735007 1.015444 0 0 0 1 0.09013712 0.02704375 0.9955621 1.25293 0.9917182 0.089392 -0.09221738 -0.02708393 -0.09148919 0.9956293 -0.01876223 1.015114 0 0 0 1 0.08999115 0.03029847 0.9954816 1.26311 0.9916881 0.0895636 -0.09237414 -0.02615541 -0.09195774 0.9955202 -0.02198672 1.013734 0 0 0 1 0.09404742 0.03203946 0.995052 1.27318 0.9912789 0.08965998 -0.09657776 -0.02564233 -0.09231066 0.995457 -0.02332776 1.012614 0 0 0 1 0.1004919 0.03028702 0.9944768 1.28337 0.9908157 0.08784645 -0.1027973 -0.02524083 -0.09047472 0.9956735 -0.02118098 1.011914 0 0 0 1 0.1035268 0.03043889 0.9941608 1.29362 0.9906113 0.08656769 -0.1058077 -0.02436196 -0.08928287 0.9957809 -0.02119106 1.010534 0 0 0 1 0.1045441 0.03052937 0.9940516 1.30414 0.9903401 0.08835136 -0.1068671 -0.02358847 -0.09108841 0.9956215 -0.02099782 1.008894 0 0 0 1 0.1057052 0.03111189 0.9939107 1.31507 0.9906795 0.08305704 -0.1079614 -0.02251118 -0.08591014 0.9960591 -0.02204239 1.008384 0 0 0 1 0.1060749 0.03074467 0.9938827 1.32626 0.9913428 0.07451176 -0.1081087 -0.02109289 -0.07737976 0.9967461 -0.02257466 1.008574 0 0 0 1 0.107798 0.02928555 0.9937414 1.3373 0.9911288 0.07499498 -0.1097247 -0.0199784 -0.077739 0.9967538 -0.02094143 1.008064 0 0 0 1 0.1096597 0.02620494 0.9936237 1.34865 0.9906797 0.07837992 -0.1114019 -0.01918005 -0.08079946 0.9965791 -0.01736557 1.007294 0 0 0 1 0.1101315 0.02397865 0.9936277 1.36032 0.9908876 0.07534557 -0.1116461 -0.0179044 -0.0775426 0.9968692 -0.01546221 1.007114 0 0 0 1 0.1117516 0.02160048 0.9935014 1.37236 0.9913067 0.0674439 -0.1129711 -0.0164799 -0.06944584 0.9974892 -0.01387578 1.007704 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_Hips_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_Hips_pose_matrix-interpolation"> + <Name_array id="_6_15_t_Hips_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_Hips_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_Hips_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_Hips_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_Hips_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_Hips_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_Hips_pose_matrix-sampler" target="Hips/transform"/> + </animation> + <animation id="_6_15_t_LHipJoint_pose_matrix"> + <source id="_6_15_t_LHipJoint_pose_matrix-input"> + <float_array id="_6_15_t_LHipJoint_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_LHipJoint_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LHipJoint_pose_matrix-output"> + <float_array id="_6_15_t_LHipJoint_pose_matrix-output-array" count="2224">-0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1 -0.4072819 0.635349 -0.6560891 0 -0.6353492 -0.7131573 -0.2962059 0 -0.656089 0.2962064 0.6941245 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_LHipJoint_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LHipJoint_pose_matrix-interpolation"> + <Name_array id="_6_15_t_LHipJoint_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_LHipJoint_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_LHipJoint_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_LHipJoint_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_LHipJoint_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_LHipJoint_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_LHipJoint_pose_matrix-sampler" target="LHipJoint/transform"/> + </animation> + <animation id="_6_15_t_LeftUpLeg_pose_matrix"> + <source id="_6_15_t_LeftUpLeg_pose_matrix-input"> + <float_array id="_6_15_t_LeftUpLeg_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftUpLeg_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftUpLeg_pose_matrix-output"> + <float_array id="_6_15_t_LeftUpLeg_pose_matrix-output-array" count="2224">0.4795269 0.2056899 -0.85308 0 -0.6042388 0.7823625 -0.1510112 0.1535565 0.6363564 0.587878 0.4994498 0 0 0 0 1 0.4711138 0.2212618 -0.8538705 0 -0.6187483 0.7728081 -0.1411313 0.1535565 0.6286513 0.5948199 0.500986 0 0 0 0 1 0.462352 0.2328941 -0.8555647 0 -0.6273348 0.7678211 -0.130006 0.1535565 0.6266431 0.5968341 0.5011063 0 0 0 0 1 0.4542539 0.2446627 -0.8566175 0 -0.6321033 0.7660933 -0.1163891 0.1535565 0.6277729 0.594341 0.502653 0 0 0 0 1 0.4486289 0.2588183 -0.855421 0 -0.6379799 0.7630351 -0.1037251 0.1535565 0.6258704 0.5922755 0.5074407 0 0 0 0 1 0.444307 0.2698405 -0.85427 0 -0.6425427 0.760465 -0.09397715 0.1535565 0.6242838 0.5906597 0.5112642 0 0 0 0 1 0.4406675 0.2781013 -0.8535056 0 -0.6413015 0.7628356 -0.08254796 0.1535565 0.6281278 0.5837306 0.5145038 0 0 0 0 1 0.4307723 0.2877297 -0.8553636 0 -0.6423169 0.7635367 -0.06663835 0.1535565 0.6339278 0.5781204 0.5137242 0 0 0 0 1 0.4163373 0.2971084 -0.8592961 0 -0.6443735 0.7631821 -0.04832905 0.1535565 0.6414405 0.5738289 0.50919 0 0 0 0 1 0.4062232 0.3083164 -0.8601881 0 -0.6462596 0.7624501 -0.03191137 0.1535565 0.6460118 0.5688679 0.5089774 0 0 0 0 1 0.3919008 0.3281997 -0.8594759 0 -0.6554809 0.7551383 -0.01052647 0.1535565 0.6455684 0.5674954 0.5110681 0 0 0 0 1 0.3781277 0.3481856 -0.8577798 0 -0.6623345 0.7491104 0.01210385 0.1535565 0.6467863 0.5635604 0.5138748 0 0 0 0 1 0.3679695 0.3662825 -0.8546552 0 -0.6667368 0.7446036 0.03205549 0.1535565 0.6481208 0.5580347 0.5182055 0 0 0 0 1 0.359676 0.382901 -0.8508936 0 -0.6714977 0.7393925 0.04888099 0.1535565 0.6478611 0.5537918 0.5230591 0 0 0 0 1 0.348263 0.4028233 -0.8464315 0 -0.6823317 0.7280796 0.06575429 0.1535565 0.6427569 0.5546472 0.5284223 0 0 0 0 1 0.3376761 0.4230001 -0.8408601 0 -0.6944349 0.715003 0.08081275 0.1535565 0.6354014 0.5566342 0.5351855 0 0 0 0 1 0.3299283 0.4385054 -0.8359786 0 -0.6996315 0.7081172 0.09531939 0.1535565 0.6337689 0.5534284 0.5404202 0 0 0 0 1 0.3274914 0.4536586 -0.8288204 0 -0.7020066 0.7039453 0.1079242 0.1535565 0.6324051 0.5464931 0.5490075 0 0 0 0 1 0.3274464 0.4652246 -0.8224019 0 -0.7009942 0.7032197 0.1186975 0.1535565 0.6335504 0.537632 0.5563865 0 0 0 0 1 0.3251424 0.4767925 -0.8166708 0 -0.7034084 0.6991423 0.1281274 0.1535565 0.6320594 0.5327935 0.5627008 0 0 0 0 1 0.3203667 0.4893239 -0.8111271 0 -0.7081895 0.6924055 0.1379935 0.1535565 0.6291525 0.5302232 0.5683578 0 0 0 0 1 0.3198626 0.4994282 -0.8051455 0 -0.7089103 0.6899495 0.1463416 0.1535565 0.628597 0.5239668 0.5747389 0 0 0 0 1 0.3223856 0.5083245 -0.7985447 0 -0.7072443 0.6900513 0.1537353 0.1535565 0.6291844 0.5152042 0.5819723 0 0 0 0 1 0.3262524 0.5182734 -0.7905392 0 -0.7056978 0.6899563 0.1610929 0.1535565 0.6289277 0.5053248 0.5908442 0 0 0 0 1 0.3221216 0.5338796 -0.7817993 0 -0.7138945 0.6793592 0.1697817 0.1535565 0.6217656 0.5034318 0.5999701 0 0 0 0 1 0.3135465 0.5508158 -0.7734923 0 -0.7239033 0.6658179 0.1806944 0.1535565 0.6145345 0.5032776 0.6075024 0 0 0 0 1 0.3078732 0.5636384 -0.7665023 0 -0.7281298 0.6581453 0.1914989 0.1535565 0.6124062 0.4991557 0.6130272 0 0 0 0 1 0.3110201 0.5657376 -0.7636802 0 -0.7253198 0.6605325 0.193928 0.1535565 0.614148 0.4935968 0.6157796 0 0 0 0 1 0.3135218 0.5641895 -0.7638025 0 -0.7250615 0.6616378 0.191105 0.1535565 0.6131801 0.4938882 0.61651 0 0 0 0 1 0.3132087 0.5664054 -0.7622894 0 -0.7283253 0.6583795 0.1899435 0.1535565 0.6094608 0.4957027 0.6187377 0 0 0 0 1 0.3141732 0.5693144 -0.7597212 0 -0.7270599 0.6588682 0.1930713 0.1535565 0.6104745 0.491705 0.6209245 0 0 0 0 1 0.3173035 0.5732866 -0.7554211 0 -0.724462 0.6605644 0.1970006 0.1535565 0.6119422 0.4847649 0.6249239 0 0 0 0 1 0.3120826 0.5806983 -0.7519267 0 -0.7302311 0.6529155 0.2011559 0.1535565 0.6077557 0.4863031 0.6278077 0 0 0 0 1 0.3063147 0.587264 -0.7491944 0 -0.7356047 0.6455611 0.2052714 0.1535565 0.6041994 0.4882333 0.6297391 0 0 0 0 1 0.3042417 0.5971871 -0.7421621 0 -0.7384998 0.6399825 0.2122269 0.1535565 0.60171 0.4835183 0.635732 0 0 0 0 1 0.3050872 0.6054051 -0.7351234 0 -0.7383152 0.6379278 0.2189486 0.1535565 0.6015084 0.4759544 0.6416035 0 0 0 0 1 0.3049232 0.6092849 -0.7319793 0 -0.7391152 0.6360923 0.2215746 0.1535565 0.6006085 0.4734538 0.6442911 0 0 0 0 1 0.3040112 0.610571 -0.7312867 0 -0.7401332 0.6346808 0.2222232 0.1535565 0.5998168 0.4736911 0.644854 0 0 0 0 1 0.3055397 0.6159528 -0.7261182 0 -0.7402809 0.6332798 0.2257005 0.1535565 0.5988569 0.4685709 0.6494703 0 0 0 0 1 0.3031498 0.6270644 -0.7175586 0 -0.7420579 0.6277599 0.2350904 0.1535565 0.5978715 0.4612025 0.6556234 0 0 0 0 1 0.2982393 0.6371759 -0.7106758 0 -0.746088 0.6200068 0.242784 0.1535565 0.5953201 0.4578189 0.6602998 0 0 0 0 1 0.2946289 0.6456347 -0.7045208 0 -0.7488455 0.6139862 0.2495019 0.1535565 0.5936533 0.4540668 0.6643787 0 0 0 0 1 0.2943868 0.6544982 -0.6963968 0 -0.7499166 0.6099067 0.2562007 0.1535565 0.5924202 0.4468173 0.6703676 0 0 0 0 1 0.2943759 0.6641697 -0.6871837 0 -0.7502519 0.6060147 0.2643259 0.1535565 0.5920008 0.4377497 0.6766908 0 0 0 0 1 0.2948558 0.6740927 -0.6772437 0 -0.7513902 0.6014218 0.2714861 0.1535565 0.590316 0.428825 0.6838393 0 0 0 0 1 0.293655 0.6841787 -0.6675824 0 -0.7531934 0.595638 0.2791323 0.1535565 0.5886139 0.4208501 0.690231 0 0 0 0 1 0.2960349 0.6930598 -0.657291 0 -0.7531446 0.5926038 0.2856464 0.1535565 0.5874832 0.4104738 0.6974057 0 0 0 0 1 0.3009753 0.6991583 -0.6485302 0 -0.7509938 0.5928977 0.2906553 0.1535565 0.5877263 0.3995621 0.7035112 0 0 0 0 1 0.303126 0.7037013 -0.6425877 0 -0.7495992 0.5924322 0.2951694 0.1535565 0.5884009 0.3922097 0.7070757 0 0 0 0 1 0.2965738 0.7133108 -0.6350052 0 -0.7558313 0.5817475 0.300481 0.1535565 0.5837492 0.390842 0.7116737 0 0 0 0 1 0.2958607 0.7209886 -0.6266114 0 -0.7579525 0.5764209 0.3053639 0.1535565 0.5813558 0.3845964 0.7170155 0 0 0 0 1 0.2940843 0.7288166 -0.6183371 0 -0.7582178 0.5717791 0.3133278 0.1535565 0.5819109 0.3766894 0.7207531 0 0 0 0 1 0.2930184 0.737975 -0.6078924 0 -0.7573245 0.5672387 0.3235737 0.1535565 0.5836095 0.3655587 0.7250979 0 0 0 0 1 0.288778 0.747987 -0.5975974 0 -0.7577048 0.5601047 0.3349121 0.1535565 0.5852271 0.3560872 0.7284994 0 0 0 0 1 0.2905621 0.755316 -0.5874277 0 -0.757205 0.556832 0.341436 0.1535565 0.5849908 0.3455949 0.7337235 0 0 0 0 1 0.2939119 0.7604487 -0.57908 0 -0.7521607 0.5578449 0.3508037 0.1535565 0.5898051 0.3324558 0.735937 0 0 0 0 1 0.2915842 0.7698151 -0.5677704 0 -0.7497284 0.5525462 0.3641428 0.1535565 0.5940422 0.3194953 0.7382661 0 0 0 0 1 0.2901905 0.7812827 -0.552618 0 -0.7499139 0.5443906 0.3758565 0.1535565 0.5944904 0.3053459 0.7438718 0 0 0 0 1 0.2912307 0.7911698 -0.5378057 0 -0.7498121 0.5379046 0.3852796 0.1535565 0.5941097 0.2910479 0.7498832 0 0 0 0 1 0.2920457 0.79776 -0.5275303 0 -0.7517295 0.5324729 0.3890699 0.1535565 0.5912801 0.2829338 0.7552062 0 0 0 0 1 0.2998999 0.7975001 -0.5235012 0 -0.7488706 0.5367605 0.3886912 0.1535565 0.5909761 0.2754663 0.7581989 0 0 0 0 1 0.3058425 0.7991716 -0.5174796 0 -0.7492518 0.5373861 0.387089 0.1535565 0.587437 0.2693342 0.7631363 0 0 0 0 1 0.3107165 0.8036395 -0.5075616 0 -0.7512284 0.534785 0.3868602 0.1535565 0.5823326 0.2610909 0.7698834 0 0 0 0 1 0.3135871 0.8098238 -0.4958311 0 -0.7573274 0.5282945 0.3838751 0.1535565 0.5728161 0.2551282 0.7789682 0 0 0 0 1 0.3154768 0.8161439 -0.4841316 0 -0.7616612 0.5220836 0.383798 0.1535565 0.5659916 0.2476649 0.7863305 0 0 0 0 1 0.3198415 0.8206328 -0.4735645 0 -0.7608819 0.5203061 0.3877373 0.1535565 0.5645884 0.2363121 0.7908201 0 0 0 0 1 0.3223708 0.8233851 -0.4670268 0 -0.7622892 0.5183185 0.3876351 0.1535565 0.5612416 0.2310472 0.7947484 0 0 0 0 1 0.3294729 0.8236373 -0.4615942 0 -0.7606771 0.5211661 0.3869834 0.1535565 0.5593013 0.2236235 0.7982323 0 0 0 0 1 0.3387567 0.8232056 -0.4556056 0 -0.7577596 0.5257433 0.3865155 0.1535565 0.5577135 0.2143049 0.8018911 0 0 0 0 1 0.3539251 0.8192582 -0.4511686 0 -0.7533397 0.5355952 0.3815979 0.1535565 0.554271 0.2048261 0.8067404 0 0 0 0 1 0.362967 0.8192298 -0.443979 0 -0.7547835 0.5378941 0.375462 0.1535565 0.5464034 0.1988278 0.8135791 0 0 0 0 1 0.3682948 0.8186174 -0.440709 0 -0.757395 0.5390921 0.3684189 0.1535565 0.5391771 0.1981039 0.8185616 0 0 0 0 1 0.3792809 0.81227 -0.4431291 0 -0.7504262 0.5502056 0.3662434 0.1535565 0.5413008 0.1936265 0.8182312 0 0 0 0 1 0.389888 0.8031108 -0.4505558 0 -0.745174 0.5626159 0.358021 0.1535565 0.5410204 0.1961543 0.8178145 0 0 0 0 1 0.3932686 0.7968317 -0.4586926 0 -0.7465211 0.5679569 0.3465995 0.1535565 0.5366992 0.206117 0.8182114 0 0 0 0 1 0.3934175 0.7914794 -0.4677424 0 -0.7442075 0.5728874 0.3434461 0.1535565 0.5397943 0.2129797 0.8144088 0 0 0 0 1 0.3926206 0.7856141 -0.4781836 0 -0.7381574 0.5793227 0.3457004 0.1535565 0.5486099 0.2172457 0.8073609 0 0 0 0 1 0.3937875 0.7772361 -0.49075 0 -0.7326748 0.5878046 0.3430356 0.1535565 0.5550848 0.224477 0.8009314 0 0 0 0 1 0.3924044 0.7672736 -0.5072572 0 -0.7307517 0.5949795 0.334666 0.1535565 0.5585881 0.2393546 0.7941592 0 0 0 0 1 0.393397 0.7521755 -0.5286499 0 -0.7227413 0.6084148 0.3278358 0.1535565 0.5682286 0.2531075 0.7829769 0 0 0 0 1 0.3999366 0.7327249 -0.5506042 0 -0.7082223 0.6283815 0.3218039 0.1535565 0.5817832 0.2612491 0.7702449 0 0 0 0 1 0.4045764 0.7174382 -0.5670983 0 -0.700968 0.6415482 0.3115438 0.1535565 0.5873344 0.2714744 0.7624566 0 0 0 0 1 0.4090398 0.7028583 -0.5819594 0 -0.6955039 0.6529896 0.299798 0.1535565 0.5907289 0.2821257 0.7559395 0 0 0 0 1 0.4174519 0.6862459 -0.5956512 0 -0.685011 0.6683562 0.2899307 0.1535565 0.597071 0.2869955 0.7490927 0 0 0 0 1 0.4303935 0.6643744 -0.6110385 0 -0.6695291 0.688988 0.2775359 0.1535565 0.605386 0.2896584 0.7413541 0 0 0 0 1 0.4378572 0.6426493 -0.6287153 0 -0.6601602 0.7045423 0.2604005 0.1535565 0.6103029 0.3010346 0.7327405 0 0 0 0 1 0.440073 0.6254431 -0.6443265 0 -0.6566017 0.7136006 0.2442299 0.1535565 0.6125438 0.3155869 0.7247034 0 0 0 0 1 0.4461405 0.6077473 -0.6569641 0 -0.6471086 0.7261458 0.2322984 0.1535565 0.6182305 0.3214894 0.7172417 0 0 0 0 1 0.4522822 0.5861676 -0.6721966 0 -0.6337373 0.7415365 0.2202281 0.1535565 0.6275491 0.3263908 0.7068602 0 0 0 0 1 0.4465547 0.5713502 -0.688584 0 -0.634385 0.7448816 0.2066567 0.1535565 0.6309869 0.3445438 0.6950864 0 0 0 0 1 0.4437262 0.5568359 -0.7021687 0 -0.6321043 0.7498868 0.1952275 0.1535565 0.6352568 0.3572162 0.6847229 0 0 0 0 1 0.4506415 0.5354474 -0.7142956 0 -0.6171803 0.7649871 0.1840741 0.1535565 0.644989 0.3578978 0.6752026 0 0 0 0 1 0.4533283 0.5138838 -0.7282972 0 -0.6097933 0.7747465 0.1670926 0.1535565 0.650112 0.368363 0.6645775 0 0 0 0 1 0.4511854 0.4987093 -0.7400816 0 -0.6114209 0.7768197 0.1507171 0.1535565 0.6500741 0.3845 0.655411 0 0 0 0 1 0.4506505 0.4794943 -0.7529936 0 -0.605749 0.7838405 0.1366093 0.1535565 0.6557303 0.3945621 0.6436914 0 0 0 0 1 0.4530401 0.4540151 -0.767219 0 -0.5953234 0.7946668 0.1187215 0.1535565 0.6635848 0.4029577 0.6303018 0 0 0 0 1 0.4561766 0.4306003 -0.7787722 0 -0.5915701 0.8005061 0.09609705 0.1535565 0.6647915 0.4168611 0.6199026 0 0 0 0 1 0.4589098 0.411148 -0.7876288 0 -0.5896108 0.8040847 0.0762028 0.1535565 0.6646509 0.4294242 0.6114198 0 0 0 0 1 0.4600692 0.3959977 -0.7946836 0 -0.5869584 0.8072065 0.06242781 0.1535565 0.6661951 0.4377252 0.6038053 0 0 0 0 1 0.4589089 0.3810653 -0.8026155 0 -0.5836466 0.8104013 0.05105203 0.1535565 0.6698949 0.4450156 0.594308 0 0 0 0 1 0.457302 0.3642663 -0.811286 0 -0.5813387 0.8128078 0.03726315 0.1535565 0.6729934 0.4545915 0.5834609 0 0 0 0 1 0.4576116 0.3485676 -0.8179805 0 -0.5811623 0.8135027 0.02153366 0.1535565 0.6729355 0.4655254 0.5748426 0 0 0 0 1 0.461923 0.3288686 -0.8236944 0 -0.5749551 0.818174 0.004233062 0.1535565 0.6753177 0.4716319 0.5670182 0 0 0 0 1 0.4635475 0.3105285 -0.829877 0 -0.5693571 0.822024 -0.01043784 0.1535565 0.6789376 0.4773347 0.5578488 0 0 0 0 1 0.4592456 0.2990201 -0.8364691 0 -0.5702136 0.8212655 -0.01947849 0.1535565 0.6811388 0.4859114 0.5476679 0 0 0 0 1 0.4552657 0.2843151 -0.8437405 0 -0.5715007 0.8199748 -0.0320636 0.1535565 0.6827299 0.4967958 0.5357928 0 0 0 0 1 0.4558872 0.2649866 -0.8496758 0 -0.5673137 0.8221015 -0.04800093 0.1535565 0.6858002 0.5039158 0.5251162 0 0 0 0 1 0.4576267 0.2503336 -0.853177 0 -0.5597362 0.8266611 -0.05767762 0.1535565 0.6908497 0.5039489 0.518423 0 0 0 0 1 0.4578744 0.2364317 -0.8570012 0 -0.5530839 0.8304765 -0.06638491 0.1535565 0.6960239 0.5043895 0.5110205 0 0 0 0 1 0.4613073 0.2187709 -0.8598458 0 -0.5463364 0.8336393 -0.08100634 0.1535565 0.6990795 0.5071339 0.5040865 0 0 0 0 1 0.4620307 0.2054994 -0.8627268 0 -0.5449683 0.8332404 -0.09338033 0.1535565 0.6996693 0.5133034 0.4969735 0 0 0 0 1 0.4582613 0.2014192 -0.8656944 0 -0.5534073 0.8268159 -0.1005765 0.1535565 0.6955119 0.525172 0.4903647 0 0 0 0 1 0.4603547 0.1906933 -0.8670118 0 -0.551333 0.8268852 -0.1108717 0.1535565 0.6957769 0.5290526 0.4857962 0 0 0 0 1 0.4622014 0.180387 -0.868234 0 -0.5467463 0.8288187 -0.1188604 0.1535565 0.6981679 0.5296413 0.4817072 0 0 0 0 1 0.4631013 0.1744496 -0.8689674 0 -0.5460441 0.8284245 -0.1246944 0.1535565 0.6981211 0.5322408 0.4789017 0 0 0 0 1 0.4668405 0.1673705 -0.8683589 0 -0.5441814 0.8283753 -0.1328947 0.1535565 0.6970843 0.5345854 0.4777991 0 0 0 0 1 0.4706392 0.1614488 -0.8674289 0 -0.5442797 0.8269006 -0.1414033 0.1535565 0.6944482 0.538674 0.4770452 0 0 0 0 1 0.477948 0.1518802 -0.8651579 0 -0.5424578 0.8257126 -0.1547199 0.1535565 0.6908729 0.5432596 0.4770364 0 0 0 0 1 0.4847632 0.1442598 -0.8626666 0 -0.5423212 0.8233951 -0.167057 0.1535565 0.6862159 0.5488256 0.4773868 0 0 0 0 1 0.4901697 0.1453995 -0.8594141 0 -0.5456258 0.820093 -0.1724525 0.1535565 0.6797251 0.5534496 0.4813185 0 0 0 0 1 0.4983351 0.1487399 -0.8541302 0 -0.5471751 0.8181387 -0.1767723 0.1535565 0.672504 0.5554507 0.4890941 0 0 0 0 1 0.5089383 0.1486818 -0.8478652 0 -0.5430622 0.8196783 -0.1822386 0.1535565 0.6678812 0.5531918 0.4979093 0 0 0 0 1 0.5205913 0.1480309 -0.8408754 0 -0.539799 0.8201138 -0.1898168 0.1535565 0.6615148 0.5527207 0.5068511 0 0 0 0 1 0.5311053 0.14828 -0.8342303 0 -0.5440356 0.8144868 -0.2015847 0.1535565 0.6495787 0.5609137 0.513248 0 0 0 0 1 0.5439121 0.1481722 -0.8259567 0 -0.5447317 0.8110514 -0.2132204 0.1535565 0.6383002 0.5658981 0.5218548 0 0 0 0 1 0.5562478 0.1493453 -0.8174865 0 -0.541954 0.810934 -0.220617 0.1535565 0.6299796 0.5657579 0.5320186 0 0 0 0 1 0.5681689 0.1509726 -0.8089446 0 -0.5403879 0.809821 -0.2284097 0.1535565 0.6206167 0.5669192 0.5416988 0 0 0 0 1 0.5751487 0.1510513 -0.8039823 0 -0.5399612 0.8083941 -0.2343944 0.1535565 0.6145289 0.568931 0.5465088 0 0 0 0 1 0.5743668 0.1490805 -0.8049086 0 -0.5405521 0.807482 -0.2361699 0.1535565 0.6147409 0.5707433 0.5443767 0 0 0 0 1 0.5742676 0.1481602 -0.8051491 0 -0.539759 0.8079744 -0.2362996 0.1535565 0.6155297 0.5702859 0.5439644 0 0 0 0 1 0.5778136 0.1521438 -0.8018626 0 -0.540154 0.8078106 -0.2359567 0.1535565 0.6118538 0.5694684 0.5489451 0 0 0 0 1 0.5714704 0.1549741 -0.8058564 0 -0.5435001 0.807232 -0.2301827 0.1535565 0.6148406 0.5695257 0.5455377 0 0 0 0 1 0.5582936 0.1560191 -0.8148412 0 -0.5457622 0.8087964 -0.2190707 0.1535565 0.6248614 0.5670154 0.5366953 0 0 0 0 1 0.5468173 0.1601747 -0.8217876 0 -0.5533056 0.8057814 -0.2111145 0.1535565 0.6283659 0.5701408 0.5292409 0 0 0 0 1 0.5365148 0.1669594 -0.8272101 0 -0.5641677 0.799946 -0.2044532 0.1535565 0.6275881 0.5763775 0.523376 0 0 0 0 1 0.5276646 0.1712895 -0.8320036 0 -0.5672362 0.8001317 -0.1950187 0.1535565 0.6323078 0.5748471 0.5193629 0 0 0 0 1 0.516995 0.1764768 -0.8375989 0 -0.5686774 0.8021746 -0.1819942 0.1535565 0.6397829 0.5704138 0.5150787 0 0 0 0 1 0.504286 0.1830845 -0.8439049 0 -0.575811 0.7995827 -0.1706141 0.1535565 0.6435351 0.5719681 0.5086405 0 0 0 0 1 0.4904204 0.1914181 -0.850204 0 -0.58616 0.7943881 -0.1592611 0.1535565 0.6449066 0.5764605 0.5017858 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftUpLeg_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftUpLeg_pose_matrix-interpolation"> + <Name_array id="_6_15_t_LeftUpLeg_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_LeftUpLeg_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_LeftUpLeg_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_LeftUpLeg_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_LeftUpLeg_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_LeftUpLeg_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_LeftUpLeg_pose_matrix-sampler" target="LeftUpLeg/transform"/> + </animation> + <animation id="_6_15_t_LeftLeg_pose_matrix"> + <source id="_6_15_t_LeftLeg_pose_matrix-input"> + <float_array id="_6_15_t_LeftLeg_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftLeg_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftLeg_pose_matrix-output"> + <float_array id="_6_15_t_LeftLeg_pose_matrix-output-array" count="2224">0.999999 0.00128895 6.14956e-4 0 -0.001428127 0.9023536 0.4309942 0.4361505 6.24232e-7 -0.4309946 0.9023545 0 0 0 0 1 0.999999 0.001288652 6.17322e-4 0 -0.001428902 0.9017614 0.4322319 0.4361505 3.37962e-7 -0.4322322 0.9017623 0 0 0 0 1 0.999999 0.00128746 6.19992e-4 0 -0.001428961 0.9008428 0.4341433 0.4361505 4.5149e-7 -0.4341436 0.9008436 0 0 0 0 1 0.999999 0.001285612 6.2438e-4 0 -0.0014292 0.8994774 0.4369652 0.4361505 1.55702e-7 -0.4369656 0.8994782 0 0 0 0 1 0.999999 0.001281678 6.31208e-4 0 -0.001428723 0.8968775 0.4422768 0.4361505 7.6228e-7 -0.4422772 0.8968784 0 0 0 0 1 0.999999 0.001276791 6.40967e-4 0 -0.001428604 0.8935789 0.4489039 0.4361505 4.00964e-7 -0.4489043 0.8935798 0 0 0 0 1 0.999999 0.001273095 6.50294e-4 0 -0.001429557 0.890311 0.4553509 0.4361505 7.55599e-7 -0.4553514 0.8903118 0 0 0 0 1 0.999999 0.001268446 6.5811e-4 0 -0.001428961 0.8876693 0.4604793 0.4361505 0 -0.4604798 0.8876702 0 0 0 0 1 0.999999 0.001266479 6.61842e-4 0 -0.001429021 0.8862448 0.4632149 0.4361505 0 -0.4632154 0.8862457 0 0 0 0 1 0.999999 0.001266121 6.60454e-4 0 -0.001428067 0.8861203 0.4634532 0.4361505 1.56853e-6 -0.4634536 0.8861212 0 0 0 0 1 0.999999 0.001268625 6.59164e-4 0 -0.001429617 0.8873975 0.461003 0.4361505 0 -0.4610034 0.8873983 0 0 0 0 1 0.999999 0.001271069 6.52418e-4 0 -0.001428723 0.8892698 0.4573808 0.4361505 1.19134e-6 -0.4573813 0.8892707 0 0 0 0 1 0.999999 0.001275002 6.44933e-4 0 -0.001428842 0.8918494 0.4523304 0.4361505 1.54633e-6 -0.4523308 0.8918502 0 0 0 0 1 0.999999 0.001279234 6.38428e-4 0 -0.001429736 0.8944236 0.4472186 0.4361505 1.09419e-6 -0.447219 0.8944244 0 0 0 0 1 0.999999 0.001282036 6.31678e-4 0 -0.0014292 0.8968921 0.4422471 0.4361505 4.35475e-7 -0.4422475 0.896893 0 0 0 0 1 0.999999 0.001285731 6.24239e-4 0 -0.001429259 0.8993018 0.4373263 0.4361505 9.25088e-7 -0.4373266 0.8993027 0 0 0 0 1 0.999999 0.001288056 6.18462e-4 0 -0.001428842 0.9012683 0.4332593 0.4361505 6.62825e-7 -0.4332597 0.9012691 0 0 0 0 1 0.999999 0.001289427 6.14117e-4 0 -0.001428186 0.9028585 0.4299355 0.4361505 0 -0.4299359 0.9028593 0 0 0 0 1 0.999999 0.001291751 6.10151e-4 0 -0.001428604 0.9040467 0.4274312 0.4361505 5.52418e-7 -0.4274317 0.9040476 0 0 0 0 1 0.999999 0.001293718 6.06574e-4 0 -0.001428842 0.9051888 0.4250074 0.4361505 7.82738e-7 -0.4250078 0.9051896 0 0 0 0 1 0.999999 0.001294076 6.04813e-4 0 -0.001428425 0.9058605 0.4235739 0.4361505 2.65394e-7 -0.4235743 0.9058613 0 0 0 0 1 0.999999 0.001295566 6.02803e-4 0 -0.001428961 0.9062622 0.4227135 0.4361505 1.37515e-6 -0.4227139 0.9062631 0 0 0 0 1 0.999999 0.001296043 6.00597e-4 0 -0.001428425 0.9073542 0.4203646 0.4361505 -1.428e-7 -0.420365 0.9073551 0 0 0 0 1 0.999999 0.001298606 5.94691e-4 0 -0.001428306 0.90902 0.4167502 0.4361505 6.16239e-7 -0.4167506 0.9090209 0 0 0 0 1 0.999999 0.001301348 5.88325e-4 0 -0.001428186 0.9110581 0.4122755 0.4361505 5.32139e-7 -0.4122759 0.911059 0 0 0 0 1 0.999999 0.001303553 5.85153e-4 0 -0.001428842 0.9120565 0.4100622 0.4361505 8.57508e-7 -0.4100626 0.9120573 0 0 0 0 1 0.999999 0.00130254 5.8596e-4 0 -0.001428246 0.9118245 0.410578 0.4361505 5.04702e-7 -0.4105784 0.9118253 0 0 0 0 1 0.999999 0.001300334 5.93029e-4 0 -0.00142914 0.9096873 0.4152915 0.4361505 5.507e-7 -0.4152919 0.9096882 0 0 0 0 1 0.999999 0.001294851 6.04867e-4 0 -0.0014292 0.9056985 0.4239201 0.4361505 1.10599e-6 -0.4239205 0.9056994 0 0 0 0 1 0.999999 0.001286506 6.20143e-4 0 -0.001428186 0.9008079 0.4342156 0.4361505 0 -0.434216 0.9008088 0 0 0 0 1 0.999999 0.001282572 6.3167e-4 0 -0.001429677 0.8968799 0.4422721 0.4361505 7.15301e-7 -0.4422726 0.8968807 0 0 0 0 1 0.999999 0.001277148 6.41168e-4 0 -0.00142908 0.8936573 0.4487479 0.4361505 1.56905e-7 -0.4487483 0.8936582 0 0 0 0 1 0.999999 0.001273095 6.48448e-4 0 -0.001428723 0.8910022 0.4539968 0.4361505 2.29298e-7 -0.4539973 0.891003 0 0 0 0 1 0.999999 0.001269876 6.53845e-4 0 -0.001428306 0.8887991 0.4582949 0.4361505 8.59855e-7 -0.4582953 0.8888 0 0 0 0 1 0.999999 0.001267731 6.59727e-4 0 -0.00142908 0.887023 0.4617231 0.4361505 1.51996e-7 -0.4617235 0.8870239 0 0 0 0 1 0.999999 0.001264691 6.64595e-4 0 -0.001428663 0.8848372 0.4658983 0.4361505 1.17026e-6 -0.4658988 0.884838 0 0 0 0 1 0.999999 0.001261591 6.70454e-4 0 -0.001428663 0.8828532 0.4696472 0.4361505 6.11494e-7 -0.4696476 0.8828539 0 0 0 0 1 0.999999 0.001259744 6.73596e-4 0 -0.001428544 0.8817159 0.4717786 0.4361505 4.27042e-7 -0.471779 0.8817168 0 0 0 0 1 0.999999 0.00126028 6.7284e-4 0 -0.001428663 0.8817794 0.47166 0.4361505 1.15098e-6 -0.4716604 0.8817802 0 0 0 0 1 0.999999 0.00126183 6.70295e-4 0 -0.001428842 0.8830965 0.4691894 0.4361505 1.26881e-7 -0.4691898 0.8830973 0 0 0 0 1 0.999999 0.001266002 6.61878e-4 0 -0.001428544 0.8857325 0.4641939 0.4361505 1.42341e-6 -0.4641943 0.8857334 0 0 0 0 1 0.999999 0.001271009 6.52572e-4 0 -0.001428782 0.8894597 0.4570114 0.4361505 4.50562e-7 -0.4570118 0.8894606 0 0 0 0 1 0.999999 0.001277387 6.41027e-4 0 -0.0014292 0.8936722 0.4487183 0.4361505 3.38727e-7 -0.4487187 0.893673 0 0 0 0 1 0.999999 0.001284539 6.27592e-4 0 -0.001429617 0.8982971 0.4393862 0.4361505 6.45758e-7 -0.4393866 0.898298 0 0 0 0 1 0.999999 0.001290917 6.12145e-4 0 -0.001428723 0.903473 0.4286428 0.4361505 3.00067e-7 -0.4286432 0.9034738 0 0 0 0 1 0.999999 0.001298189 5.97013e-4 0 -0.001428902 0.9083955 0.4181095 0.4361505 4.82788e-7 -0.41811 0.9083964 0 0 0 0 1 0.999999 0.001304566 5.83575e-4 0 -0.00142914 0.9125241 0.4090208 0.4361505 1.09272e-6 -0.4090211 0.9125249 0 0 0 0 1 0.999999 0.00131005 5.69796e-4 0 -0.001428604 0.9168998 0.3991152 0.4361505 4.32074e-7 -0.3991155 0.9169006 0 0 0 0 1 0.999999 0.001315593 5.5726e-4 0 -0.001428723 0.9208177 0.3899906 0.4361505 0 -0.389991 0.9208186 0 0 0 0 1 0.999999 0.001321554 5.44759e-4 0 -0.001429438 0.9244175 0.3813795 0.4361505 4.46656e-7 -0.3813799 0.9244185 0 0 0 0 1 0.999999 0.001327097 5.30669e-4 0 -0.001429259 0.9284557 0.3714406 0.4361505 2.52481e-7 -0.371441 0.9284566 0 0 0 0 1 0.999999 0.001334309 5.11231e-4 0 -0.001428842 0.9334868 0.3586091 0.4361505 1.26898e-6 -0.3586094 0.9334877 0 0 0 0 1 0.999999 0.00134027 4.97116e-4 0 -0.001429498 0.9375148 0.3479427 0.4361505 2.95811e-7 -0.347943 0.9375157 0 0 0 0 1 0.999999 0.001345217 4.83843e-4 0 -0.001429557 0.9407971 0.3389673 0.4361505 7.9196e-7 -0.3389676 0.9407981 0 0 0 0 1 0.999999 0.001349508 4.68551e-4 0 -0.001428544 0.94467 0.3280192 0.4361505 0 -0.3280194 0.944671 0 0 0 0 1 0.999999 0.001356363 4.51365e-4 0 -0.001429498 0.9486533 0.3163148 0.4361505 8.63464e-7 -0.3163151 0.9486542 0 0 0 0 1 0.999999 0.001360237 4.35291e-4 0 -0.001428186 0.9524319 0.3047482 0.4361505 0 -0.3047485 0.9524329 0 0 0 0 1 0.999999 0.001366972 4.17941e-4 0 -0.001429438 0.9564316 0.2919531 0.4361505 -6.38989e-7 -0.2919534 0.9564326 0 0 0 0 1 0.999999 0.001371324 4.01818e-4 0 -0.001428961 0.9595578 0.2815083 0.4361505 4.77659e-7 -0.2815086 0.9595587 0 0 0 0 1 0.999999 0.001373231 3.96864e-4 0 -0.001429438 0.9605249 0.2781902 0.4361505 8.24026e-7 -0.2781904 0.9605259 0 0 0 0 1 0.999999 0.001372158 3.99856e-4 0 -0.001429259 0.9599441 0.2801882 0.4361505 6.31874e-7 -0.2801884 0.959945 0 0 0 0 1 0.999999 0.001370549 4.04942e-4 0 -0.00142914 0.9589546 0.2835561 0.4361505 3.18606e-7 -0.2835564 0.9589556 0 0 0 0 1 0.999999 0.001369297 4.1044e-4 0 -0.001429498 0.9576302 0.2879973 0.4361505 1.31613e-6 -0.2879975 0.9576312 0 0 0 0 1 0.999999 0.00136727 4.14247e-4 0 -0.001428663 0.9569717 0.290178 0.4361505 3.33445e-7 -0.2901782 0.9569727 0 0 0 0 1 0.999999 0.001366794 4.14732e-4 0 -0.001428365 0.9569939 0.2901045 0.4361505 -3.71741e-7 -0.2901048 0.9569949 0 0 0 0 1 0.999999 0.001366734 4.15991e-4 0 -0.001428604 0.9567028 0.2910632 0.4361505 -1.67727e-7 -0.2910634 0.9567038 0 0 0 0 1 0.999999 0.001365542 4.22156e-4 0 -0.001429319 0.9551525 0.2961108 0.4361505 1.13602e-6 -0.2961111 0.9551535 0 0 0 0 1 0.999999 0.001360237 4.36919e-4 0 -0.001428723 0.9518985 0.3064103 0.4361505 9.04714e-7 -0.3064106 0.9518995 0 0 0 0 1 0.999999 0.001354396 4.53803e-4 0 -0.001428425 0.9478946 0.3185808 0.4361505 1.33449e-6 -0.3185811 0.9478956 0 0 0 0 1 0.999999 0.001347184 4.73275e-4 0 -0.001427948 0.9432139 0.3321828 0.4361505 1.13087e-6 -0.3321831 0.943215 0 0 0 0 1 0.999999 0.001338779 5.00042e-4 0 -0.00142908 0.936584 0.3504403 0.4361505 8.31748e-7 -0.3504406 0.936585 0 0 0 0 1 0.999999 0.001324534 5.33607e-4 0 -0.001428008 0.9274231 0.3740112 0.4361505 5.25043e-7 -0.3740115 0.9274241 0 0 0 0 1 0.999999 0.001309633 5.71586e-4 0 -0.001428961 0.9163813 0.400304 0.4361505 4.81494e-7 -0.4003043 0.9163822 0 0 0 0 1 0.999999 0.001290738 6.12081e-4 0 -0.001428544 0.9036756 0.4282154 0.4361505 -3.87008e-7 -0.4282158 0.9036765 0 0 0 0 1 0.999999 0.001270592 6.54069e-4 0 -0.001429021 0.8889982 0.4579085 0.4361505 3.47843e-7 -0.4579089 0.8889991 0 0 0 0 1 0.999999 0.001247882 6.94484e-4 0 -0.001428127 0.8734154 0.486974 0.4361505 1.12655e-6 -0.4869745 0.8734162 0 0 0 0 1 0.999999 0.001224994 7.34068e-4 0 -0.001428127 0.8575764 0.5143547 0.4361505 5.79628e-7 -0.5143551 0.8575773 0 0 0 0 1 0.999999 0.001200854 7.75709e-4 0 -0.001429617 0.8397746 0.5429335 0.4361505 5.81792e-7 -0.542934 0.8397754 0 0 0 0 1 0.999999 0.001171112 8.19516e-4 0 -0.001429378 0.8186743 0.5742564 0.4361505 1.62352e-6 -0.5742569 0.8186751 0 0 0 0 1 0.999999 0.001135647 8.66276e-4 0 -0.001428306 0.7950503 0.6065418 0.4361505 0 -0.6065424 0.7950511 0 0 0 0 1 0.999999 0.001100957 9.11013e-4 0 -0.001429021 0.770133 0.6378818 0.4361505 7.01117e-7 -0.6378825 0.7701337 0 0 0 0 1 0.999999 0.001065075 9.52627e-4 0 -0.001428961 0.7452048 0.6668342 0.4361505 3.58557e-7 -0.6668349 0.7452055 0 0 0 0 1 0.999999 0.001030325 9.9076e-4 0 -0.001429378 0.7201331 0.6938345 0.4361505 1.4117e-6 -0.6938353 0.7201338 0 0 0 0 1 0.999999 9.93753e-4 0.001025795 0 -0.001428186 0.6949744 0.7190331 0.4361505 1.61351e-6 -0.7190339 0.694975 0 0 0 0 1 0.999999 9.55827e-4 0.001062035 0 -0.001428782 0.6685065 0.743705 0.4361505 8.63275e-7 -0.7437058 0.6685071 0 0 0 0 1 0.999999 9.16814e-4 0.001095175 0 -0.001428246 0.6409909 0.7675471 0.4361505 1.67219e-6 -0.767548 0.6409915 0 0 0 0 1 0.999999 8.76564e-4 0.001127004 0 -0.001427769 0.6134312 0.7897468 0.4361505 9.19488e-7 -0.7897477 0.6134318 0 0 0 0 1 0.999999 8.39096e-4 0.001155078 0 -0.00142771 0.5872755 0.8093858 0.4361505 7.79436e-7 -0.8093867 0.5872761 0 0 0 0 1 0.999999 8.03966e-4 0.001180469 0 -0.001428246 0.5623821 0.8268763 0.4361505 8.88099e-7 -0.8268771 0.5623826 0 0 0 0 1 0.999999 7.72227e-4 0.00120145 0 -0.001428186 0.5397701 0.8418112 0.4361505 1.56207e-6 -0.8418121 0.5397707 0 0 0 0 1 0.999999 7.4225e-4 0.001219809 0 -0.001427888 0.5192162 0.8546418 0.4361505 9.87788e-7 -0.8546427 0.5192167 0 0 0 0 1 0.999999 7.15179e-4 0.0012362 0 -0.001428127 0.5007037 0.8656176 0.4361505 0 -0.8656185 0.5007042 0 0 0 0 1 0.999999 6.937e-4 0.001248121 0 -0.001427948 0.4846823 0.8746891 0.4361505 1.80155e-6 -0.87469 0.4846828 0 0 0 0 1 0.999999 6.74787e-4 0.001259565 0 -0.001428902 0.4711925 0.8820293 0.4361505 1.67921e-6 -0.8820302 0.471193 0 0 0 0 1 0.999999 6.56736e-4 0.00126791 0 -0.001427888 0.4593179 0.8882708 0.4361505 9.69484e-7 -0.8882718 0.4593184 0 0 0 0 1 0.999999 6.42379e-4 0.001276195 0 -0.001428723 0.448704 0.8936793 0.4361505 1.44397e-6 -0.8936803 0.4487044 0 0 0 0 1 0.999999 6.31321e-4 0.001282215 0 -0.0014292 0.440889 0.8975605 0.4361505 1.31742e-6 -0.8975615 0.4408894 0 0 0 0 1 0.999999 6.23113e-4 0.001284778 0 -0.001427888 0.4362654 0.8998169 0.4361505 1.78154e-7 -0.8998179 0.4362658 0 0 0 0 1 0.999999 6.21792e-4 0.001286506 0 -0.001428842 0.4344523 0.9006937 0.4361505 1.11712e-6 -0.9006947 0.4344528 0 0 0 0 1 0.999999 6.22374e-4 0.001286327 0 -0.001428961 0.4345356 0.9006536 0.4361505 1.58578e-6 -0.9006545 0.4345361 0 0 0 0 1 0.999999 6.21977e-4 0.001285016 0 -0.00142759 0.435524 0.900176 0.4361505 2.31051e-7 -0.900177 0.4355245 0 0 0 0 1 0.999999 6.27129e-4 0.00128293 0 -0.001428008 0.4387134 0.8986259 0.4361505 6.97819e-7 -0.8986269 0.4387139 0 0 0 0 1 0.999999 6.34724e-4 0.001279592 0 -0.001428365 0.4436061 0.8962208 0.4361505 1.19489e-6 -0.8962217 0.4436066 0 0 0 0 1 0.999999 6.46107e-4 0.001275062 0 -0.001429438 0.4514204 0.8923103 0.4361505 9.173e-7 -0.8923112 0.4514209 0 0 0 0 1 0.999999 6.60975e-4 0.001266181 0 -0.001428365 0.4622946 0.8867253 0.4361505 7.2936e-7 -0.8867262 0.4622951 0 0 0 0 1 0.999999 6.79704e-4 0.001256108 0 -0.001428246 0.4748626 0.8800588 0.4361505 1.68297e-6 -0.8800597 0.4748632 0 0 0 0 1 0.999999 6.97267e-4 0.001245975 0 -0.001427829 0.4883036 0.8726727 0.4361505 0 -0.8726736 0.488304 0 0 0 0 1 0.999999 7.1869e-4 0.001235067 0 -0.001428961 0.5024054 0.864631 0.4361505 8.69746e-7 -0.8646319 0.5024059 0 0 0 0 1 0.999999 7.40146e-4 0.001220822 0 -0.00142771 0.5180403 0.855355 0.4361505 6.26023e-7 -0.8553559 0.5180408 0 0 0 0 1 0.999999 7.67584e-4 0.001205325 0 -0.001429021 0.5363323 0.8440058 0.4361505 1.36643e-6 -0.8440067 0.5363328 0 0 0 0 1 0.999999 7.97384e-4 0.001186311 0 -0.001429378 0.5575294 0.830156 0.4361505 5.22545e-7 -0.8301569 0.5575299 0 0 0 0 1 0.999999 8.31576e-4 0.00116235 0 -0.0014292 0.5815967 0.813476 0.4361505 4.40433e-7 -0.8134769 0.5815973 0 0 0 0 1 0.999999 8.66495e-4 0.001136243 0 -0.001428902 0.605921 0.7955237 0.4361505 8.37769e-7 -0.7955244 0.6059216 0 0 0 0 1 0.999999 9.01966e-4 0.001107692 0 -0.001428425 0.6312847 0.7755499 0.4361505 2.49069e-7 -0.7755507 0.6312853 0 0 0 0 1 0.999999 9.39825e-4 0.001076698 0 -0.00142914 0.6569821 0.7539048 0.4361505 1.15528e-6 -0.7539056 0.6569828 0 0 0 0 1 0.999999 9.75105e-4 0.0010432 0 -0.001427948 0.6828299 0.7305759 0.4361505 0 -0.7305768 0.6828306 0 0 0 0 1 0.999999 0.001013219 0.001006901 0 -0.001428484 0.7091951 0.7050109 0.4361505 2.45061e-7 -0.7050116 0.7091958 0 0 0 0 1 0.999999 0.001051008 9.678e-4 0 -0.001428723 0.7349961 0.67807 0.4361505 1.34646e-6 -0.6780707 0.7349967 0 0 0 0 1 0.999999 0.00108689 9.27925e-4 0 -0.00142908 0.760397 0.6494571 0.4361505 2.99136e-7 -0.6494577 0.7603977 0 0 0 0 1 0.999999 0.001120865 8.85679e-4 0 -0.001428544 0.7846094 0.6199887 0.4361505 0 -0.6199893 0.7846102 0 0 0 0 1 0.999999 0.001155078 8.42126e-4 0 -0.001429438 0.8074359 0.5899537 0.4361505 1.48654e-6 -0.5899543 0.8074367 0 0 0 0 1 0.999999 0.001183927 7.98879e-4 0 -0.001428246 0.8290265 0.5592076 0.4361505 -2.20403e-7 -0.5592081 0.8290273 0 0 0 0 1 0.999999 0.001211702 7.55573e-4 0 -0.001428008 0.8483133 0.5294928 0.4361505 6.48475e-7 -0.5294933 0.8483141 0 0 0 0 1 0.999999 0.001236796 7.16521e-4 0 -0.001429319 0.8652461 0.5013456 0.4361505 0 -0.5013461 0.8652468 0 0 0 0 1 0.999999 0.001257836 6.76712e-4 0 -0.001428306 0.8802782 0.4744558 0.4361505 1.09567e-6 -0.4744562 0.8802791 0 0 0 0 1 0.999999 0.001276135 6.41425e-4 0 -0.001428246 0.8933783 0.4493031 0.4361505 3.36633e-7 -0.4493036 0.8933791 0 0 0 0 1 0.999999 0.001291453 6.11252e-4 0 -0.001428842 0.9039244 0.42769 0.4361505 -1.67093e-7 -0.4276904 0.9039252 0 0 0 0 1 0.999999 0.001304149 5.82991e-4 0 -0.001428484 0.9129099 0.4081588 0.4361505 0 -0.4081593 0.9129107 0 0 0 0 1 0.999999 0.001315891 5.58102e-4 0 -0.001429378 0.9206823 0.3903104 0.4361505 -2.13107e-7 -0.3903108 0.9206832 0 0 0 0 1 0.999999 0.001324594 5.3772e-4 0 -0.001429557 0.9264617 0.3763864 0.4361505 3.9004e-7 -0.3763867 0.9264627 0 0 0 0 1 0.999999 0.001328885 5.25996e-4 0 -0.0014292 0.9297968 0.3680705 0.4361505 0 -0.3680709 0.9297978 0 0 0 0 1 0.999999 0.001332163 5.1868e-4 0 -0.001429617 0.931811 0.3629412 0.4361505 2.06898e-7 -0.3629415 0.9318119 0 0 0 0 1 0.999999 0.001333177 5.14839e-4 0 -0.00142914 0.9326623 0.3607477 0.4361505 7.72568e-7 -0.360748 0.9326633 0 0 0 0 1 0.999999 0.001330792 5.17962e-4 0 -0.001428067 0.931591 0.3635056 0.4361505 1.24214e-6 -0.3635058 0.9315919 0 0 0 0 1 0.999999 0.001327753 5.2909e-4 0 -0.001429259 0.9287167 0.3707874 0.4361505 9.46943e-7 -0.3707877 0.9287177 0 0 0 0 1 0.999999 0.00132215 5.42426e-4 0 -0.00142908 0.9250487 0.379846 0.4361505 4.56193e-7 -0.3798464 0.9250496 0 0 0 0 1 0.999999 0.001315593 5.59491e-4 0 -0.001429617 0.9201698 0.391517 0.4361505 2.50877e-7 -0.3915174 0.9201707 0 0 0 0 1 0.999999 0.001306712 5.79885e-4 0 -0.001429557 0.9140887 0.4055121 0.4361505 -1.78027e-7 -0.4055125 0.9140895 0 0 0 0 1 0.999999 0.001298308 5.975e-4 0 -0.0014292 0.9083255 0.4182618 0.4361505 3.13454e-7 -0.4182622 0.9083263 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftLeg_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftLeg_pose_matrix-interpolation"> + <Name_array id="_6_15_t_LeftLeg_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_LeftLeg_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_LeftLeg_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_LeftLeg_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_LeftLeg_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_LeftLeg_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_LeftLeg_pose_matrix-sampler" target="LeftLeg/transform"/> + </animation> + <animation id="_6_15_t_LeftFoot_pose_matrix"> + <source id="_6_15_t_LeftFoot_pose_matrix-input"> + <float_array id="_6_15_t_LeftFoot_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftFoot_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftFoot_pose_matrix-output"> + <float_array id="_6_15_t_LeftFoot_pose_matrix-output-array" count="2224">-0.9997003 -8.28865e-4 -0.02447205 0 -0.02422881 0.1779734 0.9837371 0.4459705 0.003539979 0.9840353 -0.1779401 0 0 0 0 1 -0.9996342 0.007211983 -0.02606511 0 -0.02415055 0.1957182 0.9803628 0.4459705 0.0121718 0.9806341 -0.1954724 0 0 0 0 1 -0.9995709 0.01121324 -0.02706247 0 -0.02407199 0.2120279 0.9769672 0.4459705 0.01669293 0.9771997 -0.211667 0 0 0 0 1 -0.9996399 0.006307959 -0.0260837 0 -0.02401232 0.2237166 0.9743585 0.4459705 0.0119816 0.9746342 -0.2234846 0 0 0 0 1 -0.9996724 0.003194034 -0.02539926 0 -0.02396947 0.2315785 0.9725209 0.4459705 0.008988201 0.9728114 -0.231426 0 0 0 0 1 -0.9995995 0.00907278 -0.02680826 0 -0.02396398 0.2326211 0.9722722 0.4459705 0.01505738 0.9725255 -0.2323105 0 0 0 0 1 -0.9993507 0.0207194 -0.02947688 0 -0.02399003 0.2277577 0.9734224 0.4459705 0.02688235 0.9734978 -0.2271127 0 0 0 0 1 -0.9988933 0.03407657 -0.03242039 0 -0.02401429 0.2231834 0.9744807 0.4459705 0.0404427 0.974181 -0.222118 0 0 0 0 1 -0.9981814 0.04864782 -0.03560489 0 -0.02402549 0.220665 0.9750538 0.4459705 0.05529099 0.9741361 -0.2190949 0 0 0 0 1 -0.9974403 0.06048083 -0.03814584 0 -0.02403455 0.2188587 0.9754606 0.4459705 0.06734526 0.9738807 -0.2168448 0 0 0 0 1 -0.9970661 0.06579369 -0.03912109 0 -0.02405011 0.2159329 0.9761121 0.4459705 0.07266956 0.9741894 -0.2137169 0 0 0 0 1 -0.9971708 0.0645101 -0.03858721 0 -0.02406847 0.2123036 0.9769074 0.4459705 0.07121258 0.9750725 -0.2101502 0 0 0 0 1 -0.997007 0.0668314 -0.03886669 0 -0.02408331 0.2092369 0.9775684 0.4459705 0.07346469 0.975579 -0.207001 0 0 0 0 1 -0.9965199 0.07318878 -0.03989613 0 -0.02410274 0.2051767 0.9784281 0.4459705 0.07979577 0.975985 -0.2026986 0 0 0 0 1 -0.9961889 0.07738709 -0.04024016 0 -0.02413159 0.19881 0.979741 0.4459705 0.0838195 0.9769783 -0.1961847 0 0 0 0 1 -0.9961782 0.07772332 -0.03985428 0 -0.024158 0.1933135 0.9808396 0.4459705 0.08393853 0.9780541 -0.190697 0 0 0 0 1 -0.9960201 0.07981604 -0.03966677 0 -0.02418816 0.1862872 0.9821976 0.4459705 0.08578455 0.9792483 -0.1836151 0 0 0 0 1 -0.9959267 0.08113503 -0.03933489 0 -0.02421826 0.179511 0.9834579 0.4459705 0.08685392 0.9804048 -0.1768149 0 0 0 0 1 -0.9957395 0.08340299 -0.03933185 0 -0.02423632 0.1748291 0.9843004 0.4459705 0.08896994 0.9810604 -0.1720628 0 0 0 0 1 -0.9957435 0.08352839 -0.03896385 0 -0.02425605 0.1703596 0.9850835 0.4459705 0.08892029 0.9818357 -0.1676082 0 0 0 0 1 -0.9957157 0.08412373 -0.03838688 0 -0.02428644 0.1626407 0.9863864 0.4459705 0.08922183 0.9830932 -0.1599007 0 0 0 0 1 -0.9954965 0.08678823 -0.03814089 0 -0.02431356 0.1551323 0.9875944 0.4459705 0.09162849 0.9840745 -0.1523234 0 0 0 0 1 -0.9953124 0.08891957 -0.03803527 0 -0.02433043 0.1504145 0.9883236 0.4459705 0.09360241 0.9846165 -0.1475459 0 0 0 0 1 -0.9952225 0.09006571 -0.03768831 0 -0.02434933 0.1448556 0.9891532 0.4459705 0.09454816 0.9853455 -0.1419704 0 0 0 0 1 -0.9954438 0.08803915 -0.03661978 0 -0.02437722 0.1363122 0.9903661 0.4459705 0.09218269 0.9867466 -0.1335449 0 0 0 0 1 -0.9956826 0.08583074 -0.03534656 0 -0.02441179 0.1252605 0.9918236 0.4459705 0.08955645 0.9884046 -0.1226243 0 0 0 0 1 -0.9955962 0.08715623 -0.03452765 0 -0.02444303 0.1142298 0.9931537 0.4459705 0.09050363 0.9896242 -0.1115964 0 0 0 0 1 -0.9953813 0.08974313 -0.03409421 0 -0.02446246 0.1063174 0.9940313 0.4459705 0.09283232 0.9902745 -0.1036309 0 0 0 0 1 -0.9952868 0.0910362 -0.03341764 0 -0.02448296 0.09755098 0.9949294 0.4459705 0.09383451 0.9910585 -0.09486222 0 0 0 0 1 -0.9953389 0.090869 -0.0323022 0 -0.02450776 0.08562111 0.9960264 0.4459705 0.09327369 0.9921757 -0.08299487 0 0 0 0 1 -0.995378 0.09080332 -0.03126841 0 -0.02452939 0.07440567 0.9969264 0.4459705 0.0928508 0.9930858 -0.07183426 0 0 0 0 1 -0.995272 0.09225505 -0.03037738 0 -0.02454555 0.06370407 0.997667 0.4459705 0.093975 0.993696 -0.06113833 0 0 0 0 1 -0.9949954 0.09546351 -0.02951323 0 -0.02456158 0.05263566 0.9983118 0.4459705 0.09685581 0.9940407 -0.05002737 0 0 0 0 1 -0.9950614 0.09509599 -0.02845531 0 -0.02457296 0.04175019 0.9988259 0.4459705 0.09617239 0.9945926 -0.0392071 0 0 0 0 1 -0.9954781 0.09103667 -0.02712547 0 -0.02458369 0.0289269 0.9992792 0.4459705 0.09175574 0.9954277 -0.02655798 0 0 0 0 1 -0.9956434 0.0895366 -0.02602899 0 -0.02459114 0.01712489 0.9995509 0.4459705 0.08994215 0.9958367 -0.01484835 0 0 0 0 1 -0.9956662 0.08949291 -0.02530086 0 -0.02459263 0.009007573 0.999657 0.4459705 0.08969014 0.9959471 -0.006767511 0 0 0 0 1 -0.9956997 0.08926379 -0.02478575 0 -0.02459442 0.003242254 0.9996923 0.4459705 0.08931666 0.9960032 -0.001032769 0 0 0 0 1 -0.9960767 0.08515012 -0.0241037 0 -0.02459388 -0.00471276 0.9996865 0.4459705 0.08500987 0.9963575 0.006788551 0 0 0 0 1 -0.9963076 0.08264952 -0.02324759 0 -0.0245915 -0.01527959 0.9995808 0.4459705 0.08225971 0.9964619 0.01725578 0 0 0 0 1 -0.9963418 0.08241653 -0.02259868 0 -0.02458876 -0.02321207 0.9994282 0.4459705 0.08184486 0.9963279 0.02515387 0 0 0 0 1 -0.9964558 0.0810936 -0.02235579 0 -0.02458667 -0.02661597 0.9993433 0.4459705 0.08044534 0.9963515 0.02851563 0 0 0 0 1 -0.9970092 0.07395714 -0.02243006 0 -0.02458578 -0.02836769 0.9992952 0.4459705 0.07326877 0.9968582 0.03010129 0 0 0 0 1 -0.9971354 0.07224667 -0.02239495 0 -0.0245853 -0.02957165 0.9992603 0.4459705 0.07153099 0.9969487 0.03126335 0 0 0 0 1 -0.9972966 0.07001978 -0.02229225 0 -0.02458471 -0.03205037 0.9991839 0.4459705 0.06924813 0.997031 0.03368532 0 0 0 0 1 -0.9976384 0.06501406 -0.02215808 0 -0.02458071 -0.03670299 0.9990239 0.4459705 0.06413739 0.9972096 0.03821462 0 0 0 0 1 -0.9980004 0.05922269 -0.02209168 0 -0.02457642 -0.04156059 0.9988337 0.4459705 0.05823552 0.9973797 0.0429331 0 0 0 0 1 -0.998342 0.05310732 -0.02220672 0 -0.02457535 -0.0443713 0.9987128 0.4459705 0.05205363 0.9976029 0.04560297 0 0 0 0 1 -0.9986108 0.0477069 -0.02237337 0 -0.02457278 -0.04602634 0.998638 0.4459705 0.0466122 0.9978008 0.04713487 0 0 0 0 1 -0.998593 0.04811233 -0.02230209 0 -0.02457165 -0.047109 0.9985875 0.4459705 0.04699373 0.9977308 0.04822516 0 0 0 0 1 -0.9985519 0.04902052 -0.02216523 0 -0.02457028 -0.04901629 0.9984958 0.4459705 0.04786032 0.9975947 0.05014991 0 0 0 0 1 -0.9986364 0.04725587 -0.02218592 0 -0.02456802 -0.05043971 0.998425 0.4459705 0.0460624 0.9976089 0.05153203 0 0 0 0 1 -0.9986954 0.04602754 -0.02211457 0 -0.02456605 -0.05339437 0.9982714 0.4459705 0.0447672 0.9975125 0.05445557 0 0 0 0 1 -0.9986325 0.0474416 -0.02196484 0 -0.02456271 -0.05488932 0.9981904 0.4459705 0.04615014 0.9973651 0.05597966 0 0 0 0 1 -0.9986688 0.04659748 -0.02212136 0 -0.02456659 -0.05257338 0.9983149 0.4459705 0.04535597 0.9975297 0.05364829 0 0 0 0 1 -0.9987127 0.04558962 -0.022242 0 -0.02456736 -0.05109733 0.9983915 0.4459705 0.04437977 0.997653 0.05215173 0 0 0 0 1 -0.9989895 0.03886395 -0.02257776 0 -0.02456843 -0.0515303 0.9983692 0.4459705 0.03763711 0.9979153 0.05243325 0 0 0 0 1 -0.9991937 0.03298544 -0.02289068 0 -0.02456861 -0.05139535 0.9983762 0.4459705 0.03175544 0.9981338 0.05216443 0 0 0 0 1 -0.9992785 0.03020685 -0.02302616 0 -0.02456802 -0.05170673 0.9983602 0.4459705 0.02896666 0.9982057 0.05241173 0 0 0 0 1 -0.9993509 0.02759224 -0.02316683 0 -0.02456825 -0.05158466 0.9983664 0.4459705 0.0263521 0.9982877 0.05222922 0 0 0 0 1 -0.999369 0.02682471 -0.02328252 0 -0.02457094 -0.04874581 0.998509 0.4459705 0.02564978 0.9984514 0.04937428 0 0 0 0 1 -0.999328 0.02833127 -0.02325969 0 -0.02457344 -0.04694002 0.9985955 0.4459705 0.02719968 0.9984962 0.04760485 0 0 0 0 1 -0.9992449 0.03120917 -0.02314478 0 -0.02457356 -0.04620295 0.9986299 0.4459705 0.03009706 0.9984448 0.04693514 0 0 0 0 1 -0.9991643 0.03369635 -0.0231387 0 -0.02457785 -0.04294025 0.9987753 0.4459705 0.03266155 0.9985097 0.0437327 0 0 0 0 1 -0.9990908 0.0357539 -0.02322459 0 -0.02458238 -0.03801703 0.9989747 0.4459705 0.03483432 0.9986377 0.03886151 0 0 0 0 1 -0.99901 0.03786581 -0.02335166 0 -0.02458685 -0.03248965 0.9991697 0.4459705 0.03707569 0.998755 0.03338867 0 0 0 0 1 -0.9990029 0.03787833 -0.02363216 0 -0.02459079 -0.02504462 0.9993839 0.4459705 0.03726315 0.9989689 0.0259512 0 0 0 0 1 -0.9990912 0.03522372 -0.02400332 0 -0.02459627 -0.01649773 0.9995613 0.4459705 0.03481227 0.9992437 0.01734924 0 0 0 0 1 -0.9989981 0.03754758 -0.02435135 0 -0.02459865 -0.006137907 0.9996786 0.4459705 0.03738605 0.9992764 0.007055521 0 0 0 0 1 -0.9987997 0.04232853 -0.02464944 0 -0.02459895 0.001713335 0.999696 0.4459705 0.04235792 0.9991026 -6.69934e-4 0 0 0 0 1 -0.999094 0.03451985 -0.0248934 0 -0.02459818 0.008950591 0.9996574 0.4459705 0.03473085 0.9993644 -0.008093237 0 0 0 0 1 -0.9991171 0.03325742 -0.02567327 0 -0.02458608 0.0326972 0.9991629 0.4459705 0.03406906 0.9989123 -0.03185057 0 0 0 0 1 -0.9989576 0.03707832 -0.02662706 0 -0.02456396 0.05502712 0.9981827 0.4459705 0.03847616 0.9977966 -0.05405884 0 0 0 0 1 -0.9984975 0.04696565 -0.028234 0 -0.02452802 0.07769381 0.9966756 0.4459705 0.04900312 0.9958708 -0.07642495 0 0 0 0 1 -0.997771 0.05911833 -0.03095364 0 -0.02446216 0.1075339 0.9939004 0.4459705 0.06208634 0.9924425 -0.105848 0 0 0 0 1 -0.9970353 0.06890344 -0.0342518 0 -0.02436995 0.1394574 0.9899282 0.4459705 0.07298612 0.9878283 -0.1373646 0 0 0 0 1 -0.9959139 0.08145326 -0.03899908 0 -0.02423709 0.1749233 0.9842838 0.4459705 0.086995 0.9812074 -0.1722343 0 0 0 0 1 -0.9942246 0.0967074 -0.04653358 0 -0.0240128 0.2221446 0.974718 0.4459705 0.1045997 0.9702063 -0.2185394 0 0 0 0 1 -0.9921436 0.1117058 -0.05632966 0 -0.02370053 0.2742795 0.961358 0.4459705 0.1228395 0.9551405 -0.2694771 0 0 0 0 1 -0.9891291 0.1306459 -0.06749457 0 -0.02342039 0.3131682 0.9494089 0.4459705 0.1451736 0.940669 -0.3067039 0 0 0 0 1 -0.9834252 0.1609712 -0.08344656 0 -0.02315449 0.3449663 0.9383295 0.4459705 0.1798303 0.9247093 -0.3355212 0 0 0 0 1 -0.9776309 0.1843529 -0.1012521 0 -0.02277642 0.3857763 0.9223112 0.4459705 0.2090916 0.9039864 -0.3729478 0 0 0 0 1 -0.9755159 0.1885761 -0.1131713 0 -0.02235019 0.4269134 0.9040164 0.4459705 0.2187902 0.8844121 -0.4122462 0 0 0 0 1 -0.9739598 0.1918546 -0.1208064 0 -0.02208709 0.4500159 0.8927474 0.4459705 0.2256426 0.8721687 -0.4340599 0 0 0 0 1 -0.9736137 0.1928079 -0.1220718 0 -0.02205228 0.4529316 0.8912726 0.4459705 0.2271345 0.8704475 -0.4367285 0 0 0 0 1 -0.9769095 0.1796441 -0.1156541 0 -0.02204817 0.4536601 0.8909021 0.4459705 0.212513 0.872881 -0.4392241 0 0 0 0 1 -0.9803044 0.1661076 -0.1068254 0 -0.02215391 0.4450028 0.8952552 0.4459705 0.1962464 0.8799895 -0.4325583 0 0 0 0 1 -0.9844516 0.1482784 -0.0941745 0 -0.02237212 0.4259219 0.9044834 0.4459705 0.1742264 0.8925272 -0.4159821 0 0 0 0 1 -0.9872637 0.1347885 -0.08451259 0 -0.02257478 0.4071531 0.9130809 0.4459705 0.1574825 0.9033599 -0.3989247 0 0 0 0 1 -0.9892579 0.1247876 -0.07613801 0 -0.02282303 0.3826121 0.9236271 0.4459705 0.1443885 0.9154435 -0.375654 0 0 0 0 1 -0.9919275 0.108387 -0.06581938 0 -0.02306914 0.3561487 0.9341445 0.4459705 0.1246907 0.9281224 -0.3507732 0 0 0 0 1 -0.994208 0.09085947 -0.05740505 0 -0.02321171 0.3399933 0.9401414 0.4459705 0.1049382 0.9360287 -0.335915 0 0 0 0 1 -0.9960229 0.07358729 -0.05023318 0 -0.02330422 0.3290054 0.9440405 0.4459705 0.08599638 0.9414569 -0.325982 0 0 0 0 1 -0.9975937 0.05451768 -0.04283326 0 -0.02340388 0.3167398 0.9482238 0.4459705 0.06526201 0.9469448 -0.3147017 0 0 0 0 1 -0.9984343 0.04125815 -0.03777486 0 -0.02350586 0.3033344 0.9525943 0.4459705 0.05076068 0.951991 -0.3018895 0 0 0 0 1 -0.9990074 0.02932327 -0.03353393 0 -0.02360284 0.2899987 0.956736 0.4459705 0.03777945 0.9565781 -0.2890187 0 0 0 0 1 -0.9993953 0.01792156 -0.02979832 0 -0.02369934 0.2760295 0.960857 0.4459705 0.02544528 0.9609825 -0.2754378 0 0 0 0 1 -0.9995959 0.008851587 -0.02701365 0 -0.02381283 0.2582649 0.9657806 0.4459705 0.01552534 0.966034 -0.2579497 0 0 0 0 1 -0.9996836 0.001877605 -0.02508866 0 -0.02396047 0.2330513 0.9721692 0.4459705 0.007672309 0.972463 -0.2329325 0 0 0 0 1 -0.9997063 -0.002452075 -0.02410787 0 -0.02408784 0.2090136 0.977616 0.4459705 0.002641618 0.9779101 -0.2090112 0 0 0 0 1 -0.9997057 -0.006545066 -0.0233646 0 -0.02418094 0.189133 0.9816538 0.4459705 -0.002005934 0.98193 -0.1892355 0 0 0 0 1 -0.999648 -0.01479947 -0.02202147 0 -0.02425003 0.172845 0.9846505 0.4459705 -0.01076602 0.9848382 -0.1731429 0 0 0 0 1 -0.9995232 -0.02268648 -0.02095127 0 -0.02430349 0.1593242 0.9869272 0.4459705 -0.01905184 0.986966 -0.1597995 0 0 0 0 1 -0.9993051 -0.03152835 -0.01988035 0 -0.02434217 0.1481253 0.988669 0.4459705 -0.02822631 0.9884662 -0.1487897 0 0 0 0 1 -0.9988859 -0.04338341 -0.01857179 0 -0.02437818 0.1374008 0.9902156 0.4459705 -0.04040718 0.9895654 -0.1383052 0 0 0 0 1 -0.9983428 -0.05483996 -0.01744741 0 -0.02440315 0.128847 0.9913643 0.4459705 -0.05211836 0.9901474 -0.1299716 0 0 0 0 1 -0.9977211 -0.06539559 -0.01661491 0 -0.02442675 0.1205331 0.9924088 0.4459705 -0.06289649 0.9905533 -0.1218557 0 0 0 0 1 -0.9969018 -0.07701164 -0.01600158 0 -0.02445381 0.1100941 0.9936203 0.4459705 -0.0747587 0.9909335 -0.1116362 0 0 0 0 1 -0.9956415 -0.09202885 -0.01512193 0 -0.02447324 0.1013491 0.9945499 0.4459705 -0.08999466 0.9905856 -0.1031595 0 0 0 0 1 -0.9943669 -0.1050437 -0.01415389 0 -0.02448087 0.09768342 0.9949164 0.4459705 -0.1031272 0.9896588 -0.09970456 0 0 0 0 1 -0.9927222 -0.1197252 -0.01298612 0 -0.02448403 0.09507161 0.9951694 0.4459705 -0.1179123 0.9882449 -0.09731096 0 0 0 0 1 -0.9903602 -0.1380448 -0.01142281 0 -0.02448523 0.09330046 0.9953369 0.4459705 -0.1363354 0.986022 -0.09578102 0 0 0 0 1 -0.9886211 -0.1500924 -0.01004034 0 -0.02447938 0.09466588 0.9952082 0.4459705 -0.1484227 0.9841299 -0.09726274 0 0 0 0 1 -0.9869964 -0.1604647 -0.009444534 0 -0.02448284 0.09200036 0.9954581 0.4459705 -0.158867 0.9827451 -0.09473252 0 0 0 0 1 -0.9860703 -0.1660741 -0.009211599 0 -0.02448451 0.09015351 0.9956269 0.4459705 -0.1645175 0.9819839 -0.09296381 0 0 0 0 1 -0.9850834 -0.1719245 -0.007269322 0 -0.02446591 0.09811788 0.9948741 0.4459705 -0.1703301 0.980212 -0.1008604 0 0 0 0 1 -0.9838628 -0.1788925 -0.003404974 0 -0.02442103 0.1154086 0.9930179 0.4459705 -0.1772505 0.9770768 -0.1179149 0 0 0 0 1 -0.9831029 -0.1830498 0.001393139 0 -0.02435153 0.1383201 0.9900882 0.4459705 -0.1814282 0.9733248 -0.1404403 0 0 0 0 1 -0.9827729 -0.1847673 0.004327356 0 -0.02430289 0.152407 0.9880191 0.4459705 -0.1832131 0.9708933 -0.1542718 0 0 0 0 1 -0.9827135 -0.1850997 0.003532648 0 -0.02431821 0.1479774 0.9886918 0.4459705 -0.1835294 0.9715151 -0.1499206 0 0 0 0 1 -0.9831577 -0.1827518 0.001705944 0 -0.02434659 0.1402184 0.9898213 0.4459705 -0.181131 0.9731091 -0.1423062 0 0 0 0 1 -0.983406 -0.1814158 0.001092851 0 -0.02435272 0.1379745 0.9901365 0.4459705 -0.1797772 0.9736797 -0.1401028 0 0 0 0 1 -0.9836084 -0.1803177 -1.44135e-4 0 -0.02437227 0.1321554 0.9909294 0.4459705 -0.1786631 0.9746904 -0.1343839 0 0 0 0 1 -0.9843801 -0.1760508 -0.001430332 0 -0.02438485 0.1282919 0.9914367 0.4459705 -0.1743597 0.9759857 -0.1305809 0 0 0 0 1 -0.9847097 -0.1741853 -0.002552568 0 -0.02440083 0.1234057 0.9920563 0.4459705 -0.1724867 0.97695 -0.125769 0 0 0 0 1 -0.9834267 -0.1812527 -0.004425346 0 -0.02443897 0.1083346 0.9938141 0.4459705 -0.1796521 0.9774517 -0.1109687 0 0 0 0 1 -0.981567 -0.1910331 -0.005709648 0 -0.02446657 0.09597289 0.9950833 0.4459705 -0.189546 0.9768809 -0.09887772 0 0 0 0 1 -0.9811654 -0.1930619 -0.006460487 0 -0.02447617 0.09107702 0.9955431 0.4459705 -0.1916131 0.9769508 -0.09408694 0 0 0 0 1 -0.9818287 -0.1896132 -0.007696509 0 -0.02448648 0.08636593 0.9959626 0.4459705 -0.188183 0.9780535 -0.08943939 0 0 0 0 1 -0.9817788 -0.1897817 -0.009671866 0 -0.02450656 0.0759769 0.9968085 0.4459705 -0.1884412 0.9788827 -0.0792433 0 0 0 0 1 -0.9798196 -0.199546 -0.01161992 0 -0.02452629 0.06232923 0.9977543 0.4459705 -0.1983737 0.9779045 -0.06596547 0 0 0 0 1 -0.9798089 -0.1996183 -0.01127797 0 -0.02452367 0.06400734 0.9976481 0.4459705 -0.198427 0.9777813 -0.0676102 0 0 0 0 1 -0.9818485 -0.1893857 -0.01033252 0 -0.02451199 0.07268196 0.997054 0.4459705 -0.1880767 0.9792095 -0.0760048 0 0 0 0 1 -0.9826924 -0.184944 -0.01056092 0 -0.02451205 0.0733112 0.9970079 0.4459705 -0.1836165 0.9800112 -0.07657557 0 0 0 0 1 -0.9829614 -0.1834799 -0.01105421 0 -0.0245167 0.07126784 0.9971559 0.4459705 -0.1821703 0.980437 -0.0745517 0 0 0 0 1 -0.9837714 -0.1791191 -0.01050597 0 -0.02450895 0.07614433 0.9967956 0.4459705 -0.1777452 0.9808768 -0.07929849 0 0 0 0 1 -0.9851934 -0.1711792 -0.009574055 0 -0.02449393 0.08526122 0.9960576 0.4459705 -0.1696881 0.9815442 -0.0881915 0 0 0 0 1 -0.9870917 -0.1599356 -0.008414447 0 -0.0244674 0.09866923 0.9948196 0.4459705 -0.1582768 0.9821842 -0.1013087 0 0 0 0 1 -0.9889184 -0.1483536 -0.005635678 0 -0.0244022 0.1249853 0.9918585 0.4459705 -0.1464414 0.9810049 -0.1272203 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftFoot_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftFoot_pose_matrix-interpolation"> + <Name_array id="_6_15_t_LeftFoot_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_LeftFoot_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_LeftFoot_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_LeftFoot_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_LeftFoot_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_LeftFoot_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_LeftFoot_pose_matrix-sampler" target="LeftFoot/transform"/> + </animation> + <animation id="_6_15_t_LeftToeBase_pose_matrix"> + <source id="_6_15_t_LeftToeBase_pose_matrix-input"> + <float_array id="_6_15_t_LeftToeBase_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftToeBase_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftToeBase_pose_matrix-output"> + <float_array id="_6_15_t_LeftToeBase_pose_matrix-output-array" count="2224">0.9999399 0.01048088 -0.003214597 0 -0.007894814 0.8918972 0.4521695 0.1370782 0.007606208 -0.4521169 0.8919264 0 0 0 0 1 0.9999414 0.01030504 -0.003301799 0 -0.007762849 0.895707 0.4445771 0.1370782 0.007538855 -0.4445254 0.8957347 0 0 0 0 1 0.9999426 0.01017999 -0.003363132 0 -0.007668256 0.8983379 0.4392384 0.1370782 0.007492661 -0.4391874 0.8983643 0 0 0 0 1 0.999943 0.01012688 -0.003389716 0 -0.0076285 0.8994868 0.4368814 0.1370782 0.007473289 -0.4368306 0.8995128 0 0 0 0 1 0.9999446 0.009926617 -0.003484785 0 -0.00747776 0.9036148 0.4282809 0.1370782 0.007400333 -0.4282311 0.9036391 0 0 0 0 1 0.9999456 0.00981146 -0.003540217 0 -0.00739032 0.9059435 0.4233343 0.1370782 0.007360816 -0.423285 0.9059667 0 0 0 0 1 0.9999491 0.009370267 -0.003739237 0 -0.00705862 0.9145992 0.4043 0.1370782 0.007208287 -0.404253 0.9146189 0 0 0 0 1 0.9999549 0.008582174 -0.004071772 0 -0.006464779 0.9289103 0.3702485 0.1370782 0.006959855 -0.3702055 0.928924 0 0 0 0 1 0.9999603 0.007760345 -0.004382133 0 -0.005845665 0.9422823 0.3347684 0.1370782 0.006727099 -0.3347295 0.9422903 0 0 0 0 1 0.9999645 0.007036149 -0.004626035 0 -0.005300104 0.9528062 0.3035329 0.1370782 0.006543397 -0.3034976 0.9528099 0 0 0 0 1 0.9999669 0.006608963 -0.004757463 0 -0.004978537 0.9584909 0.2850797 0.1370782 0.006444096 -0.2850465 0.9584921 0 0 0 0 1 0.9999685 0.006291925 -0.004848182 0 -0.004739642 0.9624375 0.271462 0.1370782 0.00637412 -0.2714304 0.962437 0 0 0 0 1 0.9999696 0.006046354 -0.004916191 0 -0.004554986 0.9653801 0.2608072 0.1370782 0.00632292 -0.2607769 0.9653785 0 0 0 0 1 0.9999713 0.005680441 -0.005012392 0 -0.004278898 0.9694963 0.2450685 0.1370782 0.006251633 -0.24504 0.9694929 0 0 0 0 1 0.9999736 0.005138814 -0.005141496 0 -0.003871381 0.9751178 0.2216534 0.1370782 0.006152629 -0.2216277 0.975112 0 0 0 0 1 0.9999738 0.005075693 -0.005156874 0 -0.003823697 0.9757347 0.2189227 0.1370782 0.006142973 -0.2188972 0.9757286 0 0 0 0 1 0.9999731 0.005250751 -0.00511676 0 -0.003955245 0.9739984 0.2265205 0.1370782 0.006173133 -0.2264941 0.9739931 0 0 0 0 1 0.999975 0.004777729 -0.005221784 0 -0.003598988 0.9785247 0.2060984 0.1370782 0.006094336 -0.2060744 0.9785174 0 0 0 0 1 0.9999755 0.004653751 -0.005246698 0 -0.003505885 0.9796401 0.2007308 0.1370782 0.00607407 -0.2007074 0.9796325 0 0 0 0 1 0.9999748 0.004809081 -0.005214929 0 -0.00362271 0.9782391 0.2074493 0.1370782 0.006099104 -0.2074251 0.978232 0 0 0 0 1 0.9999758 0.004547894 -0.005268573 0 -0.003426015 0.9805626 0.1961767 0.1370782 0.006058335 -0.1961538 0.9805545 0 0 0 0 1 0.9999759 0.004514217 -0.005275964 0 -0.003400444 0.9808499 0.1947355 0.1370782 0.006053984 -0.1947128 0.9808418 0 0 0 0 1 0.9999758 0.004559159 -0.005265951 0 -0.0034343 0.9804575 0.196701 0.1370782 0.006059825 -0.1966781 0.9804495 0 0 0 0 1 0.999974 0.00502181 -0.005168676 0 -0.003782927 0.9762461 0.2166313 0.1370782 0.006133735 -0.216606 0.9762399 0 0 0 0 1 0.9999721 0.00549668 -0.005057692 0 -0.004140853 0.9714779 0.2370943 0.1370782 0.006216704 -0.2370667 0.9714736 0 0 0 0 1 0.9999726 0.00538671 -0.005084514 0 -0.004057824 0.9726195 0.2323678 0.1370782 0.006196975 -0.2323407 0.9726148 0 0 0 0 1 0.9999727 0.005339145 -0.005095481 0 -0.004022002 0.9731055 0.2303251 0.1370782 0.006188154 -0.2302983 0.9731005 0 0 0 0 1 0.9999723 0.005463719 -0.005065441 0 -0.004115939 0.9718198 0.2356891 0.1370782 0.006210446 -0.2356617 0.9718154 0 0 0 0 1 0.9999729 0.005302071 -0.005104839 0 -0.003993868 0.9734796 0.2287386 0.1370782 0.006182253 -0.228712 0.9734746 0 0 0 0 1 0.9999741 0.00500375 -0.00517261 0 -0.003769278 0.9764176 0.2158575 0.1370782 0.006130695 -0.2158324 0.9764112 0 0 0 0 1 0.9999747 0.004856109 -0.005204498 0 -0.003657937 0.9777981 0.2095173 0.1370782 0.006106436 -0.2094928 0.9777911 0 0 0 0 1 0.9999745 0.004907786 -0.005192875 0 -0.003697395 0.9773309 0.211685 0.1370782 0.006114065 -0.2116603 0.9773243 0 0 0 0 1 0.999974 0.005045473 -0.005163729 0 -0.00380063 0.9760175 0.2176586 0.1370782 0.006138145 -0.2176333 0.9760113 0 0 0 0 1 0.9999743 0.004974782 -0.005178689 0 -0.003747582 0.9766937 0.2146049 0.1370782 0.006125569 -0.2145799 0.9766873 0 0 0 0 1 0.9999743 0.004957973 -0.0051831 0 -0.003735065 0.9768629 0.2138338 0.1370782 0.006123363 -0.213809 0.9768564 0 0 0 0 1 0.999975 0.004752337 -0.005226194 0 -0.003580272 0.9787609 0.2049738 0.1370782 0.006089329 -0.2049499 0.9787536 0 0 0 0 1 0.9999762 0.004429697 -0.00529164 0 -0.003336906 0.981567 0.1910888 0.1370782 0.006040573 -0.1910665 0.9815586 0 0 0 0 1 0.9999765 0.004352688 -0.005307316 0 -0.003278791 0.9822083 0.1877661 0.1370782 0.006030201 -0.1877442 0.9821995 0 0 0 0 1 0.9999758 0.00454235 -0.005269348 0 -0.003421902 0.9806117 0.195931 0.1370782 0.006057202 -0.1959083 0.9806036 0 0 0 0 1 0.9999741 0.004996657 -0.005174279 0 -0.003764092 0.9764922 0.21552 0.1370782 0.006129562 -0.2154949 0.9764858 0 0 0 0 1 0.9999726 0.00538665 -0.005084276 0 -0.004057765 0.9726174 0.2323769 0.1370782 0.006196796 -0.2323498 0.9726126 0 0 0 0 1 0.9999728 0.00531429 -0.005101323 0 -0.004003465 0.9733645 0.2292281 0.1370782 0.006183624 -0.2292014 0.9733595 0 0 0 0 1 0.9999734 0.005203187 -0.005127608 0 -0.00391978 0.9744849 0.2244185 0.1370782 0.006164491 -0.2243923 0.9744795 0 0 0 0 1 0.9999742 0.004977643 -0.005178689 0 -0.003749549 0.9766643 0.2147391 0.1370782 0.006126701 -0.2147141 0.9766578 0 0 0 0 1 0.9999749 0.004787504 -0.005219161 0 -0.003606259 0.978428 0.2065564 0.1370782 0.006095468 -0.2065323 0.9784209 0 0 0 0 1 0.9999737 0.0051108 -0.005149424 0 -0.003849983 0.9753912 0.2204477 0.1370782 0.006149351 -0.220422 0.9753853 0 0 0 0 1 0.9999745 0.004907429 -0.005192756 0 -0.003697037 0.9773302 0.2116887 0.1370782 0.006113886 -0.211664 0.9773235 0 0 0 0 1 0.9999769 0.004220306 -0.005331158 0 -0.003179311 0.9832854 0.182043 0.1370782 0.006010353 -0.1820218 0.9832762 0 0 0 0 1 0.9999775 0.004024565 -0.005366802 0 -0.00303179 0.9848107 0.1736049 0.1370782 0.005983948 -0.1735846 0.9848008 0 0 0 0 1 0.9999774 0.004039466 -0.005364894 0 -0.003043174 0.9847049 0.1742035 0.1370782 0.005986511 -0.1741831 0.9846951 0 0 0 0 1 0.9999786 0.003676354 -0.005424916 0 -0.002769529 0.9873396 0.1585966 0.1370782 0.005939304 -0.1585781 0.9873287 0 0 0 0 1 0.9999782 0.003792226 -0.005407035 0 -0.002856969 0.9865325 0.1635403 0.1370782 0.005954384 -0.1635212 0.986522 0 0 0 0 1 0.999978 0.00385648 -0.005396544 0 -0.002905309 0.9860693 0.1663091 0.1370782 0.005962729 -0.1662897 0.986059 0 0 0 0 1 0.999978 0.00387305 -0.005393564 0 -0.002917528 0.9859406 0.1670701 0.1370782 0.005964815 -0.1670506 0.9859303 0 0 0 0 1 0.9999793 0.003419697 -0.005464673 0 -0.002576231 0.9890568 0.1475124 0.1370782 0.005909323 -0.1474952 0.9890453 0 0 0 0 1 0.9999786 0.00365442 -0.005429506 0 -0.00275284 0.9874929 0.1576391 0.1370782 0.005937695 -0.1576207 0.987482 0 0 0 0 1 0.9999734 0.005177617 -0.00513333 0 -0.003900468 0.9747336 0.2233366 0.1370782 0.00616002 -0.2233106 0.9747279 0 0 0 0 1 0.9999681 0.006361544 -0.004828751 0 -0.004792153 0.9615929 0.2744381 0.1370782 0.0063892 -0.2744061 0.9615927 0 0 0 0 1 0.9999641 0.007119178 -0.004598259 0 -0.005362749 0.9516469 0.3071471 0.1370782 0.00656253 -0.3071114 0.951651 0 0 0 0 1 0.9999606 0.00771892 -0.004395306 0 -0.005814552 0.9428977 0.3330315 0.1370782 0.00671494 -0.3329927 0.9429056 0 0 0 0 1 0.9999598 0.007828116 -0.004356801 0 -0.005896985 0.9412322 0.3377088 0.1370782 0.006744384 -0.3376695 0.9412407 0 0 0 0 1 0.9999601 0.007788538 -0.004370808 0 -0.005866944 0.9418307 0.3360366 0.1370782 0.006733775 -0.3359975 0.9418389 0 0 0 0 1 0.9999595 0.007881343 -0.004337728 0 -0.005936741 0.9403908 0.3400439 0.1370782 0.006759166 -0.3400044 0.9403997 0 0 0 0 1 0.9999588 0.007999181 -0.004294455 0 -0.006025612 0.9385368 0.3451266 0.1370782 0.006791293 -0.3450865 0.9385464 0 0 0 0 1 0.9999568 0.008308827 -0.004179 0 -0.006258845 0.9335303 0.3584438 0.1370782 0.006879448 -0.3584021 0.9335421 0 0 0 0 1 0.9999539 0.008715867 -0.004018664 0 -0.006565392 0.9265968 0.3759992 0.1370782 0.007000803 -0.3759555 0.9266113 0 0 0 0 1 0.9999482 0.009492099 -0.003685295 0 -0.007150769 0.912285 0.4094938 0.1370782 0.007248997 -0.4094461 0.9123055 0 0 0 0 1 0.9999424 0.01020127 -0.003353893 0 -0.007684171 0.8979088 0.4401146 0.1370782 0.007501244 -0.4400634 0.8979354 0 0 0 0 1 0.9999381 0.01068609 -0.003107488 0 -0.008049726 0.8873236 0.461077 0.1370782 0.007684469 -0.4610235 0.8873547 0 0 0 0 1 0.9999276 0.01176857 -0.002507984 0 -0.008864879 0.8614308 0.5077976 0.1370782 0.00813651 -0.5077386 0.8614728 0 0 0 0 1 0.9999104 0.01329898 -0.001523256 0 -0.01001805 0.8189463 0.5737828 0.1370782 0.008878171 -0.5737162 0.8190062 0 0 0 0 1 0.9999095 0.01337081 -0.001472055 0 -0.01007217 0.8167425 0.5769144 0.1370782 0.008916079 -0.5768474 0.8168033 0 0 0 0 1 0.9999089 0.0134167 -0.001439332 0 -0.0101068 0.815336 0.5788998 0.1370782 0.008940458 -0.5788325 0.8153975 0 0 0 0 1 0.9999102 0.01331305 -0.001513063 0 -0.01002836 0.8184912 0.5744315 0.1370782 0.00888592 -0.5743648 0.8185514 0 0 0 0 1 0.9999184 0.0126264 -0.001977622 0 -0.009510755 0.8385145 0.5447962 0.1370782 0.008537113 -0.5447329 0.8385663 0 0 0 0 1 0.9999146 0.01295095 -0.001761913 0 -0.009755849 0.8292471 0.558797 0.1370782 0.008698046 -0.5587321 0.8293027 0 0 0 0 1 0.9999036 0.01383298 -0.001137912 0 -0.01041954 0.8022682 0.5968728 0.1370782 0.009169459 -0.5968033 0.8023352 0 0 0 0 1 0.9999006 0.01406961 -9.58342e-4 0 -0.01059871 0.7945817 0.6070647 0.1370782 0.009302616 -0.6069942 0.7946519 0 0 0 0 1 0.9999011 0.01403385 -9.86833e-4 0 -0.01057082 0.795743 0.6055423 0.1370782 0.009283363 -0.6054719 0.7958126 0 0 0 0 1 0.9998972 0.01431739 -7.66555e-4 0 -0.0107851 0.7862872 0.6177671 0.1370782 0.009447515 -0.6176953 0.7863609 0 0 0 0 1 0.999893 0.01462608 -5.20296e-4 0 -0.01101726 0.7756288 0.6310932 0.1370782 0.009633958 -0.6310198 0.775707 0 0 0 0 1 0.9999117 0.01319217 -0.00159651 0 -0.009937942 0.8221409 0.5691973 0.1370782 0.008821487 -0.5691312 0.8221995 0 0 0 0 1 0.9999421 0.01022922 -0.003338456 0 -0.007705628 0.8972963 0.4413616 0.1370782 0.007510364 -0.4413104 0.8973232 0 0 0 0 1 0.9999552 0.008538961 -0.004088461 0 -0.006432354 0.929647 0.3683955 0.1370782 0.006946504 -0.3683527 0.9296603 0 0 0 0 1 0.9999586 0.008031785 -0.00428307 0 -0.00604999 0.9380168 0.3465371 0.1370782 0.006800889 -0.3464968 0.9380266 0 0 0 0 1 0.9999604 0.007742583 -0.004386842 0 -0.005832552 0.9425411 0.3340393 0.1370782 0.006721138 -0.3340004 0.9425491 0 0 0 0 1 0.9999553 0.008521974 -0.0040946 0 -0.006419837 0.9299426 0.3676486 0.1370782 0.006940841 -0.3676058 0.9299558 0 0 0 0 1 0.9999517 0.009025216 -0.003889918 0 -0.006798326 0.9210485 0.3893887 0.1370782 0.007097125 -0.3893435 0.9210654 0 0 0 0 1 0.9999493 0.009342491 -0.003752589 0 -0.007037818 0.9151584 0.4030331 0.1370782 0.007199585 -0.4029862 0.9151778 0 0 0 0 1 0.9999343 0.01108962 -0.002892553 0 -0.008353888 0.8780614 0.4784753 0.1370782 0.007845997 -0.4784197 0.8780964 0 0 0 0 1 0.9999204 0.01243722 -0.002098798 0 -0.009368479 0.8437641 0.5366324 0.1370782 0.008445143 -0.5365701 0.8438137 0 0 0 0 1 0.9999234 0.01217007 -0.002267003 0 -0.009167194 0.8510078 0.5250728 0.1370782 0.008319437 -0.5250119 0.8510543 0 0 0 0 1 0.9999306 0.01147449 -0.002677798 0 -0.008643805 0.868796 0.4950947 0.1370782 0.008007466 -0.4950372 0.868835 0 0 0 0 1 0.9999319 0.01133799 -0.002756416 0 -0.008540689 0.8721545 0.489156 0.1370782 0.007950067 -0.4890992 0.8721921 0 0 0 0 1 0.9999305 0.01147729 -0.002677917 0 -0.008645296 0.8687407 0.4951918 0.1370782 0.00800991 -0.4951342 0.8687797 0 0 0 0 1 0.999936 0.01091843 -0.002985894 0 -0.008224368 0.8820418 0.4710996 0.1370782 0.007777392 -0.4710448 0.8820751 0 0 0 0 1 0.9999461 0.009744286 -0.003570437 0 -0.007340073 0.9072908 0.4204398 0.1370782 0.007336318 -0.420391 0.9073135 0 0 0 0 1 0.9999482 0.00949335 -0.003684639 0 -0.007151603 0.9122537 0.4095632 0.1370782 0.007249414 -0.4095155 0.9122744 0 0 0 0 1 0.9999465 0.00970751 -0.003588259 0 -0.007312417 0.9080449 0.4188089 0.1370782 0.007323861 -0.4187603 0.9080674 0 0 0 0 1 0.9999476 0.009568989 -0.003650426 0 -0.007208645 0.9107816 0.4128256 0.1370782 0.007275104 -0.4127776 0.9108029 0 0 0 0 1 0.9999463 0.009721457 -0.003581166 0 -0.007322907 0.9077498 0.4194482 0.1370782 0.00732845 -0.4193994 0.9077723 0 0 0 0 1 0.9999452 0.009860575 -0.003516376 0 -0.00742793 0.9049633 0.4254247 0.1370782 0.007377147 -0.4253752 0.9049871 0 0 0 0 1 0.9999426 0.01017123 -0.003368318 0 -0.007661521 0.8985363 0.4388323 0.1370782 0.007490038 -0.4387813 0.8985627 0 0 0 0 1 0.9999395 0.01053476 -0.003185987 0 -0.007935702 0.8907027 0.4545169 0.1370782 0.007625997 -0.454464 0.8907325 0 0 0 0 1 0.9999388 0.01060748 -0.003148376 0 -0.007990419 0.8890799 0.4576821 0.1370782 0.007654011 -0.457629 0.8891104 0 0 0 0 1 0.9999381 0.01067858 -0.0031116 0 -0.008043825 0.8874846 0.4607673 0.1370782 0.007681846 -0.4607137 0.8875157 0 0 0 0 1 0.9999348 0.0110408 -0.002918899 0 -0.008317172 0.8792057 0.4763697 0.1370782 0.007825851 -0.4763144 0.8792403 0 0 0 0 1 0.9999356 0.01096016 -0.002963304 0 -0.008255839 0.8810735 0.4729074 0.1370782 0.007794022 -0.4728524 0.8811073 0 0 0 0 1 0.9999411 0.01034986 -0.003279447 0 -0.007796227 0.8947215 0.4465566 0.1370782 0.007555961 -0.4465047 0.8947494 0 0 0 0 1 0.9999498 0.009279072 -0.003780186 0 -0.006989955 0.9163513 0.4003144 0.1370782 0.007178485 -0.4002679 0.9163702 0 0 0 0 1 0.9999509 0.009141027 -0.003839731 0 -0.006885707 0.9189104 0.3944063 0.1370782 0.007133662 -0.3943604 0.9189283 0 0 0 0 1 0.9999485 0.009453952 -0.003703236 0 -0.007121205 0.9129959 0.4079065 0.1370782 0.007237374 -0.407859 0.9130163 0 0 0 0 1 0.9999494 0.009334623 -0.00375539 0 -0.007031857 0.9152919 0.4027298 0.1370782 0.007196605 -0.402683 0.9153113 0 0 0 0 1 0.9999502 0.009227812 -0.00380218 0 -0.006951451 0.9173141 0.3981038 0.1370782 0.007161438 -0.3980575 0.9173326 0 0 0 0 1 0.999946 0.00976324 -0.003562092 0 -0.007354676 0.9069355 0.4212054 0.1370782 0.007342934 -0.4211564 0.9069584 0 0 0 0 1 0.9999444 0.009959936 -0.003469467 0 -0.007502853 0.9029427 0.4296955 0.1370782 0.007412493 -0.4296455 0.9029672 0 0 0 0 1 0.9999481 0.009507954 -0.003678441 0 -0.007162451 0.911969 0.4101969 0.1370782 0.007254779 -0.4101492 0.9119897 0 0 0 0 1 0.9999525 0.008923947 -0.003932237 0 -0.006722152 0.9228875 0.3850111 0.1370782 0.007064878 -0.3849663 0.9229037 0 0 0 0 1 0.999953 0.008843243 -0.003964841 0 -0.006661951 0.9243463 0.3814964 0.1370782 0.007038533 -0.381452 0.924362 0 0 0 0 1 0.9999481 0.009511113 -0.003676712 0 -0.007164955 0.9119096 0.4103285 0.1370782 0.007255554 -0.4102808 0.9119304 0 0 0 0 1 0.9999436 0.01005011 -0.003425896 0 -0.007570564 0.9010571 0.4336345 0.1370782 0.007444977 -0.433584 0.9010825 0 0 0 0 1 0.9999387 0.01061868 -0.003142952 0 -0.007999002 0.8888506 0.4581274 0.1370782 0.007658362 -0.4580742 0.888881 0 0 0 0 1 0.9999347 0.01105207 -0.002912938 0 -0.008325576 0.8789429 0.4768546 0.1370782 0.0078305 -0.4767992 0.8789774 0 0 0 0 1 0.9999355 0.01096987 -0.002957284 0 -0.008263766 0.8808628 0.4732995 0.1370782 0.007797002 -0.4732444 0.8808967 0 0 0 0 1 0.9999383 0.01066261 -0.003119111 0 -0.008032143 0.8878431 0.4600763 0.1370782 0.007674872 -0.4600229 0.887874 0 0 0 0 1 0.9999414 0.01031768 -0.003296196 0 -0.007772088 0.8954359 0.4451226 0.1370782 0.007544159 -0.4450708 0.8954637 0 0 0 0 1 0.9999438 0.01002299 -0.00343877 0 -0.007550418 0.9016337 0.4324348 0.1370782 0.007434785 -0.4323846 0.9016587 0 0 0 0 1 0.9999451 0.009881675 -0.003506779 0 -0.007443785 0.9045431 0.4263173 0.1370782 0.007384777 -0.4262678 0.904567 0 0 0 0 1 0.9999463 0.009719789 -0.003581941 0 -0.007321894 0.9077965 0.4193471 0.1370782 0.007327616 -0.4192983 0.907819 0 0 0 0 1 0.9999479 0.009530723 -0.003669559 0 -0.00717926 0.911539 0.4111511 0.1370782 0.007263541 -0.4111033 0.9115599 0 0 0 0 1 0.9999511 0.009101808 -0.003857731 0 -0.006856083 0.9196556 0.3926661 0.1370782 0.007121741 -0.3926205 0.9196731 0 0 0 0 1 0.9999482 0.0094949 -0.003683865 0 -0.007152497 0.9122043 0.4096733 0.1370782 0.007250308 -0.4096257 0.912225 0 0 0 0 1 0.9999432 0.0100972 -0.003403663 0 -0.007606208 0.9000965 0.4356244 0.1370782 0.007462203 -0.4355738 0.9001222 0 0 0 0 1 0.9999439 0.01001173 -0.003444194 0 -0.007541477 0.9018407 0.432003 0.1370782 0.007431268 -0.4319527 0.9018657 0 0 0 0 1 0.9999444 0.009961903 -0.003467857 0 -0.007504403 0.9028902 0.4298059 0.1370782 0.007412731 -0.429756 0.9029147 0 0 0 0 1 0.9999432 0.01009827 -0.003402471 0 -0.007607221 0.9000739 0.435671 0.1370782 0.007462024 -0.4356204 0.9000996 0 0 0 0 1 0.9999427 0.01016432 -0.003370821 0 -0.007656633 0.8986796 0.438539 0.1370782 0.00748676 -0.438488 0.8987059 0 0 0 0 1 0.9999438 0.01003342 -0.00343436 0 -0.007558107 0.901419 0.432882 0.1370782 0.007439076 -0.4328317 0.9014441 0 0 0 0 1 0.9999434 0.01008707 -0.003407418 0 -0.007598578 0.9002825 0.4352399 0.1370782 0.007457911 -0.4351893 0.9003082 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftToeBase_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftToeBase_pose_matrix-interpolation"> + <Name_array id="_6_15_t_LeftToeBase_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_LeftToeBase_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_LeftToeBase_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_LeftToeBase_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_LeftToeBase_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_LeftToeBase_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_LeftToeBase_pose_matrix-sampler" target="LeftToeBase/transform"/> + </animation> + <animation id="_6_15_t_RHipJoint_pose_matrix"> + <source id="_6_15_t_RHipJoint_pose_matrix-input"> + <float_array id="_6_15_t_RHipJoint_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_RHipJoint_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RHipJoint_pose_matrix-output"> + <float_array id="_6_15_t_RHipJoint_pose_matrix-output-array" count="2224">-0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1 -0.3918986 -0.6153328 0.6839453 0 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_RHipJoint_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RHipJoint_pose_matrix-interpolation"> + <Name_array id="_6_15_t_RHipJoint_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_RHipJoint_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_RHipJoint_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_RHipJoint_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_RHipJoint_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_RHipJoint_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_RHipJoint_pose_matrix-sampler" target="RHipJoint/transform"/> + </animation> + <animation id="_6_15_t_RightUpLeg_pose_matrix"> + <source id="_6_15_t_RightUpLeg_pose_matrix-input"> + <float_array id="_6_15_t_RightUpLeg_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_RightUpLeg_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightUpLeg_pose_matrix-output"> + <float_array id="_6_15_t_RightUpLeg_pose_matrix-output-array" count="2224">0.3674594 -0.8011764 0.4723241 0 0.7413853 0.5589653 0.3713564 0.1504315 -0.5615347 0.2137157 0.7993775 0 0 0 0 1 0.3757946 -0.7909417 0.4828973 0 0.7259688 0.5751401 0.3770717 0.1504315 -0.5759752 0.2088667 0.7903335 0 0 0 0 1 0.3812143 -0.7817882 0.4934399 0 0.7180153 0.5865889 0.3746563 0.1504315 -0.5823482 0.211473 0.7849519 0 0 0 0 1 0.3833086 -0.7739385 0.5040772 0 0.7126783 0.594989 0.3715881 0.1504315 -0.5875067 0.2168119 0.7796335 0 0 0 0 1 0.3841378 -0.7652831 0.5165076 0 0.7032305 0.6050094 0.3734038 0.1504315 -0.5982515 0.2197853 0.7705773 0 0 0 0 1 0.384285 -0.7544992 0.5320302 0 0.6943712 0.6159917 0.3720253 0.1504315 -0.608419 0.2264626 0.7606188 0 0 0 0 1 0.3796249 -0.7447039 0.5489091 0 0.6914746 0.6225739 0.3664215 0.1504315 -0.6146118 0.2404538 0.7512882 0 0 0 0 1 0.3811566 -0.7304221 0.566748 0 0.6860588 0.634387 0.3561974 0.1504315 -0.6197119 0.2530553 0.7429131 0 0 0 0 1 0.388266 -0.7129984 0.5838518 0 0.6807839 0.6489285 0.3397427 0.1504315 -0.621114 0.2655663 0.7373545 0 0 0 0 1 0.3933765 -0.6963964 0.6002392 0 0.6770283 0.6611257 0.3233349 0.1504315 -0.6220027 0.2791865 0.7315512 0 0 0 0 1 0.403227 -0.6757378 0.6170791 0 0.665461 0.6794047 0.3091458 0.1504315 -0.6281479 0.285986 0.7236312 0 0 0 0 1 0.4116695 -0.6533023 0.6353932 0 0.6555194 0.6966282 0.2915537 0.1504315 -0.6331054 0.2964887 0.7150328 0 0 0 0 1 0.4170625 -0.6325129 0.6526763 0 0.6493709 0.7098079 0.272929 0.1504315 -0.6359059 0.3100004 0.7067695 0 0 0 0 1 0.4202829 -0.6120101 0.6699299 0 0.6431713 0.721722 0.2558284 0.1504315 -0.6400725 0.3233593 0.6969546 0 0 0 0 1 0.4245171 -0.5886925 0.6879146 0 0.6279693 0.7387707 0.2446886 0.1504315 -0.6522574 0.3281146 0.6833015 0 0 0 0 1 0.4270641 -0.5644667 0.7063948 0 0.6101873 0.7564311 0.2355494 0.1504315 -0.6672987 0.3304383 0.6674749 0 0 0 0 1 0.4261298 -0.5434393 0.7232477 0 0.6008052 0.7677037 0.2228547 0.1504315 -0.6763479 0.3395658 0.6536424 0 0 0 0 1 0.4226148 -0.5254947 0.7384119 0 0.5957563 0.7750608 0.2106069 0.1504315 -0.6829869 0.3509078 0.6406188 0 0 0 0 1 0.4158849 -0.5076462 0.7545431 0 0.5945472 0.7796029 0.1968066 0.1504315 -0.688152 0.3667625 0.6260446 0 0 0 0 1 0.4107975 -0.4858857 0.7714666 0 0.5885951 0.7875389 0.1825878 0.1504315 -0.6962766 0.3790746 0.6095089 0 0 0 0 1 0.4087136 -0.4628573 0.7865853 0 0.5792663 0.7975685 0.1683304 0.1504315 -0.7052685 0.3868433 0.5940946 0 0 0 0 1 0.4019516 -0.4438699 0.8008836 0 0.5752132 0.8029297 0.1563127 0.1504315 -0.7124357 0.3978486 0.5780586 0 0 0 0 1 0.3931345 -0.4276416 0.8139829 0 0.5759603 0.8045987 0.144536 0.1504315 -0.7167391 0.4119997 0.5626199 0 0 0 0 1 0.3847851 -0.4126291 0.8256378 0 0.5779767 0.8051388 0.1330203 0.1504315 -0.7196409 0.4260151 0.5482954 0 0 0 0 1 0.3839996 -0.3908708 0.8365193 0 0.566513 0.8151463 0.1208291 0.1504315 -0.729114 0.4275006 0.5344491 0 0 0 0 1 0.3854182 -0.3684307 0.8459975 0 0.5503419 0.8276966 0.1097368 0.1504315 -0.7406596 0.4232931 0.5217722 0 0 0 0 1 0.3825292 -0.3515998 0.8544291 0 0.5412632 0.8347441 0.1011748 0.1504315 -0.7488026 0.4237686 0.509622 0 0 0 0 1 0.3730819 -0.3360819 0.8647884 0 0.545208 0.83359 0.08874672 0.1504315 -0.750705 0.4383797 0.4942318 0 0 0 0 1 0.3651883 -0.3147808 0.8760996 0 0.546213 0.834532 0.07216507 0.1504315 -0.7538493 0.4521831 0.4766986 0 0 0 0 1 0.3600277 -0.2943196 0.8853 0 0.5414852 0.838665 0.05860805 0.1504315 -0.7597195 0.4582762 0.4613122 0 0 0 0 1 0.3548198 -0.2788521 0.8923814 0 0.5435217 0.838145 0.04579436 0.1504315 -0.7607148 0.4687798 0.4489525 0 0 0 0 1 0.3484101 -0.2674911 0.8983646 0 0.5478533 0.8357828 0.03638458 0.1504315 -0.7605702 0.4794952 0.4377409 0 0 0 0 1 0.3460739 -0.2472741 0.9050351 0 0.5389152 0.8420186 0.02398222 0.1504315 -0.7679864 0.4794374 0.4246604 0 0 0 0 1 0.3469018 -0.2264599 0.9101512 0 0.5327943 0.8462118 0.007477462 0.1504315 -0.7718738 0.4823292 0.414209 0 0 0 0 1 0.3449246 -0.214744 0.9137353 0 0.5304154 0.8477373 -9.92566e-4 0.1504315 -0.7743943 0.4850015 0.4063089 0 0 0 0 1 0.3388876 -0.2061682 0.9179597 0 0.5300845 0.8479285 -0.005254387 0.1504315 -0.7772808 0.4883767 0.396639 0 0 0 0 1 0.3375555 -0.1919136 0.9215344 0 0.531031 0.8471593 -0.0180906 0.1504315 -0.7772144 0.4954698 0.3878754 0 0 0 0 1 0.3386797 -0.1745399 0.9245713 0 0.5336171 0.8449614 -0.03595817 0.1504315 -0.7749508 0.5055453 0.3793087 0 0 0 0 1 0.3396241 -0.1648423 0.9260035 0 0.5378512 0.8417046 -0.04742842 0.1504315 -0.7716031 0.5141598 0.3745237 0 0 0 0 1 0.3416073 -0.1588431 0.9263225 0 0.5368021 0.8420054 -0.05357629 0.1504315 -0.7714583 0.5155538 0.3729025 0 0 0 0 1 0.3441746 -0.1489557 0.9270146 0 0.5317537 0.8446481 -0.06170457 0.1504315 -0.7738099 0.5141806 0.3699141 0 0 0 0 1 0.3483129 -0.1400517 0.926857 0 0.5305111 0.844637 -0.07173836 0.1504315 -0.7728104 0.5166952 0.3684968 0 0 0 0 1 0.3535049 -0.1353471 0.9255893 0 0.5344862 0.8412757 -0.08111524 0.1504315 -0.7676969 0.5233892 0.3697361 0 0 0 0 1 0.3568679 -0.1317301 0.9248203 0 0.5365709 0.8393064 -0.0875014 0.1504315 -0.7646808 0.527458 0.370204 0 0 0 0 1 0.3587986 -0.1289646 0.9244629 0 0.5374954 0.8382692 -0.09167015 0.1504315 -0.7631265 0.5297856 0.3700876 0 0 0 0 1 0.3632369 -0.127181 0.9229757 0 0.5380501 0.8373866 -0.09636241 0.1504315 -0.7606319 0.5316094 0.3725994 0 0 0 0 1 0.3684552 -0.1310396 0.9203638 0 0.5420768 0.8345728 -0.09818851 0.1504315 -0.7552438 0.5350858 0.3785362 0 0 0 0 1 0.3745816 -0.1360484 0.9171584 0 0.5499469 0.8289923 -0.1016368 0.1504315 -0.7464897 0.5424596 0.3853447 0 0 0 0 1 0.3808357 -0.1369997 0.9144372 0 0.5557345 0.8243218 -0.1079481 0.1504315 -0.7390014 0.5492947 0.3900666 0 0 0 0 1 0.3876495 -0.1327412 0.9121994 0 0.5486172 0.8284586 -0.1125858 0.1504315 -0.7407745 0.5440919 0.3939756 0 0 0 0 1 0.3925941 -0.1342516 0.9098607 0 0.5480152 0.8286366 -0.1141954 0.1504315 -0.7386128 0.5434499 0.3988897 0 0 0 0 1 0.3976929 -0.1359804 0.9073863 0 0.5492959 0.8274319 -0.1167492 0.1504315 -0.7349246 0.5448537 0.4037572 0 0 0 0 1 0.403546 -0.1421542 0.903849 0 0.5505132 0.8267616 -0.1157604 0.1504315 -0.7308117 0.5442953 0.411894 0 0 0 0 1 0.4146971 -0.150159 0.8974847 0 0.5484123 0.8282873 -0.1148211 0.1504315 -0.7261337 0.5398075 0.4258373 0 0 0 0 1 0.4258363 -0.1588489 0.8907471 0 0.5509642 0.8264247 -0.1160195 0.1504315 -0.7177059 0.5401751 0.4394418 0 0 0 0 1 0.4369418 -0.1675191 0.883753 0 0.5574474 0.82151 -0.1198904 0.1504315 -0.7059279 0.5450308 0.4523351 0 0 0 0 1 0.4482411 -0.1743187 0.8767514 0 0.5576035 0.8211203 -0.1218181 0.1504315 -0.6986831 0.5434834 0.4652606 0 0 0 0 1 0.4534703 -0.1787242 0.873168 0 0.5555815 0.8227375 -0.1201334 0.1504315 -0.6969174 0.5395928 0.4723829 0 0 0 0 1 0.4522727 -0.1817812 0.8731581 0 0.5563471 0.8226861 -0.1168996 0.1504315 -0.6970847 0.5386493 0.473212 0 0 0 0 1 0.4570958 -0.1835531 0.8702711 0 0.5558133 0.8228346 -0.1183841 0.1504315 -0.6943594 0.5378209 0.4781354 0 0 0 0 1 0.4628392 -0.1860857 0.8666903 0 0.5628463 0.8170315 -0.1251539 0.1504315 -0.6848238 0.5457394 0.4828917 0 0 0 0 1 0.4607408 -0.1855918 0.8679134 0 0.5660155 0.814667 -0.1262695 0.1504315 -0.6836259 0.5494298 0.4803981 0 0 0 0 1 0.4492635 -0.1867275 0.8736677 0 0.5672636 0.8151124 -0.1174898 0.1504315 -0.6901986 0.5483837 0.4721239 0 0 0 0 1 0.4410603 -0.1848064 0.878244 0 0.5647602 0.8176791 -0.1115647 0.1504315 -0.6975038 0.5452039 0.465017 0 0 0 0 1 0.4333232 -0.1813257 0.8828092 0 0.5634017 0.8190522 -0.1083132 0.1504315 -0.7034268 0.5443108 0.4570735 0 0 0 0 1 0.4280427 -0.1819356 0.8852565 0 0.5673065 0.8165934 -0.1064823 0.1504315 -0.7035216 0.5477905 0.45275 0 0 0 0 1 0.4281809 -0.1810296 0.8853754 0 0.5687518 0.8153418 -0.1083469 0.1504315 -0.7022695 0.5499508 0.4520746 0 0 0 0 1 0.4296537 -0.1850305 0.8838334 0 0.574614 0.811061 -0.1095389 0.1504315 -0.6965746 0.5549266 0.4547964 0 0 0 0 1 0.4278106 -0.1940622 0.88279 0 0.5809872 0.8072277 -0.1041019 0.1504315 -0.6924102 0.5574254 0.4580882 0 0 0 0 1 0.420533 -0.2075114 0.8832277 0 0.5911194 0.8011794 -0.09321665 0.1504315 -0.6882802 0.5612936 0.4595864 0 0 0 0 1 0.4194695 -0.2167642 0.8815093 0 0.5949802 0.7990574 -0.08663451 0.1504315 -0.6855973 0.5608211 0.4641507 0 0 0 0 1 0.4211437 -0.2257322 0.878455 0 0.5965455 0.798501 -0.08080571 0.1504315 -0.6832066 0.5580691 0.4709431 0 0 0 0 1 0.4140351 -0.2386239 0.8784269 0 0.6092644 0.7896305 -0.07266634 0.1504315 -0.6762926 0.5652804 0.4723198 0 0 0 0 1 0.4022472 -0.2454914 0.8820042 0 0.6190531 0.7826981 -0.06447458 0.1504315 -0.674515 0.571942 0.4668102 0 0 0 0 1 0.3936008 -0.2502952 0.8845512 0 0.6203911 0.7823847 -0.05467128 0.1504315 -0.6783752 0.5702863 0.4632281 0 0 0 0 1 0.3869818 -0.2579423 0.8852745 0 0.623645 0.780398 -0.04523092 0.1504315 -0.6791994 0.5696005 0.4628642 0 0 0 0 1 0.3825455 -0.2675023 0.8843651 0 0.6288557 0.7766361 -0.03710466 0.1504315 -0.6769042 0.5703322 0.465319 0 0 0 0 1 0.3813546 -0.279206 0.8812564 0 0.6332699 0.7733871 -0.02901113 0.1504315 -0.6734521 0.5691366 0.4717475 0 0 0 0 1 0.3839848 -0.2903855 0.8764885 0 0.6334109 0.7735245 -0.02122116 0.1504315 -0.6718229 0.563326 0.4809549 0 0 0 0 1 0.3842936 -0.303689 0.8718323 0 0.6385213 0.7694872 -0.0134142 0.1504315 -0.66679 0.5618384 0.4896209 0 0 0 0 1 0.3810167 -0.3223571 0.866552 0 0.6508475 0.7591992 -0.003751277 0.1504315 -0.6566762 0.5654224 0.4990728 0 0 0 0 1 0.3777483 -0.339451 0.8614403 0 0.6556307 0.7550153 0.01001477 0.1504315 -0.6538 0.5610036 0.5077602 0 0 0 0 1 0.3753266 -0.3547632 0.8563137 0 0.6592051 0.7516278 0.0224595 0.1504315 -0.6515967 0.5560565 0.5159676 0 0 0 0 1 0.3709002 -0.373793 0.8501247 0 0.6681459 0.7431938 0.03527128 0.1504315 -0.6449914 0.5549251 0.5253989 0 0 0 0 1 0.3620577 -0.395131 0.8442665 0 0.6818363 0.7298497 0.04918116 0.1504315 -0.6356205 0.557845 0.5336623 0 0 0 0 1 0.3573755 -0.4119696 0.8381909 0 0.6893118 0.7218994 0.06091368 0.1504315 -0.6301841 0.5560057 0.5419645 0 0 0 0 1 0.355835 -0.4286039 0.8304699 0 0.6904954 0.7193943 0.07541829 0.1504315 -0.6297599 0.5465991 0.5519346 0 0 0 0 1 0.3529866 -0.4483323 0.8212179 0 0.698307 0.7104077 0.08768141 0.1504315 -0.6227098 0.5425117 0.563838 0 0 0 0 1 0.3487275 -0.4641663 0.8142106 0 0.7092039 0.6986376 0.09452712 0.1504315 -0.6127143 0.544477 0.5728226 0 0 0 0 1 0.3524917 -0.471278 0.8084842 0 0.7067964 0.7003046 0.1000614 0.1504315 -0.6133419 0.5361627 0.5799492 0 0 0 0 1 0.3525115 -0.4830473 0.8014993 0 0.7068104 0.6987571 0.1102605 0.1504315 -0.6133143 0.5276398 0.5877427 0 0 0 0 1 0.344134 -0.5010932 0.7940261 0 0.7180382 0.6853504 0.1213094 0.1504315 -0.6049734 0.5283943 0.5956563 0 0 0 0 1 0.3416557 -0.5133399 0.7872443 0 0.7235149 0.6782828 0.1282911 0.1504315 -0.5998312 0.5257515 0.6031482 0 0 0 0 1 0.3428347 -0.5241569 0.7795665 0 0.721679 0.6782051 0.1386271 0.1504315 -0.6013683 0.5150704 0.6107851 0 0 0 0 1 0.3438013 -0.5359522 0.7710745 0 0.7262109 0.672325 0.1435161 0.1504315 -0.5953304 0.5106216 0.6203604 0 0 0 0 1 0.3437729 -0.5478434 0.7626847 0 0.7347665 0.6626805 0.1448202 0.1504315 -0.584755 0.5106098 0.6303483 0 0 0 0 1 0.3427868 -0.5576353 0.7560029 0 0.7373408 0.6583618 0.1512888 0.1504315 -0.5820872 0.5055719 0.6368448 0 0 0 0 1 0.3385549 -0.5657569 0.7518643 0 0.7378483 0.655486 0.1609908 0.1504315 -0.583918 0.5002574 0.6393607 0 0 0 0 1 0.3328478 -0.5743961 0.7478513 0 0.738372 0.6520435 0.1721807 0.1504315 -0.5865314 0.4948824 0.6411492 0 0 0 0 1 0.3330004 -0.5826008 0.7414089 0 0.7409824 0.6479538 0.1763545 0.1504315 -0.583143 0.4906447 0.6474657 0 0 0 0 1 0.3349608 -0.5894757 0.7350646 0 0.7433896 0.6446741 0.1782335 0.1504315 -0.5789413 0.486738 0.6541505 0 0 0 0 1 0.3332487 -0.5949335 0.7314367 0 0.7433477 0.6430059 0.1843302 0.1504315 -0.5799823 0.4822838 0.6565232 0 0 0 0 1 0.326998 -0.6007306 0.7295171 0 0.7476055 0.6366401 0.1891437 0.1504315 -0.5780643 0.4835412 0.6572895 0 0 0 0 1 0.323004 -0.6059632 0.7269642 0 0.7513738 0.6312309 0.1923145 0.1504315 -0.5754177 0.4841035 0.6591948 0 0 0 0 1 0.325316 -0.6098471 0.7226729 0 0.7504115 0.6315152 0.1951183 0.1504315 -0.5753711 0.4788268 0.6630781 0 0 0 0 1 0.3280422 -0.6118174 0.7197694 0 0.7491711 0.6326215 0.1962977 0.1504315 -0.5754399 0.4748363 0.6658824 0 0 0 0 1 0.3248947 -0.6159721 0.7176503 0 0.7514414 0.6288869 0.1995921 0.1504315 -0.574264 0.4744256 0.6671889 0 0 0 0 1 0.3219749 -0.6269449 0.709417 0 0.7576576 0.6199483 0.2040077 0.1504315 -0.5677034 0.4718096 0.6746171 0 0 0 0 1 0.3195364 -0.6364358 0.70203 0 0.7630355 0.6121068 0.2076106 0.1504315 -0.5618481 0.4693346 0.6812133 0 0 0 0 1 0.3132016 -0.6431191 0.6987866 0 0.7674973 0.6047732 0.2125965 0.1504315 -0.5593322 0.4697311 0.6830079 0 0 0 0 1 0.3122435 -0.6483628 0.6943557 0 0.7688896 0.6017459 0.2161265 0.1504315 -0.557954 0.4663985 0.6864106 0 0 0 0 1 0.3175467 -0.6517949 0.6887145 0 0.7631096 0.6067911 0.2224147 0.1504315 -0.5628746 0.4549373 0.6900753 0 0 0 0 1 0.31579 -0.6586167 0.6830086 0 0.7653199 0.6023102 0.2269532 0.1504315 -0.5608583 0.4510504 0.6942559 0 0 0 0 1 0.3186258 -0.6672388 0.6732534 0 0.770973 0.5956326 0.2254383 0.1504315 -0.5514327 0.4472296 0.7042068 0 0 0 0 1 0.3199188 -0.6768781 0.662939 0 0.7721368 0.5917553 0.2315823 0.1504315 -0.5490505 0.437792 0.7119561 0 0 0 0 1 0.3178551 -0.6882234 0.6521632 0 0.7741717 0.5854892 0.2405423 0.1504315 -0.5473813 0.4284285 0.7189037 0 0 0 0 1 0.3179508 -0.7000371 0.639418 0 0.7754578 0.5800412 0.2494342 0.1504315 -0.545502 0.4165338 0.7272737 0 0 0 0 1 0.3172212 -0.7124625 0.6259137 0 0.7785101 0.5725367 0.2571453 0.1504315 -0.5415649 0.4057081 0.7362799 0 0 0 0 1 0.3171076 -0.7210234 0.616091 0 0.7789246 0.5685986 0.2645224 0.1504315 -0.5410352 0.3960063 0.7419297 0 0 0 0 1 0.3179178 -0.7272264 0.608334 0 0.7768624 0.5676209 0.2725645 0.1504315 -0.5435191 0.3859386 0.7454114 0 0 0 0 1 0.316997 -0.7326672 0.6022556 0 0.7761892 0.5653191 0.2791855 0.1504315 -0.5450166 0.3789632 0.7478927 0 0 0 0 1 0.3169268 -0.7387534 0.5948116 0 0.7807197 0.5593031 0.2786696 0.1504315 -0.5385481 0.3760632 0.7540174 0 0 0 0 1 0.3156294 -0.7465862 0.5856512 0 0.7834151 0.5532758 0.283102 0.1504315 -0.5353866 0.3694526 0.7595168 0 0 0 0 1 0.3133429 -0.7533221 0.5782059 0 0.7774267 0.5531548 0.2993783 0.1504315 -0.5453657 0.3557046 0.7589797 0 0 0 0 1 0.3103473 -0.7636833 0.5661028 0 0.774703 0.5483009 0.3149625 0.1504315 -0.5509263 0.3408136 0.7617914 0 0 0 0 1 0.3115282 -0.7752308 0.5495156 0 0.7765102 0.5410102 0.3230168 0.1504315 -0.5477061 0.3260756 0.7705144 0 0 0 0 1 0.3136541 -0.7837954 0.5359908 0 0.7765181 0.536598 0.3302758 0.1504315 -0.5464801 0.3126142 0.7769373 0 0 0 0 1 0.3118811 -0.7909054 0.5264969 0 0.7748903 0.5323924 0.3407395 0.1504315 -0.5497956 0.301707 0.7789078 0 0 0 0 1 0.3114088 -0.7952256 0.5202316 0 0.7736345 0.5300648 0.3471613 0.1504315 -0.5518279 0.2943599 0.7802807 0 0 0 0 1 0.314338 -0.7981464 0.5139593 0 0.7746416 0.5286126 0.3471299 0.1504315 -0.5487458 0.289018 0.7844402 0 0 0 0 1 0.3206841 -0.8023794 0.5033379 0 0.7758598 0.5273447 0.3463367 0.1504315 -0.5433259 0.2794548 0.791645 0 0 0 0 1 0.3249248 -0.8055294 0.4955263 0 0.7760521 0.5265573 0.3471029 0.1504315 -0.5405246 0.2717718 0.7962242 0 0 0 0 1 0.3263528 -0.8085165 0.4896888 0 0.7782065 0.5238789 0.3463314 0.1504315 -0.5365523 0.2680527 0.8001619 0 0 0 0 1 0.3319709 -0.8090348 0.485034 0 0.7739082 0.5275816 0.3503193 0.1504315 -0.5393155 0.2590759 0.8012604 0 0 0 0 1 0.337499 -0.809461 0.4804865 0 0.7649073 0.533333 0.3612102 0.1504315 -0.5486449 0.2456195 0.7991619 0 0 0 0 1 0.3391613 -0.812304 0.4744807 0 0.7645001 0.5319117 0.3641561 0.1504315 -0.5481872 0.2392327 0.8014102 0 0 0 0 1 0.3393108 -0.816241 0.4675669 0 0.7668923 0.5278771 0.3649958 0.1504315 -0.5447424 0.2347263 0.8050833 0 0 0 0 1 0.3422389 -0.8175681 0.4630929 0 0.7625666 0.5296254 0.3714691 0.1504315 -0.548967 0.2260079 0.8047083 0 0 0 0 1 0.3489234 -0.8165304 0.4599248 0 0.7544115 0.5358899 0.3790584 0.1504315 -0.5559816 0.2147101 0.8029844 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_RightUpLeg_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightUpLeg_pose_matrix-interpolation"> + <Name_array id="_6_15_t_RightUpLeg_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_RightUpLeg_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_RightUpLeg_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_RightUpLeg_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_RightUpLeg_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_RightUpLeg_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_RightUpLeg_pose_matrix-sampler" target="RightUpLeg/transform"/> + </animation> + <animation id="_6_15_t_RightLeg_pose_matrix"> + <source id="_6_15_t_RightLeg_pose_matrix-input"> + <float_array id="_6_15_t_RightLeg_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_RightLeg_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightLeg_pose_matrix-output"> + <float_array id="_6_15_t_RightLeg_pose_matrix-output-array" count="2224">0.9999989 -0.001318395 -5.96883e-4 0 0.0014472 0.9108132 0.4128161 0.4417033 -6.08769e-7 -0.4128165 0.9108142 0 0 0 0 1 0.9999989 -0.001296103 -6.43888e-4 0 0.0014472 0.8956434 0.4447704 0.4417033 2.15239e-7 -0.4447709 0.8956444 0 0 0 0 1 0.9999989 -0.001271128 -6.92274e-4 0 0.001447439 0.8780315 0.4786005 0.4417033 -5.4835e-7 -0.478601 0.8780325 0 0 0 0 1 0.9999989 -0.001243233 -7.42501e-4 0 0.001448035 0.8580464 0.51357 0.4417033 -1.39149e-6 -0.5135706 0.8580474 0 0 0 0 1 0.9999989 -0.001210093 -7.93594e-4 0 0.001447081 0.8360841 0.5485992 0.4417033 -3.49942e-7 -0.5485998 0.836085 0 0 0 0 1 0.9999989 -0.001176476 -8.44364e-4 0 0.001448154 0.8124924 0.5829699 0.4417033 1.60543e-7 -0.5829704 0.8124934 0 0 0 0 1 0.9999989 -0.001139163 -8.9212e-4 0 0.001446902 0.787107 0.6168147 0.4417033 -4.90921e-7 -0.6168154 0.7871079 0 0 0 0 1 0.9999989 -0.001099944 -9.41616e-4 0 0.001447916 0.7594268 0.6505909 0.4417033 -5.39857e-7 -0.6505916 0.7594278 0 0 0 0 1 0.9999989 -0.001055777 -9.90685e-4 0 0.001447796 0.7288177 0.6847062 0.4417033 -9.08903e-7 -0.684707 0.7288185 0 0 0 0 1 0.9999989 -0.001007318 -0.001040637 0 0.001448333 0.6953794 0.7186412 0.4417033 -2.8153e-7 -0.718642 0.6953802 0 0 0 0 1 0.9999989 -9.54755e-4 -0.0010885 0 0.001447856 0.6590573 0.7520912 0.4417033 -6.75113e-7 -0.7520921 0.659058 0 0 0 0 1 0.9999989 -8.98164e-4 -0.001134693 0 0.001447141 0.6205115 0.7841959 0.4417033 -2.22987e-7 -0.7841968 0.6205122 0 0 0 0 1 0.9999989 -8.42093e-4 -0.00117731 0 0.001447498 0.5813993 0.813617 0.4417033 -6.33346e-7 -0.813618 0.5814 0 0 0 0 1 0.9999989 -7.86577e-4 -0.001215338 0 0.001447677 0.5430831 0.8396776 0.4417033 -4.24094e-7 -0.8396786 0.5430837 0 0 0 0 1 0.9999989 -7.34539e-4 -0.001247107 0 0.001447379 0.5064574 0.8622636 0.4417033 -1.73757e-6 -0.8622646 0.5064579 0 0 0 0 1 0.9999989 -6.85508e-4 -0.00127542 0 0.001447916 0.4725003 0.8813292 0.4417033 -1.51923e-6 -0.8813302 0.4725009 0 0 0 0 1 0.9999989 -6.39767e-4 -0.001299202 0 0.001448154 0.4409577 0.8975266 0.4417033 -1.31134e-6 -0.8975276 0.4409582 0 0 0 0 1 0.9999989 -5.97961e-4 -0.001318395 0 0.001447677 0.4128085 0.9108166 0.4417033 -3.7725e-7 -0.9108177 0.412809 0 0 0 0 1 0.9999989 -5.61512e-4 -0.001334369 0 0.001447677 0.3868356 0.9221473 0.4417033 -1.59944e-6 -0.9221485 0.3868361 0 0 0 0 1 0.9999989 -5.27032e-4 -0.001348376 0 0.001447677 0.3633311 0.9316588 0.4417033 -1.10549e-6 -0.9316599 0.3633315 0 0 0 0 1 0.9999989 -4.9761e-4 -0.001358211 0 0.001446485 0.3433638 0.9392013 0.4417033 -9.90097e-7 -0.9392023 0.3433642 0 0 0 0 1 0.9999989 -4.74638e-4 -0.001367688 0 0.001447677 0.3273477 0.9449027 0.4417033 -7.65946e-7 -0.9449038 0.3273481 0 0 0 0 1 0.9999989 -4.55851e-4 -0.00137341 0 0.001447081 0.3147557 0.9491714 0.4417033 -3.87374e-7 -0.9491726 0.314756 0 0 0 0 1 0.9999989 -4.44193e-4 -0.001377105 0 0.001446962 0.3059566 0.9520443 0.4417033 -1.54131e-6 -0.9520453 0.305957 0 0 0 0 1 0.9999989 -4.3546e-4 -0.001380264 0 0.001447319 0.2998546 0.9539837 0.4417033 -1.53524e-6 -0.9539848 0.299855 0 0 0 0 1 0.9999989 -4.29707e-4 -0.001382946 0 0.001448214 0.2959565 0.9552002 0.4417033 -1.14773e-6 -0.9552013 0.2959569 0 0 0 0 1 0.9999989 -4.27125e-4 -0.001383364 0 0.001447796 0.2948561 0.9555405 0.4417033 -2.4151e-7 -0.9555416 0.2948565 0 0 0 0 1 0.9999989 -4.30064e-4 -0.001382589 0 0.001447975 0.2960832 0.955161 0.4417033 -1.40317e-6 -0.9551621 0.2960835 0 0 0 0 1 0.9999989 -4.33997e-4 -0.001380562 0 0.0014472 0.2988557 0.9542971 0.4417033 -1.56035e-6 -0.9542982 0.298856 0 0 0 0 1 0.9999989 -4.43177e-4 -0.00137782 0 0.001447319 0.3053818 0.9522288 0.4417033 -1.23666e-6 -0.9522299 0.3053821 0 0 0 0 1 0.9999989 -4.55179e-4 -0.001374065 0 0.001447498 0.3143166 0.949317 0.4417033 -2.03491e-7 -0.9493181 0.314317 0 0 0 0 1 0.9999989 -4.72981e-4 -0.001367509 0 0.001446962 0.3259836 0.9453742 0.4417033 -1.34969e-6 -0.9453753 0.325984 0 0 0 0 1 0.9999989 -4.89554e-4 -0.001362323 0 0.001447618 0.3371725 0.9414417 0.4417033 -1.54315e-6 -0.9414427 0.3371728 0 0 0 0 1 0.9999989 -5.07435e-4 -0.001356422 0 0.001448214 0.3494521 0.9369531 0.4417033 -1.43506e-6 -0.9369541 0.3494524 0 0 0 0 1 0.9999989 -5.2805e-4 -0.001348257 0 0.001447916 0.3645745 0.931173 0.4417033 -1.66151e-7 -0.931174 0.3645749 0 0 0 0 1 0.9999989 -5.5641e-4 -0.001336038 0 0.00144726 0.3840016 0.9233312 0.4417033 -6.94084e-7 -0.9233323 0.384002 0 0 0 0 1 0.9999989 -5.89194e-4 -0.001321613 0 0.001447021 0.4062267 0.9137711 0.4417033 -1.49136e-6 -0.9137722 0.4062272 0 0 0 0 1 0.9999989 -6.24213e-4 -0.001306116 0 0.001447618 0.4307783 0.9024565 0.4417033 -6.57027e-7 -0.9024575 0.4307788 0 0 0 0 1 0.9999989 -6.64096e-4 -0.001285672 0 0.001447081 0.4580105 0.8889455 0.4417033 -1.46924e-6 -0.8889465 0.458011 0 0 0 0 1 0.9999989 -7.05903e-4 -0.001263916 0 0.001447677 0.4874854 0.8731299 0.4417033 -2.05612e-7 -0.8731308 0.487486 0 0 0 0 1 0.9999989 -7.5162e-4 -0.001236855 0 0.001447319 0.5186553 0.8549822 0.4417033 -1.10729e-6 -0.8549832 0.5186558 0 0 0 0 1 0.9999989 -7.98509e-4 -0.001207411 0 0.001447558 0.5506547 0.8347318 0.4417033 -1.65804e-6 -0.8347328 0.5506553 0 0 0 0 1 0.9999989 -8.46062e-4 -0.001174628 0 0.001447618 0.5837327 0.8119445 0.4417033 -1.26902e-6 -0.8119454 0.5837334 0 0 0 0 1 0.9999989 -8.94189e-4 -0.001138389 0 0.001447558 0.6175124 0.7865597 0.4417033 -3.45863e-7 -0.7865606 0.6175131 0 0 0 0 1 0.9999989 -9.45501e-4 -0.001096904 0 0.001448154 0.6521384 0.7580984 0.4417033 -1.43488e-6 -0.7580993 0.6521392 0 0 0 0 1 0.9999989 -9.95069e-4 -0.001051068 0 0.001447379 0.6874637 0.7262172 0.4417033 0 -0.726218 0.6874645 0 0 0 0 1 0.9999989 -0.001046955 -9.99827e-4 0 0.001447677 0.7232066 0.69063 0.4417033 0 -0.6906309 0.7232074 0 0 0 0 1 0.9999989 -0.001096963 -9.44369e-4 0 0.001447439 0.7578496 0.6524274 0.4417033 0 -0.6524282 0.7578506 0 0 0 0 1 0.9999989 -0.001145303 -8.85846e-4 0 0.001447856 0.791044 0.6117573 0.4417033 0 -0.611758 0.791045 0 0 0 0 1 0.9999989 -0.001189112 -8.25235e-4 0 0.001447379 0.8215346 0.5701567 0.4417033 0 -0.5701574 0.8215355 0 0 0 0 1 0.9999989 -0.00123012 -7.63089e-4 0 0.001447558 0.8496772 0.527301 0.4417033 -2.64949e-7 -0.5273017 0.8496781 0 0 0 0 1 0.9999989 -0.001267492 -7.01844e-4 0 0.00144881 0.8748841 0.4843298 0.4417033 1.43113e-7 -0.4843303 0.8748852 0 0 0 0 1 0.9999989 -0.001301169 -6.35436e-4 0 0.001448035 0.8985378 0.4388937 0.4417033 -1.20536e-7 -0.4388942 0.8985388 0 0 0 0 1 0.9999989 -0.001331984 -5.66418e-4 0 0.001447439 0.9200344 0.391835 0.4417033 -8.11949e-7 -0.3918354 0.9200353 0 0 0 0 1 0.9999989 -0.001358985 -5.00712e-4 0 0.001448273 0.9380613 0.3464661 0.4417033 -1.15781e-6 -0.3464665 0.9380624 0 0 0 0 1 0.9999989 -0.001378953 -4.41516e-4 0 0.001447856 0.9520913 0.3058103 0.4417033 -1.33466e-6 -0.3058107 0.9520924 0 0 0 0 1 0.9999989 -0.001392185 -3.94689e-4 0 0.001447021 0.9620627 0.2728239 0.4417033 0 -0.2728242 0.9620639 0 0 0 0 1 0.9999989 -0.001400828 -3.64217e-4 0 0.001447379 0.9677397 0.251948 0.4417033 -4.74737e-7 -0.2519483 0.9677407 0 0 0 0 1 0.9999989 -0.001405835 -3.47186e-4 0 0.001448094 0.9706326 0.2405622 0.4417033 -1.21234e-6 -0.2405624 0.9706336 0 0 0 0 1 0.9999989 -0.001407384 -3.37716e-4 0 0.001447319 0.9722154 0.234083 0.4417033 -1.12199e-6 -0.2340832 0.9722165 0 0 0 0 1 0.9999989 -0.001408219 -3.39069e-4 0 0.001448452 0.9722771 0.2338268 0.4417033 3.84123e-7 -0.233827 0.9722782 0 0 0 0 1 0.9999989 -0.001404404 -3.50591e-4 0 0.001447498 0.9702623 0.2420512 0.4417033 2.18748e-7 -0.2420515 0.9702634 0 0 0 0 1 0.9999989 -0.001399278 -3.71922e-4 0 0.001447856 0.9663909 0.257073 0.4417033 -3.008e-7 -0.2570733 0.9663919 0 0 0 0 1 0.9999989 -0.001389801 -4.03088e-4 0 0.001447081 0.9602329 0.279196 0.4417033 -9.79678e-7 -0.2791963 0.9602341 0 0 0 0 1 0.9999989 -0.001378178 -4.41117e-4 0 0.001447021 0.9522385 0.3053516 0.4417033 -7.81374e-7 -0.305352 0.9522396 0 0 0 0 1 0.9999989 -0.001366674 -4.78065e-4 0 0.001447856 0.9439456 0.3300977 0.4417033 1.25207e-7 -0.3300981 0.9439467 0 0 0 0 1 0.9999989 -0.00135684 -5.05593e-4 0 0.001447975 0.9367722 0.3499367 0.4417033 -1.18621e-6 -0.3499371 0.9367733 0 0 0 0 1 0.9999989 -0.001349508 -5.22145e-4 0 0.001446962 0.9323666 0.361511 0.4417033 -1.03601e-6 -0.3615114 0.9323677 0 0 0 0 1 0.9999989 -0.001345872 -5.33166e-4 0 0.001447618 0.9296861 0.3683496 0.4417033 0 -0.36835 0.9296872 0 0 0 0 1 0.9999989 -0.001342952 -5.38867e-4 0 0.001447021 0.9279626 0.3726703 0.4417033 -4.32209e-7 -0.3726707 0.9279636 0 0 0 0 1 0.9999989 -0.001342058 -5.42391e-4 0 0.001447558 0.9272662 0.3743996 0.4417033 4.53073e-7 -0.3744 0.9272673 0 0 0 0 1 0.9999989 -0.001343131 -5.42132e-4 0 0.001448392 0.9269699 0.3751327 0.4417033 -1.32882e-6 -0.3751331 0.9269709 0 0 0 0 1 0.9999989 -0.001340031 -5.49953e-4 0 0.001448512 0.9251062 0.3797055 0.4417033 0 -0.379706 0.9251072 0 0 0 0 1 0.9999989 -0.001334488 -5.6211e-4 0 0.001448035 0.921665 0.3879838 0.4417033 3.08212e-7 -0.3879842 0.921666 0 0 0 0 1 0.9999989 -0.001329839 -5.73446e-4 0 0.001448214 0.9179158 0.3967723 0.4417033 -1.27375e-6 -0.3967728 0.9179168 0 0 0 0 1 0.9999989 -0.001323401 -5.88094e-4 0 0.001448214 0.9138129 0.4061325 0.4417033 0 -0.4061329 0.913814 0 0 0 0 1 0.9999989 -0.001317024 -6.02759e-4 0 0.001448392 0.9091122 0.4165486 0.4417033 -6.37489e-7 -0.4165491 0.9091132 0 0 0 0 1 0.9999989 -0.001311779 -6.12073e-4 0 0.001447498 0.9057908 0.4237224 0.4417033 -1.42118e-6 -0.4237229 0.9057919 0 0 0 0 1 0.9999989 -0.001310884 -6.14999e-4 0 0.001447975 0.9053109 0.4247467 0.4417033 0 -0.4247472 0.905312 0 0 0 0 1 0.9999989 -0.001312136 -6.10729e-4 0 0.00144726 0.9063817 0.4224572 0.4417033 -7.70424e-7 -0.4224576 0.9063827 0 0 0 0 1 0.9999989 -0.001314759 -6.0703e-4 0 0.001448094 0.9078524 0.4192873 0.4417033 -1.77949e-7 -0.4192878 0.9078534 0 0 0 0 1 0.9999989 -0.001318454 -5.99063e-4 0 0.001448154 0.9102995 0.4139477 0.4417033 -4.62951e-7 -0.4139482 0.9103004 0 0 0 0 1 0.9999989 -0.001323819 -5.86632e-4 0 0.001447975 0.9139469 0.405831 0.4417033 -1.11277e-6 -0.4058315 0.9139479 0 0 0 0 1 0.9999989 -0.001328527 -5.76306e-4 0 0.001448094 0.9172817 0.3982363 0.4417033 -4.35104e-7 -0.3982368 0.9172827 0 0 0 0 1 0.9999989 -0.001332819 -5.63848e-4 0 0.0014472 0.9208462 0.389923 0.4417033 -4.99591e-7 -0.3899235 0.9208472 0 0 0 0 1 0.9999989 -0.001340746 -5.48766e-4 0 0.00144869 0.9253612 0.3790837 0.4417033 -4.5865e-7 -0.3790842 0.9253622 0 0 0 0 1 0.9999989 -0.001347243 -5.3206e-4 0 0.001448512 0.9301163 0.3672621 0.4417033 0 -0.3672626 0.9301173 0 0 0 0 1 0.9999989 -0.001350045 -5.22395e-4 0 0.001447558 0.9324076 0.3614052 0.4417033 -8.29748e-7 -0.3614057 0.9324087 0 0 0 0 1 0.9999989 -0.001352429 -5.19196e-4 0 0.00144869 0.9332918 0.3591158 0.4417033 -1.13671e-6 -0.3591163 0.9332929 0 0 0 0 1 0.9999989 -0.001354157 -5.14822e-4 0 0.00144875 0.9347681 0.3552551 0.4417033 1.48735e-7 -0.3552556 0.9347692 0 0 0 0 1 0.9999989 -0.001355588 -5.09235e-4 0 0.001448035 0.9362255 0.3513965 0.4417033 4.05157e-7 -0.3513969 0.9362266 0 0 0 0 1 0.9999989 -0.001356661 -5.05617e-4 0 0.001447796 0.9369547 0.3494477 0.4417033 -3.49104e-7 -0.3494482 0.9369558 0 0 0 0 1 0.9999989 -0.001359164 -4.97917e-4 0 0.001447498 0.9387381 0.3446283 0.4417033 -1.00351e-6 -0.3446287 0.9387391 0 0 0 0 1 0.9999989 -0.001364052 -4.87488e-4 0 0.001448571 0.9414561 0.3371323 0.4417033 -9.32573e-7 -0.3371327 0.9414572 0 0 0 0 1 0.9999989 -0.001366555 -4.79515e-4 0 0.001448214 0.9435745 0.3311569 0.4417033 0 -0.3311573 0.9435756 0 0 0 0 1 0.9999989 -0.001368165 -4.72747e-4 0 0.001447558 0.9451635 0.3265941 0.4417033 0 -0.3265944 0.9451646 0 0 0 0 1 0.9999989 -0.001371145 -4.65687e-4 0 0.001448094 0.9467546 0.3219525 0.4417033 -5.69192e-7 -0.3219528 0.9467557 0 0 0 0 1 0.9999989 -0.001371383 -4.6207e-4 0 0.001447141 0.9476217 0.3193914 0.4417033 -1.49553e-7 -0.3193918 0.9476228 0 0 0 0 1 0.9999989 -0.001372039 -4.6457e-4 0 0.001448571 0.9471076 0.3209128 0.4417033 -3.12972e-7 -0.3209132 0.9471086 0 0 0 0 1 0.9999989 -0.001368939 -4.69655e-4 0 0.00144726 0.945588 0.325363 0.4417033 -1.31133e-6 -0.3253634 0.9455891 0 0 0 0 1 0.9999989 -0.001366734 -4.7632e-4 0 0.001447319 0.9440918 0.3296791 0.4417033 -8.95059e-7 -0.3296795 0.9440929 0 0 0 0 1 0.9999989 -0.001365125 -4.85302e-4 0 0.00144881 0.9421198 0.335273 0.4417033 -4.9211e-7 -0.3352734 0.9421209 0 0 0 0 1 0.9999989 -0.00136131 -4.94459e-4 0 0.001448333 0.9397691 0.3418067 0.4417033 -6.44333e-7 -0.3418071 0.9397702 0 0 0 0 1 0.9999989 -0.001357734 -5.05273e-4 0 0.00144869 0.937241 0.348679 0.4417033 1.36461e-7 -0.3486794 0.9372421 0 0 0 0 1 0.9999989 -0.001352846 -5.14079e-4 0 0.0014472 0.9346019 0.3556923 0.4417033 -7.44351e-7 -0.3556928 0.934603 0 0 0 0 1 0.9999989 -0.001349687 -5.23353e-4 0 0.001447618 0.9322359 0.3618479 0.4417033 -5.10119e-7 -0.3618484 0.932237 0 0 0 0 1 0.9999989 -0.001348137 -5.29679e-4 0 0.001448452 0.9305765 0.3660945 0.4417033 -6.4313e-7 -0.366095 0.9305775 0 0 0 0 1 0.9999989 -0.001347303 -5.31524e-4 0 0.001448392 0.9300637 0.3673952 0.4417033 -6.56089e-7 -0.3673956 0.9300648 0 0 0 0 1 0.9999989 -0.001346766 -5.29597e-4 0 0.001447141 0.9303238 0.366736 0.4417033 -1.21084e-6 -0.3667364 0.9303249 0 0 0 0 1 0.9999989 -0.001346886 -5.29078e-4 0 0.001447081 0.9307413 0.3656753 0.4417033 0 -0.3656758 0.9307423 0 0 0 0 1 0.9999989 -0.00134921 -5.27543e-4 0 0.00144869 0.93134 0.3641477 0.4417033 0 -0.3641481 0.9313411 0 0 0 0 1 0.9999989 -0.001349925 -5.24305e-4 0 0.001448154 0.9321279 0.3621261 0.4417033 -1.30718e-7 -0.3621266 0.932129 0 0 0 0 1 0.9999989 -0.001350879 -5.19743e-4 0 0.001447379 0.9333332 0.3590083 0.4417033 0 -0.3590087 0.9333342 0 0 0 0 1 0.9999989 -0.001355051 -5.12324e-4 0 0.001448631 0.9352609 0.353956 0.4417033 -4.7555e-7 -0.3539564 0.935262 0 0 0 0 1 0.9999989 -0.001358509 -4.98831e-4 0 0.0014472 0.9386001 0.3450034 0.4417033 -5.00788e-7 -0.3450039 0.9386013 0 0 0 0 1 0.9999989 -0.001366198 -4.76857e-4 0 0.001447021 0.9438135 0.330475 0.4417033 -1.4331e-6 -0.3304753 0.9438146 0 0 0 0 1 0.9999989 -0.001376688 -4.50186e-4 0 0.001448392 0.9504519 0.3108683 0.4417033 0 -0.3108686 0.9504529 0 0 0 0 1 0.9999989 -0.001385092 -4.22928e-4 0 0.001448214 0.9561952 0.292726 0.4417033 -1.06586e-6 -0.2927263 0.9561963 0 0 0 0 1 0.9999989 -0.001390933 -4.04951e-4 0 0.00144869 0.9600344 0.2798781 0.4417033 -5.28491e-7 -0.2798784 0.9600355 0 0 0 0 1 0.9999989 -0.001393795 -3.92191e-4 0 0.001447916 0.9626525 0.2707359 0.4417033 1.91556e-7 -0.2707362 0.9626536 0 0 0 0 1 0.9999989 -0.001395165 -3.87684e-4 0 0.001447975 0.9634601 0.2678478 0.4417033 -1.74572e-7 -0.2678481 0.9634612 0 0 0 0 1 0.9999989 -0.001393735 -3.90355e-4 0 0.001447319 0.9629718 0.2695981 0.4417033 1.52132e-7 -0.2695984 0.9629729 0 0 0 0 1 0.9999989 -0.001396596 -3.85093e-4 0 0.00144875 0.9640395 0.2657551 0.4417033 0 -0.2657554 0.9640405 0 0 0 0 1 0.9999989 -0.001399815 -3.67404e-4 0 0.0014472 0.9671849 0.2540691 0.4417033 -3.02267e-7 -0.2540693 0.967186 0 0 0 0 1 0.9999989 -0.001404941 -3.47358e-4 0 0.0014472 0.9707001 0.2402895 0.4417033 -4.13783e-7 -0.2402897 0.9707012 0 0 0 0 1 0.9999989 -0.001409769 -3.27573e-4 0 0.001447319 0.9739158 0.2269049 0.4417033 -8.58509e-7 -0.2269051 0.9739168 0 0 0 0 1 0.9999989 -0.001413822 -3.0893e-4 0 0.0014472 0.9769454 0.2134841 0.4417033 0 -0.2134844 0.9769465 0 0 0 0 1 0.9999989 -0.001418054 -2.96203e-4 0 0.00144869 0.9788211 0.2047119 0.4417033 -3.74297e-7 -0.2047122 0.9788222 0 0 0 0 1 0.9999989 -0.001418173 -2.94727e-4 0 0.001448452 0.9789837 0.2039328 0.4417033 -6.85593e-7 -0.203933 0.9789848 0 0 0 0 1 0.9999989 -0.001415908 -3.01374e-4 0 0.001447618 0.9779866 0.2086623 0.4417033 -7.11072e-7 -0.2086625 0.9779877 0 0 0 0 1 0.9999989 -0.001413881 -3.08978e-4 0 0.00144726 0.9768536 0.2139036 0.4417033 -6.11954e-7 -0.2139039 0.9768548 0 0 0 0 1 0.9999989 -0.00141257 -3.20356e-4 0 0.001448392 0.9751541 0.2215225 0.4417033 -5.2199e-7 -0.2215228 0.9751552 0 0 0 0 1 0.9999989 -0.001409173 -3.34848e-4 0 0.001448392 0.9727842 0.2317081 0.4417033 -7.92923e-7 -0.2317084 0.9727852 0 0 0 0 1 0.9999989 -0.001405119 -3.48691e-4 0 0.001447737 0.9704505 0.2412958 0.4417033 -6.64048e-7 -0.2412961 0.9704515 0 0 0 0 1 0.9999989 -0.001402199 -3.6235e-4 0 0.001448273 0.9681626 0.2503176 0.4417033 -1.87995e-7 -0.2503178 0.9681637 0 0 0 0 1 0.9999989 -0.001397311 -3.78917e-4 0 0.001447737 0.964866 0.2627382 0.4417033 -1.52462e-6 -0.2627385 0.9648671 0 0 0 0 1 0.9999989 -0.001391828 -3.99039e-4 0 0.001447916 0.9612311 0.2757397 0.4417033 -2.24258e-7 -0.27574 0.9612323 0 0 0 0 1 0.9999989 -0.001387178 -4.16329e-4 0 0.001448273 0.9576527 0.287922 0.4417033 -7.00541e-7 -0.2879223 0.9576538 0 0 0 0 1 0.9999989 -0.001379489 -4.38349e-4 0 0.001447439 0.9530273 0.3028807 0.4417033 0 -0.302881 0.9530284 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_RightLeg_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightLeg_pose_matrix-interpolation"> + <Name_array id="_6_15_t_RightLeg_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_RightLeg_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_RightLeg_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_RightLeg_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_RightLeg_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_RightLeg_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_RightLeg_pose_matrix-sampler" target="RightLeg/transform"/> + </animation> + <animation id="_6_15_t_RightFoot_pose_matrix"> + <source id="_6_15_t_RightFoot_pose_matrix-input"> + <float_array id="_6_15_t_RightFoot_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_RightFoot_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightFoot_pose_matrix-output"> + <float_array id="_6_15_t_RightFoot_pose_matrix-output-array" count="2224">-0.9971482 0.07341015 0.01749569 0 0.02565264 0.1116884 0.9934121 0.4401536 0.07097244 0.9910279 -0.1132531 0 0 0 0 1 -0.9980181 0.06036823 0.01775789 0 0.02559411 0.1316222 0.9909695 0.4401536 0.05748575 0.9894599 -0.1329065 0 0 0 0 1 -0.998396 0.05406612 0.01679575 0 0.02547687 0.164124 0.9861106 0.4401536 0.05055856 0.9849567 -0.1652383 0 0 0 0 1 -0.998686 0.0487312 0.01585304 0 0.02531373 0.200147 0.9794387 0.4401536 0.04455626 0.978553 -0.2011178 0 0 0 0 1 -0.9991903 0.03644359 0.01703894 0 0.02512788 0.2346013 0.9717668 0.4401536 0.03141731 0.9714081 -0.2353272 0 0 0 0 1 -0.9995667 0.02188575 0.01967388 0 0.02489024 0.2720452 0.9619624 0.4401536 0.01570105 0.9620354 -0.2724722 0 0 0 0 1 -0.9996955 0.009802758 0.02263754 0 0.02457219 0.3145409 0.9489257 0.4401536 0.002181649 0.9491931 -0.3146862 0 0 0 0 1 -0.9996188 -0.003723561 0.02734994 0 0.02417224 0.3602872 0.9325282 0.4401536 -0.01332616 0.9328337 -0.36006 0 0 0 0 1 -0.9994031 -0.01337289 0.03184795 0 0.02373158 0.404121 0.9143976 0.4401536 -0.02509862 0.9146076 -0.4035625 0 0 0 0 1 -0.9991652 -0.01965713 0.03580868 0 0.0232324 0.4475722 0.8939459 0.4401536 -0.03359937 0.8940315 -0.446742 0 0 0 0 1 -0.9989706 -0.02314484 0.03900986 0 0.02268648 0.4897816 0.8715499 0.4401536 -0.0392782 0.8715376 -0.4887526 0 0 0 0 1 -0.9989303 -0.02290111 0.04016721 0 0.02218478 0.5248031 0.8509345 0.4401536 -0.04056727 0.8509153 -0.5237339 0 0 0 0 1 -0.999108 -0.01828914 0.03805881 0 0.02182602 0.5478957 0.8362618 0.4401536 -0.03614675 0.8363465 -0.5470079 0 0 0 0 1 -0.9993937 -0.01055473 0.03317558 0 0.02168297 0.5568323 0.8303419 0.4401536 -0.02723729 0.8305577 -0.5562658 0 0 0 0 1 -0.9996182 -0.002195239 0.02753579 0 0.02180767 0.5491302 0.8354523 0.4401536 -0.01695472 0.8357338 -0.5488727 0 0 0 0 1 -0.9996996 0.002751767 0.02434819 0 0.02210396 0.5301094 0.8476409 0.4401536 -0.01057463 0.8479245 -0.5300112 0 0 0 0 1 -0.999746 0.01259809 0.01868039 0 0.02248454 0.5043178 0.8632252 0.4401536 0.001454114 0.863426 -0.5044731 0 0 0 0 1 -0.9995357 0.02871394 0.01018929 0 0.02278566 0.4824498 0.8756271 0.4401536 0.02022689 0.8754526 -0.4828802 0 0 0 0 1 -0.9991688 0.04055857 0.004054725 0 0.02287602 0.475645 0.8793398 0.4401536 0.0337361 0.8787015 -0.4761776 0 0 0 0 1 -0.9989464 0.04586112 0.001641929 0 0.02296638 0.4686354 0.8830929 0.4401536 0.03973019 0.8822001 -0.4691951 0 0 0 0 1 -0.9986358 0.05220723 -7.1536e-4 0 0.02314031 0.4548344 0.8902752 0.4401536 0.04680418 0.8890442 -0.4554222 0 0 0 0 1 -0.9981129 0.06125688 -0.004233241 0 0.0233004 0.4416366 0.8968913 0.4401536 0.05681031 0.8951002 -0.4422307 0 0 0 0 1 -0.9974655 0.07070714 -0.007931411 0 0.02341938 0.4315342 0.9017925 0.4401536 0.06718587 0.899321 -0.4320965 0 0 0 0 1 -0.9967546 0.07972997 -0.01109582 0 0.02354407 0.4205594 0.9069594 0.4401536 0.07697826 0.9037546 -0.4210719 0 0 0 0 1 -0.9967791 0.07964515 -0.009370625 0 0.02372223 0.404456 0.9142497 0.4401536 0.07660555 0.9110826 -0.4050427 0 0 0 0 1 -0.9972278 0.07421469 -0.005351305 0 0.02390074 0.3876028 0.9215165 0.4401536 0.07046425 0.918834 -0.3883022 0 0 0 0 1 -0.9975098 0.07048386 -0.00246483 0 0.02404963 0.3727968 0.9276012 0.4401536 0.06629979 0.9252319 -0.3735638 0 0 0 0 1 -0.9973765 0.07236534 -0.001725554 0 0.02420896 0.3559372 0.9341962 0.4401536 0.06821763 0.9317035 -0.3567554 0 0 0 0 1 -0.9974502 0.07136332 3.07117e-4 0 0.02438271 0.3367482 0.9412789 0.4401536 0.06706941 0.9388863 -0.3376297 0 0 0 0 1 -0.9976706 0.06814104 0.003153562 0 0.02456045 0.3156969 0.948542 0.4401536 0.06363904 0.94641 -0.3166353 0 0 0 0 1 -0.997647 0.06839686 0.004690766 0 0.02472096 0.2950779 0.9551533 0.4401536 0.06394535 0.9530218 -0.2960745 0 0 0 0 1 -0.9972871 0.07343524 0.005041539 0 0.02488762 0.271942 0.9619917 0.4401536 0.06927305 0.9595074 -0.273032 0 0 0 0 1 -0.9970363 0.07670897 0.005838572 0 0.02502083 0.251571 0.9675153 0.4401536 0.0727483 0.964794 -0.2527449 0 0 0 0 1 -0.9966942 0.08101916 0.006035268 0 0.02511185 0.2365714 0.9712895 0.4401536 0.07726526 0.9682301 -0.237824 0 0 0 0 1 -0.9962208 0.08664321 0.006060719 0 0.02519857 0.2215427 0.974825 0.4401536 0.08311921 0.9712937 -0.2228888 0 0 0 0 1 -0.9959733 0.08938986 0.006804108 0 0.02527481 0.207168 0.9779788 0.4401536 0.08601176 0.9742127 -0.2085933 0 0 0 0 1 -0.9955911 0.09354686 0.006853997 0 0.02532166 0.1976922 0.979937 0.4401536 0.09031504 0.9757902 -0.1991895 0 0 0 0 1 -0.9945688 0.1038664 0.006663143 0 0.02540326 0.1801679 0.9833077 0.4401536 0.1009322 0.9781364 -0.181828 0 0 0 0 1 -0.9932165 0.1160848 0.006696343 0 0.02548116 0.161103 0.9866086 0.4401536 0.1134514 0.9800866 -0.1629683 0 0 0 0 1 -0.9923439 0.12341 0.00480479 0 0.02545827 0.1663322 0.985741 0.4401536 0.1208511 0.9783166 -0.1682007 0 0 0 0 1 -0.9915489 0.1297148 0.002116382 0 0.02540612 0.178157 0.9836739 0.4401536 0.12722 0.9754148 -0.179947 0 0 0 0 1 -0.9903054 0.1389071 -1.10807e-4 0 0.02539014 0.181797 0.9830082 0.4401536 0.1365669 0.9734753 -0.1835615 0 0 0 0 1 -0.9886756 0.150034 -0.003199219 0 0.02535772 0.1880354 0.9818348 0.4401536 0.1479101 0.9706349 -0.1897107 0 0 0 0 1 -0.9869844 0.1606812 -0.006568372 0 0.02531957 0.1956011 0.9803566 0.4401536 0.1588097 0.9674303 -0.1971237 0 0 0 0 1 -0.9853423 0.1703 -0.009905457 0 0.02527856 0.2031923 0.9788125 0.4401536 0.1687045 0.9642149 -0.204519 0 0 0 0 1 -0.9837232 0.1791786 -0.01354652 0 0.02522897 0.2123661 0.9768644 0.4401536 0.17791 0.9606223 -0.21343 0 0 0 0 1 -0.9822021 0.1871033 -0.01646089 0 0.02519649 0.2181007 0.975601 0.4401536 0.1861283 0.9578226 -0.2189334 0 0 0 0 1 -0.9808456 0.1938543 -0.01903611 0 0.02516585 0.2230248 0.9744879 0.4401536 0.1931542 0.9553429 -0.2236315 0 0 0 0 1 -0.9802967 0.1963778 -0.02130746 0 0.02512133 0.2309374 0.9726442 0.4401536 0.1959264 0.9529446 -0.2313206 0 0 0 0 1 -0.9818786 0.1882352 -0.0219472 0 0.02504724 0.2436941 0.9695286 0.4401536 0.1878479 0.9514096 -0.2439929 0 0 0 0 1 -0.984337 0.1749509 -0.02174139 0 0.02494615 0.2603034 0.9652045 0.4401536 0.1745228 0.949544 -0.2605907 0 0 0 0 1 -0.9860303 0.1654304 -0.01941227 0 0.02493774 0.2618508 0.9647861 0.4401536 0.1646881 0.9508242 -0.2623184 0 0 0 0 1 -0.9863711 0.163752 -0.01603555 0 0.02504062 0.2457257 0.9690158 0.4401536 0.1626186 0.9554077 -0.2464773 0 0 0 0 1 -0.986853 0.1610714 -0.01330643 0 0.02511221 0.2341467 0.9718769 0.4401536 0.1596572 0.9587653 -0.2351133 0 0 0 0 1 -0.9880074 0.1539894 -0.01133292 0 0.0251224 0.2327383 0.9722148 0.4401536 0.1523483 0.9602707 -0.2338158 0 0 0 0 1 -0.9891055 0.1469079 -0.00938034 0 0.02513122 0.231304 0.9725568 0.4401536 0.145046 0.9617257 -0.2324761 0 0 0 0 1 -0.9900476 0.1405223 -0.007681727 0 0.02513843 0.2302914 0.9727969 0.4401536 0.1384687 0.9629221 -0.2315321 0 0 0 0 1 -0.9910773 0.1332357 -0.0037238 0 0.02522635 0.2149339 0.9763027 0.4401536 0.1308788 0.9674974 -0.2163773 0 0 0 0 1 -0.9921209 0.125275 0.001440763 0 0.02535593 0.1895183 0.9815496 0.4401536 0.1226906 0.9738524 -0.1912017 0 0 0 0 1 -0.9917015 0.1285447 0.002030193 0 0.02539634 0.1803992 0.9832655 0.4401536 0.1260273 0.9751574 -0.1821669 0 0 0 0 1 -0.9905318 0.1372659 -0.002147912 0 0.02531284 0.1979944 0.9798762 0.4401536 0.1349289 0.9705441 -0.1995944 0 0 0 0 1 -0.9915061 0.1299814 -0.004484415 0 0.02516812 0.2255843 0.9738984 0.4401536 0.1276003 0.9655135 -0.2269397 0 0 0 0 1 -0.9937962 0.1112138 -5.93558e-4 0 0.02514749 0.2299082 0.9728873 0.4401536 0.108335 0.9668368 -0.2312788 0 0 0 0 1 -0.9955346 0.09423923 0.00542742 0 0.02525627 0.2105225 0.9772627 0.4401536 0.09095388 0.9730359 -0.2119627 0 0 0 0 1 -0.9978225 0.06542688 0.00832504 0 0.02498102 0.2580946 0.9657965 0.4401536 0.0610404 0.9639015 -0.2591671 0 0 0 0 1 -0.9979232 0.06352806 0.01063972 0 0.02514117 0.2320733 0.9723733 0.4401536 0.05930376 0.9706214 -0.2331886 0 0 0 0 1 -0.9980158 0.06162273 0.01291364 0 0.02529114 0.2045437 0.9785306 0.4401536 0.05765831 0.9769156 -0.2056965 0 0 0 0 1 -0.9982149 0.05867314 0.01114827 0 0.02508056 0.2424218 0.9698466 0.4401536 0.05420136 0.9683949 -0.2434607 0 0 0 0 1 -0.998582 0.05194646 0.01162499 0 0.02494531 0.2637383 0.9642716 0.4401536 0.04702448 0.9631943 -0.2646603 0 0 0 0 1 -0.9989641 0.04354071 0.01321405 0 0.02484267 0.2785971 0.9600867 0.4401536 0.03812146 0.9594203 -0.2793903 0 0 0 0 1 -0.9991343 0.03921616 0.01387822 0 0.02474606 0.2921297 0.9560585 0.4401536 0.03343874 0.9555741 -0.2928474 0 0 0 0 1 -0.9992716 0.03522855 0.0146653 0 0.02466303 0.3029862 0.9526757 0.4401536 0.029118 0.9523434 -0.3036345 0 0 0 0 1 -0.9994838 0.02730125 0.01692605 0 0.02459573 0.3115077 0.9499252 0.4401536 0.02066153 0.9498511 -0.3120186 0 0 0 0 1 -0.9996326 0.01867556 0.01963526 0 0.02454978 0.3173512 0.9479901 0.4401536 0.011473 0.9481239 -0.3176932 0 0 0 0 1 -0.9996975 0.00907731 0.02285075 0 0.02455025 0.3172296 0.9480309 0.4401536 0.001356601 0.9483051 -0.3173567 0 0 0 0 1 -0.9996213 -0.004061996 0.02721136 0 0.02460169 0.3108175 0.950151 0.4401536 -0.01231729 0.9504607 -0.3106001 0 0 0 0 1 -0.999302 -0.01927316 0.03199744 0 0.02466452 0.3028627 0.9527149 0.4401536 -0.02805268 0.9528391 -0.302176 0 0 0 0 1 -0.9991733 -0.02346312 0.03319543 0 0.02470111 0.2981162 0.9542099 0.4401536 -0.03228485 0.954241 -0.2972903 0 0 0 0 1 -0.9993878 -0.01631498 0.03094714 0 0.0247088 0.2970634 0.954538 0.4401536 -0.02476656 0.9547182 -0.2964786 0 0 0 0 1 -0.9995841 -0.006845831 0.02800846 0 0.02470695 0.2973715 0.954442 0.4401536 -0.01486289 0.9547371 -0.2970788 0 0 0 0 1 -0.9995889 -0.006546556 0.02790713 0 0.02471536 0.2963037 0.9547739 0.4401536 -0.01451951 0.9550712 -0.2960203 0 0 0 0 1 -0.999492 -0.01194137 0.02954691 0 0.02473306 0.2940167 0.9554802 0.4401536 -0.02009701 0.9557255 -0.2935721 0 0 0 0 1 -0.9995204 -0.01057183 0.02910238 0 0.02474641 0.2921659 0.9560474 0.4401536 -0.01860994 0.956309 -0.2917644 0 0 0 0 1 -0.9996595 -6.81466e-4 0.02608221 0 0.02475327 0.2912272 0.9563336 0.4401536 -0.008247554 0.9566535 -0.2911112 0 0 0 0 1 -0.999693 0.006502926 0.02390271 0 0.02476131 0.2900617 0.9566875 0.4401536 -7.11957e-4 0.9569857 -0.2901338 0 0 0 0 1 -0.999678 0.0019176 0.02529984 0 0.0247904 0.2861707 0.9578579 0.4401536 -0.00540322 0.9581765 -0.2861261 0 0 0 0 1 -0.9996549 -0.001255154 0.02623504 0 0.02483648 0.2797635 0.9597476 0.4401536 -0.008544266 0.9600679 -0.2796359 0 0 0 0 1 -0.9996894 0.00809127 0.02356839 0 0.02488255 0.273245 0.9616225 0.4401536 0.001340746 0.9619103 -0.2733616 0 0 0 0 1 -0.999643 0.01600122 0.02139014 0 0.02490931 0.2691291 0.9627819 0.4401536 0.009648919 0.962971 -0.2694318 0 0 0 0 1 -0.9996284 0.01716583 0.02116721 0 0.02494674 0.2636728 0.9642895 0.4401536 0.0109716 0.9644592 -0.2640032 0 0 0 0 1 -0.9996154 0.01793289 0.02114337 0 0.02500951 0.2541468 0.9668422 0.4401536 0.01196473 0.9669992 -0.2544977 0 0 0 0 1 -0.9995687 0.02101826 0.02050513 0 0.02505719 0.2464751 0.9688251 0.4401536 0.01530903 0.968921 -0.2468955 0 0 0 0 1 -0.9995149 0.02399647 0.01984381 0 0.02508014 0.2426982 0.9697775 0.4401536 0.01845514 0.9698048 -0.2431824 0 0 0 0 1 -0.9995058 0.02435064 0.01987433 0 0.02510803 0.2381734 0.970898 0.4401536 0.01890844 0.9709172 -0.2386671 0 0 0 0 1 -0.9994751 0.02575361 0.01964569 0 0.02513307 0.2339831 0.9719158 0.4401536 0.0204336 0.9718993 -0.2345077 0 0 0 0 1 -0.9993973 0.02907586 0.01895773 0 0.02515345 0.2303062 0.972793 0.4401536 0.02391868 0.9726836 -0.2308989 0 0 0 0 1 -0.9993383 0.03122591 0.01864355 0 0.02518701 0.2244459 0.974161 0.4401536 0.02623456 0.9739859 -0.225084 0 0 0 0 1 -0.9994184 0.02783894 0.01968586 0 0.02523505 0.2156788 0.9761381 0.4401536 0.02292883 0.9760672 -0.216256 0 0 0 0 1 -0.9995205 0.0226249 0.02113229 0 0.02529889 0.2034646 0.9787553 0.4401536 0.01784455 0.9788206 -0.2039395 0 0 0 0 1 -0.9994881 0.02399677 0.02115213 0 0.02535915 0.1913528 0.9811937 0.4401536 0.01949799 0.9812277 -0.1918635 0 0 0 0 1 -0.9994113 0.02727127 0.02080971 0 0.02540737 0.1808788 0.9831771 0.4401536 0.02304846 0.983127 -0.1814653 0 0 0 0 1 -0.9994053 0.02719575 0.02119749 0 0.02546346 0.1675844 0.9855288 0.4401536 0.0232498 0.9854823 -0.1681773 0 0 0 0 1 -0.9994151 0.02651453 0.0215882 0 0.02550441 0.157578 0.9871771 0.4401536 0.02277272 0.9871504 -0.1581622 0 0 0 0 1 -0.9993968 0.0270484 0.02177691 0 0.02554208 0.147732 0.9886975 0.4401536 0.02352553 0.9886573 -0.1483339 0 0 0 0 1 -0.99941 0.02620017 0.02220046 0 0.02557986 0.1366323 0.9902914 0.4401536 0.0229125 0.9902752 -0.1372221 0 0 0 0 1 -0.9994034 0.02619993 0.02249556 0 0.02561634 0.1256175 0.991748 0.4401536 0.02315789 0.9917325 -0.1262138 0 0 0 0 1 -0.9993842 0.02671355 0.02274268 0 0.0256502 0.1140886 0.9931394 0.4401536 0.02393561 0.9931111 -0.1147037 0 0 0 0 1 -0.9992759 0.0306009 0.02260565 0 0.02567631 0.1039871 0.9942471 0.4401536 0.02807414 0.9941076 -0.1046977 0 0 0 0 1 -0.9992197 0.03235214 0.02265363 0 0.02569437 0.0968942 0.9949629 0.4401536 0.02999418 0.9947685 -0.09765005 0 0 0 0 1 -0.999189 0.03320199 0.02277618 0 0.0257073 0.09071022 0.9955454 0.4401536 0.03098803 0.9953235 -0.09149032 0 0 0 0 1 -0.999091 0.03607845 0.02270066 0 0.02571821 0.08550435 0.9960058 0.4401536 0.03399336 0.9956842 -0.08635467 0 0 0 0 1 -0.999045 0.03731 0.02273166 0 0.0257259 0.08183991 0.9963133 0.4401536 0.03531211 0.9959467 -0.08272171 0 0 0 0 1 -0.9988384 0.04262357 0.02246803 0 0.02573406 0.07769221 0.9966451 0.4401536 0.040735 0.9960657 -0.07869899 0 0 0 0 1 -0.9984468 0.05119985 0.02196085 0 0.0257402 0.07436549 0.9968988 0.4401536 0.04940789 0.9959157 -0.07556802 0 0 0 0 1 -0.9983471 0.05307948 0.02203065 0 0.02574598 0.07036089 0.9971892 0.4401536 0.05138021 0.9961081 -0.07161128 0 0 0 0 1 -0.9982938 0.05409097 0.02198576 0 0.02574688 0.06984788 0.9972253 0.4401536 0.05240523 0.9960898 -0.07112151 0 0 0 0 1 -0.9980729 0.0582568 0.02136373 0 0.02573698 0.07538235 0.9968225 0.4401536 0.05646121 0.9954513 -0.07673656 0 0 0 0 1 -0.997711 0.06437182 0.02070814 0 0.02573192 0.07822012 0.996604 0.4401536 0.06253343 0.9948555 -0.07969766 0 0 0 0 1 -0.9975388 0.06703698 0.02054381 0 0.02573192 0.07746988 0.9966626 0.4401536 0.06522172 0.9947382 -0.0790044 0 0 0 0 1 -0.9974011 0.06900894 0.02069807 0 0.0257411 0.07300865 0.996999 0.4401536 0.06729066 0.9949408 -0.07459539 0 0 0 0 1 -0.9972761 0.07067459 0.02109414 0 0.0257523 0.06566005 0.9975097 0.4401536 0.06911355 0.9953358 -0.06730139 0 0 0 0 1 -0.996792 0.07717251 0.02120971 0 0.02576273 0.05848896 0.9979555 0.4401536 0.07577413 0.9953004 -0.06028962 0 0 0 0 1 -0.9963442 0.08277767 0.02111709 0 0.02576595 0.05550098 0.998126 0.4401536 0.08145052 0.9950211 -0.05743098 0 0 0 0 1 -0.9963077 0.08317196 0.02128505 0 0.02576982 0.05322521 0.99825 0.4401536 0.0818935 0.9951126 -0.05517214 0 0 0 0 1 -0.9956341 0.09091359 0.02114218 0 0.02577257 0.05006289 0.9984135 0.4401536 0.08971089 0.9945995 -0.0521875 0 0 0 0 1 -0.994784 0.09986025 0.02079468 0 0.0257737 0.0488311 0.9984745 0.4401536 0.09869247 0.9938023 -0.05115026 0 0 0 0 1 -0.9952115 0.09555655 0.02055841 0 0.0257675 0.05360281 0.9982298 0.4401536 0.09428542 0.9939796 -0.05580848 0 0 0 0 1 -0.9960101 0.08680266 0.02070868 0 0.02576273 0.0575152 0.9980121 0.4401536 0.08543902 0.9945637 -0.05952215 0 0 0 0 1 -0.996293 0.08336144 0.021236 0 0.02576941 0.05368864 0.9982251 0.4401536 0.08207333 0.9950719 -0.05563789 0 0 0 0 1 -0.9961553 0.08492773 0.02148634 0 0.02577388 0.04971492 0.9984307 0.4401536 0.08372622 0.9951459 -0.05171287 0 0 0 0 1 -0.9959765 0.08710086 0.02106672 0 0.02576893 0.05321896 0.9982503 0.4401536 0.08582729 0.9947767 -0.05524945 0 0 0 0 1 -0.9958521 0.08859294 0.02073097 0 0.02576571 0.05606931 0.9980943 0.4401536 0.08726173 0.9944883 -0.05811959 0 0 0 0 1 -0.9955348 0.09209352 0.02070873 0 0.02576649 0.05407464 0.9982044 0.4401536 0.09080833 0.9942808 -0.05620628 0 0 0 0 1 -0.9956541 0.09074652 0.02091968 0 0.02576959 0.05260628 0.9982827 0.4401536 0.08949017 0.9944835 -0.05471634 0 0 0 0 1 -0.996127 0.08537381 0.02102595 0 0.02576649 0.05481016 0.9981642 0.4401536 0.0840646 0.99484 -0.05679786 0 0 0 0 1 -0.9963823 0.08237874 0.02087539 0 0.02576261 0.05871671 0.9979422 0.4401536 0.08098345 0.9948697 -0.0606268 0 0 0 0 1 -0.9969047 0.07584047 0.0207085 0 0.02575188 0.06613749 0.9974781 0.4401536 0.0742796 0.994924 -0.06788599 0 0 0 0 1 -0.9976488 0.06526017 0.02091974 0 0.0257402 0.07392185 0.9969318 0.4401536 0.06351345 0.9951263 -0.075428 0 0 0 0 1 -0.9981359 0.05733317 0.02091646 0 0.02571988 0.0843662 0.9961027 0.4401536 0.05534511 0.9947839 -0.08568364 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_RightFoot_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightFoot_pose_matrix-interpolation"> + <Name_array id="_6_15_t_RightFoot_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_RightFoot_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_RightFoot_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_RightFoot_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_RightFoot_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_RightFoot_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_RightFoot_pose_matrix-sampler" target="RightFoot/transform"/> + </animation> + <animation id="_6_15_t_RightToeBase_pose_matrix"> + <source id="_6_15_t_RightToeBase_pose_matrix-input"> + <float_array id="_6_15_t_RightToeBase_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_RightToeBase_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightToeBase_pose_matrix-output"> + <float_array id="_6_15_t_RightToeBase_pose_matrix-output-array" count="2224">0.9999188 -0.01221972 0.0036242 0 0.008754372 0.8650994 0.5015237 0.1452782 -0.009263753 -0.5014513 0.8651363 0 0 0 0 1 0.9999148 -0.01260656 0.003394842 0 0.009031772 0.8557033 0.5173878 0.1452782 -0.009427428 -0.5173131 0.8557443 0 0 0 0 1 0.9999133 -0.01274001 0.003313124 0 0.00912708 0.8523361 0.5229147 0.1452782 -0.00948584 -0.5228391 0.8523786 0 0 0 0 1 0.9999156 -0.0125277 0.00344181 0 0.008975386 0.8576428 0.5141672 0.1452782 -0.009393215 -0.514093 0.857683 0 0 0 0 1 0.999917 -0.01238787 0.003526091 0 0.008874535 0.8610529 0.5084379 0.1452782 -0.009334683 -0.5083644 0.8610914 0 0 0 0 1 0.9999189 -0.01219838 0.003636837 0 0.008738636 0.865592 0.5006735 0.1452782 -0.009255468 -0.5006012 0.8656286 0 0 0 0 1 0.9999248 -0.01159924 0.003972172 0 0.008309304 0.8793566 0.476091 0.1452782 -0.009015262 -0.4760223 0.879387 0 0 0 0 1 0.9999349 -0.01046168 0.004549086 0 0.007494866 0.9030838 0.4293987 0.1452782 -0.008600413 -0.4293367 0.9031035 0 0 0 0 1 0.9999477 -0.0087682 0.005277395 0 0.006281793 0.9329871 0.3598546 0.1452782 -0.008079051 -0.3598027 0.9329934 0 0 0 0 1 0.99996 -0.006642222 0.005987524 0 0.004758477 0.9621112 0.2726151 0.1452782 -0.007571399 -0.2725758 0.9621044 0 0 0 0 1 0.9999702 -0.00405997 0.006569087 0 0.002908647 0.9860143 0.1666346 0.1452782 -0.007153809 -0.1666106 0.9859968 0 0 0 0 1 0.9999744 -0.002212762 0.00680983 0 0.001585304 0.9958673 0.09080576 0.1452782 -0.006982624 -0.09079265 0.9958453 0 0 0 0 1 0.9999758 -9.93008e-4 0.006890594 0 7.11382e-4 0.9991689 0.04075306 0.1452782 -0.006925344 -0.04074722 0.9991455 0 0 0 0 1 0.9999757 -0.001067399 0.006886959 0 7.64666e-4 0.9990394 0.04381328 0.1452782 -0.006927073 -0.04380697 0.9990161 0 0 0 0 1 0.9999752 -0.001645624 0.006854653 0 0.001178801 0.9977145 0.06755888 0.1452782 -0.006950139 -0.06754916 0.9976918 0 0 0 0 1 0.9999753 -0.001518487 0.006862998 0 0.001087725 0.9980544 0.06233751 0.1452782 -0.006944298 -0.06232857 0.9980316 0 0 0 0 1 0.9999744 -0.002161562 0.006814539 0 0.001548588 0.9960566 0.08870589 0.1452782 -0.006979405 -0.08869308 0.9960345 0 0 0 0 1 0.9999721 -0.003319859 0.00668329 0 0.002378225 0.9906696 0.136264 0.1452782 -0.007073342 -0.1362444 0.9906499 0 0 0 0 1 0.9999734 -0.002761483 0.00675261 0 0.001978516 0.9935567 0.1133183 0.1452782 -0.007022023 -0.113302 0.9935358 0 0 0 0 1 0.9999744 -0.002231061 0.006807267 0 0.001598179 0.995795 0.09159475 0.1452782 -0.006982982 -0.09158158 0.995773 0 0 0 0 1 0.9999748 -0.001932024 0.006833016 0 0.001384198 0.9968509 0.07928681 0.1452782 -0.006964683 -0.07927536 0.9968284 0 0 0 0 1 0.9999753 -0.001558005 0.006860613 0 0.001115977 0.9979516 0.06396263 0.1452782 -0.006946206 -0.06395345 0.9979287 0 0 0 0 1 0.999975 -0.001763761 0.006846725 0 0.001263678 0.997377 0.07236933 0.1452782 -0.006956398 -0.0723589 0.9973544 0 0 0 0 1 0.999975 -0.001744389 0.006848037 0 0.00124973 0.9974339 0.07158249 0.1452782 -0.006955325 -0.07157218 0.9974111 0 0 0 0 1 0.9999748 -0.001902222 0.00683546 0 0.001362681 0.9969459 0.07808285 0.1452782 -0.006963133 -0.07807159 0.9969234 0 0 0 0 1 0.9999737 -0.002592504 0.006770908 0 0.001857519 0.9943234 0.1063829 0.1452782 -0.007008254 -0.1063675 0.9943022 0 0 0 0 1 0.999972 -0.003386259 0.006673753 0 0.002426207 0.9902967 0.138947 0.1452782 -0.007079482 -0.1389269 0.9902773 0 0 0 0 1 0.9999706 -0.003905057 0.006594955 0 0.002797901 0.9870749 0.1602346 0.1452782 -0.00713545 -0.1602115 0.9870569 0 0 0 0 1 0.9999697 -0.004224002 0.006541252 0 0.003026306 0.9848589 0.1733314 0.1452782 -0.007174372 -0.1733064 0.9848418 0 0 0 0 1 0.9999693 -0.004351556 0.006518006 0 0.003117799 0.9839235 0.1785623 0.1452782 -0.007190227 -0.1785365 0.9839069 0 0 0 0 1 0.999968 -0.004728734 0.006447196 0 0.003387749 0.9809846 0.1940553 0.1452782 -0.007242202 -0.1940274 0.9809693 0 0 0 0 1 0.9999659 -0.005333185 0.006319642 0 0.003820776 0.9757468 0.2188683 0.1452782 -0.007333636 -0.2188367 0.9757339 0 0 0 0 1 0.9999639 -0.005800008 0.006209373 0 0.004155039 0.9712393 0.2380689 0.1452782 -0.007411599 -0.2380346 0.9712284 0 0 0 0 1 0.9999621 -0.006196498 0.006109058 0 0.004438877 0.9670988 0.2543622 0.1452782 -0.007484197 -0.2543255 0.9670897 0 0 0 0 1 0.999958 -0.007031917 0.005874037 0 0.005037784 0.9574452 0.288571 0.1452782 -0.007653236 -0.2885292 0.9574404 0 0 0 0 1 0.9999539 -0.007769346 0.005638122 0 0.005566239 0.9477889 0.3188496 0.1452782 -0.007821023 -0.3188036 0.9477885 0 0 0 0 1 0.9999518 -0.008121311 0.005516588 0 0.005818367 0.9428012 0.3333044 0.1452782 -0.007907927 -0.3332563 0.9428031 0 0 0 0 1 0.9999387 -0.009993076 0.004766464 0 0.007158994 0.911987 0.4101563 0.1452782 -0.00844568 -0.410097 0.9120028 0 0 0 0 1 0.9999188 -0.01221746 0.003625035 0 0.008753061 0.865159 0.5014211 0.1452782 -0.009262323 -0.5013487 0.8651958 0 0 0 0 1 0.9999199 -0.0121091 0.003686547 0 0.008675336 0.8676944 0.4970221 0.1452782 -0.009217321 -0.4969504 0.86773 0 0 0 0 1 0.9999337 -0.0106092 0.004477798 0 0.007600963 0.9001848 0.4354415 0.1452782 -0.008650541 -0.4353786 0.9002059 0 0 0 0 1 0.9999405 -0.009765386 0.0048666 0 0.006996273 0.9161366 0.4008051 0.1452782 -0.008372485 -0.4007472 0.9161504 0 0 0 0 1 0.9999433 -0.009377539 0.005033493 0 0.006718218 0.9229521 0.3848558 0.1452782 -0.008254706 -0.3848003 0.922963 0 0 0 0 1 0.9999459 -0.009024143 0.005177199 0 0.006465196 0.9288686 0.3703528 0.1452782 -0.008151054 -0.3702993 0.9288767 0 0 0 0 1 0.999945 -0.009148597 0.005126297 0 0.006554484 0.926807 0.3754805 0.1452782 -0.008186221 -0.3754263 0.9268161 0 0 0 0 1 0.9999434 -0.009369134 0.005036473 0 0.006712019 0.9230791 0.3845512 0.1452782 -0.008252024 -0.3844957 0.9230899 0 0 0 0 1 0.9999446 -0.009199559 0.005106031 0 0.006590962 0.9259618 0.3775595 0.1452782 -0.00820142 -0.377505 0.9259712 0 0 0 0 1 0.9999469 -0.008877933 0.005235314 0 0.006360173 0.9312339 0.3643664 0.1452782 -0.008110165 -0.3643138 0.9312409 0 0 0 0 1 0.9999476 -0.008784234 0.005271732 0 0.006293177 0.9327349 0.3605076 0.1452782 -0.008083939 -0.3604555 0.9327414 0 0 0 0 1 0.9999414 -0.009649693 0.004917144 0 0.006913542 0.9182139 0.3960242 0.1452782 -0.008336544 -0.3959671 0.9182268 0 0 0 0 1 0.9999248 -0.01160991 0.003964602 0 0.008317708 0.8791106 0.476545 0.1452782 -0.009017944 -0.4764763 0.8791411 0 0 0 0 1 0.9999169 -0.01240479 0.003516197 0 0.008886456 0.8606354 0.509144 0.1452782 -0.009342014 -0.5090705 0.8606742 0 0 0 0 1 0.9999296 -0.01108294 0.004243075 0 0.007940173 0.8905264 0.4548621 0.1452782 -0.008819818 -0.4547964 0.8905518 0 0 0 0 1 0.9999367 -0.01024961 0.004648566 0 0.007343351 0.90719 0.4206571 0.1452782 -0.008528709 -0.4205963 0.9072078 0 0 0 0 1 0.9999321 -0.01080065 0.004385888 0 0.007737398 0.8963429 0.4432936 0.1452782 -0.008719146 -0.4432295 0.8963658 0 0 0 0 1 0.9999294 -0.01110994 0.004229307 0 0.007959604 0.8899653 0.4559586 0.1452782 -0.008829593 -0.4558927 0.889991 0 0 0 0 1 0.9999226 -0.01182842 0.003844678 0 0.00847423 0.874188 0.4855136 0.1452782 -0.009103834 -0.4854435 0.8742207 0 0 0 0 1 0.999922 -0.01188588 0.003814458 0 0.008515417 0.8729203 0.4877883 0.1452782 -0.009127557 -0.4877179 0.8729536 0 0 0 0 1 0.9999289 -0.01115965 0.004204154 0 0.007994592 0.888893 0.4580449 0.1452782 -0.008848726 -0.4579787 0.8889191 0 0 0 0 1 0.9999334 -0.01064234 0.004462301 0 0.007624447 0.8995282 0.436796 0.1452782 -0.008662462 -0.4367329 0.8995495 0 0 0 0 1 0.9999278 -0.01128023 0.004140496 0 0.008081316 0.8863171 0.4630081 0.1452782 -0.008892655 -0.4629412 0.8863443 0 0 0 0 1 0.9999188 -0.01222032 0.00362271 0 0.008754909 0.8650636 0.5015857 0.1452782 -0.009263396 -0.5015133 0.8651004 0 0 0 0 1 0.9999222 -0.01187437 0.003820002 0 0.008506774 0.8731408 0.4873936 0.1452782 -0.009122908 -0.4873233 0.873174 0 0 0 0 1 0.9999348 -0.01047343 0.004543542 0 0.007503449 0.9028646 0.4298591 0.1452782 -0.008604347 -0.429797 0.9028846 0 0 0 0 1 0.9998841 -0.01513546 0.00163871 0 0.01084309 0.7835816 0.621194 0.1452782 -0.01068615 -0.6211043 0.783655 0 0 0 0 1 0.9999204 -0.01205009 0.003721535 0 0.008632838 0.8690983 0.4945638 0.1452782 -0.009193897 -0.4944924 0.8691333 0 0 0 0 1 0.9999377 -0.01012486 0.004706263 0 0.007253944 0.9095504 0.4155302 0.1452782 -0.008487761 -0.4154702 0.9095671 0 0 0 0 1 0.999924 -0.01169329 0.003920197 0 0.008377671 0.8772835 0.4798993 0.1452782 -0.009050726 -0.47983 0.8773148 0 0 0 0 1 0.9999169 -0.01240724 0.003513038 0 0.0088889 0.860566 0.5092612 0.1452782 -0.009341716 -0.5091876 0.8606048 0 0 0 0 1 0.9999065 -0.01336163 0.002919495 0 0.009572625 0.8361792 0.5483725 0.1452782 -0.009768426 -0.5482933 0.836229 0 0 0 0 1 0.9999059 -0.01341336 0.002884984 0 0.009609162 0.8347404 0.5505596 0.1452782 -0.009793102 -0.5504802 0.8347908 0 0 0 0 1 0.9999142 -0.0126692 0.00335741 0 0.009076356 0.854143 0.5199587 0.1452782 -0.009455204 -0.5198836 0.8541848 0 0 0 0 1 0.9999213 -0.01196688 0.003769397 0 0.008573174 0.8710497 0.4911198 0.1452782 -0.009160518 -0.4910488 0.8710839 0 0 0 0 1 0.9999267 -0.0113942 0.00408101 0 0.008162796 0.8838561 0.4676874 0.1452782 -0.008935987 -0.4676199 0.8838844 0 0 0 0 1 0.9999338 -0.01059734 0.004485428 0 0.007591962 0.9004367 0.4349204 0.1452782 -0.008647918 -0.4348577 0.9004576 0 0 0 0 1 0.9999402 -0.00979346 0.004855155 0 0.007016241 0.9156426 0.4019318 0.1452782 -0.008381903 -0.4018737 0.9156567 0 0 0 0 1 0.9999446 -0.009202718 0.005105495 0 0.006593108 0.925917 0.3776693 0.1452782 -0.00820285 -0.3776148 0.9259264 0 0 0 0 1 0.9999476 -0.008787751 0.00526911 0 0.006295919 0.9326692 0.3606775 0.1452782 -0.008083879 -0.3606254 0.9326757 0 0 0 0 1 0.9999485 -0.00864619 0.005324959 0 0.006194293 0.934912 0.3548254 0.1452782 -0.008046269 -0.3547742 0.9349174 0 0 0 0 1 0.9999521 -0.008064031 0.005535721 0 0.005777359 0.9436174 0.3309873 0.1452782 -0.007892727 -0.3309396 0.9436189 0 0 0 0 1 0.9999569 -0.007226943 0.005813658 0 0.005177497 0.9549881 0.2965984 0.1452782 -0.007695496 -0.2965556 0.9549846 0 0 0 0 1 0.9999612 -0.006399929 0.006054997 0 0.00458461 0.9648683 0.262694 0.1452782 -0.007523536 -0.262656 0.9648602 0 0 0 0 1 0.9999624 -0.00615257 0.006119549 0 0.004408061 0.9675854 0.2525054 0.1452782 -0.00747478 -0.252469 0.9675761 0 0 0 0 1 0.9999657 -0.005365192 0.006312549 0 0.003843486 0.9754454 0.2202075 0.1452782 -0.007339 -0.2201756 0.9754326 0 0 0 0 1 0.9999676 -0.004855632 0.006420791 0 0.003478705 0.9799333 0.1992946 0.1452782 -0.007259666 -0.1992658 0.9799185 0 0 0 0 1 0.999968 -0.004739642 0.006444871 0 0.003395378 0.9808892 0.1945373 0.1452782 -0.007243752 -0.1945093 0.9808739 0 0 0 0 1 0.9999669 -0.005059599 0.006378233 0 0.003625035 0.9781997 0.2076344 0.1452782 -0.007289707 -0.2076044 0.9781857 0 0 0 0 1 0.9999666 -0.005128443 0.006363809 0 0.003674387 0.9775984 0.2104464 0.1452782 -0.007300496 -0.2104161 0.9775847 0 0 0 0 1 0.9999675 -0.004879117 0.006416976 0 0.003495454 0.97974 0.2002425 0.1452782 -0.007264018 -0.2002136 0.9797253 0 0 0 0 1 0.9999681 -0.004718422 0.006448447 0 0.003380358 0.9810618 0.1936646 0.1452782 -0.007240116 -0.1936367 0.9810466 0 0 0 0 1 0.9999678 -0.004787981 0.006435215 0 0.003429949 0.9804911 0.1965332 0.1452782 -0.007250666 -0.1965049 0.980476 0 0 0 0 1 0.9999669 -0.005044758 0.006382763 0 0.003614187 0.9783304 0.2070175 0.1452782 -0.007288813 -0.2069876 0.9783164 0 0 0 0 1 0.9999674 -0.004902243 0.006412208 0 0.003512084 0.979548 0.2011795 0.1452782 -0.007267296 -0.2011505 0.9795333 0 0 0 0 1 0.9999685 -0.004570901 0.006477892 0 0.003274619 0.9822406 0.1875962 0.1452782 -0.007220327 -0.1875691 0.9822248 0 0 0 0 1 0.9999688 -0.004477441 0.006495654 0 0.003207862 0.9829717 0.1837289 0.1452782 -0.007207691 -0.1837024 0.9829555 0 0 0 0 1 0.9999697 -0.004226207 0.006540536 0 0.003027617 0.9848343 0.1734704 0.1452782 -0.007174491 -0.1734454 0.9848173 0 0 0 0 1 0.9999706 -0.003905296 0.00659579 0 0.002797722 0.9870678 0.1602786 0.1452782 -0.007136404 -0.1602556 0.9870498 0 0 0 0 1 0.9999711 -0.003723919 0.006624281 0 0.002667725 0.9882472 0.1528407 0.1452782 -0.007115602 -0.1528187 0.9882286 0 0 0 0 1 0.9999715 -0.003601014 0.006641626 0 0.002580046 0.9890165 0.1477819 0.1452782 -0.00710088 -0.1477606 0.9889976 0 0 0 0 1 0.9999712 -0.003711044 0.006625354 0 0.002658903 0.9883344 0.1522753 0.1452782 -0.007113218 -0.1522533 0.9883159 0 0 0 0 1 0.9999701 -0.004071116 0.006568133 0 0.002916276 0.9859327 0.1671168 0.1452782 -0.007156074 -0.1670927 0.9859152 0 0 0 0 1 0.9999691 -0.004403591 0.006508648 0 0.003154993 0.9835322 0.1807053 0.1452782 -0.007197201 -0.1806793 0.9835157 0 0 0 0 1 0.9999694 -0.004291594 0.006529748 0 0.003074407 0.9843608 0.1761363 0.1452782 -0.007183492 -0.1761109 0.9843441 0 0 0 0 1 0.9999693 -0.004370212 0.006514787 0 0.003130972 0.98378 0.1793516 0.1452782 -0.007192969 -0.1793257 0.9837635 0 0 0 0 1 0.9999688 -0.004481256 0.006494641 0 0.003210604 0.9829424 0.1838855 0.1452782 -0.00720787 -0.1838589 0.9829262 0 0 0 0 1 0.9999681 -0.004727303 0.006447315 0 0.003386914 0.9809994 0.1939807 0.1452782 -0.007241845 -0.1939527 0.9809841 0 0 0 0 1 0.9999678 -0.004797458 0.006432354 0 0.003436923 0.9804123 0.1969258 0.1452782 -0.007251083 -0.1968974 0.9803973 0 0 0 0 1 0.9999668 -0.005089282 0.006371617 0 0.003646075 0.9779308 0.2088969 0.1452782 -0.007294178 -0.2088667 0.9779168 0 0 0 0 1 0.9999656 -0.005391299 0.006306469 0 0.003862261 0.9752041 0.2212729 0.1452782 -0.007343053 -0.2212409 0.9751915 0 0 0 0 1 0.9999657 -0.00537163 0.006309986 0 0.003848254 0.9753824 0.2204861 0.1452782 -0.00733906 -0.2204543 0.9753696 0 0 0 0 1 0.9999653 -0.005453348 0.00629276 0 0.003906905 0.9746308 0.2237842 0.1452782 -0.007353544 -0.2237519 0.9746184 0 0 0 0 1 0.9999648 -0.005572557 0.006263196 0 0.003992319 0.9734812 0.2287317 0.1452782 -0.007371723 -0.2286987 0.9734693 0 0 0 0 1 0.9999629 -0.006017625 0.00615561 0 0.004310905 0.9690092 0.2469869 0.1452782 -0.007451117 -0.2469512 0.9689992 0 0 0 0 1 0.9999619 -0.006256282 0.00609368 0 0.004481792 0.9664577 0.2567861 0.1452782 -0.00749582 -0.256749 0.966449 0 0 0 0 1 0.9999626 -0.00609833 0.00613451 0 0.004368722 0.9681556 0.2503105 0.1452782 -0.00746566 -0.2502744 0.9681462 0 0 0 0 1 0.9999644 -0.005674123 0.006239533 0 0.004065275 0.9725014 0.2328612 0.1452782 -0.007389247 -0.2328276 0.9724899 0 0 0 0 1 0.999964 -0.005779922 0.006213784 0 0.004140853 0.9714413 0.2372435 0.1452782 -0.007407605 -0.2372093 0.9714303 0 0 0 0 1 0.9999631 -0.005990862 0.006161093 0 0.004292011 0.9692868 0.2458953 0.1452782 -0.007445037 -0.2458599 0.9692768 0 0 0 0 1 0.9999622 -0.006180822 0.006112277 0 0.004428267 0.96728 0.2536725 0.1452782 -0.007480204 -0.2536359 0.9672708 0 0 0 0 1 0.9999617 -0.006292641 0.006082534 0 0.004508316 0.9660638 0.2582637 0.1452782 -0.007501304 -0.2582265 0.9660553 0 0 0 0 1 0.9999626 -0.00610584 0.006131708 0 0.004374265 0.9680738 0.2506269 0.1452782 -0.007466256 -0.2505907 0.9680643 0 0 0 0 1 0.999963 -0.006019294 0.006154358 0 0.004312515 0.9689987 0.2470279 0.1452782 -0.00745052 -0.2469922 0.9689888 0 0 0 0 1 0.999961 -0.006433844 0.006045341 0 0.004609048 0.9644872 0.264089 0.1452782 -0.007529735 -0.2640509 0.9644793 0 0 0 0 1 0.9999559 -0.007427752 0.005749464 0 0.005321264 0.952373 0.3048888 0.1452782 -0.007740259 -0.3048447 0.9523706 0 0 0 0 1 0.9999473 -0.008813142 0.005260288 0 0.00631392 0.9322721 0.3617023 0.1452782 -0.008091807 -0.3616501 0.9322788 0 0 0 0 1 0.9999411 -0.0096789 0.004905641 0 0.006933748 0.9176829 0.3972527 0.1452782 -0.008346855 -0.3971954 0.9176961 0 0 0 0 1 0.9999422 -0.00953859 0.004965543 0 0.006833672 0.9201684 0.3914629 0.1452782 -0.008303165 -0.3914064 0.9201804 0 0 0 0 1 0.9999423 -0.00953114 0.004967749 0 0.006828725 0.9202985 0.3911573 0.1452782 -0.008300006 -0.3911008 0.9203104 0 0 0 0 1 0.9999412 -0.009665489 0.004911124 0 0.006924569 0.9179321 0.3966769 0.1452782 -0.008342146 -0.3966196 0.9179452 0 0 0 0 1 0.9999397 -0.009851992 0.004829943 0 0.007057964 0.9145817 0.4043393 0.1452782 -0.008400917 -0.404281 0.9145963 0 0 0 0 1 0.9999368 -0.01023638 0.004655301 0 0.007333576 0.9074402 0.4201169 0.1452782 -0.008524894 -0.4200562 0.907458 0 0 0 0 1 0.9999311 -0.01091271 0.004328727 0 0.007818162 0.8940483 0.4479022 0.1452782 -0.008757948 -0.4478374 0.8940721 0 0 0 0 1 0.9999241 -0.01167291 0.003932476 0 0.008362531 0.8777423 0.4790597 0.1452782 -0.009043753 -0.4789906 0.8777735 0 0 0 0 1 0.9999161 -0.0124759 0.003473877 0 0.008937776 0.8589176 0.5120356 0.1452782 -0.009371876 -0.5119617 0.8589571 0 0 0 0 1 0.9999054 -0.01345914 0.002854585 0 0.009642601 0.8335273 0.552394 0.1452782 -0.009814143 -0.5523142 0.8335782 0 0 0 0 1 0.9998987 -0.01401555 0.002474427 0 0.01004117 0.8179187 0.575246 0.1452782 -0.01008629 -0.5751629 0.8179766 0 0 0 0 1 0.9999011 -0.01382339 0.002609431 0 0.009903192 0.8234312 0.5673294 0.1452782 -0.009991168 -0.5672475 0.8234866 0 0 0 0 1 0.9999032 -0.0136488 0.00272715 0 0.009778857 0.8283198 0.5601701 0.1452782 -0.009904623 -0.5600891 0.8283731 0 0 0 0 1 0.9998972 -0.01414328 0.002384662 0 0.01013261 0.8142254 0.5804603 0.1452782 -0.01015126 -0.5803765 0.814285 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_RightToeBase_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightToeBase_pose_matrix-interpolation"> + <Name_array id="_6_15_t_RightToeBase_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_RightToeBase_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_RightToeBase_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_RightToeBase_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_RightToeBase_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_RightToeBase_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_RightToeBase_pose_matrix-sampler" target="RightToeBase/transform"/> + </animation> + <animation id="_6_15_t_LowerBack_pose_matrix"> + <source id="_6_15_t_LowerBack_pose_matrix-input"> + <float_array id="_6_15_t_LowerBack_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_LowerBack_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LowerBack_pose_matrix-output"> + <float_array id="_6_15_t_LowerBack_pose_matrix-output-array" count="2224">0.9970235 -0.06305515 0.04436582 0 0.07268923 0.9605947 -0.2682799 0 -0.0257011 0.2707062 0.9623188 0 0 0 0 1 0.9976991 -0.0520116 0.04349005 0 0.06192916 0.9601986 -0.2723665 0 -0.02759283 0.2744331 0.9612102 0 0 0 0 1 0.9980363 -0.04535502 0.04320245 0 0.05563014 0.9588088 -0.2785518 0 -0.02878916 0.2804082 0.9594491 0 0 0 0 1 0.9982529 -0.0398094 0.04366213 0 0.05040699 0.9593173 -0.2777939 0 -0.03082704 0.2795094 0.959648 0 0 0 0 1 0.9984211 -0.03571116 0.0433579 0 0.04614174 0.9616119 -0.270506 0 -0.03203338 0.2720795 0.9617415 0 0 0 0 1 0.9984363 -0.03663086 0.0422278 0 0.04666465 0.9620687 -0.2687867 0 -0.03078013 0.270337 0.9622736 0 0 0 0 1 0.9981935 -0.04372024 0.04121035 0 0.05343466 0.9596007 -0.2762452 0 -0.02746796 0.2779483 0.9602033 0 0 0 0 1 0.998157 -0.04412895 0.04165518 0 0.05394178 0.9596672 -0.2759152 0 -0.02779924 0.2776536 0.960279 0 0 0 0 1 0.9981789 -0.04187875 0.04341834 0 0.052329 0.959199 -0.2778475 0 -0.03001087 0.2796135 0.9596436 0 0 0 0 1 0.9982367 -0.0391196 0.04464453 0 0.05019992 0.9577335 -0.2832431 0 -0.03167718 0.2849848 0.9580085 0 0 0 0 1 0.9985988 -0.0276044 0.04514855 0 0.03936594 0.9576693 -0.2851665 0 -0.03536552 0.2865442 0.9574141 0 0 0 0 1 0.9988156 -0.01600772 0.04594808 0 0.02858245 0.9572556 -0.2878279 0 -0.03937655 0.2888002 0.9565793 0 0 0 0 1 0.9989576 -0.006295382 0.04521292 0 0.01922333 0.9563568 -0.2915688 0 -0.04140418 0.292134 0.9554808 0 0 0 0 1 0.9990499 0.003230869 0.04346072 0 0.009702086 0.9557328 -0.2940761 0 -0.04248696 0.2942183 0.9547935 0 0 0 0 1 0.9990545 0.01583808 0.040488 0 -0.003183424 0.9554327 -0.2951923 0 -0.04335886 0.2947843 0.9545797 0 0 0 0 1 0.9989099 0.02803349 0.03732645 0 -0.01571762 0.9548934 -0.2965326 0 -0.04395562 0.2956227 0.9542931 0 0 0 0 1 0.9987398 0.0359205 0.03505176 0 -0.02379995 0.953847 -0.2993486 0 -0.04418677 0.2981371 0.9534997 0 0 0 0 1 0.9987125 0.0393868 0.03196907 0 -0.02800655 0.953562 -0.2998921 0 -0.04229629 0.2986107 0.9534374 0 0 0 0 1 0.998804 0.03923803 0.02917158 0 -0.02858144 0.9526354 -0.3027691 0 -0.03966999 0.3015732 0.9526174 0 0 0 0 1 0.9987517 0.04194629 0.02711987 0 -0.03172433 0.952067 -0.3042399 0 -0.03858166 0.3029997 0.9522094 0 0 0 0 1 0.9985388 0.04782998 0.02515101 0 -0.03796154 0.9520882 -0.3034583 0 -0.03846037 0.3020601 0.9525128 0 0 0 0 1 0.9986153 0.04747337 0.02266615 0 -0.03831887 0.9516175 -0.3048867 0 -0.03604352 0.303596 0.9521189 0 0 0 0 1 0.9987263 0.04638773 0.01985317 0 -0.03808093 0.9510874 -0.3065658 0 -0.03310298 0.3054193 0.9516424 0 0 0 0 1 0.9987515 0.04689985 0.01719939 0 -0.039366 0.9508973 -0.3069932 0 -0.03075277 0.3059328 0.9515563 0 0 0 0 1 0.9983443 0.0556128 0.01469641 0 -0.04845851 0.9507864 -0.3060346 0 -0.03099256 0.3048157 0.951907 0 0 0 0 1 0.9976919 0.06671726 0.01263046 0 -0.05970388 0.9505265 -0.3048523 0 -0.03234452 0.3033946 0.9523159 0 0 0 0 1 0.9972348 0.0736162 0.01016855 0 -0.06703108 0.9501085 -0.3046321 0 -0.03208708 0.3031081 0.9524158 0 0 0 0 1 0.9973433 0.07251626 0.00692141 0 -0.06695753 0.9500021 -0.3049799 0 -0.02869135 0.3037062 0.9523337 0 0 0 0 1 0.9972985 0.0733664 0.003625631 0 -0.06871175 0.9492012 -0.3070765 0 -0.02597057 0.3059977 0.951678 0 0 0 0 1 0.9971904 0.07490545 7.93074e-4 0 -0.0710439 0.9490342 -0.3070618 0 -0.02375322 0.3061427 0.9516893 0 0 0 0 1 0.9971904 0.07490187 -0.00107938 0 -0.07162827 0.9491919 -0.3064378 0 -0.02192819 0.3056541 0.9518901 0 0 0 0 1 0.997272 0.07372283 -0.003678798 0 -0.07130891 0.9493467 -0.3060327 0 -0.01906907 0.3054602 0.9520139 0 0 0 0 1 0.9965667 0.08253979 -0.006479918 0 -0.08053427 0.9482369 -0.3071825 0 -0.01921027 0.3066497 0.9516286 0 0 0 0 1 0.9956709 0.09262907 -0.007697761 0 -0.09049081 0.9470966 -0.3079278 0 -0.02123248 0.3072913 0.9513787 0 0 0 0 1 0.9952713 0.09672164 -0.008934915 0 -0.09475749 0.9465889 -0.3082056 0 -0.02135246 0.3075949 0.9512779 0 0 0 0 1 0.995549 0.09367239 -0.01038599 0 -0.09230351 0.9468261 -0.3082216 0 -0.01903808 0.3078083 0.951258 0 0 0 0 1 0.9954474 0.09459054 -0.01171016 0 -0.09362065 0.947322 -0.3062945 0 -0.01787918 0.3059964 0.9518648 0 0 0 0 1 0.9950209 0.09889149 -0.01240915 0 -0.09795814 0.9473936 -0.3047125 0 -0.01837706 0.3044109 0.9523636 0 0 0 0 1 0.9949038 0.09992015 -0.0135104 0 -0.09922564 0.9464472 -0.307233 0 -0.01791185 0.3070079 0.9515385 0 0 0 0 1 0.9947705 0.1011172 -0.01438254 0 -0.1006259 0.9461889 -0.3075727 0 -0.01749229 0.3074116 0.9514159 0 0 0 0 1 0.994199 0.1064128 -0.01564222 0 -0.1061025 0.9465006 -0.3047606 0 -0.01762503 0.3046523 0.9523006 0 0 0 0 1 0.9937361 0.1105028 -0.01666635 0 -0.1103568 0.946852 -0.3021471 0 -0.01760751 0.3020937 0.9531157 0 0 0 0 1 0.9936214 0.1115735 -0.01637226 0 -0.1112589 0.9462592 -0.3036694 0 -0.01838904 0.3035539 0.9526368 0 0 0 0 1 0.9935786 0.1118717 -0.01692163 0 -0.1116545 0.9452803 -0.306559 0 -0.01829952 0.3064799 0.9517013 0 0 0 0 1 0.9936083 0.1115213 -0.017479 0 -0.1115692 0.9466488 -0.3023381 0 -0.01717066 0.3023558 0.9530405 0 0 0 0 1 0.9934304 0.1130949 -0.01748317 0 -0.1131428 0.9477326 -0.2983317 0 -0.01717031 0.2983499 0.9543021 0 0 0 0 1 0.9936177 0.1113979 -0.01773333 0 -0.1115999 0.947942 -0.2982475 0 -0.01641392 0.298323 0.9543239 0 0 0 0 1 0.9939532 0.1083306 -0.01793122 0 -0.1087796 0.9491962 -0.295286 0 -0.01496821 0.295451 0.9552407 0 0 0 0 1 0.9942313 0.1058164 -0.01752197 0 -0.1063096 0.9505392 -0.2918453 0 -0.01422661 0.2920244 0.9563051 0 0 0 0 1 0.9934783 0.1126027 -0.01793009 0 -0.1129598 0.950577 -0.2892118 0 -0.015522 0.289351 0.9570972 0 0 0 0 1 0.993231 0.1146929 -0.01837837 0 -0.115109 0.9506835 -0.2880122 0 -0.01556092 0.2881781 0.9574505 0 0 0 0 1 0.9930337 0.1164238 -0.01815301 0 -0.1167613 0.9515671 -0.2844066 0 -0.01583784 0.2845448 0.9585319 0 0 0 0 1 0.9930216 0.1165096 -0.01826614 0 -0.1169727 0.9533282 -0.2783574 0 -0.01501762 0.2785515 0.9603039 0 0 0 0 1 0.9925566 0.1203069 -0.01891285 0 -0.1208079 0.9530252 -0.2777563 0 -0.01539152 0.2779737 0.9604654 0 0 0 0 1 0.9925066 0.1206697 -0.01921826 0 -0.1212286 0.9527425 -0.2785416 0 -0.0153014 0.2787841 0.9602319 0 0 0 0 1 0.9931613 0.1152198 -0.01884061 0 -0.1159058 0.9536842 -0.277583 0 -0.01401501 0.2778684 0.960517 0 0 0 0 1 0.9930897 0.1156274 -0.02007728 0 -0.1166079 0.9528928 -0.2799965 0 -0.01324373 0.2804028 0.9597911 0 0 0 0 1 0.9928728 0.1171333 -0.02198559 0 -0.1185643 0.9520929 -0.2818896 0 -0.01208633 0.2824872 0.959195 0 0 0 0 1 0.9929763 0.1159734 -0.02341693 0 -0.117865 0.9524139 -0.2810974 0 -0.01029717 0.2818831 0.9593936 0 0 0 0 1 0.9925693 0.1192803 -0.02404928 0 -0.1211959 0.951493 -0.2827944 0 -0.01084899 0.2836077 0.9588791 0 0 0 0 1 0.9927968 0.1172199 -0.02478057 0 -0.1194233 0.9515751 -0.2832722 0 -0.00962454 0.2841911 0.9587194 0 0 0 0 1 0.9927353 0.1174647 -0.02605468 0 -0.1200381 0.952109 -0.2812105 0 -0.008225321 0.2822951 0.9592924 0 0 0 0 1 0.9925255 0.1186767 -0.02844411 0 -0.1218685 0.9515759 -0.2822258 0 -0.00642687 0.2835828 0.9589263 0 0 0 0 1 0.9917359 0.124494 -0.03100413 0 -0.1281473 0.9495692 -0.286176 0 -0.006186544 0.2877841 0.9576753 0 0 0 0 1 0.9912383 0.1281109 -0.03216046 0 -0.1319466 0.9492146 -0.2856251 0 -0.006064474 0.287366 0.9578017 0 0 0 0 1 0.9913527 0.127094 -0.03266453 0 -0.1311427 0.9507613 -0.2808108 0 -0.004633188 0.2826662 0.9592072 0 0 0 0 1 0.9909699 0.1299398 -0.03308123 0 -0.1340029 0.951129 -0.2782028 0 -0.004685044 0.2801236 0.9599525 0 0 0 0 1 0.9910218 0.1291643 -0.03453141 0 -0.1336631 0.9510247 -0.2787225 0 -0.003160715 0.2808356 0.9597507 0 0 0 0 1 0.9914045 0.1255504 -0.03680008 0 -0.1308324 0.9510718 -0.2799026 0 -1.42312e-4 0.2823114 0.9593228 0 0 0 0 1 0.9926823 0.1141507 -0.03938972 0 -0.1206318 0.9521966 -0.2806594 0 0.005469262 0.2833573 0.9589989 0 0 0 0 1 0.9934371 0.1070097 -0.04039484 0 -0.1140829 0.9524539 -0.2825187 0 0.008241951 0.2852729 0.958411 0 0 0 0 1 0.9934536 0.1065398 -0.04122245 0 -0.1138666 0.9525392 -0.2823184 0 0.009187877 0.2851641 0.9584348 0 0 0 0 1 0.9946844 0.09450179 -0.04089397 0 -0.1022539 0.9532949 -0.2842059 0 0.01212602 0.2868767 0.9578908 0 0 0 0 1 0.9957569 0.08244788 -0.04087269 0 -0.09073537 0.9537041 -0.2867327 0 0.01533991 0.2892247 0.9571384 0 0 0 0 1 0.9958993 0.08131748 -0.03965085 0 -0.08931154 0.953593 -0.287548 0 0.01442807 0.2899101 0.9569452 0 0 0 0 1 0.9960218 0.08053076 -0.03815001 0 -0.08811885 0.9537944 -0.2872478 0 0.013255 0.2894668 0.9570963 0 0 0 0 1 0.9962516 0.07828933 -0.0367909 0 -0.08551865 0.9553756 -0.2827441 0 0.01301324 0.2848305 0.9584896 0 0 0 0 1 0.9963028 0.07831215 -0.03532785 0 -0.08505916 0.9569498 -0.2775107 0 0.01207453 0.2794896 0.9600728 0 0 0 0 1 0.9958848 0.08399456 -0.0340358 0 -0.09015727 0.9564354 -0.2776746 0 0.009229898 0.2796005 0.9600721 0 0 0 0 1 0.9959764 0.08307915 -0.03359836 0 -0.08918321 0.9556659 -0.2806229 0 0.008794903 0.2824902 0.9592299 0 0 0 0 1 0.9966822 0.07432419 -0.03317469 0 -0.08070057 0.9554153 -0.2840229 0 0.01058584 0.2857578 0.9582434 0 0 0 0 1 0.9970723 0.06913155 -0.03267717 0 -0.07559806 0.9554023 -0.2854672 0 0.01148504 0.2871018 0.9578313 0 0 0 0 1 0.9972428 0.06690758 -0.03209698 0 -0.07327997 0.956084 -0.2837845 0 0.01170009 0.285354 0.9583508 0 0 0 0 1 0.9977332 0.05892592 -0.03249835 0 -0.06573843 0.9567013 -0.2835511 0 0.01438271 0.2850447 0.9584063 0 0 0 0 1 0.9984817 0.04424625 -0.03281277 0 -0.05178976 0.9569731 -0.2855179 0 0.01876783 0.2867838 0.9578116 0 0 0 0 1 0.9988394 0.03567367 -0.03236305 0 -0.04350346 0.9565649 -0.2882556 0 0.02067422 0.289329 0.9570065 0 0 0 0 1 0.9988389 0.03567999 -0.03236901 0 -0.0435661 0.9557926 -0.2907965 0 0.02056241 0.2918691 0.9562372 0 0 0 0 1 0.9990671 0.02928799 -0.03173649 0 -0.03728902 0.955733 -0.2918632 0 0.02178347 0.2927744 0.9559334 0 0 0 0 1 0.9993748 0.01862186 -0.03005367 0 -0.02665156 0.9553433 -0.2942942 0 0.02323126 0.2949112 0.9552423 0 0 0 0 1 0.9993337 0.02221792 -0.02895581 0 -0.02976965 0.9551876 -0.2945004 0 0.02111506 0.2951662 0.9552126 0 0 0 0 1 0.9993457 0.02234989 -0.02843654 0 -0.02966833 0.9562423 -0.291068 0 0.02068686 0.2917213 0.9562798 0 0 0 0 1 0.9995632 0.01159501 -0.02718687 0 -0.0190289 0.9562991 -0.2917702 0 0.02261573 0.2921601 0.956102 0 0 0 0 1 0.9996353 0.00832349 -0.02569133 0 -0.01548564 0.9560495 -0.2927964 0 0.02212506 0.2930874 0.9558296 0 0 0 0 1 0.9996345 0.01057285 -0.02488416 0 -0.0174449 0.9553807 -0.294862 0 0.02065634 0.2951883 0.9552158 0 0 0 0 1 0.9997577 0.005811631 -0.02122896 0 -0.0118274 0.9552745 -0.2954838 0 0.01856225 0.2956632 0.9551119 0 0 0 0 1 0.9998557 -5.5942e-4 -0.01698017 0 -0.004554629 0.9540455 -0.2996274 0 0.01636749 0.2996615 0.9539052 0 0 0 0 1 0.9998803 -0.001891076 -0.01535826 0 -0.002846539 0.9530895 -0.3026756 0 0.01521021 0.302683 0.9529699 0 0 0 0 1 0.9998859 -0.004159152 -0.0145235 0 -3.98352e-4 0.9537635 -0.3005581 0 0.01510208 0.3005295 0.953653 0 0 0 0 1 0.9998692 -0.009425103 -0.01314276 0 0.005089402 0.954717 -0.297472 0 0.01535129 0.2973662 0.9546401 0 0 0 0 1 0.9998874 -0.0112465 -0.009942591 0 0.007793426 0.9550038 -0.2964914 0 0.01282972 0.2963805 0.9549838 0 0 0 0 1 0.9999153 -0.01097834 -0.007006287 0 0.008388817 0.9544358 -0.2982985 0 0.009961843 0.2982145 0.9544469 0 0 0 0 1 0.9999071 -0.01274496 -0.004837155 0 0.01068907 0.953241 -0.3020223 0 0.008460223 0.3019425 0.9532886 0 0 0 0 1 0.9997617 -0.02152425 -0.003632366 0 0.01939135 0.9521604 -0.3049829 0 0.01002311 0.3048398 0.9523509 0 0 0 0 1 0.9995962 -0.0283485 -0.001952707 0 0.02639275 0.9517053 -0.3058766 0 0.01052957 0.3057015 0.9520692 0 0 0 0 1 0.9996454 -0.02659046 0.001395165 0 0.02576452 0.9527072 -0.3027958 0 0.006722211 0.3027244 0.9530545 0 0 0 0 1 0.9996626 -0.02538466 0.005490541 0 0.0258634 0.9537148 -0.2995985 0 0.002368748 0.2996394 0.9540497 0 0 0 0 1 0.9994643 -0.03192794 0.007190644 0 0.03261357 0.9533116 -0.3002223 0 0.002730488 0.300296 0.9538422 0 0 0 0 1 0.9991666 -0.03978073 0.009156882 0 0.04067522 0.9512835 -0.3056229 0 0.003447055 0.3057406 0.9521087 0 0 0 0 1 0.9988763 -0.04594206 0.01164031 0 0.0472902 0.9499345 -0.3088499 0 0.003131628 0.3090533 0.9510396 0 0 0 0 1 0.9984115 -0.05493074 0.01253944 0 0.05610257 0.9486336 -0.3113629 0 0.005208015 0.3115718 0.9502084 0 0 0 0 1 0.9981568 -0.05893188 0.01449424 0 0.06050813 0.9480161 -0.3124168 0 0.0046705 0.312718 0.9498345 0 0 0 0 1 0.9984163 -0.05360454 0.01707208 0 0.05625706 0.9501439 -0.3066949 0 2.19281e-4 0.3071697 0.9516547 0 0 0 0 1 0.9981416 -0.05814057 0.01824986 0 0.06093668 0.9506964 -0.3040775 0 3.2913e-4 0.3046245 0.9524725 0 0 0 0 1 0.9979695 -0.06010276 0.02108418 0 0.06367522 0.9494122 -0.3075096 0 -0.001535415 0.3082277 0.9513114 0 0 0 0 1 0.9979237 -0.06006902 0.02323919 0 0.06431108 0.9490615 -0.3084582 0 -0.003526628 0.3093123 0.950954 0 0 0 0 1 0.9977088 -0.06345963 0.02345317 0 0.06759476 0.9496182 -0.306033 0 -0.00285077 0.3069171 0.951732 0 0 0 0 1 0.9976069 -0.06491547 0.02380436 0 0.06907892 0.950502 -0.3029423 0 -0.002960443 0.3038617 0.9527116 0 0 0 0 1 0.9973081 -0.06926572 0.02406066 0 0.0733003 0.9503975 -0.3022776 0 -0.0019297 0.3032276 0.9529163 0 0 0 0 1 0.9971943 -0.07054567 0.02503752 0 0.07480955 0.9510712 -0.2997786 0 -0.002664387 0.3008105 0.9536802 0 0 0 0 1 0.9973048 -0.0688517 0.0253511 0 0.07328474 0.951492 -0.2988183 0 -0.003547251 0.2998707 0.9539733 0 0 0 0 1 0.9972999 -0.06911104 0.02483361 0 0.07336932 0.9522298 -0.2964379 0 -0.003160178 0.2974596 0.9547292 0 0 0 0 1 0.997094 -0.07163596 0.02591848 0 0.0760895 0.9531242 -0.2928563 0 -0.003724515 0.2939774 0.9558051 0 0 0 0 1 0.9968426 -0.0746749 0.02699434 0 0.07931286 0.9526938 -0.2934011 0 -0.003807604 0.2946157 0.9556083 0 0 0 0 1 0.9969508 -0.07339507 0.0265004 0 0.077937 0.9533643 -0.2915863 0 -0.003863573 0.2927625 0.9561774 0 0 0 0 1 0.996955 -0.07333946 0.02649384 0 0.07787448 0.953918 -0.2897864 0 -0.004020154 0.2909672 0.9567247 0 0 0 0 1 0.9968965 -0.07327079 0.02878791 0 0.07848542 0.9534502 -0.2911576 0 -0.006114482 0.2925134 0.9562419 0 0 0 0 1 0.996799 -0.07384222 0.03064405 0 0.07956224 0.9538457 -0.289566 0 -0.007847487 0.2910773 0.9566674 0 0 0 0 1 0.9966524 -0.07587808 0.03044027 0 0.08138787 0.9561318 -0.2814041 0 -0.007752537 0.2829395 0.9591065 0 0 0 0 1 0.9965339 -0.0775066 0.03021544 0 0.0828396 0.9577924 -0.2752661 0 -0.007605195 0.2768151 0.9608931 0 0 0 0 1 0.9964371 -0.07782006 0.03251296 0 0.08378869 0.9573833 -0.2763994 0 -0.009617924 0.2781388 0.9604928 0 0 0 0 1 0.9964821 -0.07574212 0.03586661 0 0.08278918 0.9561279 -0.2810081 0 -0.01300895 0.2829889 0.959035 0 0 0 0 1 0.996496 -0.0751639 0.03668951 0 0.08242732 0.9569578 -0.2782762 0 -0.01419401 0.2803253 0.9598001 0 0 0 0 1 0.9962657 -0.07806438 0.03688555 0 0.08522146 0.9576485 -0.2750394 0 -0.01385265 0.2771558 0.9607252 0 0 0 0 1 0.9964704 -0.07490825 0.0378865 0 0.08246666 0.9578644 -0.2751275 0 -0.01568078 0.2772809 0.960661 0 0 0 0 1 0.9969213 -0.06864488 0.0378921 0 0.0764476 0.9583581 -0.2751463 0 -0.01742678 0.277196 0.9606554 0 0 0 0 1 0.9967701 -0.07063931 0.03820395 0 0.07844698 0.9582672 -0.2749002 0 -0.01719087 0.2770093 0.9607135 0 0 0 0 1 0.9965166 -0.07399243 0.03846901 0 0.08175289 0.9578424 -0.2754172 0 -0.01646846 0.2776027 0.9605548 0 0 0 0 1 0.9966078 -0.07257592 0.03880399 0 0.08044469 0.9585852 -0.2732092 0 -0.01736855 0.275404 0.9611716 0 0 0 0 1 0.9970195 -0.06643664 0.03922313 0 0.07457262 0.9602003 -0.2691736 0 -0.01977902 0.2712963 0.9622926 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_LowerBack_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LowerBack_pose_matrix-interpolation"> + <Name_array id="_6_15_t_LowerBack_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_LowerBack_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_LowerBack_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_LowerBack_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_LowerBack_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_LowerBack_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_LowerBack_pose_matrix-sampler" target="LowerBack/transform"/> + </animation> + <animation id="_6_15_t_Spine_pose_matrix"> + <source id="_6_15_t_Spine_pose_matrix-input"> + <float_array id="_6_15_t_Spine_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_Spine_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_Spine_pose_matrix-output"> + <float_array id="_6_15_t_Spine_pose_matrix-output-array" count="2224">0.9976751 -0.01598829 0.06624901 0 0.002777278 0.9808226 0.1948829 0.1342847 -0.06809437 -0.1942458 0.9785866 0 0 0 0 1 0.9978977 -0.01145315 0.06379157 0 -0.00155574 0.9797455 0.2002406 0.1342847 -0.06479293 -0.1999188 0.9776678 0 0 0 0 1 0.998003 -0.008607745 0.06257998 0 -0.00435537 0.9789384 0.2041097 0.1342847 -0.06301891 -0.2039746 0.9769458 0 0 0 0 1 0.9979955 -0.008823096 0.06266903 0 -0.003996491 0.9794716 0.2015427 0.1342847 -0.06316077 -0.2013892 0.9774729 0 0 0 0 1 0.9980262 -0.01007109 0.06198912 0 -0.00229752 0.9805421 0.1962954 0.1342847 -0.06275987 -0.1960504 0.9785834 0 0 0 0 1 0.9981215 -0.009133994 0.06058257 0 -0.002973377 0.9804374 0.1968089 0.1342847 -0.06119507 -0.1966193 0.9785683 0 0 0 0 1 0.9981701 -0.008808851 0.05982434 0 -0.003361463 0.9797195 0.2003454 0.1342847 -0.06037586 -0.2001799 0.9778972 0 0 0 0 1 0.9981321 -0.008789062 0.0604602 0 -0.003493607 0.9797684 0.2001042 0.1342847 -0.06099575 -0.1999416 0.9779074 0 0 0 0 1 0.9980224 -0.006655335 0.06250774 0 -0.00614798 0.9792778 0.2024282 0.1342847 -0.06255972 -0.2024121 0.9773002 0 0 0 0 1 0.9979532 -0.004936337 0.06375855 0 -0.008158445 0.9790416 0.2034968 0.1342847 -0.06342679 -0.2036005 0.9769974 0 0 0 0 1 0.9979941 -0.001959562 0.06327885 0 -0.01075804 0.9797348 0.2000097 0.1342847 -0.06238847 -0.2002893 0.9777483 0 0 0 0 1 0.9979974 -6.33765e-4 0.0632565 0 -0.01191687 0.9801633 0.1978327 0.1342847 -0.06212705 -0.1981903 0.9781926 0 0 0 0 1 0.9981106 -5.19434e-4 0.06144338 0 -0.01158076 0.9804533 0.1964113 0.1342847 -0.06034433 -0.1967517 0.9785946 0 0 0 0 1 0.9982981 4.28234e-4 0.05831801 0 -0.01178032 0.9808405 0.1944559 0.1342847 -0.0571174 -0.194812 0.9791762 0 0 0 0 1 0.9985749 0.003455281 0.05325877 0 -0.0136981 0.9810671 0.1931833 0.1342847 -0.05158293 -0.1936376 0.9797161 0 0 0 0 1 0.9988291 0.006032705 0.04800122 0 -0.01518958 0.9811274 0.1927655 0.1342847 -0.04593241 -0.1932688 0.9800701 0 0 0 0 1 0.9989933 0.006083488 0.04444921 0 -0.01447892 0.9814668 0.1910849 0.1342847 -0.042463 -0.1915361 0.9805666 0 0 0 0 1 0.9991792 0.005276083 0.0401659 0 -0.0127741 0.981935 0.1887872 0.1342847 -0.03844422 -0.1891453 0.9811963 0 0 0 0 1 0.9993233 0.003464221 0.03662258 0 -0.01031875 0.9819846 0.1886795 0.1342847 -0.03530919 -0.1889297 0.9813556 0 0 0 0 1 0.9994251 0.0030604 0.03377163 0 -0.009356021 0.982148 0.187877 0.1342847 -0.03259378 -0.1880849 0.9816118 0 0 0 0 1 0.999523 0.003571271 0.03068155 0 -0.00924611 0.9823413 0.1868692 0.1342847 -0.02947235 -0.1870637 0.9819056 0 0 0 0 1 0.9996193 0.002618014 0.02747035 0 -0.007732629 0.9821808 0.1877794 0.1342847 -0.02648925 -0.1879203 0.981827 0 0 0 0 1 0.9997131 6.33434e-4 0.02395111 0 -0.005118727 0.9822173 0.1876786 0.1342847 -0.02340632 -0.1877473 0.9819385 0 0 0 0 1 0.9997873 -0.001913368 0.02054125 0 -0.001938521 0.9825706 0.1858798 0.1342847 -0.02053892 -0.18588 0.9823578 0 0 0 0 1 0.9998645 -5.8033e-4 0.01646137 0 -0.002494394 0.9825187 0.1861472 0.1342847 -0.01628166 -0.186163 0.982384 0 0 0 0 1 0.999917 0.001739978 0.01277166 0 -0.0040735 0.9827229 0.1850383 0.1342847 -0.01222902 -0.185075 0.9826484 0 0 0 0 1 0.9999571 0.001962602 0.009064435 0 -0.003579676 0.9832915 0.1820031 0.1342847 -0.008555769 -0.1820278 0.9832562 0 0 0 0 1 0.9999877 -6.36587e-4 0.004930078 0 -2.72648e-4 0.98325 0.1822615 0.1342847 -0.004963517 -0.1822606 0.9832378 0 0 0 0 1 0.9999985 -0.001714944 5.21556e-4 0 0.001588404 0.9826449 0.1854894 0.1342847 -8.30616e-4 -0.1854883 0.9826461 0 0 0 0 1 0.9999936 -0.001224339 -0.003407657 0 0.001837253 0.9825214 0.1861411 0.1342847 0.003120183 -0.1861462 0.9825171 0 0 0 0 1 0.9999791 -0.002718329 -0.005896031 0 0.003769457 0.9824779 0.1863412 0.1342847 0.005286157 -0.1863595 0.9824674 0 0 0 0 1 0.9999446 -0.005129814 -0.009202361 0 0.006753385 0.9825 0.1861401 0.1342847 0.008086442 -0.1861919 0.9824801 0 0 0 0 1 0.999899 -0.004247963 -0.01357674 0 0.00671041 0.9823683 0.1868358 0.1342847 0.01254367 -0.1869081 0.9822974 0 0 0 0 1 0.9998669 -0.003559768 -0.01593321 0 0.006479382 0.9823127 0.1871356 0.1342847 0.0149852 -0.187214 0.982205 0 0 0 0 1 0.9998354 -0.003335595 -0.01783961 0 0.006603777 0.9824483 0.1864181 0.1342847 0.01690465 -0.1865053 0.9823086 0 0 0 0 1 0.9998022 -0.003760457 -0.01953828 0 0.007341504 0.9824098 0.1865935 0.1342847 0.01849287 -0.1867 0.982243 0 0 0 0 1 0.999761 -0.004387319 -0.02142655 0 0.008279323 0.9826852 0.1850979 0.1342847 0.02024346 -0.185231 0.9824864 0 0 0 0 1 0.9997281 -0.004775226 -0.02282804 0 0.008937478 0.9825323 0.1858769 0.1342847 0.02154171 -0.1860303 0.9823078 0 0 0 0 1 0.9996907 -0.005489885 -0.02425879 0 0.009957194 0.9821043 0.188075 0.1342847 0.0227921 -0.1882583 0.981855 0 0 0 0 1 0.9996651 -0.004649639 -0.02546197 0 0.009334564 0.9822952 0.1871073 0.1342847 0.02414113 -0.1872823 0.9820095 0 0 0 0 1 0.9996079 -0.003397047 -0.02779966 0 0.008535981 0.9823431 0.1868938 0.1342847 0.02667391 -0.1870578 0.9819867 0 0 0 0 1 0.9995523 -0.003408372 -0.0297302 0 0.00892204 0.9822514 0.1873571 0.1342847 0.02856391 -0.1875385 0.9818419 0 0 0 0 1 0.9995595 -0.004027307 -0.02940756 0 0.009543299 0.9817518 0.1899269 0.1342847 0.02810597 -0.1901239 0.9813577 0 0 0 0 1 0.999541 -0.004051506 -0.03002589 0 0.009750366 0.9813132 0.1921699 0.1342847 0.02868622 -0.1923745 0.9809022 0 0 0 0 1 0.9995113 -0.00346899 -0.03106915 0 0.009345293 0.9815359 0.19105 0.1342847 0.02983272 -0.191247 0.9810885 0 0 0 0 1 0.9994953 -0.003302633 -0.03159928 0 0.009305775 0.9813952 0.1917729 0.1342847 0.03037798 -0.1919701 0.9809305 0 0 0 0 1 0.9994805 -0.004655718 -0.03189587 0 0.01076787 0.9808947 0.1942412 0.1342847 0.03038209 -0.1944836 0.9804351 0 0 0 0 1 0.9994596 -0.007181406 -0.03208208 0 0.01327532 0.9809122 0.1939973 0.1342847 0.0300765 -0.1943184 0.9804772 0 0 0 0 1 0.9994659 -0.007963359 -0.03169721 0 0.01402521 0.9805237 0.1958992 0.1342847 0.02951985 -0.1962391 0.9801116 0 0 0 0 1 0.9994331 -0.005252301 -0.03326082 0 0.01174581 0.9800968 0.1981723 0.1342847 0.03155797 -0.1984506 0.9796027 0 0 0 0 1 0.9994012 -0.004846215 -0.03426498 0 0.01160776 0.9797284 0.1999941 0.1342847 0.03260117 -0.2002721 0.9791978 0 0 0 0 1 0.9993906 -0.005438446 -0.03448539 0 0.0122565 0.9795731 0.2007144 0.1342847 0.03268933 -0.2010147 0.9790426 0 0 0 0 1 0.9993656 -0.006394803 -0.03504091 0 0.01322227 0.9800639 0.1982423 0.1342847 0.03307461 -0.1985798 0.9795265 0 0 0 0 1 0.9993208 -0.006455361 -0.03628414 0 0.01349788 0.9802387 0.1973574 0.1342847 0.03429311 -0.1977131 0.9796599 0 0 0 0 1 0.9992949 -0.007886469 -0.03671056 0 0.01503515 0.9799344 0.1987525 0.1342847 0.03440648 -0.1991643 0.979362 0 0 0 0 1 0.9993152 -0.009456515 -0.03577816 0 0.0164178 0.9797381 0.1996089 0.1342847 0.03316563 -0.2000596 0.9792222 0 0 0 0 1 0.9992524 -0.0100845 -0.03732562 0 0.01739895 0.9793999 0.2011796 0.1342847 0.03452789 -0.2016786 0.978843 0 0 0 0 1 0.9991529 -0.01056909 -0.03977423 0 0.01833128 0.9795856 0.2001901 0.1342847 0.03684639 -0.2007496 0.9789494 0 0 0 0 1 0.999071 -0.01149857 -0.04153597 0 0.01953631 0.9798762 0.1986477 0.1342847 0.0384159 -0.1992746 0.9791905 0 0 0 0 1 0.9990203 -0.01198172 -0.04260504 0 0.02027231 0.9796151 0.1998587 0.1342847 0.03934186 -0.2005265 0.9788981 0 0 0 0 1 0.998956 -0.01459783 -0.04329043 0 0.02297288 0.9795681 0.1997968 0.1342847 0.03948932 -0.2005827 0.9788806 0 0 0 0 1 0.9988452 -0.01650488 -0.04512423 0 0.02517586 0.9796876 0.198943 0.1342847 0.04092407 -0.1998493 0.9789716 0 0 0 0 1 0.9986737 -0.01772272 -0.04834127 0 0.0270372 0.9795364 0.1994428 0.1342847 0.04381734 -0.2004854 0.9787163 0 0 0 0 1 0.9984883 -0.01780122 -0.05200564 0 0.0279141 0.9792446 0.2007509 0.1342847 0.04735261 -0.2018991 0.9782609 0 0 0 0 1 0.9983943 -0.01735556 -0.05392628 0 0.02784496 0.9793315 0.200336 0.1342847 0.04933476 -0.2015158 0.978242 0 0 0 0 1 0.9983149 -0.01906687 -0.05481004 0 0.02957969 0.9797691 0.1979334 0.1342847 0.04992717 -0.1992211 0.9786819 0 0 0 0 1 0.9982427 -0.019544 -0.05594414 0 0.03030055 0.9796463 0.1984315 0.1342847 0.05092728 -0.199778 0.9785168 0 0 0 0 1 0.9980809 -0.02210527 -0.05784511 0 0.03329801 0.9791573 0.2003552 0.1342847 0.0522105 -0.2018968 0.9780141 0 0 0 0 1 0.997857 -0.02522307 -0.06037855 0 0.03689408 0.9789404 0.2007847 0.1342847 0.05404257 -0.202582 0.977773 0 0 0 0 1 0.9976164 -0.02907228 -0.06258392 0 0.04112559 0.9787483 0.2008997 0.1342847 0.05541324 -0.2029947 0.9776106 0 0 0 0 1 0.9975579 -0.02993667 -0.06310361 0 0.04213994 0.9784869 0.2019593 0.1342847 0.05570006 -0.2041252 0.9773589 0 0 0 0 1 0.9974539 -0.03109967 -0.06417739 0 0.0435093 0.9783964 0.2021079 0.1342847 0.05650544 -0.2043856 0.9772583 0 0 0 0 1 0.997438 -0.03500825 -0.06238782 0 0.04700982 0.9781067 0.2027253 0.1342847 0.05392485 -0.2051388 0.9772462 0 0 0 0 1 0.9974179 -0.03774309 -0.06110054 0 0.04955363 0.9774833 0.2051118 0.1342847 0.05198317 -0.2076098 0.9768295 0 0 0 0 1 0.9975131 -0.0380128 -0.05935531 0 0.04950332 0.9772862 0.2060609 0.1342847 0.05017417 -0.2084867 0.9767374 0 0 0 0 1 0.9975826 -0.0391553 -0.05741232 0 0.05031603 0.9768149 0.2080891 0.1342847 0.04793339 -0.2104748 0.9764235 0 0 0 0 1 0.997624 -0.04067158 -0.05560958 0 0.05134457 0.9771028 0.2064794 0.1342847 0.04593843 -0.208844 0.9768695 0 0 0 0 1 0.9976949 -0.04133003 -0.05382353 0 0.05144989 0.9778651 0.2028124 0.1342847 0.04424989 -0.2051141 0.9777373 0 0 0 0 1 0.9978018 -0.04032272 -0.05259287 0 0.05015027 0.9782097 0.2014713 0.1342847 0.04332298 -0.203666 0.9780814 0 0 0 0 1 0.9978222 -0.0410245 -0.05165505 0 0.05063122 0.9782595 0.2011095 0.1342847 0.04228162 -0.2032868 0.9782059 0 0 0 0 1 0.997789 -0.04383063 -0.04996186 0 0.05305588 0.9780369 0.2015662 0.1342847 0.04002976 -0.2037712 0.9781998 0 0 0 0 1 0.9978734 -0.0433129 -0.04871141 0 0.05230081 0.9780381 0.2017579 0.1342847 0.03890287 -0.2038765 0.9782234 0 0 0 0 1 0.9978922 -0.04384773 -0.04784303 0 0.05265563 0.9779766 0.2019636 0.1342847 0.03793364 -0.204057 0.9782238 0 0 0 0 1 0.9977989 -0.04618293 -0.04758799 0 0.05489277 0.9778494 0.2019836 0.1342847 0.03720569 -0.2041512 0.9782321 0 0 0 0 1 0.9976674 -0.05004829 -0.04642206 0 0.05844563 0.9776239 0.2020784 0.1342847 0.03526961 -0.2043202 0.9782686 0 0 0 0 1 0.9976744 -0.05125135 -0.04493838 0 0.05938345 0.977188 0.2039048 0.1342847 0.03346282 -0.2060992 0.9779588 0 0 0 0 1 0.997749 -0.04985117 -0.04485422 0 0.05800199 0.9772264 0.204118 0.1342847 0.03365719 -0.2062602 0.9779181 0 0 0 0 1 0.9978107 -0.05005943 -0.04321891 0 0.05777245 0.9778454 0.2011981 0.1342847 0.03218954 -0.2032545 0.9785966 0 0 0 0 1 0.9978423 -0.05218201 -0.0398488 0 0.059152 0.9778673 0.2006906 0.1342847 0.02849441 -0.2026147 0.978844 0 0 0 0 1 0.997996 -0.05002653 -0.03874951 0 0.05682706 0.977931 0.2010518 0.1342847 0.02783638 -0.2028509 0.978814 0 0 0 0 1 0.998088 -0.0486738 -0.03809982 0 0.05528831 0.9786084 0.1981639 0.1342847 0.02763938 -0.1998915 0.9794282 0 0 0 0 1 0.9980518 -0.0514822 -0.03525018 0 0.05739676 0.9790924 0.1951507 0.1342847 0.02446639 -0.1967937 0.9801396 0 0 0 0 1 0.998103 -0.05202543 -0.03292596 0 0.05747383 0.979072 0.1952301 0.1342847 0.02207994 -0.1967521 0.9802046 0 0 0 0 1 0.9982258 -0.05017685 -0.03206372 0 0.05551379 0.9789761 0.1962758 0.1342847 0.02154105 -0.1977075 0.9800243 0 0 0 0 1 0.9984481 -0.04880297 -0.02683067 0 0.05314975 0.9788981 0.1973162 0.1342847 0.01663482 -0.198436 0.9799727 0 0 0 0 1 0.9985433 -0.04987305 -0.0205959 0 0.05299252 0.9783166 0.2002215 0.1342847 0.0101636 -0.2010213 0.9795342 0 0 0 0 1 0.9985801 -0.05004173 -0.01827323 0 0.05269759 0.9781638 0.201044 0.1342847 0.007813572 -0.2017215 0.9794118 0 0 0 0 1 0.998614 -0.0498231 -0.01697176 0 0.05221134 0.9784782 0.1996358 0.1342847 0.006660044 -0.2002452 0.9797232 0 0 0 0 1 0.9986881 -0.04905152 -0.01471203 0 0.05099546 0.978864 0.1980527 0.1342847 0.004686295 -0.1985431 0.9800809 0 0 0 0 1 0.9988175 -0.04751342 -0.01031327 0 0.04861432 0.9791736 0.1971189 0.1342847 7.32684e-4 -0.1973872 0.9803254 0 0 0 0 1 0.9988947 -0.04656493 -0.006427109 0 0.04691666 0.9791772 0.1975117 0.1342847 -0.002903759 -0.197595 0.9802795 0 0 0 0 1 0.9989904 -0.04479742 -0.003405749 0 0.04458159 0.979088 0.1984923 0.1342847 -0.005557358 -0.1984437 0.9800965 0 0 0 0 1 0.9989905 -0.04491078 -0.001055538 0 0.04422521 0.9790714 0.1986534 0.1342847 -0.007888197 -0.1984995 0.9800693 0 0 0 0 1 0.9990233 -0.04415261 0.001744747 0 0.04294258 0.979435 0.1971371 0.1342847 -0.01041299 -0.1968696 0.9803744 0 0 0 0 1 0.9991173 -0.04156893 0.006074011 0 0.03961336 0.980352 0.1932375 0.1342847 -0.01398736 -0.1928263 0.9811332 0 0 0 0 1 0.9991715 -0.03907996 0.01137763 0 0.03617519 0.980758 0.1918464 0.1342847 -0.01865607 -0.1912758 0.9813591 0 0 0 0 1 0.9991521 -0.0386756 0.01412802 0 0.03522408 0.9805385 0.1931413 0.1342847 -0.02132296 -0.1924799 0.9810693 0 0 0 0 1 0.999081 -0.03919434 0.01735663 0 0.03510081 0.9804573 0.1935757 0.1342847 -0.02460449 -0.1927886 0.9809319 0 0 0 0 1 0.9989994 -0.03943479 0.02110755 0 0.03461426 0.9804796 0.1935504 0.1342847 -0.02832818 -0.192626 0.9808633 0 0 0 0 1 0.9989215 -0.04038596 0.02291351 0 0.03508907 0.9797496 0.1971283 0.1342847 -0.0304107 -0.1961117 0.9801099 0 0 0 0 1 0.9988821 -0.03966701 0.02571678 0 0.03370076 0.9789974 0.2010686 0.1342847 -0.03315246 -0.1999772 0.9792396 0 0 0 0 1 0.9989353 -0.03605175 0.02878689 0 0.02968788 0.9799444 0.1970471 0.1342847 -0.03531342 -0.1959827 0.9799713 0 0 0 0 1 0.9989013 -0.03536701 0.03075546 0 0.02873504 0.9805274 0.1942688 0.1342847 -0.03702723 -0.1931716 0.9804661 0 0 0 0 1 0.9987924 -0.03491532 0.03456521 0 0.02744036 0.9800143 0.1970254 0.1342847 -0.04075366 -0.195839 0.9797888 0 0 0 0 1 0.9987154 -0.03421914 0.03737407 0 0.02613282 0.9797145 0.1986868 0.1342847 -0.04341483 -0.1974549 0.9793502 0 0 0 0 1 0.9986343 -0.03583896 0.0380178 0 0.02760875 0.9797376 0.1983735 0.1342847 -0.044357 -0.197053 0.9793889 0 0 0 0 1 0.9985915 -0.03631204 0.03868526 0 0.02796798 0.9798452 0.1977904 0.1342847 -0.04508775 -0.1964299 0.9794807 0 0 0 0 1 0.9986075 -0.03513628 0.0393545 0 0.02667778 0.9798604 0.1978936 0.1342847 -0.04551517 -0.1965681 0.9794332 0 0 0 0 1 0.9985997 -0.03369998 0.04078257 0 0.02497875 0.9798697 0.1980696 0.1342847 -0.04663652 -0.1967735 0.9793392 0 0 0 0 1 0.9986146 -0.03291946 0.04105472 0 0.0240398 0.9793846 0.2005695 0.1342847 -0.04681104 -0.1993046 0.978819 0 0 0 0 1 0.998645 -0.03274476 0.04045015 0 0.02397471 0.9793232 0.2008762 0.1342847 -0.04619145 -0.1996341 0.9787812 0 0 0 0 1 0.9985493 -0.03340268 0.04223507 0 0.02442443 0.9799816 0.1975848 0.1342847 -0.04798942 -0.1962666 0.9793756 0 0 0 0 1 0.9984607 -0.03388035 0.04391855 0 0.0245406 0.9798929 0.1980093 0.1342847 -0.04974412 -0.1966267 0.9792157 0 0 0 0 1 0.998542 -0.03241676 0.04316586 0 0.0231797 0.9796289 0.1994742 0.1342847 -0.04875284 -0.1981828 0.9789519 0 0 0 0 1 0.9985771 -0.03129732 0.04318195 0 0.02206832 0.9796136 0.1996752 0.1342847 -0.04855096 -0.1984381 0.9789102 0 0 0 0 1 0.9984453 -0.03123009 0.04617285 0 0.02133113 0.9793328 0.2011278 0.1342847 -0.05149984 -0.1998302 0.9784762 0 0 0 0 1 0.9983491 -0.03043377 0.04871416 0 0.01993197 0.9789537 0.203107 0.1342847 -0.05387026 -0.2018007 0.977944 0 0 0 0 1 0.9983336 -0.03064721 0.04889613 0 0.02030456 0.9796904 0.1994855 0.1342847 -0.05401676 -0.1981602 0.9786801 0 0 0 0 1 0.998327 -0.03076457 0.04895931 0 0.02053391 0.9801502 0.19719 0.1342847 -0.05405396 -0.1958547 0.9791421 0 0 0 0 1 0.9981786 -0.03060793 0.05199044 0 0.01957243 0.9794295 0.2008354 0.1342847 -0.0570681 -0.1994519 0.9782444 0 0 0 0 1 0.9979875 -0.02962851 0.05606818 0 0.01767879 0.9790798 0.2027072 0.1342847 -0.0609011 -0.201308 0.9776329 0 0 0 0 1 0.9979336 -0.02929705 0.05718839 0 0.01741009 0.9799991 0.1982393 0.1342847 -0.06185239 -0.196834 0.9784839 0 0 0 0 1 0.9978868 -0.02960419 0.05784279 0 0.01773363 0.9804689 0.1958732 0.1342847 -0.06251174 -0.1944335 0.9789218 0 0 0 0 1 0.9978897 -0.02751421 0.05881571 0 0.01518613 0.9795583 0.2005867 0.1342847 -0.06313246 -0.1992703 0.9779089 0 0 0 0 1 0.9979991 -0.0248236 0.05815297 0 0.01249921 0.9790154 0.2034025 0.1342847 -0.06198185 -0.2022687 0.9773667 0 0 0 0 1 0.9979627 -0.02482932 0.05877232 0 0.01236665 0.9789767 0.2035967 0.1342847 -0.06259191 -0.2024551 0.9772892 0 0 0 0 1 0.9978978 -0.02578669 0.05945849 0 0.01321691 0.979127 0.2028193 0.1342847 -0.06344747 -0.2016071 0.9774094 0 0 0 0 1 0.9979149 -0.02427554 0.05980747 0 0.01176142 0.9794567 0.2013112 0.1342847 -0.06346583 -0.2001881 0.9776998 0 0 0 0 1 0.997967 -0.02199149 0.05982154 0 0.009569644 0.9796486 0.2004916 0.1342847 -0.06301319 -0.1995115 0.9778674 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_Spine_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_Spine_pose_matrix-interpolation"> + <Name_array id="_6_15_t_Spine_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_Spine_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_Spine_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_Spine_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_Spine_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_Spine_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_Spine_pose_matrix-sampler" target="Spine/transform"/> + </animation> + <animation id="_6_15_t_Spine1_pose_matrix"> + <source id="_6_15_t_Spine1_pose_matrix-input"> + <float_array id="_6_15_t_Spine1_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_Spine1_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_Spine1_pose_matrix-output"> + <float_array id="_6_15_t_Spine1_pose_matrix-output-array" count="2224">0.9990227 -0.03117281 0.03133249 0 0.03039556 0.9992256 0.02498352 0.1329761 -0.03208708 -0.02400672 0.9991968 0 0 0 0 1 0.9990461 -0.03210443 0.02959865 0 0.03111243 0.9989581 0.0333873 0.1329761 -0.0306397 -0.03243458 0.9990041 0 0 0 0 1 0.999071 -0.03229975 0.02852833 0 0.03110843 0.998664 0.0412594 0.1329761 -0.02982288 -0.04033362 0.9987412 0 0 0 0 1 0.9989483 -0.03584289 0.02859574 0 0.0347318 0.9986568 0.03844869 0.1329761 -0.02993541 -0.03741502 0.9988514 0 0 0 0 1 0.9987787 -0.04023385 0.02867567 0 0.03940165 0.9988019 0.02901935 0.1329761 -0.02980887 -0.02785408 0.9991675 0 0 0 0 1 0.9988505 -0.03885042 0.02807468 0 0.03805148 0.9988706 0.02845138 0.1329761 -0.02914828 -0.02735042 0.9992009 0 0 0 0 1 0.9990499 -0.03389483 0.02739059 0 0.03289884 0.998809 0.03603011 0.1329761 -0.02857923 -0.03509473 0.9989753 0 0 0 0 1 0.9990481 -0.03366112 0.0277453 0 0.03266572 0.9988328 0.03558087 0.1329761 -0.02891057 -0.03464066 0.9989817 0 0 0 0 1 0.9990651 -0.03239774 0.02862316 0 0.03126341 0.9987411 0.03922587 0.1329761 -0.02985799 -0.03829437 0.9988203 0 0 0 0 1 0.9990754 -0.03172183 0.02901732 0 0.03044033 0.9985858 0.04358553 0.1329761 -0.03035891 -0.0426619 0.9986283 0 0 0 0 1 0.9989647 -0.03524786 0.02876126 0 0.03403627 0.9985552 0.04157984 0.1329761 -0.03018534 -0.04055786 0.9987211 0 0 0 0 1 0.9987772 -0.04036706 0.02854204 0 0.03916692 0.9983735 0.04142636 0.1329761 -0.03016787 -0.04025781 0.9987339 0 0 0 0 1 0.9985846 -0.04563128 0.02731972 0 0.04444599 0.9981062 0.04252612 0.1329761 -0.02920854 -0.04125165 0.9987218 0 0 0 0 1 0.9984166 -0.05010616 0.02556514 0 0.04899948 0.997906 0.0422194 0.1329761 -0.02762705 -0.04089987 0.9987813 0 0 0 0 1 0.9982625 -0.05429208 0.02289944 0 0.05330437 0.9977056 0.04173809 0.1329761 -0.02511298 -0.04044491 0.9988662 0 0 0 0 1 0.9980758 -0.05866736 0.02006781 0 0.05778223 0.9974386 0.04215919 0.1329761 -0.02248978 -0.04091852 0.9989094 0 0 0 0 1 0.9978404 -0.06315308 0.01806396 0 0.06234925 0.997168 0.04205375 0.1329761 -0.02066862 -0.04083663 0.9989521 0 0 0 0 1 0.9976795 -0.06619971 0.01590317 0 0.06552481 0.9970586 0.03975456 0.1329761 -0.0184881 -0.03862029 0.9990829 0 0 0 0 1 0.9975865 -0.06802725 0.01391279 0 0.06740647 0.9968803 0.04106074 0.1329761 -0.01666265 -0.04002386 0.9990597 0 0 0 0 1 0.997465 -0.07007431 0.01237809 0 0.06951564 0.9967411 0.04092186 0.1329761 -0.01520532 -0.03995764 0.9990857 0 0 0 0 1 0.9972692 -0.07305616 0.01081383 0 0.07258033 0.9965886 0.03928172 0.1329761 -0.01364672 -0.03838962 0.9991697 0 0 0 0 1 0.9972239 -0.07390892 0.009049057 0 0.07348215 0.9964615 0.04080241 0.1329761 -0.01203274 -0.04002422 0.9991263 0 0 0 0 1 0.9971226 -0.075468 0.007134675 0 0.07511085 0.9963163 0.04137802 0.1329761 -0.01023107 -0.04072308 0.9991181 0 0 0 0 1 0.9968934 -0.07857906 0.005365848 0 0.07830774 0.9961472 0.03947746 0.1329761 -0.008447289 -0.03893464 0.9992061 0 0 0 0 1 0.9966017 -0.08230823 0.003228783 0 0.08212101 0.995862 0.03892129 0.1329761 -0.006418943 -0.03852385 0.9992371 0 0 0 0 1 0.9962623 -0.08636778 0.001387834 0 0.08625859 0.9955937 0.03677684 0.1329761 -0.004558026 -0.03651964 0.9993226 0 0 0 0 1 0.9959217 -0.09022092 -3.92395e-4 0 0.09018445 0.995375 0.03309398 0.1329761 -0.002595186 -0.03299438 0.9994522 0 0 0 0 1 0.9957141 -0.09244698 -0.002590298 0 0.09248197 0.9951627 0.03313988 0.1329761 -4.85862e-4 -0.03323739 0.9994474 0 0 0 0 1 0.9955385 -0.09421336 -0.005181908 0 0.09434151 0.9948408 0.0373007 0.1329761 0.001640915 -0.03762316 0.9992906 0 0 0 0 1 0.9954752 -0.09475094 -0.007172763 0 0.09495472 0.9947726 0.03756463 0.1329761 0.00357598 -0.0380758 0.9992685 0 0 0 0 1 0.995306 -0.09640634 -0.008465886 0 0.09665626 0.9946246 0.03714096 0.1329761 0.004839777 -0.03778487 0.9992742 0 0 0 0 1 0.9950968 -0.09838056 -0.0101723 0 0.0986886 0.9944544 0.03634488 0.1329761 0.006540238 -0.03717058 0.9992876 0 0 0 0 1 0.9946348 -0.1026784 -0.01259768 0 0.1030811 0.9939794 0.03713667 0.1329761 0.008708715 -0.03823602 0.9992309 0 0 0 0 1 0.9940725 -0.1078111 -0.01401638 0 0.1082676 0.9934176 0.03741019 0.1329761 0.009890854 -0.038706 0.9992018 0 0 0 0 1 0.9938207 -0.1099791 -0.01499736 0 0.1104622 0.9932102 0.03649121 0.1329761 0.01088225 -0.03792238 0.9992215 0 0 0 0 1 0.9939408 -0.1087741 -0.01580327 0 0.1092894 0.9933375 0.03655654 0.1329761 0.01172155 -0.03806221 0.9992067 0 0 0 0 1 0.9937982 -0.1099579 -0.01655977 0 0.1104639 0.9933121 0.03359442 0.1329761 0.01275503 -0.03521537 0.9992984 0 0 0 0 1 0.9934619 -0.112843 -0.01731824 0 0.113369 0.9929983 0.03319507 0.1329761 0.01345115 -0.03494137 0.9992988 0 0 0 0 1 0.9932694 -0.114356 -0.01840072 0 0.1149702 0.9926882 0.03677034 0.1329761 0.01406127 -0.03863841 0.9991544 0 0 0 0 1 0.9932776 -0.1141995 -0.01892119 0 0.1148194 0.9927418 0.03577667 0.1329761 0.0146982 -0.03770875 0.9991807 0 0 0 0 1 0.9930586 -0.1159218 -0.01991432 0 0.116542 0.9926216 0.03346967 0.1329761 0.01588749 -0.03555822 0.9992414 0 0 0 0 1 0.9927629 -0.1182743 -0.02080857 0 0.1189014 0.9923887 0.03204637 0.1329761 0.01685994 -0.03428864 0.9992698 0 0 0 0 1 0.9925946 -0.1196451 -0.02099549 0 0.1203386 0.9920927 0.0356459 0.1329761 0.0165646 -0.03790849 0.9991439 0 0 0 0 1 0.9925341 -0.1200294 -0.02166068 0 0.1208154 0.9918841 0.03961831 0.1329761 0.01672953 -0.04193949 0.9989802 0 0 0 0 1 0.9926435 -0.1190993 -0.02177292 0 0.1198264 0.992147 0.03586107 0.1329761 0.01733094 -0.03820621 0.9991196 0 0 0 0 1 0.9925652 -0.1197368 -0.02184689 0 0.1204367 0.9921326 0.03417134 0.1329761 0.01758348 -0.03654849 0.9991772 0 0 0 0 1 0.9924919 -0.1202768 -0.02220827 0 0.1210353 0.9919682 0.03673398 0.1329761 0.01761162 -0.03914618 0.9990783 0 0 0 0 1 0.9923967 -0.1210691 -0.0221582 0 0.1217907 0.9919461 0.03478324 0.1329761 0.01776856 -0.03721743 0.9991493 0 0 0 0 1 0.992486 -0.120387 -0.02187579 0 0.121101 0.9920256 0.03492575 0.1329761 0.0174967 -0.0373125 0.9991505 0 0 0 0 1 0.9923366 -0.1214745 -0.02262675 0 0.1222249 0.9918704 0.03541523 0.1329761 0.01814079 -0.03790938 0.9991165 0 0 0 0 1 0.9922215 -0.1223045 -0.02319461 0 0.1230954 0.9917251 0.03645002 0.1329761 0.01854467 -0.03902167 0.9990663 0 0 0 0 1 0.9920341 -0.1238187 -0.02317476 0 0.1245813 0.9915914 0.0350126 0.1329761 0.01864469 -0.03762084 0.9991182 0 0 0 0 1 0.9919453 -0.12458 -0.02289986 0 0.1252152 0.991712 0.0287801 0.1329761 0.01912462 -0.0314157 0.9993235 0 0 0 0 1 0.9916521 -0.1267896 -0.02346301 0 0.1274102 0.9914779 0.02716922 0.1329761 0.0198183 -0.02993184 0.9993555 0 0 0 0 1 0.9914098 -0.1285898 -0.02389705 0 0.1292598 0.9911867 0.02899688 0.1329761 0.01995778 -0.03183674 0.9992938 0 0 0 0 1 0.9916145 -0.1270903 -0.02342265 0 0.1277586 0.9913614 0.02966582 0.1329761 0.01945012 -0.03240948 0.9992855 0 0 0 0 1 0.9914481 -0.1281818 -0.02449774 0 0.1289423 0.9911195 0.03249436 0.1329761 0.02011495 -0.03537523 0.9991717 0 0 0 0 1 0.9912223 -0.1296637 -0.02579581 0 0.1304621 0.9909324 0.03213626 0.1329761 0.02139496 -0.03521955 0.9991505 0 0 0 0 1 0.9911688 -0.1299304 -0.02650403 0 0.1307024 0.9909728 0.02982908 0.1329761 0.02238911 -0.03302979 0.9992036 0 0 0 0 1 0.9908074 -0.1324944 -0.02731251 0 0.1333377 0.9905607 0.031789 0.1329761 0.02284282 -0.03513854 0.9991213 0 0 0 0 1 0.9905785 -0.1341033 -0.02775996 0 0.1349653 0.9903357 0.03193193 0.1329761 0.02320951 -0.03537768 0.9991046 0 0 0 0 1 0.9902742 -0.1361739 -0.02852541 0 0.1370044 0.9901306 0.02951407 0.1329761 0.02422481 -0.03313511 0.9991574 0 0 0 0 1 0.989923 -0.1383318 -0.03027969 0 0.1392354 0.9898019 0.03009426 0.1329761 0.02580791 -0.03400701 0.9990884 0 0 0 0 1 0.9893072 -0.1421668 -0.0325548 0 0.1432272 0.9891412 0.03294932 0.1329761 0.02751702 -0.03725975 0.9989266 0 0 0 0 1 0.9890422 -0.1437947 -0.03344738 0 0.1448534 0.9889443 0.03172677 0.1329761 0.02851539 -0.03622406 0.9989368 0 0 0 0 1 0.9889226 -0.1446313 -0.03337293 0 0.1455294 0.9890055 0.02625429 0.1329761 0.02920883 -0.03082019 0.9990981 0 0 0 0 1 0.9886048 -0.1466856 -0.03382033 0 0.1475585 0.9887389 0.02493369 0.1329761 0.02978205 -0.02964007 0.9991168 0 0 0 0 1 0.9881929 -0.1491549 -0.03503584 0 0.1501269 0.9882988 0.02696675 0.1329761 0.03060364 -0.03190821 0.9990221 0 0 0 0 1 0.9879274 -0.1505615 -0.03647828 0 0.1516081 0.9880484 0.02784448 0.1329761 0.03185003 -0.03303879 0.9989465 0 0 0 0 1 0.9882401 -0.1482043 -0.03764122 0 0.1493161 0.9883738 0.02866512 0.1329761 0.03295528 -0.03394848 0.9988801 0 0 0 0 1 0.9886652 -0.1452279 -0.03807914 0 0.1464392 0.9887271 0.03121268 0.1329761 0.03311693 -0.03643518 0.9987872 0 0 0 0 1 0.9884958 -0.1462283 -0.03864395 0 0.1474565 0.9885795 0.03110104 0.1329761 0.03365474 -0.03644156 0.998769 0 0 0 0 1 0.9889152 -0.1435403 -0.03798604 0 0.1448293 0.9888833 0.03367716 0.1329761 0.03272968 -0.03880536 0.9987107 0 0 0 0 1 0.9894638 -0.1397822 -0.03771305 0 0.141215 0.989232 0.03845036 0.1329761 0.03193229 -0.0433709 0.9985486 0 0 0 0 1 0.9895376 -0.1394504 -0.03699773 0 0.1409064 0.9892067 0.04019021 0.1329761 0.03099387 -0.04498296 0.9985069 0 0 0 0 1 0.9894571 -0.140219 -0.03623676 0 0.1417073 0.9889998 0.04240715 0.1329761 0.02989184 -0.04709511 0.9984431 0 0 0 0 1 0.9895277 -0.1400627 -0.03489226 0 0.1413711 0.9892128 0.03836864 0.1329761 0.02914184 -0.0428996 0.9986543 0 0 0 0 1 0.9895673 -0.1401661 -0.03331583 0 0.1412175 0.9894732 0.03162848 0.1329761 0.02853184 -0.03600335 0.9989444 0 0 0 0 1 0.9892916 -0.1422535 -0.03265196 0 0.1432402 0.9892278 0.03017312 0.1329761 0.02800798 -0.03452712 0.9990113 0 0 0 0 1 0.9892516 -0.1425845 -0.03241586 0 0.1436031 0.98913 0.03162229 0.1329761 0.02755469 -0.03593742 0.9989741 0 0 0 0 1 0.9895427 -0.1406688 -0.03189641 0 0.1417497 0.989297 0.03461837 0.1329761 0.02668529 -0.0387777 0.9988915 0 0 0 0 1 0.9900512 -0.1371803 -0.03130811 0 0.1382771 0.9897367 0.03606498 0.1329761 0.02603936 -0.04003536 0.998859 0 0 0 0 1 0.9901827 -0.1363533 -0.0307548 0 0.1374137 0.9898775 0.03549474 0.1329761 0.02560365 -0.03937244 0.9988966 0 0 0 0 1 0.9904795 -0.1342172 -0.03059291 0 0.1352775 0.990164 0.03571033 0.1329761 0.02549904 -0.03950887 0.9988938 0 0 0 0 1 0.991063 -0.1299481 -0.03012293 0 0.1310389 0.9906635 0.03761017 0.1329761 0.02495431 -0.04122132 0.9988384 0 0 0 0 1 0.9915249 -0.1264834 -0.0296669 0 0.1276541 0.9909461 0.04159575 0.1329761 0.02413707 -0.04503035 0.998694 0 0 0 0 1 0.9916905 -0.1251549 -0.02976918 0 0.1263732 0.9910356 0.04333996 0.1329761 0.02407813 -0.0467419 0.9986168 0 0 0 0 1 0.9921692 -0.1215599 -0.02869361 0 0.1226819 0.9915882 0.04125416 0.1329761 0.02343744 -0.04445129 0.9987366 0 0 0 0 1 0.9926865 -0.1176455 -0.0270738 0 0.1187306 0.9920061 0.042741 0.1329761 0.02182906 -0.04564291 0.9987193 0 0 0 0 1 0.9927306 -0.1173971 -0.02652835 0 0.1184682 0.9920154 0.04324871 0.1329761 0.02123922 -0.04607707 0.9987121 0 0 0 0 1 0.9929481 -0.115743 -0.02564507 0 0.1166717 0.9924323 0.03828495 0.1329761 0.02101981 -0.04100704 0.9989378 0 0 0 0 1 0.993378 -0.1123611 -0.02398163 0 0.1131789 0.9929217 0.03601485 0.1329761 0.01976519 -0.03849059 0.9990636 0 0 0 0 1 0.9935548 -0.11102 -0.02287375 0 0.1118131 0.9930424 0.03693968 0.1329761 0.01861351 -0.03925919 0.9990557 0 0 0 0 1 0.9936248 -0.1104432 -0.02262741 0 0.1112695 0.9930139 0.03927147 0.1329761 0.01813209 -0.04153889 0.9989724 0 0 0 0 1 0.9941527 -0.1061182 -0.01997792 0 0.1068683 0.9934177 0.04123443 0.1329761 0.01547068 -0.04312837 0.9989498 0 0 0 0 1 0.9944772 -0.1035144 -0.01731681 0 0.1042278 0.9934318 0.04721957 0.1329761 0.01231515 -0.04876363 0.9987344 0 0 0 0 1 0.9945553 -0.1029087 -0.01641744 0 0.1036107 0.9933592 0.05002403 0.1329761 0.01116049 -0.05145269 0.9986131 0 0 0 0 1 0.994742 -0.1012417 -0.01544308 0 0.1018685 0.993667 0.04742103 0.1329761 0.0105443 -0.04874485 0.9987556 0 0 0 0 1 0.9951652 -0.09723889 -0.01381409 0 0.09776061 0.9942293 0.04417002 0.1329761 0.009439349 -0.04530692 0.9989286 0 0 0 0 1 0.9954731 -0.09436368 -0.01135557 0 0.09476774 0.9945752 0.04288667 0.1329761 0.00724703 -0.0437687 0.9990155 0 0 0 0 1 0.9955856 -0.09337413 -0.009518921 0 0.09370791 0.994602 0.04456037 0.1329761 0.00530678 -0.04525572 0.9989614 0 0 0 0 1 0.9958688 -0.09043461 -0.008182048 0 0.09072428 0.9947212 0.04794394 0.1329761 0.003803014 -0.04848819 0.9988165 0 0 0 0 1 0.9963133 -0.08550214 -0.00699681 0 0.08574581 0.9950628 0.04997378 0.1329761 0.002689421 -0.05038946 0.998726 0 0 0 0 1 0.9967226 -0.08072024 -0.005319058 0 0.08088421 0.9955175 0.04901629 0.1329761 0.001338601 -0.04928588 0.9987838 0 0 0 0 1 0.9968863 -0.07880997 -0.002578139 0 0.07884758 0.9959458 0.0433005 0.1329761 -8.44815e-4 -0.04336899 0.9990588 0 0 0 0 1 0.997055 -0.07668745 4.76693e-4 0 0.07660639 0.9962508 0.04019725 0.1329761 -0.003557503 -0.04004234 0.9991917 0 0 0 0 1 0.9973704 -0.0724458 0.001915276 0 0.07230198 0.9965 0.0419538 0.1329761 -0.00494796 -0.04170501 0.9991177 0 0 0 0 1 0.9976549 -0.06836169 0.003365159 0 0.06813818 0.9966354 0.04555261 0.1329761 -0.006467878 -0.0452165 0.9989563 0 0 0 0 1 0.9978767 -0.06492084 0.005214631 0 0.06460207 0.9967845 0.04740458 0.1329761 -0.008275389 -0.04696702 0.9988622 0 0 0 0 1 0.9981419 -0.06064248 0.005932867 0 0.06024903 0.9968019 0.05249619 0.1329761 -0.009097456 -0.05204123 0.9986035 0 0 0 0 1 0.9983279 -0.05735719 0.00718975 0 0.05685406 0.9967419 0.0572108 0.1329761 -0.0104478 -0.05670636 0.9983362 0 0 0 0 1 0.99835 -0.05665016 0.009381175 0 0.05611616 0.9971824 0.04977977 0.1329761 -0.01217478 -0.0491712 0.9987162 0 0 0 0 1 0.9985114 -0.0534529 0.0108475 0 0.05291128 0.997574 0.04523879 0.1329761 -0.01323932 -0.0445975 0.9989174 0 0 0 0 1 0.9985948 -0.05149841 0.01249492 0 0.05081224 0.9974498 0.05011785 0.1329761 -0.01504403 -0.04941248 0.9986652 0 0 0 0 1 0.9986264 -0.05054384 0.01380068 0 0.04975616 0.9973835 0.05244338 0.1329761 -0.01641523 -0.05168467 0.9985285 0 0 0 0 1 0.9986284 -0.05037641 0.01425582 0 0.0495963 0.9974861 0.05061316 0.1329761 -0.0167697 -0.04983669 0.9986166 0 0 0 0 1 0.9986327 -0.05013775 0.01479154 0 0.0493735 0.9976185 0.04816168 0.1329761 -0.01717108 -0.04736548 0.99873 0 0 0 0 1 0.9988017 -0.04647338 0.0153445 0 0.04569441 0.9978153 0.04771572 0.1329761 -0.01752847 -0.04695737 0.9987431 0 0 0 0 1 0.9988861 -0.04428112 0.01629406 0 0.04348421 0.9979768 0.0463829 0.1329761 -0.01831501 -0.0456227 0.9987908 0 0 0 0 1 0.9988836 -0.04432988 0.01632601 0 0.04349243 0.9978758 0.04849988 0.1329761 -0.01844131 -0.04773569 0.9986898 0 0 0 0 1 0.9988966 -0.04410552 0.01613104 0 0.04329729 0.9979361 0.04742169 0.1329761 -0.01818931 -0.04667091 0.9987447 0 0 0 0 1 0.9988984 -0.04356861 0.0174269 0 0.04280912 0.998208 0.04180854 0.1329761 -0.01921725 -0.04101645 0.9989737 0 0 0 0 1 0.9989397 -0.04225552 0.01827114 0 0.04144918 0.9982378 0.04246288 0.1329761 -0.02003324 -0.04166054 0.998931 0 0 0 0 1 0.9989778 -0.04149025 0.01793926 0 0.04068827 0.9982475 0.04296964 0.1329761 -0.01969063 -0.04219579 0.9989153 0 0 0 0 1 0.999019 -0.04042494 0.01807749 0 0.03963482 0.9983263 0.04211574 0.1329761 -0.01974976 -0.04135793 0.9989493 0 0 0 0 1 0.9990049 -0.04014521 0.01943349 0 0.03924989 0.9982405 0.04444485 0.1329761 -0.02118355 -0.04363787 0.9988228 0 0 0 0 1 0.9990297 -0.03886032 0.0207234 0 0.03788465 0.998243 0.04556 0.1329761 -0.02245748 -0.04473072 0.9987466 0 0 0 0 1 0.9990291 -0.03848928 0.02143108 0 0.03768026 0.9986064 0.03695207 0.1329761 -0.02282345 -0.03610867 0.9990872 0 0 0 0 1 0.9990341 -0.03809326 0.02190393 0 0.03740692 0.9988212 0.03093302 0.1329761 -0.02305644 -0.03008383 0.9992815 0 0 0 0 1 0.9990304 -0.03743249 0.02317422 0 0.03659933 0.9987032 0.0353868 0.1329761 -0.02446877 -0.03450429 0.999105 0 0 0 0 1 0.9990004 -0.0371192 0.02490866 0 0.03610253 0.9985434 0.04009473 0.1329761 -0.02636069 -0.03915536 0.9988855 0 0 0 0 1 0.9989627 -0.03748333 0.02585339 0 0.03659898 0.9987559 0.03386914 0.1329761 -0.02709072 -0.03288781 0.9990919 0 0 0 0 1 0.9989825 -0.03648304 0.02651274 0 0.03570121 0.9989303 0.02938717 0.1329761 -0.02755653 -0.02841073 0.9992164 0 0 0 0 1 0.999002 -0.03577029 0.02674686 0 0.0348398 0.9987978 0.03448164 0.1329761 -0.02794808 -0.03351539 0.9990474 0 0 0 0 1 0.9989951 -0.03633862 0.02623212 0 0.03533679 0.9986643 0.03769409 0.1329761 -0.02756685 -0.03672927 0.998945 0 0 0 0 1 0.9990261 -0.03521072 0.02659028 0 0.03419721 0.9987055 0.03765469 0.1329761 -0.02788174 -0.03670871 0.998937 0 0 0 0 1 0.9990462 -0.03432446 0.02699047 0 0.03331536 0.9987602 0.03698867 0.1329761 -0.02822661 -0.03605419 0.9989511 0 0 0 0 1 0.9990543 -0.03377228 0.02738112 0 0.03282958 0.9988764 0.03417706 0.1329761 -0.02850461 -0.03324586 0.9990406 0 0 0 0 1 0.9990023 -0.03513425 0.02756571 0 0.03426873 0.9989234 0.03126537 0.1329761 -0.02863448 -0.03028953 0.999131 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_Spine1_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_Spine1_pose_matrix-interpolation"> + <Name_array id="_6_15_t_Spine1_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_Spine1_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_Spine1_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_Spine1_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_Spine1_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_Spine1_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_Spine1_pose_matrix-sampler" target="Spine1/transform"/> + </animation> + <animation id="_6_15_t_Neck_pose_matrix"> + <source id="_6_15_t_Neck_pose_matrix-input"> + <float_array id="_6_15_t_Neck_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_Neck_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_Neck_pose_matrix-output"> + <float_array id="_6_15_t_Neck_pose_matrix-output-array" count="2224">0.9825907 0.1848914 -0.01818323 0 -0.1793261 0.969465 0.1672727 0 0.04855531 -0.1610999 0.985743 0 0 0 0 1 0.9833984 0.1805904 -0.01773941 0 -0.1754761 0.9713138 0.160492 0 0.04621386 -0.1547147 0.9868779 0 0 0 0 1 0.9834114 0.1804679 -0.01825463 0 -0.1753517 0.9716029 0.1588703 0 0.04640728 -0.1530339 0.9871307 0 0 0 0 1 0.9828158 0.1836841 -0.01825016 0 -0.1782134 0.9699831 0.1654477 0 0.04809248 -0.1593523 0.9860496 0 0 0 0 1 0.9819132 0.1886196 -0.01640236 0 -0.1830286 0.9678238 0.1726785 0 0.04844516 -0.1665532 0.9848417 0 0 0 0 1 0.9816862 0.1898912 -0.01527899 0 -0.1844781 0.9675811 0.172496 0 0.04753917 -0.1665183 0.9848918 0 0 0 0 1 0.9821987 0.1870912 -0.01681566 0 -0.1817295 0.9690616 0.1670153 0 0.04754251 -0.1609863 0.9858109 0 0 0 0 1 0.9820738 0.187661 -0.01772987 0 -0.182319 0.9695597 0.1634439 0 0.04786223 -0.1572814 0.9863934 0 0 0 0 1 0.9822537 0.1866309 -0.01862001 0 -0.1816303 0.9712743 0.1537429 0 0.04677832 -0.1476325 0.9879355 0 0 0 0 1 0.9831632 0.1816793 -0.01955729 0 -0.1767215 0.9725973 0.1510764 0 0.04646885 -0.1450765 0.9883286 0 0 0 0 1 0.9832873 0.181188 -0.01779854 0 -0.175966 0.9709036 0.1624262 0 0.04671037 -0.1565796 0.9865602 0 0 0 0 1 0.9828041 0.1840289 -0.01514631 0 -0.1787898 0.9689037 0.1710554 0 0.04615443 -0.1654059 0.985145 0 0 0 0 1 0.9828061 0.1841462 -0.01349961 0 -0.1792704 0.9691739 0.1690095 0 0.0442059 -0.1636835 0.985522 0 0 0 0 1 0.9830609 0.1828778 -0.01212251 0 -0.1782495 0.9693782 0.1689175 0 0.04264259 -0.1638954 0.9855558 0 0 0 0 1 0.9829862 0.183382 -0.01045376 0 -0.1791336 0.9696869 0.1661881 0 0.04061275 -0.161488 0.9860386 0 0 0 0 1 0.9829308 0.1837059 -0.009954631 0 -0.1797277 0.9703897 0.1613749 0 0.03930538 -0.1568312 0.986843 0 0 0 0 1 0.9833961 0.1812772 -0.008399367 0 -0.1774914 0.9704373 0.1635491 0 0.03779876 -0.1593427 0.9864994 0 0 0 0 1 0.983779 0.1792871 -0.005921781 0 -0.1759633 0.9709055 0.1624181 0 0.03486895 -0.1587414 0.9867044 0 0 0 0 1 0.9837509 0.1794494 -0.005657792 0 -0.1764502 0.9721682 0.1541243 0 0.03315782 -0.1506216 0.9880353 0 0 0 0 1 0.9832066 0.1824067 -0.005699813 0 -0.1795529 0.972466 0.148563 0 0.03264176 -0.1450446 0.9888865 0 0 0 0 1 0.9833486 0.1816798 -0.004262149 0 -0.1790164 0.9724377 0.1493933 0 0.03128635 -0.1461426 0.9887686 0 0 0 0 1 0.9839226 0.1785302 -0.004822969 0 -0.1759392 0.9735758 0.1455881 0 0.03068739 -0.1423989 0.9893335 0 0 0 0 1 0.9841884 0.1770387 -0.005525767 0 -0.1745193 0.97457 0.1405571 0 0.03026926 -0.1373702 0.9900572 0 0 0 0 1 0.9841285 0.1773883 -0.004927098 0 -0.174999 0.9747299 0.1388427 0 0.02943164 -0.1357768 0.9903022 0 0 0 0 1 0.9835031 0.1808332 -0.004581511 0 -0.178505 0.9743179 0.1372619 0 0.02928537 -0.1341797 0.9905242 0 0 0 0 1 0.9829269 0.1839697 -0.003138363 0 -0.1817899 0.973631 0.1378237 0 0.02841097 -0.1349 0.9904518 0 0 0 0 1 0.9830828 0.1831453 -0.002471685 0 -0.1809424 0.9731755 0.1420895 0 0.02842837 -0.1392384 0.9898508 0 0 0 0 1 0.98338 0.1815294 -0.003293812 0 -0.1793058 0.9738644 0.1394197 0 0.02851647 -0.1365119 0.9902279 0 0 0 0 1 0.9836263 0.180194 -0.003104686 0 -0.178056 0.9743291 0.1377648 0 0.02784943 -0.1349563 0.9904601 0 0 0 0 1 0.9836214 0.1802338 -0.002138972 0 -0.1781128 0.9737293 0.1418706 0 0.02765274 -0.139166 0.9898829 0 0 0 0 1 0.9835121 0.1808279 -0.002288758 0 -0.1787473 0.9739611 0.1394604 0 0.02744746 -0.1367518 0.990225 0 0 0 0 1 0.9835863 0.1804238 -0.002326667 0 -0.178507 0.9748565 0.13338 0 0.02633309 -0.1307754 0.9910623 0 0 0 0 1 0.983999 0.1781604 -0.002214312 0 -0.1763143 0.975443 0.1320009 0 0.02567726 -0.1294984 0.9912471 0 0 0 0 1 0.9841166 0.1775181 -0.001376688 0 -0.1757265 0.9752264 0.1343648 0 0.02519482 -0.1319887 0.990931 0 0 0 0 1 0.9839065 0.1786823 -8.70322e-4 0 -0.1769887 0.9752268 0.132695 0 0.02455902 -0.1304054 0.9911566 0 0 0 0 1 0.9834458 0.181194 -0.001716792 0 -0.1794759 0.975338 0.1284697 0 0.02495241 -0.1260349 0.991712 0 0 0 0 1 0.9829826 0.183692 -0.00154674 0 -0.1818761 0.974379 0.1323134 0 0.02581202 -0.1297805 0.9912067 0 0 0 0 1 0.9828346 0.1844772 -0.00203216 0 -0.182534 0.9739632 0.1344509 0 0.02678233 -0.131772 0.9909182 0 0 0 0 1 0.983079 0.1831567 -0.002999365 0 -0.1812067 0.9747492 0.130493 0 0.02682429 -0.1277415 0.9914447 0 0 0 0 1 0.9833563 0.1816467 -0.003848612 0 -0.1797515 0.9757435 0.1249568 0 0.02645325 -0.1221852 0.9921547 0 0 0 0 1 0.9837652 0.1794103 -0.004250228 0 -0.1775074 0.9762695 0.1240534 0 0.02640581 -0.121285 0.9922664 0 0 0 0 1 0.983746 0.1795035 -0.004717707 0 -0.1774925 0.9760344 0.1259104 0 0.027206 -0.1230264 0.9920305 0 0 0 0 1 0.9830917 0.1830312 -0.005500018 0 -0.1809673 0.9757152 0.1234131 0 0.02795493 -0.1203311 0.9923402 0 0 0 0 1 0.9825856 0.1857387 -0.005156517 0 -0.1837304 0.9753534 0.1221851 0 0.0277239 -0.1191099 0.992494 0 0 0 0 1 0.9830803 0.1831414 -0.003512024 0 -0.1812433 0.9753109 0.1261731 0 0.02653288 -0.1234018 0.992002 0 0 0 0 1 0.9837015 0.1797072 -0.006062388 0 -0.1775315 0.9760372 0.1258335 0 0.02853029 -0.1227062 0.9920328 0 0 0 0 1 0.9837034 0.1796157 -0.00809884 0 -0.1772857 0.9764766 0.1227334 0 0.02995318 -0.1192975 0.9924066 0 0 0 0 1 0.9830694 0.1829106 -0.0108667 0 -0.1802073 0.9758675 0.123322 0 0.03316134 -0.1192758 0.9923073 0 0 0 0 1 0.9833815 0.1812496 -0.01045548 0 -0.1786749 0.9764073 0.1212617 0 0.03218746 -0.1173784 0.9925655 0 0 0 0 1 0.9840366 0.1778788 -0.005585908 0 -0.1758596 0.9767231 0.1228229 0 0.02730345 -0.1198799 0.9924129 0 0 0 0 1 0.9842817 0.1765951 -0.001928091 0 -0.174898 0.9762209 0.1280762 0 0.02449989 -0.1257259 0.9917625 0 0 0 0 1 0.9844949 0.1754136 -1.36478e-4 0 -0.1738756 0.9759647 0.1313785 0 0.02317875 -0.1293177 0.9913323 0 0 0 0 1 0.9846673 0.1744344 -0.001745581 0 -0.1726622 0.975992 0.1327685 0 0.02486306 -0.1304314 0.9911456 0 0 0 0 1 0.9841936 0.1770225 -0.005098223 0 -0.1747432 0.9753937 0.1344322 0 0.02877032 -0.1314164 0.9909097 0 0 0 0 1 0.9842831 0.1765484 -0.004174709 0 -0.1743549 0.9752665 0.1358525 0 0.02805602 -0.1329894 0.9907203 0 0 0 0 1 0.9844195 0.1758179 -0.002505242 0 -0.1738276 0.9752254 0.1368191 0 0.02649843 -0.134252 0.9905929 0 0 0 0 1 0.9841318 0.1773796 -0.00459361 0 -0.1751371 0.9751954 0.1353557 0 0.02848899 -0.1324033 0.9907865 0 0 0 0 1 0.9845364 0.1751497 -0.003276109 0 -0.1729604 0.9748573 0.140492 0 0.02780085 -0.1377528 0.9900764 0 0 0 0 1 0.9856158 0.1689792 0.00273621 0 -0.1675624 0.9749875 0.146022 0 0.02200686 -0.1443801 0.9892776 0 0 0 0 1 0.9863983 0.1643071 0.004641175 0 -0.1632446 0.9759362 0.1445682 0 0.01922404 -0.1433594 0.989484 0 0 0 0 1 0.98651 0.1636114 0.005409896 0 -0.1625844 0.9753943 0.1489042 0 0.01908558 -0.1477751 0.9888369 0 0 0 0 1 0.9862402 0.1651808 0.006742715 0 -0.1642452 0.9743834 0.1536251 0 0.01880586 -0.1526187 0.9881063 0 0 0 0 1 0.9859777 0.1668223 0.004274308 0 -0.165585 0.9748417 0.1492159 0 0.02072572 -0.1478314 0.9887954 0 0 0 0 1 0.9858644 0.1675385 0.001541018 0 -0.1660832 0.9760055 0.1408184 0 0.0220884 -0.1390837 0.9900344 0 0 0 0 1 0.9860062 0.1666897 0.002567768 0 -0.1654216 0.9763615 0.1391193 0 0.02068263 -0.1375973 0.9902723 0 0 0 0 1 0.9862669 0.1650911 0.004741489 0 -0.1641243 0.976474 0.139864 0 0.01846033 -0.1387214 0.9901595 0 0 0 0 1 0.9863603 0.1645087 0.005483508 0 -0.1636361 0.9764398 0.140672 0 0.01778739 -0.1396506 0.9900411 0 0 0 0 1 0.9864271 0.164057 0.006826639 0 -0.1633196 0.975999 0.1440581 0 0.01697093 -0.1432178 0.9895458 0 0 0 0 1 0.9868125 0.1616282 0.008793413 0 -0.1610642 0.9750629 0.1526795 0 0.01610308 -0.1520823 0.9882367 0 0 0 0 1 0.9867449 0.1620964 0.007681131 0 -0.1612704 0.9742506 0.1575682 0 0.01805782 -0.1567183 0.9874783 0 0 0 0 1 0.9859825 0.1667721 0.005038678 0 -0.1654838 0.9736191 0.1571027 0 0.02129453 -0.1557343 0.9875695 0 0 0 0 1 0.9856384 0.1688198 0.004068911 0 -0.1674563 0.9740004 0.1525835 0 0.02179598 -0.1510736 0.9882822 0 0 0 0 1 0.9861533 0.1657723 0.004584491 0 -0.1644716 0.9741294 0.1549878 0 0.02122676 -0.1535958 0.9879058 0 0 0 0 1 0.986104 0.1660775 0.004137873 0 -0.1646731 0.9738683 0.1564078 0 0.02194601 -0.1549158 0.987684 0 0 0 0 1 0.9858502 0.167571 0.004388093 0 -0.1661344 0.9732412 0.1587489 0 0.02233099 -0.1572316 0.9873093 0 0 0 0 1 0.9856415 0.1688005 0.00413984 0 -0.1674214 0.973816 0.1537941 0 0.02192908 -0.152279 0.9880943 0 0 0 0 1 0.9853659 0.1704198 0.003332376 0 -0.169017 0.9743501 0.148577 0 0.0220735 -0.1469659 0.9888952 0 0 0 0 1 0.9854243 0.1700884 0.002964079 0 -0.1686058 0.9742233 0.1498702 0 0.02260345 -0.1481856 0.9887013 0 0 0 0 1 0.9854676 0.1698287 0.003420889 0 -0.1682648 0.9732401 0.1564955 0 0.02324807 -0.1547969 0.9876728 0 0 0 0 1 0.9855763 0.1691789 0.004215955 0 -0.1676883 0.9729291 0.1590276 0 0.02280229 -0.1574408 0.9872652 0 0 0 0 1 0.9860014 0.1666824 0.004257082 0 -0.1652522 0.9735045 0.1580534 0 0.02220034 -0.1565444 0.9874214 0 0 0 0 1 0.98635 0.164627 0.00339806 0 -0.16308 0.9738113 0.1584193 0 0.022771 -0.1568111 0.9873661 0 0 0 0 1 0.9859877 0.1667987 0.002508342 0 -0.1651041 0.9736 0.1576194 0 0.02384853 -0.155825 0.9874967 0 0 0 0 1 0.9858584 0.1675633 0.002409517 0 -0.16584 0.9734501 0.1577724 0 0.0240913 -0.1559408 0.9874726 0 0 0 0 1 0.9860073 0.1666886 0.002091944 0 -0.1649184 0.9735523 0.1581079 0 0.02431809 -0.1562405 0.9874197 0 0 0 0 1 0.9860644 0.1663555 0.001636803 0 -0.1645745 0.9739742 0.155851 0 0.0243324 -0.1539484 0.9877793 0 0 0 0 1 0.9865347 0.163549 9.43551e-4 0 -0.1617079 0.974533 0.1553583 0 0.02448916 -0.1534188 0.9878577 0 0 0 0 1 0.9867135 0.1624695 -2.18567e-4 0 -0.1604021 0.9743703 0.1577152 0 0.02583688 -0.1555846 0.9874846 0 0 0 0 1 0.9865323 0.1635566 -0.001790106 0 -0.1612069 0.9740952 0.1585909 0 0.0276823 -0.1561664 0.9873428 0 0 0 0 1 0.9867729 0.162091 -0.002388656 0 -0.1596186 0.9740837 0.160259 0 0.02830326 -0.157758 0.9870721 0 0 0 0 1 0.9867013 0.1625324 -0.001870632 0 -0.1601266 0.9739448 0.1605963 0 0.027924 -0.158161 0.9870184 0 0 0 0 1 0.9862647 0.1651577 -0.002158463 0 -0.1627191 0.97378 0.1589813 0 0.02835887 -0.1564463 0.9872792 0 0 0 0 1 0.985741 0.168232 -0.003536999 0 -0.1655845 0.9735397 0.1574878 0 0.02993786 -0.1546564 0.9875147 0 0 0 0 1 0.9862154 0.165432 -0.003383636 0 -0.1627759 0.9736485 0.1597272 0 0.02971845 -0.1569746 0.9871554 0 0 0 0 1 0.9864497 0.1640025 -0.004463016 0 -0.1611431 0.9736431 0.1614071 0 0.03081655 -0.1585008 0.9868779 0 0 0 0 1 0.9856698 0.1685819 -0.005923151 0 -0.1655831 0.9736468 0.1568265 0 0.03220516 -0.1535984 0.9876084 0 0 0 0 1 0.9851595 0.1715027 -0.006896197 0 -0.1684524 0.9737844 0.1528654 0 0.03293222 -0.1494351 0.988223 0 0 0 0 1 0.9851347 0.1716325 -0.007196366 0 -0.1684663 0.9734572 0.1549209 0 0.03359484 -0.1514056 0.9879006 0 0 0 0 1 0.9851084 0.1717819 -0.007234692 0 -0.1686081 0.9734326 0.1549213 0 0.03365516 -0.1513944 0.9879004 0 0 0 0 1 0.9847726 0.1736429 -0.008417785 0 -0.170229 0.9729751 0.1560186 0 0.03528183 -0.1522099 0.9877183 0 0 0 0 1 0.9854558 0.1697217 -0.008454024 0 -0.1663363 0.973589 0.1563874 0 0.03477305 -0.1527066 0.9876597 0 0 0 0 1 0.9859659 0.1667032 -0.009014666 0 -0.1632068 0.9738371 0.1581298 0 0.03513956 -0.1544393 0.9873772 0 0 0 0 1 0.9852115 0.1710672 -0.009712696 0 -0.1676061 0.97395 0.1527407 0 0.03558862 -0.148854 0.9882186 0 0 0 0 1 0.9851468 0.1715795 -0.006810009 0 -0.1690095 0.975876 0.1382097 0 0.03035968 -0.1350058 0.9903796 0 0 0 0 1 0.9849736 0.1723992 -0.01027971 0 -0.1686437 0.9729366 0.157968 0 0.03723502 -0.1538607 0.9873908 0 0 0 0 1 0.9853793 0.1699681 -0.0117641 0 -0.1661594 0.9739705 0.1541839 0 0.03766423 -0.1499749 0.9879721 0 0 0 0 1 0.9856033 0.1687278 -0.01082777 0 -0.1652776 0.9749864 0.1486107 0 0.03563171 -0.1446815 0.9888365 0 0 0 0 1 0.9858629 0.1672965 -0.009282231 0 -0.1639234 0.9744907 0.1532883 0 0.03469002 -0.1495997 0.988138 0 0 0 0 1 0.9862186 0.1652107 -0.008828938 0 -0.1619109 0.9747415 0.1538308 0 0.03402042 -0.1502813 0.9880578 0 0 0 0 1 0.9860134 0.1664106 -0.009219229 0 -0.163383 0.9760372 0.143727 0 0.032916 -0.1402105 0.9895744 0 0 0 0 1 0.9862853 0.1647714 -0.009577989 0 -0.1617279 0.9763913 0.1431926 0 0.03294593 -0.1396797 0.9896485 0 0 0 0 1 0.9863749 0.1643082 -0.008206784 0 -0.1609016 0.9739156 0.1599972 0 0.03428155 -0.1564967 0.9870833 0 0 0 0 1 0.9861028 0.1658878 -0.009067475 0 -0.1621468 0.972881 0.164958 0 0.03618609 -0.1611953 0.9862589 0 0 0 0 1 0.9857197 0.1679231 -0.01258897 0 -0.1637589 0.9733232 0.1607024 0 0.03923881 -0.156346 0.9869227 0 0 0 0 1 0.9855615 0.168602 -0.01555365 0 -0.1642594 0.974361 0.1537523 0 0.04107779 -0.1489775 0.987987 0 0 0 0 1 0.9852007 0.170822 -0.01412624 0 -0.1668456 0.9746137 0.149301 0 0.03927153 -0.1447345 0.9886909 0 0 0 0 1 0.984674 0.1739452 -0.01265472 0 -0.1703215 0.974694 0.1447839 0 0.03751897 -0.1404095 0.9893824 0 0 0 0 1 0.9845156 0.1747534 -0.01379597 0 -0.1709759 0.974635 0.1444093 0 0.03868204 -0.1398145 0.9894219 0 0 0 0 1 0.984752 0.1733103 -0.01506775 0 -0.1691492 0.9741351 0.1498316 0 0.04064536 -0.1449983 0.9885967 0 0 0 0 1 0.9847481 0.173259 -0.01589119 0 -0.1690375 0.9743687 0.1484323 0 0.04120111 -0.1434822 0.9887949 0 0 0 0 1 0.9847145 0.17355 -0.01476156 0 -0.1694912 0.974303 0.1483461 0 0.04012769 -0.1435766 0.9888253 0 0 0 0 1 0.9845409 0.1746976 -0.01264566 0 -0.1705864 0.9727419 0.1570782 0 0.03974217 -0.1524927 0.9875052 0 0 0 0 1 0.9846197 0.1743516 -0.01120507 0 -0.1703867 0.9724519 0.1590782 0 0.03863197 -0.1547223 0.9872024 0 0 0 0 1 0.9849336 0.172564 -0.01128756 0 -0.1686362 0.9728739 0.1583614 0 0.03830885 -0.1540719 0.9873167 0 0 0 0 1 0.9847707 0.1733802 -0.01289117 0 -0.1691871 0.9727444 0.1585688 0 0.0400325 -0.1539728 0.9872638 0 0 0 0 1 0.9844747 0.1749262 -0.01450669 0 -0.1705195 0.9727186 0.1572951 0 0.04162597 -0.1523793 0.9874452 0 0 0 0 1 0.9846743 0.1737359 -0.01524674 0 -0.1695032 0.9739208 0.1508215 0 0.04105222 -0.1459257 0.9884434 0 0 0 0 1 0.9847582 0.1733534 -0.01413846 0 -0.1690505 0.9730871 0.1565997 0 0.04090505 -0.1518228 0.987561 0 0 0 0 1 0.984849 0.1728729 -0.01368713 0 -0.1684664 0.9724851 0.1609089 0 0.04112732 -0.1561651 0.9868744 0 0 0 0 1 0.9849199 0.1723787 -0.01477867 0 -0.1681435 0.9738308 0.1529099 0 0.04075038 -0.1481191 0.9881297 0 0 0 0 1 0.9851166 0.1712357 -0.0149545 0 -0.1671605 0.9746556 0.1486744 0 0.04003387 -0.1439618 0.9887731 0 0 0 0 1 0.984524 0.1747516 -0.01319754 0 -0.1703205 0.9718524 0.1627699 0 0.04127037 -0.158003 0.9865759 0 0 0 0 1 0.9833965 0.1808982 -0.01439052 0 -0.1759767 0.9699896 0.1677867 0 0.04431098 -0.1624684 0.9857183 0 0 0 0 1 0.9835355 0.1799925 -0.01614201 0 -0.1753341 0.9720711 0.1559997 0 0.04376995 -0.150601 0.9876253 0 0 0 0 1 0.9843354 0.1756304 -0.01542252 0 -0.1713761 0.9736837 0.1502339 0 0.04140233 -0.1452376 0.9885301 0 0 0 0 1 0.9841755 0.1764792 -0.01592189 0 -0.1720865 0.9733527 0.151562 0 0.04224509 -0.1464236 0.9883195 0 0 0 0 1 0.9838487 0.1782465 -0.01642847 0 -0.1735098 0.9721971 0.1572491 0 0.04400086 -0.1518588 0.9874224 0 0 0 0 1 0.9842115 0.1762214 -0.01654475 0 -0.1713487 0.9720596 0.1604365 0 0.04435485 -0.1550685 0.9869076 0 0 0 0 1 0.9846902 0.1736379 -0.01533406 0 -0.1691843 0.9731923 0.1557995 0 0.04197567 -0.1508199 0.9876698 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_Neck_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_Neck_pose_matrix-interpolation"> + <Name_array id="_6_15_t_Neck_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_Neck_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_Neck_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_Neck_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_Neck_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_Neck_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_Neck_pose_matrix-sampler" target="Neck/transform"/> + </animation> + <animation id="_6_15_t_Neck1_pose_matrix"> + <source id="_6_15_t_Neck1_pose_matrix-input"> + <float_array id="_6_15_t_Neck1_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_Neck1_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_Neck1_pose_matrix-output"> + <float_array id="_6_15_t_Neck1_pose_matrix-output-array" count="2224">0.991829 -0.1246845 -0.02700293 0 0.1231967 0.9910647 -0.05112105 0.1141579 0.03313571 0.04737675 0.9983275 0 0 0 0 1 0.9924252 -0.1204864 -0.02399009 0 0.1189724 0.9912698 -0.05683183 0.1141579 0.03062814 0.05354714 0.9980956 0 0 0 0 1 0.9925037 -0.119993 -0.02319967 0 0.1183014 0.9909064 -0.06410598 0.1141579 0.03068095 0.06088089 0.9976736 0 0 0 0 1 0.9924556 -0.1203039 -0.02364188 0 0.1183874 0.9904718 -0.07035791 0.1141579 0.03188091 0.06702828 0.9972418 0 0 0 0 1 0.9925072 -0.1202102 -0.02188539 0 0.1182734 0.9901525 -0.074898 0.1141579 0.03067338 0.07174837 0.9969511 0 0 0 0 1 0.9923608 -0.1217974 -0.01963353 0 0.1199041 0.989648 -0.07886761 0.1141579 0.0290361 0.07591098 0.9966918 0 0 0 0 1 0.9924354 -0.1210476 -0.02048718 0 0.1190783 0.9897124 -0.07930827 0.1141579 0.02987653 0.07626885 0.9966397 0 0 0 0 1 0.9923007 -0.1220543 -0.0210278 0 0.120073 0.9896757 -0.07826089 0.1141579 0.03036278 0.0751335 0.9967113 0 0 0 0 1 0.9919736 -0.1247892 -0.02039766 0 0.1229255 0.9895271 -0.07566905 0.1141579 0.02962672 0.07255434 0.9969245 0 0 0 0 1 0.9921718 -0.1230545 -0.02128225 0 0.1211177 0.9897171 -0.07609635 0.1141579 0.03042745 0.07292306 0.9968734 0 0 0 0 1 0.9922826 -0.1222687 -0.02063047 0 0.1201915 0.9893264 -0.08238583 0.1141579 0.03048348 0.07927048 0.9963871 0 0 0 0 1 0.99213 -0.1238733 -0.01826679 0 0.1218611 0.9887703 -0.0865066 0.1141579 0.02877748 0.0835998 0.9960839 0 0 0 0 1 0.9922831 -0.1229696 -0.01590692 0 0.1212313 0.9890869 -0.08372712 0.1141579 0.02602922 0.08115267 0.9963619 0 0 0 0 1 0.99237 -0.1224817 -0.01414459 0 0.120904 0.9891816 -0.08307892 0.1141579 0.02416723 0.08073496 0.9964427 0 0 0 0 1 0.9921476 -0.1245344 -0.01159679 0 0.1232141 0.989117 -0.08041071 0.1141579 0.02148449 0.07835042 0.9966945 0 0 0 0 1 0.9922813 -0.1235595 -0.01053708 0 0.1224305 0.9896258 -0.07517713 0.1141579 0.01971662 0.07330685 0.9971147 0 0 0 0 1 0.9929059 -0.1185401 -0.009288847 0 0.1175535 0.9903717 -0.07311141 0.1141579 0.01786607 0.07150083 0.9972807 0 0 0 0 1 0.9934815 -0.1138414 -0.005905866 0 0.1131349 0.9910165 -0.07132285 0.1141579 0.01397228 0.07018983 0.9974359 0 0 0 0 1 0.9935908 -0.1129506 -0.004422307 0 0.1124184 0.9914833 -0.06575018 0.1141579 0.01181119 0.06483161 0.9978265 0 0 0 0 1 0.9933389 -0.1151709 -0.003703892 0 0.1147294 0.991503 -0.06131345 0.1141579 0.01073396 0.06048011 0.9981119 0 0 0 0 1 0.9936147 -0.1128151 -0.001648485 0 0.112487 0.9916468 -0.06311446 0.1141579 0.008755028 0.06252604 0.9980051 0 0 0 0 1 0.9941071 -0.1083931 -0.001463174 0 0.1080737 0.9920489 -0.06449127 0.1141579 0.008441925 0.06395322 0.9979174 0 0 0 0 1 0.994328 -0.106349 -0.001443624 0 0.1060407 0.9923119 -0.0638172 0.1141579 0.00821942 0.06330215 0.9979607 0 0 0 0 1 0.9944735 -0.1049883 -3.31915e-4 0 0.1047604 0.9925125 -0.06280541 0.1141579 0.006923258 0.06242358 0.9980259 0 0 0 0 1 0.9941903 -0.1076318 0.001153647 0 0.1074743 0.9920304 -0.06576597 0.1141579 0.005934 0.06550794 0.9978346 0 0 0 0 1 0.9939707 -0.1095795 0.003834128 0 0.1095787 0.9915175 -0.0698986 0.1141579 0.003857791 0.06989735 0.9975469 0 0 0 0 1 0.9942995 -0.1065455 0.004110217 0 0.1065623 0.9916607 -0.07248401 0.1141579 0.00364685 0.07250887 0.9973613 0 0 0 0 1 0.9945483 -0.1042224 0.003402233 0 0.1041969 0.9919612 -0.07180583 0.1141579 0.004108846 0.07176887 0.9974129 0 0 0 0 1 0.9945435 -0.1042163 0.004725575 0 0.1042696 0.9915547 -0.07711911 0.1141579 0.00335139 0.07719111 0.9970108 0 0 0 0 1 0.9945909 -0.10369 0.006106793 0 0.103836 0.9910507 -0.08388441 0.1141579 0.00264579 0.08406478 0.9964569 0 0 0 0 1 0.9946025 -0.1035473 0.00663805 0 0.1037364 0.9909808 -0.08482956 0.1141579 0.00220561 0.08506035 0.9963736 0 0 0 0 1 0.9946721 -0.1028217 0.007432758 0 0.1030852 0.9913506 -0.08122682 0.1141579 9.83412e-4 0.08156025 0.9966681 0 0 0 0 1 0.994893 -0.1006466 0.007630586 0 0.100934 0.9916291 -0.0805251 0.1141579 5.3784e-4 0.08088403 0.9967235 0 0 0 0 1 0.9950922 -0.09858614 0.008501946 0 0.09895169 0.9916554 -0.08263343 0.1141579 -2.84504e-4 0.0830692 0.996544 0 0 0 0 1 0.9949927 -0.09947288 0.009725987 0 0.09993767 0.9915213 -0.08305501 0.1141579 -0.001381814 0.08361119 0.9964977 0 0 0 0 1 0.9947422 -0.1019542 0.009676098 0 0.1024057 0.9912976 -0.08271777 0.1141579 -0.001158475 0.08327376 0.9965262 0 0 0 0 1 0.9944643 -0.1046751 0.009151756 0 0.1050734 0.9910512 -0.08232426 0.1141579 -4.52557e-4 0.08283019 0.9965637 0 0 0 0 1 0.9943383 -0.1059635 0.007955193 0 0.1062588 0.990969 -0.0817914 0.1141579 7.83515e-4 0.0821737 0.9966179 0 0 0 0 1 0.9945472 -0.1040596 0.006893634 0 0.1042797 0.9914783 -0.07808107 0.1141579 0.001290142 0.0783742 0.9969233 0 0 0 0 1 0.9946168 -0.1034471 0.006028175 0 0.1036118 0.9919911 -0.07223957 0.1141579 0.001492977 0.07247531 0.9973692 0 0 0 0 1 0.994854 -0.1011744 0.005412161 0 0.1013018 0.9922785 -0.07156544 0.1141579 0.001870155 0.07174545 0.9974213 0 0 0 0 1 0.995118 -0.09858894 0.004518151 0 0.09865605 0.9924669 -0.0726397 0.1141579 0.002677321 0.07273083 0.9973481 0 0 0 0 1 0.9949834 -0.09994953 0.004270851 0 0.09999555 0.9923443 -0.07248407 0.1141579 0.003006577 0.07254755 0.9973605 0 0 0 0 1 0.994571 -0.1039165 0.00547403 0 0.1040357 0.9918061 -0.0741443 0.1141579 0.002275586 0.07431131 0.9972326 0 0 0 0 1 0.9942576 -0.1067742 0.00717616 0 0.1070079 0.9911779 -0.07820427 0.1141579 0.001237273 0.07852321 0.9969117 0 0 0 0 1 0.994897 -0.1008543 0.002904534 0 0.1007907 0.99213 -0.07429236 0.1141579 0.004610955 0.07420605 0.9972324 0 0 0 0 1 0.9952134 -0.09772348 6.25768e-4 0 0.09750843 0.9925562 -0.07296782 0.1141579 0.006509542 0.07267963 0.9973343 0 0 0 0 1 0.9949367 -0.1004427 -0.003526091 0 0.09995329 0.9925399 -0.06981492 0.1141579 0.01051217 0.06910902 0.9975538 0 0 0 0 1 0.9948935 -0.1008859 -0.00300467 0 0.100457 0.9926665 -0.06724309 0.1141579 0.009766519 0.06659787 0.9977322 0 0 0 0 1 0.9950622 -0.09919047 0.003536999 0 0.09919238 0.9925679 -0.07049822 0.1141579 0.003481984 0.07050102 0.9975059 0 0 0 0 1 0.9950914 -0.0986368 0.00799483 0 0.09895908 0.9922218 -0.07551878 0.1141579 -4.8373e-4 0.07593929 0.9971125 0 0 0 0 1 0.9952573 -0.09677964 0.009833812 0 0.09725058 0.9922793 -0.07696956 0.1141579 -0.002308845 0.07756084 0.9969851 0 0 0 0 1 0.9954544 -0.09500473 0.006680369 0 0.0952388 0.9927697 -0.0730617 0.1141579 3.09091e-4 0.07336586 0.9973052 0 0 0 0 1 0.9952999 -0.09683024 0.001431524 0 0.09669226 0.9928463 -0.07005113 0.1141579 0.005361735 0.06986033 0.9975426 0 0 0 0 1 0.9954453 -0.09530603 0.002348363 0 0.09523612 0.9929906 -0.0699988 0.1141579 0.004339396 0.06990367 0.9975444 0 0 0 0 1 0.995252 -0.09723341 0.004392623 0 0.09730118 0.9927717 -0.07026308 0.1141579 0.002471029 0.0703569 0.997519 0 0 0 0 1 0.9951466 -0.09838503 0.001932442 0 0.09827756 0.9926813 -0.07018274 0.1141579 0.004986584 0.07003211 0.9975324 0 0 0 0 1 0.9954538 -0.09520965 0.002616524 0 0.09515309 0.992901 -0.07136833 0.1141579 0.004197001 0.07129287 0.9974467 0 0 0 0 1 0.9959622 -0.08924371 0.009744822 0 0.08972316 0.9931737 -0.07453757 0.1141579 -0.003026306 0.07511097 0.9971708 0 0 0 0 1 0.9963209 -0.08481061 0.01233834 0 0.08549451 0.9935842 -0.0740351 0.1141579 -0.005980193 0.07481753 0.9971795 0 0 0 0 1 0.996297 -0.08507436 0.01244264 0 0.08576667 0.9935449 -0.07424873 0.1141579 -0.006045639 0.07504093 0.9971623 0 0 0 0 1 0.9961075 -0.08713477 0.01332825 0 0.08788716 0.9933674 -0.07414251 0.1141579 -0.006779432 0.07502532 0.9971588 0 0 0 0 1 0.9960774 -0.08786857 0.01045322 0 0.08838844 0.9935954 -0.07039844 0.1141579 -0.004200458 0.07104629 0.9974643 0 0 0 0 1 0.9961276 -0.08757919 0.007733166 0 0.08789598 0.9940491 -0.06435012 0.1141579 -0.002051413 0.06478071 0.9978976 0 0 0 0 1 0.9961724 -0.08690446 0.009398281 0 0.08732885 0.9941295 -0.06387758 0.1141579 -0.003791868 0.06445389 0.9979137 0 0 0 0 1 0.9962532 -0.08566784 0.0118609 0 0.08624094 0.9943513 -0.06187081 0.1141579 -0.006493508 0.06266194 0.9980139 0 0 0 0 1 0.9961479 -0.08677089 0.0126608 0 0.08739238 0.9942477 -0.06192088 0.1141579 -0.007215023 0.06278884 0.9980009 0 0 0 0 1 0.9962482 -0.08533412 0.01441484 0 0.08611124 0.9940484 -0.06673097 0.1141579 -0.008634626 0.06772196 0.9976671 0 0 0 0 1 0.9964285 -0.08280354 0.01655298 0 0.0838415 0.993483 -0.07721692 0.1141579 -0.01005125 0.07832902 0.996877 0 0 0 0 1 0.9963712 -0.08377999 0.0150184 0 0.08475822 0.9927715 -0.08497726 0.1141579 -0.007790446 0.08594185 0.9962698 0 0 0 0 1 0.9958531 -0.09013146 0.01237607 0 0.0908814 0.991797 -0.08988541 0.1141579 -0.00417304 0.09063744 0.9958754 0 0 0 0 1 0.9956559 -0.09232258 0.01208126 0 0.09303522 0.991638 -0.08943521 0.1141579 -0.003723382 0.09017074 0.9959195 0 0 0 0 1 0.9958702 -0.08992528 0.0124942 0 0.09069788 0.9915713 -0.09252214 0.1141579 -0.004068851 0.09327328 0.9956323 0 0 0 0 1 0.9958499 -0.09025055 0.01174247 0 0.09095549 0.9914379 -0.09369212 0.1141579 -0.003186166 0.09437137 0.9955322 0 0 0 0 1 0.995719 -0.09163081 0.01215058 0 0.0923798 0.9909665 -0.09721964 0.1141579 -0.003132522 0.0979259 0.995189 0 0 0 0 1 0.9957078 -0.09159773 0.01326423 0 0.09246492 0.9907462 -0.09936028 0.1141579 -0.0040403 0.1001604 0.9949633 0 0 0 0 1 0.9956226 -0.09254246 0.01310944 0 0.09338098 0.9908753 -0.0971924 0.1141579 -0.003995418 0.09799116 0.9951795 0 0 0 0 1 0.9955856 -0.09307944 0.01206475 0 0.09380805 0.9909962 -0.0955339 0.1141579 -0.003063917 0.09624397 0.9953532 0 0 0 0 1 0.9953725 -0.09539407 0.01156294 0 0.09606933 0.9905335 -0.09805208 0.1141579 -0.002099871 0.09870916 0.9951143 0 0 0 0 1 0.9952163 -0.09696197 0.01196604 0 0.09766781 0.9904434 -0.09738135 0.1141579 -0.002409398 0.09808427 0.9951754 0 0 0 0 1 0.995339 -0.09570723 0.01185178 0 0.09640377 0.990728 -0.09573179 0.1141579 -0.002579689 0.09642815 0.9953367 0 0 0 0 1 0.995362 -0.09560739 0.01067084 0 0.09619271 0.9905952 -0.09730601 0.1141579 -0.001267254 0.09788119 0.9951974 0 0 0 0 1 0.9952064 -0.09730643 0.009786248 0 0.09779709 0.9904139 -0.09755116 0.1141579 -2.00109e-4 0.09804069 0.9951826 0 0 0 0 1 0.9950954 -0.09844875 0.00964725 0 0.09892028 0.9903153 -0.09741979 0.1141579 3.69903e-5 0.09789633 0.9951968 0 0 0 0 1 0.9952036 -0.09741336 0.008966982 0 0.09782373 0.9905043 -0.09660172 0.1141579 5.28451e-4 0.09701555 0.995283 0 0 0 0 1 0.9950674 -0.09882068 0.00868833 0 0.09919822 0.9904554 -0.0956971 0.1141579 8.51427e-4 0.09608697 0.9953727 0 0 0 0 1 0.9950498 -0.09909564 0.007483184 0 0.09935867 0.990557 -0.09447157 0.1141579 0.001949191 0.09474748 0.9954996 0 0 0 0 1 0.9949217 -0.1005242 0.005095064 0 0.1005612 0.9905717 -0.09303367 0.1141579 0.004305064 0.0930736 0.9956501 0 0 0 0 1 0.9949323 -0.100511 0.00271219 0 0.1003306 0.9906526 -0.09242022 0.1141579 0.006602346 0.092224 0.9957165 0 0 0 0 1 0.9952285 -0.09755986 0.001500666 0 0.09727752 0.9909205 -0.09281015 0.1141579 0.007567405 0.09251332 0.9956828 0 0 0 0 1 0.9951047 -0.09880936 0.001787304 0 0.09856855 0.9910514 -0.09000837 0.1141579 0.007122337 0.08974397 0.9959396 0 0 0 0 1 0.9945743 -0.1040188 0.001451313 0 0.1037503 0.9907941 -0.08696687 0.1141579 0.007608234 0.0866456 0.9962103 0 0 0 0 1 0.9941789 -0.1077427 -2.44809e-5 0 0.1073369 0.9904538 -0.086488 0.1141579 0.00934267 0.08598196 0.996253 0 0 0 0 1 0.9946482 -0.1033204 -2.84584e-4 0 0.102898 0.9908233 -0.08764308 0.1141579 0.009337246 0.08714473 0.9961521 0 0 0 0 1 0.9945915 -0.103843 -0.002142965 0 0.1032496 0.9907296 -0.08828639 0.1141579 0.01129102 0.08758765 0.9960929 0 0 0 0 1 0.9940785 -0.1086286 -0.002832293 0 0.1079517 0.9901948 -0.08866155 0.1141579 0.01243573 0.08783084 0.9960579 0 0 0 0 1 0.9939152 -0.1100947 -0.003445267 0 0.1093896 0.9902483 -0.08626902 0.1141579 0.01290947 0.08536726 0.9962661 0 0 0 0 1 0.9940454 -0.1088784 -0.004422903 0 0.1081055 0.9904601 -0.08545178 0.1141579 0.01368457 0.08446484 0.9963326 0 0 0 0 1 0.9939962 -0.1093155 -0.004696965 0 0.1085407 0.9905528 -0.08381152 0.1141579 0.0138145 0.08279848 0.9964707 0 0 0 0 1 0.9936355 -0.1124733 -0.006198287 0 0.1115329 0.9900535 -0.08575934 0.1141579 0.01578223 0.08452224 0.9962967 0 0 0 0 1 0.9940456 -0.1087681 -0.006565392 0 0.1078122 0.9904777 -0.08561909 0.1141579 0.01581555 0.08440148 0.9963065 0 0 0 0 1 0.9942974 -0.1063538 -0.007856965 0 0.1052933 0.9907267 -0.08587348 0.1141579 0.01691704 0.08455651 0.9962753 0 0 0 0 1 0.9936185 -0.1124661 -0.008599042 0 0.1114702 0.9907432 -0.0774765 0.1141579 0.01723295 0.07602357 0.9969573 0 0 0 0 1 0.9930371 -0.1177237 -0.004310369 0 0.1172856 0.9914416 -0.05733907 0.1141579 0.0110237 0.05643433 0.9983456 0 0 0 0 1 0.9931088 -0.1166011 -0.01180136 0 0.1155236 0.9909095 -0.06894016 0.1141579 0.01973259 0.06710183 0.9975511 0 0 0 0 1 0.9931641 -0.1158425 -0.01434159 0 0.1147775 0.9915395 -0.06062752 0.1141579 0.02124351 0.05856704 0.9980576 0 0 0 0 1 0.9932196 -0.1155314 -0.01294386 0 0.1146925 0.9919732 -0.05324423 0.1141579 0.01899135 0.05139863 0.9984978 0 0 0 0 1 0.9936231 -0.1122092 -0.01105666 0 0.111376 0.9920378 -0.0587908 0.1141579 0.01756554 0.05718451 0.9982093 0 0 0 0 1 0.9938696 -0.1100589 -0.01051497 0 0.109247 0.9922289 -0.05955755 0.1141579 0.01698809 0.05804371 0.9981697 0 0 0 0 1 0.9936775 -0.1118747 -0.009450078 0 0.1111964 0.9922846 -0.05483287 0.1141579 0.01551163 0.05343544 0.9984509 0 0 0 0 1 0.994111 -0.1080194 -0.008682847 0 0.107267 0.9922404 -0.06287294 0.1141579 0.01540702 0.06157135 0.9979839 0 0 0 0 1 0.9942762 -0.1064411 -0.009234607 0 0.1055125 0.9918264 -0.07174736 0.1141579 0.01679605 0.07036232 0.9973803 0 0 0 0 1 0.9939453 -0.1091851 -0.01231819 0 0.1081475 0.9919431 -0.06597733 0.1141579 0.01942265 0.0642457 0.9977453 0 0 0 0 1 0.9934952 -0.1126538 -0.01662981 0 0.1114061 0.9917809 -0.0629251 0.1141579 0.02358192 0.06066316 0.9978799 0 0 0 0 1 0.9934436 -0.1126362 -0.0195679 0 0.1112945 0.9919897 -0.05975008 0.1141579 0.02614122 0.05718058 0.9980217 0 0 0 0 1 0.9936124 -0.1115753 -0.01689583 0 0.1104633 0.9922708 -0.05653899 0.1141579 0.02307361 0.05431145 0.9982575 0 0 0 0 1 0.9933561 -0.1141358 -0.01472449 0 0.1132826 0.9923256 -0.0495705 0.1141579 0.02026927 0.04757314 0.9986622 0 0 0 0 1 0.992765 -0.1188936 -0.01679694 0 0.1180148 0.9919409 -0.04610687 0.1141579 0.02214342 0.04379105 0.9987953 0 0 0 0 1 0.9927427 -0.1186644 -0.01951342 0 0.1176062 0.9918731 -0.04854559 0.1141579 0.02511548 0.04589843 0.9986305 0 0 0 0 1 0.9929112 -0.117152 -0.02007538 0 0.1160335 0.991989 -0.04994273 0.1141579 0.02576547 0.04725933 0.9985504 0 0 0 0 1 0.9927784 -0.1185591 -0.01830565 0 0.1174899 0.9917478 -0.05131006 0.1141579 0.02423787 0.04878878 0.9985151 0 0 0 0 1 0.9923551 -0.1222248 -0.01710736 0 0.1211604 0.9911932 -0.05344414 0.1141579 0.02348893 0.05096286 0.9984244 0 0 0 0 1 0.9924725 -0.1214656 -0.01564007 0 0.120485 0.9912949 -0.0530858 0.1141579 0.02195203 0.05080187 0.9984676 0 0 0 0 1 0.9930042 -0.117013 -0.01583385 0 0.116066 0.9919143 -0.05132991 0.1141579 0.02171212 0.04913306 0.9985564 0 0 0 0 1 0.9927149 -0.1191162 -0.01812779 0 0.1180586 0.9916877 -0.05116444 0.1141579 0.02407163 0.04865163 0.9985259 0 0 0 0 1 0.9922833 -0.1224212 -0.01967126 0 0.1212194 0.9911718 -0.05370706 0.1141579 0.0260725 0.05090814 0.9983631 0 0 0 0 1 0.9922684 -0.1225918 -0.01935648 0 0.1214225 0.9911819 -0.05306005 0.1141579 0.02569049 0.05029952 0.9984039 0 0 0 0 1 0.992533 -0.120481 -0.01904678 0 0.1193151 0.9914069 -0.05363351 0.1141579 0.02534496 0.05096048 0.9983792 0 0 0 0 1 0.9926781 -0.1191814 -0.01964807 0 0.1180262 0.9916436 -0.05208688 0.1141579 0.02569168 0.04938656 0.9984495 0 0 0 0 1 0.9926232 -0.1196543 -0.01954871 0 0.1185383 0.9916529 -0.05072832 0.1141579 0.02545541 0.04803681 0.9985213 0 0 0 0 1 0.9926612 -0.1194109 -0.01910287 0 0.1183537 0.9917497 -0.04924452 0.1141579 0.02482563 0.04662227 0.9986042 0 0 0 0 1 0.9921769 -0.1233006 -0.01954483 0 0.1221678 0.9911853 -0.05125325 0.1141579 0.0256921 0.04846465 0.9984946 0 0 0 0 1 0.9912263 -0.1302659 -0.02239203 0 0.1290113 0.9903573 -0.050484 0.1141579 0.0287525 0.04715228 0.998474 0 0 0 0 1 0.9912067 -0.1304694 -0.0220701 0 0.1292347 0.9903371 -0.05030959 0.1141579 0.02842068 0.04701501 0.99849 0 0 0 0 1 0.9918829 -0.1256578 -0.01945537 0 0.1244868 0.9908152 -0.05280625 0.1141579 0.02591222 0.04995566 0.9984154 0 0 0 0 1 0.9919139 -0.1253259 -0.02000361 0 0.1240602 0.9907302 -0.05534327 0.1141579 0.02675414 0.05241411 0.9982671 0 0 0 0 1 0.9916744 -0.1270019 -0.02127093 0 0.1255373 0.9902771 -0.05993282 0.1141579 0.02867567 0.05676352 0.9979759 0 0 0 0 1 0.9917715 -0.1260681 -0.02227473 0 0.1245473 0.9904007 -0.05995362 0.1141579 0.02961915 0.0566861 0.9979527 0 0 0 0 1 0.9922695 -0.1224924 -0.01992624 0 0.1211712 0.9909531 -0.05770248 0.1141579 0.02681416 0.05484199 0.998135 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_Neck1_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_Neck1_pose_matrix-interpolation"> + <Name_array id="_6_15_t_Neck1_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_Neck1_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_Neck1_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_Neck1_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_Neck1_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_Neck1_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_Neck1_pose_matrix-sampler" target="Neck1/transform"/> + </animation> + <animation id="_6_15_t_Head_pose_matrix"> + <source id="_6_15_t_Head_pose_matrix-input"> + <float_array id="_6_15_t_Head_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_Head_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_Head_pose_matrix-output"> + <float_array id="_6_15_t_Head_pose_matrix-output-array" count="2224">0.9977452 -0.05967098 -0.0307222 0 0.05012464 0.9669108 -0.2501422 0.09175074 0.04463183 0.2480382 0.9677217 0 0 0 0 1 0.9978646 -0.05808174 -0.02987682 0 0.0487709 0.9668437 -0.2506691 0.09175074 0.04344552 0.2486767 0.9676117 0 0 0 0 1 0.9978662 -0.05794459 -0.03009092 0 0.04848533 0.9662846 -0.2528702 0.09175074 0.04372888 0.2508717 0.9670321 0 0 0 0 1 0.9978228 -0.05836606 -0.0307067 0 0.04858016 0.9653722 -0.2563139 0.09175074 0.0446034 0.2542641 0.9661058 0 0 0 0 1 0.9977781 -0.05936676 -0.03023725 0 0.04953104 0.9645304 -0.2592839 0.09175074 0.04455757 0.2572101 0.9653277 0 0 0 0 1 0.9977371 -0.06044346 -0.02944833 0 0.05071187 0.9640961 -0.260667 0.09175074 0.04414659 0.2585837 0.9649796 0 0 0 0 1 0.9977725 -0.05960828 -0.02994471 0 0.0498175 0.9643849 -0.2597694 0.09175074 0.04436266 0.2576991 0.9652063 0 0 0 0 1 0.9977415 -0.05997884 -0.03023934 0 0.05014443 0.9646278 -0.2588029 0.09175074 0.04469239 0.2567021 0.9654568 0 0 0 0 1 0.9976958 -0.06090259 -0.02990001 0 0.0512464 0.9652737 -0.2561656 0.09175074 0.04446285 0.2540431 0.9661704 0 0 0 0 1 0.997779 -0.05935794 -0.03022819 0 0.04968965 0.9654777 -0.255703 0.09175074 0.04436266 0.2536331 0.9662827 0 0 0 0 1 0.9978109 -0.05894309 -0.0299862 0 0.04915714 0.9643789 -0.2599174 0.09175074 0.04423838 0.2578743 0.9651652 0 0 0 0 1 0.997764 -0.06023848 -0.02895325 0 0.05053657 0.9634728 -0.262995 0.09175074 0.04373812 0.2609437 0.9643627 0 0 0 0 1 0.9977854 -0.06045812 -0.0277335 0 0.05113023 0.9638289 -0.2615714 0.09175074 0.04254448 0.2595741 0.9647856 0 0 0 0 1 0.997814 -0.06041264 -0.02678787 0 0.05134606 0.9639053 -0.2612475 0.09175074 0.04160362 0.259301 0.9649001 0 0 0 0 1 0.9977738 -0.06166112 -0.02540332 0 0.05297213 0.9642071 -0.2598055 0.09175074 0.04051399 0.2578815 0.9653269 0 0 0 0 1 0.9977889 -0.06168478 -0.02474248 0 0.05327916 0.9649284 -0.2570496 0.09175074 0.03973078 0.255163 0.9660815 0 0 0 0 1 0.9979157 -0.05990284 -0.02399575 0 0.05176711 0.965147 -0.2565376 0.09175074 0.03852677 0.2547607 0.9662363 0 0 0 0 1 0.9980255 -0.05869138 -0.02236574 0 0.05105066 0.9654613 -0.2554965 0.09175074 0.03658872 0.2538503 0.9665513 0 0 0 0 1 0.9980379 -0.058779 -0.02156931 0 0.05146676 0.9663556 -0.2520084 0.09175074 0.03565645 0.2504039 0.9674847 0 0 0 0 1 0.9979639 -0.06016838 -0.02116256 0 0.05300444 0.966912 -0.2495434 0.09175074 0.03547692 0.2479135 0.9681324 0 0 0 0 1 0.9980133 -0.05963152 -0.0203309 0 0.05266696 0.9667587 -0.2502081 0.09175074 0.0345754 0.2486402 0.9679787 0 0 0 0 1 0.9981226 -0.05772954 -0.0204553 0 0.05080556 0.966946 -0.2498691 0.09175074 0.034204 0.2483608 0.9680635 0 0 0 0 1 0.9981709 -0.05685687 -0.02054584 0 0.04997968 0.967297 -0.2486739 0.09175074 0.03401273 0.2471922 0.9683694 0 0 0 0 1 0.9981904 -0.0566855 -0.0200653 0 0.04995667 0.967478 -0.2479736 0.09175074 0.03346925 0.2465226 0.968559 0 0 0 0 1 0.9981017 -0.05835092 -0.01970165 0 0.05163282 0.9671846 -0.2487732 0.09175074 0.0335713 0.2472837 0.9683614 0 0 0 0 1 0.9980251 -0.05993968 -0.01879245 0 0.05334454 0.9666929 -0.2503184 0.09175074 0.03317052 0.2488216 0.9679812 0 0 0 0 1 0.998089 -0.05886977 -0.01877844 0 0.05225735 0.9663375 -0.2519152 0.09175074 0.0329765 0.2504525 0.9675672 0 0 0 0 1 0.9981475 -0.05774772 -0.0191456 0 0.05110502 0.9665977 -0.2511519 0.09175074 0.03300952 0.2497082 0.9677584 0 0 0 0 1 0.9981545 -0.05772799 -0.01884174 0 0.05111128 0.9662082 -0.2526449 0.09175074 0.03278976 0.2512156 0.9673756 0 0 0 0 1 0.9981572 -0.05777937 -0.0185396 0 0.05113363 0.9653996 -0.2557131 0.09175074 0.03267306 0.2542939 0.966575 0 0 0 0 1 0.9981497 -0.0579344 -0.01846081 0 0.05130738 0.9654201 -0.2556007 0.09175074 0.0326305 0.2541806 0.9666062 0 0 0 0 1 0.9981659 -0.05779582 -0.01801091 0 0.0513677 0.9660512 -0.2531926 0.09175074 0.0320329 0.2518031 0.9672483 0 0 0 0 1 0.9982283 -0.05676013 -0.01784396 0 0.05042606 0.9662504 -0.2526214 0.09175074 0.03158056 0.2512741 0.9674007 0 0 0 0 1 0.9982687 -0.05614465 -0.01753002 0 0.04987388 0.9659916 -0.2537181 0.09175074 0.03117877 0.2524046 0.9671194 0 0 0 0 1 0.9982377 -0.0568372 -0.01705878 0 0.05066806 0.9659912 -0.2535624 0.09175074 0.03089046 0.2522513 0.9671686 0 0 0 0 1 0.9981644 -0.05805158 -0.01725476 0 0.0518198 0.9661408 -0.2527588 0.09175074 0.03134357 0.2514007 0.9673755 0 0 0 0 1 0.9980913 -0.05924278 -0.01743245 0 0.05290645 0.965909 -0.2534186 0.09175074 0.03185141 0.2520126 0.9671997 0 0 0 0 1 0.9980632 -0.05957359 -0.0179153 0 0.05309569 0.9658271 -0.253691 0.09175074 0.03241634 0.2522484 0.9671194 0 0 0 0 1 0.9981154 -0.05858004 -0.018274 0 0.05211198 0.9664134 -0.251654 0.09175074 0.03240215 0.2502275 0.9676448 0 0 0 0 1 0.998147 -0.05800414 -0.01838254 0 0.05162858 0.9672257 -0.2486143 0.09175074 0.03220069 0.2472046 0.9684281 0 0 0 0 1 0.9982118 -0.05680674 -0.01860308 0 0.05042868 0.9674046 -0.2481641 0.09175074 0.03209412 0.2467822 0.9685394 0 0 0 0 1 0.998255 -0.05585861 -0.01915413 0 0.0493505 0.9672823 -0.2488567 0.09175074 0.0324282 0.2474772 0.968351 0 0 0 0 1 0.9981914 -0.05686324 -0.0195046 0 0.05025142 0.967343 -0.2484402 0.09175074 0.03299474 0.2470107 0.9684509 0 0 0 0 1 0.9980884 -0.05877453 -0.01910376 0 0.05218803 0.9671303 -0.2488685 0.09175074 0.03310298 0.2473958 0.9683489 0 0 0 0 1 0.9980632 -0.05948811 -0.01818931 0 0.05303603 0.9665455 -0.2509523 0.09175074 0.0325095 0.2495015 0.9678286 0 0 0 0 1 0.998212 -0.0563299 -0.01999044 0 0.04957807 0.9671056 -0.2494975 0.09175074 0.03338706 0.2480603 0.9681692 0 0 0 0 1 0.9982625 -0.05497598 -0.0211963 0 0.04800248 0.967444 -0.2484914 0.09175074 0.03416734 0.2470422 0.9684022 0 0 0 0 1 0.9981793 -0.05572545 -0.02308058 0 0.04829192 0.9676278 -0.2477185 0.09175074 0.03613764 0.2461529 0.9685572 0 0 0 0 1 0.9981926 -0.05568593 -0.02259635 0 0.04842042 0.9679508 -0.2464284 0.09175074 0.03559476 0.2448889 0.9688976 0 0 0 0 1 0.9982622 -0.05561834 -0.01946616 0 0.04908376 0.9676255 -0.247572 0.09175074 0.03260552 0.2461864 0.968674 0 0 0 0 1 0.9982818 -0.05593752 -0.01744276 0 0.04981106 0.9669362 -0.2501066 0.09175074 0.03085637 0.248808 0.9680612 0 0 0 0 1 0.998324 -0.05545234 -0.01655316 0 0.04953163 0.9666907 -0.2511095 0.09175074 0.02992641 0.2498688 0.9678172 0 0 0 0 1 0.9983717 -0.05419933 -0.01778411 0 0.04804432 0.9670408 -0.250048 0.09175074 0.03075039 0.2487864 0.9680702 0 0 0 0 1 0.9983186 -0.05434173 -0.020168 0 0.04760736 0.9672017 -0.2495087 0.09175074 0.03306525 0.2481291 0.9681626 0 0 0 0 1 0.99835 -0.05393075 -0.0197134 0 0.04731589 0.9671685 -0.2496926 0.09175074 0.03253233 0.2483479 0.9681245 0 0 0 0 1 0.998327 -0.0547471 -0.01859843 0 0.04837632 0.9670566 -0.2499228 0.09175074 0.0316683 0.248605 0.9680871 0 0 0 0 1 0.99829 -0.05497008 -0.01987862 0 0.04828011 0.9671091 -0.2497379 0.09175074 0.03295296 0.2483512 0.9681094 0 0 0 0 1 0.998368 -0.05368375 -0.01947134 0 0.04709416 0.9668484 -0.2509711 0.09175074 0.03229892 0.2496445 0.9677988 0 0 0 0 1 0.9985225 -0.05195027 -0.01593714 0 0.04624742 0.9664362 -0.2527104 0.09175074 0.02853065 0.2516 0.9674108 0 0 0 0 1 0.9986323 -0.05021047 -0.01457232 0 0.04492455 0.9666618 -0.2520852 0.09175074 0.02674382 0.2510859 0.9675953 0 0 0 0 1 0.9986362 -0.05018818 -0.01437526 0 0.04492914 0.9664396 -0.2529348 0.09175074 0.02658718 0.251944 0.9673766 0 0 0 0 1 0.9985897 -0.05125391 -0.01383823 0 0.04607284 0.9661644 -0.2537791 0.09175074 0.0263772 0.2527837 0.9671633 0 0 0 0 1 0.9985693 -0.05127358 -0.01517629 0 0.04581052 0.9666988 -0.2517832 0.09175074 0.02758073 0.2507278 0.9676647 0 0 0 0 1 0.998571 -0.05086797 -0.01637601 0 0.04522097 0.9676386 -0.2482551 0.09175074 0.02847433 0.2471598 0.9685564 0 0 0 0 1 0.9985879 -0.05079323 -0.01556122 0 0.04536509 0.9677669 -0.2477281 0.09175074 0.02764254 0.2466724 0.9687047 0 0 0 0 1 0.9986211 -0.05054503 -0.01417356 0 0.04548478 0.9679287 -0.2470736 0.09175074 0.02620732 0.2460883 0.9688931 0 0 0 0 1 0.9986085 -0.05092328 -0.01369345 0 0.04596567 0.9678683 -0.2472211 0.09175074 0.02584278 0.2462478 0.9688624 0 0 0 0 1 0.9986285 -0.05068939 -0.01309633 0 0.0458287 0.9673105 -0.2494201 0.09175074 0.02531117 0.2484779 0.968307 0 0 0 0 1 0.9986786 -0.04985481 -0.0124613 0 0.04504907 0.9660233 -0.2544991 0.09175074 0.02472591 0.2536015 0.9669929 0 0 0 0 1 0.9986585 -0.04996949 -0.01356369 0 0.04478228 0.9650642 -0.2581585 0.09175074 0.02598989 0.2572048 0.9660074 0 0 0 0 1 0.9985165 -0.05227839 -0.01521641 0 0.046534 0.9644812 -0.2600202 0.09175074 0.02826941 0.2589265 0.9654833 0 0 0 0 1 0.9984598 -0.05326861 -0.01550036 0 0.0474441 0.9646826 -0.2591074 0.09175074 0.02875524 0.257973 0.9657242 0 0 0 0 1 0.9985262 -0.0520606 -0.01533246 0 0.04627817 0.9643521 -0.2605446 0.09175074 0.02834999 0.2594511 0.9653401 0 0 0 0 1 0.9985191 -0.05207395 -0.01574194 0 0.04616385 0.964168 -0.2612455 0.09175074 0.02878201 0.260132 0.965144 0 0 0 0 1 0.998479 -0.05283349 -0.01575332 0 0.04684269 0.9636686 -0.2629615 0.09175074 0.02907413 0.2618236 0.9646778 0 0 0 0 1 0.9984601 -0.0532453 -0.01556652 0 0.04729378 0.9636895 -0.2628044 0.09175074 0.02899444 0.2616636 0.9647236 0 0 0 0 1 0.9984279 -0.05380117 -0.01571464 0 0.04784262 0.9641202 -0.2611199 0.09175074 0.02919936 0.2599576 0.9651785 0 0 0 0 1 0.9984273 -0.05371874 -0.0160349 0 0.04768955 0.9642148 -0.260798 0.09175074 0.02947086 0.2596232 0.9652602 0 0 0 0 1 0.998394 -0.0542947 -0.0161606 0 0.04814654 0.9636067 -0.2629532 0.09175074 0.02984941 0.2617529 0.9646733 0 0 0 0 1 0.9983761 -0.05474478 -0.01575118 0 0.04868102 0.9635161 -0.2631862 0.09175074 0.02958458 0.261992 0.9646165 0 0 0 0 1 0.9984241 -0.05390006 -0.01561516 0 0.0479263 0.963778 -0.2623646 0.09175074 0.02919101 0.2612028 0.9648425 0 0 0 0 1 0.9984485 -0.05328804 -0.01614958 0 0.04717695 0.9636465 -0.262983 0.09175074 0.02957636 0.2618131 0.9646654 0 0 0 0 1 0.9983995 -0.05403381 -0.0166909 0 0.04775422 0.9636118 -0.2630057 0.09175074 0.03029477 0.2617878 0.9646499 0 0 0 0 1 0.9983733 -0.05449855 -0.01675182 0 0.04818624 0.9635856 -0.263023 0.09175074 0.03047621 0.261788 0.9646443 0 0 0 0 1 0.9984017 -0.05389845 -0.0169993 0 0.04755008 0.9636844 -0.2627765 0.09175074 0.03054523 0.2615482 0.964707 0 0 0 0 1 0.9983823 -0.05423486 -0.01706522 0 0.04788011 0.9638617 -0.2620654 0.09175074 0.03066164 0.2608245 0.9648993 0 0 0 0 1 0.9984101 -0.0536158 -0.01739221 0 0.04721432 0.9640408 -0.2615267 0.09175074 0.03078877 0.2602897 0.9650396 0 0 0 0 1 0.998404 -0.05343806 -0.01826196 0 0.04681688 0.9640658 -0.2615059 0.09175074 0.03158015 0.2602336 0.9650291 0 0 0 0 1 0.9983958 -0.05318677 -0.01941543 0 0.04627358 0.9640894 -0.261516 0.09175074 0.0326274 0.2601981 0.9650039 0 0 0 0 1 0.9984582 -0.05177932 -0.01999956 0 0.04474914 0.9640553 -0.2619066 0.09175074 0.03284204 0.2606078 0.9648861 0 0 0 0 1 0.9984373 -0.05231475 -0.01964557 0 0.04538893 0.9642708 -0.2610018 0.09175074 0.03259789 0.2597022 0.9651385 0 0 0 0 1 0.9983285 -0.0543645 -0.01960963 0 0.0474199 0.964504 -0.2597762 0.09175074 0.03303617 0.2584121 0.9654697 0 0 0 0 1 0.9982335 -0.0558089 -0.02037608 0 0.04862743 0.9645215 -0.2594875 0.09175074 0.03413486 0.2580384 0.9655315 0 0 0 0 1 0.998337 -0.0538724 -0.02051401 0 0.04669654 0.9644306 -0.2601791 0.09175074 0.03380084 0.2587885 0.9653425 0 0 0 0 1 0.9983441 -0.05343717 -0.02129322 0 0.04605454 0.9643121 -0.2607323 0.09175074 0.03446614 0.25932 0.9651764 0 0 0 0 1 0.9982117 -0.05562806 -0.02188265 0 0.04803681 0.9643547 -0.2602167 0.09175074 0.03557795 0.2587003 0.9653022 0 0 0 0 1 0.998153 -0.05652356 -0.02225923 0 0.04885947 0.9647086 -0.2587472 0.09175074 0.03609901 0.2571818 0.9656887 0 0 0 0 1 0.9981742 -0.05598586 -0.02266526 0 0.04823207 0.9647172 -0.2588331 0.09175074 0.03635656 0.2572674 0.9656562 0 0 0 0 1 0.9981669 -0.05611342 -0.02267324 0 0.04837441 0.9648603 -0.2582725 0.09175074 0.03636908 0.2567023 0.965806 0 0 0 0 1 0.99809 -0.05713844 -0.0234856 0 0.0491172 0.9645506 -0.2592871 0.09175074 0.03746831 0.2576383 0.9655148 0 0 0 0 1 0.9981963 -0.0552262 -0.02354502 0 0.04725867 0.9646766 -0.2591636 0.09175074 0.03702592 0.2575834 0.9655464 0 0 0 0 1 0.9982677 -0.05369788 -0.02404218 0 0.04564088 0.9646666 -0.259491 0.09175074 0.03712677 0.2579442 0.9654462 0 0 0 0 1 0.9981219 -0.05635631 -0.02401077 0 0.04836255 0.9655233 -0.2557851 0.09175074 0.03759807 0.2541434 0.9664355 0 0 0 0 1 0.9980369 -0.05907106 -0.02080488 0 0.05215036 0.9678173 -0.2461915 0.09175074 0.03467816 0.2446233 0.9689979 0 0 0 0 1 0.9980464 -0.05738633 -0.02469658 0 0.04925876 0.9659701 -0.25392 0.09175074 0.03842771 0.2522075 0.9669099 0 0 0 0 1 0.9980857 -0.05641281 -0.02534776 0 0.04829508 0.9669506 -0.2503482 0.09175074 0.03863286 0.2486448 0.9678241 0 0 0 0 1 0.9981099 -0.05645519 -0.02427542 0 0.04874235 0.9678518 -0.2467532 0.09175074 0.03742551 0.2451036 0.9687744 0 0 0 0 1 0.9981845 -0.05538725 -0.02366518 0 0.04775756 0.9672302 -0.2493696 0.09175074 0.03670156 0.2477867 0.9681193 0 0 0 0 1 0.998243 -0.0544309 -0.02341282 0 0.04688322 0.9672027 -0.2496419 0.09175074 0.03623318 0.2481057 0.9680553 0 0 0 0 1 0.9981971 -0.05549055 -0.02287393 0 0.04816961 0.9680097 -0.2462465 0.09175074 0.03580653 0.2447007 0.9689373 0 0 0 0 1 0.99827 -0.05404961 -0.02313435 0 0.04661405 0.967432 -0.2488028 0.09175074 0.03582859 0.2472941 0.9682779 0 0 0 0 1 0.9983068 -0.05319494 -0.02352982 0 0.04546141 0.9659075 -0.2548651 0.09175074 0.03628516 0.2533639 0.9666904 0 0 0 0 1 0.9982509 -0.05382508 -0.02445036 0 0.04587537 0.9661449 -0.2538892 0.09175074 0.03728818 0.2523235 0.9669243 0 0 0 0 1 0.9981593 -0.05458849 -0.02641922 0 0.0461837 0.9665589 -0.2522517 0.09175074 0.0393058 0.2505673 0.967301 0 0 0 0 1 0.9981355 -0.05429905 -0.02787643 0 0.04563313 0.9671745 -0.2499825 0.09175074 0.04053521 0.2482444 0.9678491 0 0 0 0 1 0.998137 -0.05487155 -0.02667218 0 0.04656559 0.9676253 -0.2480587 0.09175074 0.03942 0.2463547 0.9683778 0 0 0 0 1 0.9980704 -0.05668741 -0.02533996 0 0.04877895 0.9683139 -0.2449261 0.09175074 0.03842127 0.2432174 0.9692106 0 0 0 0 1 0.9979773 -0.05803823 -0.0259388 0 0.04998844 0.9685307 -0.2438231 0.09175074 0.03927356 0.2420333 0.9694728 0 0 0 0 1 0.9979925 -0.05720466 -0.02717554 0 0.04880404 0.9681309 -0.2456437 0.09175074 0.04036146 0.2438244 0.9689792 0 0 0 0 1 0.9980126 -0.05661994 -0.02765673 0 0.04811036 0.968111 -0.2458589 0.09175074 0.0406953 0.2440397 0.968911 0 0 0 0 1 0.9979907 -0.05738663 -0.02685374 0 0.04903173 0.9679511 -0.2463061 0.09175074 0.04012781 0.2444945 0.96882 0 0 0 0 1 0.9979273 -0.05884927 -0.02603673 0 0.05055385 0.9672717 -0.2486562 0.09175074 0.03981781 0.2468245 0.9682418 0 0 0 0 1 0.9979512 -0.05878514 -0.02525079 0 0.05067867 0.9672194 -0.248834 0.09175074 0.03905081 0.2470446 0.9682169 0 0 0 0 1 0.9980486 -0.0570631 -0.02535223 0 0.04901838 0.9675223 -0.2479879 0.09175074 0.03867983 0.2462612 0.9684314 0 0 0 0 1 0.9979975 -0.05748629 -0.0263856 0 0.04917049 0.9674929 -0.2480724 0.09175074 0.03978866 0.2462783 0.9683821 0 0 0 0 1 0.9979134 -0.05851727 -0.02728456 0 0.04991555 0.9672553 -0.2488489 0.09175074 0.04095309 0.2469678 0.968158 0 0 0 0 1 0.9979173 -0.05847734 -0.02722758 0 0.04995 0.9676127 -0.2474487 0.09175074 0.04081588 0.2455734 0.9685183 0 0 0 0 1 0.9979663 -0.05774223 -0.02700084 0 0.04924416 0.9673492 -0.2486172 0.09175074 0.04047495 0.246782 0.9682254 0 0 0 0 1 0.9979992 -0.05713593 -0.02707326 0 0.04862982 0.9673262 -0.2488279 0.09175074 0.04040575 0.2470136 0.9681693 0 0 0 0 1 0.9979882 -0.05729812 -0.02714145 0 0.0488491 0.9677994 -0.2469378 0.09175074 0.04041659 0.2451151 0.9686512 0 0 0 0 1 0.9980028 -0.05715197 -0.02690476 0 0.04881918 0.9681307 -0.2456415 0.09175074 0.04008626 0.2438375 0.9689874 0 0 0 0 1 0.9979109 -0.05878001 -0.0268082 0 0.05028229 0.9672013 -0.2489849 0.09175074 0.04056429 0.2471168 0.9681363 0 0 0 0 1 0.9977127 -0.06154543 -0.02795153 0 0.05263811 0.9668292 -0.2499414 0.09175074 0.04240715 0.2478984 0.9678574 0 0 0 0 1 0.9977038 -0.06160539 -0.02813827 0 0.05274534 0.9673827 -0.2477675 0.09175074 0.04248434 0.2457145 0.9684109 0 0 0 0 1 0.9978405 -0.0597673 -0.02724134 0 0.05120134 0.9675709 -0.2473562 0.09175074 0.04114174 0.2454273 0.9685417 0 0 0 0 1 0.9978333 -0.05967324 -0.02770823 0 0.05094665 0.9672935 -0.2484912 0.09175074 0.04163032 0.2465412 0.9682377 0 0 0 0 1 0.9977807 -0.06018608 -0.02848267 0 0.05113393 0.9665863 -0.25119 0.09175074 0.04264914 0.2491761 0.9675188 0 0 0 0 1 0.9978226 -0.05934077 -0.02878612 0 0.05021578 0.9664955 -0.2517238 0.09175074 0.04275912 0.2497301 0.967371 0 0 0 0 1 0.9979197 -0.05823069 -0.0276665 0 0.04949671 0.966995 -0.249942 0.09175074 0.04130762 0.2480526 0.9678655 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_Head_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_Head_pose_matrix-interpolation"> + <Name_array id="_6_15_t_Head_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_Head_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_Head_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_Head_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_Head_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_Head_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_Head_pose_matrix-sampler" target="Head/transform"/> + </animation> + <animation id="_6_15_t_LeftShoulder_pose_matrix"> + <source id="_6_15_t_LeftShoulder_pose_matrix-input"> + <float_array id="_6_15_t_LeftShoulder_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftShoulder_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftShoulder_pose_matrix-output"> + <float_array id="_6_15_t_LeftShoulder_pose_matrix-output-array" count="2224">0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1 0.2634423 0.9525584 0.1524157 0 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.193648 0.9712804 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftShoulder_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftShoulder_pose_matrix-interpolation"> + <Name_array id="_6_15_t_LeftShoulder_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_LeftShoulder_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_LeftShoulder_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_LeftShoulder_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_LeftShoulder_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_LeftShoulder_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_LeftShoulder_pose_matrix-sampler" target="LeftShoulder/transform"/> + </animation> + <animation id="_6_15_t_LeftArm_pose_matrix"> + <source id="_6_15_t_LeftArm_pose_matrix-input"> + <float_array id="_6_15_t_LeftArm_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftArm_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftArm_pose_matrix-output"> + <float_array id="_6_15_t_LeftArm_pose_matrix-output-array" count="2224">-0.3656965 0.9018023 0.2302578 0 -0.892691 -0.2698382 -0.3609573 0.214115 -0.2633798 -0.3375499 0.9037096 0 0 0 0 1 -0.3679939 0.8968329 0.2455022 0 -0.8933147 -0.2677342 -0.3609809 0.214115 -0.2580102 -0.3521495 0.8996784 0 0 0 0 1 -0.3700172 0.8940625 0.2524669 0 -0.8908042 -0.2642959 -0.3696156 0.214115 -0.2637335 -0.3616626 0.8942285 0 0 0 0 1 -0.370325 0.8952168 0.2478837 0 -0.8907902 -0.2665974 -0.3679928 0.214115 -0.2633482 -0.3570894 0.8961778 0 0 0 0 1 -0.3711699 0.8963247 0.2425593 0 -0.892804 -0.2726889 -0.3585274 0.214115 -0.2552137 -0.3496326 0.901456 0 0 0 0 1 -0.370931 0.8953396 0.2465305 0 -0.8941385 -0.2726186 -0.3552401 0.214115 -0.2508516 -0.352202 0.9016801 0 0 0 0 1 -0.3698083 0.8939458 0.2531851 0 -0.8949301 -0.2694929 -0.3556314 0.214115 -0.2496836 -0.3580985 0.8996796 0 0 0 0 1 -0.3699488 0.8936128 0.2541537 0 -0.8956919 -0.2704102 -0.3530076 0.214115 -0.2467262 -0.3582382 0.9004396 0 0 0 0 1 -0.369751 0.8921334 0.2595812 0 -0.8949067 -0.2668222 -0.3576983 0.214115 -0.2498525 -0.3645603 0.8970336 0 0 0 0 1 -0.3717049 0.8903037 0.2630491 0 -0.8911889 -0.2628338 -0.3697308 0.214115 -0.2600345 -0.3718572 0.8911252 0 0 0 0 1 -0.3734874 0.8906149 0.2594463 0 -0.8887847 -0.2634701 -0.3750273 0.214115 -0.2656486 -0.3706598 0.8899674 0 0 0 0 1 -0.3752984 0.8911904 0.2548153 0 -0.8868846 -0.2653517 -0.3781855 0.214115 -0.2694196 -0.3679242 0.8899689 0 0 0 0 1 -0.3771756 0.8913144 0.2515894 0 -0.8850159 -0.266821 -0.3815146 0.214115 -0.2729201 -0.3665586 0.8894656 0 0 0 0 1 -0.3801775 0.8913645 0.2468491 0 -0.8795799 -0.2658982 -0.3945093 0.214115 -0.2860148 -0.3671071 0.8851146 0 0 0 0 1 -0.3831275 0.8913582 0.2422683 0 -0.8727218 -0.2633879 -0.411076 0.214115 -0.3026054 -0.3689274 0.8788187 0 0 0 0 1 -0.3866478 0.8907383 0.2389329 0 -0.8658881 -0.2614648 -0.4264669 0.214115 -0.3173978 -0.3717817 0.8723742 0 0 0 0 1 -0.3873426 0.8926836 0.2303948 0 -0.8611997 -0.2611398 -0.4360519 0.214115 -0.329091 -0.3673174 0.8699291 0 0 0 0 1 -0.3854138 0.8961854 0.2197908 0 -0.8584294 -0.2608625 -0.4416444 0.214115 -0.3384601 -0.3588907 0.8698517 0 0 0 0 1 -0.3826789 0.8995097 0.2108063 0 -0.8559461 -0.2593076 -0.4473432 0.214115 -0.3477259 -0.3516276 0.8691631 0 0 0 0 1 -0.3796972 0.9030622 0.2007706 0 -0.8538331 -0.2585546 -0.4517949 0.214115 -0.3560887 -0.3429699 0.8692366 0 0 0 0 1 -0.3759641 0.9065212 0.1920166 0 -0.852767 -0.2574093 -0.4544546 0.214115 -0.3625459 -0.334604 0.8698278 0 0 0 0 1 -0.3731249 0.9084088 0.1886039 0 -0.853263 -0.2561679 -0.4542248 0.214115 -0.3643075 -0.3304114 0.8706941 0 0 0 0 1 -0.3686673 0.9113855 0.1829236 0 -0.8541632 -0.254505 -0.4534671 0.214115 -0.3667284 -0.3234251 0.8722995 0 0 0 0 1 -0.3640349 0.9148141 0.1749109 0 -0.8559446 -0.2545568 -0.4500663 0.214115 -0.3672022 -0.3135539 0.8756976 0 0 0 0 1 -0.3611598 0.9171187 0.1686919 0 -0.8542141 -0.2528235 -0.4543113 0.214115 -0.3740081 -0.308178 0.8747252 0 0 0 0 1 -0.3574664 0.9198672 0.1614373 0 -0.8553679 -0.2530764 -0.4519934 0.214115 -0.3749179 -0.2996608 0.8772912 0 0 0 0 1 -0.3509467 0.9245265 0.1486176 0 -0.859408 -0.2549885 -0.4431691 0.214115 -0.3718258 -0.2832519 0.8840327 0 0 0 0 1 -0.3445064 0.9287109 0.1371547 0 -0.8597996 -0.2534795 -0.4432752 0.214115 -0.3769086 -0.2706367 0.8858305 0 0 0 0 1 -0.3394758 0.9314265 0.1311522 0 -0.8588528 -0.2500802 -0.4470256 0.214115 -0.3835729 -0.2643948 0.8848543 0 0 0 0 1 -0.334366 0.9342439 0.1240469 0 -0.859575 -0.2483426 -0.4466059 0.214115 -0.3864327 -0.2559575 0.88609 0 0 0 0 1 -0.3290236 0.9373249 0.1147415 0 -0.8581212 -0.2460554 -0.4506494 0.214115 -0.394172 -0.2467364 0.8852963 0 0 0 0 1 -0.3247635 0.9398261 0.1060926 0 -0.8552767 -0.2439402 -0.4571597 0.214115 -0.4037703 -0.2392073 0.8830341 0 0 0 0 1 -0.320153 0.942373 0.097135 0 -0.851131 -0.2410896 -0.4663175 0.214115 -0.4160267 -0.2319675 0.8792682 0 0 0 0 1 -0.3147789 0.9452276 0.08636599 0 -0.8500998 -0.2402825 -0.4686092 0.214115 -0.4221901 -0.220928 0.8791736 0 0 0 0 1 -0.3081116 0.9481677 0.07775139 0 -0.8491514 -0.2372419 -0.4718667 0.214115 -0.4289629 -0.2114103 0.8782348 0 0 0 0 1 -0.300907 0.9511836 0.06859189 0 -0.8484518 -0.23418 -0.4746465 0.214115 -0.4354131 -0.2010213 0.8774997 0 0 0 0 1 -0.2925245 0.9547427 0.0538122 0 -0.8470188 -0.2325784 -0.4779815 0.214115 -0.4438338 -0.1854013 0.8767198 0 0 0 0 1 -0.2858753 0.9572687 0.04372775 0 -0.8437223 -0.229807 -0.4850994 0.214115 -0.4543215 -0.175572 0.8733649 0 0 0 0 1 -0.2791986 0.9595002 0.03751754 0 -0.8416017 -0.2257061 -0.4906764 0.214115 -0.4623362 -0.168571 0.8705337 0 0 0 0 1 -0.2706631 0.9622771 0.02764368 0 -0.8387441 -0.221628 -0.4973826 0.214115 -0.4724932 -0.1578091 0.8670907 0 0 0 0 1 -0.2639539 0.9643487 0.01896828 0 -0.8354055 -0.2187426 -0.5042315 0.214115 -0.4821059 -0.1489401 0.8633601 0 0 0 0 1 -0.2578183 0.9661401 0.01015388 0 -0.832473 -0.2167899 -0.509893 0.214115 -0.4904268 -0.1399126 0.8601778 0 0 0 0 1 -0.2522152 0.9676623 0.004137158 0 -0.8288488 -0.2138239 -0.517 0.214115 -0.4993968 -0.1338244 0.8559753 0 0 0 0 1 -0.2465573 0.969128 -6.71439e-4 0 -0.8255897 -0.2104023 -0.5235768 0.214115 -0.5075542 -0.1285374 0.8519781 0 0 0 0 1 -0.2377538 0.9712913 -0.008145391 0 -0.8209593 -0.2054231 -0.5327544 0.214115 -0.5191329 -0.1199773 0.8462307 0 0 0 0 1 -0.2332693 0.9723474 -0.01122599 0 -0.8182716 -0.2025171 -0.5379762 0.214115 -0.5253732 -0.1163074 0.8428851 0 0 0 0 1 -0.230872 0.972896 -0.01309728 0 -0.8148956 -0.200698 -0.5437512 0.214115 -0.531642 -0.114864 0.8391441 0 0 0 0 1 -0.2254908 0.9740427 -0.0198664 0 -0.8112708 -0.1990218 -0.5497546 0.214115 -0.5394383 -0.1078476 0.8350899 0 0 0 0 1 -0.2183396 0.9755842 -0.02373325 0 -0.8063698 -0.1940596 -0.558667 0.214115 -0.5496324 -0.1028413 0.8290524 0 0 0 0 1 -0.213081 0.9766979 -0.02564442 0 -0.8015252 -0.1897533 -0.5670548 0.214115 -0.5587074 -0.100274 0.8232807 0 0 0 0 1 -0.2083693 0.9776633 -0.02750849 0 -0.7973991 -0.1861013 -0.5740393 0.214115 -0.5663364 -0.09767693 0.8183655 0 0 0 0 1 -0.2039595 0.9784632 -0.03178399 0 -0.7950893 -0.1845027 -0.5777472 0.214115 -0.5711686 -0.09256589 0.8155966 0 0 0 0 1 -0.1997769 0.9791385 -0.03710889 0 -0.794415 -0.1840245 -0.5788262 0.214115 -0.5735799 -0.08615618 0.814606 0 0 0 0 1 -0.1976065 0.9795346 -0.03825855 0 -0.7925755 -0.1826136 -0.5817872 0.214115 -0.5768672 -0.08464211 0.8124406 0 0 0 0 1 -0.1965773 0.979815 -0.03633171 0 -0.7898052 -0.180196 -0.586291 0.214115 -0.5810036 -0.08655649 0.8092853 0 0 0 0 1 -0.1928572 0.9805483 -0.03648513 0 -0.7876322 -0.1768751 -0.5902124 0.214115 -0.5851851 -0.0850898 0.806423 0 0 0 0 1 -0.1939014 0.9804473 -0.03354567 0 -0.7880246 -0.1760309 -0.589941 0.214115 -0.5843111 -0.08795559 0.8067492 0 0 0 0 1 -0.1927668 0.9806347 -0.03459018 0 -0.7863342 -0.1754669 -0.5923597 0.214115 -0.5869579 -0.08698785 0.8049307 0 0 0 0 1 -0.1905621 0.9809468 -0.03780782 0 -0.7834269 -0.1751734 -0.5962858 0.214115 -0.5915475 -0.08400976 0.8018813 0 0 0 0 1 -0.1897566 0.9810851 -0.03826951 0 -0.7789217 -0.1741554 -0.602454 0.214115 -0.5977234 -0.08451068 0.7972356 0 0 0 0 1 -0.1868417 0.9815198 -0.04134029 0 -0.7775616 -0.173473 -0.6044049 0.214115 -0.6004068 -0.08078336 0.7956039 0 0 0 0 1 -0.1868725 0.9814032 -0.04388892 0 -0.778155 -0.1751449 -0.6031575 0.214115 -0.5996277 -0.07856118 0.7964136 0 0 0 0 1 -0.1924489 0.9805108 -0.03952115 0 -0.7812041 -0.1774547 -0.5985233 0.214115 -0.5938717 -0.08431106 0.80013 0 0 0 0 1 -0.1978065 0.9796901 -0.0328595 0 -0.7850663 -0.1784057 -0.593163 0.214115 -0.5869783 -0.09153461 0.8044114 0 0 0 0 1 -0.1984281 0.9795666 -0.03279525 0 -0.7826474 -0.1785032 -0.5963218 0.214115 -0.589991 -0.09265989 0.8020752 0 0 0 0 1 -0.200618 0.979039 -0.03514528 0 -0.7832639 -0.1818423 -0.5945007 0.214115 -0.5884302 -0.09173947 0.8033266 0 0 0 0 1 -0.2039877 0.9784158 -0.03303903 0 -0.7841479 -0.1835036 -0.5928226 0.214115 -0.5860897 -0.095021 0.804655 0 0 0 0 1 -0.2062023 0.9779921 -0.03181105 0 -0.7869541 -0.1850688 -0.5886025 0.214115 -0.5815358 -0.09633737 0.8077964 0 0 0 0 1 -0.2098093 0.9771955 -0.03269743 0 -0.7850962 -0.188308 -0.5900543 0.214115 -0.5827555 -0.09812825 0.8067012 0 0 0 0 1 -0.2157602 0.97602 -0.02885359 0 -0.7888455 -0.1916461 -0.5839473 0.214115 -0.5754739 -0.1032315 0.8112786 0 0 0 0 1 -0.2210093 0.9749841 -0.02368652 0 -0.7911086 -0.1934261 -0.5802876 0.214115 -0.5703527 -0.1095103 0.814067 0 0 0 0 1 -0.2262555 0.9738323 -0.02142757 0 -0.7911401 -0.1965538 -0.5791925 0.214115 -0.568248 -0.1140933 0.8149091 0 0 0 0 1 -0.2302317 0.9729028 -0.02129358 0 -0.791556 -0.1999557 -0.5774573 0.214115 -0.5660676 -0.1160939 0.8161432 0 0 0 0 1 -0.2345394 0.9718928 -0.02038842 0 -0.7928186 -0.2033772 -0.5745229 0.214115 -0.5625212 -0.1185839 0.8182345 0 0 0 0 1 -0.2386255 0.9709127 -0.01965665 0 -0.7923316 -0.2063584 -0.5741314 0.214115 -0.5614878 -0.1214278 0.8185271 0 0 0 0 1 -0.2480275 0.9686692 -0.01273983 0 -0.7911628 -0.2101311 -0.5743748 0.214115 -0.5590562 -0.1323814 0.8184933 0 0 0 0 1 -0.2554091 0.9668031 -0.007618069 0 -0.7917225 -0.213666 -0.5722957 0.214115 -0.554925 -0.1401382 0.8200118 0 0 0 0 1 -0.2589226 0.9658728 -0.00699234 0 -0.792844 -0.2166623 -0.5696103 0.214115 -0.551686 -0.1419411 0.8218851 0 0 0 0 1 -0.2618084 0.9651041 -0.005526423 0 -0.7937166 -0.2185659 -0.5676645 0.214115 -0.5490631 -0.1442329 0.8232414 0 0 0 0 1 -0.2652008 0.9641875 -0.003327786 0 -0.7936991 -0.2202648 -0.567032 0.214115 -0.5474582 -0.147736 0.823689 0 0 0 0 1 -0.2689116 0.9631645 8.70794e-4 0 -0.7917197 -0.2205299 -0.5696899 0.214115 -0.548513 -0.1538857 0.8218592 0 0 0 0 1 -0.2715253 0.9624086 0.006623804 0 -0.7874925 -0.2182089 -0.576403 0.214115 -0.5532898 -0.1617242 0.8171387 0 0 0 0 1 -0.27586 0.961144 0.01017034 0 -0.783894 -0.2188386 -0.5810508 0.214115 -0.5562478 -0.1682611 0.8138037 0 0 0 0 1 -0.2791206 0.9601642 0.01328289 0 -0.7798356 -0.2185841 -0.5865813 0.214115 -0.5603109 -0.1740854 0.8097814 0 0 0 0 1 -0.2834061 0.9588571 0.01655685 0 -0.7760871 -0.2191751 -0.5913131 0.214115 -0.5633558 -0.1804313 0.8062721 0 0 0 0 1 -0.2867325 0.9577859 0.02075356 0 -0.7712956 -0.2179452 -0.5979992 0.214115 -0.568232 -0.1874729 0.8012279 0 0 0 0 1 -0.287616 0.9574456 0.0239762 0 -0.7661874 -0.2149972 -0.605585 0.214115 -0.5746598 -0.1925462 0.7954193 0 0 0 0 1 -0.2865091 0.9577816 0.02381181 0 -0.7648137 -0.2136746 -0.6077855 0.214115 -0.5770378 -0.1923477 0.793744 0 0 0 0 1 -0.2888419 0.9570506 0.02499085 0 -0.7634289 -0.2144975 -0.6092349 0.214115 -0.5777081 -0.1950513 0.7925958 0 0 0 0 1 -0.2925969 0.9558563 0.02693974 0 -0.7643541 -0.216862 -0.6072346 0.214115 -0.5745868 -0.1982665 0.7940656 0 0 0 0 1 -0.2933492 0.9556223 0.02706068 0 -0.76713 -0.2184072 -0.6031666 0.214115 -0.5704891 -0.1976975 0.797156 0 0 0 0 1 -0.2951688 0.9550049 0.02899926 0 -0.7685427 -0.2192867 -0.6010454 0.214115 -0.5676421 -0.1996971 0.7986885 0 0 0 0 1 -0.2983543 0.9538753 0.03326654 0 -0.7697147 -0.2198503 -0.5993373 0.214115 -0.5643793 -0.2044207 0.7998051 0 0 0 0 1 -0.3037258 0.9519331 0.03967303 0 -0.7734947 -0.2220525 -0.5936317 0.214115 -0.5562881 -0.2109882 0.8037582 0 0 0 0 1 -0.3076218 0.9503653 0.0466324 0 -0.7751829 -0.2218944 -0.5914851 0.214115 -0.5517794 -0.2181024 0.8049663 0 0 0 0 1 -0.3137816 0.9479032 0.05496054 0 -0.7756118 -0.2224993 -0.5906949 0.214115 -0.5476928 -0.2279772 0.805021 0 0 0 0 1 -0.3169903 0.9466937 0.05734407 0 -0.7770336 -0.2245621 -0.5880398 0.214115 -0.5438162 -0.2309612 0.8067966 0 0 0 0 1 -0.3185566 0.9462177 0.05651396 0 -0.7804673 -0.2279852 -0.5821456 0.214115 -0.5379521 -0.2295536 0.811118 0 0 0 0 1 -0.3212171 0.9451783 0.05880159 0 -0.7825691 -0.2299627 -0.5785351 0.214115 -0.5332966 -0.2318516 0.8135352 0 0 0 0 1 -0.3215778 0.9449186 0.06096404 0 -0.781873 -0.2286701 -0.5799868 0.214115 -0.5340996 -0.234177 0.8123414 0 0 0 0 1 -0.3231959 0.9441524 0.06419247 0 -0.7818217 -0.228177 -0.58025 0.214115 -0.5331972 -0.2377215 0.8119047 0 0 0 0 1 -0.3240821 0.9436659 0.06682431 0 -0.7812337 -0.2271233 -0.5814542 0.214115 -0.5335211 -0.2406443 0.8108301 0 0 0 0 1 -0.3248905 0.9431941 0.06950664 0 -0.7813962 -0.2263014 -0.5815563 0.214115 -0.532791 -0.2432544 0.8105313 0 0 0 0 1 -0.3251686 0.9429396 0.07162594 0 -0.7829132 -0.2259539 -0.579648 0.214115 -0.5303889 -0.2445603 0.8117128 0 0 0 0 1 -0.3232101 0.9437974 0.06915014 0 -0.7826449 -0.2255135 -0.5801816 0.214115 -0.5319795 -0.2416406 0.8115463 0 0 0 0 1 -0.3226821 0.9441108 0.0673139 0 -0.7830468 -0.2263281 -0.5793216 0.214115 -0.5317086 -0.2396467 0.8123148 0 0 0 0 1 -0.3249071 0.9432148 0.06914699 0 -0.7839297 -0.2276955 -0.5775891 0.214115 -0.5290461 -0.2418691 0.8133938 0 0 0 0 1 -0.3266453 0.942328 0.0729435 0 -0.7867 -0.2283001 -0.5735699 0.214115 -0.5238379 -0.2447385 0.8159024 0 0 0 0 1 -0.3276529 0.9416179 0.07745647 0 -0.7886078 -0.227416 -0.5712966 0.214115 -0.5203282 -0.2482697 0.8170805 0 0 0 0 1 -0.3314949 0.9396107 0.08510607 0 -0.7907463 -0.2275013 -0.5682989 0.214115 -0.5146179 -0.2556855 0.818409 0 0 0 0 1 -0.3350236 0.937681 0.09226876 0 -0.7909046 -0.2266489 -0.5684191 0.214115 -0.5120831 -0.2634096 0.8175488 0 0 0 0 1 -0.3338304 0.9386292 0.0867899 0 -0.7894521 -0.2280823 -0.5698631 0.214115 -0.5150948 -0.2587541 0.8171434 0 0 0 0 1 -0.3334065 0.9389584 0.0848369 0 -0.7920289 -0.2301458 -0.5654407 0.214115 -0.5114004 -0.2557149 0.8204142 0 0 0 0 1 -0.3353415 0.9376284 0.09164661 0 -0.7925983 -0.2282049 -0.5654296 0.214115 -0.5092486 -0.262251 0.819689 0 0 0 0 1 -0.3371205 0.936634 0.09521836 0 -0.7930299 -0.2280051 -0.5649047 0.214115 -0.5073987 -0.2659519 0.8196438 0 0 0 0 1 -0.3413256 0.9350534 0.09577107 0 -0.7952436 -0.2329592 -0.5597478 0.214115 -0.5010833 -0.2672176 0.8231101 0 0 0 0 1 -0.3451987 0.9333829 0.098154 0 -0.7976987 -0.2366893 -0.5546665 0.214115 -0.4944841 -0.2697675 0.8262632 0 0 0 0 1 -0.3462516 0.9324659 0.1030398 0 -0.798785 -0.2354337 -0.5536367 0.214115 -0.4919884 -0.2740042 0.8263589 0 0 0 0 1 -0.3470332 0.9318031 0.1063536 0 -0.7988712 -0.2342934 -0.5539959 0.214115 -0.4912971 -0.2772178 0.8256981 0 0 0 0 1 -0.3488693 0.9308866 0.1083534 0 -0.7998071 -0.2354763 -0.552141 0.214115 -0.4884659 -0.2792869 0.82668 0 0 0 0 1 -0.3469523 0.9321475 0.1035628 0 -0.8035456 -0.2384937 -0.5453763 0.214115 -0.483672 -0.2724371 0.8317688 0 0 0 0 1 -0.3441123 0.9339002 0.0970419 0 -0.8068 -0.2412378 -0.5393313 0.214115 -0.4802713 -0.263884 0.8364835 0 0 0 0 1 -0.3466151 0.9325948 0.1006227 0 -0.8091809 -0.2430284 -0.5349426 0.214115 -0.4744304 -0.2668412 0.8388751 0 0 0 0 1 -0.3495942 0.9311169 0.1039478 0 -0.8101513 -0.2447069 -0.5327039 0.214115 -0.4705728 -0.2704436 0.8398936 0 0 0 0 1 -0.3504776 0.9306554 0.1051003 0 -0.811134 -0.2455191 -0.5308315 0.214115 -0.468217 -0.271295 0.840935 0 0 0 0 1 -0.35235 0.9295392 0.1086574 0 -0.8094411 -0.2444142 -0.5339166 0.214115 -0.469739 -0.2760773 0.8385264 0 0 0 0 1 -0.3539791 0.928336 0.1135399 0 -0.8082085 -0.2425414 -0.5366308 0.214115 -0.4706355 -0.2817201 0.8361435 0 0 0 0 1 -0.3544163 0.9286279 0.1097245 0 -0.8085567 -0.2453991 -0.5348041 0.214115 -0.4697076 -0.2782617 0.8378216 0 0 0 0 1 -0.3547557 0.9289129 0.1061562 0 -0.8113687 -0.2494526 -0.5286344 0.214115 -0.4645743 -0.2736679 0.8421855 0 0 0 0 1 -0.3572789 0.9272261 0.1122659 0 -0.811758 -0.2488172 -0.5283361 0.214115 -0.4619533 -0.2798961 0.8415802 0 0 0 0 1 -0.3589178 0.9259747 0.1172556 0 -0.8117086 -0.2476448 -0.5289624 0.214115 -0.4607681 -0.2850314 0.8405056 0 0 0 0 1 -0.3581016 0.9270303 0.1112573 0 -0.8139354 -0.251567 -0.5236632 0.214115 -0.457463 -0.2780809 0.8446292 0 0 0 0 1 -0.3577067 0.9274839 0.1087177 0 -0.8173879 -0.2546745 -0.5167378 0.214115 -0.4515783 -0.2737051 0.8492127 0 0 0 0 1 -0.3608057 0.9248901 0.11999 0 -0.8189232 -0.252613 -0.5153169 0.214115 -0.4463005 -0.2841919 0.848558 0 0 0 0 1 -0.3637396 0.9226903 0.1278128 0 -0.8175309 -0.2504503 -0.5185729 0.214115 -0.4464715 -0.2931164 0.8454265 0 0 0 0 1 -0.3650687 0.9218829 0.1298339 0 -0.8179562 -0.2510128 -0.5176296 0.214115 -0.4446038 -0.2951688 0.8456966 0 0 0 0 1 -0.3664611 0.9209551 0.1324694 0 -0.8187737 -0.2515715 -0.5160635 0.214115 -0.4419457 -0.2975797 0.8462448 0 0 0 0 1 -0.3674383 0.9200075 0.1362913 0 -0.8203881 -0.2515829 -0.5134876 0.214115 -0.4381238 -0.3004868 0.8472043 0 0 0 0 1 -0.3693894 0.9186094 0.1403866 0 -0.82194 -0.2524918 -0.5105514 0.214115 -0.4335508 -0.3039817 0.8483093 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftArm_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftArm_pose_matrix-interpolation"> + <Name_array id="_6_15_t_LeftArm_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_LeftArm_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_LeftArm_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_LeftArm_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_LeftArm_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_LeftArm_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_LeftArm_pose_matrix-sampler" target="LeftArm/transform"/> + </animation> + <animation id="_6_15_t_LeftForeArm_pose_matrix"> + <source id="_6_15_t_LeftForeArm_pose_matrix-input"> + <float_array id="_6_15_t_LeftForeArm_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftForeArm_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftForeArm_pose_matrix-output"> + <float_array id="_6_15_t_LeftForeArm_pose_matrix-output-array" count="2224">0.9818106 -0.187231 0.03150445 0 0.1872308 0.9272428 -0.3242923 0.3194921 0.03150522 0.3242922 0.9454322 0 0 0 0 1 0.9812632 -0.1899196 0.03245329 0 0.1899196 0.9250524 -0.3289507 0.3194921 0.03245311 0.3289507 0.9437893 0 0 0 0 1 0.9808632 -0.1918565 0.03314536 0 0.1918562 0.9234527 -0.3323044 0.3194921 0.0331465 0.3323043 0.9425896 0 0 0 0 1 0.981525 -0.1886393 0.03199952 0 0.1886392 0.9260998 -0.3267329 0.3194921 0.03199988 0.3267329 0.9445748 0 0 0 0 1 0.9824385 -0.1840911 0.03041738 0 0.184091 0.9297537 -0.3188551 0.3194921 0.03041768 0.3188551 0.9473153 0 0 0 0 1 0.9826363 -0.1830886 0.03007537 0 0.1830888 0.9305455 -0.3171175 0.3194921 0.03007405 0.3171176 0.9479093 0 0 0 0 1 0.9825973 -0.1832872 0.030142 0 0.183287 0.9303885 -0.3174636 0.3194921 0.03014314 0.3174635 0.9477913 0 0 0 0 1 0.982842 -0.1820402 0.02971792 0 0.1820399 0.9313681 -0.3153012 0.3194921 0.02971911 0.3153012 0.9485262 0 0 0 0 1 0.9824774 -0.1838943 0.03034991 0 0.1838942 0.9299095 -0.3185143 0.3194921 0.0303502 0.3185143 0.9474321 0 0 0 0 1 0.9812256 -0.1901026 0.03251761 0 0.1901024 0.9249029 -0.3292655 0.3194921 0.03251856 0.3292654 0.9436773 0 0 0 0 1 0.9803198 -0.1944512 0.03408706 0 0.1944512 0.921279 -0.3367994 0.3194921 0.0340873 0.3367994 0.9409592 0 0 0 0 1 0.9802089 -0.1949755 0.03427934 0 0.1949755 0.9208354 -0.337708 0.3194921 0.0342791 0.3377081 0.9406265 0 0 0 0 1 0.9802313 -0.1948701 0.03424078 0 0.1948702 0.9209246 -0.3375257 0.3194921 0.03424042 0.3375257 0.9406934 0 0 0 0 1 0.9795259 -0.1981706 0.03546196 0 0.1981704 0.9181033 -0.3432418 0.3194921 0.03546261 0.3432417 0.9385774 0 0 0 0 1 0.9788258 -0.2013831 0.03667509 0 0.2013831 0.9153028 -0.3488059 0.3194921 0.03667473 0.3488059 0.9364771 0 0 0 0 1 0.9777582 -0.2061673 0.03852456 0 0.2061675 0.9110327 -0.3570916 0.3194921 0.03852343 0.3570917 0.9332746 0 0 0 0 1 0.9773724 -0.2078633 0.03919303 0 0.2078636 0.9094898 -0.3600291 0.3194921 0.03919112 0.3600293 0.9321175 0 0 0 0 1 0.978008 -0.2050601 0.03809088 0 0.2050598 0.9120311 -0.3551756 0.3194921 0.03809219 0.3551754 0.9340232 0 0 0 0 1 0.9785545 -0.2026118 0.03714489 0 0.2026118 0.9142173 -0.3509348 0.3194921 0.03714495 0.3509348 0.9356629 0 0 0 0 1 0.9790403 -0.2004053 0.03630322 0 0.2004052 0.9161608 -0.3471124 0.3194921 0.03630352 0.3471124 0.9371206 0 0 0 0 1 0.9796356 -0.1976613 0.03527289 0 0.1976615 0.9185423 -0.3423594 0.3194921 0.03527152 0.3423596 0.9389067 0 0 0 0 1 0.9796621 -0.1975382 0.03522568 0 0.197538 0.9186482 -0.3421465 0.3194921 0.03522694 0.3421464 0.9389861 0 0 0 0 1 0.9795784 -0.1979273 0.03537106 0 0.1979272 0.9183132 -0.3428204 0.3194921 0.03537172 0.3428204 0.9387348 0 0 0 0 1 0.9799724 -0.196089 0.03468924 0 0.1960892 0.9198894 -0.3396359 0.3194921 0.03468859 0.339636 0.9399171 0 0 0 0 1 0.9800982 -0.1954976 0.03447145 0 0.1954978 0.9203922 -0.338613 0.3194921 0.03447073 0.3386131 0.9402941 0 0 0 0 1 0.9801638 -0.195189 0.03435713 0 0.1951889 0.9206545 -0.3380777 0.3194921 0.03435796 0.3380777 0.9404909 0 0 0 0 1 0.980961 -0.1913845 0.03297734 0 0.1913847 0.9238441 -0.3314875 0.3194921 0.03297561 0.3314877 0.9428831 0 0 0 0 1 0.9817506 -0.1875277 0.03160947 0 0.1875279 0.9270025 -0.3248071 0.3194921 0.03160822 0.3248073 0.9452519 0 0 0 0 1 0.9817302 -0.1876291 0.03164446 0 0.1876291 0.9269207 -0.3249822 0.3194921 0.03164416 0.3249822 0.9451906 0 0 0 0 1 0.9814665 -0.1889265 0.03210121 0 0.1889265 0.9258654 -0.3272311 0.3194921 0.03210115 0.3272311 0.9443989 0 0 0 0 1 0.9814988 -0.1887677 0.03204506 0 0.1887677 0.925995 -0.3269556 0.3194921 0.03204506 0.3269556 0.9444962 0 0 0 0 1 0.9811557 -0.1904421 0.03263998 0 0.1904424 0.9246233 -0.3298535 0.3194921 0.03263825 0.3298538 0.9434677 0 0 0 0 1 0.9806477 -0.1928904 0.03351986 0 0.1928905 0.9225903 -0.3340963 0.3194921 0.03351879 0.3340964 0.9419428 0 0 0 0 1 0.9805108 -0.1935436 0.03375679 0 0.1935437 0.9220429 -0.3352279 0.3194921 0.03375595 0.3352279 0.9415321 0 0 0 0 1 0.9804356 -0.193902 0.03388607 0 0.1939017 0.9217414 -0.3358496 0.3194921 0.03388768 0.3358494 0.9413059 0 0 0 0 1 0.9807114 -0.1925857 0.03340905 0 0.1925858 0.9228457 -0.3335666 0.3194921 0.03340876 0.3335666 0.9421344 0 0 0 0 1 0.9806237 -0.1930049 0.03356069 0 0.1930049 0.9224949 -0.3342937 0.3194921 0.03356069 0.3342937 0.9418712 0 0 0 0 1 0.9796131 -0.197766 0.03531092 0 0.1977658 0.9184519 -0.3425417 0.3194921 0.03531163 0.3425416 0.9388388 0 0 0 0 1 0.9791457 -0.1999226 0.03612101 0 0.1999226 0.9165822 -0.3462774 0.3194921 0.03612077 0.3462775 0.9374365 0 0 0 0 1 0.9789233 -0.2009394 0.03650593 0 0.2009394 0.9156929 -0.348037 0.3194921 0.03650605 0.348037 0.9367697 0 0 0 0 1 0.9781548 -0.2044057 0.03783726 0 0.2044057 0.9126182 -0.3540429 0.3194921 0.03783732 0.3540429 0.9344635 0 0 0 0 1 0.9774602 -0.207479 0.03903967 0 0.2074787 0.9098403 -0.3593651 0.3194921 0.03904074 0.3593649 0.9323801 0 0 0 0 1 0.9769032 -0.2099043 0.04000562 0 0.2099046 0.9076126 -0.3635649 0.3194921 0.04000413 0.363565 0.9307095 0 0 0 0 1 0.9759968 -0.2137801 0.04157453 0 0.21378 0.9039873 -0.370277 0.3194921 0.04157495 0.3702769 0.9279906 0 0 0 0 1 0.9746707 -0.2192995 0.04387235 0 0.2192998 0.8986825 -0.3798387 0.3194921 0.04387104 0.3798389 0.9240118 0 0 0 0 1 0.9733156 -0.2247682 0.04621809 0 0.2247679 0.8932625 -0.3893089 0.3194921 0.04621934 0.3893088 0.919947 0 0 0 0 1 0.9722744 -0.2288588 0.04802286 0 0.2288591 0.8890977 -0.3963947 0.3194921 0.04802137 0.3963949 0.9168233 0 0 0 0 1 0.9714827 -0.2319088 0.04939383 0 0.2319089 0.8859301 -0.4016792 0.3194921 0.04939341 0.4016793 0.9144474 0 0 0 0 1 0.970626 -0.2351526 0.05087816 0 0.2351529 0.8825039 -0.407296 0.3194921 0.05087649 0.4072962 0.9118779 0 0 0 0 1 0.9695401 -0.2391833 0.05275839 0 0.2391833 0.8781598 -0.4142786 0.3194921 0.05275821 0.4142787 0.9086197 0 0 0 0 1 0.96807 -0.2445035 0.05530518 0 0.2445038 0.8722797 -0.4234926 0.3194921 0.05530381 0.4234928 0.9042098 0 0 0 0 1 0.9669011 -0.2486277 0.05732876 0 0.2486277 0.8676052 -0.430634 0.3194921 0.05732876 0.430634 0.900704 0 0 0 0 1 0.9654941 -0.2534745 0.05976605 0 0.2534745 0.8619765 -0.4390298 0.3194921 0.05976587 0.4390298 0.8964824 0 0 0 0 1 0.9635468 -0.259983 0.06313848 0 0.2599828 0.8541876 -0.4503026 0.3194921 0.06313884 0.4503026 0.8906408 0 0 0 0 1 0.9612926 -0.2672485 0.0670439 0 0.2672489 0.8451706 -0.4628874 0.3194921 0.06704241 0.4628877 0.883878 0 0 0 0 1 0.9594471 -0.2729978 0.07023948 0 0.2729975 0.8377872 -0.4728478 0.3194921 0.07024061 0.4728476 0.8783401 0 0 0 0 1 0.9577296 -0.2781972 0.07321417 0 0.2781971 0.8309184 -0.4818516 0.3194921 0.0732147 0.4818515 0.8731887 0 0 0 0 1 0.9565262 -0.2817582 0.07529985 0 0.2817586 0.826104 -0.4880208 0.3194921 0.0752983 0.4880211 0.8695778 0 0 0 0 1 0.956107 -0.2829835 0.07602518 0 0.2829836 0.824428 -0.4901416 0.3194921 0.07602471 0.4901417 0.868321 0 0 0 0 1 0.9554793 -0.2848039 0.07711166 0 0.2848037 0.8219173 -0.4932938 0.3194921 0.07711255 0.4932937 0.8664381 0 0 0 0 1 0.9548041 -0.2867425 0.07828229 0 0.2867427 0.819216 -0.4966527 0.3194921 0.07828122 0.4966528 0.8644119 0 0 0 0 1 0.9540064 -0.289008 0.07966333 0 0.289008 0.816025 -0.5005772 0.3194921 0.07966351 0.5005772 0.8620187 0 0 0 0 1 0.9522677 -0.2938558 0.08267515 0 0.293856 0.8090711 -0.5089721 0.3194921 0.08267432 0.5089722 0.8568034 0 0 0 0 1 0.9505046 -0.2986502 0.08572834 0 0.2986499 0.8020176 -0.5172775 0.3194921 0.0857293 0.5172773 0.8515131 0 0 0 0 1 0.9509848 -0.2973558 0.08489644 0 0.2973557 0.8039393 -0.5150352 0.3194921 0.0848971 0.515035 0.8529545 0 0 0 0 1 0.9511004 -0.297043 0.08469682 0 0.297043 0.8044008 -0.5144948 0.3194921 0.08469682 0.5144948 0.8533003 0 0 0 0 1 0.9504816 -0.2987117 0.08576792 0 0.2987114 0.8019263 -0.5173836 0.3194921 0.08576893 0.5173834 0.8514447 0 0 0 0 1 0.9506292 -0.298315 0.08551317 0 0.2983154 0.8025178 -0.5166945 0.3194921 0.0855118 0.5166947 0.8518886 0 0 0 0 1 0.9515645 -0.2957823 0.08389252 0 0.295782 0.8062569 -0.5123113 0.3194921 0.08389365 0.5123111 0.8546924 0 0 0 0 1 0.9512882 -0.2965337 0.08437204 0 0.2965341 0.8051527 -0.5136114 0.3194921 0.08437067 0.5136116 0.8538645 0 0 0 0 1 0.9517428 -0.2952954 0.0835843 0 0.2952957 0.8069719 -0.5114653 0.3194921 0.08358311 0.5114655 0.8552291 0 0 0 0 1 0.9531152 -0.2915081 0.08120715 0 0.2915083 0.8124612 -0.5049057 0.3194921 0.08120638 0.5049058 0.859346 0 0 0 0 1 0.9543944 -0.2879096 0.07899093 0 0.2879093 0.8175773 -0.4986739 0.3194921 0.07899177 0.4986738 0.8631829 0 0 0 0 1 0.9550701 -0.2859811 0.07782095 0 0.2859811 0.8202806 -0.4953328 0.3194921 0.07782071 0.4953328 0.8652105 0 0 0 0 1 0.9560188 -0.2832404 0.07617813 0 0.2832407 0.8240755 -0.4905858 0.3194921 0.07617712 0.4905859 0.8680567 0 0 0 0 1 0.9570412 -0.2802425 0.07440793 0 0.280243 0.8281646 -0.4853938 0.3194921 0.0744059 0.4853941 0.8711236 0 0 0 0 1 0.9578814 -0.2777434 0.07295179 0 0.2777434 0.8315247 -0.4810668 0.3194921 0.07295185 0.4810668 0.8736433 0 0 0 0 1 0.9587029 -0.2752681 0.07152873 0 0.2752681 0.8348113 -0.4767783 0.3194921 0.07152885 0.4767783 0.8761085 0 0 0 0 1 0.9595572 -0.2726594 0.07004851 0 0.2726592 0.8382287 -0.4722601 0.3194921 0.07004952 0.47226 0.8786714 0 0 0 0 1 0.9601966 -0.2706838 0.06894069 0 0.2706835 0.8407869 -0.4688367 0.3194921 0.06894207 0.4688365 0.8805903 0 0 0 0 1 0.9607146 -0.2690679 0.0680449 0 0.269068 0.8428573 -0.4660407 0.3194921 0.06804442 0.4660408 0.8821428 0 0 0 0 1 0.961001 -0.2681685 0.06754809 0 0.2681686 0.8440045 -0.4644804 0.3194921 0.06754809 0.4644804 0.8830035 0 0 0 0 1 0.9613054 -0.2672078 0.06702148 0 0.2672081 0.8452216 -0.4628179 0.3194921 0.06702047 0.462818 0.8839161 0 0 0 0 1 0.9616427 -0.2661383 0.0664367 0 0.2661381 0.8465706 -0.460965 0.3194921 0.06643706 0.460965 0.8849278 0 0 0 0 1 0.9619998 -0.2649991 0.06581765 0 0.2649987 0.8479986 -0.4589924 0.3194921 0.06581926 0.4589923 0.8859988 0 0 0 0 1 0.9624136 -0.2636703 0.0651012 0 0.2636701 0.8496544 -0.4566897 0.3194921 0.06510192 0.4566896 0.8872408 0 0 0 0 1 0.9627581 -0.2625566 0.06450533 0 0.2625568 0.8510323 -0.4547615 0.3194921 0.06450444 0.4547616 0.8882741 0 0 0 0 1 0.9634321 -0.2603594 0.06333714 0 0.2603592 0.8537284 -0.4509555 0.3194921 0.06333774 0.4509554 0.8902963 0 0 0 0 1 0.9641066 -0.2581347 0.06216871 0 0.2581344 0.8564257 -0.4471037 0.3194921 0.06217008 0.4471035 0.892319 0 0 0 0 1 0.9646202 -0.2564232 0.06127953 0 0.256423 0.8584796 -0.4441396 0.3194921 0.06128042 0.4441395 0.8938595 0 0 0 0 1 0.9652103 -0.2544372 0.06025815 0 0.2544374 0.8608411 -0.4406974 0.3194921 0.06025707 0.4406976 0.8956308 0 0 0 0 1 0.9653819 -0.2538555 0.0599603 0 0.2538555 0.8615278 -0.4396899 0.3194921 0.05996024 0.4396899 0.8961459 0 0 0 0 1 0.9656316 -0.2530063 0.05952858 0 0.2530066 0.8625257 -0.4382203 0.3194921 0.05952757 0.4382205 0.8968942 0 0 0 0 1 0.9658843 -0.252143 0.05909013 0 0.252143 0.8635373 -0.4367232 0.3194921 0.05909013 0.4367233 0.8976531 0 0 0 0 1 0.9658968 -0.2521001 0.0590685 0 0.2520999 0.8635864 -0.4366511 0.3194921 0.05906891 0.4366511 0.8976896 0 0 0 0 1 0.9659388 -0.2519561 0.05899649 0 0.2519564 0.8637546 -0.4364012 0.3194921 0.05899542 0.4364014 0.8978158 0 0 0 0 1 0.9666571 -0.2494774 0.05775147 0 0.2494773 0.8666279 -0.4321078 0.3194921 0.05775207 0.4321078 0.8999708 0 0 0 0 1 0.9674553 -0.2466838 0.05636978 0 0.246684 0.8698206 -0.4272693 0.3194921 0.05636876 0.4272695 0.9023654 0 0 0 0 1 0.9678334 -0.2453457 0.05571395 0 0.2453455 0.8713333 -0.4249517 0.3194921 0.05571466 0.4249516 0.9034999 0 0 0 0 1 0.9684383 -0.2431852 0.05466634 0 0.243185 0.8737524 -0.42121 0.3194921 0.05466717 0.4212099 0.9053142 0 0 0 0 1 0.9690216 -0.2410773 0.05365693 0 0.2410775 0.8760855 -0.4175593 0.3194921 0.05365598 0.4175595 0.907064 0 0 0 0 1 0.9695889 -0.2390043 0.05267298 0 0.239004 0.8783553 -0.4139675 0.3194921 0.05267441 0.4139673 0.9087665 0 0 0 0 1 0.9697256 -0.238501 0.05243629 0 0.2385008 0.8789027 -0.413095 0.3194921 0.05243712 0.4130949 0.9091771 0 0 0 0 1 0.9697235 -0.2385085 0.052441 0 0.2385087 0.8788939 -0.4131091 0.3194921 0.05243992 0.4131092 0.9091704 0 0 0 0 1 0.9698764 -0.2379446 0.05217641 0 0.2379449 0.8795056 -0.4121313 0.3194921 0.05217486 0.4121314 0.9096293 0 0 0 0 1 0.9702955 -0.2363889 0.05145007 0 0.2363889 0.8811818 -0.4094373 0.3194921 0.05144947 0.4094374 0.9108864 0 0 0 0 1 0.970729 -0.2347656 0.05069911 0 0.2347656 0.8829156 -0.4066266 0.3194921 0.05069887 0.4066267 0.9121866 0 0 0 0 1 0.9714087 -0.2321916 0.0495209 0 0.2321913 0.8856348 -0.4021669 0.3194921 0.04952228 0.4021667 0.9142262 0 0 0 0 1 0.9716984 -0.2310832 0.04902011 0 0.2310832 0.886793 -0.4002482 0.3194921 0.04901993 0.4002482 0.9150947 0 0 0 0 1 0.9721154 -0.2294757 0.04829728 0 0.2294755 0.8884615 -0.3974635 0.3194921 0.04829788 0.3974634 0.9163461 0 0 0 0 1 0.972329 -0.2286466 0.04792857 0 0.2286469 0.8893151 -0.3960294 0.3194921 0.04792714 0.3960295 0.9169862 0 0 0 0 1 0.9722687 -0.2288811 0.04803234 0 0.2288812 0.8890748 -0.3964332 0.3194921 0.04803168 0.3964334 0.9168062 0 0 0 0 1 0.9726179 -0.2275196 0.04742807 0 0.2275199 0.8904716 -0.3940749 0.3194921 0.0474264 0.394075 0.9178538 0 0 0 0 1 0.9730018 -0.2260107 0.04676234 0 0.2260107 0.8920071 -0.391462 0.3194921 0.04676222 0.391462 0.9190053 0 0 0 0 1 0.9735168 -0.2239669 0.04586982 0 0.2239666 0.8940665 -0.3879228 0.3194921 0.04587113 0.3879226 0.9205498 0 0 0 0 1 0.9738786 -0.2225167 0.04524385 0 0.2225168 0.8955147 -0.3854084 0.3194921 0.0452432 0.3854085 0.9216362 0 0 0 0 1 0.9742396 -0.2210578 0.04461854 0 0.2210578 0.8969581 -0.3828833 0.3194921 0.0446183 0.3828834 0.9227185 0 0 0 0 1 0.9742227 -0.221126 0.04464846 0 0.2211263 0.896891 -0.3830008 0.3194921 0.04464656 0.3830011 0.9226683 0 0 0 0 1 0.9741163 -0.2215572 0.0448324 0 0.2215574 0.8964655 -0.3837473 0.3194921 0.04483121 0.3837474 0.9223492 0 0 0 0 1 0.9748461 -0.2185795 0.04356795 0 0.2185795 0.8993844 -0.3785905 0.3194921 0.04356771 0.3785905 0.9245383 0 0 0 0 1 0.9763879 -0.2121184 0.04089677 0 0.2121182 0.9055516 -0.3673992 0.3194921 0.04089796 0.367399 0.9291638 0 0 0 0 1 0.9772571 -0.2083673 0.03939205 0 0.2083674 0.9090285 -0.3609019 0.3194921 0.03939163 0.360902 0.9317715 0 0 0 0 1 0.9775131 -0.2072467 0.03894877 0 0.2072468 0.9100527 -0.3589608 0.3194921 0.03894799 0.3589609 0.9325396 0 0 0 0 1 0.9778883 -0.2055912 0.03829914 0 0.2055914 0.9115533 -0.3560937 0.3194921 0.03829795 0.3560939 0.933665 0 0 0 0 1 0.9782735 -0.2038747 0.03763186 0 0.2038748 0.9130936 -0.353122 0.3194921 0.03763121 0.3531221 0.9348201 0 0 0 0 1 0.9784902 -0.2029013 0.03725564 0 0.2029011 0.9139603 -0.3514366 0.3194921 0.03725671 0.3514364 0.9354702 0 0 0 0 1 0.9789433 -0.2008482 0.03647178 0 0.2008484 0.9157733 -0.3478782 0.3194921 0.03647077 0.3478783 0.9368301 0 0 0 0 1 0.9795908 -0.1978694 0.03534913 0 0.1978693 0.9183636 -0.3427188 0.3194921 0.0353502 0.3427187 0.9387727 0 0 0 0 1 0.9803502 -0.1943071 0.03403472 0 0.1943071 0.9214 -0.3365513 0.3194921 0.03403466 0.3365513 0.9410499 0 0 0 0 1 0.9806892 -0.1926915 0.03344732 0 0.1926914 0.9227563 -0.3337526 0.3194921 0.0334475 0.3337526 0.9420672 0 0 0 0 1 0.9807325 -0.1924841 0.03337287 0 0.1924843 0.9229305 -0.3333904 0.3194921 0.0333715 0.3333905 0.942198 0 0 0 0 1 0.9810766 -0.1908259 0.03277575 0 0.1908257 0.9243065 -0.3305194 0.3194921 0.03277677 0.3305193 0.9432299 0 0 0 0 1 0.9817662 -0.187451 0.03158205 0 0.1874511 0.9270648 -0.3246735 0.3194921 0.03158169 0.3246735 0.9452987 0 0 0 0 1 0.9818618 -0.1869774 0.03141665 0 0.1869775 0.9274469 -0.3238546 0.3194921 0.03141617 0.3238546 0.9455851 0 0 0 0 1 0.9818135 -0.1872165 0.03150075 0 0.1872168 0.9272543 -0.3242672 0.3194921 0.0314989 0.3242675 0.9454409 0 0 0 0 1 0.9822154 -0.1852138 0.03080451 0 0.185214 0.9288619 -0.3207979 0.3194921 0.03080302 0.3207981 0.9466466 0 0 0 0 1 0.9823613 -0.1844802 0.03055125 0 0.1844803 0.9294454 -0.3195282 0.3194921 0.03055089 0.3195282 0.9470841 0 0 0 0 1 0.9821092 -0.1857456 0.03098827 0 0.1857457 0.9284361 -0.321722 0.3194921 0.03098773 0.321722 0.946327 0 0 0 0 1 0.9821943 -0.18532 0.03084009 0 0.1853199 0.9287773 -0.3209816 0.3194921 0.03084069 0.3209816 0.9465832 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftForeArm_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftForeArm_pose_matrix-interpolation"> + <Name_array id="_6_15_t_LeftForeArm_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_LeftForeArm_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_LeftForeArm_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_LeftForeArm_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_LeftForeArm_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_LeftForeArm_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_LeftForeArm_pose_matrix-sampler" target="LeftForeArm/transform"/> + </animation> + <animation id="_6_15_t_LeftHand_pose_matrix"> + <source id="_6_15_t_LeftHand_pose_matrix-input"> + <float_array id="_6_15_t_LeftHand_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftHand_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftHand_pose_matrix-output"> + <float_array id="_6_15_t_LeftHand_pose_matrix-output-array" count="2224">0.9638043 0 0.2666109 0 0 1 0 0.2325859 -0.2666109 0 0.9638043 0 0 0 0 1 0.9645497 0 0.2639017 0 0 1 0 0.2325859 -0.2639017 0 0.9645496 0 0 0 0 1 0.9675767 0 0.2525776 0 0 1 0 0.2325859 -0.2525776 0 0.9675766 0 0 0 0 1 0.9683157 0 0.2497293 0 0 1 0 0.2325859 -0.2497293 0 0.9683157 0 0 0 0 1 0.9668747 0 0.2552517 0 0 1 0 0.2325859 -0.2552517 0 0.9668747 0 0 0 0 1 0.9654409 0 0.2606224 0 0 1 0 0.2325859 -0.2606224 0 0.9654408 0 0 0 0 1 0.9648081 0 0.2629554 0 0 1 0 0.2325859 -0.2629554 0 0.964808 0 0 0 0 1 0.9652281 0 0.2614092 0 0 1 0 0.2325859 -0.2614092 0 0.9652281 0 0 0 0 1 0.9675987 0 0.2524932 0 0 1 0 0.2325859 -0.2524932 0 0.9675987 0 0 0 0 1 0.9694334 0 0.2453547 0 0 1 0 0.2325859 -0.2453547 0 0.9694334 0 0 0 0 1 0.969328 0 0.2457709 0 0 1 0 0.2325859 -0.2457709 0 0.9693279 0 0 0 0 1 0.970322 0 0.2418168 0 0 1 0 0.2325859 -0.2418168 0 0.9703219 0 0 0 0 1 0.9719644 0 0.2351285 0 0 1 0 0.2325859 -0.2351285 0 0.9719643 0 0 0 0 1 0.9754628 0 0.2201645 0 0 1 0 0.2325859 -0.2201645 0 0.9754627 0 0 0 0 1 0.9802257 0 0.1978831 0 0 1 0 0.2325859 -0.1978831 0 0.9802256 0 0 0 0 1 0.9836298 0 0.1802015 0 0 1 0 0.2325859 -0.1802015 0 0.9836297 0 0 0 0 1 0.9847232 0 0.1741276 0 0 1 0 0.2325859 -0.1741276 0 0.9847231 0 0 0 0 1 0.9857268 0 0.1683534 0 0 1 0 0.2325859 -0.1683534 0 0.9857267 0 0 0 0 1 0.9858631 0 0.1675534 0 0 1 0 0.2325859 -0.1675534 0 0.985863 0 0 0 0 1 0.9851097 0 0.1719273 0 0 1 0 0.2325859 -0.1719273 0 0.9851096 0 0 0 0 1 0.9842408 0 0.1768339 0 0 1 0 0.2325859 -0.1768339 0 0.9842407 0 0 0 0 1 0.9816679 0 0.1905999 0 0 1 0 0.2325859 -0.1905999 0 0.9816678 0 0 0 0 1 0.9784587 0 0.2064433 0 0 1 0 0.2325859 -0.2064432 0 0.9784586 0 0 0 0 1 0.9764966 0 0.215533 0 0 1 0 0.2325859 -0.215533 0 0.9764966 0 0 0 0 1 0.9769224 0 0.2135947 0 0 1 0 0.2325859 -0.2135947 0 0.9769223 0 0 0 0 1 0.9749805 0 0.2222905 0 0 1 0 0.2325859 -0.2222905 0 0.9749805 0 0 0 0 1 0.970973 0 0.2391893 0 0 1 0 0.2325859 -0.2391893 0 0.970973 0 0 0 0 1 0.9710935 0 0.2386995 0 0 1 0 0.2325859 -0.2386995 0 0.9710935 0 0 0 0 1 0.9717736 0 0.2359156 0 0 1 0 0.2325859 -0.2359156 0 0.9717736 0 0 0 0 1 0.9703043 0 0.2418879 0 0 1 0 0.2325859 -0.2418879 0 0.9703042 0 0 0 0 1 0.9715938 0 0.2366549 0 0 1 0 0.2325859 -0.2366549 0 0.9715937 0 0 0 0 1 0.9737159 0 0.2277663 0 0 1 0 0.2325859 -0.2277662 0 0.9737159 0 0 0 0 1 0.9751711 0 0.2214531 0 0 1 0 0.2325859 -0.2214531 0 0.975171 0 0 0 0 1 0.9755657 0 0.2197083 0 0 1 0 0.2325859 -0.2197082 0 0.9755656 0 0 0 0 1 0.9764435 0 0.2157733 0 0 1 0 0.2325859 -0.2157732 0 0.9764435 0 0 0 0 1 0.9759557 0 0.2179695 0 0 1 0 0.2325859 -0.2179694 0 0.9759556 0 0 0 0 1 0.9761754 0 0.2169831 0 0 1 0 0.2325859 -0.2169831 0 0.9761754 0 0 0 0 1 0.976928 0 0.2135692 0 0 1 0 0.2325859 -0.2135692 0 0.9769279 0 0 0 0 1 0.9765252 0 0.2154034 0 0 1 0 0.2325859 -0.2154034 0 0.9765251 0 0 0 0 1 0.9773096 0 0.211816 0 0 1 0 0.2325859 -0.211816 0 0.9773095 0 0 0 0 1 0.9788153 0 0.2047454 0 0 1 0 0.2325859 -0.2047454 0 0.9788153 0 0 0 0 1 0.9802902 0 0.1975632 0 0 1 0 0.2325859 -0.1975632 0 0.9802902 0 0 0 0 1 0.981123 0 0.1933851 0 0 1 0 0.2325859 -0.1933851 0 0.9811229 0 0 0 0 1 0.9819366 0 0.1892102 0 0 1 0 0.2325859 -0.1892102 0 0.9819366 0 0 0 0 1 0.9835145 0 0.1808298 0 0 1 0 0.2325859 -0.1808298 0 0.9835144 0 0 0 0 1 0.9835709 0 0.1805225 0 0 1 0 0.2325859 -0.1805225 0 0.9835708 0 0 0 0 1 0.9842198 0 0.1769507 0 0 1 0 0.2325859 -0.1769507 0 0.9842197 0 0 0 0 1 0.9869627 0 0.1609492 0 0 1 0 0.2325859 -0.1609492 0 0.9869627 0 0 0 0 1 0.9898069 0 0.1424164 0 0 1 0 0.2325859 -0.1424164 0 0.9898068 0 0 0 0 1 0.9916372 0 0.1290569 0 0 1 0 0.2325859 -0.1290569 0 0.9916372 0 0 0 0 1 0.9930894 0 0.1173606 0 0 1 0 0.2325859 -0.1173605 0 0.9930894 0 0 0 0 1 0.9940814 0 0.1086378 0 0 1 0 0.2325859 -0.1086378 0 0.9940814 0 0 0 0 1 0.9947862 0 0.1019834 0 0 1 0 0.2325859 -0.1019834 0 0.9947861 0 0 0 0 1 0.9957224 0 0.09239661 0 0 1 0 0.2325859 -0.09239661 0 0.9957223 0 0 0 0 1 0.9964318 0 0.08440303 0 0 1 0 0.2325859 -0.08440303 0 0.9964317 0 0 0 0 1 0.9966758 0 0.08147054 0 0 1 0 0.2325859 -0.08147054 0 0.9966757 0 0 0 0 1 0.9966263 0 0.08207416 0 0 1 0 0.2325859 -0.08207416 0 0.9966262 0 0 0 0 1 0.9973344 0 0.07296663 0 0 1 0 0.2325859 -0.07296663 0 0.9973344 0 0 0 0 1 0.9982244 0 0.05956596 0 0 1 0 0.2325859 -0.0595659 0 0.9982244 0 0 0 0 1 0.9987886 0 0.04920881 0 0 1 0 0.2325859 -0.04920881 0 0.9987885 0 0 0 0 1 0.9989473 0 0.04587382 0 0 1 0 0.2325859 -0.04587382 0 0.9989473 0 0 0 0 1 0.9988911 0 0.047082 0 0 1 0 0.2325859 -0.047082 0 0.9988911 0 0 0 0 1 0.9985806 0 0.05326312 0 0 1 0 0.2325859 -0.05326312 0 0.9985805 0 0 0 0 1 0.9976322 0 0.06877619 0 0 1 0 0.2325859 -0.06877619 0 0.9976321 0 0 0 0 1 0.9988382 0 0.04819077 0 0 1 0 0.2325859 -0.04819077 0 0.9988381 0 0 0 0 1 0.9989786 0 0.0451886 0 0 1 0 0.2325859 -0.0451886 0 0.9989785 0 0 0 0 1 0.9983092 0 0.05812853 0 0 1 0 0.2325859 -0.05812853 0 0.9983091 0 0 0 0 1 0.9960198 0 0.08913242 0 0 1 0 0.2325859 -0.08913242 0 0.9960198 0 0 0 0 1 0.9979671 0 0.0637328 0 0 1 0 0.2325859 -0.0637328 0 0.997967 0 0 0 0 1 0.9973964 0 0.07211542 0 0 1 0 0.2325859 -0.07211542 0 0.9973963 0 0 0 0 1 0.9962456 0 0.08657324 0 0 1 0 0.2325859 -0.08657324 0 0.9962455 0 0 0 0 1 0.9966791 0 0.08143055 0 0 1 0 0.2325859 -0.08143055 0 0.996679 0 0 0 0 1 0.9969898 0 0.07753336 0 0 1 0 0.2325859 -0.07753336 0 0.9969897 0 0 0 0 1 0.9965853 0 0.08256989 0 0 1 0 0.2325859 -0.08256989 0 0.9965853 0 0 0 0 1 0.9962013 0 0.08708095 0 0 1 0 0.2325859 -0.08708095 0 0.9962012 0 0 0 0 1 0.9961537 0 0.08762341 0 0 1 0 0.2325859 -0.08762341 0 0.9961537 0 0 0 0 1 0.996189 0 0.0872218 0 0 1 0 0.2325859 -0.0872218 0 0.9961889 0 0 0 0 1 0.995679 0 0.09286236 0 0 1 0 0.2325859 -0.09286236 0 0.995679 0 0 0 0 1 0.994812 0 0.1017317 0 0 1 0 0.2325859 -0.1017317 0 0.9948119 0 0 0 0 1 0.9945787 0 0.1039869 0 0 1 0 0.2325859 -0.1039869 0 0.9945787 0 0 0 0 1 0.9951092 0 0.09878134 0 0 1 0 0.2325859 -0.09878134 0 0.9951092 0 0 0 0 1 0.9953229 0 0.09660488 0 0 1 0 0.2325859 -0.09660488 0 0.9953228 0 0 0 0 1 0.9952268 0 0.09758985 0 0 1 0 0.2325859 -0.09758985 0 0.9952268 0 0 0 0 1 0.995606 0 0.09364259 0 0 1 0 0.2325859 -0.09364259 0 0.9956059 0 0 0 0 1 0.9956771 0 0.09288322 0 0 1 0 0.2325859 -0.09288322 0 0.995677 0 0 0 0 1 0.9958238 0 0.09129649 0 0 1 0 0.2325859 -0.09129649 0 0.9958238 0 0 0 0 1 0.9959784 0 0.08959484 0 0 1 0 0.2325859 -0.08959484 0 0.9959783 0 0 0 0 1 0.9955776 0 0.09394323 0 0 1 0 0.2325859 -0.09394323 0 0.9955776 0 0 0 0 1 0.9949569 0 0.1003044 0 0 1 0 0.2325859 -0.1003044 0 0.9949568 0 0 0 0 1 0.9940145 0 0.1092485 0 0 1 0 0.2325859 -0.1092485 0 0.9940145 0 0 0 0 1 0.9927015 0 0.1205977 0 0 1 0 0.2325859 -0.1205977 0 0.9927015 0 0 0 0 1 0.9915897 0 0.1294221 0 0 1 0 0.2325859 -0.1294221 0 0.9915896 0 0 0 0 1 0.9909559 0 0.1341885 0 0 1 0 0.2325859 -0.1341885 0 0.9909558 0 0 0 0 1 0.9901815 0 0.1397883 0 0 1 0 0.2325859 -0.1397883 0 0.9901814 0 0 0 0 1 0.9896975 0 0.1431748 0 0 1 0 0.2325859 -0.1431748 0 0.9896974 0 0 0 0 1 0.9895973 0 0.1438657 0 0 1 0 0.2325859 -0.1438657 0 0.9895972 0 0 0 0 1 0.9898598 0 0.1420484 0 0 1 0 0.2325859 -0.1420484 0 0.9898597 0 0 0 0 1 0.990054 0 0.1406887 0 0 1 0 0.2325859 -0.1406887 0 0.9900539 0 0 0 0 1 0.9902769 0 0.1391108 0 0 1 0 0.2325859 -0.1391108 0 0.9902768 0 0 0 0 1 0.9906346 0 0.1365403 0 0 1 0 0.2325859 -0.1365403 0 0.9906345 0 0 0 0 1 0.9910663 0 0.1333703 0 0 1 0 0.2325859 -0.1333703 0 0.9910663 0 0 0 0 1 0.9914957 0 0.1301403 0 0 1 0 0.2325859 -0.1301403 0 0.9914956 0 0 0 0 1 0.9915689 0 0.1295813 0 0 1 0 0.2325859 -0.1295813 0 0.9915688 0 0 0 0 1 0.9916543 0 0.1289253 0 0 1 0 0.2325859 -0.1289253 0 0.9916543 0 0 0 0 1 0.9922949 0 0.1238994 0 0 1 0 0.2325859 -0.1238994 0 0.9922948 0 0 0 0 1 0.9917779 0 0.1279717 0 0 1 0 0.2325859 -0.1279717 0 0.9917778 0 0 0 0 1 0.9913517 0 0.1312322 0 0 1 0 0.2325859 -0.1312322 0 0.9913517 0 0 0 0 1 0.9909266 0 0.1344047 0 0 1 0 0.2325859 -0.1344047 0 0.9909265 0 0 0 0 1 0.9907585 0 0.1356377 0 0 1 0 0.2325859 -0.1356377 0 0.9907585 0 0 0 0 1 0.9901956 0 0.1396881 0 0 1 0 0.2325859 -0.1396881 0 0.9901956 0 0 0 0 1 0.9893363 0 0.1456496 0 0 1 0 0.2325859 -0.1456496 0 0.9893363 0 0 0 0 1 0.9891438 0 0.1469514 0 0 1 0 0.2325859 -0.1469514 0 0.9891437 0 0 0 0 1 0.9887197 0 0.1497786 0 0 1 0 0.2325859 -0.1497786 0 0.9887196 0 0 0 0 1 0.9892755 0 0.1460623 0 0 1 0 0.2325859 -0.1460623 0 0.9892754 0 0 0 0 1 0.9887366 0 0.1496664 0 0 1 0 0.2325859 -0.1496664 0 0.9887366 0 0 0 0 1 0.9882266 0 0.1529979 0 0 1 0 0.2325859 -0.1529979 0 0.9882265 0 0 0 0 1 0.9882674 0 0.1527339 0 0 1 0 0.2325859 -0.1527339 0 0.9882674 0 0 0 0 1 0.9887862 0 0.1493386 0 0 1 0 0.2325859 -0.1493386 0 0.9887861 0 0 0 0 1 0.9890631 0 0.1474934 0 0 1 0 0.2325859 -0.1474934 0 0.989063 0 0 0 0 1 0.9887786 0 0.1493886 0 0 1 0 0.2325859 -0.1493886 0 0.9887785 0 0 0 0 1 0.9877165 0 0.1562569 0 0 1 0 0.2325859 -0.1562569 0 0.9877164 0 0 0 0 1 0.9864637 0 0.1639802 0 0 1 0 0.2325859 -0.1639802 0 0.9864636 0 0 0 0 1 0.9846221 0 0.1746982 0 0 1 0 0.2325859 -0.1746982 0 0.984622 0 0 0 0 1 0.9838954 0 0.1787455 0 0 1 0 0.2325859 -0.1787455 0 0.9838954 0 0 0 0 1 0.9838167 0 0.1791782 0 0 1 0 0.2325859 -0.1791782 0 0.9838166 0 0 0 0 1 0.9839279 0 0.1785669 0 0 1 0 0.2325859 -0.1785669 0 0.9839278 0 0 0 0 1 0.983226 0 0.1823917 0 0 1 0 0.2325859 -0.1823917 0 0.983226 0 0 0 0 1 0.9824586 0 0.1864811 0 0 1 0 0.2325859 -0.1864811 0 0.9824585 0 0 0 0 1 0.981333 0 0.1923164 0 0 1 0 0.2325859 -0.1923164 0 0.981333 0 0 0 0 1 0.9796006 0 0.2009548 0 0 1 0 0.2325859 -0.2009548 0 0.9796005 0 0 0 0 1 0.978388 0 0.2067779 0 0 1 0 0.2325859 -0.2067779 0 0.9783879 0 0 0 0 1 0.9772471 0 0.2121043 0 0 1 0 0.2325859 -0.2121043 0 0.9772471 0 0 0 0 1 0.9756672 0 0.219257 0 0 1 0 0.2325859 -0.219257 0 0.9756671 0 0 0 0 1 0.9745978 0 0.2239629 0 0 1 0 0.2325859 -0.2239629 0 0.9745977 0 0 0 0 1 0.9756764 0 0.2192161 0 0 1 0 0.2325859 -0.2192161 0 0.9756763 0 0 0 0 1 0.9757254 0 0.2189982 0 0 1 0 0.2325859 -0.2189981 0 0.9757253 0 0 0 0 1 0.9758093 0 0.2186235 0 0 1 0 0.2325859 -0.2186235 0 0.9758093 0 0 0 0 1 0.9752367 0 0.2211638 0 0 1 0 0.2325859 -0.2211638 0 0.9752367 0 0 0 0 1 0.9748216 0 0.2229864 0 0 1 0 0.2325859 -0.2229864 0 0.9748216 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftHand_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftHand_pose_matrix-interpolation"> + <Name_array id="_6_15_t_LeftHand_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_LeftHand_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_LeftHand_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_LeftHand_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_LeftHand_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_LeftHand_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_LeftHand_pose_matrix-sampler" target="LeftHand/transform"/> + </animation> + <animation id="_6_15_t_LeftFingerBase_pose_matrix"> + <source id="_6_15_t_LeftFingerBase_pose_matrix-input"> + <float_array id="_6_15_t_LeftFingerBase_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftFingerBase_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftFingerBase_pose_matrix-output"> + <float_array id="_6_15_t_LeftFingerBase_pose_matrix-output-array" count="2224">0.982579 -0.1858456 -6.72221e-7 0 0.161655 0.8546797 0.493346 0 -0.09168559 -0.4847516 0.8698331 0 0 0 0 1 0.982103 -0.1883448 7.41721e-7 0 0.1638202 0.8542242 0.4934207 0 -0.09293383 -0.4845898 0.8697908 0 0 0 0 1 0.9801133 -0.1984391 0 0 0.1733648 0.8562679 0.4865697 0 -0.09655433 -0.4768933 0.8736418 0 0 0 0 1 0.9783253 -0.2070745 1.39083e-6 0 0.1826115 0.8627531 0.4714977 0 -0.09763634 -0.4612779 0.8818672 0 0 0 0 1 0.9777076 -0.2099715 6.85598e-7 0 0.1867552 0.869605 0.4570664 0 -0.09597152 -0.4468771 0.8894326 0 0 0 0 1 0.9782032 -0.2076504 -2.87887e-7 0 0.1846234 0.8697263 0.4577011 0 -0.09504157 -0.4477246 0.8891061 0 0 0 0 1 0.9808018 -0.1950078 -4.4275e-7 0 0.1715373 0.862755 0.4756352 0 -0.09275215 -0.4665039 0.8796426 0 0 0 0 1 0.9828978 -0.184152 5.33063e-7 0 0.1609936 0.8592928 0.4854863 0 -0.08940374 -0.4771833 0.8742443 0 0 0 0 1 0.983852 -0.1789842 -5.46858e-7 0 0.1553307 0.8538305 0.496836 0 -0.0889253 -0.4888131 0.8678445 0 0 0 0 1 0.9849604 -0.1727808 0 0 0.1500405 0.8553257 0.4958889 0 -0.08568006 -0.4884309 0.868386 0 0 0 0 1 0.9833675 -0.1816272 -1.23507e-7 0 0.1596518 0.8643878 0.4768071 0 -0.08660101 -0.4688766 0.879008 0 0 0 0 1 0.9814339 -0.1918011 -3.9422e-7 0 0.168916 0.8643311 0.4737079 0 -0.09085738 -0.464913 0.880682 0 0 0 0 1 0.9868687 -0.1615247 1.79658e-7 0 0.1377249 0.8414592 0.5224732 0 -0.08439248 -0.5156125 0.8526557 0 0 0 0 1 0.9816228 -0.1908317 -8.30428e-7 0 0.1672456 0.8602959 0.4815806 0 -0.09190011 -0.4727306 0.8764018 0 0 0 0 1 0.9823539 -0.1870318 -8.23836e-7 0 0.1623281 0.8525995 0.4967129 0 -0.09290039 -0.487948 0.8679149 0 0 0 0 1 0.9783439 -0.2069866 5.90075e-7 0 0.18226 0.8614725 0.4739688 0 -0.09810566 -0.4637042 0.8805417 0 0 0 0 1 0.9798896 -0.1995407 -6.99071e-7 0 0.1751157 0.8599431 0.4794084 0 -0.09566086 -0.4697673 0.8775919 0 0 0 0 1 0.9768748 -0.2138125 -2.9485e-7 0 0.1893061 0.8649085 0.4648618 0 -0.09939301 -0.4541117 0.8853833 0 0 0 0 1 0.973033 -0.2306663 4.16535e-7 0 0.2066529 0.8717368 0.444263 0 -0.1024768 -0.4322824 0.8958964 0 0 0 0 1 0.9715214 -0.2369518 -7.76553e-7 0 0.2133414 0.8747156 0.435153 0 -0.1031096 -0.4227606 0.9003565 0 0 0 0 1 0.9683402 -0.2496346 0 0 0.2261248 0.877145 0.4236558 0 -0.1057591 -0.4102429 0.9058232 0 0 0 0 1 0.9675688 -0.252608 -3.70964e-7 0 0.2298349 0.8803399 0.4149429 0 -0.1048175 -0.4014859 0.9098474 0 0 0 0 1 0.9718167 -0.2357381 -4.34968e-7 0 0.2131983 0.8788969 0.4267162 0 -0.1005929 -0.41469 0.9043856 0 0 0 0 1 0.9732631 -0.2296935 2.65325e-7 0 0.207097 0.8775172 0.4325209 0 -0.09934747 -0.4209566 0.9016239 0 0 0 0 1 0.9719423 -0.2352196 -1.44149e-7 0 0.2114109 0.8735628 0.4383987 0 -0.1031198 -0.4260982 0.8987807 0 0 0 0 1 0.9718944 -0.2354175 1.76625e-7 0 0.2106752 0.8697493 0.4462645 0 -0.1050586 -0.433722 0.8949011 0 0 0 0 1 0.9721906 -0.2341914 7.97208e-7 0 0.2101526 0.8724004 0.4413087 0 -0.1033514 -0.429036 0.8973553 0 0 0 0 1 0.9710094 -0.2390416 4.10666e-7 0 0.2148146 0.872598 0.4386655 0 -0.1048596 -0.4259482 0.8986504 0 0 0 0 1 0.972379 -0.2334076 6.34523e-7 0 0.2087047 0.8694679 0.4477364 0 -0.1045056 -0.4353693 0.8941656 0 0 0 0 1 0.9728529 -0.2314247 8.32617e-7 0 0.2062753 0.8671326 0.453356 0 -0.1049185 -0.4410484 0.8913295 0 0 0 0 1 0.9691725 -0.2463834 1.23863e-7 0 0.2209112 0.8689752 0.4428097 0 -0.1091011 -0.4291589 0.8966156 0 0 0 0 1 0.9663715 -0.2571502 -3.51945e-7 0 0.2310914 0.8684419 0.4386404 0 -0.1127961 -0.4238896 0.8986627 0 0 0 0 1 0.9688749 -0.2475513 0 0 0.221691 0.8676618 0.4449899 0 -0.1101579 -0.4311395 0.8955356 0 0 0 0 1 0.9696043 -0.2446786 -4.80947e-7 0 0.2181756 0.8645781 0.4526633 0 -0.1107566 -0.4389044 0.8916815 0 0 0 0 1 0.9682146 -0.2501212 7.39371e-7 0 0.2243716 0.8685395 0.4419238 0 -0.1105352 -0.4278769 0.8970526 0 0 0 0 1 0.9673263 -0.2535349 3.22159e-7 0 0.2289305 0.8734524 0.4297346 0 -0.1089529 -0.4156935 0.9029552 0 0 0 0 1 0.9669802 -0.2548518 4.26927e-7 0 0.2300786 0.8729844 0.4300723 0 -0.1096051 -0.4158713 0.9027944 0 0 0 0 1 0.9676722 -0.2522112 -5.43074e-7 0 0.2261974 0.8678625 0.4423228 0 -0.1115583 -0.4280236 0.896856 0 0 0 0 1 0.9683484 -0.2496026 -8.11967e-7 0 0.2236849 0.8677978 0.4437251 0 -0.1107542 -0.4296807 0.8961629 0 0 0 0 1 0.9661698 -0.257907 5.32832e-7 0 0.232548 0.8711709 0.432415 0 -0.1115233 -0.4177862 0.9016747 0 0 0 0 1 0.9644081 -0.2644184 -1.78821e-7 0 0.2392957 0.8727782 0.4254359 0 -0.1124929 -0.4102939 0.9049885 0 0 0 0 1 0.9642921 -0.2648414 -6.98368e-7 0 0.2395291 0.8721284 0.4266355 0 -0.1129902 -0.4114013 0.9044237 0 0 0 0 1 0.9641094 -0.2655056 -1.5691e-7 0 0.2398316 0.870881 0.4290071 0 -0.1139037 -0.4136098 0.9033011 0 0 0 0 1 0.9637006 -0.2669855 6.57202e-7 0 0.2405919 0.8684324 0.4335213 0 -0.1157445 -0.4177846 0.9011433 0 0 0 0 1 0.9637023 -0.2669794 8.79818e-7 0 0.2402162 0.8670978 0.4363915 0 -0.1165083 -0.4205513 0.8997569 0 0 0 0 1 0.9630472 -0.2693327 -3.54294e-7 0 0.2424979 0.867094 0.4351353 0 -0.1171959 -0.4190559 0.9003651 0 0 0 0 1 0.9611952 -0.2758692 -1.55665e-7 0 0.2492223 0.868351 0.4287829 0 -0.1182879 -0.4121441 0.9034076 0 0 0 0 1 0.9554106 -0.2952807 0 0 0.2685383 0.8688825 0.4158489 0 -0.1227921 -0.3973065 0.9094337 0 0 0 0 1 0.9520773 -0.3058577 5.08088e-7 0 0.2781528 0.8658378 0.4158796 0 -0.1272004 -0.3959494 0.9094197 0 0 0 0 1 0.9516093 -0.3073107 0 0 0.2798386 0.86654 0.4132781 0 -0.1270049 -0.3932793 0.9106048 0 0 0 0 1 0.9501568 -0.3117726 -5.59273e-7 0 0.2853617 0.8696661 0.4028021 0 -0.1255822 -0.3827253 0.9152871 0 0 0 0 1 0.9486337 -0.3163765 -4.9623e-7 0 0.2906612 0.8715274 0.3949127 0 -0.1249406 -0.3746276 0.9187186 0 0 0 0 1 0.9494983 -0.3137723 0 0 0.287667 0.8705016 0.3993426 0 -0.1253026 -0.3791751 0.9168018 0 0 0 0 1 0.9503251 -0.3112591 -7.21356e-7 0 0.2845441 0.8687589 0.4053304 0 -0.1261621 -0.3851958 0.9141703 0 0 0 0 1 0.9534395 -0.3015845 7.43799e-7 0 0.2739287 0.8660085 0.4183209 0 -0.1261597 -0.3988434 0.9082993 0 0 0 0 1 0.9562767 -0.2924636 -1.07217e-6 0 0.2640383 0.863332 0.4300484 0 -0.1257725 -0.4112455 0.9028059 0 0 0 0 1 0.9560711 -0.2931348 5.89876e-7 0 0.2649093 0.8640133 0.4281402 0 -0.1255033 -0.4093323 0.9037123 0 0 0 0 1 0.9530232 -0.3028975 -2.65618e-7 0 0.2759904 0.8683634 0.4120367 0 -0.1248046 -0.3926806 0.9111672 0 0 0 0 1 0.9476541 -0.3192991 2.95093e-7 0 0.294135 0.8729695 0.389113 0 -0.1242436 -0.3687444 0.92119 0 0 0 0 1 0.9426302 -0.3338388 -3.81018e-7 0 0.3094227 0.8736883 0.3754016 0 -0.1253232 -0.353865 0.9268622 0 0 0 0 1 0.9409775 -0.3384692 -6.65959e-7 0 0.3143976 0.8740553 0.3703802 0 -0.1253617 -0.3485196 0.9288802 0 0 0 0 1 0.9405788 -0.3395757 -1.14039e-6 0 0.3156858 0.8744056 0.3684526 0 -0.1251165 -0.3465591 0.9296465 0 0 0 0 1 0.9462096 -0.3235545 4.54535e-7 0 0.2972509 0.8692874 0.3949446 0 -0.1277865 -0.3737002 0.918705 0 0 0 0 1 0.9555928 -0.2946906 6.04704e-7 0 0.2654213 0.8606818 0.4344863 0 -0.1280395 -0.4151918 0.9006784 0 0 0 0 1 0.9472957 -0.3203606 -6.40061e-7 0 0.2945908 0.8710945 0.3929511 0 -0.1258854 -0.3722411 0.9195594 0 0 0 0 1 0.9428596 -0.3331905 3.76225e-7 0 0.3091222 0.8747516 0.3731663 0 -0.1243358 -0.3518432 0.9277645 0 0 0 0 1 0.9467784 -0.3218864 -2.21135e-7 0 0.2980251 0.8765938 0.3778417 0 -0.1216219 -0.3577324 0.9258702 0 0 0 0 1 0.9567402 -0.2909438 6.63023e-7 0 0.2651979 0.8720781 0.4112783 0 -0.1196594 -0.3934863 0.9115098 0 0 0 0 1 0.9486454 -0.3163415 -1.35677e-7 0 0.290579 0.8713884 0.3952798 0 -0.1250433 -0.3749804 0.9185608 0 0 0 0 1 0.9537335 -0.3006535 -2.45597e-7 0 0.2733773 0.8672075 0.4161921 0 -0.1251294 -0.3969364 0.9092767 0 0 0 0 1 0.9555895 -0.2947012 1.94717e-7 0 0.2690634 0.8724572 0.4079502 0 -0.1202236 -0.3898328 0.9130042 0 0 0 0 1 0.9475798 -0.3195196 -1.23214e-7 0 0.2961354 0.8782306 0.3755193 0 -0.1199856 -0.3558345 0.9268146 0 0 0 0 1 0.9469935 -0.3212529 -6.07812e-7 0 0.2979441 0.8782829 0.3739631 0 -0.1201362 -0.3541408 0.9274436 0 0 0 0 1 0.9519492 -0.3062559 1.8513e-7 0 0.2804934 0.8718703 0.4014544 0 -0.1229479 -0.3821641 0.915879 0 0 0 0 1 0.9542251 -0.2990897 -2.7058e-7 0 0.2725144 0.8694379 0.4120845 0 -0.12325 -0.3932214 0.9111456 0 0 0 0 1 0.9508478 -0.3096588 6.97774e-7 0 0.2836921 0.8711143 0.4008473 0 -0.1241265 -0.3811446 0.9161449 0 0 0 0 1 0.9468879 -0.321564 -8.76127e-7 0 0.2977283 0.8766995 0.3778305 0 -0.1214959 -0.3577634 0.9258748 0 0 0 0 1 0.9453318 -0.3261103 -1.53176e-7 0 0.303256 0.8790814 0.3677657 0 -0.1199321 -0.3476607 0.9299185 0 0 0 0 1 0.9443374 -0.3289788 1.36715e-7 0 0.3056794 0.8774561 0.3696361 0 -0.1216025 -0.3490611 0.9291766 0 0 0 0 1 0.9443576 -0.3289207 -3.82923e-7 0 0.3048848 0.8753483 0.3752472 0 -0.1234262 -0.3543677 0.9269248 0 0 0 0 1 0.9435954 -0.3311011 3.88192e-7 0 0.306813 0.8743777 0.3759381 0 -0.1244738 -0.3547333 0.9266448 0 0 0 0 1 0.9441656 -0.3294715 -1.66182e-7 0 0.3061816 0.8774235 0.3692978 0 -0.1216729 -0.3486784 0.9293111 0 0 0 0 1 0.9469937 -0.3212524 5.97858e-7 0 0.2979184 0.87821 0.3741548 0 -0.1201986 -0.354322 0.9273663 0 0 0 0 1 0.9476526 -0.3193033 -1.27086e-7 0 0.2955675 0.8772074 0.3783478 0 -0.1208076 -0.3585423 0.9256635 0 0 0 0 1 0.9466362 -0.3223043 -2.62577e-7 0 0.2981655 0.875738 0.3797107 0 -0.1223822 -0.359448 0.9251053 0 0 0 0 1 0.9470818 -0.3209924 0 0 0.2965281 0.8749002 0.3829108 0 -0.1229114 -0.3626478 0.9237853 0 0 0 0 1 0.9489241 -0.3155045 0 0 0.2914967 0.8767172 0.3826181 0 -0.1207177 -0.3630756 0.9239066 0 0 0 0 1 0.9500949 -0.3119612 8.7765e-7 0 0.2881339 0.8775282 0.3833055 0 -0.1195772 -0.3641763 0.9236216 0 0 0 0 1 0.9487017 -0.3161727 -3.48081e-7 0 0.2927742 0.8784922 0.3775377 0 -0.1193668 -0.3581708 0.9259942 0 0 0 0 1 0.9493275 -0.3142888 4.54744e-7 0 0.2910866 0.8792443 0.3770917 0 -0.1185161 -0.3579834 0.9261759 0 0 0 0 1 0.952542 -0.3044072 8.916e-7 0 0.2804446 0.8775598 0.3888955 0 -0.1183834 -0.3704391 0.9212819 0 0 0 0 1 0.9570791 -0.2898272 -4.29543e-7 0 0.2659712 0.8783 0.3973013 0 -0.1151484 -0.3802489 0.9176882 0 0 0 0 1 0.9582964 -0.2857762 -2.74342e-7 0 0.2624676 0.8801351 0.3955667 0 -0.1130433 -0.3790702 0.9184373 0 0 0 0 1 0.9588937 -0.2837657 -4.55006e-7 0 0.2596629 0.8774455 0.403317 0 -0.1144471 -0.3867383 0.9150603 0 0 0 0 1 0.9599916 -0.2800288 2.92307e-7 0 0.2554469 0.8757205 0.409708 0 -0.1147302 -0.3933162 0.9122167 0 0 0 0 1 0.9606536 -0.2777495 -8.31367e-7 0 0.2533717 0.8763365 0.4096792 0 -0.1137875 -0.3935601 0.9122296 0 0 0 0 1 0.9598442 -0.2805339 -6.01087e-7 0 0.2559778 0.8758245 0.4091538 0 -0.114781 -0.3927239 0.9124655 0 0 0 0 1 0.9597508 -0.2808532 0 0 0.2563806 0.8761212 0.4082654 0 -0.1146627 -0.391833 0.9128633 0 0 0 0 1 0.9594941 -0.2817289 -8.24951e-7 0 0.25716 0.8758178 0.4084262 0 -0.1150647 -0.3918827 0.9127913 0 0 0 0 1 0.9602745 -0.2790573 6.91763e-7 0 0.2544305 0.8755312 0.4107435 0 -0.1146216 -0.3944263 0.9117509 0 0 0 0 1 0.9607625 -0.2773725 -4.36527e-7 0 0.2536342 0.8785369 0.4047747 0 -0.112273 -0.3888924 0.9144164 0 0 0 0 1 0.9616857 -0.2741546 -2.5046e-7 0 0.2509662 0.8803444 0.4025043 0 -0.1103482 -0.3870827 0.9154181 0 0 0 0 1 0.9627416 -0.2704232 1.77159e-7 0 0.2467915 0.8786098 0.408826 0 -0.1105562 -0.3935937 0.9126123 0 0 0 0 1 0.9612994 -0.275506 7.5006e-7 0 0.2519438 0.8790871 0.4046359 0 -0.1114802 -0.388976 0.9144779 0 0 0 0 1 0.9610672 -0.2763148 0 0 0.2524212 0.8779613 0.4067769 0 -0.1123985 -0.39094 0.9135275 0 0 0 0 1 0.962416 -0.2715797 7.18213e-7 0 0.247243 0.8761735 0.4137522 0 -0.1123673 -0.3982015 0.9103896 0 0 0 0 1 0.9611636 -0.2759793 0 0 0.2512151 0.8749164 0.4140197 0 -0.1142609 -0.3979406 0.910268 0 0 0 0 1 0.9609736 -0.2766403 -4.42377e-7 0 0.2520056 0.8753983 0.412518 0 -0.1141187 -0.3964189 0.9109495 0 0 0 0 1 0.9611094 -0.2761682 -5.57974e-7 0 0.2521886 0.8776559 0.4075794 0 -0.11256 -0.3917285 0.9131698 0 0 0 0 1 0.9583127 -0.2857216 -4.06039e-7 0 0.2626829 0.88104 0.3934034 0 -0.1124035 -0.3770036 0.919366 0 0 0 0 1 0.9597824 -0.2807454 -6.17249e-7 0 0.2584125 0.8834325 0.3908582 0 -0.109731 -0.3751389 0.9204509 0 0 0 0 1 0.9610807 -0.2762681 0 0 0.2532643 0.8810551 0.3994988 0 -0.1103688 -0.3839505 0.9167338 0 0 0 0 1 0.9605217 -0.2782053 -1.48609e-7 0 0.2548328 0.8798264 0.4012055 0 -0.1116173 -0.3853666 0.9159881 0 0 0 0 1 0.9587137 -0.2843732 0 0 0.2606803 0.8788369 0.3996141 0 -0.1136395 -0.3831155 0.9166834 0 0 0 0 1 0.9595531 -0.281528 -1.07281e-6 0 0.2571565 0.876484 0.4069966 0 -0.11458 -0.3905351 0.9134297 0 0 0 0 1 0.9608693 -0.2770023 1.43746e-7 0 0.2517748 0.8733597 0.4169558 0 -0.1154978 -0.40064 0.9089267 0 0 0 0 1 0.9604077 -0.2785986 -3.19391e-7 0 0.2537865 0.8748729 0.4125408 0 -0.114933 -0.3962074 0.9109391 0 0 0 0 1 0.9589005 -0.2837429 3.92751e-7 0 0.2596129 0.8773542 0.4035478 0 -0.1145042 -0.386962 0.9149586 0 0 0 0 1 0.9578388 -0.2873062 -5.18058e-7 0 0.2633221 0.8778783 0.3999891 0 -0.1149189 -0.3831252 0.9165199 0 0 0 0 1 0.9581334 -0.2863222 0 0 0.2623778 0.8780068 0.4003272 0 -0.1146226 -0.3835669 0.9163722 0 0 0 0 1 0.9595989 -0.2813717 0 0 0.256943 0.8762864 0.4075567 0 -0.1146749 -0.391091 0.9131799 0 0 0 0 1 0.963517 -0.2676475 1.66368e-7 0 0.2437399 0.877451 0.4131231 0 -0.1105715 -0.3980511 0.9106752 0 0 0 0 1 0.9690844 -0.2467299 0 0 0.2234586 0.8776814 0.4239594 0 -0.1046034 -0.4108524 0.9056811 0 0 0 0 1 0.9714299 -0.237327 -6.1445e-7 0 0.2138409 0.8752955 0.4337395 0 -0.1029375 -0.4213476 0.9010383 0 0 0 0 1 0.9665629 -0.2564299 -3.78409e-7 0 0.232867 0.8777464 0.4187293 0 -0.1073743 -0.4047282 0.9081111 0 0 0 0 1 0.962694 -0.2705926 -5.41185e-7 0 0.2481064 0.8826933 0.3991187 0 -0.1079981 -0.3842293 0.9168993 0 0 0 0 1 0.9645746 -0.2638106 -1.99938e-7 0 0.2418043 0.8841122 0.3998453 0 -0.1054832 -0.3856806 0.9165827 0 0 0 0 1 0.9643816 -0.2645151 0 0 0.2427995 0.8852097 0.3968024 0 -0.1049601 -0.3826689 0.9179041 0 0 0 0 1 0.962033 -0.2729334 0 0 0.2518877 0.8878512 0.385062 0 -0.1050962 -0.3704423 0.9228907 0 0 0 0 1 0.9625698 -0.271034 7.3757e-7 0 0.2498049 0.8871766 0.3879628 0 -0.1051517 -0.3734411 0.921675 0 0 0 0 1 0.9655275 -0.2603013 -8.08686e-7 0 0.2388315 0.885889 0.3976936 0 -0.1035194 -0.3839843 0.9175183 0 0 0 0 1 0.9662413 -0.2576392 -1.10501e-6 0 0.2362067 0.8858595 0.3993237 0 -0.1028805 -0.3858432 0.91681 0 0 0 0 1 0.9672114 -0.2539727 1.75893e-7 0 0.2330009 0.8873444 0.3979076 0 -0.1010578 -0.3848608 0.9174255 0 0 0 0 1 0.9687922 -0.2478747 0 0 0.2269166 0.8868792 0.4024354 0 -0.09975343 -0.3898762 0.9154484 0 0 0 0 1 0.9687969 -0.2478563 -3.15933e-7 0 0.226321 0.8846212 0.407706 0 -0.1010522 -0.3949844 0.9131132 0 0 0 0 1 0.9686344 -0.2484905 2.3661e-7 0 0.226202 0.8817525 0.4139386 0 -0.10286 -0.4009551 0.9103048 0 0 0 0 1 0.9686269 -0.2485195 -6.98191e-7 0 0.2263736 0.8823098 0.4126553 0 -0.1025523 -0.3997092 0.9108873 0 0 0 0 1 0.9684386 -0.2492523 7.3027e-7 0 0.2278791 0.8853967 0.4051467 0 -0.1009844 -0.3923596 0.9142517 0 0 0 0 1 0.9690866 -0.2467212 -4.86038e-7 0 0.2248412 0.8831444 0.4117068 0 -0.1015763 -0.3989796 0.9113164 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftFingerBase_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftFingerBase_pose_matrix-interpolation"> + <Name_array id="_6_15_t_LeftFingerBase_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_LeftFingerBase_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_LeftFingerBase_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_LeftFingerBase_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_LeftFingerBase_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_LeftFingerBase_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_LeftFingerBase_pose_matrix-sampler" target="LeftFingerBase/transform"/> + </animation> + <animation id="_6_15_t_LeftHandIndex1_pose_matrix"> + <source id="_6_15_t_LeftHandIndex1_pose_matrix-input"> + <float_array id="_6_15_t_LeftHandIndex1_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftHandIndex1_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftHandIndex1_pose_matrix-output"> + <float_array id="_6_15_t_LeftHandIndex1_pose_matrix-output-array" count="2224">0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1 0.992278 0.1240345 0 0 -0.1240344 0.9922779 0 0.03280848 0 0 1 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_LeftHandIndex1_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LeftHandIndex1_pose_matrix-interpolation"> + <Name_array id="_6_15_t_LeftHandIndex1_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_LeftHandIndex1_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_LeftHandIndex1_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_LeftHandIndex1_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_LeftHandIndex1_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_LeftHandIndex1_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_LeftHandIndex1_pose_matrix-sampler" target="LeftHandIndex1/transform"/> + </animation> + <animation id="_6_15_t_LThumb_pose_matrix"> + <source id="_6_15_t_LThumb_pose_matrix-input"> + <float_array id="_6_15_t_LThumb_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_LThumb_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LThumb_pose_matrix-output"> + <float_array id="_6_15_t_LThumb_pose_matrix-output-array" count="2224">0.6820471 0.2638624 0.6820473 0 -0.3518207 0.9360107 -0.01029223 0 -0.6411194 -0.2329386 0.7312358 0 0 0 0 1 0.6825023 0.2614979 0.6825023 0 -0.3503729 0.9365718 -0.008470773 0 -0.6414276 -0.2333491 0.7308344 0 0 0 0 1 0.6843011 0.2519187 0.6843018 0 -0.3392088 0.9406843 -0.007095038 0 -0.6454994 -0.2272661 0.7291644 0 0 0 0 1 0.6857898 0.243687 0.6857907 0 -0.322789 0.9463746 -0.01349377 0 -0.6523033 -0.2121119 0.7276737 0 0 0 0 1 0.6862795 0.2409163 0.6862796 0 -0.3103296 0.9503437 -0.02328574 0 -0.6578114 -0.1969923 0.7269651 0 0 0 0 1 0.6858881 0.2431361 0.6858881 0 -0.3122308 0.9496923 -0.0244196 0 -0.6573199 -0.1974063 0.7272973 0 0 0 0 1 0.6836971 0.2551801 0.6836969 0 -0.333219 0.9426656 -0.01861763 0 -0.6492484 -0.215092 0.7295287 0 0 0 0 1 0.6817363 0.2654631 0.6817367 0 -0.3470458 0.9376738 -0.01807761 0 -0.6440457 -0.2242698 0.7313743 0 0 0 0 1 0.6807773 0.2703397 0.6807781 0 -0.3585005 0.9334501 -0.01217675 0 -0.6387642 -0.2357696 0.7323886 0 0 0 0 1 0.6796048 0.276178 0.679605 0 -0.3614992 0.9322111 -0.01733314 0 -0.6383225 -0.233897 0.7333735 0 0 0 0 1 0.6812701 0.2678468 0.6812703 0 -0.3421732 0.9392459 -0.02709895 0 -0.6471387 -0.2146508 0.7315303 0 0 0 0 1 0.6831257 0.2582226 0.6831254 0 -0.3337456 0.942395 -0.02248138 0 -0.6495792 -0.2126325 0.729955 0 0 0 0 1 0.6774166 0.2867267 0.6774175 0 -0.3876516 0.9218024 -0.002515196 0 -0.6251663 -0.2608982 0.7355945 0 0 0 0 1 0.6829508 0.259143 0.6829518 0 -0.3401385 0.9402282 -0.01662743 0 -0.6464394 -0.2209426 0.7302743 0 0 0 0 1 0.6822632 0.2627412 0.6822639 0 -0.3535889 0.9353773 -0.006627202 0 -0.6399154 -0.2367196 0.731076 0 0 0 0 1 0.6857757 0.2437707 0.6857752 0 -0.3246678 0.9457579 -0.01151806 0 -0.651385 -0.2147503 0.7277224 0 0 0 0 1 0.6844943 0.2508704 0.6844937 0 -0.3332456 0.94276 -0.01228064 0 -0.6483942 -0.2196986 0.7289154 0 0 0 0 1 0.6869201 0.2372379 0.6869199 0 -0.3137224 0.949409 -0.01417005 0 -0.6555296 -0.2057684 0.7265951 0 0 0 0 1 0.6896196 0.2210201 0.6896194 0 -0.2879374 0.9574621 -0.01892524 0 -0.6644673 -0.185516 0.7239248 0 0 0 0 1 0.6905804 0.2149367 0.6905801 0 -0.2772086 0.9605633 -0.02175784 0 -0.6680224 -0.1764093 0.7229287 0 0 0 0 1 0.6924417 0.2026075 0.6924412 0 -0.2605855 0.9652039 -0.02183192 0 -0.6727702 -0.1653228 0.721144 0 0 0 0 1 0.6928625 0.1997064 0.6928628 0 -0.2522034 0.9673083 -0.02660775 0 -0.6755256 -0.1563068 0.7205784 0 0 0 0 1 0.6903962 0.2161144 0.6903967 0 -0.2717216 0.9619269 -0.02939003 0 -0.6704629 -0.1673049 0.7228338 0 0 0 0 1 0.6894688 0.2219606 0.6894682 0 -0.2798466 0.9596042 -0.02907884 0 -0.668071 -0.1728963 0.7237321 0 0 0 0 1 0.6903176 0.2166149 0.6903185 0 -0.2807146 0.9595745 -0.02039062 0 -0.666829 -0.1797065 0.7232183 0 0 0 0 1 0.6903475 0.216426 0.6903478 0 -0.2864291 0.9580004 -0.01390701 0 -0.6643634 -0.188135 0.723344 0 0 0 0 1 0.6901615 0.21761 0.6901617 0 -0.2835226 0.9587815 -0.01878428 0 -0.6658019 -0.1827121 0.7234115 0 0 0 0 1 0.6908935 0.2129114 0.6908943 0 -0.2784912 0.9602804 -0.0174368 0 -0.6671648 -0.180361 0.7227455 0 0 0 0 1 0.690041 0.2183699 0.690042 0 -0.2887879 0.9572883 -0.01415508 0 -0.6636602 -0.1895081 0.7236309 0 0 0 0 1 0.6897372 0.2202863 0.6897366 0 -0.2942063 0.9556784 -0.01101559 0 -0.661593 -0.1953271 0.7239766 0 0 0 0 1 0.6919736 0.2057765 0.6919745 0 -0.2769016 0.9608576 -0.008834719 0 -0.6667069 -0.1854954 0.721868 0 0 0 0 1 0.6934949 0.1952651 0.6934957 0 -0.2668986 0.9637143 -0.004451513 0 -0.6692009 -0.1820059 0.7204471 0 0 0 0 1 0.6921432 0.2046368 0.6921428 0 -0.2777756 0.9606256 -0.006240069 0 -0.666167 -0.1879414 0.7217337 0 0 0 0 1 0.6917259 0.2074357 0.6917266 0 -0.2853152 0.9584314 -0.002100646 0 -0.6634083 -0.195907 0.7221564 0 0 0 0 1 0.6925112 0.2021319 0.6925107 0 -0.2738532 0.9617469 -0.006864011 0 -0.6674075 -0.1848928 0.7213751 0 0 0 0 1 0.6929929 0.1987995 0.6929932 0 -0.2625976 0.9648013 -0.01417589 0 -0.6714189 -0.1721546 0.7208048 0 0 0 0 1 0.6931768 0.1975136 0.6931769 0 -0.2620007 0.9649806 -0.01296067 0 -0.6714622 -0.1726288 0.720651 0 0 0 0 1 0.6928063 0.2000935 0.6928073 0 -0.2728124 0.962054 -0.005044162 0 -0.6675274 -0.1855118 0.7211051 0 0 0 0 1 0.692437 0.2026377 0.692437 0 -0.2755251 0.9612764 -0.005787074 0 -0.666796 -0.1867766 0.7214552 0 0 0 0 1 0.6935992 0.1945235 0.6935999 0 -0.2617757 0.9650878 -0.008888304 0 -0.6711137 -0.1754027 0.7203057 0 0 0 0 1 0.6944795 0.1881369 0.6944801 0 -0.2523697 0.9675816 -0.009751677 0 -0.6738009 -0.1684935 0.7194458 0 0 0 0 1 0.6945359 0.187722 0.694536 0 -0.2529873 0.9674322 -0.008494377 0 -0.6735112 -0.1698092 0.7194079 0 0 0 0 1 0.6946239 0.1870685 0.6946244 0 -0.2543236 0.9670997 -0.006125211 0 -0.6729169 -0.1724047 0.7193465 0 0 0 0 1 0.694819 0.1856143 0.6948192 0 -0.2567257 0.9664831 -0.001461207 0 -0.6718024 -0.1773627 0.719183 0 0 0 0 1 0.6948184 0.185621 0.694818 0 -0.2588705 0.9659116 8.26571e-4 0 -0.6709794 -0.1804422 0.7191852 0 0 0 0 1 0.6951262 0.1833032 0.6951255 0 -0.2564038 0.9665685 0.001521587 0 -0.6716075 -0.1792905 0.7188869 0 0 0 0 1 0.6959596 0.1768583 0.6959607 0 -0.2474032 0.9689118 0.001181662 0 -0.6741155 -0.1730054 0.7180789 0 0 0 0 1 0.6982709 0.1575902 0.6982714 0 -0.2249266 0.9743626 0.005026042 0 -0.6795775 -0.1605694 0.7158156 0 0 0 0 1 0.6994237 0.1470128 0.6994237 0 -0.2178744 0.9758934 0.01274985 0 -0.6806886 -0.1613042 0.7145937 0 0 0 0 1 0.699576 0.1455572 0.699576 0 -0.2149516 0.9765537 0.01176476 0 -0.681461 -0.1586054 0.7144615 0 0 0 0 1 0.7000344 0.1410753 0.7000353 0 -0.2041068 0.9789247 0.006827592 0 -0.6843186 -0.1476616 0.7140757 0 0 0 0 1 0.7004936 0.1364399 0.7004947 0 -0.195088 0.9807773 0.004055142 0 -0.686476 -0.1394988 0.7136462 0 0 0 0 1 0.7002362 0.139062 0.7002364 0 -0.2001662 0.9797458 0.005595386 0 -0.6852756 -0.1440818 0.7138893 0 0 0 0 1 0.6999827 0.1415922 0.6999828 0 -0.2063435 0.9784432 0.008424282 0 -0.6837006 -0.1503339 0.7141101 0 0 0 0 1 0.6989669 0.1512933 0.6989675 0 -0.2225677 0.9748486 0.01155883 0 -0.6796387 -0.1636469 0.7150601 0 0 0 0 1 0.6979516 0.1603974 0.6979514 0 -0.2374165 0.9713041 0.01419931 0 -0.6756455 -0.1756157 0.7160044 0 0 0 0 1 0.6980282 0.15973 0.6980278 0 -0.2355446 0.9717741 0.0131731 0 -0.6762213 -0.1736119 0.7159495 0 0 0 0 1 0.6991088 0.1499782 0.699109 0 -0.216987 0.976145 0.007576763 0 -0.6812954 -0.1569947 0.7149751 0 0 0 0 1 0.7007776 0.1334918 0.7007786 0 -0.1887657 0.9820206 0.001699447 0 -0.6879522 -0.1334739 0.7133768 0 0 0 0 1 0.7021018 0.1187624 0.7021029 0 -0.1685505 0.9856912 0.001817941 0 -0.6918408 -0.1196163 0.7120732 0 0 0 0 1 0.7024927 0.1140471 0.7024937 0 -0.1615976 0.9868556 0.001384973 0 -0.6931019 -0.1144943 0.7116887 0 0 0 0 1 0.702584 0.1129192 0.7025845 0 -0.1593915 0.9872151 7.26316e-4 0 -0.69352 -0.1124964 0.7116001 0 0 0 0 1 0.7011806 0.1291919 0.7011812 0 -0.1902201 0.9816969 0.009343087 0 -0.6871404 -0.13993 0.7129219 0 0 0 0 1 0.6982047 0.158179 0.6982046 0 -0.2392637 0.970762 0.0193364 0 -0.6747319 -0.1805559 0.7156372 0 0 0 0 1 0.7008795 0.13242 0.7008801 0 -0.190911 0.9815921 0.005454599 0 -0.687256 -0.1376287 0.7132584 0 0 0 0 1 0.7020461 0.1194202 0.7020471 0 -0.16733 0.9859008 -3.7485e-4 0 -0.6921935 -0.1172105 0.7121306 0 0 0 0 1 0.7010247 0.1308781 0.7010244 0 -0.1785882 0.9839105 -0.005103468 0 -0.6904133 -0.1216171 0.7131191 0 0 0 0 1 0.6977761 0.1619122 0.6977771 0 -0.2243979 0.974496 -0.001724421 0 -0.6802602 -0.1553765 0.716313 0 0 0 0 1 0.7004904 0.1364755 0.7004909 0 -0.1953865 0.9807167 0.004314899 0 -0.6863943 -0.1398891 0.7136483 0 0 0 0 1 0.698866 0.1522241 0.6988663 0 -0.2215971 0.9750948 0.009205758 0 -0.6800595 -0.1613004 0.7151932 0 0 0 0 1 0.6982057 0.1581687 0.6982059 0 -0.2194127 0.9756307 -0.001602947 0 -0.6814447 -0.1520761 0.7158952 0 0 0 0 1 0.7007995 0.1332687 0.7007991 0 -0.1784743 0.9839066 -0.008632004 0 -0.6906713 -0.1190254 0.7133064 0 0 0 0 1 0.7009648 0.1315178 0.7009646 0 -0.176131 0.9843295 -0.008553028 0 -0.691105 -0.1174662 0.7131448 0 0 0 0 1 0.6994654 0.1466158 0.6994655 0 -0.2068216 0.978377 0.00174266 0 -0.6840855 -0.1458836 0.7146643 0 0 0 0 1 0.6986948 0.1537875 0.6986952 0 -0.2195728 0.9755839 0.004839897 0 -0.6808915 -0.1567962 0.7154032 0 0 0 0 1 0.6998188 0.1431984 0.6998199 0 -0.2040726 0.9789484 0.003757834 0 -0.6845495 -0.1454439 0.7143096 0 0 0 0 1 0.7009942 0.1312045 0.7009938 0 -0.178802 0.9838704 -0.005348265 0 -0.6903889 -0.12159 0.7131473 0 0 0 0 1 0.7014171 0.1266036 0.7014169 0 -0.1681819 0.9857078 -0.009735405 0 -0.6926247 -0.1111372 0.7126849 0 0 0 0 1 0.7016765 0.1236954 0.7016761 0 -0.1676017 0.9858353 -0.006187021 0 -0.6925026 -0.1132608 0.7124692 0 0 0 0 1 0.7016711 0.123755 0.7016711 0 -0.1718261 0.9851253 -0.001922369 0 -0.6914719 -0.1192166 0.7124985 0 0 0 0 1 0.7018641 0.1215444 0.7018644 0 -0.1708417 0.9852984 2.13776e-4 0 -0.6915199 -0.1200578 0.7123106 0 0 0 0 1 0.7017203 0.1231967 0.7017201 0 -0.1670112 0.9859361 -0.006083607 0 -0.6926007 -0.1129262 0.7124268 0 0 0 0 1 0.700964 0.1315194 0.7009651 0 -0.1762748 0.984305 -0.008406996 0 -0.6910692 -0.1176696 0.7131461 0 0 0 0 1 0.7007787 0.1334869 0.7007784 0 -0.1807299 0.9835104 -0.006612956 0 -0.6901057 -0.1220174 0.7133484 0 0 0 0 1 0.7010639 0.130456 0.701064 0 -0.1796975 0.9837161 -0.003355383 0 -0.6900857 -0.1236272 0.7130905 0 0 0 0 1 0.7009395 0.1317814 0.7009403 0 -0.1829808 0.9831147 -0.001851618 0 -0.6893488 -0.1269608 0.7132175 0 0 0 0 1 0.700408 0.1373186 0.7004086 0 -0.1865056 0.9824348 -0.00610584 0 -0.6889443 -0.1263536 0.713716 0 0 0 0 1 0.7000542 0.1408843 0.700054 0 -0.1894233 0.9818614 -0.00817418 0 -0.6885076 -0.1268842 0.7140432 0 0 0 0 1 0.700474 0.1366459 0.7004741 0 -0.1822625 0.9832035 -0.009537279 0 -0.6900119 -0.1209896 0.7136141 0 0 0 0 1 0.7002881 0.1385414 0.7002876 0 -0.18321 0.9830092 -0.0112636 0 -0.6899497 -0.120412 0.7137719 0 0 0 0 1 0.6992703 0.1484673 0.69927 0 -0.1986961 0.9800162 -0.009378433 0 -0.6866883 -0.1323843 0.7147962 0 0 0 0 1 0.6976468 0.163023 0.6976478 0 -0.2147197 0.9765825 -0.01348388 0 -0.6835088 -0.1403918 0.7163141 0 0 0 0 1 0.6971712 0.1670457 0.6971715 0 -0.2161189 0.976205 -0.01778483 0 -0.6835531 -0.138273 0.7166839 0 0 0 0 1 0.6969302 0.1690431 0.696931 0 -0.2232217 0.9746783 -0.01319038 0 -0.6815132 -0.1463774 0.7170171 0 0 0 0 1 0.6964766 0.1727437 0.6964768 0 -0.230448 0.9730235 -0.01088649 0 -0.6795689 -0.1529195 0.7174968 0 0 0 0 1 0.6961946 0.175001 0.6961951 0 -0.231927 0.9726518 -0.01256668 0 -0.6793546 -0.1527177 0.7177427 0 0 0 0 1 0.6965391 0.1722425 0.6965384 0 -0.2297009 0.9731995 -0.01095521 0 -0.6797578 -0.1523649 0.717436 0 0 0 0 1 0.6965774 0.171929 0.6965776 0 -0.2288299 0.9733993 -0.01142442 0 -0.6800124 -0.1514399 0.7173905 0 0 0 0 1 0.6966847 0.1710598 0.6966843 0 -0.2283706 0.9735158 -0.01066076 0 -0.6800568 -0.1516751 0.7172988 0 0 0 0 1 0.6963569 0.173706 0.6963571 0 -0.2318584 0.9726897 -0.0107789 0 -0.6792118 -0.1539503 0.7176146 0 0 0 0 1 0.696148 0.175371 0.6961486 0 -0.2285231 0.9733952 -0.01669114 0 -0.6805549 -0.1474666 0.7177037 0 0 0 0 1 0.6957436 0.1785533 0.6957439 0 -0.2289509 0.9732154 -0.02081191 0 -0.6808247 -0.1448115 0.7179885 0 0 0 0 1 0.6952664 0.18223 0.6952674 0 -0.2360962 0.9715526 -0.01854878 0 -0.678869 -0.1512538 0.7185118 0 0 0 0 1 0.6959145 0.1772168 0.6959146 0 -0.2296468 0.9731046 -0.01815742 0 -0.6804155 -0.1471786 0.717895 0 0 0 0 1 0.696016 0.1764174 0.6960163 0 -0.2307081 0.9728932 -0.01588881 0 -0.6799525 -0.1495178 0.7178503 0 0 0 0 1 0.6954163 0.1810895 0.6954156 0 -0.2390044 0.9709199 -0.01382762 0 -0.677697 -0.1565915 0.7184748 0 0 0 0 1 0.6959733 0.1767502 0.6959745 0 -0.2363232 0.9716184 -0.01043015 0 -0.6780651 -0.1572159 0.7179909 0 0 0 0 1 0.6960568 0.176096 0.6960568 0 -0.2347693 0.9719873 -0.01113474 0 -0.678519 -0.1556624 0.7179005 0 0 0 0 1 0.6959973 0.1765626 0.6959981 0 -0.2314027 0.9727366 -0.01536411 0 -0.6797356 -0.1503625 0.7178793 0 0 0 0 1 0.697164 0.1671023 0.697165 0 -0.2145459 0.9765188 -0.01951473 0 -0.6840557 -0.135969 0.7166451 0 0 0 0 1 0.6965647 0.1720348 0.6965641 0 -0.2159466 0.9760819 -0.02512234 0 -0.6842255 -0.1329213 0.7170547 0 0 0 0 1 0.6960105 0.1764642 0.6960099 0 -0.2253247 0.9740435 -0.02163124 0 -0.6817611 -0.1417727 0.7177063 0 0 0 0 1 0.6962517 0.1745501 0.6962512 0 -0.2253201 0.9741016 -0.01888692 0 -0.6815162 -0.1437295 0.7175497 0 0 0 0 1 0.6970028 0.1684412 0.697004 0 -0.2200636 0.9753599 -0.01564693 0 -0.6824654 -0.1424794 0.7168965 0 0 0 0 1 0.696659 0.1712617 0.6966603 0 -0.2274417 0.9737185 -0.01193058 0 -0.6803943 -0.1501381 0.717302 0 0 0 0 1 0.6961017 0.1757376 0.6961024 0 -0.2378389 0.9712766 -0.007369279 0 -0.677403 -0.1604306 0.7179047 0 0 0 0 1 0.6963005 0.1741592 0.6963003 0 -0.2335 0.9723083 -0.009694635 0 -0.678707 -0.1558358 0.7176851 0 0 0 0 1 0.6969282 0.1690645 0.6969277 0 -0.2234071 0.9746381 -0.01302587 0 -0.6814545 -0.1466206 0.7170231 0 0 0 0 1 0.6973522 0.1655276 0.6973524 0 -0.2183966 0.9757704 -0.0132181 0 -0.682644 -0.1430817 0.7166065 0 0 0 0 1 0.6972361 0.1665053 0.6972358 0 -0.2193006 0.9755614 -0.01367098 0 -0.6824727 -0.1433724 0.7167115 0 0 0 0 1 0.6966403 0.1714143 0.6966415 0 -0.2279604 0.9736012 -0.01160258 0 -0.6802398 -0.1507238 0.7173257 0 0 0 0 1 0.6949052 0.184965 0.6949062 0 -0.2411074 0.9703464 -0.01717281 0 -0.6774761 -0.1556136 0.7188954 0 0 0 0 1 0.6920238 0.205439 0.6920244 0 -0.2626747 0.9645937 -0.02368152 0 -0.6723875 -0.1653891 0.7214856 0 0 0 0 1 0.6906363 0.2145751 0.6906367 0 -0.275924 0.9609131 -0.02262419 0 -0.6684964 -0.1749382 0.722848 0 0 0 0 1 0.6933958 0.19597 0.6933961 0 -0.2525517 0.9673587 -0.02084684 0 -0.674848 -0.1606633 0.7202551 0 0 0 0 1 0.6952883 0.1820659 0.6952885 0 -0.2287687 0.973132 -0.02605253 0 -0.6813508 -0.1409462 0.7182584 0 0 0 0 1 0.6943984 0.1887349 0.6943991 0 -0.2337374 0.9718243 -0.03040099 0 -0.6805717 -0.1411967 0.7189477 0 0 0 0 1 0.6944923 0.1880443 0.6944924 0 -0.2310191 0.9724135 -0.03227669 0 -0.6814034 -0.1380252 0.7187758 0 0 0 0 1 0.6955894 0.1797539 0.6955888 0 -0.2167911 0.9755789 -0.03531777 0 -0.6849504 -0.1262308 0.7175715 0 0 0 0 1 0.6953458 0.1816268 0.6953458 0 -0.2201928 0.974848 -0.03444111 0 -0.6841121 -0.1291617 0.7178495 0 0 0 0 1 0.6939266 0.192178 0.6939262 0 -0.2344236 0.9715175 -0.03463119 0 -0.6808167 -0.1386412 0.719213 0 0 0 0 1 0.6935622 0.1947877 0.6935626 0 -0.2373616 0.9707803 -0.0352832 0 -0.6801697 -0.1401541 0.7195319 0 0 0 0 1 0.6930537 0.1983723 0.6930549 0 -0.2386841 0.9703118 -0.03904765 0 -0.6802253 -0.1383591 0.7198266 0 0 0 0 1 0.6921896 0.204321 0.6921896 0 -0.2459694 0.9684559 -0.0399003 0 -0.6785076 -0.1426389 0.7206119 0 0 0 0 1 0.6921867 0.2043406 0.6921868 0 -0.2498911 0.9676133 -0.03575855 0 -0.6770762 -0.1482197 0.7208321 0 0 0 0 1 0.6922776 0.203723 0.6922779 0 -0.2541075 0.9666989 -0.03037214 0 -0.6754117 -0.1548871 0.7209916 0 0 0 0 1 0.6922814 0.2036949 0.6922822 0 -0.2531375 0.9669216 -0.03136688 0 -0.675772 -0.1535279 0.7209449 0 0 0 0 1 0.6923866 0.2029806 0.6923869 0 -0.2470956 0.9682931 -0.03677016 0 -0.6778971 -0.1456266 0.7205891 0 0 0 0 1 0.6920229 0.2054459 0.6920233 0 -0.2535858 0.9667355 -0.03341615 0 -0.6758688 -0.1523625 0.7211013 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_LThumb_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_LThumb_pose_matrix-interpolation"> + <Name_array id="_6_15_t_LThumb_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_LThumb_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_LThumb_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_LThumb_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_LThumb_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_LThumb_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_LThumb_pose_matrix-sampler" target="LThumb/transform"/> + </animation> + <animation id="_6_15_t_RightShoulder_pose_matrix"> + <source id="_6_15_t_RightShoulder_pose_matrix-input"> + <float_array id="_6_15_t_RightShoulder_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_RightShoulder_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightShoulder_pose_matrix-output"> + <float_array id="_6_15_t_RightShoulder_pose_matrix-output-array" count="2224">0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1 0.335723 -0.9370582 -0.09597921 0 0.938474 0.3239805 0.1195967 0 -0.08097368 -0.1302254 0.9881724 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_RightShoulder_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightShoulder_pose_matrix-interpolation"> + <Name_array id="_6_15_t_RightShoulder_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_RightShoulder_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_RightShoulder_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_RightShoulder_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_RightShoulder_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_RightShoulder_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_RightShoulder_pose_matrix-sampler" target="RightShoulder/transform"/> + </animation> + <animation id="_6_15_t_RightArm_pose_matrix"> + <source id="_6_15_t_RightArm_pose_matrix-input"> + <float_array id="_6_15_t_RightArm_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_RightArm_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightArm_pose_matrix-output"> + <float_array id="_6_15_t_RightArm_pose_matrix-output-array" count="2224">-0.246649 -0.9675032 0.05569171 0 0.9069592 -0.2506985 -0.3384899 0.2035319 0.341452 -0.03297805 0.9393206 0 0 0 0 1 -0.2539625 -0.9661075 0.04625087 0 0.9070753 -0.2544979 -0.3353288 0.2035319 0.3357344 -0.04320782 0.9409652 0 0 0 0 1 -0.2631275 -0.964075 0.03637319 0 0.907806 -0.2601798 -0.32893 0.2035319 0.3265768 -0.05353063 0.9436535 0 0 0 0 1 -0.2661007 -0.9633245 0.03458595 0 0.9105842 -0.2629803 -0.3188697 0.2035319 0.3162704 -0.05335795 0.9471673 0 0 0 0 1 -0.2651119 -0.9635983 0.03455185 0 0.9147603 -0.2626811 -0.3069404 0.2035319 0.3048434 -0.04976683 0.9511013 0 0 0 0 1 -0.2709597 -0.9622099 0.02706748 0 0.9173438 -0.2666408 -0.2956066 0.2035319 0.291653 -0.05526727 0.9549261 0 0 0 0 1 -0.2800098 -0.9599024 0.01348221 0 0.9179565 -0.2718316 -0.2889007 0.2035319 0.2809814 -0.06851893 0.9572641 0 0 0 0 1 -0.2849773 -0.9585208 0.005054771 0 0.9186798 -0.2746292 -0.2839124 0.2035319 0.2735242 -0.07626479 0.9588369 0 0 0 0 1 -0.292023 -0.9564005 -0.004521608 0 0.918355 -0.2790795 -0.2806047 0.2035319 0.2671086 -0.08609545 0.9598128 0 0 0 0 1 -0.2994092 -0.9540368 -0.01294422 0 0.9184485 -0.2845121 -0.2747824 0.2035319 0.2584697 -0.09416097 0.9614193 0 0 0 0 1 -0.3025035 -0.953035 -0.01468682 0 0.918892 -0.2875028 -0.2701479 0.2035319 0.2532379 -0.09521627 0.9627068 0 0 0 0 1 -0.3024969 -0.9530317 -0.01503157 0 0.9186283 -0.2872986 -0.2712595 0.2035319 0.2542003 -0.09586358 0.9623889 0 0 0 0 1 -0.3022402 -0.9530999 -0.01584905 0 0.9168868 -0.2861286 -0.2782967 0.2035319 0.2607098 -0.09864425 0.9603644 0 0 0 0 1 -0.3029599 -0.9529096 -0.01335543 0 0.915313 -0.2870472 -0.2825002 0.2035319 0.2653636 -0.09781062 0.9591742 0 0 0 0 1 -0.3048744 -0.952297 -0.01348662 0 0.9134293 -0.2883633 -0.2872172 0.2035319 0.269627 -0.09988427 0.9577705 0 0 0 0 1 -0.3051792 -0.9521567 -0.01622462 0 0.9125359 -0.2875235 -0.290876 0.2035319 0.2722945 -0.1035748 0.9566232 0 0 0 0 1 -0.3043423 -0.9524486 -0.01474028 0 0.9128521 -0.2871983 -0.2902044 0.2035319 0.2721714 -0.1017771 0.9568511 0 0 0 0 1 -0.305312 -0.9521304 -0.01523107 0 0.9118072 -0.2876949 -0.2929838 0.2035319 0.2745769 -0.1033393 0.955996 0 0 0 0 1 -0.3074803 -0.9513752 -0.0184639 0 0.9117852 -0.2890229 -0.2917428 0.2035319 0.2722204 -0.1065403 0.9563186 0 0 0 0 1 -0.3098261 -0.9505518 -0.0214219 0 0.9130828 -0.2911798 -0.2854722 0.2035319 0.2651184 -0.1080067 0.9581475 0 0 0 0 1 -0.311987 -0.9497647 -0.02471715 0 0.9137679 -0.2928349 -0.2815603 0.2035319 0.260178 -0.1104289 0.9592251 0 0 0 0 1 -0.3141823 -0.9488083 -0.03243702 0 0.9141664 -0.2931406 -0.2799439 0.2035319 0.2561045 -0.1176062 0.9594683 0 0 0 0 1 -0.3164761 -0.9478262 -0.03831881 0 0.9144548 -0.2940946 -0.2779949 0.2035319 0.2522215 -0.1230195 0.959818 0 0 0 0 1 -0.3182 -0.9470846 -0.04218107 0 0.9150822 -0.295212 -0.2747265 0.2035319 0.2477369 -0.1260172 0.9605967 0 0 0 0 1 -0.31977 -0.9462943 -0.04768669 0 0.9156787 -0.2957075 -0.2721943 0.2035319 0.2434746 -0.1307052 0.9610599 0 0 0 0 1 -0.3199451 -0.946024 -0.05170601 0 0.9165483 -0.2952315 -0.2697735 0.2035319 0.239947 -0.1337038 0.9615346 0 0 0 0 1 -0.3201239 -0.9457553 -0.05538529 0 0.9169721 -0.2946285 -0.2689916 0.2035319 0.2380821 -0.1368974 0.9615487 0 0 0 0 1 -0.3218358 -0.944813 -0.06123781 0 0.9163212 -0.2945469 -0.2712893 0.2035319 0.2382802 -0.143424 0.9605478 0 0 0 0 1 -0.323257 -0.9439062 -0.06742209 0 0.9155097 -0.2939106 -0.2746978 0.2035319 0.2394729 -0.1505236 0.9591639 0 0 0 0 1 -0.3238264 -0.9434781 -0.0706076 0 0.9149416 -0.2932831 -0.2772494 0.2035319 0.2408707 -0.1543825 0.9582 0 0 0 0 1 -0.324671 -0.9428166 -0.07540118 0 0.9142656 -0.292416 -0.2803772 0.2035319 0.2422958 -0.1599671 0.9569239 0 0 0 0 1 -0.3249647 -0.9423119 -0.08028787 0 0.9129394 -0.2904061 -0.2867162 0.2035319 0.2468601 -0.1664706 0.9546453 0 0 0 0 1 -0.3249319 -0.9419066 -0.08503532 0 0.9122141 -0.2884172 -0.2910003 0.2035319 0.2495694 -0.1721257 0.9529364 0 0 0 0 1 -0.3244355 -0.9417695 -0.08838343 0 0.9113349 -0.2861789 -0.2959232 0.2035319 0.253398 -0.1765549 0.951114 0 0 0 0 1 -0.3255691 -0.9407482 -0.09485447 0 0.9095362 -0.2841874 -0.3032848 0.2035319 0.2583582 -0.1850137 0.9481672 0 0 0 0 1 -0.3276438 -0.9391136 -0.103513 0 0.9085586 -0.2831242 -0.3071845 0.2035319 0.2591742 -0.1946946 0.9460036 0 0 0 0 1 -0.3272928 -0.9393345 -0.1026158 0 0.9092033 -0.2834815 -0.304939 0.2035319 0.25735 -0.193103 0.9468274 0 0 0 0 1 -0.3267722 -0.9394876 -0.102873 0 0.9095703 -0.2830519 -0.304243 0.2035319 0.2567142 -0.1929883 0.9470233 0 0 0 0 1 -0.3279638 -0.9384024 -0.1088134 0 0.9078079 -0.2811909 -0.3111539 0.2035319 0.2613903 -0.2008288 0.9441096 0 0 0 0 1 -0.3293284 -0.9376087 -0.1115016 0 0.9066185 -0.2810111 -0.3147633 0.2035319 0.2637916 -0.2047498 0.9425982 0 0 0 0 1 -0.3309209 -0.9365867 -0.1153107 0 0.906612 -0.2816444 -0.3142156 0.2035319 0.2618135 -0.2085226 0.9423226 0 0 0 0 1 -0.3307953 -0.9360263 -0.1201209 0 0.9066598 -0.279913 -0.3156215 0.2035319 0.2618067 -0.2133148 0.9412513 0 0 0 0 1 -0.3304151 -0.9352164 -0.127263 0 0.9075276 -0.2777643 -0.315025 0.2035319 0.2592674 -0.2195837 0.9405124 0 0 0 0 1 -0.3323312 -0.9334035 -0.1353281 0 0.9079509 -0.2777739 -0.3137944 0.2035319 0.2553062 -0.227155 0.9397975 0 0 0 0 1 -0.3349618 -0.9321765 -0.1372865 0 0.9087553 -0.2811201 -0.3084404 0.2035319 0.2489269 -0.2280756 0.9412848 0 0 0 0 1 -0.335545 -0.9313579 -0.1413567 0 0.9101876 -0.2818526 -0.3035094 0.2035319 0.2428341 -0.2305021 0.9422845 0 0 0 0 1 -0.3346731 -0.9304777 -0.1490138 0 0.9120359 -0.2800605 -0.2995945 0.2035319 0.2370331 -0.2361721 0.9423576 0 0 0 0 1 -0.3331723 -0.9309194 -0.1496165 0 0.9138879 -0.2798022 -0.2941427 0.2035319 0.2319601 -0.2347329 0.9439783 0 0 0 0 1 -0.3343611 -0.9297444 -0.1542007 0 0.914346 -0.280365 -0.2921764 0.2035319 0.2284169 -0.2386852 0.9438512 0 0 0 0 1 -0.3360484 -0.9280133 -0.1608183 0 0.9151653 -0.2813811 -0.2886128 0.2035319 0.2225853 -0.2441632 0.9438433 0 0 0 0 1 -0.3359136 -0.9271075 -0.1662338 0 0.9182591 -0.2830564 -0.2769107 0.2035319 0.2096725 -0.2456638 0.9464073 0 0 0 0 1 -0.3332422 -0.9280611 -0.1662889 0 0.9213973 -0.2831562 -0.2661762 0.2035319 0.1999421 -0.2419192 0.9494726 0 0 0 0 1 -0.3305401 -0.929621 -0.1629351 0 0.9237046 -0.2832187 -0.2579872 0.2035319 0.1936841 -0.2357791 0.9523102 0 0 0 0 1 -0.3295038 -0.9295821 -0.1652394 0 0.9261744 -0.2842479 -0.2477991 0.2035319 0.1833807 -0.2346913 0.9546159 0 0 0 0 1 -0.3284134 -0.9290254 -0.170459 0 0.9285579 -0.284505 -0.2384058 0.2035319 0.1729886 -0.2365767 0.9560891 0 0 0 0 1 -0.3287283 -0.9281858 -0.1743807 0 0.9307847 -0.2871423 -0.2262507 0.2035319 0.1599306 -0.2366859 0.9583329 0 0 0 0 1 -0.3282921 -0.9269385 -0.181684 0 0.932705 -0.2877142 -0.2174446 0.2035319 0.1492847 -0.240843 0.9590145 0 0 0 0 1 -0.3269261 -0.9267776 -0.1849391 0 0.9343078 -0.2875387 -0.2106911 0.2035319 0.1420866 -0.2416705 0.9598994 0 0 0 0 1 -0.3242266 -0.9273358 -0.1868827 0 0.9365997 -0.286934 -0.2011219 0.2035319 0.1328845 -0.2402434 0.9615741 0 0 0 0 1 -0.321492 -0.9274371 -0.1910579 0 0.9385865 -0.2854133 -0.1938938 0.2035319 0.1252939 -0.2416597 0.9622381 0 0 0 0 1 -0.3197001 -0.9282201 -0.1902606 0 0.9404771 -0.286426 -0.182929 0.2035319 0.1153029 -0.2374182 0.9645402 0 0 0 0 1 -0.3179117 -0.929013 -0.1893854 0 0.9418107 -0.2864254 -0.1759358 0.2035319 0.1092019 -0.2342972 0.9660123 0 0 0 0 1 -0.3152073 -0.9290807 -0.1935285 0 0.9432634 -0.2842783 -0.1715811 0.2035319 0.1043967 -0.236632 0.9659744 0 0 0 0 1 -0.3119251 -0.9293219 -0.1976447 0 0.9447351 -0.2812868 -0.1683855 0.2035319 0.1008895 -0.2392455 0.9657033 0 0 0 0 1 -0.3097 -0.9296352 -0.19966 0 0.9463423 -0.2809769 -0.1596514 0.2035319 0.09231775 -0.2383908 0.9667716 0 0 0 0 1 -0.3069609 -0.9306299 -0.1992553 0 0.9481754 -0.2809812 -0.1483679 0.2035319 0.08208864 -0.2344722 0.9686508 0 0 0 0 1 -0.305498 -0.93036 -0.2027339 0 0.9493967 -0.2813119 -0.1396774 0.2035319 0.07291877 -0.235146 0.9692209 0 0 0 0 1 -0.3044618 -0.9293169 -0.2089805 0 0.9496452 -0.2790995 -0.1423993 0.2035319 0.07400774 -0.2418125 0.9674966 0 0 0 0 1 -0.3035622 -0.9287058 -0.2129681 0 0.9500486 -0.278014 -0.1418314 0.2035319 0.07251155 -0.2453847 0.96671 0 0 0 0 1 -0.3019056 -0.9282733 -0.2171668 0 0.9510285 -0.2774093 -0.1363423 0.2035319 0.06631886 -0.2476943 0.9665657 0 0 0 0 1 -0.3009998 -0.9269285 -0.2240592 0 0.951844 -0.2776771 -0.1299563 0.2035319 0.05824416 -0.2523863 0.9658721 0 0 0 0 1 -0.3002262 -0.926205 -0.2280535 0 0.9521237 -0.2765334 -0.1303454 0.2035319 0.05766218 -0.2562683 0.9648842 0 0 0 0 1 -0.2980946 -0.9262331 -0.2307199 0 0.9531645 -0.2758849 -0.1239573 0.2035319 0.05116122 -0.256865 0.9650921 0 0 0 0 1 -0.294537 -0.9268327 -0.2328708 0 0.9548171 -0.2753003 -0.1119571 0.2035319 0.03965616 -0.2553246 0.9660418 0 0 0 0 1 -0.2928945 -0.9269348 -0.2345306 0 0.9556012 -0.2755141 -0.104492 0.2035319 0.03224074 -0.254723 0.9664764 0 0 0 0 1 -0.2918537 -0.9252656 -0.2422909 0 0.9559306 -0.2737248 -0.1061683 0.2035319 0.03191292 -0.2625989 0.9643772 0 0 0 0 1 -0.2903171 -0.9250891 -0.244798 0 0.956452 -0.2724257 -0.1048054 0.2035319 0.03026509 -0.2645643 0.963893 0 0 0 0 1 -0.2906909 -0.9254454 -0.2430006 0 0.9564777 -0.2742955 -0.09956252 0.2035319 0.02548575 -0.2613667 0.9649031 0 0 0 0 1 -0.2911928 -0.9260964 -0.2399 0 0.9563243 -0.2751018 -0.09880727 0.2035319 0.02550816 -0.2581942 0.9657562 0 0 0 0 1 -0.2908374 -0.9273664 -0.2353826 0 0.9564592 -0.2755092 -0.09633654 0.2035319 0.02448922 -0.2531521 0.9671165 0 0 0 0 1 -0.291365 -0.9275967 -0.2338175 0 0.9562615 -0.2758063 -0.09744334 0.2035319 0.02589982 -0.2519823 0.9673852 0 0 0 0 1 -0.2934517 -0.9270249 -0.2334756 0 0.9555745 -0.2773862 -0.09967184 0.2035319 0.02763533 -0.2523522 0.9672407 0 0 0 0 1 -0.2928575 -0.9276852 -0.2315915 0 0.9556624 -0.276207 -0.1020749 0.2035319 0.03072613 -0.2512167 0.967443 0 0 0 0 1 -0.2920515 -0.9288503 -0.2279098 0 0.9558332 -0.2752464 -0.1030656 0.2035319 0.03300118 -0.2479442 0.968212 0 0 0 0 1 -0.2936254 -0.9292219 -0.2243446 0 0.9548035 -0.2737476 -0.1158133 0.2035319 0.04620242 -0.2482107 0.9676036 0 0 0 0 1 -0.2972705 -0.9284812 -0.2226046 0 0.9525424 -0.2723966 -0.1358801 0.2035319 0.06552535 -0.2524335 0.965393 0 0 0 0 1 -0.3004608 -0.9285762 -0.2178747 0 0.9505658 -0.2727475 -0.1484377 0.2035319 0.07841092 -0.2517039 0.9646226 0 0 0 0 1 -0.303028 -0.9296637 -0.2095217 0 0.9494453 -0.275593 -0.1503405 0.2035319 0.08202344 -0.2444868 0.9661772 0 0 0 0 1 -0.3036434 -0.9307571 -0.2036954 0 0.9486874 -0.2755389 -0.1551476 0.2035319 0.08827877 -0.2403528 0.966663 0 0 0 0 1 -0.3041396 -0.9318147 -0.1980413 0 0.9477009 -0.2748405 -0.1622526 0.2035319 0.09675961 -0.2370314 0.9666714 0 0 0 0 1 -0.3051335 -0.9335151 -0.1882625 0 0.9467741 -0.2760884 -0.1655123 0.2035319 0.1025311 -0.2287454 0.9680717 0 0 0 0 1 -0.3050153 -0.9352909 -0.1794335 0 0.9467064 -0.2773011 -0.1638637 0.2035319 0.1035031 -0.2198518 0.9700269 0 0 0 0 1 -0.30408 -0.9369562 -0.1721868 0 0.9470506 -0.2777526 -0.161086 0.2035319 0.1031053 -0.2120527 0.9718039 0 0 0 0 1 -0.3030005 -0.9386307 -0.1648122 0 0.946742 -0.2767063 -0.1646611 0.2035319 0.1089514 -0.205927 0.9724832 0 0 0 0 1 -0.3052753 -0.9386938 -0.1601896 0 0.9449829 -0.2778611 -0.1726292 0.2035319 0.1175355 -0.2040759 0.9718737 0 0 0 0 1 -0.305384 -0.9389247 -0.1586217 0 0.9437029 -0.2761787 -0.1820726 0.2035319 0.1271445 -0.2052938 0.9704064 0 0 0 0 1 -0.3032062 -0.9408438 -0.151257 0 0.944202 -0.2751936 -0.1809732 0.2035319 0.1286425 -0.1976894 0.971787 0 0 0 0 1 -0.3021926 -0.9429983 -0.1394044 0 0.9428859 -0.2741912 -0.1891711 0.2035319 0.1401647 -0.1886086 0.9719982 0 0 0 0 1 -0.3022207 -0.9443423 -0.1299233 0 0.9403185 -0.2729784 -0.2031849 0.2035319 0.1564098 -0.1835759 0.9704823 0 0 0 0 1 -0.3030576 -0.9452316 -0.1212151 0 0.9375077 -0.2728961 -0.2158871 0.2035319 0.1709843 -0.1790663 0.9688651 0 0 0 0 1 -0.3021755 -0.9465646 -0.1127179 0 0.9359499 -0.2721821 -0.2234164 0.2035319 0.1807982 -0.1730093 0.9681837 0 0 0 0 1 -0.3007047 -0.947912 -0.1050684 0 0.934371 -0.2707344 -0.2316333 0.2035319 0.1911223 -0.1678261 0.9671125 0 0 0 0 1 -0.2991136 -0.9494873 -0.09489351 0 0.9321112 -0.2694536 -0.2419995 0.2035319 0.2042061 -0.1608366 0.9656248 0 0 0 0 1 -0.2989809 -0.9506605 -0.0827943 0 0.9294327 -0.270442 -0.2510306 0.2035319 0.2162538 -0.1520051 0.9644318 0 0 0 0 1 -0.2975915 -0.9522582 -0.06814169 0 0.9271243 -0.2712318 -0.2586002 0.2035319 0.227772 -0.1401331 0.963578 0 0 0 0 1 -0.2949466 -0.953789 -0.05738359 0 0.9254687 -0.2702151 -0.2655028 0.2035319 0.2377277 -0.1314159 0.9624009 0 0 0 0 1 -0.2910804 -0.9553838 -0.05013722 0 0.9224509 -0.2663781 -0.2795128 0.2035319 0.2536866 -0.1276099 0.958832 0 0 0 0 1 -0.2887617 -0.9563491 -0.04486513 0 0.9183868 -0.2634491 -0.2952295 0.2035319 0.2705228 -0.1264545 0.9543724 0 0 0 0 1 -0.2863337 -0.9574668 -0.03563874 0 0.9147857 -0.2621301 -0.3073356 0.2035319 0.2849217 -0.1206024 0.9509336 0 0 0 0 1 -0.2830691 -0.9586014 -0.03090488 0 0.9124395 -0.2592297 -0.3166299 0.2035319 0.2955104 -0.1178269 0.9480456 0 0 0 0 1 -0.2798929 -0.9596081 -0.02849596 0 0.9088568 -0.2552947 -0.3298544 0.2035319 0.3092562 -0.1182227 0.9436016 0 0 0 0 1 -0.2744127 -0.9614929 -0.01512908 0 0.9067526 -0.2534874 -0.3369631 0.2035319 0.3201526 -0.1061853 0.9413962 0 0 0 0 1 -0.2675898 -0.9635328 -4.3043e-4 0 0.9018696 -0.2503075 -0.3521046 0.2035319 0.3391566 -0.09460777 0.9359605 0 0 0 0 1 -0.2639339 -0.9645333 0.003783404 0 0.8928826 -0.2458072 -0.3772792 0.2035319 0.3648284 -0.09619861 0.9260917 0 0 0 0 1 -0.2606483 -0.9654174 0.005620002 0 0.8873081 -0.2418457 -0.3926768 0.2035319 0.3804563 -0.09736382 0.9196594 0 0 0 0 1 -0.2533638 -0.9672988 0.01182276 0 0.8850462 -0.2367183 -0.4008215 0.2035319 0.3905128 -0.09108996 0.9160798 0 0 0 0 1 -0.2461457 -0.9690433 0.0191574 0 0.8832032 -0.2323948 -0.4073637 0.2035319 0.3992052 -0.08335089 0.9130651 0 0 0 0 1 -0.2418575 -0.9698631 0.0295037 0 0.8808279 -0.2322054 -0.4125811 0.2035319 0.4069981 -0.07379812 0.9104429 0 0 0 0 1 -0.2353956 -0.9710407 0.04084932 0 0.8786988 -0.2305941 -0.4179892 0.2035319 0.4153041 -0.06249856 0.9075331 0 0 0 0 1 -0.2286647 -0.9724342 0.04565054 0 0.8759202 -0.2259802 -0.4262592 0.2035319 0.4248251 -0.0574842 0.9034485 0 0 0 0 1 -0.222622 -0.9735196 0.05194973 0 0.8745025 -0.2229641 -0.4307349 0.2035319 0.4309119 -0.05046081 0.900982 0 0 0 0 1 -0.2163302 -0.9742619 0.06336236 0 0.8742796 -0.222198 -0.4315826 0.2035319 0.4345535 -0.03796792 0.8998453 0 0 0 0 1 -0.211694 -0.9749319 0.06850665 0 0.8736194 -0.2201876 -0.4339433 0.2035319 0.4381496 -0.03201442 0.8983318 0 0 0 0 1 -0.2052396 -0.9759299 0.07373684 0 0.8725134 -0.2165814 -0.4379649 0.2035319 0.4433931 -0.02555131 0.895963 0 0 0 0 1 -0.201581 -0.9763093 0.07864511 0 0.8722249 -0.2154606 -0.4390907 0.2035319 0.4456334 -0.01991611 0.894994 0 0 0 0 1 -0.2005218 -0.9764678 0.07938128 0 0.8735675 -0.2148914 -0.4366942 0.2035319 0.4434763 -0.01822179 0.8961008 0 0 0 0 1 -0.2002208 -0.9766417 0.07798975 0 0.8735779 -0.2139972 -0.4371123 0.2035319 0.4435918 -0.01938879 0.8960192 0 0 0 0 1 -0.1941023 -0.9773578 0.08423721 0 0.8738547 -0.2112866 -0.4378769 0.2035319 0.4457606 -0.01138174 0.8950798 0 0 0 0 1 -0.1893971 -0.977559 0.09223246 0 0.8750212 -0.210653 -0.4358479 0.2035319 0.4454962 -0.001842975 0.8952819 0 0 0 0 1 -0.1897369 -0.9776918 0.09010279 0 0.8752568 -0.2100098 -0.4356853 0.2035319 0.4448884 -0.003802478 0.8955779 0 0 0 0 1 -0.189647 -0.9778403 0.08866906 0 0.8745891 -0.2092821 -0.437373 0.2035319 0.4462378 -0.005397379 0.8948981 0 0 0 0 1 -0.1828143 -0.9780607 0.09987938 0 0.8754031 -0.2081776 -0.4362703 0.2035319 0.4474916 0.00767827 0.8942552 0 0 0 0 1 -0.1795319 -0.9779815 0.106397 0 0.8772967 -0.2081 -0.432487 0.2035319 0.4451056 0.01569646 0.8953405 0 0 0 0 1 -0.1841161 -0.9778721 0.09933316 0 0.8783875 -0.2090452 -0.429809 0.2035319 0.4410635 0.008118271 0.8974392 0 0 0 0 1 -0.1863578 -0.977892 0.09485673 0 0.8780269 -0.2090877 -0.4305245 0.2035319 0.44084 0.003055095 0.8975805 0 0 0 0 1 -0.1878094 -0.9776853 0.09412157 0 0.8788713 -0.2100619 -0.4283217 0.2035319 0.4385352 0.00227791 0.8987111 0 0 0 0 1 -0.1901661 -0.9773665 0.09268993 0 0.8806375 -0.2115503 -0.4239391 0.2035319 0.4339525 0.001007378 0.9009352 0 0 0 0 1 -0.1919239 -0.9769699 0.09324657 0 0.8823001 -0.2133696 -0.4195476 0.2035319 0.4297814 0.00175023 0.9029313 0 0 0 0 1 -0.1916689 -0.9770072 0.09337937 0 0.8827018 -0.2131947 -0.418791 0.2035319 0.4290699 0.002156913 0.9032687 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_RightArm_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightArm_pose_matrix-interpolation"> + <Name_array id="_6_15_t_RightArm_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_RightArm_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_RightArm_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_RightArm_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_RightArm_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_RightArm_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_RightArm_pose_matrix-sampler" target="RightArm/transform"/> + </animation> + <animation id="_6_15_t_RightForeArm_pose_matrix"> + <source id="_6_15_t_RightForeArm_pose_matrix-input"> + <float_array id="_6_15_t_RightForeArm_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_RightForeArm_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightForeArm_pose_matrix-output"> + <float_array id="_6_15_t_RightForeArm_pose_matrix-output-array" count="2224">0.9509157 0.2975424 -0.08501636 0 -0.2975425 0.8036632 -0.5153581 0.32836 -0.08501636 0.515358 0.8527475 0 0 0 0 1 0.9517809 0.2951914 -0.08351814 0 -0.2951916 0.807124 -0.5112854 0.32836 -0.08351755 0.5112855 0.8553432 0 0 0 0 1 0.9520837 0.2943616 -0.08299332 0 -0.2943615 0.8083347 -0.5098493 0.32836 -0.08299368 0.5098492 0.856251 0 0 0 0 1 0.9526782 0.2927219 -0.08196437 0 -0.2927221 0.8107123 -0.5070102 0.32836 -0.08196341 0.5070103 0.8580341 0 0 0 0 1 0.953536 0.2903316 -0.08047837 0 -0.2903319 0.8141449 -0.5028674 0.32836 -0.08047717 0.5028675 0.8606089 0 0 0 0 1 0.9542765 0.2882438 -0.07919454 0 -0.2882434 0.8171058 -0.4992533 0.32836 -0.07919639 0.499253 0.8628293 0 0 0 0 1 0.9540596 0.2888577 -0.07957148 0 -0.2888579 0.8162385 -0.5003157 0.32836 -0.07957065 0.5003157 0.862179 0 0 0 0 1 0.9538016 0.2895853 -0.08001703 0 -0.2895851 0.8152078 -0.5015742 0.32836 -0.08001798 0.501574 0.8614062 0 0 0 0 1 0.953995 0.28904 -0.07968312 0 -0.28904 0.8159794 -0.5006331 0.32836 -0.07968318 0.500633 0.8619844 0 0 0 0 1 0.953886 0.2893472 -0.07987207 0 -0.2893474 0.815544 -0.5011647 0.32836 -0.07987141 0.5011647 0.8616579 0 0 0 0 1 0.9538671 0.2894009 -0.07990437 0 -0.2894009 0.8154692 -0.5012555 0.32836 -0.07990419 0.5012554 0.8616022 0 0 0 0 1 0.9541462 0.2886129 -0.07942092 0 -0.2886127 0.8165844 -0.4998927 0.32836 -0.07942157 0.4998926 0.8624382 0 0 0 0 1 0.9543181 0.2881261 -0.07912272 0 -0.2881256 0.817272 -0.4990491 0.32836 -0.07912427 0.4990489 0.862954 0 0 0 0 1 0.9552347 0.2855083 -0.07753574 0 -0.2855082 0.8209383 -0.4945154 0.32836 -0.07753616 0.4945152 0.8657037 0 0 0 0 1 0.9558527 0.2837228 -0.07646536 0 -0.283723 0.8234119 -0.4914205 0.32836 -0.07646471 0.4914206 0.8675591 0 0 0 0 1 0.9564859 0.2818762 -0.07536888 0 -0.2818765 0.8259449 -0.488222 0.32836 -0.07536756 0.4882221 0.8694589 0 0 0 0 1 0.9573848 0.2792243 -0.07381093 0 -0.279224 0.8295401 -0.4836292 0.32836 -0.07381182 0.4836291 0.8721552 0 0 0 0 1 0.9575625 0.2786958 -0.07350331 0 -0.2786956 0.8302506 -0.4827139 0.32836 -0.07350414 0.4827138 0.8726881 0 0 0 0 1 0.957952 0.2775318 -0.07282966 0 -0.2775321 0.8318087 -0.4806977 0.32836 -0.07282847 0.4806979 0.8738567 0 0 0 0 1 0.9582822 0.2765398 -0.07225692 0 -0.2765396 0.8331291 -0.47898 0.32836 -0.07225763 0.4789798 0.8748469 0 0 0 0 1 0.9584183 0.2761291 -0.0720213 0 -0.2761288 0.8336728 -0.4782704 0.32836 -0.07202214 0.4782702 0.8752544 0 0 0 0 1 0.9584989 0.2758857 -0.07188171 0 -0.2758855 0.8339959 -0.4778472 0.32836 -0.07188206 0.4778472 0.8754969 0 0 0 0 1 0.9587303 0.2751849 -0.07148063 0 -0.2751846 0.8349211 -0.4766342 0.32836 -0.07148182 0.476634 0.8761908 0 0 0 0 1 0.9588056 0.2749561 -0.07135063 0 -0.2749561 0.8352224 -0.4762381 0.32836 -0.07135087 0.4762381 0.8764167 0 0 0 0 1 0.9590314 0.2742688 -0.07096022 0 -0.2742691 0.8361254 -0.4750481 0.32836 -0.07095921 0.4750483 0.877094 0 0 0 0 1 0.9596588 0.2723467 -0.06987273 0 -0.2723466 0.8386353 -0.4717184 0.32836 -0.06987321 0.4717183 0.8789764 0 0 0 0 1 0.959784 0.2719606 -0.06965631 0 -0.2719607 0.8391359 -0.4710502 0.32836 -0.06965595 0.4710502 0.8793518 0 0 0 0 1 0.9594851 0.272881 -0.07017379 0 -0.2728809 0.8379399 -0.4726445 0.32836 -0.07017427 0.4726445 0.8784547 0 0 0 0 1 0.9597833 0.2719631 -0.06965726 0 -0.271963 0.8391334 -0.4710533 0.32836 -0.06965738 0.4710533 0.8793501 0 0 0 0 1 0.9602931 0.2703835 -0.06877428 0 -0.2703834 0.8411722 -0.4683184 0.32836 -0.06877452 0.4683183 0.8808791 0 0 0 0 1 0.9604908 0.2697676 -0.0684309 0 -0.2697672 0.8419641 -0.4672495 0.32836 -0.06843239 0.4672493 0.8814732 0 0 0 0 1 0.9605876 0.2694653 -0.0682637 0 -0.2694651 0.842351 -0.4667263 0.32836 -0.06826448 0.4667261 0.8817633 0 0 0 0 1 0.9606802 0.2691754 -0.06810408 0 -0.2691755 0.8427214 -0.4662243 0.32836 -0.06810331 0.4662244 0.8820412 0 0 0 0 1 0.960794 0.268819 -0.06790626 0 -0.2688186 0.8431749 -0.46561 0.32836 -0.06790792 0.4656097 0.8823809 0 0 0 0 1 0.9607942 0.2688181 -0.0679062 0 -0.268818 0.8431769 -0.4656067 0.32836 -0.06790655 0.4656066 0.8823826 0 0 0 0 1 0.9605872 0.2694663 -0.06826543 0 -0.2694666 0.8423489 -0.4667291 0.32836 -0.06826436 0.4667292 0.8817617 0 0 0 0 1 0.961088 0.2678945 -0.06739777 0 -0.2678946 0.8443517 -0.4640073 0.32836 -0.06739753 0.4640073 0.8832637 0 0 0 0 1 0.9619377 0.2651977 -0.0659253 0 -0.2651973 0.8477501 -0.4593366 0.32836 -0.06592679 0.4593364 0.8858124 0 0 0 0 1 0.9622532 0.2641862 -0.0653792 0 -0.2641861 0.8490129 -0.4575837 0.32836 -0.0653795 0.4575836 0.8867596 0 0 0 0 1 0.9625654 0.2631805 -0.06483787 0 -0.2631801 0.8502615 -0.4558418 0.32836 -0.06483948 0.4558415 0.887696 0 0 0 0 1 0.9627854 0.2624682 -0.06445807 0 -0.2624683 0.851141 -0.4546091 0.32836 -0.06445747 0.4546092 0.8883556 0 0 0 0 1 0.9632052 0.2611017 -0.06373083 0 -0.261102 0.8528217 -0.4522399 0.32836 -0.06372952 0.45224 0.8896165 0 0 0 0 1 0.9639236 0.2587409 -0.06248641 0 -0.2587411 0.8556951 -0.4481505 0.32836 -0.06248545 0.4481506 0.8917716 0 0 0 0 1 0.964039 0.2583586 -0.06228601 0 -0.2583586 0.8561568 -0.447489 0.32836 -0.06228601 0.447489 0.8921177 0 0 0 0 1 0.964637 0.2563669 -0.0612502 0 -0.2563666 0.8585475 -0.444041 0.32836 -0.0612511 0.4440408 0.8939105 0 0 0 0 1 0.9653947 0.2538119 -0.05993831 0 -0.253812 0.8615791 -0.4396145 0.32836 -0.05993771 0.4396145 0.8961844 0 0 0 0 1 0.9661265 0.2513111 -0.05867093 0 -0.2513113 0.8645058 -0.4352843 0.32836 -0.05867034 0.4352844 0.8983793 0 0 0 0 1 0.9669361 0.2485054 -0.0572676 0 -0.248505 0.8677442 -0.4304246 0.32836 -0.05726915 0.4304244 0.900808 0 0 0 0 1 0.9667947 0.2489986 -0.05751293 0 -0.2489985 0.8671787 -0.4312781 0.32836 -0.05751359 0.431278 0.9003841 0 0 0 0 1 0.9666212 0.2496016 -0.05781453 0 -0.249602 0.8664847 -0.432323 0.32836 -0.0578131 0.4323233 0.8998635 0 0 0 0 1 0.967296 0.2472444 -0.05664587 0 -0.2472448 0.8691841 -0.4282394 0.32836 -0.05664402 0.4282397 0.9018882 0 0 0 0 1 0.9685564 0.2427598 -0.05446171 0 -0.2427598 0.8742259 -0.4204721 0.32836 -0.05446189 0.4204721 0.9056695 0 0 0 0 1 0.9694595 0.2394791 -0.05289703 0 -0.2394788 0.8778377 -0.4147902 0.32836 -0.05289858 0.41479 0.9083782 0 0 0 0 1 0.9698067 0.2382018 -0.0522961 0 -0.2382017 0.8792265 -0.4125782 0.32836 -0.05229669 0.4125782 0.9094198 0 0 0 0 1 0.9703469 0.2361971 -0.05135971 0 -0.2361968 0.8813886 -0.409103 0.32836 -0.05136108 0.4091029 0.9110416 0 0 0 0 1 0.9712533 0.2327831 -0.0497902 0 -0.2327829 0.885013 -0.4031924 0.32836 -0.04979139 0.4031923 0.9137597 0 0 0 0 1 0.9717406 0.2309207 -0.04894667 0 -0.2309207 0.8869624 -0.3999667 0.32836 -0.04894667 0.3999667 0.9152218 0 0 0 0 1 0.9718621 0.2304536 -0.04873543 0 -0.2304533 0.8874484 -0.3991573 0.32836 -0.04873704 0.3991571 0.9155863 0 0 0 0 1 0.9722151 0.229089 -0.0481252 0 -0.2290892 0.8888605 -0.3967937 0.32836 -0.04812443 0.3967938 0.9166454 0 0 0 0 1 0.9728252 0.226706 -0.04706835 0 -0.2267061 0.8913004 -0.3926677 0.32836 -0.04706799 0.3926677 0.9184752 0 0 0 0 1 0.9734665 0.2241672 -0.04595744 0 -0.2241672 0.8938662 -0.3882683 0.32836 -0.04595714 0.3882684 0.9203997 0 0 0 0 1 0.9737524 0.2230232 -0.04546254 0 -0.2230235 0.8950098 -0.3862874 0.32836 -0.04546159 0.3862875 0.9212574 0 0 0 0 1 0.9740771 0.2217158 -0.04490029 0 -0.2217159 0.8963076 -0.3840244 0.32836 -0.04489976 0.3840245 0.9222306 0 0 0 0 1 0.9745396 0.2198362 -0.04409766 0 -0.2198358 0.8981585 -0.3807671 0.32836 -0.04409962 0.3807669 0.9236189 0 0 0 0 1 0.9751283 0.2174144 -0.04307824 0 -0.2174142 0.9005128 -0.3765736 0.32836 -0.04307997 0.3765735 0.9253845 0 0 0 0 1 0.9755935 0.2154769 -0.04227346 0 -0.2154771 0.9023744 -0.373216 0.32836 -0.04227292 0.373216 0.9267809 0 0 0 0 1 0.9758559 0.2143746 -0.04181873 0 -0.2143746 0.9034235 -0.3713078 0.32836 -0.04181891 0.3713078 0.9275676 0 0 0 0 1 0.9754043 0.2162677 -0.04260045 0 -0.2162674 0.9016168 -0.3745872 0.32836 -0.04260176 0.3745871 0.9262125 0 0 0 0 1 0.9750565 0.2177113 -0.04320365 0 -0.2177115 0.9002267 -0.3770858 0.32836 -0.04320275 0.3770859 0.9251701 0 0 0 0 1 0.9752112 0.2170705 -0.04293614 0 -0.2170708 0.9008451 -0.3759766 0.32836 -0.04293459 0.3759768 0.9256339 0 0 0 0 1 0.9753702 0.2164096 -0.04266005 0 -0.2164096 0.9014804 -0.3748331 0.32836 -0.04266023 0.3748331 0.9261103 0 0 0 0 1 0.9752594 0.2168706 -0.04285174 0 -0.2168705 0.9010376 -0.3756307 0.32836 -0.04285222 0.3756306 0.9257782 0 0 0 0 1 0.9757604 0.2147767 -0.04198426 0 -0.2147767 0.9030413 -0.3720045 0.32836 -0.04198437 0.3720045 0.927281 0 0 0 0 1 0.9764906 0.2116793 -0.04071927 0 -0.2116792 0.9059622 -0.3666392 0.32836 -0.0407198 0.3666391 0.9294717 0 0 0 0 1 0.9766663 0.2109258 -0.04041469 0 -0.2109255 0.9066646 -0.3653351 0.32836 -0.040416 0.3653349 0.9299983 0 0 0 0 1 0.9762881 0.2125434 -0.04107016 0 -0.2125434 0.9051527 -0.3681358 0.32836 -0.04107004 0.3681358 0.9288645 0 0 0 0 1 0.9762304 0.212789 -0.04117095 0 -0.2127892 0.9049212 -0.3685624 0.32836 -0.04116958 0.3685626 0.9286909 0 0 0 0 1 0.9762763 0.2125938 -0.04109007 0 -0.2125936 0.9051052 -0.3682236 0.32836 -0.0410912 0.3682234 0.9288288 0 0 0 0 1 0.9765203 0.211552 -0.04066753 0 -0.2115519 0.9060813 -0.3664184 0.32836 -0.04066842 0.3664183 0.929561 0 0 0 0 1 0.9769563 0.2096747 -0.03991234 0 -0.2096745 0.9078252 -0.3631667 0.32836 -0.03991341 0.3631666 0.9308689 0 0 0 0 1 0.977195 0.2086378 -0.03949874 0 -0.2086377 0.9087809 -0.361369 0.32836 -0.03949946 0.361369 0.9315859 0 0 0 0 1 0.9773162 0.2081093 -0.03928869 0 -0.208109 0.9092652 -0.3604544 0.32836 -0.03929001 0.3604543 0.931949 0 0 0 0 1 0.9775616 0.2070335 -0.03886443 0 -0.2070335 0.9102464 -0.3585927 0.32836 -0.03886443 0.3585927 0.9326847 0 0 0 0 1 0.9780488 0.2048779 -0.03802049 0 -0.2048779 0.9121953 -0.3548588 0.32836 -0.03802055 0.3548588 0.9341465 0 0 0 0 1 0.9777045 0.2064044 -0.03861635 0 -0.2064041 0.9108172 -0.3575043 0.32836 -0.03861796 0.3575041 0.9331128 0 0 0 0 1 0.9767443 0.2105898 -0.04028004 0 -0.2105898 0.9069775 -0.3647515 0.32836 -0.0402798 0.3647515 0.9302332 0 0 0 0 1 0.9763885 0.2121156 -0.04089635 0 -0.2121155 0.9055536 -0.3673957 0.32836 -0.04089647 0.3673957 0.9291651 0 0 0 0 1 0.9765517 0.2114177 -0.04061388 0 -0.2114176 0.9062059 -0.3661878 0.32836 -0.040614 0.3661877 0.9296543 0 0 0 0 1 0.9765267 0.2115246 -0.04065597 0 -0.2115243 0.9061068 -0.3663714 0.32836 -0.04065793 0.3663712 0.92958 0 0 0 0 1 0.9761183 0.2132651 -0.04136455 0 -0.2132652 0.9044731 -0.3693866 0.32836 -0.04136407 0.3693866 0.9283547 0 0 0 0 1 0.9760144 0.2137053 -0.04154318 0 -0.213705 0.9040581 -0.3701474 0.32836 -0.04154497 0.3701472 0.9280437 0 0 0 0 1 0.9763324 0.2123548 -0.04099392 0 -0.212355 0.9053295 -0.3678095 0.32836 -0.04099303 0.3678097 0.9289971 0 0 0 0 1 0.9767746 0.2104594 -0.04022651 0 -0.210459 0.9070986 -0.3645259 0.32836 -0.04022842 0.3645257 0.930324 0 0 0 0 1 0.9769791 0.2095755 -0.03987306 0 -0.2095753 0.9079157 -0.3629975 0.32836 -0.03987401 0.3629974 0.9309366 0 0 0 0 1 0.9764221 0.2119721 -0.04083859 0 -0.2119723 0.9056886 -0.3671457 0.32836 -0.04083758 0.3671458 0.9292665 0 0 0 0 1 0.9760251 0.2136602 -0.04152649 0 -0.2136605 0.9041 -0.3700708 0.32836 -0.0415253 0.370071 0.928075 0 0 0 0 1 0.9764134 0.212009 -0.04085361 0 -0.2120092 0.9056536 -0.3672106 0.32836 -0.04085266 0.3672107 0.9292402 0 0 0 0 1 0.9760006 0.2137637 -0.04156756 0 -0.2137634 0.9040018 -0.3702511 0.32836 -0.04156905 0.370251 0.9280012 0 0 0 0 1 0.9752018 0.2171096 -0.04295235 0 -0.2171099 0.9008073 -0.3760445 0.32836 -0.04295104 0.3760447 0.9256055 0 0 0 0 1 0.9747918 0.2188026 -0.04366195 0 -0.2188026 0.8991669 -0.378978 0.32836 -0.04366201 0.378978 0.9243751 0 0 0 0 1 0.9744949 0.2200183 -0.04417645 0 -0.2200185 0.8979797 -0.3810831 0.32836 -0.04417562 0.3810832 0.9234848 0 0 0 0 1 0.9742599 0.2209752 -0.0445832 0 -0.2209753 0.8970404 -0.3827381 0.32836 -0.04458266 0.3827382 0.9227805 0 0 0 0 1 0.9742553 0.2209936 -0.04459083 0 -0.2209934 0.8970207 -0.3827737 0.32836 -0.0445916 0.3827736 0.9227654 0 0 0 0 1 0.9739004 0.2224286 -0.04520583 0 -0.2224286 0.8956011 -0.3852586 0.32836 -0.04520612 0.3852586 0.9217007 0 0 0 0 1 0.9737856 0.2228904 -0.04540419 0 -0.2228901 0.8951423 -0.3860574 0.32836 -0.04540526 0.3860573 0.9213567 0 0 0 0 1 0.9736355 0.2234921 -0.04566454 0 -0.223492 0.8945416 -0.3871004 0.32836 -0.04566502 0.3871003 0.9209061 0 0 0 0 1 0.9728175 0.2267364 -0.04708153 0 -0.2267364 0.8912701 -0.392719 0.32836 -0.04708129 0.3927191 0.9184526 0 0 0 0 1 0.9712737 0.2327056 -0.04975461 0 -0.2327052 0.8850945 -0.4030583 0.32836 -0.04975634 0.4030581 0.9138208 0 0 0 0 1 0.9703888 0.2360406 -0.05128777 0 -0.2360405 0.8815553 -0.4088338 0.32836 -0.05128836 0.4088338 0.9111666 0 0 0 0 1 0.9700596 0.2372658 -0.0518577 0 -0.2372655 0.880238 -0.4109576 0.32836 -0.05185902 0.4109575 0.9101784 0 0 0 0 1 0.9695771 0.2390475 -0.05269378 0 -0.2390472 0.8783077 -0.4140436 0.32836 -0.05269473 0.4140435 0.9087306 0 0 0 0 1 0.9686286 0.2424998 -0.05433648 0 -0.2424997 0.874515 -0.4200207 0.32836 -0.05433684 0.4200207 0.9058864 0 0 0 0 1 0.9677895 0.2455017 -0.05578976 0 -0.2455015 0.8711583 -0.4252201 0.32836 -0.05579054 0.4252201 0.9033689 0 0 0 0 1 0.966416 0.2503128 -0.05816954 0 -0.2503129 0.8656636 -0.4335551 0.32836 -0.05816912 0.4335551 0.8992477 0 0 0 0 1 0.9648996 0.2554849 -0.0607962 0 -0.2554851 0.8595981 -0.4425138 0.32836 -0.06079524 0.442514 0.8946985 0 0 0 0 1 0.9638851 0.2588682 -0.06255209 0 -0.2588678 0.8555397 -0.448374 0.32836 -0.06255394 0.4483737 0.8916546 0 0 0 0 1 0.9629942 0.2617899 -0.06409609 0 -0.2617899 0.8519766 -0.4534335 0.32836 -0.06409585 0.4534335 0.8889824 0 0 0 0 1 0.962951 0.2619305 -0.06417065 0 -0.2619304 0.8518041 -0.4536762 0.32836 -0.06417077 0.4536762 0.8888532 0 0 0 0 1 0.9632455 0.2609702 -0.06366091 0 -0.2609704 0.8529824 -0.4520126 0.32836 -0.06366014 0.4520127 0.889737 0 0 0 0 1 0.9630134 0.2617273 -0.06406259 0 -0.2617272 0.8520538 -0.4533246 0.32836 -0.06406259 0.4533246 0.8890404 0 0 0 0 1 0.9627723 0.2625107 -0.06447958 0 -0.2625102 0.8510888 -0.4546825 0.32836 -0.06448107 0.4546822 0.8883165 0 0 0 0 1 0.9623057 0.2640177 -0.06528818 0 -0.2640175 0.8492233 -0.4572904 0.32836 -0.06528842 0.4572903 0.8869177 0 0 0 0 1 0.9614619 0.2667126 -0.06674951 0 -0.2667124 0.8458477 -0.4619591 0.32836 -0.06675034 0.461959 0.8843858 0 0 0 0 1 0.9611833 0.2675937 -0.06723332 0 -0.2675941 0.8447332 -0.4634859 0.32836 -0.06723165 0.4634861 0.8835499 0 0 0 0 1 0.9609059 0.2684675 -0.06771373 0 -0.2684679 0.8436235 -0.4649993 0.32836 -0.06771224 0.4649996 0.8827176 0 0 0 0 1 0.9603425 0.2702297 -0.06868946 0 -0.2702299 0.8413693 -0.4680529 0.32836 -0.06868857 0.4680531 0.8810268 0 0 0 0 1 0.959631 0.2724324 -0.06992089 0 -0.2724324 0.8385252 -0.4718645 0.32836 -0.06992071 0.4718645 0.8788942 0 0 0 0 1 0.9589325 0.2745703 -0.07113146 0 -0.2745705 0.8357296 -0.4755703 0.32836 -0.07113075 0.4755703 0.8767971 0 0 0 0 1 0.9585375 0.2757688 -0.07181531 0 -0.2757689 0.8341505 -0.4776447 0.32836 -0.07181465 0.4776448 0.8756129 0 0 0 0 1 0.9581491 0.2769404 -0.07248729 0 -0.2769399 0.8325958 -0.4796755 0.32836 -0.07248884 0.4796752 0.8744466 0 0 0 0 1 0.9576431 0.2784556 -0.07336348 0 -0.2784552 0.8305728 -0.4822982 0.32836 -0.07336491 0.482298 0.8729296 0 0 0 0 1 0.9577113 0.2782518 -0.07324689 0 -0.2782521 0.8308452 -0.4819461 0.32836 -0.07324546 0.4819462 0.8731339 0 0 0 0 1 0.957882 0.2777417 -0.07294976 0 -0.2777414 0.8315289 -0.4810608 0.32836 -0.07295072 0.4810606 0.8736469 0 0 0 0 1 0.9577765 0.278057 -0.07313323 0 -0.278057 0.8311064 -0.4816083 0.32836 -0.07313305 0.4816083 0.8733298 0 0 0 0 1 0.9575192 0.2788248 -0.07357829 0 -0.2788245 0.8300775 -0.4829371 0.32836 -0.07357913 0.4829369 0.8725582 0 0 0 0 1 0.9572706 0.2795634 -0.07400918 0 -0.2795633 0.8290827 -0.4842172 0.32836 -0.07400965 0.4842171 0.8718121 0 0 0 0 1 0.9565382 0.2817233 -0.0752775 0 -0.2817231 0.8261528 -0.4879588 0.32836 -0.07527863 0.4879586 0.8696146 0 0 0 0 1 0.9560522 0.2831431 -0.07611948 0 -0.2831429 0.8242085 -0.4904186 0.32836 -0.07612031 0.4904185 0.8681563 0 0 0 0 1 0.9563634 0.2822347 -0.07558119 0 -0.282235 0.8254539 -0.4888448 0.32836 -0.07558017 0.488845 0.8690904 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_RightForeArm_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightForeArm_pose_matrix-interpolation"> + <Name_array id="_6_15_t_RightForeArm_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_RightForeArm_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_RightForeArm_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_RightForeArm_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_RightForeArm_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_RightForeArm_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_RightForeArm_pose_matrix-sampler" target="RightForeArm/transform"/> + </animation> + <animation id="_6_15_t_RightHand_pose_matrix"> + <source id="_6_15_t_RightHand_pose_matrix-input"> + <float_array id="_6_15_t_RightHand_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_RightHand_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightHand_pose_matrix-output"> + <float_array id="_6_15_t_RightHand_pose_matrix-output-array" count="2224">0.9990528 0 -0.04351472 0 0 1 0 0.233209 0.04351472 0 0.9990528 0 0 0 0 1 0.9990544 0 -0.04347813 0 0 1 0 0.233209 0.04347813 0 0.9990544 0 0 0 0 1 0.9989812 0 -0.04512929 0 0 1 0 0.233209 0.04512929 0 0.9989812 0 0 0 0 1 0.9988302 0 -0.04835468 0 0 1 0 0.233209 0.04835468 0 0.9988302 0 0 0 0 1 0.9982283 0 -0.05949974 0 0 1 0 0.233209 0.05949974 0 0.9982283 0 0 0 0 1 0.9975878 0 -0.06941694 0 0 1 0 0.233209 0.06941694 0 0.9975878 0 0 0 0 1 0.9976364 0 -0.06871348 0 0 1 0 0.233209 0.06871348 0 0.9976364 0 0 0 0 1 0.9978364 0 -0.06574618 0 0 1 0 0.233209 0.06574618 0 0.9978364 0 0 0 0 1 0.997915 0 -0.06454271 0 0 1 0 0.233209 0.06454271 0 0.997915 0 0 0 0 1 0.9977681 0 -0.06677544 0 0 1 0 0.233209 0.06677544 0 0.9977681 0 0 0 0 1 0.9975461 0 -0.07001239 0 0 1 0 0.233209 0.07001239 0 0.9975461 0 0 0 0 1 0.9976665 0 -0.06827473 0 0 1 0 0.233209 0.06827473 0 0.9976665 0 0 0 0 1 0.9980125 0 -0.06301695 0 0 1 0 0.233209 0.06301695 0 0.9980125 0 0 0 0 1 0.9980565 0 -0.06231492 0 0 1 0 0.233209 0.06231492 0 0.9980565 0 0 0 0 1 0.9979256 0 -0.06437724 0 0 1 0 0.233209 0.06437724 0 0.9979256 0 0 0 0 1 0.9977486 0 -0.06706625 0 0 1 0 0.233209 0.06706625 0 0.9977486 0 0 0 0 1 0.9972231 0 -0.07447224 0 0 1 0 0.233209 0.07447224 0 0.9972231 0 0 0 0 1 0.9967726 0 -0.0802772 0 0 1 0 0.233209 0.0802772 0 0.9967726 0 0 0 0 1 0.9960098 0 -0.08924371 0 0 1 0 0.233209 0.08924371 0 0.9960098 0 0 0 0 1 0.9950897 0 -0.09897756 0 0 1 0 0.233209 0.09897756 0 0.9950897 0 0 0 0 1 0.9944751 0 -0.1049728 0 0 1 0 0.233209 0.1049728 0 0.9944751 0 0 0 0 1 0.994019 0 -0.1092069 0 0 1 0 0.233209 0.1092069 0 0.994019 0 0 0 0 1 0.9939715 0 -0.1096389 0 0 1 0 0.233209 0.1096389 0 0.9939715 0 0 0 0 1 0.9939326 0 -0.109991 0 0 1 0 0.233209 0.109991 0 0.9939326 0 0 0 0 1 0.9940924 0 -0.1085372 0 0 1 0 0.233209 0.1085372 0 0.9940924 0 0 0 0 1 0.9939571 0 -0.109769 0 0 1 0 0.233209 0.109769 0 0.9939571 0 0 0 0 1 0.9940166 0 -0.1092295 0 0 1 0 0.233209 0.1092295 0 0.9940166 0 0 0 0 1 0.9944771 0 -0.1049537 0 0 1 0 0.233209 0.1049537 0 0.9944771 0 0 0 0 1 0.9950071 0 -0.09980428 0 0 1 0 0.233209 0.09980428 0 0.9950071 0 0 0 0 1 0.9953272 0 -0.09655976 0 0 1 0 0.233209 0.09655976 0 0.9953272 0 0 0 0 1 0.9955796 0 -0.09392237 0 0 1 0 0.233209 0.09392237 0 0.9955796 0 0 0 0 1 0.9960136 0 -0.08920198 0 0 1 0 0.233209 0.08920198 0 0.9960136 0 0 0 0 1 0.9960139 0 -0.08919852 0 0 1 0 0.233209 0.08919852 0 0.9960139 0 0 0 0 1 0.9957553 0 -0.09204035 0 0 1 0 0.233209 0.09204035 0 0.9957553 0 0 0 0 1 0.995851 0 -0.0909993 0 0 1 0 0.233209 0.0909993 0 0.995851 0 0 0 0 1 0.9956709 0 -0.09294927 0 0 1 0 0.233209 0.09294927 0 0.9956709 0 0 0 0 1 0.9949937 0 -0.09993797 0 0 1 0 0.233209 0.09993797 0 0.9949937 0 0 0 0 1 0.9945038 0 -0.1047003 0 0 1 0 0.233209 0.1047003 0 0.9945038 0 0 0 0 1 0.9946013 0 -0.1037699 0 0 1 0 0.233209 0.1037699 0 0.9946013 0 0 0 0 1 0.9945062 0 -0.1046777 0 0 1 0 0.233209 0.1046777 0 0.9945062 0 0 0 0 1 0.9941993 0 -0.1075534 0 0 1 0 0.233209 0.1075534 0 0.9941993 0 0 0 0 1 0.9942136 0 -0.1074215 0 0 1 0 0.233209 0.1074215 0 0.9942136 0 0 0 0 1 0.9937992 0 -0.1111897 0 0 1 0 0.233209 0.1111897 0 0.9937992 0 0 0 0 1 0.9938046 0 -0.1111411 0 0 1 0 0.233209 0.1111411 0 0.9938046 0 0 0 0 1 0.9937416 0 -0.111703 0 0 1 0 0.233209 0.111703 0 0.9937416 0 0 0 0 1 0.9932622 0 -0.1158889 0 0 1 0 0.233209 0.1158889 0 0.9932622 0 0 0 0 1 0.9925787 0 -0.1216043 0 0 1 0 0.233209 0.1216043 0 0.9925787 0 0 0 0 1 0.991461 0 -0.1304033 0 0 1 0 0.233209 0.1304033 0 0.991461 0 0 0 0 1 0.990889 0 -0.1346814 0 0 1 0 0.233209 0.1346814 0 0.990889 0 0 0 0 1 0.9902545 0 -0.1392698 0 0 1 0 0.233209 0.1392698 0 0.9902545 0 0 0 0 1 0.9886158 0 -0.1504619 0 0 1 0 0.233209 0.1504619 0 0.9886158 0 0 0 0 1 0.987034 0 -0.1605117 0 0 1 0 0.233209 0.1605117 0 0.987034 0 0 0 0 1 0.9858718 0 -0.1675018 0 0 1 0 0.233209 0.1675018 0 0.9858718 0 0 0 0 1 0.9836137 0 -0.1802891 0 0 1 0 0.233209 0.1802891 0 0.9836137 0 0 0 0 1 0.9831998 0 -0.1825324 0 0 1 0 0.233209 0.1825324 0 0.9831998 0 0 0 0 1 0.9839617 0 -0.1783797 0 0 1 0 0.233209 0.1783797 0 0.9839617 0 0 0 0 1 0.9843138 0 -0.1764268 0 0 1 0 0.233209 0.1764268 0 0.9843138 0 0 0 0 1 0.984187 0 -0.1771328 0 0 1 0 0.233209 0.1771328 0 0.984187 0 0 0 0 1 0.9830082 0 -0.1835619 0 0 1 0 0.233209 0.1835619 0 0.9830082 0 0 0 0 1 0.9821519 0 -0.1880893 0 0 1 0 0.233209 0.1880893 0 0.9821519 0 0 0 0 1 0.9811091 0 -0.1934552 0 0 1 0 0.233209 0.1934552 0 0.9811091 0 0 0 0 1 0.9808309 0 -0.1948609 0 0 1 0 0.233209 0.1948609 0 0.9808309 0 0 0 0 1 0.9806478 0 -0.1957801 0 0 1 0 0.233209 0.1957801 0 0.9806478 0 0 0 0 1 0.9802014 0 -0.1980029 0 0 1 0 0.233209 0.1980029 0 0.9802014 0 0 0 0 1 0.9784503 0 -0.2064825 0 0 1 0 0.233209 0.2064825 0 0.9784503 0 0 0 0 1 0.9767726 0 -0.2142785 0 0 1 0 0.233209 0.2142785 0 0.9767726 0 0 0 0 1 0.9758104 0 -0.2186184 0 0 1 0 0.233209 0.2186184 0 0.9758104 0 0 0 0 1 0.9769842 0 -0.2133117 0 0 1 0 0.233209 0.2133117 0 0.9769842 0 0 0 0 1 0.9771866 0 -0.2123823 0 0 1 0 0.233209 0.2123823 0 0.9771866 0 0 0 0 1 0.9760897 0 -0.2173681 0 0 1 0 0.233209 0.2173681 0 0.9760897 0 0 0 0 1 0.9754804 0 -0.2200862 0 0 1 0 0.233209 0.2200862 0 0.9754804 0 0 0 0 1 0.9766374 0 -0.2148938 0 0 1 0 0.233209 0.2148938 0 0.9766374 0 0 0 0 1 0.9767827 0 -0.2142324 0 0 1 0 0.233209 0.2142324 0 0.9767827 0 0 0 0 1 0.9751567 0 -0.2215161 0 0 1 0 0.233209 0.2215161 0 0.9751567 0 0 0 0 1 0.9752355 0 -0.2211689 0 0 1 0 0.233209 0.2211689 0 0.9752355 0 0 0 0 1 0.9766157 0 -0.2149927 0 0 1 0 0.233209 0.2149927 0 0.9766157 0 0 0 0 1 0.9769347 0 -0.2135385 0 0 1 0 0.233209 0.2135385 0 0.9769347 0 0 0 0 1 0.9762669 0 -0.2165708 0 0 1 0 0.233209 0.2165708 0 0.9762669 0 0 0 0 1 0.9764781 0 -0.2156165 0 0 1 0 0.233209 0.2156165 0 0.9764781 0 0 0 0 1 0.9751957 0 -0.2213442 0 0 1 0 0.233209 0.2213442 0 0.9751957 0 0 0 0 1 0.9737623 0 -0.2275674 0 0 1 0 0.233209 0.2275674 0 0.9737623 0 0 0 0 1 0.9732728 0 -0.2296522 0 0 1 0 0.233209 0.2296522 0 0.9732728 0 0 0 0 1 0.9734464 0 -0.2289149 0 0 1 0 0.233209 0.2289149 0 0.9734464 0 0 0 0 1 0.9730627 0 -0.2305405 0 0 1 0 0.233209 0.2305405 0 0.9730627 0 0 0 0 1 0.9743693 0 -0.2249544 0 0 1 0 0.233209 0.2249544 0 0.9743693 0 0 0 0 1 0.9768896 0 -0.2137448 0 0 1 0 0.233209 0.2137448 0 0.9768896 0 0 0 0 1 0.9772948 0 -0.2118843 0 0 1 0 0.233209 0.2118843 0 0.9772948 0 0 0 0 1 0.9761833 0 -0.2169473 0 0 1 0 0.233209 0.2169473 0 0.9761833 0 0 0 0 1 0.9764073 0 -0.2159369 0 0 1 0 0.233209 0.2159369 0 0.9764073 0 0 0 0 1 0.9768391 0 -0.213975 0 0 1 0 0.233209 0.213975 0 0.9768391 0 0 0 0 1 0.9764932 0 -0.2155483 0 0 1 0 0.233209 0.2155483 0 0.9764932 0 0 0 0 1 0.9756495 0 -0.2193354 0 0 1 0 0.233209 0.2193354 0 0.9756495 0 0 0 0 1 0.9738322 0 -0.2272683 0 0 1 0 0.233209 0.2272683 0 0.9738322 0 0 0 0 1 0.973082 0 -0.230459 0 0 1 0 0.233209 0.230459 0 0.973082 0 0 0 0 1 0.9745222 0 -0.2242912 0 0 1 0 0.233209 0.2242912 0 0.9745222 0 0 0 0 1 0.9761307 0 -0.2171841 0 0 1 0 0.233209 0.2171841 0 0.9761307 0 0 0 0 1 0.9753007 0 -0.2208812 0 0 1 0 0.233209 0.2208812 0 0.9753007 0 0 0 0 1 0.9754393 0 -0.2202684 0 0 1 0 0.233209 0.2202684 0 0.9754393 0 0 0 0 1 0.9769362 0 -0.2135317 0 0 1 0 0.233209 0.2135317 0 0.9769362 0 0 0 0 1 0.9805671 0 -0.196184 0 0 1 0 0.233209 0.196184 0 0.9805671 0 0 0 0 1 0.982167 0 -0.1880104 0 0 1 0 0.233209 0.1880104 0 0.982167 0 0 0 0 1 0.982439 0 -0.1865841 0 0 1 0 0.233209 0.1865841 0 0.982439 0 0 0 0 1 0.9835582 0 -0.1805912 0 0 1 0 0.233209 0.1805912 0 0.9835582 0 0 0 0 1 0.9852103 0 -0.1713496 0 0 1 0 0.233209 0.1713496 0 0.9852103 0 0 0 0 1 0.9867416 0 -0.1622996 0 0 1 0 0.233209 0.1622996 0 0.9867416 0 0 0 0 1 0.9872865 0 -0.1589508 0 0 1 0 0.233209 0.1589508 0 0.9872865 0 0 0 0 1 0.9871561 0 -0.1597588 0 0 1 0 0.233209 0.1597588 0 0.9871561 0 0 0 0 1 0.9870107 0 -0.1606547 0 0 1 0 0.233209 0.1606547 0 0.9870107 0 0 0 0 1 0.986035 0 -0.1665381 0 0 1 0 0.233209 0.1665381 0 0.986035 0 0 0 0 1 0.9856961 0 -0.1685324 0 0 1 0 0.233209 0.1685324 0 0.9856961 0 0 0 0 1 0.9878752 0 -0.1552501 0 0 1 0 0.233209 0.1552501 0 0.9878752 0 0 0 0 1 0.9893494 0 -0.1455598 0 0 1 0 0.233209 0.1455598 0 0.9893494 0 0 0 0 1 0.9916604 0 -0.1288787 0 0 1 0 0.233209 0.1288787 0 0.9916604 0 0 0 0 1 0.9944338 0 -0.1053633 0 0 1 0 0.233209 0.1053633 0 0.9944338 0 0 0 0 1 0.9958826 0 -0.09065169 0 0 1 0 0.233209 0.09065169 0 0.9958826 0 0 0 0 1 0.9962246 0 -0.08681321 0 0 1 0 0.233209 0.08681321 0 0.9962246 0 0 0 0 1 0.9962514 0 -0.08650541 0 0 1 0 0.233209 0.08650541 0 0.9962514 0 0 0 0 1 0.9966949 0 -0.0812357 0 0 1 0 0.233209 0.0812357 0 0.9966949 0 0 0 0 1 0.9972934 0 -0.07352536 0 0 1 0 0.233209 0.07352536 0 0.9972934 0 0 0 0 1 0.9976865 0 -0.06798219 0 0 1 0 0.233209 0.06798219 0 0.9976865 0 0 0 0 1 0.9977903 0 -0.06644105 0 0 1 0 0.233209 0.06644105 0 0.9977903 0 0 0 0 1 0.9979102 0 -0.0646159 0 0 1 0 0.233209 0.0646159 0 0.9979102 0 0 0 0 1 0.9979355 0 -0.064224 0 0 1 0 0.233209 0.064224 0 0.9979355 0 0 0 0 1 0.9980251 0 -0.06281661 0 0 1 0 0.233209 0.06281661 0 0.9980251 0 0 0 0 1 0.9979577 0 -0.06387913 0 0 1 0 0.233209 0.06387913 0 0.9979577 0 0 0 0 1 0.9975169 0 -0.07042676 0 0 1 0 0.233209 0.07042676 0 0.9975169 0 0 0 0 1 0.9975309 0 -0.07022827 0 0 1 0 0.233209 0.07022827 0 0.9975309 0 0 0 0 1 0.9977012 0 -0.06776624 0 0 1 0 0.233209 0.06776624 0 0.9977012 0 0 0 0 1 0.9976654 0 -0.06829214 0 0 1 0 0.233209 0.06829214 0 0.9976654 0 0 0 0 1 0.9979411 0 -0.06413692 0 0 1 0 0.233209 0.06413692 0 0.9979411 0 0 0 0 1 0.9983086 0 -0.05813723 0 0 1 0 0.233209 0.05813723 0 0.9983086 0 0 0 0 1 0.9984413 0 -0.05581104 0 0 1 0 0.233209 0.05581104 0 0.9984413 0 0 0 0 1 0.9985291 0 -0.05421823 0 0 1 0 0.233209 0.05421823 0 0.9985291 0 0 0 0 1 0.9985295 0 -0.05421125 0 0 1 0 0.233209 0.05421125 0 0.9985295 0 0 0 0 1 0.9986048 0 -0.05280476 0 0 1 0 0.233209 0.05280476 0 0.9986048 0 0 0 0 1 0.9985098 0 -0.05457371 0 0 1 0 0.233209 0.05457371 0 0.9985098 0 0 0 0 1 0.9981861 0 -0.06020361 0 0 1 0 0.233209 0.06020361 0 0.9981861 0 0 0 0 1 0.9980767 0 -0.06199097 0 0 1 0 0.233209 0.06199097 0 0.9980767 0 0 0 0 1 0.9982638 0 -0.05890214 0 0 1 0 0.233209 0.05890214 0 0.9982638 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_RightHand_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightHand_pose_matrix-interpolation"> + <Name_array id="_6_15_t_RightHand_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_RightHand_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_RightHand_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_RightHand_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_RightHand_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_RightHand_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_RightHand_pose_matrix-sampler" target="RightHand/transform"/> + </animation> + <animation id="_6_15_t_RightFingerBase_pose_matrix"> + <source id="_6_15_t_RightFingerBase_pose_matrix-input"> + <float_array id="_6_15_t_RightFingerBase_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_RightFingerBase_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightFingerBase_pose_matrix-output"> + <float_array id="_6_15_t_RightFingerBase_pose_matrix-output-array" count="2224">0.9740206 0.2264596 -6.88272e-7 0 -0.2228737 0.9585967 -0.177256 0 -0.04014062 0.1726511 0.9841648 0 0 0 0 1 0.972643 0.232305 -5.63776e-7 0 -0.2280746 0.9549304 -0.1899734 0 -0.04413121 0.1847764 0.9817892 0 0 0 0 1 0.9716125 0.2365782 0 0 -0.231621 0.9512535 -0.2036382 0 -0.04817622 0.1978574 0.9790462 0 0 0 0 1 0.9719091 0.2353567 -3.54066e-7 0 -0.2305135 0.9519085 -0.201826 0 -0.04750072 0.1961566 0.9794214 0 0 0 0 1 0.9715119 0.2369908 5.05043e-7 0 -0.2325938 0.9534877 -0.1917324 0 -0.0454393 0.1862702 0.9814472 0 0 0 0 1 0.9717196 0.2361378 -2.53588e-7 0 -0.2316141 0.953104 -0.1948015 0 -0.0459997 0.1892924 0.9808427 0 0 0 0 1 0.9732722 0.2296545 -6.19328e-7 0 -0.2253226 0.9549129 -0.193316 0 -0.04439526 0.1881492 0.9811366 0 0 0 0 1 0.9730175 0.2307313 0 0 -0.2264427 0.954932 -0.1919078 0 -0.04427909 0.1867297 0.981413 0 0 0 0 1 0.9737101 0.2277908 3.64128e-7 0 -0.2233061 0.9545398 -0.1974544 0 -0.04497861 0.1922633 0.9803121 0 0 0 0 1 0.9750593 0.2219445 9.79492e-7 0 -0.2174118 0.9551465 -0.2010654 0 -0.04462629 0.1960505 0.9795778 0 0 0 0 1 0.976276 0.2165299 -3.37811e-7 0 -0.2120401 0.9560326 -0.2025848 0 -0.04386532 0.1977787 0.9792647 0 0 0 0 1 0.9766827 0.2146878 -6.34313e-7 0 -0.2103592 0.9569898 -0.1997985 0 -0.0428937 0.1951399 0.979837 0 0 0 0 1 0.9771527 0.2125384 1.00422e-6 0 -0.2085451 0.9587939 -0.1929329 0 -0.04100656 0.1885246 0.981212 0 0 0 0 1 0.9775356 0.2107703 2.40739e-7 0 -0.2066835 0.9585821 -0.195965 0 -0.04130381 0.1915627 0.9806109 0 0 0 0 1 0.9774726 0.2110622 -2.66647e-7 0 -0.2067418 0.9574636 -0.2012988 0 -0.04248631 0.1967641 0.9795299 0 0 0 0 1 0.9775807 0.210561 -1.57769e-7 0 -0.2061235 0.9569779 -0.2042217 0 -0.04300099 0.1996432 0.9789246 0 0 0 0 1 0.9776443 0.2102659 2.01933e-7 0 -0.2057395 0.9565988 -0.2063736 0 -0.04339349 0.2017599 0.9784733 0 0 0 0 1 0.9765194 0.2154298 7.08679e-7 0 -0.2107142 0.9551444 -0.2080835 0 -0.04482805 0.2031974 0.9781111 0 0 0 0 1 0.9757927 0.2186975 -2.63919e-7 0 -0.2137798 0.9538505 -0.2108732 0 -0.04611718 0.2057686 0.9775134 0 0 0 0 1 0.9762764 0.216528 -4.10606e-7 0 -0.2116335 0.9542077 -0.2114212 0 -0.04577821 0.2064056 0.9773951 0 0 0 0 1 0.976621 0.2149685 1.00682e-6 0 -0.2104478 0.9560841 -0.2039971 0 -0.04385387 0.1992276 0.9789715 0 0 0 0 1 0.9773344 0.2117015 -4.84593e-7 0 -0.2073319 0.9571611 -0.2021291 0 -0.04279053 0.1975478 0.9793589 0 0 0 0 1 0.9776095 0.2104275 4.02763e-7 0 -0.2058302 0.9562516 -0.2078863 0 -0.04374539 0.2032315 0.978153 0 0 0 0 1 0.9776602 0.2101917 -5.34427e-7 0 -0.2056219 0.9564043 -0.2073894 0 -0.04359102 0.2027565 0.9782585 0 0 0 0 1 0.9775283 0.2108042 -7.14293e-7 0 -0.2065938 0.9580032 -0.1988691 0 -0.04192173 0.1944003 0.9800261 0 0 0 0 1 0.9768869 0.2137569 5.795e-7 0 -0.2093124 0.9565757 -0.2028576 0 -0.04336273 0.1981688 0.9792082 0 0 0 0 1 0.9763895 0.2160174 0 0 -0.2109225 0.9533607 -0.2159054 0 -0.0466392 0.2108078 0.9764143 0 0 0 0 1 0.9766583 0.2147991 7.16932e-7 0 -0.2099866 0.9547778 -0.2104872 0 -0.0452131 0.2055739 0.9775967 0 0 0 0 1 0.9771016 0.2127731 7.65084e-7 0 -0.2081568 0.9559037 -0.2071689 0 -0.04408067 0.2024249 0.9783052 0 0 0 0 1 0.976462 0.2156897 0 0 -0.2106888 0.9538221 -0.2140876 0 -0.04617649 0.2090485 0.9768145 0 0 0 0 1 0.9765128 0.2154595 1.84411e-7 0 -0.2102625 0.9529589 -0.2183096 0 -0.04703706 0.213182 0.9758796 0 0 0 0 1 0.9765951 0.2150863 7.96688e-7 0 -0.2099683 0.9533579 -0.2168453 0 -0.04664123 0.2117699 0.976206 0 0 0 0 1 0.977146 0.2125691 -3.91811e-7 0 -0.2073051 0.952948 -0.2211668 0 -0.04701286 0.2161123 0.975236 0 0 0 0 1 0.9778797 0.2091684 3.08545e-7 0 -0.2037162 0.9523906 -0.2268298 0 -0.04744589 0.2218122 0.9739344 0 0 0 0 1 0.9772026 0.2123089 -7.24656e-7 0 -0.2066705 0.9512501 -0.2289334 0 -0.04860389 0.2237145 0.9734421 0 0 0 0 1 0.9775514 0.2106972 3.43384e-7 0 -0.2052404 0.952234 -0.2261121 0 -0.04764151 0.2210361 0.9741013 0 0 0 0 1 0.9774748 0.211052 -6.19745e-7 0 -0.2052301 0.9505102 -0.2332617 0 -0.04922974 0.2280076 0.972414 0 0 0 0 1 0.9768544 0.2139053 6.81653e-7 0 -0.2073541 0.9469374 -0.2455888 0 -0.05253338 0.2399044 0.9693741 0 0 0 0 1 0.975696 0.2191286 6.01233e-7 0 -0.2123631 0.9455727 -0.2465645 0 -0.05402988 0.2405719 0.9691264 0 0 0 0 1 0.9749906 0.2222459 -3.42262e-7 0 -0.2159081 0.9471861 -0.2371124 0 -0.05269694 0.2311824 0.9714822 0 0 0 0 1 0.9749751 0.2223139 6.20456e-7 0 -0.2159213 0.9469404 -0.2380793 0 -0.05292892 0.2321213 0.9712457 0 0 0 0 1 0.9741492 0.2259058 7.52725e-7 0 -0.2182975 0.9413416 -0.2573366 0 -0.05813449 0.250684 0.9663218 0 0 0 0 1 0.974327 0.2251372 7.61304e-7 0 -0.2168335 0.9383917 -0.2690805 0 -0.06058073 0.2621722 0.9631177 0 0 0 0 1 0.9753292 0.2207556 -9.49025e-7 0 -0.2130169 0.9411372 -0.2624588 0 -0.05793833 0.2559839 0.9649432 0 0 0 0 1 0.9761143 0.2172576 0 0 -0.2103213 0.9449503 -0.2506669 0 -0.05445927 0.2446795 0.9680734 0 0 0 0 1 0.976564 0.2152272 7.03844e-7 0 -0.2088355 0.9475633 -0.2418916 0 -0.05206233 0.2362225 0.9703032 0 0 0 0 1 0.9764827 0.2155957 -1.79507e-7 0 -0.2089845 0.9465389 -0.2457428 0 -0.05298089 0.2399637 0.9693351 0 0 0 0 1 0.9758233 0.2185609 -4.93865e-7 0 -0.2120952 0.946955 -0.2414371 0 -0.05276823 0.2356001 0.9704165 0 0 0 0 1 0.977855 0.2092832 7.02419e-7 0 -0.2045363 0.9556758 -0.2117751 0 -0.04432165 0.2070853 0.9773184 0 0 0 0 1 0.9799651 0.1991693 -4.02931e-7 0 -0.1958137 0.9634542 -0.1827923 0 -0.03640621 0.1791301 0.9831516 0 0 0 0 1 0.9809036 0.1944944 -5.94937e-7 0 -0.1913329 0.9649585 -0.1795741 0 -0.03492558 0.176145 0.9837445 0 0 0 0 1 0.9808818 0.1946043 -2.3385e-7 0 -0.1915518 0.9654952 -0.176428 0 -0.0343334 0.1730551 0.9843136 0 0 0 0 1 0.9808053 0.1949896 5.90004e-7 0 -0.192494 0.968253 -0.1594749 0 -0.03109651 0.1564137 0.987202 0 0 0 0 1 0.9812998 0.1924858 -2.9062e-7 0 -0.1904627 0.9709857 -0.1446056 0 -0.02783423 0.1419016 0.9894894 0 0 0 0 1 0.9805548 0.1962456 8.76649e-7 0 -0.1938252 0.968462 -0.1565668 0 -0.03072637 0.1535221 0.9876674 0 0 0 0 1 0.9793972 0.2019434 2.00067e-7 0 -0.1988242 0.9642692 -0.1750823 0 -0.03535687 0.1714751 0.9845538 0 0 0 0 1 0.9788116 0.2047632 4.58086e-7 0 -0.2015185 0.9633019 -0.1773123 0 -0.03630745 0.1735553 0.9841547 0 0 0 0 1 0.9782845 0.2072665 -3.96206e-7 0 -0.2041421 0.9635375 -0.1729784 0 -0.03585219 0.1692221 0.9849256 0 0 0 0 1 0.9792784 0.2025187 -5.45709e-7 0 -0.1992945 0.9636873 -0.1777313 0 -0.03599339 0.1740486 0.9840791 0 0 0 0 1 0.9797225 0.2003593 5.75852e-7 0 -0.1970987 0.9637792 -0.1796715 0 -0.03599941 0.1760281 0.9837267 0 0 0 0 1 0.9795454 0.2012233 1.92315e-7 0 -0.1979539 0.9636301 -0.1795303 0 -0.03612583 0.1758581 0.9837524 0 0 0 0 1 0.9788412 0.2046214 1.55533e-7 0 -0.2012336 0.9626351 -0.1812144 0 -0.03708046 0.1773801 0.9834436 0 0 0 0 1 0.9787361 0.2051239 1.65375e-7 0 -0.2015976 0.9619109 -0.1846235 0 -0.03787082 0.1806976 0.9828093 0 0 0 0 1 0.9790222 0.2037534 0 0 -0.2002991 0.9624245 -0.183356 0 -0.03735935 0.1795096 0.9830466 0 0 0 0 1 0.9789434 0.2041319 7.28495e-7 0 -0.2006399 0.9621979 -0.1841706 0 -0.03759574 0.1802924 0.9828943 0 0 0 0 1 0.9790771 0.2034898 -4.71847e-7 0 -0.2001546 0.9630293 -0.1803127 0 -0.03669136 0.1765401 0.9836093 0 0 0 0 1 0.9786415 0.2055745 -5.4481e-7 0 -0.2023085 0.9630932 -0.1775467 0 -0.03649854 0.1737546 0.9841124 0 0 0 0 1 0.9792705 0.202557 -1.54204e-7 0 -0.199266 0.9633598 -0.1795298 0 -0.03636485 0.1758083 0.9837526 0 0 0 0 1 0.9794808 0.2015376 0 0 -0.1983817 0.9641427 -0.1762768 0 -0.03552645 0.1726597 0.9843406 0 0 0 0 1 0.9783467 0.206973 0 0 -0.2037332 0.9630318 -0.1762456 0 -0.03647798 0.1724293 0.9843462 0 0 0 0 1 0.9783822 0.2068046 0 0 -0.2031389 0.9610397 -0.1874493 0 -0.03876537 0.1833971 0.9822742 0 0 0 0 1 0.9783655 0.2068839 5.17305e-7 0 -0.2032135 0.9610083 -0.1875298 0 -0.03879737 0.1834726 0.9822589 0 0 0 0 1 0.9777671 0.2096938 1.01565e-6 0 -0.2060047 0.9605665 -0.1867462 0 -0.03916049 0.1825941 0.9824082 0 0 0 0 1 0.9775806 0.2105614 4.79251e-7 0 -0.2066894 0.9596045 -0.1908894 0 -0.04019439 0.1866097 0.9816116 0 0 0 0 1 0.9776277 0.2103427 1.97345e-7 0 -0.2066156 0.9603049 -0.1874151 0 -0.03942155 0.1832221 0.9822808 0 0 0 0 1 0.9780319 0.2084553 -6.83094e-7 0 -0.2049739 0.9616976 -0.1819981 0 -0.03793781 0.1780002 0.9832988 0 0 0 0 1 0.9788631 0.2045165 -5.53858e-7 0 -0.2009006 0.9615557 -0.1872152 0 -0.03828805 0.1832581 0.9823189 0 0 0 0 1 0.979264 0.2025882 8.32833e-7 0 -0.1988939 0.9614078 -0.1900956 0 -0.03851187 0.1861536 0.9817656 0 0 0 0 1 0.9792179 0.202811 3.68429e-7 0 -0.1990914 0.9612594 -0.1906385 0 -0.03866392 0.1866766 0.9816603 0 0 0 0 1 0.9797402 0.2002729 5.32053e-7 0 -0.1967751 0.9626297 -0.186074 0 -0.03726607 0.1823041 0.9825357 0 0 0 0 1 0.979644 0.2007427 4.80171e-7 0 -0.1971837 0.9622768 -0.187462 0 -0.03763204 0.1836459 0.9822719 0 0 0 0 1 0.9795979 0.2009677 8.8879e-7 0 -0.1972737 0.9615924 -0.1908482 0 -0.03835517 0.1869543 0.9816195 0 0 0 0 1 0.980016 0.1989186 1.95864e-7 0 -0.1952093 0.9617418 -0.1922133 0 -0.03823494 0.1883721 0.9813532 0 0 0 0 1 0.9804214 0.1969111 -1.70333e-7 0 -0.1932309 0.9620974 -0.1924327 0 -0.03789198 0.1886652 0.9813102 0 0 0 0 1 0.9802075 0.1979728 3.50691e-7 0 -0.1946416 0.9637141 -0.1826736 0 -0.03616476 0.179058 0.9831736 0 0 0 0 1 0.9804823 0.1966071 -1.95516e-7 0 -0.1935253 0.9651131 -0.1763649 0 -0.0346744 0.1729227 0.9843249 0 0 0 0 1 0.9804581 0.1967281 2.58055e-7 0 -0.1936957 0.9653452 -0.1749017 0 -0.03440833 0.1714837 0.9845859 0 0 0 0 1 0.9804068 0.1969835 0 0 -0.1940377 0.9657455 -0.1722934 0 -0.03393894 0.1689177 0.9850457 0 0 0 0 1 0.9800482 0.1987598 6.76113e-7 0 -0.1959238 0.9660651 -0.1683216 0 -0.0334562 0.1649632 0.9857321 0 0 0 0 1 0.9803465 0.1972836 2.35758e-7 0 -0.1943348 0.9656935 -0.1722497 0 -0.03398227 0.1688643 0.9850533 0 0 0 0 1 0.9796002 0.2009563 3.40671e-7 0 -0.1977231 0.9638395 -0.1786591 0 -0.03590297 0.1750144 0.983911 0 0 0 0 1 0.9789581 0.2040615 0 0 -0.2005901 0.9623047 -0.1836661 0 -0.0374791 0.1798015 0.9829887 0 0 0 0 1 0.9787081 0.2052569 -3.64543e-7 0 -0.2017667 0.9620658 -0.1836288 0 -0.03769069 0.179719 0.9829956 0 0 0 0 1 0.9786376 0.2055927 -5.71066e-7 0 -0.202162 0.9623063 -0.1819259 0 -0.03740209 0.1780396 0.9833123 0 0 0 0 1 0.978791 0.2048615 6.84612e-7 0 -0.2015277 0.9628636 -0.1796671 0 -0.03680747 0.1758564 0.9837275 0 0 0 0 1 0.979091 0.2034227 0 0 -0.1999385 0.9623214 -0.1842882 0 -0.0374884 0.180435 0.9828723 0 0 0 0 1 0.9786272 0.2056426 -5.23946e-7 0 -0.2017812 0.9602508 -0.19288 0 -0.03966385 0.1887577 0.9812223 0 0 0 0 1 0.9786641 0.205467 4.79351e-7 0 -0.2020576 0.9624249 -0.181414 0 -0.03727507 0.1775433 0.9834068 0 0 0 0 1 0.9789619 0.204043 3.3901e-7 0 -0.2012557 0.9655889 -0.1647248 0 -0.03361129 0.1612592 0.9863396 0 0 0 0 1 0.9785771 0.2058804 -7.74907e-7 0 -0.2029331 0.9645674 -0.1686061 0 -0.03471189 0.1649942 0.9856835 0 0 0 0 1 0.97908 0.2034756 0 0 -0.2004476 0.9645098 -0.1718768 0 -0.0349726 0.1682811 0.9851185 0 0 0 0 1 0.9795317 0.2012902 -1.80485e-7 0 -0.1981714 0.9643544 -0.1753531 0 -0.03529667 0.171764 0.9845056 0 0 0 0 1 0.9779716 0.2087382 0 0 -0.2051005 0.9609285 -0.1858769 0 -0.03879946 0.1817824 0.982573 0 0 0 0 1 0.9766699 0.2147462 -2.25724e-7 0 -0.2105416 0.9575471 -0.1969155 0 -0.04228663 0.1923215 0.9804205 0 0 0 0 1 0.9738231 0.2273071 -8.26753e-7 0 -0.2217091 0.9498397 -0.2205668 0 -0.05013561 0.2147932 0.9753719 0 0 0 0 1 0.9709405 0.2393208 -7.35031e-7 0 -0.2314202 0.9388861 -0.2548284 0 -0.06098502 0.2474234 0.9669863 0 0 0 0 1 0.9702982 0.2419118 4.94457e-7 0 -0.2333395 0.9359155 -0.263846 0 -0.06382793 0.2560092 0.9645648 0 0 0 0 1 0.9715169 0.2369703 -4.3085e-7 0 -0.2289678 0.9387085 -0.2576823 0 -0.06106263 0.2503427 0.9662297 0 0 0 0 1 0.9715577 0.2368031 0 0 -0.2289112 0.9391787 -0.2560137 0 -0.06062483 0.248732 0.9666731 0 0 0 0 1 0.9722508 0.2339409 8.07443e-7 0 -0.226634 0.9418845 -0.2479732 0 -0.05801182 0.2410919 0.9687669 0 0 0 0 1 0.9735157 0.2286203 1.57206e-7 0 -0.2225734 0.947767 -0.2284706 0 -0.05223315 0.2224197 0.9735508 0 0 0 0 1 0.9740176 0.2264721 5.11504e-7 0 -0.2210958 0.9508954 -0.2165977 0 -0.04905384 0.2109699 0.976261 0 0 0 0 1 0.9742285 0.2255632 -5.53771e-7 0 -0.2202066 0.9510921 -0.2166399 0 -0.04886543 0.2110569 0.9762516 0 0 0 0 1 0.9740518 0.2263251 4.98731e-7 0 -0.2213151 0.9524905 -0.2092404 0 -0.04735678 0.2038109 0.9778642 0 0 0 0 1 0.9739977 0.2265577 0 0 -0.2213465 0.9515939 -0.2132483 0 -0.04831308 0.2077033 0.976998 0 0 0 0 1 0.9743262 0.2251409 7.03248e-7 0 -0.2197875 0.9511596 -0.216769 0 -0.04880422 0.2112036 0.9762229 0 0 0 0 1 0.9747208 0.2234264 -1.28515e-7 0 -0.2186008 0.9536687 -0.2067119 0 -0.04618477 0.2014864 0.9784018 0 0 0 0 1 0.9743358 0.2250995 -8.09635e-7 0 -0.2206531 0.955089 -0.1977809 0 -0.0445196 0.1927052 0.9802463 0 0 0 0 1 0.9736827 0.2279081 -8.08874e-7 0 -0.2232768 0.9538956 -0.2005758 0 -0.04571205 0.1952974 0.9796782 0 0 0 0 1 0.9713785 0.237537 -7.09572e-7 0 -0.2320795 0.9490598 -0.2131305 0 -0.05062574 0.2070306 0.9770237 0 0 0 0 1 0.9716884 0.2362661 1.14674e-6 0 -0.2319406 0.9538999 -0.1904693 0 -0.04500252 0.1850765 0.9816932 0 0 0 0 1 0.9722912 0.233773 5.94681e-7 0 -0.2293877 0.9540528 -0.1927814 0 -0.0450676 0.1874395 0.9812417 0 0 0 0 1 0.9741508 0.2258985 6.401e-7 0 -0.2217578 0.9562958 -0.1905828 0 -0.04305297 0.1856563 0.9816711 0 0 0 0 1 0.9744671 0.2245302 0 0 -0.220458 0.9567936 -0.1895897 0 -0.04256862 0.184749 0.9818634 0 0 0 0 1 0.9737991 0.2274102 0 0 -0.2231265 0.9554556 -0.1931816 0 -0.04393148 0.1881201 0.981163 0 0 0 0 1 0.9748275 0.2229603 4.72354e-7 0 -0.2190061 0.9575393 -0.1874958 0 -0.04180455 0.182776 0.9822654 0 0 0 0 1 0.9751074 0.2217331 0 0 -0.2178787 0.9581573 -0.1856432 0 -0.04116326 0.181022 0.9826172 0 0 0 0 1 0.9744855 0.2244507 -2.43887e-7 0 -0.2204431 0.9570854 -0.1881285 0 -0.0422253 0.1833285 0.9821444 0 0 0 0 1 0.9739407 0.2268027 0 0 -0.2228617 0.9570174 -0.1856082 0 -0.04209643 0.1807714 0.9826238 0 0 0 0 1 0.9744458 0.2246228 2.53575e-7 0 -0.2206705 0.9573005 -0.1867626 0 -0.04195135 0.18199 0.9824051 0 0 0 0 1 0.9736647 0.2279846 -2.08967e-7 0 -0.2237832 0.9557212 -0.191097 0 -0.04356694 0.1860644 0.9815711 0 0 0 0 1 0.9729693 0.2309345 5.74433e-7 0 -0.2266222 0.9548016 -0.192344 0 -0.0444194 0.1871446 0.9813276 0 0 0 0 1 0.9728577 0.2314044 9.27773e-7 0 -0.2271431 0.9549431 -0.1910231 0 -0.04420447 0.185838 0.9815856 0 0 0 0 1 0.9733678 0.229249 0 0 -0.2249957 0.955309 -0.1917331 0 -0.04395449 0.1866269 0.9814471 0 0 0 0 1 0.973668 0.2279708 -5.32368e-7 0 -0.2235617 0.9548361 -0.1957245 0 -0.04461896 0.1905708 0.980659 0 0 0 0 1 0.9732252 0.2298537 -6.17005e-7 0 -0.2254216 0.9544588 -0.1954315 0 -0.04492002 0.190199 0.9807174 0 0 0 0 1 0.9741027 0.226106 -9.05972e-7 0 -0.2220435 0.9565999 -0.1887148 0 -0.04266864 0.1838278 0.982032 0 0 0 0 1 0.9743019 0.2252459 2.01399e-7 0 -0.2214115 0.9577162 -0.1837297 0 -0.04138457 0.1790082 0.9829768 0 0 0 0 1 0.973701 0.2278296 -5.25456e-7 0 -0.2237944 0.9564544 -0.1873795 0 -0.04269009 0.1824517 0.9822876 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_RightFingerBase_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightFingerBase_pose_matrix-interpolation"> + <Name_array id="_6_15_t_RightFingerBase_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_RightFingerBase_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_RightFingerBase_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_RightFingerBase_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_RightFingerBase_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_RightFingerBase_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_RightFingerBase_pose_matrix-sampler" target="RightFingerBase/transform"/> + </animation> + <animation id="_6_15_t_RightHandIndex1_pose_matrix"> + <source id="_6_15_t_RightHandIndex1_pose_matrix-input"> + <float_array id="_6_15_t_RightHandIndex1_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_RightHandIndex1_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightHandIndex1_pose_matrix-output"> + <float_array id="_6_15_t_RightHandIndex1_pose_matrix-output-array" count="2224">0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1 0.9922779 -0.1240345 0 0 0.1240345 0.9922779 0 0.04633378 0 0 1 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_RightHandIndex1_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RightHandIndex1_pose_matrix-interpolation"> + <Name_array id="_6_15_t_RightHandIndex1_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_RightHandIndex1_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_RightHandIndex1_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_RightHandIndex1_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_RightHandIndex1_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_RightHandIndex1_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_RightHandIndex1_pose_matrix-sampler" target="RightHandIndex1/transform"/> + </animation> + <animation id="_6_15_t_RThumb_pose_matrix"> + <source id="_6_15_t_RThumb_pose_matrix-input"> + <float_array id="_6_15_t_RThumb_pose_matrix-input-array" count="139">0.04166662 0.08333331 0.125 0.1666666 0.2083333 0.25 0.2916666 0.3333333 0.375 0.4166666 0.4583333 0.5 0.5416667 0.5833333 0.625 0.6666667 0.7083333 0.75 0.7916667 0.8333333 0.875 0.9166667 0.9583333 1 1.041667 1.083333 1.125 1.166667 1.208333 1.25 1.291667 1.333333 1.375 1.416667 1.458333 1.5 1.541667 1.583333 1.625 1.666667 1.708333 1.75 1.791667 1.833333 1.875 1.916667 1.958333 2 2.041667 2.083333 2.125 2.166667 2.208333 2.25 2.291667 2.333333 2.375 2.416667 2.458333 2.5 2.541667 2.583333 2.625 2.666667 2.708333 2.75 2.791667 2.833333 2.875 2.916667 2.958333 3 3.041667 3.083333 3.125 3.166667 3.208333 3.25 3.291667 3.333333 3.375 3.416667 3.458333 3.5 3.541667 3.583333 3.625 3.666667 3.708333 3.75 3.791667 3.833333 3.875 3.916667 3.958333 4 4.041666 4.083333 4.125 4.166666 4.208333 4.25 4.291666 4.333333 4.375 4.416666 4.458333 4.5 4.541666 4.583333 4.625 4.666666 4.708333 4.75 4.791666 4.833333 4.875 4.916666 4.958333 5 5.041666 5.083333 5.125 5.166666 5.208333 5.25 5.291666 5.333333 5.375 5.416666 5.458333 5.5 5.541666 5.583333 5.625 5.666666 5.708333 5.75 5.791666</float_array> + <technique_common> + <accessor source="#_6_15_t_RThumb_pose_matrix-input-array" count="139" stride="1"> + <param name="TIME" type="float"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RThumb_pose_matrix-output"> + <float_array id="_6_15_t_RThumb_pose_matrix-output-array" count="2224">0.6889623 -0.2250815 -0.6889623 0 -0.1624361 0.8784301 -0.449416 0 0.7063605 0.4215431 0.5686441 0 0 0 0 1 0.6898725 -0.219437 -0.6898719 0 -0.1748799 0.8742141 -0.4529532 0 0.7024904 0.4331247 0.5647212 0 0 0 0 1 0.6905243 -0.2152999 -0.690523 0 -0.1870757 0.8690276 -0.4580323 0 0.6986978 0.4454627 0.5598073 0 0 0 0 1 0.6903385 -0.2164843 -0.6903384 0 -0.185088 0.8695847 -0.4577823 0 0.6994104 0.4437982 0.5602391 0 0 0 0 1 0.6905867 -0.2149 -0.6905852 0 -0.1788102 0.8744644 -0.4509311 0 0.7007973 0.4348907 0.5654671 0 0 0 0 1 0.6904573 -0.2157249 -0.6904572 0 -0.1805162 0.8729147 -0.4532477 0 0.7004872 0.437587 0.5637686 0 0 0 0 1 0.689463 -0.2219964 -0.6894623 0 -0.1757681 0.872144 -0.4565854 0 0.7026707 0.4359843 0.5622912 0 0 0 0 1 0.6896291 -0.22096 -0.689629 0 -0.1753683 0.8730089 -0.4550839 0 0.7026076 0.4347782 0.5633029 0 0 0 0 1 0.6891719 -0.2237982 -0.6891707 0 -0.1776754 0.8698781 -0.4601559 0 0.7024766 0.4395753 0.5597321 0 0 0 0 1 0.6882448 -0.229431 -0.6882444 0 -0.176976 0.8669206 -0.46597 0 0.7035613 0.4425043 0.5560497 0 0 0 0 1 0.6873663 -0.2346346 -0.6873674 0 -0.1750429 0.8649712 -0.4703027 0 0.7049022 0.443589 0.5534811 0 0 0 0 1 0.6870649 -0.2363998 -0.6870639 0 -0.1720101 0.8657946 -0.4699065 0 0.705942 0.4410382 0.554194 0 0 0 0 1 0.6867085 -0.2384602 -0.6867082 0 -0.1658626 0.8683484 -0.4673976 0 0.7077577 0.4348651 0.5567506 0 0 0 0 1 0.6864135 -0.2401542 -0.6864126 0 -0.1670625 0.8665763 -0.4702504 0 0.7077615 0.4374601 0.5547089 0 0 0 0 1 0.6864629 -0.2398737 -0.6864613 0 -0.1710742 0.8642532 -0.473075 0 0.7067546 0.4421842 0.5522416 0 0 0 0 1 0.6863784 -0.2403548 -0.6863775 0 -0.1729054 0.8628083 -0.4750426 0 0.706391 0.4447373 0.5506543 0 0 0 0 1 0.6863288 -0.2406368 -0.6863283 0 -0.1742953 0.8617573 -0.4764401 0 0.7060976 0.4466184 0.5495071 0 0 0 0 1 0.687187 -0.2356902 -0.6871855 0 -0.1783882 0.8622064 -0.4741072 0 0.7042382 0.4483861 0.5504527 0 0 0 0 1 0.6877204 -0.2325542 -0.6877202 0 -0.1822102 0.8616898 -0.4735926 0 0.7027375 0.4510089 0.5502279 0 0 0 0 1 0.6873672 -0.2346336 -0.6873669 0 -0.1814031 0.8609293 -0.4752826 0 0.7032915 0.4513842 0.5492113 0 0 0 0 1 0.687111 -0.2361308 -0.6871103 0 -0.1751906 0.8639625 -0.4720984 0 0.7051145 0.4447594 0.5522702 0 0 0 0 1 0.6865686 -0.2392627 -0.6865688 0 -0.1720278 0.8640313 -0.4731344 0 0.7064203 0.4429482 0.552057 0 0 0 0 1 0.6863557 -0.2404806 -0.6863561 0 -0.1754773 0.8611051 -0.477185 0 0.7057785 0.4479587 0.5488256 0 0 0 0 1 0.6863171 -0.2407071 -0.6863153 0 -0.1749877 0.8612751 -0.4770579 0 0.7059376 0.4475098 0.5489871 0 0 0 0 1 0.6864192 -0.2401219 -0.6864182 0 -0.1691771 0.8652848 -0.47187 0 0.7072536 0.4400269 0.5533249 0 0 0 0 1 0.6869106 -0.2372941 -0.6869098 0 -0.1736953 0.8641915 -0.4722319 0 0.7056794 0.4436942 0.5524054 0 0 0 0 1 0.6872831 -0.2351257 -0.6872828 0 -0.1843456 0.8587279 -0.4781243 0 0.7026084 0.4553043 0.5468448 0 0 0 0 1 0.6870829 -0.2362939 -0.6870823 0 -0.1797699 0.860953 -0.4758597 0 0.7039884 0.4504718 0.5490676 0 0 0 0 1 0.686748 -0.2382349 -0.6867468 0 -0.1762567 0.8619956 -0.4752863 0 0.7052024 0.4474456 0.5499833 0 0 0 0 1 0.6872294 -0.2354394 -0.6872292 0 -0.1828553 0.8594979 -0.4773125 0 0.7030501 0.4536867 0.5476208 0 0 0 0 1 0.6871916 -0.2356602 -0.6871913 0 -0.1857674 0.8574733 -0.4798228 0 0.7023233 0.4573879 0.5454704 0 0 0 0 1 0.6871307 -0.236019 -0.687129 0 -0.1845061 0.8580705 -0.4792415 0 0.7027152 0.456081 0.5460596 0 0 0 0 1 0.6867133 -0.2384309 -0.6867134 0 -0.1862329 0.8554461 -0.4832486 0 0.7026677 0.4597419 0.5430426 0 0 0 0 1 0.6861445 -0.2416859 -0.6861439 0 -0.1884512 0.8519479 -0.4885396 0 0.702632 0.4645134 0.5390133 0 0 0 0 1 0.6866707 -0.2386803 -0.6866694 0 -0.1916852 0.8516922 -0.4877263 0 0.7012417 0.4665318 0.5390806 0 0 0 0 1 0.6864017 -0.2402222 -0.6864006 0 -0.188771 0.8526561 -0.4871786 0 0.7022948 0.4639727 0.5399176 0 0 0 0 1 0.6864601 -0.2398838 -0.6864605 0 -0.1941182 0.8493092 -0.4909093 0 0.7007784 0.4702442 0.5364512 0 0 0 0 1 0.686935 -0.2371508 -0.686935 0 -0.2045434 0.8439466 -0.4958992 0 0.6973394 0.4811585 0.5312288 0 0 0 0 1 0.6877912 -0.2321369 -0.6877903 0 -0.2080844 0.8446782 -0.4931728 0 0.6954451 0.4823185 0.5326582 0 0 0 0 1 0.6882932 -0.229141 -0.6882926 0 -0.2030095 0.8500521 -0.4860024 0 0.6964477 0.474242 0.5385673 0 0 0 0 1 0.6883045 -0.2290738 -0.6883036 0 -0.203741 0.8495955 -0.4864946 0 0.6962229 0.4750921 0.5381087 0 0 0 0 1 0.6888753 -0.2256156 -0.6888747 0 -0.2194907 0.8407943 -0.4948621 0 0.6908506 0.4920999 0.5296819 0 0 0 0 1 0.6887535 -0.2263562 -0.6887534 0 -0.2274696 0.8345696 -0.5017479 0 0.6883865 0.5022512 0.5233237 0 0 0 0 1 0.6880532 -0.2305744 -0.6880538 0 -0.2203633 0.8370095 -0.5008542 0 0.6913918 0.4962361 0.525097 0 0 0 0 1 0.6874864 -0.2339348 -0.6874859 0 -0.2100123 0.8421949 -0.4965909 0 0.695167 0.4857799 0.5298683 0 0 0 0 1 0.687154 -0.2358828 -0.6871524 0 -0.2026038 0.8460843 -0.4930445 0 0.6976896 0.4780173 0.5335995 0 0 0 0 1 0.6872138 -0.2355295 -0.6872138 0 -0.2055723 0.8442664 -0.4949285 0 0.6967617 0.4813938 0.5317732 0 0 0 0 1 0.687698 -0.2326854 -0.6876982 0 -0.204093 0.8470845 -0.4907073 0 0.696719 0.4778128 0.5350489 0 0 0 0 1 0.6861639 -0.2415747 -0.6861637 0 -0.1776525 0.859041 -0.4800915 0 0.7054208 0.4513203 0.5465266 0 0 0 0 1 0.6844294 -0.2512224 -0.6844292 0 -0.1510944 0.8695034 -0.470249 0 0.7132507 0.4252658 0.5571554 0 0 0 0 1 0.6836061 -0.2556688 -0.6836051 0 -0.1461697 0.869701 -0.4714387 0 0.7150642 0.4222007 0.5571619 0 0 0 0 1 0.6836253 -0.2555648 -0.6836248 0 -0.1439422 0.8710753 -0.4695831 0 0.7154977 0.4194214 0.5587025 0 0 0 0 1 0.6836942 -0.2551974 -0.6836931 0 -0.1318321 0.8782587 -0.4596539 0 0.7177619 0.4043955 0.5668172 0 0 0 0 1 0.6832482 -0.2575737 -0.6832478 0 -0.1196146 0.8835951 -0.4527162 0 0.7203221 0.391044 0.5729053 0 0 0 0 1 0.6839154 -0.2540042 -0.6839163 0 -0.1304205 0.8797681 -0.4571632 0 0.7178092 0.4018577 0.5685597 0 0 0 0 1 0.6849114 -0.2485828 -0.6849108 0 -0.1470418 0.8735067 -0.464074 0 0.713635 0.4185601 0.5617226 0 0 0 0 1 0.6853963 -0.2458939 -0.6853961 0 -0.1502313 0.8732568 -0.4635224 0 0.7125042 0.4206646 0.5615861 0 0 0 0 1 0.6858236 -0.2435023 -0.6858225 0 -0.1484981 0.8757163 -0.4594225 0 0.7124564 0.4169261 0.5644273 0 0 0 0 1 0.6850109 -0.2480345 -0.6850101 0 -0.1492842 0.8725194 -0.4652138 0 0.7130737 0.4209377 0.5606577 0 0 0 0 1 0.6846364 -0.2500909 -0.6846366 0 -0.1494875 0.8711493 -0.4677095 0 0.7133907 0.4225556 0.5590351 0 0 0 0 1 0.6847868 -0.2492685 -0.6847861 0 -0.1498662 0.8714256 -0.4670733 0 0.7131668 0.422472 0.5593839 0 0 0 0 1 0.6853727 -0.2460274 -0.6853718 0 -0.1529785 0.8715465 -0.465837 0 0.7119421 0.4241192 0.5596973 0 0 0 0 1 0.685458 -0.2455505 -0.6854577 0 -0.1557246 0.870194 -0.4674529 0 0.7112644 0.4271619 0.5582431 0 0 0 0 1 0.6852229 -0.2468591 -0.6852226 0 -0.1540444 0.8704046 -0.4676173 0 0.7118566 0.4259768 0.5583938 0 0 0 0 1 0.685289 -0.2464952 -0.6852875 0 -0.1548458 0.8701459 -0.4678341 0 0.711619 0.4267154 0.5581327 0 0 0 0 1 0.6851784 -0.2471074 -0.6851776 0 -0.1516956 0.871654 -0.4660553 0 0.7124035 0.4232695 0.5597534 0 0 0 0 1 0.6855351 -0.2451193 -0.6855348 0 -0.1508554 0.8733564 -0.463132 0 0.7122388 0.4209098 0.5617389 0 0 0 0 1 0.6850176 -0.2479981 -0.6850165 0 -0.150607 0.8717589 -0.466212 0 0.712789 0.4225318 0.55982 0 0 0 0 1 0.6848412 -0.2489684 -0.6848409 0 -0.1476829 0.8728966 -0.4650174 0 0.7135699 0.4196023 0.5610272 0 0 0 0 1 0.6857737 -0.243784 -0.6857723 0 -0.1506945 0.8742566 -0.4614827 0 0.7120431 0.4198149 0.5628052 0 0 0 0 1 0.6857448 -0.243943 -0.6857445 0 -0.1587053 0.8693758 -0.4679723 0 0.7103284 0.429741 0.5574549 0 0 0 0 1 0.6857585 -0.2438691 -0.6857572 0 -0.1588066 0.8693593 -0.4679687 0 0.7102925 0.4298164 0.5574425 0 0 0 0 1 0.6862333 -0.2411825 -0.6862322 0 -0.1598075 0.8703867 -0.4657129 0 0.7096092 0.4292528 0.5587456 0 0 0 0 1 0.686379 -0.2403505 -0.6863784 0 -0.163285 0.868778 -0.4675069 0 0.708676 0.4329623 0.5570653 0 0 0 0 1 0.686342 -0.2405617 -0.6863415 0 -0.1606529 0.8702514 -0.4656748 0 0.7093132 0.4298749 0.5586431 0 0 0 0 1 0.6860246 -0.2423664 -0.6860237 0 -0.1556841 0.8721496 -0.4638074 0 0.7107267 0.4249863 0.5605835 0 0 0 0 1 0.6853544 -0.2461284 -0.6853539 0 -0.1572632 0.868915 -0.4693133 0 0.7110257 0.4294269 0.5568077 0 0 0 0 1 0.6850221 -0.2479692 -0.6850225 0 -0.158279 0.8671733 -0.4721843 0 0.7111204 0.4318815 0.5547846 0 0 0 0 1 0.6850613 -0.2477543 -0.685061 0 -0.1587955 0.8669912 -0.4723454 0 0.7109674 0.4323703 0.5545998 0 0 0 0 1 0.6846219 -0.2501736 -0.6846209 0 -0.1540837 0.8683561 -0.4713978 0 0.712426 0.4282183 0.5559479 0 0 0 0 1 0.6847035 -0.2497278 -0.6847021 0 -0.1553484 0.8678678 -0.4718815 0 0.7120729 0.4294663 0.5554374 0 0 0 0 1 0.6847429 -0.2495115 -0.6847415 0 -0.157929 0.8664382 -0.4736488 0 0.711467 0.4324681 0.5538823 0 0 0 0 1 0.684385 -0.2514641 -0.684385 0 -0.1577868 0.8653218 -0.4757325 0 0.711843 0.4335711 0.5525355 0 0 0 0 1 0.6840328 -0.2533737 -0.6840327 0 -0.1568399 0.8647179 -0.4771414 0 0.7123905 0.433664 0.5517563 0 0 0 0 1 0.6842193 -0.2523639 -0.6842194 0 -0.1503416 0.8692532 -0.4709523 0 0.7136113 0.4251013 0.5568191 0 0 0 0 1 0.6839796 -0.2536613 -0.6839793 0 -0.1450055 0.8716146 -0.4682534 0 0.7149441 0.4194566 0.5593844 0 0 0 0 1 0.6840015 -0.2535467 -0.6839999 0 -0.1440095 0.8722676 -0.4673439 0 0.7151245 0.4181665 0.5601192 0 0 0 0 1 0.6840461 -0.2533026 -0.6840457 0 -0.1422581 0.8734374 -0.4656925 0 0.7154323 0.4158661 0.5614372 0 0 0 0 1 0.6843577 -0.2516145 -0.6843569 0 -0.1403623 0.8755572 -0.4622746 0 0.7155086 0.4124191 0.5638772 0 0 0 0 1 0.6840995 -0.2530162 -0.6840983 0 -0.1423949 0.8735316 -0.465474 0 0.715354 0.4158427 0.5615543 0 0 0 0 1 0.6847402 -0.2495238 -0.6847398 0 -0.1490858 0.8717321 -0.4667509 0 0.7133752 0.4216881 0.5597096 0 0 0 0 1 0.6852767 -0.2465613 -0.685276 0 -0.1544415 0.8703481 -0.4675916 0 0.7117187 0.4262647 0.55835 0 0 0 0 1 0.6854807 -0.245423 -0.6854805 0 -0.1550779 0.8706595 -0.4668006 0 0.7113837 0.4262857 0.5587607 0 0 0 0 1 0.6855381 -0.2451018 -0.6855381 0 -0.1540347 0.8714786 -0.465616 0 0.7115551 0.4247942 0.5596776 0 0 0 0 1 0.6854137 -0.2458001 -0.6854124 0 -0.1519914 0.8722712 -0.4648025 0 0.712114 0.4227588 0.5605072 0 0 0 0 1 0.6851664 -0.247173 -0.6851659 0 -0.1545342 0.86992 -0.468357 0 0.7118048 0.426784 0.5578433 0 0 0 0 1 0.6855469 -0.2450537 -0.6855465 0 -0.1619874 0.8666998 -0.4717959 0 0.7097784 0.4344882 0.5544677 0 0 0 0 1 0.6855167 -0.2452231 -0.685516 0 -0.1535919 0.871669 -0.4654058 0 0.7116714 0.4243332 0.5598794 0 0 0 0 1 0.6852725 -0.2465812 -0.6852731 0 -0.1407132 0.8783802 -0.4567798 0 0.7145636 0.4094456 0.5672327 0 0 0 0 1 0.6855867 -0.2448285 -0.6855871 0 -0.1445551 0.8772162 -0.4578157 0 0.7134945 0.4129776 0.5660166 0 0 0 0 1 0.685176 -0.2471215 -0.6851749 0 -0.1455762 0.8752458 -0.4612506 0 0.7136815 0.415783 0.5637225 0 0 0 0 1 0.6847984 -0.2492057 -0.6847975 0 -0.1468738 0.8732278 -0.4646517 0 0.713778 0.4187715 0.5613832 0 0 0 0 1 0.6860719 -0.242096 -0.6860719 0 -0.1586479 0.8705334 -0.4658351 0 0.7100254 0.4284403 0.5588405 0 0 0 0 1 0.6870737 -0.2363448 -0.6870739 0 -0.1699646 0.8671022 -0.4682367 0 0.7064287 0.4384914 0.555593 0 0 0 0 1 0.6890965 -0.2242637 -0.6890947 0 -0.1939584 0.8591382 -0.4735627 0 0.6982305 0.459986 0.5485314 0 0 0 0 1 0.6909363 -0.2126387 -0.6909351 0 -0.2250636 0.8449913 -0.4851142 0 0.6869884 0.4906874 0.535978 0 0 0 0 1 0.6913202 -0.2101253 -0.6913201 0 -0.2328923 0.8409168 -0.4884872 0 0.6839864 0.4987042 0.5324063 0 0 0 0 1 0.6905829 -0.2149208 -0.6905824 0 -0.225795 0.8430382 -0.4881628 0 0.6871038 0.4930469 0.5336598 0 0 0 0 1 0.6905572 -0.2150828 -0.6905577 0 -0.2245176 0.8438518 -0.4873456 0 0.6875482 0.4915823 0.5344381 0 0 0 0 1 0.6901231 -0.2178547 -0.6901227 0 -0.2172127 0.8472911 -0.4846817 0 0.690325 0.4843934 0.5374144 0 0 0 0 1 0.689301 -0.2229982 -0.689301 0 -0.2003437 0.8556726 -0.4771652 0 0.696223 0.4670076 0.5451397 0 0 0 0 1 0.6889647 -0.2250691 -0.688964 0 -0.190651 0.8608139 -0.4718598 0 0.6992707 0.4564465 0.5501607 0 0 0 0 1 0.6888213 -0.2259457 -0.6888204 0 -0.1901744 0.8605881 -0.4724633 0 0.6995417 0.4564389 0.5498224 0 0 0 0 1 0.688941 -0.225212 -0.688941 0 -0.1852959 0.8641939 -0.4677973 0 0.7007322 0.4499428 0.5536476 0 0 0 0 1 0.6889777 -0.2249872 -0.6889777 0 -0.1882991 0.8623935 -0.4699156 0 0.6998949 0.4534953 0.5518051 0 0 0 0 1 0.6887541 -0.2263519 -0.6887542 0 -0.190031 0.8604332 -0.4728032 0 0.699647 0.4565299 0.5496129 0 0 0 0 1 0.6884822 -0.2280016 -0.6884819 0 -0.1818616 0.8646948 -0.468219 0 0.7020815 0.4475689 0.5538623 0 0 0 0 1 0.6887475 -0.2263936 -0.6887472 0 -0.1763909 0.8691222 -0.4620744 0 0.7032161 0.4397414 0.5586719 0 0 0 0 1 0.6891905 -0.223684 -0.6891893 0 -0.1799784 0.8685004 -0.4618601 0 0.7018719 0.4423487 0.5583038 0 0 0 0 1 0.6906691 -0.2143701 -0.6906674 0 -0.19439 0.8648705 -0.4628298 0 0.6965547 0.4539211 0.5556679 0 0 0 0 1 0.6904761 -0.2156031 -0.6904765 0 -0.1774946 0.8748651 -0.4506734 0 0.7012404 0.4337352 0.5658052 0 0 0 0 1 0.690097 -0.2180176 -0.6900973 0 -0.1777243 0.8732952 -0.4536181 0 0.7015554 0.4356876 0.5639114 0 0 0 0 1 0.6888738 -0.2256222 -0.688874 0 -0.1716805 0.8725069 -0.4574466 0 0.7042574 0.4333892 0.5623123 0 0 0 0 1 0.6886575 -0.2269399 -0.6886574 0 -0.1701923 0.8726341 -0.4577599 0 0.7048299 0.432444 0.5623226 0 0 0 0 1 0.6891122 -0.224164 -0.6891115 0 -0.1743983 0.8716995 -0.4579573 0 0.7033558 0.435764 0.5616049 0 0 0 0 1 0.6884081 -0.2284523 -0.6884066 0 -0.167802 0.8731927 -0.4575772 0 0.7056462 0.4305158 0.5627782 0 0 0 0 1 0.6882108 -0.229636 -0.68821 0 -0.1657751 0.8737194 -0.4573104 0 0.7063174 0.4288142 0.5632351 0 0 0 0 1 0.6886451 -0.2270168 -0.6886444 0 -0.169099 0.8732578 -0.4569751 0 0.7051052 0.4311428 0.5629764 0 0 0 0 1 0.6890166 -0.2247523 -0.6890155 0 -0.1686223 0.8748961 -0.4540078 0 0.7048563 0.4290024 0.5649198 0 0 0 0 1 0.6886718 -0.2268517 -0.6886722 0 -0.1682156 0.8738958 -0.4560806 0 0.7052904 0.4299353 0.5636673 0 0 0 0 1 0.6892014 -0.2236106 -0.6892021 0 -0.1732293 0.8727527 -0.4563925 0 0.7035573 0.4339364 0.5627666 0 0 0 0 1 0.6896619 -0.2207599 -0.6896603 0 -0.1757982 0.8728613 -0.4552011 0 0.702468 0.4351759 0.56317 0 0 0 0 1 0.6897343 -0.2203074 -0.6897327 0 -0.1751194 0.8735501 -0.4541401 0 0.7025665 0.4340216 0.5639375 0 0 0 0 1 0.6893991 -0.2223888 -0.6893997 0 -0.1744043 0.8727551 -0.4559404 0 0.7030731 0.4345592 0.562891 0 0 0 0 1 0.6891996 -0.2236235 -0.6891997 0 -0.1765389 0.8706928 -0.4590511 0 0.7027359 0.4380484 0.5606029 0 0 0 0 1 0.6894933 -0.2218056 -0.6894934 0 -0.1773941 0.8712466 -0.4576685 0 0.7022322 0.4378715 0.5613718 0 0 0 0 1 0.6889071 -0.2254221 -0.6889063 0 -0.1704577 0.873377 -0.456242 0 0.7045218 0.4317377 0.5632507 0 0 0 0 1 0.6887708 -0.2262513 -0.6887705 0 -0.1663922 0.8753604 -0.4539356 0 0.705626 0.4272637 0.5652764 0 0 0 0 1 0.6891778 -0.223761 -0.689177 0 -0.1704763 0.8743537 -0.4543603 0 0.7042526 0.4306234 0.5644392 0 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_RThumb_pose_matrix-output-array" count="139" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_RThumb_pose_matrix-interpolation"> + <Name_array id="_6_15_t_RThumb_pose_matrix-interpolation-array" count="139">LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array> + <technique_common> + <accessor source="#_6_15_t_RThumb_pose_matrix-interpolation-array" count="139" stride="1"> + <param name="INTERPOLATION" type="name"/> + </accessor> + </technique_common> + </source> + <sampler id="_6_15_t_RThumb_pose_matrix-sampler"> + <input semantic="INPUT" source="#_6_15_t_RThumb_pose_matrix-input"/> + <input semantic="OUTPUT" source="#_6_15_t_RThumb_pose_matrix-output"/> + <input semantic="INTERPOLATION" source="#_6_15_t_RThumb_pose_matrix-interpolation"/> + </sampler> + <channel source="#_6_15_t_RThumb_pose_matrix-sampler" target="RThumb/transform"/> + </animation> + </library_animations> + <library_controllers> + <controller id="_6_15_t_human-skin" name="16_15_t"> + <skin source="#_6-mesh"> + <bind_shape_matrix>1.94707e-7 -1 0 0.03407181 1 1.94707e-7 0 -2.57235e-9 0 0 1 -0.2026376 0 0 0 1</bind_shape_matrix> + <source id="_6_15_t_human-skin-joints"> + <Name_array id="_6_15_t_human-skin-joints-array" count="31">Hips LHipJoint LeftUpLeg LeftLeg LeftFoot LeftToeBase RHipJoint RightUpLeg RightLeg RightFoot RightToeBase LowerBack Spine Spine1 Neck1 Head LeftShoulder LeftArm LeftForeArm LeftHand LeftFingerBase LeftHandIndex1 LThumb RightShoulder RightArm RightForeArm RightHand RightFingerBase RightHandIndex1 RThumb Neck</Name_array> + <technique_common> + <accessor source="#_6_15_t_human-skin-joints-array" count="31" stride="1"> + <param name="JOINT" type="name"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_human-skin-bind_poses"> + <float_array id="_6_15_t_human-skin-bind_poses-array" count="496">0 1 0 0 3.25841e-7 0 1 0 1 0 -3.25841e-7 0 0 0 0 1 -0.6560893 -0.4072819 -0.635349 0 0.2962061 0.635349 -0.7131575 0 0.6941246 -0.6560893 -0.2962062 0 0 0 0 1 1.50029e-7 -0.9998477 0.01745319 0.09945839 0 -0.01745319 -0.9998478 -0.1077905 1 0 0 -0.04548442 0 0 0 1 2.54275e-7 -0.9998217 0.01888191 0.1002356 0 -0.01888191 -0.9998219 -0.5437983 1 2.21906e-7 0 -0.04548442 0 0 0 1 0.006396591 0.9999678 0.004818618 -0.07703965 0.9611586 -0.004818618 -0.2759537 -0.3169288 -0.2759217 0.006396651 -0.9611589 -0.940946 0 0 0 1 0 0.9999999 -1.49012e-7 -0.08086854 0.9999998 0 1.19209e-7 -0.1772382 0 -1.25263e-7 -1 -1.029312 0 0 0 1 0.6839453 -0.3918986 0.6153328 0 0.3023595 -0.6153328 -0.7279728 0 0.6639258 0.6839451 -0.3023597 0 0 0 0 1 0 -0.9998477 -0.01745301 -0.09446257 -2.84639e-7 0.01745301 -0.9998477 -0.1078777 1 0 -3.58094e-7 -0.04548442 0 0 0 1 -2.26912e-7 -0.9998214 -0.01890075 -0.09525823 -3.28567e-7 0.01890075 -0.9998215 -0.5494438 1 -3.33626e-7 -4.07769e-7 -0.04548448 0 0 0 1 -0.007837533 0.9999536 -0.005614995 0.07132428 0.9468318 0.005614757 -0.3216806 -0.3614925 -0.3216339 -0.007837593 -0.9468318 -0.9244902 0 0 0 1 1.84635e-7 1 -1.49012e-7 0.0757212 1 -2.94531e-7 0 -0.1830382 1.19209e-7 -1.35042e-7 -1 -1.037954 0 0 0 1 -9.24448e-6 1 1.61937e-4 0 0.195745 -1.56995e-4 0.9806548 0 0.9806548 4.0764e-5 -0.195745 0 0 0 0 1 2.01789e-4 0.9996597 -0.02608197 0.003450393 -0.01547008 0.02608197 0.9995401 -0.1312192 0.9998803 2.01801e-4 0.01547008 -0.02831965 0 0 0 1 -1.7136e-4 0.9999979 -0.001963734 -0.002923429 -0.01547527 0.001960813 0.9998784 -0.2642017 0.9998802 2.01735e-4 0.01547491 -0.0283209 0 0 0 1 -0.0058676 0.9999821 0.001065433 -0.004200935 -0.1530427 -0.001950919 0.9882177 -0.3673031 0.988202 0.00563544 0.1530515 -0.0966168 0 0 0 1 -8.17998e-4 0.9999995 4.48226e-5 -0.003850102 -0.06252187 -9.58763e-5 0.9980435 -0.4659448 0.9980431 8.13599e-4 0.06252187 -0.05443882 0 0 0 1 0.1529697 0.2615976 -0.952978 0.2475519 -0.1974217 0.9529778 0.229908 -0.059336 0.9683102 0.1529696 0.1974218 -0.07622617 0 0 0 1 -1.3411e-7 0 -1 0.3138288 0 0.9999999 0 -0.2074941 1 0 -1.63913e-7 0.01804256 0 0 0 1 -1.62921e-7 0 -1 0.3138288 0 0.9999999 0 -0.5269862 1 0 -1.92723e-7 0.01804256 0 0 0 1 -1.62921e-7 0 -1 0.3138288 0 0.9999999 0 -0.7595722 1 0 -1.92723e-7 0.01804256 0 0 0 1 -1.62921e-7 0 -1 0.3138288 0 0.9999999 0 -0.7595722 1 0 -1.92723e-7 0.01804256 0 0 0 1 -1.62921e-7 0 -1 0.3138288 0 0.9999999 0 -0.7923806 1 0 -1.92723e-7 0.01804256 0 0 0 1 -0.5000002 0.5000003 -0.7071066 -0.1668972 0.7071069 0.7071067 0 -0.5243406 0.4999995 -0.4999998 -0.7071071 0.6107178 0 0 0 1 -0.09554469 0.3375461 0.9364475 -0.2466346 -0.1350628 -0.9364473 0.3237658 -0.07916855 0.9862197 -0.09554517 0.1350625 -0.05930298 0 0 0 1 1.78814e-7 0 1 -0.3304987 -3.05474e-7 -0.9999998 0 -0.1871497 1 -3.27825e-7 -1.78814e-7 0.003261148 0 0 0 1 1.62921e-7 0 1 -0.3304987 -3.05474e-7 -0.9999998 0 -0.5155097 1 -3.27825e-7 -1.62921e-7 0.003261148 0 0 0 1 1.62921e-7 0 1 -0.3304987 -3.05474e-7 -0.9999998 0 -0.7487187 1 -3.27825e-7 -1.62921e-7 0.003261148 0 0 0 1 1.62921e-7 0 1 -0.3304987 -3.05474e-7 -0.9999998 0 -0.7487187 1 -3.27825e-7 -1.62921e-7 0.003261148 0 0 0 1 1.62921e-7 0 1 -0.3304987 -3.05474e-7 -0.9999998 0 -0.7950525 1 -3.27825e-7 -1.62921e-7 0.003261148 0 0 0 1 0.5000002 0.4999995 0.7071071 0.1422918 0.7071064 -0.7071072 1.26441e-7 -0.5271184 0.5000005 0.4999995 -0.7071068 0.6096877 0 0 0 1 -0.00416392 0.9999808 -0.004586637 -0.002132594 0.1314914 0.005094349 0.9913043 -0.2655045 0.9913086 0.003524601 -0.1315101 0.01076781 0 0 0 1</float_array> + <technique_common> + <accessor source="#_6_15_t_human-skin-bind_poses-array" count="31" stride="16"> + <param name="TRANSFORM" type="float4x4"/> + </accessor> + </technique_common> + </source> + <source id="_6_15_t_human-skin-weights"> + <float_array id="_6_15_t_human-skin-weights-array" count="8577">1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.2500001 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.2590081 0.7409919 0.25 0.75 0.2500001 0.7499999 0.25 0.75 0.25 0.75 0.25 0.75 0.75 0.25 0.75 0.25 0.7500019 0.249998 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.7501522 0.2498478 0.75 0.25 0.2610902 0.7389098 0.25 0.75 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 0.75 0.25 0.5000005 0.4999995 0.5 0.5 0.5 0.5 0.5 0.5 0.75 0.25 0.75 0.25 0.5002002 0.4997999 0.5 0.5 0.75 0.25 0.7525593 0.2474407 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.2500247 0.7499753 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 0.25 0.75 0.2500001 0.75 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 0.75 0.25 0.75 0.25 0.5 0.5 0.5 0.5 0.7663748 0.2336251 0.75 0.25 0.2581112 0.7418888 0.2500001 0.75 1 1 0.2503003 0.7496997 0.25 0.75 0.7500011 0.2499988 0.7505013 0.2494987 0.7997569 0.2002431 0.75 0.25 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 0.05372983 0.9462702 0.75 0.25 0.75 0.25 0.5 0.5 0.5 0.5 0.7535153 0.2464847 0.7500005 0.2499994 0.2500087 0.7499914 0.2500001 0.75 1 0.2500599 0.7499401 0.7500017 0.2499983 0.7500022 0.2499977 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.333 0.333 0.334 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.25 0.25 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.5 0.5 0.5 0.5 0.5000001 0.4999998 0.5 0.5 0.5026666 0.4973334 0.5 0.5 0.5 0.5 0.5 0.5 0.5000035 0.4999966 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 1 1 1 1 0.5 0.5 1 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.1078741 0.8921259 0.1 0.9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.25 0.75 0.5048723 0.4951277 0.25 0.75 0.5000053 0.4999947 0.2500001 0.7499999 0.1 0.8999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.2500008 0.7499992 0.5 0.5 0.1 0.9 0.1001715 0.8998284 0.2500001 0.75 0.5 0.5 0.25 0.75 0.5 0.5 0.1 0.9 0.1 0.9 0.25 0.75 0.5000163 0.4999837 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.2555293 0.7444707 0.75 0.25 0.7510995 0.2489005 0.75 0.25 0.75 0.25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.1 0.9 1 1 1 0.1 0.9 1 1 1 1 1 0.1 0.8999999 0.1 0.9 1 0.1 0.9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.75 0.25 0.75 0.25 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.75 0.25 1 1 0.75 0.25 1 1 1 1 1 0.5 0.5 0.5 0.5 1 0.75 0.25 0.75 0.25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 1 1 0.75 0.25 0.75 0.25 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 0.75 0.25 1 1 0.5 0.5 1 1 0.75 0.25 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 0.5 0.5 1 1 1 1 1 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 0.5 0.5 0.5 0.5 0.75 0.25 1 1 1 1 1 1 1 1 0.75 0.25 1 1 0.1001034 0.8998966 1 1 1 1 0.1 0.9 1 1 1 1 0.1 0.9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5466113 0.4533888 1 0.5 0.5 1 1 1 1 1 0.5004752 0.4995248 0.501842 0.498158 0.5009617 0.4990383 0.5001819 0.4998181 1 1 0.505042 0.494958 0.5009881 0.4990118 0.5071658 0.4928342 0.5050066 0.4949935 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.1206409 0.8793591 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.1 0.9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.75 0.25 1 0.5 0.5 0.5032286 0.4967714 1 1 1 1 1 1 0.5 0.5 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.75 0.25 0.75 0.25 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 0.75 0.25 0.5 0.5 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 0.5 0.5 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 0.5 0.5 1 0.75 0.25 0.5 0.5 1 1 1 1 1 0.75 0.25 0.5 0.5 1 1 1 1 1 0.5 0.5 1 1 1 1 0.3110036 0.6889964 1 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 0.2504206 0.7495794 1 1 1 1 1 1 0.2507733 0.7492268 1 1 1 1 0.2500001 0.75 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.25 0.75 0.25 0.75 1 1 1 1 1 0.5 0.5 0.5 0.5 1 0.2596866 0.7403134 1 1 1 1 1 1 1 1 1 1 0.3019101 0.6980899 0.28 0.72 0.2705032 0.7294968 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.3111419 0.6888581 0.75 0.25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.75 0.25 1 1 1 1 1 1 1 0.75 0.25 0.5 0.5 1 1 1 1 1 1 1 0.25 0.75 0.25 0.75 0.5 0.5 0.5 0.5 0.75 0.25 0.5 0.5 0.5 0.5 0.75 0.25 1 1 0.75 0.25 0.5 0.5 1 1 1 1 1 1 1 1 1 1 0.75 0.25 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.2500001 0.7499999 0.2500007 0.7499994 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.500002 0.499998 1 1 1 1 1 0.5008446 0.4991554 1 1 1 1 1 1 1 1 1 1 0.500027 0.499973 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 0.5 0.5 0.75 0.25 1 1 1 1 0.1 0.9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.1000157 0.8999843 0.25 0.75 0.25 0.75 0.2500005 0.7499995 1 1 0.2500005 0.7499995 0.25 0.75 0.25 0.75 0.2500001 0.7499999 0.25 0.75 0.2522104 0.7477896 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 0.7533857 0.2466142 0.75 0.25 0.7567055 0.2432945 0.25 0.75 0.2600955 0.7399045 0.7510886 0.2489114 0.7501416 0.2498584 0.7738493 0.2261508 0.75 0.25 1 1 1 0.1 0.9 1 1 1 1 1 0.25 0.75 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 1 1 1 0.75 0.25 0.5 0.5 0.1000002 0.8999998 1 1 0.75 0.25 0.5 0.5 0.75 0.25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.25 0.75 1 1 1 1 1 1 1 1 0.25 0.75 0.2505087 0.7494913 0.25 0.75 0.2500001 0.75 0.2500001 0.75 0.25 0.75 1 1 0.25 0.75 0.25 0.75 0.2500483 0.7499517 0.100079 0.899921 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.1020361 0.8979638 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.1196705 0.8803294 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.1000001 0.8999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.1 0.9 1 1 1 1 0.1000001 0.8999999 1 1 1 1 0.1 0.8999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.1 0.9 1 0.1002381 0.8997619 0.1 0.9 1 1 1 1 1 0.1 0.9 1 1 1 0.1 0.9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 0.7525423 0.2474576 0.75 0.25 0.75 0.25 0.25 0.75 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.25 0.75 0.1 0.9 0.1002359 0.899764 0.5000001 0.4999999 0.25 0.75 0.5228207 0.4771794 0.2500003 0.7499997 0.1 0.9 0.1000007 0.8999993 0.4871138 0.5128862 0.2500004 0.7499997 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.1 0.9 0.2500001 0.75 0.5000015 0.4999985 0.25 0.75 0.5061592 0.4938408 0.25 0.75 0.5000092 0.4999908 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.1 0.8999999 0.1 0.9 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 1 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 1 1 1 0.75 0.25 0.5 0.5 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 1 1 1 1 1 1 1 0.75 0.25 0.5 0.5 0.5 0.5 0.75 0.25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 1 1 1 1 0.5 0.5 1 0.5 0.5 0.75 0.25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 1 1 1 1 1 1 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 1 0.75 0.25 0.5 0.5 1 0.75 0.25 0.75 0.25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.75 0.25 0.75 0.25 0.75 0.25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 0.75 0.25 1 0.5 0.5 0.5 0.5 1 1 1 1 1 0.75 0.25 1 1 0.75 0.25 0.5 0.5 0.5 0.5 0.5 0.5 1 1 0.75 0.25 0.75 0.25 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.2924861 0.7075139 1 1 1 1 1 1 0.5 0.5 1 0.75 0.25 0.75 0.25 0.5 0.5 1 1 1 1 1 0.5 0.5 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.75 0.25 0.5 0.5 1 1 1 1 0.5 0.5 0.75 0.25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 0.5000681 0.4999319 0.5 0.5 0.75 0.25 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 1 1 1 1 1 1 0.04683256 0.9531674 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 0.75 0.25 0.75 0.25 0.75 0.25 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 0.75 0.25 0.5 0.5 0.5 0.5 0.75 0.25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 0.5 0.5 1 1 1 1 0.5 0.5 0.75 0.25 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.75 0.25 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 0.5 0.5 1 1 1 1 1 0.5 0.5 0.75 0.25 0.75 0.25 1 0.5 0.5 1 1 1 1 1 1 0.2215982 0.7784017 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 1 1 1 1 1 0.5 0.5 1 1 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.2009721 0.7990279 0.229992 0.7700079 0.2431892 0.7568107 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.75 0.25 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.75 0.25 1 1 0.75 0.25 0.5 0.5 0.5 0.5 0.75 0.25 0.5 0.5 0.5 0.5 0.2499999 0.7500001 0.2499677 0.7500323 1 1 1 1 1 1 1 0.5 0.5 0.75 0.25 1 1 1 1 1 1 1 0.75 0.25 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.75 0.25 0.2220976 0.7779024 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 0.25 0.75 0.2405805 0.7594195 0.2473965 0.7526035 0.5 0.5 1 1 1 1 1 1 1 1 1 1 0.1634657 0.8365343 1 0.5 0.5 0.5 0.5 1 1 1 1 1 0.25 0.75 0.25 0.75 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.25 0.75 1 1 1 1 0.2499999 0.7500001 1 1 1 1 1 1 0.2219015 0.7780984 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 0.25 0.75 1 1 1 1 0.5 0.5 1 1 1 1 1 0.5 0.5 0.75 0.25 1 1 1 1 1 0.5 0.5 0.75 0.25 1 0.5 0.5 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 0.5 0.5 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 0.5 0.5 0.75 0.25 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.75 0.25 0.75 0.25 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 0.5 0.5 1 1 1 1 1 1 0.5 0.5 0.5 0.5 1 0.75 0.25 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 0.5 0.5 1 0.5 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1</float_array> + <technique_common> + <accessor source="#_6_15_t_human-skin-weights-array" count="8577" stride="1"> + <param name="WEIGHT" type="float"/> + </accessor> + </technique_common> + </source> + <joints> + <input semantic="JOINT" source="#_6_15_t_human-skin-joints"/> + <input semantic="INV_BIND_MATRIX" source="#_6_15_t_human-skin-bind_poses"/> + </joints> + <vertex_weights count="7845"> + <input semantic="JOINT" source="#_6_15_t_human-skin-joints" offset="0"/> + <input semantic="WEIGHT" source="#_6_15_t_human-skin-weights" offset="1"/> + <vcount>1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 3 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 2 2 1 1 2 1 1 1 1 1 2 2 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 2 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 1 1 2 2 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 1 1 1 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 2 1 1 1 1 1 2 1 1 2 2 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 2 2 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 1 2 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 2 2 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 2 2 1 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 1 1 1 2 2 1 1 1 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 1 2 2 2 2 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 </vcount> + <v>17 0 24 1 17 2 24 3 17 4 24 5 17 6 24 7 17 8 24 9 17 10 24 11 17 12 24 13 17 14 24 15 17 16 18 17 24 18 25 19 17 20 18 21 24 22 25 23 17 24 18 25 24 26 25 27 17 28 18 29 24 30 25 31 17 32 18 33 24 34 25 35 17 36 18 37 24 38 25 39 17 40 18 41 24 42 25 43 17 44 18 45 24 46 25 47 18 48 25 49 18 50 25 51 18 52 25 53 18 54 25 55 18 56 25 57 18 58 25 59 18 60 25 61 18 62 25 63 18 64 25 65 18 66 25 67 18 68 25 69 18 70 25 71 18 72 25 73 18 74 25 75 18 76 25 77 18 78 25 79 13 80 17 81 13 82 24 83 13 84 17 85 13 86 24 87 13 88 17 89 13 90 24 91 13 92 17 93 13 94 24 95 13 96 17 97 13 98 24 99 13 100 17 101 13 102 24 103 13 104 17 105 13 106 24 107 13 108 17 109 13 110 24 111 13 112 17 113 13 114 24 115 13 116 17 117 13 118 24 119 13 120 17 121 13 122 24 123 13 124 17 125 13 126 24 127 13 128 17 129 13 130 24 131 13 132 17 133 13 134 24 135 13 136 17 137 13 138 24 139 13 140 17 141 13 142 24 143 12 144 13 145 12 146 13 147 13 148 13 149 13 150 13 151 13 152 13 153 13 154 13 155 13 156 13 157 13 158 13 159 13 160 13 161 13 162 13 163 13 164 13 165 13 166 13 167 13 168 13 169 13 170 13 171 13 172 13 173 13 174 13 175 13 176 13 177 13 178 13 179 12 180 13 181 12 182 13 183 12 184 13 185 12 186 13 187 12 188 13 189 12 190 13 191 12 192 13 193 12 194 13 195 12 196 13 197 12 198 13 199 12 200 13 201 12 202 13 203 12 204 12 205 12 206 12 207 12 208 12 209 11 210 12 211 11 212 12 213 11 214 12 215 11 216 12 217 11 218 12 219 11 220 12 221 12 222 13 223 12 224 13 225 12 226 13 227 12 228 13 229 12 230 13 231 12 232 12 233 12 234 12 235 12 236 12 237 12 238 12 239 12 240 12 241 11 242 12 243 11 244 12 245 11 246 12 247 11 248 12 249 11 250 12 251 12 252 12 253 12 254 12 255 12 256 12 257 13 258 13 259 13 260 13 261 12 262 13 263 12 264 13 265 12 266 12 267 12 268 12 269 11 270 12 271 11 272 12 273 12 274 12 275 12 276 12 277 12 278 13 279 12 280 13 281 11 282 12 283 11 284 12 285 12 286 13 287 12 288 13 289 12 290 13 291 12 292 13 293 13 294 13 295 12 296 13 297 12 298 13 299 12 300 13 301 12 302 13 303 12 304 13 305 12 306 13 307 12 308 12 309 11 310 12 311 11 312 12 313 12 314 12 315 13 316 13 317 13 318 13 319 12 320 12 321 12 322 11 323 12 324 12 325 13 326 12 327 13 328 11 329 12 330 11 331 12 332 12 333 13 334 12 335 13 336 12 337 13 338 12 339 13 340 13 341 12 342 13 343 12 344 13 345 12 346 13 347 12 348 11 349 12 350 12 351 13 352 13 353 13 354 11 355 11 356 11 357 11 358 11 359 11 360 11 361 11 362 11 363 11 364 11 365 11 366 11 367 11 368 11 369 11 370 11 371 11 372 11 373 11 374 1 375 11 376 6 377 11 378 1 379 11 380 6 381 11 382 1 383 11 384 6 385 11 386 1 387 6 388 11 389 1 390 11 391 6 392 11 393 1 394 11 395 6 396 11 397 1 398 11 399 6 400 11 401 1 402 11 403 6 404 11 405 1 406 11 407 6 408 11 409 1 410 11 411 6 412 11 413 1 414 6 415 11 416 1 417 6 418 1 419 6 420 1 421 6 422 1 423 6 424 1 425 6 426 1 427 6 428 1 429 6 430 1 431 6 432 1 433 6 434 1 435 6 436 1 437 6 438 13 439 13 440 13 441 13 442 13 443 13 444 13 445 13 446 13 447 13 448 13 449 13 450 13 451 13 452 13 453 13 454 13 455 13 456 13 457 13 458 13 459 13 460 13 461 13 462 13 463 13 464 13 465 13 466 13 467 13 468 13 469 13 470 13 471 13 472 13 473 13 474 13 475 13 476 13 477 13 478 13 479 13 480 13 481 13 482 13 483 13 484 13 485 13 486 13 487 13 488 13 489 13 490 13 491 13 492 13 493 13 494 13 495 13 496 13 497 13 498 13 499 13 500 13 501 13 502 13 503 13 504 13 505 13 506 13 507 13 508 13 509 1 510 6 511 1 512 6 513 1 514 6 515 1 516 6 517 1 518 6 519 1 520 6 521 1 522 6 523 1 524 6 525 1 526 6 527 1 528 6 529 1 530 6 531 17 532 24 533 17 534 24 535 17 536 24 537 17 538 24 539 17 540 24 541 17 542 24 543 17 544 24 545 17 546 24 547 18 548 25 549 18 550 25 551 18 552 25 553 18 554 25 555 18 556 25 557 18 558 25 559 18 560 25 561 18 562 25 563 18 564 25 565 18 566 25 567 18 568 25 569 18 570 25 571 18 572 25 573 18 574 25 575 18 576 25 577 18 578 25 579 18 580 25 581 18 582 25 583 18 584 25 585 18 586 25 587 18 588 25 589 18 590 25 591 18 592 25 593 18 594 25 595 17 596 18 597 24 598 25 599 17 600 18 601 24 602 25 603 17 604 18 605 24 606 25 607 17 608 18 609 24 610 25 611 17 612 18 613 24 614 25 615 17 616 18 617 24 618 25 619 17 620 18 621 24 622 25 623 17 624 18 625 24 626 25 627 17 628 18 629 24 630 25 631 17 632 18 633 24 634 25 635 17 636 18 637 24 638 25 639 17 640 18 641 24 642 25 643 17 644 18 645 24 646 25 647 17 648 18 649 24 650 25 651 17 652 18 653 24 654 25 655 17 656 18 657 24 658 25 659 13 660 17 661 13 662 24 663 13 664 17 665 13 666 24 667 13 668 17 669 13 670 24 671 13 672 17 673 13 674 24 675 13 676 17 677 13 678 24 679 13 680 17 681 13 682 24 683 13 684 17 685 13 686 24 687 13 688 17 689 13 690 24 691 3 692 8 693 3 694 8 695 3 696 8 697 3 698 8 699 3 700 8 701 3 702 8 703 3 704 8 705 3 706 8 707 2 708 3 709 7 710 8 711 2 712 3 713 7 714 8 715 2 716 3 717 7 718 8 719 2 720 3 721 7 722 8 723 2 724 3 725 7 726 8 727 2 728 3 729 7 730 8 731 2 732 3 733 7 734 8 735 2 736 3 737 7 738 8 739 1 740 2 741 6 742 7 743 1 744 2 745 6 746 7 747 1 748 2 749 6 750 7 751 1 752 2 753 6 754 7 755 1 756 2 757 6 758 7 759 1 760 2 761 6 762 7 763 1 764 2 765 6 766 7 767 1 768 2 769 6 770 7 771 1 772 2 773 6 774 7 775 1 776 2 777 6 778 7 779 1 780 2 781 6 782 7 783 1 784 2 785 6 786 7 787 1 788 2 789 6 790 7 791 1 792 2 793 6 794 7 795 1 796 2 797 6 798 7 799 1 800 2 801 6 802 7 803 1 804 6 805 1 806 6 807 1 808 6 809 1 810 6 811 1 812 6 813 1 814 6 815 1 816 6 817 2 818 7 819 2 820 7 821 2 822 7 823 2 824 7 825 2 826 7 827 2 828 7 829 2 830 7 831 2 832 7 833 3 834 8 835 3 836 8 837 3 838 8 839 3 840 8 841 3 842 8 843 3 844 8 845 3 846 8 847 3 848 8 849 1 850 6 851 1 852 6 853 1 854 6 855 1 856 6 857 1 858 6 859 1 860 6 861 1 862 6 863 1 864 6 865 1 866 6 867 1 868 6 869 1 870 6 871 1 872 6 873 2 874 7 875 2 876 7 877 2 878 7 879 2 880 7 881 2 882 7 883 2 884 7 885 2 886 7 887 2 888 7 889 2 890 7 891 2 892 7 893 2 894 7 895 2 896 7 897 2 898 7 899 2 900 7 901 2 902 7 903 2 904 7 905 3 906 8 907 3 908 8 909 3 910 8 911 3 912 8 913 3 914 8 915 3 916 8 917 3 918 8 919 3 920 8 921 2 922 3 923 7 924 8 925 2 926 3 927 7 928 8 929 2 930 3 931 7 932 8 933 2 934 3 935 7 936 8 937 2 938 3 939 7 940 8 941 2 942 3 943 7 944 8 945 2 946 3 947 7 948 8 949 2 950 3 951 7 952 8 953 2 954 3 955 7 956 8 957 2 958 3 959 7 960 8 961 2 962 3 963 7 964 8 965 2 966 3 967 7 968 8 969 2 970 3 971 7 972 8 973 2 974 3 975 7 976 8 977 2 978 3 979 7 980 8 981 2 982 3 983 7 984 8 985 1 986 6 987 1 988 6 989 1 990 6 991 1 992 6 993 1 994 6 995 1 996 6 997 1 998 6 999 3 1000 8 1001 3 1002 8 1003 3 1004 8 1005 3 1006 8 1007 3 1008 8 1009 3 1010 8 1011 3 1012 8 1013 3 1014 8 1015 15 1016 15 1017 15 1018 15 1019 15 1020 15 1021 15 1022 15 1023 15 1024 15 1025 15 1026 15 1027 15 1028 15 1029 15 1030 15 1031 15 1032 15 1033 15 1034 15 1035 15 1036 15 1037 15 1038 15 1039 15 1040 15 1041 15 1042 15 1043 15 1044 15 1045 15 1046 15 1047 15 1048 15 1049 15 1050 15 1051 15 1052 15 1053 15 1054 15 1055 15 1056 15 1057 15 1058 15 1059 15 1060 15 1061 15 1062 15 1063 15 1064 15 1065 15 1066 15 1067 15 1068 15 1069 15 1070 15 1071 15 1072 15 1073 15 1074 15 1075 15 1076 15 1077 15 1078 15 1079 15 1080 15 1081 15 1082 15 1083 15 1084 15 1085 15 1086 15 1087 15 1088 15 1089 15 1090 15 1091 15 1092 15 1093 15 1094 15 1095 15 1096 15 1097 15 1098 15 1099 15 1100 15 1101 15 1102 15 1103 15 1104 15 1105 15 1106 15 1107 15 1108 15 1109 15 1110 15 1111 15 1112 15 1113 15 1114 15 1115 15 1116 15 1117 15 1118 15 1119 15 1120 15 1121 15 1122 15 1123 15 1124 15 1125 15 1126 15 1127 15 1128 15 1129 15 1130 15 1131 15 1132 15 1133 15 1134 15 1135 15 1136 15 1137 15 1138 15 1139 15 1140 15 1141 15 1142 15 1143 15 1144 15 1145 15 1146 15 1147 15 1148 15 1149 15 1150 15 1151 15 1152 15 1153 15 1154 15 1155 15 1156 15 1157 15 1158 15 1159 15 1160 15 1161 14 1162 15 1163 14 1164 15 1165 15 1166 15 1167 15 1168 15 1169 15 1170 15 1171 15 1172 15 1173 15 1174 15 1175 15 1176 15 1177 15 1178 15 1179 15 1180 15 1181 15 1182 15 1183 15 1184 15 1185 14 1186 15 1187 14 1188 15 1189 14 1190 15 1191 14 1192 15 1193 14 1194 15 1195 14 1196 15 1197 14 1198 15 1199 15 1200 15 1201 15 1202 15 1203 15 1204 15 1205 15 1206 15 1207 15 1208 15 1209 15 1210 15 1211 15 1212 15 1213 15 1214 15 1215 15 1216 15 1217 15 1218 15 1219 15 1220 15 1221 15 1222 15 1223 15 1224 15 1225 15 1226 15 1227 15 1228 15 1229 15 1230 15 1231 15 1232 15 1233 15 1234 15 1235 15 1236 15 1237 15 1238 15 1239 15 1240 15 1241 15 1242 15 1243 15 1244 15 1245 15 1246 15 1247 15 1248 15 1249 15 1250 15 1251 15 1252 15 1253 15 1254 15 1255 15 1256 15 1257 15 1258 15 1259 15 1260 15 1261 15 1262 15 1263 15 1264 15 1265 15 1266 15 1267 15 1268 15 1269 14 1270 15 1271 14 1272 15 1273 14 1274 15 1275 14 1276 15 1277 14 1278 15 1279 14 1280 15 1281 14 1282 15 1283 14 1284 15 1285 14 1286 15 1287 14 1288 15 1289 14 1290 15 1291 14 1292 15 1293 15 1294 15 1295 15 1296 15 1297 15 1298 15 1299 15 1300 15 1301 15 1302 15 1303 15 1304 15 1305 15 1306 15 1307 15 1308 15 1309 15 1310 15 1311 15 1312 15 1313 15 1314 15 1315 15 1316 15 1317 15 1318 15 1319 15 1320 15 1321 15 1322 15 1323 15 1324 15 1325 15 1326 15 1327 15 1328 15 1329 15 1330 15 1331 15 1332 15 1333 15 1334 15 1335 15 1336 15 1337 15 1338 15 1339 15 1340 15 1341 15 1342 15 1343 15 1344 15 1345 15 1346 15 1347 15 1348 15 1349 15 1350 15 1351 15 1352 15 1353 15 1354 15 1355 15 1356 15 1357 15 1358 15 1359 15 1360 15 1361 15 1362 15 1363 15 1364 15 1365 15 1366 15 1367 15 1368 15 1369 15 1370 15 1371 15 1372 15 1373 15 1374 15 1375 15 1376 15 1377 15 1378 15 1379 15 1380 15 1381 15 1382 15 1383 15 1384 15 1385 15 1386 15 1387 15 1388 15 1389 15 1390 15 1391 15 1392 15 1393 15 1394 15 1395 15 1396 15 1397 15 1398 15 1399 15 1400 15 1401 15 1402 15 1403 15 1404 15 1405 15 1406 15 1407 15 1408 15 1409 15 1410 15 1411 15 1412 15 1413 15 1414 15 1415 15 1416 15 1417 15 1418 15 1419 15 1420 15 1421 15 1422 15 1423 15 1424 15 1425 15 1426 15 1427 15 1428 15 1429 15 1430 15 1431 15 1432 15 1433 15 1434 15 1435 15 1436 15 1437 15 1438 15 1439 15 1440 15 1441 15 1442 15 1443 15 1444 15 1445 15 1446 15 1447 15 1448 15 1449 15 1450 15 1451 15 1452 15 1453 15 1454 15 1455 15 1456 15 1457 15 1458 15 1459 15 1460 15 1461 15 1462 15 1463 15 1464 15 1465 15 1466 15 1467 15 1468 15 1469 15 1470 15 1471 15 1472 15 1473 15 1474 15 1475 15 1476 15 1477 15 1478 15 1479 15 1480 15 1481 15 1482 15 1483 15 1484 15 1485 15 1486 15 1487 15 1488 15 1489 15 1490 15 1491 15 1492 15 1493 15 1494 15 1495 15 1496 15 1497 15 1498 15 1499 15 1500 15 1501 15 1502 15 1503 15 1504 15 1505 15 1506 14 1507 15 1508 14 1509 15 1510 14 1511 15 1512 14 1513 15 1514 14 1515 15 1516 15 1517 15 1518 15 1519 15 1520 15 1521 15 1522 15 1523 15 1524 15 1525 15 1526 15 1527 15 1528 15 1529 15 1530 15 1531 15 1532 15 1533 15 1534 15 1535 15 1536 15 1537 15 1538 15 1539 15 1540 15 1541 15 1542 15 1543 15 1544 15 1545 15 1546 15 1547 15 1548 15 1549 15 1550 15 1551 15 1552 15 1553 15 1554 15 1555 15 1556 15 1557 15 1558 15 1559 14 1560 15 1561 15 1562 15 1563 15 1564 14 1565 15 1566 15 1567 15 1568 15 1569 15 1570 15 1571 14 1572 15 1573 14 1574 15 1575 15 1576 14 1577 15 1578 19 1579 19 1580 19 1581 19 1582 19 1583 19 1584 19 1585 19 1586 19 1587 19 1588 19 1589 19 1590 19 1591 19 1592 19 1593 19 1594 19 1595 19 1596 19 1597 19 1598 19 1599 19 1600 19 1601 19 1602 19 1603 19 1604 19 1605 19 1606 19 1607 19 1608 19 1609 19 1610 19 1611 19 1612 19 1613 19 1614 19 1615 19 1616 19 1617 19 1618 19 1619 19 1620 19 1621 19 1622 19 1623 19 1624 19 1625 19 1626 19 1627 19 1628 19 1629 19 1630 19 1631 19 1632 19 1633 19 1634 19 1635 19 1636 19 1637 19 1638 19 1639 19 1640 19 1641 19 1642 19 1643 19 1644 19 1645 19 1646 19 1647 19 1648 19 1649 19 1650 19 1651 19 1652 19 1653 19 1654 19 1655 19 1656 19 1657 19 1658 19 1659 19 1660 19 1661 19 1662 19 1663 19 1664 19 1665 19 1666 19 1667 19 1668 19 1669 19 1670 19 1671 19 1672 19 1673 19 1674 19 1675 19 1676 19 1677 19 1678 19 1679 19 1680 19 1681 19 1682 19 1683 19 1684 19 1685 19 1686 19 1687 19 1688 19 1689 19 1690 19 1691 19 1692 19 1693 19 1694 19 1695 19 1696 19 1697 19 1698 19 1699 19 1700 19 1701 19 1702 19 1703 19 1704 19 1705 19 1706 19 1707 19 1708 19 1709 19 1710 19 1711 19 1712 19 1713 19 1714 19 1715 19 1716 19 1717 19 1718 19 1719 19 1720 19 1721 19 1722 19 1723 19 1724 19 1725 19 1726 19 1727 19 1728 19 1729 19 1730 19 1731 19 1732 19 1733 19 1734 19 1735 19 1736 13 1737 30 1738 13 1739 30 1740 14 1741 30 1742 14 1743 30 1744 13 1745 13 1746 13 1747 30 1748 13 1749 30 1750 13 1751 30 1752 14 1753 30 1754 13 1755 13 1756 14 1757 30 1758 13 1759 13 1760 13 1761 13 1762 13 1763 13 1764 30 1765 13 1766 30 1767 13 1768 14 1769 30 1770 14 1771 30 1772 19 1773 19 1774 14 1775 14 1776 14 1777 14 1778 13 1779 13 1780 13 1781 13 1782 19 1783 19 1784 19 1785 19 1786 19 1787 19 1788 19 1789 19 1790 19 1791 19 1792 19 1793 19 1794 19 1795 19 1796 19 1797 19 1798 19 1799 14 1800 30 1801 14 1802 14 1803 14 1804 30 1805 14 1806 30 1807 14 1808 14 1809 14 1810 14 1811 14 1812 13 1813 30 1814 13 1815 30 1816 13 1817 30 1818 13 1819 14 1820 14 1821 13 1822 19 1823 19 1824 19 1825 19 1826 19 1827 19 1828 19 1829 19 1830 19 1831 19 1832 19 1833 19 1834 19 1835 19 1836 19 1837 19 1838 19 1839 19 1840 19 1841 19 1842 19 1843 19 1844 19 1845 19 1846 19 1847 19 1848 19 1849 19 1850 19 1851 19 1852 19 1853 19 1854 19 1855 19 1856 19 1857 19 1858 19 1859 19 1860 19 1861 19 1862 19 1863 19 1864 19 1865 19 1866 19 1867 19 1868 19 1869 19 1870 19 1871 19 1872 19 1873 19 1874 19 1875 14 1876 14 1877 14 1878 14 1879 14 1880 14 1881 30 1882 14 1883 30 1884 14 1885 13 1886 13 1887 30 1888 14 1889 14 1890 14 1891 30 1892 13 1893 13 1894 30 1895 13 1896 19 1897 19 1898 19 1899 19 1900 19 1901 19 1902 19 1903 19 1904 19 1905 19 1906 19 1907 19 1908 19 1909 19 1910 19 1911 19 1912 19 1913 19 1914 19 1915 19 1916 19 1917 19 1918 19 1919 19 1920 19 1921 19 1922 19 1923 19 1924 19 1925 19 1926 18 1927 18 1928 18 1929 18 1930 18 1931 18 1932 18 1933 18 1934 18 1935 14 1936 18 1937 19 1938 19 1939 19 1940 19 1941 19 1942 19 1943 19 1944 19 1945 18 1946 19 1947 19 1948 19 1949 19 1950 19 1951 19 1952 19 1953 19 1954 19 1955 19 1956 19 1957 19 1958 19 1959 19 1960 19 1961 19 1962 19 1963 19 1964 19 1965 19 1966 19 1967 19 1968 19 1969 19 1970 19 1971 19 1972 19 1973 19 1974 19 1975 19 1976 19 1977 19 1978 19 1979 19 1980 19 1981 19 1982 19 1983 19 1984 19 1985 19 1986 19 1987 14 1988 14 1989 14 1990 30 1991 13 1992 30 1993 13 1994 18 1995 19 1996 19 1997 19 1998 19 1999 18 2000 19 2001 19 2002 19 2003 19 2004 19 2005 19 2006 19 2007 19 2008 19 2009 19 2010 19 2011 19 2012 19 2013 19 2014 19 2015 19 2016 19 2017 19 2018 19 2019 19 2020 19 2021 19 2022 19 2023 19 2024 19 2025 19 2026 19 2027 19 2028 19 2029 19 2030 19 2031 19 2032 19 2033 19 2034 19 2035 19 2036 19 2037 19 2038 19 2039 19 2040 19 2041 19 2042 19 2043 19 2044 19 2045 19 2046 19 2047 19 2048 19 2049 19 2050 19 2051 19 2052 19 2053 19 2054 19 2055 19 2056 19 2057 19 2058 19 2059 19 2060 19 2061 19 2062 19 2063 19 2064 19 2065 19 2066 19 2067 19 2068 19 2069 19 2070 19 2071 19 2072 19 2073 19 2074 19 2075 19 2076 19 2077 19 2078 19 2079 19 2080 19 2081 19 2082 19 2083 19 2084 19 2085 19 2086 19 2087 19 2088 19 2089 19 2090 19 2091 19 2092 19 2093 19 2094 19 2095 19 2096 19 2097 19 2098 14 2099 19 2100 19 2101 19 2102 19 2103 19 2104 19 2105 19 2106 19 2107 19 2108 19 2109 19 2110 19 2111 19 2112 19 2113 13 2114 13 2115 13 2116 14 2117 14 2118 14 2119 30 2120 13 2121 30 2122 13 2123 30 2124 14 2125 30 2126 14 2127 18 2128 19 2129 19 2130 19 2131 19 2132 19 2133 13 2134 14 2135 30 2136 14 2137 14 2138 14 2139 15 2140 15 2141 15 2142 14 2143 14 2144 14 2145 15 2146 15 2147 15 2148 15 2149 15 2150 14 2151 15 2152 19 2153 19 2154 19 2155 19 2156 19 2157 19 2158 19 2159 19 2160 19 2161 19 2162 19 2163 19 2164 19 2165 19 2166 19 2167 19 2168 15 2169 15 2170 15 2171 15 2172 15 2173 15 2174 15 2175 15 2176 15 2177 15 2178 15 2179 15 2180 15 2181 13 2182 13 2183 19 2184 19 2185 19 2186 19 2187 19 2188 19 2189 19 2190 19 2191 19 2192 19 2193 19 2194 19 2195 19 2196 19 2197 19 2198 15 2199 15 2200 15 2201 15 2202 15 2203 15 2204 15 2205 15 2206 15 2207 15 2208 15 2209 15 2210 15 2211 15 2212 15 2213 15 2214 15 2215 15 2216 15 2217 15 2218 15 2219 15 2220 15 2221 15 2222 15 2223 15 2224 4 2225 4 2226 4 2227 4 2228 4 2229 4 2230 4 2231 4 2232 4 2233 4 2234 4 2235 4 2236 4 2237 4 2238 4 2239 4 2240 4 2241 4 2242 4 2243 4 2244 3 2245 4 2246 4 2247 3 2248 4 2249 4 2250 4 2251 4 2252 4 2253 4 2254 3 2255 4 2256 3 2257 4 2258 3 2259 4 2260 3 2261 4 2262 4 2263 4 2264 3 2265 4 2266 3 2267 4 2268 3 2269 4 2270 3 2271 4 2272 3 2273 3 2274 3 2275 3 2276 3 2277 3 2278 3 2279 3 2280 3 2281 3 2282 3 2283 3 2284 3 2285 3 2286 3 2287 3 2288 3 2289 3 2290 3 2291 3 2292 3 2293 3 2294 3 2295 3 2296 15 2297 15 2298 15 2299 15 2300 15 2301 15 2302 15 2303 15 2304 15 2305 15 2306 15 2307 15 2308 15 2309 15 2310 15 2311 15 2312 15 2313 15 2314 15 2315 13 2316 13 2317 13 2318 13 2319 13 2320 13 2321 13 2322 15 2323 15 2324 15 2325 15 2326 15 2327 15 2328 15 2329 15 2330 15 2331 15 2332 15 2333 15 2334 15 2335 15 2336 15 2337 14 2338 15 2339 15 2340 15 2341 15 2342 15 2343 15 2344 15 2345 15 2346 15 2347 15 2348 15 2349 15 2350 15 2351 15 2352 15 2353 15 2354 15 2355 15 2356 15 2357 15 2358 15 2359 15 2360 15 2361 15 2362 15 2363 15 2364 15 2365 15 2366 15 2367 15 2368 15 2369 15 2370 15 2371 15 2372 15 2373 15 2374 15 2375 15 2376 15 2377 15 2378 15 2379 15 2380 15 2381 15 2382 15 2383 15 2384 15 2385 15 2386 15 2387 15 2388 15 2389 15 2390 15 2391 15 2392 15 2393 15 2394 15 2395 15 2396 15 2397 15 2398 15 2399 15 2400 15 2401 15 2402 15 2403 15 2404 15 2405 15 2406 15 2407 15 2408 15 2409 15 2410 15 2411 15 2412 15 2413 15 2414 15 2415 15 2416 15 2417 15 2418 15 2419 15 2420 15 2421 15 2422 15 2423 15 2424 15 2425 15 2426 15 2427 15 2428 15 2429 15 2430 15 2431 15 2432 15 2433 15 2434 15 2435 15 2436 15 2437 15 2438 15 2439 15 2440 15 2441 15 2442 15 2443 15 2444 15 2445 15 2446 15 2447 15 2448 15 2449 15 2450 14 2451 15 2452 15 2453 15 2454 15 2455 15 2456 15 2457 15 2458 15 2459 15 2460 15 2461 15 2462 15 2463 15 2464 15 2465 15 2466 15 2467 15 2468 15 2469 15 2470 15 2471 15 2472 15 2473 15 2474 15 2475 15 2476 15 2477 15 2478 15 2479 15 2480 15 2481 15 2482 15 2483 15 2484 15 2485 15 2486 15 2487 15 2488 15 2489 15 2490 15 2491 15 2492 15 2493 15 2494 15 2495 15 2496 15 2497 15 2498 15 2499 15 2500 15 2501 15 2502 15 2503 15 2504 15 2505 15 2506 15 2507 15 2508 15 2509 15 2510 15 2511 15 2512 15 2513 15 2514 15 2515 15 2516 15 2517 13 2518 13 2519 13 2520 13 2521 13 2522 18 2523 18 2524 18 2525 18 2526 18 2527 18 2528 19 2529 18 2530 19 2531 18 2532 18 2533 18 2534 18 2535 18 2536 18 2537 18 2538 18 2539 18 2540 18 2541 18 2542 18 2543 18 2544 18 2545 19 2546 19 2547 19 2548 19 2549 19 2550 19 2551 19 2552 19 2553 19 2554 19 2555 19 2556 19 2557 19 2558 19 2559 19 2560 19 2561 19 2562 19 2563 19 2564 19 2565 19 2566 19 2567 19 2568 19 2569 19 2570 19 2571 19 2572 19 2573 19 2574 19 2575 19 2576 19 2577 19 2578 19 2579 19 2580 19 2581 19 2582 19 2583 19 2584 19 2585 19 2586 19 2587 19 2588 19 2589 19 2590 19 2591 19 2592 19 2593 19 2594 18 2595 19 2596 19 2597 19 2598 19 2599 19 2600 19 2601 19 2602 19 2603 19 2604 19 2605 19 2606 19 2607 19 2608 19 2609 19 2610 19 2611 19 2612 19 2613 19 2614 19 2615 19 2616 19 2617 18 2618 18 2619 18 2620 18 2621 18 2622 18 2623 4 2624 4 2625 4 2626 4 2627 4 2628 4 2629 4 2630 4 2631 4 2632 4 2633 4 2634 4 2635 4 2636 4 2637 4 2638 4 2639 4 2640 5 2641 4 2642 5 2643 4 2644 5 2645 4 2646 5 2647 4 2648 5 2649 4 2650 5 2651 4 2652 5 2653 4 2654 3 2655 4 2656 3 2657 4 2658 4 2659 4 2660 4 2661 4 2662 4 2663 4 2664 4 2665 5 2666 5 2667 5 2668 5 2669 5 2670 5 2671 5 2672 5 2673 5 2674 4 2675 5 2676 4 2677 5 2678 5 2679 5 2680 5 2681 5 2682 5 2683 5 2684 5 2685 5 2686 5 2687 5 2688 4 2689 5 2690 4 2691 5 2692 4 2693 5 2694 4 2695 5 2696 4 2697 5 2698 4 2699 5 2700 5 2701 5 2702 5 2703 5 2704 5 2705 5 2706 5 2707 5 2708 4 2709 5 2710 4 2711 5 2712 4 2713 5 2714 4 2715 5 2716 5 2717 5 2718 5 2719 4 2720 5 2721 4 2722 5 2723 5 2724 5 2725 5 2726 5 2727 4 2728 5 2729 4 2730 5 2731 4 2732 5 2733 4 2734 5 2735 5 2736 5 2737 5 2738 5 2739 4 2740 5 2741 5 2742 5 2743 5 2744 5 2745 5 2746 4 2747 5 2748 4 2749 5 2750 5 2751 5 2752 5 2753 5 2754 5 2755 5 2756 5 2757 5 2758 4 2759 5 2760 4 2761 4 2762 5 2763 4 2764 5 2765 5 2766 5 2767 5 2768 5 2769 4 2770 4 2771 5 2772 4 2773 5 2774 5 2775 5 2776 5 2777 5 2778 4 2779 4 2780 5 2781 5 2782 5 2783 5 2784 5 2785 4 2786 5 2787 5 2788 5 2789 5 2790 5 2791 5 2792 5 2793 4 2794 5 2795 4 2796 5 2797 5 2798 5 2799 5 2800 5 2801 5 2802 5 2803 5 2804 5 2805 5 2806 5 2807 4 2808 5 2809 5 2810 5 2811 5 2812 5 2813 5 2814 5 2815 4 2816 5 2817 5 2818 5 2819 5 2820 5 2821 4 2822 5 2823 4 2824 5 2825 4 2826 5 2827 5 2828 5 2829 5 2830 5 2831 5 2832 5 2833 5 2834 5 2835 5 2836 5 2837 5 2838 5 2839 5 2840 5 2841 5 2842 5 2843 5 2844 5 2845 5 2846 5 2847 5 2848 5 2849 5 2850 5 2851 5 2852 5 2853 5 2854 5 2855 5 2856 4 2857 5 2858 4 2859 5 2860 5 2861 5 2862 5 2863 5 2864 5 2865 4 2866 5 2867 4 2868 5 2869 5 2870 4 2871 5 2872 5 2873 5 2874 5 2875 5 2876 5 2877 5 2878 5 2879 5 2880 5 2881 5 2882 4 2883 5 2884 4 2885 5 2886 4 2887 5 2888 5 2889 5 2890 5 2891 5 2892 5 2893 4 2894 5 2895 4 2896 5 2897 4 2898 4 2899 4 2900 4 2901 4 2902 4 2903 4 2904 4 2905 4 2906 4 2907 4 2908 4 2909 4 2910 4 2911 4 2912 4 2913 4 2914 4 2915 4 2916 4 2917 4 2918 4 2919 4 2920 4 2921 4 2922 4 2923 4 2924 4 2925 4 2926 4 2927 4 2928 4 2929 4 2930 4 2931 4 2932 4 2933 4 2934 4 2935 4 2936 4 2937 4 2938 4 2939 4 2940 5 2941 4 2942 5 2943 5 2944 5 2945 5 2946 5 2947 5 2948 5 2949 5 2950 5 2951 5 2952 5 2953 5 2954 5 2955 5 2956 5 2957 5 2958 5 2959 5 2960 5 2961 5 2962 5 2963 5 2964 5 2965 5 2966 5 2967 4 2968 4 2969 4 2970 4 2971 5 2972 4 2973 5 2974 5 2975 5 2976 5 2977 5 2978 5 2979 5 2980 4 2981 4 2982 5 2983 4 2984 5 2985 5 2986 5 2987 5 2988 5 2989 5 2990 5 2991 5 2992 4 2993 5 2994 4 2995 5 2996 4 2997 5 2998 4 2999 5 3000 4 3001 5 3002 4 3003 5 3004 4 3005 5 3006 4 3007 5 3008 4 3009 4 3010 4 3011 5 3012 4 3013 5 3014 5 3015 5 3016 5 3017 5 3018 5 3019 5 3020 5 3021 5 3022 5 3023 5 3024 4 3025 5 3026 4 3027 5 3028 4 3029 4 3030 4 3031 4 3032 4 3033 4 3034 4 3035 4 3036 4 3037 5 3038 5 3039 5 3040 5 3041 5 3042 5 3043 5 3044 5 3045 5 3046 5 3047 5 3048 5 3049 5 3050 5 3051 5 3052 5 3053 5 3054 5 3055 5 3056 5 3057 5 3058 5 3059 5 3060 5 3061 5 3062 5 3063 5 3064 5 3065 5 3066 5 3067 5 3068 5 3069 5 3070 5 3071 5 3072 5 3073 5 3074 5 3075 5 3076 5 3077 5 3078 5 3079 5 3080 5 3081 5 3082 5 3083 5 3084 5 3085 5 3086 5 3087 5 3088 5 3089 5 3090 5 3091 5 3092 5 3093 5 3094 5 3095 5 3096 5 3097 5 3098 5 3099 5 3100 5 3101 5 3102 5 3103 5 3104 5 3105 5 3106 5 3107 5 3108 5 3109 5 3110 5 3111 5 3112 5 3113 5 3114 5 3115 5 3116 5 3117 5 3118 5 3119 5 3120 5 3121 4 3122 5 3123 4 3124 5 3125 5 3126 5 3127 5 3128 5 3129 5 3130 5 3131 5 3132 5 3133 5 3134 5 3135 5 3136 5 3137 5 3138 5 3139 5 3140 5 3141 5 3142 5 3143 5 3144 5 3145 5 3146 5 3147 5 3148 5 3149 5 3150 5 3151 5 3152 5 3153 5 3154 5 3155 5 3156 5 3157 5 3158 5 3159 5 3160 5 3161 5 3162 5 3163 5 3164 5 3165 5 3166 5 3167 5 3168 5 3169 5 3170 5 3171 5 3172 5 3173 5 3174 5 3175 5 3176 5 3177 5 3178 5 3179 5 3180 5 3181 5 3182 5 3183 5 3184 5 3185 5 3186 5 3187 5 3188 5 3189 5 3190 5 3191 5 3192 5 3193 5 3194 5 3195 5 3196 5 3197 5 3198 5 3199 5 3200 5 3201 5 3202 5 3203 5 3204 5 3205 5 3206 5 3207 5 3208 5 3209 5 3210 5 3211 5 3212 5 3213 5 3214 5 3215 5 3216 5 3217 5 3218 5 3219 5 3220 5 3221 5 3222 5 3223 5 3224 5 3225 5 3226 5 3227 5 3228 5 3229 5 3230 5 3231 5 3232 5 3233 5 3234 5 3235 5 3236 5 3237 5 3238 5 3239 5 3240 5 3241 5 3242 5 3243 5 3244 5 3245 5 3246 5 3247 5 3248 5 3249 5 3250 5 3251 5 3252 5 3253 5 3254 5 3255 5 3256 5 3257 5 3258 5 3259 5 3260 5 3261 5 3262 5 3263 5 3264 5 3265 5 3266 5 3267 5 3268 5 3269 5 3270 5 3271 5 3272 5 3273 5 3274 5 3275 5 3276 5 3277 5 3278 5 3279 5 3280 5 3281 5 3282 5 3283 5 3284 5 3285 5 3286 5 3287 5 3288 5 3289 5 3290 5 3291 5 3292 5 3293 5 3294 5 3295 5 3296 5 3297 5 3298 5 3299 5 3300 5 3301 5 3302 5 3303 5 3304 5 3305 5 3306 5 3307 5 3308 5 3309 5 3310 5 3311 5 3312 5 3313 5 3314 5 3315 5 3316 5 3317 5 3318 5 3319 5 3320 4 3321 5 3322 4 3323 5 3324 15 3325 15 3326 15 3327 15 3328 15 3329 15 3330 15 3331 15 3332 15 3333 15 3334 15 3335 15 3336 15 3337 15 3338 15 3339 15 3340 15 3341 15 3342 15 3343 15 3344 15 3345 15 3346 15 3347 15 3348 15 3349 15 3350 15 3351 15 3352 15 3353 15 3354 15 3355 15 3356 15 3357 15 3358 15 3359 15 3360 15 3361 15 3362 15 3363 15 3364 15 3365 15 3366 15 3367 15 3368 15 3369 15 3370 15 3371 15 3372 15 3373 15 3374 15 3375 15 3376 15 3377 15 3378 15 3379 15 3380 15 3381 15 3382 15 3383 15 3384 15 3385 15 3386 15 3387 15 3388 15 3389 15 3390 15 3391 15 3392 15 3393 15 3394 15 3395 15 3396 15 3397 15 3398 15 3399 15 3400 15 3401 15 3402 15 3403 15 3404 15 3405 15 3406 15 3407 15 3408 15 3409 15 3410 15 3411 15 3412 15 3413 15 3414 15 3415 15 3416 15 3417 15 3418 15 3419 15 3420 15 3421 15 3422 15 3423 15 3424 15 3425 15 3426 15 3427 15 3428 15 3429 15 3430 15 3431 15 3432 15 3433 15 3434 15 3435 15 3436 15 3437 15 3438 15 3439 15 3440 15 3441 15 3442 15 3443 15 3444 15 3445 15 3446 15 3447 15 3448 15 3449 15 3450 15 3451 15 3452 15 3453 15 3454 15 3455 15 3456 15 3457 15 3458 15 3459 15 3460 15 3461 15 3462 15 3463 15 3464 15 3465 15 3466 15 3467 15 3468 15 3469 15 3470 15 3471 15 3472 15 3473 15 3474 15 3475 15 3476 15 3477 15 3478 15 3479 15 3480 15 3481 15 3482 15 3483 15 3484 15 3485 15 3486 15 3487 15 3488 15 3489 15 3490 15 3491 15 3492 15 3493 15 3494 15 3495 15 3496 15 3497 15 3498 15 3499 15 3500 15 3501 15 3502 15 3503 15 3504 15 3505 15 3506 15 3507 15 3508 15 3509 15 3510 15 3511 15 3512 15 3513 15 3514 15 3515 15 3516 15 3517 15 3518 15 3519 15 3520 15 3521 15 3522 15 3523 15 3524 15 3525 15 3526 15 3527 15 3528 15 3529 15 3530 15 3531 15 3532 15 3533 15 3534 15 3535 15 3536 15 3537 15 3538 15 3539 15 3540 15 3541 15 3542 15 3543 15 3544 15 3545 15 3546 15 3547 15 3548 15 3549 15 3550 15 3551 15 3552 15 3553 15 3554 15 3555 15 3556 15 3557 15 3558 15 3559 15 3560 15 3561 15 3562 15 3563 15 3564 15 3565 15 3566 15 3567 15 3568 15 3569 15 3570 15 3571 15 3572 15 3573 15 3574 15 3575 15 3576 15 3577 15 3578 15 3579 15 3580 15 3581 15 3582 15 3583 15 3584 15 3585 15 3586 15 3587 15 3588 15 3589 15 3590 3 3591 4 3592 4 3593 3 3594 3 3595 3 3596 4 3597 3 3598 4 3599 4 3600 4 3601 4 3602 4 3603 4 3604 3 3605 3 3606 3 3607 3 3608 3 3609 3 3610 4 3611 4 3612 4 3613 4 3614 4 3615 4 3616 4 3617 4 3618 4 3619 4 3620 4 3621 4 3622 4 3623 4 3624 4 3625 4 3626 4 3627 4 3628 4 3629 4 3630 4 3631 4 3632 4 3633 4 3634 4 3635 4 3636 4 3637 4 3638 4 3639 4 3640 4 3641 4 3642 4 3643 19 3644 19 3645 19 3646 19 3647 19 3648 19 3649 19 3650 19 3651 19 3652 19 3653 19 3654 19 3655 19 3656 19 3657 19 3658 19 3659 19 3660 19 3661 19 3662 19 3663 19 3664 19 3665 19 3666 19 3667 19 3668 19 3669 19 3670 19 3671 19 3672 19 3673 19 3674 19 3675 19 3676 19 3677 19 3678 19 3679 19 3680 19 3681 19 3682 19 3683 19 3684 19 3685 19 3686 19 3687 19 3688 19 3689 19 3690 19 3691 19 3692 19 3693 19 3694 19 3695 19 3696 19 3697 19 3698 19 3699 19 3700 19 3701 19 3702 19 3703 19 3704 19 3705 19 3706 19 3707 19 3708 19 3709 19 3710 19 3711 19 3712 19 3713 19 3714 19 3715 19 3716 19 3717 19 3718 19 3719 19 3720 19 3721 19 3722 19 3723 19 3724 19 3725 19 3726 19 3727 19 3728 19 3729 19 3730 19 3731 19 3732 19 3733 19 3734 19 3735 18 3736 19 3737 18 3738 19 3739 18 3740 19 3741 18 3742 19 3743 19 3744 19 3745 19 3746 19 3747 18 3748 19 3749 18 3750 19 3751 18 3752 19 3753 19 3754 19 3755 19 3756 18 3757 19 3758 18 3759 19 3760 19 3761 19 3762 19 3763 19 3764 19 3765 13 3766 30 3767 14 3768 30 3769 13 3770 18 3771 14 3772 14 3773 14 3774 15 3775 15 3776 15 3777 15 3778 15 3779 15 3780 15 3781 15 3782 15 3783 15 3784 15 3785 15 3786 15 3787 15 3788 15 3789 15 3790 15 3791 15 3792 15 3793 15 3794 15 3795 15 3796 15 3797 15 3798 15 3799 18 3800 18 3801 19 3802 19 3803 19 3804 19 3805 19 3806 19 3807 19 3808 19 3809 19 3810 19 3811 19 3812 19 3813 19 3814 19 3815 19 3816 19 3817 19 3818 19 3819 19 3820 19 3821 19 3822 19 3823 19 3824 19 3825 19 3826 19 3827 19 3828 19 3829 18 3830 19 3831 18 3832 19 3833 18 3834 18 3835 18 3836 18 3837 19 3838 19 3839 19 3840 19 3841 19 3842 19 3843 19 3844 19 3845 19 3846 19 3847 19 3848 19 3849 19 3850 19 3851 19 3852 19 3853 19 3854 19 3855 19 3856 19 3857 19 3858 19 3859 19 3860 19 3861 19 3862 19 3863 19 3864 19 3865 19 3866 19 3867 19 3868 19 3869 19 3870 19 3871 19 3872 19 3873 19 3874 19 3875 19 3876 19 3877 19 3878 19 3879 19 3880 19 3881 19 3882 19 3883 19 3884 19 3885 19 3886 19 3887 19 3888 19 3889 19 3890 19 3891 19 3892 19 3893 19 3894 19 3895 19 3896 19 3897 19 3898 19 3899 19 3900 19 3901 19 3902 19 3903 19 3904 19 3905 19 3906 19 3907 19 3908 19 3909 19 3910 19 3911 19 3912 19 3913 19 3914 19 3915 19 3916 19 3917 19 3918 19 3919 19 3920 19 3921 19 3922 19 3923 19 3924 19 3925 19 3926 19 3927 19 3928 19 3929 19 3930 19 3931 19 3932 19 3933 19 3934 19 3935 19 3936 19 3937 19 3938 19 3939 19 3940 19 3941 19 3942 19 3943 19 3944 19 3945 19 3946 19 3947 19 3948 19 3949 19 3950 19 3951 19 3952 19 3953 19 3954 19 3955 19 3956 19 3957 19 3958 19 3959 19 3960 19 3961 19 3962 19 3963 19 3964 19 3965 19 3966 19 3967 19 3968 19 3969 19 3970 19 3971 19 3972 19 3973 19 3974 19 3975 19 3976 19 3977 19 3978 19 3979 19 3980 19 3981 19 3982 19 3983 19 3984 19 3985 19 3986 19 3987 19 3988 19 3989 19 3990 19 3991 19 3992 19 3993 19 3994 19 3995 19 3996 19 3997 19 3998 19 3999 19 4000 19 4001 19 4002 19 4003 19 4004 19 4005 19 4006 19 4007 19 4008 19 4009 19 4010 19 4011 19 4012 19 4013 19 4014 19 4015 19 4016 19 4017 19 4018 19 4019 19 4020 19 4021 19 4022 19 4023 19 4024 19 4025 19 4026 19 4027 19 4028 19 4029 19 4030 19 4031 19 4032 19 4033 19 4034 19 4035 19 4036 19 4037 19 4038 19 4039 19 4040 19 4041 19 4042 19 4043 19 4044 19 4045 19 4046 19 4047 19 4048 19 4049 19 4050 19 4051 19 4052 19 4053 19 4054 19 4055 19 4056 19 4057 19 4058 19 4059 19 4060 19 4061 19 4062 19 4063 19 4064 19 4065 19 4066 19 4067 19 4068 19 4069 19 4070 19 4071 19 4072 19 4073 19 4074 19 4075 19 4076 19 4077 19 4078 19 4079 19 4080 19 4081 19 4082 19 4083 19 4084 19 4085 19 4086 19 4087 19 4088 19 4089 19 4090 19 4091 19 4092 19 4093 19 4094 19 4095 19 4096 19 4097 19 4098 19 4099 19 4100 19 4101 19 4102 19 4103 19 4104 19 4105 19 4106 19 4107 19 4108 19 4109 19 4110 19 4111 19 4112 19 4113 19 4114 19 4115 19 4116 19 4117 19 4118 19 4119 19 4120 19 4121 19 4122 19 4123 19 4124 19 4125 19 4126 19 4127 19 4128 19 4129 19 4130 19 4131 19 4132 19 4133 19 4134 19 4135 19 4136 19 4137 19 4138 19 4139 19 4140 19 4141 19 4142 19 4143 19 4144 19 4145 19 4146 19 4147 19 4148 19 4149 19 4150 19 4151 19 4152 19 4153 19 4154 19 4155 19 4156 19 4157 19 4158 19 4159 19 4160 19 4161 19 4162 19 4163 19 4164 19 4165 19 4166 19 4167 19 4168 19 4169 19 4170 19 4171 19 4172 19 4173 19 4174 19 4175 19 4176 19 4177 19 4178 19 4179 19 4180 19 4181 19 4182 19 4183 19 4184 19 4185 19 4186 19 4187 19 4188 19 4189 19 4190 19 4191 19 4192 19 4193 19 4194 19 4195 19 4196 19 4197 19 4198 19 4199 19 4200 19 4201 19 4202 19 4203 19 4204 19 4205 19 4206 19 4207 19 4208 19 4209 19 4210 19 4211 19 4212 19 4213 19 4214 19 4215 19 4216 19 4217 19 4218 19 4219 19 4220 19 4221 19 4222 19 4223 19 4224 19 4225 19 4226 19 4227 19 4228 19 4229 19 4230 19 4231 19 4232 19 4233 19 4234 19 4235 19 4236 19 4237 19 4238 19 4239 19 4240 19 4241 19 4242 19 4243 19 4244 19 4245 19 4246 19 4247 19 4248 19 4249 19 4250 19 4251 19 4252 19 4253 19 4254 19 4255 19 4256 19 4257 19 4258 19 4259 19 4260 19 4261 19 4262 19 4263 19 4264 19 4265 19 4266 19 4267 19 4268 19 4269 19 4270 19 4271 19 4272 19 4273 19 4274 19 4275 19 4276 19 4277 19 4278 19 4279 19 4280 19 4281 19 4282 19 4283 19 4284 19 4285 19 4286 19 4287 19 4288 19 4289 19 4290 19 4291 19 4292 19 4293 19 4294 19 4295 19 4296 19 4297 19 4298 19 4299 19 4300 19 4301 19 4302 19 4303 19 4304 19 4305 19 4306 19 4307 19 4308 19 4309 19 4310 19 4311 19 4312 19 4313 19 4314 19 4315 19 4316 19 4317 19 4318 19 4319 19 4320 19 4321 19 4322 19 4323 19 4324 19 4325 19 4326 19 4327 19 4328 19 4329 19 4330 19 4331 19 4332 19 4333 19 4334 19 4335 19 4336 19 4337 19 4338 19 4339 19 4340 19 4341 19 4342 19 4343 19 4344 19 4345 19 4346 19 4347 19 4348 19 4349 19 4350 19 4351 19 4352 19 4353 19 4354 19 4355 19 4356 19 4357 19 4358 19 4359 15 4360 15 4361 15 4362 15 4363 15 4364 15 4365 15 4366 15 4367 15 4368 15 4369 15 4370 15 4371 15 4372 15 4373 15 4374 15 4375 15 4376 15 4377 15 4378 15 4379 15 4380 15 4381 15 4382 15 4383 15 4384 15 4385 15 4386 15 4387 15 4388 15 4389 15 4390 15 4391 15 4392 15 4393 15 4394 15 4395 15 4396 15 4397 15 4398 15 4399 15 4400 14 4401 15 4402 14 4403 15 4404 14 4405 15 4406 14 4407 15 4408 15 4409 15 4410 14 4411 15 4412 14 4413 15 4414 14 4415 15 4416 14 4417 15 4418 14 4419 15 4420 14 4421 15 4422 15 4423 15 4424 15 4425 15 4426 15 4427 15 4428 15 4429 15 4430 8 4431 8 4432 8 4433 8 4434 8 4435 8 4436 8 4437 8 4438 13 4439 13 4440 8 4441 8 4442 8 4443 8 4444 8 4445 8 4446 8 4447 8 4448 8 4449 8 4450 8 4451 8 4452 8 4453 8 4454 8 4455 8 4456 8 4457 8 4458 8 4459 8 4460 8 4461 8 4462 8 4463 8 4464 13 4465 13 4466 13 4467 13 4468 13 4469 13 4470 13 4471 14 4472 15 4473 14 4474 15 4475 14 4476 15 4477 14 4478 15 4479 14 4480 15 4481 14 4482 15 4483 14 4484 15 4485 14 4486 15 4487 14 4488 15 4489 14 4490 15 4491 15 4492 15 4493 15 4494 14 4495 15 4496 15 4497 15 4498 15 4499 15 4500 15 4501 14 4502 15 4503 14 4504 15 4505 15 4506 15 4507 15 4508 15 4509 15 4510 15 4511 15 4512 15 4513 15 4514 15 4515 15 4516 15 4517 15 4518 15 4519 14 4520 15 4521 15 4522 14 4523 14 4524 14 4525 30 4526 13 4527 30 4528 14 4529 15 4530 14 4531 14 4532 14 4533 30 4534 13 4535 30 4536 14 4537 30 4538 15 4539 15 4540 15 4541 15 4542 15 4543 15 4544 15 4545 15 4546 15 4547 15 4548 15 4549 15 4550 15 4551 15 4552 15 4553 15 4554 15 4555 15 4556 15 4557 15 4558 15 4559 15 4560 15 4561 15 4562 15 4563 15 4564 15 4565 15 4566 15 4567 15 4568 14 4569 15 4570 15 4571 15 4572 15 4573 15 4574 15 4575 15 4576 15 4577 15 4578 14 4579 15 4580 14 4581 15 4582 14 4583 15 4584 14 4585 15 4586 14 4587 15 4588 14 4589 15 4590 15 4591 15 4592 14 4593 15 4594 14 4595 15 4596 14 4597 15 4598 14 4599 15 4600 15 4601 15 4602 15 4603 15 4604 15 4605 15 4606 15 4607 15 4608 15 4609 15 4610 15 4611 15 4612 15 4613 15 4614 15 4615 15 4616 15 4617 15 4618 15 4619 15 4620 15 4621 15 4622 15 4623 15 4624 15 4625 15 4626 15 4627 15 4628 14 4629 15 4630 14 4631 14 4632 15 4633 15 4634 15 4635 15 4636 15 4637 15 4638 15 4639 15 4640 15 4641 15 4642 15 4643 15 4644 15 4645 15 4646 15 4647 15 4648 15 4649 15 4650 15 4651 15 4652 15 4653 15 4654 15 4655 15 4656 15 4657 15 4658 15 4659 15 4660 15 4661 15 4662 15 4663 15 4664 15 4665 15 4666 15 4667 15 4668 15 4669 15 4670 15 4671 15 4672 15 4673 15 4674 15 4675 15 4676 15 4677 15 4678 15 4679 15 4680 15 4681 15 4682 15 4683 15 4684 15 4685 15 4686 15 4687 15 4688 15 4689 15 4690 15 4691 15 4692 15 4693 15 4694 15 4695 15 4696 15 4697 15 4698 15 4699 15 4700 15 4701 15 4702 15 4703 15 4704 15 4705 15 4706 15 4707 15 4708 15 4709 15 4710 15 4711 15 4712 15 4713 15 4714 15 4715 15 4716 15 4717 15 4718 15 4719 15 4720 15 4721 15 4722 15 4723 15 4724 15 4725 15 4726 15 4727 15 4728 15 4729 15 4730 15 4731 15 4732 15 4733 15 4734 15 4735 15 4736 15 4737 15 4738 15 4739 15 4740 15 4741 15 4742 15 4743 15 4744 15 4745 15 4746 15 4747 15 4748 15 4749 15 4750 15 4751 15 4752 15 4753 15 4754 15 4755 15 4756 15 4757 15 4758 15 4759 15 4760 15 4761 15 4762 15 4763 15 4764 15 4765 15 4766 15 4767 15 4768 15 4769 15 4770 15 4771 15 4772 15 4773 15 4774 15 4775 15 4776 15 4777 15 4778 15 4779 15 4780 15 4781 15 4782 15 4783 15 4784 15 4785 15 4786 15 4787 15 4788 15 4789 15 4790 15 4791 15 4792 15 4793 15 4794 15 4795 15 4796 15 4797 15 4798 15 4799 15 4800 15 4801 15 4802 15 4803 15 4804 15 4805 15 4806 15 4807 15 4808 15 4809 15 4810 15 4811 15 4812 15 4813 15 4814 15 4815 15 4816 15 4817 15 4818 15 4819 15 4820 15 4821 15 4822 15 4823 15 4824 15 4825 15 4826 15 4827 15 4828 15 4829 15 4830 15 4831 15 4832 15 4833 15 4834 15 4835 15 4836 15 4837 15 4838 15 4839 15 4840 15 4841 15 4842 15 4843 15 4844 15 4845 15 4846 15 4847 15 4848 15 4849 15 4850 15 4851 15 4852 15 4853 15 4854 15 4855 15 4856 15 4857 15 4858 15 4859 15 4860 15 4861 15 4862 15 4863 15 4864 15 4865 15 4866 15 4867 15 4868 15 4869 15 4870 15 4871 15 4872 15 4873 15 4874 15 4875 15 4876 15 4877 15 4878 15 4879 15 4880 15 4881 15 4882 15 4883 15 4884 15 4885 15 4886 15 4887 15 4888 15 4889 15 4890 15 4891 15 4892 15 4893 15 4894 15 4895 15 4896 15 4897 15 4898 15 4899 15 4900 15 4901 15 4902 15 4903 15 4904 15 4905 15 4906 15 4907 15 4908 15 4909 15 4910 15 4911 15 4912 15 4913 15 4914 15 4915 15 4916 15 4917 15 4918 15 4919 15 4920 15 4921 15 4922 15 4923 15 4924 15 4925 15 4926 15 4927 15 4928 15 4929 15 4930 15 4931 15 4932 15 4933 15 4934 15 4935 15 4936 15 4937 15 4938 15 4939 15 4940 15 4941 15 4942 15 4943 15 4944 15 4945 15 4946 15 4947 15 4948 15 4949 15 4950 15 4951 15 4952 15 4953 15 4954 15 4955 15 4956 15 4957 15 4958 15 4959 15 4960 15 4961 15 4962 15 4963 14 4964 15 4965 15 4966 15 4967 15 4968 15 4969 15 4970 15 4971 15 4972 15 4973 15 4974 15 4975 15 4976 15 4977 15 4978 15 4979 15 4980 15 4981 15 4982 15 4983 15 4984 15 4985 15 4986 15 4987 15 4988 15 4989 15 4990 15 4991 15 4992 15 4993 15 4994 15 4995 15 4996 15 4997 15 4998 15 4999 15 5000 15 5001 15 5002 15 5003 15 5004 15 5005 15 5006 15 5007 15 5008 15 5009 15 5010 15 5011 15 5012 15 5013 15 5014 15 5015 15 5016 15 5017 15 5018 15 5019 15 5020 15 5021 15 5022 15 5023 15 5024 15 5025 15 5026 15 5027 15 5028 15 5029 15 5030 15 5031 15 5032 15 5033 15 5034 15 5035 15 5036 15 5037 15 5038 15 5039 15 5040 15 5041 15 5042 15 5043 15 5044 15 5045 15 5046 15 5047 15 5048 15 5049 14 5050 15 5051 15 5052 15 5053 15 5054 15 5055 15 5056 15 5057 15 5058 15 5059 15 5060 15 5061 15 5062 15 5063 15 5064 15 5065 15 5066 15 5067 15 5068 15 5069 15 5070 15 5071 15 5072 15 5073 15 5074 15 5075 15 5076 15 5077 15 5078 15 5079 15 5080 15 5081 15 5082 15 5083 15 5084 15 5085 15 5086 15 5087 15 5088 15 5089 15 5090 15 5091 15 5092 15 5093 15 5094 15 5095 15 5096 15 5097 15 5098 15 5099 15 5100 15 5101 15 5102 15 5103 15 5104 15 5105 14 5106 15 5107 15 5108 15 5109 15 5110 15 5111 14 5112 15 5113 14 5114 14 5115 15 5116 15 5117 14 5118 15 5119 14 5120 14 5121 14 5122 14 5123 14 5124 14 5125 14 5126 14 5127 14 5128 14 5129 14 5130 14 5131 14 5132 14 5133 14 5134 14 5135 14 5136 14 5137 14 5138 14 5139 14 5140 14 5141 14 5142 14 5143 14 5144 14 5145 14 5146 14 5147 14 5148 14 5149 14 5150 15 5151 15 5152 14 5153 15 5154 14 5155 15 5156 15 5157 15 5158 15 5159 15 5160 15 5161 14 5162 15 5163 15 5164 15 5165 15 5166 14 5167 15 5168 15 5169 15 5170 15 5171 15 5172 15 5173 15 5174 15 5175 15 5176 15 5177 15 5178 15 5179 15 5180 15 5181 15 5182 15 5183 15 5184 15 5185 15 5186 15 5187 15 5188 15 5189 15 5190 15 5191 15 5192 15 5193 15 5194 15 5195 15 5196 14 5197 15 5198 14 5199 15 5200 14 5201 15 5202 14 5203 15 5204 14 5205 15 5206 15 5207 15 5208 15 5209 15 5210 15 5211 15 5212 15 5213 15 5214 15 5215 15 5216 15 5217 15 5218 15 5219 15 5220 15 5221 15 5222 15 5223 15 5224 15 5225 15 5226 15 5227 15 5228 15 5229 15 5230 15 5231 15 5232 15 5233 15 5234 15 5235 15 5236 15 5237 15 5238 15 5239 15 5240 15 5241 15 5242 15 5243 15 5244 15 5245 15 5246 15 5247 15 5248 15 5249 15 5250 15 5251 15 5252 15 5253 15 5254 15 5255 15 5256 15 5257 15 5258 15 5259 15 5260 15 5261 15 5262 15 5263 15 5264 14 5265 15 5266 14 5267 15 5268 14 5269 15 5270 14 5271 15 5272 14 5273 15 5274 14 5275 15 5276 14 5277 15 5278 14 5279 15 5280 14 5281 15 5282 14 5283 15 5284 14 5285 15 5286 14 5287 15 5288 15 5289 15 5290 15 5291 15 5292 15 5293 15 5294 15 5295 15 5296 15 5297 15 5298 15 5299 15 5300 15 5301 15 5302 15 5303 15 5304 15 5305 15 5306 15 5307 15 5308 15 5309 15 5310 15 5311 15 5312 15 5313 15 5314 15 5315 15 5316 15 5317 15 5318 15 5319 15 5320 15 5321 15 5322 15 5323 15 5324 15 5325 15 5326 15 5327 15 5328 15 5329 15 5330 15 5331 15 5332 15 5333 15 5334 15 5335 14 5336 15 5337 14 5338 15 5339 14 5340 15 5341 14 5342 15 5343 14 5344 15 5345 14 5346 15 5347 14 5348 15 5349 15 5350 15 5351 15 5352 15 5353 15 5354 15 5355 15 5356 15 5357 15 5358 15 5359 15 5360 15 5361 15 5362 15 5363 15 5364 15 5365 15 5366 15 5367 15 5368 15 5369 14 5370 15 5371 14 5372 15 5373 15 5374 15 5375 15 5376 15 5377 15 5378 15 5379 15 5380 15 5381 15 5382 15 5383 15 5384 15 5385 15 5386 15 5387 15 5388 15 5389 15 5390 26 5391 26 5392 26 5393 26 5394 26 5395 26 5396 26 5397 26 5398 26 5399 26 5400 26 5401 26 5402 26 5403 26 5404 26 5405 26 5406 26 5407 26 5408 26 5409 26 5410 26 5411 26 5412 26 5413 26 5414 26 5415 26 5416 26 5417 26 5418 26 5419 26 5420 26 5421 26 5422 26 5423 26 5424 26 5425 26 5426 26 5427 26 5428 26 5429 26 5430 26 5431 26 5432 26 5433 26 5434 26 5435 26 5436 26 5437 26 5438 26 5439 26 5440 26 5441 26 5442 26 5443 26 5444 26 5445 26 5446 26 5447 26 5448 26 5449 26 5450 26 5451 26 5452 26 5453 26 5454 26 5455 26 5456 26 5457 26 5458 26 5459 26 5460 26 5461 26 5462 26 5463 26 5464 26 5465 26 5466 26 5467 26 5468 26 5469 26 5470 26 5471 26 5472 26 5473 26 5474 26 5475 26 5476 26 5477 26 5478 26 5479 26 5480 26 5481 26 5482 26 5483 26 5484 26 5485 26 5486 26 5487 26 5488 26 5489 26 5490 26 5491 26 5492 26 5493 26 5494 26 5495 26 5496 26 5497 26 5498 26 5499 26 5500 26 5501 26 5502 26 5503 26 5504 26 5505 26 5506 26 5507 26 5508 26 5509 26 5510 26 5511 26 5512 26 5513 26 5514 26 5515 26 5516 26 5517 26 5518 26 5519 26 5520 26 5521 26 5522 26 5523 26 5524 26 5525 26 5526 26 5527 26 5528 26 5529 26 5530 26 5531 26 5532 26 5533 26 5534 26 5535 26 5536 26 5537 26 5538 26 5539 26 5540 26 5541 26 5542 26 5543 26 5544 26 5545 26 5546 26 5547 26 5548 26 5549 26 5550 26 5551 26 5552 26 5553 26 5554 26 5555 26 5556 26 5557 26 5558 26 5559 26 5560 26 5561 26 5562 26 5563 26 5564 26 5565 26 5566 26 5567 26 5568 26 5569 26 5570 26 5571 26 5572 26 5573 26 5574 26 5575 26 5576 26 5577 26 5578 26 5579 26 5580 26 5581 26 5582 26 5583 26 5584 26 5585 26 5586 26 5587 26 5588 26 5589 26 5590 26 5591 26 5592 26 5593 26 5594 26 5595 26 5596 26 5597 26 5598 26 5599 26 5600 26 5601 26 5602 26 5603 26 5604 26 5605 26 5606 26 5607 26 5608 26 5609 26 5610 26 5611 26 5612 26 5613 26 5614 26 5615 26 5616 26 5617 26 5618 26 5619 26 5620 26 5621 26 5622 26 5623 26 5624 26 5625 26 5626 26 5627 26 5628 26 5629 26 5630 26 5631 26 5632 26 5633 26 5634 26 5635 26 5636 26 5637 26 5638 26 5639 26 5640 26 5641 26 5642 26 5643 26 5644 26 5645 26 5646 26 5647 26 5648 26 5649 26 5650 26 5651 26 5652 26 5653 26 5654 26 5655 26 5656 26 5657 26 5658 26 5659 26 5660 26 5661 26 5662 26 5663 26 5664 26 5665 26 5666 26 5667 26 5668 26 5669 26 5670 26 5671 26 5672 26 5673 26 5674 26 5675 26 5676 26 5677 26 5678 26 5679 26 5680 26 5681 26 5682 26 5683 26 5684 26 5685 26 5686 26 5687 26 5688 26 5689 26 5690 26 5691 26 5692 26 5693 26 5694 26 5695 26 5696 26 5697 26 5698 26 5699 26 5700 26 5701 26 5702 26 5703 26 5704 26 5705 26 5706 26 5707 26 5708 26 5709 26 5710 26 5711 26 5712 26 5713 26 5714 26 5715 26 5716 26 5717 26 5718 26 5719 26 5720 26 5721 26 5722 26 5723 26 5724 26 5725 26 5726 26 5727 26 5728 26 5729 26 5730 26 5731 26 5732 26 5733 26 5734 26 5735 26 5736 26 5737 26 5738 26 5739 26 5740 26 5741 26 5742 26 5743 26 5744 26 5745 26 5746 26 5747 26 5748 26 5749 26 5750 26 5751 26 5752 26 5753 26 5754 26 5755 26 5756 26 5757 26 5758 26 5759 26 5760 26 5761 26 5762 26 5763 26 5764 26 5765 26 5766 26 5767 26 5768 26 5769 26 5770 26 5771 26 5772 26 5773 26 5774 26 5775 26 5776 26 5777 26 5778 26 5779 26 5780 26 5781 26 5782 26 5783 26 5784 26 5785 26 5786 26 5787 26 5788 26 5789 26 5790 26 5791 26 5792 26 5793 26 5794 26 5795 26 5796 26 5797 26 5798 26 5799 26 5800 26 5801 26 5802 26 5803 26 5804 26 5805 26 5806 26 5807 26 5808 26 5809 26 5810 26 5811 26 5812 26 5813 26 5814 26 5815 26 5816 26 5817 26 5818 26 5819 26 5820 26 5821 26 5822 26 5823 26 5824 26 5825 26 5826 26 5827 26 5828 26 5829 26 5830 26 5831 26 5832 26 5833 26 5834 26 5835 26 5836 26 5837 26 5838 26 5839 26 5840 26 5841 26 5842 26 5843 26 5844 26 5845 26 5846 26 5847 26 5848 26 5849 26 5850 26 5851 26 5852 26 5853 26 5854 26 5855 26 5856 26 5857 26 5858 26 5859 26 5860 26 5861 26 5862 26 5863 26 5864 26 5865 26 5866 26 5867 26 5868 26 5869 26 5870 26 5871 26 5872 26 5873 26 5874 26 5875 26 5876 26 5877 26 5878 26 5879 26 5880 26 5881 26 5882 26 5883 26 5884 26 5885 26 5886 26 5887 26 5888 26 5889 26 5890 26 5891 26 5892 26 5893 26 5894 26 5895 26 5896 26 5897 26 5898 26 5899 26 5900 26 5901 26 5902 26 5903 26 5904 26 5905 26 5906 26 5907 26 5908 26 5909 26 5910 26 5911 26 5912 25 5913 25 5914 25 5915 26 5916 25 5917 26 5918 25 5919 26 5920 26 5921 26 5922 26 5923 26 5924 26 5925 26 5926 26 5927 26 5928 26 5929 26 5930 26 5931 26 5932 26 5933 26 5934 26 5935 26 5936 26 5937 26 5938 26 5939 26 5940 26 5941 26 5942 26 5943 26 5944 26 5945 26 5946 26 5947 25 5948 26 5949 25 5950 25 5951 13 5952 14 5953 30 5954 13 5955 30 5956 26 5957 26 5958 26 5959 26 5960 26 5961 25 5962 26 5963 25 5964 26 5965 26 5966 26 5967 26 5968 26 5969 26 5970 26 5971 26 5972 26 5973 26 5974 26 5975 26 5976 26 5977 26 5978 26 5979 26 5980 26 5981 26 5982 26 5983 26 5984 26 5985 26 5986 26 5987 26 5988 26 5989 26 5990 26 5991 26 5992 26 5993 26 5994 26 5995 26 5996 26 5997 26 5998 26 5999 26 6000 26 6001 26 6002 26 6003 26 6004 26 6005 26 6006 26 6007 26 6008 26 6009 26 6010 26 6011 26 6012 26 6013 26 6014 26 6015 26 6016 26 6017 26 6018 26 6019 26 6020 26 6021 26 6022 26 6023 26 6024 26 6025 26 6026 26 6027 26 6028 26 6029 26 6030 26 6031 26 6032 26 6033 26 6034 26 6035 26 6036 26 6037 26 6038 26 6039 26 6040 26 6041 26 6042 26 6043 26 6044 26 6045 26 6046 26 6047 26 6048 26 6049 26 6050 26 6051 26 6052 26 6053 26 6054 26 6055 26 6056 26 6057 26 6058 26 6059 26 6060 26 6061 26 6062 26 6063 26 6064 26 6065 26 6066 26 6067 26 6068 26 6069 26 6070 26 6071 25 6072 25 6073 26 6074 25 6075 26 6076 25 6077 26 6078 25 6079 26 6080 25 6081 26 6082 26 6083 26 6084 26 6085 26 6086 26 6087 26 6088 26 6089 26 6090 26 6091 26 6092 26 6093 26 6094 26 6095 26 6096 26 6097 26 6098 26 6099 26 6100 26 6101 26 6102 26 6103 25 6104 26 6105 26 6106 26 6107 26 6108 26 6109 26 6110 26 6111 26 6112 26 6113 26 6114 26 6115 26 6116 26 6117 26 6118 26 6119 26 6120 26 6121 26 6122 26 6123 26 6124 26 6125 26 6126 26 6127 26 6128 26 6129 26 6130 26 6131 26 6132 26 6133 26 6134 26 6135 26 6136 26 6137 26 6138 26 6139 26 6140 26 6141 26 6142 26 6143 26 6144 26 6145 26 6146 26 6147 26 6148 26 6149 26 6150 26 6151 26 6152 26 6153 26 6154 25 6155 25 6156 25 6157 25 6158 25 6159 25 6160 25 6161 25 6162 25 6163 25 6164 25 6165 25 6166 25 6167 25 6168 25 6169 26 6170 25 6171 26 6172 25 6173 25 6174 25 6175 25 6176 25 6177 13 6178 13 6179 13 6180 13 6181 13 6182 13 6183 13 6184 13 6185 13 6186 13 6187 13 6188 13 6189 26 6190 26 6191 26 6192 26 6193 26 6194 26 6195 26 6196 26 6197 26 6198 26 6199 26 6200 26 6201 26 6202 26 6203 26 6204 13 6205 13 6206 26 6207 26 6208 26 6209 26 6210 26 6211 26 6212 26 6213 26 6214 26 6215 26 6216 26 6217 26 6218 26 6219 26 6220 26 6221 26 6222 14 6223 30 6224 13 6225 26 6226 26 6227 26 6228 26 6229 26 6230 25 6231 14 6232 30 6233 13 6234 30 6235 13 6236 30 6237 14 6238 30 6239 13 6240 13 6241 13 6242 26 6243 26 6244 26 6245 26 6246 26 6247 26 6248 26 6249 26 6250 26 6251 26 6252 26 6253 26 6254 26 6255 26 6256 26 6257 26 6258 26 6259 26 6260 26 6261 26 6262 26 6263 26 6264 26 6265 26 6266 26 6267 26 6268 26 6269 26 6270 26 6271 26 6272 26 6273 26 6274 26 6275 26 6276 26 6277 26 6278 26 6279 26 6280 26 6281 26 6282 26 6283 26 6284 26 6285 26 6286 26 6287 26 6288 26 6289 26 6290 26 6291 26 6292 26 6293 26 6294 26 6295 26 6296 26 6297 26 6298 26 6299 26 6300 26 6301 26 6302 26 6303 26 6304 26 6305 26 6306 26 6307 26 6308 26 6309 26 6310 26 6311 26 6312 26 6313 26 6314 26 6315 26 6316 26 6317 26 6318 26 6319 26 6320 26 6321 26 6322 26 6323 26 6324 26 6325 26 6326 26 6327 26 6328 26 6329 26 6330 26 6331 26 6332 26 6333 26 6334 26 6335 26 6336 26 6337 26 6338 26 6339 26 6340 26 6341 26 6342 26 6343 26 6344 26 6345 26 6346 26 6347 26 6348 26 6349 26 6350 26 6351 26 6352 26 6353 25 6354 26 6355 26 6356 26 6357 26 6358 26 6359 25 6360 26 6361 13 6362 13 6363 30 6364 14 6365 30 6366 26 6367 26 6368 26 6369 26 6370 26 6371 26 6372 26 6373 26 6374 26 6375 26 6376 26 6377 26 6378 26 6379 26 6380 26 6381 26 6382 26 6383 26 6384 26 6385 26 6386 26 6387 26 6388 26 6389 26 6390 26 6391 26 6392 26 6393 26 6394 26 6395 26 6396 26 6397 26 6398 26 6399 26 6400 26 6401 26 6402 26 6403 26 6404 26 6405 26 6406 26 6407 25 6408 26 6409 26 6410 26 6411 26 6412 26 6413 26 6414 26 6415 26 6416 25 6417 26 6418 25 6419 25 6420 25 6421 25 6422 25 6423 25 6424 25 6425 25 6426 25 6427 26 6428 26 6429 26 6430 26 6431 26 6432 26 6433 26 6434 26 6435 26 6436 26 6437 26 6438 26 6439 26 6440 26 6441 26 6442 26 6443 26 6444 26 6445 26 6446 26 6447 26 6448 26 6449 26 6450 26 6451 26 6452 26 6453 26 6454 26 6455 26 6456 26 6457 13 6458 13 6459 30 6460 13 6461 14 6462 30 6463 13 6464 30 6465 13 6466 14 6467 30 6468 14 6469 30 6470 26 6471 26 6472 26 6473 26 6474 26 6475 26 6476 26 6477 26 6478 26 6479 26 6480 26 6481 26 6482 26 6483 26 6484 26 6485 26 6486 26 6487 26 6488 26 6489 26 6490 26 6491 26 6492 26 6493 26 6494 26 6495 26 6496 26 6497 26 6498 26 6499 26 6500 26 6501 26 6502 26 6503 26 6504 26 6505 26 6506 26 6507 26 6508 26 6509 26 6510 26 6511 26 6512 26 6513 26 6514 26 6515 26 6516 26 6517 26 6518 26 6519 26 6520 26 6521 26 6522 26 6523 13 6524 13 6525 13 6526 30 6527 13 6528 30 6529 13 6530 30 6531 14 6532 30 6533 14 6534 30 6535 14 6536 30 6537 26 6538 26 6539 26 6540 26 6541 26 6542 26 6543 26 6544 26 6545 26 6546 26 6547 26 6548 26 6549 26 6550 26 6551 26 6552 26 6553 26 6554 13 6555 13 6556 13 6557 13 6558 26 6559 26 6560 14 6561 30 6562 14 6563 30 6564 13 6565 13 6566 30 6567 13 6568 30 6569 13 6570 13 6571 13 6572 13 6573 13 6574 14 6575 30 6576 13 6577 13 6578 14 6579 30 6580 13 6581 30 6582 13 6583 30 6584 13 6585 30 6586 13 6587 13 6588 14 6589 30 6590 14 6591 30 6592 13 6593 30 6594 13 6595 30 6596 26 6597 26 6598 26 6599 26 6600 26 6601 26 6602 26 6603 26 6604 26 6605 26 6606 26 6607 26 6608 26 6609 26 6610 26 6611 26 6612 26 6613 26 6614 26 6615 26 6616 26 6617 26 6618 26 6619 26 6620 26 6621 26 6622 26 6623 26 6624 26 6625 26 6626 26 6627 26 6628 26 6629 26 6630 26 6631 26 6632 26 6633 26 6634 26 6635 26 6636 26 6637 26 6638 26 6639 26 6640 26 6641 26 6642 26 6643 26 6644 26 6645 26 6646 26 6647 26 6648 26 6649 26 6650 26 6651 26 6652 26 6653 26 6654 26 6655 26 6656 26 6657 26 6658 26 6659 26 6660 26 6661 26 6662 26 6663 26 6664 26 6665 26 6666 26 6667 26 6668 26 6669 26 6670 26 6671 26 6672 26 6673 26 6674 26 6675 26 6676 26 6677 26 6678 26 6679 26 6680 26 6681 26 6682 26 6683 26 6684 26 6685 26 6686 26 6687 26 6688 26 6689 26 6690 26 6691 26 6692 26 6693 26 6694 26 6695 26 6696 26 6697 26 6698 26 6699 26 6700 26 6701 26 6702 26 6703 26 6704 26 6705 26 6706 26 6707 26 6708 26 6709 26 6710 26 6711 26 6712 26 6713 26 6714 26 6715 26 6716 26 6717 26 6718 26 6719 26 6720 26 6721 26 6722 26 6723 26 6724 26 6725 26 6726 26 6727 26 6728 26 6729 26 6730 26 6731 26 6732 26 6733 26 6734 26 6735 26 6736 26 6737 26 6738 26 6739 26 6740 26 6741 26 6742 26 6743 26 6744 26 6745 26 6746 26 6747 26 6748 26 6749 26 6750 26 6751 26 6752 26 6753 26 6754 5 6755 5 6756 5 6757 5 6758 5 6759 5 6760 5 6761 5 6762 5 6763 5 6764 5 6765 5 6766 5 6767 4 6768 5 6769 5 6770 5 6771 5 6772 5 6773 5 6774 5 6775 4 6776 5 6777 5 6778 4 6779 5 6780 4 6781 5 6782 4 6783 5 6784 5 6785 5 6786 5 6787 5 6788 5 6789 4 6790 5 6791 5 6792 5 6793 5 6794 5 6795 5 6796 4 6797 5 6798 4 6799 5 6800 5 6801 5 6802 5 6803 5 6804 5 6805 5 6806 5 6807 5 6808 5 6809 5 6810 5 6811 5 6812 5 6813 5 6814 5 6815 5 6816 5 6817 5 6818 5 6819 5 6820 5 6821 5 6822 5 6823 5 6824 5 6825 5 6826 5 6827 5 6828 5 6829 5 6830 5 6831 5 6832 5 6833 5 6834 5 6835 5 6836 5 6837 5 6838 5 6839 5 6840 4 6841 5 6842 4 6843 5 6844 5 6845 5 6846 5 6847 5 6848 5 6849 5 6850 5 6851 5 6852 5 6853 5 6854 5 6855 5 6856 5 6857 5 6858 5 6859 5 6860 5 6861 5 6862 5 6863 5 6864 5 6865 5 6866 5 6867 5 6868 5 6869 4 6870 5 6871 4 6872 5 6873 4 6874 5 6875 5 6876 5 6877 5 6878 5 6879 4 6880 5 6881 4 6882 5 6883 5 6884 5 6885 5 6886 5 6887 5 6888 5 6889 5 6890 5 6891 5 6892 5 6893 5 6894 5 6895 5 6896 5 6897 5 6898 5 6899 5 6900 5 6901 5 6902 4 6903 4 6904 4 6905 4 6906 4 6907 4 6908 4 6909 4 6910 4 6911 4 6912 4 6913 4 6914 4 6915 5 6916 3 6917 4 6918 4 6919 5 6920 4 6921 5 6922 4 6923 4 6924 4 6925 5 6926 4 6927 5 6928 4 6929 5 6930 4 6931 5 6932 4 6933 5 6934 4 6935 5 6936 4 6937 5 6938 4 6939 5 6940 4 6941 5 6942 4 6943 5 6944 4 6945 4 6946 4 6947 4 6948 5 6949 5 6950 4 6951 5 6952 5 6953 5 6954 5 6955 5 6956 5 6957 5 6958 5 6959 5 6960 5 6961 5 6962 5 6963 5 6964 5 6965 5 6966 5 6967 5 6968 5 6969 5 6970 5 6971 5 6972 5 6973 5 6974 5 6975 5 6976 5 6977 5 6978 5 6979 5 6980 5 6981 5 6982 5 6983 5 6984 5 6985 15 6986 15 6987 15 6988 15 6989 15 6990 15 6991 15 6992 15 6993 15 6994 15 6995 15 6996 15 6997 15 6998 15 6999 15 7000 15 7001 15 7002 15 7003 15 7004 15 7005 15 7006 15 7007 15 7008 15 7009 15 7010 15 7011 15 7012 15 7013 15 7014 15 7015 15 7016 15 7017 15 7018 15 7019 15 7020 15 7021 15 7022 15 7023 15 7024 15 7025 15 7026 15 7027 15 7028 15 7029 15 7030 15 7031 15 7032 15 7033 15 7034 15 7035 15 7036 15 7037 15 7038 15 7039 15 7040 15 7041 15 7042 15 7043 15 7044 15 7045 15 7046 15 7047 15 7048 15 7049 15 7050 15 7051 15 7052 15 7053 15 7054 15 7055 15 7056 15 7057 15 7058 15 7059 15 7060 15 7061 15 7062 15 7063 15 7064 15 7065 15 7066 15 7067 15 7068 15 7069 15 7070 15 7071 15 7072 15 7073 15 7074 15 7075 15 7076 15 7077 15 7078 15 7079 15 7080 15 7081 15 7082 15 7083 15 7084 15 7085 15 7086 15 7087 15 7088 15 7089 15 7090 15 7091 15 7092 15 7093 15 7094 15 7095 15 7096 15 7097 15 7098 15 7099 15 7100 15 7101 15 7102 15 7103 15 7104 15 7105 15 7106 15 7107 15 7108 15 7109 15 7110 15 7111 15 7112 15 7113 15 7114 15 7115 15 7116 15 7117 15 7118 15 7119 15 7120 15 7121 15 7122 15 7123 15 7124 15 7125 15 7126 15 7127 15 7128 15 7129 15 7130 15 7131 15 7132 15 7133 15 7134 15 7135 15 7136 15 7137 15 7138 15 7139 15 7140 15 7141 15 7142 15 7143 15 7144 15 7145 15 7146 15 7147 15 7148 15 7149 15 7150 15 7151 15 7152 15 7153 15 7154 15 7155 15 7156 15 7157 15 7158 15 7159 15 7160 15 7161 15 7162 15 7163 15 7164 15 7165 15 7166 15 7167 15 7168 15 7169 15 7170 15 7171 15 7172 15 7173 15 7174 15 7175 15 7176 15 7177 15 7178 15 7179 15 7180 15 7181 15 7182 15 7183 15 7184 15 7185 15 7186 15 7187 15 7188 15 7189 15 7190 15 7191 15 7192 15 7193 15 7194 15 7195 15 7196 15 7197 15 7198 15 7199 15 7200 15 7201 15 7202 15 7203 15 7204 15 7205 15 7206 15 7207 15 7208 15 7209 15 7210 15 7211 15 7212 15 7213 15 7214 15 7215 15 7216 15 7217 15 7218 15 7219 15 7220 15 7221 15 7222 15 7223 15 7224 15 7225 15 7226 15 7227 15 7228 15 7229 15 7230 15 7231 15 7232 15 7233 15 7234 15 7235 15 7236 15 7237 15 7238 15 7239 15 7240 15 7241 15 7242 15 7243 15 7244 15 7245 15 7246 15 7247 15 7248 15 7249 15 7250 15 7251 15 7252 15 7253 15 7254 15 7255 15 7256 15 7257 15 7258 15 7259 15 7260 15 7261 15 7262 15 7263 15 7264 15 7265 15 7266 15 7267 15 7268 15 7269 15 7270 15 7271 15 7272 15 7273 15 7274 15 7275 15 7276 15 7277 15 7278 15 7279 15 7280 15 7281 15 7282 15 7283 15 7284 15 7285 15 7286 15 7287 15 7288 15 7289 15 7290 15 7291 15 7292 15 7293 15 7294 15 7295 15 7296 15 7297 15 7298 15 7299 15 7300 15 7301 15 7302 15 7303 15 7304 15 7305 15 7306 15 7307 15 7308 15 7309 15 7310 15 7311 15 7312 15 7313 15 7314 15 7315 15 7316 15 7317 15 7318 15 7319 15 7320 15 7321 15 7322 15 7323 15 7324 15 7325 15 7326 15 7327 15 7328 15 7329 15 7330 15 7331 15 7332 15 7333 15 7334 15 7335 15 7336 15 7337 15 7338 15 7339 15 7340 15 7341 15 7342 15 7343 15 7344 10 7345 10 7346 10 7347 10 7348 10 7349 10 7350 10 7351 10 7352 10 7353 10 7354 10 7355 10 7356 10 7357 10 7358 10 7359 10 7360 10 7361 10 7362 10 7363 10 7364 10 7365 10 7366 10 7367 10 7368 10 7369 10 7370 10 7371 10 7372 10 7373 10 7374 10 7375 10 7376 10 7377 10 7378 10 7379 10 7380 9 7381 9 7382 9 7383 9 7384 9 7385 10 7386 9 7387 10 7388 9 7389 10 7390 9 7391 10 7392 9 7393 10 7394 9 7395 10 7396 9 7397 10 7398 9 7399 10 7400 9 7401 10 7402 9 7403 10 7404 9 7405 9 7406 9 7407 10 7408 9 7409 10 7410 8 7411 9 7412 9 7413 10 7414 9 7415 9 7416 9 7417 9 7418 9 7419 9 7420 9 7421 9 7422 9 7423 9 7424 9 7425 9 7426 10 7427 10 7428 10 7429 10 7430 10 7431 10 7432 10 7433 10 7434 10 7435 10 7436 10 7437 10 7438 10 7439 10 7440 10 7441 10 7442 10 7443 10 7444 10 7445 9 7446 10 7447 9 7448 10 7449 10 7450 10 7451 10 7452 10 7453 9 7454 10 7455 9 7456 10 7457 9 7458 10 7459 10 7460 10 7461 10 7462 10 7463 10 7464 10 7465 10 7466 10 7467 10 7468 10 7469 10 7470 10 7471 10 7472 10 7473 10 7474 10 7475 10 7476 10 7477 10 7478 10 7479 10 7480 10 7481 10 7482 10 7483 10 7484 9 7485 10 7486 9 7487 10 7488 10 7489 10 7490 10 7491 10 7492 10 7493 10 7494 10 7495 10 7496 10 7497 10 7498 10 7499 10 7500 10 7501 10 7502 10 7503 10 7504 10 7505 10 7506 10 7507 10 7508 10 7509 10 7510 10 7511 10 7512 10 7513 10 7514 10 7515 10 7516 10 7517 10 7518 10 7519 10 7520 10 7521 10 7522 10 7523 10 7524 10 7525 10 7526 10 7527 10 7528 9 7529 10 7530 9 7531 10 7532 10 7533 10 7534 10 7535 10 7536 10 7537 9 7538 10 7539 10 7540 10 7541 10 7542 10 7543 10 7544 9 7545 10 7546 9 7547 10 7548 9 7549 10 7550 10 7551 9 7552 10 7553 10 7554 10 7555 10 7556 10 7557 10 7558 10 7559 9 7560 10 7561 10 7562 10 7563 10 7564 10 7565 10 7566 10 7567 10 7568 10 7569 10 7570 10 7571 10 7572 10 7573 10 7574 9 7575 9 7576 9 7577 9 7578 9 7579 9 7580 9 7581 9 7582 9 7583 9 7584 9 7585 9 7586 9 7587 9 7588 9 7589 9 7590 9 7591 9 7592 9 7593 9 7594 9 7595 9 7596 9 7597 9 7598 9 7599 9 7600 9 7601 9 7602 9 7603 9 7604 9 7605 9 7606 8 7607 9 7608 9 7609 9 7610 9 7611 9 7612 9 7613 8 7614 9 7615 9 7616 9 7617 8 7618 9 7619 9 7620 10 7621 9 7622 10 7623 10 7624 10 7625 10 7626 10 7627 10 7628 10 7629 10 7630 10 7631 10 7632 10 7633 10 7634 10 7635 10 7636 10 7637 10 7638 10 7639 10 7640 10 7641 10 7642 10 7643 10 7644 10 7645 10 7646 10 7647 10 7648 10 7649 10 7650 10 7651 10 7652 10 7653 10 7654 10 7655 10 7656 10 7657 10 7658 10 7659 10 7660 10 7661 10 7662 10 7663 10 7664 10 7665 10 7666 10 7667 10 7668 10 7669 10 7670 10 7671 10 7672 10 7673 10 7674 10 7675 10 7676 10 7677 10 7678 10 7679 10 7680 10 7681 10 7682 10 7683 10 7684 10 7685 10 7686 10 7687 10 7688 10 7689 10 7690 10 7691 10 7692 10 7693 10 7694 10 7695 10 7696 10 7697 10 7698 10 7699 10 7700 10 7701 10 7702 10 7703 10 7704 10 7705 10 7706 10 7707 10 7708 10 7709 10 7710 10 7711 10 7712 10 7713 10 7714 10 7715 10 7716 10 7717 10 7718 10 7719 10 7720 10 7721 10 7722 10 7723 10 7724 10 7725 10 7726 10 7727 10 7728 10 7729 10 7730 10 7731 10 7732 10 7733 10 7734 10 7735 10 7736 10 7737 10 7738 10 7739 10 7740 10 7741 10 7742 10 7743 10 7744 10 7745 10 7746 10 7747 10 7748 10 7749 10 7750 10 7751 10 7752 10 7753 10 7754 10 7755 10 7756 10 7757 10 7758 10 7759 10 7760 10 7761 10 7762 10 7763 10 7764 10 7765 10 7766 10 7767 10 7768 10 7769 10 7770 10 7771 10 7772 10 7773 10 7774 10 7775 10 7776 10 7777 10 7778 10 7779 10 7780 10 7781 10 7782 10 7783 10 7784 10 7785 10 7786 10 7787 10 7788 10 7789 10 7790 10 7791 10 7792 10 7793 10 7794 10 7795 10 7796 10 7797 10 7798 10 7799 10 7800 10 7801 10 7802 10 7803 10 7804 10 7805 10 7806 10 7807 10 7808 10 7809 10 7810 10 7811 10 7812 10 7813 10 7814 10 7815 10 7816 10 7817 9 7818 10 7819 9 7820 10 7821 9 7822 10 7823 10 7824 10 7825 10 7826 10 7827 10 7828 10 7829 10 7830 10 7831 10 7832 10 7833 10 7834 10 7835 10 7836 10 7837 10 7838 10 7839 10 7840 10 7841 10 7842 10 7843 10 7844 10 7845 10 7846 10 7847 10 7848 10 7849 10 7850 10 7851 10 7852 10 7853 10 7854 10 7855 10 7856 10 7857 10 7858 10 7859 10 7860 10 7861 10 7862 10 7863 10 7864 10 7865 10 7866 10 7867 10 7868 10 7869 10 7870 10 7871 10 7872 10 7873 10 7874 10 7875 10 7876 10 7877 10 7878 10 7879 10 7880 10 7881 10 7882 10 7883 10 7884 10 7885 10 7886 10 7887 10 7888 10 7889 10 7890 10 7891 10 7892 10 7893 10 7894 10 7895 10 7896 10 7897 10 7898 10 7899 10 7900 10 7901 10 7902 10 7903 10 7904 10 7905 10 7906 10 7907 9 7908 9 7909 9 7910 9 7911 9 7912 9 7913 9 7914 9 7915 9 7916 9 7917 10 7918 9 7919 10 7920 10 7921 10 7922 10 7923 10 7924 10 7925 10 7926 10 7927 10 7928 10 7929 10 7930 9 7931 10 7932 9 7933 10 7934 9 7935 9 7936 9 7937 10 7938 9 7939 10 7940 9 7941 10 7942 9 7943 10 7944 9 7945 10 7946 9 7947 10 7948 9 7949 10 7950 9 7951 10 7952 10 7953 10 7954 10 7955 10 7956 10 7957 10 7958 10 7959 9 7960 10 7961 9 7962 10 7963 9 7964 10 7965 10 7966 10 7967 10 7968 10 7969 10 7970 9 7971 10 7972 9 7973 10 7974 9 7975 9 7976 9 7977 10 7978 10 7979 10 7980 10 7981 10 7982 10 7983 10 7984 10 7985 10 7986 10 7987 10 7988 10 7989 10 7990 10 7991 10 7992 10 7993 10 7994 10 7995 10 7996 10 7997 10 7998 10 7999 10 8000 10 8001 9 8002 10 8003 9 8004 10 8005 9 8006 9 8007 9 8008 9 8009 9 8010 9 8011 9 8012 9 8013 9 8014 9 8015 9 8016 9 8017 9 8018 9 8019 9 8020 9 8021 9 8022 9 8023 9 8024 9 8025 9 8026 9 8027 9 8028 9 8029 9 8030 9 8031 9 8032 9 8033 9 8034 9 8035 9 8036 9 8037 9 8038 9 8039 9 8040 9 8041 9 8042 9 8043 9 8044 9 8045 9 8046 9 8047 9 8048 10 8049 9 8050 10 8051 10 8052 10 8053 10 8054 10 8055 9 8056 10 8057 9 8058 10 8059 9 8060 10 8061 9 8062 10 8063 10 8064 10 8065 10 8066 10 8067 10 8068 10 8069 10 8070 10 8071 10 8072 10 8073 9 8074 10 8075 10 8076 9 8077 10 8078 9 8079 10 8080 10 8081 10 8082 10 8083 10 8084 10 8085 9 8086 10 8087 9 8088 10 8089 10 8090 10 8091 10 8092 10 8093 10 8094 10 8095 10 8096 10 8097 10 8098 10 8099 10 8100 10 8101 10 8102 10 8103 10 8104 10 8105 10 8106 10 8107 10 8108 10 8109 10 8110 10 8111 10 8112 10 8113 10 8114 10 8115 10 8116 10 8117 10 8118 9 8119 10 8120 9 8121 10 8122 9 8123 10 8124 10 8125 10 8126 10 8127 10 8128 9 8129 10 8130 10 8131 10 8132 10 8133 10 8134 10 8135 10 8136 9 8137 10 8138 10 8139 10 8140 10 8141 10 8142 10 8143 10 8144 10 8145 10 8146 10 8147 10 8148 9 8149 10 8150 9 8151 10 8152 10 8153 10 8154 10 8155 10 8156 10 8157 10 8158 9 8159 10 8160 10 8161 10 8162 10 8163 10 8164 9 8165 10 8166 9 8167 10 8168 10 8169 10 8170 10 8171 9 8172 10 8173 9 8174 10 8175 9 8176 10 8177 10 8178 10 8179 10 8180 9 8181 10 8182 9 8183 10 8184 9 8185 9 8186 10 8187 10 8188 10 8189 10 8190 10 8191 10 8192 10 8193 10 8194 10 8195 9 8196 10 8197 9 8198 10 8199 10 8200 10 8201 10 8202 10 8203 10 8204 9 8205 10 8206 10 8207 10 8208 10 8209 10 8210 9 8211 10 8212 9 8213 10 8214 9 8215 10 8216 9 8217 10 8218 10 8219 10 8220 10 8221 10 8222 9 8223 10 8224 9 8225 10 8226 10 8227 10 8228 10 8229 9 8230 10 8231 9 8232 10 8233 9 8234 10 8235 9 8236 10 8237 10 8238 10 8239 10 8240 10 8241 10 8242 10 8243 10 8244 10 8245 9 8246 10 8247 9 8248 10 8249 9 8250 10 8251 9 8252 10 8253 9 8254 10 8255 9 8256 10 8257 10 8258 10 8259 10 8260 10 8261 10 8262 10 8263 10 8264 10 8265 10 8266 10 8267 9 8268 10 8269 9 8270 10 8271 10 8272 10 8273 10 8274 10 8275 10 8276 10 8277 10 8278 10 8279 9 8280 10 8281 9 8282 9 8283 9 8284 9 8285 9 8286 9 8287 8 8288 9 8289 8 8290 9 8291 9 8292 9 8293 10 8294 9 8295 10 8296 9 8297 10 8298 9 8299 10 8300 9 8301 10 8302 9 8303 10 8304 9 8305 10 8306 9 8307 9 8308 9 8309 9 8310 9 8311 9 8312 9 8313 9 8314 9 8315 9 8316 9 8317 9 8318 9 8319 9 8320 9 8321 9 8322 8 8323 9 8324 8 8325 9 8326 8 8327 9 8328 8 8329 9 8330 9 8331 9 8332 8 8333 9 8334 8 8335 9 8336 8 8337 9 8338 8 8339 9 8340 9 8341 9 8342 9 8343 9 8344 9 8345 8 8346 9 8347 9 8348 8 8349 9 8350 9 8351 9 8352 9 8353 9 8354 9 8355 9 8356 9 8357 9 8358 9 8359 9 8360 9 8361 9 8362 9 8363 9 8364 9 8365 9 8366 9 8367 9 8368 9 8369 9 8370 15 8371 15 8372 15 8373 15 8374 15 8375 15 8376 15 8377 15 8378 15 8379 15 8380 15 8381 15 8382 15 8383 15 8384 15 8385 15 8386 15 8387 15 8388 15 8389 15 8390 15 8391 15 8392 15 8393 15 8394 15 8395 15 8396 15 8397 15 8398 15 8399 15 8400 15 8401 15 8402 15 8403 15 8404 15 8405 15 8406 15 8407 15 8408 15 8409 15 8410 15 8411 15 8412 15 8413 15 8414 15 8415 15 8416 15 8417 15 8418 15 8419 15 8420 15 8421 15 8422 15 8423 15 8424 15 8425 15 8426 15 8427 15 8428 15 8429 15 8430 15 8431 15 8432 15 8433 15 8434 15 8435 15 8436 15 8437 15 8438 15 8439 15 8440 15 8441 15 8442 15 8443 15 8444 15 8445 15 8446 15 8447 15 8448 15 8449 15 8450 15 8451 15 8452 15 8453 15 8454 15 8455 15 8456 15 8457 15 8458 15 8459 15 8460 15 8461 15 8462 15 8463 15 8464 15 8465 15 8466 15 8467 15 8468 15 8469 15 8470 15 8471 15 8472 15 8473 15 8474 15 8475 15 8476 15 8477 15 8478 15 8479 15 8480 15 8481 15 8482 15 8483 15 8484 15 8485 13 8486 13 8487 13 8488 13 8489 13 8490 13 8491 13 8492 13 8493 13 8494 13 8495 13 8496 13 8497 13 8498 13 8499 13 8500 13 8501 13 8502 13 8503 13 8504 13 8505 13 8506 13 8507 13 8508 13 8509 13 8510 13 8511 13 8512 13 8513 13 8514 13 8515 13 8516 13 8517 13 8518 13 8519 13 8520 13 8521 13 8522 13 8523 13 8524 13 8525 13 8526 13 8527 13 8528 13 8529 13 8530 13 8531 13 8532 13 8533 13 8534 13 8535 13 8536 13 8537 13 8538 13 8539 13 8540 13 8541 13 8542 13 8543 13 8544 13 8545 13 8546 13 8547 13 8548 13 8549 13 8550 13 8551 13 8552 13 8553 13 8554 13 8555 13 8556 13 8557 13 8558 13 8559 13 8560 13 8561 13 8562 13 8563 13 8564 13 8565 13 8566 13 8567 13 8568 13 8569 13 8570 13 8571 13 8572 13 8573 13 8574 13 8575 13 8576</v> + </vertex_weights> + </skin> + </controller> + </library_controllers> + <library_visual_scenes> + <visual_scene id="Scene" name="Scene"> + <node id="_6_15_t" type="NODE"> + <translate sid="location">0 0 0</translate> + <rotate sid="rotationZ">0 0 1 0</rotate> + <rotate sid="rotationY">0 1 0 0</rotate> + <rotate sid="rotationX">1 0 0 0</rotate> + <scale sid="scale">1 1 1</scale> + <node id="Hips" name="Hips" sid="Hips" type="JOINT"> + <matrix sid="transform">1.87856e-15 3.25841e-7 1 0 1 1.42109e-14 1.23323e-14 0 -1.42109e-14 1 -3.25841e-7 0 0 0 0 1</matrix> + <node id="LHipJoint" name="LHipJoint" sid="LHipJoint" type="JOINT"> + <matrix sid="transform">-0.4072819 0.635349 -0.6560891 2.6511e-15 -0.6353492 -0.7131573 -0.296206 0 -0.6560889 0.2962064 0.6941245 1.62921e-8 0 0 0 1</matrix> + <node id="LeftUpLeg" name="LeftUpLeg" sid="LeftUpLeg" type="JOINT"> + <matrix sid="transform">0.3961309 0.6423606 -0.6560892 3.23847e-9 -0.6476991 0.7019598 0.2962062 0.1535566 0.6508196 0.3076119 0.6941245 -1.32855e-10 0 0 0 1</matrix> + <node id="LeftLeg" name="LeftLeg" sid="LeftLeg" type="JOINT"> + <matrix sid="transform">0.999999 0.001428954 -1.04076e-7 0 -0.001428956 0.999999 6.21187e-8 0.4361505 1.04164e-7 -6.19699e-8 1 0 0 0 0 1</matrix> + <node id="LeftFoot" name="LeftFoot" sid="LeftFoot" type="JOINT"> + <matrix sid="transform">-0.9996988 -3.92556e-4 -0.02454413 0 -0.02369912 0.2759955 0.9608667 0.4459705 0.006396872 0.9611592 -0.2759216 3.72529e-9 0 0 0 1</matrix> + <node id="LeftToeBase" name="LeftToeBase" sid="LeftToeBase" type="JOINT"> + <matrix sid="transform">0.9999679 0.006396692 -0.004818773 7.45058e-9 -0.004818633 0.9611588 0.2759538 0.1370783 0.006396799 -0.2759217 0.9611589 -5.96046e-8 0 0 0 1</matrix> + </node> + </node> + </node> + </node> + </node> + <node id="RHipJoint" name="RHipJoint" sid="RHipJoint" type="JOINT"> + <matrix sid="transform">-0.3918986 -0.6153328 0.6839452 2.6511e-15 0.6153329 -0.7279726 -0.3023594 0 0.6839451 0.3023597 0.6639261 1.62921e-8 0 0 0 1</matrix> + <node id="RightUpLeg" name="RightUpLeg" sid="RightUpLeg" type="JOINT"> + <matrix sid="transform">0.3810995 -0.6220791 0.6839451 -1.11429e-8 0.6279444 0.7171224 0.3023596 0.1504315 -0.6785638 0.3142503 0.6639259 4.08443e-9 0 0 0 1</matrix> + <node id="RightLeg" name="RightLeg" sid="RightLeg" type="JOINT"> + <matrix sid="transform">0.9999989 -0.001447959 3.10888e-7 0 0.001447957 0.9999988 4.42563e-8 0.4417033 -3.10953e-7 -4.38061e-8 1 3.72529e-9 0 0 0 1</matrix> + <node id="RightFoot" name="RightFoot" sid="RightFoot" type="JOINT"> + <matrix sid="transform">-0.9996686 4.65921e-4 0.02573219 0 0.02451391 0.3217286 0.9465144 0.4401536 -0.007837783 0.9468316 -0.3216336 0 0 0 0 1</matrix> + <node id="RightToeBase" name="RightToeBase" sid="RightToeBase" type="JOINT"> + <matrix sid="transform">0.9999535 -0.007837749 0.005614891 0 0.005615086 0.9468315 0.3216804 0.1452782 -0.007837608 -0.3216339 0.9468316 -5.96046e-8 0 0 0 1</matrix> + </node> + </node> + </node> + </node> + </node> + <node id="LowerBack" name="LowerBack" sid="LowerBack" type="JOINT"> + <matrix sid="transform">1 -1.56995e-4 4.0764e-5 2.6511e-15 1.61937e-4 0.9806549 -0.1957447 0 -9.24456e-6 0.1957447 0.9806549 1.62921e-8 0 0 0 1</matrix> + <node id="Spine" name="Spine" sid="Spine" type="JOINT"> + <matrix sid="transform">0.9996557 0.026244 1.95057e-4 -1.67103e-12 -0.02569488 0.9771715 0.2108924 0.1342848 0.00534405 -0.2108248 0.9775093 -1.07573e-9 0 0 0 1</matrix> + <node id="Spine1" name="Spine1" sid="Spine1" type="JOINT"> + <matrix sid="transform">0.999709 -0.02412176 -1.9127e-7 4.65661e-10 0.02412175 0.999709 4.79817e-6 0.1329761 7.5428e-8 -4.8019e-6 1 -3.72529e-9 0 0 0 1</matrix> + <node id="Neck" name="Neck" sid="Neck" type="JOINT"> + <matrix sid="transform">0.9999886 0.003125201 0.003613005 -4.65661e-10 -0.002560858 0.9891588 -0.146828 0 -0.004032701 0.1468171 0.9891555 1.67638e-8 0 0 0 1</matrix> + <node id="Neck1" name="Neck1" sid="Neck1" type="JOINT"> + <matrix sid="transform">0.9999827 -0.005846279 8.18527e-4 0 0.005378973 0.9594907 0.2816895 0.1141579 -0.002432205 -0.2816802 0.9595054 0 0 0 0 1</matrix> + <node id="Head" name="Head" sid="Head" type="JOINT"> + <matrix sid="transform">0.9999867 0.001334366 -0.004975973 -4.65661e-10 -0.001781469 0.9958531 -0.09095962 0.09175077 0.004833965 0.0909673 0.9958422 0 0 0 0 1</matrix> + </node> + </node> + </node> + <node id="LeftShoulder" name="LeftShoulder" sid="LeftShoulder" type="JOINT"> + <matrix sid="transform">0.2634423 0.9525584 0.1524157 -4.65661e-10 -0.9547163 0.2348038 0.1827129 0 0.1382569 -0.1936481 0.9712804 1.67638e-8 0 0 0 1</matrix> + <node id="LeftArm" name="LeftArm" sid="LeftArm" type="JOINT"> + <matrix sid="transform">0.9529779 0.2615977 0.1529698 0 -0.229908 0.952978 -0.1974218 0.2141151 -0.197422 0.1529697 0.9683102 0 0 0 0 1</matrix> + <node id="LeftForeArm" name="LeftForeArm" sid="LeftForeArm" type="JOINT"> + <matrix sid="transform">1 0 2.88103e-8 0 0 1 0 0.3194921 -2.88103e-8 1.7486e-15 1 0 0 0 0 1</matrix> + <node id="LeftHand" name="LeftHand" sid="LeftHand" type="JOINT"> + <matrix sid="transform">1 0 0 0 0 1 0 0.232586 0 -3.80059e-15 1 1.86265e-9 0 0 0 1</matrix> + <node id="LeftFingerBase" name="LeftFingerBase" sid="LeftFingerBase" type="JOINT"> + <matrix sid="transform">1 0 -2.84217e-14 -2.98023e-8 0 1 0 0 2.84217e-14 -3.80059e-15 1 0 0 0 0 1</matrix> + <node id="LeftHandIndex1" name="LeftHandIndex1" sid="LeftHandIndex1" type="JOINT"> + <matrix sid="transform">1 0 0 0 0 1 0 0.03280848 0 -3.80059e-15 1 0 0 0 0 1</matrix> + </node> + </node> + <node id="LThumb" name="LThumb" sid="LThumb" type="JOINT"> + <matrix sid="transform">0.7071065 -8.9407e-8 0.7071071 -2.98023e-8 0.5000002 0.7071066 -0.4999999 0 -0.5000001 0.7071068 0.4999999 0 0 0 0 1</matrix> + </node> + </node> + </node> + </node> + </node> + <node id="RightShoulder" name="RightShoulder" sid="RightShoulder" type="JOINT"> + <matrix sid="transform">0.3357229 -0.9370582 -0.09597921 -4.65661e-10 0.938474 0.3239804 0.1195967 0 -0.08097371 -0.1302254 0.9881724 1.67638e-8 0 0 0 1</matrix> + <node id="RightArm" name="RightArm" sid="RightArm" type="JOINT"> + <matrix sid="transform">0.9364473 -0.3375461 -0.09554496 -2.98023e-8 0.3237658 0.9364476 -0.1350626 0.2035319 0.1350627 0.0955449 0.9862196 3.72529e-9 0 0 0 1</matrix> + <node id="RightForeArm" name="RightForeArm" sid="RightForeArm" type="JOINT"> + <matrix sid="transform">1 0 1.58932e-8 0 0 1 1.21384e-15 0.32836 -1.58932e-8 -1.23235e-14 1 0 0 0 0 1</matrix> + <node id="RightHand" name="RightHand" sid="RightHand" type="JOINT"> + <matrix sid="transform">1 0 0 0 0 1 1.21384e-15 0.233209 0 -1.12281e-14 1 0 0 0 0 1</matrix> + <node id="RightFingerBase" name="RightFingerBase" sid="RightFingerBase" type="JOINT"> + <matrix sid="transform">1 0 0 -2.98023e-8 0 1 1.21384e-15 0 0 -1.12281e-14 1 0 0 0 0 1</matrix> + <node id="RightHandIndex1" name="RightHandIndex1" sid="RightHandIndex1" type="JOINT"> + <matrix sid="transform">1 0 0 0 0 1 1.21384e-15 0.04633379 0 -1.12281e-14 1 0 0 0 0 1</matrix> + </node> + </node> + <node id="RThumb" name="RThumb" sid="RThumb" type="JOINT"> + <matrix sid="transform">0.7071069 2.38419e-7 -0.7071065 -2.98023e-8 -0.4999997 0.7071069 -0.4999998 0 0.4999999 0.7071064 0.5000004 0 0 0 0 1</matrix> + </node> + </node> + </node> + </node> + </node> + </node> + </node> + </node> + </node> + </node> + <node id="human" type="NODE"> + <translate sid="location">0 0 0</translate> + <rotate sid="rotationZ">0 0 1 0</rotate> + <rotate sid="rotationY">0 1 0 0</rotate> + <rotate sid="rotationX">1 0 0 0</rotate> + <scale sid="scale">1 1 1</scale> + <instance_controller url="#_6_15_t_human-skin"> + <skeleton>#Hips</skeleton> + <bind_material> + <technique_common> + <instance_material symbol="eyes-white" target="#eyes-white-material"> + <bind_vertex_input semantic="UVTex" input_semantic="TEXCOORD" input_set="0"/> + </instance_material> + <instance_material symbol="eyes-brown" target="#eyes-brown-material"> + <bind_vertex_input semantic="UVTex" input_semantic="TEXCOORD" input_set="0"/> + </instance_material> + <instance_material symbol="eyes-black" target="#eyes-black-material"> + <bind_vertex_input semantic="UVTex" input_semantic="TEXCOORD" input_set="0"/> + </instance_material> + <instance_material symbol="skin-mat" target="#skin-mat-material"> + <bind_vertex_input semantic="UVTex" input_semantic="TEXCOORD" input_set="0"/> + </instance_material> + <instance_material symbol="sweater-green" target="#sweater-green-material"> + <bind_vertex_input semantic="UVTex" input_semantic="TEXCOORD" input_set="0"/> + </instance_material> + <instance_material symbol="jeans-blue" target="#jeans-blue-material"> + <bind_vertex_input semantic="UVTex" input_semantic="TEXCOORD" input_set="0"/> + </instance_material> + </technique_common> + </bind_material> + </instance_controller> + </node> + </visual_scene> + </library_visual_scenes> + <scene> + <instance_visual_scene url="#Scene"/> + </scene> +</COLLADA> From aec75f5665c44f73f973e5d9b5698e279e9c7f52 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Tue, 30 Aug 2022 16:55:03 -0500 Subject: [PATCH 190/219] Fix ABI checker with testing module (#427) * Protect autologfixture with preprocessor Signed-off-by: Michael Carroll <michael@openrobotics.org> * Update testing/include/gz/common/testing/AutoLogFixture.hh Signed-off-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Jenn Nguyen <jenn@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Jenn Nguyen <jenn@openrobotics.org> --- testing/include/gz/common/testing/AutoLogFixture.hh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/testing/include/gz/common/testing/AutoLogFixture.hh b/testing/include/gz/common/testing/AutoLogFixture.hh index 179347465..dad019788 100644 --- a/testing/include/gz/common/testing/AutoLogFixture.hh +++ b/testing/include/gz/common/testing/AutoLogFixture.hh @@ -17,7 +17,8 @@ #ifndef GZ_COMMON_TESTING_AUTOLOGFIXTURE_HH_ #define GZ_COMMON_TESTING_AUTOLOGFIXTURE_HH_ -#include <gtest/gtest.h> +/// Protect to guarantee that gtest is included before this header. +#ifdef GTEST_API_ #include <memory> #include <string> @@ -56,4 +57,8 @@ class AutoLogFixture : public ::testing::Test #include <gz/common/testing/detail/AutoLogFixture.hh> +#else +#warning "AutoLogFixture needs <gtest/gtest.h> to be included in order to work" +#endif // GTEST_API_ + #endif // GZ_COMMON_TESTING_AUTOLOGFIXTURE_HH_ From 629a9bea0e04ae410a54ec200af37fd3bda18f42 Mon Sep 17 00:00:00 2001 From: Luca Della Vedova <luca@openrobotics.org> Date: Thu, 1 Sep 2022 01:05:03 +0800 Subject: [PATCH 191/219] Add a test for loading gltf with external textures (#409) Signed-off-by: Luca Della Vedova <luca@openrobotics.org> Signed-off-by: Luca Della Vedova <luca@openrobotics.org> Co-authored-by: Louise Poubel <louise@openrobotics.org> --- graphics/src/AssimpLoader_TEST.cc | 24 +++++ test/data/gltf/PurpleCube.bin | Bin 0 -> 840 bytes test/data/gltf/PurpleCube.gltf | 133 ++++++++++++++++++++++++++ test/data/gltf/PurpleCube_Diffuse.png | Bin 0 -> 19375 bytes 4 files changed, 157 insertions(+) create mode 100644 test/data/gltf/PurpleCube.bin create mode 100644 test/data/gltf/PurpleCube.gltf create mode 100644 test/data/gltf/PurpleCube_Diffuse.png diff --git a/graphics/src/AssimpLoader_TEST.cc b/graphics/src/AssimpLoader_TEST.cc index 93a0f02c9..87e6b8210 100644 --- a/graphics/src/AssimpLoader_TEST.cc +++ b/graphics/src/AssimpLoader_TEST.cc @@ -620,6 +620,30 @@ TEST_F(AssimpLoader, LoadGlTF2Box) EXPECT_DOUBLE_EQ(mat->Transparency(), 0.0); } +///////////////////////////////////////////////// +// Open a gltf mesh with an external texture +TEST_F(AssimpLoader, LoadGlTF2BoxExternalTexture) +{ + common::AssimpLoader loader; + common::Mesh *mesh = loader.Load( + common::testing::TestFile("data", "gltf", "PurpleCube.gltf")); + + EXPECT_STREQ("unknown", mesh->Name().c_str()); + + // Make sure we can read the submesh name + EXPECT_STREQ("PurpleCube", mesh->SubMeshByIndex(0).lock()->Name().c_str()); + + EXPECT_EQ(mesh->MaterialCount(), 1u); + + const common::MaterialPtr mat = mesh->MaterialByIndex(0u); + ASSERT_TRUE(mat.get()); + // No data (it is a file), but a populated filename + EXPECT_EQ(nullptr, mat->TextureData()); + auto testTextureFile = + common::testing::TestFile("data/gltf", "PurpleCube_Diffuse.png"); + EXPECT_EQ(testTextureFile, mat->TextureImage()); +} + ///////////////////////////////////////////////// // Use a fully featured glb test asset, including PBR textures, emissive maps // embedded textures, lightmaps, animations to test advanced glb features diff --git a/test/data/gltf/PurpleCube.bin b/test/data/gltf/PurpleCube.bin new file mode 100644 index 0000000000000000000000000000000000000000..59a9334fbb05d96eebc3bc20f70f2e091be473dd GIT binary patch literal 840 zcmah_IZgvX5G=q8tifP&n1qb$5fkh_1cbyVkO-{#!tNLR01^bDV;~|nAAyLf(Kc$2 zEPJHsuBoo-?p+|xkS=)E;@WAJ;YwXP%_>|wO^)f)9y)OyuAOEXwjI=G6*jLlIi8Vo z$96Ny|1-}SR`%bqz<0g>cgtp(*XM*YUD~1YojEhtux@j_(sWj{yrAiNTg@_X`#q`N z=94P^G~u53iTIpZeEezxetECjFy#A=7nf~#rRGtdq74t^<P(ohueW&lN~^y#;et5M zoA6F=-_@hM<W-wKGqZ2JY12NR)Ji|)eo1#tE&G0GKJ~yBN`7jIZR}zXW5zL#ae_09 d7)Ln3J`T}i>|p~tIKqH&fK8mDkAktl5Pz7Cp^pFn literal 0 HcmV?d00001 diff --git a/test/data/gltf/PurpleCube.gltf b/test/data/gltf/PurpleCube.gltf new file mode 100644 index 000000000..48f941f4a --- /dev/null +++ b/test/data/gltf/PurpleCube.gltf @@ -0,0 +1,133 @@ +{ + "asset" : { + "generator" : "Khronos glTF Blender I/O v1.8.19", + "version" : "2.0" + }, + "scene" : 0, + "scenes" : [ + { + "name" : "Scene", + "nodes" : [ + 0 + ] + } + ], + "nodes" : [ + { + "mesh" : 0, + "name" : "PurpleCube" + } + ], + "materials" : [ + { + "doubleSided" : true, + "name" : "PurpleCube", + "pbrMetallicRoughness" : { + "baseColorTexture" : { + "index" : 0 + }, + "metallicFactor" : 0, + "roughnessFactor" : 0.5 + } + } + ], + "meshes" : [ + { + "name" : "PurpleCube", + "primitives" : [ + { + "attributes" : { + "POSITION" : 0, + "NORMAL" : 1, + "TEXCOORD_0" : 2 + }, + "indices" : 3, + "material" : 0 + } + ] + } + ], + "textures" : [ + { + "sampler" : 0, + "source" : 0 + } + ], + "images" : [ + { + "mimeType" : "image/png", + "name" : "PurpleCube_Diffuse", + "uri" : "PurpleCube_Diffuse.png" + } + ], + "accessors" : [ + { + "bufferView" : 0, + "componentType" : 5126, + "count" : 24, + "max" : [ + 1, + 1, + 2 + ], + "min" : [ + -1, + -1, + 0 + ], + "type" : "VEC3" + }, + { + "bufferView" : 1, + "componentType" : 5126, + "count" : 24, + "type" : "VEC3" + }, + { + "bufferView" : 2, + "componentType" : 5126, + "count" : 24, + "type" : "VEC2" + }, + { + "bufferView" : 3, + "componentType" : 5123, + "count" : 36, + "type" : "SCALAR" + } + ], + "bufferViews" : [ + { + "buffer" : 0, + "byteLength" : 288, + "byteOffset" : 0 + }, + { + "buffer" : 0, + "byteLength" : 288, + "byteOffset" : 288 + }, + { + "buffer" : 0, + "byteLength" : 192, + "byteOffset" : 576 + }, + { + "buffer" : 0, + "byteLength" : 72, + "byteOffset" : 768 + } + ], + "samplers" : [ + { + "magFilter" : 9729, + "minFilter" : 9987 + } + ], + "buffers" : [ + { + "byteLength" : 840, + "uri" : "PurpleCube.bin" + } + ] +} diff --git a/test/data/gltf/PurpleCube_Diffuse.png b/test/data/gltf/PurpleCube_Diffuse.png new file mode 100644 index 0000000000000000000000000000000000000000..2381764737ebb82fe31e4d49fe37ee19e55bd3b5 GIT binary patch literal 19375 zcmd>mWmg<sux=0T?(XgccbDM7-GX~?orI8(KyY^r?(Pr>?ykYz-I+V@Isf2(xgYMV z)vJ4U@3p(S>M7Y(HS<G5O#vN+1O)&9bR|VuEdYRlUcvxKu+UTQZ@NL~3C>nZRSE!V zqETNg-~j+d$zDcA<CB(xG?kK^3_rIJKR-JU2R8sH{>c2`qaS}yAijS85mQ%s@uDW# z=`%n>TaGk{Wsrvz2UvW?!jb$N7LKBehmW11sMGgl4n;9Dd@F~k*;eXjxM75jvEUiy zYEeUw|M}_Z^TKoce#ZXGxZeaO7#oKnb}!EX5Yh@06<(x_R#)sB>Hx#wD{jD1VeO6l zv4#H&02i=+zQLZ=5-*@CSLjQ)&2iA-3~WL|TQwN;0IFDEg9c|G6%?Zd4031>;sJw1 zK=p?@YZM>>0G#{+rD=dtbl~JhNgN(nEQwzw1QzqiN|1nGARv`VfeuEp4KUaFti=Y? z{RhY?m!#o<>#hWW4H|hAV89*lfOnLB45p+x08W)=8wIEYVE`El+%Z@x71$iE>8_0u zGq<p2MG(+Ek~o(9ewr7rIdPK2=jvi(i+byiQ;oC*Av2Z@@(xW#ayl)p;y$d(I2r(u zJWlnz2};E5@9k{v+3Y)=-~7#cbG&e+5vRUfe`}9~fdjDACeD}5c6aAt-3CC_UR{nQ zM!>QzV7LBg!n=Z;V~8^8{}|yX_##P>m8&r*N=}A?ih4?KncKm&9U%_k-E`fE2)={f zeOvLr0Nm3gQ!BdjLtou3T)Zo_qV`ANq`6)0_i5h-!a`o7n5VYh)fltk|Gd=y(X2tE zI^fr$6)Q_Ul(>a+7{YT&ne>Vr?}HAMe^c*PYeZ}qaq12}1HnXK=udkClEK&PktC?G z0G91L9>044i0^ugmShD1W61^E0MLFwWL%s;sM3!F0J1rsS*oQF(R%R8yD>6)$lJRK zVJr}2CDG`*MX{t2cEDsPxkO1)#M<4$i*OCqup~LyX`5K}J=}um`x`jMpO4)L5zL9Q z{t&f)Lxz(YM8dV877oX@j9R1_M<Ps(f}^oed>02UpgIi4)1>)3=urSuBJB`sqDXti z?tv%t%UJR$W@V6y=jY4Mb_MQ)&$XJcvoKzgEya{1Kl^h&O?ke<Gyx~&IZlz(Q;2~Z z^NOb4A9#5JK|iCcz*F29Hjzsf#*yFU%zx;UFboh_?dtRCM)O&b>kD|}lXhoWoFmb} zM1XNmkW9Z~{c-vd6QiK7qAycSe?nW2(~6{r9Qu{}4<k){v3fndKh9&HucdHJjJ|w1 z!x=RNbr!uTBL=QnydoXOP~46h3N?KUj}oeqqvDDpd%=eS@o6mk3>Ajs80VpXJ4m(Q za;oImrWni^^|<Gu-kl~q;lJTqD#&?sS_KI>%6uOscHs)Md8AWwN;StyvSyJ=!-caA zm7H_DH8?+fFTs81l}107P9QT<z@9%hnPzWme{aWm=-G<A7D^$PJefT0cz}4ge;9h> zgNFVMJ#;|Pl8M-nIDoi_sEL>}RpmGQOmga=HrE0VX{v1sW{RthKFb|TAb#vHPNHz4 zZenoaeyO(3Cmo47zfx4~G9An^Q{AB7@;Y@I+a<`e1Z8t2<T`C7{FUQcK3dTl6PjlE zoo26Jo~+PozlF)?d{fNVwrc7p{zXmD&-3w8UwYm{7xtLVF-6tVsP^$h#T)*a)SELv z<%7(pQk!y{Sewi}_c0Jgf6c~)&{Br-IQ2OCcmO*ry99g9yhDXeMR0|{vj1}DvgN7A zDZ%OS^0}8=rer2t=B==^@VysuD}SqIYgp@w*Tj+djMcH<A@c3;Eym&6l)|m^P5v$6 z(fR!O6r}*yJ0$)XVkd4vtBcVXs{_Xr`{t>Oubai#BX+H^eRla%O8Jb<3}@eMxA}Yt z#cj%6$t=s?{rkA;C~9G8&$Cj{SMYbIlX)z`G0moRs(!|EbaaqywS2LB=p;&LF2ga) zqI0Qz<>gmcp<Kpa<p}<Wfu!Z6z!CT))uj9K6kTy$Kiym1g>t2N<72jC=XpIR4N|>y zv~=P0k;dYR^ol<3bmw)vExc&vY3ADxF3a2}FDED`X(tG$LU$H-^mop86Xc_0IOOvp zo+5!Bo?fHgPHyeT1)J}BOZrNB5A|$GZF4_mUh@(DejhV}lkA;L_`$j8XOT;`|48C4 z$yw`k!^~}ddRzKx#gg;v+Njvypt5IGj&#x?lU}iNshf*?{Vn&=?aZR|qCeL$`<$lU zrUs_Z9Te(y84OwTT+V|leMTD{BLU{Z;$k14#t&h|`^90h{j<M!{_dn%7we=Ao)1n9 zMtsS77I_+Zjeh9b^t&RsRD(AM^?-Ik9iK@)*TFi%Qo^Oe6(aJ%|AKEr;6xM0mqtTI zH=y*0ckL#;B7L;tUA1LPo5CMP%EUJ$ec~ErP@$N|j`}u%w2l?*`ukDkaI_IAd_%!0 zyqVITIF;}*2#=YCr<CJJv;KppyXQUIeEE*Svu#JzWpqhoi^z&YqldR`xr39IlhsLj zGq}05`Lpl$2f52+98X+2<kKHJeT#i!Kej)?>^r6LX6&SCCwW>`?ylyw5bhn0k7W6X z8t@s!1PX?w;3U^d?1oZFYj6^&?-seJlH*=|O%GF->&*L=r&-g~tSlP0m#Le0C%7gO zB=cnVO<mrrpBGtOi`6fdIIe~ET2)te{$KgTlKT?7P(nsRM!puheNsK^0#_4Lle!Hn zYdrdn-=6a@Y5e!$`yJZHPuDB>PGKrj`Sn_r8W;pBoW-oZMnp!w&59k0hO@luHg89d zw5VSQ0y|==HJYpI7MpzyE;nep<k|>mBR&xNaB!PwwOaeyUrYy$*p1XCy=rXfYw27$ z_^n<=X@yP~7Rs=G(R-Izk}x#lQh8(8Vuf#!XsvVZkUVFk8^S`EXjbl4UR?Q5E#JJi zrKe^#7kKOEyuAERxoP<HSn;^v*roj5psPx`!$E3p^4kS^1?lClT~ae=<$s>J{tmZM zWA$UhW3YS{e5XdEjpZv>x%~Ne{+S^rBf75@Wlfz+49oLfYd!(j7@_3&BLB`4PTCt- zef1nW<brNprq8~tMUz;Pws!3WuQe<9sQ=B14k!#jypuaWcJOp{TCM8pszr9z;{QdV zDD1YI4t8BmKTY##a5H4V_#?I3!?^xCFkoBbAa}fXwRdbiHKgel=~&T^by~Q~tDHUG zIY%tF<NP2pKa<>)T%ofG5`50RZRIt<7p<3-lgT7@`MC2Xe!IxJC@WJ<LTom5)$d;A zCDqYH)1<>zW+F?1(DO{C$?SgU`rm%E$wj-{4b8pf3VqZ23b9Htg<!YWO~ooB*W-`( zBd2<zm7X`M$0AebGa*k7-E*H79u_!Evi&;F`%g%lTo~5Kn(13_AH45Q34Kt`R8~#= zqkXGhI+tIM5T7uQLh9dYK6X2AJeYTzPxKmKo?{??&w5LM%zWRRRv1;7qm`%q6`e^* zNs3O=ab-OozgbjUggY@DtPAlw{#3TV{<`)2enS6c@dEWRVxp_kujJa}ysV^3cz||* zvVGi7?DF?Z#rR6ldGmSe`alO|D$|SPo5uCjlhr`cr24)1e&E{+=l$2~XLbd_322Z> zWu>U43IP5L0090908h{%@BsjLaRI=QIRFT!005y|MysYM0KftoD%x_;2@nV*5rEu& z#-*jC!o$QOz{VlM#iJl5p&})tA*aB@!p6tOA;7^U#Kj}R!zackAR!<mB_tvvA|@v$ zp&%ipCa0hxBd4LDWTK;IWn|)DVdY|jMzWlI+&u5NxCP(w3Glw-=iwC<6cXkakdcs- zmzH_2ps25{Lrp<RLrKNU#m&dVD=8+fC?~J2simQ+rmFnj*uc=<#@5=x(%i(<-^bU} z-Gc<5kdlNfJ2NXeF)1M~J}UB8cV|~^bqzHI6&)olJp~;D1w8`=0~I;d!~Mg>`Ni4k z86yP~GdU|01q%x~J2N>OD>)}CITsh1AO{&A8yU|#5-DC%2_8~0Zc<ThQV}jvVNNnZ zN^&YeVkLeOIX)5@C474s0#hkMLkU7XF(NHtVpV<;d1usWTl9P@j7&?6G;@q(Gt5L& z%s6ALXalStdf4A|u|u_Sz*;y#nmGO%xW4MRKI*vMYPg=Nc<%4<T;%aT$`M$}5?CYx zZ}GrO0`L+CdWr)*#)2MVLH9AB+h~}ZD45G%FlQ04ClRp6KVc7lz#fFd?uWzeeuvu* zgWLQH|1T7N^$Yy+7x<;m@JnEX`Cx?UK*aF?#1VhQVLzlHU!(yaq&_d?9#7=XPskk} zD6MWNjjkvSE~vFms8x=rm5ylT_Gl$`XhqiOIfhuj$jPY4NU4d4si9&dC8HuDp(Y@v zCM2Q8C#Ht{z=3?nc?-jN3B!H<iu)9b`w)tI{{{E%Gw#i2+$%8dc`)u#Al|MY-kLYw zj5~h6BSDijVX+BOnl5paCh_O@B%kC+ZN$k81j*HS$z?exL|7=^F;cSAQZi6e(@{~0 zi--gV2D&&o6%`hyrKH5g#QY2o4+{<b0tPqK)m2qgT%4buo}3))@9*vI?(XbtZ*6UD zZf>lv|65yIU0Io(nVFiL92*@S9vT|x@9*pFZEJ09YHTbmDJdx~&d<xs&B@6~Pk(!R zdwF?zdV0FOy}i1+Iy*Z%K0ZD=I$By<nxCJCB7X}(I|=|mfTxz)2k6)TpFhBddqjGu zJwSF-H24GnsJQ<fARsM+2mnNzm1L!~eKSroeFC+0p8B(6gi~+$OXxs21l3@iG`hU^ zKo7tIS5Q@(gpY;o29F(+hxGKJyP<+(EleMY8g8^QA?HggKU`v*v=R?97LE-=YW+GT zvSOSF?|Ej+ep2e=+vfLCu}|lY<M9FO0pkH#+tbKuWW=@*5kWPO;Q!U(qJ>CB9?_b? zQCu13=oV=C=1>wEi$?gp1HS!sY@QU7wS3NuOdE@*fZwfrI^ieqni8142R~#Pi-(Bc z-Bs(|^la_4Y*v6I>p`XkRJ~S*ZqF$BjN*#n9J)(_+Vu_N#{A4>ZO1%ftzsz#aJxkY z8dF61gSxkA<Y`dJRDrSviM>>jH_ydu%P<;DG8Mq+F4!se??XLvo-7R^nKA$=3QC-G z@R%msiycHn#Oda7?%6N+R$|g?W=$3m=tc%=4{+jbIgOO!C6=dQC6fcH5;}UyUh6DS z7vX3Gj7<unB=H(4-(uDYJMV&P2C(^S22sB^!#X{9r{k}urM-K9p}6xM7RlUi>$h=P zr>_s^7|v&_Sjsz2a7b{&(9wAmvGYBz>>UTV;bYa(O;B4lb*(F?UBfWz<2JK=-`AB} zv{(~V^X(=hc7fW#n>TeNH-Z++0T}&UF+cqj-Z5kow$UHf;jbtgz2z!B<9r;>rRMu_ z#CI%UuaC!YV(Xu<y@h40vtjhL42Ml_X0mR+Ukq_*jci_~6*hjQ(>u`uAP@bXQxju! zowKT#=XIP}3=NGF#55v!-K9L&auNcIn<Q4npQ}odFlWYJoDQT(x8fM@7{Ll<;<OE< zqMXZa`1XTevhN=SqT)K^2}nAplNPPRJCHZLP7MuvBN=^2Jt^)%i)KZ-e%Ykz&&vtH z-uyDwW-$7tVqMv@T(3QXy*f>r6%ro>9s=<BRB3`{{@H||C<C*3*)cv_H+;8NE>G6c z>CryemqO-dyt3YOU_Ir98Im)HNWNL$)rGyf3<Ou5*kib5WQJS6BwMGezrk?T&I_hm zZ9Si?(DY2Eg#$aQ#3j8f2%R;|W$SI=t2TBbI*`m?n^x@6d0UTe{U@-=6z&#E+B;CQ zi_lS2jv;hnf<ji5F#473f|3r+y}Z*Jr{dFnQzr-#bC2?dJSnS2b>T#r<u$0Fb{{v! zlC=##?k7j|{IUAMFI_){nJy;n0#c}JVL|PNcfu8$<Nb?<nJYmyD?3C%+7n|8454>i zG6lY%n26x%87nlM%6lWH<h6~eRz($rQ}b_%hcG$1fsCDGMFMV&A>@nOho?c_y6}hX zxMzNmvuce@MgXgFh?p#tFtKHgAgi4ToM)1`QdEw^`u=O_Y}zc{Bql?EGVl@`N?1$H z(-Fg`A+vzHKMT)W$5GG+n}f>P83|rbUUuwz`7p2lySGrH6Us{leRK_s{^~KU<&?UA z{U!_bqocZaXxGAD|K*(Sn5>_f)LNy$zo#VQ8!IlNht*ezd31VJ=>f7Kk08S-c3CC0 z&@diUg^`!1*T^fm8-6RivBiGa-`ClZW+P0S4d_fvj>VHhG5<hNb71RY+dF4-{PtqB zxUy5#dND7hwW5iwoI$OX12j8R2o3sPC(h?l9xs{gS6q#oId$>M{>1IZalRDS>b*hS zMw_dg)eD)i7I-Kr9y0eh=PInA)=C5Z38}F?EiI~MX9)Fs$iM^$KgN!PQ7ES~4D!jz z7{K_pB<NpulyT2%oLV?vEl`;9%A(R{5ggR!<uHNt8~vOtF52y0=hR-zURCRwV#Q_N zv6<GXbie17mxA%F^F*((=zqvZ=xB2uGDE!cEg5tSPk1L&Km=l&A(;LN6=l9dRos5i z!AaTub*m&B;U8X-!g6Y@pTMA;#3w6sKAVW(a>lZy>;aNIu8$`&1!$o5yrB4bH$53A z=jWfUprIXJnS^)gIz-ZWa3Hp$2FB3Yi>xKh4E*&!J+|mmF%%^5`WUQ|z)oJajtO+l z`MQBIJvnl`l!twVB?MZamazLhvTXVQ`PtMr$4cprr*wvagJUn`K9Af-3y*B-xHjPJ z@o$&XDZ<3BxrKMNN^i^Yb0_MiGVfSKo$$BaoMisNP_2lbL2(hPcAys$zc_;yn*lFb z^^iqm@V?}MAnJsH@(FF~l!SN!Ye*l^P9Nw?-oEh<<+>L4ylZ}nvkj*}dH}n>o2NAb zm9x<=i=Mef^Vh9LlMBgH&ZT2w+lCX^?KlXr>47wyDG(<j__d`ncB;ezZNkrv*=C4o z{7}HgH+9$XLJfheo$z!cGe&Zm)M?@xNxZTic->n(rDIn9^|`;}FQCtR7{dx1azl?r zgTJ_QZyn2*x`D0~VEm#p%O|_7pl(Bk9%9W1)>+Q>T@+Q0d1+uADApCLRjz?9h1<PX zuKphvBIfmatpvB-6rngO<2Ws#4=v#xA9VbtXbR(-|JC7I@U2*i@pcV@$s-mxh&pV$ zN?%4yBZO>T(iqd&<Y<(xAQWSDql4ed?EXzr9%jSp+INg8TLMB*o90(e9XEv*>jWp+ z<mVKAY<|sz2ql<a?5`jhiw8D9nLbde#s-DM_X(1`1S399E{yNrMB%8wWBFu)<|ne* z)FdMQ2rG7WgHpgq!~TJsgl7>Y^M-&7-W%GA9n+vBa2_I6`7pomZfJXMoeuGc6t;bk zSC)HoWbvC7@eq9Xz}{3&(|=F>&#LLj$&PFu!cy3hMbXm{fH(M~J<QEIvKQzrdBTO# z_Lt<XK=$y}m!wcG{-c6wBW$}(`1EhCsD3sr6mTq*q(Sadosf_;L78_#O41`1$nY0E zrj}EfuKzJ$?VyO|CBaTeRJE0uW(ZF5-^v_Gx`IK>VTo=xTC6Ng&Wfm7WWrKAW@gZB zXQ_1Q$m)N7Q{D>39`0gZVD{&^en;;7hksRXHiHg#dL}dsq4_iFN)|$FVZg(ZD9hzp zNa(BAzkfTb%tZ`J=0a?rfrqoxQl}kp8M;>BAfS!oZPErxhg<i7@_K^S3o%VBe09MI zjJxZ?jon{{kkcXii==ZB8u$Nrq8a?3(lo^m{7&Guur$PoU<S__mX6Wpebl^UCwo5D z7M;iXAtXbW2Q=DfI#U>kyedk0!$$MT(u`yMU;y9JLlIx;zv)b|E148Q>GxsSJ^ybS zHI5Qs4OO~K%hW~DVUPiIDlH%cz5E<>djr2)!mAch!(2%8Kbqxa?EsYt&%n-<Z8*YP zqWe26Ibh`nfAk@4KH4Auz>(PhctoSOMUrPLlWK&)O9*avqS)>J#}M-LI{{aJ0*jjf zkVsch>Y(Ve3duC2Pba2ngz>$veu2&cvWfHB0^n-ek-1JGsUmi-UA#P7M~P}tGY}%a z-!_u^e+ELCoiV#U3{2a^?2?-wdur9)+z<sdtT95l#Qo%t-!g3zZiBrrW(X?-YHx|Y zdQcA(n$M~7%ISI|y-1<<cV(z!T0}OVf*<}eL4Kyme*%@m|9VYk$8a0ju09qdZ<s|z zqG2-8raCD<sM(UrqV~@=nBr<<>^@IQx29@;sx8~TlaT*aQi66auZR%xkpM;nWL!5( z^}3yckKbT*>c6u<lW$U`{k?Zf<M5*msF_=&t}w;NYf5i!Nqs81VfDMyE6SW0!D!fU zs!8@5c}~yECV6HV3%T9F09yWZDT{81b*CzBU0EHjWZh$Ln~7NeJa1cb++y+};f_U* z<m?~L83Z~b(pE={OLvG$8gGJ0{1WpZ<i!mYx9{^P#{>srbze^?G4Uq{-qV1mb($sg z0-RVT8<655CU<A^C};KOJuJ)Y9c%w@Y|JFKe(x^SN2OzCsdf%R!wRXz+wPT!Lldm| z;GUA@aQ0yPP0a~HJ);3Y(tqp7*C*&V?d)eysP0AUY4X~u3C5Us<;*fz6b)1`qh3^f z>bB;Z;Tt@E(b9rQjJVBk|2PK#@6+YSp&0~)_Xzj=Ph~$H?dhpeJBScyZpi_F0WbLh zk^d}K7!7-9NINWw(?4b&QYV_sjTW}%w4u1nvq9kPE6*~DI7)EW{7`l!Fg+~IxH{6v zZ~UYH0OmM6t<9ulw8X1==kM=g$tbEU+W93Jd;s8nG)gOyu$bMtv|T4G!tVHMc7%DS zxQaLo;LW%A`iJVo`Q~0cTgr&c8}d*Rng7{|0tA3>pt06k+5O@ro<)>qq5m}~&wX{q zg65{H91fhX;NvSlZ?o*o(_F+o*;bq~53y{K9aILo>8w2)7Git;gZ;H^MEIsVNvyH- zP6BK_m#<4CImy@h1n6cc!I0?k-L{(xl>`VNR=rxp(^Y&}lod;nH`1g<qLF}+PGe;k zAfc?SNq=ro5h*1c<t{ytcdzS}Jqd}0$J&}!s;E7Q(%|M66I(Wy7~07CEqR`2X$Vn2 zhrn&yEz_LQQkCqaKd-9medx@(+;M5+LfLJ?d+1EzvT+1AV?Sa~?%W3rZ+><d{$%cE zP_Lkqv=!g;>P7K(^r>%0{mZW%*-ltv;Z=AqxgiAdT{ID6E4(fjH&-k0(KNzx(jQDX zu8ezuFt}|XYx4JAfJx1&o7UF*wN)==HH1%*EcjmNzE`ItN#elo7;7rUe8;0oEh9Aq zb#)c>X#Nw;a-VJ}y<VFVb~BwbPZC3dBrXNS$lBX~QUWEUd5U*Da!(M<bcW~+uLNj> zwbR~`otOj>lAnp0hc>?U5Vo?of3pk8ROsGNr^w^Wn%y^OoJx^zZ2{*j)5xGu6N~zL zes{F}i;iMV466+vYX2(XeS?;kNP$Y1fp#TrFIzM9heQiVNoX#OXfstBGLO=%VDZdU zbVv_Ow}HB+QJO<1^M{81&$cjZRY4MB;$mX`ydSuCr32DJwfFZXU(AbcpGmjvMrlty zt1(e#CLZVYU78&i6vk>$lo0AjU)q0$2Yib{!HjQ&&{rXb%Xrua(OP6a^oH*LZC)6Z zAa+uE3l9h##Y~?NB#TgF2dE}u{B`%8AA|jF4lt^amKZ|~`hoN7z8zPUW!lJmYN`$( zr}g(y07uTSN3YV4vH|i$uNI9cP1Qyi^%gnW(6{7JU;|cr&GcAR5n*8M1If0#P9v{u zD$*54hU)t_x+R7LSRo`pQt~wiSDYZ|FE|v@hp%tw9WkB17y!r@WydK%M&tlDg}*ud z2+}+$6jy2)&wP*cp+fQ#U<F-lv5jnWS{KTGiWVdQNeO+dih2}FC-QwZ7JZvFSDASC zvn5dlgz+sk^_($ehZY*h<w6V~Wl5xG%Zc1?#pPMB&qs4CM;=|&V()m4LWGb3x85ZS zuX>N%>G88GB?MlDX`e4?an?Q9YSz~DK#o!8*+hc%#laLb+Ww|ukbnx^LQyg@hEQ)_ z9fh<Y111_t{!!W-cu>tCvkCWz%mVGKQDvhWb@P+F4XOf?DV26ig~o~$4ci9jpGzZh zZXuCUCwD>BBtrUq^)hSM>3zZy(!D0zKa;-tf867W9;AEb36lOfA+E^sq`XGK+WVHg zNe)Q98yA&iCp_8;)~S{HtfFUjUiaSqT0A~JyzGyhd=d<R^DSulgDNYbM|5c-1M#R! z4rx$fq58jJK{D3Z65ztm$62|CvBdjjSCBcbhb-ULJXVDJF`ZC2)fpN|>Om79j;dlx z4cnN7MG6t79Q8%i8eUoYmt)HZBMdvNz(Y<kgIrd__VZDYeYzNkh=Pz~`z^T+0PAaG zP%(tk*U%)Per$d8BV>#HHI=M7Xb4EUIa@e)$&Z{yQLJqeGf(G09jwGv{rT(R2O<S4 zRvtp2U1R#Vz%_CATRe`Q7k;k;&p@#jz8_A|+n(LdKS(Vhfb}_^_DDNn`7*#pf!j=@ z^FOl|p7w%{J#;Wcu)_)D==FU46x3C>dbZJHf?lH{kUQjZK_4K77C|@yB|Cu%=%Z~J zj?fax8n5>b49RTk@}ZtPU=8F*XM&T*h5@d$eAZ;j$RUIDNwIS~|Abqo7G&&ah-ABA z!jOO#F_P!(-wCK<k?It}!&Jmjd#CLhm9G=Xct6in2*IZXy76tlFJL<iTw+Cd<Pzj_ z{%7nMrwl_JHKG8pOMjbU!?r^7nFB$iF;iQQp4X6~%G=f-yjjRk96(ef%RfnrBY~rM zZs$!HGvqvQt9{~2c*`GS9XdREfJ!^rkjlG7LzkQ~zlsmWSW^X$0VsB7{&m2SaJk0{ zGm5oKG-t{q@KlRjhzx{F56idC6;wct?w;g1P3c0Yth^b2t|$mln3bTz9SJkGa$+Ie zvby2p(aP_B(<=Zb6J7WoJ<4x&<CVFgYY^+gf0zsmDl1~?^JtsF>?lRQSht!RuZOBV zL@RHh7naiHgAIiB8Uv90bv-xKXU)}{=8;R5zkDoem)OqSr0j6>5my->m?TdAptvi& zT~U*^8cKD3?TT$;8lSc0<zkR)3<9JY!Wv}Dl<w_JX+uSSb>gi;eiBGV%oQj=5m2EU z-$$JH>XiiwmH53RI@|*lA09iHplryYcFuavRQc35iM#uGYs0<ZIJ(75&GEHDY7@E_ z;A^Riwd8B5GOcLckmi5V@`tdR0;1&%jA&V;#}>@Qqn^lD9D&LP|M4RbbWxjjg6HV{ z4Jr;Z9jG*Rte|w?Q31soJXd6e#&$U3Kkm6w(He<@u;V3&iG!BDnjit;k~*%IEtAF{ zbmI-sJ@YvY{KfRcGLgV8d`pHLv(&`UMG}R#BRg)oUXg&aVxn2eQu2Kk!r>FV0&yAs zr?{epP@TnS0E`vHGUni6`4sBz9M{wF>t=_OT^lXGihfg~WcB#i-!Yk|GX{=Sp|&6w zvZPj!Y44*Z=x=4aOqOpbC-8(~V&~;)on+>)ID1vay&3yH#dJ9946v(7qvK%WJY8*# z;VOeFEVq{0(E78PYwO#DN~B-%AquYuE->lryVn6_e6qgGZxN{FD_xLrSa8FB3Q_e- zr<f@BPuPvB^=1Uf1SK2NR05fMUYCOuI#7R@V#deIUij;4-v!C9sAC9pO-x$$jeCFz zJXP1qkcX&Z#Hmrj&Zk*AXQuyh`7d9v4-kB@e<kE@%XwV`LBZ<o392wYfF?OGvygFf zA!f>p2_u*8x@>LlmkR-~T?TiI!@!R<iOsA5C)DshL^F<UagFMqOa8DT_&^NT$@8+c zbPHD4<|PS~Qs>kmg&=RDy0Ybp|FL9nLk`n4c|<|%EYBX%hxy{8m5yC7P-Ya&{!Fno zUe>1mQq$e<I(kN_nzC1m6F>k2Y6#@SyyLP<8(Nb+fZ#8yW2QQHyF7lACj5pqHK#-B zBpP-(%|lJYJ@UQlbsOtCBBi_X99aJRXgY9SeM&~0azU|z=4O(b@M*-G4cwZyf`$<K z>lM>{f7~x^A1?fRI${0yy41`J@T)kCR`B@@+oa<LwDM@nhu3uZ2QluhYYipmVLbb+ zk{%6iYB0^;Jyc`AH8rtLJjtID`8g2o;QK$nUm6Ufq0WTa)9p+<$e{nyjJfJVq-}VT zk2&#g{vFl(qMmkJh<_?!{7w;t@CcT3fk>a*Qb!z1xN369+r2bs0mLyy5qGz_{__=i zLpfT@Raz>XublLDp<3rp#?k4v(O03^ip6w*<awZVZoXDHfdBXFwku4A?Z>6AYdFDQ zSc}O3T8U-?pCx~Fp}E>3YGao5Ox7CAR~j^LdhkwgSIazZTo;zxkFU=&cRRac)%FMz z&C6G<ci8{dE$$m#6kwQA+)8UoeoRhQ{0p<9&JD5pB#FN(oE>zRVM8&o__iT;8Y1Yh z%hq#}Yoh=w#rQ$ZJ8$$A!Ou&~XD>$2ZACq_gGT-S>Jo*<#Njj~OTS;Fli;5aq!a&j z0xO^eHX)L1LrVEAFx~$YMb<>5Ov!7vs#2<$Qd_nJx&^mt)!~&bYoHvWe{72iLdt2> z2&j$ax!OJ>Aju*`^p#FeI}h&A?yeH&(1YzJ-z~8vMH)f<JeIy6_L}LMl3pjV_l&={ z7zVJoGNaHrafD-av>H{G?yi%VY^MC~SF5yh@I)Vv{LmCgQc7v4FB1^$YxUwC?DYqt z_e5xV`nLxI&aG28x8w)UIj;FZ@T!j2D<hv)w4RC!cqMA%M~6%O<?q&5SYqN2e&u)u zrD7LCEj8gxroe(0ViG*os1%m=?zL6U@mTf_0_?&@{9>aCUPB()qUqff@fO-t+W>$3 zGQ3`VmgJvYPf!BJaFuIbg38nE&D(V7wpG+`<lf)|DR){#k59HSHsPks^dvv-*-;j1 zSb<&XB^bd4tU?C-*OoT>PL$1q5EpUv+1~_2q)e&;&NQP~&MR`C%DjC#u0AB5(yO#< z+z56PuaWm8bj@PvY@F7>xn4>@ox^)OMreAnwKs&X%gOe2*1q5kQxiUzu*{v>L|YIq z5V1KSX-C@s_P**gIO7~rM6zG@!7c)&miv}{#-(SZUI<Z9&*@if6hXE*lP>V|hi(~V z!`wvj2AlOwKqTJ-7y{!g8oo2Kvix??5h|jjhdPZ&aljyF%XEva!C##{C3zT<y=R52 zP~IkgF%cBy7oSC@@b4)YcVWLu^ct=L5@hWEwu}yJa9r_9ruu+4kNt_!6HYj*`8gJz z!V+2RS~K&<uulK2K_hj|iE^~@{!`?3l5EoDv^@UnaCIa+W^i3EV$9EAX-^9H%-Kd` zW*D6gM`nbC?&aq!Bs1@8#N)1jFwb9DnE}%w?T-TtXefbj?^gZx6AhKKABb_gE*nZ9 zAULuU0~w?A^lQ_pwvd<lmwczX5i!>d%7xbuGo^XRa2ssFk(C|(dQWRHt<+Sb85ae< z%*13|4-|wBS+0-!&t{yAnPU2c8-AkGM;lHG_Atdn+LA0!pIfhHot7io<%$s!fcf<< zFBY)gNcg;q_}IX#Wivynya7yc7wgmAr-Zz0z^ZT4t%u|I*Vel@QlV;}^Vx!F)3#d0 z{RVb9d;~eDVc7Z$K1Vv0<|w-|f#;hGmmU5q3`N*3m&4V*JDpnV_YhVT97(HneV^&} zXxCTF&NpeZS49(S`z}MO@7~go);=+q0;a}1A`p>QKF5cj;#h(7H~Q7PHtm-MXL|2x z^nDZ)sY2iMBB7eZ>PCCpb-!Qdp_7zu5GpTl)BZCF%~0Cp(XqS;i?NpYBT|lCp!5gc zT~)T6&N3T`{5QneW;ebtT@LG{?$#s{S)m*_kg?;5PGKJY>(>xstR9{OBJDfIme};3 zyGtc%O)#K*&UQzI{_@O!{|~=gIBjG3&$6{qQr0tZH2eb!LDblwDbOIdj5BQ*a^KIT zYASl|yAc-W!WdLm{^DKDaa7GHvZC-dXaXcZ6U3NyO5cc^jc)Q7+DO8w{Zn76N`m#O z)GJTMU$@d@pm7Bmlda)H3no@HZ&f!eikt`UiQ^pJgSlx|TX&+@AnDL7ZsRLqR|W$G zerUTLudD!4%Zbk9&~TeX8w-dSHOFaEh*Rrof19Q!Qd!Y~$?ID&yxBHpaPY}i4Z#vh zPUXS8q2W|C^_fKOXz!sS2gy@5S}qHfKA}g(--m*+K^=futlj}Sqs^L^#pS_^OA}O? z9q^ZjG`kkr4<$#iqVi|L%i|oqjT|@T0Nhi*k+IS%rFrBm7kPFqNC<^W$H(?p8qXDB z;Au6BRP7rlsp4`5nv{P-cl?YrjSNT|jm52^Nc43sv8&blBSjSQI3La@y!GFvZE)Ec z1Q<)mIl&qe!f7+n-xGLQY&~I>!iLT&*`x4k<y>F{S1P{fU!JZD>D4|T71kH16_EWk z3R3(%wC=S-5AJ{SX`PPida`=s*1DDO(=n6`S_tw`eXFEp1jRU0gnIShbZRGK7NBdu z>-c4xiwLp9@!$Y+d)WWIo&j$@4bo$)saN07p|}X_L$<{7AVj2*iWG$RJ0zcmJ_OY7 zviV0R@Ot+|gPr>^0=e43qjl(gj<Z_$pd7&Xf#sD6w_M8qHr6!mHpHETU7=+uN@Z_Q z2B4QY;ExuOV|v<P&<SC5ei~SxJQdOVc+<s3@O}R6H~U>B%{$NgpNEgXtY6JE->lgF z#!(H9G#w!7jhya$Mmqx%n-Yqd<;<r4=^Z1=1<VJ(w>y|wy=L{<+eG@d0|UizZmRCh zO#hyyQ>ACwMd1$9nM+!gG;{-?g(@lFDVc~_aWK%7IhLQIaZimr_3W9OIy{JA51&Jx zaxV9DeP7a&II^cnrnP{JSp4FM>$eiC^eaJWqk5ed6+HoYPEzM3%$5Ea@^iXV$6xD; z@SzLBTmdO;ht1$##a1z}!p-}no-i&`L?xyyw_Mdbu)CO@aC6}*#{-&lrZ{f3l~bOF zx~_zHgkqSg{(WW5R6AZAWN`LazBPp~JuP2n!H&9CK4*Fi10oZpY`vfM!i#yuSpF#y z!o3iwzMS2G8EXl2qo?SONTps3Ki~hVAdH#0v+|Raxh~#vwP11SyRsXiV7hQls`gF( z71N_36mSPVrR_<zHv@>e0aMf1zKkd7SdSPR1ZtTYq1l%yU7jPw>QO8-s_Nm^H*%?r zO&IR*F_iwB6b@H}Ub0l_60A(bOW#vo{K$SJ{(=V8;jG}{;b5=&pRTOQnyAvwxp&r9 z__?{+qLH0W(kFB=^_=<X3SZ@0^RkDHlxOiIN;g=)+mdVgL*9!K_sPXjZxnd4+W&M2 zuZtJwU^Jl*kio}zMDA{?DS{4H^4&I<()@av`#aqK-v*cgxbL65ARBsnd4Jx%qePsG zH03uu_}?9RXj3m`$x~OOn<cV6Sb14M+afj*fI(ZklT*~a`PAatiCIWz1Rc(ejRn5k zbV?{U#qIr>t1Qk>aaVf!#v*!!4Oai8e#amEdlH@8E%BWszCP<NDGTfl4dA0Urbiv8 z6X=MzhnxKDx7W6;aOFepheRd2ze2B9`#5Vs>cTsj^vqW)@WkTN7X<t2*hc9SUk>3k zYY(-SXNj6hUOX&BgTpG1w_DH#Jb9;MShvcRyxV`#(ys}=*PD$#xXp<sv{k*b<L2<d z)k3AJ)+I?FASkvekn$f}$Wu`_CVQ0#nGQ@fS7Zh3_h*jPMn(_buP=5io5ir(A1Jc? zH&|j*a8{W+@MT+HA(UWSDvl~lRvH9%jPbtNJ;}XWy?*+gYwSGT{;{P!X+BbfCk)c) zZQ5&#wO-d`-C}aW%Ut+7u~;7MW2-p|Jbs!~0Os`%o#!M;uq*S&4GG2bpn_x~3xXo- zbA>OosemyW-|aMeVL*kzZqQ1T0hvsiHu+S*H_!>3`DUk|P_g=8qNI(UfV!M?_3nDp zoV;0kKC$+yd9HTSnoM{mfWuDK6`8i!IZ${RNc7L#{a#@T%^qbsUyOY(I4L-FzSrer z%&tUDS?PLyFuue&Jc=^gofA0sxiH`I29g+{_GlPP{P8}}oDs}H%g$disdsytJjw<W z|3J*9(gN@Ih!@1zKUPxX>f}|iyAwj!R^#Cf<17Acvbgi^Pf2jts3q6u?^7>k+Ut8+ zwtp4X(YoYc)s}Gu_WW$Pxs1t5Q`PKsW)8n6#GicG*!i-g2l&h-u6N>Z!_&8{XVRS$ ztJvy;$2EWve{o5B?-nJ2oB-rDE?=B2a^HY*B6+j0S2dGj+EdX7$%&6Af7~ou!~@qj zjTBF%D+6hdej64&rIEp1xvF4&M4fj01sl<BPa87hk~+bK^&6&p`s!2tYhb7sHq9Ae zt_4Uv#Zbx-r!#f5ftw+o4hxgJY_t}v!2cHWUyY+4K1|C~bI}8o6A*90-d|Az7&r0p zd)2?f8UV0!fH*?~>eQppTeM&UXcY#j^oTxcO79~Chwm>XCXs+Y%C^32b$F`Bz)XQR z{<l_K*oMeZZkZUzuByHR$aNQ;_U!Z%<WMB#z6%MOCqJiHQE@Due-(cJmDzG!1RQcf ze5d!#<-l(l1<(8mJV1;H8%_tX&1J2tI}nvW8zy!O62-$j{0REk$`5sImQkpY2jv!N zFD43PAfU=|VVdNL&&Q&Zv|1Y)7cYj^!+^SB#zY%yj1|iL!G4Pwx6FkWUW11PAGA&p z$CL2ZB;$m5E+o52`fFAt+rPvdmgNPH($<%O^|~r|f8MO|jr^UGSXX6zQaU4VO!0ar zfK@|d$Nevg@fVt@ltmS8UVBW$_h37mh67te2qQ7#C*C~aFmYnuPk1Gp4SOK5aUP7{ zVjS6AFD40?FD+TtQIVRwR(&TSQ*qtL<<IVj6}cfYFm-DJg7Mvww}j<)c>-^5`@&oP z*-9M-7%!iw8UZk79gotfw5K@Y{-h1g!yk44QW^P;Y8-=;e*8I7Dd4Lr(r@f8mWNn; zO-8#RbD4FHp@gKX-?<R-0`wwqg3-IY`!2kXoA0Z+U04e(f?glv3QXdbz9C5;Jsk{F zK~vs*_5|DJ%`w)!;Rf6*c4awLEg7w5Cmz&NB}}aqr9WmN`AvTnryw}&Xa+wTkgGIF zOyv)|#h>YnrLA${ao@Dnm$Aux`JHgK%~h!8hI8N__Vv=4(95L99S~Wq8PB{k+M6Ql z=R~=zCRO@tQe<0$U~T(d)C=p&CNUp2`InJO%b5;&W3(>Osk{QptzS8JuPzD~bC%@o z_07z(COK)7yhOiPD$ZrmpYo%q96obxn~zez2}+VSo)1wqKsORuM|3F)sL$@;VbI^c zyzI+-MpSPd$CyQ0yQ{Qf0j5)qUM&0)ou3i`nyS*c?lt$uzv^E(8-NS4f6r;!9NJ-V z)9d&a(*YGFw)jvfZdgTz)`ZW(02D@dzM#W@W$)+ynk99qHr<U|PG`Y(SNs0jdF6x! znG^pzcx5THpy%*vkwMZcvGG0@cZ^Vee^VcK9=7=@HB3qY0S4H!95K~8^@Rd1n6J@w z4tr=c`d(!n#&T+*`MIbD<qKgg7Qp4~)rX+mhT<#d$sX?_VsLFtB(sW5KGe~>GX;Ux zxd}Eit)SfpUlMSyF{`5nP@oAK`^LKNdXPF7#<$4&UO?blc0V<VogR?%d5q#^hSL9~ zRtmeGe2Uw{#&+qZ%jpaNO#e873OsU^wRQfb{`Kv0$wD(*7*VYE%Yc?M`g<;<wqm>Q zURWIkN=(AX1>Pid7oyC5>?+PWkszzI6w^n&{8D|6nA5ZP90^_PA~{i00-AR$Mbru3 z+?M?8at-Y@lQ(_k6aa0&x6750S5<L_t34?Tmkmiw7R5PJ6#ZATC;B&dj0^zka$?Hm z<o9BUl18=z2|uMIOmpc&@+p7CnLtL)FaUG>`CEMjdtc(YI0IGFqF{}B#;I+e-~*V( z8vQUdcwlq@(aa_9T|3EDz^plb`m#HY&KgUgJ^niHnSX*i+dOp_v?{kT)qE<$bjot0 zBY~%E&bK6Ol|9Y}4eSN|?z%*w^+40UZ*~qXle@urzWz-EF(ifg1g~_N`eTA5j<HLE z-D7MltP?bRXw!(<8x4iH_k!Rj^>&1m__8ZfCH@daRP=bq`w>H+yX<4t3<&}eE#~#& z?5_{NnUvYzDRoV*O=Bzcio^Emu$$|jQO1<evR;@kBqB56n+_B6t7@b(xlxPmyCW4z z{F1}30gz#S0@7G$A+p=U8FboD7D%7u#Akm@o^x|%8O`#)4Q74u%3oLEfpSjj<-!N* zi7MWbLT8v__HtEf;a5>YwYtH0tVdK}F$v0fMkCc_I)H*d+Wv#mDV-eXHJUld&b!1? zUo{I-Xhc7?=dMNxf71o^0?_1Y$?&HJyBmvJa!GIg=*IlWw}I_UN>V9@V#l+5D_xEP za^Jit{&U`~n(^U-kiu0ERq<Sbmk+p==5a}MIjVdBw9JK>UMrset{g*X%_rt|SNgZ& zV<xoY16u#e<s8S@MFLW4c#atJ=60H3;TzN16XYBH+Qpo{<s{ogc>GuIY>J-Y&;6{v zR$-P_pSJUgG>OShrx!R<buhp-d=w%|EZ2~BBR1D--Ga3qCiM}vi(WS{I?ie;+5pcR z5x7W8(&m7B5THw2gfQ>gM){G&`vBV}a?t*QM-m~Oz<7-;z*k@OXl_+EJ`wqh9FnDq z40gGGxXAw7^jJqsj{>mPGh)V*w6@9H3r@>Zz}OMF^(WRgF>)0Y*&vtXLhBbs-RMc? zR<?O_)~Twy(j~`MmDmx%zwa`gZ$B2u{ty5zs?*BdYb<P+p;5Y?Vn7>>vr#0^vstPS z0L?|uVpfkk)Ka~w-}e1<9de>@Rw#kl_{is{^-K!Mw8yu&wi7`Kf&&1Xe(VYcQpDAv z1&7*#2_SE5+l|>7I=cnx9XTz7i0o~bpPsJ1ngt%}#y5lodCC@L4=HIaLq$Mi2J33` z%wc)jOug}KuAp#1a(59roCk$Cm!Imw|JXiOo}boyL%n;K_9g!<dI{70$@iQJS|~zM zrU}V*9)jC4{GeWu9_#tB5brfb?ob^7e9ND=?_)`hzML~P#w;fOBi31wJ%T(_L^nY9 z{lOTMf70pc%9OgRTHf2JTq%u{ZHzovkow0(1pmq2#Lf<^fwtME-v>)O5awM!H*ilS z$^bo0C(Ui(lov5Bf8nZworpCgpln!CH(t^_KV*-bTms_|@2#vf&HLvP&DrTN(K9x1 zG45`7>N}`2uG2y7mG!gEubw;r2S~DuxaaN~EJhkb*(1cpY{LOAmNEM>?JML>p$N9J zg#q3gzC*JM<TxkLW!i87UAqvWKL@kSO-!{=Ox-a88x^iU8n#7aZCv&G7cC&$CB@G5 z%kHL%4Na_8CznwBV?tcxoe?Pt<<)>1JP>%X9)jx2-|`=~JMJVXPNi50^Qg?y6;^6i zL;x`QdR#dJJ5M3!SgvgBBD7qV3Qfd+Dkx;_Jm@96V+WvR8>PK4aYjWtkH6#aK<Qio z@{S8s?%tdL8z+0ccYKS*<t9%P^yQujf$Gi_eU90vFznj@1{AP>YQBhiUT0DYk_xzV ziFEhyw*hUaDycH{?oD}<ZDRlwy79nC!B+a$UL@ds!~Q*PdQ>Dvzz=&io<Hu;o~g79 z&+nE{*bT(O0daE$dH-G3z=0DDQAK7L)_?m+73lAL4n^+PYKfWt@7^XHn0`6V3HQ6a z+}BDRJ_6zmUl?Hib<jjaT*9eyFm@17zyq4*c6#rZou|GFk$nK5&9h#`V~8bde@-i* zWQ3yR1hq^i(1k6(EJd=K?K=ff+s;~1ERfULj+PnG*>mA+RYNfyA@cmH{WJV%g+pkx z+f{+g08ratn(0wf*}?;dZvVeH7>?#lZ|)!Gd*O**{sL<{12@oL*6NsLR|$hc)6o}7 z`_}TMWkbXHVj0JE$y+bCU&UAh#I63?zwIIB2w8Fzp2j&Orsg+!ucAB1{W@G%Kui9< z^S#LRtz>9%T|X$*7Ly}F)Lk{8cR*OE{QYjWY<(H-DaM7%zs*LQwSfDrGy4*F&MVQ0 z<r7*!@)~lkZRwJa6!j{(+9_gP`)JlI{&Kg5LHWxlM!$Yq%UVF6u%Yailqv;ywu^Bm zVppFz4*2(cr4*%(X|<A)8vBCgpJ&vFAn|;4oiKm9hr#dlQf%Pd`nZ8<xBoztayOAm z0OR=a^e@E2$u1#1;t;Ymn|={a18&$=f4P*YB{UZed@WK@2}z##hsN2k9CRK*$LF)_ z?(qKN;=@Yq?jd+LDV?1|;_ADj^UC_j-q?qD*`-P?G?3HN$<y60OwW#KGh1M_|2bGM zbA4;2!|%GB>PeL<*x*=VI2k9ncWjNp-#sX}FkkaPl@1Z!Bhb+C-D6m+1psa(NnT!^ zkLFh~aN)-HeH}Q~4YL<3jr06w(_Hi%s5jp_ws!ZktJC!m4W?Th+1T^;G$|zVAXeXh zhV!H5gDZW-D_6sU^wH2ySKlDWHMaEg-wa5=uO>Bwn3oG&@~HARVNxRg8<c?s<Fsaq zljtr?^U6|OFoS>|A*NTidXdqNIP<tP%|*}IyaZ$)hjYzZ6Y^zG;IxPxl2K&?k?(%N zs9s#0hLo&{G>tjy!Hx_BJrM&=<j)N5p^YheKqT5S!Uk5Mm=8;X3n{QVRRb}y-$?z; z*I*C1>bu8)U9_;+-bytxJOiUz+B7@{(pS?|v!Md>swNF7W^^wWL9qJ95E8(AxcHWQ z-8o6^Z01U$>p9}Keg+?q>^>a=e)8*+Yx`k<rz{wvuU`x6$1t)&e7BH*#gDr3(LpJQ z0A^6NjqZ1=_x~stufDY3qFpD0=3yqQU;)v8sUrD)7Ow&JKuls<*I&)DWK8ioini zUHrc>=V2s~4*CADP=qiMcV}JOq&Yn@0_IYbXV#GOs#ixiz)47E(9`Kl4L}iq3us9M zuIya9?Zt2d7eh+J5c?hwfIG2G0X)3oA6xp{a{?+0`uEN_(F`EThQl%2f6Ewv@9<iI z!sSiuJ#2T9;~)8XP$SI4z&Q|;Cf=)(ZhJ<83Z!!yiLYIu02)=@k2Sy@p+2FuGy}9K zrQ%wtDFY;Ubf^G;?wbH1(CEq)&p1xPg8`Us|67&jN<lGyO!fof7}M5&SOgC%0*jOG zDivavl(0njh-@=}WU7wP6~q|^Ojr4tdDEAHpnDVe@SXD<0W5@>E;i7<6AM(|dTsvM z0+#^wlpsm<_g03V20%a*Tiv9~6d^GAksJK53Gi4|AeXWcb{Atgb`FP{16+LAmv^K9 z*W73^Ent2Z3b^GMSLZaFKaw=xVF4=Kezfg9k&HoUAVNyiu{={y%ql)Wz##~1rJIY0 zXCMQZ>a|;CfyJ=k{M7+dK@5P_C18G9iNenx7R+}p#$axKYQYS?76P;aa2q!R(>*(- z0lT2ga71t(di(vO-58*5=wQpr0@!Vc6SR>4d2DwQSXUcGKxg1*@uoh~Z_!|#Fd&9% zk-xm^4f>}8hQUl(7*tg;_ewb4p?(NR8(}CwbHuZ`I4~Mcm0<(zLta!)zpuvl2E#On zz{R87d`%8qxM_}HvVMo@9^w<7pjJjeqIw|%v_DY<oDu=6GHDROYc3!Imx+ag2qlLC zXhr5<t!*a*W*0(SAMFA0{bz<^e0o?ojvbJ1bL92n`FGH&dPHE00FYrqt!+$h!3b_B z{Ex!N@emYq>(yJzWKRU})yMYn%gr+2;$j^hbr^1C0R~Lz(=`VpNmhf!U_k_Co5`Q& z?^Of3c43G<u*@D3@Bxxd67u7%^so<XQ4>Oa!$6Y@2z<G!-j%2a<PctJqxJ&b>fy!B z7WV`>2w>kH7t`2~cG$*?n`=J+<4Q>34-as_=!-D<o6XLBR&NFb^tSAm!PbEy_kxAp zHqZeHBl0x4MdTb5;0*7?GYr5AxOOxX0GL)6-Fe3F*oikpBVNxPT5m#0tLA?w5&Ha} z%FX?s>AnHupYO)3Ok$4ZraP>Y897WDrqrFsAw}7v$!<cJQ%<4y3J*mNJ&)m8=y2z* z8?_{7S;^!)d2-0wlw(L^<~Vly7oH!k->=v8dcCh7uGi}#ej=_BY9zwi+i|jqKzJbE zZUuq`2R{)8-a3Q3@H5iT&H*h5{*@TInULU!%gML1k&D8x9*W|%N@g7Mjb8j%?aP@j z<(R)g!22?6sZ$<-hAvaKA-(F+2ri`YNPUK$dJJ$>_>#WGZHn{FdX>)FY9qV4C)WQX zxPH3#ZfVwaP=QR<!(1MewxFWzX;$FH=_KdsattsH78EsLkl94rOD1G&OB~Lkf$NrZ zQWjuvB_F0y588_cTi4jmpc_zAJ{MZdn*iN!pA%|@7vU{j0c$TnrMrbn*XmoCb=h{% z{ZHe#>+SMn?S>HLn1F&$S~9TB>%_!tB;5P)jQ`bkP%`0qi?3$V{4C&E1wq#^q{z)T zN)y0y^!dN|4xl8UeBuDm6E$oKlZpTjP=n%U*QbAz7t}?{uV{30FyQ3zt}Sb`n@8Z} zjEmTJ0h&mRewAGy^=MmBS;vyPWTf0U{(G^YXB@EQMoPm>cR?OlNO@iXG<F$=z1$Iv zK%;U7&BxYx?>!e#?KsYFiz0CKzkK>ixX=5G;L;)4CwNVo%rglO|F5#KF77gFbH8xC z;st`eOq`6S(`6jpcShQI%CgHCUS!htBp3%)y_nes)@zSy1$!<ZLje84?jMR(lF1AM zx&C{QGrESSOn%%=@D!<a^T8-NG|OjG0J+#(=lxUywo5grH!Lhn09AO@%K~Lin4*^2 zyd11s`bOMYrY2=w;(#<t2_(E?Ryqe*lNDJ<?vz0fZc&9&E0DrEg5EYT0*%(F5*1@p z@0xvSJgUgP&~viWATvcf{gq1REE6z~lDC%5bRxp4$C5h7tWnEWWK#Dd1gPClrT*Ba zt#Uz=JTSzxS)2~2j2a37wRs|nzk}=41Y_W9UY`m1Aw{AGRHC$6JnMIZgagI6Zw{cn z2CeQMKeS`CbqxqxyLAfda;;*~Y$VTBFAdP@iBrZaVqh&M>g+7RxELwVTVtq`>E+76 zSy|4gcO05N|LYZ6@b4D8xC)@Bzhjvp#Q>%IuG)L8QSck;mKN}%LtNUjQ;s|8phjLU z$O>~yXnW!d9jj8m>z;*x8;%Ac2+ndj?v8;>p(d;{Ka(2~3rh0}Rwqj!hYJySANb^| z=DDG+!$er5NVmrTdSc$Sdkz~QGhN-NeA!5a-Jt>~BEpIO{1^n;bV~VaelLRERJw&; zY=b5RGWs7tH`Y>%ZQT)kb2EVaq4M}HiXrA0Q2{Jt8N#A2M9#+&5#_Bl7;|)9Gf;qF ztlw5~M+B6qVuqA~TNS{H%Ew#J0joz6cL-cx*q{R4$Fg_Jeld_`RfZmgGhNlZVx{#+ z5Hi)J#$X`H>EBIl5-i|ec_(dYm;$i7!-Np%au7zG`rIQ72M>a6Si?zw;lV7o&`^OH zbp+5~xv6lyUoV3d!BsjA{u*A|+%&2No*G>^`pR2}T>eg-@qr3#@2eUUG68%u&49O8 zX9NxUDTY3NO~);+?*Wa++Ln$70G%u2&>3ycm+9Sr=RKdjZx^u6G6}C*as?XfxWb!q z3_m29v=XILr~nF^nNBh>5-d2)?_uGz%4J!NgBD<ja&<D%dy;_!+#*Z+OI|YjhUX4* z9s0rOzLkG$5VvE!!6=)pJtRc~WhX6#f}McbZ2sd~<@95QdaGQ8asN2vlbkNw{ut2O zp4B*-QWhLDE_4WLJA~ZzT^jz?!U%B_V5K&oHyXB6wCe>g*Ytp+kvO`N6pjK{Ch5dJ zTCi)UipczqDg)1|PA|0bRsnO8D+8U>G^zNe18#|k)sHM&OximOIh_;k=6aa(ik(KF zeQ`;x7OB4NSbU{+VCB};@a!Fcl{gbY{r51ThxB<d@_MHDu-~$(?b+Zkfx;;F;X>l< z#~xf@xFmPL{b8F^o{O3<QX}a1H!<G@+kN}`mxfqhHQ;Cx9%Gz(M9@B1-OtNN-e2j_ zxK(T>Dy^ZtZo3F5%;Pl<meM~|7l!eI=7w2IlI~Z<jeD%&p#N<fLbjA*2n}&JN%K!e zA6QioQ~P}U3s&dv-2iA$zpu&*Es8+Sg421&1_`82u{^<SPthgw$cZ@%Yz0KE>)V<q zDMoD#rg<b3_(j|HKJtwiK$1g37ORwe-Jknsl$}Uis}mQ+@LZJ6s~hv)c|AQ?AChjV zx1U3!r!d`5ed5oi9au51JHM6OjL^uXhwIVb1_6$E#)v|zG_6Th^ska$5f2V){qR_o z&vzG&m3|@psZZGhh8qcw#a@S!zKA)v+W35TKAM)WTV$5G`_F@s`U8T2`si;iX~{m? z1=XL%iHZ>U(L^qHXq+@UwqbdL|1jk#e(5uno$}8r`}5e72D@OVME%7L2Gh08J72T? zTkWX~S5=bSPqiD}Q98v>=Skg5gM0~wd`-P`s>DoJk*)s6jEjhpgULJRY3ZtVPx8y& z_06u=7~fmRImNtp5GhMsLtTp*={>!{i{Q@zr>{ypVTy6~HbUQ7dpb`jc(k<``gMdJ zJ3FwjBd(_T@cMxF%$Ioc%d_X1g5^-3s$Q#8kDNU3)cT;+(&VHr51Ru)qnqKE&=-eH zEXinE@)0<&<L5Q|TKUmy6`S$wpvkgOLJXRAo3r%uu}=_q!Jnf~eE-Phy1f`&XjH;~ zypMibZhBeTMD6!jZ$jTLK!lyJg{L%h?jyp&?r;7awU8bCza_D;z@wODJ^1(A$7W!E M%GvJu3EHi{0nFnf#Q*>R literal 0 HcmV?d00001 From 870eaf029e43ec52d34e0dd026d78fbb961a5f77 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Wed, 31 Aug 2022 13:13:24 -0500 Subject: [PATCH 192/219] Cleanup long-deprecated ifdefs (#329) Signed-off-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Louise Poubel <louise@openrobotics.org> --- CMakeLists.txt | 1 + av/include/gz/common/ffmpeg_inc.hh | 60 +++++++++- av/src/AudioDecoder.cc | 97 ++-------------- av/src/Video.cc | 58 ++++++---- av/src/VideoEncoder.cc | 175 ++++++----------------------- av/src/ffmpeg_inc.cc | 25 ----- 6 files changed, 135 insertions(+), 281 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c231c53c..9c4b6ceb9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -109,6 +109,7 @@ gz_find_package(SWSCALE REQUIRED_BY av PRETTY libswscale) #------------------------------------ # Find avdevice gz_find_package(AVDEVICE VERSION 56.4.100 REQUIRED_BY av PRETTY libavdevice) +set(HAVE_AVDEVICE ${AVDEVICE_FOUND}) #------------------------------------ # Find avformat diff --git a/av/include/gz/common/ffmpeg_inc.hh b/av/include/gz/common/ffmpeg_inc.hh index faced0002..32c6459f8 100644 --- a/av/include/gz/common/ffmpeg_inc.hh +++ b/av/include/gz/common/ffmpeg_inc.hh @@ -17,6 +17,60 @@ #ifndef GZ_COMMON_FFMPEG_INC_HH_ #define GZ_COMMON_FFMPEG_INC_HH_ +/// Versions of FFMPEG on Gazebo supported platforms +// v4.2.7 (Ubuntu Focal) +// libavutil 56. 31.100 / 56. 31.100 +// libavcodec 58. 54.100 / 58. 54.100 +// libavformat 58. 29.100 / 58. 29.100 +// libavdevice 58. 8.100 / 58. 8.100 +// libavfilter 7. 57.100 / 7. 57.100 +// libavresample 4. 0. 0 / 4. 0. 0 +// libswscale 5. 5.100 / 5. 5.100 +// libswresample 3. 5.100 / 3. 5.100 +// libpostproc 55. 5.100 / 55. 5.100 + +// v4.4.1 (Windows CI vcpkg) +// libavutil 56. 70.100 / 56. 70.100 +// libavcodec 58.134.100 / 58.134.100 +// libavformat 58. 76.100 / 58. 76.100 +// libavdevice 58. 13.100 / 58. 13.100 +// libavfilter 7.110.100 / 7.110.100 +// libswscale 5. 9.100 / 5. 9.100 +// libswresample 3. 9.100 / 3. 9.100 +// libpostproc 55. 9.100 / 55. 9.100 + +// v4.4.2 (Ubuntu Jammy) +// libavutil 56. 70.100 / 56. 70.100 +// libavcodec 58.134.100 / 58.134.100 +// libavformat 58. 76.100 / 58. 76.100 +// libavdevice 58. 13.100 / 58. 13.100 +// libavfilter 7.110.100 / 7.110.100 +// libswscale 5. 9.100 / 5. 9.100 +// libswresample 3. 9.100 / 3. 9.100 +// libpostproc 55. 9.100 / 55. 9.100 + +// v5.1 (homebrew) +// libavutil 57. 28.100 / 57. 28.100 +// libavcodec 59. 37.100 / 59. 37.100 +// libavformat 59. 27.100 / 59. 27.100 +// libavdevice 59. 7.100 / 59. 7.100 +// libavfilter 8. 44.100 / 8. 44.100 +// libswscale 6. 7.100 / 6. 7.100 +// libswresample 4. 7.100 / 4. 7.100 +// libpostproc 56. 6.100 / 56. 6.100 + +/// Additional versions of FFMPEG not officially supported +// v5.0.1 (conda-forge) +// libavutil 57. 17.100 / 57. 17.100 +// libavcodec 59. 18.100 / 59. 18.100 +// libavformat 59. 16.100 / 59. 16.100 +// libavdevice 59. 4.100 / 59. 4.100 +// libavfilter 8. 24.100 / 8. 24.100 +// libswscale 6. 4.100 / 6. 4.100 +// libswresample 4. 3.100 / 4. 3.100 +// libpostproc 56. 3.100 / 56. 3.100 + + #include <string> #include <gz/common/config.hh> @@ -44,7 +98,7 @@ extern "C" { #include <libavutil/imgutils.h> #include <libavutil/hwcontext.h> -#if defined(__linux__) && defined(HAVE_AVDEVICE) +#if defined(HAVE_AVDEVICE) #include <libavdevice/avdevice.h> #endif } @@ -57,15 +111,18 @@ namespace gz { /// \brief Helper function to avoid deprecation warnings. GZ_COMMON_AV_VISIBLE + GZ_DEPRECATED(5) AVFrame *AVFrameAlloc(void); /// \brief Helper function to avoid deprecation warnings. GZ_COMMON_AV_VISIBLE + GZ_DEPRECATED(5) void AVFrameUnref(AVFrame *_frame); /// \brief Helper function to avoid deprecation warnings. /// \param[in] _packet AVPacket structure that stores compressed data GZ_COMMON_AV_VISIBLE + GZ_DEPRECATED(5) void AVPacketUnref(AVPacket *_packet); /// \brief Helper function to avoid deprecation warnings @@ -80,6 +137,7 @@ namespace gz /// \note If the codec is in draining mode, _packet can be null. The return /// value on success will then be 0, but _gotFrame will be non-zero. GZ_COMMON_AV_VISIBLE + GZ_DEPRECATED(5) int AVCodecDecode(AVCodecContext *_codecCtx, AVFrame *_frame, int *_gotFrame, AVPacket *_packet); diff --git a/av/src/AudioDecoder.cc b/av/src/AudioDecoder.cc index 64f99d13a..1236f70fc 100644 --- a/av/src/AudioDecoder.cc +++ b/av/src/AudioDecoder.cc @@ -38,7 +38,7 @@ class gz::common::AudioDecoder::Implementation public: AVCodecContext *codecCtx {nullptr}; /// \brief libavcodec audio codec. - public: const AVCodec *codec; + public: const AVCodec *codec {nullptr}; /// \brief Index of the audio stream. public: int audioStream {0}; @@ -69,12 +69,7 @@ AudioDecoder::AudioDecoder() ///////////////////////////////////////////////// bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) { -#if LIBAVFORMAT_VERSION_MAJOR < 59 - AVPacket *packet, packet1; - int bytesDecoded = 0; -#else AVPacket *packet; -#endif unsigned int maxBufferSize = 0; AVFrame *decodedFrame = nullptr; @@ -100,7 +95,7 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) bool result = true; - if (!(decodedFrame = common::AVFrameAlloc())) + if (!(decodedFrame = av_frame_alloc())) { gzerr << "Audio decoder out of memory\n"; result = false; @@ -117,7 +112,6 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) { if (packet->stream_index == this->dataPtr->audioStream) { -#if LIBAVFORMAT_VERSION_MAJOR >= 59 // Inspired from // https://github.com/FFmpeg/FFmpeg/blob/n5.0/doc/examples/decode_audio.c#L71 @@ -144,12 +138,18 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) return false; } +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) + int numChannels = this->dataPtr->codecCtx->ch_layout.nb_channels; +#else + int numChannels = this->dataPtr->codecCtx->channels; +#endif + // Total size of the data. Some padding can be added to // decodedFrame->data[0], which is why we can't use // decodedFrame->linesize[0]. int size = decodedFrame->nb_samples * av_get_bytes_per_sample(this->dataPtr->codecCtx->sample_fmt) * - this->dataPtr->codecCtx->ch_layout.nb_channels; + numChannels; // Resize the audio buffer as necessary if (*_outBufferSize + size > maxBufferSize) @@ -163,50 +163,6 @@ bool AudioDecoder::Decode(uint8_t **_outBuffer, unsigned int *_outBufferSize) size); *_outBufferSize += size; } -#else - int gotFrame = 0; - - packet1 = *packet; - while (packet1.size) - { - // Some frames rely on multiple packets, so we have to make sure - // the frame is finished before we can use it -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - bytesDecoded = avcodec_decode_audio4( - this->dataPtr->codecCtx, decodedFrame, &gotFrame, &packet1); -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - - if (gotFrame) - { - // Total size of the data. Some padding can be added to - // decodedFrame->data[0], which is why we can't use - // decodedFrame->linesize[0]. - int size = decodedFrame->nb_samples * - av_get_bytes_per_sample(this->dataPtr->codecCtx->sample_fmt) * - this->dataPtr->codecCtx->channels; - - // Resize the audio buffer as necessary - if (*_outBufferSize + size > maxBufferSize) - { - maxBufferSize += size * 5; - *_outBuffer = reinterpret_cast<uint8_t*>(realloc(*_outBuffer, - maxBufferSize * sizeof(*_outBuffer[0]))); - } - - memcpy(*_outBuffer + *_outBufferSize, decodedFrame->data[0], - size); - *_outBufferSize += size; - } - - packet1.data += bytesDecoded; - packet1.size -= bytesDecoded; - } -#endif } av_packet_unref(packet); } @@ -264,20 +220,8 @@ bool AudioDecoder::SetFile(const std::string &_filename) this->dataPtr->audioStream = -1; for (i = 0; i < this->dataPtr->formatCtx->nb_streams; ++i) { -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif -#if LIBAVFORMAT_VERSION_MAJOR >= 59 if (this->dataPtr->formatCtx->streams[i]->codecpar->codec_type == // NOLINT(*) AVMEDIA_TYPE_AUDIO) -#else - if (this->dataPtr->formatCtx->streams[i]->codec->codec_type == // NOLINT(*) - AVMEDIA_TYPE_AUDIO) -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif { this->dataPtr->audioStream = i; break; @@ -293,21 +237,7 @@ bool AudioDecoder::SetFile(const std::string &_filename) return false; } - // Get the audio stream codec -#ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif -#if LIBAVFORMAT_VERSION_MAJOR < 59 - this->dataPtr->codecCtx = this->dataPtr->formatCtx->streams[ - this->dataPtr->audioStream]->codec; -#endif -#ifndef _WIN32 -# pragma GCC diagnostic pop -#endif - // Find a decoder -#if LIBAVFORMAT_VERSION_MAJOR >= 59 this->dataPtr->codec = avcodec_find_decoder(this->dataPtr->formatCtx->streams[ this->dataPtr->audioStream]->codecpar->codec_id); if (!this->dataPtr->codec) @@ -324,10 +254,6 @@ bool AudioDecoder::SetFile(const std::string &_filename) // Copy all relevant parameters from codepar to codecCtx avcodec_parameters_to_context(this->dataPtr->codecCtx, this->dataPtr->formatCtx->streams[this->dataPtr->audioStream]->codecpar); -#else - this->dataPtr->codec = avcodec_find_decoder( - this->dataPtr->codecCtx->codec_id); -#endif if (this->dataPtr->codec == nullptr) { @@ -338,13 +264,8 @@ bool AudioDecoder::SetFile(const std::string &_filename) return false; } -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(56, 60, 100) if (this->dataPtr->codec->capabilities & AV_CODEC_CAP_TRUNCATED) this->dataPtr->codecCtx->flags |= AV_CODEC_FLAG_TRUNCATED; -#else - if (this->dataPtr->codec->capabilities & CODEC_CAP_TRUNCATED) - this->dataPtr->codecCtx->flags |= CODEC_FLAG_TRUNCATED; -#endif // Open codec if (avcodec_open2(this->dataPtr->codecCtx, diff --git a/av/src/Video.cc b/av/src/Video.cc index 872a6af29..198684553 100644 --- a/av/src/Video.cc +++ b/av/src/Video.cc @@ -59,6 +59,37 @@ class gz::common::Video::Implementation public: bool drainingMode = false; }; +int AVCodecDecode(AVCodecContext *_codecCtx, + AVFrame *_frame, int *_gotFrame, AVPacket *_packet) +{ + // from https://blogs.gentoo.org/lu_zero/2016/03/29/new-avcodec-api/ + int ret; + + *_gotFrame = 0; + + if (_packet) + { + ret = avcodec_send_packet(_codecCtx, _packet); + if (ret < 0) + { + return ret == AVERROR_EOF ? 0 : ret; + } + } + + ret = avcodec_receive_frame(_codecCtx, _frame); + if (ret < 0 && ret != AVERROR(EAGAIN)) + { + return ret; + } + if (ret >= 0) + { + *_gotFrame = 1; + } + + // new API always consumes the whole packet + return _packet ? _packet->size : 0; +} + ///////////////////////////////////////////////// Video::Video() : dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) @@ -100,7 +131,7 @@ bool Video::Load(const std::string &_filename) this->Cleanup(); } - this->dataPtr->avFrame = common::AVFrameAlloc(); + this->dataPtr->avFrame = av_frame_alloc(); // Open video file if (avformat_open_input(&this->dataPtr->formatCtx, _filename.c_str(), @@ -121,13 +152,7 @@ bool Video::Load(const std::string &_filename) for (unsigned int i = 0; i < this->dataPtr->formatCtx->nb_streams; ++i) { enum AVMediaType codec_type; - // codec parameter deprecated in ffmpeg version 3.1 - // github.com/FFmpeg/FFmpeg/commit/9200514ad8717c -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101) codec_type = this->dataPtr->formatCtx->streams[i]->codecpar->codec_type; -#else - codec_type = this->dataPtr->formatCtx->streams[i]->codec->codec_type; -#endif if (codec_type == AVMEDIA_TYPE_VIDEO) { this->dataPtr->videoStream = static_cast<int>(i); @@ -143,18 +168,13 @@ bool Video::Load(const std::string &_filename) // Find the decoder for the video stream auto stream = this->dataPtr->formatCtx->streams[this->dataPtr->videoStream]; -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101) codec = avcodec_find_decoder(stream->codecpar->codec_id); -#else - codec = avcodec_find_decoder(stream->codec->codec_id); -#endif if (codec == nullptr) { gzerr << "Codec not found\n"; return false; } -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101) // AVCodecContext is not included in an AVStream as of ffmpeg 3.1 // allocate a codec context based on updated example // github.com/FFmpeg/FFmpeg/commit/bba6a03b2816d805d44bce4f9701a71f7d3f8dad @@ -173,21 +193,11 @@ bool Video::Load(const std::string &_filename) << std::endl; return false; } -#else - // Get a pointer to the codec context for the video stream - this->dataPtr->codecCtx = this->dataPtr->formatCtx->streams[ - this->dataPtr->videoStream]->codec; -#endif // Inform the codec that we can handle truncated bitstreams -- i.e., // bitstreams where frame boundaries can fall in the middle of packets -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(56, 60, 100) if (codec->capabilities & AV_CODEC_CAP_TRUNCATED) this->dataPtr->codecCtx->flags |= AV_CODEC_FLAG_TRUNCATED; -#else - if (codec->capabilities & CODEC_CAP_TRUNCATED) - this->dataPtr->codecCtx->flags |= CODEC_FLAG_TRUNCATED; -#endif // Open codec if (avcodec_open2(this->dataPtr->codecCtx, codec, nullptr) < 0) @@ -212,7 +222,7 @@ bool Video::Load(const std::string &_filename) } // swscale needs 32-byte-aligned output frame on some systems - this->dataPtr->avFrameDst = common::AVFrameAlloc(); + this->dataPtr->avFrameDst = av_frame_alloc(); this->dataPtr->avFrameDst->format = this->dataPtr->dstPixelFormat; this->dataPtr->avFrameDst->width = this->dataPtr->codecCtx->width; this->dataPtr->avFrameDst->height = this->dataPtr->codecCtx->height; @@ -291,7 +301,7 @@ bool Video::NextFrame(unsigned char **_buffer) } // Process all the data in the frame - ret = AVCodecDecode( + ret = ::AVCodecDecode( this->dataPtr->codecCtx, this->dataPtr->avFrame, &frameAvailable, this->dataPtr->drainingMode ? nullptr : packet); diff --git a/av/src/VideoEncoder.cc b/av/src/VideoEncoder.cc index 4f784b24d..42267a712 100644 --- a/av/src/VideoEncoder.cc +++ b/av/src/VideoEncoder.cc @@ -14,6 +14,7 @@ * limitations under the License. * */ + #include <stdio.h> #include <mutex> @@ -32,6 +33,14 @@ using namespace gz; using namespace common; using namespace std; +// After AVDevice 59.0.100, const pointers are used. +#if LIBAVDEVICE_VERSION_INT >= AV_VERSION_INT(59, 0, 100) +using OutputFormat = const AVOutputFormat*; +#else +using OutputFormat = AVOutputFormat*; +#endif + + // Private data class // hidden visibility specifier has to be explicitly set to silent a gcc warning class GZ_COMMON_AV_HIDDEN gz::common::VideoEncoder::Implementation @@ -53,11 +62,7 @@ class GZ_COMMON_AV_HIDDEN gz::common::VideoEncoder::Implementation public: AVFrame *avOutFrame = nullptr; /// \brief libav input image data (aligned to 32 bytes) -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 24, 1) - public: AVPicture *avInFrame = nullptr; -#else public: AVFrame *avInFrame = nullptr; -#endif /// \brief Pixel format of the input frame. So far it is hardcoded. public: AVPixelFormat inPixFormat = AV_PIX_FMT_RGB24; @@ -369,40 +374,45 @@ bool VideoEncoder::Start( // This 'if' and 'free' are just for safety. We chech the value of formatCtx // below. if (this->dataPtr->formatCtx) + { avformat_free_context(this->dataPtr->formatCtx); + } this->dataPtr->formatCtx = nullptr; // Special case for video4linux2. Here we attempt to find the v4l2 device if (this->dataPtr->format.compare("v4l2") == 0) { -#if LIBAVDEVICE_VERSION_INT >= AV_VERSION_INT(56, 4, 100) - AVOutputFormat *outputFormat = nullptr; - while ((outputFormat = av_output_video_device_next(outputFormat)) - != nullptr) +#if defined(HAVE_AVDEVICE) + OutputFormat outputFormat = nullptr; + do { - // Break when the output device name matches 'v4l2' - if (this->dataPtr->format.compare(outputFormat->name) == 0) + outputFormat = av_output_video_device_next(outputFormat); + + if (outputFormat) { - // Allocate the context using the correct outputFormat - auto result = avformat_alloc_output_context2(&this->dataPtr->formatCtx, - outputFormat, nullptr, this->dataPtr->filename.c_str()); - if (result < 0) + // Break when the output device name matches 'v4l2' + if (this->dataPtr->format.compare(outputFormat->name) == 0) { - gzerr << "Failed to allocate AV context [" << av_err2str_cpp(result) - << "]" << std::endl; + // Allocate the context using the correct outputFormat + auto result = avformat_alloc_output_context2(&this->dataPtr->formatCtx, + outputFormat, nullptr, this->dataPtr->filename.c_str()); + if (result < 0) + { + gzerr << "Failed to allocate AV context [" << av_err2str_cpp(result) + << "]" << std::endl; + } + break; } - break; } } -#else - gzerr << "libavdevice version >= 56.4.100 is required for v4l2 recording. " - << "This version is available on Ubuntu Xenial or greater.\n"; - return false; + while (outputFormat); + + #endif } else { - const AVOutputFormat *outputFormat = av_guess_format(nullptr, + auto* outputFormat = av_guess_format(nullptr, this->dataPtr->filename.c_str(), nullptr); if (!outputFormat) @@ -411,28 +421,6 @@ bool VideoEncoder::Start( << "Using MPEG.\n"; } -#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(56, 40, 1) - this->dataPtr->formatCtx = avformat_alloc_context(); - if (outputFormat) - { - this->dataPtr->formatCtx->oformat = outputFormat; - } - else - { - this->dataPtr->formatCtx->oformat = - av_guess_format("mpeg", nullptr, nullptr); - } -#ifdef WIN32 - _sprintf(this->dataPtr->formatCtx->filename, - sizeof(this->dataPtr->formatCtx->filename), - "%s", _filename.c_str()); -#else - snprintf(this->dataPtr->formatCtx->filename, - sizeof(this->dataPtr->formatCtx->filename), - "%s", _filename.c_str()); -#endif - -#else auto result = avformat_alloc_output_context2(&this->dataPtr->formatCtx, nullptr, nullptr, this->dataPtr->filename.c_str()); if (result < 0) @@ -440,7 +428,6 @@ bool VideoEncoder::Start( gzerr << "Failed to allocate AV context [" << av_err2str_cpp(result) << "]" << std::endl; } -#endif } // Make sure allocation occurred. @@ -463,11 +450,7 @@ bool VideoEncoder::Start( if (!encoder) { gzerr << "Codec for[" -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 24, 1) - << this->dataPtr->formatCtx->oformat->name -#else << avcodec_get_name(codecId) -#endif << "] not found. Video encoding is not started.\n"; this->Reset(); return false; @@ -476,13 +459,8 @@ bool VideoEncoder::Start( gzmsg << "Using encoder " << encoder->name << std::endl; // Create a new video stream -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 24, 1) - this->dataPtr->videoStream = avformat_new_stream(this->dataPtr->formatCtx, - encoder); -#else this->dataPtr->videoStream = avformat_new_stream(this->dataPtr->formatCtx, nullptr); -#endif if (!this->dataPtr->videoStream) { @@ -493,11 +471,7 @@ bool VideoEncoder::Start( this->dataPtr->videoStream->id = this->dataPtr->formatCtx->nb_streams-1; // Allocate a new video context -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 24, 1) - this->dataPtr->codecCtx = this->dataPtr->videoStream->codec; -#else this->dataPtr->codecCtx = avcodec_alloc_context3(encoder); -#endif if (!this->dataPtr->codecCtx) { @@ -510,11 +484,7 @@ bool VideoEncoder::Start( // some formats want stream headers to be separate if (this->dataPtr->formatCtx->oformat->flags & AVFMT_GLOBALHEADER) { -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 24, 1) - this->dataPtr->codecCtx->flags |= CODEC_FLAG_GLOBAL_HEADER; -#else this->dataPtr->codecCtx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; -#endif } // Frames per second @@ -552,13 +522,7 @@ bool VideoEncoder::Start( if (this->dataPtr->codecCtx->codec_id == AV_CODEC_ID_H264) { av_opt_set(this->dataPtr->codecCtx->priv_data, "preset", "slow", 0); - -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 24, 1) - av_opt_set(this->dataPtr->videoStream->codec->priv_data, - "preset", "slow", 0); -#else av_opt_set(this->dataPtr->videoStream->priv_data, "preset", "slow", 0); -#endif } // we misuse this field a bit, as docs say it is unused in encoders @@ -595,11 +559,7 @@ bool VideoEncoder::Start( return false; } -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 28, 1) - this->dataPtr->avOutFrame = avcodec_alloc_frame(); -#else this->dataPtr->avOutFrame = av_frame_alloc(); -#endif if (!this->dataPtr->avOutFrame) { @@ -624,14 +584,9 @@ bool VideoEncoder::Start( } // Copy parameters from the context to the video stream -#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(57, 40, 101) -// ret = avcodec_copy_context(this->dataPtr->videoStream->codec, -// this->dataPtr->codecCtx); -#else // codecpar was implemented in ffmpeg version 3.1 ret = avcodec_parameters_from_context( this->dataPtr->videoStream->codecpar, this->dataPtr->codecCtx); -#endif if (ret < 0) { gzerr << "Could not copy the stream parameters:" << av_err2str_cpp(ret) @@ -725,11 +680,7 @@ bool VideoEncoder::AddFrame(const unsigned char *_frame, this->dataPtr->swsCtx = nullptr; if (this->dataPtr->avInFrame) -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 24, 1) - av_free(this->dataPtr->avInFrame); -#else av_frame_free(&this->dataPtr->avInFrame); -#endif this->dataPtr->avInFrame = nullptr; } @@ -740,19 +691,12 @@ bool VideoEncoder::AddFrame(const unsigned char *_frame, if (!this->dataPtr->avInFrame) { -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 24, 1) - this->dataPtr->avInFrame = new AVPicture; - avpicture_alloc(this->dataPtr->avInFrame, - this->dataPtr->inPixFormat, this->dataPtr->inWidth, - this->dataPtr->inHeight); -#else this->dataPtr->avInFrame = av_frame_alloc(); this->dataPtr->avInFrame->width = this->dataPtr->inWidth; this->dataPtr->avInFrame->height = this->dataPtr->inHeight; this->dataPtr->avInFrame->format = this->dataPtr->inPixFormat; av_frame_get_buffer(this->dataPtr->avInFrame, 32); -#endif } av_image_fill_linesizes(this->dataPtr->inputLineSizes, @@ -814,24 +758,6 @@ bool VideoEncoder::AddFrame(const unsigned char *_frame, { frameToEncode->pts = this->dataPtr->frameCount++; -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 40, 101) - int gotOutput = 0; - AVPacket avPacket; - av_init_packet(&avPacket); - avPacket.data = nullptr; - avPacket.size = 0; - - ret = avcodec_encode_video2(this->dataPtr->codecCtx, &avPacket, - frameToEncode, &gotOutput); - - if (ret >= 0 && gotOutput == 1) - ret = ProcessPacket(&avPacket); - - av_free_packet(&avPacket); - - // #else for libavcodec version check -#else - AVPacket* avPacket = av_packet_alloc(); avPacket->data = nullptr; @@ -852,7 +778,6 @@ bool VideoEncoder::AddFrame(const unsigned char *_frame, } av_packet_unref(avPacket); -#endif } return ret >= 0 || ret == AVERROR(EAGAIN); } @@ -894,31 +819,6 @@ bool VideoEncoder::Stop() // drain remaining packets from the encoder if (this->dataPtr->encoding && this->dataPtr->codecCtx) { -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 40, 101) - if ((this->dataPtr->codecCtx->capabilities & AV_CODEC_CAP_DELAY) > 0) - { - int gotOutput = 1; - int ret = 0; - AVPacket avPacket; - av_init_packet(&avPacket); - avPacket.data = nullptr; - avPacket.size = 0; - - while (ret >= 0 && gotOutput == 1) - { - ret = avcodec_encode_video2(this->dataPtr->codecCtx, &avPacket, - nullptr, &gotOutput); - - if (ret >= 0 && gotOutput == 1) - ret = ProcessPacket(&avPacket); - } - - av_free_packet(&avPacket); - } - -// #else for libavcodec version check -#else - int ret = 0; // enter drain state ret = avcodec_send_frame(this->dataPtr->codecCtx, nullptr); @@ -941,32 +841,21 @@ bool VideoEncoder::Stop() } av_packet_unref(avPacket); } -#endif } if (this->dataPtr->encoding && this->dataPtr->formatCtx) av_write_trailer(this->dataPtr->formatCtx); -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 24, 1) if (this->dataPtr->codecCtx) avcodec_free_context(&this->dataPtr->codecCtx); -#endif this->dataPtr->codecCtx = nullptr; if (this->dataPtr->avInFrame) -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 24, 1) - av_free(this->dataPtr->avInFrame); -#else av_frame_free(&this->dataPtr->avInFrame); -#endif this->dataPtr->avInFrame = nullptr; if (this->dataPtr->avOutFrame) -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 24, 1) - av_free(this->dataPtr->avOutFrame); -#else av_frame_free(&this->dataPtr->avOutFrame); -#endif this->dataPtr->avOutFrame = nullptr; if (this->dataPtr->swsCtx) diff --git a/av/src/ffmpeg_inc.cc b/av/src/ffmpeg_inc.cc index 2fdfe1f13..bea70b7ae 100644 --- a/av/src/ffmpeg_inc.cc +++ b/av/src/ffmpeg_inc.cc @@ -21,38 +21,25 @@ using namespace gz; ////////////////////////////////////////////////// AVFrame *common::AVFrameAlloc(void) { -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55, 28, 1) return av_frame_alloc(); -#else - return avcodec_alloc_frame(); -#endif } ////////////////////////////////////////////////// void common::AVFrameUnref(AVFrame *_frame) { -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55, 28, 1) av_frame_unref(_frame); -#else - avcodec_get_frame_defaults(_frame); -#endif } ////////////////////////////////////////////////// void common::AVPacketUnref(AVPacket *_packet) { -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 24, 102) av_packet_unref(_packet); -#else - av_free_packet(_packet); -#endif } ////////////////////////////////////////////////// int common::AVCodecDecode(AVCodecContext *_codecCtx, AVFrame *_frame, int *_gotFrame, AVPacket *_packet) { -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101) // from https://blogs.gentoo.org/lu_zero/2016/03/29/new-avcodec-api/ int ret; @@ -79,16 +66,4 @@ int common::AVCodecDecode(AVCodecContext *_codecCtx, // new API always consumes the whole packet return _packet ? _packet->size : 0; -#else - // this was deprecated in ffmpeg version 3.1 - // github.com/FFmpeg/FFmpeg/commit/7fc329e2dd6226dfecaa4a1d7adf353bf2773726 -# ifndef _WIN32 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -# endif - return avcodec_decode_video2(_codecCtx, _frame, _gotFrame, _packet); -# ifndef _WIN32 -# pragma GCC diagnostic pop -# endif -#endif } From bc794755f39952871ab9879ded86585130ee288a Mon Sep 17 00:00:00 2001 From: Jochen Sprickerhof <github@jochen.sprickerhof.de> Date: Wed, 14 Sep 2022 09:43:22 +0200 Subject: [PATCH 193/219] Include cstring for memcpy (#437) Signed-off-by: Jochen Sprickerhof <git@jochen.sprickerhof.de> --- graphics/include/ignition/common/Image.hh | 1 + 1 file changed, 1 insertion(+) diff --git a/graphics/include/ignition/common/Image.hh b/graphics/include/ignition/common/Image.hh index f1fb00d21..d17700311 100644 --- a/graphics/include/ignition/common/Image.hh +++ b/graphics/include/ignition/common/Image.hh @@ -17,6 +17,7 @@ #ifndef IGNITION_COMMON_IMAGE_HH_ #define IGNITION_COMMON_IMAGE_HH_ +#include <cstring> #include <limits> #include <memory> #include <string> From 2542907deadabdf0391bec117000c0033b368879 Mon Sep 17 00:00:00 2001 From: Martin Pecka <peci1@seznam.cz> Date: Mon, 19 Sep 2022 14:13:03 +0200 Subject: [PATCH 194/219] Add gdal to prerequisites (#438) Signed-off-by: Martin Pecka <peci1@seznam.cz> --- tutorials/install.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tutorials/install.md b/tutorials/install.md index 0a0176fa3..24c53819c 100644 --- a/tutorials/install.md +++ b/tutorials/install.md @@ -81,6 +81,10 @@ The AV component requires: * [libavcodec](https://www.ffmpeg.org/libavcodec.html) * [libavutil](https://www.ffmpeg.org/libavutil.html) +The Geospatial component requires: + + * [gdal](https://gdal.org/) + ### Windows First, follow the [gz-cmake](https://github.com/gazebosim/gz-cmake) tutorial for installing Conda, Visual Studio, CMake, etc., prerequisites, and creating a Conda environment. @@ -94,7 +98,7 @@ conda activate gz-ws Install prerequisites: ``` -conda install freeimage gts glib dlfcn-win32 ffmpeg --channel conda-forge +conda install freeimage gdal gts glib dlfcn-win32 ffmpeg --channel conda-forge ``` Install Gazebo dependencies: From 26b1ac33d6f31db9895c894b779b007c8c8b1750 Mon Sep 17 00:00:00 2001 From: Ian Chen <ichen@osrfoundation.org> Date: Thu, 22 Sep 2022 00:08:35 -0700 Subject: [PATCH 195/219] Fix reading pixel values from single channel 16 bit image (#439) Signed-off-by: Ian Chen <ichen@osrfoundation.org> --- graphics/src/Image.cc | 68 +++++++++++++++++++++++++++++----- graphics/src/Image_TEST.cc | 44 ++++++++++++++++++++++ test/data/grayscale_16bit.png | Bin 0 -> 7781 bytes test/data/grayscale_8bit.png | Bin 0 -> 7765 bytes 4 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 test/data/grayscale_16bit.png create mode 100644 test/data/grayscale_8bit.png diff --git a/graphics/src/Image.cc b/graphics/src/Image.cc index 720f9df57..ad65dc757 100644 --- a/graphics/src/Image.cc +++ b/graphics/src/Image.cc @@ -67,6 +67,16 @@ namespace gz /// \return bitmap data with red and blue pixels swapped public: FIBITMAP* SwapRedBlue(const unsigned int &_width, const unsigned int &_height) const; + + /// \brief Get pixel value at specified index. + /// \param[in] _dib Pointer to Freeimage bitmap + /// \param[in] _x Pixel index in horizontal direction + /// \param[in] _y Pixel index in vertical direction + /// \param[out] _color Pixel value at specified index + /// \return TRUE value if the pixel index was found and the color + /// value set, FALSE otherwise. + public: BOOL PixelIndex(FIBITMAP *_dib, unsigned _x, unsigned _y, + math::Color &_color) const; }; } } @@ -507,16 +517,13 @@ math::Color Image::Pixel(unsigned int _x, unsigned int _y) const } else { - BYTE byteValue; - if (FreeImage_GetPixelIndex( - this->dataPtr->bitmap, _x, _y, &byteValue) == FALSE) + if (this->dataPtr->PixelIndex( + this->dataPtr->bitmap, _x, _y, clr) == FALSE) { gzerr << "Image: Coordinates out of range [" << _x << " " << _y << "] \n"; return clr; } - - clr.Set(byteValue, byteValue, byteValue); } return clr; @@ -590,23 +597,21 @@ math::Color Image::MaxColor() const } else { - BYTE byteValue; for (y = 0; y < this->Height(); y++) { for (x = 0; x < this->Width(); x++) { clr.Set(0, 0, 0, 0); - if (FreeImage_GetPixelIndex( - this->dataPtr->bitmap, x, y, &byteValue) == FALSE) + if (this->dataPtr->PixelIndex( + this->dataPtr->bitmap, x, y, clr) == FALSE) + { gzerr << "Image: Coordinates out of range [" << x << " " << y << "] \n"; continue; } - clr.Set(byteValue, byteValue, byteValue); - if (clr.R() + clr.G() + clr.B() > maxClr.R() + maxClr.G() + maxClr.B()) { maxClr = clr; @@ -618,6 +623,49 @@ math::Color Image::MaxColor() const return maxClr; } +////////////////////////////////////////////////// +BOOL Image::Implementation::PixelIndex( + FIBITMAP *_dib, unsigned _x, unsigned _y, math::Color &_color) const +{ + if (!_dib) + return FALSE; + + FREE_IMAGE_TYPE imageType = FreeImage_GetImageType(_dib); + // 8 bit images + if (imageType == FIT_BITMAP) + { + BYTE byteValue; + // FreeImage_GetPixelIndex should also work with 1 and 4 bit images + if (FreeImage_GetPixelIndex( + _dib, _x, _y, &byteValue) == FALSE) + { + return FALSE; + } + + unsigned int bpp = FreeImage_GetBPP(_dib); + // convert to float value between 0-1 + float value = byteValue / static_cast<float>(((1 << (bpp)) - 1)); + _color.Set(value, value, value); + } + // 16 bit images + else if (imageType == FIT_UINT16) + { + if ((_x < FreeImage_GetWidth(_dib)) && (_y < FreeImage_GetHeight(_dib))) + { + WORD *bits = reinterpret_cast<WORD *>(FreeImage_GetScanLine(_dib, _y)); + uint16_t word = static_cast<uint16_t>(bits[_x]); + // convert to float value between 0-1 + float value = word / static_cast<float>(math::MAX_UI16); + _color.Set(value, value, value); + } + else + { + return FALSE; + } + } + return TRUE; +} + ////////////////////////////////////////////////// void Image::Rescale(int _width, int _height) { diff --git a/graphics/src/Image_TEST.cc b/graphics/src/Image_TEST.cc index a28bd49e8..c8b0ac6e7 100644 --- a/graphics/src/Image_TEST.cc +++ b/graphics/src/Image_TEST.cc @@ -594,6 +594,50 @@ TEST_F(ImageTest, ConvertToRGBImage) } } +///////////////////////////////////////////////// +TEST_F(ImageTest, Grayscale) +{ + { + common::Image img; + std::string fileName = common::testing::TestFile("data", + "grayscale_8bit.png"); + EXPECT_EQ(0, img.Load(fileName)); + unsigned int width = 4u; + unsigned int height = 4u; + unsigned int bits = 8u; + EXPECT_TRUE(img.Valid()); + EXPECT_EQ(width, img.Width()); + EXPECT_EQ(height, img.Height()); + EXPECT_EQ(bits, img.BPP()); + EXPECT_EQ(width * bits / 8u, img.Pitch()); + EXPECT_EQ(common::Image::PixelFormatType::L_INT8, img.PixelFormat()); + math::Color maxColor(0.847f, 0.847f, 0.847f); + EXPECT_NEAR(maxColor.R(), img.MaxColor().R(), 1e-3); + EXPECT_NEAR(maxColor.G(), img.MaxColor().G(), 1e-3); + EXPECT_NEAR(maxColor.B(), img.MaxColor().B(), 1e-3); + } + + { + common::Image img; + std::string fileName = common::testing::TestFile("data", + "grayscale_16bit.png"); + EXPECT_EQ(0, img.Load(fileName)); + unsigned int width = 4u; + unsigned int height = 4u; + unsigned int bits = 16u; + EXPECT_TRUE(img.Valid()); + EXPECT_EQ(width, img.Width()); + EXPECT_EQ(height, img.Height()); + EXPECT_EQ(bits, img.BPP()); + EXPECT_EQ(width * bits / 8u, img.Pitch()); + EXPECT_EQ(common::Image::PixelFormatType::L_INT16, img.PixelFormat()); + math::Color maxColor(0.847f, 0.847f, 0.847f); + EXPECT_NEAR(maxColor.R(), img.MaxColor().R(), 1e-3); + EXPECT_NEAR(maxColor.G(), img.MaxColor().G(), 1e-3); + EXPECT_NEAR(maxColor.B(), img.MaxColor().B(), 1e-3); + } +} + using string_int2 = std::tuple<const char *, unsigned int, unsigned int>; class ImagePerformanceTest : public ImageTest, diff --git a/test/data/grayscale_16bit.png b/test/data/grayscale_16bit.png new file mode 100644 index 0000000000000000000000000000000000000000..96d3b2b0fd7a28aa1133447f41c22632fed3889d GIT binary patch literal 7781 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 Qfu$TpL`?XW(2uA57tXk~3IG5A literal 0 HcmV?d00001 diff --git a/test/data/grayscale_8bit.png b/test/data/grayscale_8bit.png new file mode 100644 index 0000000000000000000000000000000000000000..66d505b1ac094cd1fce4421b09787b91e35836ed GIT binary patch literal 7765 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 Cb-lm< literal 0 HcmV?d00001 From f88912f9eb4bf10571997991ba31338a43773e4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez=20Cordero?= <ahcorde@gmail.com> Date: Thu, 22 Sep 2022 18:45:13 +0200 Subject: [PATCH 196/219] Updated install instructions gz-common5 (#440) Signed-off-by: ahcorde <ahcorde@gmail.com> --- tutorials/install.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tutorials/install.md b/tutorials/install.md index 24c53819c..0dbcd78bc 100644 --- a/tutorials/install.md +++ b/tutorials/install.md @@ -25,7 +25,7 @@ which version you need. On macOS, add OSRF packages: ``` - ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" + /bin/bash", "-c", '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew tap osrf/simulation ``` @@ -140,10 +140,11 @@ conda install libgz-cmake<#> libgz-math<#> --channel conda-forge 1. Clone the repository ``` - git clone https://github.com/gazebosim/gz-common -b ign-common<#> + git clone https://github.com/gazebosim/gz-common -b gz-common<#> ``` Be sure to replace `<#>` with a number value, such as 3 or 4, depending on - which version you need. + which version you need. From version 5 use `gz-common<#>` for lower versions + use `ign-common<#>`. 2. Install dependencies ``` @@ -172,7 +173,8 @@ This assumes you have created and activated a Conda environment while installing 1. Navigate to where you would like to build the library, and clone the repository. ``` - # Optionally, append `-b ign-common#` (replace # with a number) to check out a specific version + # Optionally, append `-b gz-common#` (replace # with a number) to check out a specific version. + # From version 5 use `gz-common<#>` for lower versions use `ign-common<#>`. git clone https://github.com/gazebosim/gz-common.git ``` From 7ce5c13a5562d0e8e09b0154063cbfc1c9cc4570 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez=20Cordero?= <ahcorde@gmail.com> Date: Thu, 22 Sep 2022 18:45:40 +0200 Subject: [PATCH 197/219] Improved visualization hw encoding tutorial gz-common5 (#441) Signed-off-by: ahcorde <ahcorde@gmail.com> --- tutorials/hw-encoding.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tutorials/hw-encoding.md b/tutorials/hw-encoding.md index 14be0a219..8885f58a4 100644 --- a/tutorials/hw-encoding.md +++ b/tutorials/hw-encoding.md @@ -120,7 +120,7 @@ on implementing the recording procedure itself, and completely ignore any HW acceleration of the recording process. Users of the code can then enable the HW acceleration just using these 3 environment variables: -### `GZ_VIDEO_ALLOWED_ENCODERS` +### GZ_VIDEO_ALLOWED_ENCODERS This is the main variable that allows the `VideoEncoder` to probe for supported HW-accelerated encoders. It is a colon-separated list of names described in the @@ -140,14 +140,14 @@ encoder is considered working. Sometimes, something can go wrong in a later stag (e.g. insufficient GPU memory), and that is a kind of thing you have to handle yourself. -### `GZ_VIDEO_ENCODER_DEVICE` +### GZ_VIDEO_ENCODER_DEVICE This is a name of the encoder device as specified in the "Device Names" section. If empty, first working device will be used. This auto detection should suffice on single-GPU systems or if you don't care which GPU will be used. If a device is specified, only encoders accepting this device name as an argument will be probed. -### `GZ_VIDEO_USE_HW_SURFACE` +### GZ_VIDEO_USE_HW_SURFACE This variable has three possible values: From 5076557797757d4bd8cba14616bd4d3231ba4257 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 22 Sep 2022 12:15:44 -0700 Subject: [PATCH 198/219] Update changelogs for common 5.0.0 (#443) Signed-off-by: Michael Carroll <michael@openrobotics.org> Signed-off-by: Michael Carroll <michael@openrobotics.org> --- Changelog.md | 188 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 187 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index 995740a4b..f6207ff1f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,6 +1,193 @@ ## Gazebo Common 5.x + ## Gazebo Common 5.0.0 (20XX-XX-XX) +1. Improved visualization hw encoding tutorial gz-common5 + * [Pull request #441](https://github.com/gazebosim/gz-common/pull/441) + +1. Updated install instructions gz-common5 + * [Pull request #440](https://github.com/gazebosim/gz-common/pull/440) + +1. Fix reading pixel values from single channel 16 bit image + * [Pull request #439](https://github.com/gazebosim/gz-common/pull/439) + +1. Add gdal to prerequisites + * [Pull request #438](https://github.com/gazebosim/gz-common/pull/438) + +1. Cleanup long-deprecated ifdefs + * [Pull request #329](https://github.com/gazebosim/gz-common/pull/329) + +1. Add a test for loading gltf with external textures + * [Pull request #409](https://github.com/gazebosim/gz-common/pull/409) + +1. Fix ABI checker with testing module + * [Pull request #427](https://github.com/gazebosim/gz-common/pull/427) + +1. Implement XDisplacement function for checking x displacement for all nodes + * [Pull request #411](https://github.com/gazebosim/gz-common/pull/411) + +1. Fix deprecation warning from new ffmpeg + * [Pull request #416](https://github.com/gazebosim/gz-common/pull/416) + +1. Use assimp for loading meshes + * [Pull request #393](https://github.com/gazebosim/gz-common/pull/393) + +1. Add API for getting Image bytes as std::vector + * [Pull request #372](https://github.com/gazebosim/gz-common/pull/372) + +1. Support lunar coordinate transformations + * [Pull request #377](https://github.com/gazebosim/gz-common/pull/377) + +1. Remove configure.bat, export CXX_STANDARD + * [Pull request #387](https://github.com/gazebosim/gz-common/pull/387) + +1. Update GoogleTest to latest version + * [Pull request #361](https://github.com/gazebosim/gz-common/pull/361) + +1. Support compressed images and RGBA data in Image class + * [Pull request #368](https://github.com/gazebosim/gz-common/pull/368) + +1. Expose API to set non earth DEMs flag + * [Pull request #353](https://github.com/gazebosim/gz-common/pull/353) + +1. Fix console bug when IGN_HOMEDIR is unset + * [Pull request #346](https://github.com/gazebosim/gz-common/pull/346) + +1. Test updates for common::testing module. + * [Pull request #315](https://github.com/gazebosim/gz-common/pull/315) + +1. Ignition -> Gz Renaming + * Move header files with git mv + * Create redirection aliases + * Migrate sources in src, test, examples, and include + * Remove ignition redirection headers for Plugin [Pull request #350](https://github.com/gazebosim/gz-common/pull/350) + * Move Plugin headers back from gz to ignition [Pull request #350](https://github.com/gazebosim/gz-common/pull/350) + * ign -> gz: namespaces and logging functions [Pull request #356](https://github.com/gazebosim/gz-common/pull/356) + * Deprecation warnings for Plugin [Pull request #350](https://github.com/gazebosim/gz-common/pull/350) + * Use ignition headers for plugin [Pull request #350](https://github.com/gazebosim/gz-common/pull/350) + * Fix profiler option [Pull request #371](https://github.com/gazebosim/gz-common/pull/371) + * ign -> gz Macro Migration : gz-common [Pull request #366](https://github.com/gazebosim/gz-common/pull/366) + * [ign -> gz] CMake functions [Pull request #370](https://github.com/gazebosim/gz-common/pull/370) + * ign -> gz Environment Variable Migration [Pull request #365](https://github.com/gazebosim/gz-common/pull/365) + * Migrate IGNITION- CMake variables [Pull request #381](https://github.com/gazebosim/gz-common/pull/381) + * Rename CMake project to gz [Pull request #352](https://github.com/gazebosim/gz-common/pull/352) + * ign -> gz Partial Docs Migration and Project Name Followups : gz-common [Pull request #383](https://github.com/gazebosim/gz-common/pull/383) + * Partial cmake and source migrations [Pull request #392](https://github.com/gazebosim/gz-common/pull/392) + * Migrate ign_remotery_vis [Pull request #392](https://github.com/gazebosim/gz-common/pull/392) + * Finale: Source hard-tocks [Pull request #395](https://github.com/gazebosim/gz-common/pull/395) + * Remove deprecated include [Pull request #400](https://github.com/gazebosim/gz-common/pull/400) + +1. [DOCUMENTATION] Adds full path for the profiler + * [Pull request #347](https://github.com/gazebosim/gz-common/pull/347) + +1. prevent switch case statement fall through. + * [Pull request #345](https://github.com/gazebosim/gz-common/pull/345) + +1. Make Timer_TEST more robust + * [Pull request #343](https://github.com/gazebosim/gz-common/pull/343) + +1. Bumps in garden : ign-common5 + * [Pull request #342](https://github.com/gazebosim/gz-common/pull/342) + +1. Use ign-utils instead of ign-cmake utilities + * [Pull request #341](https://github.com/gazebosim/gz-common/pull/341) + +1. Bumps in garden : ign-common5 + * [Pull request #340](https://github.com/gazebosim/gz-common/pull/340) + +1. examples/CMakeLists.txt: fix find version variable + * [Pull request #339](https://github.com/gazebosim/gz-common/pull/339) + +1. Add common::testing module + * [Pull request #314](https://github.com/gazebosim/gz-common/pull/314) + +1. Fix typo bug in MaterialIndex + * [Pull request #338](https://github.com/gazebosim/gz-common/pull/338) + +1. Fix edge case handling for SubMesh::MaterialIndex + * [Pull request #319](https://github.com/gazebosim/gz-common/pull/319) + +1. DEM improvements to nodata, buffer and other corner cases + * [Pull request #321](https://github.com/gazebosim/gz-common/pull/321) + +1. 🧹 Drop all test main functions from gtest files + * [Pull request #322](https://github.com/gazebosim/gz-common/pull/322) + +1. Class with final destructor should be final + * [Pull request #323](https://github.com/gazebosim/gz-common/pull/323) + +1. Geospatial component for heightmaps and DEM support + * [Pull request #292](https://github.com/gazebosim/gz-common/pull/292) + +1. Fix filesystem::separator, parentPath and basename behavior + * [Pull request #308](https://github.com/gazebosim/gz-common/pull/308) + +1. Miscellaneous cleanup of Events API + * [Pull request #297](https://github.com/gazebosim/gz-common/pull/297) + +1. Adds an `isRelativePath` to determine if path is relative + * [Pull request #312](https://github.com/gazebosim/gz-common/pull/312) + +1. Image: make several methods const + * [Pull request #310](https://github.com/gazebosim/gz-common/pull/310) + +1. Utilize ImplPtr in AV component + * [Pull request #296](https://github.com/gazebosim/gz-common/pull/296) + +1. Update tests to use more STL functionality + * [Pull request #282](https://github.com/gazebosim/gz-common/pull/282) + +1. Fixed parentPath() return when input has no parent + * [Pull request #307](https://github.com/gazebosim/gz-common/pull/307) + +1. Utilize ImplPtr for Timer + * [Pull request #299](https://github.com/gazebosim/gz-common/pull/299) + +1. Update to use std::filesystem rather than Boost + * [Pull request #238](https://github.com/gazebosim/gz-common/pull/238) + +1. Use SuppressWarning from ign-utils + * [Pull request #295](https://github.com/gazebosim/gz-common/pull/295) + +1. README: update badge + * [Pull request #290](https://github.com/gazebosim/gz-common/pull/290) + +1. Revert geospatial component for now + * [Pull request #291](https://github.com/gazebosim/gz-common/pull/291) + +1. Move geospatial headers to subfolder + * [Pull request #289](https://github.com/gazebosim/gz-common/pull/289) + +1. Geospatial component for heightmap & DEMs + * [Pull request #267](https://github.com/gazebosim/gz-common/pull/267) + +1. Upload coverage for Focal builds + * [Pull request #284](https://github.com/gazebosim/gz-common/pull/284) + +1. Try to checkout matching branch in macos workflow + * [Pull request #286](https://github.com/gazebosim/gz-common/pull/286) + +1. Bumps in garden: use ignition-math7 + * [Pull request #285](https://github.com/gazebosim/gz-common/pull/285) + +1. Add macOS 11 workflow + * [Pull request #276](https://github.com/gazebosim/gz-common/pull/276) + +1. Use ImplPtr where relevant + * [Pull request #274](https://github.com/gazebosim/gz-common/pull/274) + +1. Remove all deprecated functionality from main + * [Pull request #273](https://github.com/gazebosim/gz-common/pull/273) + +1. ign-common5: drop Bionic + * [Pull request #270](https://github.com/gazebosim/gz-common/pull/270) + +1. Update tension for common5 + * [Pull request #260](https://github.com/gazebosim/gz-common/pull/260) + +1. Bump main to 5.0.0~pre1 + * [Pull request #193](https://github.com/gazebosim/gz-common/pull/193) + ## Gazebo Common 4.x ## Gazebo Common 4.5.1 (2022-06-21) @@ -163,7 +350,6 @@ 1. Add bazel buildsystem support * [Pull request #123](https://github.com/gazebosim/gz-common/pull/123) ->>>>>>> gz-common4 ## Gazebo Common 4.0.0 (2021-03-30) From 88ed65e6906d462ba4e16ad34ec418d2cfcd364a Mon Sep 17 00:00:00 2001 From: Nate Koenig <nkoenig@users.noreply.github.com> Date: Thu, 22 Sep 2022 15:13:24 -0700 Subject: [PATCH 199/219] 5.0.0 release (#444) Signed-off-by: Nate Koenig <nate@openrobotics.org> Signed-off-by: Nate Koenig <nate@openrobotics.org> Co-authored-by: Nate Koenig <nate@openrobotics.org> --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c4b6ceb9..c7e7b0438 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ set(GZ_CMAKE_VER ${gz-cmake3_VERSION_MAJOR}) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -gz_configure_project(VERSION_SUFFIX pre1) +gz_configure_project(VERSION_SUFFIX) #============================================================================ # Set project-specific options From b7658a216a68684775b733bccec707da75326ecd Mon Sep 17 00:00:00 2001 From: Luca Della Vedova <luca@openrobotics.org> Date: Tue, 27 Sep 2022 20:13:44 +0800 Subject: [PATCH 200/219] Fix metallic roughness file path for gltf assets (#436) * Fix path of metallic roughness map for gltf files Signed-off-by: Luca Della Vedova <luca@openrobotics.org> --- graphics/src/AssimpLoader.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/graphics/src/AssimpLoader.cc b/graphics/src/AssimpLoader.cc index caa2662a8..2c15c182a 100644 --- a/graphics/src/AssimpLoader.cc +++ b/graphics/src/AssimpLoader.cc @@ -392,8 +392,8 @@ MaterialPtr AssimpLoader::Implementation::CreateMaterial( auto [texName, texData] = this->LoadTexture(_scene, texturePath, this->GenerateTextureName(_scene, assimpMat, "MetallicRoughness")); // Load it into a common::Image then split it - auto texImg = - texData != nullptr ? texData : std::make_shared<common::Image>(texName); + auto texImg = texData != nullptr ? texData : + std::make_shared<common::Image>(joinPaths(_path, texName)); auto [metalTexture, roughTexture] = this->SplitMetallicRoughnessMap(*texImg); pbr.SetMetalnessMap( From 5046737001205fb6c0193f3054091b799c1edf06 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Fri, 30 Sep 2022 06:57:49 -0700 Subject: [PATCH 201/219] Suppress a bunch of unnecessary test output (#442) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Suppress a bunch of unnecessary test output. This floods the logs without providing any meaningful value or insights. Signed-off-by: Michael Carroll <michael@openrobotics.org> Co-authored-by: Alejandro HernÑndez Cordero <ahcorde@gmail.com> --- test/performance/CMakeLists.txt | 4 +- test/performance/logging.cc | 9 +- .../common/testing/RedirectConsoleStream.hh | 76 +++++++ .../include/gz/common/testing/TestPaths.hh | 2 + testing/src/CMakeLists.txt | 2 + testing/src/RedirectConsoleStream.cc | 173 ++++++++++++++++ testing/src/RedirectConsoleStream_TEST.cc | 189 ++++++++++++++++++ 7 files changed, 453 insertions(+), 2 deletions(-) create mode 100644 testing/include/gz/common/testing/RedirectConsoleStream.hh create mode 100644 testing/src/RedirectConsoleStream.cc create mode 100644 testing/src/RedirectConsoleStream_TEST.cc diff --git a/test/performance/CMakeLists.txt b/test/performance/CMakeLists.txt index 304fdcb18..a7aa70acd 100644 --- a/test/performance/CMakeLists.txt +++ b/test/performance/CMakeLists.txt @@ -9,7 +9,9 @@ endif() gz_build_tests( TYPE PERFORMANCE - SOURCES ${tests}) + SOURCES ${tests} + LIB_DEPS gz-common${GZ_COMMON_VER}-testing +) if(TARGET PERFORMANCE_plugin_specialization) # We add this dependency to make sure that DummyPlugins gets generated diff --git a/test/performance/logging.cc b/test/performance/logging.cc index 328a0212c..299451c85 100644 --- a/test/performance/logging.cc +++ b/test/performance/logging.cc @@ -21,6 +21,10 @@ #include <thread> #include <gz/common/Console.hh> +#include <gz/common/testing/RedirectConsoleStream.hh> + +using RedirectConsoleStream = gz::common::testing::RedirectConsoleStream; +using StreamSource = gz::common::testing::StreamSource; namespace { // Lower value than spdlog to keep CI from flaking @@ -38,7 +42,6 @@ void WriteToFile(std::string result_filename, std::string content) std::cerr << "Error writing to " << result_filename << std::endl; } out << content << std::flush; - std::cout << content; } void MeasurePeakDuringLogWrites(const size_t id, std::vector<uint64_t> &result) @@ -162,6 +165,8 @@ void run(size_t number_of_threads) << filename_result << std::endl; WriteToFile(filename_result, oss.str()); + auto stream = gz::common::testing::RedirectStdout(); + auto start_time_application_total = std::chrono::high_resolution_clock::now(); for (uint64_t idx = 0; idx < number_of_threads; ++idx) @@ -175,6 +180,8 @@ void run(size_t number_of_threads) } auto stop_time_application_total = std::chrono::high_resolution_clock::now(); + auto output = stream.GetString(); + uint64_t total_time_in_us = std::chrono::duration_cast<std::chrono::microseconds>( stop_time_application_total - start_time_application_total) diff --git a/testing/include/gz/common/testing/RedirectConsoleStream.hh b/testing/include/gz/common/testing/RedirectConsoleStream.hh new file mode 100644 index 000000000..793c76367 --- /dev/null +++ b/testing/include/gz/common/testing/RedirectConsoleStream.hh @@ -0,0 +1,76 @@ +/* +* Copyright (C) 2022 Open Source Robotics Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ +#ifndef GZ_COMMON_TESTING_REDIRECTCONSOLE_STREAM_HH +#define GZ_COMMON_TESTING_REDIRECTCONSOLE_STREAM_HH + +#include <string> + +#include <gz/utils/ImplPtr.hh> +#include <gz/common/testing/TestPaths.hh> + +#include "gz/common/testing/Export.hh" + +namespace gz::common::testing +{ + +enum class StreamSource +{ + STDOUT, + STDERR, +}; + +class GZ_COMMON_TESTING_VISIBLE RedirectConsoleStream +{ + /// \brief Constructor + /// + /// Redirect a choosen stream to a temporary file that can be read back. + /// Upon destruction, any redirection will be removed. + /// Upon destruction, the temporary file will be removed. + /// Access contents before destruction using GetString + /// + /// \param[in] _source Console source to redirect (eg stdout or stderr) + /// \param[in] _destination Destination filename + public: RedirectConsoleStream(const StreamSource &_source, + const std::string &_destination); + + /// \brief Get the contents of the redirected console output + /// This will additionally remove any redirection + public: std::string GetString(); + + /// \brief Get if the redirection is valid and enabled + /// \return bool True if the redirection is valid + public: bool Active() const; + + /// \brief Implementation pointer + GZ_UTILS_UNIQUE_IMPL_PTR(dataPtr) +}; + +/// \brief Redirect standard out to a test-specific temporary path +inline RedirectConsoleStream RedirectStdout() +{ + auto path = gz::common::testing::TempPath("stdout.out"); + return RedirectConsoleStream(StreamSource::STDOUT, path); +} + +/// \brief Redirect standard error to a test-specific temporary path +inline RedirectConsoleStream RedirectStderr() +{ + auto path = gz::common::testing::TempPath("stderr.out"); + return RedirectConsoleStream(StreamSource::STDERR, path); +} +} // namespace gz::common::testing +#endif // GZ_COMMON_TESTING_REDIRECTCONSOLE_STREAM_HH diff --git a/testing/include/gz/common/testing/TestPaths.hh b/testing/include/gz/common/testing/TestPaths.hh index caa0d811a..ce887f51b 100644 --- a/testing/include/gz/common/testing/TestPaths.hh +++ b/testing/include/gz/common/testing/TestPaths.hh @@ -193,6 +193,8 @@ template <typename... Args> std::string TempPath(Args const &... args) { auto testPaths = TestPathFactory(kTestingProjectSourceDir); + assert(nullptr != testPaths); + std::string dataDir; testPaths->TestTmpPath(dataDir); return common::joinPaths(dataDir, args...); diff --git a/testing/src/CMakeLists.txt b/testing/src/CMakeLists.txt index c1e0ebe6c..027fba8c9 100644 --- a/testing/src/CMakeLists.txt +++ b/testing/src/CMakeLists.txt @@ -1,6 +1,7 @@ set(sources BazelTestPaths.cc CMakeTestPaths.cc + RedirectConsoleStream.cc TestPaths.cc Utils.cc ) @@ -8,6 +9,7 @@ set(sources set(test_sources AutoLogFixture_TEST.cc CMakeTestPaths_TEST.cc + RedirectConsoleStream_TEST.cc Utils_TEST.cc ) diff --git a/testing/src/RedirectConsoleStream.cc b/testing/src/RedirectConsoleStream.cc new file mode 100644 index 000000000..70529cf75 --- /dev/null +++ b/testing/src/RedirectConsoleStream.cc @@ -0,0 +1,173 @@ +/* +* Copyright (C) 2022 Open Source Robotics Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include <cstdio> +#include <cstdlib> +#include <cstring> +#include <fstream> +#include <sstream> + +#include <gz/common/testing/RedirectConsoleStream.hh> +#include <gz/common/Console.hh> +#include <gz/common/testing/TestPaths.hh> +#include <gz/utils/SuppressWarning.hh> + +#ifdef _WIN32 +#include <io.h> +#include <windows.h> +#else +#include <unistd.h> +#endif + +#include <fcntl.h> +#include <sys/stat.h> + +namespace gz::common::testing +{ + +class RedirectConsoleStream::Implementation +{ + /// \brief Console source being redirected + public: StreamSource source; + + /// \brief Filename to write console output to + public: std::string sink {""}; + + /// \brief Holds the redirected file descriptor + public: int fd {-1}; + + /// \brief Holds the original source file descriptor + public: int originalFd {-1}; + + /// \brief Remove any console redirection, restoring original sink + public: void RemoveRedirection(); + + /// \brief Destructor + public: ~Implementation(); +}; + +////////////////////////////////////////////////// +void RedirectConsoleStream::Implementation::RemoveRedirection() +{ + // MSVC treats dup and dup2 as deprecated, preferring _dup and _dup2 + // We can safely ignore that here. + GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION; + /// Restore the orignal source file descriptor + if (this->originalFd != -1) + { + fflush(nullptr); + dup2(this->originalFd, this->fd); + close(this->originalFd); + this->originalFd = -1; + } + GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION; +} + +////////////////////////////////////////////////// +RedirectConsoleStream::Implementation::~Implementation() +{ + this->RemoveRedirection(); + + if (!this->sink.empty() && common::exists(this->sink)) + { + common::removeFile(this->sink); + } +} + +////////////////////////////////////////////////// +int GetSourceFd(const StreamSource &_source) +{ + switch(_source) + { + case StreamSource::STDOUT: + return fileno(stdout); + break; + case StreamSource::STDERR: + return fileno(stderr); + break; + default: + return -1; + } +} + +////////////////////////////////////////////////// +RedirectConsoleStream::RedirectConsoleStream(const StreamSource &_source, + const std::string &_destination): + dataPtr(gz::utils::MakeUniqueImpl<Implementation>()) +{ + // MSVC treats dup and dup2 as deprecated, preferring _dup and _dup2 + // We can safely ignore that here. + GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION; + this->dataPtr->sink = _destination; + + if (this->dataPtr->sink.empty()) + { + gzerr << "Failed to open sink file: console redirection disabled" + << "(empty filename)" << std::endl; + return; + } + + if (common::exists(this->dataPtr->sink)) + { + gzerr << "Failed to open sink file: console redirection disabled" + << "(destination exists)" << std::endl; + return; + } + + this->dataPtr->fd = GetSourceFd(_source); + + // Store the fd so that it can be restored upon destruction + this->dataPtr->originalFd = dup(this->dataPtr->fd); + + int sinkFd; + // Create a file with read/write permissions and exclusive access + if ((sinkFd = open(this->dataPtr->sink.c_str(), + O_EXCL | O_RDWR | O_CREAT, + S_IREAD | S_IWRITE)) < 0) + { + gzerr << "Failed to open sink file, console redirection disabled" + << "(" << strerror(sinkFd) << ")" << std::endl; + return; + } + + fflush(nullptr); + // Duplicate the sink file descriptor onto the source + dup2(sinkFd, this->dataPtr->fd); + // Close the file handle; + close(sinkFd); + GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION; +} + +////////////////////////////////////////////////// +std::string RedirectConsoleStream::GetString() +{ + this->dataPtr->RemoveRedirection(); + + // Read the file contents and return to the user + std::ifstream input(this->dataPtr->sink); + std::stringstream buffer; + buffer << input.rdbuf(); + return buffer.str(); +} + +////////////////////////////////////////////////// +bool RedirectConsoleStream::Active() const +{ + return !this->dataPtr->sink.empty() && this->dataPtr->originalFd != -1; +} + +} // namespace gz::common::testing diff --git a/testing/src/RedirectConsoleStream_TEST.cc b/testing/src/RedirectConsoleStream_TEST.cc new file mode 100644 index 000000000..e862e345e --- /dev/null +++ b/testing/src/RedirectConsoleStream_TEST.cc @@ -0,0 +1,189 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#include <gtest/gtest.h> + +#include "gz/common/Console.hh" +#include "gz/common/testing/RedirectConsoleStream.hh" +#include "gz/common/testing/TestPaths.hh" + +using namespace gz::common; +using namespace gz::common::testing; + +///////////////////////////////////////////////// +TEST(RedirectConsoleStream, RedirectConsoleStream) +{ + // Test an invalid configuration, where there redirect is not created + auto tempDir = MakeTestTempDirectory(); + ASSERT_TRUE(tempDir->Valid()); + auto tmpOut = joinPaths(tempDir->Path(), "console_out"); + + std::cout << "Before" << std::endl; + auto redirect = RedirectConsoleStream(StreamSource::STDOUT, ""); + EXPECT_FALSE(redirect.Active()); + + std::cout << "Foo" << std::endl; + std::cout << "Bar" << std::endl; + std::cout << "Baz" << std::endl; + + auto output = redirect.GetString(); + EXPECT_TRUE(output.empty()); + EXPECT_FALSE(redirect.Active()); + EXPECT_EQ(output.find("Before"), std::string::npos); + EXPECT_EQ(output.find("After"), std::string::npos); + EXPECT_EQ(output.find("Foo"), std::string::npos); + EXPECT_EQ(output.find("Bar"), std::string::npos); + EXPECT_EQ(output.find("Baz"), std::string::npos); + + std::cout << "After" << std::endl; +} + +///////////////////////////////////////////////// +TEST(RedirectConsoleStream, RedirectStdout) +{ + const auto sourceType = StreamSource::STDOUT; + auto& source = std::cout; + + auto tempDir = MakeTestTempDirectory(); + ASSERT_TRUE(tempDir->Valid()); + auto tmpOut = joinPaths(tempDir->Path(), "console_out"); + + source << "Before" << std::endl; + auto redirect = RedirectConsoleStream(sourceType, tmpOut); + EXPECT_TRUE(redirect.Active()); + + source << "Foo" << std::endl; + source << "Bar" << std::endl; + source << "Baz" << std::endl; + + { + auto output = redirect.GetString(); + EXPECT_FALSE(redirect.Active()); + EXPECT_FALSE(output.empty()); + EXPECT_EQ(output.find("Before"), std::string::npos); + EXPECT_EQ(output.find("After"), std::string::npos); + EXPECT_NE(output.find("Foo"), std::string::npos); + EXPECT_NE(output.find("Bar"), std::string::npos); + EXPECT_NE(output.find("Baz"), std::string::npos); + } + + source << "After" << std::endl; + { + auto output = redirect.GetString(); + EXPECT_FALSE(redirect.Active()); + EXPECT_FALSE(output.empty()); + EXPECT_EQ(output.find("Before"), std::string::npos); + EXPECT_EQ(output.find("After"), std::string::npos); + EXPECT_NE(output.find("Foo"), std::string::npos); + EXPECT_NE(output.find("Bar"), std::string::npos); + EXPECT_NE(output.find("Baz"), std::string::npos); + } +} + +///////////////////////////////////////////////// +TEST(RedirectConsoleStream, RedirectStderr) +{ + const auto sourceType = StreamSource::STDERR; + auto& source = std::cerr; + + auto tempDir = MakeTestTempDirectory(); + ASSERT_TRUE(tempDir->Valid()); + auto tmpOut = joinPaths(tempDir->Path(), "console_out"); + + source << "Before" << std::endl; + auto redirect = RedirectConsoleStream(sourceType, tmpOut); + EXPECT_TRUE(redirect.Active()); + + source << "Foo" << std::endl; + source << "Bar" << std::endl; + source << "Baz" << std::endl; + + { + auto output = redirect.GetString(); + EXPECT_FALSE(redirect.Active()); + EXPECT_FALSE(output.empty()); + EXPECT_EQ(output.find("Before"), std::string::npos); + EXPECT_EQ(output.find("After"), std::string::npos); + EXPECT_NE(output.find("Foo"), std::string::npos); + EXPECT_NE(output.find("Bar"), std::string::npos); + EXPECT_NE(output.find("Baz"), std::string::npos); + } + + source << "After" << std::endl; + { + auto output = redirect.GetString(); + EXPECT_FALSE(redirect.Active()); + EXPECT_FALSE(output.empty()); + EXPECT_EQ(output.find("Before"), std::string::npos); + EXPECT_EQ(output.find("After"), std::string::npos); + EXPECT_NE(output.find("Foo"), std::string::npos); + EXPECT_NE(output.find("Bar"), std::string::npos); + EXPECT_NE(output.find("Baz"), std::string::npos); + } +} + +///////////////////////////////////////////////// +TEST(RedirectConsoleStream, InlineHelpers) +{ + auto redirOut = RedirectStdout(); + auto redirErr = RedirectStderr(); + + std::cout << "Foo" << std::endl; + std::cerr << "Bar" << std::endl; + + auto out = redirOut.GetString(); + auto err = redirErr.GetString(); + + EXPECT_FALSE(out.empty()); + EXPECT_FALSE(err.empty()); + + EXPECT_NE(out.find("Foo"), std::string::npos); + EXPECT_EQ(err.find("Foo"), std::string::npos); + + EXPECT_EQ(out.find("Bar"), std::string::npos); + EXPECT_NE(err.find("Bar"), std::string::npos); +} + +///////////////////////////////////////////////// +TEST(RedirectConsoleStream, Console) +{ + auto redirOut = RedirectStdout(); + auto redirErr = RedirectStderr(); + + gz::common::Console::SetVerbosity(4); + + gzerr << "error" << std::endl; + gzwarn << "warning" << std::endl; + gzmsg << "message" << std::endl; + gzdbg << "debug" << std::endl; + + auto out = redirOut.GetString(); + auto err = redirErr.GetString(); + + EXPECT_FALSE(out.empty()); + EXPECT_FALSE(err.empty()); + + EXPECT_EQ(out.find("error"), std::string::npos); + EXPECT_EQ(out.find("warning"), std::string::npos); + EXPECT_NE(out.find("message"), std::string::npos); + EXPECT_NE(out.find("debug"), std::string::npos); + + EXPECT_NE(err.find("error"), std::string::npos); + EXPECT_NE(err.find("warning"), std::string::npos); + EXPECT_EQ(err.find("message"), std::string::npos); + EXPECT_EQ(err.find("debug"), std::string::npos); +} + From b9859bdfb5f7db2839133b10ae7a7a3dfc6eadb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez=20Cordero?= <ahcorde@gmail.com> Date: Tue, 11 Oct 2022 11:20:39 +0200 Subject: [PATCH 202/219] Fixed MeshManager Singleton (#451) Signed-off-by: ahcorde <ahcorde@gmail.com> --- graphics/include/gz/common/MeshManager.hh | 5 +++++ graphics/src/MeshManager.cc | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/graphics/include/gz/common/MeshManager.hh b/graphics/include/gz/common/MeshManager.hh index 07e770cce..91a164a0f 100644 --- a/graphics/include/gz/common/MeshManager.hh +++ b/graphics/include/gz/common/MeshManager.hh @@ -61,6 +61,11 @@ namespace gz /// Destroys the collada loader, the stl loader and all the meshes private: virtual ~MeshManager(); + /// Return a pointer to the mesh manager + /// \todo(ahcorde) Remove inheritance from Singleton base class + /// \return a pointer to the mesh manager + public: static MeshManager* Instance(); + /// \brief Load a mesh from a file. /// The mesh will be searched on the global SystemPaths instance provided /// by Util.hh. diff --git a/graphics/src/MeshManager.cc b/graphics/src/MeshManager.cc index 085dbb623..d42483edd 100644 --- a/graphics/src/MeshManager.cc +++ b/graphics/src/MeshManager.cc @@ -1630,6 +1630,12 @@ void MeshManager::ConvertPolylinesToVerticesAndEdges( } } +////////////////////////////////////////////////// +MeshManager* MeshManager::Instance() +{ + return SingletonT<MeshManager>::Instance(); +} + ////////////////////////////////////////////////// void MeshManager::SetAssimpEnvs() { From 5183a5d961e96dcce6c3205275ff92792d2e2459 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Tue, 11 Oct 2022 08:08:17 -0500 Subject: [PATCH 203/219] Change namespace location to apply to Windows Signed-off-by: Michael Carroll <michael@openrobotics.org> --- src/Filesystem_TEST.cc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Filesystem_TEST.cc b/src/Filesystem_TEST.cc index c7f2ea3e7..ab1122088 100644 --- a/src/Filesystem_TEST.cc +++ b/src/Filesystem_TEST.cc @@ -17,6 +17,8 @@ #include <gtest/gtest.h> +#include "gz/common/Util.hh" +using namespace ignition; #ifndef _WIN32 #include <fcntl.h> @@ -26,13 +28,9 @@ #include <sys/types.h> #include <unistd.h> -#include "gz/common/Util.hh" - // The symlink tests should always work on UNIX systems #define BUILD_SYMLINK_TESTS -using namespace ignition; - ///////////////////////////////////////////////// bool create_and_switch_to_temp_dir(std::string &_new_temp_path) { From 383ad5ef60d9ec56540f2b107b21857b49a0e04b Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Tue, 11 Oct 2022 06:56:29 -0700 Subject: [PATCH 204/219] =?UTF-8?q?=F0=9F=8E=88=204.6.0=20(#452)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Carroll <michael@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a426d5ea9..fb4930a3f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(ignition-common4 VERSION 4.5.2) +project(ignition-common4 VERSION 4.6.0) #============================================================================ # Find ignition-cmake diff --git a/Changelog.md b/Changelog.md index dd3d37992..3d35c4435 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,12 @@ ## Gazebo Common 4.x +## Gazebo Common 4.6.0 (2022-10-11) + +1. All common3 changes up to 3.15.0 release + +1. Include cstring for memcpy + * [Pull request #437](https://github.com/gazebosim/gz-common/pull/437) + ## Gazebo Common 4.5.2 (2022-08-16) 1. Fix deprecation warning from new `ffmpeg` From ade3fa20db31a094388d1fca96bbddaf5eeb262d Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Tue, 11 Oct 2022 19:08:06 -0700 Subject: [PATCH 205/219] =?UTF-8?q?=F0=9F=8E=88=204.6.1=20(#456)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Carroll <michael@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fb4930a3f..f880b8d38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(ignition-common4 VERSION 4.6.0) +project(ignition-common4 VERSION 4.6.1) #============================================================================ # Find ignition-cmake diff --git a/Changelog.md b/Changelog.md index d965b0a8d..e85950032 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,9 @@ ## Gazebo Common 4.x +## Gazebo Common 4.6.1 (2022-10-11) + +1. All common3 changes up to 3.15.1 release + ## Gazebo Common 4.6.0 (2022-10-11) 1. All common3 changes up to 3.15.0 release From 69e86506dc6b39065a3660161b50e9bed9022b78 Mon Sep 17 00:00:00 2001 From: Nate Koenig <nate@openrobotics.org> Date: Wed, 12 Oct 2022 10:32:22 -0700 Subject: [PATCH 206/219] Fix tests Signed-off-by: Nate Koenig <nate@openrobotics.org> --- test/static_assertions/plugin_no_base_class.cc | 2 +- test/static_assertions/plugin_not_global_ns.cc | 7 +------ test/static_assertions/plugin_wrong_base_class.cc | 2 +- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/test/static_assertions/plugin_no_base_class.cc b/test/static_assertions/plugin_no_base_class.cc index a1bfb4569..110625475 100644 --- a/test/static_assertions/plugin_no_base_class.cc +++ b/test/static_assertions/plugin_no_base_class.cc @@ -15,7 +15,7 @@ * */ -#include "gz/common/PluginMacros.hh" +#include "ignition/common/PluginMacros.hh" class A { diff --git a/test/static_assertions/plugin_not_global_ns.cc b/test/static_assertions/plugin_not_global_ns.cc index 9b784856b..fc0a8a7e3 100644 --- a/test/static_assertions/plugin_not_global_ns.cc +++ b/test/static_assertions/plugin_not_global_ns.cc @@ -14,12 +14,7 @@ * limitations under the License. * */ -#include <gz/utils/SuppressWarning.hh> - -GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION -#define SUPPRESS_IGNITION_HEADER_DEPRECATION - -#include "gz/common/PluginMacros.hh" +#include "ignition/common/PluginMacros.hh" namespace ns { diff --git a/test/static_assertions/plugin_wrong_base_class.cc b/test/static_assertions/plugin_wrong_base_class.cc index b3d4cab9e..9419d1ffc 100644 --- a/test/static_assertions/plugin_wrong_base_class.cc +++ b/test/static_assertions/plugin_wrong_base_class.cc @@ -15,7 +15,7 @@ * */ -#include "gz/common/PluginMacros.hh" +#include "ignition/common/PluginMacros.hh" namespace ns { From b9a001e6da30b4933e4fe00fe175ce09e4f11773 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Wed, 12 Oct 2022 14:49:20 -0500 Subject: [PATCH 207/219] Fixup static assertion tests Signed-off-by: Michael Carroll <michael@openrobotics.org> --- test/static_assertions/plugin_no_base_class.cc | 5 +++++ test/static_assertions/plugin_not_fully_qualified_base.cc | 8 ++++++-- .../static_assertions/plugin_not_fully_qualified_class.cc | 8 ++++++-- test/static_assertions/plugin_not_global_ns.cc | 7 +++++++ test/static_assertions/plugin_wrong_base_class.cc | 5 +++++ 5 files changed, 29 insertions(+), 4 deletions(-) diff --git a/test/static_assertions/plugin_no_base_class.cc b/test/static_assertions/plugin_no_base_class.cc index 110625475..dab8c24d8 100644 --- a/test/static_assertions/plugin_no_base_class.cc +++ b/test/static_assertions/plugin_no_base_class.cc @@ -15,6 +15,11 @@ * */ +#include <gz/utils/SuppressWarning.hh> + +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include "ignition/common/PluginMacros.hh" class A diff --git a/test/static_assertions/plugin_not_fully_qualified_base.cc b/test/static_assertions/plugin_not_fully_qualified_base.cc index 2854dba7d..108e8a0ec 100644 --- a/test/static_assertions/plugin_not_fully_qualified_base.cc +++ b/test/static_assertions/plugin_not_fully_qualified_base.cc @@ -15,7 +15,12 @@ * */ -#include "gz/common/PluginMacros.hh" +#include <gz/utils/SuppressWarning.hh> + +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + +#include "ignition/common/PluginMacros.hh" namespace ns { @@ -38,5 +43,4 @@ using ns::Base; IGN_COMMON_REGISTER_SINGLE_PLUGIN(ns::A, Base) GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION - #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_not_fully_qualified_class.cc b/test/static_assertions/plugin_not_fully_qualified_class.cc index 8fecb0e1a..1ed0bcbce 100644 --- a/test/static_assertions/plugin_not_fully_qualified_class.cc +++ b/test/static_assertions/plugin_not_fully_qualified_class.cc @@ -15,7 +15,12 @@ * */ -#include "gz/common/PluginMacros.hh" +#include <gz/utils/SuppressWarning.hh> + +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + +#include "ignition/common/PluginMacros.hh" namespace ns { @@ -38,5 +43,4 @@ using ns::A; IGN_COMMON_REGISTER_SINGLE_PLUGIN(A, ns::Base) GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION - #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_not_global_ns.cc b/test/static_assertions/plugin_not_global_ns.cc index fc0a8a7e3..b8b3da566 100644 --- a/test/static_assertions/plugin_not_global_ns.cc +++ b/test/static_assertions/plugin_not_global_ns.cc @@ -14,6 +14,12 @@ * limitations under the License. * */ + +#include <gz/utils/SuppressWarning.hh> + +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include "ignition/common/PluginMacros.hh" namespace ns @@ -33,5 +39,6 @@ class A : public Base IGN_COMMON_REGISTER_SINGLE_PLUGIN(ns::A, ns::Base) } + GZ_UTILS_WARN_RESUME__DEPRECATED_DECLARATION #undef SUPPRESS_IGNITION_HEADER_DEPRECATION diff --git a/test/static_assertions/plugin_wrong_base_class.cc b/test/static_assertions/plugin_wrong_base_class.cc index 9419d1ffc..8288f3ac0 100644 --- a/test/static_assertions/plugin_wrong_base_class.cc +++ b/test/static_assertions/plugin_wrong_base_class.cc @@ -15,6 +15,11 @@ * */ +#include <gz/utils/SuppressWarning.hh> + +GZ_UTILS_WARN_IGNORE__DEPRECATED_DECLARATION +#define SUPPRESS_IGNITION_HEADER_DEPRECATION + #include "ignition/common/PluginMacros.hh" namespace ns From e21a0a563748227d07164436460603fbec286b87 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Wed, 12 Oct 2022 16:12:49 -0500 Subject: [PATCH 208/219] Port gtest protection to deprecated headers Signed-off-by: Michael Carroll <michael@openrobotics.org> --- .../include/gz/common/testing/detail/AutoLogFixture.hh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/testing/include/gz/common/testing/detail/AutoLogFixture.hh b/testing/include/gz/common/testing/detail/AutoLogFixture.hh index c986cd351..56aae04d8 100644 --- a/testing/include/gz/common/testing/detail/AutoLogFixture.hh +++ b/testing/include/gz/common/testing/detail/AutoLogFixture.hh @@ -17,6 +17,12 @@ #ifndef GZ_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ #define GZ_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ +/// Protect to guarantee that gtest is included before this header. +/// +/// While downstream users should never directly include the detail +/// header, this is to primarily protect the ABI checker, which does. +#ifdef GTEST_API_ + #include "gz/common/testing/AutoLogFixture.hh" #include <memory> @@ -120,4 +126,8 @@ std::string AutoLogFixture::LogContent() const } // namespace gz::common::testing +#else +#warning "AutoLogFixture needs <gtest/gtest.h> to be included in order to work" +#endif // GTEST_API_ + #endif // GZ_COMMON_TESTING_DETAIL_AUTOLOGFIXTURE_HH_ From a918e8b1b1acb1458cceee618fce3b0ff76dd4fc Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Wed, 12 Oct 2022 17:48:46 -0500 Subject: [PATCH 209/219] Remove Time Signed-off-by: Michael Carroll <michael@openrobotics.org> --- include/ignition/common/Time.hh | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 include/ignition/common/Time.hh diff --git a/include/ignition/common/Time.hh b/include/ignition/common/Time.hh deleted file mode 100644 index 2a1f37d2d..000000000 --- a/include/ignition/common/Time.hh +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2022 Open Source Robotics Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <gz/common/Time.hh> -#include <ignition/common/config.hh> From 275afa704159bbbe64704e16c1a70276812ba669 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 13 Oct 2022 07:47:00 -0500 Subject: [PATCH 210/219] Fixup config.hh Signed-off-by: Michael Carroll <michael@openrobotics.org> --- include/ignition/common/config.hh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/include/ignition/common/config.hh b/include/ignition/common/config.hh index 7fe826143..a4eeecbbb 100644 --- a/include/ignition/common/config.hh +++ b/include/ignition/common/config.hh @@ -20,4 +20,25 @@ #include <gz/common/config.hh> +#define IGNITION_COMMON_MAJOR_VERSION GZ_COMMON_MAJOR_VERSION +#define IGNITION_COMMON_MINOR_VERSION GZ_COMMON_MINOR_VERSION +#define IGNITION_COMMON_PATCH_VERSION GZ_COMMON_PATCH_VERSION + +#define IGNITION_COMMON_VERSION GZ_COMMON_VERSION +#define IGNITION_COMMON_VERSION_FULL GZ_COMMON_VERSION_FULL + +#define IGNITION_COMMON_VERSION_HEADER GZ_COMMON_VERSION_HEADER + +namespace gz +{ +} + +namespace ignition +{ + #ifndef SUPPRESS_IGNITION_HEADER_DEPRECATION + #pragma message("ignition namespace is deprecated! Use gz instead!") + #endif + using namespace gz; +} + #endif From 54cbbac420c28510c4d0657c715ac9663f1ba36e Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Thu, 13 Oct 2022 13:38:00 -0500 Subject: [PATCH 211/219] Address reviewer feedback Signed-off-by: Michael Carroll <michael@openrobotics.org> --- include/gz/common/Console.hh | 2 ++ include/ignition/common/SpecializedPlugin.hh | 3 +++ include/ignition/common/detail/SpecializedPlugin.hh | 1 + profiler/CMakeLists.txt | 1 - profiler/include/CMakeLists.txt | 2 -- 5 files changed, 6 insertions(+), 3 deletions(-) delete mode 100644 profiler/include/CMakeLists.txt diff --git a/include/gz/common/Console.hh b/include/gz/common/Console.hh index 54e5f3589..a54462612 100644 --- a/include/gz/common/Console.hh +++ b/include/gz/common/Console.hh @@ -31,6 +31,8 @@ namespace gz { namespace common { + // TODO(CH3): Deprecated. Remove all the ign macros on tock. + /// \brief Output an error message, if the verbose level is >= 1 #define gzerr (gz::common::Console::err(__FILE__, __LINE__)) #define ignerr gzerr diff --git a/include/ignition/common/SpecializedPlugin.hh b/include/ignition/common/SpecializedPlugin.hh index f6b742fec..5dee5c10c 100644 --- a/include/ignition/common/SpecializedPlugin.hh +++ b/include/ignition/common/SpecializedPlugin.hh @@ -14,6 +14,8 @@ * limitations under the License. * */ +#ifndef IGNITION_COMMON_SPECIALIZEDPLUGIN_HH_ +#define IGNITION_COMMON_SPECIALIZEDPLUGIN_HH_ #include <ignition/common/config.hh> #include "ignition/common/Plugin.hh" @@ -163,3 +165,4 @@ namespace gz } #include "ignition/common/detail/SpecializedPlugin.hh" +#endif // IGNITION_COMMON_SPECIALIZEDPLUGIN_HH_ diff --git a/include/ignition/common/detail/SpecializedPlugin.hh b/include/ignition/common/detail/SpecializedPlugin.hh index badd2ebf3..2a2e7ba6f 100644 --- a/include/ignition/common/detail/SpecializedPlugin.hh +++ b/include/ignition/common/detail/SpecializedPlugin.hh @@ -19,6 +19,7 @@ #define IGNITION_COMMON_DETAIL_SPECIALIZEDPLUGIN_HH_ #include <ignition/common/config.hh> +#include "ignition/common/SpecializedPlugin.hh" #include <memory> // This preprocessor token should only be used by the unittest that is diff --git a/profiler/CMakeLists.txt b/profiler/CMakeLists.txt index 1cd39f952..cda55cf76 100644 --- a/profiler/CMakeLists.txt +++ b/profiler/CMakeLists.txt @@ -1,5 +1,4 @@ add_subdirectory(src) -# add_subdirectory(include) install( DIRECTORY include/ignition diff --git a/profiler/include/CMakeLists.txt b/profiler/include/CMakeLists.txt deleted file mode 100644 index 1b812a6cd..000000000 --- a/profiler/include/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -install(DIRECTORY gz DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) -install(DIRECTORY ignition DESTINATION ${IGN_INCLUDE_INSTALL_DIR_FULL}) From 90f4156ec20ce3cd1c77699161f914e4444b4d79 Mon Sep 17 00:00:00 2001 From: Michael Carroll <michael@openrobotics.org> Date: Fri, 14 Oct 2022 08:05:36 -0500 Subject: [PATCH 212/219] =?UTF-8?q?=F0=9F=8E=88=205.1.0=20(#458)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michael Carroll <michael@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 56 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c7e7b0438..019f921e4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(gz-common5 VERSION 5.0.0) +project(gz-common5 VERSION 5.1.0) set(GZ_COMMON_VER ${PROJECT_VERSION_MAJOR}) #============================================================================ diff --git a/Changelog.md b/Changelog.md index 1b77e4bc1..ac32be692 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,6 +1,60 @@ ## Gazebo Common 5.x -## Gazebo Common 5.0.0 (20XX-XX-XX) +## Gazebo Common 5.1.0 (2022-10-13) + +1. 4 ➑️ 5 + * [Pull request #457](https://github.com/gazebosim/gz-common/pull/457) + +1. 🎈 4.6.1 + * [Pull request #456](https://github.com/gazebosim/gz-common/pull/456) + +1. 🎈 4.6.0 + * [Pull request #452](https://github.com/gazebosim/gz-common/pull/452) + +1. 🎈 4.5.2 + * [Pull request #423](https://github.com/gazebosim/gz-common/pull/423) + +1. 3 ➑️ 4 + * [Pull request #448](https://github.com/gazebosim/gz-common/pull/448) + * [Pull request #445](https://github.com/gazebosim/gz-common/pull/445) + +1. 🎈 3.15.1 + * [Pull request #454](https://github.com/gazebosim/gz-common/pull/454) + +1. 🎈 3.15.0 + * [Pull request #447](https://github.com/gazebosim/gz-common/pull/447) + +1. 🎈 3.14.2 + * [Pull request #419](https://github.com/gazebosim/gz-common/pull/419) + +1. Don't install auto-generated profiler.hh + * [Pull request #453](https://github.com/gazebosim/gz-common/pull/453) + +1. Fixed MeshManager Singleton + * [Pull request #451](https://github.com/gazebosim/gz-common/pull/451) + +1. Don't install CMakeLists.txt + * [Pull request #449](https://github.com/gazebosim/gz-common/pull/449) + +1. ign -> gz Migrate Ignition Headers : gz-common + * [Pull request #418](https://github.com/gazebosim/gz-common/pull/418) + +1. Suppress a bunch of unnecessary test output + * [Pull request #442](https://github.com/gazebosim/gz-common/pull/442) + +1. Fix metallic roughness file path for gltf assets + * [Pull request #436](https://github.com/gazebosim/gz-common/pull/436) + +1. Include cstring for memcpy + * [Pull request #437](https://github.com/gazebosim/gz-common/pull/437) + +1. Backport from 5 to 3 - Fix deprecation warning from new ffmpeg + * [Pull request #421](https://github.com/gazebosim/gz-common/pull/421) + +1. Remove redundant namespace references + * [Pull request #414](https://github.com/gazebosim/gz-common/pull/414) + +## Gazebo Common 5.0.0 (2022-09-22) 1. Improved visualization hw encoding tutorial gz-common5 * [Pull request #441](https://github.com/gazebosim/gz-common/pull/441) From 10ff92c6f470ec66335e58966291dce4e9bbeeb6 Mon Sep 17 00:00:00 2001 From: Michel Hidalgo <michel@ekumenlabs.com> Date: Wed, 17 Aug 2022 10:50:29 -0300 Subject: [PATCH 213/219] Add CSV data parsing (#402) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michel Hidalgo <michel@ekumenlabs.com> Co-authored-by: Carlos Agüero <cen.aguero@gmail.com> --- CMakeLists.txt | 3 +- io/BUILD.bazel | 76 ++++++++ io/include/CMakeLists.txt | 1 + io/include/gz/CMakeLists.txt | 1 + io/include/gz/common/CMakeLists.txt | 1 + io/include/gz/common/CSVStreams.hh | 177 +++++++++++++++++++ io/include/gz/common/DataFrame.hh | 210 ++++++++++++++++++++++ io/include/gz/common/Io.hh | 85 +++++++++ io/src/CMakeLists.txt | 15 ++ io/src/CSVStreams.cc | 262 ++++++++++++++++++++++++++++ io/src/CSVStreams_TEST.cc | 192 ++++++++++++++++++++ io/src/DataFrame_TEST.cc | 90 ++++++++++ src/CMakeLists.txt | 5 + 13 files changed, 1116 insertions(+), 2 deletions(-) create mode 100644 io/BUILD.bazel create mode 100644 io/include/CMakeLists.txt create mode 100644 io/include/gz/CMakeLists.txt create mode 100644 io/include/gz/common/CMakeLists.txt create mode 100644 io/include/gz/common/CSVStreams.hh create mode 100644 io/include/gz/common/DataFrame.hh create mode 100644 io/include/gz/common/Io.hh create mode 100644 io/src/CMakeLists.txt create mode 100644 io/src/CSVStreams.cc create mode 100644 io/src/CSVStreams_TEST.cc create mode 100644 io/src/DataFrame_TEST.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 019f921e4..f16df76aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,7 +127,6 @@ gz_find_package(AVUTIL REQUIRED_BY av PRETTY libavutil) # Find assimp gz_find_package(GzAssimp REQUIRED_BY graphics PRETTY assimp) - message(STATUS "-------------------------------------------\n") @@ -138,7 +137,7 @@ configure_file("${PROJECT_SOURCE_DIR}/cppcheck.suppress.in" ${PROJECT_BINARY_DIR}/cppcheck.suppress) gz_configure_build(QUIT_IF_BUILD_ERRORS - COMPONENTS av events geospatial graphics profiler testing) + COMPONENTS av events geospatial graphics io profiler testing) #============================================================================ # Create package information diff --git a/io/BUILD.bazel b/io/BUILD.bazel new file mode 100644 index 000000000..89a00dbed --- /dev/null +++ b/io/BUILD.bazel @@ -0,0 +1,76 @@ +load( + "//gz_bazel:build_defs.bzl", + "GZ_ROOT", + "GZ_VISIBILITY", + "generate_include_header", + "gz_export_header", +) + +package( + default_visibility = GZ_VISIBILITY, + features = [ + "-parse_headers", + "-layering_check", + ], +) + +public_headers_no_gen = glob([ + "include/gz/common/*.hh", +]) + +sources = glob( + ["src/*.cc"], + exclude = ["src/*_TEST.cc"], +) + +test_sources = glob(["src/*_TEST.cc"]) + +gz_export_header( + name = "include/gz/common/io/Export.hh", + export_base = "GZ_COMMON_IO", + lib_name = "gz-common-io", + visibility = ["//visibility:private"], +) + +generate_include_header( + name = "iohh_genrule", + out = "include/gz/common/io.hh", + hdrs = public_headers_no_gen + [ + "include/gz/common/io/Export.hh", + ], +) + +public_headers = public_headers_no_gen + [ + "include/gz/common/io/Export.hh", + "include/gz/common/io.hh", +] + +cc_library( + name = "io", + srcs = sources, + hdrs = public_headers, + includes = ["include"], + deps = [ + GZ_ROOT + "gz_common", + GZ_ROOT + "gz_math", + ], +) + +cc_binary( + name = "libgz-common5-io.so", + includes = ["include"], + linkopts = ["-Wl,-soname,libgz-common5-io.so"], + linkshared = True, + deps = [":events"], +) + +[cc_test( + name = src.replace("/", "_").replace(".cc", "").replace("src_", ""), + srcs = [src], + deps = [ + ":io", + GZ_ROOT + "gz_common/test:test_utils", + "@gtest", + "@gtest//:gtest_main", + ], +) for src in test_sources] diff --git a/io/include/CMakeLists.txt b/io/include/CMakeLists.txt new file mode 100644 index 000000000..a35a0475e --- /dev/null +++ b/io/include/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(gz) diff --git a/io/include/gz/CMakeLists.txt b/io/include/gz/CMakeLists.txt new file mode 100644 index 000000000..e4717b2d6 --- /dev/null +++ b/io/include/gz/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(common) diff --git a/io/include/gz/common/CMakeLists.txt b/io/include/gz/common/CMakeLists.txt new file mode 100644 index 000000000..82eb256f2 --- /dev/null +++ b/io/include/gz/common/CMakeLists.txt @@ -0,0 +1 @@ +gz_install_all_headers(COMPONENT io) diff --git a/io/include/gz/common/CSVStreams.hh b/io/include/gz/common/CSVStreams.hh new file mode 100644 index 000000000..58d3ecb48 --- /dev/null +++ b/io/include/gz/common/CSVStreams.hh @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#ifndef GZ_COMMON_CSVSTREAMS_HH_ +#define GZ_COMMON_CSVSTREAMS_HH_ + +#include <istream> +#include <string> +#include <vector> + +#include <gz/common/io/Export.hh> + +#include <gz/utils/ImplPtr.hh> + +namespace gz +{ + namespace common + { + /// \brief A CSV specification. + struct GZ_COMMON_IO_VISIBLE CSVDialect + { + /// Field delimiter character. + char delimiter; + + /// Row termination character. + char terminator; + + /// Field quoting character. + char quote; + + /// CSV dialect as expected by Unix tools. + static const CSVDialect Unix; + }; + + /// \brief Check CSV dialects for equality. + /// \param[in] _lhs Left-hand side CSV dialect. + /// \param[in] _rhs Right-hand side CSV dialect. + /// \return true if CSV dialects are equal, false otherwise. + bool GZ_COMMON_IO_VISIBLE operator==(const CSVDialect &_lhs, + const CSVDialect &_rhs); + + /// \brief A token in CSV data. + /// + /// Lexical specifications are typically dictated by a CSV dialect. + struct CSVToken + { + /// Token type. + enum { + TEXT = 0, ///< A pure text token (e.g. a letter). + QUOTE, ///< A field quoting token (e.g. a double quote). + DELIMITER, ///< A field delimiter token (e.g. a comma). + TERMINATOR ///< A row termination token (e.g. a newline). + } type; + + /// Token character. + char character; + }; + + /// \brief Extract a single token from an input stream of CSV data. + /// + /// If tokenization fails, the CSV data stream ``failbit`` will be set. + /// + /// \param[in] _stream A stream of CSV data to tokenize. + /// \param[out] _token Output CSV token to extract into. + /// \param[in] _dialect CSV data dialect. Defaults to the Unix dialect. + /// \return same CSV data stream. + GZ_COMMON_IO_VISIBLE std::istream &ExtractCSVToken( + std::istream &_stream, CSVToken &_token, + const CSVDialect &_dialect = CSVDialect::Unix); + + /// \brief Parse a single row from an input stream of CSV data. + /// + /// If parsing fails, the CSV data stream ``failbit`` will be set. + /// + /// \param[in] _stream CSV data stream to parse. + /// \param[out] _row Output CSV row to parse into. + /// \param[in] _dialect CSV data dialect. Defaults to the Unix dialect. + /// \returns same CSV data stream. + GZ_COMMON_IO_VISIBLE std::istream &ParseCSVRow( + std::istream &_stream, std::vector<std::string> &_row, + const CSVDialect &_dialect = CSVDialect::Unix); + + /// \brief A single-pass row iterator on an input stream of CSV data. + /// + /// Similar to std::istream_iterator, this iterator parses a stream of + /// CSV data, one row at a time. \see `ParseCSVRow`. + class GZ_COMMON_IO_VISIBLE CSVIStreamIterator + { + public: using iterator_category = std::input_iterator_tag; + public: using value_type = std::vector<std::string>; + public: using difference_type = std::ptrdiff_t; + public: using pointer = const value_type*; + public: using reference = const value_type&; + + /// \brief Construct an end-of-stream iterator. + public: CSVIStreamIterator(); + + /// \brief Construct an iterator over `_stream`. + /// + /// The first row will be read from the underlying stream to + /// initialize the iterator. If there are parsing errors while + /// reading, the underlying stream ``failbit`` will be set. + /// + /// \param[in] _stream A stream of CSV data to iterate. + /// \param[in] _dialect CSV data dialect. Defaults to the Unix dialect. + public: explicit CSVIStreamIterator( + std::istream &_stream, + const CSVDialect &_dialect = CSVDialect::Unix); + + /// \brief Read the next row from the underlying stream. + /// + /// If the read fails, the iterator becomes an end-of-stream iterator. + /// If there are parsing errors while reading, the underlying stream + /// ``failbit`` will be set. If the iterator already is an end-of-stream + /// iterator, behavior is undefined. + /// + /// \return A reference to the iterator once modified. + public: CSVIStreamIterator &operator++(); + + /// \brief Read the next row from the underlying stream. + /// + /// If the read fails, the iterator becomes an end-of-stream iterator. + /// If there are parsing errors while reading, the underlying stream + /// ``failbit`` will be set. If the iterator already is an end-of-stream + /// iterator, behavior is undefined. + /// + /// \return A copy of the iterator before modification. Note that, + /// while an iterator copy retains its state, the underlying stream + /// may still be advanced. + public: CSVIStreamIterator operator++(int); + + /// \brief Check for iterator equality. + /// \param[in] _other Iterator to compare with. + /// \return true if both iterators are end-of-stream iterators + /// or if both iterator wrap the same stream and use the same dialect, + /// false otherwise. + public: bool operator==(const CSVIStreamIterator &_other) const; + + /// \brief Check for iterator inequality. + /// \param[in] _other Iterator to compare with. + /// \return true if both iterators are not equal, false otherwise. + public: bool operator!=(const CSVIStreamIterator &_other) const; + + /// \brief Access current row. + /// + /// Behavior is undefined if the iterator is an end-of-stream iterator. + /// + /// \return reference to the current row. + public: reference operator*() const; + + /// \brief Access current row. + /// + /// Behavior is undefined if the iterator is an end-of-stream iterator. + /// + /// \return pointer to the current row. + public: pointer operator->() const; + + /// \brief Pointer to private data. + private: GZ_UTILS_IMPL_PTR(dataPtr) + }; + } +} + +#endif diff --git a/io/include/gz/common/DataFrame.hh b/io/include/gz/common/DataFrame.hh new file mode 100644 index 000000000..b5a124dc6 --- /dev/null +++ b/io/include/gz/common/DataFrame.hh @@ -0,0 +1,210 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#ifndef GZ_COMMON_DATAFRAME_HH_ +#define GZ_COMMON_DATAFRAME_HH_ + +#include <array> +#include <numeric> +#include <sstream> +#include <string> +#include <stdexcept> +#include <unordered_map> +#include <vector> + +#include <gz/common/CSVStreams.hh> +#include <gz/common/Io.hh> + +#include <gz/math/TimeVaryingVolumetricGrid.hh> + +namespace gz +{ + namespace common + { + /// \brief An abstract data frame. + /// + /// \tparam K Column key type + /// \tparam V Column value type + template <typename K, typename V> + class DataFrame + { + /// \brief Check if column is present. + /// \param[in] _key Key to column to look up. + /// \return whether the given column is present + /// in the data frame. + public: bool Has(const K &_key) const + { + return this->storage.count(_key) > 0; + } + + /// \brief Fetch mutable reference to column. + /// \param[in] _key Key to column to look up. + /// \return Mutable reference to column in the + /// data frame. + public: V &operator[](const K &_key) + { + return this->storage[_key]; + } + + /// \brief Fetch immutable reference to column + /// \param[in] _key Key to column to look up. + /// \return Immutable reference to column in the + /// data frame. + public: const V &operator[](const K &_key) const + { + return this->storage.at(_key); + } + + /// \brief Data frame storage + private: std::unordered_map<K, V> storage; + }; + + /// \brief Traits for IO of data frames comprised of time varying volumetric grids. + /// + /// \tparam K Data frame key type. + /// \tparam T Time coordinate type. + /// \tparam V Grid value type. + /// \tparam P Spatial dimensions type. + template <typename K, typename T, typename V, typename P> + struct IO<DataFrame<K, math::InMemoryTimeVaryingVolumetricGrid<T, V, P>>> + { + /// \brief Read data frame from CSV data stream. + /// + /// \param[in] _begin Beginning-of-stream iterator to CSV data stream. + /// \param[in] _end End-of-stream iterator to CSV data stream. + /// \param[in] _timeColumnName CSV data column name to use as time + /// dimension. + /// \param[in] _spatialColumnNames CSV data columns' names to use + /// as spatial (x, y, z) dimensions, in that order. + /// \throws std::invalid_argument if the CSV data stream is empty, or + /// if the CSV data stream has no header, or if the given columns + /// cannot be found in the CSV data stream header. + /// \return data frame read. + static DataFrame<K, math::InMemoryTimeVaryingVolumetricGrid<T, V, P>> + ReadFrom(CSVIStreamIterator _begin, + CSVIStreamIterator _end, + const std::string &_timeColumnName, + const std::array<std::string, 3> &_spatialColumnNames) + { + if (_begin == _end) + { + throw std::invalid_argument("CSV data stream is empty"); + } + const std::vector<std::string> &header = *_begin; + if (header.empty()) + { + throw std::invalid_argument("CSV data stream has no header"); + } + + auto it = std::find(header.begin(), header.end(), _timeColumnName); + if (it == header.end()) + { + std::stringstream sstream; + sstream << "CSV data stream has no '" + << _timeColumnName << "' column"; + throw std::invalid_argument(sstream.str()); + } + const size_t timeIndex = it - header.begin(); + + std::array<size_t, 3> spatialColumnIndices; + for (size_t i = 0; i < _spatialColumnNames.size(); ++i) + { + it = std::find(header.begin(), header.end(), _spatialColumnNames[i]); + if (it == header.end()) + { + std::stringstream sstream; + sstream << "CSV data stream has no '" + << _spatialColumnNames[i] << "' column"; + throw std::invalid_argument(sstream.str()); + } + spatialColumnIndices[i] = it - header.begin(); + } + + return ReadFrom(_begin, _end, timeIndex, spatialColumnIndices); + } + + /// \brief Read data frame from CSV data stream. + /// + /// \param[in] _begin Beginning-of-stream iterator to CSV data stream. + /// \param[in] _end End-of-stream iterator to CSV data stream. + /// \param[in] _timeColumnIndex CSV data column index to use as + /// time dimension. + /// \param[in] _spatialColumnIndices CSV data columns indices + /// to use as spatial (x, y, z) dimensions, in that order. + /// \throws std::invalid_argument if the CSV data stream is empty, or + /// if the CSV data stream has no header, or if the given columns + /// cannot be found in the CSV data stream header. + /// \return data frame read. + static DataFrame<K, math::InMemoryTimeVaryingVolumetricGrid<T, V, P>> + ReadFrom(CSVIStreamIterator _begin, + CSVIStreamIterator _end, + const size_t &_timeColumnIndex = 0, + const std::array<size_t, 3> &_spatialColumnIndices = {1, 2, 3}) + { + if (_begin == _end) + { + throw std::invalid_argument("CSV data stream is empty"); + } + std::vector<size_t> dataColumnIndices(_begin->size()); + std::iota(dataColumnIndices.begin(), dataColumnIndices.end(), 0); + auto last = dataColumnIndices.end(); + for (size_t index : {_timeColumnIndex, _spatialColumnIndices[0], + _spatialColumnIndices[1], _spatialColumnIndices[2]}) + { + auto it = std::find(dataColumnIndices.begin(), last, index); + if (it == last) + { + std::stringstream sstream; + sstream << "Column index " << index << " is" + << "out of range for CSV data stream"; + throw std::invalid_argument(sstream.str()); + } + *it = *(--last); + } + dataColumnIndices.erase(last, dataColumnIndices.end()); + + using FactoryT = + math::InMemoryTimeVaryingVolumetricGridFactory<T, V>; + std::vector<FactoryT> factories(dataColumnIndices.size()); + for (auto it = _begin; it != _end; ++it) + { + const T time = IO<T>::ReadFrom(it->at(_timeColumnIndex)); + const math::Vector3<P> position{ + IO<P>::ReadFrom(it->at(_spatialColumnIndices[0])), + IO<P>::ReadFrom(it->at(_spatialColumnIndices[1])), + IO<P>::ReadFrom(it->at(_spatialColumnIndices[2]))}; + + for (size_t i = 0; i < dataColumnIndices.size(); ++i) + { + const V value = IO<V>::ReadFrom(it->at(dataColumnIndices[i])); + factories[i].AddPoint(time, position, value); + } + } + + DataFrame<K, math::InMemoryTimeVaryingVolumetricGrid<T, V, P>> df; + for (size_t i = 0; i < dataColumnIndices.size(); ++i) + { + const std::string key = !_begin->empty() ? + _begin->at(dataColumnIndices[i]) : + "var" + std::to_string(dataColumnIndices[i]); + df[IO<K>::ReadFrom(key)] = factories[i].Build(); + } + return df; + } + }; + } +} +#endif diff --git a/io/include/gz/common/Io.hh b/io/include/gz/common/Io.hh new file mode 100644 index 000000000..434b10baf --- /dev/null +++ b/io/include/gz/common/Io.hh @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#ifndef GZ_COMMON_IO_HH_ +#define GZ_COMMON_IO_HH_ + +#include <sstream> +#include <string> + +namespace gz +{ + namespace common + { + /// \brief Traits for type-specific object I/O. + /// + /// To be fully specialized as needed. + template <typename T> + struct IO + { + /// \brief Read object from stream. + /// + /// This default implementation relies on stream operator overloads. + /// + /// \param[in] _istream Stream to read object from. + /// \return object instance. + static T ReadFrom(std::istream &_istream) + { + T value; + _istream >> value; + return value; + } + + /// \brief Read object from string. + /// + /// This default implementation relies on stream operator overloads. + /// + /// \param[in] _string String to read object from. + /// \return object instance. + static T ReadFrom(const std::string &_string) + { + std::istringstream stream{_string}; + return ReadFrom(stream); + } + }; + + /// \brief Traits for string I/O. + template<> + struct IO<std::string> + { + /// \brief Read object from stream. + /// + /// This default implementation relies on stream operator overloads. + /// + /// \param[in] _istream Stream to read object from. + /// \return object instance. + static std::string ReadFrom(std::istream &_istream) + { + std::string value; + _istream >> value; + return value; + } + + /// \brief Read string from string (copy as-is). + static std::string ReadFrom(std::string _string) + { + return _string; + } + }; + } +} + +#endif diff --git a/io/src/CMakeLists.txt b/io/src/CMakeLists.txt new file mode 100644 index 000000000..783bfd265 --- /dev/null +++ b/io/src/CMakeLists.txt @@ -0,0 +1,15 @@ +gz_get_libsources_and_unittests(sources gtest_sources) + +gz_add_component(io SOURCES ${sources} GET_TARGET_NAME io_target) + +target_link_libraries(${io_target} + PUBLIC + gz-math${GZ_MATH_VER}::gz-math${GZ_MATH_VER}) + +gz_build_tests( + TYPE UNIT + SOURCES ${gtest_sources} + LIB_DEPS + ${io_target} + gz-common${GZ_COMMON_VER}-testing +) diff --git a/io/src/CSVStreams.cc b/io/src/CSVStreams.cc new file mode 100644 index 000000000..a286e14ca --- /dev/null +++ b/io/src/CSVStreams.cc @@ -0,0 +1,262 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ + +#include "gz/common/CSVStreams.hh" + +#include <sstream> + +namespace gz +{ +namespace common +{ + +///////////////////////////////////////////////// +const CSVDialect CSVDialect::Unix = {',', '\n', '"'}; + +///////////////////////////////////////////////// +bool operator==(const CSVDialect &_lhs, const CSVDialect &_rhs) +{ + return (_lhs.delimiter == _rhs.delimiter && + _lhs.terminator == _rhs.terminator && + _lhs.quote == _rhs.quote); +} + +///////////////////////////////////////////////// +std::istream &ExtractCSVToken( + std::istream &_stream, CSVToken &_token, + const CSVDialect &_dialect) +{ + char character; + if (_stream.peek(), !_stream.fail() && _stream.eof()) + { + _token = {CSVToken::TERMINATOR, EOF}; + } + else if (_stream.get(character)) + { + if (character == _dialect.terminator) + { + _token = {CSVToken::TERMINATOR, character}; + } + else if (character == _dialect.delimiter) + { + _token = {CSVToken::DELIMITER, character}; + } + else if (character == _dialect.quote) + { + if (_stream.peek() == _dialect.quote) + { + _token = {CSVToken::TEXT, character}; + _stream.ignore(); + } + else + { + _token = {CSVToken::QUOTE, character}; + } + } + else + { + _token = {CSVToken::TEXT, character}; + } + } + return _stream; +} + +///////////////////////////////////////////////// +std::istream &ParseCSVRow( + std::istream &_stream, + std::vector<std::string> &_row, + const CSVDialect &_dialect) +{ + std::stringstream text; + enum { + FIELD_START = 0, + ESCAPED_FIELD, + NONESCAPED_FIELD, + FIELD_END, + RECORD_END + } state = FIELD_START; + + _row.clear(); + + CSVToken token; + while (state != RECORD_END && ExtractCSVToken(_stream, token, _dialect)) + { + switch (state) + { + case FIELD_START: + if (token.type == CSVToken::QUOTE) + { + state = ESCAPED_FIELD; + break; + } + state = NONESCAPED_FIELD; + [[fallthrough]]; + case NONESCAPED_FIELD: + if (token.type == CSVToken::TEXT) + { + text << token.character; + break; + } + state = FIELD_END; + [[fallthrough]]; + case FIELD_END: + switch (token.type) + { + case CSVToken::DELIMITER: + _row.push_back(text.str()); + state = FIELD_START; + break; + case CSVToken::TERMINATOR: + if (token.character != EOF || !_row.empty() || text.tellp() > 0) + { + _row.push_back(text.str()); + state = RECORD_END; + break; + } + [[fallthrough]]; + default: + _stream.setstate(std::istream::failbit); + break; + } + text.str(""), text.clear(); + break; + case ESCAPED_FIELD: + if (token.type == CSVToken::QUOTE) + { + state = FIELD_END; + break; + } + if (token.type != CSVToken::TERMINATOR || token.character != EOF) + { + text << token.character; + break; + } + [[fallthrough]]; + default: + _stream.setstate(std::istream::failbit); + break; + } + } + return _stream; +} + +/// \brief Private data for the CSVIStreamIterator class +class CSVIStreamIterator::Implementation +{ + /// \brief Default constructor for end iterator. + public: Implementation() = default; + + /// \brief Constructor for begin iterator. + public: Implementation(std::istream &_stream, const CSVDialect &_dialect) + : stream(&_stream), dialect(_dialect) + { + } + + /// \brief Copy constructor. + public: Implementation(const Implementation &_other) + : stream(_other.stream), dialect(_other.dialect), row(_other.row) + { + } + + /// \brief Advance iterator to next row if possible. + public: void Next() + { + if (this->stream) + { + try + { + if (!ParseCSVRow(*this->stream, this->row, this->dialect)) + { + this->stream = nullptr; + } + } + catch (...) + { + this->stream = nullptr; + throw; + } + } + } + + /// \brief CSV data stream to iterate, if any. + public: std::istream *stream{nullptr}; + + /// \brief CSV dialect for data parsing. + public: CSVDialect dialect{}; + + /// \brief Current CSV data row. + public: std::vector<std::string> row; +}; + +///////////////////////////////////////////////// +CSVIStreamIterator::CSVIStreamIterator() + : dataPtr(gz::utils::MakeImpl<Implementation>()) +{ +} + +///////////////////////////////////////////////// +CSVIStreamIterator::CSVIStreamIterator(std::istream &_stream, + const CSVDialect &_dialect) + : dataPtr(gz::utils::MakeImpl<Implementation>(_stream, _dialect)) +{ + this->dataPtr->Next(); +} + +///////////////////////////////////////////////// +bool CSVIStreamIterator::operator==(const CSVIStreamIterator &_other) const +{ + return this->dataPtr->stream == _other.dataPtr->stream && ( + this->dataPtr->stream == nullptr || + this->dataPtr->dialect == _other.dataPtr->dialect); +} + +///////////////////////////////////////////////// +bool CSVIStreamIterator::operator!=(const CSVIStreamIterator &_other) const +{ + return !(*this == _other); +} + +///////////////////////////////////////////////// +CSVIStreamIterator &CSVIStreamIterator::operator++() +{ + this->dataPtr->Next(); + return *this; +} + +///////////////////////////////////////////////// +// NOLINTNEXTLINE(readability/casting) +CSVIStreamIterator CSVIStreamIterator::operator++(int) +{ + CSVIStreamIterator it(*this); + this->dataPtr->Next(); + return it; +} + +///////////////////////////////////////////////// +const std::vector<std::string> &CSVIStreamIterator::operator*() const +{ + return this->dataPtr->row; +} + +///////////////////////////////////////////////// +const std::vector<std::string> *CSVIStreamIterator::operator->() const +{ + return &this->dataPtr->row; +} + +} +} diff --git a/io/src/CSVStreams_TEST.cc b/io/src/CSVStreams_TEST.cc new file mode 100644 index 000000000..ec6533291 --- /dev/null +++ b/io/src/CSVStreams_TEST.cc @@ -0,0 +1,192 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ +#include <gtest/gtest.h> +#include <sstream> +#include <string> +#include <vector> + +#include "gz/common/CSVStreams.hh" + +using namespace gz; +using namespace common; + +///////////////////////////////////////////////// +TEST(CSVStreams, CanExtractCSVTokens) +{ + std::stringstream sstream; + sstream << "\"a,\n\"\""; + + CSVToken token; + EXPECT_TRUE(ExtractCSVToken(sstream, token, CSVDialect::Unix)); + EXPECT_EQ(token.type, CSVToken::QUOTE); + EXPECT_EQ(token.character, '"'); + + EXPECT_TRUE(ExtractCSVToken(sstream, token, CSVDialect::Unix)); + EXPECT_EQ(token.type, CSVToken::TEXT); + EXPECT_EQ(token.character, 'a'); + + EXPECT_TRUE(ExtractCSVToken(sstream, token, CSVDialect::Unix)); + EXPECT_EQ(token.type, CSVToken::DELIMITER); + EXPECT_EQ(token.character, ','); + + EXPECT_TRUE(ExtractCSVToken(sstream, token, CSVDialect::Unix)); + EXPECT_EQ(token.type, CSVToken::TERMINATOR); + EXPECT_EQ(token.character, '\n'); + + EXPECT_TRUE(ExtractCSVToken(sstream, token, CSVDialect::Unix)); + EXPECT_EQ(token.type, CSVToken::TEXT); + EXPECT_EQ(token.character, '"'); + + EXPECT_TRUE(ExtractCSVToken(sstream, token, CSVDialect::Unix)); + EXPECT_EQ(token.type, CSVToken::TERMINATOR); + EXPECT_EQ(token.character, EOF); +} + +///////////////////////////////////////////////// +TEST(CSVStreams, CanParseCSVRows) +{ + { + std::stringstream sstream; + sstream << ","; + std::vector<std::string> row; + EXPECT_TRUE(ParseCSVRow(sstream, row, CSVDialect::Unix)); + const std::vector<std::string> expectedRow{"", ""}; + EXPECT_EQ(row, expectedRow); + } + + { + std::stringstream sstream; + sstream << "foo"; + std::vector<std::string> row; + EXPECT_TRUE(ParseCSVRow(sstream, row, CSVDialect::Unix)); + const std::vector<std::string> expectedRow{"foo"}; + EXPECT_EQ(row, expectedRow); + } + + { + std::stringstream sstream; + sstream << "foo" << std::endl; + std::vector<std::string> row; + EXPECT_TRUE(ParseCSVRow(sstream, row, CSVDialect::Unix)); + const std::vector<std::string> expectedRow{"foo"}; + EXPECT_EQ(row, expectedRow); + } + + { + std::stringstream sstream; + sstream << ",foo"; + std::vector<std::string> row; + EXPECT_TRUE(ParseCSVRow(sstream, row, CSVDialect::Unix)); + const std::vector<std::string> expectedRow{"", "foo"}; + EXPECT_EQ(row, expectedRow); + } + + { + std::stringstream sstream; + sstream << ",\"foo,bar\nbaz\","; + std::vector<std::string> row; + EXPECT_TRUE(ParseCSVRow(sstream, row, CSVDialect::Unix)); + const std::vector<std::string> expectedRow{"", "foo,bar\nbaz", ""}; + EXPECT_EQ(row, expectedRow); + } +} + +///////////////////////////////////////////////// +TEST(CSVStreams, CanHandleInvalidCSVRows) +{ + { + std::stringstream sstream; + std::vector<std::string> row; + EXPECT_FALSE(ParseCSVRow(sstream, row, CSVDialect::Unix)); + } + + { + std::stringstream sstream; + sstream << "\""; + std::vector<std::string> row; + EXPECT_FALSE(ParseCSVRow(sstream, row, CSVDialect::Unix)); + } + + { + std::stringstream sstream; + sstream << "\"foo\"?"; + std::vector<std::string> row; + EXPECT_FALSE(ParseCSVRow(sstream, row, CSVDialect::Unix)); + } + + { + std::stringstream sstream; + sstream << "foo\"bar\""; + std::vector<std::string> row; + EXPECT_FALSE(ParseCSVRow(sstream, row, CSVDialect::Unix)); + } +} + +///////////////////////////////////////////////// +TEST(CSVStreams, CanIterateValidCSV) +{ + { + std::stringstream sstream; + EXPECT_EQ(CSVIStreamIterator(sstream), + CSVIStreamIterator()); + } + + { + std::stringstream ss; + ss << std::endl; + const std::vector<std::vector<std::string>> expectedRows{{""}}; + const auto rows = std::vector<std::vector<std::string>>( + CSVIStreamIterator(ss), CSVIStreamIterator()); + EXPECT_EQ(expectedRows, rows); + EXPECT_TRUE(ss.eof()); + } + + { + std::stringstream ss; + ss << "foo,bar" << std::endl + << "bar," << std::endl + << ",foo" << std::endl + << "," << std::endl + << "baz,baz"; + const std::vector<std::vector<std::string>> expectedRows{ + {"foo", "bar"}, {"bar", ""}, {"", "foo"}, {"", ""}, {"baz", "baz"}}; + const auto rows = std::vector<std::vector<std::string>>( + CSVIStreamIterator(ss), CSVIStreamIterator()); + EXPECT_EQ(expectedRows, rows); + } +} + +///////////////////////////////////////////////// +TEST(CSVStreams, CanIterateInvalidCSVSafely) +{ + { + std::stringstream sstream; + sstream << "\"" << std::endl; + auto it = CSVIStreamIterator(sstream, CSVDialect::Unix); + EXPECT_EQ(it, CSVIStreamIterator()); + } + + { + std::stringstream sstream; + sstream.exceptions(std::stringstream::failbit); + sstream << "foo" << std::endl + << "\"bar" << std::endl; + auto it = CSVIStreamIterator(sstream, CSVDialect::Unix); + EXPECT_THROW({ ++it; }, std::stringstream::failure); + EXPECT_EQ(it, CSVIStreamIterator()); + } +} diff --git a/io/src/DataFrame_TEST.cc b/io/src/DataFrame_TEST.cc new file mode 100644 index 000000000..9100ae6db --- /dev/null +++ b/io/src/DataFrame_TEST.cc @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2022 Open Source Robotics Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * +*/ + +#include <gtest/gtest.h> +#include <iostream> +#include <sstream> +#include <string> + +#include <gz/math/TimeVaryingVolumetricGrid.hh> + +#include "gz/common/CSVStreams.hh" +#include "gz/common/DataFrame.hh" +#include "gz/common/Filesystem.hh" + +using namespace gz; + +///////////////////////////////////////////////// +TEST(DataFrameTests, SimpleCSV) +{ + std::stringstream ss; + ss << "t,x,y,z,temperature" << std::endl + << "0,0,0,0,25.2" << std::endl + << "0,10,0,0,25.2" << std::endl + << "0,0,10,0,25.2" << std::endl + << "0,10,10,0,25.2" << std::endl + << "1,0,0,0,24.9" << std::endl + << "1,10,0,0,24.9" << std::endl + << "1,0,10,0,25.1" << std::endl + << "1,10,10,0,25.1" << std::endl; + + using DataT = + math::InMemoryTimeVaryingVolumetricGrid<double, double, double>; + using DataFrameT = common::DataFrame<std::string, DataT>; + const auto df = common::IO<DataFrameT>::ReadFrom( + common::CSVIStreamIterator(ss), + common::CSVIStreamIterator()); + + ASSERT_TRUE(df.Has("temperature")); + const DataT &temperatureData = df["temperature"]; + auto temperatureSession = temperatureData.StepTo( + temperatureData.CreateSession(), 0.5); + ASSERT_TRUE(temperatureSession.has_value()); + const math::Vector3d position{5., 5., 0.}; + auto temperature = temperatureData.LookUp( + temperatureSession.value(), position); + ASSERT_TRUE(temperature.has_value()); + EXPECT_DOUBLE_EQ(25.1, temperature.value()); +} + +///////////////////////////////////////////////// +TEST(DataFrameTests, ComplexCSV) +{ + std::stringstream ss; + ss << "timestamp,temperature,pressure,humidity,lat,lon,altitude" << std::endl + << "1658923062,13.1,101490,91,36.80029505,-121.788972517,0.8" << std::endl + << "1658923062,13,101485,88,36.80129505,-121.788972517,0.8" << std::endl + << "1658923062,13.1,101485,89,36.80029505,-121.789972517,0.8" << std::endl + << "1658923062,13.5,101490,92,36.80129505,-121.789972517,0.8" << std::endl; + + using DataT = + math::InMemoryTimeVaryingVolumetricGrid<double, double, double>; + using DataFrameT = common::DataFrame<std::string, DataT>; + const auto df = common::IO<DataFrameT>::ReadFrom( + common::CSVIStreamIterator(ss), common::CSVIStreamIterator(), + "timestamp", {"lat", "lon", "altitude"}); + EXPECT_TRUE(df.Has("temperature")); + EXPECT_TRUE(df.Has("humidity")); + ASSERT_TRUE(df.Has("pressure")); + + const DataT &pressureData = df["pressure"]; + auto pressureSession = pressureData.CreateSession(); + const math::Vector3d position{36.80079505, -121.789472517, 0.8}; + auto pressure = pressureData.LookUp(pressureSession, position); + ASSERT_TRUE(pressure.has_value()); + EXPECT_DOUBLE_EQ(101487.5, pressure.value()); +} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d14341b9d..bcb1ff4c4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -49,6 +49,11 @@ gz_build_tests( # Used to make internal source file headers visible to the unit tests ${CMAKE_CURRENT_SOURCE_DIR}) +if(TARGET UNIT_DataFrame_TEST) + target_include_directories(UNIT_DataFrame_TEST PRIVATE + ${gz-math${GZ_MATH_VER}_INCLUDE_DIRS}) +endif() + if(TARGET UNIT_MovingWindowFilter_TEST) target_include_directories(UNIT_MovingWindowFilter_TEST PRIVATE ${gz-math${GZ_MATH_VER}_INCLUDE_DIRS}) From 2d2f73c7535349c5eddf16f5a8af0a148d4e86d2 Mon Sep 17 00:00:00 2001 From: Michel Hidalgo <michel@ekumenlabs.com> Date: Tue, 6 Sep 2022 10:23:30 -0300 Subject: [PATCH 214/219] Skip CSV header when reading DataFrame (#435) Signed-off-by: Michel Hidalgo <michel@ekumenlabs.com> --- io/include/gz/common/DataFrame.hh | 2 +- io/src/DataFrame_TEST.cc | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/io/include/gz/common/DataFrame.hh b/io/include/gz/common/DataFrame.hh index b5a124dc6..bc340015e 100644 --- a/io/include/gz/common/DataFrame.hh +++ b/io/include/gz/common/DataFrame.hh @@ -179,7 +179,7 @@ namespace gz using FactoryT = math::InMemoryTimeVaryingVolumetricGridFactory<T, V>; std::vector<FactoryT> factories(dataColumnIndices.size()); - for (auto it = _begin; it != _end; ++it) + for (auto it = std::next(_begin); it != _end; ++it) { const T time = IO<T>::ReadFrom(it->at(_timeColumnIndex)); const math::Vector3<P> position{ diff --git a/io/src/DataFrame_TEST.cc b/io/src/DataFrame_TEST.cc index 9100ae6db..5418d6879 100644 --- a/io/src/DataFrame_TEST.cc +++ b/io/src/DataFrame_TEST.cc @@ -52,12 +52,19 @@ TEST(DataFrameTests, SimpleCSV) ASSERT_TRUE(df.Has("temperature")); const DataT &temperatureData = df["temperature"]; auto temperatureSession = temperatureData.StepTo( - temperatureData.CreateSession(), 0.5); + temperatureData.CreateSession(), 0.); ASSERT_TRUE(temperatureSession.has_value()); const math::Vector3d position{5., 5., 0.}; auto temperature = temperatureData.LookUp( temperatureSession.value(), position); ASSERT_TRUE(temperature.has_value()); + EXPECT_DOUBLE_EQ(25.2, temperature.value()); + temperatureSession = temperatureData.StepTo( + temperatureData.CreateSession(), 0.5); + ASSERT_TRUE(temperatureSession.has_value()); + temperature = temperatureData.LookUp( + temperatureSession.value(), position); + ASSERT_TRUE(temperature.has_value()); EXPECT_DOUBLE_EQ(25.1, temperature.value()); } From 3bdeca4e96e7b36c4bd0f61b26e7bc326f68ac93 Mon Sep 17 00:00:00 2001 From: Arjo Chakravarty <arjo@openrobotics.org> Date: Thu, 6 Oct 2022 23:53:31 +0800 Subject: [PATCH 215/219] Adds an API to retrieve keys. (#446) This is useful for when we perform visualization. Signed-off-by: Arjo Chakravarty <arjo@openrobotics.org> Co-authored-by: Michael Carroll <michael@openrobotics.org> --- io/include/gz/common/DataFrame.hh | 12 ++++++++++++ io/src/DataFrame_TEST.cc | 6 +++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/io/include/gz/common/DataFrame.hh b/io/include/gz/common/DataFrame.hh index bc340015e..fda99d060 100644 --- a/io/include/gz/common/DataFrame.hh +++ b/io/include/gz/common/DataFrame.hh @@ -68,6 +68,18 @@ namespace gz return this->storage.at(_key); } + /// \brief Retrieve all keys + /// \return A vector with keys + public: const std::vector<K> Keys() const + { + std::vector<K> keyList; + for (auto &[k, _]: this->storage) + { + keyList.push_back(k); + } + return keyList; + } + /// \brief Data frame storage private: std::unordered_map<K, V> storage; }; diff --git a/io/src/DataFrame_TEST.cc b/io/src/DataFrame_TEST.cc index 5418d6879..fd2e8a215 100644 --- a/io/src/DataFrame_TEST.cc +++ b/io/src/DataFrame_TEST.cc @@ -66,6 +66,9 @@ TEST(DataFrameTests, SimpleCSV) temperatureSession.value(), position); ASSERT_TRUE(temperature.has_value()); EXPECT_DOUBLE_EQ(25.1, temperature.value()); + auto keys = df.Keys(); + ASSERT_EQ(keys.size(), 1); + ASSERT_EQ(keys[0], "temperature"); } ///////////////////////////////////////////////// @@ -87,7 +90,8 @@ TEST(DataFrameTests, ComplexCSV) EXPECT_TRUE(df.Has("temperature")); EXPECT_TRUE(df.Has("humidity")); ASSERT_TRUE(df.Has("pressure")); - + auto keys = df.Keys(); + ASSERT_EQ(keys.size(), 3); const DataT &pressureData = df["pressure"]; auto pressureSession = pressureData.CreateSession(); const math::Vector3d position{36.80079505, -121.789472517, 0.8}; From 5c74a6326463bfc206311d0657190848b362434f Mon Sep 17 00:00:00 2001 From: Nate Koenig <nkoenig@users.noreply.github.com> Date: Tue, 18 Oct 2022 08:27:32 -0700 Subject: [PATCH 216/219] 5.2.0 release (#461) Signed-off-by: Nate Koenig <nate@openrobotics.org> Signed-off-by: Nate Koenig <nate@openrobotics.org> Co-authored-by: Nate Koenig <nate@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f16df76aa..3a7a34f1c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(gz-common5 VERSION 5.1.0) +project(gz-common5 VERSION 5.2.0) set(GZ_COMMON_VER ${PROJECT_VERSION_MAJOR}) #============================================================================ diff --git a/Changelog.md b/Changelog.md index ac32be692..f1c537185 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,16 @@ ## Gazebo Common 5.x +## Gazebo Common 5.2.0 (2022-10-18) + +1. Add CSV data parsing + * [Pull request #402](https://github.com/gazebosim/gz-common/pull/402) + +1. Skip CSV header when reading DataFrame. + * [Pull request #435](https://github.com/gazebosim/gz-common/pull/435) + +1. Adds an API to retrieve keys. + * [Pull request #446](https://github.com/gazebosim/gz-common/pull/446) + ## Gazebo Common 5.1.0 (2022-10-13) 1. 4 ➑️ 5 From b3313c27f3703cd714b472ca8c44cbcd7ab9b6c5 Mon Sep 17 00:00:00 2001 From: Nate Koenig <nkoenig@users.noreply.github.com> Date: Tue, 18 Oct 2022 10:43:27 -0700 Subject: [PATCH 217/219] Fix arm builds (#462) * Fix arm builds Signed-off-by: Nate Koenig <nate@openrobotics.org> * Adding in pre-release 5.2.1 Signed-off-by: Nate Koenig <nate@openrobotics.org> Signed-off-by: Nate Koenig <nate@openrobotics.org> Co-authored-by: Nate Koenig <nate@openrobotics.org> --- CMakeLists.txt | 4 ++-- io/src/CSVStreams.cc | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3a7a34f1c..b41e559ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR) #============================================================================ # Initialize the project #============================================================================ -project(gz-common5 VERSION 5.2.0) +project(gz-common5 VERSION 5.2.1) set(GZ_COMMON_VER ${PROJECT_VERSION_MAJOR}) #============================================================================ @@ -18,7 +18,7 @@ set(GZ_CMAKE_VER ${gz-cmake3_VERSION_MAJOR}) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -gz_configure_project(VERSION_SUFFIX) +gz_configure_project(VERSION_SUFFIX pre1) #============================================================================ # Set project-specific options diff --git a/io/src/CSVStreams.cc b/io/src/CSVStreams.cc index a286e14ca..f561edba3 100644 --- a/io/src/CSVStreams.cc +++ b/io/src/CSVStreams.cc @@ -43,7 +43,7 @@ std::istream &ExtractCSVToken( char character; if (_stream.peek(), !_stream.fail() && _stream.eof()) { - _token = {CSVToken::TERMINATOR, EOF}; + _token = {CSVToken::TERMINATOR, static_cast<char>(EOF)}; } else if (_stream.get(character)) { @@ -121,7 +121,8 @@ std::istream &ParseCSVRow( state = FIELD_START; break; case CSVToken::TERMINATOR: - if (token.character != EOF || !_row.empty() || text.tellp() > 0) + if (token.character != static_cast<char>(EOF) || !_row.empty() || + text.tellp() > 0) { _row.push_back(text.str()); state = RECORD_END; @@ -140,7 +141,8 @@ std::istream &ParseCSVRow( state = FIELD_END; break; } - if (token.type != CSVToken::TERMINATOR || token.character != EOF) + if (token.type != CSVToken::TERMINATOR || + token.character != static_cast<char>(EOF)) { text << token.character; break; From 1a26b9ae9e7d0d709be47ef8e82dc8c5c8b22f26 Mon Sep 17 00:00:00 2001 From: Nate Koenig <nkoenig@users.noreply.github.com> Date: Tue, 18 Oct 2022 21:02:03 -0700 Subject: [PATCH 218/219] Fix arm test (#463) * Fix arm test Signed-off-by: Nate Koenig <nate@openrobotics.org> Co-authored-by: Nate Koenig <nate@openrobotics.org> --- CMakeLists.txt | 2 +- io/src/CSVStreams_TEST.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b41e559ba..4040a9d22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ set(GZ_CMAKE_VER ${gz-cmake3_VERSION_MAJOR}) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -gz_configure_project(VERSION_SUFFIX pre1) +gz_configure_project(VERSION_SUFFIX pre2) #============================================================================ # Set project-specific options diff --git a/io/src/CSVStreams_TEST.cc b/io/src/CSVStreams_TEST.cc index ec6533291..4846bbf09 100644 --- a/io/src/CSVStreams_TEST.cc +++ b/io/src/CSVStreams_TEST.cc @@ -53,7 +53,7 @@ TEST(CSVStreams, CanExtractCSVTokens) EXPECT_TRUE(ExtractCSVToken(sstream, token, CSVDialect::Unix)); EXPECT_EQ(token.type, CSVToken::TERMINATOR); - EXPECT_EQ(token.character, EOF); + EXPECT_EQ(token.character, static_cast<char>(EOF)); } ///////////////////////////////////////////////// From 56b82ad501b64a0c51b06a79fd68aeec2766f86e Mon Sep 17 00:00:00 2001 From: Nate Koenig <nkoenig@users.noreply.github.com> Date: Wed, 19 Oct 2022 15:51:51 -0700 Subject: [PATCH 219/219] 5.2.1 release (#464) Signed-off-by: Nate Koenig <nate@openrobotics.org> Signed-off-by: Nate Koenig <nate@openrobotics.org> Co-authored-by: Nate Koenig <nate@openrobotics.org> --- CMakeLists.txt | 2 +- Changelog.md | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4040a9d22..8bc4a70c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ set(GZ_CMAKE_VER ${gz-cmake3_VERSION_MAJOR}) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -gz_configure_project(VERSION_SUFFIX pre2) +gz_configure_project(VERSION_SUFFIX) #============================================================================ # Set project-specific options diff --git a/Changelog.md b/Changelog.md index f1c537185..566383691 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,11 @@ ## Gazebo Common 5.x +## Gazebo Common 5.2.1 (2022-10-19) + +1. Fix arm builds and tests + * [Pull request #462](https://github.com/gazebosim/gz-common/pull/462) + * [Pull request #463](https://github.com/gazebosim/gz-common/pull/463) + ## Gazebo Common 5.2.0 (2022-10-18) 1. Add CSV data parsing