From bdde5f0f7f81eb9538e962843de7a25fa3af0c97 Mon Sep 17 00:00:00 2001 From: Lubos Date: Mon, 12 Sep 2022 18:46:04 +0200 Subject: [PATCH] OpenXR - Use per game stereo separation file --- Common/VR/PPSSPPVR.cpp | 18 +- Common/VR/PPSSPPVR.h | 4 +- Common/VR/VRRenderer.cpp | 11 +- Common/VR/VRRenderer.h | 4 +- Common/VR/VRTweaks.cpp | 6 +- Common/VR/VRTweaks.h | 2 +- Core/Compatibility.cpp | 15 + Core/Compatibility.h | 8 + Core/Config.cpp | 1 - Core/Config.h | 1 - GPU/GLES/ShaderManagerGLES.cpp | 2 +- UI/GameSettingsScreen.cpp | 2 - assets/compatvr.ini | 620 +++++++++++++++++++++++++++++++++ 13 files changed, 669 insertions(+), 25 deletions(-) create mode 100644 assets/compatvr.ini diff --git a/Common/VR/PPSSPPVR.cpp b/Common/VR/PPSSPPVR.cpp index 16b170e1fb..6a5ac4c0d5 100644 --- a/Common/VR/PPSSPPVR.cpp +++ b/Common/VR/PPSSPPVR.cpp @@ -8,6 +8,7 @@ #include "Core/HLE/sceDisplay.h" #include "Core/Config.h" #include "Core/KeyMap.h" +#include "Core/System.h" /* @@ -239,7 +240,6 @@ bool PreVRRender() { VR_SetConfig(VR_CONFIG_6DOF_ENABLED, g_Config.bEnable6DoF); VR_SetConfig(VR_CONFIG_CANVAS_DISTANCE, g_Config.iCanvasDistance); VR_SetConfig(VR_CONFIG_FOV_SCALE, g_Config.iFieldOfViewPercentage); - VR_SetConfig(VR_CONFIG_STEREO_SEPARATION, g_Config.iStereoSeparation); return true; } return false; @@ -285,9 +285,19 @@ void UpdateVRProjection(float* projMatrix, float* leftEye, float* rightEye) { VR_TweakProjection(projMatrix, leftEye, VR_PROJECTION_MATRIX_LEFT_EYE); VR_TweakProjection(projMatrix, rightEye, VR_PROJECTION_MATRIX_RIGHT_EYE); VR_TweakMirroring(projMatrix); + + // Set 6DoF scale + float scale = pow(fabs(projMatrix[14]), 1.15f); + if (PSP_CoreParameter().compat.vrCompat().UnitsPerMeter > 0) { + scale = PSP_CoreParameter().compat.vrCompat().UnitsPerMeter; + VR_SetConfig(VR_CONFIG_6DOF_PRECISE, true); + } else { + VR_SetConfig(VR_CONFIG_6DOF_PRECISE, false); + } + VR_SetConfig(VR_CONFIG_6DOF_SCALE, (int)(scale * 1000000)); } -void UpdateVRView(float* projMatrix, float* leftEye, float* rightEye) { - VR_TweakView(leftEye, projMatrix, VR_VIEW_MATRIX_LEFT_EYE); - VR_TweakView(rightEye, projMatrix, VR_VIEW_MATRIX_RIGHT_EYE); +void UpdateVRView(float* leftEye, float* rightEye) { + VR_TweakView(leftEye, VR_VIEW_MATRIX_LEFT_EYE); + VR_TweakView(rightEye, VR_VIEW_MATRIX_RIGHT_EYE); } diff --git a/Common/VR/PPSSPPVR.h b/Common/VR/PPSSPPVR.h index b41b69f1be..dde26bf72a 100644 --- a/Common/VR/PPSSPPVR.h +++ b/Common/VR/PPSSPPVR.h @@ -24,7 +24,7 @@ bool IsMultiviewSupported(); bool IsFlatVRScene(); bool Is2DVRObject(float* projMatrix, bool ortho); void UpdateVRProjection(float* projMatrix, float* leftEye, float* rightEye); -void UpdateVRView(float* projMatrix, float* leftEye, float* rightEye); +void UpdateVRView(float* leftEye, float* rightEye); #else //dummy integration @@ -47,6 +47,6 @@ inline bool IsMultiviewSupported() { return false; } inline bool IsFlatVRScene() { return true; } inline bool Is2DVRObject(float* projMatrix, bool ortho) { return false; } inline void UpdateVRProjection(float* projMatrix, float* leftEye, float* rightEye) {} -inline void UpdateVRView(float* projMatrix, float* leftEye, float* rightEye) {} +inline void UpdateVRView(float* leftEye, float* rightEye) {} #endif diff --git a/Common/VR/VRRenderer.cpp b/Common/VR/VRRenderer.cpp index 1b42a27adb..79e6114a61 100644 --- a/Common/VR/VRRenderer.cpp +++ b/Common/VR/VRRenderer.cpp @@ -493,17 +493,16 @@ ovrMatrix4f VR_GetMatrix( VRMatrix matrix ) { } output = ovrMatrix4f_CreateFromQuaternion(&invView.orientation); - float scale = (float)VR_GetConfig(VR_CONFIG_6DOF_SCALE) * 0.001f; + float scale = (float)VR_GetConfig(VR_CONFIG_6DOF_SCALE) * 0.000001f; if (vrConfig[VR_CONFIG_6DOF_ENABLED]) { output.M[0][3] -= hmdposition.x * (vrConfig[VR_CONFIG_MIRROR_AXIS_X] ? -1.0f : 1.0f) * scale; output.M[1][3] -= hmdposition.y * (vrConfig[VR_CONFIG_MIRROR_AXIS_Y] ? -1.0f : 1.0f) * scale; output.M[2][3] -= hmdposition.z * (vrConfig[VR_CONFIG_MIRROR_AXIS_Z] ? -1.0f : 1.0f) * scale; } - if (matrix == VR_VIEW_MATRIX_RIGHT_EYE) { - float ipdScale = (float)vrConfig[VR_CONFIG_STEREO_SEPARATION] * 0.1f * scale; - output.M[0][3] += (invViewTransform[1].position.x - invViewTransform[0].position.x) * ipdScale; - output.M[1][3] += (invViewTransform[1].position.y - invViewTransform[0].position.y) * ipdScale; - output.M[2][3] += (invViewTransform[1].position.z - invViewTransform[0].position.z) * ipdScale; + if (vrConfig[VR_CONFIG_6DOF_PRECISE] && (matrix == VR_VIEW_MATRIX_RIGHT_EYE)) { + output.M[0][3] += (invViewTransform[1].position.x - invViewTransform[0].position.x) * scale; + output.M[1][3] += (invViewTransform[1].position.y - invViewTransform[0].position.y) * scale; + output.M[2][3] += (invViewTransform[1].position.z - invViewTransform[0].position.z) * scale; } } else { assert(false); diff --git a/Common/VR/VRRenderer.h b/Common/VR/VRRenderer.h index a8015776fd..9375370cad 100644 --- a/Common/VR/VRRenderer.h +++ b/Common/VR/VRRenderer.h @@ -7,9 +7,9 @@ enum VRConfig { //switching between 2D and 3D VR_CONFIG_MODE, VR_CONFIG_3D_GEOMETRY_COUNT, VR_CONFIG_FORCE_2D, //camera setup - VR_CONFIG_FOV_SCALE, VR_CONFIG_CANVAS_DISTANCE, VR_CONFIG_STEREO_SEPARATION, + VR_CONFIG_FOV_SCALE, VR_CONFIG_CANVAS_DISTANCE, //6DoF - VR_CONFIG_6DOF_ENABLED, VR_CONFIG_6DOF_SCALE, + VR_CONFIG_6DOF_ENABLED, VR_CONFIG_6DOF_SCALE, VR_CONFIG_6DOF_PRECISE, VR_CONFIG_MIRROR_AXIS_X, VR_CONFIG_MIRROR_AXIS_Y, VR_CONFIG_MIRROR_AXIS_Z, VR_CONFIG_MIRROR_PITCH, VR_CONFIG_MIRROR_YAW, VR_CONFIG_MIRROR_ROLL, //2D canvas positioning diff --git a/Common/VR/VRTweaks.cpp b/Common/VR/VRTweaks.cpp index edd21b45f4..209ef56b6d 100644 --- a/Common/VR/VRTweaks.cpp +++ b/Common/VR/VRTweaks.cpp @@ -79,15 +79,11 @@ void VR_TweakProjection(float* src, float* dst, VRMatrix matrix) { memcpy(dst, hmdProjection.M, 16 * sizeof(float)); } -void VR_TweakView(float* view, float* projMatrix, VRMatrix matrix) { +void VR_TweakView(float* view, VRMatrix matrix) { // Get view matrix from the game ovrMatrix4f gameView; memcpy(gameView.M, view, 16 * sizeof(float)); - // Set 6DoF scale - float scale = pow(fabs(projMatrix[14]), 1.15f); - VR_SetConfig(VR_CONFIG_6DOF_SCALE, (int)(scale * 1000)); - // Get view matrix from the headset ovrMatrix4f hmdView = VR_GetMatrix(matrix); diff --git a/Common/VR/VRTweaks.h b/Common/VR/VRTweaks.h index 7d3e06dbc6..173314a86f 100644 --- a/Common/VR/VRTweaks.h +++ b/Common/VR/VRTweaks.h @@ -9,4 +9,4 @@ bool VR_TweakIsMatrixOneScale(float* matrix); bool VR_TweakIsMatrixOneTransform(float* matrix); void VR_TweakMirroring(float* projMatrix); void VR_TweakProjection(float* src, float* dst, VRMatrix matrix); -void VR_TweakView(float* view, float* projMatrix, VRMatrix matrix); +void VR_TweakView(float* view, VRMatrix matrix); diff --git a/Core/Compatibility.cpp b/Core/Compatibility.cpp index 11233bf1bb..f3970fac65 100644 --- a/Core/Compatibility.cpp +++ b/Core/Compatibility.cpp @@ -42,6 +42,14 @@ void Compatibility::Load(const std::string &gameID) { } } + { + IniFile compat; + // This loads from assets. + if (compat.LoadFromVFS("compatvr.ini")) { + CheckSetting(compat, gameID, "UnitsPerMeter", &vrCompat_.UnitsPerMeter); + } + } + { IniFile compat2; // This one is user-editable. Need to load it after the system one. @@ -54,6 +62,7 @@ void Compatibility::Load(const std::string &gameID) { void Compatibility::Clear() { memset(&flags_, 0, sizeof(flags_)); + memset(&vrCompat_, 0, sizeof(vrCompat_)); } void Compatibility::CheckSettings(IniFile &iniFile, const std::string &gameID) { @@ -110,3 +119,9 @@ void Compatibility::CheckSetting(IniFile &iniFile, const std::string &gameID, co *flag |= all; } } + +void Compatibility::CheckSetting(IniFile &iniFile, const std::string &gameID, const char *option, float *flag) { + std::string value; + iniFile.Get(option, gameID.c_str(), &value, "0"); + *flag = stof(value); +} diff --git a/Core/Compatibility.h b/Core/Compatibility.h index 9b1dfa5fd7..83ba931fd4 100644 --- a/Core/Compatibility.h +++ b/Core/Compatibility.h @@ -90,6 +90,10 @@ struct CompatFlags { bool ForceLowerResolutionForEffectsOn; }; +struct VRCompat { + float UnitsPerMeter; +}; + class IniFile; class Compatibility { @@ -101,13 +105,17 @@ public: // Flags enforced read-only through const. Only way to change them is to load assets/compat.ini. const CompatFlags &flags() const { return flags_; } + const VRCompat &vrCompat() const { return vrCompat_; } + void Load(const std::string &gameID); private: void Clear(); void CheckSettings(IniFile &iniFile, const std::string &gameID); void CheckSetting(IniFile &iniFile, const std::string &gameID, const char *option, bool *flag); + void CheckSetting(IniFile &iniFile, const std::string &gameID, const char *option, float *value); CompatFlags flags_{}; + VRCompat vrCompat_{}; std::set ignored_; }; diff --git a/Core/Config.cpp b/Core/Config.cpp index 710dd28af3..27f97e89c5 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -1208,7 +1208,6 @@ static ConfigSetting vrSettings[] = { ConfigSetting("VREnableStereo", &g_Config.bEnableStereo, false), ConfigSetting("VRCanvasDistance", &g_Config.iCanvasDistance, 6), ConfigSetting("VRFieldOfView", &g_Config.iFieldOfViewPercentage, 100), - ConfigSetting("VRStereoSeparation", &g_Config.iStereoSeparation, 10), ConfigSetting(false), }; diff --git a/Core/Config.h b/Core/Config.h index 433e838f32..6ae172bfba 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -458,7 +458,6 @@ public: bool bEnableStereo; int iCanvasDistance; int iFieldOfViewPercentage; - int iStereoSeparation; // Debugger int iDisasmWindowX; diff --git a/GPU/GLES/ShaderManagerGLES.cpp b/GPU/GLES/ShaderManagerGLES.cpp index a1ae7edb61..2ea0a7ca9b 100644 --- a/GPU/GLES/ShaderManagerGLES.cpp +++ b/GPU/GLES/ShaderManagerGLES.cpp @@ -529,7 +529,7 @@ void LinkedShader::UpdateUniforms(u32 vertType, const ShaderID &vsid, bool useBu ConvertMatrix4x3To4x4Transposed(leftEyeView, gstate.viewMatrix); ConvertMatrix4x3To4x4Transposed(rightEyeView, gstate.viewMatrix); if (!flatScreen && !is2D) { - UpdateVRView(gstate.projMatrix, leftEyeView, rightEyeView); + UpdateVRView(leftEyeView, rightEyeView); } render_->SetUniformM4x4Stereo("u_view", &u_view, leftEyeView, rightEyeView); } else { diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index cacd51e807..c559eb027c 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -1122,8 +1122,6 @@ void GameSettingsScreen::CreateViews() { vrFieldOfView->SetEnabledPtr(&g_Config.bEnableVR); CheckBox *vrStereo = vrSettings->Add(new CheckBox(&g_Config.bEnableStereo, vr->T("Enable stereoscopic vision (Experimental)"))); vrStereo->SetEnabledPtr(&g_Config.bEnableVR); - PopupSliderChoice *vrStereoSepararation = vrSettings->Add(new PopupSliderChoice(&g_Config.iStereoSeparation, 1, 50, vr->T("Stereo separation (differs per game)", "Stereo separation (differs per game)"), 1, screenManager(), "x")); - vrStereoSepararation->SetEnabledPtr(&g_Config.bEnableStereo); } } diff --git a/assets/compatvr.ini b/assets/compatvr.ini new file mode 100644 index 0000000000..680ae3d2f7 --- /dev/null +++ b/assets/compatvr.ini @@ -0,0 +1,620 @@ +# ======================================================================================== +# compatvr.ini for PPSSPP +# ======================================================================================== +# +# This file is not meant to be user-editable, although is kept as a separate ini +# file instead of compiled into the code for debugging purposes. +# +# The uses cases are strict: +# * Enable fixes for things we can't reasonably emulate without completely ruining +# performance for other games, such as the screen copies in Dangan Ronpa +# * Disabling accuracy features like 16-bit depth rounding, when we can't seem to +# implement them at all in a 100% compatible way +# * Emergency game-specific compatibility fixes before releases, such as the GTA +# music problem where every attempted fix has reduced compatibility with other games +# * Enable "unsafe" performance optimizations that some games can tolerate and +# others cannot. We do not currently have any of those. +# +# This functionality should NOT be used for any of the following: +# * Cheats +# * Fun hacks, like enlarged heads or whatever +# * Fixing general compatibility issues. First try to find a general solution. Try hard. +# +# Game IDs can be looked up at GameFAQs, for example: +# http://www.gamefaqs.com/psp/925776-grand-theft-auto-liberty-city-stories/data +# Sometimes the information may be incomplete though. +# +# ======================================================================================== +# Issue numbers refer to issues on https://github.com/hrydgard/ppsspp/issues +# ======================================================================================== + +[UnitsPerMeter] +# Values exported from https://github.com/CarlKenner/ppsspp/tree/VR/Sys/GameSettings +ELF000000 = 10.0 +JRPG00001 = 80 +JRPG00002 = 80 +NPEG00001 = 1.0 +NPEG00003 = 1000.0 +NPEG00023 = 1.0 +NPEG90003 = 1.0 +NPEH00003 = 30.0 +NPEH00017 = 1.0 +NPEH00031 = 1.0 +NPEH00134 = 8.0 +NPEH00135 = 1.0 +NPEH00138 = 80 +NPEH90011 = 100.0 +NPEH90014 = 1.0 +NPEH90023 = 1000.0 +NPEH90028 = 128.0 +NPEX00005 = 1.0 +NPEZ00007 = 1.0 +NPEZ00008 = 20.0 +NPEZ00011 = 1.0 +NPEZ00023 = 1.0 +NPEZ00041 = 1.0 +NPEZ00044 = 1.0 +NPEZ00045 = 1.0 +NPEZ00081 = 1.0 +NPEZ00101 = 1.0 +NPEZ00104 = 1.0 +NPEZ00107 = 1.0 +NPEZ00108 = 1.0 +NPEZ00118 = 70.0 +NPEZ00127 = 1.0 +NPEZ00140 = 1.0 +NPHG00002 = 1.0 +NPHG00025 = 80.0 +NPHH00351 = 8.0 +NPJB40001 = 100.0 +NPJG00004 = 1000.0 +NPJG00045 = 80.0 +NPJG00103 = 1.0 +NPJG00122 = 100.0 +NPJH00002 = 30.0 +NPJH50040 = 1.0 +NPJH50045 = 1000.0 +NPJH50065 = 1.0 +NPJH50145 = 9.0 +NPJH50148 = 1.0 +NPJH50180 = 1.0 +NPJH50184 = 1000.0 +NPJH50352 = 100 +NPJH50401 = 1.0 +NPJH50414 = 1.0 +NPJH50443 = 100.0 +NPJH50444 = 100.0 +NPJH50448 = 80 +NPJH50457 = 1.0 +NPJH50475 = 4.0 +NPJH50515 = 8.0 +NPJH50625 = 1.8 +NPJH50626 = 8.0 +NPJH50701 = 1.0 +NPJH90066 = 1.0 +NPUG70008 = 1.0 +NPUG80086 = 1000.0 +NPUG80325 = 1.0 +NPUH10006 = 30.0 +NPUH10023 = 1.0 +NPUH10024 = 1.0 +NPUH10026 = 1.0 +NPUH10034 = 1.0 +NPUH10125 = 8.0 +NPUH10126 = 80 +NPUH90019 = 1.0 +NPUH90029 = 1.0 +NPUH90048 = 1.0 +NPUH90067 = 128.0 +NPUX80433 = 1.0 +NPUZ00002 = 1.0 +NPUZ00007 = 1.0 +NPUZ00010 = 1.0 +NPUZ00020 = 1.0 +NPUZ00021 = 1.0 +NPUZ00024 = 1.0 +NPUZ00027 = 20.0 +NPUZ00028 = 1.0 +NPUZ00031 = 1.0 +NPUZ00033 = 70.0 +NPUZ00034 = 1.0 +NPUZ00040 = 1.0 +NPUZ00056 = 1.0 +NPUZ00080 = 1.0 +UCAS40011 = 1.0 +UCAS40012 = 1.0 +UCAS40018 = 9.0 +UCAS40020 = 100.0 +UCAS40021 = 10.0 +UCAS40023 = 9.0 +UCAS40024 = 0.98 +UCAS40025 = 83 +UCAS40026 = 0.1 +UCAS40049 = 1.0 +UCAS40063 = 1.0 +UCAS40076 = 5.0 +UCAS40089 = 9.0 +UCAS40092 = 100.0 +UCAS40095 = 1000.0 +UCAS40098 = 0.96 +UCAS40099 = 1000.0 +UCAS40102 = 1.0 +UCAS40113 = 1000.0 +UCAS40116 = 9.0 +UCAS40119 = 1000.0 +UCAS40120 = 1.0 +UCAS40129 = 7.0 +UCAS40130 = 0.98 +UCAS40145 = 1.0 +UCAS40146 = 6.8 +UCAS40148 = 1.0 +UCAS40149 = 0.96 +UCAS40156 = 9.0 +UCAS40164 = 1000.0 +UCAS40165 = 1000.0 +UCAS40167 = 100.0 +UCAS40169 = 1.0 +UCAS40177 = 0.96 +UCAS40179 = 1.0 +UCAS40180 = 9.5 +UCAS40191 = 1.0 +UCAS40193 = 80.0 +UCAS40198 = 1.0 +UCAS40204 = 100.0 +UCAS40212 = 1.0 +UCAS40258 = 0.96 +UCAS40265 = 1.0 +UCAS40318 = 100.0 +UCED00432 = 1.0 +UCED00448 = 1000.0 +UCED00970 = 1.0 +UCED00971 = 1.0 +UCED90007 = 1.0 +UCES00001 = 1.0 +UCES00004 = 0.1 +UCES00010 = 100.0 +UCES00044 = 2.0 +UCES00109 = 5.0 +UCES00178 = 9.0 +UCES00249 = 1.0 +UCES00302 = 100.0 +UCES00304 = 1.0 +UCES00356 = 1000.0 +UCES00420 = 1.0 +UCES00422 = 1000.0 +UCES00423 = 1.0 +UCES00465 = 1.0 +UCES00842 = 1.0 +UCES00995 = 80.0 +UCES01245 = 1.0 +UCES01312 = 80.0 +UCES01401 = 1.0 +UCES01421 = 100.0 +UCES01473 = 1.0 +UCET00179 = 5.0 +UCET00247 = 9.0 +UCET00357 = 1.0 +UCET00424 = 1000.0 +UCET00713 = 1.0 +UCJB98011 = 1.0 +UCJM95402 = 9.0 +UCJS10007 = 1.0 +UCJS10008 = 1.0 +UCJS10010 = 9.0 +UCJS10011 = 10.0 +UCJS10017 = 0.98 +UCJS10018 = 83 +UCJS10019 = 0.1 +UCJS10028 = 5.0 +UCJS10041 = 1.0 +UCJS10042 = 0.96 +UCJS10047 = 9.0 +UCJS10048 = 7.0 +UCJS10052 = 1.0 +UCJS10057 = 0.96 +UCJS10061 = 9.5 +UCJS10077 = 80.0 +UCJS10082 = 0.96 +UCJS10085 = 1.0 +UCJS10092 = 1.0 +UCJS10093 = 0.96 +UCJS10100 = 1.0 +UCJS10106 = 1.0 +UCJS10114 = 1.0 +UCJS18005 = 1.0 +UCJS18010 = 0.98 +UCJS18014 = 7.0 +UCJS18015 = 0.96 +UCJX90019 = 7.0 +UCKS45007 = 10.0 +UCKS45008 = 1.0 +UCKS45011 = 9.0 +UCKS45018 = 1.0 +UCKS45020 = 1.0 +UCKS45022 = 1.0 +UCKS45027 = 1000.0 +UCKS45032 = 1000.0 +UCKS45034 = 9.0 +UCKS45038 = 1.0 +UCKS45050 = 10.0 +UCKS45052 = 100.0 +UCKS45056 = 6.8 +UCKS45067 = 1.0 +UCKS45071 = 9.5 +UCKS45076 = 80.0 +UCKS45120 = 1.0 +UCUS98612 = 1.0 +UCUS98618 = 2.0 +UCUS98623 = 9.0 +UCUS98632 = 1.0 +UCUS98633 = 1.0 +UCUS98647 = 5.0 +UCUS98648 = 1.0 +UCUS98653 = 1.0 +UCUS98654 = 2.0 +UCUS98662 = 1.0 +UCUS98671 = 5.0 +UCUS98681 = 1.0 +UCUS98700 = 7.0 +UCUS98706 = 7.0 +UCUS98711 = 80.0 +UCUS98712 = 1.0 +UCUS98713 = 1.0 +UCUS98717 = 80.0 +UCUS98732 = 80.0 +UCUS98737 = 1.0 +UCUS98740 = 80.0 +UCUS98751 = 100.0 +ULAS40129 = 7.0 +ULAS40155 = 1.0 +ULAS42007 = 1000.0 +ULAS42019 = 1.0 +ULAS42035 = 930.0 +ULAS42037 = 1.0 +ULAS42052 = 10.0 +ULAS42069 = 7.8 +ULAS42072 = 1.0 +ULAS42073 = 7.8 +ULAS42087 = 970.0 +ULAS42093 = 100.0 +ULAS42097 = 10.0 +ULAS42099 = 1.0 +ULAS42110 = 100.0 +ULAS42115 = 1.0 +ULAS42117 = 1.0 +ULAS42119 = 1.0 +ULES00008 = 1000.0 +ULES00011 = 10.0 +ULES00026 = 0.1 +ULES00033 = 0.005 +ULES00034 = 0.005 +ULES00035 = 0.005 +ULES00051 = 1.0 +ULES00118 = 0.1 +ULES00119 = 0.1 +ULES00125 = 1.0 +ULES00126 = 10.0 +ULES00135 = 83 +ULES00144 = 1.0 +ULES00151 = 1.0 +ULES00153 = 83 +ULES00168 = 1.0 +ULES00169 = 1.0 +ULES00170 = 1.0 +ULES00171 = 1.0 +ULES00172 = 1.0 +ULES00174 = 1.0 +ULES00181 = 1.0 +ULES00182 = 1.0 +ULES00183 = 1.0 +ULES00210 = 1.0 +ULES00214 = 1.0 +ULES00215 = 1.0 +ULES00216 = 1.0 +ULES00219 = 1.0 +ULES00223 = 1.0 +ULES00227 = 10.0 +ULES00233 = 1.0 +ULES00235 = 1.0 +ULES00277 = 100.0 +ULES00283 = 256.0 +ULES00284 = 930.0 +ULES00307 = 10.0 +ULES00319 = 1.0 +ULES00320 = 1.0 +ULES00321 = 1.0 +ULES00322 = 1.0 +ULES00323 = 1.0 +ULES00324 = 1.0 +ULES00325 = 1.0 +ULES00326 = 1.0 +ULES00327 = 1.0 +ULES00339 = 1.0 +ULES00363 = 1.0 +ULES00377 = 1.0 +ULES00382 = 1.0 +ULES00383 = 50.0 +ULES00419 = 7.8 +ULES00452 = 1.0 +ULES00474 = 0.1 +ULES00475 = 0.1 +ULES00479 = 47.0 +ULES00484 = 1.0 +ULES00502 = 1.0 +ULES00503 = 1.0 +ULES00522 = 1.0 +ULES00567 = 1.0 +ULES00601 = 1.0 +ULES00623 = 0.01 +ULES00640 = 1.0 +ULES00643 = 1.05 +ULES00644 = 1.05 +ULES00645 = 970.0 +ULES00704 = 1.0 +ULES00718 = 1.0 +ULES00722 = 10.0 +ULES00734 = 10.0 +ULES00735 = 10.0 +ULES00736 = 10.0 +ULES00737 = 10.0 +ULES00738 = 10.0 +ULES00741 = 10.0 +ULES00742 = 10.0 +ULES00743 = 10.0 +ULES00744 = 10.0 +ULES00745 = 10.0 +ULES00746 = 10.0 +ULES00747 = 10.0 +ULES00748 = 10.0 +ULES00749 = 10.0 +ULES00757 = 1.0 +ULES00765 = 1.0 +ULES00766 = 0.95 +ULES00772 = 1.0 +ULES00811 = 10.0 +ULES00813 = 0.5 +ULES00841 = 100.0 +ULES00850 = 1.0 +ULES00851 = 100.0 +ULES00869 = 1.0 +ULES00959 = 1.0 +ULES00975 = 1.0 +ULES00976 = 1.0 +ULES00977 = 1.0 +ULES00978 = 1.0 +ULES00979 = 1.0 +ULES00981 = 100.0 +ULES00982 = 100.0 +ULES00986 = 6.8 +ULES00987 = 1.0 +ULES01013 = 1.0 +ULES01037 = 1.0 +ULES01044 = 100.0 +ULES01045 = 100.0 +ULES01046 = 100.0 +ULES01047 = 100.0 +ULES01086 = 47.0 +ULES01151 = 1.0 +ULES01213 = 100.0 +ULES01237 = 10.0 +ULES01238 = 1.0 +ULES01239 = 1.0 +ULES01240 = 1.0 +ULES01270 = 1.0 +ULES01298 = 1.0 +ULES01347 = 1.0 +ULES01352 = 1.0 +ULES01357 = 1.0 +ULES01367 = 1.0 +ULES01370 = 47.0 +ULES01372 = 1000.0 +ULES01376 = 1000.0 +ULES01381 = 128.0 +ULES01417 = 9.0 +ULES01422 = 1.000999 +ULES01431 = 0.8 +ULES01441 = 1.0 +ULES01505 = 1.0 +ULES01513 = 100.0 +ULES01519 = 100 +ULES01521 = 1.0 +ULES01523 = 1.0 +ULES01526 = 1.0 +ULET00456 = 1.0 +ULET00919 = 1.0 +ULJM05001 = 1000.0 +ULJM05003 = 0.1 +ULJM05026 = 1.0 +ULJM05036 = 1.0 +ULJM05047 = 930.0 +ULJM05049 = 1.0 +ULJM05060 = 1.0 +ULJM05082 = 1.0 +ULJM05104 = 1.0 +ULJM05105 = 1.0 +ULJM05130 = 50.0 +ULJM05149 = 1.0 +ULJM05150 = 1.0 +ULJM05156 = 100.0 +ULJM05162 = 1.0 +ULJM05176 = 1.0 +ULJM05180 = 256.0 +ULJM05181 = 10.0 +ULJM05193 = 970.0 +ULJM05194 = 1.0 +ULJM05227 = 970.0 +ULJM05228 = 1.0 +ULJM05235 = 1.0 +ULJM05241 = 6.8 +ULJM05243 = 1.0 +ULJM05245 = 1.0 +ULJM05254 = 100.0 +ULJM05255 = 1.0 +ULJM05262 = 1.0 +ULJM05275 = 100.0 +ULJM05280 = 1.0 +ULJM05281 = 1.0 +ULJM05284 = 970.0 +ULJM05287 = 100.0 +ULJM05297 = 1.0 +ULJM05302 = 1.0 +ULJM05319 = 10.0 +ULJM05340 = 1.0 +ULJM05348 = 1.0 +ULJM05369 = 1.0 +ULJM05408 = 32.0 +ULJM05425 = 10.0 +ULJM05471 = 10.0 +ULJM05472 = 3.6 +ULJM05492 = 1.0 +ULJM05550 = 1.0 +ULJM05571 = 1.0 +ULJM05600 = 1.0 +ULJM05604 = 1.0 +ULJM05643 = 128.0 +ULJM05681 = 4.0 +ULJM05775 = 1.0 +ULJM05779 = 1.0 +ULJM05798 = 100.0 +ULJM05836 = 1.0 +ULJM05848 = 1.0 +ULJM05859 = 80 +ULJM06034 = 1.0 +ULJM08001 = 1000.0 +ULJM08011 = 930.0 +ULJM08027 = 10.0 +ULJS00003 = 1.0 +ULJS00018 = 100.0 +ULJS00033 = 1.0 +ULJS00048 = 1000.0 +ULJS00080 = 1000.0 +ULJS00086 = 1.0 +ULJS00158 = 1.0 +ULJS00202 = 1.0 +ULJS00224 = 1000.0 +ULJS00350 = 100 +ULJS19001 = 1.0 +ULJS19007 = 100.0 +ULJS19009 = 1.0 +ULJS19013 = 1000.0 +ULJS19018 = 1.0 +ULKS46003 = 1.0 +ULKS46012 = 0.1 +ULKS46021 = 1.0 +ULKS46023 = 10.0 +ULKS46027 = 1.0 +ULKS46057 = 10.0 +ULKS46065 = 930.0 +ULKS46071 = 50.0 +ULKS46116 = 1.0 +ULKS46119 = 970.0 +ULKS46122 = 32.0 +ULKS46139 = 1.0 +ULKS46142 = 1.0 +ULKS46152 = 100.0 +ULKS46155 = 100.0 +ULKS46189 = 1.0 +ULKS46190 = 1.0 +ULKS46236 = 1.0 +ULKS46240 = 1.0 +ULUS10004 = 0.1 +ULUS10006 = 1000.0 +ULUS10014 = 0.005 +ULUS10017 = 10.0 +ULUS10020 = 83 +ULUS10025 = 1.0 +ULUS10027 = 1.0 +ULUS10032 = 1.0 +ULUS10034 = 1.0 +ULUS10037 = 10.0 +ULUS10041 = 1.0 +ULUS10044 = 1.0 +ULUS10050 = 10.0 +ULUS10053 = 1.0 +ULUS10057 = 1.0 +ULUS10062 = 1.0 +ULUS10063 = 1.0 +ULUS10073 = 1.0 +ULUS10077 = 930.0 +ULUS10083 = 1.0 +ULUS10091 = 10.0 +ULUS10094 = 1.0 +ULUS10105 = 7.8 +ULUS10108 = 1.0 +ULUS10110 = 256.0 +ULUS10128 = 1.0 +ULUS10134 = 1.0 +ULUS10139 = 1000.0 +ULUS10146 = 0.1 +ULUS10150 = 0.01 +ULUS10155 = 47.0 +ULUS10156 = 1.0 +ULUS10158 = 1.0 +ULUS10160 = 1.0 +ULUS10175 = 1.0 +ULUS10176 = 1.0 +ULUS10184 = 1.0 +ULUS10185 = 1.0 +ULUS10186 = 1.0 +ULUS10202 = 970.0 +ULUS10207 = 50.0 +ULUS10218 = 1.05 +ULUS10223 = 10.0 +ULUS10227 = 1.0 +ULUS10238 = 1.0 +ULUS10241 = 0.95 +ULUS10245 = 1.0 +ULUS10247 = 10.0 +ULUS10248 = 0.5 +ULUS10251 = 6.8 +ULUS10263 = 1.0 +ULUS10266 = 100.0 +ULUS10273 = 1.0 +ULUS10277 = 100.0 +ULUS10285 = 1.0 +ULUS10295 = 1.0 +ULUS10297 = 1.0 +ULUS10311 = 1.0 +ULUS10316 = 1.0 +ULUS10319 = 10.0 +ULUS10325 = 1.0 +ULUS10335 = 1.0 +ULUS10336 = 100.0 +ULUS10345 = 100.0 +ULUS10363 = 1.0 +ULUS10365 = 47.0 +ULUS10380 = 1.0 +ULUS10391 = 100.0 +ULUS10400 = 1.0 +ULUS10403 = 1.0 +ULUS10405 = 1.0 +ULUS10419 = 10.0 +ULUS10431 = 1.0 +ULUS10437 = 1.0 +ULUS10439 = 1.0 +ULUS10450 = 1.0 +ULUS10451 = 1.0 +ULUS10455 = 1.0 +ULUS10457 = 1.0 +ULUS10463 = 3.28 +ULUS10466 = 1000.0 +ULUS10472 = 128.0 +ULUS10486 = 3.28 +ULUS10487 = 47.0 +ULUS10490 = 1.0 +ULUS10497 = 1.000999 +ULUS10505 = 1.0 +ULUS10509 = 1000.0 +ULUS10512 = 1.0 +ULUS10515 = 9.0 +ULUS10519 = 1.0 +ULUS10521 = 0.8 +ULUS10538 = 1.0 +ULUS10560 = 1.0 +ULUS10563 = 100 +ULUS10566 = 1.0 +ULUS10567 = 100.0 +ULUS10579 = 1.0 +ULUS10592 = 1.0 +ULUS90003 = 100.0 +