summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRye <rye@alchemyviewer.org>2025-10-24 01:38:56 -0400
committerRye <rye@alchemyviewer.org>2025-10-27 04:59:14 -0400
commit1727c4d26429dd256fb2cd90fa83085e976794cc (patch)
tree532a24aa7e9bf659404f79c9d372c409b54a094e
parentf7da57ddda41a4671949566ba4d13fe12fa68922 (diff)
Reintroduce llappearanceutility to viewer tree from archive/develop
Signed-off-by: Rye <rye@alchemyviewer.org>
-rw-r--r--.gitattributes4
-rw-r--r--.github/workflows/build.yaml10
-rw-r--r--autobuild.xml30
-rwxr-xr-xbuild.sh12
-rw-r--r--indra/CMakeLists.txt12
-rw-r--r--indra/cmake/LLAppearanceUtility.cmake12
-rw-r--r--indra/llappearance/llavatarappearancedefines.cpp4
-rw-r--r--indra/llappearance/llavatarappearancedefines.h4
-rw-r--r--indra/llappearance/lltexlayer.cpp25
-rw-r--r--indra/llappearance/lltexlayer.h2
-rw-r--r--indra/llappearance/lltexlayerparams.h1
-rw-r--r--indra/llappearanceutility/CMakeLists.txt78
-rw-r--r--indra/llappearanceutility/README.md33
-rw-r--r--indra/llappearanceutility/appearance_utility.cpp66
-rw-r--r--indra/llappearanceutility/llappappearanceutility.cpp681
-rw-r--r--indra/llappearanceutility/llappappearanceutility.h108
-rw-r--r--indra/llappearanceutility/llbakingavatar.cpp177
-rw-r--r--indra/llappearanceutility/llbakingavatar.h139
-rw-r--r--indra/llappearanceutility/llbakingjoint.cpp54
-rw-r--r--indra/llappearanceutility/llbakingjoint.h44
-rw-r--r--indra/llappearanceutility/llbakingjointmesh.cpp43
-rw-r--r--indra/llappearanceutility/llbakingjointmesh.h45
-rw-r--r--indra/llappearanceutility/llbakingprocess.cpp47
-rw-r--r--indra/llappearanceutility/llbakingprocess.h60
-rw-r--r--indra/llappearanceutility/llbakingshadermgr.cpp250
-rw-r--r--indra/llappearanceutility/llbakingshadermgr.h137
-rw-r--r--indra/llappearanceutility/llbakingtexlayer.cpp373
-rw-r--r--indra/llappearanceutility/llbakingtexlayer.h77
-rw-r--r--indra/llappearanceutility/llbakingtexture.cpp81
-rw-r--r--indra/llappearanceutility/llbakingtexture.h69
-rw-r--r--indra/llappearanceutility/llbakingwearable.cpp77
-rw-r--r--indra/llappearanceutility/llbakingwearable.h48
-rw-r--r--indra/llappearanceutility/llbakingwearablesdata.cpp131
-rw-r--r--indra/llappearanceutility/llbakingwearablesdata.h55
-rw-r--r--indra/llappearanceutility/llbakingwindow.cpp94
-rw-r--r--indra/llappearanceutility/llbakingwindow.h45
-rwxr-xr-xindra/llappearanceutility/llprocessparams.cpp281
-rw-r--r--indra/llappearanceutility/llprocessparams.h49
-rw-r--r--indra/llappearanceutility/llprocessskin.cpp118
-rw-r--r--indra/llappearanceutility/llprocessskin.h43
-rw-r--r--indra/llappearanceutility/llprocesstexture.cpp285
-rw-r--r--indra/llappearanceutility/llprocesstexture.h63
-rw-r--r--indra/llappearanceutility/tests/joint-offsets.xml1
-rw-r--r--indra/llappearanceutility/tests/joint-offsets.xml.output1
-rw-r--r--indra/llappearanceutility/tests/params.xml1140
-rw-r--r--indra/llappearanceutility/tests/params.xml.output1
-rw-r--r--indra/llappearanceutility/tests/texture.llsd.binarybin0 -> 170423 bytes
-rw-r--r--indra/llappearanceutility/tests/texture.llsd.outputbin0 -> 112866 bytes
-rw-r--r--indra/llrender/llglheaders.h2
-rw-r--r--indra/llrender/llimagegl.cpp6
50 files changed, 5058 insertions, 60 deletions
diff --git a/.gitattributes b/.gitattributes
index 5c7f5b73b0..e7c2f83897 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -24,6 +24,10 @@
*.dll binary
*.exe binary
+# Test Resources
+*.binary binary
+*.output binary
+
# Files with Windows line endings
VivoxAUP.txt text eol=crlf
FILES_ARE_UNICODE_UTF-16LE.txt text eol=crlf
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 4c948e5586..db7d21b961 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -298,6 +298,16 @@ jobs:
path: |
${{ steps.build.outputs.physicstpv }}
+ - name: Upload appearance utility package
+ uses: actions/upload-artifact@v4
+ if: steps.build.outputs.appearanceutility
+ with:
+ name: "${{ steps.build.outputs.artifact }}-appearanceutility"
+ # emitted by build.sh, zero or one lines
+ path: |
+ ${{ steps.build.outputs.appearanceutility }}
+
+
sign-and-package-windows:
env:
AZURE_KEY_VAULT_URI: ${{ secrets.AZURE_KEY_VAULT_URI }}
diff --git a/autobuild.xml b/autobuild.xml
index 78b235fabb..85b3ea4e63 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -1241,36 +1241,6 @@
<key>description</key>
<string>Libxml2 is the XML C parser and toolkit developed for the Gnome project.</string>
</map>
- <key>llappearance_utility</key>
- <map>
- <key>platforms</key>
- <map>
- <key>linux</key>
- <map>
- <key>archive</key>
- <map>
- <key>hash</key>
- <string>fddd634dec5ec03924d62cc774f7f8ea</string>
- <key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/p64_viewer-llappearance-utility/rev/317266/arch/Linux/installer/llappearance_utility-0.0.1-linux-317266.tar.bz2</string>
- </map>
- <key>name</key>
- <string>linux</string>
- </map>
- </map>
- <key>license</key>
- <string>Proprietary</string>
- <key>license_file</key>
- <string>LICENSES/llappearanceutility.txt</string>
- <key>copyright</key>
- <string>Copyright (c) 2000-2012, Linden Research, Inc.</string>
- <key>version</key>
- <string>0.0.1</string>
- <key>name</key>
- <string>llappearance_utility</string>
- <key>description</key>
- <string>Linden Lab appearance utility for server-side avatar baking services.</string>
- </map>
<key>llca</key>
<map>
<key>platforms</key>
diff --git a/build.sh b/build.sh
index ba90065827..0a55941812 100755
--- a/build.sh
+++ b/build.sh
@@ -119,11 +119,13 @@ EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
metadata=()
symbolfile=()
physicstpv=()
+appearanceutility=()
# and dump them to GITHUB_OUTPUT when done
cleanup="$cleanup ; \
arrayoutput metadata ; \
arrayoutput symbolfile ; \
-arrayoutput physicstpv"
+arrayoutput physicstpv ; \
+arrayoutput appearanceutility"
trap "$cleanup" EXIT
arrayoutput()
@@ -537,6 +539,14 @@ then
symbolfile+=("$symbol_file")
fi
+ # Upload our apperance utility packages for linux
+ if [ "$arch" == "Linux" ]
+ then
+ appearance_utility_dir="${build_dir}/llappearanceutility"
+ appearanceutility+=("${appearance_utility_dir}/appearance-utility-bin")
+ appearanceutility+=("${appearance_utility_dir}/appearance-utility-headless-bin")
+ fi
+
# Upload the llphysicsextensions_tpv package, if one was produced
# Only upload this package when building the private repo so the
# artifact is private.
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index 8fde58fa43..571465c707 100644
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -103,16 +103,8 @@ add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins)
endif (ENABLE_MEDIA_PLUGINS)
if (LINUX)
- if (INSTALL_PROPRIETARY)
- include(LLAppearanceUtility)
- add_subdirectory(${LLAPPEARANCEUTILITY_SRC_DIR} ${LLAPPEARANCEUTILITY_BIN_DIR})
- endif (INSTALL_PROPRIETARY)
-elseif (WINDOWS)
- # cmake EXISTS requires an absolute path, see indra/cmake/Variables.cmake
- if (EXISTS ${VIEWER_DIR}win_setup)
- add_subdirectory(${VIEWER_DIR}win_setup)
- endif (EXISTS ${VIEWER_DIR}win_setup)
-endif (LINUX)
+ add_subdirectory(llappearanceutility)
+endif()
if (WINDOWS)
# cmake EXISTS requires an absolute path, see indra/cmake/Variables.cmake
diff --git a/indra/cmake/LLAppearanceUtility.cmake b/indra/cmake/LLAppearanceUtility.cmake
deleted file mode 100644
index 0eb3c723d5..0000000000
--- a/indra/cmake/LLAppearanceUtility.cmake
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- cmake -*-
-include(Prebuilt)
-include(Boost)
-
-# Linux proprietary build only
-if (INSTALL_PROPRIETARY)
- if(LINUX)
- use_prebuilt_binary(llappearance_utility)
- set(LLAPPEARANCEUTILITY_SRC_DIR ${LIBS_PREBUILT_DIR}/llappearanceutility/src)
- set(LLAPPEARANCEUTILITY_BIN_DIR ${CMAKE_BINARY_DIR}/llappearanceutility)
- endif (LINUX)
-endif (INSTALL_PROPRIETARY)
diff --git a/indra/llappearance/llavatarappearancedefines.cpp b/indra/llappearance/llavatarappearancedefines.cpp
index 47798844bc..f26795123f 100644
--- a/indra/llappearance/llavatarappearancedefines.cpp
+++ b/indra/llappearance/llavatarappearancedefines.cpp
@@ -260,7 +260,7 @@ ETextureIndex LLAvatarAppearanceDictionary::bakedToLocalTextureIndex(EBakedTextu
return getBakedTexture(index)->mTextureIndex;
}
-EBakedTextureIndex LLAvatarAppearanceDictionary::findBakedByRegionName(std::string name)
+EBakedTextureIndex LLAvatarAppearanceDictionary::findBakedByRegionName(const std::string& name) const
{
U8 index = 0;
while (index < BAKED_NUM_INDICES)
@@ -277,7 +277,7 @@ EBakedTextureIndex LLAvatarAppearanceDictionary::findBakedByRegionName(std::stri
return BAKED_NUM_INDICES;
}
-EBakedTextureIndex LLAvatarAppearanceDictionary::findBakedByImageName(std::string name)
+EBakedTextureIndex LLAvatarAppearanceDictionary::findBakedByImageName(const std::string& name) const
{
U8 index = 0;
while (index < BAKED_NUM_INDICES)
diff --git a/indra/llappearance/llavatarappearancedefines.h b/indra/llappearance/llavatarappearancedefines.h
index 50a72a45a5..0f9edc1ca0 100644
--- a/indra/llappearance/llavatarappearancedefines.h
+++ b/indra/llappearance/llavatarappearancedefines.h
@@ -238,8 +238,8 @@ public:
ETextureIndex bakedToLocalTextureIndex(EBakedTextureIndex t) const;
// find a baked texture index based on its name
- EBakedTextureIndex findBakedByRegionName(std::string name);
- EBakedTextureIndex findBakedByImageName(std::string name);
+ EBakedTextureIndex findBakedByRegionName(const std::string& name) const;
+ EBakedTextureIndex findBakedByImageName(const std::string& name) const;
// Given a texture entry, determine which wearable type owns it.
LLWearableType::EType getTEWearableType(ETextureIndex index) const;
diff --git a/indra/llappearance/lltexlayer.cpp b/indra/llappearance/lltexlayer.cpp
index b3800e6981..389efe47a9 100644
--- a/indra/llappearance/lltexlayer.cpp
+++ b/indra/llappearance/lltexlayer.cpp
@@ -435,6 +435,31 @@ const std::string LLTexLayerSet::getBodyRegionName() const
return mInfo->mBodyRegion;
}
+// virtual
+void LLTexLayerSet::asLLSD(LLSD& sd) const
+{
+ sd["visible"] = LLSD::Boolean(isVisible());
+ LLSD layer_list_sd;
+ layer_list_t::const_iterator layer_iter = mLayerList.begin();
+ layer_list_t::const_iterator layer_end = mLayerList.end();
+ for(; layer_iter != layer_end; ++layer_iter)
+ {
+ LLSD layer_sd;
+ LLTexLayerInterface* layer = (*layer_iter);
+ if (layer)
+ {
+ layer->asLLSD(layer_sd);
+ }
+ layer_list_sd.append(layer_sd);
+ }
+ LLSD mask_list_sd;
+ LLSD info_sd;
+ sd["layers"] = layer_list_sd;
+ sd["masks"] = mask_list_sd;
+ sd["info"] = info_sd;
+}
+
+
void LLTexLayerSet::destroyComposite()
{
if( mComposite )
diff --git a/indra/llappearance/lltexlayer.h b/indra/llappearance/lltexlayer.h
index 876ea6f600..6b501474d6 100644
--- a/indra/llappearance/lltexlayer.h
+++ b/indra/llappearance/lltexlayer.h
@@ -220,6 +220,8 @@ public:
static bool sHasCaches;
+ virtual void asLLSD(LLSD& sd) const;
+
protected:
typedef std::vector<LLTexLayerInterface *> layer_list_t;
layer_list_t mLayerList;
diff --git a/indra/llappearance/lltexlayerparams.h b/indra/llappearance/lltexlayerparams.h
index 5e785e4f3e..116eb3bee0 100644
--- a/indra/llappearance/lltexlayerparams.h
+++ b/indra/llappearance/lltexlayerparams.h
@@ -30,6 +30,7 @@
#include "llpointer.h"
#include "v4color.h"
#include "llviewervisualparam.h"
+#include <atomic>
class LLAvatarAppearance;
class LLImageRaw;
diff --git a/indra/llappearanceutility/CMakeLists.txt b/indra/llappearanceutility/CMakeLists.txt
new file mode 100644
index 0000000000..1d4e5309ba
--- /dev/null
+++ b/indra/llappearanceutility/CMakeLists.txt
@@ -0,0 +1,78 @@
+# -*- cmake -*-
+
+project(appearance_utility)
+
+include(00-Common)
+include(Boost)
+include(LLAppearance)
+include(LLCommon)
+include(LLImage)
+include(LLMath)
+include(LLWindow)
+include(Linking)
+
+set(appearance_utility_SOURCE_FILES
+ appearance_utility.cpp
+ llappappearanceutility.cpp
+ llbakingavatar.cpp
+ llbakingjoint.cpp
+ llbakingjointmesh.cpp
+ llbakingprocess.cpp
+ llbakingshadermgr.cpp
+ llbakingtexlayer.cpp
+ llbakingtexture.cpp
+ llbakingwearable.cpp
+ llbakingwearablesdata.cpp
+ llbakingwindow.cpp
+ llprocessparams.cpp
+ llprocessskin.cpp
+ llprocesstexture.cpp
+ )
+
+set(appearance_utility_HEADER_FILES
+ CMakeLists.txt
+ llappappearanceutility.h
+ llbakingavatar.h
+ llbakingjoint.h
+ llbakingjointmesh.h
+ llbakingprocess.h
+ llbakingshadermgr.h
+ llbakingtexlayer.h
+ llbakingtexture.h
+ llbakingwearable.h
+ llbakingwearablesdata.h
+ llbakingwindow.h
+ llprocessparams.h
+ llprocessskin.h
+ llprocesstexture.h
+ )
+
+set_source_files_properties(${appearance_utility_HEADER_FILES}
+ PROPERTIES HEADER_FILES_ONLY TRUE)
+
+list(APPEND appearance_utility_SOURCE_FILES ${appearance_utility_HEADER_FILES})
+
+add_executable(appearance-utility-bin ${appearance_utility_SOURCE_FILES})
+
+target_link_libraries(appearance-utility-bin
+ llcharacter
+ llinventory
+ llappearance
+ llwindow
+ llrender
+ llxml
+ )
+
+if (BUILD_HEADLESS)
+ add_executable(appearance-utility-headless-bin ${appearance_utility_SOURCE_FILES})
+
+ target_link_libraries(appearance-utility-headless-bin
+ llcharacter
+ llinventory
+ llappearanceheadless
+ llwindowheadless
+ llrenderheadless
+ llxml
+ )
+endif (BUILD_HEADLESS)
+
diff --git a/indra/llappearanceutility/README.md b/indra/llappearanceutility/README.md
new file mode 100644
index 0000000000..21019ffd27
--- /dev/null
+++ b/indra/llappearanceutility/README.md
@@ -0,0 +1,33 @@
+# llappearanceutility
+
+This directory contains the appearance utility employed by the bake service to process avatar textures and handle various other appearance-related functions. Please note that this utility is currently configured to build only on Linux systems.
+
+## Prerequisites
+
+Ensure the following prerequisites are met before building and testing the utility:
+
+- **X11 Display**: Ensure an X11 display is available, either virtual or physical, with the `DISPLAY` environment variable set appropriately (e.g., `DISPLAY=:1`).
+- **Linux Build Environment**: Confirm that the Second Life Viewer can be built on your Linux system.
+
+## Testing
+
+Given the constraints with GitHub runners, we instead utilize Behavior-Driven Development (BDD) tests to evaluate the `llappearanceutility` through the bake service. For local development, test inputs and their expected outputs are provided below.
+
+### Test Commands
+
+1. **Baking Textures**:
+ ```sh
+ appearance-utility-bin --agent-id de494a4f-f01a-47a4-98cf-c94ef9ecca38 --texture /viewer/indra/llappearanceutility/tests/texture.llsd.binary > /viewer/indra/llappearanceutility/tests/texture.llsd.output
+ ```
+
+2. **Generating Bake Parameters**:
+ ```sh
+ appearance-utility-bin --agent-id de494a4f-f01a-47a4-98cf-c94ef9ecca38 --params /viewer/indra/llappearanceutility/tests/params.xml > /viewer/indra/llappearanceutility/tests/params.xml.output
+ ```
+
+3. **Calculating Joint Offsets**:
+ ```sh
+ appearance-utility-bin --agent-id de494a4f-f01a-47a4-98cf-c94ef9ecca38 --joint-offsets /viewer/indra/llappearanceutility/tests/joint-offsets.xml > /viewer/indra/llappearanceutility/tests/joint-offsets.xml.output
+ ```
+
+These commands will execute the utility with specific test inputs and direct the output to corresponding files for validation. \ No newline at end of file
diff --git a/indra/llappearanceutility/appearance_utility.cpp b/indra/llappearanceutility/appearance_utility.cpp
new file mode 100644
index 0000000000..88034cd171
--- /dev/null
+++ b/indra/llappearanceutility/appearance_utility.cpp
@@ -0,0 +1,66 @@
+/**
+ * @file appearance_utility.cpp
+ * @author Don Kjer <don@lindenlab.com>, Nyx Linden
+ * @brief Utility for processing avatar appearance without a full viewer implementation.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// linden includes
+#include "linden_common.h"
+#include "llapr.h"
+
+// project includes
+#include "llappappearanceutility.h"
+
+int main(int argc, char** argv)
+{
+ // Create an application instance.
+ ll_init_apr();
+ LLAppAppearanceUtility* app = new LLAppAppearanceUtility(argc, argv);
+
+ // Assume success, unless exception is thrown.
+ EResult rv = RV_SUCCESS;
+ try
+ {
+ // Process command line and initialize system.
+ if (app->init())
+ {
+ // Run process.
+ app->frame();
+ }
+ }
+ catch (LLAppException& e)
+ {
+ // Deal with errors.
+ rv = e.getStatusCode();
+ }
+
+ // Clean up application instance.
+ app->cleanup();
+ delete app;
+ ll_cleanup_apr();
+
+ return (int) rv;
+}
+
+
diff --git a/indra/llappearanceutility/llappappearanceutility.cpp b/indra/llappearanceutility/llappappearanceutility.cpp
new file mode 100644
index 0000000000..d223c859ab
--- /dev/null
+++ b/indra/llappearanceutility/llappappearanceutility.cpp
@@ -0,0 +1,681 @@
+/**
+ * @file llappappearanceutility.cpp
+ * @brief Implementation of LLAppAppearanceUtility class.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include <iostream>
+#include <sstream>
+#include <string>
+#include "boost/bind.hpp"
+
+// linden includes
+#include "linden_common.h"
+
+#include "llapr.h"
+#include "llerrorcontrol.h"
+#include "llfasttimer.h"
+#include "llgl.h"
+#include "llmd5.h"
+#include "llsd.h"
+#include "llsdserialize.h"
+#include "llsdutil.h"
+#include "llquantize.h"
+#include "lltreeiterators.h"
+#include "v3color.h"
+#include "llwindow.h"
+#include "lltrace.h"
+
+// appearance includes
+#include "llavatarappearance.h"
+#include "llwearabletype.h"
+
+// project includes
+#include "llappappearanceutility.h"
+#include "llbakingprocess.h"
+#include "llprocessparams.h"
+#include "llprocesstexture.h"
+#include "llprocessskin.h"
+
+const std::string NOTHING_EXTRA("");
+
+////////////////////////////////////////////
+// LLAppException
+////////////////////////////////////////////
+
+static const std::string MESSAGE_RV_UNKNOWN("Unknown error.");
+static const std::string MESSAGE_RV_ARGUMENTS
+("Invalid arguments: ");
+static const std::string MESSAGE_RV_UNABLE_OPEN("Unable to open file: ");
+static const std::string MESSAGE_RV_UNABLE_TO_PARSE("Unable to parse input LLSD.");
+static const std::string MESSAGE_RV_UNABLE_TO_DECODE("Unable to decode input J2C.");
+static const std::string MESSAGE_RV_UNABLE_TO_ENCODE("Unable to encode output J2C.");
+static const std::string MESSAGE_RV_UNABLE_TO_INIT_GL("Unable to initialize GL.");
+static const std::string MESSAGE_RV_UNABLE_TO_BAKE("Unable to bake texture.");
+static const std::string MESSAGE_RV_INVALID_SKIN_BLOCK("Invalid skin block.");
+static const std::string MESSAGE_DUPLICATE_MODES = "Cannot specify more than one process mode.";
+
+
+LLAppException::LLAppException(EResult status_code, const std::string& extra) :
+ mStatusCode(status_code)
+{
+ switch(status_code)
+ {
+ case RV_UNKNOWN_ERROR:
+ printErrorLLSD("unknown", MESSAGE_RV_UNKNOWN);
+ case RV_BAD_ARGUMENTS:
+ printErrorLLSD("arguments", MESSAGE_RV_ARGUMENTS + extra);
+ break;
+ case RV_UNABLE_OPEN:
+ printErrorLLSD("file", MESSAGE_RV_UNABLE_OPEN + extra);
+ break;
+ case RV_UNABLE_TO_PARSE:
+ printErrorLLSD("input", MESSAGE_RV_UNABLE_TO_PARSE + extra);
+ break;
+ case RV_UNABLE_TO_DECODE:
+ printErrorLLSD("input", MESSAGE_RV_UNABLE_TO_DECODE + extra);
+ break;
+ case RV_UNABLE_TO_ENCODE:
+ printErrorLLSD("input", MESSAGE_RV_UNABLE_TO_ENCODE + extra);
+ break;
+ case RV_UNABLE_TO_INIT_GL:
+ printErrorLLSD("input", MESSAGE_RV_UNABLE_TO_INIT_GL + extra);
+ break;
+ case RV_UNABLE_TO_BAKE:
+ printErrorLLSD("input", MESSAGE_RV_UNABLE_TO_BAKE + extra);
+ break;
+ case RV_INVALID_SKIN_BLOCK:
+ printErrorLLSD("input", MESSAGE_RV_INVALID_SKIN_BLOCK + extra);
+ break;
+ default:
+ printErrorLLSD("arguments", "Unknown exception.");
+ break;
+ }
+}
+
+void LLAppException::printErrorLLSD(const std::string& key, const std::string& message)
+{
+ LLSD error_llsd;
+ error_llsd["success"] = false;
+ error_llsd["error"]["key"] = key;
+ error_llsd["error"]["message"] = message;
+
+ std::cerr << LLSDOStreamer<LLSDXMLFormatter>(error_llsd);
+}
+
+
+
+////////////////////////////////////////////
+// LLAppAppearanceUtility
+////////////////////////////////////////////
+
+///////// Option Parsing /////////
+
+// Simple usage command.
+class LLProcessUsage : public LLBakingProcess
+{
+public:
+ LLProcessUsage(LLAppAppearanceUtility* app) :
+ LLBakingProcess(app) {}
+ void process(std::ostream& output) override
+ {
+ mApp->usage(output);
+ }
+};
+
+
+static const apr_getopt_option_t APPEARANCE_UTILITY_OPTIONS[] =
+{
+ {"params", 'p', 0, "Generate appearance parameters for an agent."},
+ {"texture", 't', 0, "Generate baked texture for a slot."},
+ {"output", 'o', 1, "The output file to write to. Default is stdout"},
+ {"agent-id", 'a', 1, "The agent-id of the user."},
+ {"bake-size", 'b', 1, "The bake texture size. eg use 512 for 512*512 textures, 1024 for 1024*1024 textures" },
+ //{"grid", 'g', 1, "The grid."},
+ {"debug", 'd', 0, "Enable debug spam. Default is warn/info spam only."},
+ {"treemap", 'm', 1, "Output LLFrameTimer to specified file in graphviz treemap/pachwork format."},
+ {"threshold", 's', 1, "Percent threshold of max LLFrameTimer time in order to appear on treemap. Default is 1%."},
+ {"joint-offsets",'j',0,"Extract joint positions from skin."},
+ {"help", 'h', 0, "Print the help message."},
+ {0, 0, 0, 0}
+};
+
+void LLAppAppearanceUtility::usage(std::ostream& ostr)
+{
+ ostr << "Utilities for processing agent appearance data."
+ << std::endl << std::endl
+ << "Usage:" << std::endl
+ << "\t" << mAppName << " [options] filename" << std::endl << std::endl
+ << "Will read from stdin if filename is set to '-'." << std::endl << std::endl
+ << "Options:" << std::endl;
+ const apr_getopt_option_t* option = &APPEARANCE_UTILITY_OPTIONS[0];
+ while(option->name)
+ {
+ ostr << "\t--" << option->name << "\t\t"
+ << option->description << std::endl;
+ ++option;
+ }
+ ostr << std::endl << "Return Values:" << std::endl
+ << "\t0\t\tSuccess." << std::endl
+ << "\t1\t\tUnknown error." << std::endl
+ << "\t2\t\tBad arguments." << std::endl
+ << "\t3\t\tUnable to open file. Possibly wrong filename"
+ << " or bad permissions." << std::endl
+ << "\t4\t\tUnable to parse input LLSD." << std::endl
+ << std::endl
+ << "Output:" << std::endl
+ << "If a non-zero status code is returned, additional error information"
+ << " will be returned on stderr." << std::endl
+ << "* This will be in the form of an LLSD document." << std::endl
+ << "* Check ['error']['message'] to get a human readable message." << std::endl
+ << "If a zero status code is returned, processed output will be written"
+ << " to the file specified by --out (or stdout, if not specified)." << std::endl
+ << std::endl
+ << std::endl;
+}
+
+
+/////// LLApp Interface ////////
+
+LLAppAppearanceUtility::LLAppAppearanceUtility(int argc, char** argv) :
+ LLApp(),
+ mArgc(argc),
+ mArgv(argv),
+ mProcess(nullptr),
+ mInput(nullptr),
+ mOutput(nullptr),
+ mAppName(argv[0]),
+ mDebugMode(false),
+ mTreeMapThreshold(1),
+ mBakeTextureSize(512)
+{
+}
+
+// virtual
+LLAppAppearanceUtility::~LLAppAppearanceUtility()
+{
+}
+
+void LLAppAppearanceUtility::verifyNoProcess()
+{
+ if (mProcess)
+ {
+ std::cerr << "Invalid arguments. " << MESSAGE_DUPLICATE_MODES << std::endl;
+ usage(std::cerr);
+ throw LLAppException(RV_BAD_ARGUMENTS, MESSAGE_DUPLICATE_MODES);
+ }
+}
+
+void LLAppAppearanceUtility::parseArguments()
+{
+ ////// BEGIN OPTION PARSING //////
+ // Check for '-' as last option, since apr doesn't seem to like that.
+ if (std::string(mArgv[mArgc-1]) == "-")
+ {
+ mInputFilename.assign("-");
+ mArgc--;
+ }
+
+ apr_status_t apr_err;
+ const char* opt_arg = nullptr;
+ int opt_id = 0;
+ apr_getopt_t* os = nullptr;
+ if(APR_SUCCESS != apr_getopt_init(&os, gAPRPoolp, mArgc, mArgv))
+ {
+ std::cerr << "Unable to initialize apr" << std::endl;
+ throw LLAppException(RV_UNKNOWN_ERROR);
+ }
+
+ //std::string grid;
+ while(true)
+ {
+ apr_err = apr_getopt_long(os, APPEARANCE_UTILITY_OPTIONS, &opt_id, &opt_arg);
+ if(APR_STATUS_IS_EOF(apr_err)) break;
+ if(apr_err)
+ {
+ char buf[MAX_STRING]; /* Flawfinder: ignore */
+ std::cerr << "Error parsing options: "
+ << apr_strerror(apr_err, buf, MAX_STRING) << std::endl;
+ usage(std::cerr);
+ throw LLAppException(RV_BAD_ARGUMENTS, buf);
+ }
+ switch (opt_id)
+ {
+ case 'h':
+ verifyNoProcess();
+ mProcess = new LLProcessUsage(this);
+ break;
+ case 'p':
+ verifyNoProcess();
+ mProcess = new LLProcessParams(this);
+ break;
+ case 't':
+ verifyNoProcess();
+ mProcess = new LLProcessTexture(this);
+ break;
+ case 'j':
+ verifyNoProcess();
+ mProcess = new LLProcessSkin( this );
+ break;
+ case 'o':
+ mOutputFilename.assign(opt_arg);
+ break;
+ case 'a':
+ mAgentID.set(opt_arg);
+ if (mAgentID.isNull())
+ {
+ const char* INVALID_AGENT_ID="agent-id must be a valid uuid.";
+ std::cerr << "Invalid arguments. " << INVALID_AGENT_ID << std::endl;
+ usage(std::cerr);
+ throw LLAppException(RV_BAD_ARGUMENTS, INVALID_AGENT_ID);
+ }
+ break;
+ case 'b':
+ mBakeTextureSize = atoi(opt_arg);
+ break;
+ //case 'g':
+ // grid = opt_arg;
+ // break;
+ case 'd':
+ mDebugMode = true;
+ break;
+ case 'm':
+ mTreeMapFilename.assign(opt_arg);
+ break;
+ case 's':
+ mTreeMapThreshold = atoi(opt_arg);
+ break;
+ default:
+ usage(std::cerr);
+ throw LLAppException(RV_BAD_ARGUMENTS, "Unknown option.");
+ }
+ }
+
+ if ("-" != mInputFilename)
+ {
+ bool valid_input_filename = false;
+ // Try to grab the input filename.
+ if (os->argv && os->argv[os->ind])
+ {
+ mInputFilename.assign(os->argv[os->ind]);
+ if (! mInputFilename.empty() )
+ {
+ valid_input_filename = true;
+ }
+ }
+ if (!valid_input_filename)
+ {
+ const char* INVALID_FILENAME="Must specify input file.";
+ std::cerr << "Invalid arguments. " << INVALID_FILENAME << std::endl;
+ usage(std::cerr);
+ throw LLAppException(RV_BAD_ARGUMENTS, INVALID_FILENAME);
+ }
+ }
+
+ ////// END OPTION PARSING //////
+}
+
+void LLAppAppearanceUtility::validateArguments()
+{
+ ///// BEGIN ARGUMENT VALIDATION /////
+
+ // Make sure we have a command specified.
+ if (!mProcess)
+ {
+ const char* INVALID_MODE="No process mode specified.";
+ std::cerr << "Invalid arguments. " << INVALID_MODE
+ << std::endl;
+ usage(std::cerr);
+ throw LLAppException(RV_BAD_ARGUMENTS, INVALID_MODE);
+ }
+
+ ///// END ARGUMENT VALIDATION /////
+}
+
+void LLAppAppearanceUtility::initializeIO()
+{
+ ///// BEGIN OPEN INPUT FILE ////
+
+ if ( "-" == mInputFilename )
+ {
+ // Read unformated data from stdin in to memory.
+ std::stringstream* data = new std::stringstream();
+ const S32 BUFFER_SIZE = BUFSIZ;
+ char buffer[BUFFER_SIZE];
+ while (true)
+ {
+ std::cin.read(buffer, BUFFER_SIZE);
+ // Check if anything out of the ordinary happened.
+ if (!std::cin)
+ {
+ // See if something 'really bad' happened, or if we just
+ // used up all of our buffer.
+ if (std::cin.bad())
+ {
+ std::cerr << "Problem reading standard input." << std::endl;
+ delete data;
+ throw (RV_UNKNOWN_ERROR);
+ }
+ else
+ {
+ // Output normally.
+ data->write(buffer, std::cin.gcount());
+ if (std::cin.eof()) break;
+
+ // Clear this problem. We have handled it.
+ std::cin.clear();
+ }
+ }
+ else
+ {
+ data->write(buffer, std::cin.gcount());
+ if (std::cin.eof()) break;
+ }
+ }
+ mInput = data;
+ }
+ else
+ {
+ // Make sure we can open the input file.
+ std::ifstream* input_file = new std::ifstream();
+ input_file->open( mInputFilename.c_str(), std::fstream::in | std::fstream::binary );
+ if ( input_file->fail())
+ {
+ std::cerr << "Couldn't open input file '" << mInputFilename << "'." << std::endl;
+ delete input_file;
+ throw LLAppException(RV_UNABLE_OPEN, mInputFilename);
+ }
+ mInput = input_file;
+ }
+ ///// END OPEN INPUT FILE ////
+
+ ///// BEGIN OPEN OUTPUT FILE ////
+
+ if ("" == mOutputFilename)
+ {
+ mOutput = &std::cout;
+ }
+ else
+ {
+ // Make sure we can open the output file.
+ std::fstream* output_file = new std::fstream();
+ output_file->open( mOutputFilename.c_str(), std::fstream::out );
+ if ( output_file->fail() )
+ {
+ std::cerr << "Couldn't open output file '" << mOutputFilename << "'." << std::endl;
+ delete output_file;
+ throw LLAppException(RV_UNABLE_OPEN, mOutputFilename);
+ }
+ mOutput = output_file;
+ }
+ ///// END OPEN OUTPUT FILE ////
+
+ ///// BEGIN INPUT PARSING ////
+ if (mProcess)
+ {
+ mProcess->parseInput( *mInput );
+ }
+ ///// END INPUT PARSING ////
+}
+
+class LLPassthroughTranslationBridge : public LLTranslationBridge
+{
+public:
+ virtual std::string getString(const std::string &xml_desc)
+ {
+ // Just pass back the input string.
+ return xml_desc;
+ }
+};
+
+
+bool LLAppAppearanceUtility::init()
+{
+ parseArguments();
+
+ bool log_to_stderr = true;
+ LLError::initForApplication(".", ".", true);
+ if (mDebugMode)
+ {
+ mRecording.start();
+ LLError::setDefaultLevel(LLError::LEVEL_DEBUG);
+ }
+ else
+ {
+ LLError::setDefaultLevel(LLError::LEVEL_WARN);
+ }
+
+ validateArguments();
+
+ LL_DEBUGS() << "BakeSize: " << mBakeTextureSize << LL_ENDL;
+
+ // Initialize classes.
+ // Values taken from settings.xml.
+ const bool USE_TEXTURE_NEW_BYTE_RANGE=true;
+ const S32 TEXTURE_REVERSE_BYTE_RANGE=50;
+ LLImage::initClass(USE_TEXTURE_NEW_BYTE_RANGE, TEXTURE_REVERSE_BYTE_RANGE);
+ const bool SKIP_ANALYZE_ALPHA=true;
+
+ LLTranslationBridge::ptr_t trans = std::make_shared<LLPassthroughTranslationBridge>();
+ LLWearableType::initParamSingleton(trans);
+
+ // *TODO: Create a texture bridge?
+ LLAvatarAppearance::initClass();
+
+ initializeIO();
+ if (mProcess)
+ {
+ mProcess->init();
+ }
+ return true;
+}
+
+
+void add_cluster(LLTrace::Recording& recording, std::ostream& tree, LLTrace::BlockTimerStatHandle& node, std::vector < S32 > & clusters, F64Milliseconds threshold)
+{
+ LLMD5 hash;
+ hash.update((const unsigned char*)node.getName().c_str(), node.getName().size());
+ hash.finalize();
+ char buf[33];
+ hash.hex_digest(buf);
+ buf[6] = 0;
+ LLColor3 color(buf);
+ if (color.brightness() < 0.25f)
+ {
+ color.normalize();
+ }
+ std::ostringstream color_str;
+ color_str << "#" << std::hex << std::setfill('0') << std::setw(2)
+ << (S32) F32_to_U8(color.mV[0], 0.0f, 1.0f)
+ << (S32) F32_to_U8(color.mV[1], 0.0f, 1.0f)
+ << (S32) F32_to_U8(color.mV[2], 0.0f, 1.0f);
+
+ std::vector<S32>::iterator iter = clusters.begin();
+ std::vector<S32>::iterator end = clusters.end();
+ std::ostringstream padding;
+ for(; iter != end; ++iter)
+ {
+ padding << " ";
+ }
+
+ std::ostringstream node_id;
+ bool first = true;
+ iter = clusters.begin();
+ for(; iter != end; ++iter)
+ {
+ if (!first)
+ {
+ node_id << "_";
+ }
+ first = false;
+ node_id << (*iter);
+ }
+
+ if (node.getChildren().size() == 0)
+ {
+ F64Milliseconds leaf_time_ms(recording.getSum(node));
+ if (leaf_time_ms > threshold)
+ {
+ tree << padding.str() << "n" << node_id.str() << " ["
+ << "label=\"" << node.getName() << " (" << leaf_time_ms.value() << ")\" "
+ << "fillcolor=\"" << color_str.str() << "\" "
+ << "area=" << leaf_time_ms.value() / 10 << "]" << std::endl;
+ }
+ }
+ else
+ {
+ if (clusters.size())
+ {
+ tree << padding.str() << "subgraph cluster" << node_id.str();
+ tree << " {" << std::endl;
+ }
+
+ S32Milliseconds node_area(recording.getSum(node));
+ std::vector<LLTrace::BlockTimerStatHandle*>::iterator child_iter = node.getChildren().begin();
+ for (S32 num=0; child_iter != node.getChildren().end(); ++child_iter, ++num)
+ {
+ clusters.push_back(num);
+ add_cluster(recording, tree, *(*child_iter), clusters, threshold);
+ clusters.pop_back();
+ node_area -= recording.getSum(*(*child_iter));
+ }
+
+ S32Milliseconds node_time_ms(node_area);
+ if (node_time_ms > threshold)
+ {
+ tree << padding.str() << "n" << node_id.str() << " ["
+ << "label=\"" << node.getName() << " (" << node_time_ms.value() << ")\" "
+ << "fillcolor=\"" << color_str.str() << "\" "
+ << "area=" << node_time_ms.value() / 10 << "]" << std::endl;
+ }
+ if (clusters.size())
+ {
+ tree << padding.str() << "}" << std::endl;;
+ }
+ }
+}
+
+bool LLAppAppearanceUtility::cleanup()
+{
+ if (mProcess)
+ {
+ mProcess->cleanup();
+ }
+
+ // Spam fast timer information in debug mode.
+ if (mDebugMode)
+ {
+ mRecording.stop();
+ LLTrace::BlockTimer::processTimes();
+
+ S32Milliseconds max_time_ms(0);
+ for (LLTrace::block_timer_tree_df_iterator_t it = LLTrace::begin_block_timer_tree_df(LLTrace::BlockTimer::getRootTimeBlock());
+ it != LLTrace::end_block_timer_tree_df();
+ ++it)
+ {
+ LLTrace::BlockTimerStatHandle* idp = (*it);
+ // Skip near-zero time leafs.
+ S32Milliseconds leaf_time_ms(mRecording.getSum(*idp));
+ if (leaf_time_ms > max_time_ms) max_time_ms = leaf_time_ms;
+ if ((S32Milliseconds)0 == leaf_time_ms) continue;
+
+ std::vector< LLTrace::BlockTimerStatHandle* > parents;
+ LLTrace::BlockTimerStatHandle* parentp = idp->getParent();
+ while (parentp)
+ {
+ parents.push_back(parentp);
+ if (parentp->getParent() == parentp) break;
+ parentp = parentp->getParent();
+ }
+
+ std::ostringstream fullname;
+ bool is_first = true;
+ for ( std::vector< LLTrace::BlockTimerStatHandle* >::reverse_iterator iter = parents.rbegin();
+ iter != parents.rend(); ++iter)
+ {
+ // Skip root
+ if (is_first)
+ {
+ is_first = false;
+ continue;
+ }
+ LLTrace::BlockTimerStatHandle* parent_idp = (*iter);
+ U32Milliseconds time_ms(mRecording.getSum(parent_idp->selfTime()));
+ fullname << parent_idp->getName() << " ";
+ fullname << "(";
+ if (time_ms > (U32Milliseconds)0)
+ {
+ fullname << time_ms.value() << " ms, ";
+ }
+ fullname << mRecording.getSum(parent_idp->callCount()) << " call)-> ";
+ }
+ LL_DEBUGS() << fullname.str() << LL_ENDL;
+ }
+ if (!mTreeMapFilename.empty())
+ {
+ std::ofstream tree(mTreeMapFilename.c_str());
+ tree << "graph G {" << std::endl;
+ tree << " node[style=filled]" << std::endl;
+
+ LLTrace::BlockTimerStatHandle& root = LLTrace::BlockTimer::getRootTimeBlock();
+ std::vector<S32> clusters;
+ add_cluster(mRecording, tree, root, clusters, (((F32) mTreeMapThreshold / 100.f) * max_time_ms) );
+
+ tree << "}" << std::endl;
+
+ LL_DEBUGS() << "To generate a treemap of LLFrameTimer results, run:" << LL_ENDL;
+ LL_DEBUGS() << "patchwork " << mTreeMapFilename << " -Tpng > rendered.png" << LL_ENDL;
+ }
+ }
+
+ LLAvatarAppearance::cleanupClass();
+ LLImageGL::cleanupClass();
+ LLImage::cleanupClass();
+
+ if (mProcess)
+ {
+ delete mProcess;
+ mProcess = nullptr;
+ }
+ if ("-" != mInputFilename && mInput)
+ {
+ static_cast<std::ifstream*>(mInput)->close();
+ }
+ if ("" != mOutputFilename && mOutput)
+ {
+ static_cast<std::ofstream*>(mOutput)->close();
+ delete mOutput;
+ mOutput = nullptr;
+ }
+ delete mInput;
+ mInput = nullptr;
+ return true;
+}
+
+bool LLAppAppearanceUtility::frame()
+{
+ // This isn't really a loop, for this application. We just execute the requested command.
+ mProcess->process(*mOutput);
+ return true;
+}
+
diff --git a/indra/llappearanceutility/llappappearanceutility.h b/indra/llappearanceutility/llappappearanceutility.h
new file mode 100644
index 0000000000..80d1e8b1bf
--- /dev/null
+++ b/indra/llappearanceutility/llappappearanceutility.h
@@ -0,0 +1,108 @@
+/**
+ * @file llappappearanceutility.h
+ * @brief Declaration of LLAppAppearanceUtility class.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLAPPAPPEARANCEUTILITY_H
+#define LL_LLAPPAPPEARANCEUTILITY_H
+
+#include <exception>
+
+#include "llapp.h"
+#include "lltracerecording.h"
+
+enum EResult
+{
+ RV_SUCCESS = 0,
+ RV_UNKNOWN_ERROR,
+ RV_BAD_ARGUMENTS,
+ RV_UNABLE_OPEN,
+ RV_UNABLE_TO_PARSE,
+ RV_UNABLE_TO_DECODE,
+ RV_UNABLE_TO_ENCODE,
+ RV_UNABLE_TO_INIT_GL,
+ RV_UNABLE_TO_BAKE,
+ RV_INVALID_SKIN_BLOCK,
+};
+
+extern const std::string NOTHING_EXTRA;
+
+class LLAppAppearanceUtility;
+class LLBakingProcess;
+
+// Translate error status into error messages.
+class LLAppException : public std::exception
+{
+public:
+ LLAppException(EResult status_code, const std::string& extra = NOTHING_EXTRA);
+ EResult getStatusCode() { return mStatusCode; }
+
+private:
+ void printErrorLLSD(const std::string& key, const std::string& message);
+ EResult mStatusCode;
+};
+
+
+class LLAppAppearanceUtility : public LLApp
+{
+public:
+ LLAppAppearanceUtility(int argc, char** argv);
+ virtual ~LLAppAppearanceUtility();
+
+ // LLApp interface.
+ bool init() override;
+ bool cleanup() override;
+ bool frame() override;
+
+private:
+ // Option parsing.
+ void verifyNoProcess();
+ void parseArguments();
+ void validateArguments();
+ void initializeIO();
+public:
+ void usage(std::ostream& ostr);
+ bool isDebugMode() const { return mDebugMode; }
+ S32 bakeTextureSize() const { return mBakeTextureSize; }
+
+private:
+ int mArgc;
+ char** mArgv;
+ LLBakingProcess* mProcess;
+ std::istream* mInput;
+ std::ostream* mOutput;
+ std::string mAppName;
+ std::string mInputFilename;
+ std::string mOutputFilename;
+ LLUUID mAgentID;
+ S32 mBakeTextureSize;
+ bool mDebugMode;
+ LLTrace::Recording mRecording;
+ S32 mTreeMapThreshold;
+ std::string mTreeMapFilename;
+};
+
+
+#endif /* LL_LLAPPAPPEARANCEUTILITY_H */
+
diff --git a/indra/llappearanceutility/llbakingavatar.cpp b/indra/llappearanceutility/llbakingavatar.cpp
new file mode 100644
index 0000000000..426fa705e9
--- /dev/null
+++ b/indra/llappearanceutility/llbakingavatar.cpp
@@ -0,0 +1,177 @@
+/**
+ * @File llbakingavatar.cpp
+ * @brief Implementation of LLBakingAvatar class which is a derivation of LLAvatarAppearance
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// linden includes
+#include "linden_common.h"
+#include "v3dmath.h"
+
+// appearance includes
+#include "llavatarappearancedefines.h"
+
+// project includes
+#include "llbakingavatar.h"
+#include "llbakingjoint.h"
+#include "llbakingjointmesh.h"
+#include "llbakingtexlayer.h"
+
+using namespace LLAvatarAppearanceDefines;
+
+LLBakingAvatar::LLBakingAvatar(LLWearableData* wearable_data,S32 bakeTextureSize) :
+ LLAvatarAppearance(wearable_data),
+ mBakeTextureSize(bakeTextureSize)
+{
+}
+
+// virtual
+LLBakingAvatar::~LLBakingAvatar()
+{
+}
+
+//-----------------------------------------------------------------------------
+// Implemented methods
+//-----------------------------------------------------------------------------
+
+LLAvatarJoint* LLBakingAvatar::createAvatarJoint()
+{
+ return new LLBakingJoint();
+}
+
+LLAvatarJoint* LLBakingAvatar::createAvatarJoint(S32 joint_num)
+{
+ return new LLBakingJoint(joint_num);
+}
+
+LLAvatarJointMesh* LLBakingAvatar::createAvatarJointMesh()
+{
+ return new LLBakingJointMesh();
+}
+
+LLTexLayerSet* LLBakingAvatar::createTexLayerSet()
+{
+ return new LLBakingTexLayerSet(this);
+}
+
+void LLBakingAvatar::bakedTextureDatasAsLLSD(LLSD& sd) const
+{
+ bakedtexturedata_vec_t::const_iterator baked_iter = mBakedTextureDatas.begin();
+ bakedtexturedata_vec_t::const_iterator baked_end = mBakedTextureDatas.end();
+ for (; baked_iter != baked_end; ++baked_iter)
+ {
+ LLBakingTexLayerSet* layer_set = dynamic_cast<LLBakingTexLayerSet*>(baked_iter->mTexLayerSet);
+ LLSD layer_sd;
+ layer_set->asLLSD(layer_sd);
+ sd[LLAvatarAppearance::getDictionary()->getTexture(baked_iter->mTextureIndex)->mName] = layer_sd;
+ }
+}
+
+//-----------------------------------------------------------------------------
+// (Ignored) Non-implemented methods.
+//-----------------------------------------------------------------------------
+
+void LLBakingAvatar::applyMorphMask(const U8* tex_data, S32 width, S32 height, S32 num_components,
+ LLAvatarAppearanceDefines::EBakedTextureIndex index) {}
+void LLBakingAvatar::invalidateComposite(LLTexLayerSet* layerset) {}
+void LLBakingAvatar::updateMeshTextures() {}
+void LLBakingAvatar::dirtyMesh() {}
+void LLBakingAvatar::dirtyMesh(S32 priority) {}
+void LLBakingAvatar::onGlobalColorChanged(const LLTexGlobalColor* global_color) {}
+
+bool LLBakingAvatar::isTextureDefined(LLAvatarAppearanceDefines::ETextureIndex type, U32 index) const
+{
+ return true;
+}
+
+
+//-----------------------------------------------------------------------------
+// (LLERR) Non-implemented methods.
+//-----------------------------------------------------------------------------
+
+LLVector3 LLBakingAvatar::getCharacterPosition()
+{
+ LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL;
+ return LLVector3::zero;
+}
+
+LLQuaternion LLBakingAvatar::getCharacterRotation()
+{
+ LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL;
+ return LLQuaternion::DEFAULT;
+}
+
+LLVector3 LLBakingAvatar::getCharacterVelocity()
+{
+ LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL;
+ return LLVector3::zero;
+}
+
+LLVector3 LLBakingAvatar::getCharacterAngularVelocity()
+{
+ LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL;
+ return LLVector3::zero;
+}
+
+const LLUUID& LLBakingAvatar::getID() const
+{
+ LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL;
+ return LLUUID::null;
+}
+
+void LLBakingAvatar::addDebugText(const std::string& text)
+{
+ LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL;
+}
+
+F32 LLBakingAvatar::getTimeDilation()
+{
+ LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL;
+ return 0.0f;
+}
+
+void LLBakingAvatar::getGround(const LLVector3 &inPos, LLVector3 &outPos, LLVector3 &outNorm)
+{
+ LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL;
+}
+
+F32 LLBakingAvatar::getPixelArea() const
+{
+ LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL;
+ return 0.0f;
+}
+
+LLVector3d LLBakingAvatar::getPosGlobalFromAgent(const LLVector3 &position)
+{
+ LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL;
+ return LLVector3d::zero;
+}
+
+LLVector3 LLBakingAvatar::getPosAgentFromGlobal(const LLVector3d &position)
+{
+ LL_ERRS("AppearanceUtility") << "Not implemented." << LL_ENDL;
+ return LLVector3::zero;
+}
+
+
+
diff --git a/indra/llappearanceutility/llbakingavatar.h b/indra/llappearanceutility/llbakingavatar.h
new file mode 100644
index 0000000000..8261dfc814
--- /dev/null
+++ b/indra/llappearanceutility/llbakingavatar.h
@@ -0,0 +1,139 @@
+/**
+ * @file llbakingavatar.h
+ * @brief Declaration of LLBakingAvatar class which is a derivation of LLAvatarAppearance
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBAKINGAVATAR_H
+#define LL_LLBAKINGAVATAR_H
+
+#include "llavatarappearance.h"
+
+class LLBakingAvatar : public LLAvatarAppearance
+{
+ LOG_CLASS(LLBakingAvatar);
+
+/********************************************************************************
+ ** **
+ ** INITIALIZATION
+ **/
+public:
+ void* operator new(size_t size)
+ {
+ return ll_aligned_malloc_16(size);
+ }
+
+ void operator delete(void* ptr)
+ {
+ ll_aligned_free_16(ptr);
+ }
+
+ LLBakingAvatar(LLWearableData* wearable_data, S32 bakeTextureSize = 512);
+ virtual ~LLBakingAvatar();
+
+ static void initClass(); // initializes static members
+
+/** Initialization
+ ** **
+ *******************************************************************************/
+
+/********************************************************************************
+ ** **
+ ** INHERITED
+ **/
+
+ //--------------------------------------------------------------------
+ // LLCharacter interface
+ //--------------------------------------------------------------------
+public:
+ LLVector3 getCharacterPosition() override;
+ LLQuaternion getCharacterRotation() override;
+ LLVector3 getCharacterVelocity() override;
+ LLVector3 getCharacterAngularVelocity() override;
+
+ const LLUUID& getID() const override;
+ void addDebugText(const std::string& text) override;
+ F32 getTimeDilation() override;
+ void getGround(const LLVector3 &inPos, LLVector3 &outPos, LLVector3 &outNorm) override;
+ F32 getPixelArea() const override;
+ LLVector3d getPosGlobalFromAgent(const LLVector3 &position) override;
+ LLVector3 getPosAgentFromGlobal(const LLVector3d &position) override;
+
+ //--------------------------------------------------------------------
+ // LLAvatarAppearance interface
+ //--------------------------------------------------------------------
+public:
+ void applyMorphMask(const U8* tex_data, S32 width, S32 height, S32 num_components,
+ LLAvatarAppearanceDefines::EBakedTextureIndex index) override;
+ void invalidateComposite(LLTexLayerSet* layerset) override;
+ void updateMeshTextures() override;
+ void dirtyMesh() override; // Dirty the avatar mesh
+ void onGlobalColorChanged(const LLTexGlobalColor* global_color) override;
+ bool isTextureDefined(LLAvatarAppearanceDefines::ETextureIndex type, U32 index = 0) const override;
+ bool isUsingLocalAppearance() const override { return false; }
+ bool isEditingAppearance() const override { return false; }
+private:
+ void dirtyMesh(S32 priority) override; // Dirty the avatar mesh, with priority
+
+ // LLAvatarAppearance instance factories:
+protected:
+ LLAvatarJoint* createAvatarJoint() override;
+ LLAvatarJoint* createAvatarJoint(S32 joint_num) override;
+ LLAvatarJointMesh* createAvatarJointMesh() override;
+ LLTexLayerSet* createTexLayerSet() override;
+
+
+/** Inherited
+ ** **
+ *******************************************************************************/
+
+/********************************************************************************
+ ** **
+ ** STATE
+ **/
+public:
+ bool isSelf() const override { return true; }
+ bool isValid() const override { return true; }
+
+/** State
+ ** **
+ *******************************************************************************/
+
+/********************************************************************************
+ ** **
+ ** BAKING
+ **/
+public:
+ void bakedTextureDatasAsLLSD(LLSD& sd) const;
+ S32 bakeTextureSize() const { return mBakeTextureSize; }
+
+/** Baking
+ ** **
+ *******************************************************************************/
+
+private:
+ S32 mBakeTextureSize;
+};
+
+#endif /* LL_LLBAKINGAVATAR_H */
+
diff --git a/indra/llappearanceutility/llbakingjoint.cpp b/indra/llappearanceutility/llbakingjoint.cpp
new file mode 100644
index 0000000000..25edaa645f
--- /dev/null
+++ b/indra/llappearanceutility/llbakingjoint.cpp
@@ -0,0 +1,54 @@
+/**
+ * @file llbakingjoint.cpp
+ * @brief Implementation of LLBakingJoint class
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+#include "linden_common.h"
+
+#include "llbakingjoint.h"
+
+
+LLBakingJoint::LLBakingJoint() :
+ LLAvatarJoint()
+{
+}
+
+LLBakingJoint::LLBakingJoint(S32 joint_num) :
+ LLAvatarJoint(joint_num)
+{
+}
+
+// virtual
+LLBakingJoint::~LLBakingJoint()
+{
+}
+
+// virtual
+U32 LLBakingJoint::render( F32 pixelArea, bool first_pass, bool is_dummy)
+{
+ LL_ERRS() << "LLBakingJoint::render() should never be called!" << LL_ENDL;
+ return 0;
+}
+
diff --git a/indra/llappearanceutility/llbakingjoint.h b/indra/llappearanceutility/llbakingjoint.h
new file mode 100644
index 0000000000..07e15a1d04
--- /dev/null
+++ b/indra/llappearanceutility/llbakingjoint.h
@@ -0,0 +1,44 @@
+/**
+ * @file llbakingjoint.h
+ * @brief Declaration of LLBakingJoint class
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBAKINGJOINT_H
+#define LL_LLBAKINGJOINT_H
+
+#include "llavatarjoint.h"
+
+class LLBakingJoint : public virtual LLAvatarJoint
+{
+public:
+ LLBakingJoint();
+ LLBakingJoint(S32 joint_num);
+ virtual ~LLBakingJoint();
+
+ // LLViewerJoint interface
+ U32 render( F32 pixelArea, bool first_pass = true, bool is_dummy = false ) override;
+};
+
+#endif /* LL_LLBAKINGJOINT_H */
+
diff --git a/indra/llappearanceutility/llbakingjointmesh.cpp b/indra/llappearanceutility/llbakingjointmesh.cpp
new file mode 100644
index 0000000000..b8e3283df2
--- /dev/null
+++ b/indra/llappearanceutility/llbakingjointmesh.cpp
@@ -0,0 +1,43 @@
+/**
+ * @file llbakingjointmesh.cpp
+ * @brief Implementation of LLBakingJointMesh class
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+#include "linden_common.h"
+
+#include "llbakingjointmesh.h"
+
+
+LLBakingJointMesh::LLBakingJointMesh() :
+ LLAvatarJointMesh()
+{
+}
+
+// virtual
+LLBakingJointMesh::~LLBakingJointMesh()
+{
+}
+
+
diff --git a/indra/llappearanceutility/llbakingjointmesh.h b/indra/llappearanceutility/llbakingjointmesh.h
new file mode 100644
index 0000000000..a66bf3f61b
--- /dev/null
+++ b/indra/llappearanceutility/llbakingjointmesh.h
@@ -0,0 +1,45 @@
+/**
+ * @file llbakingjoint.h
+ * @brief Implementation of LLBakingJointMesh class
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBAKINGJOINTMESH_H
+#define LL_LLBAKINGJOINTMESH_H
+
+#include "llavatarjointmesh.h"
+#include "llbakingjoint.h"
+
+class LLBakingJointMesh : public LLAvatarJointMesh, public LLBakingJoint
+{
+public:
+ LLBakingJointMesh();
+ LLBakingJointMesh(S32 joint_num);
+ virtual ~LLBakingJointMesh();
+
+ U32 render( F32 pixelArea, bool first_pass = true, bool is_dummy = false )
+ { return LLBakingJoint::render(pixelArea,first_pass,is_dummy); }
+};
+
+#endif /* LL_LLBAKINGJOINTMESH_H */
+
diff --git a/indra/llappearanceutility/llbakingprocess.cpp b/indra/llappearanceutility/llbakingprocess.cpp
new file mode 100644
index 0000000000..85553b0fdb
--- /dev/null
+++ b/indra/llappearanceutility/llbakingprocess.cpp
@@ -0,0 +1,47 @@
+/**
+ * @file llbakingprocess.cpp
+ * @brief Implementation of LLBakingProcess class.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// linden includes
+#include "linden_common.h"
+
+#include "llsd.h"
+#include "llsdserialize.h"
+
+// project includes
+#include "llappappearanceutility.h"
+#include "llbakingprocess.h"
+
+// virtual
+void LLBakingProcess::parseInput(std::istream& input)
+{
+ LLSDSerialize::fromXML( mInputData, input );
+ if (mInputData.isUndefined())
+ {
+ throw LLAppException(RV_UNABLE_TO_PARSE);
+ }
+}
+
+
diff --git a/indra/llappearanceutility/llbakingprocess.h b/indra/llappearanceutility/llbakingprocess.h
new file mode 100644
index 0000000000..de38b7a36b
--- /dev/null
+++ b/indra/llappearanceutility/llbakingprocess.h
@@ -0,0 +1,60 @@
+/**
+ * @file llbakingprocess.h
+ * @brief Declaration of LLBakingProcess interface.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBAKINGPROCESS_H
+#define LL_LLBAKINGPROCESS_H
+
+#include <ostream>
+
+class LLAppAppearanceUtility;
+class LLSD;
+
+// Simple wrapper for various process modes.
+class LLBakingProcess
+{
+private:
+ // Hide default constructor.
+ LLBakingProcess() {}
+public:
+ LLBakingProcess(LLAppAppearanceUtility* app) :
+ mApp(app) {}
+ virtual ~LLBakingProcess() {}
+
+ virtual void parseInput(std::istream& input);
+ //virtual std::string getProcessName() const = 0;
+ virtual void process(std::ostream& output) = 0;
+
+ virtual void init() {}
+ virtual void cleanup() {}
+
+protected:
+ LLAppAppearanceUtility* mApp;
+ LLSD mInputData;
+};
+
+
+#endif /* LL_LLBAKINGPROCESS_H */
+
diff --git a/indra/llappearanceutility/llbakingshadermgr.cpp b/indra/llappearanceutility/llbakingshadermgr.cpp
new file mode 100644
index 0000000000..07c747a8a0
--- /dev/null
+++ b/indra/llappearanceutility/llbakingshadermgr.cpp
@@ -0,0 +1,250 @@
+
+/**
+ * @file LLBakingShaderMgr.cpp
+ * @brief Viewer shader manager implementation.
+ *
+ * $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+#include "linden_common.h"
+
+#include "llbakingshadermgr.h"
+
+#include "lldir.h"
+#include "llfile.h"
+#include "llrender.h"
+#include "llvertexbuffer.h"
+
+#if LL_DARWIN
+#include "OpenGL/OpenGL.h"
+#endif
+
+#ifdef LL_RELEASE_FOR_DOWNLOAD
+#define UNIFORM_ERRS LL_WARNS_ONCE("Shader")
+#else
+#define UNIFORM_ERRS LL_ERRS("Shader")
+#endif
+
+// Lots of STL stuff in here, using namespace std to keep things more readable
+using std::vector;
+using std::pair;
+using std::make_pair;
+using std::string;
+
+bool LLBakingShaderMgr::sInitialized = false;
+bool LLBakingShaderMgr::sSkipReload = false;
+
+//utility shaders
+LLGLSLShader gAlphaMaskProgram;
+
+
+LLBakingShaderMgr::LLBakingShaderMgr() :
+ mVertexShaderLevel(SHADER_COUNT, 0),
+ mMaxAvatarShaderLevel(0)
+{
+}
+
+LLBakingShaderMgr::~LLBakingShaderMgr()
+{
+ mVertexShaderLevel.clear();
+ mShaderList.clear();
+}
+
+// static
+LLBakingShaderMgr * LLBakingShaderMgr::instance()
+{
+ if(nullptr == sInstance)
+ {
+ sInstance = new LLBakingShaderMgr();
+ }
+
+ return static_cast<LLBakingShaderMgr*>(sInstance);
+}
+
+void LLBakingShaderMgr::initAttribsAndUniforms(void)
+{
+ if (mReservedAttribs.empty())
+ {
+ LLShaderMgr::initAttribsAndUniforms();
+ }
+}
+
+
+//============================================================================
+// Set Levels
+
+S32 LLBakingShaderMgr::getVertexShaderLevel(S32 type)
+{
+ return mVertexShaderLevel[type];
+}
+
+//============================================================================
+// Shader Management
+
+void LLBakingShaderMgr::setShaders()
+{
+ //setShaders might be called redundantly by gSavedSettings, so return on reentrance
+ static bool reentrance = false;
+
+ if (!sInitialized || reentrance || sSkipReload)
+ {
+ return;
+ }
+
+ LLGLSLShader::sIndexedTextureChannels = llmax(gGLManager.mNumTextureImageUnits, 1);
+
+ //NEVER use more than 16 texture channels (work around for prevalent driver bug)
+ LLGLSLShader::sIndexedTextureChannels = llmin(LLGLSLShader::sIndexedTextureChannels, 16);
+
+ if (gGLManager.mGLSLVersionMajor < 1 ||
+ (gGLManager.mGLSLVersionMajor == 1 && gGLManager.mGLSLVersionMinor <= 20))
+ { //NEVER use indexed texture rendering when GLSL version is 1.20 or earlier
+ LLGLSLShader::sIndexedTextureChannels = 1;
+ }
+
+ reentrance = true;
+
+ initAttribsAndUniforms();
+
+ // Shaders
+ LL_INFOS("ShaderLoading") << "\n~~~~~~~~~~~~~~~~~~\n Loading Shaders:\n~~~~~~~~~~~~~~~~~~" << LL_ENDL;
+ LL_INFOS("ShaderLoading") << llformat("Using GLSL %d.%d", gGLManager.mGLSLVersionMajor, gGLManager.mGLSLVersionMinor) << LL_ENDL;
+
+ for (S32 i = 0; i < SHADER_COUNT; i++)
+ {
+ mVertexShaderLevel[i] = 0;
+ }
+ mMaxAvatarShaderLevel = 0;
+
+ LLVertexBuffer::unbind();
+ bool loaded = false;
+ if (gGLManager.mGLSLVersionMajor > 1 || gGLManager.mGLSLVersionMinor >= 10)
+ {
+ S32 light_class = 2;
+ mVertexShaderLevel[SHADER_INTERFACE] = light_class;
+
+ // loadBasicShaders
+ vector< pair<string, S32> > shaders;
+ if (gGLManager.mGLSLVersionMajor >= 2 || gGLManager.mGLSLVersionMinor >= 30)
+ {
+ shaders.push_back( make_pair( "objects/indexedTextureV.glsl", 1 ) );
+ }
+ shaders.push_back( make_pair( "objects/nonindexedTextureV.glsl", 1 ) );
+ shaders.push_back( make_pair( "deferred/textureUtilV.glsl", 1 ) );
+ loaded = true;
+ for (U32 i = 0; i < shaders.size(); i++)
+ {
+ // Note usage of GL_VERTEX_SHADER_ARB
+ if (loadShaderFile(shaders[i].first, shaders[i].second, GL_VERTEX_SHADER_ARB) == 0)
+ {
+ LL_WARNS("Shader") << "Failed to load vertex shader " << shaders[i].first << LL_ENDL;
+ loaded = false;
+ break;
+ }
+ }
+
+ shaders.clear();
+
+ // fragment shaders
+ shaders.push_back( make_pair( "deferred/globalF.glsl", 1 ) );
+
+ for (U32 i = 0; i < shaders.size(); i++)
+ {
+ // Note usage of GL_FRAGMENT_SHADER
+ if (loadShaderFile(shaders[i].first, shaders[i].second, GL_FRAGMENT_SHADER_ARB) == 0)
+ {
+ LL_WARNS("Shader") << "Failed to load fragment shader " << shaders[i].first << LL_ENDL;
+ loaded = false;
+ break;
+ }
+ }
+
+ if (loaded)
+ {
+ loaded = loadShadersInterface();
+ }
+ }
+
+ if (!loaded)
+ {
+ //gPipeline.mVertexShadersEnabled = false;
+ //gPipeline.mVertexShadersLoaded = 0;
+ mVertexShaderLevel[SHADER_LIGHTING] = 0;
+ mVertexShaderLevel[SHADER_INTERFACE] = 0;
+ mVertexShaderLevel[SHADER_ENVIRONMENT] = 0;
+ mVertexShaderLevel[SHADER_WATER] = 0;
+ mVertexShaderLevel[SHADER_OBJECT] = 0;
+ mVertexShaderLevel[SHADER_EFFECT] = 0;
+ mVertexShaderLevel[SHADER_WINDLIGHT] = 0;
+ mVertexShaderLevel[SHADER_AVATAR] = 0;
+ }
+
+ //gPipeline.createGLBuffers();
+
+ reentrance = false;
+}
+
+void LLBakingShaderMgr::unloadShaders()
+{
+ gAlphaMaskProgram.unload();
+
+ mVertexShaderLevel[SHADER_INTERFACE] = 0;
+
+ //gPipeline.mVertexShadersLoaded = 0;
+}
+
+bool LLBakingShaderMgr::loadShadersInterface()
+{
+ gAlphaMaskProgram.mName = "Alpha Mask Shader";
+ gAlphaMaskProgram.mShaderFiles.clear();
+ gAlphaMaskProgram.mShaderFiles.push_back(make_pair("interface/alphamaskV.glsl", GL_VERTEX_SHADER_ARB));
+ gAlphaMaskProgram.mShaderFiles.push_back(make_pair("interface/alphamaskF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+
+ if( !gAlphaMaskProgram.createShader() )
+ {
+ mVertexShaderLevel[SHADER_INTERFACE] = 0;
+ return false;
+ }
+
+ return true;
+}
+
+std::string LLBakingShaderMgr::getShaderDirPrefix(void)
+{
+ return gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "shaders/class");
+}
+
+void LLBakingShaderMgr::updateShaderUniforms(LLGLSLShader * shader)
+{
+}
+
+LLBakingShaderMgr::shader_iter LLBakingShaderMgr::beginShaders() const
+{
+ return mShaderList.begin();
+}
+
+LLBakingShaderMgr::shader_iter LLBakingShaderMgr::endShaders() const
+{
+ return mShaderList.end();
+}
diff --git a/indra/llappearanceutility/llbakingshadermgr.h b/indra/llappearanceutility/llbakingshadermgr.h
new file mode 100644
index 0000000000..60ab3f94e8
--- /dev/null
+++ b/indra/llappearanceutility/llbakingshadermgr.h
@@ -0,0 +1,137 @@
+/**
+ * @file llbakingshadermgr.h
+ * @brief Texture Baking Shader Manager
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_BAKING_SHADER_MGR_H
+#define LL_BAKING_SHADER_MGR_H
+
+#include "llshadermgr.h"
+
+class LLBakingShaderMgr: public LLShaderMgr
+{
+public:
+ static bool sInitialized;
+ static bool sSkipReload;
+
+ LLBakingShaderMgr();
+ ~LLBakingShaderMgr();
+
+ // singleton pattern implementation
+ static LLBakingShaderMgr * instance();
+
+ void initAttribsAndUniforms(void) override;
+ void setShaders();
+ void unloadShaders();
+ S32 getVertexShaderLevel(S32 type);
+ bool loadShadersInterface();
+
+ std::vector<S32> mVertexShaderLevel;
+ S32 mMaxAvatarShaderLevel;
+
+ enum EShaderClass
+ {
+ SHADER_LIGHTING,
+ SHADER_OBJECT,
+ SHADER_AVATAR,
+ SHADER_ENVIRONMENT,
+ SHADER_INTERFACE,
+ SHADER_EFFECT,
+ SHADER_WINDLIGHT,
+ SHADER_WATER,
+ SHADER_DEFERRED,
+ SHADER_TRANSFORM,
+ SHADER_COUNT
+ };
+
+ // simple model of forward iterator
+ // http://www.sgi.com/tech/stl/ForwardIterator.html
+ class shader_iter
+ {
+ private:
+ friend bool operator == (shader_iter const & a, shader_iter const & b);
+ friend bool operator != (shader_iter const & a, shader_iter const & b);
+
+ typedef std::vector<LLGLSLShader *>::const_iterator base_iter_t;
+ public:
+ shader_iter()
+ {
+ }
+
+ shader_iter(base_iter_t iter) : mIter(iter)
+ {
+ }
+
+ LLGLSLShader & operator * () const
+ {
+ return **mIter;
+ }
+
+ LLGLSLShader * operator -> () const
+ {
+ return *mIter;
+ }
+
+ shader_iter & operator++ ()
+ {
+ ++mIter;
+ return *this;
+ }
+
+ shader_iter operator++ (int)
+ {
+ return mIter++;
+ }
+
+ private:
+ base_iter_t mIter;
+ };
+
+ shader_iter beginShaders() const;
+ shader_iter endShaders() const;
+
+ std::string getShaderDirPrefix(void) override;
+
+ void updateShaderUniforms(LLGLSLShader * shader) override;
+
+private:
+
+ // the list of shaders we need to propagate parameters to.
+ std::vector<LLGLSLShader *> mShaderList;
+
+}; //LLBakingShaderMgr
+
+inline bool operator == (LLBakingShaderMgr::shader_iter const & a, LLBakingShaderMgr::shader_iter const & b)
+{
+ return a.mIter == b.mIter;
+}
+
+inline bool operator != (LLBakingShaderMgr::shader_iter const & a, LLBakingShaderMgr::shader_iter const & b)
+{
+ return a.mIter != b.mIter;
+}
+
+extern LLVector4 gShinyOrigin;
+
+#endif // LL_BAKING_SHADER_MGR_H
diff --git a/indra/llappearanceutility/llbakingtexlayer.cpp b/indra/llappearanceutility/llbakingtexlayer.cpp
new file mode 100644
index 0000000000..3427331a96
--- /dev/null
+++ b/indra/llappearanceutility/llbakingtexlayer.cpp
@@ -0,0 +1,373 @@
+/**
+ * @file llbakingtexlayer.cpp
+ * @brief Implementation of LLBakingTexLayer class
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "indra_constants.h"
+#include "llappappearanceutility.h"
+#include "llavatarappearance.h"
+#include "llbakingtexlayer.h"
+#include "llbakingwearable.h"
+#include "llfasttimer.h"
+#include "lllocaltextureobject.h"
+#include "llimagej2c.h"
+#include "llwearabledata.h"
+#include "llmd5.h"
+#include "llbakingavatar.h"
+
+//#define DEBUG_TEXTURE_IDS 1
+
+static const char* BAKE_HASH_VERSION = "3";
+
+using namespace LLAvatarAppearanceDefines;
+
+LLBakingTexLayerSetBuffer::LLBakingTexLayerSetBuffer(LLTexLayerSet* const owner, S32 width, S32 height)
+ : LLTexLayerSetBuffer(owner),
+ LLBakingTexture( width, height, 4 )
+{}
+
+// virtual
+LLBakingTexLayerSetBuffer::~LLBakingTexLayerSetBuffer()
+{
+ destroyGLTexture();
+}
+
+bool LLBakingTexLayerSetBuffer::render()
+{
+ bool result = false;
+
+ preRenderTexLayerSet();
+ result = renderTexLayerSet(nullptr);
+ postRenderTexLayerSet(result);
+
+ return result;
+}
+
+static LLFastTimer::DeclareTimer FTM_MID_RENDER("midRenderTexLayerSet");
+static LLFastTimer::DeclareTimer FTM_CREATE_J2C("Encode J2C image.");
+void LLBakingTexLayerSetBuffer::midRenderTexLayerSet(bool success)
+{
+ LL_RECORD_BLOCK_TIME(FTM_MID_RENDER);
+ if (!mTexLayerSet->isVisible())
+ {
+ // Should have used IMG_INVISIBLE during hash id generation?
+ LL_ERRS() << "Rendered texture for non-visible tex layer set!" << LL_ENDL;
+ }
+
+ if (!success)
+ {
+ throw LLAppException(RV_UNABLE_TO_BAKE, " Rendering process failed.");
+ }
+
+ // Get the COLOR information from our texture
+ LL_DEBUGS() << "glReadPixels..." << LL_ENDL;
+ LL_DEBUGS() << "getCompositeWidth()" << getCompositeWidth() << "getCompositeHeight()" << getCompositeHeight() << LL_ENDL;
+
+ U8* baked_color_data = new U8[ getCompositeWidth() * getCompositeHeight() * 4 ];
+ glReadPixels(getCompositeOriginX(), getCompositeOriginY(),
+ getCompositeWidth(), getCompositeHeight(),
+ GL_RGBA, GL_UNSIGNED_BYTE, baked_color_data );
+ stop_glerror();
+
+ // Get the MASK information from our texture
+ LLGLSUIDefault gls_ui;
+ LL_DEBUGS() << "Creating baked mask image raw.." << LL_ENDL;
+ LLPointer<LLImageRaw> baked_mask_image = new LLImageRaw(getCompositeWidth(), getCompositeHeight(), 1 );
+ U8* baked_mask_data = baked_mask_image->getData();
+
+ LL_DEBUGS() << "Gathering Morph Mask Alpha..." << LL_ENDL;
+ mTexLayerSet->gatherMorphMaskAlpha(baked_mask_data,
+ getCompositeOriginX(), getCompositeOriginY(),
+ getCompositeWidth(), getCompositeHeight(), nullptr);
+
+ // Create the baked image from our color and mask information
+ const S32 baked_image_components = 5; // red green blue [bump] clothing
+ LL_DEBUGS() << "Creating baked image raw.." << LL_ENDL;
+ LLPointer<LLImageRaw> baked_image = new LLImageRaw( getCompositeWidth(), getCompositeHeight(), baked_image_components );
+ U8* baked_image_data = baked_image->getData();
+ S32 i = 0;
+ LL_DEBUGS() << "Running ugly loop..." << LL_ENDL;
+ for (S32 u=0; u < getCompositeWidth(); u++)
+ {
+ for (S32 v=0; v < getCompositeHeight(); v++)
+ {
+ baked_image_data[5*i + 0] = baked_color_data[4*i + 0];
+ baked_image_data[5*i + 1] = baked_color_data[4*i + 1];
+ baked_image_data[5*i + 2] = baked_color_data[4*i + 2];
+ baked_image_data[5*i + 3] = baked_color_data[4*i + 3]; // alpha should be correct for eyelashes.
+ baked_image_data[5*i + 4] = baked_mask_data[i];
+ i++;
+ }
+ }
+
+ {
+ LL_RECORD_BLOCK_TIME(FTM_CREATE_J2C);
+ LL_DEBUGS() << "Creating J2C..." << LL_ENDL;
+ mCompressedImage = new LLImageJ2C;
+ const char* comment_text = LINDEN_J2C_COMMENT_PREFIX "RGBHM"; // writes into baked_color_data. 5 channels (rgb, heightfield/alpha, mask)
+ if (!mCompressedImage->encode(baked_image, comment_text))
+ {
+ throw LLAppException(RV_UNABLE_TO_ENCODE);
+ }
+ }
+
+ delete [] baked_color_data;
+}
+
+LLBakingTexLayerSet::LLBakingTexLayerSet(LLAvatarAppearance* const appearance) :
+ LLTexLayerSet(appearance)
+{
+}
+
+// virtual
+LLBakingTexLayerSet::~LLBakingTexLayerSet()
+{
+}
+
+// Ignored.
+void LLBakingTexLayerSet::requestUpdate()
+{
+}
+
+void LLBakingTexLayerSet::createComposite()
+{
+ if(!mComposite)
+ {
+ const LLBakingAvatar* avatar = dynamic_cast<const LLBakingAvatar*> (mAvatarAppearance);
+ S32 width = avatar->bakeTextureSize();
+ S32 height = avatar->bakeTextureSize();
+
+ LL_DEBUGS() << "Creating composite with width and height " << width << " " << height << LL_ENDL;
+
+ mComposite = new LLBakingTexLayerSetBuffer(this, width, height);
+ }
+}
+
+LLSD LLBakingTexLayerSet::computeTextureIDs() const
+{
+ const LLAvatarAppearanceDictionary::BakedEntry *baked_dict =
+ LLAvatarAppearance::getDictionary()->getBakedTexture(getBakedTexIndex());
+#ifdef DEBUG_TEXTURE_IDS
+ const std::string& slot_name = LLAvatarAppearance::getDictionary()->getTexture(
+ LLAvatarAppearance::getDictionary()->bakedToLocalTextureIndex(getBakedTexIndex()) )->mDefaultImageName;
+ const LLAvatarAppearanceDictionary::TextureEntry* entry = LLAvatarAppearance::getDictionary()->getTexture(baked_dict->mTextureIndex);
+ LL_DEBUGS() << "-----------------------------------------------------------------" << LL_ENDL;
+ LL_DEBUGS() << "BakedTexIndex = " << (S32) getBakedTexIndex() << " (" << slot_name << ") "
+ << "BakedEntry::mTextureIndex = " << (S32) baked_dict->mTextureIndex
+ << " (" << entry->mDefaultImageName
+ << ")" << LL_ENDL;
+ //LL_DEBUGS() << "LLAvatarAppearanceDictionary::getTEWearableType(" << baked_dict->mTextureIndex << ") = " << (S32) LLAvatarAppearanceDictionary::getTEWearableType(baked_dict->mTextureIndex) << LL_ENDL;
+
+ texture_vec_t::const_iterator idx_iter = baked_dict->mLocalTextures.begin();
+ texture_vec_t::const_iterator idx_end = baked_dict->mLocalTextures.end();
+ std::ostringstream idx_str;
+ for (; idx_iter != idx_end; ++idx_iter)
+ {
+ entry = LLAvatarAppearance::getDictionary()->getTexture((*idx_iter));
+ idx_str << (*idx_iter) << " (" << entry->mDefaultImageName
+ << ";" << LLWearableType::getInstance()->getTypeName( entry->mWearableType )
+ << "), ";
+ }
+ LL_DEBUGS() << "BakedEntry::mLocalTextures: " << idx_str.str() << LL_ENDL;
+ wearables_vec_t::const_iterator type_iter = baked_dict->mWearables.begin();
+ wearables_vec_t::const_iterator type_end = baked_dict->mWearables.end();
+ std::ostringstream type_str;
+ for (; type_iter != type_end; ++type_iter)
+ {
+ type_str << (S32) (*type_iter) << " ("
+ << LLWearableType::getInstance()->getTypeName( (*type_iter) )
+ << "), ";
+ }
+ LL_DEBUGS() << "BakedEntry::mWearables: " << type_str.str() << LL_ENDL;
+ //LL_DEBUGS() << "BakedEntry::mWearablesHashID: " << baked_dict->mWearablesHashID << LL_ENDL;
+#endif
+
+ LLMD5 hash;
+ std::set<LLUUID> texture_ids;
+
+ bool is_visible = true;
+ bool hash_computed = computeLayerListTextureIDs(hash, texture_ids, mLayerList, is_visible);
+ if (is_visible)
+ {
+ hash_computed |= computeLayerListTextureIDs(hash, texture_ids, mMaskLayerList, is_visible);
+ }
+
+ LLUUID hash_id;
+ if (!is_visible)
+ {
+ hash_id = IMG_INVISIBLE;
+ texture_ids.clear();
+ }
+ else if (hash_computed)
+ {
+ if ((getBakedTexIndex() == EBakedTextureIndex::BAKED_LEFT_ARM) ||
+ (getBakedTexIndex() == EBakedTextureIndex::BAKED_LEFT_LEG) ||
+ (getBakedTexIndex() == EBakedTextureIndex::BAKED_AUX1) ||
+ (getBakedTexIndex() == EBakedTextureIndex::BAKED_AUX2) ||
+ (getBakedTexIndex() == EBakedTextureIndex::BAKED_AUX3))
+ {
+ hash.update(BAKE_HASH_VERSION);
+ }
+
+ hash.update((const unsigned char*)baked_dict->mWearablesHashID.mData, UUID_BYTES);
+ hash.finalize();
+ hash.raw_digest(hash_id.mData);
+ }
+
+ if (hash_id.isNull())
+ {
+ hash_id = IMG_DEFAULT_AVATAR;
+ }
+
+ if (getBakedTexIndex() == EBakedTextureIndex::BAKED_SKIRT)
+ {
+ if (getAvatarAppearance()->getWearableData()->getWearableCount(LLWearableType::WT_SKIRT) == 0)
+ {
+ hash_id = IMG_DEFAULT_AVATAR;
+ texture_ids.clear();
+ }
+ }
+ LLSD sd;
+ sd["hash_id"] = hash_id;
+ sd["texture_ids"] = LLSD::emptyArray();
+ std::set<LLUUID>::iterator id_iter = texture_ids.begin();
+ std::set<LLUUID>::iterator id_end = texture_ids.end();
+ for (; id_iter != id_end; ++id_iter)
+ {
+ sd["texture_ids"].append( *id_iter );
+ }
+ return sd;
+}
+
+bool LLBakingTexLayerSet::computeLayerListTextureIDs(LLMD5& hash,
+ std::set<LLUUID>& texture_ids,
+ const layer_list_t& layer_list,
+ bool& is_visible) const
+{
+ is_visible = true;
+ bool hash_computed = false;
+ layer_list_t::const_iterator iter = layer_list.begin();
+ layer_list_t::const_iterator end = layer_list.end();
+ for (; iter != end; ++iter)
+ {
+ const LLTexLayerInterface* layer_template = *iter;
+ LLWearableType::EType wearable_type = layer_template->getWearableType();
+ ETextureIndex te = layer_template->getLocalTextureIndex();
+ U32 num_wearables = getAvatarAppearance()->getWearableData()->getWearableCount(wearable_type);
+#ifdef DEBUG_TEXTURE_IDS
+ const LLAvatarAppearanceDictionary::TextureEntry* entry = LLAvatarAppearance::getDictionary()->getTexture(te);
+ if (entry)
+ {
+ LL_DEBUGS() << "LLTexLayerInterface(" << layer_template->getName() << ") type = "
+ << (S32) wearable_type << " ("
+ << LLWearableType::getInstance()->getTypeName( wearable_type ) << ") te = "
+ << (S32) te << " ("<< entry->mDefaultImageName
+ << ";" << LLWearableType::getInstance()->getTypeName( entry->mWearableType )
+ << ") wearable_count = " << num_wearables << LL_ENDL;
+ }
+ else
+ {
+ LL_DEBUGS() << "LLTexLayerInterface(" << layer_template->getName() << ") type = "
+ << (S32) wearable_type << " ("
+ << LLWearableType::getInstance()->getTypeName( wearable_type )
+ << ") wearable_count = " << num_wearables << LL_ENDL;
+ }
+#endif
+ if (LLWearableType::WT_INVALID == wearable_type)
+ {
+ //LL_DEBUGS() << "Skipping invalid wearable type" << LL_ENDL;
+ continue;
+ }
+
+ for (U32 i = 0; i < num_wearables; i++)
+ {
+ LLBakingWearable* wearable = dynamic_cast<LLBakingWearable*> (
+ getAvatarAppearance()->getWearableData()->getWearable(wearable_type, i));
+ if (!wearable)
+ {
+ //LL_DEBUGS() << "Skipping wearable" << LL_ENDL;
+ continue;
+ }
+#ifdef DEBUG_TEXTURE_IDS
+ S32 num_ltos = wearable->getLocalTextureListSeq().size();
+ LL_DEBUGS() << "LLWearable (" << wearable->getName() << ") type = "
+ << (S32) wearable->getAssetType() << " ("
+ << LLAssetType::lookup(wearable->getAssetType())
+ << ") num_ltos = " << num_ltos << LL_ENDL;
+#endif
+ LLLocalTextureObject *lto = wearable->getLocalTextureObject(te);
+ if (lto)
+ {
+#ifdef DEBUG_TEXTURE_IDS
+ LL_DEBUGS() << "LocalTextureObject id = " << lto->getID() << " num texlayers = " << lto->getNumTexLayers() << LL_ENDL;
+#endif
+ // Hash texture id
+ LLUUID texture_id = lto->getID();
+ if (IMG_INVISIBLE == texture_id)
+ {
+ is_visible = false;
+ }
+ hash.update((const unsigned char*)texture_id.mData, UUID_BYTES);
+ hash_computed = true;
+ // Add texture to list.
+ texture_ids.insert(texture_id);
+ }
+#ifdef DEBUG_TEXTURE_IDS
+ else
+ {
+ LL_DEBUGS() << "LLWearable -- no LocalTextureObject for te " << (S32) te << LL_ENDL;
+ }
+
+
+ for(S32 i = 0; i < (S32)TEX_NUM_INDICES; i++)
+ {
+ lto = wearable->getLocalTextureObject(i);
+ if (lto)
+ {
+ LL_DEBUGS() << "LTO (" << i << ") id = " << lto->getID() << " num texlayers = " << lto->getNumTexLayers() << LL_ENDL;
+ }
+ }
+#endif
+
+ for( LLVisualParam* param = getAvatarAppearance()->getFirstVisualParam();
+ param; param = getAvatarAppearance()->getNextVisualParam() )
+ {
+ // cross-wearable parameters are not authoritative, as they are driven by a different wearable.
+ if( (((LLViewerVisualParam*)param)->getWearableType() == wearable_type) &&
+ (!((LLViewerVisualParam*)param)->getCrossWearable()) )
+ {
+ std::ostringstream ostr;
+ F32 weight = wearable->getVisualParamWeight(param->getID());
+ ostr << param->getID() << " " << weight;
+ hash.update(ostr.str());
+ hash_computed = true;
+ }
+ }
+ }
+ }
+ return hash_computed;
+}
+
diff --git a/indra/llappearanceutility/llbakingtexlayer.h b/indra/llappearanceutility/llbakingtexlayer.h
new file mode 100644
index 0000000000..dc82b27ce2
--- /dev/null
+++ b/indra/llappearanceutility/llbakingtexlayer.h
@@ -0,0 +1,77 @@
+/**
+ * @file llbakingtexlayer.h
+ * @brief Declaration of LLBakingTexLayerSet.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBAKINGTEXLAYER_H
+#define LL_LLBAKINGTEXLAYER_H
+
+#include "llbakingtexture.h"
+#include "llimagej2c.h"
+#include "llpointer.h"
+#include "lltexlayer.h"
+
+class LLMD5;
+
+class LLBakingTexLayerSetBuffer : public LLTexLayerSetBuffer, public LLBakingTexture
+{
+ LOG_CLASS(LLBakingTexLayerSetBuffer);
+public:
+ LLBakingTexLayerSetBuffer(LLTexLayerSet* const owner, S32 width, S32 height);
+ virtual ~LLBakingTexLayerSetBuffer();
+
+ LLImageJ2C* getCompressedImage() { return mCompressedImage; }
+
+ bool render();
+ bool bindDebugImage(const S32 stage = 0) override { return false; }
+ bool isActiveFetching() override { return false; };
+
+private:
+ S32 getCompositeOriginX() const override { return 0; }
+ S32 getCompositeOriginY() const override { return 0; }
+ S32 getCompositeWidth() const override { return getFullWidth(); }
+ S32 getCompositeHeight() const override { return getFullHeight(); }
+ void midRenderTexLayerSet(bool success) override;
+
+ LLPointer<LLImageJ2C> mCompressedImage;
+};
+
+class LLBakingTexLayerSet : public LLTexLayerSet
+{
+public:
+ LLBakingTexLayerSet(LLAvatarAppearance* const appearance);
+ virtual ~LLBakingTexLayerSet();
+
+ LLSD computeTextureIDs() const;
+ bool computeLayerListTextureIDs(LLMD5& hash,
+ std::set<LLUUID>& texture_ids,
+ const layer_list_t& layer_list,
+ bool& is_visible) const;
+
+ void requestUpdate() override;
+ void createComposite() override;
+};
+
+#endif /* LL_LLBAKINGTEXLAYER_H */
+
diff --git a/indra/llappearanceutility/llbakingtexture.cpp b/indra/llappearanceutility/llbakingtexture.cpp
new file mode 100644
index 0000000000..ae83081aef
--- /dev/null
+++ b/indra/llappearanceutility/llbakingtexture.cpp
@@ -0,0 +1,81 @@
+/**
+ * @file llbakingtexture.cpp
+ * @brief Implementation of LLBakingTexture class.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// linden includes
+#include "linden_common.h"
+
+// project includes
+#include "llbakingtexture.h"
+#include "llgltexture.h"
+#include "llimage.h"
+
+static const bool USE_MIP_MAPS = true;
+
+LLBakingTexture::LLBakingTexture(const LLUUID& id, const LLImageRaw* raw)
+ : LLGLTexture(raw, USE_MIP_MAPS),
+ mID(id)
+{
+}
+
+LLBakingTexture::LLBakingTexture(bool usemipmaps)
+ : LLGLTexture(usemipmaps),
+ mID(LLUUID::null)
+{
+}
+
+LLBakingTexture::LLBakingTexture(const U32 width, const U32 height, const U8 components, bool usemipmaps)
+ : LLGLTexture(width, height, components, USE_MIP_MAPS),
+ mID(LLUUID::null)
+{
+}
+
+// virtual
+LLBakingTexture::~LLBakingTexture()
+{
+}
+
+void LLBakingTexture::setKnownDrawSize(S32 width, S32 height)
+{
+ //nothing here.
+ LL_ERRS() << "Not implemented." << LL_ENDL;
+}
+
+bool LLBakingTexture::bindDefaultImage(S32 stage)
+{
+ LL_ERRS() << "Not implemented." << LL_ENDL;
+ return false;
+}
+
+void LLBakingTexture::forceImmediateUpdate()
+{
+ LL_ERRS() << "Not implemented." << LL_ENDL;
+}
+
+void LLBakingTexture::updateBindStatsForTester()
+{
+ LL_ERRS() << "Not implemented." << LL_ENDL;
+}
+
diff --git a/indra/llappearanceutility/llbakingtexture.h b/indra/llappearanceutility/llbakingtexture.h
new file mode 100644
index 0000000000..50b4193b2e
--- /dev/null
+++ b/indra/llappearanceutility/llbakingtexture.h
@@ -0,0 +1,69 @@
+/**
+ * @file llbakingtexture.h
+ * @brief Declaration of LLBakingTexture class.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBAKINGTEXTURE_H
+#define LL_LLBAKINGTEXTURE_H
+
+#include "llgltexture.h"
+#include "lluuid.h"
+
+class LLImageRaw;
+
+class LLBakingTexture : public LLGLTexture
+{
+public:
+ enum
+ {
+ LOCAL_TEXTURE,
+ BAKING_TEXTURE,
+ INVALID_TEXTURE_TYPE
+ };
+ LLBakingTexture(const LLUUID& id, const LLImageRaw* raw);
+ LLBakingTexture(bool usemipmaps);
+ LLBakingTexture(const U32 width, const U32 height, const U8 components, bool usemipmaps = true);
+ const LLUUID& getID() const override { return mID; }
+ S8 getType() const override { return BAKING_TEXTURE; }
+
+ // Not implemented.
+ void setKnownDrawSize(S32 width, S32 height) override;
+ bool bindDefaultImage(const S32 stage = 0) override ;
+ void forceImmediateUpdate() override;
+ void updateBindStatsForTester() override ;
+ bool bindDebugImage(const S32 stage = 0) override { return false; }
+ bool isActiveFetching() override { return false; }
+
+protected:
+ virtual ~LLBakingTexture();
+ LOG_CLASS(LLBakingTexture);
+private:
+ // Hide default constructor.
+ LLBakingTexture() {}
+
+ LLUUID mID;
+};
+
+#endif /* LL_LLBAKINGTEXTURE_H */
+
diff --git a/indra/llappearanceutility/llbakingwearable.cpp b/indra/llappearanceutility/llbakingwearable.cpp
new file mode 100644
index 0000000000..0e5251aba1
--- /dev/null
+++ b/indra/llappearanceutility/llbakingwearable.cpp
@@ -0,0 +1,77 @@
+/**
+ * @file llbakingwearable.cpp
+ * @brief Implementation of LLBakingWearable class
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+#include "linden_common.h"
+
+#include "llavatarappearance.h"
+#include "llavatarappearancedefines.h"
+#include "llbakingwearable.h"
+#include "llmd5.h"
+#include "indra_constants.h"
+
+using namespace LLAvatarAppearanceDefines;
+
+LLBakingWearable::LLBakingWearable()
+{
+}
+
+// virtual
+LLBakingWearable::~LLBakingWearable()
+{
+}
+
+// virtual
+void LLBakingWearable::setUpdated() const
+{
+}
+
+// virtual
+void LLBakingWearable::addToBakedTextureHash(LLMD5& hash) const
+{
+}
+
+// virtual
+LLUUID LLBakingWearable::getDefaultTextureImageID(ETextureIndex index) const
+{
+ const LLAvatarAppearanceDictionary::TextureEntry *texture_dict = LLAvatarAppearance::getDictionary()->getTexture(index);
+ const std::string &default_image_name = texture_dict->mDefaultImageName;
+ if (default_image_name == "")
+ {
+ return IMG_DEFAULT_AVATAR;
+ }
+ else
+ {
+ //return LLUUID(gSavedSettings.getString(default_image_name));
+ // *TODO: Fix this.
+ return LLUUID::null;
+ }
+}
+
+void LLBakingWearable::asLLSD(LLSD& sd) const
+{
+ // stub implementation. TODO: fill in.
+}
diff --git a/indra/llappearanceutility/llbakingwearable.h b/indra/llappearanceutility/llbakingwearable.h
new file mode 100644
index 0000000000..bb96dc3709
--- /dev/null
+++ b/indra/llappearanceutility/llbakingwearable.h
@@ -0,0 +1,48 @@
+/**
+ * @file llbakingwearable.h
+ * @brief Declaration of LLBakingWearable class
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBAKINGWEARABLE_H
+#define LL_LLBAKINGWEARABLE_H
+
+#include "llwearable.h"
+#include "llmd5.h"
+
+class LLBakingWearable : public LLWearable
+{
+public:
+ LLBakingWearable();
+ virtual ~LLBakingWearable();
+
+ virtual void setUpdated() const;
+ virtual void addToBakedTextureHash(LLMD5& hash) const;
+ virtual LLUUID getDefaultTextureImageID(LLAvatarAppearanceDefines::ETextureIndex index) const;
+
+ void asLLSD(LLSD& sd) const;
+
+};
+
+#endif /* LL_LLBAKINGWEARABLE_H */
+
diff --git a/indra/llappearanceutility/llbakingwearablesdata.cpp b/indra/llappearanceutility/llbakingwearablesdata.cpp
new file mode 100644
index 0000000000..18edb86348
--- /dev/null
+++ b/indra/llappearanceutility/llbakingwearablesdata.cpp
@@ -0,0 +1,131 @@
+/**
+ * @file llbakingwearablesdata.cpp
+ * @brief Implementation of LLBakingWearablesData class
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+#include "linden_common.h"
+
+#include "llbakingwearablesdata.h"
+#include "llbakingwearable.h"
+
+using namespace LLAvatarAppearanceDefines;
+
+LLBakingWearablesData::LLBakingWearablesData()
+{
+}
+
+// virtual
+LLBakingWearablesData::~LLBakingWearablesData()
+{
+ std::for_each(mWearables.begin(), mWearables.end(), DeletePointer());
+ mWearables.clear();
+}
+
+void LLBakingWearablesData::setWearableOutfit(LLSD& sd)
+{
+ LLSD::array_const_iterator type_iter = sd.beginArray();
+ LLSD::array_const_iterator type_end = sd.endArray();
+ S32 wearable_index = 0;
+ for (; type_iter != type_end && wearable_index < (S32) LLWearableType::WT_COUNT; ++type_iter, ++wearable_index)
+ {
+ LLSD::array_const_iterator wearable_iter = type_iter->beginArray();
+ LLSD::array_const_iterator wearable_end = type_iter->endArray();
+ for (; wearable_iter != wearable_end; ++wearable_iter)
+ {
+ if ( wearable_iter->isDefined() )
+ {
+ LLBakingWearable* wearable = new LLBakingWearable();
+ std::istringstream istr( (*wearable_iter)["contents"].asString() );
+ wearable->importStream(istr, mAvatarAppearance);
+
+ // Sanity check the wearable type.
+ if (wearable->getType() != wearable_index)
+ {
+ LL_WARNS() << "Unexpected wearable type! Expected " << wearable_index
+ << ", processed " << (S32) wearable->getType() << LL_ENDL;
+ // *TODO: Throw exception?
+ delete wearable;
+ continue;
+ }
+ mWearables.push_back(wearable);
+
+ const LLWearableType::EType type = wearable->getType();
+ if (wearable->getAssetType() == LLAssetType::AT_BODYPART)
+ {
+ // exactly one wearable per body part
+ setWearable(type,0,wearable);
+ }
+ else
+ {
+ pushWearable(type,wearable);
+ }
+ }
+ }
+ }
+
+ wearable_list_t::const_iterator wearable_iter = mWearables.begin();
+ wearable_list_t::const_iterator wearable_end = mWearables.end();
+ for (; wearable_iter != wearable_end; ++wearable_iter)
+ {
+ LLBakingWearable* wearable = (*wearable_iter);
+ const bool removed = false;
+ wearableUpdated(wearable, removed);
+ }
+
+ for(wearable_index = 0; wearable_index < (S32) LLWearableType::WT_COUNT; wearable_index++)
+ {
+ LLWearable* top_wearable = getTopWearable((LLWearableType::EType)wearable_index);
+ if (top_wearable)
+ {
+ top_wearable->writeToAvatar(mAvatarAppearance);
+ }
+ }
+}
+
+
+void LLBakingWearablesData::asLLSD(LLSD& sd) const
+{
+ sd = LLSD::emptyMap();
+ wearableentry_map_t::const_iterator type_iter = mWearableDatas.begin();
+ wearableentry_map_t::const_iterator type_end = mWearableDatas.end();
+ for (; type_iter != type_end; ++type_iter)
+ {
+ LLSD wearable_type_sd = LLSD::emptyArray();
+ LLWearableType::EType wearable_type = type_iter->first;
+ wearableentry_vec_t::const_iterator wearable_iter = type_iter->second.begin();
+ wearableentry_vec_t::const_iterator wearable_end = type_iter->second.end();
+ for (; wearable_iter != wearable_end; ++wearable_iter)
+ {
+ const LLBakingWearable* wearable = dynamic_cast<LLBakingWearable*>(*wearable_iter);
+ LLSD wearable_sd;
+ wearable->asLLSD(wearable_sd);
+ wearable_type_sd.append(wearable_sd);
+ }
+ sd[LLWearableType::getInstance()->getTypeName(wearable_type)] = wearable_type_sd;
+ }
+}
+
+
+
diff --git a/indra/llappearanceutility/llbakingwearablesdata.h b/indra/llappearanceutility/llbakingwearablesdata.h
new file mode 100644
index 0000000000..1db2ca4bc1
--- /dev/null
+++ b/indra/llappearanceutility/llbakingwearablesdata.h
@@ -0,0 +1,55 @@
+/**
+ * @file llbakingwearablesdata.h
+ * @brief Declaration of LLBakingWearablesData class
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBAKINGWEARABLESDATA_H
+#define LL_LLBAKINGWEARABLESDATA_H
+
+#include "llwearabledata.h"
+
+class LLBakingWearable;
+
+class LLBakingWearablesData : public LLWearableData
+{
+public:
+ LLBakingWearablesData();
+ virtual ~LLBakingWearablesData();
+
+ void setWearableOutfit(LLSD& sd);
+
+ //--------------------------------------------------------------------
+ // I/O methods
+ //--------------------------------------------------------------------
+public:
+ void asLLSD(LLSD& sd) const;
+
+private:
+ typedef std::vector<LLBakingWearable*> wearable_list_t;
+ wearable_list_t mWearables;
+
+};
+
+#endif /* LL_LLBAKINGWEARABLESDATA_H */
+
diff --git a/indra/llappearanceutility/llbakingwindow.cpp b/indra/llappearanceutility/llbakingwindow.cpp
new file mode 100644
index 0000000000..8799105932
--- /dev/null
+++ b/indra/llappearanceutility/llbakingwindow.cpp
@@ -0,0 +1,94 @@
+/**
+ * @file llbakingwindow.cpp
+ * @brief Implementation of LLBakingWindow class.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// linden includes
+#include "linden_common.h"
+
+// project includes
+#include "llappappearanceutility.h"
+#include "llbakingshadermgr.h"
+#include "llbakingwindow.h"
+#include "llgl.h"
+#include "llgltexture.h"
+#include "llvertexbuffer.h"
+
+LLBakingWindow::LLBakingWindow(S32 width, S32 height)
+{
+ const S32 WINDOW_ORIGIN_X = 0;
+ const S32 WINDOW_ORIGIN_Y = 0;
+ const U32 FLAGS = 32; // *TODO: Why did mapserver use this? mFlags looks unused.
+ const bool NO_FULLSCREEN = false;
+ const bool NO_CLEAR_BG = false;
+ const bool NO_DISABLE_VSYNC = false;
+ const bool NO_IGNORE_PIXEL_DEPTH = false;
+ const bool USE_GL = true;
+ mWindow = LLWindowManager::createWindow(this,
+ "appearanceutility", "Appearance Utility",
+ WINDOW_ORIGIN_X, WINDOW_ORIGIN_Y,
+ width, height,
+ FLAGS,
+ NO_FULLSCREEN,
+ NO_CLEAR_BG,
+ NO_DISABLE_VSYNC, //gSavedSettings.getBOOL("DisableVerticalSync"),
+ USE_GL, // not headless
+ NO_IGNORE_PIXEL_DEPTH); //gIgnorePixelDepth = false
+
+ if (nullptr == mWindow)
+ {
+ throw LLAppException(RV_UNABLE_TO_INIT_GL);
+ }
+
+ LLVertexBuffer::initClass(mWindow);
+
+ gGL.init(true);
+
+ if (!LLBakingShaderMgr::sInitialized)
+ { //immediately initialize shaders
+ LLBakingShaderMgr::sInitialized = true;
+ LLBakingShaderMgr::instance()->setShaders();
+ }
+
+ LLImageGL::initClass(mWindow, LLGLTexture::MAX_GL_IMAGE_CATEGORY, true, false);
+
+ // mWindow->show();
+ // mWindow->bringToFront();
+ // mWindow->focusClient();
+ // mWindow->gatherInput();
+}
+
+LLBakingWindow::~LLBakingWindow()
+{
+ if (mWindow)
+ {
+ LLWindowManager::destroyWindow(mWindow);
+ }
+ mWindow = nullptr;
+}
+
+void LLBakingWindow::swapBuffers()
+{
+ mWindow->swapBuffers();
+}
diff --git a/indra/llappearanceutility/llbakingwindow.h b/indra/llappearanceutility/llbakingwindow.h
new file mode 100644
index 0000000000..a6bf1d8714
--- /dev/null
+++ b/indra/llappearanceutility/llbakingwindow.h
@@ -0,0 +1,45 @@
+/**
+ * @file llbakingwindow.h
+ * @brief Declaration of LLBakingWindow class.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBAKINGWINDOW_H
+#define LL_LLBAKINGWINDOW_H
+
+#include "llwindow.h"
+#include "llwindowcallbacks.h"
+
+class LLBakingWindow : public LLWindowCallbacks
+{
+public:
+ LLBakingWindow(S32 width, S32 height);
+ ~LLBakingWindow();
+
+ void swapBuffers();
+private:
+ LLWindow* mWindow;
+};
+
+#endif /* LL_LLBAKINGWINDOW_H */
+
diff --git a/indra/llappearanceutility/llprocessparams.cpp b/indra/llappearanceutility/llprocessparams.cpp
new file mode 100755
index 0000000000..ad1b44e794
--- /dev/null
+++ b/indra/llappearanceutility/llprocessparams.cpp
@@ -0,0 +1,281 @@
+/**
+ * @file llprocessparams.cpp
+ * @brief Implementation of LLProcessParams class.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// linden includes
+#include "linden_common.h"
+
+#include "llsd.h"
+#include "llsdserialize.h"
+#include "llsdutil.h"
+#include "llsdutil_math.h"
+#include "llstl.h"
+#include "llmath.h"
+#include "llquantize.h"
+
+// appearance includes
+#include "lltexturemanagerbridge.h"
+#include "llwearabletype.h"
+#include "llavatarappearancedefines.h"
+
+// project includes
+#include "llappappearanceutility.h"
+#include "llbakingavatar.h"
+#include "llbakingtexlayer.h"
+#include "llbakingwearable.h"
+#include "llbakingwearablesdata.h"
+#include "llprocessparams.h"
+
+#define APPEARANCE_PARAM_VERSION 11000
+
+const U32 FULL_RIG_JOINT_COUNT = 20;
+
+using namespace LLAvatarAppearanceDefines;
+
+// Create a bridge to the viewer texture manager.
+class LLNullTextureManagerBridge : public LLTextureManagerBridge
+{
+public:
+ LLPointer<LLGLTexture> getLocalTexture(bool usemipmaps = true, bool generate_gl_tex = true) override
+ {
+ return nullptr;
+ }
+
+ LLPointer<LLGLTexture> getLocalTexture(const U32 width, const U32 height, const U8 components, bool usemipmaps, bool generate_gl_tex = true) override
+ {
+ return nullptr;
+ }
+
+ LLGLTexture* getFetchedTexture(const LLUUID &image_id) override
+ {
+ return nullptr;
+ }
+};
+
+LLSD dump_joint_offsets_for_avatar(LLBakingAvatar& avatar)
+{
+ LLSD joints = LLSD::emptyArray();
+
+ for (U32 joint_index = 0;; joint_index++)
+ {
+ LLJoint* pJoint = avatar.getCharacterJoint(joint_index);
+ if (!pJoint)
+ {
+ break;
+ }
+ LLVector3 pos;
+ LLUUID mesh_id;
+ if (pJoint->hasAttachmentPosOverride(pos, mesh_id))
+ {
+ LLSD info;
+ info["name"] = pJoint->getName();
+ info["pos"] = ll_sd_from_vector3(pos);
+ info["mesh_id"] = mesh_id;
+ joints.append(info);
+ }
+ }
+
+ return joints;
+}
+
+void LLProcessParams::process(std::ostream& output)
+{
+ if (!mInputData.has("wearables")) throw LLAppException(RV_UNABLE_TO_PARSE, " Missing wearables");
+
+ // Create a null-texture manager bridge.
+ gTextureManagerBridgep = new LLNullTextureManagerBridge();
+
+ // Construct the avatar.
+ LLBakingWearablesData wearable_data;
+ LLBakingAvatar avatar(&wearable_data, mApp->bakeTextureSize());
+ avatar.initInstance();
+ wearable_data.setAvatarAppearance(&avatar);
+
+ //Process the params data for joint information
+ //bool bodySizeSet = processInputDataForJointInfo( avatar );
+
+ // Extract and parse wearables.
+ wearable_data.setWearableOutfit(mInputData["wearables"]);
+
+ // Set appearance parameter to flag server-side baking.
+ avatar.setVisualParamWeight(APPEARANCE_PARAM_VERSION, 1.0f);
+
+ avatar.setSex( (avatar.getVisualParamWeight( "male" ) > 0.5f) ? SEX_MALE : SEX_FEMALE );
+
+ avatar.updateVisualParams();
+
+ // Extract texture ids, texture hashes, and avatar scale.
+ LLSD texture_ids = LLSD::emptyMap();
+
+ //Process the params data for joint information
+ bool bodySizeSet = processInputDataForJointInfo( avatar );
+
+ //if we didn't compute a body size from a mesh attachment that included
+ //joint offsets we need to do it now
+ if (!bodySizeSet )
+ {
+ avatar.computeBodySize();
+ }
+
+ for (U32 baked_index = 0; baked_index < BAKED_NUM_INDICES; baked_index++)
+ {
+ EBakedTextureIndex bake_type = (EBakedTextureIndex) baked_index;
+ LLBakingTexLayerSet* layer_set = dynamic_cast<LLBakingTexLayerSet*>(avatar.getAvatarLayerSet(bake_type));
+ const std::string& slot_name = LLAvatarAppearance::getDictionary()->getTexture(
+ LLAvatarAppearance::getDictionary()->bakedToLocalTextureIndex(bake_type) )->mDefaultImageName;
+ texture_ids[slot_name] = layer_set->computeTextureIDs();
+ }
+
+ // Extract visual params
+ U32 count = 0;
+ LLSD params = LLSD::emptyMap();
+ LLSD debug_params = LLSD::emptyMap();
+ for (LLViewerVisualParam* param = (LLViewerVisualParam*)avatar.getFirstVisualParam();
+ param;
+ param = (LLViewerVisualParam*)avatar.getNextVisualParam())
+ {
+ if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ||
+ param->getGroup() == VISUAL_PARAM_GROUP_TRANSMIT_NOT_TWEAKABLE) // do not transmit params of group VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT
+ {
+ const F32 param_value = param->getWeight();
+ const U8 new_weight = F32_to_U8(param_value, param->getMinWeight(), param->getMaxWeight());
+ LLSD body;
+ body["name"] = param->getName();
+ body["value"] = param_value;
+ body["weight"] = new_weight;
+ debug_params[LLSD(param->getID()).asString()] = body;
+ params.append(new_weight);
+ count++;
+ }
+ }
+
+ // Output
+ LLSD result;
+ result["success"] = true;
+ result["params"] = params;
+ result["debug_params"] = debug_params;
+ result["slot_textures"] = texture_ids;
+ result["avatar_scale"] = ll_sd_from_vector3(avatar.mBodySize + avatar.mAvatarOffset);
+ result["dump_joint_offsets"] = dump_joint_offsets_for_avatar(avatar);
+ output << LLSDOStreamer<LLSDXMLFormatter>(result);
+}
+
+bool LLProcessParams::processInputDataForJointInfo( LLBakingAvatar& avatar )
+{
+ bool returnResult = false;
+
+ if ( !mInputData.has("skindata") || mInputData["skindata"].isUndefined() )
+ {
+ LL_DEBUGS() << "Skipping missing skindata" << LL_ENDL;
+ return returnResult;
+ }
+
+ const LLSD& skindata = mInputData["skindata"];
+
+ //float pelvisOffset = 0.0f;
+ std::vector<std::string> jointNames;
+ std::vector<LLVector3> jointOffsets;
+
+ LLSD::map_const_iterator skinIter = skindata.beginMap();
+ LLSD::map_const_iterator skinIterEnd = skindata.endMap();
+
+ for ( ; skinIter!=skinIterEnd; ++skinIter )
+ {
+ const LLSD& skin = skinIter->second;
+ const char *uuid_str = skinIter->first.c_str();
+ const LLUUID mesh_id(uuid_str);
+
+ if ( !skin.has("joint_names") || !skin.has("joint_offset") )
+ {
+ throw LLAppException(RV_INVALID_SKIN_BLOCK);
+ }
+
+ // Build list of joints
+ {
+ LLSD::array_const_iterator iter(skin["joint_names"].beginArray());
+ LLSD::array_const_iterator iter_end(skin["joint_names"].endArray());
+ for ( ; iter != iter_end; ++iter )
+ {
+ jointNames.push_back( iter->asString() );
+ }
+ }
+ // Extract joint offsets
+ {
+ LLSD::array_const_iterator iter(skin["joint_offset"].beginArray());
+ LLSD::array_const_iterator iter_end(skin["joint_offset"].endArray());
+ for ( ; iter != iter_end; ++iter )
+ {
+ jointOffsets.push_back( ll_vector3_from_sd(*iter) );
+ }
+ }
+
+ // get at the *optional* pelvis offset
+ //if ( skin.has("pelvis_offset") )
+ //{
+ // pelvisOffset = skin["pelvis_offset"].asReal();
+ //}
+ // Now apply the extracted joint data to the avatar
+ U32 jointCount = narrow(jointNames.size());
+
+ if ( jointOffsets.size() < jointCount )
+ {
+ throw LLAppException(RV_INVALID_SKIN_BLOCK);
+ }
+
+ bool fullRig = ( jointCount>= FULL_RIG_JOINT_COUNT ) ? true : false;
+ //bool pelvisGotSet = false;
+
+ returnResult = fullRig;
+
+ if ( fullRig )
+ {
+ for ( U32 i=0; i<jointCount; ++i )
+ {
+ LLJoint* pJoint = avatar.getJoint( jointNames[i] );
+ if ( pJoint )
+ {
+ LL_DEBUGS() << "Apply joint : " << jointNames[i] << " "
+ << jointOffsets[i][0] << " "
+ << jointOffsets[i][1] << " "
+ << jointOffsets[i][2] << LL_ENDL;
+ // FIXME replace with new attachment override code.
+ //pJoint->storeCurrentXform( jointOffsets[i] );
+
+ bool active_override_changed = false;
+ pJoint->addAttachmentPosOverride(jointOffsets[i], mesh_id, "", active_override_changed);
+ }
+ }
+
+ avatar.computeBodySize();
+ avatar.mRoot->touch();
+ avatar.mRoot->updateWorldMatrixChildren();
+
+ }
+
+ jointNames.clear();
+ jointOffsets.clear();
+ }
+ return returnResult;
+}
diff --git a/indra/llappearanceutility/llprocessparams.h b/indra/llappearanceutility/llprocessparams.h
new file mode 100644
index 0000000000..6df893fe21
--- /dev/null
+++ b/indra/llappearanceutility/llprocessparams.h
@@ -0,0 +1,49 @@
+/**
+ * @file llprocessparams.h
+ * @brief Declaration of LLProcessParams class.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPROCESSPARAMS_H
+#define LL_LLPROCESSPARAMS_H
+
+#include "llbakingprocess.h"
+
+class LLBakingAvatar;
+class LLProcessParams : public LLBakingProcess
+{
+public:
+ LLProcessParams(LLAppAppearanceUtility* app) :
+ LLBakingProcess(app) {}
+
+ void process(std::ostream& output) override;
+private:
+
+ bool processInputDataForJointInfo( LLBakingAvatar& avatar );
+};
+
+
+
+
+#endif /* LL_LLPROCESSPARAMS_H */
+
diff --git a/indra/llappearanceutility/llprocessskin.cpp b/indra/llappearanceutility/llprocessskin.cpp
new file mode 100644
index 0000000000..a3d4d3c6f3
--- /dev/null
+++ b/indra/llappearanceutility/llprocessskin.cpp
@@ -0,0 +1,118 @@
+/**
+ * @file llprocessskin.cpp
+ * @brief Implementation of LLProcesSkin class.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// linden includes
+#include "linden_common.h"
+
+#include "llsd.h"
+#include "llsdserialize.h"
+#include "llsdutil.h"
+#include "llsdutil_math.h"
+#include "llstl.h"
+#include "llmath.h"
+#include "m4math.h"
+#include "v4math.h"
+
+// project includes
+#include "llappappearanceutility.h"
+#include "llprocessskin.h"
+
+void LLProcessSkin::process(std::ostream& output)
+{
+ const LLSD& dataBlock = mInputData;
+ LLSD skinData = LLSD::emptyMap();
+
+ LLSD::map_const_iterator skinIter = dataBlock.beginMap();
+ LLSD::map_const_iterator skinIterEnd = dataBlock.endMap();
+
+ for ( ; skinIter!=skinIterEnd; ++skinIter )
+ {
+ const LLSD& skin = skinIter->second;
+ if ( !skin.has("joint_names") || !skin.has("alt_inverse_bind_matrix") )
+ {
+ throw LLAppException(RV_INVALID_SKIN_BLOCK);
+ }
+
+ LLSD entry = LLSD::emptyMap();
+
+ //get all joint names from the skin
+ {
+ entry["joint_names"] = LLSD::emptyArray();
+ LLSD& joint_names = entry["joint_names"];
+ LLSD::array_const_iterator iter(skin["joint_names"].beginArray());
+ LLSD::array_const_iterator iter_end(skin["joint_names"].endArray());
+ for ( ; iter != iter_end; ++iter )
+ {
+ LL_DEBUGS() << "joint: " << iter->asString() << LL_ENDL;
+ joint_names.append(*iter);
+ }
+ }
+ //get at the translational component for the joint offsets
+ {
+ entry["joint_offset"] = LLSD::emptyArray();
+ LLSD& joint_offsets = entry["joint_offset"];
+ LLSD::array_const_iterator iter(skin["alt_inverse_bind_matrix"].beginArray());
+ LLSD::array_const_iterator iter_end(skin["alt_inverse_bind_matrix"].endArray());
+ //just get at the translational component
+ for ( ; iter != iter_end; ++iter )
+ {
+ LLMatrix4 mat;
+ for (U32 j = 0; j < 4; j++)
+ {
+ for (U32 k = 0; k < 4; k++)
+ {
+ mat.mMatrix[j][k] = static_cast<F32>((*iter)[j*4+k].asReal());
+ }
+ }
+ joint_offsets.append( ll_sd_from_vector3( mat.getTranslation() ));
+ LL_DEBUGS() << "offset: [" << mat.getTranslation()[0] << " "
+ << mat.getTranslation()[1] << " "
+ << mat.getTranslation()[2] << " ]" << LL_ENDL;
+ }
+ }
+
+ //get at the *optional* pelvis offset
+ if (skin.has("pelvis_offset"))
+ {
+ entry["pelvis_offset"] = skin["pelvis_offset"];
+ }
+ else
+ {
+ entry["pelvis_offset"] = LLSD::Real(0.f);
+ }
+
+ //add block to outgoing result llsd
+ skinData[skinIter->first] = entry;
+ }
+
+ //dump the result llsd into the outgoing output
+ LLSD result;
+ result["success"] = true;
+ result["skindata"] = skinData;
+ LL_DEBUGS() << "---------------------------\n" << result << LL_ENDL;
+ output << LLSDOStreamer<LLSDXMLFormatter>(result);
+}
+
diff --git a/indra/llappearanceutility/llprocessskin.h b/indra/llappearanceutility/llprocessskin.h
new file mode 100644
index 0000000000..a3cc8c7087
--- /dev/null
+++ b/indra/llappearanceutility/llprocessskin.h
@@ -0,0 +1,43 @@
+/**
+ * @file llprocessskin.h
+ * @brief Declaration of LLProcessSkin class.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPROCESSSKIN_H
+#define LL_LLPROCESSSKIN_H
+
+#include "llbakingprocess.h"
+class LLProcessSkin : public LLBakingProcess
+{
+public:
+ LLProcessSkin(LLAppAppearanceUtility* app) :
+ LLBakingProcess(app) {}
+ void process(std::ostream& output) override;
+
+private:
+
+};
+
+#endif /* LL_LLPROCESSSKIN_H */
+
diff --git a/indra/llappearanceutility/llprocesstexture.cpp b/indra/llappearanceutility/llprocesstexture.cpp
new file mode 100644
index 0000000000..91ceedc8f6
--- /dev/null
+++ b/indra/llappearanceutility/llprocesstexture.cpp
@@ -0,0 +1,285 @@
+/**
+ * @file llprocesstexture.cpp
+ * @brief Implementation of LLProcessTexture class.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// linden includes
+#include "linden_common.h"
+
+#include "llfasttimer.h"
+#include "llgl.h"
+#include "llimagej2c.h"
+#include "llsd.h"
+#include "llsdserialize.h"
+#include "llsdutil.h"
+
+// appearance includes
+#include "llwearabletype.h"
+#include "llavatarappearancedefines.h"
+
+// project includes
+#include "llappappearanceutility.h"
+#include "llbakingavatar.h"
+#include "llbakingtexlayer.h"
+#include "llbakingtexture.h"
+#include "llbakingwearable.h"
+#include "llbakingwearablesdata.h"
+#include "llbakingwindow.h"
+#include "llprocesstexture.h"
+
+static const S32 MAX_SIZE_LLSD_HEADER = 1024 * 1024;
+static const bool USE_MIP_MAPS = true;
+
+static const S32 EYES_SLOT_DIMENSIONS=512;
+
+using namespace LLAvatarAppearanceDefines;
+
+LLProcessTexture::LLProcessTexture(LLAppAppearanceUtility* app)
+ : LLBakingProcess(app),
+ mWindow(nullptr),
+ mInputRaw(nullptr),
+ mBakeSize(512)
+{
+}
+
+void LLProcessTexture::cleanup()
+{
+ delete mWindow;
+}
+
+static LLFastTimer::DeclareTimer FTM_CREATE_TEXTURE_FROM_STREAM("Create texture from stream.");
+static LLPointer<LLImageRaw> create_texture_from_stream(std::istream& input,
+ S32 texture_size,
+ const LLUUID& id)
+{
+ LL_RECORD_BLOCK_TIME(FTM_CREATE_TEXTURE_FROM_STREAM);
+ // Read compressed j2c texture data from the input stream.
+ U8* buffer = (U8*) ll_aligned_malloc_16(texture_size);
+ input.read((char*) buffer, texture_size);
+
+ if (input.gcount() < texture_size)
+ {
+ ll_aligned_free_16(buffer);
+ throw LLAppException(RV_UNABLE_TO_DECODE, " Early EOF in input stream.");
+ }
+ if (input.gcount() > texture_size)
+ {
+ ll_aligned_free_16(buffer);
+ throw LLAppException(RV_UNABLE_TO_DECODE, " Read too much data from input stream: Programming Error.");
+ }
+
+ const S32 DISCARD_FULL_TEXTURE_RESOLUTION = 0;
+ LLPointer<LLImageJ2C> j2c = new LLImageJ2C();
+ j2c->setDiscardLevel(DISCARD_FULL_TEXTURE_RESOLUTION);
+ // Transfer the j2c buffer to an LLImageJ2C object.
+ // This gives memory ownership of buffer to LLImageJ2C
+ if (!j2c->validate(buffer, texture_size))
+ {
+ throw LLAppException(RV_UNABLE_TO_DECODE, " Unable to validate J2C: " + LLImage::getLastThreadError());
+ }
+ if (!(j2c->getWidth() * j2c->getHeight() * j2c->getComponents() > 0))
+ {
+ throw LLAppException(RV_UNABLE_TO_DECODE, " Invalid dimensions.");
+ }
+
+ // Decompress the J2C image into a raw image.
+ LLPointer<LLImageRaw> image_raw = new LLImageRaw(j2c->getWidth(),
+ j2c->getHeight(),
+ j2c->getComponents());
+ const F32 MAX_DECODE_TIME = 60.f;
+ j2c->setDiscardLevel(0);
+ if (!j2c->decode(image_raw, MAX_DECODE_TIME))
+ {
+ throw LLAppException(RV_UNABLE_TO_DECODE, " Decoding timeout.");
+ }
+ // *TODO: Check for decode failure?
+ LL_DEBUGS() << "ID: " << id << ", Raw Width: " << image_raw->getWidth() << ", Raw Height: " << image_raw->getHeight()
+ << ", Raw Components: " << (S32) image_raw->getComponents()
+ << ", J2C Width: " << j2c->getWidth() << ", J2C Height: " << j2c->getHeight()
+ << ", J2C Components: " << (S32) j2c->getComponents() << LL_ENDL;
+
+ return image_raw;
+}
+
+void LLProcessTexture::parseInput(std::istream& input)
+{
+ mInputRaw = &input;
+ LL_DEBUGS() << "Reading..." << LL_ENDL;
+ // Parse LLSD header.
+ mInputData = LLSDSerialize::fromBinary( *mInputRaw, MAX_SIZE_LLSD_HEADER );
+ if (mInputData.isUndefined()) throw LLAppException(RV_UNABLE_TO_PARSE);
+ if (!mInputData.has("slot_id")) throw LLAppException(RV_UNABLE_TO_PARSE, " Missing slot id");
+ if (!mInputData.has("textures")) throw LLAppException(RV_UNABLE_TO_PARSE, " Missing texture header");
+ if (!mInputData.has("wearables")) throw LLAppException(RV_UNABLE_TO_PARSE, " Missing wearables");
+
+ // Verify the slot_id is valid.
+ if (BAKED_NUM_INDICES == LLAvatarAppearance::getDictionary()->findBakedByImageName(mInputData["slot_id"].asString()))
+ {
+ throw LLAppException(RV_UNABLE_TO_PARSE, " Invalid slot id");
+ }
+}
+
+void LLProcessTexture::init()
+{
+ if (mApp->isDebugMode()) gDebugGL = true;
+
+ S32 maxTextureDecodedWidth = 0;
+ S32 maxTextureDecodedHeight = 0;
+
+ // Extract texture data.
+ LLSD::array_const_iterator iter = mInputData["textures"].beginArray();
+ LLSD::array_const_iterator end = mInputData["textures"].endArray();
+ std::map< LLUUID, LLPointer<LLImageRaw> > imageRawMap;
+
+ for (; iter != end; ++iter)
+ {
+ LLUUID texture_id = (*iter)[0].asUUID();
+ S32 texture_size = (*iter)[1];
+ imageRawMap[texture_id] = create_texture_from_stream(*mInputRaw, texture_size, texture_id);
+ maxTextureDecodedWidth = imageRawMap[texture_id]->getWidth() > maxTextureDecodedWidth ? imageRawMap[texture_id]->getWidth() : maxTextureDecodedWidth;
+ maxTextureDecodedHeight = imageRawMap[texture_id]->getHeight() > maxTextureDecodedHeight ? imageRawMap[texture_id]->getHeight() : maxTextureDecodedHeight;
+ }
+
+ if ("eyes" == mInputData["slot_id"].asString())
+ {
+ mBakeSize = 512;
+ }
+ else
+ {
+ // optimization: maybe we could use maxTextureDecodedWidth and
+ // maxTextureDecodedHeight for new LLBakingWindow below?
+ if ((maxTextureDecodedWidth > 1024) || (maxTextureDecodedHeight > 1024))
+ {
+ mBakeSize = 2048;
+ }
+ else if ((maxTextureDecodedWidth > 512) || (maxTextureDecodedHeight > 512))
+ {
+ mBakeSize = 1024;
+ }
+ else
+ {
+ mBakeSize = 512;
+ }
+ }
+
+ mWindow = new LLBakingWindow(mBakeSize, mBakeSize);
+
+ for (iter = mInputData["textures"].beginArray(); iter != mInputData["textures"].endArray(); ++iter)
+ {
+ LLUUID texture_id = (*iter)[0].asUUID();
+
+ LLPointer<LLBakingTexture> texture = new LLBakingTexture(texture_id, imageRawMap[texture_id]);
+ texture->forceActive();
+ texture->setGLTextureCreated(true);
+
+ mTextureData[texture_id] = texture;
+ }
+
+}
+
+LLPointer<LLGLTexture> LLProcessTexture::getLocalTexture(bool usemipmaps, bool generate_gl_tex)
+{
+ LLPointer<LLBakingTexture> tex = new LLBakingTexture(usemipmaps);
+ if(generate_gl_tex)
+ {
+ tex->generateGLTexture() ;
+ tex->setCategory(LLGLTexture::LOCAL) ;
+ }
+ return tex ;
+}
+
+LLPointer<LLGLTexture> LLProcessTexture::getLocalTexture(const U32 width, const U32 height, const U8 components, bool usemipmaps, bool generate_gl_tex)
+{
+ LLPointer<LLBakingTexture> tex = new LLBakingTexture(width, height, components, usemipmaps) ;
+ if(generate_gl_tex)
+ {
+ tex->generateGLTexture() ;
+ tex->setCategory(LLGLTexture::LOCAL) ;
+ }
+ return tex ;
+}
+
+LLGLTexture* LLProcessTexture::getFetchedTexture(const LLUUID &image_id)
+{
+ texture_map_t::iterator texture_iter = mTextureData.find(image_id);
+ if (mTextureData.end() == texture_iter)
+ {
+ LL_DEBUGS() << "Ignoring unused texture id: " << image_id << LL_ENDL;
+ return nullptr;
+ }
+
+ return texture_iter->second;
+}
+
+void LLProcessTexture::process(std::ostream& output)
+{
+ LL_DEBUGS() << "Building avatar..." << LL_ENDL;
+ // Set ourself as the texture bridge.
+ gTextureManagerBridgep = this;
+
+ // Construct the avatar.
+ LLBakingWearablesData wearable_data;
+ LLBakingAvatar avatar(&wearable_data, mBakeSize);
+ avatar.initInstance();
+ wearable_data.setAvatarAppearance(&avatar);
+
+ // Extract and parse wearables.
+ wearable_data.setWearableOutfit(mInputData["wearables"]);
+
+ avatar.setSex( (avatar.getVisualParamWeight( "male" ) > 0.5f) ? SEX_MALE : SEX_FEMALE );
+
+ avatar.updateVisualParams();
+
+ // Prepare gl for avatar baking
+ glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
+ LLGLEnable color_mat(GL_COLOR_MATERIAL);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
+
+ EBakedTextureIndex bake_type = LLAvatarAppearance::getDictionary()->findBakedByImageName(mInputData["slot_id"].asString());
+ LLTexLayerSet* layer_set = avatar.getAvatarLayerSet(bake_type);
+ LLBakingTexLayerSetBuffer* composite = dynamic_cast<LLBakingTexLayerSetBuffer*> (layer_set->getComposite());
+ if (!composite)
+ {
+ throw LLAppException(RV_UNABLE_TO_BAKE, " Could not build composite.");
+ }
+
+ LL_DEBUGS() << "Rendering..." << LL_ENDL;
+ if (!composite->render())
+ {
+ throw LLAppException(RV_UNABLE_TO_BAKE, " Failed to render composite.");
+ }
+
+ mWindow->swapBuffers();
+
+ LL_DEBUGS() << "Compressing..." << LL_ENDL;
+ LLImageJ2C* j2c = composite->getCompressedImage();
+ if (!j2c)
+ {
+ throw LLAppException(RV_UNABLE_TO_BAKE, " Could not build image.");
+ }
+
+ LL_DEBUGS() << "Writing..." << LL_ENDL;
+ output.write((char*)j2c->getData(), j2c->getDataSize());
+ LL_DEBUGS() << "Done." << LL_ENDL;
+}
diff --git a/indra/llappearanceutility/llprocesstexture.h b/indra/llappearanceutility/llprocesstexture.h
new file mode 100644
index 0000000000..8bf2c7396f
--- /dev/null
+++ b/indra/llappearanceutility/llprocesstexture.h
@@ -0,0 +1,63 @@
+/**
+ * @file llprocesstexture.h
+ * @brief Declaration of LLProcessTexture class.
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPROCESSTEXTURE_H
+#define LL_LLPROCESSTEXTURE_H
+
+#include "llbakingprocess.h"
+#include "llbakingtexture.h"
+#include "llpointer.h"
+#include "lltexturemanagerbridge.h"
+#include "llbakingwindow.h"
+
+class LLBakingWindow;
+
+class LLProcessTexture : public LLBakingProcess, public LLTextureManagerBridge
+{
+public:
+ LLProcessTexture(LLAppAppearanceUtility* app);
+
+ /////// LLBakingProcess interface. /////////
+ void parseInput(std::istream& input) override;
+ void process(std::ostream& output) override;
+ void init() override;
+ void cleanup() override;
+
+ /////// LLTextureManagerBridge interface. ////////
+ LLPointer<LLGLTexture> getLocalTexture(bool usemipmaps = true, bool generate_gl_tex = true) override;
+ LLPointer<LLGLTexture> getLocalTexture(const U32 width, const U32 height, const U8 components, bool usemipmaps, bool generate_gl_tex = true) override;
+ LLGLTexture* getFetchedTexture(const LLUUID &image_id) override;
+
+private:
+ typedef std::map< LLUUID, LLPointer<LLBakingTexture> > texture_map_t;
+ texture_map_t mTextureData;
+ LLBakingWindow* mWindow;
+ std::istream* mInputRaw;
+ S32 mBakeSize;
+};
+
+#endif /* LL_LLPROCESSTEXTURE_H */
+
diff --git a/indra/llappearanceutility/tests/joint-offsets.xml b/indra/llappearanceutility/tests/joint-offsets.xml
new file mode 100644
index 0000000000..4dca3c3429
--- /dev/null
+++ b/indra/llappearanceutility/tests/joint-offsets.xml
@@ -0,0 +1 @@
+<?xml version="1.0" ?><llsd><map><key>92a7dd5c-bc30-9952-3b3b-e6cc10336cbe</key><map><key>bind_shape_matrix</key><array><real>0.04880329594016075</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.048803336918354034</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.04902994632720947</real><real>0.0</real><real>0.05886554718017578</real><real>-0.0343865305185318</real><real>1.7572450637817383</real><real>1.0</real></array><key>joint_names</key><array><string>mEyeLeft</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mEyeRight</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.09042750298976898</real><real>0.03717460110783577</real><real>0.08056280016899109</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.09042750298976898</real><real>-0.03717460110783577</real><real>0.08056280016899109</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.06363839656114578</real><real>-0.03717460110783577</real><real>-1.8997000455856323</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.06363839656114578</real><real>0.03717460110783577</real><real>-1.8997000455856323</real><real>1.0</real></array></array></map><key>971cf873-afce-8b69-44d6-3f5879cb94c2</key><map><key>bind_shape_matrix</key><array><real>0.02992800809442997</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.04658059775829315</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.009469985961914062</real><real>0.0</real><real>0.13773700594902039</real><real>5.450006574392319e-05</real><real>1.6883649826049805</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750399947166443</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017178799957036972</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.951159954071045</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map><key>7e7a6834-8b41-4029-8f87-ce57b7d05bee</key><map><key>bind_shape_matrix</key><array><real>0.2741509974002838</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.15283240377902985</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.2336200475692749</real><real>0.0</real><real>0.03308449685573578</real><real>0.0</real><real>1.7400600910186768</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750399947166443</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017178799957036972</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.951159954071045</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map><key>547d8392-9f19-35fb-3508-121eea388f0a</key><map><key>bind_shape_matrix</key><array><real>0.1242017075419426</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.04083459824323654</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.014499902725219727</real><real>0.0</real><real>0.07738315314054489</real><real>0.0</real><real>1.6899499893188477</real><real>1.0</real></array><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceTongueBase</string><string>mFaceTeethLower</string><string>mFaceTongueTip</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.029850399121642113</real><real>0.0</real><real>0.007831689901649952</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.038916200399398804</real><real>0.0</real><real>-0.002775429980829358</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.08735450357198715</real><real>0.0</real><real>-1.8282899856567383</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.12627099454402924</real><real>0.0</real><real>-1.825510025024414</real><real>1.0</real></array></array></map><key>ed796a27-cff0-454a-ecec-fd10794ca2c9</key><map><key>bind_shape_matrix</key><array><real>0.007152989972382784</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.019312690943479538</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.023620009422302246</real><real>0.0</real><real>0.16310149431228638</real><real>0.0002091950736939907</real><real>1.7110600471496582</real><real>1.0</real></array><key>joint_names</key><array><string>mFaceNoseBase</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceLipUpperCenter</string><string>mFaceTeethUpper</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array></array></map><key>fa0aabfe-4b1c-fa9b-4942-74e7e7f50fe2</key><map><key>bind_shape_matrix</key><array><real>0.02271599881350994</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.02271599881350994</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.022709965705871582</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0670149326324463</real><real>1.0</real></array><key>joint_names</key><array><string>mPelvis</string><string>mHandMiddle1Left</string><string>mHandMiddle2Left</string><string>mHandMiddle3Left</string><string>mHandIndex1Left</string><string>mHandIndex2Left</string><string>mHandIndex3Left</string><string>mHandRing1Left</string><string>mHandRing2Left</string><string>mHandRing3Left</string><string>mHandPinky1Left</string><string>mHandPinky2Left</string><string>mHandPinky3Left</string><string>mHandThumb1Left</string><string>mHandThumb2Left</string><string>mHandThumb3Left</string><string>mHandMiddle1Right</string><string>mHandMiddle2Right</string><string>mHandMiddle3Right</string><string>mHandIndex1Right</string><string>mHandIndex2Right</string><string>mHandIndex3Right</string><string>mHandRing1Right</string><string>mHandRing2Right</string><string>mHandRing3Right</string><string>mHandPinky1Right</string><string>mHandPinky2Right</string><string>mHandPinky3Right</string><string>mHandThumb1Right</string><string>mHandThumb2Right</string><string>mHandThumb3Right</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>0.9987319707870483</real><real>0.04983130097389221</real><real>-0.007089749909937382</real><real>0.0</real><real>-0.030134299769997597</real><real>0.704800009727478</real><real>0.708765983581543</real><real>0.0</real><real>0.040315598249435425</real><real>-0.7076539993286133</real><real>0.705407977104187</real><real>0.0</real><real>0.015188699588179588</real><real>0.09894219785928726</real><real>0.010429499670863152</real><real>1.0</real></array><array><real>0.9989460110664368</real><real>0.045610301196575165</real><real>-0.00513580022379756</real><real>0.0</real><real>-0.028957000002264977</real><real>0.7130839824676514</real><real>0.7004799842834473</real><real>0.0</real><real>0.03561139851808548</real><real>-0.6995930075645447</real><real>0.7136539816856384</real><real>0.0</real><real>-0.0010505600366741419</real><real>0.04202070087194443</real><real>-0.006302990019321442</real><real>1.0</real></array><array><real>0.9963470101356506</real><real>0.08039940148591995</real><real>-0.02878049947321415</real><real>0.0</real><real>-0.038300998508930206</real><real>0.7219560146331787</real><real>0.6908779740333557</real><real>0.0</real><real>0.07632440328598022</real><real>-0.6872519850730896</real><real>0.7223989963531494</real><real>0.0</real><real>-0.0005042509874328971</real><real>0.024710899218916893</real><real>-0.004034650046378374</real><real>1.0</real></array><array><real>0.9319689869880676</real><real>-0.24829800426959991</real><real>0.26416099071502686</real><real>0.0</real><real>0.02338249981403351</real><real>0.768297016620636</real><real>0.6396660208702087</real><real>0.0</real><real>-0.3617820143699646</real><real>-0.589972972869873</real><real>0.7218350172042847</real><real>0.0</real><real>0.0342739000916481</real><real>0.09468069672584534</real><real>0.009629939682781696</real><real>1.0</real></array><array><real>0.9427329897880554</real><real>-0.22354599833488464</real><real>0.2475530058145523</real><real>0.0</real><real>0.01767759956419468</real><real>0.774619996547699</real><real>0.6321790218353271</real><real>0.0</real><real>-0.333079993724823</real><real>-0.5916000008583069</real><real>0.7342119812965393</real><real>0.0</real><real>0.017191000282764435</real><real>0.03640490025281906</real><real>-0.006067920010536909</real><real>1.0</real></array><array><real>0.9429500102996826</real><real>-0.2165369987487793</real><real>0.2528969943523407</real><real>0.0</real><real>0.00269406009465456</real><real>0.7645390033721924</real><real>0.6445720195770264</real><real>0.0</real><real>-0.3329229950904846</real><real>-0.6071180105209351</real><real>0.7215059995651245</real><real>0.0</real><real>0.010213700123131275</real><real>0.023345300927758217</real><real>-0.004377489909529686</real><real>1.0</real></array><array><real>0.965412974357605</real><real>0.157709002494812</real><real>-0.20761699974536896</real><real>0.0</real><real>0.015564500354230404</real><real>0.7600290179252625</real><real>0.6497020125389099</real><real>0.0</real><real>0.2602590024471283</real><real>-0.6304630041122437</real><real>0.7312880158424377</real><real>0.0</real><real>-0.0036476401146501303</real><real>0.09658080339431763</real><real>0.004405209794640541</real><real>1.0</real></array><array><real>0.9724739789962769</real><real>0.11432900279760361</real><real>-0.20303800702095032</real><real>0.0</real><real>0.04479910060763359</real><real>0.7633640170097351</real><real>0.6444140076637268</real><real>0.0</real><real>0.2286670058965683</real><real>-0.6357709765434265</real><real>0.7372289896011353</real><real>0.0</real><real>-0.012315300293266773</real><real>0.035998500883579254</real><real>-0.007578520104289055</real><real>1.0</real></array><array><real>0.9637609720230103</real><real>0.15707699954509735</real><real>-0.2156199961900711</real><real>0.0</real><real>0.018911100924015045</real><real>0.7660049796104431</real><real>0.6425570249557495</real><real>0.0</real><real>0.2660970091819763</real><real>-0.6233490109443665</real><real>0.7352749705314636</real><real>0.0</real><real>-0.006562709808349609</real><real>0.02019299939274788</real><real>-0.004543889779597521</real><real>1.0</real></array><array><real>0.8221949934959412</real><real>0.3776470124721527</real><real>-0.4258840084075928</real><real>0.0</real><real>-0.11812599748373032</real><real>0.8451250195503235</real><real>0.521353006362915</real><real>0.0</real><real>0.5568130016326904</real><real>-0.3783459961414337</real><real>0.739467978477478</real><real>0.0</real><real>-0.023213399574160576</real><real>0.08812329918146133</real><real>-0.004173850174993277</real><real>1.0</real></array><array><real>0.8617600202560425</real><real>0.33954399824142456</real><real>-0.3769359886646271</real><real>0.0</real><real>-0.10624899715185165</real><real>0.8473150134086609</real><real>0.5203530192375183</real><real>0.0</real><real>0.49606600403785706</real><real>-0.4083710014820099</real><real>0.7662580013275146</real><real>0.0</real><real>-0.022267799824476242</real><real>0.02319590002298355</real><real>-0.005566920153796673</real><real>1.0</real></array><array><real>0.8747770190238953</real><real>0.3211840093135834</real><real>-0.3627749979496002</real><real>0.0</real><real>-0.10898099839687347</real><real>0.8599650263786316</real><real>0.4985809922218323</real><real>0.0</real><real>0.47211000323295593</real><real>-0.3966119885444641</real><real>0.7872809767723083</real><real>0.0</real><real>-0.01243670005351305</real><real>0.014924099668860435</real><real>-0.003316479967907071</real><real>1.0</real></array><array><real>0.9163669943809509</real><real>-0.07201720029115677</real><real>0.3938089907169342</real><real>0.0</real><real>-0.1188109964132309</real><real>0.8904470205307007</real><real>0.439303994178772</real><real>0.0</real><real>-0.38230299949645996</real><real>-0.4493519961833954</real><real>0.807420015335083</real><real>0.0</real><real>0.03221559897065163</real><real>0.02088090032339096</real><real>-0.00855305977165699</real><real>1.0</real></array><array><real>0.9283679723739624</real><real>-0.020162200555205345</real><real>0.3711149990558624</real><real>0.0</real><real>-0.16619600355625153</real><real>0.8706110119819641</real><real>0.4630500078201294</real><real>0.0</real><real>-0.33243298530578613</real><real>-0.4915589988231659</real><real>0.8048970103263855</real><real>0.0</real><real>0.029450999572873116</real><real>0.03365840017795563</real><real>-0.0010520200012251735</real><real>1.0</real></array><array><real>0.928991973400116</real><real>0.07955490052700043</real><real>0.3614490032196045</real><real>0.0</real><real>-0.2616580128669739</real><real>0.8318700194358826</real><real>0.4894149899482727</real><real>0.0</real><real>-0.2617430090904236</real><real>-0.5492380261421204</real><real>0.7936170101165771</real><real>0.0</real><real>0.020924899727106094</real><real>0.028203699737787247</real><real>-0.000909622001927346</real><real>1.0</real></array><array><real>0.9987319707870483</real><real>-0.04983120039105415</real><real>-0.007089769933372736</real><real>0.0</real><real>0.030134299769997597</real><real>0.704800009727478</real><real>-0.708765983581543</real><real>0.0</real><real>0.040315501391887665</real><real>0.7076539993286133</real><real>0.705407977104187</real><real>0.0</real><real>0.015188699588179588</real><real>-0.09894219785928726</real><real>0.010429499670863152</real><real>1.0</real></array><array><real>0.9989460110664368</real><real>-0.045610301196575165</real><real>-0.00513580022379756</real><real>0.0</real><real>0.028957000002264977</real><real>0.7130839824676514</real><real>-0.7004799842834473</real><real>0.0</real><real>0.03561139851808548</real><real>0.6995930075645447</real><real>0.7136539816856384</real><real>0.0</real><real>-0.0010505500249564648</real><real>-0.042020801454782486</real><real>-0.006302880123257637</real><real>1.0</real></array><array><real>0.9963470101356506</real><real>-0.08039940148591995</real><real>-0.02878049947321415</real><real>0.0</real><real>0.038300998508930206</real><real>0.7219560146331787</real><real>-0.6908779740333557</real><real>0.0</real><real>0.07632440328598022</real><real>0.6872519850730896</real><real>0.7223989963531494</real><real>0.0</real><real>-0.0005042660050094128</real><real>-0.024710899218916893</real><real>-0.0040346598252654076</real><real>1.0</real></array><array><real>0.9319689869880676</real><real>0.24829800426959991</real><real>0.26416099071502686</real><real>0.0</real><real>-0.023382600396871567</real><real>0.768297016620636</real><real>-0.6396669745445251</real><real>0.0</real><real>-0.3617820143699646</real><real>0.589972972869873</real><real>0.7218350172042847</real><real>0.0</real><real>0.0342739000916481</real><real>-0.09468069672584534</real><real>0.009629939682781696</real><real>1.0</real></array><array><real>0.9427329897880554</real><real>0.22354599833488464</real><real>0.2475530058145523</real><real>0.0</real><real>-0.017677700147032738</real><real>0.774619996547699</real><real>-0.6321790218353271</real><real>0.0</real><real>-0.333079993724823</real><real>0.5916000008583069</real><real>0.7342119812965393</real><real>0.0</real><real>0.017191000282764435</real><real>-0.03640500083565712</real><real>-0.006067819893360138</real><real>1.0</real></array><array><real>0.9429500102996826</real><real>0.2165369987487793</real><real>0.2528969943523407</real><real>0.0</real><real>-0.002694070106372237</real><real>0.7645390033721924</real><real>-0.6445720195770264</real><real>0.0</real><real>-0.3329229950904846</real><real>0.6071180105209351</real><real>0.7215059995651245</real><real>0.0</real><real>0.010213700123131275</real><real>-0.023345300927758217</real><real>-0.004377489909529686</real><real>1.0</real></array><array><real>0.965412974357605</real><real>-0.157709002494812</real><real>-0.20761699974536896</real><real>0.0</real><real>-0.015564500354230404</real><real>0.7600290179252625</real><real>-0.6497020125389099</real><real>0.0</real><real>0.2602590024471283</real><real>0.6304630041122437</real><real>0.7312880158424377</real><real>0.0</real><real>-0.0036476401146501303</real><real>-0.09658080339431763</real><real>0.004405209794640541</real><real>1.0</real></array><array><real>0.9724739789962769</real><real>-0.11432900279760361</real><real>-0.20303800702095032</real><real>0.0</real><real>-0.04479910060763359</real><real>0.7633640170097351</real><real>-0.6444140076637268</real><real>0.0</real><real>0.2286670058965683</real><real>0.6357709765434265</real><real>0.7372289896011353</real><real>0.0</real><real>-0.012315300293266773</real><real>-0.035998400300741196</real><real>-0.007578390184789896</real><real>1.0</real></array><array><real>0.9637609720230103</real><real>-0.15707699954509735</real><real>-0.2156199961900711</real><real>0.0</real><real>-0.018911100924015045</real><real>0.7660049796104431</real><real>-0.6425570249557495</real><real>0.0</real><real>0.2660970091819763</real><real>0.6233490109443665</real><real>0.7352749705314636</real><real>0.0</real><real>-0.006562769878655672</real><real>-0.02019290067255497</real><real>-0.004543649964034557</real><real>1.0</real></array><array><real>0.8221949934959412</real><real>-0.3776470124721527</real><real>-0.4258840084075928</real><real>0.0</real><real>0.11812599748373032</real><real>0.8451250195503235</real><real>-0.521353006362915</real><real>0.0</real><real>0.5568130016326904</real><real>0.3783459961414337</real><real>0.739467978477478</real><real>0.0</real><real>-0.023213399574160576</real><real>-0.08812329918146133</real><real>-0.004173850174993277</real><real>1.0</real></array><array><real>0.8617600202560425</real><real>-0.33954399824142456</real><real>-0.3769359886646271</real><real>0.0</real><real>0.10624899715185165</real><real>0.8473150134086609</real><real>-0.5203530192375183</real><real>0.0</real><real>0.49606600403785706</real><real>0.4083710014820099</real><real>0.7662580013275146</real><real>0.0</real><real>-0.022267799824476242</real><real>-0.023195700719952583</real><real>-0.005566900130361319</real><real>1.0</real></array><array><real>0.8747770190238953</real><real>-0.3211840093135834</real><real>-0.3627749979496002</real><real>0.0</real><real>0.10898099839687347</real><real>0.8599650263786316</real><real>-0.4985809922218323</real><real>0.0</real><real>0.47211000323295593</real><real>0.3966119885444641</real><real>0.7872809767723083</real><real>0.0</real><real>-0.012436600401997566</real><real>-0.014924000017344952</real><real>-0.0033167300280183554</real><real>1.0</real></array><array><real>0.9163669943809509</real><real>0.07201740145683289</real><real>0.3938089907169342</real><real>0.0</real><real>0.1188109964132309</real><real>0.8904470205307007</real><real>-0.439303994178772</real><real>0.0</real><real>-0.38230299949645996</real><real>0.4493519961833954</real><real>0.807420015335083</real><real>0.0</real><real>0.03221559897065163</real><real>-0.02088090032339096</real><real>-0.00855305977165699</real><real>1.0</real></array><array><real>0.9283679723739624</real><real>0.020162200555205345</real><real>0.3711149990558624</real><real>0.0</real><real>0.16619600355625153</real><real>0.8706110119819641</real><real>-0.4630500078201294</real><real>0.0</real><real>-0.33243298530578613</real><real>0.4915589988231659</real><real>0.8048970103263855</real><real>0.0</real><real>0.029450900852680206</real><real>-0.03365840017795563</real><real>-0.0010520999785512686</real><real>1.0</real></array><array><real>0.928991973400116</real><real>-0.07955490052700043</real><real>0.3614490032196045</real><real>0.0</real><real>0.2616580128669739</real><real>0.8318700194358826</real><real>-0.4894149899482727</real><real>0.0</real><real>-0.2617430090904236</real><real>0.5492380261421204</real><real>0.7936170101165771</real><real>0.0</real><real>0.020925000309944153</real><real>-0.028203800320625305</real><real>-0.0009097899892367423</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.067020058631897</real><real>1.0</real></array><array><real>0.9987319707870483</real><real>0.04983130097389221</real><real>-0.007089749909937382</real><real>0.0</real><real>-0.030134299769997597</real><real>0.704800009727478</real><real>0.708765983581543</real><real>0.0</real><real>0.040315598249435425</real><real>-0.7076539993286133</real><real>0.705407977104187</real><real>0.0</real><real>-0.008488760329782963</real><real>0.41053301095962524</real><real>-1.2015999555587769</real><real>1.0</real></array><array><real>0.9989460110664368</real><real>0.045610301196575165</real><real>-0.00513580022379756</real><real>0.0</real><real>-0.028957000002264977</real><real>0.7130839824676514</real><real>0.7004799842834473</real><real>0.0</real><real>0.03561139851808548</real><real>-0.6995930075645447</real><real>0.7136539816856384</real><real>0.0</real><real>-0.0029308199882507324</real><real>0.35466399788856506</real><real>-1.1994999647140503</real><real>1.0</real></array><array><real>0.9963470101356506</real><real>0.08039940148591995</real><real>-0.02878049947321415</real><real>0.0</real><real>-0.038300998508930206</real><real>0.7219560146331787</real><real>0.6908779740333557</real><real>0.0</real><real>0.07632440328598022</real><real>-0.6872519850730896</real><real>0.7223989963531494</real><real>0.0</real><real>-0.04098540171980858</real><real>0.3118860125541687</real><real>-1.1996099948883057</real><real>1.0</real></array><array><real>0.9319689869880676</real><real>-0.24829800426959991</real><real>0.26416099071502686</real><real>0.0</real><real>0.02338249981403351</real><real>0.768297016620636</real><real>0.6396660208702087</real><real>0.0</real><real>-0.3617820143699646</real><real>-0.589972972869873</real><real>0.7218350172042847</real><real>0.0</real><real>0.40104299783706665</real><real>0.2437240034341812</real><real>-1.1804200410842896</real><real>1.0</real></array><array><real>0.9427329897880554</real><real>-0.22354599833488464</real><real>0.2475530058145523</real><real>0.0</real><real>0.01767759956419468</real><real>0.774619996547699</real><real>0.6321790218353271</real><real>0.0</real><real>-0.333079993724823</real><real>-0.5916000008583069</real><real>0.7342119812965393</real><real>0.0</real><real>0.35530799627304077</real><real>0.2053389996290207</real><real>-1.183650016784668</real><real>1.0</real></array><array><real>0.9429500102996826</real><real>-0.2165369987487793</real><real>0.2528969943523407</real><real>0.0</real><real>0.00269406009465456</real><real>0.7645390033721924</real><real>0.6445720195770264</real><real>0.0</real><real>-0.3329229950904846</real><real>-0.6071180105209351</real><real>0.7215059995651245</real><real>0.0</real><real>0.35388800501823425</real><real>0.2048649936914444</real><real>-1.1728999614715576</real><real>1.0</real></array><array><real>0.965412974357605</real><real>0.157709002494812</real><real>-0.20761699974536896</real><real>0.0</real><real>0.015564500354230404</real><real>0.7600290179252625</real><real>0.6497020125389099</real><real>0.0</real><real>0.2602590024471283</real><real>-0.6304630041122437</real><real>0.7312880158424377</real><real>0.0</real><real>-0.2662949860095978</real><real>0.2996309995651245</real><real>-1.2001399993896484</real><real>1.0</real></array><array><real>0.9724739789962769</real><real>0.11432900279760361</real><real>-0.20303800702095032</real><real>0.0</real><real>0.04479910060763359</real><real>0.7633640170097351</real><real>0.6444140076637268</real><real>0.0</real><real>0.2286670058965683</real><real>-0.6357709765434265</real><real>0.7372289896011353</real><real>0.0</real><real>-0.2356870025396347</real><real>0.26565900444984436</real><real>-1.1958600282669067</real><real>1.0</real></array><array><real>0.9637609720230103</real><real>0.15707699954509735</real><real>-0.2156199961900711</real><real>0.0</real><real>0.018911100924015045</real><real>0.7660049796104431</real><real>0.6425570249557495</real><real>0.0</real><real>0.2660970091819763</real><real>-0.6233490109443665</real><real>0.7352749705314636</real><real>0.0</real><real>-0.2549220025539398</real><real>0.23242099583148956</real><real>-1.188689947128296</real><real>1.0</real></array><array><real>0.8221949934959412</real><real>0.3776470124721527</real><real>-0.4258840084075928</real><real>0.0</real><real>-0.11812599748373032</real><real>0.8451250195503235</real><real>0.521353006362915</real><real>0.0</real><real>0.5568130016326904</real><real>-0.3783459961414337</real><real>0.739467978477478</real><real>0.0</real><real>-0.5196760296821594</real><real>-0.007902019657194614</real><real>-1.1486300230026245</real><real>1.0</real></array><array><real>0.8617600202560425</real><real>0.33954399824142456</real><real>-0.3769359886646271</real><real>0.0</real><real>-0.10624899715185165</real><real>0.8473150134086609</real><real>0.5203530192375183</real><real>0.0</real><real>0.49606600403785706</real><real>-0.4083710014820099</real><real>0.7662580013275146</real><real>0.0</real><real>-0.4340290129184723</real><real>-0.0015098199946805835</real><real>-1.169010043144226</real><real>1.0</real></array><array><real>0.8747770190238953</real><real>0.3211840093135834</real><real>-0.3627749979496002</real><real>0.0</real><real>-0.10898099839687347</real><real>0.8599650263786316</real><real>0.4985809922218323</real><real>0.0</real><real>0.47211000323295593</real><real>-0.3966119885444641</real><real>0.7872809767723083</real><real>0.0</real><real>-0.3928540050983429</real><real>-0.03789449855685234</real><real>-1.1751899719238281</real><real>1.0</real></array><array><real>0.9163669943809509</real><real>-0.07201720029115677</real><real>0.3938089907169342</real><real>0.0</real><real>-0.1188109964132309</real><real>0.8904470205307007</real><real>0.439303994178772</real><real>0.0</real><real>-0.38230299949645996</real><real>-0.4493519961833954</real><real>0.807420015335083</real><real>0.0</real><real>0.51316899061203</real><real>0.09074380248785019</real><real>-1.1683000326156616</real><real>1.0</real></array><array><real>0.9283679723739624</real><real>-0.020162200555205345</real><real>0.3711149990558624</real><real>0.0</real><real>-0.16619600355625153</real><real>0.8706110119819641</real><real>0.4630500078201294</real><real>0.0</real><real>-0.33243298530578613</real><real>-0.4915589988231659</real><real>0.8048970103263855</real><real>0.0</real><real>0.45058199763298035</real><real>0.11499100178480148</real><real>-1.1762100458145142</real><real>1.0</real></array><array><real>0.928991973400116</real><real>0.07955490052700043</real><real>0.3614490032196045</real><real>0.0</real><real>-0.2616580128669739</real><real>0.8318700194358826</real><real>0.4894149899482727</real><real>0.0</real><real>-0.2617430090904236</real><real>-0.5492380261421204</real><real>0.7936170101165771</real><real>0.0</real><real>0.401203989982605</real><real>0.1690800040960312</real><real>-1.1763999462127686</real><real>1.0</real></array><array><real>0.9987319707870483</real><real>-0.04983120039105415</real><real>-0.007089769933372736</real><real>0.0</real><real>0.030134299769997597</real><real>0.704800009727478</real><real>-0.708765983581543</real><real>0.0</real><real>0.040315501391887665</real><real>0.7076539993286133</real><real>0.705407977104187</real><real>0.0</real><real>-0.008488760329782963</real><real>-0.41053301095962524</real><real>-1.2015999555587769</real><real>1.0</real></array><array><real>0.9989460110664368</real><real>-0.045610301196575165</real><real>-0.00513580022379756</real><real>0.0</real><real>0.028957000002264977</real><real>0.7130839824676514</real><real>-0.7004799842834473</real><real>0.0</real><real>0.03561139851808548</real><real>0.6995930075645447</real><real>0.7136539816856384</real><real>0.0</real><real>-0.0029308199882507324</real><real>-0.35466399788856506</real><real>-1.1994999647140503</real><real>1.0</real></array><array><real>0.9963470101356506</real><real>-0.08039940148591995</real><real>-0.02878049947321415</real><real>0.0</real><real>0.038300998508930206</real><real>0.7219560146331787</real><real>-0.6908779740333557</real><real>0.0</real><real>0.07632440328598022</real><real>0.6872519850730896</real><real>0.7223989963531494</real><real>0.0</real><real>-0.04098540171980858</real><real>-0.3118860125541687</real><real>-1.1996099948883057</real><real>1.0</real></array><array><real>0.9319689869880676</real><real>0.24829800426959991</real><real>0.26416099071502686</real><real>0.0</real><real>-0.023382600396871567</real><real>0.768297016620636</real><real>-0.6396669745445251</real><real>0.0</real><real>-0.3617820143699646</real><real>0.589972972869873</real><real>0.7218350172042847</real><real>0.0</real><real>0.40104299783706665</real><real>-0.2437240034341812</real><real>-1.1804200410842896</real><real>1.0</real></array><array><real>0.9427329897880554</real><real>0.22354599833488464</real><real>0.2475530058145523</real><real>0.0</real><real>-0.017677700147032738</real><real>0.774619996547699</real><real>-0.6321790218353271</real><real>0.0</real><real>-0.333079993724823</real><real>0.5916000008583069</real><real>0.7342119812965393</real><real>0.0</real><real>0.35530799627304077</real><real>-0.2053389996290207</real><real>-1.183650016784668</real><real>1.0</real></array><array><real>0.9429500102996826</real><real>0.2165369987487793</real><real>0.2528969943523407</real><real>0.0</real><real>-0.002694070106372237</real><real>0.7645390033721924</real><real>-0.6445720195770264</real><real>0.0</real><real>-0.3329229950904846</real><real>0.6071180105209351</real><real>0.7215059995651245</real><real>0.0</real><real>0.35388800501823425</real><real>-0.2048649936914444</real><real>-1.1728999614715576</real><real>1.0</real></array><array><real>0.965412974357605</real><real>-0.157709002494812</real><real>-0.20761699974536896</real><real>0.0</real><real>-0.015564500354230404</real><real>0.7600290179252625</real><real>-0.6497020125389099</real><real>0.0</real><real>0.2602590024471283</real><real>0.6304630041122437</real><real>0.7312880158424377</real><real>0.0</real><real>-0.2662949860095978</real><real>-0.2996309995651245</real><real>-1.2001399993896484</real><real>1.0</real></array><array><real>0.9724739789962769</real><real>-0.11432900279760361</real><real>-0.20303800702095032</real><real>0.0</real><real>-0.04479910060763359</real><real>0.7633640170097351</real><real>-0.6444140076637268</real><real>0.0</real><real>0.2286670058965683</real><real>0.6357709765434265</real><real>0.7372289896011353</real><real>0.0</real><real>-0.2356870025396347</real><real>-0.26565900444984436</real><real>-1.1958600282669067</real><real>1.0</real></array><array><real>0.9637609720230103</real><real>-0.15707699954509735</real><real>-0.2156199961900711</real><real>0.0</real><real>-0.018911100924015045</real><real>0.7660049796104431</real><real>-0.6425570249557495</real><real>0.0</real><real>0.2660970091819763</real><real>0.6233490109443665</real><real>0.7352749705314636</real><real>0.0</real><real>-0.2549220025539398</real><real>-0.23242099583148956</real><real>-1.188689947128296</real><real>1.0</real></array><array><real>0.8221949934959412</real><real>-0.3776470124721527</real><real>-0.4258840084075928</real><real>0.0</real><real>0.11812599748373032</real><real>0.8451250195503235</real><real>-0.521353006362915</real><real>0.0</real><real>0.5568130016326904</real><real>0.3783459961414337</real><real>0.739467978477478</real><real>0.0</real><real>-0.5196760296821594</real><real>0.007902019657194614</real><real>-1.1486300230026245</real><real>1.0</real></array><array><real>0.8617600202560425</real><real>-0.33954399824142456</real><real>-0.3769359886646271</real><real>0.0</real><real>0.10624899715185165</real><real>0.8473150134086609</real><real>-0.5203530192375183</real><real>0.0</real><real>0.49606600403785706</real><real>0.4083710014820099</real><real>0.7662580013275146</real><real>0.0</real><real>-0.4340290129184723</real><real>0.0015098199946805835</real><real>-1.169010043144226</real><real>1.0</real></array><array><real>0.8747770190238953</real><real>-0.3211840093135834</real><real>-0.3627749979496002</real><real>0.0</real><real>0.10898099839687347</real><real>0.8599650263786316</real><real>-0.4985809922218323</real><real>0.0</real><real>0.47211000323295593</real><real>0.3966119885444641</real><real>0.7872809767723083</real><real>0.0</real><real>-0.3928540050983429</real><real>0.03789449855685234</real><real>-1.1751899719238281</real><real>1.0</real></array><array><real>0.9163669943809509</real><real>0.07201740145683289</real><real>0.3938089907169342</real><real>0.0</real><real>0.1188109964132309</real><real>0.8904470205307007</real><real>-0.439303994178772</real><real>0.0</real><real>-0.38230299949645996</real><real>0.4493519961833954</real><real>0.807420015335083</real><real>0.0</real><real>0.51316899061203</real><real>-0.0907440036535263</real><real>-1.1683000326156616</real><real>1.0</real></array><array><real>0.9283679723739624</real><real>0.020162200555205345</real><real>0.3711149990558624</real><real>0.0</real><real>0.16619600355625153</real><real>0.8706110119819641</real><real>-0.4630500078201294</real><real>0.0</real><real>-0.33243298530578613</real><real>0.4915589988231659</real><real>0.8048970103263855</real><real>0.0</real><real>0.45058199763298035</real><real>-0.11499100178480148</real><real>-1.1762100458145142</real><real>1.0</real></array><array><real>0.928991973400116</real><real>-0.07955490052700043</real><real>0.3614490032196045</real><real>0.0</real><real>0.2616580128669739</real><real>0.8318700194358826</real><real>-0.4894149899482727</real><real>0.0</real><real>-0.2617430090904236</real><real>0.5492380261421204</real><real>0.7936170101165771</real><real>0.0</real><real>0.401203989982605</real><real>-0.1690800040960312</real><real>-1.1763999462127686</real><real>1.0</real></array></array></map><key>15659a9a-f1c1-3e38-8343-2e23e9f65d20</key><map><key>bind_shape_matrix</key><array><real>0.12950499355793</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.09769980609416962</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.13808000087738037</real><real>0.0</real><real>0.021911798045039177</real><real>-0.057047098875045776</real><real>1.8354499340057373</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>-0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>-0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>-0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>-0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array></array></map><key>1d5936bc-0501-7376-f70c-06dcfac920ed</key><map><key>bind_shape_matrix</key><array><real>0.04880329594016075</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.048803336918354034</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.04902994632720947</real><real>0.0</real><real>0.05886554718017578</real><real>0.0343865305185318</real><real>1.7572450637817383</real><real>1.0</real></array><key>joint_names</key><array><string>mEyeLeft</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mEyeRight</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.09042750298976898</real><real>0.03717460110783577</real><real>0.08056280016899109</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.09042750298976898</real><real>-0.03717460110783577</real><real>0.08056280016899109</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.06363839656114578</real><real>-0.03717460110783577</real><real>-1.8997000455856323</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.06363839656114578</real><real>0.03717460110783577</real><real>-1.8997000455856323</real><real>1.0</real></array></array></map><key>9174c7f1-bd5f-68d2-2f4f-cc9b36312067</key><map><key>bind_shape_matrix</key><array><real>0.08326390385627747</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.12516659498214722</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.10517990589141846</real><real>0.0</real><real>0.11359705030918121</real><real>0.0</real><real>1.7399399280548096</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025396499782800674</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.026076599955558777</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.03835279867053032</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.03835279867053032</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.05700350180268288</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.05700350180268288</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.05627429857850075</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.05627429857850075</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750239759683609</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017177099362015724</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.0038522500544786453</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.03835279867053032</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.03835279867053032</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.004532460123300552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.004532460123300552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.840149998664856</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.820449948310852</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.9511499404907227</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map><key>d73dea3b-b8cb-59ff-c76b-cfdcc8119bb5</key><map><key>bind_shape_matrix</key><array><real>0.08899261057376862</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.06393220275640488</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.020760059356689453</real><real>0.0</real><real>0.10354769974946976</real><real>0.0</real><real>1.693750023841858</real><real>1.0</real></array><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array></array></map><key>d0328b82-d9ca-6071-b248-17edfc7612cb</key><map><key>bind_shape_matrix</key><array><real>0.13549870252609253</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.1464741975069046</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.12077999114990234</real><real>0.0</real><real>0.10338164865970612</real><real>0.0</real><real>1.7488499879837036</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750399947166443</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017178799957036972</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.951159954071045</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map><key>05bf604d-d1c0-352b-cb2f-c37caca6f542</key><map><key>bind_shape_matrix</key><array><real>0.014549999497830868</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.035996198654174805</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.019659996032714844</real><real>0.0</real><real>0.1341239959001541</real><real>0.0</real><real>1.6930099725723267</real><real>1.0</real></array><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array></array></map><key>46ee8fb2-15f0-fa2e-d260-e7e6e8295445</key><map><key>bind_shape_matrix</key><array><real>0.14447110891342163</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07934600114822388</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0342099666595459</real><real>0.0</real><real>0.07812044024467468</real><real>0.0</real><real>1.69725501537323</real><real>1.0</real></array><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array></array></map><key>d2205615-2ce0-4ff1-2bfd-bdc77a3825cc</key><map><key>bind_shape_matrix</key><array><real>0.06583520025014877</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.1928279995918274</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.10592997074127197</real><real>0.0</real><real>0.02077449858188629</real><real>0.0</real><real>1.7146050930023193</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750399947166443</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017178799957036972</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.951159954071045</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map><key>8665c374-cb61-d418-d412-7f4ea828e119</key><map><key>bind_shape_matrix</key><array><real>0.6689305901527405</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.17128899693489075</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.1917099952697754</real><real>0.0</real><real>-0.40683069825172424</real><real>0.0</real><real>1.1260449886322021</real><real>1.0</real></array><key>joint_names</key><array><string>mTail1</string><string>mPelvis</string><string>mTail2</string><string>mTail3</string><string>mTail4</string><string>mTail6</string><string>mTail5</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.16599999368190765</real><real>0.0</real><real>0.06700000166893005</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.14775000512599945</real><real>0.0</real><real>0.0</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.12600000202655792</real><real>0.0</real><real>0.0</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.10649999976158142</real><real>0.0</real><real>0.0</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.07050000131130219</real><real>0.0</real><real>0.0</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.08399999886751175</real><real>0.0</real><real>0.0</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.16599999368190765</real><real>0.0</real><real>-1.1340199708938599</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.067020058631897</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.3137499988079071</real><real>0.0</real><real>-1.1340199708938599</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.43974998593330383</real><real>0.0</real><real>-1.1340199708938599</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.5462499856948853</real><real>0.0</real><real>-1.1340199708938599</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.7007499933242798</real><real>0.0</real><real>-1.1340199708938599</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.6302499771118164</real><real>0.0</real><real>-1.1340199708938599</real><real>1.0</real></array></array></map><key>e678576a-dc9f-5187-6ed5-5b4aafb65d7b</key><map><key>bind_shape_matrix</key><array><real>0.010342992842197418</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.06067759916186333</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.012930035591125488</real><real>0.0</real><real>0.11175650358200073</real><real>0.0</real><real>1.6866850852966309</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750399947166443</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017178799957036972</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.951159954071045</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map><key>8d23b8c8-fadf-c1b3-0b04-a3ecea292576</key><map><key>bind_shape_matrix</key><array><real>0.12950499355793</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.09769980609416962</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.13808000087738037</real><real>0.0</real><real>0.021911798045039177</real><real>0.057047098875045776</real><real>1.8354499340057373</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>-0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>-0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>-0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>-0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array></array></map><key>2a30e7ec-9840-f495-daa1-2b8d0d025a78</key><map><key>bind_shape_matrix</key><array><real>0.06447789818048477</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.06988950073719025</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.10517000406980515</real><real>0.0</real><real>0.006453849375247955</real><real>0.07881925255060196</real><real>1.8452450037002563</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>-0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>-0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>-0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>-0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array></array></map><key>3bd8d73d-be6f-8de2-39ae-1f680189bc27</key><map><key>bind_shape_matrix</key><array><real>0.06447789818048477</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.06988950073719025</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.10517000406980515</real><real>0.0</real><real>0.006453849375247955</real><real>-0.07881925255060196</real><real>1.8452450037002563</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>-0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>-0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0041375597938895226</real><real>0.04739430174231529</real><real>0.08954329788684845</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0142705999314785</real><real>0.017557399347424507</real><real>0.05648919939994812</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.0021723099052906036</real><real>-0.04483500123023987</real><real>-1.8066600561141968</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.016442900523543358</real><real>-0.062392398715019226</real><real>-1.8631500005722046</real><real>1.0</real></array></array></map><key>34db2e33-e79f-ea57-14af-c1ce9cbc63ff</key><map><key>bind_shape_matrix</key><array><real>0.03714209794998169</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.14610280096530914</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.03297996520996094</real><real>0.0</real><real>0.07929874956607819</real><real>0.0</real><real>1.7578400373458862</real><real>1.0</real></array><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>alt_inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.07562989741563797</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.00950700044631958</real><real>0.0</real><real>0.25110799074172974</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>-0.01536799967288971</real><real>0.0</real><real>0.20487700402736664</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.08407290279865265</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.067020058631897</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.035987500101327896</real><real>0.0</real><real>-0.025394700467586517</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.02500000037252903</real><real>0.0</real><real>0.04500000178813934</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10700099915266037</real><real>0.0</real><real>-0.02607489936053753</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.059168100357055664</real><real>0.0</real><real>0.004850860219448805</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>-0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03629549965262413</real><real>0.01899999938905239</real><real>-0.013485999777913094</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.02026969939470291</real><real>0.0</real><real>0.005331280175596476</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08300650119781494</real><real>0.0</real><real>-0.020363999530673027</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.08378739655017853</real><real>0.0</real><real>-0.026688499376177788</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>-0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.03427229821681976</real><real>0.01206200011074543</real><real>0.0005108119803480804</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.018112899735569954</real><real>-0.016734100878238678</real><real>0.057005301117897034</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.008231439627707005</real><real>-0.03760350123047829</real><real>0.056276001036167145</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.07319430261850357</real><real>0.0</real><real>0.08750399947166443</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.10439900308847427</real><real>0.0</real><real>0.017178799957036972</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.15049900114536285</real><real>0.0</real><real>0.003853919915854931</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.04490169882774353</real><real>-0.036976300179958344</real><real>0.038354501128196716</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.029158199205994606</real><real>-0.05687420070171356</real><real>-0.0045307897962629795</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>0.016701199114322662</real><real>0.0</real><real>0.009711739607155323</real><real>1.0</real></array></array><key>pelvis_offset</key><real>0.0</real><key>inverse_bind_matrix</key><array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.026789100840687752</real><real>0.0</real><real>-1.8191399574279785</real><real>1.0</real></array><array><real>1.1834299564361572</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.19760000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.029325399547815323</real><real>0.0</real><real>-1.607069969177246</real><real>1.0</real></array><array><real>1.01010000705719</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0416699647903442</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.015523199923336506</real><real>0.0</real><real>-1.3559600114822388</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.1510900259017944</real><real>1.0</real></array><array><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>-1.0670100450515747</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.034198399633169174</real><real>0.0</real><real>-1.8408199548721313</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0570800304412842</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.1061899662017822</real><real>0.0</real><real>0.0017891100142151117</real><real>0.0</real><real>-1.9089800119400024</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10521099716424942</real><real>0.0</real><real>-1.8401600122451782</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.220829963684082</real><real>0.0</real><real>-0.04604329913854599</real><real>0.0</real><real>-2.0834999084472656</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.14150699973106384</real><real>-0.01899999938905239</real><real>-1.8266700506210327</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.09693530201911926</real><real>0.0</real><real>-1.8257900476455688</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11720500141382217</real><real>0.0</real><real>-1.8204599618911743</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.11798600107431412</real><real>0.0</real><real>-1.8141299486160278</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.15147699415683746</real><real>-0.01206200011074543</real><real>-1.820970058441162</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>-0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>-0.016323799267411232</real><real>0.017114000394940376</real><real>-1.5125499963760376</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>-0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.8510640263557434</real><real>0.0</real><real>0.010020599700510502</real><real>0.038457199931144714</real><real>-1.511989951133728</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.07140520215034485</real><real>0.0</real><real>-1.951159954071045</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.10260900110006332</real><real>0.0</real><real>-1.8824299573898315</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.1487099975347519</real><real>0.0</real><real>-1.8694000244140625</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>-0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.04311259835958481</real><real>0.037815701216459274</real><real>-1.9031200408935547</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>-0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>-0.027369100600481033</real><real>0.058165401220321655</real><real>-1.8612099885940552</real><real>1.0</real></array><array><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.0810799598693848</real><real>0.0</real><real>0.0</real><real>0.0</real><real>0.0</real><real>1.04135000705719</real><real>0.0</real><real>-0.12191300094127655</real><real>0.0</real><real>-1.7818800210952759</real><real>1.0</real></array></array></map></map></llsd> \ No newline at end of file
diff --git a/indra/llappearanceutility/tests/joint-offsets.xml.output b/indra/llappearanceutility/tests/joint-offsets.xml.output
new file mode 100644
index 0000000000..d0f94b8f11
--- /dev/null
+++ b/indra/llappearanceutility/tests/joint-offsets.xml.output
@@ -0,0 +1 @@
+<llsd><map><key>skindata</key><map><key>05bf604d-d1c0-352b-cb2f-c37caca6f542</key><map><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string></array><key>joint_offset</key><array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array></array><key>pelvis_offset</key><real>0</real></map><key>15659a9a-f1c1-3e38-8343-2e23e9f65d20</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.01427059993147850036621094</real><real>-0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array><array><real>0.004137559793889522552490234</real><real>-0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0.004137559793889522552490234</real><real>0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.01427059993147850036621094</real><real>0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array></array><key>pelvis_offset</key><real>0</real></map><key>1d5936bc-0501-7376-f70c-06dcfac920ed</key><map><key>joint_names</key><array><string>mEyeLeft</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mEyeRight</string></array><key>joint_offset</key><array><array><real>0.09042750298976898193359375</real><real>0.03717460110783576965332031</real><real>0.0805628001689910888671875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.09042750298976898193359375</real><real>-0.03717460110783576965332031</real><real>0.0805628001689910888671875</real></array></array><key>pelvis_offset</key><real>0</real></map><key>2a30e7ec-9840-f495-daa1-2b8d0d025a78</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.01427059993147850036621094</real><real>-0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array><array><real>0.004137559793889522552490234</real><real>-0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0.004137559793889522552490234</real><real>0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.01427059993147850036621094</real><real>0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array></array><key>pelvis_offset</key><real>0</real></map><key>34db2e33-e79f-ea57-14af-c1ce9cbc63ff</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.0875039994716644287109375</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717879995703697204589844</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>3bd8d73d-be6f-8de2-39ae-1f680189bc27</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.01427059993147850036621094</real><real>-0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array><array><real>0.004137559793889522552490234</real><real>-0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0.004137559793889522552490234</real><real>0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.01427059993147850036621094</real><real>0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array></array><key>pelvis_offset</key><real>0</real></map><key>46ee8fb2-15f0-fa2e-d260-e7e6e8295445</key><map><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string></array><key>joint_offset</key><array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array></array><key>pelvis_offset</key><real>0</real></map><key>547d8392-9f19-35fb-3508-121eea388f0a</key><map><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceTongueBase</string><string>mFaceTeethLower</string><string>mFaceTongueTip</string></array><key>joint_offset</key><array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>-0.02985039912164211273193359</real><real>0</real><real>0.007831689901649951934814453</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.0389162003993988037109375</real><real>0</real><real>-0.002775429980829358100891113</real></array></array><key>pelvis_offset</key><real>0</real></map><key>7e7a6834-8b41-4029-8f87-ce57b7d05bee</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.0875039994716644287109375</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717879995703697204589844</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>8665c374-cb61-d418-d412-7f4ea828e119</key><map><key>joint_names</key><array><string>mTail1</string><string>mPelvis</string><string>mTail2</string><string>mTail3</string><string>mTail4</string><string>mTail6</string><string>mTail5</string></array><key>joint_offset</key><array><array><real>-0.1659999936819076538085938</real><real>0</real><real>0.0670000016689300537109375</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>-0.1477500051259994506835938</real><real>0</real><real>0</real></array><array><real>-0.1260000020265579223632812</real><real>0</real><real>0</real></array><array><real>-0.1064999997615814208984375</real><real>0</real><real>0</real></array><array><real>-0.07050000131130218505859375</real><real>0</real><real>0</real></array><array><real>-0.08399999886751174926757812</real><real>0</real><real>0</real></array></array><key>pelvis_offset</key><real>0</real></map><key>8d23b8c8-fadf-c1b3-0b04-a3ecea292576</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceEar2Right</string><string>mFaceEar1Right</string><string>mFaceRoot</string><string>mFaceEar1Left</string><string>mFaceEar2Left</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.01427059993147850036621094</real><real>-0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array><array><real>0.004137559793889522552490234</real><real>-0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0.004137559793889522552490234</real><real>0.04739430174231529235839844</real><real>0.08954329788684844970703125</real></array><array><real>0.01427059993147850036621094</real><real>0.01755739934742450714111328</real><real>0.0564891993999481201171875</real></array></array><key>pelvis_offset</key><real>0</real></map><key>9174c7f1-bd5f-68d2-2f4f-cc9b36312067</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539649978280067443847656</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607659995555877685546875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835279867053031921386719</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835279867053031921386719</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700350180268287658691406</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700350180268287658691406</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627429857850074768066406</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627429857850074768066406</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.08750239759683609008789062</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717709936201572418212891</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003852250054478645324707031</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835279867053031921386719</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835279867053031921386719</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004532460123300552368164062</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004532460123300552368164062</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>92a7dd5c-bc30-9952-3b3b-e6cc10336cbe</key><map><key>joint_names</key><array><string>mEyeLeft</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mEyeRight</string></array><key>joint_offset</key><array><array><real>0.09042750298976898193359375</real><real>0.03717460110783576965332031</real><real>0.0805628001689910888671875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.09042750298976898193359375</real><real>-0.03717460110783576965332031</real><real>0.0805628001689910888671875</real></array></array><key>pelvis_offset</key><real>0</real></map><key>971cf873-afce-8b69-44d6-3f5879cb94c2</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.0875039994716644287109375</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717879995703697204589844</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>d0328b82-d9ca-6071-b248-17edfc7612cb</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.0875039994716644287109375</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717879995703697204589844</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>d2205615-2ce0-4ff1-2bfd-bdc77a3825cc</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.0875039994716644287109375</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717879995703697204589844</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>d73dea3b-b8cb-59ff-c76b-cfdcc8119bb5</key><map><key>joint_names</key><array><string>mFaceJaw</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string></array><key>joint_offset</key><array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array></array><key>pelvis_offset</key><real>0</real></map><key>e678576a-dc9f-5187-6ed5-5b4aafb65d7b</key><map><key>joint_names</key><array><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceJaw</string><string>mFaceRoot</string><string>mFaceLipUpperLeft</string><string>mFaceTeethUpper</string><string>mFaceLipUpperRight</string><string>mFaceLipCornerLeft</string><string>mFaceLipCornerRight</string><string>mFaceLipLowerCenter</string><string>mFaceTeethLower</string><string>mFaceChin</string><string>mFaceLipLowerLeft</string><string>mFaceLipLowerRight</string><string>mFaceEyeLidUpperLeft</string><string>mFaceEyeLidUpperRight</string><string>mFaceEyebrowInnerLeft</string><string>mFaceEyebrowInnerRight</string><string>mFaceEyebrowCenterLeft</string><string>mFaceEyebrowCenterRight</string><string>mFaceForeheadCenter</string><string>mFaceNoseBridge</string><string>mFaceNoseBase</string><string>mFaceEyeLidLowerLeft</string><string>mFaceEyeLidLowerRight</string><string>mFaceCheekUpperLeft</string><string>mFaceCheekUpperRight</string><string>mFaceLipUpperCenter</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.03598750010132789611816406</real><real>0</real><real>-0.02539470046758651733398438</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array><array><real>-0.0591681003570556640625</real><real>0</real><real>0.00485086021944880485534668</real></array><array><real>0.03629549965262413024902344</real><real>-0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>0.03629549965262413024902344</real><real>0.01899999938905239105224609</real><real>-0.01348599977791309356689453</real></array><array><real>-0.02026969939470291137695312</real><real>0</real><real>0.005331280175596475601196289</real></array><array><real>0.08300650119781494140625</real><real>0</real><real>-0.02036399953067302703857422</real></array><array><real>0.08378739655017852783203125</real><real>0</real><real>-0.02668849937617778778076172</real></array><array><real>0.03427229821681976318359375</real><real>-0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.03427229821681976318359375</real><real>0.01206200011074542999267578</real><real>0.0005108119803480803966522217</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.01811289973556995391845703</real><real>0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>0.01811289973556995391845703</real><real>-0.01673410087823867797851562</real><real>0.05700530111789703369140625</real></array><array><real>-0.008231439627707004547119141</real><real>0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>-0.008231439627707004547119141</real><real>-0.03760350123047828674316406</real><real>0.05627600103616714477539062</real></array><array><real>0.07319430261850357055664062</real><real>0</real><real>0.0875039994716644287109375</real></array><array><real>0.1043990030884742736816406</real><real>0</real><real>0.01717879995703697204589844</real></array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.0449016988277435302734375</real><real>0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.0449016988277435302734375</real><real>-0.03697630017995834350585938</real><real>0.03835450112819671630859375</real></array><array><real>0.02915819920599460601806641</real><real>0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.02915819920599460601806641</real><real>-0.05687420070171356201171875</real><real>-0.004530789796262979507446289</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array></array><key>pelvis_offset</key><real>0</real></map><key>ed796a27-cff0-454a-ecec-fd10794ca2c9</key><map><key>joint_names</key><array><string>mFaceNoseBase</string><string>mFaceRoot</string><string>mHead</string><string>mNeck</string><string>mChest</string><string>mTorso</string><string>mPelvis</string><string>mFaceLipUpperCenter</string><string>mFaceTeethUpper</string></array><key>joint_offset</key><array><array><real>0.1504990011453628540039062</real><real>0</real><real>0.003853919915854930877685547</real></array><array><real>0.02500000037252902984619141</real><real>0</real><real>0.04500000178813934326171875</real></array><array><real>0</real><real>0</real><real>0.07562989741563796997070312</real></array><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array><array><real>0</real><real>0</real><real>0.08407290279865264892578125</real></array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.01670119911432266235351562</real><real>0</real><real>0.009711739607155323028564453</real></array><array><real>0.1070009991526603698730469</real><real>0</real><real>-0.02607489936053752899169922</real></array></array><key>pelvis_offset</key><real>0</real></map><key>fa0aabfe-4b1c-fa9b-4942-74e7e7f50fe2</key><map><key>joint_names</key><array><string>mPelvis</string><string>mHandMiddle1Left</string><string>mHandMiddle2Left</string><string>mHandMiddle3Left</string><string>mHandIndex1Left</string><string>mHandIndex2Left</string><string>mHandIndex3Left</string><string>mHandRing1Left</string><string>mHandRing2Left</string><string>mHandRing3Left</string><string>mHandPinky1Left</string><string>mHandPinky2Left</string><string>mHandPinky3Left</string><string>mHandThumb1Left</string><string>mHandThumb2Left</string><string>mHandThumb3Left</string><string>mHandMiddle1Right</string><string>mHandMiddle2Right</string><string>mHandMiddle3Right</string><string>mHandIndex1Right</string><string>mHandIndex2Right</string><string>mHandIndex3Right</string><string>mHandRing1Right</string><string>mHandRing2Right</string><string>mHandRing3Right</string><string>mHandPinky1Right</string><string>mHandPinky2Right</string><string>mHandPinky3Right</string><string>mHandThumb1Right</string><string>mHandThumb2Right</string><string>mHandThumb3Right</string></array><key>joint_offset</key><array><array><real>0</real><real>0</real><real>1.06702005863189697265625</real></array><array><real>0.01518869958817958831787109</real><real>0.09894219785928726196289062</real><real>0.01042949967086315155029297</real></array><array><real>-0.001050560036674141883850098</real><real>0.04202070087194442749023438</real><real>-0.006302990019321441650390625</real></array><array><real>-0.0005042509874328970909118652</real><real>0.02471089921891689300537109</real><real>-0.004034650046378374099731445</real></array><array><real>0.03427390009164810180664062</real><real>0.0946806967258453369140625</real><real>0.009629939682781696319580078</real></array><array><real>0.01719100028276443481445312</real><real>0.03640490025281906127929688</real><real>-0.006067920010536909103393555</real></array><array><real>0.01021370012313127517700195</real><real>0.02334530092775821685791016</real><real>-0.004377489909529685974121094</real></array><array><real>-0.003647640114650130271911621</real><real>0.096580803394317626953125</real><real>0.004405209794640541076660156</real></array><array><real>-0.01231530029326677322387695</real><real>0.03599850088357925415039062</real><real>-0.007578520104289054870605469</real></array><array><real>-0.006562709808349609375</real><real>0.02019299939274787902832031</real><real>-0.00454388977959752082824707</real></array><array><real>-0.02321339957416057586669922</real><real>0.08812329918146133422851562</real><real>-0.004173850174993276596069336</real></array><array><real>-0.02226779982447624206542969</real><real>0.02319590002298355102539062</real><real>-0.005566920153796672821044922</real></array><array><real>-0.0124367000535130500793457</real><real>0.01492409966886043548583984</real><real>-0.003316479967907071113586426</real></array><array><real>0.03221559897065162658691406</real><real>0.02088090032339096069335938</real><real>-0.008553059771656990051269531</real></array><array><real>0.02945099957287311553955078</real><real>0.03365840017795562744140625</real><real>-0.001052020001225173473358154</real></array><array><real>0.02092489972710609436035156</real><real>0.02820369973778724670410156</real><real>-0.0009096220019273459911346436</real></array><array><real>0.01518869958817958831787109</real><real>-0.09894219785928726196289062</real><real>0.01042949967086315155029297</real></array><array><real>-0.001050550024956464767456055</real><real>-0.04202080145478248596191406</real><real>-0.006302880123257637023925781</real></array><array><real>-0.0005042660050094127655029297</real><real>-0.02471089921891689300537109</real><real>-0.004034659825265407562255859</real></array><array><real>0.03427390009164810180664062</real><real>-0.0946806967258453369140625</real><real>0.009629939682781696319580078</real></array><array><real>0.01719100028276443481445312</real><real>-0.03640500083565711975097656</real><real>-0.006067819893360137939453125</real></array><array><real>0.01021370012313127517700195</real><real>-0.02334530092775821685791016</real><real>-0.004377489909529685974121094</real></array><array><real>-0.003647640114650130271911621</real><real>-0.096580803394317626953125</real><real>0.004405209794640541076660156</real></array><array><real>-0.01231530029326677322387695</real><real>-0.03599840030074119567871094</real><real>-0.007578390184789896011352539</real></array><array><real>-0.006562769878655672073364258</real><real>-0.02019290067255496978759766</real><real>-0.004543649964034557342529297</real></array><array><real>-0.02321339957416057586669922</real><real>-0.08812329918146133422851562</real><real>-0.004173850174993276596069336</real></array><array><real>-0.02226779982447624206542969</real><real>-0.02319570071995258331298828</real><real>-0.005566900130361318588256836</real></array><array><real>-0.01243660040199756622314453</real><real>-0.01492400001734495162963867</real><real>-0.003316730028018355369567871</real></array><array><real>0.03221559897065162658691406</real><real>-0.02088090032339096069335938</real><real>-0.008553059771656990051269531</real></array><array><real>0.02945090085268020629882812</real><real>-0.03365840017795562744140625</real><real>-0.001052099978551268577575684</real></array><array><real>0.02092500030994415283203125</real><real>-0.02820380032062530517578125</real><real>-0.0009097899892367422580718994</real></array></array><key>pelvis_offset</key><real>0</real></map></map><key>success</key><boolean>1</boolean></map></llsd>
diff --git a/indra/llappearanceutility/tests/params.xml b/indra/llappearanceutility/tests/params.xml
new file mode 100644
index 0000000000..7d7ff646b7
--- /dev/null
+++ b/indra/llappearanceutility/tests/params.xml
@@ -0,0 +1,1140 @@
+<?xml version="1.0" ?>
+<llsd>
+<map>
+ <key>skindata</key>
+ <map>
+ <key>270bb701-8643-c4b3-6a93-7a2b6503b30a</key>
+ <map>
+ <key>joint_names</key>
+ <array>
+ <string>mTail1</string>
+ <string>mPelvis</string>
+ <string>mTail2</string>
+ <string>mTorso</string>
+ <string>mSpine2</string>
+ <string>mSpine1</string>
+ <string>mHipLeft</string>
+ <string>mKneeLeft</string>
+ <string>mHipRight</string>
+ <string>mKneeRight</string>
+ <string>mChest</string>
+ <string>mSpine4</string>
+ <string>mSpine3</string>
+ <string>mShoulderRight</string>
+ <string>mCollarRight</string>
+ <string>mShoulderLeft</string>
+ <string>mCollarLeft</string>
+ <string>mElbowRight</string>
+ <string>mElbowLeft</string>
+ <string>mNeck</string>
+ <string>mAnkleRight</string>
+ <string>mAnkleLeft</string>
+ </array>
+ <key>joint_offset</key>
+ <array>
+ <array>
+ <real>-0.12795400619506836</real>
+ <real>0.0</real>
+ <real>0.001858999952673912</real>
+ </array>
+ <array>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>1.081987977027893</real>
+ </array>
+ <array>
+ <real>-0.018850000575184822</real>
+ <real>0.0</real>
+ <real>-0.09493499994277954</real>
+ </array>
+ <array>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>0.08407299965620041</real>
+ </array>
+ <array>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>-0.08407299965620041</real>
+ </array>
+ <array>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>0.08407299965620041</real>
+ </array>
+ <array>
+ <real>0.03375700116157532</real>
+ <real>0.12676499783992767</real>
+ <real>-0.04099800065159798</real>
+ </array>
+ <array>
+ <real>-0.0008870000019669533</real>
+ <real>-0.04556800052523613</real>
+ <real>-0.4910529851913452</real>
+ </array>
+ <array>
+ <real>0.03361999988555908</real>
+ <real>-0.1288059949874878</real>
+ <real>-0.041085999459028244</real>
+ </array>
+ <array>
+ <real>-0.0007800000021234155</real>
+ <real>0.04863499850034714</real>
+ <real>-0.4909220039844513</real>
+ </array>
+ <array>
+ <real>-0.01536799967288971</real>
+ <real>0.0</real>
+ <real>0.20487700402736664</real>
+ </array>
+ <array>
+ <real>0.01536799967288971</real>
+ <real>0.0</real>
+ <real>-0.20487700402736664</real>
+ </array>
+ <array>
+ <real>-0.01536799967288971</real>
+ <real>0.0</real>
+ <real>0.20487700402736664</real>
+ </array>
+ <array>
+ <real>0.0</real>
+ <real>-0.07941800355911255</real>
+ <real>0.0</real>
+ </array>
+ <array>
+ <real>-0.020927000790834427</real>
+ <real>-0.08500000089406967</real>
+ <real>0.16539600491523743</real>
+ </array>
+ <array>
+ <real>0.0</real>
+ <real>0.07900000363588333</real>
+ <real>0.0</real>
+ </array>
+ <array>
+ <real>-0.020927000790834427</real>
+ <real>0.08466500043869019</real>
+ <real>0.16539600491523743</real>
+ </array>
+ <array>
+ <real>0.0</real>
+ <real>-0.24799999594688416</real>
+ <real>0.0</real>
+ </array>
+ <array>
+ <real>0.0</real>
+ <real>0.24799999594688416</real>
+ <real>0.0</real>
+ </array>
+ <array>
+ <real>-0.00950700044631958</real>
+ <real>0.0</real>
+ <real>0.25110799074172974</real>
+ </array>
+ <array>
+ <real>-0.02886899933218956</real>
+ <real>0.0</real>
+ <real>-0.4684939980506897</real>
+ </array>
+ <array>
+ <real>-0.028886999934911728</real>
+ <real>0.0013780000153928995</real>
+ <real>-0.4684489965438843</real>
+ </array>
+ </array>
+ <key>pelvis_offset</key>
+ <real>0.0</real>
+ </map>
+ </map>
+ <key>wearables</key>
+ <array>
+ <array>
+ <map>
+ <key>agent_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>asset_id</key>
+ <string>7e3e76fc-7fa4-ec8f-a785-8956dbce6e72</string>
+ <key>contents</key>
+ <string>LLWearable version 22
+Fashionista Male - Shape (new)
+
+ permissions 0
+ {
+ base_mask 7fffffff
+ owner_mask 7fffffff
+ group_mask 00000000
+ everyone_mask 00000000
+ next_owner_mask 00082000
+ creator_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ last_owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ group_id 00000000-0000-0000-0000-000000000000
+ }
+ sale_info 0
+ {
+ sale_type not
+ sale_price 10
+ }
+type 0
+parameters 142
+1 0
+2 .16
+4 -.23
+5 -.1
+6 -.3
+7 0
+8 0
+10 0
+11 .04
+12 0
+13 0
+14 0
+15 0
+17 0
+18 0
+19 -.1
+20 .56
+21 .07
+22 0
+23 .42
+24 -.66
+25 .51
+26 0
+27 .02
+28 .6
+29 0
+30 0
+32 1
+33 -.41
+34 .4
+35 0
+36 -.49
+37 0
+38 .42
+40 1
+80 1
+100 1
+104 0
+105 .5
+106 0
+107 0
+151 .16
+152 0
+153 1
+155 -.13
+156 0
+157 0
+185 -.44
+186 0
+187 0
+188 0
+189 0
+193 .5
+194 -.12
+195 -.06
+196 -.59
+505 .65
+506 -.04
+507 0
+515 -.2
+517 .12
+518 -.3
+626 0
+627 0
+629 .5
+630 0
+631 0
+633 .01
+634 .01
+635 .01
+637 .01
+646 0
+647 0
+648 0
+649 .5
+650 -.67
+651 .03
+652 .49
+653 .26
+655 -.08
+656 0
+657 .03
+658 0
+659 .51
+660 0
+661 0
+662 .5
+663 -.2
+664 .13
+665 .04
+675 .03
+676 -.43
+677 .34
+678 .37
+679 -.08
+680 -.08
+681 -.08
+682 .5
+683 -.14
+684 0
+685 .14
+686 -.68
+687 -.09
+688 -.09
+689 -.34
+690 .33
+691 -.09
+692 .24
+693 .1
+694 -.08
+695 -.09
+753 .06
+756 -.08
+758 -1.05
+759 .67
+760 0
+764 -.5
+765 1.02
+767 .08
+768 .08
+769 .52
+770 0
+772 0
+773 .5
+794 0
+795 .41
+796 0
+797 .15
+798 0
+799 .45
+841 0
+842 -.8
+843 0
+853 0
+854 .06
+855 -.43
+879 -.1
+880 -.82
+1103 0
+1104 0
+1105 0
+11001 0
+textures 0
+</string>
+ <key>created_at</key>
+ <integer>1724256027</integer>
+ <key>desc</key>
+ <string />
+ <key>flags</key>
+ <integer>256</integer>
+ <key>inv_type</key>
+ <integer>18</integer>
+ <key>item_id</key>
+ <string>8bbf11b0-b86b-3b4c-8c5c-c84902425f42</string>
+ <key>metadata</key>
+ <map>
+ </map>
+ <key>name</key>
+ <string>Leonard - Shape</string>
+ <key>parent_id</key>
+ <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string>
+ <key>permissions</key>
+ <map>
+ <key>base_mask</key>
+ <integer>573440</integer>
+ <key>creator_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>everyone_mask</key>
+ <integer>524288</integer>
+ <key>group_id</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>group_mask</key>
+ <integer>540672</integer>
+ <key>last_owner_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>next_owner_mask</key>
+ <integer>573440</integer>
+ <key>owner_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>owner_mask</key>
+ <integer>573440</integer>
+ </map>
+ <key>sale_info</key>
+ <map>
+ <key>sale_price</key>
+ <integer>10</integer>
+ <key>sale_type</key>
+ <integer>0</integer>
+ </map>
+ <key>type</key>
+ <integer>13</integer>
+ <key>wearable_type</key>
+ <integer>0</integer>
+ </map>
+ </array>
+ <array>
+ <map>
+ <key>agent_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>asset_id</key>
+ <string>9e675544-77c0-0db6-3694-462be7460b76</string>
+ <key>contents</key>
+ <string>LLWearable version 22
+Formal Male - Skin (less old)
+
+ permissions 0
+ {
+ base_mask 7fffffff
+ owner_mask 7fffffff
+ group_mask 00000000
+ everyone_mask 00000000
+ next_owner_mask 00082000
+ creator_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ last_owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ group_id 00000000-0000-0000-0000-000000000000
+ }
+ sale_info 0
+ {
+ sale_type not
+ sale_price 10
+ }
+type 1
+parameters 37
+108 0
+110 0
+111 0
+116 0
+117 0
+118 0
+125 0
+126 0
+150 0
+158 0
+159 0
+161 0
+162 0
+163 0
+165 0
+700 .25
+701 0
+702 0
+703 0
+704 0
+705 .5
+706 .6
+707 0
+708 0
+709 0
+710 0
+711 .5
+712 0
+713 .7
+714 0
+715 0
+775 0
+776 0
+777 0
+873 0
+874 0
+878 0
+textures 3
+0 a21d4081-601e-f9f0-0acc-9192c72863dc
+5 a85bf749-952d-3835-d9ac-a307c780930c
+6 ab169525-d46c-918b-3195-7f2b92fd76c5
+</string>
+ <key>created_at</key>
+ <integer>1724256027</integer>
+ <key>desc</key>
+ <string />
+ <key>flags</key>
+ <integer>257</integer>
+ <key>inv_type</key>
+ <integer>18</integer>
+ <key>item_id</key>
+ <string>9e6c5696-cae0-337e-a5c6-aa6fede08ec6</string>
+ <key>metadata</key>
+ <map>
+ </map>
+ <key>name</key>
+ <string>Leonard - Skin</string>
+ <key>parent_id</key>
+ <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string>
+ <key>permissions</key>
+ <map>
+ <key>base_mask</key>
+ <integer>557056</integer>
+ <key>creator_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>everyone_mask</key>
+ <integer>524288</integer>
+ <key>group_id</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>group_mask</key>
+ <integer>524288</integer>
+ <key>last_owner_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>next_owner_mask</key>
+ <integer>557056</integer>
+ <key>owner_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>owner_mask</key>
+ <integer>557056</integer>
+ </map>
+ <key>sale_info</key>
+ <map>
+ <key>sale_price</key>
+ <integer>10</integer>
+ <key>sale_type</key>
+ <integer>0</integer>
+ </map>
+ <key>type</key>
+ <integer>13</integer>
+ <key>wearable_type</key>
+ <integer>1</integer>
+ </map>
+ </array>
+ <array>
+ <map>
+ <key>agent_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>asset_id</key>
+ <string>0b935621-92da-099e-a248-cfbfa3624c68</string>
+ <key>contents</key>
+ <string>LLWearable version 22
+Fashionista Male - Brows (new)
+
+ permissions 0
+ {
+ base_mask 00082000
+ owner_mask 00082000
+ group_mask 00000000
+ everyone_mask 00000000
+ next_owner_mask 00082000
+ creator_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ last_owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ group_id 00000000-0000-0000-0000-000000000000
+ }
+ sale_info 0
+ {
+ sale_type not
+ sale_price 10
+ }
+type 2
+parameters 90
+16 .41
+31 1.04
+112 0
+113 0
+114 0
+115 0
+119 .5
+130 0
+131 0
+132 0
+133 0
+134 0
+135 0
+136 0
+137 .5
+140 0
+141 0
+142 0
+143 -4
+144 1
+145 0
+146 1
+147 0
+148 1
+149 0
+166 0
+167 0
+168 0
+169 0
+171 0
+172 1
+173 0
+174 1
+175 0
+176 1
+177 0
+178 0
+179 1
+180 0
+181 -1
+182 -1
+183 -1
+184 0
+190 0
+191 0
+192 0
+400 .75
+640 -.01
+641 .2
+642 0
+643 0
+644 .24
+645 0
+674 -.3
+750 .65
+751 0
+752 .5
+754 0
+755 .05
+757 -1.6
+761 1.3
+762 0
+763 0
+771 -.08
+774 0
+782 0
+783 0
+784 0
+785 0
+786 0
+787 0
+788 0
+789 0
+790 0
+870 -.11
+871 -.4
+872 .52
+1000 .5
+1001 .5
+1002 .65
+1003 .65
+1004 0
+1005 0
+1006 0
+1007 0
+1008 0
+1009 0
+1010 0
+1011 0
+1012 .25
+textures 1
+4 3cc3add8-6ff0-0640-79ba-b15137f64008
+</string>
+ <key>created_at</key>
+ <integer>1724256027</integer>
+ <key>desc</key>
+ <string />
+ <key>flags</key>
+ <integer>258</integer>
+ <key>inv_type</key>
+ <integer>18</integer>
+ <key>item_id</key>
+ <string>3ddd2d41-fbe4-3076-9732-c5f3b12973b1</string>
+ <key>metadata</key>
+ <map>
+ </map>
+ <key>name</key>
+ <string>Leonard - Brows</string>
+ <key>parent_id</key>
+ <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string>
+ <key>permissions</key>
+ <map>
+ <key>base_mask</key>
+ <integer>557056</integer>
+ <key>creator_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>everyone_mask</key>
+ <integer>524288</integer>
+ <key>group_id</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>group_mask</key>
+ <integer>524288</integer>
+ <key>last_owner_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>next_owner_mask</key>
+ <integer>557056</integer>
+ <key>owner_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>owner_mask</key>
+ <integer>557056</integer>
+ </map>
+ <key>sale_info</key>
+ <map>
+ <key>sale_price</key>
+ <integer>10</integer>
+ <key>sale_type</key>
+ <integer>0</integer>
+ </map>
+ <key>type</key>
+ <integer>13</integer>
+ <key>wearable_type</key>
+ <integer>2</integer>
+ </map>
+ </array>
+ <array>
+ <map>
+ <key>agent_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>asset_id</key>
+ <string>052ca46d-9612-7a43-25a9-d7c8a5387cf6</string>
+ <key>contents</key>
+ <string>LLWearable version 22
+Fashionista Male - Eyes
+
+ permissions 0
+ {
+ base_mask 7fffffff
+ owner_mask 7fffffff
+ group_mask 00000000
+ everyone_mask 00000000
+ next_owner_mask 00082000
+ creator_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ last_owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ group_id 00000000-0000-0000-0000-000000000000
+ }
+ sale_info 0
+ {
+ sale_type not
+ sale_price 10
+ }
+type 3
+parameters 2
+98 1
+99 0
+textures 1
+3 579e320c-0f16-2a1d-2018-2a00cc657068
+</string>
+ <key>created_at</key>
+ <integer>1724256027</integer>
+ <key>desc</key>
+ <string />
+ <key>flags</key>
+ <integer>259</integer>
+ <key>inv_type</key>
+ <integer>18</integer>
+ <key>item_id</key>
+ <string>9d4e7072-0e92-39a1-95a4-b5330450b1ee</string>
+ <key>metadata</key>
+ <map>
+ </map>
+ <key>name</key>
+ <string>Leonard - Eyes</string>
+ <key>parent_id</key>
+ <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string>
+ <key>permissions</key>
+ <map>
+ <key>base_mask</key>
+ <integer>557056</integer>
+ <key>creator_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>everyone_mask</key>
+ <integer>524288</integer>
+ <key>group_id</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>group_mask</key>
+ <integer>524288</integer>
+ <key>last_owner_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>next_owner_mask</key>
+ <integer>557056</integer>
+ <key>owner_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>owner_mask</key>
+ <integer>557056</integer>
+ </map>
+ <key>sale_info</key>
+ <map>
+ <key>sale_price</key>
+ <integer>10</integer>
+ <key>sale_type</key>
+ <integer>0</integer>
+ </map>
+ <key>type</key>
+ <integer>13</integer>
+ <key>wearable_type</key>
+ <integer>3</integer>
+ </map>
+ </array>
+ <array>
+ </array>
+ <array>
+ </array>
+ <array>
+ <map>
+ <key>agent_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>asset_id</key>
+ <string>5f049939-bb34-ad27-66cb-38c9151a105d</string>
+ <key>contents</key>
+ <string>LLWearable version 22
+Fashionista Male - Shoe Base
+
+ permissions 0
+ {
+ base_mask 7fffffff
+ owner_mask 7fffffff
+ group_mask 00000000
+ everyone_mask 00000000
+ next_owner_mask 00082000
+ creator_id 73ecef5a-3110-4e95-92bc-da0ae7598652
+ owner_id 73ecef5a-3110-4e95-92bc-da0ae7598652
+ last_owner_id 73ecef5a-3110-4e95-92bc-da0ae7598652
+ group_id 00000000-0000-0000-0000-000000000000
+ }
+ sale_info 0
+ {
+ sale_type not
+ sale_price 10
+ }
+type 6
+parameters 20
+197 0
+198 0
+500 0
+501 .1
+502 .1
+503 .1
+508 -.52
+509 1
+510 0
+511 .82
+512 0
+513 0
+514 .09
+616 .3
+654 .06
+812 1
+813 1
+817 1
+1052 .3
+1053 .3
+textures 1
+7 8dcd4a48-2d37-4909-9f78-f7a9eb4ef903
+</string>
+ <key>created_at</key>
+ <integer>1724256027</integer>
+ <key>desc</key>
+ <string>@600</string>
+ <key>flags</key>
+ <integer>262</integer>
+ <key>inv_type</key>
+ <integer>18</integer>
+ <key>item_id</key>
+ <string>dc5e279a-4a34-36ee-9075-028df446392c</string>
+ <key>metadata</key>
+ <map>
+ </map>
+ <key>name</key>
+ <string>Leonard - Shoes BASE</string>
+ <key>parent_id</key>
+ <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string>
+ <key>permissions</key>
+ <map>
+ <key>base_mask</key>
+ <integer>557056</integer>
+ <key>creator_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>everyone_mask</key>
+ <integer>524288</integer>
+ <key>group_id</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>group_mask</key>
+ <integer>524288</integer>
+ <key>last_owner_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>next_owner_mask</key>
+ <integer>557056</integer>
+ <key>owner_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>owner_mask</key>
+ <integer>557056</integer>
+ </map>
+ <key>sale_info</key>
+ <map>
+ <key>sale_price</key>
+ <integer>10</integer>
+ <key>sale_type</key>
+ <integer>0</integer>
+ </map>
+ <key>type</key>
+ <integer>5</integer>
+ <key>wearable_type</key>
+ <integer>6</integer>
+ </map>
+ </array>
+ <array>
+ </array>
+ <array>
+ </array>
+ <array>
+ </array>
+ <array>
+ </array>
+ <array>
+ </array>
+ <array>
+ </array>
+ <array>
+ <map>
+ <key>agent_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>asset_id</key>
+ <string>ab0bd2c6-3776-7ea6-264f-102842c6328b</string>
+ <key>contents</key>
+ <string>LLWearable version 22
+Fashionista Female - Heels Alpha
+
+ permissions 0
+ {
+ base_mask 7fffffff
+ owner_mask 7fffffff
+ group_mask 00000000
+ everyone_mask 00000000
+ next_owner_mask 00082000
+ creator_id 73ecef5a-3110-4e95-92bc-da0ae7598652
+ owner_id 73ecef5a-3110-4e95-92bc-da0ae7598652
+ last_owner_id 73ecef5a-3110-4e95-92bc-da0ae7598652
+ group_id 00000000-0000-0000-0000-000000000000
+ }
+ sale_info 0
+ {
+ sale_type not
+ sale_price 10
+ }
+type 13
+parameters 0
+textures 5
+21 b5b09502-8305-af43-cc4e-7238cb715b11
+22 5748decc-f629-461c-9a36-a35a221fe21f
+23 5748decc-f629-461c-9a36-a35a221fe21f
+24 5748decc-f629-461c-9a36-a35a221fe21f
+25 5748decc-f629-461c-9a36-a35a221fe21f
+</string>
+ <key>created_at</key>
+ <integer>1724256027</integer>
+ <key>desc</key>
+ <string>@1300</string>
+ <key>flags</key>
+ <integer>269</integer>
+ <key>inv_type</key>
+ <integer>18</integer>
+ <key>item_id</key>
+ <string>b76dde5f-0da2-3e21-b505-d587b16ddb3c</string>
+ <key>metadata</key>
+ <map>
+ </map>
+ <key>name</key>
+ <string>Leonard - Shoes ALPHA</string>
+ <key>parent_id</key>
+ <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string>
+ <key>permissions</key>
+ <map>
+ <key>base_mask</key>
+ <integer>557056</integer>
+ <key>creator_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>everyone_mask</key>
+ <integer>524288</integer>
+ <key>group_id</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>group_mask</key>
+ <integer>524288</integer>
+ <key>last_owner_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>next_owner_mask</key>
+ <integer>557056</integer>
+ <key>owner_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>owner_mask</key>
+ <integer>557056</integer>
+ </map>
+ <key>sale_info</key>
+ <map>
+ <key>sale_price</key>
+ <integer>10</integer>
+ <key>sale_type</key>
+ <integer>0</integer>
+ </map>
+ <key>type</key>
+ <integer>5</integer>
+ <key>wearable_type</key>
+ <integer>13</integer>
+ </map>
+ <map>
+ <key>agent_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>asset_id</key>
+ <string>cb80f44f-8265-f56b-c812-ddf729cee73b</string>
+ <key>contents</key>
+ <string>LLWearable version 22
+New Alpha
+
+ permissions 0
+ {
+ base_mask 7fffffff
+ owner_mask 7fffffff
+ group_mask 00000000
+ everyone_mask 00000000
+ next_owner_mask 00082000
+ creator_id 8b1453d6-ec45-4434-bee3-1c4d6fe1bc55
+ owner_id 8b1453d6-ec45-4434-bee3-1c4d6fe1bc55
+ last_owner_id 8b1453d6-ec45-4434-bee3-1c4d6fe1bc55
+ group_id 00000000-0000-0000-0000-000000000000
+ }
+ sale_info 0
+ {
+ sale_type not
+ sale_price 10
+ }
+type 13
+parameters 0
+textures 5
+21 d9413239-769d-abc9-e929-4fa98f52c07b
+22 b5d465f9-ca8e-8ba4-efd8-ee8929c592b8
+23 5748decc-f629-461c-9a36-a35a221fe21f
+24 5748decc-f629-461c-9a36-a35a221fe21f
+25 5748decc-f629-461c-9a36-a35a221fe21f
+</string>
+ <key>created_at</key>
+ <integer>1724256027</integer>
+ <key>desc</key>
+ <string>@1301</string>
+ <key>flags</key>
+ <integer>269</integer>
+ <key>inv_type</key>
+ <integer>18</integer>
+ <key>item_id</key>
+ <string>efc7da55-02ba-3286-8458-780aede51b49</string>
+ <key>metadata</key>
+ <map>
+ </map>
+ <key>name</key>
+ <string>Leonard - Suit Alpha</string>
+ <key>parent_id</key>
+ <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string>
+ <key>permissions</key>
+ <map>
+ <key>base_mask</key>
+ <integer>557056</integer>
+ <key>creator_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>everyone_mask</key>
+ <integer>524288</integer>
+ <key>group_id</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>group_mask</key>
+ <integer>524288</integer>
+ <key>last_owner_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>next_owner_mask</key>
+ <integer>557056</integer>
+ <key>owner_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>owner_mask</key>
+ <integer>557056</integer>
+ </map>
+ <key>sale_info</key>
+ <map>
+ <key>sale_price</key>
+ <integer>10</integer>
+ <key>sale_type</key>
+ <integer>0</integer>
+ </map>
+ <key>type</key>
+ <integer>5</integer>
+ <key>wearable_type</key>
+ <integer>13</integer>
+ </map>
+ <map>
+ <key>agent_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>asset_id</key>
+ <string>f235a6a9-062a-bb40-46c2-c8a7bec95fbf</string>
+ <key>contents</key>
+ <string>LLWearable version 22
+System Eyelash Remover
+
+ permissions 0
+ {
+ base_mask 7fffffff
+ owner_mask 7fffffff
+ group_mask 00000000
+ everyone_mask 00000000
+ next_owner_mask 00082000
+ creator_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ last_owner_id 1f8f7642-ce98-4d1b-9314-e2bc98b6538d
+ group_id 00000000-0000-0000-0000-000000000000
+ }
+ sale_info 0
+ {
+ sale_type not
+ sale_price 10
+ }
+type 13
+parameters 0
+textures 5
+21 5748decc-f629-461c-9a36-a35a221fe21f
+22 5748decc-f629-461c-9a36-a35a221fe21f
+23 9e460914-daed-b03f-0f2a-afbe67833b11
+24 5748decc-f629-461c-9a36-a35a221fe21f
+25 5748decc-f629-461c-9a36-a35a221fe21f
+</string>
+ <key>created_at</key>
+ <integer>1724256027</integer>
+ <key>desc</key>
+ <string>@1302</string>
+ <key>flags</key>
+ <integer>269</integer>
+ <key>inv_type</key>
+ <integer>18</integer>
+ <key>item_id</key>
+ <string>624f9c12-72e8-3409-a3f3-b3fe8f496b13</string>
+ <key>metadata</key>
+ <map>
+ </map>
+ <key>name</key>
+ <string>System Eyelash Remover</string>
+ <key>parent_id</key>
+ <string>056f26cf-a9d9-39b9-a90c-f7b0fcd92347</string>
+ <key>permissions</key>
+ <map>
+ <key>base_mask</key>
+ <integer>557056</integer>
+ <key>creator_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>everyone_mask</key>
+ <integer>524288</integer>
+ <key>group_id</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>group_mask</key>
+ <integer>524288</integer>
+ <key>last_owner_id</key>
+ <string>ba2a564a-f0f1-4b82-9c61-b7520bfcd09f</string>
+ <key>next_owner_mask</key>
+ <integer>557056</integer>
+ <key>owner_id</key>
+ <string>de494a4f-f01a-47a4-98cf-c94ef9ecca38</string>
+ <key>owner_mask</key>
+ <integer>557056</integer>
+ </map>
+ <key>sale_info</key>
+ <map>
+ <key>sale_price</key>
+ <integer>10</integer>
+ <key>sale_type</key>
+ <integer>0</integer>
+ </map>
+ <key>type</key>
+ <integer>5</integer>
+ <key>wearable_type</key>
+ <integer>13</integer>
+ </map>
+ </array>
+ <array>
+ </array>
+ <array>
+ </array>
+ <array>
+ </array>
+ </array>
+ </map>
+</llsd>
diff --git a/indra/llappearanceutility/tests/params.xml.output b/indra/llappearanceutility/tests/params.xml.output
new file mode 100644
index 0000000000..58449dd37a
--- /dev/null
+++ b/indra/llappearanceutility/tests/params.xml.output
@@ -0,0 +1 @@
+<llsd><map><key>avatar_scale</key><array><real>0.449999988079071044921875</real><real>0.60000002384185791015625</real><real>1.76146829128265380859375</real></array><key>debug_params</key><map><key>1</key><map><key>name</key><string>big_brow</string><key>value</key><real>0</real><key>weight</key><integer>33</integer></map><key>10</key><map><key>name</key><string>sunken_cheeks</string><key>value</key><real>0</real><key>weight</key><integer>85</integer></map><key>10000</key><map><key>name</key><string>breast_physics_mass</string><key>value</key><real>0.1000000014901161193847656</real><key>weight</key><integer>0</integer></map><key>10001</key><map><key>name</key><string>breast_physics_gravity</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10002</key><map><key>name</key><string>breast_physics_drag</string><key>value</key><real>1</real><key>weight</key><integer>25</integer></map><key>10003</key><map><key>name</key><string>breast_physics_updown_max_effect</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10004</key><map><key>name</key><string>breast_physics_updown_spring</string><key>value</key><real>10</real><key>weight</key><integer>25</integer></map><key>10005</key><map><key>name</key><string>breast_physics_updown_gain</string><key>value</key><real>10</real><key>weight</key><integer>23</integer></map><key>10006</key><map><key>name</key><string>breast_physics_updown_damping</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>10007</key><map><key>name</key><string>breast_physics_inout_max_effect</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10008</key><map><key>name</key><string>breast_physics_inout_spring</string><key>value</key><real>10</real><key>weight</key><integer>25</integer></map><key>10009</key><map><key>name</key><string>breast_physics_inout_gain</string><key>value</key><real>10</real><key>weight</key><integer>23</integer></map><key>10010</key><map><key>name</key><string>breast_physics_inout_damping</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>10011</key><map><key>name</key><string>belly_physics_mass</string><key>value</key><real>0.1000000014901161193847656</real><key>weight</key><integer>0</integer></map><key>10012</key><map><key>name</key><string>belly_physics_gravity</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10013</key><map><key>name</key><string>belly_physics_drag</string><key>value</key><real>1</real><key>weight</key><integer>25</integer></map><key>10014</key><map><key>name</key><string>belly_physics_updown_max_effect</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10015</key><map><key>name</key><string>belly_physics_updown_spring</string><key>value</key><real>10</real><key>weight</key><integer>25</integer></map><key>10016</key><map><key>name</key><string>belly_physics_updown_gain</string><key>value</key><real>10</real><key>weight</key><integer>23</integer></map><key>10017</key><map><key>name</key><string>belly_physics_updown_damping</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>10018</key><map><key>name</key><string>butt_physics_mass</string><key>value</key><real>0.1000000014901161193847656</real><key>weight</key><integer>0</integer></map><key>10019</key><map><key>name</key><string>butt_physics_gravity</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10020</key><map><key>name</key><string>butt_physics_drag</string><key>value</key><real>1</real><key>weight</key><integer>25</integer></map><key>10021</key><map><key>name</key><string>butt_physics_updown_max_effect</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10022</key><map><key>name</key><string>butt_physics_updown_spring</string><key>value</key><real>10</real><key>weight</key><integer>25</integer></map><key>10023</key><map><key>name</key><string>butt_physics_updown_gain</string><key>value</key><real>10</real><key>weight</key><integer>23</integer></map><key>10024</key><map><key>name</key><string>butt_physics_updown_damping</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>10025</key><map><key>name</key><string>butt_physics_leftright_max_effect</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10026</key><map><key>name</key><string>butt_physics_leftright_spring</string><key>value</key><real>10</real><key>weight</key><integer>25</integer></map><key>10027</key><map><key>name</key><string>butt_physics_leftright_gain</string><key>value</key><real>10</real><key>weight</key><integer>23</integer></map><key>10028</key><map><key>name</key><string>butt_physics_leftright_damping</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>10029</key><map><key>name</key><string>breast_physics_leftright_max_effect</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>10030</key><map><key>name</key><string>breast_physics_leftright_spring</string><key>value</key><real>10</real><key>weight</key><integer>25</integer></map><key>10031</key><map><key>name</key><string>breast_physics_leftright_gain</string><key>value</key><real>10</real><key>weight</key><integer>23</integer></map><key>10032</key><map><key>name</key><string>breast_physics_leftright_damping</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>105</key><map><key>name</key><string>breast size</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>108</key><map><key>name</key><string>rainbow color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>11</key><map><key>name</key><string>noble_nose_bridge</string><key>value</key><real>0.03999999910593032836914062</real><key>weight</key><integer>68</integer></map><key>110</key><map><key>name</key><string>red skin</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>11000</key><map><key>name</key><string>appearancemessage_version</string><key>value</key><real>1</real><key>weight</key><integer>1</integer></map><key>11001</key><map><key>name</key><string>hover</string><key>value</key><real>0</real><key>weight</key><integer>127</integer></map><key>111</key><map><key>name</key><string>pigment</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>112</key><map><key>name</key><string>rainbow color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>113</key><map><key>name</key><string>red hair</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>114</key><map><key>name</key><string>blonde hair</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>115</key><map><key>name</key><string>white hair</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>116</key><map><key>name</key><string>rosy complexion</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>117</key><map><key>name</key><string>lip pinkness</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>119</key><map><key>name</key><string>eyebrow size</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>12</key><map><key>name</key><string>jowls</string><key>value</key><real>0</real><key>weight</key><integer>42</integer></map><key>13</key><map><key>name</key><string>cleft_chin_upper</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>130</key><map><key>name</key><string>front fringe</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>131</key><map><key>name</key><string>side fringe</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>132</key><map><key>name</key><string>back fringe</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>133</key><map><key>name</key><string>hair front</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>134</key><map><key>name</key><string>hair sides</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>135</key><map><key>name</key><string>hair back</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>136</key><map><key>name</key><string>hair sweep</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>137</key><map><key>name</key><string>hair tilt</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>14</key><map><key>name</key><string>high_cheek_bones</string><key>value</key><real>0</real><key>weight</key><integer>85</integer></map><key>140</key><map><key>name</key><string>hair_part_middle</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>141</key><map><key>name</key><string>hair_part_right</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>142</key><map><key>name</key><string>hair_part_left</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>143</key><map><key>name</key><string>hair_sides_full</string><key>value</key><real>-4</real><key>weight</key><integer>0</integer></map><key>15</key><map><key>name</key><string>ears_out</string><key>value</key><real>0</real><key>weight</key><integer>63</integer></map><key>150</key><map><key>name</key><string>body definition</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>155</key><map><key>name</key><string>lip width</string><key>value</key><real>-0.12999999523162841796875</real><key>weight</key><integer>89</integer></map><key>157</key><map><key>name</key><string>belly size</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>16</key><map><key>name</key><string>pointy_eyebrows</string><key>value</key><real>0.4099999964237213134765625</real><key>weight</key><integer>66</integer></map><key>162</key><map><key>name</key><string>facial definition</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>163</key><map><key>name</key><string>wrinkles</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>165</key><map><key>name</key><string>freckles</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>166</key><map><key>name</key><string>sideburns</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>167</key><map><key>name</key><string>moustache</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>168</key><map><key>name</key><string>soulpatch</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>169</key><map><key>name</key><string>chin curtains</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>17</key><map><key>name</key><string>square_jaw</string><key>value</key><real>0</real><key>weight</key><integer>85</integer></map><key>177</key><map><key>name</key><string>hair_rumpled</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>18</key><map><key>name</key><string>puffy_upper_cheeks</string><key>value</key><real>0</real><key>weight</key><integer>95</integer></map><key>181</key><map><key>name</key><string>hair_big_front</string><key>value</key><real>-1</real><key>weight</key><integer>0</integer></map><key>182</key><map><key>name</key><string>hair_big_top</string><key>value</key><real>-1</real><key>weight</key><integer>0</integer></map><key>183</key><map><key>name</key><string>hair_big_back</string><key>value</key><real>-1</real><key>weight</key><integer>0</integer></map><key>184</key><map><key>name</key><string>hair_spiked</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>185</key><map><key>name</key><string>deep_chin</string><key>value</key><real>-0.439999997615814208984375</real><key>weight</key><integer>71</integer></map><key>19</key><map><key>name</key><string>upturned_nose_tip</string><key>value</key><real>-0.1000000014901161193847656</real><key>weight</key><integer>142</integer></map><key>192</key><map><key>name</key><string>bangs_part_middle</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>193</key><map><key>name</key><string>head shape</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>196</key><map><key>name</key><string>eye spacing</string><key>value</key><real>-0.589999973773956298828125</real><key>weight</key><integer>119</integer></map><key>198</key><map><key>name</key><string>heel height</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>2</key><map><key>name</key><string>nose_big_out</string><key>value</key><real>0.1599999964237213134765625</real><key>weight</key><integer>74</integer></map><key>20</key><map><key>name</key><string>bulbous_nose</string><key>value</key><real>0.560000002384185791015625</real><key>weight</key><integer>135</integer></map><key>21</key><map><key>name</key><string>upper_eyelid_fold</string><key>value</key><real>0.07000000029802322387695312</real><key>weight</key><integer>45</integer></map><key>22</key><map><key>name</key><string>attached_earlobes</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>23</key><map><key>name</key><string>baggy_eyes</string><key>value</key><real>0.4199999868869781494140625</real><key>weight</key><integer>117</integer></map><key>24</key><map><key>name</key><string>wide_eyes</string><key>value</key><real>-0.660000026226043701171875</real><key>weight</key><integer>61</integer></map><key>25</key><map><key>name</key><string>wide_lip_cleft</string><key>value</key><real>0.5099999904632568359375</real><key>weight</key><integer>145</integer></map><key>27</key><map><key>name</key><string>wide_nose_bridge</string><key>value</key><real>0.01999999955296516418457031</real><key>weight</key><integer>134</integer></map><key>31</key><map><key>name</key><string>arced_eyebrows</string><key>value</key><real>1.03999996185302734375</real><key>weight</key><integer>132</integer></map><key>33</key><map><key>name</key><string>height</string><key>value</key><real>-0.4099999964237213134765625</real><key>weight</key><integer>112</integer></map><key>34</key><map><key>name</key><string>thickness</string><key>value</key><real>0.4000000059604644775390625</real><key>weight</key><integer>127</integer></map><key>35</key><map><key>name</key><string>big_ears</string><key>value</key><real>0</real><key>weight</key><integer>85</integer></map><key>36</key><map><key>name</key><string>shoulders</string><key>value</key><real>-0.4900000095367431640625</real><key>weight</key><integer>104</integer></map><key>37</key><map><key>name</key><string>hip width</string><key>value</key><real>0</real><key>weight</key><integer>136</integer></map><key>38</key><map><key>name</key><string>torso length</string><key>value</key><real>0.4199999868869781494140625</real><key>weight</key><integer>181</integer></map><key>4</key><map><key>name</key><string>broad_nostrils</string><key>value</key><real>-0.2300000041723251342773438</real><key>weight</key><integer>45</integer></map><key>5</key><map><key>name</key><string>cleft_chin</string><key>value</key><real>-0.1000000014901161193847656</real><key>weight</key><integer>0</integer></map><key>503</key><map><key>name</key><string>platform height</string><key>value</key><real>0.1000000014901161193847656</real><key>weight</key><integer>25</integer></map><key>505</key><map><key>name</key><string>lip thickness</string><key>value</key><real>0.64999997615814208984375</real><key>weight</key><integer>165</integer></map><key>506</key><map><key>name</key><string>mouth_height</string><key>value</key><real>-0.03999999910593032836914062</real><key>weight</key><integer>124</integer></map><key>507</key><map><key>name</key><string>breast_gravity</string><key>value</key><real>0</real><key>weight</key><integer>109</integer></map><key>508</key><map><key>name</key><string>shoe_platform_width</string><key>value</key><real>-0.519999980926513671875</real><key>weight</key><integer>40</integer></map><key>513</key><map><key>name</key><string>heel shape</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>514</key><map><key>name</key><string>toe shape</string><key>value</key><real>0.0900000035762786865234375</real><key>weight</key><integer>22</integer></map><key>515</key><map><key>name</key><string>foot_size</string><key>value</key><real>-0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>517</key><map><key>name</key><string>wide_nose</string><key>value</key><real>0.1199999973177909851074219</real><key>weight</key><integer>105</integer></map><key>518</key><map><key>name</key><string>eyelashes_long</string><key>value</key><real>-0.300000011920928955078125</real><key>weight</key><integer>0</integer></map><key>6</key><map><key>name</key><string>bulbous_nose_tip</string><key>value</key><real>-0.300000011920928955078125</real><key>weight</key><integer>0</integer></map><key>603</key><map><key>name</key><string>sleeve length</string><key>value</key><real>0.4000000059604644775390625</real><key>weight</key><integer>100</integer></map><key>604</key><map><key>name</key><string>bottom</string><key>value</key><real>0.85000002384185791015625</real><key>weight</key><integer>216</integer></map><key>605</key><map><key>name</key><string>collar front</string><key>value</key><real>0.839999973773956298828125</real><key>weight</key><integer>214</integer></map><key>606</key><map><key>name</key><string>sleeve length</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>204</integer></map><key>607</key><map><key>name</key><string>collar front</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>204</integer></map><key>608</key><map><key>name</key><string>bottom length lower</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>204</integer></map><key>609</key><map><key>name</key><string>open jacket</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>51</integer></map><key>616</key><map><key>name</key><string>shoe height</string><key>value</key><real>0.300000011920928955078125</real><key>weight</key><integer>76</integer></map><key>617</key><map><key>name</key><string>socks length</string><key>value</key><real>0.3499999940395355224609375</real><key>weight</key><integer>89</integer></map><key>619</key><map><key>name</key><string>pants length</string><key>value</key><real>0.300000011920928955078125</real><key>weight</key><integer>76</integer></map><key>624</key><map><key>name</key><string>pants waist</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>204</integer></map><key>625</key><map><key>name</key><string>leg_pantflair</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>629</key><map><key>name</key><string>forehead angle</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>637</key><map><key>name</key><string>body fat</string><key>value</key><real>0.009999999776482582092285156</real><key>weight</key><integer>2</integer></map><key>638</key><map><key>name</key><string>low_crotch</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>646</key><map><key>name</key><string>egg_head</string><key>value</key><real>0</real><key>weight</key><integer>144</integer></map><key>647</key><map><key>name</key><string>squash_stretch_head</string><key>value</key><real>0</real><key>weight</key><integer>85</integer></map><key>649</key><map><key>name</key><string>torso muscles</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>650</key><map><key>name</key><string>eyelid_corner_up</string><key>value</key><real>-0.670000016689300537109375</real><key>weight</key><integer>64</integer></map><key>652</key><map><key>name</key><string>leg muscles</string><key>value</key><real>0.4900000095367431640625</real><key>weight</key><integer>124</integer></map><key>653</key><map><key>name</key><string>tall_lips</string><key>value</key><real>0.2599999904632568359375</real><key>weight</key><integer>107</integer></map><key>654</key><map><key>name</key><string>shoe_toe_thick</string><key>value</key><real>0.05999999865889549255371094</real><key>weight</key><integer>7</integer></map><key>656</key><map><key>name</key><string>crooked_nose</string><key>value</key><real>0</real><key>weight</key><integer>127</integer></map><key>659</key><map><key>name</key><string>mouth corner</string><key>value</key><real>0.5099999904632568359375</real><key>weight</key><integer>130</integer></map><key>662</key><map><key>name</key><string>face shear</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>663</key><map><key>name</key><string>shift_mouth</string><key>value</key><real>-0.2000000029802322387695312</real><key>weight</key><integer>114</integer></map><key>664</key><map><key>name</key><string>pop_eye</string><key>value</key><real>0.12999999523162841796875</real><key>weight</key><integer>140</integer></map><key>665</key><map><key>name</key><string>jaw_jut</string><key>value</key><real>0.03999999910593032836914062</real><key>weight</key><integer>130</integer></map><key>674</key><map><key>name</key><string>hair_shear_back</string><key>value</key><real>-0.300000011920928955078125</real><key>weight</key><integer>59</integer></map><key>675</key><map><key>name</key><string>hand size</string><key>value</key><real>0.02999999932944774627685547</real><key>weight</key><integer>140</integer></map><key>676</key><map><key>name</key><string>love_handles</string><key>value</key><real>-0.430000007152557373046875</real><key>weight</key><integer>48</integer></map><key>678</key><map><key>name</key><string>torso muscles</string><key>value</key><real>0.37000000476837158203125</real><key>weight</key><integer>94</integer></map><key>682</key><map><key>name</key><string>head size</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>683</key><map><key>name</key><string>neck thickness</string><key>value</key><real>-0.1400000005960464477539062</real><key>weight</key><integer>110</integer></map><key>684</key><map><key>name</key><string>breast_female_cleavage</string><key>value</key><real>0</real><key>weight</key><integer>47</integer></map><key>685</key><map><key>name</key><string>chest_male_no_pecs</string><key>value</key><real>0.1400000005960464477539062</real><key>weight</key><integer>101</integer></map><key>690</key><map><key>name</key><string>eye size</string><key>value</key><real>0.3300000131130218505859375</real><key>weight</key><integer>84</integer></map><key>692</key><map><key>name</key><string>leg length</string><key>value</key><real>0.2399999946355819702148438</real><key>weight</key><integer>158</integer></map><key>693</key><map><key>name</key><string>arm length</string><key>value</key><real>0.1000000014901161193847656</real><key>weight</key><integer>140</integer></map><key>7</key><map><key>name</key><string>weak_chin</string><key>value</key><real>0</real><key>weight</key><integer>127</integer></map><key>700</key><map><key>name</key><string>lipstick color</string><key>value</key><real>0.25</real><key>weight</key><integer>63</integer></map><key>701</key><map><key>name</key><string>lipstick</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>702</key><map><key>name</key><string>lipgloss</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>703</key><map><key>name</key><string>eyeliner</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>704</key><map><key>name</key><string>blush</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>705</key><map><key>name</key><string>blush color</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>706</key><map><key>name</key><string>out shdw opacity</string><key>value</key><real>0.60000002384185791015625</real><key>weight</key><integer>127</integer></map><key>707</key><map><key>name</key><string>outer shadow</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>708</key><map><key>name</key><string>out shdw color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>709</key><map><key>name</key><string>inner shadow</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>710</key><map><key>name</key><string>nail polish</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>711</key><map><key>name</key><string>blush opacity</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>712</key><map><key>name</key><string>in shdw color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>713</key><map><key>name</key><string>in shdw opacity</string><key>value</key><real>0.699999988079071044921875</real><key>weight</key><integer>159</integer></map><key>714</key><map><key>name</key><string>eyeliner color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>715</key><map><key>name</key><string>nail polish color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>750</key><map><key>name</key><string>eyebrow density</string><key>value</key><real>0.64999997615814208984375</real><key>weight</key><integer>165</integer></map><key>752</key><map><key>name</key><string>hair thickness</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>753</key><map><key>name</key><string>saddlebags</string><key>value</key><real>0.05999999865889549255371094</real><key>weight</key><integer>40</integer></map><key>754</key><map><key>name</key><string>hair_taper_back</string><key>value</key><real>0</real><key>weight</key><integer>85</integer></map><key>755</key><map><key>name</key><string>hair_taper_front</string><key>value</key><real>0.05000000074505805969238281</real><key>weight</key><integer>131</integer></map><key>756</key><map><key>name</key><string>neck length</string><key>value</key><real>-0.07999999821186065673828125</real><key>weight</key><integer>117</integer></map><key>757</key><map><key>name</key><string>lower_eyebrows</string><key>value</key><real>-1.60000002384185791015625</real><key>weight</key><integer>102</integer></map><key>758</key><map><key>name</key><string>lower_bridge_nose</string><key>value</key><real>-1.0499999523162841796875</real><key>weight</key><integer>38</integer></map><key>759</key><map><key>name</key><string>low_septum_nose</string><key>value</key><real>0.670000016689300537109375</real><key>weight</key><integer>170</integer></map><key>760</key><map><key>name</key><string>jaw_angle</string><key>value</key><real>0</real><key>weight</key><integer>95</integer></map><key>762</key><map><key>name</key><string>hair_shear_front</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>763</key><map><key>name</key><string>hair volume</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>764</key><map><key>name</key><string>lip_cleft_deep</string><key>value</key><real>-0.5</real><key>weight</key><integer>0</integer></map><key>765</key><map><key>name</key><string>puffy_lower_lids</string><key>value</key><real>1.019999980926513671875</real><key>weight</key><integer>120</integer></map><key>769</key><map><key>name</key><string>eye depth</string><key>value</key><real>0.519999980926513671875</real><key>weight</key><integer>132</integer></map><key>773</key><map><key>name</key><string>head length</string><key>value</key><real>0.5</real><key>weight</key><integer>127</integer></map><key>775</key><map><key>name</key><string>body freckles</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>779</key><map><key>name</key><string>collar back</string><key>value</key><real>0.839999973773956298828125</real><key>weight</key><integer>214</integer></map><key>780</key><map><key>name</key><string>collar back</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>204</integer></map><key>781</key><map><key>name</key><string>collar back</string><key>value</key><real>0.7799999713897705078125</real><key>weight</key><integer>198</integer></map><key>785</key><map><key>name</key><string>pigtails</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>789</key><map><key>name</key><string>ponytail</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>795</key><map><key>name</key><string>butt size</string><key>value</key><real>0.4099999964237213134765625</real><key>weight</key><integer>104</integer></map><key>796</key><map><key>name</key><string>pointy_ears</string><key>value</key><real>0</real><key>weight</key><integer>30</integer></map><key>799</key><map><key>name</key><string>lip ratio</string><key>value</key><real>0.449999988079071044921875</real><key>weight</key><integer>114</integer></map><key>8</key><map><key>name</key><string>double_chin</string><key>value</key><real>0</real><key>weight</key><integer>63</integer></map><key>80</key><map><key>name</key><string>male</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>800</key><map><key>name</key><string>sleeve length</string><key>value</key><real>0.88999998569488525390625</real><key>weight</key><integer>226</integer></map><key>801</key><map><key>name</key><string>shirt bottom</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>802</key><map><key>name</key><string>collar front</string><key>value</key><real>0.7799999713897705078125</real><key>weight</key><integer>198</integer></map><key>803</key><map><key>name</key><string>shirt_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>804</key><map><key>name</key><string>shirt_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>805</key><map><key>name</key><string>shirt_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>806</key><map><key>name</key><string>pants_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>807</key><map><key>name</key><string>pants_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>808</key><map><key>name</key><string>pants_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>812</key><map><key>name</key><string>shoes_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>813</key><map><key>name</key><string>shoes_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>814</key><map><key>name</key><string>waist height</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>815</key><map><key>name</key><string>pants length</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>204</integer></map><key>816</key><map><key>name</key><string>loose lower clothing</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>817</key><map><key>name</key><string>shoes_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>818</key><map><key>name</key><string>socks_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>819</key><map><key>name</key><string>socks_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>820</key><map><key>name</key><string>socks_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>821</key><map><key>name</key><string>undershirt_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>822</key><map><key>name</key><string>undershirt_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>823</key><map><key>name</key><string>undershirt_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>824</key><map><key>name</key><string>underpants_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>825</key><map><key>name</key><string>underpants_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>826</key><map><key>name</key><string>underpants_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>827</key><map><key>name</key><string>gloves_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>828</key><map><key>name</key><string>loose upper clothing</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>829</key><map><key>name</key><string>gloves_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>830</key><map><key>name</key><string>gloves_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>834</key><map><key>name</key><string>jacket_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>835</key><map><key>name</key><string>jacket_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>836</key><map><key>name</key><string>jacket_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>840</key><map><key>name</key><string>shirtsleeve_flair</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>841</key><map><key>name</key><string>bowed_legs</string><key>value</key><real>0</real><key>weight</key><integer>127</integer></map><key>842</key><map><key>name</key><string>hip length</string><key>value</key><real>-0.800000011920928955078125</real><key>weight</key><integer>25</integer></map><key>844</key><map><key>name</key><string>glove fingers</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>848</key><map><key>name</key><string>skirt_bustle</string><key>value</key><real>0.2000000029802322387695312</real><key>weight</key><integer>25</integer></map><key>858</key><map><key>name</key><string>skirt length</string><key>value</key><real>0.4000000059604644775390625</real><key>weight</key><integer>100</integer></map><key>859</key><map><key>name</key><string>slit front</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>860</key><map><key>name</key><string>slit back</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>861</key><map><key>name</key><string>slit left</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>862</key><map><key>name</key><string>slit right</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>863</key><map><key>name</key><string>skirt_looseness</string><key>value</key><real>0.333000004291534423828125</real><key>weight</key><integer>84</integer></map><key>868</key><map><key>name</key><string>shirt wrinkles</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>869</key><map><key>name</key><string>pants wrinkles</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>877</key><map><key>name</key><string>jacket wrinkles</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map><key>879</key><map><key>name</key><string>male_package</string><key>value</key><real>-0.1000000014901161193847656</real><key>weight</key><integer>40</integer></map><key>880</key><map><key>name</key><string>eyelid_inner_corner_up</string><key>value</key><real>-0.819999992847442626953125</real><key>weight</key><integer>48</integer></map><key>921</key><map><key>name</key><string>skirt_red</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>922</key><map><key>name</key><string>skirt_green</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>923</key><map><key>name</key><string>skirt_blue</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>93</key><map><key>name</key><string>glove length</string><key>value</key><real>0.800000011920928955078125</real><key>weight</key><integer>203</integer></map><key>98</key><map><key>name</key><string>eye lightness</string><key>value</key><real>1</real><key>weight</key><integer>255</integer></map><key>99</key><map><key>name</key><string>eye color</string><key>value</key><real>0</real><key>weight</key><integer>0</integer></map></map><key>dump_joint_offsets</key><array><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mPelvis</string><key>pos</key><array><real>0</real><real>0</real><real>1.08198797702789306640625</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mSpine1</string><key>pos</key><array><real>0</real><real>0</real><real>0.08407299965620040893554688</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mSpine2</string><key>pos</key><array><real>0</real><real>0</real><real>-0.08407299965620040893554688</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mTorso</string><key>pos</key><array><real>0</real><real>0</real><real>0.08407299965620040893554688</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mSpine3</string><key>pos</key><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mSpine4</string><key>pos</key><array><real>0.01536799967288970947265625</real><real>0</real><real>-0.2048770040273666381835938</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mChest</string><key>pos</key><array><real>-0.01536799967288970947265625</real><real>0</real><real>0.2048770040273666381835938</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mNeck</string><key>pos</key><array><real>-0.009507000446319580078125</real><real>0</real><real>0.251107990741729736328125</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mCollarLeft</string><key>pos</key><array><real>-0.02092700079083442687988281</real><real>0.084665000438690185546875</real><real>0.1653960049152374267578125</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mShoulderLeft</string><key>pos</key><array><real>0</real><real>0.07900000363588333129882812</real><real>0</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mElbowLeft</string><key>pos</key><array><real>0</real><real>0.2479999959468841552734375</real><real>0</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mCollarRight</string><key>pos</key><array><real>-0.02092700079083442687988281</real><real>-0.08500000089406967163085938</real><real>0.1653960049152374267578125</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mShoulderRight</string><key>pos</key><array><real>0</real><real>-0.079418003559112548828125</real><real>0</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mElbowRight</string><key>pos</key><array><real>0</real><real>-0.2479999959468841552734375</real><real>0</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mHipRight</string><key>pos</key><array><real>0.03361999988555908203125</real><real>-0.12880599498748779296875</real><real>-0.04108599945902824401855469</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mKneeRight</string><key>pos</key><array><real>-0.000780000002123415470123291</real><real>0.04863499850034713745117188</real><real>-0.4909220039844512939453125</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mAnkleRight</string><key>pos</key><array><real>-0.02886899933218955993652344</real><real>0</real><real>-0.468493998050689697265625</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mHipLeft</string><key>pos</key><array><real>0.0337570011615753173828125</real><real>0.1267649978399276733398438</real><real>-0.04099800065159797668457031</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mKneeLeft</string><key>pos</key><array><real>-0.0008870000019669532775878906</real><real>-0.04556800052523612976074219</real><real>-0.49105298519134521484375</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mAnkleLeft</string><key>pos</key><array><real>-0.02888699993491172790527344</real><real>0.001378000015392899513244629</real><real>-0.46844899654388427734375</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mTail1</string><key>pos</key><array><real>-0.127954006195068359375</real><real>0</real><real>0.001858999952673912048339844</real></array></map><map><key>mesh_id</key><uuid>270bb701-8643-c4b3-6a93-7a2b6503b30a</uuid><key>name</key><string>mTail2</string><key>pos</key><array><real>-0.01885000057518482208251953</real><real>0</real><real>-0.094934999942779541015625</real></array></map></array><key>params</key><array><integer>33</integer><integer>74</integer><integer>45</integer><integer>0</integer><integer>0</integer><integer>127</integer><integer>63</integer><integer>85</integer><integer>68</integer><integer>42</integer><integer>0</integer><integer>85</integer><integer>63</integer><integer>66</integer><integer>85</integer><integer>95</integer><integer>142</integer><integer>135</integer><integer>45</integer><integer>0</integer><integer>117</integer><integer>61</integer><integer>145</integer><integer>134</integer><integer>132</integer><integer>112</integer><integer>127</integer><integer>85</integer><integer>104</integer><integer>136</integer><integer>181</integer><integer>255</integer><integer>203</integer><integer>255</integer><integer>0</integer><integer>127</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>127</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>127</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>89</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>71</integer><integer>0</integer><integer>127</integer><integer>119</integer><integer>0</integer><integer>25</integer><integer>165</integer><integer>124</integer><integer>109</integer><integer>40</integer><integer>0</integer><integer>22</integer><integer>51</integer><integer>105</integer><integer>0</integer><integer>100</integer><integer>216</integer><integer>214</integer><integer>204</integer><integer>204</integer><integer>204</integer><integer>51</integer><integer>76</integer><integer>89</integer><integer>76</integer><integer>204</integer><integer>0</integer><integer>127</integer><integer>2</integer><integer>0</integer><integer>144</integer><integer>85</integer><integer>127</integer><integer>64</integer><integer>124</integer><integer>107</integer><integer>7</integer><integer>127</integer><integer>130</integer><integer>127</integer><integer>114</integer><integer>140</integer><integer>130</integer><integer>59</integer><integer>140</integer><integer>48</integer><integer>94</integer><integer>127</integer><integer>110</integer><integer>47</integer><integer>101</integer><integer>84</integer><integer>158</integer><integer>140</integer><integer>63</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>127</integer><integer>127</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>127</integer><integer>0</integer><integer>159</integer><integer>0</integer><integer>0</integer><integer>165</integer><integer>127</integer><integer>40</integer><integer>85</integer><integer>131</integer><integer>117</integer><integer>102</integer><integer>38</integer><integer>170</integer><integer>95</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>120</integer><integer>132</integer><integer>127</integer><integer>0</integer><integer>214</integer><integer>204</integer><integer>198</integer><integer>0</integer><integer>0</integer><integer>104</integer><integer>30</integer><integer>114</integer><integer>226</integer><integer>255</integer><integer>198</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>204</integer><integer>0</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>0</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>0</integer><integer>127</integer><integer>25</integer><integer>255</integer><integer>25</integer><integer>100</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>84</integer><integer>0</integer><integer>0</integer><integer>0</integer><integer>40</integer><integer>48</integer><integer>255</integer><integer>255</integer><integer>255</integer><integer>0</integer><integer>0</integer><integer>25</integer><integer>0</integer><integer>25</integer><integer>23</integer><integer>51</integer><integer>0</integer><integer>25</integer><integer>23</integer><integer>51</integer><integer>0</integer><integer>0</integer><integer>25</integer><integer>0</integer><integer>25</integer><integer>23</integer><integer>51</integer><integer>0</integer><integer>0</integer><integer>25</integer><integer>0</integer><integer>25</integer><integer>23</integer><integer>51</integer><integer>0</integer><integer>25</integer><integer>23</integer><integer>51</integer><integer>0</integer><integer>25</integer><integer>23</integer><integer>51</integer><integer>1</integer><integer>127</integer></array><key>slot_textures</key><map><key>aux1</key><map><key>hash_id</key><uuid>c228d1cf-4b5d-4ba8-84f4-899a0796aa97</uuid><key>texture_ids</key><array /></map><key>aux2</key><map><key>hash_id</key><uuid>c228d1cf-4b5d-4ba8-84f4-899a0796aa97</uuid><key>texture_ids</key><array /></map><key>aux3</key><map><key>hash_id</key><uuid>c228d1cf-4b5d-4ba8-84f4-899a0796aa97</uuid><key>texture_ids</key><array /></map><key>eyes</key><map><key>hash_id</key><uuid>812bffac-704c-d4bb-487d-0674ccbd5d9d</uuid><key>texture_ids</key><array><uuid>5748decc-f629-461c-9a36-a35a221fe21f</uuid><uuid>579e320c-0f16-2a1d-2018-2a00cc657068</uuid></array></map><key>hair</key><map><key>hash_id</key><uuid>fc7ad735-99b6-aaf1-a1bf-676ea304b624</uuid><key>texture_ids</key><array><uuid>3cc3add8-6ff0-0640-79ba-b15137f64008</uuid><uuid>5748decc-f629-461c-9a36-a35a221fe21f</uuid></array></map><key>head</key><map><key>hash_id</key><uuid>799f44a9-82ec-78bd-7800-3e17367229fa</uuid><key>texture_ids</key><array><uuid>5748decc-f629-461c-9a36-a35a221fe21f</uuid><uuid>9e460914-daed-b03f-0f2a-afbe67833b11</uuid><uuid>a21d4081-601e-f9f0-0acc-9192c72863dc</uuid></array></map><key>leftarm</key><map><key>hash_id</key><uuid>c228d1cf-4b5d-4ba8-84f4-899a0796aa97</uuid><key>texture_ids</key><array /></map><key>leftleg</key><map><key>hash_id</key><uuid>c228d1cf-4b5d-4ba8-84f4-899a0796aa97</uuid><key>texture_ids</key><array /></map><key>lower</key><map><key>hash_id</key><uuid>6d752c11-c33a-43c4-8631-3f8a6722ba59</uuid><key>texture_ids</key><array><uuid>5748decc-f629-461c-9a36-a35a221fe21f</uuid><uuid>8dcd4a48-2d37-4909-9f78-f7a9eb4ef903</uuid><uuid>ab169525-d46c-918b-3195-7f2b92fd76c5</uuid><uuid>b5b09502-8305-af43-cc4e-7238cb715b11</uuid><uuid>d9413239-769d-abc9-e929-4fa98f52c07b</uuid></array></map><key>skirt</key><map><key>hash_id</key><uuid>c228d1cf-4b5d-4ba8-84f4-899a0796aa97</uuid><key>texture_ids</key><array /></map><key>upper</key><map><key>hash_id</key><uuid>5b4d5c23-3073-26d1-8d68-78d5bfa308e4</uuid><key>texture_ids</key><array><uuid>5748decc-f629-461c-9a36-a35a221fe21f</uuid><uuid>a85bf749-952d-3835-d9ac-a307c780930c</uuid><uuid>b5d465f9-ca8e-8ba4-efd8-ee8929c592b8</uuid></array></map></map><key>success</key><boolean>1</boolean></map></llsd>
diff --git a/indra/llappearanceutility/tests/texture.llsd.binary b/indra/llappearanceutility/tests/texture.llsd.binary
new file mode 100644
index 0000000000..6b4f34831c
--- /dev/null
+++ b/indra/llappearanceutility/tests/texture.llsd.binary
Binary files differ
diff --git a/indra/llappearanceutility/tests/texture.llsd.output b/indra/llappearanceutility/tests/texture.llsd.output
new file mode 100644
index 0000000000..6c7690decc
--- /dev/null
+++ b/indra/llappearanceutility/tests/texture.llsd.output
Binary files differ
diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h
index ad31921c05..4c0fa6df1c 100644
--- a/indra/llrender/llglheaders.h
+++ b/indra/llrender/llglheaders.h
@@ -34,7 +34,6 @@
#define GL_GLEXT_PROTOTYPES 1
#include "GL/gl.h"
#include "GL/glext.h"
-#include "GL/glu.h"
// The __APPLE__ kludge is to make glh_extensions.h not symbol-clash horribly
# define __APPLE__
@@ -56,7 +55,6 @@
# include "GL/glx.h"
# include "GL/glxext.h"
-
#elif LL_WINDOWS
//----------------------------------------------------------------------------
// LL_WINDOWS
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 97ea6f67bd..e319816377 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -1053,7 +1053,11 @@ U32 type_width_from_pixtype(U32 pixtype)
bool should_stagger_image_set(bool compressed)
{
-#if LL_DARWIN
+#if LL_MESA_HEADLESS
+ return false;
+#elif LL_LINUX
+ return !compressed && on_main_thread() && gGLManager.mIsNVIDIA;
+#elif LL_DARWIN
return !compressed && on_main_thread() && gGLManager.mIsAMD;
#else
// glTexSubImage2D doesn't work with compressed textures on select tested Nvidia GPUs on Windows 10 -Cosmic,2023-03-08