diff --git a/.gitignore b/.gitignore index 5fa4a04a62..4589c9455a 100755 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ *.rej *.swp *.tar.bz2 +*.code-workspace *~ # Specific paths and/or names @@ -108,3 +109,4 @@ my_autobuild.xml compile_commands.json # ignore tracy for now indra/tracy +firestorm.code-workspace diff --git a/BuildParams b/BuildParams old mode 100755 new mode 100644 diff --git a/autobuild.xml b/autobuild.xml index ff46f38a09..79ca1cb0f8 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -994,11 +994,11 @@ archive hash - c96fbccf3db01230832d8795318ee627 + ab6f79c425524500d638807a3aee0115 hash_algorithm md5 url - file:///opt/firestorm/fmodstudio-2.01.09-darwin-211252249.tar.bz2 + file:///opt/firestorm/fmodstudio-2.02.01-darwin-211941804.tar.bz2 name darwin @@ -1008,11 +1008,11 @@ archive hash - 65d60415962cf65918c4fabe379ad43a + 729a2844a0de06d454f8de47d3a9cb10 hash_algorithm md5 url - file:///opt/firestorm/fmodstudio-2.01.09-linux64-211101316.tar.bz2 + file:///opt/firestorm/fmodstudio-2.02.01-linux64-211941750.tar.bz2 name linux64 @@ -1022,11 +1022,11 @@ archive hash - 215de14980a03774795de8cde24f1ad5 + d8139acbaf2961a466244f39989f2b5b hash_algorithm md5 url - file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.09-windows-211090925.tar.bz2 + file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.01-windows-211941202.tar.bz2 name windows @@ -1036,18 +1036,18 @@ archive hash - a55f9ae859a5a60285f0c6c764729194 + 4704da8c560610e7c5329cdc05c2fec3 hash_algorithm md5 url - file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.09-windows64-211090927.tar.bz2 + file:///c:/cygwin/opt/firestorm/fmodstudio-2.02.01-windows64-211941203.tar.bz2 name windows64 version - 2.01.09 + 2.02.01 fontconfig @@ -2405,18 +2405,18 @@ archive hash - 40a87f5d505a141b2ec79513a6197c35 + 0a6349b11c8e9d34f0c80b8081736e75 hash_algorithm md5 url - https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/76516/728250/llca-202102021657.555615-common-555615.tar.bz2 + https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/79438/751815/llca-202104010215.557744-common-557744.tar.bz2 name common version - 202102021657.555615 + 202104010215.557744 llphysicsextensions_source diff --git a/build.sh b/build.sh index b790f655a9..8d49e5a137 100755 --- a/build.sh +++ b/build.sh @@ -129,11 +129,6 @@ pre_build() then # show that we're doing this, just not the contents echo source "$bugsplat_sh" source "$bugsplat_sh" - # important: we test this and use its value in [grand-]child processes - if [ -n "${BUGSPLAT_DB:-}" ] - then echo export BUGSPLAT_DB - export BUGSPLAT_DB - fi fi set -x @@ -426,6 +421,15 @@ then fi fi +# Some of the uploads takes a long time to finish in the codeticket backend, +# causing the next codeticket upload attempt to fail. +# Inserting this after each potentially large upload may prevent those errors. +# JJ is making changes to Codeticket that we hope will eliminate this failure, then this can be removed +wait_for_codeticket() +{ + sleep $(( 60 * 6 )) +} + # check status and upload results to S3 if $succeeded then @@ -442,6 +446,7 @@ then # Upload base package. python_cmd "$helpers/codeticket.py" addoutput Installer "$package" \ || fatal "Upload of installer failed" + wait_for_codeticket # Upload additional packages. for package_id in $additional_packages @@ -451,6 +456,7 @@ then then python_cmd "$helpers/codeticket.py" addoutput "Installer $package_id" "$package" \ || fatal "Upload of installer $package_id failed" + wait_for_codeticket else record_failure "Failed to find additional package for '$package_id'." fi @@ -464,6 +470,7 @@ then # Upload crash reporter file python_cmd "$helpers/codeticket.py" addoutput "Symbolfile" "$VIEWER_SYMBOL_FILE" \ || fatal "Upload of symbolfile failed" + wait_for_codeticket fi # Upload the llphysicsextensions_tpv package, if one was produced @@ -471,6 +478,9 @@ then if [ -r "$build_dir/llphysicsextensions_package" ] then llphysicsextensions_package=$(cat $build_dir/llphysicsextensions_package) + # This next upload is a frequent failure; see if giving the last one some time helps + # JJ is making changes to Codeticket that we hope will eliminate this failure soon + sleep 300 python_cmd "$helpers/codeticket.py" addoutput "Physics Extensions Package" "$llphysicsextensions_package" --private \ || fatal "Upload of physics extensions package failed" fi @@ -483,6 +493,7 @@ then begin_section "Upload Extension $extension" . $extension [ $? -eq 0 ] || fatal "Upload of extension $extension failed" + wait_for_codeticket end_section "Upload Extension $extension" done fi @@ -492,7 +503,6 @@ then record_event "skipping upload of installer" fi - else record_event "skipping upload of installer due to failed build" fi diff --git a/doc/contributions.txt b/doc/contributions.txt index b86f7fb7b9..883534394c 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -229,6 +229,7 @@ Ansariel Hiller SL-13364 SL-13858 SL-13697 + SL-13395 SL-3136 Aralara Rajal Arare Chantilly @@ -268,9 +269,10 @@ Benjamin Bigdipper Beq Janus BUG-227094 SL-10288 + SL-11300 SL-13583 SL-14766 - SL-11300 + SL-14927 Beth Walcher Bezilon Kasei Biancaluce Robbiani diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt index bab6ad5770..c1a312e818 100644 --- a/indra/CMakeLists.txt +++ b/indra/CMakeLists.txt @@ -13,6 +13,7 @@ project(${ROOT_PROJECT_NAME}) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") include(Variables) +include(bugsplat) include(BuildVersion) set(LEGACY_STDIO_LIBS) @@ -108,7 +109,10 @@ endif (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts) add_custom_target(viewer) +if (NOT USE_BUGSPLAT) add_subdirectory(${LIBS_OPEN_PREFIX}llcrashlogger) +endif (NOT USE_BUGSPLAT) + add_subdirectory(${LIBS_OPEN_PREFIX}llplugin) add_subdirectory(${LIBS_OPEN_PREFIX}llui) add_subdirectory(${LIBS_OPEN_PREFIX}viewer_components) @@ -124,31 +128,18 @@ add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins) endif (ENABLE_MEDIA_PLUGINS) if (LINUX) - add_subdirectory(${VIEWER_PREFIX}linux_crash_logger) if (INSTALL_PROPRIETARY) include(LLAppearanceUtility) add_subdirectory(${LLAPPEARANCEUTILITY_SRC_DIR} ${LLAPPEARANCEUTILITY_BIN_DIR}) endif (INSTALL_PROPRIETARY) - # Huh? Where'd that target come from? - #add_dependencies(viewer linux-crash-logger-strip-target) - add_dependencies(viewer linux-crash-logger) -elseif (DARWIN) - add_subdirectory(${VIEWER_PREFIX}mac_crash_logger) - add_dependencies(viewer mac-crash-logger) -elseif (WINDOWS) - add_subdirectory(${VIEWER_PREFIX}win_crash_logger) - # 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) - # add_dependencies(viewer windows-setup windows-crash-logger) - add_dependencies(viewer windows-crash-logger) endif (LINUX) -add_subdirectory(${VIEWER_PREFIX}newview) -add_dependencies(viewer firestorm-bin) - -add_subdirectory(${VIEWER_PREFIX}doxygen EXCLUDE_FROM_ALL) +if (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 (WINDOWS) # sets the 'startup project' for debugging from visual studio. set_property( @@ -156,6 +147,33 @@ set_property( PROPERTY VS_STARTUP_PROJECT firestorm-bin ) +if (USE_BUGSPLAT) + if (BUGSPLAT_DB) + message(STATUS "Building with BugSplat; database '${BUGSPLAT_DB}'") + else (BUGSPLAT_DB) + message(WARNING "Building with BugSplat, but no database name set (BUGSPLAT_DB)") + endif (BUGSPLAT_DB) +else (USE_BUGSPLAT) + message(STATUS "Not building with BugSplat") + if (LINUX) + add_subdirectory(${VIEWER_PREFIX}linux_crash_logger) + # Huh? Where'd that target come from? + #add_dependencies(viewer linux-crash-logger-strip-target) + elseif (DARWIN) + add_subdirectory(${VIEWER_PREFIX}mac_crash_logger) + add_dependencies(viewer mac-crash-logger) + elseif (WINDOWS) + add_subdirectory(${VIEWER_PREFIX}win_crash_logger) + # add_dependencies(viewer windows-setup windows-crash-logger) + add_dependencies(viewer windows-crash-logger) + endif (LINUX) +endif (USE_BUGSPLAT) + +add_subdirectory(${VIEWER_PREFIX}newview) +add_dependencies(viewer firestorm-bin) + +add_subdirectory(${VIEWER_PREFIX}doxygen EXCLUDE_FROM_ALL) + if (LL_TESTS) # Define after the custom targets are created so # individual apps can add themselves as dependencies diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index e587c493ad..386c503734 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -72,7 +72,7 @@ if(WINDOWS) # Filenames are different for 32/64 bit BugSplat file and we don't # have any control over them so need to branch. - if (BUGSPLAT_DB) + if (USE_BUGSPLAT) if(ADDRESS_SIZE EQUAL 32) set(release_files ${release_files} BugSplat.dll) set(release_files ${release_files} BugSplatRc.dll) @@ -82,7 +82,7 @@ if(WINDOWS) set(release_files ${release_files} BugSplatRc64.dll) set(release_files ${release_files} BsSndRpt64.exe) endif(ADDRESS_SIZE EQUAL 32) - endif (BUGSPLAT_DB) + endif (USE_BUGSPLAT) set(release_files ${release_files} growl++.dll growl.dll ) if (FMODSTUDIO) diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake index 5ee465e08a..71e38bfd87 100644 --- a/indra/cmake/LLAddBuildTest.cmake +++ b/indra/cmake/LLAddBuildTest.cmake @@ -6,6 +6,7 @@ include(LLTestCommand) #include(GoogleMock) # +include(bugsplat) include(Tut) #***************************************************************************** @@ -92,6 +93,12 @@ MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources) IF(LL_TEST_VERBOSE) MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_SOURCE_FILES ${${name}_test_SOURCE_FILES}") ENDIF(LL_TEST_VERBOSE) + + if (USE_BUGSPLAT) + SET_PROPERTY(SOURCE ${${name}_test_SOURCE_FILES} + APPEND PROPERTY COMPILE_DEFINITIONS "${BUGSPLAT_DEFINE}") + endif (USE_BUGSPLAT) + # Headers GET_OPT_SOURCE_FILE_PROPERTY(${name}_test_additional_HEADER_FILES ${source} LL_TEST_ADDITIONAL_HEADER_FILES) SET(${name}_test_HEADER_FILES ${name}.h ${${name}_test_additional_HEADER_FILES}) @@ -229,6 +236,11 @@ FUNCTION(LL_ADD_INTEGRATION_TEST SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES COMPILE_FLAGS -I"${TUT_INCLUDE_DIR}") endif(USESYSTEMLIBS) + if (USE_BUGSPLAT) + SET_PROPERTY(SOURCE ${source_files} + APPEND PROPERTY COMPILE_DEFINITIONS "${BUGSPLAT_DEFINE}") + endif (USE_BUGSPLAT) + # The following was copied to llcorehttp/CMakeLists.txt's texture_load target. # Any changes made here should be replicated there. if (WINDOWS) diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake index 9fee605021..abab96ce24 100644 --- a/indra/cmake/Variables.cmake +++ b/indra/cmake/Variables.cmake @@ -34,7 +34,6 @@ set(LL_TESTS OFF CACHE BOOL "Build and run unit and integration tests (disable f set(INCREMENTAL_LINK OFF CACHE BOOL "Use incremental linking on win32 builds (enable for faster links on some machines)") set(ENABLE_MEDIA_PLUGINS ON CACHE BOOL "Turn off building media plugins if they are imported by third-party library mechanism") set(VIEWER_SYMBOL_FILE "" CACHE STRING "Name of tarball into which to place symbol files") -set(BUGSPLAT_DB "" CACHE STRING "BugSplat database name, if BugSplat crash reporting is desired") if(LIBS_CLOSED_DIR) file(TO_CMAKE_PATH "${LIBS_CLOSED_DIR}" LIBS_CLOSED_DIR) diff --git a/indra/cmake/bugsplat.cmake b/indra/cmake/bugsplat.cmake index 0c84bac88a..f709f35403 100644 --- a/indra/cmake/bugsplat.cmake +++ b/indra/cmake/bugsplat.cmake @@ -1,27 +1,38 @@ -# BugSplat is engaged by setting BUGSPLAT_DB to the target BugSplat database -# name. -if (BUGSPLAT_DB) - if (USESYSTEMLIBS) - message(STATUS "Looking for system BugSplat") - set(BUGSPLAT_FIND_QUIETLY ON) - set(BUGSPLAT_FIND_REQUIRED ON) - include(FindBUGSPLAT) - else (USESYSTEMLIBS) - message(STATUS "Engaging autobuild BugSplat") - include(Prebuilt) - use_prebuilt_binary(bugsplat) - if (WINDOWS) - set(BUGSPLAT_LIBRARIES - ${ARCH_PREBUILT_DIRS_RELEASE}/bugsplat.lib - ) - elseif (DARWIN) - find_library(BUGSPLAT_LIBRARIES BugsplatMac - PATHS "${ARCH_PREBUILT_DIRS_RELEASE}") - message(FATAL_ERROR "Bugsplat for OSX not fully implemented, please adapt llappdelegate-objc.mm to honor options of sending user name and settings.xml.") - else (WINDOWS) - message(FATAL_ERROR "Bugsplat for Linux not implemented.") +if (INSTALL_PROPRIETARY) + # Note that viewer_manifest.py makes decision based on BUGSPLAT_DB and not USE_BUGSPLAT + if (BUGSPLAT_DB) + set(USE_BUGSPLAT ON CACHE BOOL "Use the BugSplat crash reporting system") + else (BUGSPLAT_DB) + set(USE_BUGSPLAT OFF CACHE BOOL "Use the BugSplat crash reporting system") + endif (BUGSPLAT_DB) +else (INSTALL_PROPRIETARY) + set(USE_BUGSPLAT OFF CACHE BOOL "Use the BugSplat crash reporting system") +endif (INSTALL_PROPRIETARY) + +if (USE_BUGSPLAT) + if (NOT USESYSTEMLIBS) + include(Prebuilt) + use_prebuilt_binary(bugsplat) + if (WINDOWS) + set(BUGSPLAT_LIBRARIES + ${ARCH_PREBUILT_DIRS_RELEASE}/bugsplat.lib + ) + elseif (DARWIN) + find_library(BUGSPLAT_LIBRARIES BugsplatMac REQUIRED + NO_DEFAULT_PATH PATHS "${ARCH_PREBUILT_DIRS_RELEASE}") + message("Bugsplat for OSX not fully implemented, please adapt llappdelegate-objc.mm to honor options of sending user name and settings.xml.") + else (WINDOWS) + message(FATAL_ERROR "BugSplat is not supported; add -DUSE_BUGSPLAT=OFF") + endif (WINDOWS) + else (NOT USESYSTEMLIBS) + set(BUGSPLAT_FIND_QUIETLY ON) + set(BUGSPLAT_FIND_REQUIRED ON) + include(FindBUGSPLAT) + endif (NOT USESYSTEMLIBS) + + set(BUGSPLAT_DB "" CACHE STRING "BugSplat crash database name") - endif (WINDOWS) set(BUGSPLAT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/bugsplat) - endif (USESYSTEMLIBS) -endif (BUGSPLAT_DB) + set(BUGSPLAT_DEFINE "LL_BUGSPLAT") +endif (USE_BUGSPLAT) + diff --git a/indra/linux_crash_logger/README.txt b/indra/linux_crash_logger/README.txt new file mode 100644 index 0000000000..6932a8d9c3 --- /dev/null +++ b/indra/linux_crash_logger/README.txt @@ -0,0 +1,3 @@ +This component is no longer used in Linden Lab builds. +Change requests to support continued use by open source +builds are welcome. diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index a5bab99771..9664617fa4 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -4,6 +4,7 @@ project(llcommon) include(00-Common) include(LLCommon) +include(bugsplat) include(Linking) include(Boost) include(LLSharedLibs) @@ -291,10 +292,10 @@ list(APPEND llcommon_HEADER_FILES "tea.h" ) set_source_files_properties(${llcommon_HEADER_FILES} PROPERTIES HEADER_FILE_ONLY TRUE) -if (BUGSPLAT_DB) - set_source_files_properties(llapp.cpp - PROPERTIES COMPILE_DEFINITIONS "LL_BUGSPLAT") -endif (BUGSPLAT_DB) +if (USE_BUGSPLAT) + set_source_files_properties(${llcommon_SOURCE_FILES} + PROPERTIES COMPILE_DEFINITIONS "${BUGSPLAT_DEFINE}") +endif (USE_BUGSPLAT) list(APPEND llcommon_SOURCE_FILES ${llcommon_HEADER_FILES}) diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp index f2c55c321f..1999b4916f 100644 --- a/indra/llcommon/llapp.cpp +++ b/indra/llcommon/llapp.cpp @@ -531,7 +531,12 @@ void LLApp::setupErrorHandling(bool second_instance) #endif // LL_LINUX #endif // ! LL_WINDOWS + +#ifdef LL_BUGSPLAT + // do not start our own error thread +#else // ! LL_BUGSPLAT startErrorThread(); +#endif } void LLApp::startErrorThread() @@ -811,7 +816,9 @@ void setup_signals() act.sa_flags = SA_SIGINFO; // Synchronous signals +# ifndef LL_BUGSPLAT sigaction(SIGABRT, &act, NULL); +# endif sigaction(SIGALRM, &act, NULL); sigaction(SIGBUS, &act, NULL); sigaction(SIGFPE, &act, NULL); @@ -848,7 +855,9 @@ void clear_signals() act.sa_flags = SA_SIGINFO; // Synchronous signals +# ifndef LL_BUGSPLAT sigaction(SIGABRT, &act, NULL); +# endif sigaction(SIGALRM, &act, NULL); sigaction(SIGBUS, &act, NULL); sigaction(SIGFPE, &act, NULL); @@ -901,6 +910,7 @@ void default_unix_signal_handler(int signum, siginfo_t *info, void *) return; case SIGABRT: + // Note that this handler is not set for SIGABRT when using Bugsplat // Abort just results in termination of the app, no funky error handling. if (LLApp::sLogInSignal) { diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h index 245c73e3a2..5fa91b8bf5 100644 --- a/indra/llcommon/llapp.h +++ b/indra/llcommon/llapp.h @@ -259,6 +259,10 @@ public: */ LLRunner& getRunner() { return mRunner; } +#ifdef LL_WINDOWS + virtual void reportCrashToBugsplat(void* pExcepInfo /*EXCEPTION_POINTERS*/) { } +#endif + public: typedef std::map string_map; string_map mOptionMap; // Contains all command-line options and arguments in a map diff --git a/indra/llcommon/llcoros.cpp b/indra/llcommon/llcoros.cpp index 655763dce9..3a7ab0901e 100644 --- a/indra/llcommon/llcoros.cpp +++ b/indra/llcommon/llcoros.cpp @@ -56,6 +56,10 @@ #include "stringize.h" #include "llexception.h" +#if LL_WINDOWS +#include +#endif + // static LLCoros::CoroData& LLCoros::get_CoroData(const std::string& caller) { @@ -248,29 +252,58 @@ std::string LLCoros::launch(const std::string& prefix, const callable_t& callabl #if LL_WINDOWS -void LLCoros::winlevel(const callable_t& callable) +static const U32 STATUS_MSC_EXCEPTION = 0xE06D7363; // compiler specific + +U32 cpp_exception_filter(U32 code, struct _EXCEPTION_POINTERS *exception_infop, const std::string& name) +{ + // C++ exceptions were logged in toplevelTryWrapper, but not SEH + // log SEH exceptions here, to make sure it gets into bugsplat's + // report and because __try won't allow std::string operations + if (code != STATUS_MSC_EXCEPTION) + { + LL_WARNS() << "SEH crash in " << name << ", code: " << code << LL_ENDL; + } + // Handle bugsplat here, since GetExceptionInformation() can only be + // called from within filter for __except(filter), not from __except's {} + // Bugsplat should get all exceptions, C++ and SEH + LLApp::instance()->reportCrashToBugsplat(exception_infop); + + // Only convert non C++ exceptions. + if (code == STATUS_MSC_EXCEPTION) + { + // C++ exception, go on + return EXCEPTION_CONTINUE_SEARCH; + } + else + { + // handle it + return EXCEPTION_EXECUTE_HANDLER; + } +} + +void LLCoros::winlevel(const std::string& name, const callable_t& callable) { __try { - callable(); + toplevelTryWrapper(name, callable); } - __except (msc_exception_filter(GetExceptionCode(), GetExceptionInformation())) + __except (cpp_exception_filter(GetExceptionCode(), GetExceptionInformation(), name)) { - // convert to C++ styled exception + // convert to C++ styled exception for handlers other than bugsplat // Note: it might be better to use _se_set_translator // if you want exception to inherit full callstack - char integer_string[32]; - sprintf(integer_string, "SEH, code: %lu\n", GetExceptionCode()); + // + // in case of bugsplat this will get to exceptionTerminateHandler and + // looks like fiber will terminate application after that + char integer_string[512]; + sprintf(integer_string, "SEH crash in %s, code: %lu\n", name.c_str(), GetExceptionCode()); throw std::exception(integer_string); } } #endif -// Top-level wrapper around caller's coroutine callable. -// Normally we like to pass strings and such by const reference -- but in this -// case, we WANT to copy both the name and the callable to our local stack! -void LLCoros::toplevel(std::string name, callable_t callable) +void LLCoros::toplevelTryWrapper(const std::string& name, const callable_t& callable) { // keep the CoroData on this top-level function's stack frame CoroData corodata(name); @@ -280,18 +313,12 @@ void LLCoros::toplevel(std::string name, callable_t callable) // run the code the caller actually wants in the coroutine try { -// Disable for more meaningful callstacks -//#if LL_WINDOWS && LL_RELEASE_FOR_DOWNLOAD -// winlevel(callable); -//#else callable(); -//#endif -// Disable for more meaningful callstacks } catch (const Stop& exc) { LL_INFOS("LLCoros") << "coroutine " << name << " terminating because " - << exc.what() << LL_ENDL; + << exc.what() << LL_ENDL; } catch (const LLContinueError&) { @@ -304,10 +331,25 @@ void LLCoros::toplevel(std::string name, callable_t callable) { // Any OTHER kind of uncaught exception will cause the viewer to // crash, hopefully informatively. - CRASH_ON_UNHANDLED_EXCEPTION(STRINGIZE("coroutine " << name)); + LOG_UNHANDLED_EXCEPTION(STRINGIZE("coroutine " << name)); + // to not modify callstack + throw; } } +// Top-level wrapper around caller's coroutine callable. +// Normally we like to pass strings and such by const reference -- but in this +// case, we WANT to copy both the name and the callable to our local stack! +void LLCoros::toplevel(std::string name, callable_t callable) +{ +#if LL_WINDOWS + // Can not use __try in functions that require unwinding, so use one more wrapper + winlevel(name, callable); +#else + toplevelTryWrapper(name, callable); +#endif +} + //static void LLCoros::checkStop() { diff --git a/indra/llcommon/llcoros.h b/indra/llcommon/llcoros.h index 38c2356c99..6c0bec3ef9 100644 --- a/indra/llcommon/llcoros.h +++ b/indra/llcommon/llcoros.h @@ -290,11 +290,12 @@ public: private: std::string generateDistinctName(const std::string& prefix) const; +#if LL_WINDOWS + void winlevel(const std::string& name, const callable_t& callable); +#endif + void toplevelTryWrapper(const std::string& name, const callable_t& callable); void toplevel(std::string name, callable_t callable); struct CoroData; -#if LL_WINDOWS - static void winlevel(const callable_t& callable); -#endif static CoroData& get_CoroData(const std::string& caller); S32 mStackSize; diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index 9c1b650107..2741209706 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -488,8 +488,6 @@ namespace protected: Globals(); public: - std::ostringstream messageStream; - bool messageStreamInUse; std::string mFatalMessage; void addCallSite(LLError::CallSite&); @@ -499,12 +497,7 @@ namespace CallSiteVector callSites; }; - Globals::Globals() - : messageStream(), - messageStreamInUse(false), - callSites() - { - } + Globals::Globals() {} Globals* Globals::getInstance() { @@ -595,7 +588,7 @@ namespace LLError mFileLevelMap(), mTagLevelMap(), mUniqueLogMessages(), - mCrashFunction(NULL), + mCrashFunction([](const std::string&){}), mTimeFunction(NULL), mRecorders(), mShouldLogCallCounter(0) @@ -780,7 +773,6 @@ namespace LLError::setDefaultLevel(LLError::LEVEL_INFO); LLError::setAlwaysFlush(true); LLError::setEnabledLogTypesMask(0xFFFFFFFF); - LLError::setFatalFunction(LLError::crashAndLoop); LLError::setTimeFunction(LLError::utcTime); // log_to_stderr is only false in the unit and integration tests to keep builds quieter @@ -1419,57 +1411,7 @@ namespace LLError } - std::ostringstream* Log::out() - { - LLMutexTrylock lock(getMutex(),5); - - if (lock.isLocked()) - { - Globals* g = Globals::getInstance(); - - if (!g->messageStreamInUse) - { - g->messageStreamInUse = true; - return &g->messageStream; - } - } - - return new std::ostringstream; - } - - void Log::flush(std::ostringstream* out, char* message) - { - LLMutexTrylock lock(getMutex(),5); - if (!lock.isLocked()) - { - return; - } - - if(strlen(out->str().c_str()) < 128) - { - strcpy(message, out->str().c_str()); - } - else - { - strncpy(message, out->str().c_str(), 127); - message[127] = '\0' ; - } - - Globals* g = Globals::getInstance(); - if (out == &g->messageStream) - { - g->messageStream.clear(); - g->messageStream.str(""); - g->messageStreamInUse = false; - } - else - { - delete out; - } - return ; - } - - void Log::flush(std::ostringstream* out, const CallSite& site) + void Log::flush(const std::ostringstream& out, const CallSite& site) { LLMutexTrylock lock(getMutex(),5); if (!lock.isLocked()) @@ -1480,21 +1422,11 @@ namespace LLError Globals* g = Globals::getInstance(); SettingsConfigPtr s = Settings::getInstance()->getSettingsConfig(); - std::string message = out->str(); - if (out == &g->messageStream) - { - g->messageStream.clear(); - g->messageStream.str(""); - g->messageStreamInUse = false; - } - else - { - delete out; - } + std::string message = out.str(); if (site.mPrintOnce) { - std::ostringstream message_stream; + std::ostringstream message_stream; std::map::iterator messageIter = s->mUniqueLogMessages.find(message); if (messageIter != s->mUniqueLogMessages.end()) @@ -1515,8 +1447,8 @@ namespace LLError message_stream << "ONCE: "; s->mUniqueLogMessages[message] = 1; } - message_stream << message; - message = message_stream.str(); + message_stream << message; + message = message_stream.str(); } writeToRecorders(site, message); @@ -1524,10 +1456,7 @@ namespace LLError if (site.mLevel == LEVEL_ERROR) { g->mFatalMessage = message; - if (s->mCrashFunction) - { - s->mCrashFunction(message); - } + s->mCrashFunction(message); } } } @@ -1591,29 +1520,6 @@ namespace LLError return s->mShouldLogCallCounter; } -#if LL_WINDOWS - // VC80 was optimizing the error away. - #pragma optimize("", off) -#endif - void crashAndLoop(const std::string& message) - { - // Now, we go kaboom! - int* make_me_crash = NULL; - - *make_me_crash = 0; - - while(true) - { - // Loop forever, in case the crash didn't work? - } - - // this is an attempt to let Coverity and other semantic scanners know that this function won't be returning ever. - exit(EXIT_FAILURE); - } -#if LL_WINDOWS - #pragma optimize("", on) -#endif - std::string utcTime() { time_t now = time(NULL); @@ -1630,33 +1536,7 @@ namespace LLError namespace LLError { - char** LLCallStacks::sBuffer = NULL ; - S32 LLCallStacks::sIndex = 0 ; - - //static - void LLCallStacks::allocateStackBuffer() - { - if(sBuffer == NULL) - { - sBuffer = new char*[512] ; - sBuffer[0] = new char[512 * 128] ; - for(S32 i = 1 ; i < 512 ; i++) - { - sBuffer[i] = sBuffer[i-1] + 128 ; - } - sIndex = 0 ; - } - } - - void LLCallStacks::freeStackBuffer() - { - if(sBuffer != NULL) - { - delete [] sBuffer[0] ; - delete [] sBuffer ; - sBuffer = NULL ; - } - } + LLCallStacks::StringVector LLCallStacks::sBuffer ; //static void LLCallStacks::push(const char* function, const int line) @@ -1667,33 +1547,24 @@ namespace LLError return; } - if(sBuffer == NULL) - { - allocateStackBuffer(); - } - - if(sIndex > 511) + if(sBuffer.size() > 511) { clear() ; } - strcpy(sBuffer[sIndex], function) ; - sprintf(sBuffer[sIndex] + strlen(function), " line: %d ", line) ; - sIndex++ ; - - return ; + std::ostringstream out; + insert(out, function, line); + sBuffer.push_back(out.str()); } //static - std::ostringstream* LLCallStacks::insert(const char* function, const int line) + void LLCallStacks::insert(std::ostream& out, const char* function, const int line) { - std::ostringstream* _out = LLError::Log::out(); - *_out << function << " line " << line << " " ; - return _out ; + out << function << " line " << line << " " ; } //static - void LLCallStacks::end(std::ostringstream* _out) + void LLCallStacks::end(const std::ostringstream& out) { LLMutexTrylock lock(getMutex(), 5); if (!lock.isLocked()) @@ -1701,17 +1572,12 @@ namespace LLError return; } - if(sBuffer == NULL) - { - allocateStackBuffer(); - } - - if(sIndex > 511) + if(sBuffer.size() > 511) { clear() ; } - LLError::Log::flush(_out, sBuffer[sIndex++]) ; + sBuffer.push_back(out.str()); } //static @@ -1723,33 +1589,30 @@ namespace LLError return; } - if(sIndex > 0) + if(! sBuffer.empty()) { LL_INFOS() << " ************* PRINT OUT LL CALL STACKS ************* " << LL_ENDL; - while(sIndex > 0) + for (StringVector::const_reverse_iterator ri(sBuffer.rbegin()), re(sBuffer.rend()); + ri != re; ++ri) { - sIndex-- ; - LL_INFOS() << sBuffer[sIndex] << LL_ENDL; + LL_INFOS() << (*ri) << LL_ENDL; } LL_INFOS() << " *************** END OF LL CALL STACKS *************** " << LL_ENDL; } - if(sBuffer != NULL) - { - freeStackBuffer(); - } + cleanup(); } //static void LLCallStacks::clear() { - sIndex = 0 ; + sBuffer.clear(); } //static void LLCallStacks::cleanup() { - freeStackBuffer(); + clear(); } std::ostream& operator<<(std::ostream& out, const LLStacktrace&) diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h index 2ab4a2df07..3a58c029b0 100644 --- a/indra/llcommon/llerror.h +++ b/indra/llcommon/llerror.h @@ -29,7 +29,9 @@ #define LL_LLERROR_H #include +#include #include +#include #include "stdtypes.h" @@ -204,9 +206,7 @@ namespace LLError { public: static bool shouldLog(CallSite&); - static std::ostringstream* out(); - static void flush(std::ostringstream* out, char* message); - static void flush(std::ostringstream*, const CallSite&); + static void flush(const std::ostringstream&, const CallSite&); static std::string demangle(const char* mangled); /// classname() template @@ -287,18 +287,15 @@ namespace LLError class LL_COMMON_API LLCallStacks { private: - static char** sBuffer ; - static S32 sIndex ; - - static void allocateStackBuffer(); - static void freeStackBuffer(); + typedef std::vector StringVector; + static StringVector sBuffer ; public: static void push(const char* function, const int line) ; - static std::ostringstream* insert(const char* function, const int line) ; + static void insert(std::ostream& out, const char* function, const int line) ; static void print() ; static void clear() ; - static void end(std::ostringstream* _out) ; + static void end(const std::ostringstream& out) ; static void cleanup(); }; @@ -312,10 +309,11 @@ namespace LLError //this is cheaper than llcallstacks if no need to output other variables to call stacks. #define LL_PUSH_CALLSTACKS() LLError::LLCallStacks::push(__FUNCTION__, __LINE__) -#define llcallstacks \ - { \ - std::ostringstream* _out = LLError::LLCallStacks::insert(__FUNCTION__, __LINE__) ; \ - (*_out) +#define llcallstacks \ + { \ + std::ostringstream _out; \ + LLError::LLCallStacks::insert(_out, __FUNCTION__, __LINE__) ; \ + _out #define llcallstacksendl \ LLError::End(); \ @@ -361,11 +359,11 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG; static LLError::CallSite _site(lllog_site_args_(level, once, tags)); \ lllog_test_() -#define lllog_test_() \ - if (LL_UNLIKELY(_site.shouldLog())) \ - { \ - std::ostringstream* _out = LLError::Log::out(); \ - (*_out) +#define lllog_test_() \ + if (LL_UNLIKELY(_site.shouldLog())) \ + { \ + std::ostringstream _out; \ + _out #define lllog_site_args_(level, once, tags) \ level, __FILE__, __LINE__, typeid(_LL_CLASS_TO_LOG), \ @@ -384,15 +382,27 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG; // LL_CONT << " for " << t << " seconds" << LL_ENDL; // //Such computation is done iff the message will be logged. -#define LL_CONT (*_out) +#define LL_CONT _out #define LL_NEWLINE '\n' -#define LL_ENDL \ - LLError::End(); \ - LLError::Log::flush(_out, _site); \ - } \ - } while(0) +// Use this only in LL_ERRS or in a place that LL_ERRS may not be used +#define LLERROR_CRASH \ +{ \ + int* make_me_crash = NULL;\ + *make_me_crash = 0; \ + exit(*make_me_crash); \ +} + +#define LL_ENDL \ + LLError::End(); \ + LLError::Log::flush(_out, _site); \ + if (_site.mLevel == LLError::LEVEL_ERROR) \ + { \ + LLERROR_CRASH \ + } \ + } \ + } while(0) // NEW Macros for debugging, allow the passing of a string tag diff --git a/indra/llcommon/llerrorcontrol.h b/indra/llcommon/llerrorcontrol.h index 25786d5457..e87bb7bf35 100644 --- a/indra/llcommon/llerrorcontrol.h +++ b/indra/llcommon/llerrorcontrol.h @@ -94,14 +94,16 @@ namespace LLError */ typedef boost::function FatalFunction; - LL_COMMON_API void crashAndLoop(const std::string& message); - // Default fatal function: access null pointer and loops forever LL_COMMON_API void setFatalFunction(const FatalFunction&); - // The fatal function will be called when an message of LEVEL_ERROR + // The fatal function will be called after an message of LEVEL_ERROR // is logged. Note: supressing a LEVEL_ERROR message from being logged // (by, for example, setting a class level to LEVEL_NONE), will keep - // the that message from causing the fatal funciton to be invoked. + // that message from causing the fatal function to be invoked. + // The passed FatalFunction will be the LAST log function called + // before LL_ERRS crashes its caller. A FatalFunction can throw an + // exception, or call exit(), to bypass the crash. It MUST disrupt the + // flow of control because no caller expects LL_ERRS to return. LL_COMMON_API FatalFunction getFatalFunction(); // Retrieve the previously-set FatalFunction @@ -147,14 +149,14 @@ namespace LLError virtual void recordMessage(LLError::ELevel, const std::string& message) = 0; // use the level for better display, not for filtering - virtual bool enabled() { return true; } + virtual bool enabled() { return true; } bool wantsTime(); bool wantsTags(); bool wantsLevel(); bool wantsLocation(); bool wantsFunctionName(); - bool wantsMultiline(); + bool wantsMultiline(); void showTime(bool show); void showTags(bool show); @@ -165,15 +167,35 @@ namespace LLError protected: bool mWantsTime; - bool mWantsTags; - bool mWantsLevel; - bool mWantsLocation; - bool mWantsFunctionName; - bool mWantsMultiline; + bool mWantsTags; + bool mWantsLevel; + bool mWantsLocation; + bool mWantsFunctionName; + bool mWantsMultiline; }; typedef boost::shared_ptr RecorderPtr; + /** + * Instantiate GenericRecorder with a callable(level, message) to get + * control on every log message without having to code an explicit + * Recorder subclass. + */ + template + class GenericRecorder: public Recorder + { + public: + GenericRecorder(const CALLABLE& callable): + mCallable(callable) + {} + void recordMessage(LLError::ELevel level, const std::string& message) override + { + mCallable(level, message); + } + private: + CALLABLE mCallable; + }; + /** * @NOTE: addRecorder() and removeRecorder() uses the boost::shared_ptr to allow for shared ownership * while still ensuring that the allocated memory is eventually freed @@ -181,6 +203,19 @@ namespace LLError LL_COMMON_API void addRecorder(RecorderPtr); LL_COMMON_API void removeRecorder(RecorderPtr); // each error message is passed to each recorder via recordMessage() + /** + * Call addGenericRecorder() with a callable(level, message) to get + * control on every log message without having to code an explicit + * Recorder subclass. Save the returned RecorderPtr if you later want to + * call removeRecorder(). + */ + template + RecorderPtr addGenericRecorder(const CALLABLE& callable) + { + RecorderPtr ptr{ new GenericRecorder(callable) }; + addRecorder(ptr); + return ptr; + } LL_COMMON_API void logToFile(const std::string& filename); LL_COMMON_API void logToStderr(); diff --git a/indra/llcommon/llleap.cpp b/indra/llcommon/llleap.cpp index cf8f8cc6a5..e8ea0ab398 100644 --- a/indra/llcommon/llleap.cpp +++ b/indra/llcommon/llleap.cpp @@ -59,7 +59,6 @@ public: // pump name -- so it should NOT need tweaking for uniqueness. mReplyPump(LLUUID::generateNewID().asString()), mExpect(0), - mPrevFatalFunction(LLError::getFatalFunction()), // Instantiate a distinct LLLeapListener for this plugin. (Every // plugin will want its own collection of managed listeners, etc.) // Pass it a callback to our connect() method, so it can send events @@ -146,7 +145,9 @@ public: .listen("LLLeap", boost::bind(&LLLeapImpl::rstderr, this, _1)); // For our lifespan, intercept any LL_ERRS so we can notify plugin - LLError::setFatalFunction(boost::bind(&LLLeapImpl::fatalFunction, this, _1)); + mRecorder = LLError::addGenericRecorder( + [this](LLError::ELevel level, const std::string& message) + { onError(level, message); }); // Send child a preliminary event reporting our own reply-pump name -- // which would otherwise be pretty tricky to guess! @@ -162,8 +163,7 @@ public: virtual ~LLLeapImpl() { LL_DEBUGS("LLLeap") << "destroying LLLeap(\"" << mDesc << "\")" << LL_ENDL; - // Restore original FatalFunction - LLError::setFatalFunction(mPrevFatalFunction); + LLError::removeRecorder(mRecorder); } // Listener for failed launch attempt @@ -377,28 +377,28 @@ public: return false; } - void fatalFunction(const std::string& error) + void onError(LLError::ELevel level, const std::string& error) { - // Notify plugin - LLSD event; - event["type"] = "error"; - event["error"] = error; - mReplyPump.post(event); - - // All the above really accomplished was to buffer the serialized - // event in our WritePipe. Have to pump mainloop a couple times to - // really write it out there... but time out in case we can't write. - LLProcess::WritePipe& childin(mChild->getWritePipe(LLProcess::STDIN)); - LLEventPump& mainloop(LLEventPumps::instance().obtain("mainloop")); - LLSD nop; - F64 until = (LLTimer::getElapsedSeconds() + 2).value(); - while (childin.size() && LLTimer::getElapsedSeconds() < until) + if (level == LLError::LEVEL_ERROR) { - mainloop.post(nop); - } + // Notify plugin + LLSD event; + event["type"] = "error"; + event["error"] = error; + mReplyPump.post(event); - // forward the call to the previous FatalFunction - mPrevFatalFunction(error); + // All the above really accomplished was to buffer the serialized + // event in our WritePipe. Have to pump mainloop a couple times to + // really write it out there... but time out in case we can't write. + LLProcess::WritePipe& childin(mChild->getWritePipe(LLProcess::STDIN)); + LLEventPump& mainloop(LLEventPumps::instance().obtain("mainloop")); + LLSD nop; + F64 until = (LLTimer::getElapsedSeconds() + 2).value(); + while (childin.size() && LLTimer::getElapsedSeconds() < until) + { + mainloop.post(nop); + } + } } private: @@ -421,7 +421,7 @@ private: mStdinConnection, mStdoutConnection, mStdoutDataConnection, mStderrConnection; boost::scoped_ptr mBlocker; LLProcess::ReadPipe::size_type mExpect; - LLError::FatalFunction mPrevFatalFunction; + LLError::RecorderPtr mRecorder; boost::scoped_ptr mListener; }; diff --git a/indra/llcommon/llsingleton.cpp b/indra/llcommon/llsingleton.cpp index ad933154c2..6b1986d0e9 100644 --- a/indra/llcommon/llsingleton.cpp +++ b/indra/llcommon/llsingleton.cpp @@ -38,11 +38,6 @@ #include #include -namespace { -void log(LLError::ELevel level, - const char* p1, const char* p2, const char* p3, const char* p4); -} // anonymous namespace - // Our master list of all LLSingletons is itself an LLSingleton. We used to // store it in a function-local static, but that could get destroyed before // the last of the LLSingletons -- and ~LLSingletonBase() definitely wants to @@ -218,8 +213,8 @@ void LLSingletonBase::pop_initializing() if (list.empty()) { - logerrs("Underflow in stack of currently-initializing LLSingletons at ", - classname(this).c_str(), "::getInstance()"); + logerrs({"Underflow in stack of currently-initializing LLSingletons at ", + classname(this), "::getInstance()"}); } // Now we know list.back() exists: capture it @@ -240,9 +235,9 @@ void LLSingletonBase::pop_initializing() // Now validate the newly-popped LLSingleton. if (back != this) { - logerrs("Push/pop mismatch in stack of currently-initializing LLSingletons: ", - classname(this).c_str(), "::getInstance() trying to pop ", - classname(back).c_str()); + logerrs({"Push/pop mismatch in stack of currently-initializing LLSingletons: ", + classname(this), "::getInstance() trying to pop ", + classname(back)}); } // log AFTER popping so logging singletons don't cry circularity @@ -331,15 +326,15 @@ void LLSingletonBase::capture_dependency() // // Example: LLNotifications singleton initializes default channels. // Channels register themselves with singleton once done. - logdebugs("LLSingleton circularity: ", out.str().c_str(), - classname(this).c_str(), ""); + logdebugs({"LLSingleton circularity: ", out.str(), + classname(this)}); } else { // Actual circularity with other singleton (or single singleton is used extensively). // Dependency can be unclear. - logwarns("LLSingleton circularity: ", out.str().c_str(), - classname(this).c_str(), ""); + logwarns({"LLSingleton circularity: ", out.str(), + classname(this)}); } } else @@ -352,8 +347,8 @@ void LLSingletonBase::capture_dependency() if (current->mDepends.insert(this).second) { // only log the FIRST time we hit this dependency! - logdebugs(classname(current).c_str(), - " depends on ", classname(this).c_str()); + logdebugs({classname(current), + " depends on ", classname(this)}); } } } @@ -401,7 +396,7 @@ LLSingletonBase::vec_t LLSingletonBase::dep_sort() void LLSingletonBase::cleanup_() { - logdebugs("calling ", classname(this).c_str(), "::cleanupSingleton()"); + logdebugs({"calling ", classname(this), "::cleanupSingleton()"}); try { cleanupSingleton(); @@ -427,23 +422,23 @@ void LLSingletonBase::deleteAll() if (! sp->mDeleteSingleton) { // This Should Not Happen... but carry on. - logwarns(name.c_str(), "::mDeleteSingleton not initialized!"); + logwarns({name, "::mDeleteSingleton not initialized!"}); } else { // properly initialized: call it. - logdebugs("calling ", name.c_str(), "::deleteSingleton()"); + logdebugs({"calling ", name, "::deleteSingleton()"}); // From this point on, DO NOT DEREFERENCE sp! sp->mDeleteSingleton(); } } catch (const std::exception& e) { - logwarns("Exception in ", name.c_str(), "::deleteSingleton(): ", e.what()); + logwarns({"Exception in ", name, "::deleteSingleton(): ", e.what()}); } catch (...) { - logwarns("Unknown exception in ", name.c_str(), "::deleteSingleton()"); + logwarns({"Unknown exception in ", name, "::deleteSingleton()"}); } } } @@ -451,49 +446,40 @@ void LLSingletonBase::deleteAll() /*---------------------------- Logging helpers -----------------------------*/ namespace { -void log(LLError::ELevel level, - const char* p1, const char* p2, const char* p3, const char* p4) +std::ostream& operator<<(std::ostream& out, const LLSingletonBase::string_params& args) { - LL_VLOGS(level, "LLSingleton") << p1 << p2 << p3 << p4 << LL_ENDL; + // However many args there are in args, stream each of them to 'out'. + for (auto arg : args) + { + out << arg; + } + return out; } } // anonymous namespace //static -void LLSingletonBase::logwarns(const char* p1, const char* p2, const char* p3, const char* p4) +void LLSingletonBase::logwarns(const string_params& args) { - log(LLError::LEVEL_WARN, p1, p2, p3, p4); + LL_WARNS("LLSingleton") << args << LL_ENDL; } //static -void LLSingletonBase::loginfos(const char* p1, const char* p2, const char* p3, const char* p4) +void LLSingletonBase::loginfos(const string_params& args) { - log(LLError::LEVEL_INFO, p1, p2, p3, p4); + LL_INFOS("LLSingleton") << args << LL_ENDL; } //static -void LLSingletonBase::logdebugs(const char* p1, const char* p2, const char* p3, const char* p4) +void LLSingletonBase::logdebugs(const string_params& args) { - log(LLError::LEVEL_DEBUG, p1, p2, p3, p4); + LL_DEBUGS("LLSingleton") << args << LL_ENDL; } //static -void LLSingletonBase::logerrs(const char* p1, const char* p2, const char* p3, const char* p4) +void LLSingletonBase::logerrs(const string_params& args) { - log(LLError::LEVEL_ERROR, p1, p2, p3, p4); - // The other important side effect of LL_ERRS() is - // https://www.youtube.com/watch?v=OMG7paGJqhQ (emphasis on OMG) - std::ostringstream out; - out << p1 << p2 << p3 << p4; - auto crash = LLError::getFatalFunction(); - if (crash) - { - crash(out.str()); - } - else - { - LLError::crashAndLoop(out.str()); - } + LL_ERRS("LLSingleton") << args << LL_ENDL; } std::string LLSingletonBase::demangle(const char* mangled) diff --git a/indra/llcommon/llsingleton.h b/indra/llcommon/llsingleton.h index 6f4f9bea17..a286fcbff6 100644 --- a/indra/llcommon/llsingleton.h +++ b/indra/llcommon/llsingleton.h @@ -27,9 +27,10 @@ #include #include +#include #include -#include #include +#include #include "mutex.h" #include "lockstatic.h" #include "llthread.h" // on_main_thread() @@ -111,14 +112,13 @@ protected: void capture_dependency(); // delegate logging calls to llsingleton.cpp - static void logerrs(const char* p1, const char* p2="", - const char* p3="", const char* p4=""); - static void logwarns(const char* p1, const char* p2="", - const char* p3="", const char* p4=""); - static void loginfos(const char* p1, const char* p2="", - const char* p3="", const char* p4=""); - static void logdebugs(const char* p1, const char* p2="", - const char* p3="", const char* p4=""); +public: + typedef std::initializer_list string_params; +protected: + static void logerrs (const string_params&); + static void logwarns (const string_params&); + static void loginfos (const string_params&); + static void logdebugs(const string_params&); static std::string demangle(const char* mangled); // these classname() declarations restate template functions declared in // llerror.h because we avoid #including that here @@ -368,8 +368,8 @@ private: // init stack to its previous size BEFORE logging so log-machinery // LLSingletons don't record a dependency on DERIVED_TYPE! LLSingleton_manage_master().reset_initializing(prev_size); - logwarns("Error constructing ", classname().c_str(), - ": ", err.what()); + logwarns({"Error constructing ", classname(), + ": ", err.what()}); // There isn't a separate EInitState value meaning "we attempted // to construct this LLSingleton subclass but could not," so use // DELETED. That seems slightly more appropriate than UNINITIALIZED. @@ -397,8 +397,8 @@ private: // BEFORE logging, so log-machinery LLSingletons don't record a // dependency on DERIVED_TYPE! pop_initializing(lk->mInstance); - logwarns("Error in ", classname().c_str(), - "::initSingleton(): ", err.what()); + logwarns({"Error in ", classname(), + "::initSingleton(): ", err.what()}); // Get rid of the instance entirely. This call depends on our // recursive_mutex. We could have a deleteSingleton(LockStatic&) // overload and pass lk, but we don't strictly need it. @@ -547,9 +547,9 @@ public: case CONSTRUCTING: // here if DERIVED_TYPE's constructor (directly or indirectly) // calls DERIVED_TYPE::getInstance() - logerrs("Tried to access singleton ", - classname().c_str(), - " from singleton constructor!"); + logerrs({"Tried to access singleton ", + classname(), + " from singleton constructor!"}); return nullptr; case INITIALIZING: @@ -564,9 +564,9 @@ public: case DELETED: // called after deleteSingleton() - logwarns("Trying to access deleted singleton ", - classname().c_str(), - " -- creating new instance"); + logwarns({"Trying to access deleted singleton ", + classname(), + " -- creating new instance"}); // fall through case UNINITIALIZED: case QUEUED: @@ -593,8 +593,8 @@ public: } // unlock 'lk' // Per the comment block above, dispatch to the main thread. - loginfos(classname().c_str(), - "::getInstance() dispatching to main thread"); + loginfos({classname(), + "::getInstance() dispatching to main thread"}); auto instance = LLMainThreadTask::dispatch( [](){ // VERY IMPORTANT to call getInstance() on the main thread, @@ -604,16 +604,16 @@ public: // the main thread processes them, only the FIRST such request // actually constructs the instance -- every subsequent one // simply returns the existing instance. - loginfos(classname().c_str(), - "::getInstance() on main thread"); + loginfos({classname(), + "::getInstance() on main thread"}); return getInstance(); }); // record the dependency chain tracked on THIS thread, not the main // thread (consider a getInstance() overload with a tag param that // suppresses dep tracking when dispatched to the main thread) capture_dependency(instance); - loginfos(classname().c_str(), - "::getInstance() returning on requesting thread"); + loginfos({classname(), + "::getInstance() returning on requesting thread"}); return instance; } @@ -682,16 +682,16 @@ private: // For organizational purposes this function shouldn't be called twice if (lk->mInitState != super::UNINITIALIZED) { - super::logerrs("Tried to initialize singleton ", - super::template classname().c_str(), - " twice!"); + super::logerrs({"Tried to initialize singleton ", + super::template classname(), + " twice!"}); return nullptr; } else if (on_main_thread()) { // on the main thread, simply construct instance while holding lock - super::logdebugs(super::template classname().c_str(), - "::initParamSingleton()"); + super::logdebugs({super::template classname(), + "::initParamSingleton()"}); super::constructSingleton(lk, std::forward(args)...); return lk->mInstance; } @@ -703,8 +703,8 @@ private: lk->mInitState = super::QUEUED; // very important to unlock here so main thread can actually process lk.unlock(); - super::loginfos(super::template classname().c_str(), - "::initParamSingleton() dispatching to main thread"); + super::loginfos({super::template classname(), + "::initParamSingleton() dispatching to main thread"}); // Normally it would be the height of folly to reference-bind // 'args' into a lambda to be executed on some other thread! By // the time that thread executed the lambda, the references would @@ -715,12 +715,12 @@ private: // references. auto instance = LLMainThreadTask::dispatch( [&](){ - super::loginfos(super::template classname().c_str(), - "::initParamSingleton() on main thread"); + super::loginfos({super::template classname(), + "::initParamSingleton() on main thread"}); return initParamSingleton_(std::forward(args)...); }); - super::loginfos(super::template classname().c_str(), - "::initParamSingleton() returning on requesting thread"); + super::loginfos({super::template classname(), + "::initParamSingleton() returning on requesting thread"}); return instance; } } @@ -748,14 +748,14 @@ public: { case super::UNINITIALIZED: case super::QUEUED: - super::logerrs("Uninitialized param singleton ", - super::template classname().c_str()); + super::logerrs({"Uninitialized param singleton ", + super::template classname()}); break; case super::CONSTRUCTING: - super::logerrs("Tried to access param singleton ", - super::template classname().c_str(), - " from singleton constructor!"); + super::logerrs({"Tried to access param singleton ", + super::template classname(), + " from singleton constructor!"}); break; case super::INITIALIZING: @@ -767,8 +767,8 @@ public: return lk->mInstance; case super::DELETED: - super::logerrs("Trying to access deleted param singleton ", - super::template classname().c_str()); + super::logerrs({"Trying to access deleted param singleton ", + super::template classname()}); break; } diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index a56c3f7a51..8c5ff50a56 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -358,8 +358,9 @@ void LLThread::setQuitting() { mStatus = QUITTING; } + // It's only safe to remove mRunCondition if all locked threads were notified + mRunCondition->broadcast(); mDataLock->unlock(); - wake(); } // static diff --git a/indra/llcommon/lluri.cpp b/indra/llcommon/lluri.cpp index be6edd8b7c..d23b45f177 100644 --- a/indra/llcommon/lluri.cpp +++ b/indra/llcommon/lluri.cpp @@ -280,7 +280,7 @@ std::string LLURI::escapePathAndData(const std::string &str) std::string fragment; size_t fragment_pos = str.find('#'); - if (fragment_pos != std::string::npos) + if ((fragment_pos != std::string::npos) && (fragment_pos > delim_pos)) { query = str.substr(path_size, fragment_pos - path_size); fragment = str.substr(fragment_pos); diff --git a/indra/llcommon/tests/llerror_test.cpp b/indra/llcommon/tests/llerror_test.cpp index 8e1f4c14ac..148c18aabe 100644 --- a/indra/llcommon/tests/llerror_test.cpp +++ b/indra/llcommon/tests/llerror_test.cpp @@ -26,6 +26,7 @@ */ #include +#include #include "linden_common.h" @@ -69,21 +70,41 @@ namespace namespace { - static bool fatalWasCalled; - void fatalCall(const std::string&) { fatalWasCalled = true; } + static bool fatalWasCalled = false; + struct FatalWasCalled: public std::runtime_error + { + FatalWasCalled(const std::string& what): std::runtime_error(what) {} + }; + void fatalCall(const std::string& msg) { throw FatalWasCalled(msg); } } +// Because we use LLError::setFatalFunction(fatalCall), any LL_ERRS call we +// issue will throw FatalWasCalled. But we want the test program to continue. +// So instead of writing: +// LL_ERRS("tag") << "some message" << LL_ENDL; +// write: +// CATCH(LL_ERRS("tag"), "some message"); +#define CATCH(logcall, expr) \ + try \ + { \ + logcall << expr << LL_ENDL; \ + } \ + catch (const FatalWasCalled&) \ + { \ + fatalWasCalled = true; \ + } + namespace tut { class TestRecorder : public LLError::Recorder { public: TestRecorder() - { - showTime(false); - } + { + showTime(false); + } virtual ~TestRecorder() - {} + {} virtual void recordMessage(LLError::ELevel level, const std::string& message) @@ -252,7 +273,7 @@ namespace LL_DEBUGS("WriteTag","AnotherTag") << "one" << LL_ENDL; LL_INFOS("WriteTag") << "two" << LL_ENDL; LL_WARNS("WriteTag") << "three" << LL_ENDL; - LL_ERRS("WriteTag") << "four" << LL_ENDL; + CATCH(LL_ERRS("WriteTag"), "four"); } }; @@ -380,7 +401,7 @@ namespace std::string errorReturningLocation() { - LL_ERRS() << "die" << LL_ENDL; int this_line = __LINE__; + int this_line = __LINE__; CATCH(LL_ERRS(), "die"); return locationString(this_line); } } @@ -701,7 +722,7 @@ public: static void doDebug() { LL_DEBUGS() << "add dice" << LL_ENDL; } static void doInfo() { LL_INFOS() << "any idea" << LL_ENDL; } static void doWarn() { LL_WARNS() << "aim west" << LL_ENDL; } - static void doError() { LL_ERRS() << "ate eels" << LL_ENDL; } + static void doError() { CATCH(LL_ERRS(), "ate eels"); } static void doAll() { doDebug(); doInfo(); doWarn(); doError(); } }; @@ -712,7 +733,7 @@ public: static void doDebug() { LL_DEBUGS() << "bed down" << LL_ENDL; } static void doInfo() { LL_INFOS() << "buy iron" << LL_ENDL; } static void doWarn() { LL_WARNS() << "bad word" << LL_ENDL; } - static void doError() { LL_ERRS() << "big easy" << LL_ENDL; } + static void doError() { CATCH(LL_ERRS(), "big easy"); } static void doAll() { doDebug(); doInfo(); doWarn(); doError(); } }; @@ -874,13 +895,10 @@ namespace tut namespace { std::string writeTagWithSpaceReturningLocation() - { - LL_DEBUGS("Write Tag") << "not allowed" << LL_ENDL; int this_line = __LINE__; - - std::ostringstream location; - location << LLError::abbreviateFile(__FILE__).c_str() << "(" << this_line << ")"; - return location.str(); - } + { + int this_line = __LINE__; CATCH(LL_DEBUGS("Write Tag"), "not allowed"); + return locationString(this_line); + } }; namespace tut @@ -894,9 +912,9 @@ namespace tut std::string location = writeTagWithSpaceReturningLocation(); std::string expected = "Space is not allowed in a log tag at " + location; - ensure_message_field_equals(0, LEVEL_FIELD, "ERROR"); - ensure_message_field_equals(0, MSG_FIELD, expected); - ensure("fatal callback called", fatalWasCalled); + ensure_message_field_equals(0, LEVEL_FIELD, "ERROR"); + ensure_message_field_equals(0, MSG_FIELD, expected); + ensure("fatal callback called", fatalWasCalled); } } diff --git a/indra/llcommon/tests/wrapllerrs.h b/indra/llcommon/tests/wrapllerrs.h index b07d5afbd8..3779fb41bc 100644 --- a/indra/llcommon/tests/wrapllerrs.h +++ b/indra/llcommon/tests/wrapllerrs.h @@ -44,10 +44,6 @@ #include #include -// statically reference the function in test.cpp... it's short, we could -// replicate, but better to reuse -extern void wouldHaveCrashed(const std::string& message); - struct WrapLLErrs { WrapLLErrs(): @@ -59,7 +55,8 @@ struct WrapLLErrs mPriorFatal(LLError::getFatalFunction()) { // Make LL_ERRS call our own operator() method - LLError::setFatalFunction(boost::bind(&WrapLLErrs::operator(), this, _1)); + LLError::setFatalFunction( + [this](const std::string& message){ (*this)(message); }); } ~WrapLLErrs() @@ -199,11 +196,13 @@ public: // with that output. If it turns out that saveAndResetSettings() has // some bad effect, give up and just let the DEBUG level log messages // display. - : boost::noncopyable(), + : boost::noncopyable(), + mFatalFunction(LLError::getFatalFunction()), mOldSettings(LLError::saveAndResetSettings()), - mRecorder(new CaptureLogRecorder()) + mRecorder(new CaptureLogRecorder()) { - LLError::setFatalFunction(wouldHaveCrashed); + // reinstate the FatalFunction we just reset + LLError::setFatalFunction(mFatalFunction); LLError::setDefaultLevel(level); LLError::addRecorder(mRecorder); } @@ -219,17 +218,18 @@ public: /// for the sought string. std::string messageWith(const std::string& search, bool required=true) { - return boost::dynamic_pointer_cast(mRecorder)->messageWith(search, required); + return boost::dynamic_pointer_cast(mRecorder)->messageWith(search, required); } std::ostream& streamto(std::ostream& out) const { - return boost::dynamic_pointer_cast(mRecorder)->streamto(out); + return boost::dynamic_pointer_cast(mRecorder)->streamto(out); } private: + LLError::FatalFunction mFatalFunction; LLError::SettingsStoragePtr mOldSettings; - LLError::RecorderPtr mRecorder; + LLError::RecorderPtr mRecorder; }; #endif /* ! defined(LL_WRAPLLERRS_H) */ diff --git a/indra/llcorehttp/CMakeLists.txt b/indra/llcorehttp/CMakeLists.txt index 33d66fad53..2f27c127cd 100644 --- a/indra/llcorehttp/CMakeLists.txt +++ b/indra/llcorehttp/CMakeLists.txt @@ -17,6 +17,7 @@ include(LLAddBuildTest) include(LLMessage) include(LLCommon) include(Tut) +include(bugsplat) include_directories (${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/indra/llcorehttp/_httpreplyqueue.cpp b/indra/llcorehttp/_httpreplyqueue.cpp index 2b138f3ad5..229bfdbe07 100644 --- a/indra/llcorehttp/_httpreplyqueue.cpp +++ b/indra/llcorehttp/_httpreplyqueue.cpp @@ -56,7 +56,6 @@ void HttpReplyQueue::addOp(const HttpReplyQueue::opPtr_t &op) mQueue.push_back(op); } - mQueueCV.notify_all(); } diff --git a/indra/llcorehttp/_httpreplyqueue.h b/indra/llcorehttp/_httpreplyqueue.h index 928ee10a83..33e205c1c9 100644 --- a/indra/llcorehttp/_httpreplyqueue.h +++ b/indra/llcorehttp/_httpreplyqueue.h @@ -98,7 +98,6 @@ protected: OpContainer mQueue; LLCoreInt::HttpMutex mQueueMutex; - LLCoreInt::HttpConditionVariable mQueueCV; }; // end class HttpReplyQueue diff --git a/indra/llcorehttp/_httprequestqueue.cpp b/indra/llcorehttp/_httprequestqueue.cpp index c6f4ad789f..ad72bdcce6 100644 --- a/indra/llcorehttp/_httprequestqueue.cpp +++ b/indra/llcorehttp/_httprequestqueue.cpp @@ -142,13 +142,19 @@ void HttpRequestQueue::wakeAll() } -void HttpRequestQueue::stopQueue() +bool HttpRequestQueue::stopQueue() { { HttpScopedLock lock(mQueueMutex); - mQueueStopped = true; - wakeAll(); + if (!mQueueStopped) + { + mQueueStopped = true; + wakeAll(); + return true; + } + wakeAll(); + return false; } } diff --git a/indra/llcorehttp/_httprequestqueue.h b/indra/llcorehttp/_httprequestqueue.h index 3c3d134b07..f0296f30e3 100644 --- a/indra/llcorehttp/_httprequestqueue.h +++ b/indra/llcorehttp/_httprequestqueue.h @@ -124,7 +124,7 @@ public: /// them on their way. /// /// Threading: callable by any thread. - void stopQueue(); + bool stopQueue(); protected: static HttpRequestQueue * sInstance; diff --git a/indra/llcorehttp/_httpservice.cpp b/indra/llcorehttp/_httpservice.cpp index 34268d94f6..56f52f1b09 100644 --- a/indra/llcorehttp/_httpservice.cpp +++ b/indra/llcorehttp/_httpservice.cpp @@ -87,7 +87,11 @@ HttpService::~HttpService() // is a bit tricky. if (mRequestQueue) { - mRequestQueue->stopQueue(); + if (mRequestQueue->stopQueue()) + { + // Give mRequestQueue a chance to finish + ms_sleep(10); + } } if (mThread) diff --git a/indra/llcorehttp/httpoptions.cpp b/indra/llcorehttp/httpoptions.cpp index fa0b5a00c2..e62f44ab38 100644 --- a/indra/llcorehttp/httpoptions.cpp +++ b/indra/llcorehttp/httpoptions.cpp @@ -32,6 +32,7 @@ namespace LLCore { + bool HttpOptions::sDefaultVerifyPeer = false; HttpOptions::HttpOptions() : mWantHeaders(false), @@ -43,7 +44,7 @@ HttpOptions::HttpOptions() : mMaxRetryBackoff(HTTP_RETRY_BACKOFF_MAX_DEFAULT), mUseRetryAfter(HTTP_USE_RETRY_AFTER_DEFAULT), mFollowRedirects(true), - mVerifyPeer(false), + mVerifyPeer(sDefaultVerifyPeer), mVerifyHost(false), mDNSCacheTimeout(-1L), mNoBody(false), @@ -123,7 +124,15 @@ void HttpOptions::setHeadersOnly(bool nobody) { mNoBody = nobody; if (mNoBody) + { setWantHeaders(true); + setSSLVerifyPeer(false); + } +} + +void HttpOptions::setDefaultSSLVerifyPeer(bool verify) +{ + sDefaultVerifyPeer = verify; } // GetIfModified request diff --git a/indra/llcorehttp/httpoptions.h b/indra/llcorehttp/httpoptions.h index 59435328f3..ef12edf316 100644 --- a/indra/llcorehttp/httpoptions.h +++ b/indra/llcorehttp/httpoptions.h @@ -143,7 +143,7 @@ public: /// Instructs the LLCore::HTTPRequest to verify that the exchanged security /// certificate is authentic. - /// Default: false + /// Default: sDefaultVerifyPeer void setSSLVerifyPeer(bool verify); bool getSSLVerifyPeer() const { @@ -178,6 +178,13 @@ public: return mNoBody; } + /// Sets default behavior for verifying that the name in the + /// security certificate matches the name of the host contacted. + /// Defaults false if not set, but should be set according to + /// viewer's initialization options and command argunments, see + /// NoVerifySSLCert + static void setDefaultSSLVerifyPeer(bool verify); + // GetIfModified request void setLastModified(long last_modified); long getLastModified() const @@ -200,6 +207,9 @@ protected: bool mVerifyHost; int mDNSCacheTimeout; bool mNoBody; + + static bool sDefaultVerifyPeer; + long mLastModified; // GetIfModified request }; // end class HttpOptions diff --git a/indra/llcrashlogger/README.txt b/indra/llcrashlogger/README.txt new file mode 100644 index 0000000000..6932a8d9c3 --- /dev/null +++ b/indra/llcrashlogger/README.txt @@ -0,0 +1,3 @@ +This component is no longer used in Linden Lab builds. +Change requests to support continued use by open source +builds are welcome. diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp index e77e0e2f6f..9d3ad8b3b9 100644 --- a/indra/llcrashlogger/llcrashlogger.cpp +++ b/indra/llcrashlogger/llcrashlogger.cpp @@ -520,6 +520,7 @@ bool LLCrashLogger::runCrashLogPost(std::string host, LLSD data, std::string msg LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions); httpOpts->setTimeout(timeout); + httpOpts->setSSLVerifyPeer(false); for(int i = 0; i < retries; ++i) { diff --git a/indra/llfilesystem/lldiskcache.cpp b/indra/llfilesystem/lldiskcache.cpp index 6e77de2735..aa4e07a583 100644 --- a/indra/llfilesystem/lldiskcache.cpp +++ b/indra/llfilesystem/lldiskcache.cpp @@ -62,6 +62,11 @@ LLDiskCache::LLDiskCache(const std::string cache_dir, LLFile::mkdir(dirname); } // + // add static assets into the new cache after clear. + // Only missing entries are copied on init, skiplist is setup + // For everything we populate FS specific assets to allow future updates + prepopulateCacheWithStatic(); + // } void LLDiskCache::purge() @@ -117,6 +122,11 @@ void LLDiskCache::purge() LL_INFOS() << "Purging cache to a maximum of " << mMaxSizeBytes << " bytes" << LL_ENDL; + // Extra accounting to track the retention of static assets + int keep{0}; + int del{0}; + int skip{0}; + // uintmax_t file_size_total = 0; for (file_info_t& entry : file_info) { @@ -126,17 +136,34 @@ void LLDiskCache::purge() if (file_size_total > mMaxSizeBytes) { action = "DELETE:"; - // Do not crash if we cannot delete the file for some reason - //boost::filesystem::remove(entry.second.second); - boost::filesystem::remove(entry.second.second, ec); - if (ec.failed()) + // Make sure static assets are not eliminated + auto uuid_as_string = gDirUtilp->getBaseFileName(entry.second.second,true); + uuid_as_string = uuid_as_string.substr(mCacheFilenamePrefix.size() + 1, 36);// skip "sl_cache_" and trailing "_N" + // LL_INFOS() << "checking UUID=" < + // Do not crash if we cannot delete the file for some reason + //boost::filesystem::remove(entry.second.second); + boost::filesystem::remove(entry.second.second, ec); + if (ec.failed()) + { + LL_WARNS() << "Failed to delete cache file " << entry.second.second << ": " << ec.message() << LL_ENDL; + } } // } else { + keep++; // Extra accounting to track the retention of static assets action = " KEEP:"; } @@ -160,6 +187,7 @@ void LLDiskCache::purge() auto execute_time = std::chrono::duration_cast(end_time - start_time).count(); LL_INFOS() << "Total dir size after purge is " << dirFileSize(mCacheDir) << LL_ENDL; LL_INFOS() << "Cache purge took " << execute_time << " ms to execute for " << file_info.size() << " files" << LL_ENDL; + LL_INFOS() << "Deleted: " << del << " Skipped: " << skip << " Kept: " << keep << LL_ENDL; // Extra accounting to track the retention of static assets } } @@ -321,8 +349,57 @@ const std::string LLDiskCache::getCacheInfo() return cache_info.str(); } +// Copy static items into cache and add to the skip list that prevents their purging +// Note that there is no de-duplication nor other validation of the list. +void LLDiskCache::prepopulateCacheWithStatic() +{ + mSkipList.clear(); + + std::vector from_folders; + from_folders.emplace_back(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "fs_static_assets")); +#ifdef OPENSIM + from_folders.emplace_back(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "static_assets")); +#endif + + for (const auto& from_folder : from_folders) + { + if (gDirUtilp->fileExists(from_folder)) + { + auto assets_to_copy = gDirUtilp->getFilesInDir(from_folder); + for (auto from_asset_file : assets_to_copy) + { + from_asset_file = from_folder + gDirUtilp->getDirDelimiter() + from_asset_file; + // we store static assets as UUID.asset_type the asset_type is not used in the current simple cache format + auto uuid_as_string{ gDirUtilp->getBaseFileName(from_asset_file, true) }; + auto to_asset_file = metaDataToFilepath(uuid_as_string, LLAssetType::AT_UNKNOWN, std::string()); + if (!gDirUtilp->fileExists(to_asset_file)) + { + if (mEnableCacheDebugInfo) + { + LL_INFOS("LLDiskCache") << "Copying static asset " << from_asset_file << " to cache from " << from_folder << LL_ENDL; + } + if (!LLFile::copy(from_asset_file, to_asset_file)) + { + LL_WARNS("LLDiskCache") << "Failed to copy " << from_asset_file << " to " << to_asset_file << LL_ENDL; + } + } + if (std::find(mSkipList.begin(), mSkipList.end(), uuid_as_string) == mSkipList.end()) + { + if (mEnableCacheDebugInfo) + { + LL_INFOS("LLDiskCache") << "Adding " << uuid_as_string << " to skip list" << LL_ENDL; + } + mSkipList.emplace_back(uuid_as_string); + } + } + } + } +} +// + void LLDiskCache::clearCache() { + LL_INFOS() << "clearing cache " << mCacheDir << LL_ENDL; /** * See notes on performance in dirFileSize(..) - there may be * a quicker way to do this by operating on the parent dir vs @@ -356,7 +433,10 @@ void LLDiskCache::clearCache() } } } + // add static assets into the new cache after clear + prepopulateCacheWithStatic(); } + LL_INFOS() << "Cleared cache " << mCacheDir << LL_ENDL; } uintmax_t LLDiskCache::dirFileSize(const std::string dir) diff --git a/indra/llfilesystem/lldiskcache.h b/indra/llfilesystem/lldiskcache.h index 42a02a68e4..1164b428e0 100644 --- a/indra/llfilesystem/lldiskcache.h +++ b/indra/llfilesystem/lldiskcache.h @@ -131,6 +131,11 @@ class LLDiskCache : */ void purge(); + // + // copy from distribution into cache to replace static content + void prepopulateCacheWithStatic(); + // + /** * Clear the cache by removing all the files in the specified cache * directory individually. Only the files that contain a prefix defined @@ -191,6 +196,8 @@ class LLDiskCache : * various parts of the code */ bool mEnableCacheDebugInfo; + + std::vector mSkipList; // Vector of "static" untouchable assets that should never be purged }; // Regular disk cache cleanup diff --git a/indra/llfilesystem/llfilesystem.cpp b/indra/llfilesystem/llfilesystem.cpp index 8e1d4f12b6..a64070eb9d 100644 --- a/indra/llfilesystem/llfilesystem.cpp +++ b/indra/llfilesystem/llfilesystem.cpp @@ -81,10 +81,7 @@ bool LLFileSystem::getExists(const LLUUID& file_id, const LLAssetType::EType fil } // static -// Fix log spam -//bool LLFileSystem::removeFile(const LLUUID& file_id, const LLAssetType::EType file_type) bool LLFileSystem::removeFile(const LLUUID& file_id, const LLAssetType::EType file_type, int suppress_error /*= 0*/) -// { FSZoneC(tracy::Color::Gold); // measure cache performance std::string id_str; @@ -92,10 +89,7 @@ bool LLFileSystem::removeFile(const LLUUID& file_id, const LLAssetType::EType fi const std::string extra_info = ""; const std::string filename = LLDiskCache::getInstance()->metaDataToFilepath(id_str, file_type, extra_info); - // Fix log spam - //LLFile::remove(filename.c_str()); LLFile::remove(filename.c_str(), suppress_error); - // return true; } @@ -115,10 +109,7 @@ bool LLFileSystem::renameFile(const LLUUID& old_file_id, const LLAssetType::ETyp const std::string new_filename = LLDiskCache::getInstance()->metaDataToFilepath(new_id_str, new_file_type, extra_info); // Rename needs the new file to not exist. - // Fix log spam - //LLFileSystem::removeFile(new_file_id, new_file_type); LLFileSystem::removeFile(new_file_id, new_file_type, ENOENT); - // if (LLFile::rename(old_filename, new_filename) != 0) { diff --git a/indra/llfilesystem/llfilesystem.h b/indra/llfilesystem/llfilesystem.h index 41c39e1f63..d934a408c2 100644 --- a/indra/llfilesystem/llfilesystem.h +++ b/indra/llfilesystem/llfilesystem.h @@ -54,10 +54,7 @@ class LLFileSystem BOOL remove(); static bool getExists(const LLUUID& file_id, const LLAssetType::EType file_type); - // Fix log spam - //static bool removeFile(const LLUUID& file_id, const LLAssetType::EType file_type); static bool removeFile(const LLUUID& file_id, const LLAssetType::EType file_type, int suppress_error = 0); - // static bool renameFile(const LLUUID& old_file_id, const LLAssetType::EType old_file_type, const LLUUID& new_file_id, const LLAssetType::EType new_file_type); static S32 getFileSize(const LLUUID& file_id, const LLAssetType::EType file_type); diff --git a/indra/llimage/CMakeLists.txt b/indra/llimage/CMakeLists.txt index dc8e9f7c2f..8883317751 100644 --- a/indra/llimage/CMakeLists.txt +++ b/indra/llimage/CMakeLists.txt @@ -11,6 +11,7 @@ include(LLKDU) include(LLImageJ2COJ) include(ZLIB) include(LLAddBuildTest) +include(bugsplat) include(Tut) include_directories( diff --git a/indra/llinventory/lllandmark.cpp b/indra/llinventory/lllandmark.cpp index b427aeaf55..1a7629edfa 100644 --- a/indra/llinventory/lllandmark.cpp +++ b/indra/llinventory/lllandmark.cpp @@ -103,60 +103,104 @@ LLVector3 LLLandmark::getRegionPos() const // static -LLLandmark* LLLandmark::constructFromString(const char *buffer) +LLLandmark* LLLandmark::constructFromString(const char *buffer, const S32 buffer_size) { - const char* cur = buffer; S32 chars_read = 0; + S32 chars_read_total = 0; S32 count = 0; U32 version = 0; + bool bad_block = false; + LLLandmark* result = NULL; + // read version - count = sscanf( cur, "Landmark version %u\n%n", &version, &chars_read ); - if(count != 1) - { - goto error; - } + count = sscanf( buffer, "Landmark version %u\n%n", &version, &chars_read ); + chars_read_total += chars_read; - if(version == 1) - { - LLVector3d pos; - cur += chars_read; - // read position - count = sscanf( cur, "position %lf %lf %lf\n%n", pos.mdV+VX, pos.mdV+VY, pos.mdV+VZ, &chars_read ); - if( count != 3 ) - { - goto error; - } - cur += chars_read; - // LL_INFOS() << "Landmark read: " << pos << LL_ENDL; - - return new LLLandmark(pos); - } - else if(version == 2) - { - // *NOTE: Changing the buffer size will require changing the - // scanf call below. - char region_id_str[MAX_STRING]; /* Flawfinder: ignore */ - LLVector3 pos; - cur += chars_read; - count = sscanf( /* Flawfinder: ignore */ - cur, - "region_id %254s\n%n", - region_id_str, &chars_read); - if(count != 1) goto error; - cur += chars_read; - count = sscanf(cur, "local_pos %f %f %f\n%n", pos.mV+VX, pos.mV+VY, pos.mV+VZ, &chars_read); - if(count != 3) goto error; - cur += chars_read; - LLLandmark* lm = new LLLandmark; - lm->mRegionID.set(region_id_str); - lm->mRegionPos = pos; - return lm; - } + if (count != 1 + || chars_read_total >= buffer_size) + { + bad_block = true; + } - error: - LL_INFOS() << "Bad Landmark Asset: bad _DATA_ block." << LL_ENDL; - return NULL; + if (!bad_block) + { + switch (version) + { + case 1: + { + LLVector3d pos; + // read position + count = sscanf(buffer + chars_read_total, "position %lf %lf %lf\n%n", pos.mdV + VX, pos.mdV + VY, pos.mdV + VZ, &chars_read); + if (count != 3) + { + bad_block = true; + } + else + { + LL_DEBUGS("Landmark") << "Landmark read: " << pos << LL_ENDL; + result = new LLLandmark(pos); + } + break; + } + case 2: + { + // *NOTE: Changing the buffer size will require changing the + // scanf call below. + char region_id_str[MAX_STRING]; + LLVector3 pos; + LLUUID region_id; + count = sscanf( buffer + chars_read_total, + "region_id %254s\n%n", + region_id_str, + &chars_read); + chars_read_total += chars_read; + + if (count != 1 + || chars_read_total >= buffer_size + || !LLUUID::validate(region_id_str)) + { + bad_block = true; + } + + if (!bad_block) + { + region_id.set(region_id_str); + if (region_id.isNull()) + { + bad_block = true; + } + } + + if (!bad_block) + { + count = sscanf(buffer + chars_read_total, "local_pos %f %f %f\n%n", pos.mV + VX, pos.mV + VY, pos.mV + VZ, &chars_read); + if (count != 3) + { + bad_block = true; + } + else + { + result = new LLLandmark; + result->mRegionID = region_id; + result->mRegionPos = pos; + } + } + break; + } + default: + { + LL_INFOS("Landmark") << "Encountered Unknown landmark version " << version << LL_ENDL; + break; + } + } + } + + if (bad_block) + { + LL_INFOS("Landmark") << "Bad Landmark Asset: bad _DATA_ block." << LL_ENDL; + } + return result; } @@ -176,7 +220,7 @@ void LLLandmark::requestRegionHandle( if(region_id.isNull()) { // don't bother with checking - it's 0. - LL_DEBUGS() << "requestRegionHandle: null" << LL_ENDL; + LL_DEBUGS("Landmark") << "requestRegionHandle: null" << LL_ENDL; if(callback) { const U64 U64_ZERO = 0; @@ -187,7 +231,7 @@ void LLLandmark::requestRegionHandle( { if(region_id == mLocalRegion.first) { - LL_DEBUGS() << "requestRegionHandle: local" << LL_ENDL; + LL_DEBUGS("Landmark") << "requestRegionHandle: local" << LL_ENDL; if(callback) { callback(region_id, mLocalRegion.second); @@ -198,13 +242,13 @@ void LLLandmark::requestRegionHandle( region_map_t::iterator it = mRegions.find(region_id); if(it == mRegions.end()) { - LL_DEBUGS() << "requestRegionHandle: upstream" << LL_ENDL; + LL_DEBUGS("Landmark") << "requestRegionHandle: upstream" << LL_ENDL; if(callback) { region_callback_map_t::value_type vt(region_id, callback); sRegionCallbackMap.insert(vt); } - LL_DEBUGS() << "Landmark requesting information about: " + LL_DEBUGS("Landmark") << "Landmark requesting information about: " << region_id << LL_ENDL; msg->newMessage("RegionHandleRequest"); msg->nextBlock("RequestBlock"); @@ -214,7 +258,7 @@ void LLLandmark::requestRegionHandle( else if(callback) { // we have the answer locally - just call the callack. - LL_DEBUGS() << "requestRegionHandle: ready" << LL_ENDL; + LL_DEBUGS("Landmark") << "requestRegionHandle: ready" << LL_ENDL; callback(region_id, (*it).second.mRegionHandle); } } diff --git a/indra/llinventory/lllandmark.h b/indra/llinventory/lllandmark.h index 92923ea6fb..be34113a90 100644 --- a/indra/llinventory/lllandmark.h +++ b/indra/llinventory/lllandmark.h @@ -60,7 +60,7 @@ public: // constructs a new LLLandmark from a string // return NULL if there's an error - static LLLandmark* constructFromString(const char *buffer); + static LLLandmark* constructFromString(const char *buffer, const S32 buffer_size); // register callbacks that this class handles static void registerCallbacks(LLMessageSystem* msg); diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt index 232b7fcc0d..644bb19672 100644 --- a/indra/llmath/CMakeLists.txt +++ b/indra/llmath/CMakeLists.txt @@ -4,6 +4,7 @@ project(llmath) include(00-Common) include(LLCommon) +include(bugsplat) include(Boost) include_directories( diff --git a/indra/llmessage/llcoproceduremanager.cpp b/indra/llmessage/llcoproceduremanager.cpp index fff73ba3aa..eebcbc903a 100644 --- a/indra/llmessage/llcoproceduremanager.cpp +++ b/indra/llmessage/llcoproceduremanager.cpp @@ -138,13 +138,24 @@ LLCoprocedureManager::~LLCoprocedureManager() close(); } -LLCoprocedureManager::poolPtr_t LLCoprocedureManager::initializePool(const std::string &poolName) +void LLCoprocedureManager::initializePool(const std::string &poolName) { + poolMap_t::iterator it = mPoolMap.find(poolName); + + if (it != mPoolMap.end()) + { + // Pools are not supposed to be initialized twice + // Todo: ideally restrict init to STATE_FIRST + LL_WARNS("CoProcMgr") << "Pool is already present " << poolName << LL_ENDL; + return; + } + // Attempt to look up a pool size in the configuration. If found use that std::string keyName = "PoolSize" + poolName; int size = 0; LL_ERRS_IF(poolName.empty(), "CoprocedureManager") << "Poolname must not be empty" << LL_ENDL; + LL_INFOS("CoprocedureManager") << "Initializing pool " << poolName << LL_ENDL; if (mPropertyQueryFn) { @@ -171,8 +182,6 @@ LLCoprocedureManager::poolPtr_t LLCoprocedureManager::initializePool(const std:: bool inserted = mPoolMap.emplace(poolName, pool).second; LL_ERRS_IF(!inserted, "CoprocedureManager") << "Unable to add pool named \"" << poolName << "\" to map. FATAL!" << LL_ENDL; - - return pool; } //------------------------------------------------------------------------- @@ -182,22 +191,28 @@ LLUUID LLCoprocedureManager::enqueueCoprocedure(const std::string &pool, const s // not exist, create it. poolMap_t::iterator it = mPoolMap.find(pool); - poolPtr_t targetPool = (it != mPoolMap.end()) ? it->second : initializePool(pool); + if (it == mPoolMap.end()) + { + // initializing pools in enqueueCoprocedure is not thread safe, + // at the moment pools need to be initialized manually + LL_ERRS() << "Uninitialized pool " << pool << LL_ENDL; + } + poolPtr_t targetPool = it->second; return targetPool->enqueueCoprocedure(name, proc); } void LLCoprocedureManager::setPropertyMethods(SettingQuery_t queryfn, SettingUpdate_t updatefn) { // functions to discover and store the pool sizes + // Might be a better idea to make an initializePool(name, size) to init everything externally mPropertyQueryFn = queryfn; mPropertyDefineFn = updatefn; - // workaround until we get mutex into initializePool - initializePool("AssetStorage"); initializePool("Upload"); - initializePool("AIS"); - initializePool("ExpCache"); // FIRE-30731: ExpCache coroutine pool crash + initializePool("AIS"); // it might be better to have some kind of on-demand initialization for AIS + // "ExpCache" pool gets initialized in LLExperienceCache + // asset storage pool gets initialized in LLViewerAssetStorage } //------------------------------------------------------------------------- diff --git a/indra/llmessage/llcoproceduremanager.h b/indra/llmessage/llcoproceduremanager.h index d5557c129f..2d460826ff 100644 --- a/indra/llmessage/llcoproceduremanager.h +++ b/indra/llmessage/llcoproceduremanager.h @@ -79,6 +79,8 @@ public: void close(); void close(const std::string &pool); + + void initializePool(const std::string &poolName); private: @@ -87,8 +89,6 @@ private: poolMap_t mPoolMap; - poolPtr_t initializePool(const std::string &poolName); - SettingQuery_t mPropertyQueryFn; SettingUpdate_t mPropertyDefineFn; diff --git a/indra/llmessage/llexperiencecache.cpp b/indra/llmessage/llexperiencecache.cpp index 05da0c57f2..225993c4af 100644 --- a/indra/llmessage/llexperiencecache.cpp +++ b/indra/llmessage/llexperiencecache.cpp @@ -114,6 +114,8 @@ void LLExperienceCache::initSingleton() cache_stream >> (*this); } + LLCoprocedureManager::instance().initializePool("ExpCache"); + LLCoros::instance().launch("LLExperienceCache::idleCoro", boost::bind(&LLExperienceCache::idleCoro, this)); diff --git a/indra/llmessage/tests/llcoproceduremanager_test.cpp b/indra/llmessage/tests/llcoproceduremanager_test.cpp index 9db13a37b5..6424117ef3 100644 --- a/indra/llmessage/tests/llcoproceduremanager_test.cpp +++ b/indra/llmessage/tests/llcoproceduremanager_test.cpp @@ -91,6 +91,7 @@ namespace tut { Sync sync; int foo = 0; + LLCoprocedureManager::instance().initializePool("PoolName"); LLUUID queueId = LLCoprocedureManager::instance().enqueueCoprocedure("PoolName", "ProcName", [&foo, &sync] (LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t & ptr, const LLUUID & id) { sync.bump(); diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 8241152b6e..84368ee29e 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -50,6 +50,7 @@ U32 LLRender::sUIVerts = 0; U32 LLTexUnit::sWhiteTexture = 0; bool LLRender::sGLCoreProfile = false; bool LLRender::sNsightDebugSupport = false; +LLVector2 LLRender::sUIGLScaleFactor = LLVector2(1.f, 1.f); static const U32 LL_NUM_TEXTURE_LAYERS = 32; static const U32 LL_NUM_LIGHT_UNITS = 8; diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index 8499563838..4f3786ef9b 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -480,6 +480,7 @@ public: static U32 sUIVerts; static bool sGLCoreProfile; static bool sNsightDebugSupport; + static LLVector2 sUIGLScaleFactor; private: friend class LLLightState; diff --git a/indra/llrender/llrender2dutils.cpp b/indra/llrender/llrender2dutils.cpp index c9e205723e..92d90899c5 100644 --- a/indra/llrender/llrender2dutils.cpp +++ b/indra/llrender/llrender2dutils.cpp @@ -106,11 +106,10 @@ void gl_rect_2d_offset_local( S32 left, S32 top, S32 right, S32 bottom, S32 pixe top += LLFontGL::sCurOrigin.mY; gGL.loadUIIdentity(); - LLRender2D *r2d_inst = LLRender2D::getInstance(); - gl_rect_2d(llfloor((F32)left * r2d_inst->mGLScaleFactor.mV[VX]) - pixel_offset, - llfloor((F32)top * r2d_inst->mGLScaleFactor.mV[VY]) + pixel_offset, - llfloor((F32)right * r2d_inst->mGLScaleFactor.mV[VX]) + pixel_offset, - llfloor((F32)bottom * r2d_inst->mGLScaleFactor.mV[VY]) - pixel_offset, + gl_rect_2d(llfloor((F32)left * LLRender::sUIGLScaleFactor.mV[VX]) - pixel_offset, + llfloor((F32)top * LLRender::sUIGLScaleFactor.mV[VY]) + pixel_offset, + llfloor((F32)right * LLRender::sUIGLScaleFactor.mV[VX]) + pixel_offset, + llfloor((F32)bottom * LLRender::sUIGLScaleFactor.mV[VY]) - pixel_offset, filled); gGL.popUIMatrix(); } @@ -2017,7 +2016,6 @@ void gl_segmented_rect_3d_tex(const LLRectf& clip_rect, const LLRectf& center_uv LLRender2D::LLRender2D(LLImageProviderInterface* image_provider) { - mGLScaleFactor = LLVector2(1.f, 1.f); mImageProvider = image_provider; if(mImageProvider) { @@ -2034,7 +2032,7 @@ LLRender2D::~LLRender2D() } } - +// static void LLRender2D::translate(F32 x, F32 y, F32 z) { gGL.translateUI(x,y,z); @@ -2043,12 +2041,14 @@ void LLRender2D::translate(F32 x, F32 y, F32 z) LLFontGL::sCurDepth += z; } +// static void LLRender2D::pushMatrix() { gGL.pushUIMatrix(); LLFontGL::sOriginStack.push_back(std::make_pair(LLFontGL::sCurOrigin, LLFontGL::sCurDepth)); } +// static void LLRender2D::popMatrix() { gGL.popUIMatrix(); @@ -2057,6 +2057,7 @@ void LLRender2D::popMatrix() LLFontGL::sOriginStack.pop_back(); } +// static void LLRender2D::loadIdentity() { gGL.loadUIIdentity(); @@ -2065,17 +2066,13 @@ void LLRender2D::loadIdentity() LLFontGL::sCurDepth = 0.f; } -void LLRender2D::setScaleFactor(const LLVector2 &scale_factor) -{ - mGLScaleFactor = scale_factor; -} - +// static void LLRender2D::setLineWidth(F32 width) { // Line width OGL core profile fix by Rye Mutt //gGL.flush(); - //glLineWidth(width * lerp(mGLScaleFactor.mV[VX], mGLScaleFactor.mV[VY], 0.5f)); - gGL.setLineWidth(width * lerp(mGLScaleFactor.mV[VX], mGLScaleFactor.mV[VY], 0.5f)); + //glLineWidth(width * lerp(LLRender::sUIGLScaleFactor.mV[VX], LLRender::sUIGLScaleFactor.mV[VY], 0.5f)); + gGL.setLineWidth(width * lerp(LLRender::sUIGLScaleFactor.mV[VX], LLRender::sUIGLScaleFactor.mV[VY], 0.5f)); } LLPointer LLRender2D::getUIImageByID(const LLUUID& image_id, S32 priority) diff --git a/indra/llrender/llrender2dutils.h b/indra/llrender/llrender2dutils.h index 8c01784071..206e68f084 100644 --- a/indra/llrender/llrender2dutils.h +++ b/indra/llrender/llrender2dutils.h @@ -128,19 +128,16 @@ class LLRender2D : public LLParamSingleton LOG_CLASS(LLRender2D); ~LLRender2D(); public: - void pushMatrix(); - void popMatrix(); - void loadIdentity(); - void translate(F32 x, F32 y, F32 z = 0.0f); + static void pushMatrix(); + static void popMatrix(); + static void loadIdentity(); + static void translate(F32 x, F32 y, F32 z = 0.0f); - void setLineWidth(F32 width); - void setScaleFactor(const LLVector2& scale_factor); + static void setLineWidth(F32 width); LLPointer getUIImageByID(const LLUUID& image_id, S32 priority = 0); LLPointer getUIImage(const std::string& name, S32 priority = 0); - LLVector2 mGLScaleFactor; - protected: // since LLRender2D has no control of image provider's lifecycle // we need a way to tell LLRender2D that provider died and diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp index 098621b543..04485c6262 100644 --- a/indra/llui/llaccordionctrltab.cpp +++ b/indra/llui/llaccordionctrltab.cpp @@ -1006,7 +1006,7 @@ void LLAccordionCtrlTab::drawChild(const LLRect& root_rect,LLView* child) LLRect screen_rect; localRectToScreen(child->getRect(),&screen_rect); - if ( root_rect.overlaps(screen_rect) && LLUI::getInstance()->mDirtyRect.overlaps(screen_rect)) + if ( root_rect.overlaps(screen_rect) && sDirtyRect.overlaps(screen_rect)) { gGL.matrixMode(LLRender::MM_MODELVIEW); LLUI::pushMatrix(); diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp index e8c5260d51..fff916fc7e 100644 --- a/indra/llui/llconsole.cpp +++ b/indra/llui/llconsole.cpp @@ -219,7 +219,9 @@ void LLConsole::draw() // Different draw options //LLUIImagePtr imagep = LLUI::getUIImage("transparent"); - //F32 console_opacity = llclamp(LLUI::getInstance()->mSettingGroups["config"]->getF32("ConsoleBackgroundOpacity"), 0.f, 1.f); + //static LLCachedControl console_bg_opacity(*LLUI::getInstance()->mSettingGroups["config"], "ConsoleBackgroundOpacity", 0.7f); + //F32 console_opacity = llclamp(console_bg_opacity(), 0.f, 1.f); + //LLColor4 color = LLUIColorTable::instance().getColor("ConsoleBackground"); //color.mV[VALPHA] *= console_opacity; diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 508c974415..2615114d0c 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -417,13 +417,15 @@ void LLFloater::layoutDragHandle() // static void LLFloater::updateActiveFloaterTransparency() { - sActiveControlTransparency = LLUI::getInstance()->mSettingGroups["config"]->getF32("ActiveFloaterTransparency"); + static LLCachedControl active_transparency(*LLUI::getInstance()->mSettingGroups["config"], "ActiveFloaterTransparency", 1.f); + sActiveControlTransparency = active_transparency; } // static void LLFloater::updateInactiveFloaterTransparency() { - sInactiveControlTransparency = LLUI::getInstance()->mSettingGroups["config"]->getF32("InactiveFloaterTransparency"); + static LLCachedControl inactive_transparency(*LLUI::getInstance()->mSettingGroups["config"], "InactiveFloaterTransparency", 0.95f); + sInactiveControlTransparency = inactive_transparency; } void LLFloater::addResizeCtrls() diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index 4812de1109..de77a2c98c 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -346,9 +346,9 @@ static LLTrace::BlockTimerStatHandle FTM_FILTER("Filter Folder View"); void LLFolderView::filter( LLFolderViewFilter& filter ) { LL_RECORD_BLOCK_TIME(FTM_FILTER); - static LLCachedControl filter_visible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameVisible", 10); - static LLCachedControl filter_hidden(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameUnvisible", 1); - filter.resetTime(llclamp(mParentPanel.get()->getVisible() ? filter_visible() : filter_hidden(), 1, 100)); + static LLCachedControl time_visible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameVisible", 10); + static LLCachedControl time_invisible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameUnvisible", 1); + filter.resetTime(llclamp((mParentPanel.get()->getVisible() ? time_visible() : time_invisible()), 1, 100)); // Note: we filter the model, not the view getViewModelItem()->filter(filter); @@ -685,11 +685,8 @@ void LLFolderView::draw() closeAutoOpenedFolders(); } - // Performance improvement - //if (mSearchTimer.getElapsedTimeF32() > LLUI::getInstance()->mSettingGroups["config"]->getF32("TypeAheadTimeout") || !mSearchString.size()) - static LLCachedControl typeAheadTimeout(*LLUI::getInstance()->mSettingGroups["config"], "TypeAheadTimeout"); - if (mSearchTimer.getElapsedTimeF32() > typeAheadTimeout || !mSearchString.size()) - // + static LLCachedControl type_ahead_timeout(*LLUI::getInstance()->mSettingGroups["config"], "TypeAheadTimeout", 1.5f); + if (mSearchTimer.getElapsedTimeF32() > type_ahead_timeout || !mSearchString.size()) { mSearchString.clear(); } diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index ac47494655..64d702a612 100644 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -1053,9 +1053,10 @@ void LLFolderViewItem::draw() // if (filter_string_length > 0) { - F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mViewModelItem->getFilterStringOffset()); + S32 filter_offset = mViewModelItem->getFilterStringOffset(); + F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, filter_offset + filter_string_length) - font->getWidthF32(combined_string, filter_offset, filter_string_length); F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad - (F32)TOP_PAD; - font->renderUTF8( combined_string, mViewModelItem->getFilterStringOffset(), match_string_left, yy, + font->renderUTF8( combined_string, filter_offset, match_string_left, yy, sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, filter_string_length, S32_MAX, &right_x, FALSE ); } @@ -1722,7 +1723,7 @@ void LLFolderViewFolder::destroyView() // extractItem() removes the specified item from the folder, but // doesn't delete it. -void LLFolderViewFolder::extractItem( LLFolderViewItem* item ) +void LLFolderViewFolder::extractItem( LLFolderViewItem* item, bool deparent_model ) { if (item->isSelected()) getRoot()->clearSelection(); @@ -1745,7 +1746,11 @@ void LLFolderViewFolder::extractItem( LLFolderViewItem* item ) mItems.erase(it); } //item has been removed, need to update filter - getViewModelItem()->removeChild(item->getViewModelItem()); + if (deparent_model) + { + // in some cases model does not belong to parent view, is shared between views + getViewModelItem()->removeChild(item->getViewModelItem()); + } //because an item is going away regardless of filter status, force rearrange requestArrange(); removeChild(item); diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h index 7baf88a629..72bb926163 100644 --- a/indra/llui/llfolderviewitem.h +++ b/indra/llui/llfolderviewitem.h @@ -402,7 +402,7 @@ public: // extractItem() removes the specified item from the folder, but // doesn't delete it. - virtual void extractItem( LLFolderViewItem* item ); + virtual void extractItem( LLFolderViewItem* item, bool deparent_model = true); // This function is called by a child that needs to be resorted. void resort(LLFolderViewItem* item); diff --git a/indra/llui/llfolderviewmodel.cpp b/indra/llui/llfolderviewmodel.cpp index ea106b5fae..93122503d1 100644 --- a/indra/llui/llfolderviewmodel.cpp +++ b/indra/llui/llfolderviewmodel.cpp @@ -48,9 +48,9 @@ std::string LLFolderViewModelCommon::getStatusText() void LLFolderViewModelCommon::filter() { - static LLCachedControl filter_visible(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameVisible", 10); - getFilter().resetTime(llclamp(filter_visible(), 1, 100)); - mFolderView->getViewModelItem()->filter(getFilter()); + static LLCachedControl max_time(*LLUI::getInstance()->mSettingGroups["config"], "FilterItemsMaxTimePerFrameVisible", 10); + getFilter().resetTime(llclamp(max_time(), 1, 100)); + mFolderView->getViewModelItem()->filter(getFilter()); } bool LLFolderViewModelItemCommon::hasFilterStringMatch() diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index e914bbdae2..73df98870b 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -3378,7 +3378,11 @@ void LLMenuGL::showPopup(LLView* spawning_view, LLMenuGL* menu, S32 x, S32 y, S3 CURSOR_WIDTH + MOUSE_CURSOR_PADDING * 2, CURSOR_HEIGHT + MOUSE_CURSOR_PADDING * 2); menu->translateIntoRectWithExclusion( menu_region_rect, mouse_rect ); - if (menu->getRect().mTop > menu_region_rect.mTop) + // FIRE-31065: Make sure menu is shown on the screen properly + //if (menu->getRect().mTop > menu_region_rect.mTop) + if (menu->getRect().mTop > menu_region_rect.mTop || + menu->getRect().mBottom < menu_region_rect.mBottom) + // { // not enough space: align with top, ignore exclusion menu->translateIntoRect( menu_region_rect ); diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp index acfe4a0cba..f89064d59a 100644 --- a/indra/llui/llmultislider.cpp +++ b/indra/llui/llmultislider.cpp @@ -136,6 +136,7 @@ LLMultiSlider::LLMultiSlider(const LLMultiSlider::Params& p) } } + mRoundedSquareImgp = LLUI::getUIImage("Rounded_Square"); if (p.thumb_image.isProvided()) { mThumbImagep = LLUI::getUIImage(p.thumb_image()); @@ -666,8 +667,6 @@ void LLMultiSlider::draw() F32 opacity = getEnabled() ? 1.f : 0.3f; // Track - LLUIImagePtr thumb_imagep = LLUI::getUIImage("Rounded_Square"); - static LLUICachedControl multi_track_height_width ("UIMultiTrackHeight", 0); S32 height_offset = 0; S32 width_offset = 0; @@ -685,7 +684,7 @@ void LLMultiSlider::draw() if(mDrawTrack) { track_rect.stretch(-1); - thumb_imagep->draw(track_rect, mTrackColor.get() % opacity); + mRoundedSquareImgp->draw(track_rect, mTrackColor.get() % opacity); } // if we're supposed to use a drawn triangle @@ -704,7 +703,7 @@ void LLMultiSlider::draw() mTriangleColor.get() % opacity, TRUE); } } - else if (!thumb_imagep && !mThumbImagep) + else if (!mRoundedSquareImgp && !mThumbImagep) { // draw all the thumbs curSldrIt = mThumbRects.end(); @@ -757,7 +756,7 @@ void LLMultiSlider::draw() } else { - thumb_imagep->drawSolid(mDragStartThumbRect, mThumbCenterColor.get() % 0.3f); + mRoundedSquareImgp->drawSolid(mDragStartThumbRect, mThumbCenterColor.get() % 0.3f); } } @@ -772,7 +771,7 @@ void LLMultiSlider::draw() } else { - thumb_imagep->drawBorder(mThumbRects[mCurSlider], gFocusMgr.getFocusColor(), gFocusMgr.getFocusFlashWidth()); + mRoundedSquareImgp->drawBorder(mThumbRects[mCurSlider], gFocusMgr.getFocusColor(), gFocusMgr.getFocusFlashWidth()); } } } @@ -784,7 +783,7 @@ void LLMultiSlider::draw() } else { - thumb_imagep->drawBorder(mThumbRects[mHoverSlider], gFocusMgr.getFocusColor(), gFocusMgr.getFocusFlashWidth()); + mRoundedSquareImgp->drawBorder(mThumbRects[mHoverSlider], gFocusMgr.getFocusColor(), gFocusMgr.getFocusFlashWidth()); } } @@ -822,11 +821,11 @@ void LLMultiSlider::draw() } else if (capture == this) { - thumb_imagep->drawSolid(mIt->second, curThumbColor); + mRoundedSquareImgp->drawSolid(mIt->second, curThumbColor); } else { - thumb_imagep->drawSolid(mIt->second, curThumbColor % opacity); + mRoundedSquareImgp->drawSolid(mIt->second, curThumbColor % opacity); } } @@ -846,11 +845,11 @@ void LLMultiSlider::draw() } else if (capture == this) { - thumb_imagep->drawSolid(curSldrIt->second, mThumbCenterSelectedColor.get()); + mRoundedSquareImgp->drawSolid(curSldrIt->second, mThumbCenterSelectedColor.get()); } else { - thumb_imagep->drawSolid(curSldrIt->second, mThumbCenterSelectedColor.get() % opacity); + mRoundedSquareImgp->drawSolid(curSldrIt->second, mThumbCenterSelectedColor.get() % opacity); } } if(hoverSldrIt != mThumbRects.end()) @@ -861,7 +860,7 @@ void LLMultiSlider::draw() } else { - thumb_imagep->drawSolid(hoverSldrIt->second, mThumbCenterSelectedColor.get()); + mRoundedSquareImgp->drawSolid(hoverSldrIt->second, mThumbCenterSelectedColor.get()); } } } diff --git a/indra/llui/llmultislider.h b/indra/llui/llmultislider.h index 99a78d6e09..3cb4b760b0 100644 --- a/indra/llui/llmultislider.h +++ b/indra/llui/llmultislider.h @@ -150,6 +150,7 @@ protected: LLUIColor mDisabledThumbColor; LLUIColor mTriangleColor; LLUIImagePtr mThumbImagep; //blimps on the slider, for now no 'disabled' support + LLUIImagePtr mRoundedSquareImgp; //blimps on the slider, for now no 'disabled' support const EOrientation mOrientation; diff --git a/indra/llui/llnotificationptr.h b/indra/llui/llnotificationptr.h index acc047527f..580f353c7d 100644 --- a/indra/llui/llnotificationptr.h +++ b/indra/llui/llnotificationptr.h @@ -27,9 +27,8 @@ // Many classes just store a single LLNotificationPtr // and llnotifications.h is very large, so define this ligher header. -#include class LLNotification; -typedef boost::shared_ptr LLNotificationPtr; +typedef std::shared_ptr LLNotificationPtr; #endif diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h index 08bddd9536..8ec04d2bd5 100644 --- a/indra/llui/llnotifications.h +++ b/indra/llui/llnotifications.h @@ -85,7 +85,6 @@ #include #include -#include #include #include #include @@ -307,7 +306,7 @@ typedef boost::shared_ptr LLNotificationVisibility */ class LLNotification : boost::noncopyable, - public boost::enable_shared_from_this + public std::enable_shared_from_this { LOG_CLASS(LLNotification); friend class LLNotifications; @@ -763,7 +762,10 @@ public: : mFilter(filter), mItems() {} - virtual ~LLNotificationChannelBase() {} + virtual ~LLNotificationChannelBase() + { + mItems.clear(); + } // you can also connect to a Channel, so you can be notified of // changes to this channel LLBoundListener connectChanged(const LLEventListener& slot) @@ -893,6 +895,7 @@ class LLNotifications : { LLSINGLETON(LLNotifications); LOG_CLASS(LLNotifications); + virtual ~LLNotifications() {} public: @@ -1093,7 +1096,11 @@ public: LLPersistentNotificationChannel() : LLNotificationChannel("Persistent", "Visible", ¬ificationFilter) {} - virtual ~LLPersistentNotificationChannel() {} + + virtual ~LLPersistentNotificationChannel() + { + mHistory.clear(); + } typedef std::vector history_list_t; history_list_t::iterator beginHistory() { sortHistory(); return mHistory.begin(); } diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 3c94022ac4..ee5873885b 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -1336,7 +1336,7 @@ BOOL LLToolBarButton::handleHover(S32 x, S32 y, MASK mask) BOOL handled = FALSE; S32 mouse_distance_squared = (x - mMouseDownX) * (x - mMouseDownX) + (y - mMouseDownY) * (y - mMouseDownY); - S32 drag_threshold = LLUI::getInstance()->mSettingGroups["config"]->getS32("DragAndDropDistanceThreshold"); + static LLCachedControl drag_threshold(*LLUI::getInstance()->mSettingGroups["config"], "DragAndDropDistanceThreshold", 3); if (mouse_distance_squared > drag_threshold * drag_threshold && hasMouseCapture() && mStartDragItemCallback && mHandleDragItemCallback) diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index 146068b4db..92f7251220 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -358,8 +358,8 @@ void LLToolTip::draw() if (mFadeTimer.getStarted()) { - F32 tool_tip_fade_time = LLUI::getInstance()->mSettingGroups["config"]->getF32("ToolTipFadeTime"); - alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, tool_tip_fade_time, 1.f, 0.f); + static LLCachedControl tool_tip_fade_time(*LLUI::getInstance()->mSettingGroups["config"], "ToolTipFadeTime", 0.2f); + alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, tool_tip_fade_time(), 1.f, 0.f); if (alpha == 0.f) { // finished fading out, so hide ourselves diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 6ec59bafaa..493060886c 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -178,7 +178,6 @@ mAudioCallback(audio_callback), mDeferredAudioCallback(deferred_audio_callback), mWindow(NULL), // set later in startup mRootView(NULL), -mDirty(FALSE), mHelpImpl(NULL) { LLRender2D::initParamSingleton(image_provider); @@ -230,19 +229,6 @@ void LLUI::setPopupFuncs(const add_popup_t& add_popup, const remove_popup_t& rem mClearPopupsFunc = clear_popups; } -void LLUI::dirtyRect(LLRect rect) -{ - if (!mDirty) - { - mDirtyRect = rect; - mDirty = TRUE; - } - else - { - mDirtyRect.unionWith(rect); - } -} - void LLUI::setMousePositionScreen(S32 x, S32 y) { #if defined(LL_DARWIN) @@ -577,6 +563,18 @@ const LLView* LLUI::resolvePath(const LLView* context, const std::string& path) return context; } +//static +LLVector2& LLUI::getScaleFactor() +{ + return LLRender::sUIGLScaleFactor; +} + +//static +void LLUI::setScaleFactor(const LLVector2& scale_factor) +{ + LLRender::sUIGLScaleFactor = scale_factor; +} + // LLLocalClipRect and LLScreenClipRect moved to lllocalcliprect.h/cpp diff --git a/indra/llui/llui.h b/indra/llui/llui.h index c6ed2a97c1..4d1fd936d8 100644 --- a/indra/llui/llui.h +++ b/indra/llui/llui.h @@ -250,10 +250,6 @@ public: void setPopupFuncs(const add_popup_t& add_popup, const remove_popup_t&, const clear_popups_t& ); - LLRect mDirtyRect; - BOOL mDirty; - void dirtyRect(LLRect rect); - // Return the ISO639 language name ("en", "ko", etc.) for the viewer UI. // http://www.loc.gov/standards/iso639-2/php/code_list.php // FIRE-16709: Bypass FSEnabledLanguages for llGetAgentLanguage @@ -321,14 +317,14 @@ public: void positionViewNearMouse(LLView* view, S32 spawn_x = S32_MAX, S32 spawn_y = S32_MAX); // LLRender2D wrappers - static void pushMatrix() { LLRender2D::getInstance()->pushMatrix(); } - static void popMatrix() { LLRender2D::getInstance()->popMatrix(); } - static void loadIdentity() { LLRender2D::getInstance()->loadIdentity(); } - static void translate(F32 x, F32 y, F32 z = 0.0f) { LLRender2D::getInstance()->translate(x, y, z); } + static void pushMatrix() { LLRender2D::pushMatrix(); } + static void popMatrix() { LLRender2D::popMatrix(); } + static void loadIdentity() { LLRender2D::loadIdentity(); } + static void translate(F32 x, F32 y, F32 z = 0.0f) { LLRender2D::translate(x, y, z); } - static LLVector2& getScaleFactor() { return LLRender2D::getInstance()->mGLScaleFactor; } - static void setScaleFactor(const LLVector2& scale_factor) { LLRender2D::getInstance()->setScaleFactor(scale_factor); } - static void setLineWidth(F32 width) { LLRender2D::getInstance()->setLineWidth(width); } + static LLVector2& getScaleFactor(); + static void setScaleFactor(const LLVector2& scale_factor); + static void setLineWidth(F32 width) { LLRender2D::setLineWidth(width); } static LLPointer getUIImageByID(const LLUUID& image_id, S32 priority = 0) { return LLRender2D::getInstance()->getUIImageByID(image_id, priority); } static LLPointer getUIImage(const std::string& name, S32 priority = 0) diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index 0d8f3be6d4..03e37ff69f 100644 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -179,7 +179,7 @@ void LLUrlEntryBase::callObservers(const std::string &id, bool LLUrlEntryBase::isLinkDisabled() const { // this allows us to have a global setting to turn off text hyperlink highlighting/action - bool globally_disabled = LLUI::getInstance()->mSettingGroups["config"]->getBOOL("DisableTextHyperlinkActions"); + static LLCachedControl globally_disabled(*LLUI::getInstance()->mSettingGroups["config"], "DisableTextHyperlinkActions", false); return globally_disabled; } @@ -529,7 +529,9 @@ LLUrlEntrySecondlifeURL::LLUrlEntrySecondlifeURL() "|" "(https://([-\\w\\.]*\\.)?(secondlife|lindenlab|tilia-inc)\\.com(:\\d{1,5})?)" "|" - "(https://([-\\w\\.]*\\.)?secondlifegrid\\.net(:\\d{1,5})?))" + "(https://([-\\w\\.]*\\.)?secondlifegrid\\.net(:\\d{1,5})?)" + "|" + "(https?://([-\\w\\.]*\\.)?secondlife\\.io(:\\d{1,5})?))" "\\/\\S*", boost::regex::perl|boost::regex::icase); @@ -1275,7 +1277,7 @@ std::string LLUrlEntryPlace::getLocation(const std::string &url) const // LLUrlEntryRegion::LLUrlEntryRegion() { - mPattern = boost::regex("secondlife:///app/region/[^/\\s]+(/\\d+)?(/\\d+)?(/\\d+)?/?", + mPattern = boost::regex("secondlife:///app/region/[A-Za-z0-9()_%]+(/\\d+)?(/\\d+)?(/\\d+)?/?", boost::regex::perl|boost::regex::icase); mMenuName = "menu_url_slurl.xml"; mTooltip = LLTrans::getString("TooltipSLURL"); diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 654f5d63dd..7aea1e7a9e 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -65,6 +65,8 @@ static const S32 LINE_HEIGHT = 15; S32 LLView::sDepth = 0; bool LLView::sDebugRects = false; +bool LLView::sIsRectDirty = false; +LLRect LLView::sDirtyRect; bool LLView::sDebugRectsShowNames = true; bool LLView::sDebugKeys = false; bool LLView::sDebugMouseHandling = false; @@ -941,14 +943,16 @@ BOOL LLView::handleToolTip(S32 x, S32 y, MASK mask) std::string tooltip = getToolTip(); if (!tooltip.empty()) { + static LLCachedControl tooltip_fast_delay(*LLUI::getInstance()->mSettingGroups["config"], "ToolTipFastDelay", 0.1f); + static LLCachedControl tooltip_delay(*LLUI::getInstance()->mSettingGroups["config"], "ToolTipDelay", 0.7f); + static LLCachedControl allow_ui_tooltips(*LLUI::getInstance()->mSettingGroups["config"], "BasicUITooltips", true); // allow "scrubbing" over ui by showing next tooltip immediately // if previous one was still visible F32 timeout = LLToolTipMgr::instance().toolTipVisible() - ? LLUI::getInstance()->mSettingGroups["config"]->getF32( "ToolTipFastDelay" ) - : LLUI::getInstance()->mSettingGroups["config"]->getF32( "ToolTipDelay" ); + ? tooltip_fast_delay + : tooltip_delay; // Even if we don't show tooltips, consume the event, nothing below should show tooltip - bool allow_ui_tooltips = LLUI::getInstance()->mSettingGroups["config"]->getBOOL("BasicUITooltips"); if (allow_ui_tooltips) { LLToolTipMgr::instance().show(LLToolTip::Params() @@ -1245,7 +1249,7 @@ void LLView::drawChildren() if (viewp->getVisible() && viewp->getRect().isValid()) { LLRect screen_rect = viewp->calcScreenRect(); - if ( rootp->getLocalRect().overlaps(screen_rect) && LLUI::getInstance()->mDirtyRect.overlaps(screen_rect)) + if ( rootp->getLocalRect().overlaps(screen_rect) && sDirtyRect.overlaps(screen_rect)) { LLUI::pushMatrix(); { @@ -1287,7 +1291,15 @@ void LLView::dirtyRect() parent = parent->getParent(); } - LLUI::getInstance()->dirtyRect(cur->calcScreenRect()); + if (!sIsRectDirty) + { + sDirtyRect = cur->calcScreenRect(); + sIsRectDirty = true; + } + else + { + sDirtyRect.unionWith(cur->calcScreenRect()); + } } //Draw a box for debugging. diff --git a/indra/llui/llview.h b/indra/llui/llview.h index ae24ca5c0b..a0e948a8fd 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -671,6 +671,9 @@ public: // Draw debug rectangles around widgets to help with alignment and spacing static bool sDebugRects; + static bool sIsRectDirty; + static LLRect sDirtyRect; + // Draw widget names and sizes when drawing debug rectangles, turning this // off is useful to make the rectangles themselves easier to see. static bool sDebugRectsShowNames; diff --git a/indra/llui/tests/llurlentry_test.cpp b/indra/llui/tests/llurlentry_test.cpp index 4a4fdb72e3..1a474cca90 100644 --- a/indra/llui/tests/llurlentry_test.cpp +++ b/indra/llui/tests/llurlentry_test.cpp @@ -739,11 +739,6 @@ namespace tut "XXX secondlife:///app/region/Burning%20Life%20(Hyper)/27/210/30 XXX", "secondlife:///app/region/Burning%20Life%20(Hyper)/27/210/30"); - // DEV-35459: SLURLs and teleport Links not parsed properly - testRegex("Region with quote", url, - "XXX secondlife:///app/region/A'ksha%20Oasis/41/166/701 XXX", - "secondlife:///app/region/A%27ksha%20Oasis/41/166/701"); - // Rendering tests. testLabel("Render /app/region/Ahern/50/50/50/", url, "secondlife:///app/region/Ahern/50/50/50/", diff --git a/indra/mac_crash_logger/README.txt b/indra/mac_crash_logger/README.txt new file mode 100644 index 0000000000..6932a8d9c3 --- /dev/null +++ b/indra/mac_crash_logger/README.txt @@ -0,0 +1,3 @@ +This component is no longer used in Linden Lab builds. +Change requests to support continued use by open source +builds are welcome. diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 1c4aaed83f..4dbf2bcd42 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -8,9 +8,7 @@ include(00-Common) include(Linking) include(Boost) -if (BUGSPLAT_DB) - include(bugsplat) -endif (BUGSPLAT_DB) +include(bugsplat) include(BuildPackagesInfo) include(BuildVersion) include(CMakeCopyIfDifferent) @@ -110,18 +108,18 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR} ) -if (BUGSPLAT_DB) - include_directories( - ${BUGSPLAT_INCLUDE_DIR} - ) -endif (BUGSPLAT_DB) - include_directories(SYSTEM ${LLCOMMON_SYSTEM_INCLUDE_DIRS} ${LLXML_SYSTEM_INCLUDE_DIRS} ${LLPHYSICSEXTENSIONS_INCLUDE_DIRS} ) +if (USE_BUGSPLAT) + include_directories(AFTER + ${BUGSPLAT_INCLUDE_DIR} + ) +endif (USE_BUGSPLAT) + set(viewer_SOURCE_FILES # alfloaterregiontracker.cpp @@ -1744,11 +1742,11 @@ if (DARWIN) ${COREAUDIO_LIBRARY} ) - if (BUGSPLAT_DB) + if (USE_BUGSPLAT) list(APPEND viewer_LIBRARIES ${BUGSPLAT_LIBRARIES} ) - endif (BUGSPLAT_DB) + endif (USE_BUGSPLAT) # Add resource files to the project. set(viewer_RESOURCE_FILES @@ -2196,10 +2194,10 @@ if (SDL_FOUND) ) endif (SDL_FOUND) -if (BUGSPLAT_DB) +if (USE_BUGSPLAT) set_property(TARGET ${VIEWER_BINARY_NAME} - PROPERTY COMPILE_DEFINITIONS "LL_BUGSPLAT") -endif (BUGSPLAT_DB) + PROPERTY COMPILE_DEFINITIONS "${BUGSPLAT_DEFINE}") +endif (USE_BUGSPLAT) # add package files file(GLOB EVENT_HOST_SCRIPT_GLOB_LIST @@ -2285,9 +2283,12 @@ if (WINDOWS) media_plugin_cef media_plugin_libvlc #media_plugin_example # Don't package example plugin - windows-crash-logger ) + if (NOT USE_BUGSPLAT) + LIST(APPEND COPY_INPUT_DEPENDENCIES windows-crash-logger) + endif (NOT USE_BUGSPLAT) + # Only copy OpenJPEG dll if needed if (NOT USE_KDU) list(APPEND COPY_INPUT_DEPENDENCIES @@ -2361,10 +2362,11 @@ if (WINDOWS) add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts) endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts) - add_dependencies(${VIEWER_BINARY_NAME} - SLPlugin - windows-crash-logger - ) + add_dependencies(${VIEWER_BINARY_NAME} SLPlugin) + + if (NOT USE_BUGSPLAT) + add_dependencies(${VIEWER_BINARY_NAME} windows-crash-logger) + endif (NOT USE_BUGSPLAT) # sets the 'working directory' for debugging from visual studio. # Condition for version can be moved to requirements once build agents will be updated (see TOOL-3865) @@ -2527,11 +2529,11 @@ target_link_libraries(${VIEWER_BINARY_NAME} target_link_libraries(${VIEWER_BINARY_NAME} ${DISCORD_LIBRARY} ) -if (BUGSPLAT_DB) +if (USE_BUGSPLAT) target_link_libraries(${VIEWER_BINARY_NAME} ${BUGSPLAT_LIBRARIES} ) -endif (BUGSPLAT_DB) +endif (USE_BUGSPLAT) if (WINDOWS) target_link_libraries(${VIEWER_BINARY_NAME} @@ -2553,7 +2555,6 @@ if (LINUX) if (NOT ENABLE_MEDIA_PLUGINS) set(COPY_INPUT_DEPENDENCIES ${VIEWER_BINARY_NAME} - linux-crash-logger SLPlugin media_plugin_cef #media_plugin_gstreamer010 @@ -2571,6 +2572,10 @@ else (NOT ENABLE_MEDIA_PLUGINS) ) endif (NOT ENABLE_MEDIA_PLUGINS) + if (NOT USE_BUGSPLAT) + LIST(APPEND COPY_INPUT_DEPENDENCIES linux-crash-logger) + endif (NOT USE_BUGSPLAT) + add_custom_command( OUTPUT ${product}.tar.bz2 COMMAND ${PYTHON_EXECUTABLE} @@ -2719,8 +2724,11 @@ if (DARWIN) ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py ) - add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_libvlc media_plugin_cef mac-crash-logger) - add_dependencies(${VIEWER_BINARY_NAME} mac-crash-logger) + add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_libvlc media_plugin_cef) + + if (NOT USE_BUGSPLAT) + add_dependencies(${VIEWER_BINARY_NAME} mac-crash-logger) + endif (NOT USE_BUGSPLAT) if (ENABLE_SIGNING) set(SIGNING_SETTING "--signature=${SIGNING_IDENTITY}") @@ -2764,7 +2772,7 @@ endif (INSTALL) # Note that the conventional VIEWER_SYMBOL_FILE is set by ../../build.sh if (PACKAGE AND (RELEASE_CRASH_REPORTING OR NON_RELEASE_CRASH_REPORTING) AND VIEWER_SYMBOL_FILE) - if (NOT BUGSPLAT_DB) + if (NOT USE_BUGSPLAT) # Breakpad symbol-file generation set(SYMBOL_SEARCH_DIRS "") if (WINDOWS) @@ -2781,7 +2789,7 @@ if (PACKAGE AND (RELEASE_CRASH_REPORTING OR NON_RELEASE_CRASH_REPORTING) AND VIE list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/llplugin/slplugin/${CMAKE_CFG_INTDIR}") list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/mac_crash_logger/${CMAKE_CFG_INTDIR}") list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/gstreamer010/${CMAKE_CFG_INTDIR}") -## set(VIEWER_EXE_GLOBS "'${product}' SLPlugin mac-crash-logger") +## set(VIEWER_EXE_GLOBS "'${product}' SLPlugin") set(VIEWER_EXE_GLOBS "'${product}' mac-crash-logger") set(VIEWER_LIB_GLOB "*.dylib") endif (DARWIN) @@ -2820,7 +2828,7 @@ if (PACKAGE AND (RELEASE_CRASH_REPORTING OR NON_RELEASE_CRASH_REPORTING) AND VIE add_dependencies(generate_symbols "${VIEWER_COPY_MANIFEST}") endif (WINDOWS OR LINUX) - else (NOT BUGSPLAT_DB) + else (NOT USE_BUGSPLAT) # BugSplat symbol-file generation if (WINDOWS) # Just pack up a tarball containing only the .pdb file for the @@ -2904,9 +2912,9 @@ if (PACKAGE AND (RELEASE_CRASH_REPORTING OR NON_RELEASE_CRASH_REPORTING) AND VIE if (LINUX) # TBD endif (LINUX) - endif (NOT BUGSPLAT_DB) + endif (NOT USE_BUGSPLAT) - # for both BUGSPLAT_DB and Breakpad + # for both Bugsplat and Breakpad add_dependencies(llpackage generate_symbols) endif () @@ -3048,6 +3056,10 @@ if (LL_TESTS) ${BOOST_CONTEXT_LIBRARY} ) + LL_ADD_INTEGRATION_TEST(cppfeatures + "" + "${test_libs}" + ) LL_ADD_INTEGRATION_TEST(llsechandler_basic llsechandler_basic.cpp "${test_libs}" diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 22beed373e..a15225fad6 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -6.4.21 +6.4.22 diff --git a/indra/newview/app_settings/fs_static_assets/0b4ee516-5dfd-ef4b-4ab6-300bb44cb045.animatn b/indra/newview/app_settings/fs_static_assets/0b4ee516-5dfd-ef4b-4ab6-300bb44cb045.animatn new file mode 100644 index 0000000000..a44fbd473e Binary files /dev/null and b/indra/newview/app_settings/fs_static_assets/0b4ee516-5dfd-ef4b-4ab6-300bb44cb045.animatn differ diff --git a/indra/newview/app_settings/fs_static_assets/2029d88f-4efc-d72d-18d1-274caf9e9bc0.animatn b/indra/newview/app_settings/fs_static_assets/2029d88f-4efc-d72d-18d1-274caf9e9bc0.animatn new file mode 100644 index 0000000000..efc989bd9f Binary files /dev/null and b/indra/newview/app_settings/fs_static_assets/2029d88f-4efc-d72d-18d1-274caf9e9bc0.animatn differ diff --git a/indra/newview/app_settings/fs_static_assets/23f3163c-183b-dac0-0cdd-7811bcc3b5f1.animatn b/indra/newview/app_settings/fs_static_assets/23f3163c-183b-dac0-0cdd-7811bcc3b5f1.animatn new file mode 100644 index 0000000000..6f360d099f Binary files /dev/null and b/indra/newview/app_settings/fs_static_assets/23f3163c-183b-dac0-0cdd-7811bcc3b5f1.animatn differ diff --git a/indra/newview/app_settings/fs_static_assets/2cfeed25-04f9-caff-f3d2-776cddea5771.animatn b/indra/newview/app_settings/fs_static_assets/2cfeed25-04f9-caff-f3d2-776cddea5771.animatn new file mode 100644 index 0000000000..f52efc44b6 Binary files /dev/null and b/indra/newview/app_settings/fs_static_assets/2cfeed25-04f9-caff-f3d2-776cddea5771.animatn differ diff --git a/indra/newview/app_settings/fs_static_assets/3481ccd5-cc6c-65ca-c466-dc9df1bf3944.animatn b/indra/newview/app_settings/fs_static_assets/3481ccd5-cc6c-65ca-c466-dc9df1bf3944.animatn new file mode 100644 index 0000000000..386ce2bb64 Binary files /dev/null and b/indra/newview/app_settings/fs_static_assets/3481ccd5-cc6c-65ca-c466-dc9df1bf3944.animatn differ diff --git a/indra/newview/app_settings/fs_static_assets/6e83f685-2f53-278f-6758-b529327cce09.animatn b/indra/newview/app_settings/fs_static_assets/6e83f685-2f53-278f-6758-b529327cce09.animatn new file mode 100644 index 0000000000..48ff263e53 Binary files /dev/null and b/indra/newview/app_settings/fs_static_assets/6e83f685-2f53-278f-6758-b529327cce09.animatn differ diff --git a/indra/newview/app_settings/fs_static_assets/b23c52ef-0b15-11f2-852d-8fbd33417847.animatn b/indra/newview/app_settings/fs_static_assets/b23c52ef-0b15-11f2-852d-8fbd33417847.animatn new file mode 100644 index 0000000000..5c96c6822a Binary files /dev/null and b/indra/newview/app_settings/fs_static_assets/b23c52ef-0b15-11f2-852d-8fbd33417847.animatn differ diff --git a/indra/newview/app_settings/fs_static_assets/b2f312aa-2c1e-27b8-50fe-a0fa4ff3df4e.animatn b/indra/newview/app_settings/fs_static_assets/b2f312aa-2c1e-27b8-50fe-a0fa4ff3df4e.animatn new file mode 100644 index 0000000000..c0ff832512 Binary files /dev/null and b/indra/newview/app_settings/fs_static_assets/b2f312aa-2c1e-27b8-50fe-a0fa4ff3df4e.animatn differ diff --git a/indra/newview/app_settings/fs_static_assets/c17677b8-9fb2-8d6e-bbbe-219edce64ef4.animatn b/indra/newview/app_settings/fs_static_assets/c17677b8-9fb2-8d6e-bbbe-219edce64ef4.animatn new file mode 100644 index 0000000000..838a90ed86 Binary files /dev/null and b/indra/newview/app_settings/fs_static_assets/c17677b8-9fb2-8d6e-bbbe-219edce64ef4.animatn differ diff --git a/indra/newview/app_settings/fs_static_assets/cff5559e-c915-0b5e-d587-f789b5cc299a.animatn b/indra/newview/app_settings/fs_static_assets/cff5559e-c915-0b5e-d587-f789b5cc299a.animatn new file mode 100644 index 0000000000..e1a896372b Binary files /dev/null and b/indra/newview/app_settings/fs_static_assets/cff5559e-c915-0b5e-d587-f789b5cc299a.animatn differ diff --git a/indra/newview/app_settings/fs_static_assets/e14fee5f-3735-a236-2e26-94f92f366d81.animatn b/indra/newview/app_settings/fs_static_assets/e14fee5f-3735-a236-2e26-94f92f366d81.animatn new file mode 100644 index 0000000000..031007addb Binary files /dev/null and b/indra/newview/app_settings/fs_static_assets/e14fee5f-3735-a236-2e26-94f92f366d81.animatn differ diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index fadf7f8884..30733a2f4f 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -17944,19 +17944,6 @@ Change of this parameter will affect the layout of buttons in notification toast Value 1 - VivoxAutoPostCrashDumps Comment @@ -18093,8 +18080,7 @@ Change of this parameter will affect the layout of buttons in notification toast VivoxVadSensitivity Comment - - A dimensionless value between 0 and 100, indicating the 'sensitivity of the VAD'. Increasing this value corresponds to decreasing the sensitivity of the VAD and 0 is turned off altogether + A dimensionless value between 0 and 100, indicating the 'sensitivity of the VAD'. Increasing this value corresponds to decreasing the sensitivity of the VAD and 0 is turned off altogether Persist 1 Type diff --git a/indra/newview/app_settings/static_assets/00b48fa0-ac43-fadf-d061-6b726a24a90a.gesture b/indra/newview/app_settings/static_assets/00b48fa0-ac43-fadf-d061-6b726a24a90a.gesture new file mode 100644 index 0000000000..52188744f2 Binary files /dev/null and b/indra/newview/app_settings/static_assets/00b48fa0-ac43-fadf-d061-6b726a24a90a.gesture differ diff --git a/indra/newview/app_settings/static_assets/0247dbfa-f37e-64ab-d09f-2678884c7f4a.gesture b/indra/newview/app_settings/static_assets/0247dbfa-f37e-64ab-d09f-2678884c7f4a.gesture new file mode 100644 index 0000000000..38f8a9a86c Binary files /dev/null and b/indra/newview/app_settings/static_assets/0247dbfa-f37e-64ab-d09f-2678884c7f4a.gesture differ diff --git a/indra/newview/app_settings/static_assets/02862ac0-a61d-94c2-5d11-5f5d319b1256.clothing b/indra/newview/app_settings/static_assets/02862ac0-a61d-94c2-5d11-5f5d319b1256.clothing new file mode 100644 index 0000000000..d38b5a665a --- /dev/null +++ b/indra/newview/app_settings/static_assets/02862ac0-a61d-94c2-5d11-5f5d319b1256.clothing @@ -0,0 +1,28 @@ +LLWearable version 22 +RASL SOCKS BROWN + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 7 +parameters 4 +617 1 +818 1 +819 1 +820 1 +textures 1 +12 301a3097-2858-7614-829d-c5859741246f diff --git a/indra/newview/app_settings/static_assets/02c4eae7-b6a3-b4b0-44b0-b7b29d7f913f.clothing b/indra/newview/app_settings/static_assets/02c4eae7-b6a3-b4b0-44b0-b7b29d7f913f.clothing new file mode 100644 index 0000000000..56dc179222 --- /dev/null +++ b/indra/newview/app_settings/static_assets/02c4eae7-b6a3-b4b0-44b0-b7b29d7f913f.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL F SHOP SHOES FOOTSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id df110c10-72e6-40d6-8916-14b4b0366b18 + owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + last_owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 6 +parameters 10 +198 1 +503 .17 +508 -1 +513 0 +514 .37 +616 .1 +654 .08 +812 1 +813 1 +817 1 +textures 1 +7 3ab7e2fa-9572-ef36-1a30-d855dbea4f92 diff --git a/indra/newview/app_settings/static_assets/032ac149-dacd-e88a-5397-b9996b58f278.gesture b/indra/newview/app_settings/static_assets/032ac149-dacd-e88a-5397-b9996b58f278.gesture new file mode 100644 index 0000000000..35a5eaf56d Binary files /dev/null and b/indra/newview/app_settings/static_assets/032ac149-dacd-e88a-5397-b9996b58f278.gesture differ diff --git a/indra/newview/app_settings/static_assets/038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53.animatn b/indra/newview/app_settings/static_assets/038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53.animatn new file mode 100644 index 0000000000..7e742caf27 Binary files /dev/null and b/indra/newview/app_settings/static_assets/038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53.animatn differ diff --git a/indra/newview/app_settings/static_assets/0401dc30-0fdd-1fc3-3e51-c683fe117184.gesture b/indra/newview/app_settings/static_assets/0401dc30-0fdd-1fc3-3e51-c683fe117184.gesture new file mode 100644 index 0000000000..743188b6a4 Binary files /dev/null and b/indra/newview/app_settings/static_assets/0401dc30-0fdd-1fc3-3e51-c683fe117184.gesture differ diff --git a/indra/newview/app_settings/static_assets/04608b19-1668-399c-5790-b7df8d9dc9cf.gesture b/indra/newview/app_settings/static_assets/04608b19-1668-399c-5790-b7df8d9dc9cf.gesture new file mode 100644 index 0000000000..8a5329d456 Binary files /dev/null and b/indra/newview/app_settings/static_assets/04608b19-1668-399c-5790-b7df8d9dc9cf.gesture differ diff --git a/indra/newview/app_settings/static_assets/05ddbff8-aaa9-92a1-2b74-8fe77a29b445.animatn b/indra/newview/app_settings/static_assets/05ddbff8-aaa9-92a1-2b74-8fe77a29b445.animatn new file mode 100644 index 0000000000..ef5d535656 Binary files /dev/null and b/indra/newview/app_settings/static_assets/05ddbff8-aaa9-92a1-2b74-8fe77a29b445.animatn differ diff --git a/indra/newview/app_settings/static_assets/07d61cde-bc5b-f95f-f747-2e57eab4ef12.clothing b/indra/newview/app_settings/static_assets/07d61cde-bc5b-f95f-f747-2e57eab4ef12.clothing new file mode 100644 index 0000000000..10c8ad516b --- /dev/null +++ b/indra/newview/app_settings/static_assets/07d61cde-bc5b-f95f-f747-2e57eab4ef12.clothing @@ -0,0 +1,29 @@ +LLWearable version 22 +RASL F LEARN LEGGINGS + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 11 +parameters 5 +619 1 +624 1 +824 1 +825 1 +826 1 +textures 1 +17 6f5d29ce-548f-fdd0-b8e1-1f90a123b76e diff --git a/indra/newview/app_settings/static_assets/0813d01a-d3d3-32a4-48a3-26b6e1e01e39.gesture b/indra/newview/app_settings/static_assets/0813d01a-d3d3-32a4-48a3-26b6e1e01e39.gesture new file mode 100644 index 0000000000..8d0cfc8dc0 Binary files /dev/null and b/indra/newview/app_settings/static_assets/0813d01a-d3d3-32a4-48a3-26b6e1e01e39.gesture differ diff --git a/indra/newview/app_settings/static_assets/0836b67f-7f7b-f37b-c00a-460dc1521f5a.animatn b/indra/newview/app_settings/static_assets/0836b67f-7f7b-f37b-c00a-460dc1521f5a.animatn new file mode 100644 index 0000000000..eaa64a58c5 Binary files /dev/null and b/indra/newview/app_settings/static_assets/0836b67f-7f7b-f37b-c00a-460dc1521f5a.animatn differ diff --git a/indra/newview/app_settings/static_assets/08464f78-3a8e-2944-cba5-0c94aff3af29.animatn b/indra/newview/app_settings/static_assets/08464f78-3a8e-2944-cba5-0c94aff3af29.animatn new file mode 100644 index 0000000000..fdf5fc53a0 Binary files /dev/null and b/indra/newview/app_settings/static_assets/08464f78-3a8e-2944-cba5-0c94aff3af29.animatn differ diff --git a/indra/newview/app_settings/static_assets/0a3336cf-3ad1-012a-91c2-5b5620aaaef3.gesture b/indra/newview/app_settings/static_assets/0a3336cf-3ad1-012a-91c2-5b5620aaaef3.gesture new file mode 100644 index 0000000000..b7e1dfba90 Binary files /dev/null and b/indra/newview/app_settings/static_assets/0a3336cf-3ad1-012a-91c2-5b5620aaaef3.gesture differ diff --git a/indra/newview/app_settings/static_assets/0a9fb970-8b44-9114-d3a9-bf69cfe804d6.animatn b/indra/newview/app_settings/static_assets/0a9fb970-8b44-9114-d3a9-bf69cfe804d6.animatn new file mode 100644 index 0000000000..cf8bcf42ef Binary files /dev/null and b/indra/newview/app_settings/static_assets/0a9fb970-8b44-9114-d3a9-bf69cfe804d6.animatn differ diff --git a/indra/newview/app_settings/static_assets/0b29c4fd-9c3c-3047-fcb4-addd3e42a289.clothing b/indra/newview/app_settings/static_assets/0b29c4fd-9c3c-3047-fcb4-addd3e42a289.clothing new file mode 100644 index 0000000000..b89fabd12d --- /dev/null +++ b/indra/newview/app_settings/static_assets/0b29c4fd-9c3c-3047-fcb4-addd3e42a289.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL M EXPLORE TANK UP (WHITE) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 4 +parameters 10 +781 1 +800 1 +801 1 +802 1 +803 1 +804 1 +805 1 +828 0 +840 0 +868 0 +textures 1 +1 5ab7802c-a722-8cf0-66c6-6160efe4a130 diff --git a/indra/newview/app_settings/static_assets/0c5f60ae-1a54-1ee8-398d-7ed278552132.bodypart b/indra/newview/app_settings/static_assets/0c5f60ae-1a54-1ee8-398d-7ed278552132.bodypart new file mode 100644 index 0000000000..58e0881824 --- /dev/null +++ b/indra/newview/app_settings/static_assets/0c5f60ae-1a54-1ee8-398d-7ed278552132.bodypart @@ -0,0 +1,105 @@ +LLWearable version 22 +RASL M CREATE SHAPE (MIKO) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 0 +parameters 82 +1 .21 +2 -.21 +4 .26 +5 -.07 +6 .13 +7 -.04 +8 -.2 +10 .25 +11 .1 +12 .07 +13 .03 +14 .67 +15 -.2 +17 .14 +18 .5 +19 -.4 +20 -.04 +21 .26 +22 .02 +23 -.06 +24 -.1 +25 .53 +27 .43 +33 1.14 +34 -.02 +35 0 +36 -.9 +37 -.62 +38 .02 +80 1 +105 .5 +155 -.24 +157 .02 +185 -.6 +193 .65 +196 -1.07 +505 .61 +506 0 +507 0 +515 -1 +517 -.13 +518 -.19 +629 .43 +637 .03 +646 -.06 +647 .03 +649 .5 +650 .65 +652 .45 +653 .05 +656 0 +659 .62 +662 .5 +663 0 +664 0 +665 .08 +675 -.14 +676 -.4 +678 .41 +682 .59 +683 -.12 +684 0 +685 .19 +690 .41 +692 .36 +693 .2 +753 .65 +756 -.62 +758 -.54 +759 .45 +760 .11 +764 .44 +765 .29 +769 .47 +773 .43 +795 .23 +796 .21 +799 .52 +841 0 +842 -.24 +879 .08 +880 -.9 +textures 0 diff --git a/indra/newview/app_settings/static_assets/0ce71257-7a07-257f-f023-fd68575a3a4e.gesture b/indra/newview/app_settings/static_assets/0ce71257-7a07-257f-f023-fd68575a3a4e.gesture new file mode 100644 index 0000000000..8712d24674 Binary files /dev/null and b/indra/newview/app_settings/static_assets/0ce71257-7a07-257f-f023-fd68575a3a4e.gesture differ diff --git a/indra/newview/app_settings/static_assets/0eb702e2-cc5a-9a88-56a5-661a55c0676a.animatn b/indra/newview/app_settings/static_assets/0eb702e2-cc5a-9a88-56a5-661a55c0676a.animatn new file mode 100644 index 0000000000..96f40f1a87 Binary files /dev/null and b/indra/newview/app_settings/static_assets/0eb702e2-cc5a-9a88-56a5-661a55c0676a.animatn differ diff --git a/indra/newview/app_settings/static_assets/0eeb5ef7-10dd-4e4a-11a5-d053011fcdf2.gesture b/indra/newview/app_settings/static_assets/0eeb5ef7-10dd-4e4a-11a5-d053011fcdf2.gesture new file mode 100644 index 0000000000..514c7c3aba Binary files /dev/null and b/indra/newview/app_settings/static_assets/0eeb5ef7-10dd-4e4a-11a5-d053011fcdf2.gesture differ diff --git a/indra/newview/app_settings/static_assets/0f86e355-dd31-a61c-fdb0-3a96b9aad05f.animatn b/indra/newview/app_settings/static_assets/0f86e355-dd31-a61c-fdb0-3a96b9aad05f.animatn new file mode 100644 index 0000000000..05961c1872 Binary files /dev/null and b/indra/newview/app_settings/static_assets/0f86e355-dd31-a61c-fdb0-3a96b9aad05f.animatn differ diff --git a/indra/newview/app_settings/static_assets/11000694-3f41-adc2-606b-eee1d66f3724.animatn b/indra/newview/app_settings/static_assets/11000694-3f41-adc2-606b-eee1d66f3724.animatn new file mode 100644 index 0000000000..9489d963f9 Binary files /dev/null and b/indra/newview/app_settings/static_assets/11000694-3f41-adc2-606b-eee1d66f3724.animatn differ diff --git a/indra/newview/app_settings/static_assets/1232da7c-3d5b-a11b-cbee-d574aedc2e59.bodypart b/indra/newview/app_settings/static_assets/1232da7c-3d5b-a11b-cbee-d574aedc2e59.bodypart new file mode 100644 index 0000000000..2077eb4494 --- /dev/null +++ b/indra/newview/app_settings/static_assets/1232da7c-3d5b-a11b-cbee-d574aedc2e59.bodypart @@ -0,0 +1,105 @@ +LLWearable version 22 +RASL M SHOP SHAPE (REMY) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 0 +parameters 82 +1 .21 +2 -.27 +4 .29 +5 .22 +6 -.07 +7 -.14 +8 -.2 +10 1.2 +11 .5 +12 .46 +13 .28 +14 .56 +15 -.22 +17 -.05 +18 1.02 +19 -.45 +20 -.2 +21 .23 +22 .55 +23 -.12 +24 -.24 +25 -.11 +27 .43 +33 .93 +34 -.26 +35 .17 +36 -.68 +37 -.14 +38 -.12 +80 1 +105 .5 +155 -.53 +157 .03 +185 -.68 +193 .6 +196 -.95 +505 .31 +506 -.28 +507 0 +515 -1 +517 -.17 +518 -.08 +629 .37 +637 .06 +646 -.06 +647 -.11 +649 .5 +650 -.55 +652 .43 +653 .5 +656 0 +659 .55 +662 .5 +663 0 +664 0 +665 0 +675 -.08 +676 -.1 +678 .41 +682 .58 +683 -.11 +684 0 +685 .08 +690 .44 +692 .08 +693 .2 +753 .9 +756 -.78 +758 -.42 +759 .17 +760 .3 +764 .54 +765 .32 +769 .46 +773 .45 +795 .3 +796 .28 +799 .53 +841 0 +842 -.1 +879 .1 +880 -.95 +textures 0 diff --git a/indra/newview/app_settings/static_assets/13b0d1c4-eb3c-9b89-2f13-9c0a714aab9f.clothing b/indra/newview/app_settings/static_assets/13b0d1c4-eb3c-9b89-2f13-9c0a714aab9f.clothing new file mode 100644 index 0000000000..8edf121335 --- /dev/null +++ b/indra/newview/app_settings/static_assets/13b0d1c4-eb3c-9b89-2f13-9c0a714aab9f.clothing @@ -0,0 +1,33 @@ +LLWearable version 22 +RASL M SHOP SWEATER DOWN + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 5 +parameters 9 +625 0 +638 0 +806 1 +807 1 +808 1 +814 1 +815 .99 +816 .05 +869 0 +textures 1 +2 106c9f6c-dc86-85ef-84b8-767fc0caf7c4 diff --git a/indra/newview/app_settings/static_assets/149739c0-f677-4b4c-1587-e44be72dd7ef.bodypart b/indra/newview/app_settings/static_assets/149739c0-f677-4b4c-1587-e44be72dd7ef.bodypart new file mode 100644 index 0000000000..07db7550df --- /dev/null +++ b/indra/newview/app_settings/static_assets/149739c0-f677-4b4c-1587-e44be72dd7ef.bodypart @@ -0,0 +1,26 @@ +LLWearable version 22 +New Eyes + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id df110c10-72e6-40d6-8916-14b4b0366b18 + owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + last_owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + 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 07e1d75e-9312-ed2c-3c20-2d8a7e9109f0 diff --git a/indra/newview/app_settings/static_assets/15468e00-3400-bb66-cecc-646d7c14458e.animatn b/indra/newview/app_settings/static_assets/15468e00-3400-bb66-cecc-646d7c14458e.animatn new file mode 100644 index 0000000000..232b2b86f0 Binary files /dev/null and b/indra/newview/app_settings/static_assets/15468e00-3400-bb66-cecc-646d7c14458e.animatn differ diff --git a/indra/newview/app_settings/static_assets/159afee8-b7bf-c8fb-9c63-98276a1d6b28.gesture b/indra/newview/app_settings/static_assets/159afee8-b7bf-c8fb-9c63-98276a1d6b28.gesture new file mode 100644 index 0000000000..347aa6ad65 Binary files /dev/null and b/indra/newview/app_settings/static_assets/159afee8-b7bf-c8fb-9c63-98276a1d6b28.gesture differ diff --git a/indra/newview/app_settings/static_assets/15dd911d-be82-2856-26db-27659b142875.animatn b/indra/newview/app_settings/static_assets/15dd911d-be82-2856-26db-27659b142875.animatn new file mode 100644 index 0000000000..6a71abbbdd Binary files /dev/null and b/indra/newview/app_settings/static_assets/15dd911d-be82-2856-26db-27659b142875.animatn differ diff --git a/indra/newview/app_settings/static_assets/16803a9f-5140-e042-4d7b-d28ba247c325.animatn b/indra/newview/app_settings/static_assets/16803a9f-5140-e042-4d7b-d28ba247c325.animatn new file mode 100644 index 0000000000..4da6d2828f Binary files /dev/null and b/indra/newview/app_settings/static_assets/16803a9f-5140-e042-4d7b-d28ba247c325.animatn differ diff --git a/indra/newview/app_settings/static_assets/16ef95d1-2fe3-d4a3-509d-f03bb2d327ca.clothing b/indra/newview/app_settings/static_assets/16ef95d1-2fe3-d4a3-509d-f03bb2d327ca.clothing new file mode 100644 index 0000000000..426d21e6b2 --- /dev/null +++ b/indra/newview/app_settings/static_assets/16ef95d1-2fe3-d4a3-509d-f03bb2d327ca.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL M LOVE SHIRT UP (BLUE) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 4 +parameters 10 +781 1 +800 1 +801 1 +802 1 +803 1 +804 1 +805 1 +828 0 +840 0 +868 0 +textures 1 +1 9275f067-eff5-4a59-f98c-cd8a366e5426 diff --git a/indra/newview/app_settings/static_assets/17a387e1-28c7-e24b-4bfc-527b2d377a1b.clothing b/indra/newview/app_settings/static_assets/17a387e1-28c7-e24b-4bfc-527b2d377a1b.clothing new file mode 100644 index 0000000000..121aea9ab7 --- /dev/null +++ b/indra/newview/app_settings/static_assets/17a387e1-28c7-e24b-4bfc-527b2d377a1b.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +Male Designer Pants Shirt (Green) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 0008e000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 8 +parameters 9 +606 1 +607 1 +608 1 +609 1 +780 1 +834 1 +835 1 +836 1 +877 0 +textures 2 +13 7f2a3b5f-a5ef-d7a0-af6c-7f2cfc889fe1 +14 70ccbf04-adeb-d6b6-df7f-d9db89d53408 diff --git a/indra/newview/app_settings/static_assets/17c024cc-eef2-f6a0-3527-9869876d7752.animatn b/indra/newview/app_settings/static_assets/17c024cc-eef2-f6a0-3527-9869876d7752.animatn new file mode 100644 index 0000000000..a7a4e132e3 Binary files /dev/null and b/indra/newview/app_settings/static_assets/17c024cc-eef2-f6a0-3527-9869876d7752.animatn differ diff --git a/indra/newview/app_settings/static_assets/18b3a4b5-b463-bd48-e4b6-71eaac76c515.animatn b/indra/newview/app_settings/static_assets/18b3a4b5-b463-bd48-e4b6-71eaac76c515.animatn new file mode 100644 index 0000000000..c0382423eb Binary files /dev/null and b/indra/newview/app_settings/static_assets/18b3a4b5-b463-bd48-e4b6-71eaac76c515.animatn differ diff --git a/indra/newview/app_settings/static_assets/1910ffbd-096c-5eb7-19f5-8c99ab6a748c.gesture b/indra/newview/app_settings/static_assets/1910ffbd-096c-5eb7-19f5-8c99ab6a748c.gesture new file mode 100644 index 0000000000..eb6117afb8 Binary files /dev/null and b/indra/newview/app_settings/static_assets/1910ffbd-096c-5eb7-19f5-8c99ab6a748c.gesture differ diff --git a/indra/newview/app_settings/static_assets/19999406-3a3a-d58c-a2ac-d72e555dcf51.animatn b/indra/newview/app_settings/static_assets/19999406-3a3a-d58c-a2ac-d72e555dcf51.animatn new file mode 100644 index 0000000000..1f176d7fda Binary files /dev/null and b/indra/newview/app_settings/static_assets/19999406-3a3a-d58c-a2ac-d72e555dcf51.animatn differ diff --git a/indra/newview/app_settings/static_assets/1a2bd58e-87ff-0df8-0b4c-53e047b0bb6e.animatn b/indra/newview/app_settings/static_assets/1a2bd58e-87ff-0df8-0b4c-53e047b0bb6e.animatn new file mode 100644 index 0000000000..78fa39729a Binary files /dev/null and b/indra/newview/app_settings/static_assets/1a2bd58e-87ff-0df8-0b4c-53e047b0bb6e.animatn differ diff --git a/indra/newview/app_settings/static_assets/1a5fe8ac-a804-8a5d-7cbd-56bd83184568.animatn b/indra/newview/app_settings/static_assets/1a5fe8ac-a804-8a5d-7cbd-56bd83184568.animatn new file mode 100644 index 0000000000..3312789020 Binary files /dev/null and b/indra/newview/app_settings/static_assets/1a5fe8ac-a804-8a5d-7cbd-56bd83184568.animatn differ diff --git a/indra/newview/app_settings/static_assets/1ab1b236-cd08-21e6-0cbc-0d923fc6eca2.animatn b/indra/newview/app_settings/static_assets/1ab1b236-cd08-21e6-0cbc-0d923fc6eca2.animatn new file mode 100644 index 0000000000..9eb2468ef0 Binary files /dev/null and b/indra/newview/app_settings/static_assets/1ab1b236-cd08-21e6-0cbc-0d923fc6eca2.animatn differ diff --git a/indra/newview/app_settings/static_assets/1ac2c678-3ab4-410b-2aad-30a7dc9c4504.gesture b/indra/newview/app_settings/static_assets/1ac2c678-3ab4-410b-2aad-30a7dc9c4504.gesture new file mode 100644 index 0000000000..4db5269027 Binary files /dev/null and b/indra/newview/app_settings/static_assets/1ac2c678-3ab4-410b-2aad-30a7dc9c4504.gesture differ diff --git a/indra/newview/app_settings/static_assets/1b677754-5a07-641a-e989-34dcd985af1b.clothing b/indra/newview/app_settings/static_assets/1b677754-5a07-641a-e989-34dcd985af1b.clothing new file mode 100644 index 0000000000..0cfef0032c --- /dev/null +++ b/indra/newview/app_settings/static_assets/1b677754-5a07-641a-e989-34dcd985af1b.clothing @@ -0,0 +1,29 @@ +LLWearable version 22 +RASL F LOVE DRESS DOWN + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 11 +parameters 5 +619 1 +624 1 +824 1 +825 1 +826 1 +textures 1 +17 36589cd6-c6e0-f17e-9be5-8f08d3708bd7 diff --git a/indra/newview/app_settings/static_assets/1c7600d6-661f-b87b-efe2-d7421eb93c86.animatn b/indra/newview/app_settings/static_assets/1c7600d6-661f-b87b-efe2-d7421eb93c86.animatn new file mode 100644 index 0000000000..06a14fca82 Binary files /dev/null and b/indra/newview/app_settings/static_assets/1c7600d6-661f-b87b-efe2-d7421eb93c86.animatn differ diff --git a/indra/newview/app_settings/static_assets/1cb562b0-ba21-2202-efb3-30f82cdf9595.animatn b/indra/newview/app_settings/static_assets/1cb562b0-ba21-2202-efb3-30f82cdf9595.animatn new file mode 100644 index 0000000000..89e70a8c29 Binary files /dev/null and b/indra/newview/app_settings/static_assets/1cb562b0-ba21-2202-efb3-30f82cdf9595.animatn differ diff --git a/indra/newview/app_settings/static_assets/1f5466aa-2b68-e370-6bb5-a335e859afeb.gesture b/indra/newview/app_settings/static_assets/1f5466aa-2b68-e370-6bb5-a335e859afeb.gesture new file mode 100644 index 0000000000..3b167eb949 Binary files /dev/null and b/indra/newview/app_settings/static_assets/1f5466aa-2b68-e370-6bb5-a335e859afeb.gesture differ diff --git a/indra/newview/app_settings/static_assets/201f3fdf-cb1f-dbec-201f-7333e328ae7c.animatn b/indra/newview/app_settings/static_assets/201f3fdf-cb1f-dbec-201f-7333e328ae7c.animatn new file mode 100644 index 0000000000..d2dfc12cd4 Binary files /dev/null and b/indra/newview/app_settings/static_assets/201f3fdf-cb1f-dbec-201f-7333e328ae7c.animatn differ diff --git a/indra/newview/app_settings/static_assets/205ae4a8-42c6-1c5c-b142-672864fafe8a.bodypart b/indra/newview/app_settings/static_assets/205ae4a8-42c6-1c5c-b142-672864fafe8a.bodypart new file mode 100644 index 0000000000..843e7c53a9 --- /dev/null +++ b/indra/newview/app_settings/static_assets/205ae4a8-42c6-1c5c-b142-672864fafe8a.bodypart @@ -0,0 +1,52 @@ +LLWearable version 22 +RASL F EXPLORE SKIN (SOFIA) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 0008e000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 1 +parameters 26 +108 0 +110 0 +111 .5 +116 0 +117 0 +150 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 +textures 3 +0 f634e17f-3164-1dfe-508b-0e02547cebe4 +5 a6c6fd50-7d98-7afb-a7aa-348481f24c8a +6 193bacad-5558-5e52-f3aa-3192a568e9a1 diff --git a/indra/newview/app_settings/static_assets/20f063ea-8306-2562-0b07-5c853b37b31e.animatn b/indra/newview/app_settings/static_assets/20f063ea-8306-2562-0b07-5c853b37b31e.animatn new file mode 100644 index 0000000000..b14549416e Binary files /dev/null and b/indra/newview/app_settings/static_assets/20f063ea-8306-2562-0b07-5c853b37b31e.animatn differ diff --git a/indra/newview/app_settings/static_assets/2305bd75-1ca9-b03b-1faa-b176b8a8c49e.animatn b/indra/newview/app_settings/static_assets/2305bd75-1ca9-b03b-1faa-b176b8a8c49e.animatn new file mode 100644 index 0000000000..73a5768e2b Binary files /dev/null and b/indra/newview/app_settings/static_assets/2305bd75-1ca9-b03b-1faa-b176b8a8c49e.animatn differ diff --git a/indra/newview/app_settings/static_assets/230ff836-fe1e-ab33-80c6-ef029c658136.gesture b/indra/newview/app_settings/static_assets/230ff836-fe1e-ab33-80c6-ef029c658136.gesture new file mode 100644 index 0000000000..078d16ee86 Binary files /dev/null and b/indra/newview/app_settings/static_assets/230ff836-fe1e-ab33-80c6-ef029c658136.gesture differ diff --git a/indra/newview/app_settings/static_assets/2408fe9e-df1d-1d7d-f4ff-1384fa7b350f.animatn b/indra/newview/app_settings/static_assets/2408fe9e-df1d-1d7d-f4ff-1384fa7b350f.animatn new file mode 100644 index 0000000000..e47287c802 Binary files /dev/null and b/indra/newview/app_settings/static_assets/2408fe9e-df1d-1d7d-f4ff-1384fa7b350f.animatn differ diff --git a/indra/newview/app_settings/static_assets/245f3c54-f1c0-bf2e-811f-46d8eeb386e7.animatn b/indra/newview/app_settings/static_assets/245f3c54-f1c0-bf2e-811f-46d8eeb386e7.animatn new file mode 100644 index 0000000000..019bce405f Binary files /dev/null and b/indra/newview/app_settings/static_assets/245f3c54-f1c0-bf2e-811f-46d8eeb386e7.animatn differ diff --git a/indra/newview/app_settings/static_assets/25252e5b-394b-fdab-76ee-28980cd62f81.gesture b/indra/newview/app_settings/static_assets/25252e5b-394b-fdab-76ee-28980cd62f81.gesture new file mode 100644 index 0000000000..cdb18147df Binary files /dev/null and b/indra/newview/app_settings/static_assets/25252e5b-394b-fdab-76ee-28980cd62f81.gesture differ diff --git a/indra/newview/app_settings/static_assets/252acecb-a169-eff2-4601-b06bbeb91e84.gesture b/indra/newview/app_settings/static_assets/252acecb-a169-eff2-4601-b06bbeb91e84.gesture new file mode 100644 index 0000000000..d4406daf79 Binary files /dev/null and b/indra/newview/app_settings/static_assets/252acecb-a169-eff2-4601-b06bbeb91e84.gesture differ diff --git a/indra/newview/app_settings/static_assets/26a762c3-7164-0bbf-a7d6-ea097a6d0314.bodypart b/indra/newview/app_settings/static_assets/26a762c3-7164-0bbf-a7d6-ea097a6d0314.bodypart new file mode 100644 index 0000000000..5485883f01 --- /dev/null +++ b/indra/newview/app_settings/static_assets/26a762c3-7164-0bbf-a7d6-ea097a6d0314.bodypart @@ -0,0 +1,105 @@ +LLWearable version 22 +RASL F PLAY SHAPE (CLARA) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 0 +parameters 82 +1 .11 +2 -.31 +4 -.11 +5 -.08 +6 -.05 +7 .02 +8 -.42 +10 .84 +11 .24 +12 -.02 +13 0 +14 .61 +15 -.28 +17 .13 +18 .42 +19 -.35 +20 -.12 +21 .07 +22 .15 +23 -.34 +24 .11 +25 .1 +27 -.4 +33 .45 +34 0 +35 -.1 +36 -.94 +37 -.98 +38 -.18 +80 0 +105 .37 +155 -.46 +157 0 +185 -.72 +193 .56 +196 -.38 +505 .51 +506 -.68 +507 .04 +515 -1 +517 -.13 +518 .24 +629 .47 +637 .06 +646 -.15 +647 -.05 +649 .3 +650 -.8 +652 .35 +653 .23 +656 0 +659 .63 +662 .5 +663 0 +664 0 +665 .08 +675 -.19 +676 -.43 +678 .5 +682 .55 +683 -.17 +684 .18 +685 0 +690 .36 +692 .24 +693 .18 +753 .62 +756 -.42 +758 .06 +759 .17 +760 .85 +764 .28 +765 .2 +769 .2 +773 .51 +795 .24 +796 .11 +799 .55 +841 0 +842 .14 +879 0 +880 -.4 +textures 0 diff --git a/indra/newview/app_settings/static_assets/26cc2407-84b5-6887-4564-85a9b0cfb01f.gesture b/indra/newview/app_settings/static_assets/26cc2407-84b5-6887-4564-85a9b0cfb01f.gesture new file mode 100644 index 0000000000..123d418499 Binary files /dev/null and b/indra/newview/app_settings/static_assets/26cc2407-84b5-6887-4564-85a9b0cfb01f.gesture differ diff --git a/indra/newview/app_settings/static_assets/282d67ef-942e-27f4-9c7b-818f59967743.clothing b/indra/newview/app_settings/static_assets/282d67ef-942e-27f4-9c7b-818f59967743.clothing new file mode 100644 index 0000000000..444ee2853d --- /dev/null +++ b/indra/newview/app_settings/static_assets/282d67ef-942e-27f4-9c7b-818f59967743.clothing @@ -0,0 +1,33 @@ +LLWearable version 22 +RASL M LOVE SHIRT DOWN (BLUE) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 5 +parameters 9 +625 0 +638 0 +806 1 +807 1 +808 1 +814 1 +815 .99 +816 .05 +869 0 +textures 1 +2 1c8aa686-d913-3c2d-9c73-947cfae18da7 diff --git a/indra/newview/app_settings/static_assets/29a56cc8-3fcf-c575-02c7-14a303b12e17.clothing b/indra/newview/app_settings/static_assets/29a56cc8-3fcf-c575-02c7-14a303b12e17.clothing new file mode 100644 index 0000000000..f44730c489 --- /dev/null +++ b/indra/newview/app_settings/static_assets/29a56cc8-3fcf-c575-02c7-14a303b12e17.clothing @@ -0,0 +1,29 @@ +LLWearable version 22 +RASL F SHOP JEANS + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 11 +parameters 5 +619 1 +624 1 +824 1 +825 1 +826 1 +textures 1 +17 a77d7374-e4be-d4e3-9010-423a976d5da8 diff --git a/indra/newview/app_settings/static_assets/29f11d26-7d80-4b53-a97c-fce85d94e392.gesture b/indra/newview/app_settings/static_assets/29f11d26-7d80-4b53-a97c-fce85d94e392.gesture new file mode 100644 index 0000000000..6bd154bc4a Binary files /dev/null and b/indra/newview/app_settings/static_assets/29f11d26-7d80-4b53-a97c-fce85d94e392.gesture differ diff --git a/indra/newview/app_settings/static_assets/2b211c3e-d7c9-9e0e-0d96-e9357699bb25.clothing b/indra/newview/app_settings/static_assets/2b211c3e-d7c9-9e0e-0d96-e9357699bb25.clothing new file mode 100644 index 0000000000..5d8ec3acaa --- /dev/null +++ b/indra/newview/app_settings/static_assets/2b211c3e-d7c9-9e0e-0d96-e9357699bb25.clothing @@ -0,0 +1,33 @@ +LLWearable version 22 +RASL F CREATE SHIRT DOWN (BLUE) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 5 +parameters 9 +625 0 +638 0 +806 1 +807 1 +808 1 +814 1 +815 .99 +816 .05 +869 0 +textures 1 +2 2f739543-d501-94a0-a039-0885a6d80034 diff --git a/indra/newview/app_settings/static_assets/2b5a38b2-5e00-3a97-a495-4c826bc443e6.animatn b/indra/newview/app_settings/static_assets/2b5a38b2-5e00-3a97-a495-4c826bc443e6.animatn new file mode 100644 index 0000000000..b7f50ade77 Binary files /dev/null and b/indra/newview/app_settings/static_assets/2b5a38b2-5e00-3a97-a495-4c826bc443e6.animatn differ diff --git a/indra/newview/app_settings/static_assets/2ca8ddae-23ef-0132-d243-7ae953582dd0.clothing b/indra/newview/app_settings/static_assets/2ca8ddae-23ef-0132-d243-7ae953582dd0.clothing new file mode 100644 index 0000000000..09ac14893b --- /dev/null +++ b/indra/newview/app_settings/static_assets/2ca8ddae-23ef-0132-d243-7ae953582dd0.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL M LEARN TOP + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 8 +parameters 9 +606 1 +607 1 +608 1 +609 1 +780 1 +834 1 +835 1 +836 1 +877 0 +textures 2 +13 31ab25af-9af8-ef43-a952-d5619ca7169f +14 fba230b7-219d-7129-f145-672d574bab34 diff --git a/indra/newview/app_settings/static_assets/2d03fd78-92fc-ca52-aabb-a4904e1339d1.gesture b/indra/newview/app_settings/static_assets/2d03fd78-92fc-ca52-aabb-a4904e1339d1.gesture new file mode 100644 index 0000000000..289c19cb21 Binary files /dev/null and b/indra/newview/app_settings/static_assets/2d03fd78-92fc-ca52-aabb-a4904e1339d1.gesture differ diff --git a/indra/newview/app_settings/static_assets/2d408f13-f437-e00e-8f6d-b0857580b034.bodypart b/indra/newview/app_settings/static_assets/2d408f13-f437-e00e-8f6d-b0857580b034.bodypart new file mode 100644 index 0000000000..c53a9f514f --- /dev/null +++ b/indra/newview/app_settings/static_assets/2d408f13-f437-e00e-8f6d-b0857580b034.bodypart @@ -0,0 +1,52 @@ +LLWearable version 22 +RASL M CREATE SKIN (BILLY) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 1 +parameters 26 +108 .04 +110 0 +111 .4 +116 0 +117 0 +150 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 +textures 3 +0 86c0cfbe-365f-0f74-5cd8-88e90a6e7f5c +5 5ecc9bd1-9231-5a1a-61fd-3902e17f9da7 +6 43db1553-7a52-ffd9-814c-fae075a89732 diff --git a/indra/newview/app_settings/static_assets/2d6daa51-3192-6794-8e2e-a15f8338ec30.animatn b/indra/newview/app_settings/static_assets/2d6daa51-3192-6794-8e2e-a15f8338ec30.animatn new file mode 100644 index 0000000000..7aad799749 Binary files /dev/null and b/indra/newview/app_settings/static_assets/2d6daa51-3192-6794-8e2e-a15f8338ec30.animatn differ diff --git a/indra/newview/app_settings/static_assets/30047778-10ea-1af7-6881-4db7a3a5a114.animatn b/indra/newview/app_settings/static_assets/30047778-10ea-1af7-6881-4db7a3a5a114.animatn new file mode 100644 index 0000000000..b6bb0df598 Binary files /dev/null and b/indra/newview/app_settings/static_assets/30047778-10ea-1af7-6881-4db7a3a5a114.animatn differ diff --git a/indra/newview/app_settings/static_assets/30c1bdb4-1f99-3ee9-2a2e-098e4a3ceda6.clothing b/indra/newview/app_settings/static_assets/30c1bdb4-1f99-3ee9-2a2e-098e4a3ceda6.clothing new file mode 100644 index 0000000000..9d65799aaf --- /dev/null +++ b/indra/newview/app_settings/static_assets/30c1bdb4-1f99-3ee9-2a2e-098e4a3ceda6.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL M SHOP JACKET + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 8 +parameters 9 +606 1 +607 1 +608 1 +609 1 +780 1 +834 1 +835 1 +836 1 +877 0 +textures 2 +13 0f1edbd7-9e24-50f4-e43e-33c79a3fcdd3 +14 7d950588-19a5-3b45-b273-9e54a878333d diff --git a/indra/newview/app_settings/static_assets/313b9881-4302-73c0-c7d0-0e7a36b6c224.animatn b/indra/newview/app_settings/static_assets/313b9881-4302-73c0-c7d0-0e7a36b6c224.animatn new file mode 100644 index 0000000000..1f9f8391a2 Binary files /dev/null and b/indra/newview/app_settings/static_assets/313b9881-4302-73c0-c7d0-0e7a36b6c224.animatn differ diff --git a/indra/newview/app_settings/static_assets/3147d815-6338-b932-f011-16b56d9ac18b.animatn b/indra/newview/app_settings/static_assets/3147d815-6338-b932-f011-16b56d9ac18b.animatn new file mode 100644 index 0000000000..7fe3d2ddd6 Binary files /dev/null and b/indra/newview/app_settings/static_assets/3147d815-6338-b932-f011-16b56d9ac18b.animatn differ diff --git a/indra/newview/app_settings/static_assets/315c3a41-a5f3-0ba4-27da-f893f769e69b.animatn b/indra/newview/app_settings/static_assets/315c3a41-a5f3-0ba4-27da-f893f769e69b.animatn new file mode 100644 index 0000000000..52a60b3eba Binary files /dev/null and b/indra/newview/app_settings/static_assets/315c3a41-a5f3-0ba4-27da-f893f769e69b.animatn differ diff --git a/indra/newview/app_settings/static_assets/33339176-7ddc-9397-94a4-bf3403cbc8f5.animatn b/indra/newview/app_settings/static_assets/33339176-7ddc-9397-94a4-bf3403cbc8f5.animatn new file mode 100644 index 0000000000..fb1834eb5f Binary files /dev/null and b/indra/newview/app_settings/static_assets/33339176-7ddc-9397-94a4-bf3403cbc8f5.animatn differ diff --git a/indra/newview/app_settings/static_assets/347df5d8-c73b-009d-f19d-df78aea8ec22.bodypart b/indra/newview/app_settings/static_assets/347df5d8-c73b-009d-f19d-df78aea8ec22.bodypart new file mode 100644 index 0000000000..04e6fdc4cf --- /dev/null +++ b/indra/newview/app_settings/static_assets/347df5d8-c73b-009d-f19d-df78aea8ec22.bodypart @@ -0,0 +1,52 @@ +LLWearable version 22 +RASL M LOVE SKIN (Jon) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 1 +parameters 26 +108 0 +110 0 +111 .75 +116 0 +117 0 +150 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 +textures 3 +0 4ed0ebf9-f806-0af7-1ba8-3afba81c3e7c +5 c3f2fcd9-416c-138a-9f45-326b062f9f1b +6 9714d5e1-1c71-f92e-a695-71198839f5de diff --git a/indra/newview/app_settings/static_assets/349a3801-54f9-bf2c-3bd0-1ac89772af01.animatn b/indra/newview/app_settings/static_assets/349a3801-54f9-bf2c-3bd0-1ac89772af01.animatn new file mode 100644 index 0000000000..41ef5cdeaa Binary files /dev/null and b/indra/newview/app_settings/static_assets/349a3801-54f9-bf2c-3bd0-1ac89772af01.animatn differ diff --git a/indra/newview/app_settings/static_assets/35db4f7e-28c2-6679-cea9-3ee108f7fc7f.animatn b/indra/newview/app_settings/static_assets/35db4f7e-28c2-6679-cea9-3ee108f7fc7f.animatn new file mode 100644 index 0000000000..1de30618c1 Binary files /dev/null and b/indra/newview/app_settings/static_assets/35db4f7e-28c2-6679-cea9-3ee108f7fc7f.animatn differ diff --git a/indra/newview/app_settings/static_assets/36f81a92-f076-5893-dc4b-7c3795e487cf.animatn b/indra/newview/app_settings/static_assets/36f81a92-f076-5893-dc4b-7c3795e487cf.animatn new file mode 100644 index 0000000000..eb319331e1 Binary files /dev/null and b/indra/newview/app_settings/static_assets/36f81a92-f076-5893-dc4b-7c3795e487cf.animatn differ diff --git a/indra/newview/app_settings/static_assets/370f3a20-6ca6-9971-848c-9a01bc42ae3c.animatn b/indra/newview/app_settings/static_assets/370f3a20-6ca6-9971-848c-9a01bc42ae3c.animatn new file mode 100644 index 0000000000..728d33b714 Binary files /dev/null and b/indra/newview/app_settings/static_assets/370f3a20-6ca6-9971-848c-9a01bc42ae3c.animatn differ diff --git a/indra/newview/app_settings/static_assets/37ea8e97-1d16-b28d-8a48-7c88b39321cb.clothing b/indra/newview/app_settings/static_assets/37ea8e97-1d16-b28d-8a48-7c88b39321cb.clothing new file mode 100644 index 0000000000..2bfaf1e3c0 --- /dev/null +++ b/indra/newview/app_settings/static_assets/37ea8e97-1d16-b28d-8a48-7c88b39321cb.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL F PLAY BOLERO JACKET + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 8 +parameters 9 +606 1 +607 1 +608 1 +609 1 +780 1 +834 1 +835 1 +836 1 +877 0 +textures 2 +13 23f0e8f7-f852-c836-5f13-cfd643a8fb24 +14 85b13d86-3e95-8d4b-a03b-c9c737631194 diff --git a/indra/newview/app_settings/static_assets/3d6da7ba-e4a3-e08c-b52e-98a40cb4dc33.bodypart b/indra/newview/app_settings/static_assets/3d6da7ba-e4a3-e08c-b52e-98a40cb4dc33.bodypart new file mode 100644 index 0000000000..187f7f050f --- /dev/null +++ b/indra/newview/app_settings/static_assets/3d6da7ba-e4a3-e08c-b52e-98a40cb4dc33.bodypart @@ -0,0 +1,52 @@ +LLWearable version 22 +RASL F SHOP SKIN (Suzy) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 1 +parameters 26 +108 .04 +110 0 +111 .4 +116 0 +117 0 +150 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 +textures 3 +0 ca158569-54b2-997e-e08a-84e1671f6203 +5 2f1251f3-3967-1044-4211-c6d311b57760 +6 178a21aa-85f2-8b57-9c7a-2d85ebc9f31e diff --git a/indra/newview/app_settings/static_assets/3d8a32a0-3c25-ddcc-f807-e50f796e1dde.gesture b/indra/newview/app_settings/static_assets/3d8a32a0-3c25-ddcc-f807-e50f796e1dde.gesture new file mode 100644 index 0000000000..b31632c9e9 Binary files /dev/null and b/indra/newview/app_settings/static_assets/3d8a32a0-3c25-ddcc-f807-e50f796e1dde.gesture differ diff --git a/indra/newview/app_settings/static_assets/3d94bad0-c55b-7dcc-8763-033c59405d33.animatn b/indra/newview/app_settings/static_assets/3d94bad0-c55b-7dcc-8763-033c59405d33.animatn new file mode 100644 index 0000000000..ed5bdfdf5e Binary files /dev/null and b/indra/newview/app_settings/static_assets/3d94bad0-c55b-7dcc-8763-033c59405d33.animatn differ diff --git a/indra/newview/app_settings/static_assets/3da1d753-028a-5446-24f3-9c9b856d9422.animatn b/indra/newview/app_settings/static_assets/3da1d753-028a-5446-24f3-9c9b856d9422.animatn new file mode 100644 index 0000000000..7f52de0585 Binary files /dev/null and b/indra/newview/app_settings/static_assets/3da1d753-028a-5446-24f3-9c9b856d9422.animatn differ diff --git a/indra/newview/app_settings/static_assets/3f1cf9b6-f52c-46cd-bcf7-ffb7c8c25aea.gesture b/indra/newview/app_settings/static_assets/3f1cf9b6-f52c-46cd-bcf7-ffb7c8c25aea.gesture new file mode 100644 index 0000000000..ad795ceb80 Binary files /dev/null and b/indra/newview/app_settings/static_assets/3f1cf9b6-f52c-46cd-bcf7-ffb7c8c25aea.gesture differ diff --git a/indra/newview/app_settings/static_assets/3f258e00-f5ac-68b2-bfb0-0c3c0fa3e614.gesture b/indra/newview/app_settings/static_assets/3f258e00-f5ac-68b2-bfb0-0c3c0fa3e614.gesture new file mode 100644 index 0000000000..0e02ee3a27 Binary files /dev/null and b/indra/newview/app_settings/static_assets/3f258e00-f5ac-68b2-bfb0-0c3c0fa3e614.gesture differ diff --git a/indra/newview/app_settings/static_assets/3fc36cff-74b6-a980-3e4c-8f93a1dae205.clothing b/indra/newview/app_settings/static_assets/3fc36cff-74b6-a980-3e4c-8f93a1dae205.clothing new file mode 100644 index 0000000000..fa5dae9bca --- /dev/null +++ b/indra/newview/app_settings/static_assets/3fc36cff-74b6-a980-3e4c-8f93a1dae205.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL ANNA BOOTS FOOTSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id df110c10-72e6-40d6-8916-14b4b0366b18 + owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + last_owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 6 +parameters 10 +198 1 +503 0 +508 -1 +513 0 +514 .21 +616 .1 +654 0 +812 1 +813 1 +817 1 +textures 1 +7 85b13d86-3e95-8d4b-a03b-c9c737631194 diff --git a/indra/newview/app_settings/static_assets/40b92916-8055-2562-008f-58924bd0e03c.gesture b/indra/newview/app_settings/static_assets/40b92916-8055-2562-008f-58924bd0e03c.gesture new file mode 100644 index 0000000000..63b18c8c50 Binary files /dev/null and b/indra/newview/app_settings/static_assets/40b92916-8055-2562-008f-58924bd0e03c.gesture differ diff --git a/indra/newview/app_settings/static_assets/41426836-7437-7e89-025d-0aa4d10f1d69.animatn b/indra/newview/app_settings/static_assets/41426836-7437-7e89-025d-0aa4d10f1d69.animatn new file mode 100644 index 0000000000..aead27694e Binary files /dev/null and b/indra/newview/app_settings/static_assets/41426836-7437-7e89-025d-0aa4d10f1d69.animatn differ diff --git a/indra/newview/app_settings/static_assets/42b46214-4b44-79ae-deb8-0df61424ff4b.animatn b/indra/newview/app_settings/static_assets/42b46214-4b44-79ae-deb8-0df61424ff4b.animatn new file mode 100644 index 0000000000..90e909d8ed Binary files /dev/null and b/indra/newview/app_settings/static_assets/42b46214-4b44-79ae-deb8-0df61424ff4b.animatn differ diff --git a/indra/newview/app_settings/static_assets/42dd95d5-0bc6-6392-f650-777304946c0f.animatn b/indra/newview/app_settings/static_assets/42dd95d5-0bc6-6392-f650-777304946c0f.animatn new file mode 100644 index 0000000000..81d00858f5 Binary files /dev/null and b/indra/newview/app_settings/static_assets/42dd95d5-0bc6-6392-f650-777304946c0f.animatn differ diff --git a/indra/newview/app_settings/static_assets/42ecd00b-9947-a97c-400a-bbc9174c7aeb.animatn b/indra/newview/app_settings/static_assets/42ecd00b-9947-a97c-400a-bbc9174c7aeb.animatn new file mode 100644 index 0000000000..39d3f0b41c Binary files /dev/null and b/indra/newview/app_settings/static_assets/42ecd00b-9947-a97c-400a-bbc9174c7aeb.animatn differ diff --git a/indra/newview/app_settings/static_assets/43417d10-a2f7-7727-6fd4-dd7f04ad7a13.gesture b/indra/newview/app_settings/static_assets/43417d10-a2f7-7727-6fd4-dd7f04ad7a13.gesture new file mode 100644 index 0000000000..8364c7e5ee Binary files /dev/null and b/indra/newview/app_settings/static_assets/43417d10-a2f7-7727-6fd4-dd7f04ad7a13.gesture differ diff --git a/indra/newview/app_settings/static_assets/44a87e64-2d78-14b7-1cde-ac0f5031621f.gesture b/indra/newview/app_settings/static_assets/44a87e64-2d78-14b7-1cde-ac0f5031621f.gesture new file mode 100644 index 0000000000..06a9afa456 Binary files /dev/null and b/indra/newview/app_settings/static_assets/44a87e64-2d78-14b7-1cde-ac0f5031621f.gesture differ diff --git a/indra/newview/app_settings/static_assets/46bb4359-de38-4ed8-6a22-f1f52fe8f506.animatn b/indra/newview/app_settings/static_assets/46bb4359-de38-4ed8-6a22-f1f52fe8f506.animatn new file mode 100644 index 0000000000..a85f1ea884 Binary files /dev/null and b/indra/newview/app_settings/static_assets/46bb4359-de38-4ed8-6a22-f1f52fe8f506.animatn differ diff --git a/indra/newview/app_settings/static_assets/47f5f6fb-22e5-ae44-f871-73aaaf4a6022.animatn b/indra/newview/app_settings/static_assets/47f5f6fb-22e5-ae44-f871-73aaaf4a6022.animatn new file mode 100644 index 0000000000..4348735620 Binary files /dev/null and b/indra/newview/app_settings/static_assets/47f5f6fb-22e5-ae44-f871-73aaaf4a6022.animatn differ diff --git a/indra/newview/app_settings/static_assets/49aea43b-5ac3-8a44-b595-96100af0beda.animatn b/indra/newview/app_settings/static_assets/49aea43b-5ac3-8a44-b595-96100af0beda.animatn new file mode 100644 index 0000000000..9d378ae472 Binary files /dev/null and b/indra/newview/app_settings/static_assets/49aea43b-5ac3-8a44-b595-96100af0beda.animatn differ diff --git a/indra/newview/app_settings/static_assets/4ae8016b-31b9-03bb-c401-b1ea941db41d.animatn b/indra/newview/app_settings/static_assets/4ae8016b-31b9-03bb-c401-b1ea941db41d.animatn new file mode 100644 index 0000000000..a2fcc32cfd Binary files /dev/null and b/indra/newview/app_settings/static_assets/4ae8016b-31b9-03bb-c401-b1ea941db41d.animatn differ diff --git a/indra/newview/app_settings/static_assets/4bd69a1d-1114-a0b4-625f-84e0a5237155.animatn b/indra/newview/app_settings/static_assets/4bd69a1d-1114-a0b4-625f-84e0a5237155.animatn new file mode 100644 index 0000000000..2eedbda6b7 Binary files /dev/null and b/indra/newview/app_settings/static_assets/4bd69a1d-1114-a0b4-625f-84e0a5237155.animatn differ diff --git a/indra/newview/app_settings/static_assets/4c450f9e-07c0-2f5a-bc89-57de56db8ba1.gesture b/indra/newview/app_settings/static_assets/4c450f9e-07c0-2f5a-bc89-57de56db8ba1.gesture new file mode 100644 index 0000000000..69e35f111a Binary files /dev/null and b/indra/newview/app_settings/static_assets/4c450f9e-07c0-2f5a-bc89-57de56db8ba1.gesture differ diff --git a/indra/newview/app_settings/static_assets/4f23cc4a-712e-aabc-afcf-3cab4c1164ea.gesture b/indra/newview/app_settings/static_assets/4f23cc4a-712e-aabc-afcf-3cab4c1164ea.gesture new file mode 100644 index 0000000000..9d7e59fa5c Binary files /dev/null and b/indra/newview/app_settings/static_assets/4f23cc4a-712e-aabc-afcf-3cab4c1164ea.gesture differ diff --git a/indra/newview/app_settings/static_assets/510cdb99-1764-a0ef-a7e7-beb70e8dc4a4.clothing b/indra/newview/app_settings/static_assets/510cdb99-1764-a0ef-a7e7-beb70e8dc4a4.clothing new file mode 100644 index 0000000000..f4b6eb599a --- /dev/null +++ b/indra/newview/app_settings/static_assets/510cdb99-1764-a0ef-a7e7-beb70e8dc4a4.clothing @@ -0,0 +1,33 @@ +LLWearable version 22 +RASL F PLAY BODICE TOP DOWN + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 5 +parameters 9 +625 0 +638 0 +806 1 +807 1 +808 1 +814 1 +815 .99 +816 .05 +869 0 +textures 1 +2 60b3592a-2499-20ce-e88b-db35fdba13ea diff --git a/indra/newview/app_settings/static_assets/514af488-9051-044a-b3fc-d4dbf76377c6.animatn b/indra/newview/app_settings/static_assets/514af488-9051-044a-b3fc-d4dbf76377c6.animatn new file mode 100644 index 0000000000..2609059435 Binary files /dev/null and b/indra/newview/app_settings/static_assets/514af488-9051-044a-b3fc-d4dbf76377c6.animatn differ diff --git a/indra/newview/app_settings/static_assets/51f3b303-a783-f0bd-9e98-9c094be13653.bodypart b/indra/newview/app_settings/static_assets/51f3b303-a783-f0bd-9e98-9c094be13653.bodypart new file mode 100644 index 0000000000..5b6ad1d1ce --- /dev/null +++ b/indra/newview/app_settings/static_assets/51f3b303-a783-f0bd-9e98-9c094be13653.bodypart @@ -0,0 +1,63 @@ +LLWearable version 22 +RASL M LEARN EYEBROWSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 39 +16 .76 +31 .62 +112 0 +113 0 +114 0 +115 0 +119 0 +130 0 +131 0 +132 0 +133 0 +134 0 +135 0 +136 0 +137 .5 +140 0 +141 0 +142 0 +143 -4 +166 0 +167 0 +168 0 +169 0 +177 0 +181 -1 +182 -1 +183 -1 +184 0 +192 0 +674 -1 +750 0 +752 .5 +754 .5 +755 0 +757 -1.18 +762 0 +763 0 +785 0 +789 0 +textures 1 +4 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b diff --git a/indra/newview/app_settings/static_assets/522d4d1d-0f75-c3e7-af30-990e5f394438.gesture b/indra/newview/app_settings/static_assets/522d4d1d-0f75-c3e7-af30-990e5f394438.gesture new file mode 100644 index 0000000000..e9bab5d5a5 Binary files /dev/null and b/indra/newview/app_settings/static_assets/522d4d1d-0f75-c3e7-af30-990e5f394438.gesture differ diff --git a/indra/newview/app_settings/static_assets/52d9684f-2dcf-c252-2360-186b4236d07e.gesture b/indra/newview/app_settings/static_assets/52d9684f-2dcf-c252-2360-186b4236d07e.gesture new file mode 100644 index 0000000000..f964630f2d Binary files /dev/null and b/indra/newview/app_settings/static_assets/52d9684f-2dcf-c252-2360-186b4236d07e.gesture differ diff --git a/indra/newview/app_settings/static_assets/5480a924-8b06-9551-2af7-bf59452870e5.gesture b/indra/newview/app_settings/static_assets/5480a924-8b06-9551-2af7-bf59452870e5.gesture new file mode 100644 index 0000000000..b4c2dfedf0 Binary files /dev/null and b/indra/newview/app_settings/static_assets/5480a924-8b06-9551-2af7-bf59452870e5.gesture differ diff --git a/indra/newview/app_settings/static_assets/55c19b40-5303-d6ab-f003-5a2d926f4738.bodypart b/indra/newview/app_settings/static_assets/55c19b40-5303-d6ab-f003-5a2d926f4738.bodypart new file mode 100644 index 0000000000..e312715137 --- /dev/null +++ b/indra/newview/app_settings/static_assets/55c19b40-5303-d6ab-f003-5a2d926f4738.bodypart @@ -0,0 +1,63 @@ +LLWearable version 22 +RASL M EXPLORE EYEBROWSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 39 +16 1.18 +31 .42 +112 0 +113 0 +114 0 +115 0 +119 0 +130 0 +131 0 +132 0 +133 0 +134 0 +135 0 +136 0 +137 .5 +140 0 +141 0 +142 0 +143 -4 +166 0 +167 0 +168 0 +169 0 +177 0 +181 -1 +182 -1 +183 -1 +184 0 +192 0 +674 -1 +750 0 +752 .5 +754 .5 +755 0 +757 -.16 +762 0 +763 0 +785 0 +789 0 +textures 1 +4 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b diff --git a/indra/newview/app_settings/static_assets/56e0ba0d-4a9f-7f27-6117-32f2ebbf6135.animatn b/indra/newview/app_settings/static_assets/56e0ba0d-4a9f-7f27-6117-32f2ebbf6135.animatn new file mode 100644 index 0000000000..31b74675d1 Binary files /dev/null and b/indra/newview/app_settings/static_assets/56e0ba0d-4a9f-7f27-6117-32f2ebbf6135.animatn differ diff --git a/indra/newview/app_settings/static_assets/5725fae1-0087-ec20-a4a0-eaa82d5c121b.bodypart b/indra/newview/app_settings/static_assets/5725fae1-0087-ec20-a4a0-eaa82d5c121b.bodypart new file mode 100644 index 0000000000..61fde63bae --- /dev/null +++ b/indra/newview/app_settings/static_assets/5725fae1-0087-ec20-a4a0-eaa82d5c121b.bodypart @@ -0,0 +1,26 @@ +LLWearable version 22 +RASL - Eyes - Amber Brown + + permissions 0 + { + base_mask 00082000 + owner_mask 00082000 + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + 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 f8230eaa-0afb-8eee-9891-030cfdfa6640 diff --git a/indra/newview/app_settings/static_assets/5747a48e-073e-c331-f6f3-7c2149613d3e.animatn b/indra/newview/app_settings/static_assets/5747a48e-073e-c331-f6f3-7c2149613d3e.animatn new file mode 100644 index 0000000000..bd25f7755f Binary files /dev/null and b/indra/newview/app_settings/static_assets/5747a48e-073e-c331-f6f3-7c2149613d3e.animatn differ diff --git a/indra/newview/app_settings/static_assets/57abaae6-1d17-7b1b-5f98-6d11a6411276.animatn b/indra/newview/app_settings/static_assets/57abaae6-1d17-7b1b-5f98-6d11a6411276.animatn new file mode 100644 index 0000000000..5dac9c0738 Binary files /dev/null and b/indra/newview/app_settings/static_assets/57abaae6-1d17-7b1b-5f98-6d11a6411276.animatn differ diff --git a/indra/newview/app_settings/static_assets/57cbd4f1-c53e-020f-f455-5ad2a5bab98d.bodypart b/indra/newview/app_settings/static_assets/57cbd4f1-c53e-020f-f455-5ad2a5bab98d.bodypart new file mode 100644 index 0000000000..fd0a90ed1f --- /dev/null +++ b/indra/newview/app_settings/static_assets/57cbd4f1-c53e-020f-f455-5ad2a5bab98d.bodypart @@ -0,0 +1,105 @@ +LLWearable version 22 +RASL F LEARN SHAPE (ANNA) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 0 +parameters 82 +1 0 +2 -.47 +4 -.06 +5 .15 +6 -.05 +7 .2 +8 -.26 +10 .17 +11 .24 +12 -.08 +13 .21 +14 .55 +15 -.28 +17 -.08 +18 .7 +19 -.3 +20 -.06 +21 -.05 +22 0 +23 -.4 +24 .25 +25 -.32 +27 -.47 +33 .58 +34 .07 +35 -.1 +36 -1.1 +37 -1.16 +38 -.16 +80 0 +105 .47 +155 -.42 +157 .04 +185 -.6 +193 .54 +196 -1.07 +505 .31 +506 -.44 +507 0 +515 -1 +517 -.08 +518 .24 +629 .44 +637 .06 +646 -.01 +647 -.09 +649 .34 +650 -.15 +652 .34 +653 .38 +656 0 +659 .59 +662 .5 +663 0 +664 0 +665 .08 +675 -.19 +676 -.37 +678 .5 +682 .52 +683 -.2 +684 .18 +685 0 +690 .37 +692 .2 +693 .22 +753 .51 +756 -.38 +758 .06 +759 -.05 +760 .72 +764 .35 +765 -.08 +769 .45 +773 .53 +795 .21 +796 .01 +799 .55 +841 .02 +842 .16 +879 0 +880 -.85 +textures 0 diff --git a/indra/newview/app_settings/static_assets/590b2eac-a9fc-1e22-7874-782e3ded97d2.bodypart b/indra/newview/app_settings/static_assets/590b2eac-a9fc-1e22-7874-782e3ded97d2.bodypart new file mode 100644 index 0000000000..d0fb089ba0 --- /dev/null +++ b/indra/newview/app_settings/static_assets/590b2eac-a9fc-1e22-7874-782e3ded97d2.bodypart @@ -0,0 +1,105 @@ +LLWearable version 22 +RASL F CREATE SHAPE (POPPY) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 0 +parameters 82 +1 .02 +2 -.44 +4 -.06 +5 -.02 +6 -.05 +7 .02 +8 -.42 +10 .3 +11 .24 +12 -.23 +13 0 +14 .46 +15 -.28 +17 .25 +18 -.38 +19 -.45 +20 -.14 +21 -.02 +22 0 +23 -.46 +24 .22 +25 .19 +27 -.47 +33 .58 +34 .07 +35 -.1 +36 -1 +37 -1.04 +38 -.24 +80 0 +105 .53 +155 -.44 +157 0 +185 -.62 +193 .46 +196 -1.13 +505 .35 +506 -.68 +507 -.24 +515 -1 +517 -.05 +518 .24 +629 .5 +637 .06 +646 -.08 +647 -.17 +649 .32 +650 0 +652 .37 +653 .35 +656 0 +659 .57 +662 .5 +663 0 +664 0 +665 .08 +675 -.17 +676 -.49 +678 .5 +682 .53 +683 -.17 +684 .04 +685 0 +690 .39 +692 .3 +693 .2 +753 .55 +756 -.38 +758 .06 +759 .17 +760 .85 +764 .32 +765 -.08 +769 .45 +773 .53 +795 .2 +796 .08 +799 .5 +841 -.02 +842 .06 +879 0 +880 -.85 +textures 0 diff --git a/indra/newview/app_settings/static_assets/59332ea5-2a75-9ede-9ab7-f0ae70bbffcc.clothing b/indra/newview/app_settings/static_assets/59332ea5-2a75-9ede-9ab7-f0ae70bbffcc.clothing new file mode 100644 index 0000000000..b7c0342844 --- /dev/null +++ b/indra/newview/app_settings/static_assets/59332ea5-2a75-9ede-9ab7-f0ae70bbffcc.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL MSHOE 5 FOOTSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id df110c10-72e6-40d6-8916-14b4b0366b18 + owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + last_owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 6 +parameters 10 +198 0 +503 0 +508 .02 +513 .29 +514 .27 +616 .1 +654 0 +812 1 +813 1 +817 1 +textures 1 +7 85b13d86-3e95-8d4b-a03b-c9c737631194 diff --git a/indra/newview/app_settings/static_assets/5a68100b-e6ba-5170-649c-80beddc67035.gesture b/indra/newview/app_settings/static_assets/5a68100b-e6ba-5170-649c-80beddc67035.gesture new file mode 100644 index 0000000000..548369d81d Binary files /dev/null and b/indra/newview/app_settings/static_assets/5a68100b-e6ba-5170-649c-80beddc67035.gesture differ diff --git a/indra/newview/app_settings/static_assets/5a977ed9-7f72-44e9-4c4c-6e913df8ae74.animatn b/indra/newview/app_settings/static_assets/5a977ed9-7f72-44e9-4c4c-6e913df8ae74.animatn new file mode 100644 index 0000000000..700f4e2969 Binary files /dev/null and b/indra/newview/app_settings/static_assets/5a977ed9-7f72-44e9-4c4c-6e913df8ae74.animatn differ diff --git a/indra/newview/app_settings/static_assets/5af7de1f-e517-ae9a-13d8-4760c1ab4cc3.bodypart b/indra/newview/app_settings/static_assets/5af7de1f-e517-ae9a-13d8-4760c1ab4cc3.bodypart new file mode 100644 index 0000000000..46833ce4b5 --- /dev/null +++ b/indra/newview/app_settings/static_assets/5af7de1f-e517-ae9a-13d8-4760c1ab4cc3.bodypart @@ -0,0 +1,26 @@ +LLWearable version 22 +New Eyes + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id df110c10-72e6-40d6-8916-14b4b0366b18 + owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + last_owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + 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 d7bef979-ed48-e7ce-079a-b19a3c5a144a diff --git a/indra/newview/app_settings/static_assets/5bac881c-fff8-b19a-49eb-ba253eb5af04.bodypart b/indra/newview/app_settings/static_assets/5bac881c-fff8-b19a-49eb-ba253eb5af04.bodypart new file mode 100644 index 0000000000..ed4033a1f6 --- /dev/null +++ b/indra/newview/app_settings/static_assets/5bac881c-fff8-b19a-49eb-ba253eb5af04.bodypart @@ -0,0 +1,63 @@ +LLWearable version 22 +RASL F EXPLORE EYEBROWSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 39 +16 .9 +31 .34 +112 0 +113 0 +114 0 +115 0 +119 0 +130 0 +131 0 +132 0 +133 0 +134 0 +135 0 +136 0 +137 .5 +140 0 +141 0 +142 0 +143 -4 +166 0 +167 0 +168 0 +169 0 +177 0 +181 -1 +182 -1 +183 -1 +184 0 +192 0 +674 -1 +750 0 +752 .5 +754 .5 +755 0 +757 .14 +762 0 +763 0 +785 0 +789 0 +textures 1 +4 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b diff --git a/indra/newview/app_settings/static_assets/5c682a95-6da4-a463-0bf6-0f5b7be129d1.animatn b/indra/newview/app_settings/static_assets/5c682a95-6da4-a463-0bf6-0f5b7be129d1.animatn new file mode 100644 index 0000000000..a7da5e8591 Binary files /dev/null and b/indra/newview/app_settings/static_assets/5c682a95-6da4-a463-0bf6-0f5b7be129d1.animatn differ diff --git a/indra/newview/app_settings/static_assets/5dde08b6-59ec-5ca3-92a0-b9d7f532a768.bodypart b/indra/newview/app_settings/static_assets/5dde08b6-59ec-5ca3-92a0-b9d7f532a768.bodypart new file mode 100644 index 0000000000..10f197a1d3 --- /dev/null +++ b/indra/newview/app_settings/static_assets/5dde08b6-59ec-5ca3-92a0-b9d7f532a768.bodypart @@ -0,0 +1,63 @@ +LLWearable version 22 +RASL M PLAY EYEBROWSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 39 +16 .69 +31 .4 +112 0 +113 0 +114 0 +115 0 +119 0 +130 0 +131 0 +132 0 +133 0 +134 0 +135 0 +136 0 +137 .5 +140 0 +141 0 +142 0 +143 -4 +166 0 +167 0 +168 0 +169 0 +177 0 +181 -1 +182 -1 +183 -1 +184 0 +192 0 +674 -1 +750 0 +752 .5 +754 .5 +755 0 +757 -.4 +762 0 +763 0 +785 0 +789 0 +textures 1 +4 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b diff --git a/indra/newview/app_settings/static_assets/5ea3991f-c293-392e-6860-91dfa01278a3.animatn b/indra/newview/app_settings/static_assets/5ea3991f-c293-392e-6860-91dfa01278a3.animatn new file mode 100644 index 0000000000..f2e65858a4 Binary files /dev/null and b/indra/newview/app_settings/static_assets/5ea3991f-c293-392e-6860-91dfa01278a3.animatn differ diff --git a/indra/newview/app_settings/static_assets/6061a81b-e6bf-5909-b86a-268e5c6b28c3.clothing b/indra/newview/app_settings/static_assets/6061a81b-e6bf-5909-b86a-268e5c6b28c3.clothing new file mode 100644 index 0000000000..cc6a8e1dac --- /dev/null +++ b/indra/newview/app_settings/static_assets/6061a81b-e6bf-5909-b86a-268e5c6b28c3.clothing @@ -0,0 +1,29 @@ +LLWearable version 22 +RASL F EXPLORE JEANS + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 11 +parameters 5 +619 1 +624 1 +824 1 +825 1 +826 1 +textures 1 +17 0bcd9123-fb74-5d95-e9e2-d0e4f8677405 diff --git a/indra/newview/app_settings/static_assets/6212ffdd-d447-a92f-18f3-8cb94a799d83.gesture b/indra/newview/app_settings/static_assets/6212ffdd-d447-a92f-18f3-8cb94a799d83.gesture new file mode 100644 index 0000000000..b94ccdbfec Binary files /dev/null and b/indra/newview/app_settings/static_assets/6212ffdd-d447-a92f-18f3-8cb94a799d83.gesture differ diff --git a/indra/newview/app_settings/static_assets/62c5de58-cb33-5743-3d07-9e4cd4352864.animatn b/indra/newview/app_settings/static_assets/62c5de58-cb33-5743-3d07-9e4cd4352864.animatn new file mode 100644 index 0000000000..1e83b0de36 Binary files /dev/null and b/indra/newview/app_settings/static_assets/62c5de58-cb33-5743-3d07-9e4cd4352864.animatn differ diff --git a/indra/newview/app_settings/static_assets/631feb23-6f72-ae9c-dd5e-51510bbe235b.clothing b/indra/newview/app_settings/static_assets/631feb23-6f72-ae9c-dd5e-51510bbe235b.clothing new file mode 100644 index 0000000000..92e6564525 --- /dev/null +++ b/indra/newview/app_settings/static_assets/631feb23-6f72-ae9c-dd5e-51510bbe235b.clothing @@ -0,0 +1,33 @@ +LLWearable version 22 +RASL F EXPLORE TANK DOWN + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 5 +parameters 9 +625 0 +638 0 +806 1 +807 1 +808 1 +814 1 +815 .99 +816 .05 +869 0 +textures 1 +2 bc23416d-7993-17bf-d5e0-bcfae808be73 diff --git a/indra/newview/app_settings/static_assets/633b2da6-a46f-8de8-5fe6-1256fd48d991.bodypart b/indra/newview/app_settings/static_assets/633b2da6-a46f-8de8-5fe6-1256fd48d991.bodypart new file mode 100644 index 0000000000..b129dfc609 --- /dev/null +++ b/indra/newview/app_settings/static_assets/633b2da6-a46f-8de8-5fe6-1256fd48d991.bodypart @@ -0,0 +1,52 @@ +LLWearable version 22 +Male Designer Skin + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 0008e000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 1 +parameters 26 +108 0 +110 0 +111 .5 +116 0 +117 0 +150 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 +textures 3 +0 ddcc80fe-8da3-0eb7-cad6-ae35f76c99ab +5 f4e585de-8cc8-fecd-6eba-b3ec663161a1 +6 8bd9935f-97dd-bed2-1a46-df194013d737 diff --git a/indra/newview/app_settings/static_assets/63af4bbd-7dba-fb00-01f6-bc2126ece403.gesture b/indra/newview/app_settings/static_assets/63af4bbd-7dba-fb00-01f6-bc2126ece403.gesture new file mode 100644 index 0000000000..0c958c6ca2 Binary files /dev/null and b/indra/newview/app_settings/static_assets/63af4bbd-7dba-fb00-01f6-bc2126ece403.gesture differ diff --git a/indra/newview/app_settings/static_assets/666307d9-a860-572d-6fd4-c3ab8865c094.animatn b/indra/newview/app_settings/static_assets/666307d9-a860-572d-6fd4-c3ab8865c094.animatn new file mode 100644 index 0000000000..c8d940b886 Binary files /dev/null and b/indra/newview/app_settings/static_assets/666307d9-a860-572d-6fd4-c3ab8865c094.animatn differ diff --git a/indra/newview/app_settings/static_assets/66d174a6-66dc-cfe4-5b51-48b3be18d099.clothing b/indra/newview/app_settings/static_assets/66d174a6-66dc-cfe4-5b51-48b3be18d099.clothing new file mode 100644 index 0000000000..d8679b7cd7 --- /dev/null +++ b/indra/newview/app_settings/static_assets/66d174a6-66dc-cfe4-5b51-48b3be18d099.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL F PLAY BODICE TOP UP + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 4 +parameters 10 +781 1 +800 1 +801 1 +802 1 +803 1 +804 1 +805 1 +828 0 +840 0 +868 0 +textures 1 +1 618cc16f-fcfa-12a3-1896-be4e87ca09a0 diff --git a/indra/newview/app_settings/static_assets/66ecd9bd-22e1-2633-f41e-ad1a38205662.gesture b/indra/newview/app_settings/static_assets/66ecd9bd-22e1-2633-f41e-ad1a38205662.gesture new file mode 100644 index 0000000000..38b70758b7 Binary files /dev/null and b/indra/newview/app_settings/static_assets/66ecd9bd-22e1-2633-f41e-ad1a38205662.gesture differ diff --git a/indra/newview/app_settings/static_assets/6802d553-49da-0778-9f85-1599a2266526.animatn b/indra/newview/app_settings/static_assets/6802d553-49da-0778-9f85-1599a2266526.animatn new file mode 100644 index 0000000000..ecf9138483 Binary files /dev/null and b/indra/newview/app_settings/static_assets/6802d553-49da-0778-9f85-1599a2266526.animatn differ diff --git a/indra/newview/app_settings/static_assets/6883a61a-b27b-5914-a61e-dda118a9ee2c.animatn b/indra/newview/app_settings/static_assets/6883a61a-b27b-5914-a61e-dda118a9ee2c.animatn new file mode 100644 index 0000000000..3c18b3db3f Binary files /dev/null and b/indra/newview/app_settings/static_assets/6883a61a-b27b-5914-a61e-dda118a9ee2c.animatn differ diff --git a/indra/newview/app_settings/static_assets/68efa755-f0dd-8da2-38e9-bc9ea6b4ddd6.gesture b/indra/newview/app_settings/static_assets/68efa755-f0dd-8da2-38e9-bc9ea6b4ddd6.gesture new file mode 100644 index 0000000000..1af6225189 Binary files /dev/null and b/indra/newview/app_settings/static_assets/68efa755-f0dd-8da2-38e9-bc9ea6b4ddd6.gesture differ diff --git a/indra/newview/app_settings/static_assets/693f12af-3bd9-8dcd-0395-32a967cc812d.bodypart b/indra/newview/app_settings/static_assets/693f12af-3bd9-8dcd-0395-32a967cc812d.bodypart new file mode 100644 index 0000000000..7e72d3e941 --- /dev/null +++ b/indra/newview/app_settings/static_assets/693f12af-3bd9-8dcd-0395-32a967cc812d.bodypart @@ -0,0 +1,52 @@ +LLWearable version 22 +RASL M EXPLORE SKIN (LOUIS) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 1 +parameters 26 +108 0 +110 0 +111 .75 +116 0 +117 0 +150 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 +textures 3 +0 186d9ce8-d1bd-b0d9-4c1e-e2d0faf4d6ca +5 959fdef8-ca08-4059-5468-0431a14b11fe +6 a2200068-757a-6b58-6693-02129927627e diff --git a/indra/newview/app_settings/static_assets/697ed804-815c-f195-597c-dce51b86713b.bodypart b/indra/newview/app_settings/static_assets/697ed804-815c-f195-597c-dce51b86713b.bodypart new file mode 100644 index 0000000000..a8f1d47c94 --- /dev/null +++ b/indra/newview/app_settings/static_assets/697ed804-815c-f195-597c-dce51b86713b.bodypart @@ -0,0 +1,26 @@ +LLWearable version 22 +RASL - Eyes - Spring Green + + permissions 0 + { + base_mask 00082000 + owner_mask 00082000 + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + 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 c0871f57-c220-1a17-941a-bc953763f317 diff --git a/indra/newview/app_settings/static_assets/69a2052e-1777-df94-49bd-8675ca576d87.clothing b/indra/newview/app_settings/static_assets/69a2052e-1777-df94-49bd-8675ca576d87.clothing new file mode 100644 index 0000000000..18943d93fa --- /dev/null +++ b/indra/newview/app_settings/static_assets/69a2052e-1777-df94-49bd-8675ca576d87.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL M PLAY JACKET + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 8 +parameters 9 +606 1 +607 1 +608 1 +609 1 +780 1 +834 1 +835 1 +836 1 +877 0 +textures 2 +13 9cc05d27-0088-dfea-2cd7-1573812decdf +14 f13c2b07-21d3-e913-e848-4aad3b8044f9 diff --git a/indra/newview/app_settings/static_assets/6af61452-5a3b-7fd3-4604-dc397aa9184b.bodypart b/indra/newview/app_settings/static_assets/6af61452-5a3b-7fd3-4604-dc397aa9184b.bodypart new file mode 100644 index 0000000000..2f0f5b3692 --- /dev/null +++ b/indra/newview/app_settings/static_assets/6af61452-5a3b-7fd3-4604-dc397aa9184b.bodypart @@ -0,0 +1,105 @@ +LLWearable version 22 +RASL M LOVE SHAPE (JON) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 0 +parameters 82 +1 .16 +2 -.21 +4 .17 +5 .44 +6 .02 +7 -.24 +8 -.14 +10 .88 +11 .4 +12 -.08 +13 .68 +14 .63 +15 -.22 +17 .22 +18 .66 +19 -.43 +20 -.26 +21 .31 +22 .57 +23 -.44 +24 -.14 +25 -.02 +27 .05 +33 1.14 +34 -.26 +35 -.07 +36 -.52 +37 -.14 +38 -.1 +80 1 +105 .5 +155 -.22 +157 .02 +185 -.76 +193 .73 +196 -.98 +505 .49 +506 -.12 +507 0 +515 -1 +517 -.25 +518 -.08 +629 .37 +637 .05 +646 .1 +647 -.02 +649 .5 +650 .05 +652 .46 +653 .38 +656 0 +659 .54 +662 .5 +663 0 +664 0 +665 .08 +675 -.12 +676 -.22 +678 .46 +682 .57 +683 -.05 +684 0 +685 .08 +690 .46 +692 .18 +693 .2 +753 1 +756 -.78 +758 -.42 +759 .75 +760 .24 +764 .23 +765 .15 +769 .45 +773 .45 +795 .26 +796 .28 +799 .52 +841 .02 +842 0 +879 .17 +880 -.8 +textures 0 diff --git a/indra/newview/app_settings/static_assets/6b61c8e8-4747-0d75-12d7-e49ff207a4ca.animatn b/indra/newview/app_settings/static_assets/6b61c8e8-4747-0d75-12d7-e49ff207a4ca.animatn new file mode 100644 index 0000000000..d7218f8884 Binary files /dev/null and b/indra/newview/app_settings/static_assets/6b61c8e8-4747-0d75-12d7-e49ff207a4ca.animatn differ diff --git a/indra/newview/app_settings/static_assets/6bd01860-4ebd-127a-bb3d-d1427e8e0c42.animatn b/indra/newview/app_settings/static_assets/6bd01860-4ebd-127a-bb3d-d1427e8e0c42.animatn new file mode 100644 index 0000000000..80dc724546 Binary files /dev/null and b/indra/newview/app_settings/static_assets/6bd01860-4ebd-127a-bb3d-d1427e8e0c42.animatn differ diff --git a/indra/newview/app_settings/static_assets/6ed24bd8-91aa-4b12-ccc7-c97c857ab4e0.animatn b/indra/newview/app_settings/static_assets/6ed24bd8-91aa-4b12-ccc7-c97c857ab4e0.animatn new file mode 100644 index 0000000000..1daa254f9d Binary files /dev/null and b/indra/newview/app_settings/static_assets/6ed24bd8-91aa-4b12-ccc7-c97c857ab4e0.animatn differ diff --git a/indra/newview/app_settings/static_assets/709ea28e-1573-c023-8bf8-520c8bc637fa.animatn b/indra/newview/app_settings/static_assets/709ea28e-1573-c023-8bf8-520c8bc637fa.animatn new file mode 100644 index 0000000000..d38b3c0a74 Binary files /dev/null and b/indra/newview/app_settings/static_assets/709ea28e-1573-c023-8bf8-520c8bc637fa.animatn differ diff --git a/indra/newview/app_settings/static_assets/70ea714f-3a97-d742-1b01-590a8fcd1db5.animatn b/indra/newview/app_settings/static_assets/70ea714f-3a97-d742-1b01-590a8fcd1db5.animatn new file mode 100644 index 0000000000..0eb2008999 Binary files /dev/null and b/indra/newview/app_settings/static_assets/70ea714f-3a97-d742-1b01-590a8fcd1db5.animatn differ diff --git a/indra/newview/app_settings/static_assets/72560c27-e48b-a6a5-10e3-d21dfb4bd4fb.clothing b/indra/newview/app_settings/static_assets/72560c27-e48b-a6a5-10e3-d21dfb4bd4fb.clothing new file mode 100644 index 0000000000..6755842945 --- /dev/null +++ b/indra/newview/app_settings/static_assets/72560c27-e48b-a6a5-10e3-d21dfb4bd4fb.clothing @@ -0,0 +1,29 @@ +LLWearable version 22 +RASL M PLAY TROUSERS + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 11 +parameters 5 +619 1 +624 1 +824 1 +825 1 +826 1 +textures 1 +17 2aa30286-f800-8444-61ff-44d42a6a0511 diff --git a/indra/newview/app_settings/static_assets/7693f268-06c7-ea71-fa21-2b30d6533f8f.animatn b/indra/newview/app_settings/static_assets/7693f268-06c7-ea71-fa21-2b30d6533f8f.animatn new file mode 100644 index 0000000000..c08bd38ab1 Binary files /dev/null and b/indra/newview/app_settings/static_assets/7693f268-06c7-ea71-fa21-2b30d6533f8f.animatn differ diff --git a/indra/newview/app_settings/static_assets/76d30ee1-c369-12ec-8dbc-9cf2f51120ff.gesture b/indra/newview/app_settings/static_assets/76d30ee1-c369-12ec-8dbc-9cf2f51120ff.gesture new file mode 100644 index 0000000000..bab2b2b242 Binary files /dev/null and b/indra/newview/app_settings/static_assets/76d30ee1-c369-12ec-8dbc-9cf2f51120ff.gesture differ diff --git a/indra/newview/app_settings/static_assets/76f7ced2-4f91-31c8-ff7d-e76b19abfa40.gesture b/indra/newview/app_settings/static_assets/76f7ced2-4f91-31c8-ff7d-e76b19abfa40.gesture new file mode 100644 index 0000000000..4bb19bcced Binary files /dev/null and b/indra/newview/app_settings/static_assets/76f7ced2-4f91-31c8-ff7d-e76b19abfa40.gesture differ diff --git a/indra/newview/app_settings/static_assets/7700f429-88f0-7e57-7714-33c73ad1a4eb.clothing b/indra/newview/app_settings/static_assets/7700f429-88f0-7e57-7714-33c73ad1a4eb.clothing new file mode 100644 index 0000000000..0305abbb39 --- /dev/null +++ b/indra/newview/app_settings/static_assets/7700f429-88f0-7e57-7714-33c73ad1a4eb.clothing @@ -0,0 +1,29 @@ +LLWearable version 22 +RASL M LOVE PANTS (BUFF) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 11 +parameters 5 +619 1 +624 1 +824 1 +825 1 +826 1 +textures 1 +17 fbd237f4-1607-b3d4-f7a4-0a16d0eedc7b diff --git a/indra/newview/app_settings/static_assets/7705007b-f459-0b49-e8f3-dd4eff6f82c2.bodypart b/indra/newview/app_settings/static_assets/7705007b-f459-0b49-e8f3-dd4eff6f82c2.bodypart new file mode 100644 index 0000000000..2da36db083 --- /dev/null +++ b/indra/newview/app_settings/static_assets/7705007b-f459-0b49-e8f3-dd4eff6f82c2.bodypart @@ -0,0 +1,52 @@ +LLWearable version 22 +RASL M SHOP SKIN (REMY) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 1 +parameters 26 +108 .02 +110 0 +111 .6 +116 0 +117 0 +150 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 +textures 3 +0 32140dec-f6a3-1262-3c60-85bae6a814f5 +5 76d19560-0882-6f0a-5c31-f3f825c3bd2a +6 198e53e7-cac5-849b-50bc-61b8b61efab2 diff --git a/indra/newview/app_settings/static_assets/790d7d90-eba9-d269-2d38-5cd2e36e7b93.clothing b/indra/newview/app_settings/static_assets/790d7d90-eba9-d269-2d38-5cd2e36e7b93.clothing new file mode 100644 index 0000000000..8e60fbbaee --- /dev/null +++ b/indra/newview/app_settings/static_assets/790d7d90-eba9-d269-2d38-5cd2e36e7b93.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL M SHOPPER SHOES FOOTSHAPER (WEAR) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id df110c10-72e6-40d6-8916-14b4b0366b18 + owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + last_owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 6 +parameters 10 +198 0 +503 0 +508 -1 +513 0 +514 0 +616 .1 +654 0 +812 1 +813 1 +817 1 +textures 1 +7 85b13d86-3e95-8d4b-a03b-c9c737631194 diff --git a/indra/newview/app_settings/static_assets/792c8d21-c931-31be-0319-1779a0f8caf4.bodypart b/indra/newview/app_settings/static_assets/792c8d21-c931-31be-0319-1779a0f8caf4.bodypart new file mode 100644 index 0000000000..b6079bd443 --- /dev/null +++ b/indra/newview/app_settings/static_assets/792c8d21-c931-31be-0319-1779a0f8caf4.bodypart @@ -0,0 +1,26 @@ +LLWearable version 22 +RASL - Eyes - Baby Blue + + permissions 0 + { + base_mask 00082000 + owner_mask 00082000 + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + 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 5b3917e5-98d9-d830-4704-1ddba558a63f diff --git a/indra/newview/app_settings/static_assets/7a17b059-12b2-41b1-570a-186368b6aa6f.animatn b/indra/newview/app_settings/static_assets/7a17b059-12b2-41b1-570a-186368b6aa6f.animatn new file mode 100644 index 0000000000..0846f1d496 Binary files /dev/null and b/indra/newview/app_settings/static_assets/7a17b059-12b2-41b1-570a-186368b6aa6f.animatn differ diff --git a/indra/newview/app_settings/static_assets/7a4e87fe-de39-6fcb-6223-024b00893244.animatn b/indra/newview/app_settings/static_assets/7a4e87fe-de39-6fcb-6223-024b00893244.animatn new file mode 100644 index 0000000000..609ab5456f Binary files /dev/null and b/indra/newview/app_settings/static_assets/7a4e87fe-de39-6fcb-6223-024b00893244.animatn differ diff --git a/indra/newview/app_settings/static_assets/7db00ccd-f380-f3ee-439d-61968ec69c8a.animatn b/indra/newview/app_settings/static_assets/7db00ccd-f380-f3ee-439d-61968ec69c8a.animatn new file mode 100644 index 0000000000..18f7414824 Binary files /dev/null and b/indra/newview/app_settings/static_assets/7db00ccd-f380-f3ee-439d-61968ec69c8a.animatn differ diff --git a/indra/newview/app_settings/static_assets/7fa32e57-0b88-d0f5-37b5-65ddf513e341.clothing b/indra/newview/app_settings/static_assets/7fa32e57-0b88-d0f5-37b5-65ddf513e341.clothing new file mode 100644 index 0000000000..03e044bf48 --- /dev/null +++ b/indra/newview/app_settings/static_assets/7fa32e57-0b88-d0f5-37b5-65ddf513e341.clothing @@ -0,0 +1,28 @@ +LLWearable version 22 +RASL SOCKS BLUE + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 7 +parameters 4 +617 1 +818 1 +819 1 +820 1 +textures 1 +12 0f2bfcbd-7853-6386-bffe-90cf9cf54a04 diff --git a/indra/newview/app_settings/static_assets/80700431-74ec-a008-14f8-77575e73693f.animatn b/indra/newview/app_settings/static_assets/80700431-74ec-a008-14f8-77575e73693f.animatn new file mode 100644 index 0000000000..0d36c25a15 Binary files /dev/null and b/indra/newview/app_settings/static_assets/80700431-74ec-a008-14f8-77575e73693f.animatn differ diff --git a/indra/newview/app_settings/static_assets/81287180-509d-477c-b10d-d68e403d5bcb.clothing b/indra/newview/app_settings/static_assets/81287180-509d-477c-b10d-d68e403d5bcb.clothing new file mode 100644 index 0000000000..b6f17db2ff --- /dev/null +++ b/indra/newview/app_settings/static_assets/81287180-509d-477c-b10d-d68e403d5bcb.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL F LOVE DRESS TOP + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 4 +parameters 10 +781 1 +800 1 +801 1 +802 1 +803 1 +804 1 +805 1 +828 0 +840 0 +868 0 +textures 1 +1 9be6ec18-3214-8b9f-b18c-3ec47b6a6e89 diff --git a/indra/newview/app_settings/static_assets/815c3d49-d7fa-0214-3053-8eb9e63fda4c.gesture b/indra/newview/app_settings/static_assets/815c3d49-d7fa-0214-3053-8eb9e63fda4c.gesture new file mode 100644 index 0000000000..19788395a6 Binary files /dev/null and b/indra/newview/app_settings/static_assets/815c3d49-d7fa-0214-3053-8eb9e63fda4c.gesture differ diff --git a/indra/newview/app_settings/static_assets/8175bd9f-ac1a-39e6-7cc6-93ab762f49bc.clothing b/indra/newview/app_settings/static_assets/8175bd9f-ac1a-39e6-7cc6-93ab762f49bc.clothing new file mode 100644 index 0000000000..188ae78603 --- /dev/null +++ b/indra/newview/app_settings/static_assets/8175bd9f-ac1a-39e6-7cc6-93ab762f49bc.clothing @@ -0,0 +1,33 @@ +LLWearable version 22 +RASL M PLAY SHIRT DOWN + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 5 +parameters 9 +625 0 +638 0 +806 1 +807 1 +808 1 +814 1 +815 .99 +816 .05 +869 0 +textures 1 +2 ae40787c-0181-d962-9b90-c24b5f7900d0 diff --git a/indra/newview/app_settings/static_assets/82e99230-c906-1403-4d9c-3889dd98daba.animatn b/indra/newview/app_settings/static_assets/82e99230-c906-1403-4d9c-3889dd98daba.animatn new file mode 100644 index 0000000000..a2a652071b Binary files /dev/null and b/indra/newview/app_settings/static_assets/82e99230-c906-1403-4d9c-3889dd98daba.animatn differ diff --git a/indra/newview/app_settings/static_assets/83bf1baf-6fdc-9906-9ab7-3113a3728136.bodypart b/indra/newview/app_settings/static_assets/83bf1baf-6fdc-9906-9ab7-3113a3728136.bodypart new file mode 100644 index 0000000000..8b109b0708 --- /dev/null +++ b/indra/newview/app_settings/static_assets/83bf1baf-6fdc-9906-9ab7-3113a3728136.bodypart @@ -0,0 +1,52 @@ +LLWearable version 22 +RASL F PLAY SKIN (Clara) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 1 +parameters 26 +108 .04 +110 0 +111 .4 +116 0 +117 0 +150 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 +textures 3 +0 c6b218b1-4069-af37-7d2f-7a105d04c6a3 +5 c8247b60-0b8e-4ba0-fd7d-4f9c78f4bc02 +6 efd439e2-4a0e-4dc9-1182-9d3daf27696c diff --git a/indra/newview/app_settings/static_assets/83ff59fe-2346-f236-9009-4e3608af64c1.animatn b/indra/newview/app_settings/static_assets/83ff59fe-2346-f236-9009-4e3608af64c1.animatn new file mode 100644 index 0000000000..043d4499f6 Binary files /dev/null and b/indra/newview/app_settings/static_assets/83ff59fe-2346-f236-9009-4e3608af64c1.animatn differ diff --git a/indra/newview/app_settings/static_assets/85428680-6bf9-3e64-b489-6f81087c24bd.animatn b/indra/newview/app_settings/static_assets/85428680-6bf9-3e64-b489-6f81087c24bd.animatn new file mode 100644 index 0000000000..aef2a5a1d6 Binary files /dev/null and b/indra/newview/app_settings/static_assets/85428680-6bf9-3e64-b489-6f81087c24bd.animatn differ diff --git a/indra/newview/app_settings/static_assets/85995026-eade-5d78-d364-94a64512cb66.animatn b/indra/newview/app_settings/static_assets/85995026-eade-5d78-d364-94a64512cb66.animatn new file mode 100644 index 0000000000..00365219af Binary files /dev/null and b/indra/newview/app_settings/static_assets/85995026-eade-5d78-d364-94a64512cb66.animatn differ diff --git a/indra/newview/app_settings/static_assets/865c5fe0-aafb-671a-8ad5-778beb24b6f8.gesture b/indra/newview/app_settings/static_assets/865c5fe0-aafb-671a-8ad5-778beb24b6f8.gesture new file mode 100644 index 0000000000..07d55776a0 Binary files /dev/null and b/indra/newview/app_settings/static_assets/865c5fe0-aafb-671a-8ad5-778beb24b6f8.gesture differ diff --git a/indra/newview/app_settings/static_assets/869ecdad-a44b-671e-3266-56aef2e3ac2e.animatn b/indra/newview/app_settings/static_assets/869ecdad-a44b-671e-3266-56aef2e3ac2e.animatn new file mode 100644 index 0000000000..e713a97844 Binary files /dev/null and b/indra/newview/app_settings/static_assets/869ecdad-a44b-671e-3266-56aef2e3ac2e.animatn differ diff --git a/indra/newview/app_settings/static_assets/8868cfa3-5b82-97ab-dc38-ded906f7fd90.gesture b/indra/newview/app_settings/static_assets/8868cfa3-5b82-97ab-dc38-ded906f7fd90.gesture new file mode 100644 index 0000000000..25ec1d7c7c Binary files /dev/null and b/indra/newview/app_settings/static_assets/8868cfa3-5b82-97ab-dc38-ded906f7fd90.gesture differ diff --git a/indra/newview/app_settings/static_assets/8ac9b0b4-9409-383a-1339-5373895f5368.bodypart b/indra/newview/app_settings/static_assets/8ac9b0b4-9409-383a-1339-5373895f5368.bodypart new file mode 100644 index 0000000000..39303b4707 --- /dev/null +++ b/indra/newview/app_settings/static_assets/8ac9b0b4-9409-383a-1339-5373895f5368.bodypart @@ -0,0 +1,105 @@ +LLWearable version 22 +RASL F SHOP SHAPE (SUZY) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 0 +parameters 82 +1 .44 +2 -.21 +4 .1 +5 .01 +6 .06 +7 .02 +8 -.44 +10 .08 +11 -.1 +12 .46 +13 .08 +14 .47 +15 -.2 +17 -.26 +18 1.14 +19 -.38 +20 -.1 +21 .07 +22 0 +23 -.42 +24 .08 +25 .33 +27 -.2 +33 .5 +34 -.02 +35 -.04 +36 -1 +37 -.56 +38 -.14 +80 0 +105 .4 +155 -.48 +157 .03 +185 -.12 +193 .63 +196 -.86 +505 .37 +506 -.12 +507 -.31 +515 -1 +517 .01 +518 .17 +629 .58 +637 .05 +646 .08 +647 -.25 +649 .3 +650 .5 +652 .4 +653 .56 +656 0 +659 .7 +662 .5 +663 0 +664 0 +665 -.28 +675 -.18 +676 -.19 +678 .5 +682 .52 +683 -.18 +684 .08 +685 0 +690 .39 +692 .1 +693 -.12 +753 .48 +756 -.3 +758 -.48 +759 .43 +760 .91 +764 .21 +765 -.3 +769 .63 +773 .38 +795 .19 +796 0 +799 .52 +841 .04 +842 -.4 +879 0 +880 -.77 +textures 0 diff --git a/indra/newview/app_settings/static_assets/8b102617-bcba-037b-86c1-b76219f90c88.animatn b/indra/newview/app_settings/static_assets/8b102617-bcba-037b-86c1-b76219f90c88.animatn new file mode 100644 index 0000000000..acf5967f4d Binary files /dev/null and b/indra/newview/app_settings/static_assets/8b102617-bcba-037b-86c1-b76219f90c88.animatn differ diff --git a/indra/newview/app_settings/static_assets/8b753e16-bd7d-2bb3-7765-671b7b31e77c.gesture b/indra/newview/app_settings/static_assets/8b753e16-bd7d-2bb3-7765-671b7b31e77c.gesture new file mode 100644 index 0000000000..ca1a9c1e3f Binary files /dev/null and b/indra/newview/app_settings/static_assets/8b753e16-bd7d-2bb3-7765-671b7b31e77c.gesture differ diff --git a/indra/newview/app_settings/static_assets/8ccf1744-1509-7537-0fb5-1d33d2eefaf8.bodypart b/indra/newview/app_settings/static_assets/8ccf1744-1509-7537-0fb5-1d33d2eefaf8.bodypart new file mode 100644 index 0000000000..f33c2368c3 --- /dev/null +++ b/indra/newview/app_settings/static_assets/8ccf1744-1509-7537-0fb5-1d33d2eefaf8.bodypart @@ -0,0 +1,26 @@ +LLWearable version 22 +RASL - Eyes - Med Brown + + permissions 0 + { + base_mask 0008c000 + owner_mask 0008c000 + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 0008c000 + creator_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + 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 6744cd4d-ce43-feb5-e37f-72aef2730250 diff --git a/indra/newview/app_settings/static_assets/8dbc8a59-18ec-c9c0-8edf-ddcb8a749e5f.gesture b/indra/newview/app_settings/static_assets/8dbc8a59-18ec-c9c0-8edf-ddcb8a749e5f.gesture new file mode 100644 index 0000000000..8712d24674 Binary files /dev/null and b/indra/newview/app_settings/static_assets/8dbc8a59-18ec-c9c0-8edf-ddcb8a749e5f.gesture differ diff --git a/indra/newview/app_settings/static_assets/8ea9f72c-6e64-e6bf-34ed-2713f84db063.clothing b/indra/newview/app_settings/static_assets/8ea9f72c-6e64-e6bf-34ed-2713f84db063.clothing new file mode 100644 index 0000000000..dad4b77363 --- /dev/null +++ b/indra/newview/app_settings/static_assets/8ea9f72c-6e64-e6bf-34ed-2713f84db063.clothing @@ -0,0 +1,29 @@ +LLWearable version 22 +RASL F CREATE CAPRI PANTS + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 11 +parameters 5 +619 .99 +624 1 +824 1 +825 1 +826 1 +textures 1 +17 c529d836-cd39-a25c-40fc-c097e32390ed diff --git a/indra/newview/app_settings/static_assets/90bdcd26-2c6b-44a7-aab2-18c5a04f3fc3.gesture b/indra/newview/app_settings/static_assets/90bdcd26-2c6b-44a7-aab2-18c5a04f3fc3.gesture new file mode 100644 index 0000000000..5140f0791a Binary files /dev/null and b/indra/newview/app_settings/static_assets/90bdcd26-2c6b-44a7-aab2-18c5a04f3fc3.gesture differ diff --git a/indra/newview/app_settings/static_assets/90e38814-7029-18a2-70ea-346ca73569aa.bodypart b/indra/newview/app_settings/static_assets/90e38814-7029-18a2-70ea-346ca73569aa.bodypart new file mode 100644 index 0000000000..87c79dd107 --- /dev/null +++ b/indra/newview/app_settings/static_assets/90e38814-7029-18a2-70ea-346ca73569aa.bodypart @@ -0,0 +1,63 @@ +LLWearable version 22 +RASL M LOVE EYEBROWSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 39 +16 1.11 +31 .28 +112 0 +113 0 +114 0 +115 0 +119 0 +130 0 +131 0 +132 0 +133 0 +134 0 +135 0 +136 0 +137 .5 +140 0 +141 0 +142 0 +143 -4 +166 0 +167 0 +168 0 +169 0 +177 0 +181 -1 +182 -1 +183 -1 +184 0 +192 0 +674 -1 +750 0 +752 .5 +754 .5 +755 0 +757 -1.18 +762 0 +763 0 +785 0 +789 0 +textures 1 +4 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b diff --git a/indra/newview/app_settings/static_assets/92624d3e-1068-f1aa-a5ec-8244585193ed.animatn b/indra/newview/app_settings/static_assets/92624d3e-1068-f1aa-a5ec-8244585193ed.animatn new file mode 100644 index 0000000000..fe6d26be2f Binary files /dev/null and b/indra/newview/app_settings/static_assets/92624d3e-1068-f1aa-a5ec-8244585193ed.animatn differ diff --git a/indra/newview/app_settings/static_assets/928cae18-e31d-76fd-9cc9-2f55160ff818.animatn b/indra/newview/app_settings/static_assets/928cae18-e31d-76fd-9cc9-2f55160ff818.animatn new file mode 100644 index 0000000000..f49ea1f4f9 Binary files /dev/null and b/indra/newview/app_settings/static_assets/928cae18-e31d-76fd-9cc9-2f55160ff818.animatn differ diff --git a/indra/newview/app_settings/static_assets/944890c6-1960-b1a7-f50a-c05651720d7e.bodypart b/indra/newview/app_settings/static_assets/944890c6-1960-b1a7-f50a-c05651720d7e.bodypart new file mode 100644 index 0000000000..4b50839c1c --- /dev/null +++ b/indra/newview/app_settings/static_assets/944890c6-1960-b1a7-f50a-c05651720d7e.bodypart @@ -0,0 +1,63 @@ +LLWearable version 22 +RASL F LEARN EYEBROWSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 39 +16 .41 +31 .62 +112 0 +113 0 +114 0 +115 0 +119 0 +130 0 +131 0 +132 0 +133 0 +134 0 +135 0 +136 0 +137 .5 +140 0 +141 0 +142 0 +143 -4 +166 0 +167 0 +168 0 +169 0 +177 0 +181 -1 +182 -1 +183 -1 +184 0 +192 0 +674 -1 +750 0 +752 .5 +754 .5 +755 0 +757 -.22 +762 0 +763 0 +785 0 +789 0 +textures 1 +4 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b diff --git a/indra/newview/app_settings/static_assets/94669140-c63b-8805-5561-62f5e24206ea.bodypart b/indra/newview/app_settings/static_assets/94669140-c63b-8805-5561-62f5e24206ea.bodypart new file mode 100644 index 0000000000..7bd970ec36 --- /dev/null +++ b/indra/newview/app_settings/static_assets/94669140-c63b-8805-5561-62f5e24206ea.bodypart @@ -0,0 +1,63 @@ +LLWearable version 22 +RASL F CREATE EYEBROWSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 39 +16 .2 +31 .2 +112 0 +113 0 +114 0 +115 0 +119 0 +130 0 +131 0 +132 0 +133 0 +134 0 +135 0 +136 0 +137 .5 +140 0 +141 0 +142 0 +143 -4 +166 0 +167 0 +168 0 +169 0 +177 0 +181 -1 +182 -1 +183 -1 +184 0 +192 0 +674 -1 +750 0 +752 .5 +754 .5 +755 0 +757 -.52 +762 0 +763 0 +785 0 +789 0 +textures 1 +4 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b diff --git a/indra/newview/app_settings/static_assets/951469f4-c7b2-c818-9dee-ad7eea8c30b7.animatn b/indra/newview/app_settings/static_assets/951469f4-c7b2-c818-9dee-ad7eea8c30b7.animatn new file mode 100644 index 0000000000..44226ce7a0 Binary files /dev/null and b/indra/newview/app_settings/static_assets/951469f4-c7b2-c818-9dee-ad7eea8c30b7.animatn differ diff --git a/indra/newview/app_settings/static_assets/9583adac-bc9b-a021-ab8f-26018db46ab5.gesture b/indra/newview/app_settings/static_assets/9583adac-bc9b-a021-ab8f-26018db46ab5.gesture new file mode 100644 index 0000000000..32144092b9 Binary files /dev/null and b/indra/newview/app_settings/static_assets/9583adac-bc9b-a021-ab8f-26018db46ab5.gesture differ diff --git a/indra/newview/app_settings/static_assets/97c5742d-1d74-9408-2bae-9738a9e9d084.gesture b/indra/newview/app_settings/static_assets/97c5742d-1d74-9408-2bae-9738a9e9d084.gesture new file mode 100644 index 0000000000..c63df50438 Binary files /dev/null and b/indra/newview/app_settings/static_assets/97c5742d-1d74-9408-2bae-9738a9e9d084.gesture differ diff --git a/indra/newview/app_settings/static_assets/9b0c1c4e-8ac7-7969-1494-28c874c4f668.animatn b/indra/newview/app_settings/static_assets/9b0c1c4e-8ac7-7969-1494-28c874c4f668.animatn new file mode 100644 index 0000000000..61af2498b8 Binary files /dev/null and b/indra/newview/app_settings/static_assets/9b0c1c4e-8ac7-7969-1494-28c874c4f668.animatn differ diff --git a/indra/newview/app_settings/static_assets/9b29cd61-c45b-5689-ded2-91756b8d76a9.animatn b/indra/newview/app_settings/static_assets/9b29cd61-c45b-5689-ded2-91756b8d76a9.animatn new file mode 100644 index 0000000000..26d3760f04 Binary files /dev/null and b/indra/newview/app_settings/static_assets/9b29cd61-c45b-5689-ded2-91756b8d76a9.animatn differ diff --git a/indra/newview/app_settings/static_assets/9b37423a-caf6-3bb6-f4e8-60a11ccee1af.bodypart b/indra/newview/app_settings/static_assets/9b37423a-caf6-3bb6-f4e8-60a11ccee1af.bodypart new file mode 100644 index 0000000000..b69a46aec8 --- /dev/null +++ b/indra/newview/app_settings/static_assets/9b37423a-caf6-3bb6-f4e8-60a11ccee1af.bodypart @@ -0,0 +1,105 @@ +LLWearable version 22 +RASL M PLAY SHAPE (HEATH) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 0 +parameters 82 +1 -.16 +2 -.14 +4 .35 +5 .1 +6 -.04 +7 -.2 +8 -.28 +10 .52 +11 0 +12 .46 +13 .34 +14 .55 +15 -.24 +17 -.2 +18 .9 +19 -.25 +20 -.26 +21 .11 +22 .57 +23 -.5 +24 -.1 +25 .07 +27 -.27 +33 1.23 +34 -.26 +35 -.07 +36 -.52 +37 -.32 +38 -.14 +80 1 +105 .5 +155 -.13 +157 .02 +185 -.66 +193 .46 +196 -.77 +505 .5 +506 -.2 +507 0 +515 -1 +517 -.25 +518 -.08 +629 .37 +637 .05 +646 .17 +647 .07 +649 .5 +650 -.27 +652 .48 +653 .29 +656 0 +659 .55 +662 .5 +663 0 +664 0 +665 .08 +675 -.12 +676 -.4 +678 .43 +682 .57 +683 -.11 +684 0 +685 0 +690 .46 +692 .2 +693 .16 +753 1.08 +756 -.68 +758 -.42 +759 .32 +760 .78 +764 .45 +765 -.3 +769 .47 +773 .49 +795 .23 +796 .42 +799 .46 +841 .02 +842 .12 +879 .22 +880 -.75 +textures 0 diff --git a/indra/newview/app_settings/static_assets/9ba1c942-08be-e43a-fb29-16ad440efc50.animatn b/indra/newview/app_settings/static_assets/9ba1c942-08be-e43a-fb29-16ad440efc50.animatn new file mode 100644 index 0000000000..752a2af75e Binary files /dev/null and b/indra/newview/app_settings/static_assets/9ba1c942-08be-e43a-fb29-16ad440efc50.animatn differ diff --git a/indra/newview/app_settings/static_assets/9cde58a2-05ba-5c21-5c90-b76079185990.clothing b/indra/newview/app_settings/static_assets/9cde58a2-05ba-5c21-5c90-b76079185990.clothing new file mode 100644 index 0000000000..70fd59b07d --- /dev/null +++ b/indra/newview/app_settings/static_assets/9cde58a2-05ba-5c21-5c90-b76079185990.clothing @@ -0,0 +1,33 @@ +LLWearable version 22 +Male Designer Tank Down + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 0008e000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 5 +parameters 9 +625 0 +638 0 +806 1 +807 1 +808 1 +814 1 +815 .99 +816 .05 +869 0 +textures 1 +2 6b52d34e-bade-dcc4-5442-c186b5ecc5f1 diff --git a/indra/newview/app_settings/static_assets/9e439264-0a7b-9190-d128-995092499c28.gesture b/indra/newview/app_settings/static_assets/9e439264-0a7b-9190-d128-995092499c28.gesture new file mode 100644 index 0000000000..f9db489999 Binary files /dev/null and b/indra/newview/app_settings/static_assets/9e439264-0a7b-9190-d128-995092499c28.gesture differ diff --git a/indra/newview/app_settings/static_assets/9f496bd2-589a-709f-16cc-69bf7df1d36c.animatn b/indra/newview/app_settings/static_assets/9f496bd2-589a-709f-16cc-69bf7df1d36c.animatn new file mode 100644 index 0000000000..9934140148 Binary files /dev/null and b/indra/newview/app_settings/static_assets/9f496bd2-589a-709f-16cc-69bf7df1d36c.animatn differ diff --git a/indra/newview/app_settings/static_assets/a00917ca-047d-a3ea-d246-63265f904a6e.bodypart b/indra/newview/app_settings/static_assets/a00917ca-047d-a3ea-d246-63265f904a6e.bodypart new file mode 100644 index 0000000000..32b4842722 --- /dev/null +++ b/indra/newview/app_settings/static_assets/a00917ca-047d-a3ea-d246-63265f904a6e.bodypart @@ -0,0 +1,105 @@ +LLWearable version 22 +RASL M LEARN SHAPE (BILLY) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 0 +parameters 82 +1 .55 +2 .02 +4 -.05 +5 -.01 +6 .09 +7 -.21 +8 .04 +10 .48 +11 .3 +12 -.08 +13 .06 +14 .19 +15 -.14 +17 -.09 +18 .5 +19 -.65 +20 -.1 +21 .08 +22 .57 +23 -.28 +24 -.28 +25 .33 +27 -.22 +33 1.1 +34 -.08 +35 0 +36 -.58 +37 0 +38 .08 +80 1 +105 .5 +155 -.28 +157 .05 +185 -.5 +193 .45 +196 -1.07 +505 .54 +506 0 +507 0 +515 -1 +517 -.2 +518 -.08 +629 .37 +637 .14 +646 .08 +647 -.22 +649 .5 +650 -.27 +652 .49 +653 .11 +656 0 +659 .54 +662 .5 +663 0 +664 0 +665 0 +675 -.1 +676 -.31 +678 .48 +682 .63 +683 -.08 +684 0 +685 .22 +690 .48 +692 0 +693 .12 +753 .76 +756 -.68 +758 -.6 +759 .5 +760 .82 +764 .78 +765 .54 +769 .5 +773 .45 +795 .26 +796 0 +799 .5 +841 -.02 +842 0 +879 .08 +880 -.7 +textures 0 diff --git a/indra/newview/app_settings/static_assets/a166cdc3-ea15-0c01-ca5b-d3fed6e3ca75.gesture b/indra/newview/app_settings/static_assets/a166cdc3-ea15-0c01-ca5b-d3fed6e3ca75.gesture new file mode 100644 index 0000000000..30dbec56e8 Binary files /dev/null and b/indra/newview/app_settings/static_assets/a166cdc3-ea15-0c01-ca5b-d3fed6e3ca75.gesture differ diff --git a/indra/newview/app_settings/static_assets/a41965be-10f2-1625-df3b-2fe35716998b.gesture b/indra/newview/app_settings/static_assets/a41965be-10f2-1625-df3b-2fe35716998b.gesture new file mode 100644 index 0000000000..c57bf21607 Binary files /dev/null and b/indra/newview/app_settings/static_assets/a41965be-10f2-1625-df3b-2fe35716998b.gesture differ diff --git a/indra/newview/app_settings/static_assets/a53d49ad-d705-dd1b-318e-4d1cf3c04a11.gesture b/indra/newview/app_settings/static_assets/a53d49ad-d705-dd1b-318e-4d1cf3c04a11.gesture new file mode 100644 index 0000000000..f23a6a4e41 Binary files /dev/null and b/indra/newview/app_settings/static_assets/a53d49ad-d705-dd1b-318e-4d1cf3c04a11.gesture differ diff --git a/indra/newview/app_settings/static_assets/a54d8ee2-28bb-80a9-7f0c-7afbbe24a5d6.animatn b/indra/newview/app_settings/static_assets/a54d8ee2-28bb-80a9-7f0c-7afbbe24a5d6.animatn new file mode 100644 index 0000000000..2aa7fa801a Binary files /dev/null and b/indra/newview/app_settings/static_assets/a54d8ee2-28bb-80a9-7f0c-7afbbe24a5d6.animatn differ diff --git a/indra/newview/app_settings/static_assets/a6a09cb1-0845-5ec0-051e-16bb79b30ddf.gesture b/indra/newview/app_settings/static_assets/a6a09cb1-0845-5ec0-051e-16bb79b30ddf.gesture new file mode 100644 index 0000000000..611df452a7 Binary files /dev/null and b/indra/newview/app_settings/static_assets/a6a09cb1-0845-5ec0-051e-16bb79b30ddf.gesture differ diff --git a/indra/newview/app_settings/static_assets/a8dee56f-2eae-9e7a-05a2-6fb92b97e21e.animatn b/indra/newview/app_settings/static_assets/a8dee56f-2eae-9e7a-05a2-6fb92b97e21e.animatn new file mode 100644 index 0000000000..fd70f4bbe7 Binary files /dev/null and b/indra/newview/app_settings/static_assets/a8dee56f-2eae-9e7a-05a2-6fb92b97e21e.animatn differ diff --git a/indra/newview/app_settings/static_assets/a8dee7f6-a796-12a0-91bd-abf2fff300cc.clothing b/indra/newview/app_settings/static_assets/a8dee7f6-a796-12a0-91bd-abf2fff300cc.clothing new file mode 100644 index 0000000000..8db5c61b15 --- /dev/null +++ b/indra/newview/app_settings/static_assets/a8dee7f6-a796-12a0-91bd-abf2fff300cc.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL F LEARN SWEATER (RED) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 8 +parameters 9 +606 1 +607 1 +608 1 +609 1 +780 1 +834 1 +835 1 +836 1 +877 0 +textures 2 +13 5c657bbe-1a1d-30e4-e5b3-27b1a4656ea8 +14 c78e709f-a23e-928a-b1cf-3ab8446c1e2b diff --git a/indra/newview/app_settings/static_assets/a94ef3a0-7119-67b6-67e0-d93d5b08a544.gesture b/indra/newview/app_settings/static_assets/a94ef3a0-7119-67b6-67e0-d93d5b08a544.gesture new file mode 100644 index 0000000000..66e3de573f Binary files /dev/null and b/indra/newview/app_settings/static_assets/a94ef3a0-7119-67b6-67e0-d93d5b08a544.gesture differ diff --git a/indra/newview/app_settings/static_assets/aa134404-7dac-7aca-2cba-435f9db875ca.animatn b/indra/newview/app_settings/static_assets/aa134404-7dac-7aca-2cba-435f9db875ca.animatn new file mode 100644 index 0000000000..f67371b87a Binary files /dev/null and b/indra/newview/app_settings/static_assets/aa134404-7dac-7aca-2cba-435f9db875ca.animatn differ diff --git a/indra/newview/app_settings/static_assets/aa9d6d53-2647-f731-97eb-e07a47febb57.bodypart b/indra/newview/app_settings/static_assets/aa9d6d53-2647-f731-97eb-e07a47febb57.bodypart new file mode 100644 index 0000000000..a2ba070675 --- /dev/null +++ b/indra/newview/app_settings/static_assets/aa9d6d53-2647-f731-97eb-e07a47febb57.bodypart @@ -0,0 +1,63 @@ +LLWearable version 22 +RASL M CREATE EYEBROWSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 39 +16 .97 +31 .28 +112 0 +113 0 +114 0 +115 0 +119 0 +130 0 +131 0 +132 0 +133 0 +134 0 +135 0 +136 0 +137 .5 +140 0 +141 0 +142 0 +143 -4 +166 0 +167 0 +168 0 +169 0 +177 0 +181 -1 +182 -1 +183 -1 +184 0 +192 0 +674 -1 +750 0 +752 .5 +754 .5 +755 0 +757 -.52 +762 0 +763 0 +785 0 +789 0 +textures 1 +4 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b diff --git a/indra/newview/app_settings/static_assets/abe169ff-ee4d-0e22-aa03-19b8116fdd7a.clothing b/indra/newview/app_settings/static_assets/abe169ff-ee4d-0e22-aa03-19b8116fdd7a.clothing new file mode 100644 index 0000000000..a45bd8390f --- /dev/null +++ b/indra/newview/app_settings/static_assets/abe169ff-ee4d-0e22-aa03-19b8116fdd7a.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL F EXPLORE TANK UP + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 4 +parameters 10 +781 1 +800 1 +801 1 +802 1 +803 1 +804 1 +805 1 +828 0 +840 0 +868 0 +textures 1 +1 8059c9dd-b620-71bc-262b-1f2df45c7ad0 diff --git a/indra/newview/app_settings/static_assets/aca78492-0487-03ec-4eb5-5c8e76c837e1.gesture b/indra/newview/app_settings/static_assets/aca78492-0487-03ec-4eb5-5c8e76c837e1.gesture new file mode 100644 index 0000000000..c350917a98 Binary files /dev/null and b/indra/newview/app_settings/static_assets/aca78492-0487-03ec-4eb5-5c8e76c837e1.gesture differ diff --git a/indra/newview/app_settings/static_assets/ad22cda1-00c1-21cc-2f35-9ea5b8636f9e.gesture b/indra/newview/app_settings/static_assets/ad22cda1-00c1-21cc-2f35-9ea5b8636f9e.gesture new file mode 100644 index 0000000000..be5fc6258f Binary files /dev/null and b/indra/newview/app_settings/static_assets/ad22cda1-00c1-21cc-2f35-9ea5b8636f9e.gesture differ diff --git a/indra/newview/app_settings/static_assets/ad4e858f-08a7-e67a-4d55-b0fc18b2518b.clothing b/indra/newview/app_settings/static_assets/ad4e858f-08a7-e67a-4d55-b0fc18b2518b.clothing new file mode 100644 index 0000000000..07710607d6 --- /dev/null +++ b/indra/newview/app_settings/static_assets/ad4e858f-08a7-e67a-4d55-b0fc18b2518b.clothing @@ -0,0 +1,29 @@ +LLWearable version 22 +Male Designer Pants (Green) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 0008e000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 11 +parameters 5 +619 1 +624 1 +824 1 +825 1 +826 1 +textures 1 +17 f0a74d98-6efb-c7d6-707c-bceb6140de12 diff --git a/indra/newview/app_settings/static_assets/ad88e068-dc0a-6ef2-5a97-929ad01d883b.gesture b/indra/newview/app_settings/static_assets/ad88e068-dc0a-6ef2-5a97-929ad01d883b.gesture new file mode 100644 index 0000000000..0a7bfab170 Binary files /dev/null and b/indra/newview/app_settings/static_assets/ad88e068-dc0a-6ef2-5a97-929ad01d883b.gesture differ diff --git a/indra/newview/app_settings/static_assets/aec4610c-757f-bc4e-c092-c6e9caf18daf.animatn b/indra/newview/app_settings/static_assets/aec4610c-757f-bc4e-c092-c6e9caf18daf.animatn new file mode 100644 index 0000000000..c7c69ef0e1 Binary files /dev/null and b/indra/newview/app_settings/static_assets/aec4610c-757f-bc4e-c092-c6e9caf18daf.animatn differ diff --git a/indra/newview/app_settings/static_assets/af2b8320-e579-2c41-b717-969759aeb3ca.gesture b/indra/newview/app_settings/static_assets/af2b8320-e579-2c41-b717-969759aeb3ca.gesture new file mode 100644 index 0000000000..17b233adb6 Binary files /dev/null and b/indra/newview/app_settings/static_assets/af2b8320-e579-2c41-b717-969759aeb3ca.gesture differ diff --git a/indra/newview/app_settings/static_assets/afb80807-4214-7f3c-55b8-00858f56d37a.gesture b/indra/newview/app_settings/static_assets/afb80807-4214-7f3c-55b8-00858f56d37a.gesture new file mode 100644 index 0000000000..921e03751d Binary files /dev/null and b/indra/newview/app_settings/static_assets/afb80807-4214-7f3c-55b8-00858f56d37a.gesture differ diff --git a/indra/newview/app_settings/static_assets/afd64d9d-572d-b4f1-69bc-a79f70768177.gesture b/indra/newview/app_settings/static_assets/afd64d9d-572d-b4f1-69bc-a79f70768177.gesture new file mode 100644 index 0000000000..2658e86a19 Binary files /dev/null and b/indra/newview/app_settings/static_assets/afd64d9d-572d-b4f1-69bc-a79f70768177.gesture differ diff --git a/indra/newview/app_settings/static_assets/b0dc417c-1f11-af36-2e80-7e7489fa7cdc.animatn b/indra/newview/app_settings/static_assets/b0dc417c-1f11-af36-2e80-7e7489fa7cdc.animatn new file mode 100644 index 0000000000..6f797ba1ff Binary files /dev/null and b/indra/newview/app_settings/static_assets/b0dc417c-1f11-af36-2e80-7e7489fa7cdc.animatn differ diff --git a/indra/newview/app_settings/static_assets/b1709c8d-ecd3-54a1-4f28-d55ac0840782.animatn b/indra/newview/app_settings/static_assets/b1709c8d-ecd3-54a1-4f28-d55ac0840782.animatn new file mode 100644 index 0000000000..de12bcd2a5 Binary files /dev/null and b/indra/newview/app_settings/static_assets/b1709c8d-ecd3-54a1-4f28-d55ac0840782.animatn differ diff --git a/indra/newview/app_settings/static_assets/b1dc34e2-c8fb-3885-3a7e-10be1d5589dd.clothing b/indra/newview/app_settings/static_assets/b1dc34e2-c8fb-3885-3a7e-10be1d5589dd.clothing new file mode 100644 index 0000000000..0cfb75ca7b --- /dev/null +++ b/indra/newview/app_settings/static_assets/b1dc34e2-c8fb-3885-3a7e-10be1d5589dd.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +Male Designer Tank Up + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 0008e000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 4 +parameters 10 +781 1 +800 1 +801 1 +802 1 +803 1 +804 1 +805 1 +828 0 +840 0 +868 0 +textures 1 +1 428dd646-734b-f43f-3550-f248bd9dfa10 diff --git a/indra/newview/app_settings/static_assets/b1ed7982-c68e-a982-7561-52a88a5298c0.animatn b/indra/newview/app_settings/static_assets/b1ed7982-c68e-a982-7561-52a88a5298c0.animatn new file mode 100644 index 0000000000..4852846250 Binary files /dev/null and b/indra/newview/app_settings/static_assets/b1ed7982-c68e-a982-7561-52a88a5298c0.animatn differ diff --git a/indra/newview/app_settings/static_assets/b312b10e-65ab-a0a4-8b3c-1326ea8e3ed9.animatn b/indra/newview/app_settings/static_assets/b312b10e-65ab-a0a4-8b3c-1326ea8e3ed9.animatn new file mode 100644 index 0000000000..2f2ea3b6b7 Binary files /dev/null and b/indra/newview/app_settings/static_assets/b312b10e-65ab-a0a4-8b3c-1326ea8e3ed9.animatn differ diff --git a/indra/newview/app_settings/static_assets/b57c996d-cb06-43c8-749d-e9ce361f172e.gesture b/indra/newview/app_settings/static_assets/b57c996d-cb06-43c8-749d-e9ce361f172e.gesture new file mode 100644 index 0000000000..90ad3c4a9c Binary files /dev/null and b/indra/newview/app_settings/static_assets/b57c996d-cb06-43c8-749d-e9ce361f172e.gesture differ diff --git a/indra/newview/app_settings/static_assets/b5b4a67d-0aee-30d2-72cd-77b333e932ef.animatn b/indra/newview/app_settings/static_assets/b5b4a67d-0aee-30d2-72cd-77b333e932ef.animatn new file mode 100644 index 0000000000..a826b52b22 Binary files /dev/null and b/indra/newview/app_settings/static_assets/b5b4a67d-0aee-30d2-72cd-77b333e932ef.animatn differ diff --git a/indra/newview/app_settings/static_assets/b5ea617e-47cf-612b-2d99-8c6f6dcac218.gesture b/indra/newview/app_settings/static_assets/b5ea617e-47cf-612b-2d99-8c6f6dcac218.gesture new file mode 100644 index 0000000000..b31632c9e9 Binary files /dev/null and b/indra/newview/app_settings/static_assets/b5ea617e-47cf-612b-2d99-8c6f6dcac218.gesture differ diff --git a/indra/newview/app_settings/static_assets/b606cdd6-4c22-6cc0-4614-560e6b9beeba.clothing b/indra/newview/app_settings/static_assets/b606cdd6-4c22-6cc0-4614-560e6b9beeba.clothing new file mode 100644 index 0000000000..99d59fb544 --- /dev/null +++ b/indra/newview/app_settings/static_assets/b606cdd6-4c22-6cc0-4614-560e6b9beeba.clothing @@ -0,0 +1,33 @@ +LLWearable version 22 +RASL M LEARN JEANS + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 5 +parameters 9 +625 0 +638 0 +806 1 +807 1 +808 1 +814 1 +815 .99 +816 .05 +869 0 +textures 1 +2 dac82639-53da-a87b-0f30-9187b0aef7cc diff --git a/indra/newview/app_settings/static_assets/b68a3d7c-de9e-fc87-eec8-543d787e5b0d.animatn b/indra/newview/app_settings/static_assets/b68a3d7c-de9e-fc87-eec8-543d787e5b0d.animatn new file mode 100644 index 0000000000..891f63373a Binary files /dev/null and b/indra/newview/app_settings/static_assets/b68a3d7c-de9e-fc87-eec8-543d787e5b0d.animatn differ diff --git a/indra/newview/app_settings/static_assets/b6e66a0e-f8db-0d4b-9259-7e9b20562b73.bodypart b/indra/newview/app_settings/static_assets/b6e66a0e-f8db-0d4b-9259-7e9b20562b73.bodypart new file mode 100644 index 0000000000..602648df79 --- /dev/null +++ b/indra/newview/app_settings/static_assets/b6e66a0e-f8db-0d4b-9259-7e9b20562b73.bodypart @@ -0,0 +1,26 @@ +LLWearable version 22 +RASL - Eyes - Hazel Brown + + permissions 0 + { + base_mask 00082000 + owner_mask 00082000 + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + 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 3818dcc3-95c3-f20f-a6d6-626f39a1cef0 diff --git a/indra/newview/app_settings/static_assets/b6f560d1-e2ad-24df-344c-2943c47a6775.gesture b/indra/newview/app_settings/static_assets/b6f560d1-e2ad-24df-344c-2943c47a6775.gesture new file mode 100644 index 0000000000..5157c2b05d Binary files /dev/null and b/indra/newview/app_settings/static_assets/b6f560d1-e2ad-24df-344c-2943c47a6775.gesture differ diff --git a/indra/newview/app_settings/static_assets/b8c8b2a3-9008-1771-3bfc-90924955ab2d.animatn b/indra/newview/app_settings/static_assets/b8c8b2a3-9008-1771-3bfc-90924955ab2d.animatn new file mode 100644 index 0000000000..a1f6676f2e Binary files /dev/null and b/indra/newview/app_settings/static_assets/b8c8b2a3-9008-1771-3bfc-90924955ab2d.animatn differ diff --git a/indra/newview/app_settings/static_assets/b8de1c20-7eba-2101-f2e3-9ed132838dcc.bodypart b/indra/newview/app_settings/static_assets/b8de1c20-7eba-2101-f2e3-9ed132838dcc.bodypart new file mode 100644 index 0000000000..6e79fc0992 --- /dev/null +++ b/indra/newview/app_settings/static_assets/b8de1c20-7eba-2101-f2e3-9ed132838dcc.bodypart @@ -0,0 +1,63 @@ +LLWearable version 22 +RASL F SHOP EYEBROWSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 39 +16 1.22 +31 .22 +112 0 +113 0 +114 0 +115 0 +119 0 +130 0 +131 0 +132 0 +133 0 +134 0 +135 0 +136 0 +137 .5 +140 0 +141 0 +142 0 +143 -4 +166 0 +167 0 +168 0 +169 0 +177 0 +181 -1 +182 -1 +183 -1 +184 0 +192 0 +674 -1 +750 0 +752 .5 +754 .5 +755 0 +757 -.1 +762 0 +763 0 +785 0 +789 0 +textures 1 +4 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b diff --git a/indra/newview/app_settings/static_assets/b906c4ba-703b-1940-32a3-0c7f7d791510.animatn b/indra/newview/app_settings/static_assets/b906c4ba-703b-1940-32a3-0c7f7d791510.animatn new file mode 100644 index 0000000000..403a9e9afe Binary files /dev/null and b/indra/newview/app_settings/static_assets/b906c4ba-703b-1940-32a3-0c7f7d791510.animatn differ diff --git a/indra/newview/app_settings/static_assets/ba38eeb2-d35f-0a07-0c04-0eb42fcc6010.gesture b/indra/newview/app_settings/static_assets/ba38eeb2-d35f-0a07-0c04-0eb42fcc6010.gesture new file mode 100644 index 0000000000..243be64fe5 Binary files /dev/null and b/indra/newview/app_settings/static_assets/ba38eeb2-d35f-0a07-0c04-0eb42fcc6010.gesture differ diff --git a/indra/newview/app_settings/static_assets/bacd48be-6733-7842-dd1f-8802e920f3ba.bodypart b/indra/newview/app_settings/static_assets/bacd48be-6733-7842-dd1f-8802e920f3ba.bodypart new file mode 100644 index 0000000000..7c017277e5 --- /dev/null +++ b/indra/newview/app_settings/static_assets/bacd48be-6733-7842-dd1f-8802e920f3ba.bodypart @@ -0,0 +1,26 @@ +LLWearable version 22 +RASL - Eyes - Spring Green + + permissions 0 + { + base_mask 00082000 + owner_mask 00082000 + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + 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 865e5c74-5e50-1036-58d2-1af9e2a50388 diff --git a/indra/newview/app_settings/static_assets/bc2ff144-9a36-fdd0-316d-d86f5c9a43ac.gesture b/indra/newview/app_settings/static_assets/bc2ff144-9a36-fdd0-316d-d86f5c9a43ac.gesture new file mode 100644 index 0000000000..4d547e3e75 Binary files /dev/null and b/indra/newview/app_settings/static_assets/bc2ff144-9a36-fdd0-316d-d86f5c9a43ac.gesture differ diff --git a/indra/newview/app_settings/static_assets/bd07ffa9-426c-69da-d27a-e54e4ebbc73c.bodypart b/indra/newview/app_settings/static_assets/bd07ffa9-426c-69da-d27a-e54e4ebbc73c.bodypart new file mode 100644 index 0000000000..cc255aff0b --- /dev/null +++ b/indra/newview/app_settings/static_assets/bd07ffa9-426c-69da-d27a-e54e4ebbc73c.bodypart @@ -0,0 +1,52 @@ +LLWearable version 22 +RASL - Skin - Anna + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 1 +parameters 26 +108 0 +110 0 +111 .5 +116 0 +117 0 +150 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 +textures 3 +0 173d7efa-899c-9a0d-64e4-3477fd4320e7 +5 37b87678-b628-7e53-0643-c2e1f763b578 +6 5f270355-3528-3c42-1e3c-d6ccb28646c5 diff --git a/indra/newview/app_settings/static_assets/be969774-2a2b-0534-daee-f69357ff4adf.clothing b/indra/newview/app_settings/static_assets/be969774-2a2b-0534-daee-f69357ff4adf.clothing new file mode 100644 index 0000000000..07ce5cfec3 --- /dev/null +++ b/indra/newview/app_settings/static_assets/be969774-2a2b-0534-daee-f69357ff4adf.clothing @@ -0,0 +1,28 @@ +LLWearable version 22 +RASL SOCKS BLACK + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 7 +parameters 4 +617 1 +818 1 +819 1 +820 1 +textures 1 +12 0f0046b0-1c69-5192-1fca-37d0e6667484 diff --git a/indra/newview/app_settings/static_assets/c0c4030f-c02b-49de-24ba-2331f43fe41c.animatn b/indra/newview/app_settings/static_assets/c0c4030f-c02b-49de-24ba-2331f43fe41c.animatn new file mode 100644 index 0000000000..831d273ce4 Binary files /dev/null and b/indra/newview/app_settings/static_assets/c0c4030f-c02b-49de-24ba-2331f43fe41c.animatn differ diff --git a/indra/newview/app_settings/static_assets/c1a68df8-3a01-4f17-0bab-10eb7df9c22a.clothing b/indra/newview/app_settings/static_assets/c1a68df8-3a01-4f17-0bab-10eb7df9c22a.clothing new file mode 100644 index 0000000000..bf27527241 --- /dev/null +++ b/indra/newview/app_settings/static_assets/c1a68df8-3a01-4f17-0bab-10eb7df9c22a.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL-FSHOE1-FOOTSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id df110c10-72e6-40d6-8916-14b4b0366b18 + owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + last_owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 6 +parameters 10 +198 .19 +503 0 +508 0 +513 .4 +514 .5 +616 .1 +654 .78 +812 1 +813 1 +817 1 +textures 1 +7 85b13d86-3e95-8d4b-a03b-c9c737631194 diff --git a/indra/newview/app_settings/static_assets/c1bc7f36-3ba0-d844-f93c-93be945d644f.animatn b/indra/newview/app_settings/static_assets/c1bc7f36-3ba0-d844-f93c-93be945d644f.animatn new file mode 100644 index 0000000000..04c4a28e2a Binary files /dev/null and b/indra/newview/app_settings/static_assets/c1bc7f36-3ba0-d844-f93c-93be945d644f.animatn differ diff --git a/indra/newview/app_settings/static_assets/c272cb94-0081-49bb-d45e-aeda288b3c06.clothing b/indra/newview/app_settings/static_assets/c272cb94-0081-49bb-d45e-aeda288b3c06.clothing new file mode 100644 index 0000000000..4e32db73e0 --- /dev/null +++ b/indra/newview/app_settings/static_assets/c272cb94-0081-49bb-d45e-aeda288b3c06.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL M EXPLORE UNDER JACKET LEATHER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 8 +parameters 9 +606 .66 +607 1 +608 1 +609 1 +780 1 +834 1 +835 1 +836 1 +877 0 +textures 2 +13 f0f6812f-33c5-21ec-87da-f92e1aa02b09 +14 85b13d86-3e95-8d4b-a03b-c9c737631194 diff --git a/indra/newview/app_settings/static_assets/c437fefd-6025-fd89-e65c-aec2732f3007.clothing b/indra/newview/app_settings/static_assets/c437fefd-6025-fd89-e65c-aec2732f3007.clothing new file mode 100644 index 0000000000..ba72109a56 --- /dev/null +++ b/indra/newview/app_settings/static_assets/c437fefd-6025-fd89-e65c-aec2732f3007.clothing @@ -0,0 +1,29 @@ +LLWearable version 22 +RASL M SHOP JEANS + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 11 +parameters 5 +619 1 +624 1 +824 1 +825 1 +826 1 +textures 1 +17 9a1b1afd-b282-e667-5d87-8f90cfaf566b diff --git a/indra/newview/app_settings/static_assets/c4ca6188-9127-4f31-0158-23c4e2f93304.animatn b/indra/newview/app_settings/static_assets/c4ca6188-9127-4f31-0158-23c4e2f93304.animatn new file mode 100644 index 0000000000..f49d119c93 Binary files /dev/null and b/indra/newview/app_settings/static_assets/c4ca6188-9127-4f31-0158-23c4e2f93304.animatn differ diff --git a/indra/newview/app_settings/static_assets/c4d1b050-1784-feb4-474f-ec3b1f1a29cb.clothing b/indra/newview/app_settings/static_assets/c4d1b050-1784-feb4-474f-ec3b1f1a29cb.clothing new file mode 100644 index 0000000000..160e4e29d6 --- /dev/null +++ b/indra/newview/app_settings/static_assets/c4d1b050-1784-feb4-474f-ec3b1f1a29cb.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL M PLAY SHIRT UP + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 4 +parameters 10 +781 1 +800 1 +801 1 +802 1 +803 1 +804 1 +805 1 +828 0 +840 0 +868 0 +textures 1 +1 8759051a-93db-7a9f-2f98-fe4a932a27fb diff --git a/indra/newview/app_settings/static_assets/c521ad1f-06f0-8711-f313-5737a38f0d78.clothing b/indra/newview/app_settings/static_assets/c521ad1f-06f0-8711-f313-5737a38f0d78.clothing new file mode 100644 index 0000000000..1c1e623821 --- /dev/null +++ b/indra/newview/app_settings/static_assets/c521ad1f-06f0-8711-f313-5737a38f0d78.clothing @@ -0,0 +1,29 @@ +LLWearable version 22 +RASL F PLAY TROUSERS + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 11 +parameters 5 +619 1 +624 1 +824 1 +825 1 +826 1 +textures 1 +17 18ffd31d-7386-8959-a761-b90242957e0c diff --git a/indra/newview/app_settings/static_assets/c541c47f-e0c0-058b-ad1a-d6ae3a4584d9.animatn b/indra/newview/app_settings/static_assets/c541c47f-e0c0-058b-ad1a-d6ae3a4584d9.animatn new file mode 100644 index 0000000000..b0ff77b617 Binary files /dev/null and b/indra/newview/app_settings/static_assets/c541c47f-e0c0-058b-ad1a-d6ae3a4584d9.animatn differ diff --git a/indra/newview/app_settings/static_assets/c5d0cab3-4a69-2f35-71ee-6dba0ce0c85c.bodypart b/indra/newview/app_settings/static_assets/c5d0cab3-4a69-2f35-71ee-6dba0ce0c85c.bodypart new file mode 100644 index 0000000000..1bda2ff2f9 --- /dev/null +++ b/indra/newview/app_settings/static_assets/c5d0cab3-4a69-2f35-71ee-6dba0ce0c85c.bodypart @@ -0,0 +1,105 @@ +LLWearable version 22 +RASL F LOVE SHAPE (GENA) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 0 +parameters 82 +1 -.07 +2 -.4 +4 -.13 +5 .03 +6 -.05 +7 .02 +8 -.42 +10 .25 +11 .24 +12 -.26 +13 .15 +14 .55 +15 -.28 +17 .32 +18 .42 +19 -.5 +20 .02 +21 .13 +22 0 +23 -.46 +24 -.31 +25 .1 +27 -.05 +33 .5 +34 -.04 +35 -.1 +36 -1 +37 -.74 +38 -.28 +80 0 +105 .51 +155 -.39 +157 0 +185 -.66 +193 .5 +196 -1.04 +505 .39 +506 -.68 +507 -.45 +515 -1 +517 .07 +518 .24 +629 .5 +637 .06 +646 -.01 +647 -.14 +649 .33 +650 -.2 +652 .39 +653 .56 +656 0 +659 .53 +662 .5 +663 0 +664 0 +665 .16 +675 -.17 +676 -.13 +678 .5 +682 .51 +683 -.18 +684 -.03 +685 0 +690 .39 +692 .2 +693 .24 +753 .55 +756 -.4 +758 .09 +759 .1 +760 .69 +764 .61 +765 -.08 +769 .45 +773 .53 +795 .24 +796 0 +799 .53 +841 -.02 +842 -.08 +879 0 +880 -.62 +textures 0 diff --git a/indra/newview/app_settings/static_assets/c63ac707-6325-14c8-d681-54b81d0dff77.gesture b/indra/newview/app_settings/static_assets/c63ac707-6325-14c8-d681-54b81d0dff77.gesture new file mode 100644 index 0000000000..01c55a2cd8 Binary files /dev/null and b/indra/newview/app_settings/static_assets/c63ac707-6325-14c8-d681-54b81d0dff77.gesture differ diff --git a/indra/newview/app_settings/static_assets/c8d70bed-535b-3d97-5d17-6136a209fbe6.bodypart b/indra/newview/app_settings/static_assets/c8d70bed-535b-3d97-5d17-6136a209fbe6.bodypart new file mode 100644 index 0000000000..05794814f1 --- /dev/null +++ b/indra/newview/app_settings/static_assets/c8d70bed-535b-3d97-5d17-6136a209fbe6.bodypart @@ -0,0 +1,26 @@ +LLWearable version 22 +New Eyes + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id df110c10-72e6-40d6-8916-14b4b0366b18 + owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + last_owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + 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 bf7932bc-28cb-4fbf-e810-9145c37ea177 diff --git a/indra/newview/app_settings/static_assets/c8e42d32-7310-6906-c903-cab5d4a34656.animatn b/indra/newview/app_settings/static_assets/c8e42d32-7310-6906-c903-cab5d4a34656.animatn new file mode 100644 index 0000000000..8e7e5be75d Binary files /dev/null and b/indra/newview/app_settings/static_assets/c8e42d32-7310-6906-c903-cab5d4a34656.animatn differ diff --git a/indra/newview/app_settings/static_assets/ca5b3f14-3194-7a2b-c894-aa699b718d1f.animatn b/indra/newview/app_settings/static_assets/ca5b3f14-3194-7a2b-c894-aa699b718d1f.animatn new file mode 100644 index 0000000000..b67d552ac2 Binary files /dev/null and b/indra/newview/app_settings/static_assets/ca5b3f14-3194-7a2b-c894-aa699b718d1f.animatn differ diff --git a/indra/newview/app_settings/static_assets/cd28b69b-9c95-bb78-3f94-8d605ff1bb12.animatn b/indra/newview/app_settings/static_assets/cd28b69b-9c95-bb78-3f94-8d605ff1bb12.animatn new file mode 100644 index 0000000000..8c172a811c Binary files /dev/null and b/indra/newview/app_settings/static_assets/cd28b69b-9c95-bb78-3f94-8d605ff1bb12.animatn differ diff --git a/indra/newview/app_settings/static_assets/cd55f18e-c1bf-70a5-5b53-a114fdc44930.bodypart b/indra/newview/app_settings/static_assets/cd55f18e-c1bf-70a5-5b53-a114fdc44930.bodypart new file mode 100644 index 0000000000..4f5f6596ff --- /dev/null +++ b/indra/newview/app_settings/static_assets/cd55f18e-c1bf-70a5-5b53-a114fdc44930.bodypart @@ -0,0 +1,63 @@ +LLWearable version 22 +RASL M SHOP EYEBROW SHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 39 +16 .62 +31 .38 +112 0 +113 .5 +114 .49 +115 0 +119 0 +130 0 +131 0 +132 0 +133 0 +134 0 +135 0 +136 0 +137 .5 +140 0 +141 0 +142 0 +143 -4 +166 0 +167 0 +168 0 +169 0 +177 0 +181 -1 +182 -1 +183 -1 +184 0 +192 0 +674 -1 +750 0 +752 .5 +754 .5 +755 0 +757 -.82 +762 0 +763 0 +785 0 +789 0 +textures 1 +4 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b diff --git a/indra/newview/app_settings/static_assets/cd7668a6-7011-d7e2-ead8-fc69eff1a104.animatn b/indra/newview/app_settings/static_assets/cd7668a6-7011-d7e2-ead8-fc69eff1a104.animatn new file mode 100644 index 0000000000..7e2c8f0ccd Binary files /dev/null and b/indra/newview/app_settings/static_assets/cd7668a6-7011-d7e2-ead8-fc69eff1a104.animatn differ diff --git a/indra/newview/app_settings/static_assets/ce58f877-251f-b025-9227-4be3456faf58.bodypart b/indra/newview/app_settings/static_assets/ce58f877-251f-b025-9227-4be3456faf58.bodypart new file mode 100644 index 0000000000..50623d380a --- /dev/null +++ b/indra/newview/app_settings/static_assets/ce58f877-251f-b025-9227-4be3456faf58.bodypart @@ -0,0 +1,26 @@ +LLWearable version 22 +RASL - Eyes - Med Blue + + permissions 0 + { + base_mask 00082000 + owner_mask 00082000 + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + 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 6531cb8f-dd4c-4171-091e-bd5789254ab7 diff --git a/indra/newview/app_settings/static_assets/cf03c095-647e-bd96-4ce2-63202cd5a171.clothing b/indra/newview/app_settings/static_assets/cf03c095-647e-bd96-4ce2-63202cd5a171.clothing new file mode 100644 index 0000000000..ca6747e342 --- /dev/null +++ b/indra/newview/app_settings/static_assets/cf03c095-647e-bd96-4ce2-63202cd5a171.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL M SHOP SWEATER UP + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 4 +parameters 10 +781 1 +800 1 +801 1 +802 1 +803 1 +804 1 +805 1 +828 0 +840 0 +868 0 +textures 1 +1 bd947b09-6c73-62c5-9c2f-8c4980df7c82 diff --git a/indra/newview/app_settings/static_assets/d08d1a27-9410-dbd7-cc4f-ae1a8837b49d.bodypart b/indra/newview/app_settings/static_assets/d08d1a27-9410-dbd7-cc4f-ae1a8837b49d.bodypart new file mode 100644 index 0000000000..50d212e76c --- /dev/null +++ b/indra/newview/app_settings/static_assets/d08d1a27-9410-dbd7-cc4f-ae1a8837b49d.bodypart @@ -0,0 +1,63 @@ +LLWearable version 22 +RASL F LOVE EYEBROWSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 39 +16 1.18 +31 .42 +112 0 +113 0 +114 0 +115 0 +119 0 +130 0 +131 0 +132 0 +133 0 +134 0 +135 0 +136 0 +137 .5 +140 0 +141 0 +142 0 +143 -4 +166 0 +167 0 +168 0 +169 0 +177 0 +181 -1 +182 -1 +183 -1 +184 0 +192 0 +674 -1 +750 0 +752 .5 +754 .5 +755 0 +757 -.94 +762 0 +763 0 +785 0 +789 0 +textures 1 +4 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b diff --git a/indra/newview/app_settings/static_assets/d1b530a9-b4c8-aeaf-9300-9b9d30c715d1.clothing b/indra/newview/app_settings/static_assets/d1b530a9-b4c8-aeaf-9300-9b9d30c715d1.clothing new file mode 100644 index 0000000000..ac3a700c50 --- /dev/null +++ b/indra/newview/app_settings/static_assets/d1b530a9-b4c8-aeaf-9300-9b9d30c715d1.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL F CREATE SHIRT UP (BLUE) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 4 +parameters 10 +781 1 +800 1 +801 1 +802 1 +803 1 +804 1 +805 1 +828 0 +840 0 +868 0 +textures 1 +1 3607ade8-59a0-f44b-413a-018d50505a25 diff --git a/indra/newview/app_settings/static_assets/d26fbcbc-1985-92ef-0cf0-7148b7ed0c08.gesture b/indra/newview/app_settings/static_assets/d26fbcbc-1985-92ef-0cf0-7148b7ed0c08.gesture new file mode 100644 index 0000000000..7912966d1b Binary files /dev/null and b/indra/newview/app_settings/static_assets/d26fbcbc-1985-92ef-0cf0-7148b7ed0c08.gesture differ diff --git a/indra/newview/app_settings/static_assets/d2f2ee58-8ad1-06c9-d8d3-3827ba31567a.animatn b/indra/newview/app_settings/static_assets/d2f2ee58-8ad1-06c9-d8d3-3827ba31567a.animatn new file mode 100644 index 0000000000..89718e372e Binary files /dev/null and b/indra/newview/app_settings/static_assets/d2f2ee58-8ad1-06c9-d8d3-3827ba31567a.animatn differ diff --git a/indra/newview/app_settings/static_assets/d40491cc-3629-a090-d11f-ee947d9125a8.bodypart b/indra/newview/app_settings/static_assets/d40491cc-3629-a090-d11f-ee947d9125a8.bodypart new file mode 100644 index 0000000000..add7c05788 --- /dev/null +++ b/indra/newview/app_settings/static_assets/d40491cc-3629-a090-d11f-ee947d9125a8.bodypart @@ -0,0 +1,63 @@ +LLWearable version 22 +RASL F PLAY EYEBROWSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 2 +parameters 39 +16 1.18 +31 .5 +112 0 +113 0 +114 0 +115 0 +119 0 +130 0 +131 0 +132 0 +133 0 +134 0 +135 0 +136 0 +137 .5 +140 0 +141 0 +142 0 +143 -4 +166 0 +167 0 +168 0 +169 0 +177 0 +181 -1 +182 -1 +183 -1 +184 0 +192 0 +674 -1 +750 0 +752 .5 +754 .5 +755 0 +757 -.4 +762 0 +763 0 +785 0 +789 0 +textures 1 +4 7ca39b4c-bd19-4699-aff7-f93fd03d3e7b diff --git a/indra/newview/app_settings/static_assets/d53b27ad-73b9-8ea4-0896-7890b57dd8ed.clothing b/indra/newview/app_settings/static_assets/d53b27ad-73b9-8ea4-0896-7890b57dd8ed.clothing new file mode 100644 index 0000000000..8e0a79ce72 --- /dev/null +++ b/indra/newview/app_settings/static_assets/d53b27ad-73b9-8ea4-0896-7890b57dd8ed.clothing @@ -0,0 +1,33 @@ +LLWearable version 22 +RASL M EXPLORE TANK DOWN (WHITE) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 5 +parameters 9 +625 0 +638 0 +806 1 +807 1 +808 1 +814 1 +815 .99 +816 .05 +869 0 +textures 1 +2 87eb957f-4152-8e94-df39-644e5d94f7b5 diff --git a/indra/newview/app_settings/static_assets/d60c41d2-7c24-7074-d3fa-6101cea22a51.animatn b/indra/newview/app_settings/static_assets/d60c41d2-7c24-7074-d3fa-6101cea22a51.animatn new file mode 100644 index 0000000000..6626797614 Binary files /dev/null and b/indra/newview/app_settings/static_assets/d60c41d2-7c24-7074-d3fa-6101cea22a51.animatn differ diff --git a/indra/newview/app_settings/static_assets/d6c00693-90e0-cbbd-cd3d-3a6ccd510f14.clothing b/indra/newview/app_settings/static_assets/d6c00693-90e0-cbbd-cd3d-3a6ccd510f14.clothing new file mode 100644 index 0000000000..6b0616c6b4 --- /dev/null +++ b/indra/newview/app_settings/static_assets/d6c00693-90e0-cbbd-cd3d-3a6ccd510f14.clothing @@ -0,0 +1,29 @@ +LLWearable version 22 +RASL M EXPLORE JEANS + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 11 +parameters 5 +619 1 +624 1 +824 1 +825 1 +826 1 +textures 1 +17 7a97cedf-bf46-819c-ca67-d333efd8891d diff --git a/indra/newview/app_settings/static_assets/d83fa0e5-97ed-7eb2-e798-7bd006215cb4.animatn b/indra/newview/app_settings/static_assets/d83fa0e5-97ed-7eb2-e798-7bd006215cb4.animatn new file mode 100644 index 0000000000..778a01a412 Binary files /dev/null and b/indra/newview/app_settings/static_assets/d83fa0e5-97ed-7eb2-e798-7bd006215cb4.animatn differ diff --git a/indra/newview/app_settings/static_assets/d918a0d8-7291-ce83-762f-3f68dcc7402d.gesture b/indra/newview/app_settings/static_assets/d918a0d8-7291-ce83-762f-3f68dcc7402d.gesture new file mode 100644 index 0000000000..0d1f775f6a Binary files /dev/null and b/indra/newview/app_settings/static_assets/d918a0d8-7291-ce83-762f-3f68dcc7402d.gesture differ diff --git a/indra/newview/app_settings/static_assets/d973aaf2-ff8d-3b05-8c81-48305210b3bf.clothing b/indra/newview/app_settings/static_assets/d973aaf2-ff8d-3b05-8c81-48305210b3bf.clothing new file mode 100644 index 0000000000..78eeffe6e6 --- /dev/null +++ b/indra/newview/app_settings/static_assets/d973aaf2-ff8d-3b05-8c81-48305210b3bf.clothing @@ -0,0 +1,33 @@ +LLWearable version 22 +RASL F LEARN SKIRT (TARTEN) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 5 +parameters 9 +625 0 +638 0 +806 1 +807 1 +808 1 +814 1 +815 .99 +816 .05 +869 0 +textures 1 +2 e95c407d-f87c-6498-25b4-b885084eb2ba diff --git a/indra/newview/app_settings/static_assets/db84829b-462c-ee83-1e27-9bbee66bd624.animatn b/indra/newview/app_settings/static_assets/db84829b-462c-ee83-1e27-9bbee66bd624.animatn new file mode 100644 index 0000000000..637a58c9bc Binary files /dev/null and b/indra/newview/app_settings/static_assets/db84829b-462c-ee83-1e27-9bbee66bd624.animatn differ diff --git a/indra/newview/app_settings/static_assets/dbd054f1-132b-cc22-e46a-bad83c230c91.gesture b/indra/newview/app_settings/static_assets/dbd054f1-132b-cc22-e46a-bad83c230c91.gesture new file mode 100644 index 0000000000..321ee082a7 Binary files /dev/null and b/indra/newview/app_settings/static_assets/dbd054f1-132b-cc22-e46a-bad83c230c91.gesture differ diff --git a/indra/newview/app_settings/static_assets/ddcd68c1-0cb9-4b32-a475-f2b9b96ec8d5.clothing b/indra/newview/app_settings/static_assets/ddcd68c1-0cb9-4b32-a475-f2b9b96ec8d5.clothing new file mode 100644 index 0000000000..470e3f53a9 --- /dev/null +++ b/indra/newview/app_settings/static_assets/ddcd68c1-0cb9-4b32-a475-f2b9b96ec8d5.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL M EXPLORE UNDER JACKET LEATHER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 8 +parameters 9 +606 .66 +607 1 +608 1 +609 1 +780 1 +834 1 +835 1 +836 1 +877 0 +textures 2 +13 c9280333-0ae0-3d41-3549-b3c7d28fa6a4 +14 85b13d86-3e95-8d4b-a03b-c9c737631194 diff --git a/indra/newview/app_settings/static_assets/df074f93-968a-2588-8ef5-7db3b21dff6d.bodypart b/indra/newview/app_settings/static_assets/df074f93-968a-2588-8ef5-7db3b21dff6d.bodypart new file mode 100644 index 0000000000..2701f7709e --- /dev/null +++ b/indra/newview/app_settings/static_assets/df074f93-968a-2588-8ef5-7db3b21dff6d.bodypart @@ -0,0 +1,26 @@ +LLWearable version 22 +RASL EYES MUTED GREEN + + permissions 0 + { + base_mask 00082000 + owner_mask 00082000 + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id df110c10-72e6-40d6-8916-14b4b0366b18 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 3 +parameters 2 +98 .61 +99 0 +textures 1 +3 e88d1151-f2ab-6bd3-110d-6c827ccbd4a6 diff --git a/indra/newview/app_settings/static_assets/e04d450d-fdb5-0432-fd68-818aaf5935f8.animatn b/indra/newview/app_settings/static_assets/e04d450d-fdb5-0432-fd68-818aaf5935f8.animatn new file mode 100644 index 0000000000..866aaf38aa Binary files /dev/null and b/indra/newview/app_settings/static_assets/e04d450d-fdb5-0432-fd68-818aaf5935f8.animatn differ diff --git a/indra/newview/app_settings/static_assets/e2efe57f-70e8-35e5-b92c-280e3e9c6e1f.clothing b/indra/newview/app_settings/static_assets/e2efe57f-70e8-35e5-b92c-280e3e9c6e1f.clothing new file mode 100644 index 0000000000..24cbda241b --- /dev/null +++ b/indra/newview/app_settings/static_assets/e2efe57f-70e8-35e5-b92c-280e3e9c6e1f.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL F LOVE SHOES FOOTSHAPER + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id df110c10-72e6-40d6-8916-14b4b0366b18 + owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + last_owner_id df110c10-72e6-40d6-8916-14b4b0366b18 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 6 +parameters 10 +198 1 +503 .41 +508 -.37 +513 .19 +514 .66 +616 1 +654 .38 +812 1 +813 1 +817 1 +textures 1 +7 3ab7e2fa-9572-ef36-1a30-d855dbea4f92 diff --git a/indra/newview/app_settings/static_assets/e4485e5d-6bcc-e5ca-96fd-303227e93d6c.gesture b/indra/newview/app_settings/static_assets/e4485e5d-6bcc-e5ca-96fd-303227e93d6c.gesture new file mode 100644 index 0000000000..68f8555434 Binary files /dev/null and b/indra/newview/app_settings/static_assets/e4485e5d-6bcc-e5ca-96fd-303227e93d6c.gesture differ diff --git a/indra/newview/app_settings/static_assets/e5c8f3c2-9e65-5c4b-03c4-d8205f626b37.bodypart b/indra/newview/app_settings/static_assets/e5c8f3c2-9e65-5c4b-03c4-d8205f626b37.bodypart new file mode 100644 index 0000000000..251ea6e740 --- /dev/null +++ b/indra/newview/app_settings/static_assets/e5c8f3c2-9e65-5c4b-03c4-d8205f626b37.bodypart @@ -0,0 +1,26 @@ +LLWearable version 22 +RASL - Eyes - Dark Blue + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + owner_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + last_owner_id ef5ac61a-72b0-48a6-843f-adb506d7ba86 + 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 9b1c0ff8-42e6-46b1-2f90-a03e4df16030 diff --git a/indra/newview/app_settings/static_assets/e7135c15-a7bc-637e-2664-b6fbdc22428c.gesture b/indra/newview/app_settings/static_assets/e7135c15-a7bc-637e-2664-b6fbdc22428c.gesture new file mode 100644 index 0000000000..01b050c192 Binary files /dev/null and b/indra/newview/app_settings/static_assets/e7135c15-a7bc-637e-2664-b6fbdc22428c.gesture differ diff --git a/indra/newview/app_settings/static_assets/e7263f17-46cf-5deb-7e5a-ecc0776f5241.clothing b/indra/newview/app_settings/static_assets/e7263f17-46cf-5deb-7e5a-ecc0776f5241.clothing new file mode 100644 index 0000000000..9a72103815 --- /dev/null +++ b/indra/newview/app_settings/static_assets/e7263f17-46cf-5deb-7e5a-ecc0776f5241.clothing @@ -0,0 +1,34 @@ +LLWearable version 22 +RASL F SHOP TOP + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 8 +parameters 9 +606 1 +607 1 +608 1 +609 1 +780 1 +834 1 +835 1 +836 1 +877 0 +textures 2 +13 58ff5b15-2394-eaf7-0c74-14b087a6472f +14 9ed6836d-b34b-874d-11cd-2642e80cdee4 diff --git a/indra/newview/app_settings/static_assets/e7584536-86f2-c962-405d-d14adff71f38.gesture b/indra/newview/app_settings/static_assets/e7584536-86f2-c962-405d-d14adff71f38.gesture new file mode 100644 index 0000000000..01bc3d91d2 Binary files /dev/null and b/indra/newview/app_settings/static_assets/e7584536-86f2-c962-405d-d14adff71f38.gesture differ diff --git a/indra/newview/app_settings/static_assets/ea633413-8006-180a-c3ba-96dd1d756720.animatn b/indra/newview/app_settings/static_assets/ea633413-8006-180a-c3ba-96dd1d756720.animatn new file mode 100644 index 0000000000..b398a7e1f9 Binary files /dev/null and b/indra/newview/app_settings/static_assets/ea633413-8006-180a-c3ba-96dd1d756720.animatn differ diff --git a/indra/newview/app_settings/static_assets/ea9ab69b-c2c7-3e18-a50b-37a9cfe457cd.gesture b/indra/newview/app_settings/static_assets/ea9ab69b-c2c7-3e18-a50b-37a9cfe457cd.gesture new file mode 100644 index 0000000000..c723ee8732 Binary files /dev/null and b/indra/newview/app_settings/static_assets/ea9ab69b-c2c7-3e18-a50b-37a9cfe457cd.gesture differ diff --git a/indra/newview/app_settings/static_assets/eae8905b-271a-99e2-4c0e-31106afd100c.animatn b/indra/newview/app_settings/static_assets/eae8905b-271a-99e2-4c0e-31106afd100c.animatn new file mode 100644 index 0000000000..33c8c57e7b Binary files /dev/null and b/indra/newview/app_settings/static_assets/eae8905b-271a-99e2-4c0e-31106afd100c.animatn differ diff --git a/indra/newview/app_settings/static_assets/ec952cca-61ef-aa3b-2789-4d1344f016de.animatn b/indra/newview/app_settings/static_assets/ec952cca-61ef-aa3b-2789-4d1344f016de.animatn new file mode 100644 index 0000000000..c1b9190faf Binary files /dev/null and b/indra/newview/app_settings/static_assets/ec952cca-61ef-aa3b-2789-4d1344f016de.animatn differ diff --git a/indra/newview/app_settings/static_assets/eefc79be-daae-a239-8c04-890f5d23654a.animatn b/indra/newview/app_settings/static_assets/eefc79be-daae-a239-8c04-890f5d23654a.animatn new file mode 100644 index 0000000000..b289928497 Binary files /dev/null and b/indra/newview/app_settings/static_assets/eefc79be-daae-a239-8c04-890f5d23654a.animatn differ diff --git a/indra/newview/app_settings/static_assets/ef62d355-c815-4816-2474-b1acc21094a6.animatn b/indra/newview/app_settings/static_assets/ef62d355-c815-4816-2474-b1acc21094a6.animatn new file mode 100644 index 0000000000..afc8018690 Binary files /dev/null and b/indra/newview/app_settings/static_assets/ef62d355-c815-4816-2474-b1acc21094a6.animatn differ diff --git a/indra/newview/app_settings/static_assets/efdc1727-8b8a-c800-4077-975fc27ee2f2.animatn b/indra/newview/app_settings/static_assets/efdc1727-8b8a-c800-4077-975fc27ee2f2.animatn new file mode 100644 index 0000000000..796bf8462c Binary files /dev/null and b/indra/newview/app_settings/static_assets/efdc1727-8b8a-c800-4077-975fc27ee2f2.animatn differ diff --git a/indra/newview/app_settings/static_assets/f061723d-0a18-754f-66ee-29a44795a32f.animatn b/indra/newview/app_settings/static_assets/f061723d-0a18-754f-66ee-29a44795a32f.animatn new file mode 100644 index 0000000000..e4ae54b576 Binary files /dev/null and b/indra/newview/app_settings/static_assets/f061723d-0a18-754f-66ee-29a44795a32f.animatn differ diff --git a/indra/newview/app_settings/static_assets/f22fed8b-a5ed-2c93-64d5-bdd8b93c889f.animatn b/indra/newview/app_settings/static_assets/f22fed8b-a5ed-2c93-64d5-bdd8b93c889f.animatn new file mode 100644 index 0000000000..a91d7eadc9 Binary files /dev/null and b/indra/newview/app_settings/static_assets/f22fed8b-a5ed-2c93-64d5-bdd8b93c889f.animatn differ diff --git a/indra/newview/app_settings/static_assets/f2483d55-bc31-38c0-65b2-9f7e87fce5c4.gesture b/indra/newview/app_settings/static_assets/f2483d55-bc31-38c0-65b2-9f7e87fce5c4.gesture new file mode 100644 index 0000000000..5ef31e06ca Binary files /dev/null and b/indra/newview/app_settings/static_assets/f2483d55-bc31-38c0-65b2-9f7e87fce5c4.gesture differ diff --git a/indra/newview/app_settings/static_assets/f2bed5f9-9d44-39af-b0cd-257b2a17fe40.animatn b/indra/newview/app_settings/static_assets/f2bed5f9-9d44-39af-b0cd-257b2a17fe40.animatn new file mode 100644 index 0000000000..563bc436f2 Binary files /dev/null and b/indra/newview/app_settings/static_assets/f2bed5f9-9d44-39af-b0cd-257b2a17fe40.animatn differ diff --git a/indra/newview/app_settings/static_assets/f3061aa3-0069-96b4-67b5-e16633a2ef30.clothing b/indra/newview/app_settings/static_assets/f3061aa3-0069-96b4-67b5-e16633a2ef30.clothing new file mode 100644 index 0000000000..fc1ac9f111 --- /dev/null +++ b/indra/newview/app_settings/static_assets/f3061aa3-0069-96b4-67b5-e16633a2ef30.clothing @@ -0,0 +1,28 @@ +LLWearable version 22 +RASL SOCKS TEAL + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 7 +parameters 4 +617 1 +818 1 +819 1 +820 1 +textures 1 +12 a900a787-09cc-8d9b-baaa-d93f4c9074fa diff --git a/indra/newview/app_settings/static_assets/f3300ad9-3462-1d07-2044-0fef80062da0.animatn b/indra/newview/app_settings/static_assets/f3300ad9-3462-1d07-2044-0fef80062da0.animatn new file mode 100644 index 0000000000..895b627163 Binary files /dev/null and b/indra/newview/app_settings/static_assets/f3300ad9-3462-1d07-2044-0fef80062da0.animatn differ diff --git a/indra/newview/app_settings/static_assets/f4714624-bdc5-f596-5c6f-789b438becf9.bodypart b/indra/newview/app_settings/static_assets/f4714624-bdc5-f596-5c6f-789b438becf9.bodypart new file mode 100644 index 0000000000..c8921aba5f --- /dev/null +++ b/indra/newview/app_settings/static_assets/f4714624-bdc5-f596-5c6f-789b438becf9.bodypart @@ -0,0 +1,105 @@ +LLWearable version 22 +RASL M EXPLORE SHAPE (LOUIS) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 0 +parameters 82 +1 .55 +2 -.31 +4 .23 +5 -.05 +6 .09 +7 -.28 +8 -.08 +10 .57 +11 .04 +12 .1 +13 .03 +14 .38 +15 -.18 +17 .09 +18 .5 +19 -.32 +20 -.26 +21 .17 +22 .27 +23 -.02 +24 .18 +25 .53 +27 .25 +33 1.14 +34 -.22 +35 .11 +36 -.42 +37 -.14 +38 -.08 +80 1 +105 .5 +155 -.48 +157 .03 +185 -.86 +193 .6 +196 -.98 +505 .67 +506 .08 +507 0 +515 -1 +517 -.05 +518 -.12 +629 .41 +637 .05 +646 .08 +647 .17 +649 .5 +650 0 +652 .49 +653 .8 +656 0 +659 .6 +662 .5 +663 0 +664 0 +665 .08 +675 -.13 +676 .02 +678 .46 +682 .6 +683 -.08 +684 0 +685 .01 +690 .4 +692 .12 +693 .02 +753 .83 +756 -.72 +758 -.63 +759 .38 +760 .5 +764 .84 +765 -.02 +769 .45 +773 .53 +795 .31 +796 .11 +799 .58 +841 .02 +842 -.28 +879 .32 +880 -.6 +textures 0 diff --git a/indra/newview/app_settings/static_assets/f4f00d6e-b9fe-9292-f4cb-0ae06ea58d57.animatn b/indra/newview/app_settings/static_assets/f4f00d6e-b9fe-9292-f4cb-0ae06ea58d57.animatn new file mode 100644 index 0000000000..eae1310b21 Binary files /dev/null and b/indra/newview/app_settings/static_assets/f4f00d6e-b9fe-9292-f4cb-0ae06ea58d57.animatn differ diff --git a/indra/newview/app_settings/static_assets/f5fc7433-043d-e819-8298-f519a119b688.animatn b/indra/newview/app_settings/static_assets/f5fc7433-043d-e819-8298-f519a119b688.animatn new file mode 100644 index 0000000000..68f791c22b Binary files /dev/null and b/indra/newview/app_settings/static_assets/f5fc7433-043d-e819-8298-f519a119b688.animatn differ diff --git a/indra/newview/app_settings/static_assets/f67a2a68-6c1d-6fc0-29fd-7ec01c0b5946.bodypart b/indra/newview/app_settings/static_assets/f67a2a68-6c1d-6fc0-29fd-7ec01c0b5946.bodypart new file mode 100644 index 0000000000..31a488725e --- /dev/null +++ b/indra/newview/app_settings/static_assets/f67a2a68-6c1d-6fc0-29fd-7ec01c0b5946.bodypart @@ -0,0 +1,52 @@ +LLWearable version 22 +RASL M PLAY SKIN (HEATH) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 1 +parameters 26 +108 0 +110 0 +111 .3 +116 0 +117 0 +150 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 +textures 3 +0 948ecc23-ea9f-229f-585a-a203d0f1d3a6 +5 2f404e84-85b9-713d-05c5-6c9bc5775dab +6 4e411a4a-4f14-630d-7915-7c0372ed723e diff --git a/indra/newview/app_settings/static_assets/f76e4009-1b0f-125f-1d81-e3d774f4a838.bodypart b/indra/newview/app_settings/static_assets/f76e4009-1b0f-125f-1d81-e3d774f4a838.bodypart new file mode 100644 index 0000000000..1fd1d91d71 --- /dev/null +++ b/indra/newview/app_settings/static_assets/f76e4009-1b0f-125f-1d81-e3d774f4a838.bodypart @@ -0,0 +1,52 @@ +LLWearable version 22 +RASL F CREATE SKIN (Poppy) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 1 +parameters 26 +108 .04 +110 0 +111 .4 +116 0 +117 0 +150 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 +textures 3 +0 a25b31b2-1506-2529-5516-454a3a0e0824 +5 71855ea0-1773-9e70-32de-f188cc92b2dc +6 34db688d-a76d-5b69-1720-f66c004095ff diff --git a/indra/newview/app_settings/static_assets/f868fcfc-1377-396a-1635-4ac71a58a4fc.bodypart b/indra/newview/app_settings/static_assets/f868fcfc-1377-396a-1635-4ac71a58a4fc.bodypart new file mode 100644 index 0000000000..1ac799f47c --- /dev/null +++ b/indra/newview/app_settings/static_assets/f868fcfc-1377-396a-1635-4ac71a58a4fc.bodypart @@ -0,0 +1,105 @@ +LLWearable version 22 +RASL F EXPLORE SHAPE (SOFIA) + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 0 +parameters 82 +1 .02 +2 -.47 +4 .07 +5 -.03 +6 -.14 +7 .08 +8 -.42 +10 .57 +11 .24 +12 .04 +13 0 +14 .63 +15 -.32 +17 .19 +18 .22 +19 -.5 +20 -.14 +21 .2 +22 0 +23 -.28 +24 -.34 +25 .05 +27 -.55 +33 .71 +34 -.04 +35 -.13 +36 -1.06 +37 -.56 +38 -.22 +80 0 +105 .58 +155 -.57 +157 0 +185 -.52 +193 .52 +196 -1.1 +505 .29 +506 -.52 +507 -.63 +515 -1 +517 -.11 +518 .11 +629 .48 +637 .04 +646 -.13 +647 .03 +649 .31 +650 .15 +652 .39 +653 .32 +656 0 +659 .7 +662 .5 +663 0 +664 0 +665 .08 +675 -.17 +676 -.58 +678 .5 +682 .51 +683 -.18 +684 .2 +685 0 +690 .4 +692 .46 +693 .28 +753 .76 +756 -.4 +758 .06 +759 .73 +760 .62 +764 .1 +765 -.16 +769 .47 +773 .46 +795 .26 +796 .08 +799 .48 +841 .02 +842 .12 +879 0 +880 -.72 +textures 0 diff --git a/indra/newview/app_settings/static_assets/fa743da9-7e6e-d88e-3e4f-143dcb4fc01b.gesture b/indra/newview/app_settings/static_assets/fa743da9-7e6e-d88e-3e4f-143dcb4fc01b.gesture new file mode 100644 index 0000000000..aadded4e06 Binary files /dev/null and b/indra/newview/app_settings/static_assets/fa743da9-7e6e-d88e-3e4f-143dcb4fc01b.gesture differ diff --git a/indra/newview/app_settings/static_assets/fb262981-4295-f048-c280-629081bf3b6b.gesture b/indra/newview/app_settings/static_assets/fb262981-4295-f048-c280-629081bf3b6b.gesture new file mode 100644 index 0000000000..81be44cf09 Binary files /dev/null and b/indra/newview/app_settings/static_assets/fb262981-4295-f048-c280-629081bf3b6b.gesture differ diff --git a/indra/newview/app_settings/static_assets/fc3de4b8-bd3e-662b-934c-b72714dab5bf.gesture b/indra/newview/app_settings/static_assets/fc3de4b8-bd3e-662b-934c-b72714dab5bf.gesture new file mode 100644 index 0000000000..eca34162a8 Binary files /dev/null and b/indra/newview/app_settings/static_assets/fc3de4b8-bd3e-662b-934c-b72714dab5bf.gesture differ diff --git a/indra/newview/app_settings/static_assets/fd037134-85d4-f241-72c6-4f42164fedee.animatn b/indra/newview/app_settings/static_assets/fd037134-85d4-f241-72c6-4f42164fedee.animatn new file mode 100644 index 0000000000..eba81cff11 Binary files /dev/null and b/indra/newview/app_settings/static_assets/fd037134-85d4-f241-72c6-4f42164fedee.animatn differ diff --git a/indra/newview/app_settings/static_assets/fe63b3df-0557-c6fe-836a-a353f8108660.bodypart b/indra/newview/app_settings/static_assets/fe63b3df-0557-c6fe-836a-a353f8108660.bodypart new file mode 100644 index 0000000000..cb5b225cbf --- /dev/null +++ b/indra/newview/app_settings/static_assets/fe63b3df-0557-c6fe-836a-a353f8108660.bodypart @@ -0,0 +1,52 @@ +LLWearable version 22 +RASL F LOVE SKIN (Gena) Rev + + permissions 0 + { + base_mask 7fffffff + owner_mask 7fffffff + group_mask 00000000 + everyone_mask 00000000 + next_owner_mask 00082000 + creator_id 79908808-d272-49a8-864a-d133a10931e9 + owner_id 79908808-d272-49a8-864a-d133a10931e9 + last_owner_id 79908808-d272-49a8-864a-d133a10931e9 + group_id 00000000-0000-0000-0000-000000000000 + } + sale_info 0 + { + sale_type not + sale_price 10 + } +type 1 +parameters 26 +108 .01 +110 .01 +111 .4 +116 0 +117 0 +150 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 +textures 3 +0 38289ce5-6083-3349-03b1-28036d53c73e +5 f38af42a-2b43-d277-c3aa-8c4bc9409326 +6 42ec6169-874a-42a9-ca33-57230beb4450 diff --git a/indra/newview/app_settings/static_assets/ff1114e1-4063-3abe-de2f-6d13f6cae508.gesture b/indra/newview/app_settings/static_assets/ff1114e1-4063-3abe-de2f-6d13f6cae508.gesture new file mode 100644 index 0000000000..a1f155f66b Binary files /dev/null and b/indra/newview/app_settings/static_assets/ff1114e1-4063-3abe-de2f-6d13f6cae508.gesture differ diff --git a/indra/newview/app_settings/static_assets/ff201a24-6893-4c41-77f2-bf707481e585.gesture b/indra/newview/app_settings/static_assets/ff201a24-6893-4c41-77f2-bf707481e585.gesture new file mode 100644 index 0000000000..d1e8bad3bc Binary files /dev/null and b/indra/newview/app_settings/static_assets/ff201a24-6893-4c41-77f2-bf707481e585.gesture differ diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index b67f3dae1b..49d0dc7e5c 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -56,7 +56,6 @@ RenderVBOMappingDisable 1 1 RenderVolumeLODFactor 1 4.0 UseStartScreen 1 1 UseOcclusion 1 1 -//VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 WLSkyDetail 1 128 Disregard128DefaultDrawDistance 1 1 @@ -95,7 +94,6 @@ RenderTerrainLODFactor 1 1 RenderTransparentWater 1 0 RenderTreeLODFactor 1 0 RenderVolumeLODFactor 1 1.5 -//VertexShaderEnable 1 0 WindLightUseAtmosShaders 1 0 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -127,7 +125,6 @@ RenderTerrainLODFactor 1 1 RenderTransparentWater 1 0 RenderTreeLODFactor 1 0 RenderVolumeLODFactor 1 1.5 -//VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 0 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -158,7 +155,6 @@ RenderTerrainLODFactor 1 1.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 2.0 -//VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 0 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -189,7 +185,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 2.0 -//VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -220,7 +215,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 2.0 -//VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -251,7 +245,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 2.0 -//VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -282,7 +275,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 2.0 -//VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 RenderDeferred 1 1 RenderDeferredSSAO 1 0 @@ -312,7 +304,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderVolumeLODFactor 1 3.0 -//VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 WLSkyDetail 1 128 RenderDeferred 1 1 @@ -380,7 +371,6 @@ list NoPixelShaders RenderAvatarVP 0 0 RenderAvatarCloth 0 0 RenderReflectionDetail 0 0 -//VertexShaderEnable 0 0 WindLightUseAtmosShaders 0 0 RenderDeferred 0 0 RenderDeferredSSAO 0 0 @@ -394,7 +384,6 @@ list NoVertexShaders RenderAvatarVP 0 0 RenderAvatarCloth 0 0 RenderReflectionDetail 0 0 -//VertexShaderEnable 0 0 WindLightUseAtmosShaders 0 0 RenderDeferred 0 0 RenderDeferredSSAO 0 0 diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index 53814541ac..2edfc30e37 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -56,7 +56,6 @@ RenderVBOMappingDisable 1 1 RenderVolumeLODFactor 1 4.0 UseStartScreen 1 1 UseOcclusion 1 1 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 WLSkyDetail 1 128 Disregard128DefaultDrawDistance 1 1 @@ -94,7 +93,6 @@ RenderTerrainLODFactor 1 1 RenderTransparentWater 1 0 RenderTreeLODFactor 1 0 RenderVolumeLODFactor 1 1.125 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 0 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -126,7 +124,6 @@ RenderTerrainLODFactor 1 1 RenderTransparentWater 1 0 RenderTreeLODFactor 1 0 RenderVolumeLODFactor 1 1.5 -VertexShaderEnable 1 0 WindLightUseAtmosShaders 1 0 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -157,7 +154,6 @@ RenderTerrainLODFactor 1 1.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 2.0 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 0 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -188,7 +184,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 2.0 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -219,7 +214,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 2.0 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 RenderDeferred 1 0 RenderUseAdvancedAtmospherics 1 0 @@ -250,7 +244,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 2.0 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -281,7 +274,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 2.0 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 RenderDeferred 1 1 RenderDeferredSSAO 1 0 @@ -311,7 +303,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderVolumeLODFactor 1 3.0 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 WLSkyDetail 1 128 RenderDeferred 1 1 @@ -379,7 +370,6 @@ list NoPixelShaders RenderAvatarVP 0 0 RenderAvatarCloth 0 0 RenderReflectionDetail 0 0 -VertexShaderEnable 0 0 WindLightUseAtmosShaders 0 0 RenderDeferred 0 0 RenderDeferredSSAO 0 0 @@ -393,7 +383,6 @@ list NoVertexShaders RenderAvatarVP 0 0 RenderAvatarCloth 0 0 RenderReflectionDetail 0 0 -VertexShaderEnable 0 0 WindLightUseAtmosShaders 0 0 RenderDeferred 0 0 RenderDeferredSSAO 0 0 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index b9192ecb12..3de2d7d364 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -56,7 +56,6 @@ RenderVBOMappingDisable 1 1 RenderVolumeLODFactor 1 4.0 UseStartScreen 1 1 UseOcclusion 1 1 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 WLSkyDetail 1 128 Disregard128DefaultDrawDistance 1 1 @@ -95,7 +94,6 @@ RenderTerrainLODFactor 1 1 RenderTransparentWater 1 0 RenderTreeLODFactor 1 0 RenderVolumeLODFactor 1 1.5 -VertexShaderEnable 1 0 WindLightUseAtmosShaders 1 0 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -127,7 +125,6 @@ RenderTerrainLODFactor 1 1 RenderTransparentWater 1 0 RenderTreeLODFactor 1 0 RenderVolumeLODFactor 1 1.5 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 0 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -158,7 +155,6 @@ RenderTerrainLODFactor 1 1.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 1.5 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 0 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -189,7 +185,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 1.5 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -220,7 +215,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 2.0 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 RenderDeferred 1 0 RenderDeferredSSAO 1 0 @@ -251,7 +245,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 2.0 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 RenderDeferred 1 1 RenderDeferredSSAO 1 0 @@ -282,7 +275,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderVolumeLODFactor 1 2.0 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 RenderDeferred 1 1 RenderDeferredSSAO 1 0 @@ -312,7 +304,6 @@ RenderTerrainLODFactor 1 2.0 RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderVolumeLODFactor 1 3.0 -VertexShaderEnable 1 1 WindLightUseAtmosShaders 1 1 WLSkyDetail 1 128 RenderDeferred 1 1 @@ -374,7 +365,6 @@ list NoPixelShaders RenderAvatarVP 0 0 RenderAvatarCloth 0 0 RenderReflectionDetail 0 0 -VertexShaderEnable 0 0 WindLightUseAtmosShaders 0 0 RenderDeferred 0 0 RenderDeferredSSAO 0 0 @@ -388,7 +378,6 @@ list NoVertexShaders RenderAvatarVP 0 0 RenderAvatarCloth 0 0 RenderReflectionDetail 0 0 -VertexShaderEnable 0 0 WindLightUseAtmosShaders 0 0 RenderDeferred 0 0 RenderDeferredSSAO 0 0 diff --git a/indra/newview/fsfloaterteleporthistory.cpp b/indra/newview/fsfloaterteleporthistory.cpp index f9ec067f38..c6f8004137 100644 --- a/indra/newview/fsfloaterteleporthistory.cpp +++ b/indra/newview/fsfloaterteleporthistory.cpp @@ -54,6 +54,15 @@ BOOL FSFloaterTeleportHistory::postBuild() { mHistoryPanel->setIsStandAlone(true); + mHistoryPanel->mTeleportBtn = getChild("teleport_btn"); + mHistoryPanel->mShowOnMapBtn = getChild("map_btn"); + mHistoryPanel->mShowProfile = getChild("profile_btn"); + + mHistoryPanel->mTeleportBtn->setClickedCallback(boost::bind(&LLTeleportHistoryPanel::onTeleport, mHistoryPanel)); + mHistoryPanel->mShowProfile->setClickedCallback(boost::bind(&LLTeleportHistoryPanel::onShowProfile, mHistoryPanel)); + mHistoryPanel->mShowOnMapBtn->setClickedCallback(boost::bind(&LLTeleportHistoryPanel::onShowOnMap, mHistoryPanel)); + + mFilterEditor = getChild("Filter"); if (mFilterEditor) { diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index a7608bb7a8..e9f1a469b1 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -126,7 +126,8 @@ const U8 AGENT_STATE_EDITING = 0x10; // Autopilot constants const F32 AUTOPILOT_HEIGHT_ADJUST_DISTANCE = 8.f; // meters const F32 AUTOPILOT_MIN_TARGET_HEIGHT_OFF_GROUND = 1.f; // meters -const F32 AUTOPILOT_MAX_TIME_NO_PROGRESS = 1.5f; // seconds +const F32 AUTOPILOT_MAX_TIME_NO_PROGRESS_WALK = 1.5f; // seconds +const F32 AUTOPILOT_MAX_TIME_NO_PROGRESS_FLY = 2.5f; // seconds. Flying is less presize, needs a bit more time const F32 MAX_VELOCITY_AUTO_LAND_SQUARED = 4.f * 4.f; const F64 CHAT_AGE_FAST_RATE = 3.0; @@ -1040,25 +1041,14 @@ boost::signals2::connection LLAgent::addParcelChangedCallback(parcel_changed_cal } // static -// FIRE-30774 displayname capability is targetting previous region -// void LLAgent::capabilityReceivedCallback(const LLUUID ®ion_id) -// { -// LLViewerRegion* region = gAgent.getRegion(); -// if (region && region->getRegionID() == region_id) -// { -// region->requestSimulatorFeatures(); -// LLAppViewer::instance()->updateNameLookupUrl(); -// } -// } -void LLAgent::capabilityReceivedCallback(LLViewerRegion* regionp) +void LLAgent::capabilityReceivedCallback(const LLUUID ®ion_id, LLViewerRegion *regionp) { - if (regionp) + if (regionp && regionp->getRegionID() == region_id) { regionp->requestSimulatorFeatures(); LLAppViewer::instance()->updateNameLookupUrl(regionp); } } -// //----------------------------------------------------------------------------- // setRegion() @@ -1110,17 +1100,11 @@ void LLAgent::setRegion(LLViewerRegion *regionp) if (regionp->capabilitiesReceived()) { regionp->requestSimulatorFeatures(); - // FIRE-30774 displayname capability is targetting previous region - // LLAppViewer::instance()->updateNameLookupUrl(); LLAppViewer::instance()->updateNameLookupUrl(regionp); - // } else { - // FIRE-30774 displayname capability is targetting previous region - // regionp->setCapabilitiesReceivedCallback(LLAgent::capabilityReceivedCallback); - regionp->setCapabilitiesReceivedCallback(boost::bind(&LLAgent::capabilityReceivedCallback, regionp)); - // + regionp->setCapabilitiesReceivedCallback(LLAgent::capabilityReceivedCallback); } } @@ -1142,17 +1126,11 @@ void LLAgent::setRegion(LLViewerRegion *regionp) if (regionp->capabilitiesReceived()) { - // FIRE-30774 displayname capability is targetting previous region - // LLAppViewer::instance()->updateNameLookupUrl(); LLAppViewer::instance()->updateNameLookupUrl(regionp); - // } else { - // FIRE-30774 displayname capability is targetting previous region - // regionp->setCapabilitiesReceivedCallback([regionp](const LLUUID ®ion_id) {LLAppViewer::instance()->updateNameLookupUrl(); }); - regionp->setCapabilitiesReceivedCallback([regionp](const LLUUID ®ion_id) { LLAppViewer::instance()->updateNameLookupUrl(regionp); }); - // + regionp->setCapabilitiesReceivedCallback([](const LLUUID ®ion_id, LLViewerRegion* regionp) {LLAppViewer::instance()->updateNameLookupUrl(regionp); }); } } @@ -2018,6 +1996,12 @@ void LLAgent::startAutoPilotGlobal( { return; } + + if (target_global.isExactlyZero()) + { + LL_WARNS() << "Canceling attempt to start autopilot towards invalid position" << LL_ENDL; + return; + } // Are there any pending callbacks from previous auto pilot requests? if (mAutoPilotFinishedCallback) @@ -2233,7 +2217,16 @@ void LLAgent::autoPilot(F32 *delta_yaw) if (target_dist >= mAutoPilotTargetDist) { mAutoPilotNoProgressFrameCount++; - if (mAutoPilotNoProgressFrameCount > AUTOPILOT_MAX_TIME_NO_PROGRESS * gFPSClamped) + bool out_of_time = false; + if (getFlying()) + { + out_of_time = mAutoPilotNoProgressFrameCount > AUTOPILOT_MAX_TIME_NO_PROGRESS_FLY * gFPSClamped; + } + else + { + out_of_time = mAutoPilotNoProgressFrameCount > AUTOPILOT_MAX_TIME_NO_PROGRESS_WALK * gFPSClamped; + } + if (out_of_time) { stopAutoPilot(); return; @@ -2282,7 +2275,7 @@ void LLAgent::autoPilot(F32 *delta_yaw) F32 slow_distance; if (getFlying()) { - slow_distance = llmax(6.f, mAutoPilotStopDistance + 5.f); + slow_distance = llmax(8.f, mAutoPilotStopDistance + 5.f); } else { @@ -2326,14 +2319,41 @@ void LLAgent::autoPilot(F32 *delta_yaw) } else if (mAutoPilotTargetDist > mAutoPilotStopDistance) { - // walking/flying slow + // walking/flying slow + U32 movement_flag = 0; + if (at * direction > 0.9f) { - setControlFlags(AGENT_CONTROL_AT_POS); - } - else if (at * direction < -0.9f) - { - setControlFlags(AGENT_CONTROL_AT_NEG); + movement_flag = AGENT_CONTROL_AT_POS; + } + else if (at * direction < -0.9f) + { + movement_flag = AGENT_CONTROL_AT_NEG; + } + + if (getFlying()) + { + // flying is too fast and has high inertia, artificially slow it down + // Don't update flags too often, server might not react + static U64 last_time_microsec = 0; + U64 time_microsec = LLTimer::getTotalTime(); + U64 delta = time_microsec - last_time_microsec; + // fly during ~0-40 ms, stop during ~40-250 ms + if (delta > 250000) // 250ms + { + // reset even if !movement_flag + last_time_microsec = time_microsec; + } + else if (delta > 40000) // 40 ms + { + clearControlFlags(AGENT_CONTROL_AT_POS | AGENT_CONTROL_AT_POS); + movement_flag = 0; + } + } + + if (movement_flag) + { + setControlFlags(movement_flag); } } diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index aea09d81ce..839fb68eaa 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -258,10 +258,7 @@ public: boost::signals2::connection addParcelChangedCallback(parcel_changed_callback_t); private: - // FIRE-30774 displayname capability is targetting previous region - // static void capabilityReceivedCallback(const LLUUID ®ion_id); - static void capabilityReceivedCallback(LLViewerRegion* regionp); - // + static void capabilityReceivedCallback(const LLUUID ®ion_id, LLViewerRegion *regionp); typedef boost::signals2::signal parcel_changed_signal_t; parcel_changed_signal_t mParcelChangedSignal; diff --git a/indra/newview/llappcorehttp.cpp b/indra/newview/llappcorehttp.cpp index 30464e2f08..407115480c 100644 --- a/indra/newview/llappcorehttp.cpp +++ b/indra/newview/llappcorehttp.cpp @@ -127,6 +127,7 @@ static const struct }; static void setting_changed(); +static void ssl_verification_changed(); LLAppCoreHttp::HttpClass::HttpClass() @@ -206,6 +207,23 @@ void LLAppCoreHttp::init() LL_WARNS("Init") << "Failed to set SSL Verification. Reason: " << status.toString() << LL_ENDL; } + // Set up Default SSL Verification option. + const std::string no_verify_ssl("NoVerifySSLCert"); + if (gSavedSettings.controlExists(no_verify_ssl)) + { + LLPointer cntrl_ptr = gSavedSettings.getControl(no_verify_ssl); + if (cntrl_ptr.isNull()) + { + LL_WARNS("Init") << "Unable to set signal on global setting '" << no_verify_ssl + << "'" << LL_ENDL; + } + else + { + mSSLNoVerifySignal = cntrl_ptr->getCommitSignal()->connect(boost::bind(&ssl_verification_changed)); + LLCore::HttpOptions::setDefaultSSLVerifyPeer(!cntrl_ptr->getValue().asBoolean()); + } + } + // Tracing levels for library & libcurl (note that 2 & 3 are beyond spammy): // 0 - None // 1 - Basic start, stop simple transitions @@ -307,6 +325,11 @@ void setting_changed() LLAppViewer::instance()->getAppCoreHttp().refreshSettings(false); } +void ssl_verification_changed() +{ + LLCore::HttpOptions::setDefaultSSLVerifyPeer(!gSavedSettings.getBOOL("NoVerifySSLCert")); +} + namespace { // The NoOpDeletor is used when wrapping LLAppCoreHttp in a smart pointer below for @@ -366,6 +389,7 @@ void LLAppCoreHttp::cleanup() { mHttpClasses[i].mSettingsSignal.disconnect(); } + mSSLNoVerifySignal.disconnect(); mPipelinedSignal.disconnect(); delete mRequest; diff --git a/indra/newview/llappcorehttp.h b/indra/newview/llappcorehttp.h index e8e37e0706..8cd231d319 100644 --- a/indra/newview/llappcorehttp.h +++ b/indra/newview/llappcorehttp.h @@ -272,6 +272,7 @@ private: HttpClass mHttpClasses[AP_COUNT]; bool mPipelined; // Global setting boost::signals2::connection mPipelinedSignal; // Signal for 'HttpPipelining' setting + boost::signals2::connection mSSLNoVerifySignal; // Signal for 'NoVerifySSLCert' setting static LLCore::HttpStatus sslVerify(const std::string &uri, const LLCore::HttpHandler::ptr_t &handler, void *appdata); }; diff --git a/indra/newview/llappdelegate-objc.mm b/indra/newview/llappdelegate-objc.mm index cfad3a5d1f..40357123a2 100644 --- a/indra/newview/llappdelegate-objc.mm +++ b/indra/newview/llappdelegate-objc.mm @@ -66,14 +66,16 @@ constructViewer(); #if defined(LL_BUGSPLAT) + infos("bugsplat setup"); // Engage BugsplatStartupManager *before* calling initViewer() to handle // any crashes during initialization. // https://www.bugsplat.com/docs/platforms/os-x#initialization - [BugsplatStartupManager sharedManager].autoSubmitCrashReport = YES; - [BugsplatStartupManager sharedManager].askUserDetails = NO; + [BugsplatStartupManager sharedManager].autoSubmitCrashReport = NO; + [BugsplatStartupManager sharedManager].askUserDetails = YES; [BugsplatStartupManager sharedManager].delegate = self; [[BugsplatStartupManager sharedManager] start]; #endif + infos("post-bugsplat setup"); frameTimer = nil; @@ -289,23 +291,28 @@ struct AttachmentInfo - (NSArray *)attachmentsForBugsplatStartupManager:(BugsplatStartupManager *)bugsplatStartupManager { - const CrashMetadata& metadata(CrashMetadata_instance()); + //const CrashMetadata& metadata(CrashMetadata_instance()); // Since we must do very similar processing for each of several file // pathnames, start by collecting them into a vector so we can iterate // instead of spelling out the logic for each. - std::vector info{ - AttachmentInfo(metadata.logFilePathname, "text/plain"), - AttachmentInfo(metadata.userSettingsPathname, "text/xml"), - AttachmentInfo(metadata.accountSettingsPathname, "text/xml"), - AttachmentInfo(metadata.staticDebugPathname, "text/xml") - }; + //std::vector info{ + // AttachmentInfo(metadata.logFilePathname, "text/plain"), + // AttachmentInfo(metadata.userSettingsPathname, "text/xml"), + // AttachmentInfo(metadata.accountSettingsPathname, "text/xml"), + // AttachmentInfo(metadata.staticDebugPathname, "text/xml") + //}; + std::vector info{}; // We "happen to know" that info[0].basename is "SecondLife.old" -- due to // the fact that BugsplatMac only notices a crash during the viewer run - // following the crash. Replace .old with .log to reduce confusion. - info[0].basename = - boost::filesystem::path(info[0].pathname).stem().string() + ".log"; + // following the crash. + // The Bugsplat service doesn't respect the MIME type above when returning + // the log data to a browser, so take this opportunity to rename the file + // from .old to _log.txt + // info[0].basename = + // boost::filesystem::path(info[0].pathname).stem().string() + "_log.txt"; + // infos("attachmentsForBugsplatStartupManager attaching log " + info[0].basename); NSMutableArray *attachments = [[NSMutableArray alloc] init]; @@ -341,6 +348,9 @@ struct AttachmentInfo { // TODO: message string from NSError infos("Could not send crash report to BugSplat"); + NSString *pStr = [NSString stringWithFormat:@"%@", error]; +std::string bar = std::string([pStr UTF8String]); + infos(bar); } #endif // LL_BUGSPLAT diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index e7dafbb7b8..14035289fe 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -4101,7 +4101,7 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd } llcoro::suspend(); - if (LLApp::isQuitting()) + if (LLApp::isExiting()) { return; } @@ -4168,7 +4168,7 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd LLSD result = httpAdapter->postAndSuspend(httpRequest, url, postData); - if (LLApp::isQuitting()) + if (LLApp::isExiting()) { return; } @@ -4208,7 +4208,7 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd LL_WARNS("Avatar") << "Bake retry #" << retryCount << " in " << timeout << " seconds." << LL_ENDL; llcoro::suspendUntilTimeout(timeout); - if (LLApp::isQuitting()) + if (LLApp::isExiting()) { return; } @@ -4894,6 +4894,17 @@ public: } virtual void done() { + if (mComplete.size() <= 0) + { + // Ex: timeout + LL_WARNS() << "Failed to load data. Removing observer " << LL_ENDL; + gInventory.removeObserver(this); + doOnIdleOneTime(mCallable); + + delete this; + return; + } + // What we do here is get the complete information on the // items in the requested category, and set up an observer // that will wait for that to happen. diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 262a231897..737a416699 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -813,14 +813,14 @@ LLAppViewer::LLAppViewer() // from the previous viewer run between this constructor call and the // init() call, which will overwrite the static_debug_info.log file for // THIS run. So setDebugFileNames() early. -#if LL_BUGSPLAT +# ifdef LL_BUGSPLAT // MAINT-8917: don't create a dump directory just for the // static_debug_info.log file std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ""); -#else // ! LL_BUGSPLAT +# else // ! LL_BUGSPLAT // write Google Breakpad minidump files to a per-run dump directory to avoid multiple viewer issues. std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, ""); -#endif // ! LL_BUGSPLAT +# endif // ! LL_BUGSPLAT mDumpPath = logdir; setMiniDumpDir(logdir); setDebugFileNames(logdir); @@ -845,17 +845,6 @@ public: } }; -namespace { -// With Xcode 6, _exit() is too magical to use with boost::bind(), so provide -// this little helper function. -void fast_exit(int rc) -{ - _exit(rc); -} - - -} - bool LLAppViewer::init() { @@ -994,9 +983,9 @@ bool LLAppViewer::init() if (rc >= 0) { // QAModeTermCode set, terminate with that rc on LL_ERRS. Use - // fast_exit() rather than exit() because normal cleanup depends too + // _exit() rather than exit() because normal cleanup depends too // much on successful startup! - LLError::setFatalFunction(boost::bind(fast_exit, rc)); + LLError::setFatalFunction([rc](const std::string&){ _exit(rc); }); } // Get rid of unused LLAllocator @@ -2558,28 +2547,6 @@ bool LLAppViewer::cleanup() return true; } -// A callback for LL_ERRS() to call during the watchdog error. -void watchdog_llerrs_callback(const std::string &error_string) -{ - gLLErrorActivated = true; - - gDebugInfo["FatalMessage"] = error_string; - LLAppViewer::instance()->writeDebugInfo(); - -#ifdef LL_WINDOWS - RaiseException(0,0,0,0); -#else - raise(SIGQUIT); -#endif -} - -// A callback for the watchdog to call. -void watchdog_killer_callback() -{ - LLError::setFatalFunction(watchdog_llerrs_callback); - LL_ERRS() << "Watchdog killer event" << LL_ENDL; -} - bool LLAppViewer::initThreads() { static const bool enable_threads = true; @@ -2618,52 +2585,51 @@ bool LLAppViewer::initThreads() return true; } -void errorCallback(const std::string &error_string) +void errorCallback(LLError::ELevel level, const std::string &error_string) { - LLStringUtil::format_map_t map; - map["ERROR_DETAILS"]=error_string; - std::string error_display_string=LLTrans::getString("MBApplicationErrorDetails",map); - - // If we crash before loading the configuration, LLTrans - // won't be able to find the localized string, so we - // fall back to the English version instead of showing - // a dialog saying "MissingString("". - std::string caption = LLTrans::getString("MBApplicationError"); + if (level == LLError::LEVEL_ERROR) + { + LLStringUtil::format_map_t map; + map["ERROR_DETAILS"]=error_string; + std::string error_display_string=LLTrans::getString("MBApplicationErrorDetails",map); - if (error_display_string.find("MissingString(") != std::string::npos) - { - error_display_string = "We are sorry, but Firestorm has crashed and needs to be closed. If you see this issue happening repeatedly, please contact our support team and submit the following message:\n\n[ERROR_DETAILS]"; - LLStringUtil::format(error_display_string, map); - } - if (caption.find("MissingString(") != std::string::npos) - { - caption = "Application Error - Don't Panic"; - } - // + // If we crash before loading the configuration, LLTrans + // won't be able to find the localized string, so we + // fall back to the English version instead of showing + // a dialog saying "MissingString("". + std::string caption = LLTrans::getString("MBApplicationError"); + + if (error_display_string.find("MissingString(") != std::string::npos) + { + error_display_string = "We are sorry, but Firestorm has crashed and needs to be closed. If you see this issue happening repeatedly, please contact our support team and submit the following message:\n\n[ERROR_DETAILS]"; + LLStringUtil::format(error_display_string, map); + } + if (caption.find("MissingString(") != std::string::npos) + { + caption = "Application Error - Don't Panic"; + } + // #if !LL_RELEASE_FOR_DOWNLOAD - // Changed to fix missing string error upon early crash - //if (OSBTN_CANCEL == OSMessageBox(error_display_string, LLTrans::getString("MBApplicationError"), OSMB_OKCANCEL)) - if (OSBTN_CANCEL == OSMessageBox(error_display_string, caption, OSMB_OKCANCEL)) - return; + // Changed to fix missing string error upon early crash + //if (OSBTN_CANCEL == OSMessageBox(error_display_string, LLTrans::getString("MBApplicationError"), OSMB_OKCANCEL)) + if (OSBTN_CANCEL == OSMessageBox(error_display_string, caption, OSMB_OKCANCEL)) + return; #else - // Changed to fix missing string error upon early crash - //OSMessageBox(error_display_string, LLTrans::getString("MBApplicationError"), OSMB_OK); - OSMessageBox(error_display_string, caption, OSMB_OK); + // Changed to fix missing string error upon early crash + //OSMessageBox(error_display_string, LLTrans::getString("MBApplicationError"), OSMB_OK); + OSMessageBox(error_display_string, caption, OSMB_OK); #endif // !LL_RELEASE_FOR_DOWNLOAD - //Set the ErrorActivated global so we know to create a marker file - gLLErrorActivated = true; + //Set the ErrorActivated global so we know to create a marker file + gLLErrorActivated = true; - gDebugInfo["FatalMessage"] = error_string; - // We're not already crashing -- we simply *intend* to crash. Since we - // haven't actually trashed anything yet, we can afford to write the whole - // static info file. - LLAppViewer::instance()->writeDebugInfo(); - -#ifndef SHADER_CRASH_NONFATAL - LLError::crashAndLoop(error_string); -#endif + gDebugInfo["FatalMessage"] = error_string; + // We're not already crashing -- we simply *intend* to crash. Since we + // haven't actually trashed anything yet, we can afford to write the whole + // static info file. + LLAppViewer::instance()->writeDebugInfo(); + } } void LLAppViewer::initLoggingAndGetLastDuration() @@ -2674,7 +2640,7 @@ void LLAppViewer::initLoggingAndGetLastDuration() LLError::initForApplication( gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "") ,gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "") ); - LLError::setFatalFunction(errorCallback); + LLError::addGenericRecorder(&errorCallback); //LLError::setTimeFunction(getRuntime); // Remove old CEF log file (defined in dullahan.h) @@ -3586,26 +3552,28 @@ bool LLAppViewer::initWindow() LL_INFOS("AppInit") << "gViewerwindow created." << LL_ENDL; // Need to load feature table before cheking to start watchdog. - // Fix Watchdog settings/feature table mess - //bool use_watchdog = false; - //int watchdog_enabled_setting = gSavedSettings.getS32("WatchdogEnabled"); - //if (watchdog_enabled_setting == -1) - //{ - // use_watchdog = !LLFeatureManager::getInstance()->isFeatureAvailable("WatchdogDisabled"); - //} - //else - //{ - // // The user has explicitly set this setting; always use that value. - // use_watchdog = bool(watchdog_enabled_setting); - //} - - //if (use_watchdog) - if (gSavedSettings.getS32("WatchdogEnabled")) - // + bool use_watchdog = false; + int watchdog_enabled_setting = gSavedSettings.getS32("WatchdogEnabled"); + if (watchdog_enabled_setting == -1) { - LLWatchdog::getInstance()->init(watchdog_killer_callback); + use_watchdog = !LLFeatureManager::getInstance()->isFeatureAvailable("WatchdogDisabled"); + } + else + { + // The user has explicitly set this setting; always use that value. + use_watchdog = bool(watchdog_enabled_setting); + } + + LL_INFOS("AppInit") << "watchdog" + << (use_watchdog ? " " : " NOT ") + << "enabled" + << " (setting = " << watchdog_enabled_setting << ")" + << LL_ENDL; + + if (use_watchdog) + { + LLWatchdog::getInstance()->init(); } - LL_INFOS("AppInit") << "watchdog setting is done." << LL_ENDL; // Init group notices, IMs and chiclets position before the // screenchannel gets created @@ -4229,8 +4197,8 @@ void LLAppViewer::writeSystemInfo() gDebugInfo["CPUInfo"]["CPUSSE"] = gSysCPU.hasSSE(); gDebugInfo["CPUInfo"]["CPUSSE2"] = gSysCPU.hasSSE2(); - gDebugInfo["RAMInfo"]["Physical"] = (LLSD::Integer)(gSysMemory.getPhysicalMemoryKB().value()); - gDebugInfo["RAMInfo"]["Allocated"] = (LLSD::Integer)(gMemoryAllocated.valueInUnits()); + gDebugInfo["RAMInfo"]["Physical"] = LLSD::Integer(gSysMemory.getPhysicalMemoryKB().value()); + gDebugInfo["RAMInfo"]["Allocated"] = LLSD::Integer(gMemoryAllocated.valueInUnits()); gDebugInfo["OSInfo"] = LLOSInfo::instance().getOSStringSimple(); // The user is not logged on yet, but record the current grid choice login url @@ -4243,12 +4211,18 @@ void LLAppViewer::writeSystemInfo() gDebugInfo["MainloopThreadID"] = (S32)thread_id; #endif +#ifndef LL_BUGSPLAT // "CrashNotHandled" is set here, while things are running well, // in case of a freeze. If there is a freeze, the crash logger will be launched // and can read this value from the debug_info.log. // If the crash is handled by LLAppViewer::handleViewerCrash, ie not a freeze, // then the value of "CrashNotHandled" will be set to true. - gDebugInfo["CrashNotHandled"] = (LLSD::Boolean)true; + gDebugInfo["CrashNotHandled"] = LLSD::Boolean(true); +#else // LL_BUGSPLAT + // "CrashNotHandled" is obsolete; it used (not very successsfully) + // to try to distinguish crashes from freezes - the intent here to to avoid calling it a freeze + gDebugInfo["CrashNotHandled"] = LLSD::Boolean(false); +#endif // ! LL_BUGSPLAT // Insert crash host url (url to post crash log to) if configured. This insures // that the crash report will go to the proper location in the case of a @@ -4288,7 +4262,7 @@ void LLAppViewer::writeSystemInfo() gDebugInfo["ViewerExePath"] = gDirUtilp->getExecutablePathAndName(); gDebugInfo["CurrentPath"] = gDirUtilp->getCurPath(); - gDebugInfo["FirstLogin"] = (LLSD::Boolean) gAgent.isFirstLogin(); + gDebugInfo["FirstLogin"] = LLSD::Boolean(gAgent.isFirstLogin()); gDebugInfo["FirstRunThisInstall"] = gSavedSettings.getBOOL("FirstRunThisInstall"); gDebugInfo["StartupState"] = LLStartUp::getStartupStateString(); @@ -4418,7 +4392,7 @@ void LLAppViewer::handleViewerCrash() // The crash is being handled here so set this value to false. // Otherwise the crash logger will think this crash was a freeze. - gDebugInfo["Dynamic"]["CrashNotHandled"] = (LLSD::Boolean)false; + gDebugInfo["Dynamic"]["CrashNotHandled"] = LLSD::Boolean(false); //Write out the crash status file //Use marker file style setup, as that's the simplest, especially since @@ -4491,6 +4465,8 @@ void LLAppViewer::handleViewerCrash() if (LLWorld::instanceExists()) LLWorld::getInstance()->getInfo(gDebugInfo["Dynamic"]); + gDebugInfo["FatalMessage"] = LLError::getFatalMessage(); + // Close the debug file pApp->writeDebugInfo(false); //false answers the isStatic question with the least overhead. } @@ -4595,9 +4571,8 @@ void LLAppViewer::processMarkerFiles() else if (marker_is_same_version) { // the file existed, is ours, and matched our version, so we can report on what it says - LL_INFOS("MarkerFile") << "Exec marker '"<< mMarkerFileName << "' found; last exec FROZE" << LL_ENDL; - gLastExecEvent = LAST_EXEC_FROZE; - + LL_INFOS("MarkerFile") << "Exec marker '"<< mMarkerFileName << "' found; last exec crashed" << LL_ENDL; + gLastExecEvent = LAST_EXEC_OTHER_CRASH; } else { @@ -4986,10 +4961,6 @@ bool LLAppViewer::initCache() //const unsigned int disk_cache_bytes = disk_cache_mb * 1024 * 1024; const uintmax_t disk_cache_bytes = disk_cache_mb * 1024 * 1024; const bool enable_cache_debug_info = gSavedSettings.getBOOL("EnableDiskCacheDebugInfo"); - // Don't ignore cache path for asset cache; Moved further down until cache path has been set correctly - //const std::string cache_dir = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, cache_dir_name); - //LLDiskCache::initParamSingleton(cache_dir, disk_cache_bytes, enable_cache_debug_info); - // bool texture_cache_mismatch = false; if (gSavedSettings.getS32("LocalCacheVersion") != LLAppViewer::getTextureCacheVersion()) @@ -5013,8 +4984,10 @@ bool LLAppViewer::initCache() gSavedSettings.setBOOL("PurgeCacheOnNextStartup", false); LL_INFOS("AppCache") << "Scheduling texture purge, based on PurgeCache* settings." << LL_ENDL; mPurgeCache = true; - // STORM-1141 force purgeAllTextures to get called to prevent a crash here. -brad - texture_cache_mismatch = true; + // No longer needed + // // STORM-1141 force purgeAllTextures to get called to prevent a crash here. -brad + // texture_cache_mismatch = true; + // } // If the J2C has changed since the last run, clear the cache @@ -5060,10 +5033,8 @@ bool LLAppViewer::initCache() } // - // Don't ignore cache path for asset cache - const std::string cache_dir = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, cache_dir_name); - LLDiskCache::initParamSingleton(cache_dir, disk_cache_bytes, enable_cache_debug_info); - // + const std::string cache_dir = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, cache_dir_name); + LLDiskCache::initParamSingleton(cache_dir, disk_cache_bytes, enable_cache_debug_info); if (!read_only) { @@ -5085,7 +5056,7 @@ bool LLAppViewer::initCache() LLAppViewer::getPurgeDiskCacheThread()->start(); // FIRE-13066 - if (mPurgeTextures && !read_only) + if (!mPurgeCache && mPurgeTextures && !read_only) // no need to purge textures if we already purged the cache above { LL_INFOS("AppCache") << "Purging Texture Cache..." << LL_ENDL; LLSplashScreen::update(LLTrans::getString("StartupClearingTextureCache")); @@ -6092,13 +6063,9 @@ void LLAppViewer::sendLogoutRequest() } } -// FIRE-30774 displayname capability is targetting previous region -// void LLAppViewer::updateNameLookupUrl() -void LLAppViewer::updateNameLookupUrl(const LLViewerRegion * region) -// +void LLAppViewer::updateNameLookupUrl(const LLViewerRegion * regionp) { - // LLViewerRegion* region = gAgent.getRegion(); - if (!region || !region->capabilitiesReceived()) + if (!regionp || !regionp->capabilitiesReceived()) { return; } @@ -6107,7 +6074,7 @@ void LLAppViewer::updateNameLookupUrl(const LLViewerRegion * region) bool had_capability = name_cache->hasNameLookupURL(); std::string name_lookup_url; name_lookup_url.reserve(128); // avoid a memory allocation below - name_lookup_url = region->getCapability("GetDisplayNames"); + name_lookup_url = regionp->getCapability("GetDisplayNames"); bool have_capability = !name_lookup_url.empty(); if (have_capability) { @@ -6455,6 +6422,33 @@ void LLAppViewer::forceErrorDriverCrash() glDeleteTextures(1, NULL); } +void LLAppViewer::forceErrorCoroutineCrash() +{ + LL_WARNS() << "Forcing a crash in LLCoros" << LL_ENDL; + LLCoros::instance().launch("LLAppViewer::crashyCoro", [] {throw LLException("A deliberate crash from LLCoros"); }); +} + +void LLAppViewer::forceErrorThreadCrash() +{ + class LLCrashTestThread : public LLThread + { + public: + + LLCrashTestThread() : LLThread("Crash logging test thread") + { + } + + void run() + { + LL_ERRS() << "This is a deliberate llerror in thread" << LL_ENDL; + } + }; + + LL_WARNS() << "This is a deliberate crash in a thread" << LL_ENDL; + LLCrashTestThread *thread = new LLCrashTestThread(); + thread->start(); +} + // Change from std::string to char const*, saving a lot of object construction/destruction per frame //void LLAppViewer::initMainloopTimeout(const std::string& state, F32 secs) void LLAppViewer::initMainloopTimeout( char const* state, F32 secs) @@ -6507,11 +6501,6 @@ void LLAppViewer::pauseMainloopTimeout() void LLAppViewer::pingMainloopTimeout( char const* state, F32 secs) // { -// if(!restoreErrorTrap()) -// { -// LL_WARNS() << "!!!!!!!!!!!!! Its an error trap!!!!" << state << LL_ENDL; -// } - if(mMainloopTimeout) { if(secs < 0.0f) diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 861150bae2..e42a11d3e4 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -58,7 +58,7 @@ class LLImageDecodeThread; class LLTextureFetch; class LLWatchdogTimeout; class LLViewerJoystick; -class LLViewerRegion; // +class LLViewerRegion; class FSPurgeDiskCacheThread; // Regular disk cache cleanup extern LLTrace::BlockTimerStatHandle FTM_FRAME; @@ -151,6 +151,8 @@ public: virtual void forceErrorInfiniteLoop(); virtual void forceErrorSoftwareException(); virtual void forceErrorDriverCrash(); + virtual void forceErrorCoroutineCrash(); + virtual void forceErrorThreadCrash(); // The list is found in app_settings/settings_files.xml // but since they are used explicitly in code, @@ -225,10 +227,7 @@ public: // llcorehttp init/shutdown/config information. LLAppCoreHttp & getAppCoreHttp() { return mAppCoreHttp; } - // FIRE-30774 displayname capability is targetting previous region - // void updateNameLookupUrl(); - void updateNameLookupUrl( const LLViewerRegion * region ); - // + void updateNameLookupUrl(const LLViewerRegion* regionp); protected: virtual bool initWindow(); // Initialize the viewer's window. diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp index 662164af2d..42946e4415 100644 --- a/indra/newview/llappviewermacosx.cpp +++ b/indra/newview/llappviewermacosx.cpp @@ -68,39 +68,21 @@ namespace int gArgC; char** gArgV; LLAppViewerMacOSX* gViewerAppPtr = NULL; - - void (*gOldTerminateHandler)() = NULL; std::string gHandleSLURL; } -static void exceptionTerminateHandler() -{ - // reinstall default terminate() handler in case we re-terminate. - if (gOldTerminateHandler) std::set_terminate(gOldTerminateHandler); - // treat this like a regular viewer crash, with nice stacktrace etc. - long *null_ptr; - null_ptr = 0; - *null_ptr = 0xDEADBEEF; //Force an exception that will trigger breakpad. - //LLAppViewer::handleViewerCrash(); - // we've probably been killed-off before now, but... - gOldTerminateHandler(); // call old terminate() handler -} - void constructViewer() { // Set the working dir to /Contents/Resources if (chdir(gDirUtilp->getAppRODataDir().c_str()) == -1) { - LL_WARNS() << "Could not change directory to " + LL_WARNS("InitOSX") << "Could not change directory to " << gDirUtilp->getAppRODataDir() << ": " << strerror(errno) << LL_ENDL; } gViewerAppPtr = new LLAppViewerMacOSX(); - // install unexpected exception handler - gOldTerminateHandler = std::set_terminate(exceptionTerminateHandler); - gViewerAppPtr->setErrorHandler(LLAppViewer::handleViewerCrash); } @@ -109,7 +91,7 @@ bool initViewer() bool ok = gViewerAppPtr->init(); if(!ok) { - LL_WARNS() << "Application init failed." << LL_ENDL; + LL_WARNS("InitOSX") << "Application init failed." << LL_ENDL; } else if (!gHandleSLURL.empty()) { @@ -172,7 +154,7 @@ class CrashMetadataSingleton: public CrashMetadata, public LLSingletoninitCrashReporting(); } -#endif - return success; } @@ -334,11 +313,12 @@ bool LLAppViewerMacOSX::restoreErrorTrap() unsigned int reset_count = 0; -#define SET_SIG(S) sigaction(SIGABRT, &act, &old_act); \ - if(act.sa_sigaction != old_act.sa_sigaction) \ - ++reset_count; +#define SET_SIG(SIGNAL) sigaction(SIGNAL, &act, &old_act); \ + if(act.sa_sigaction != old_act.sa_sigaction) ++reset_count; // Synchronous signals - SET_SIG(SIGABRT) +# ifndef LL_BUGSPLAT + SET_SIG(SIGABRT) // let bugsplat catch this +# endif SET_SIG(SIGALRM) SET_SIG(SIGBUS) SET_SIG(SIGFPE) @@ -369,6 +349,10 @@ bool LLAppViewerMacOSX::restoreErrorTrap() void LLAppViewerMacOSX::initCrashReporting(bool reportFreeze) { +#if defined LL_BUGSPLAT + LL_DEBUGS("InitOSX", "Bugsplat") << "using BugSplat crash logger" << LL_ENDL; +#elif LL_SEND_CRASH_REPORTS + LL_DEBUGS("InitOSX") << "Initializing legacy crash logger" << LL_ENDL; std::string command_str = "mac-crash-logger.app"; std::stringstream pid_str; @@ -380,6 +364,9 @@ void LLAppViewerMacOSX::initCrashReporting(bool reportFreeze) LL_WARNS() << "about to launch mac-crash-logger" << pid_str.str() << " " << logdir << " " << appname << LL_ENDL; launchApplication(&command_str, &args); +#else + LL_DEBUGS("InitOSX") << "No crash logger enabled" << LL_ENDL; +#endif // ! LL_BUGSPLAT } std::string LLAppViewerMacOSX::generateSerialNumber() @@ -391,7 +378,8 @@ std::string LLAppViewerMacOSX::generateSerialNumber() CFStringRef serialNumber = NULL; io_service_t platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice")); - if (platformExpert) { + if (platformExpert) + { serialNumber = (CFStringRef) IORegistryEntryCreateCFProperty(platformExpert, CFSTR(kIOPlatformSerialNumberKey), kCFAllocatorDefault, 0); diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 818e09999f..9092edb115 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -233,7 +233,7 @@ static void exceptionTerminateHandler() long *null_ptr; null_ptr = 0; *null_ptr = 0xDEADBEEF; //Force an exception that will trigger breakpad. - //LLAppViewer::handleViewerCrash(); + // we've probably been killed-off before now, but... gOldTerminateHandler(); // call old terminate() handler } @@ -494,10 +494,6 @@ int APIENTRY WINMAIN(HINSTANCE hInstance, viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash); -#if LL_SEND_CRASH_REPORTS - // ::SetUnhandledExceptionFilter(catchallCrashHandler); -#endif - // Set a debug info flag to indicate if multiple instances are running. bool found_other_instance = !create_app_mutex(); gDebugInfo["FoundOtherInstanceAtStartup"] = LLSD::Boolean(found_other_instance); @@ -784,6 +780,13 @@ bool LLAppViewerWin32::init() #else // LL_BUGSPLAT #pragma message("Building with BugSplat") // Pre BugSplat dance, make sure settings are valid, query crash behavior and then set up Bugsplat accordingly" + //if (!isSecondInstance()) + //{ + // // Cleanup previous session + // std::string log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "bugsplat.log"); + // LLFile::remove(log_file, ENOENT); + //} + success = LLAppViewer::init(); if (!success) return false; @@ -812,7 +815,7 @@ bool LLAppViewerWin32::init() llifstream inf(build_data_fname.c_str()); if (! inf.is_open()) { - LL_WARNS() << "Can't initialize BugSplat, can't read '" << build_data_fname + LL_WARNS("BUGSPLAT") << "Can't initialize BugSplat, can't read '" << build_data_fname << "'" << LL_ENDL; } else @@ -822,7 +825,7 @@ bool LLAppViewerWin32::init() if (! reader.parse(inf, build_data, false)) // don't collect comments { // gah, the typo is baked into Json::Reader API - LL_WARNS() << "Can't initialize BugSplat, can't parse '" << build_data_fname + LL_WARNS("BUGSPLAT") << "Can't initialize BugSplat, can't parse '" << build_data_fname << "': " << reader.getFormatedErrorMessages() << LL_ENDL; } else @@ -830,7 +833,7 @@ bool LLAppViewerWin32::init() Json::Value BugSplat_DB = build_data["BugSplat DB"]; if (! BugSplat_DB) { - LL_WARNS() << "Can't initialize BugSplat, no 'BugSplat DB' entry in '" + LL_WARNS("BUGSPLAT") << "Can't initialize BugSplat, no 'BugSplat DB' entry in '" << build_data_fname << "'" << LL_ENDL; } else @@ -841,31 +844,40 @@ bool LLAppViewerWin32::init() LL_VIEWER_VERSION_PATCH << '.' << LL_VIEWER_VERSION_BUILD)); - // have to convert normal wide strings to strings of __wchar_t - // Set up Bugsplat to ask or always send + //DWORD dwFlags = MDSF_NONINTERACTIVE | // automatically submit report without prompting + // MDSF_PREVENTHIJACKING; // disallow swiping Exception filter + DWORD dwFlags = dwAsk | + MDSF_PREVENTHIJACKING; // disallow swiping Exception filter + // - // sBugSplatSender = new MiniDmpSender( - // WCSTR(BugSplat_DB.asString()), - // WCSTR(LL_TO_WSTRING(LL_VIEWER_CHANNEL)), - // WCSTR(version_string), - // nullptr, // szAppIdentifier -- set later - // MDSF_NONINTERACTIVE | // automatically submit report without prompting - // MDSF_PREVENTHIJACKING); // disallow swiping Exception filter - + //bool needs_log_file = !isSecondInstance() && debugLoggingEnabled("BUGSPLAT"); + //if (needs_log_file) + //{ + // // Startup only! + // LL_INFOS("BUGSPLAT") << "Engaged BugSplat logging to bugsplat.log" << LL_ENDL; + // dwFlags |= MDSF_LOGFILE | MDSF_LOG_VERBOSE; + //} + + // have to convert normal wide strings to strings of __wchar_t sBugSplatSender = new MiniDmpSender( WCSTR(BugSplat_DB.asString()), WCSTR(LL_TO_WSTRING(LL_VIEWER_CHANNEL)), WCSTR(version_string), nullptr, // szAppIdentifier -- set later - dwAsk | - MDSF_PREVENTHIJACKING); // disallow swiping Exception filter - // + dwFlags); sBugSplatSender->setCallback(bugsplatSendLog); + //if (needs_log_file) + //{ + // // Log file will be created in %TEMP%, but it will be moved into logs folder in case of crash + // std::string log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "bugsplat.log"); + // sBugSplatSender->setLogFilePath(WCSTR(log_file)); + //} + // engage stringize() overload that converts from wstring - LL_INFOS() << "Engaged BugSplat(" << LL_TO_STRING(LL_VIEWER_CHANNEL) + LL_INFOS("BUGSPLAT") << "Engaged BugSplat(" << LL_TO_STRING(LL_VIEWER_CHANNEL) << ' ' << stringize(version_string) << ')' << LL_ENDL; } // got BugSplat_DB } // parsed build_data.json @@ -899,6 +911,16 @@ bool LLAppViewerWin32::cleanup() return result; } +void LLAppViewerWin32::reportCrashToBugsplat(void* pExcepInfo) +{ +#if defined(LL_BUGSPLAT) + if (sBugSplatSender) + { + sBugSplatSender->createReport((EXCEPTION_POINTERS*)pExcepInfo); + } +#endif // LL_BUGSPLAT +} + void LLAppViewerWin32::initLoggingAndGetLastDuration() { LLAppViewer::initLoggingAndGetLastDuration(); @@ -1040,8 +1062,7 @@ bool LLAppViewerWin32::beingDebugged() bool LLAppViewerWin32::restoreErrorTrap() { - return true; - //return LLWinDebug::checkExceptionHandler(); + return true; // we don't check for handler collisions on windows, so just say they're ok } void LLAppViewerWin32::initCrashReporting(bool reportFreeze) @@ -1238,7 +1259,10 @@ DWORD WINAPI purgeThread( LPVOID lpParameter ) ::FindClose( hFindHandle ); for( auto dir : vctDirs ) + { + LL_INFOS("CachePurge") << "Removing an old cache" << LL_ENDL; deleteCacheDirectory( dir ); + } return 0; } diff --git a/indra/newview/llappviewerwin32.h b/indra/newview/llappviewerwin32.h index 9f0b6aaf95..ca271af7a0 100644 --- a/indra/newview/llappviewerwin32.h +++ b/indra/newview/llappviewerwin32.h @@ -40,20 +40,22 @@ public: // // Main application logic // - virtual bool init(); // Override to do application initialization - virtual bool cleanup(); + bool init() override; // Override to do application initialization + bool cleanup() override; + + void reportCrashToBugsplat(void* pExcepInfo) override; protected: - virtual void initLoggingAndGetLastDuration(); // Override to clean stack_trace info. - virtual void initConsole(); // Initialize OS level debugging console. - virtual bool initHardwareTest(); // Win32 uses DX9 to test hardware. - virtual bool initParseCommandLine(LLCommandLineParser& clp); + void initLoggingAndGetLastDuration() override; // Override to clean stack_trace info. + void initConsole() override; // Initialize OS level debugging console. + bool initHardwareTest() override; // Win32 uses DX9 to test hardware. + bool initParseCommandLine(LLCommandLineParser& clp) override; - virtual bool beingDebugged(); - virtual bool restoreErrorTrap(); - virtual void initCrashReporting(bool reportFreeze); + bool beingDebugged() override; + bool restoreErrorTrap() override; + void initCrashReporting(bool reportFreeze) override; - virtual bool sendURLToOtherInstance(const std::string& url); + bool sendURLToOtherInstance(const std::string& url) override; std::string generateSerialNumber(); diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 910a4eda86..cdf063af2d 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -867,6 +867,14 @@ void LLAvatarActions::csr(const LLUUID& id, std::string name) //static void LLAvatarActions::share(const LLUUID& id) { +// [RLVa:KB] - @share + if ( (RlvActions::isRlvEnabled()) && (!RlvActions::canGiveInventory(id)) ) + { + RlvUtil::notifyBlocked(RlvStringKeys::Blocked::Share, LLSD().with("RECIPIENT", id)); + return; + } +// [/RLVa:KB] + // FIRE-8804: Prevent opening inventory from using share in radar context menu if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWINV)) { @@ -1120,10 +1128,34 @@ namespace action_give_inventory * @param avatar_names - avatar names request to be sent. * @param avatar_uuids - avatar names request to be sent. */ - static void give_inventory(const uuid_vec_t& avatar_uuids, const std::vector avatar_names, LLInventoryPanel* panel = NULL) +// static void give_inventory(const uuid_vec_t& avatar_uuids, const std::vector avatar_names, LLInventoryPanel* panel = NULL) +// [RLVa:KB] - @share + static void give_inventory(uuid_vec_t avatar_uuids, std::vector avatar_names, LLInventoryPanel* panel = NULL) +// [/RLVa:KB] { llassert(avatar_names.size() == avatar_uuids.size()); +// [RLVa:KB] - @share + if ( (RlvActions::isRlvEnabled()) && (RlvActions::hasBehaviour(RLV_BHVR_SHARE)) ) + { + for (int idxAvatar = avatar_uuids.size() - 1; idxAvatar >= 0; idxAvatar--) + { + if (!RlvActions::canGiveInventory(avatar_uuids[idxAvatar])) + { + RlvUtil::notifyBlocked(RlvStringKeys::Blocked::Share, LLSD().with("RECIPIENT", LLSLURL("agent", avatar_uuids[idxAvatar], "completename").getSLURLString())); + + avatar_uuids.erase(avatar_uuids.begin() + idxAvatar); + avatar_names.erase(avatar_names.begin() + idxAvatar); + } + } + } + + if (avatar_uuids.empty()) + { + return; + } +// [/RLVa:KB] + const std::set inventory_selected_uuids = LLAvatarActions::getInventorySelectedUUIDs(panel); if (inventory_selected_uuids.empty()) { @@ -1249,6 +1281,14 @@ std::set LLAvatarActions::getInventorySelectedUUIDs(LLInventoryPanel* ac //static void LLAvatarActions::shareWithAvatars(LLView * panel) { +// [RLVa:KB] - @share + if ( (RlvActions::isRlvEnabled()) && (!RlvActions::canGiveInventory()) ) + { + RlvUtil::notifyBlocked(RlvStringKeys::Blocked::ShareGeneric); + return; + } +// [/RLVa:KB] + using namespace action_give_inventory; LLFloater* root_floater = gFloaterView->getParentFloater(panel); diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp index 49b07a0ac7..07cdecf920 100644 --- a/indra/newview/llcompilequeue.cpp +++ b/indra/newview/llcompilequeue.cpp @@ -449,7 +449,7 @@ void LLFloaterCompileQueue::processExperienceIdResults(LLSD result, LLUUID paren bool LLFloaterCompileQueue::processScript(LLHandle hfloater, const LLPointer &object, LLInventoryObject* inventory, LLEventPump &pump) { - if (LLApp::isQuitting()) + if (LLApp::isExiting()) { // Reply from coroutine came on shutdown // We are quiting, don't start any more coroutines! diff --git a/indra/newview/lldelayedgestureerror.cpp b/indra/newview/lldelayedgestureerror.cpp index ef1b644ad4..934a38bb8e 100644 --- a/indra/newview/lldelayedgestureerror.cpp +++ b/indra/newview/lldelayedgestureerror.cpp @@ -113,7 +113,7 @@ bool LLDelayedGestureError::doDialog(const LLErrorEntry &ent, bool uuid_ok) } } - if(!LLApp::isQuitting()) + if(!LLApp::isExiting()) { LLNotificationsUtil::add(ent.mNotifyName, args); } diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp index 6122000989..991fb813bb 100644 --- a/indra/newview/llenvironment.cpp +++ b/indra/newview/llenvironment.cpp @@ -1110,7 +1110,7 @@ void LLEnvironment::onRegionChange() } if (!cur_region->capabilitiesReceived()) { - cur_region->setCapabilitiesReceivedCallback([](const LLUUID ®ion_id) { LLEnvironment::instance().requestRegion(); }); + cur_region->setCapabilitiesReceivedCallback([](const LLUUID ®ion_id, LLViewerRegion* regionp) { LLEnvironment::instance().requestRegion(); }); return; } requestRegion(); @@ -1242,9 +1242,38 @@ void LLEnvironment::setEnvironment(LLEnvironment::EnvSelection_t env, LLEnvironm } else if (!environment->getSky()) { - LL_DEBUGS("ENVIRONMENT") << "Blank sky for " << env_selection_to_string(env) << ". Reusing environment for sky." << LL_ENDL; - environment->setSky(mCurrentEnvironment->getSky()); - environment->setFlags(DayInstance::NO_ANIMATE_SKY); + if (mCurrentEnvironment->getEnvironmentSelection() != ENV_NONE) + { + // Note: This looks suspicious. Shouldn't we assign whole day if mCurrentEnvironment has whole day? + // and then add water/sky on top + // This looks like it will result in sky using single keyframe instead of whole day if day is present + // when setting static water without static sky + environment->setSky(mCurrentEnvironment->getSky()); + environment->setFlags(DayInstance::NO_ANIMATE_SKY); + } + else + { + // Environment is not properly initialized yet, but we should have environment by this point + DayInstance::ptr_t substitute = getEnvironmentInstance(ENV_PARCEL, true); + if (!substitute || !substitute->getSky()) + { + substitute = getEnvironmentInstance(ENV_REGION, true); + } + if (!substitute || !substitute->getSky()) + { + substitute = getEnvironmentInstance(ENV_DEFAULT, true); + } + + if (substitute && substitute->getSky()) + { + environment->setSky(substitute->getSky()); + environment->setFlags(DayInstance::NO_ANIMATE_SKY); + } + else + { + LL_WARNS("ENVIRONMENT") << "Failed to assign substitute water/sky, environment is not properly initialized" << LL_ENDL; + } + } } if (fixed.second) @@ -1255,9 +1284,38 @@ void LLEnvironment::setEnvironment(LLEnvironment::EnvSelection_t env, LLEnvironm } else if (!environment->getWater()) { - LL_DEBUGS("ENVIRONMENT") << "Blank water for " << env_selection_to_string(env) << ". Reusing environment for water." << LL_ENDL; - environment->setWater(mCurrentEnvironment->getWater()); - environment->setFlags(DayInstance::NO_ANIMATE_WATER); + if (mCurrentEnvironment->getEnvironmentSelection() != ENV_NONE) + { + // Note: This looks suspicious. Shouldn't we assign whole day if mCurrentEnvironment has whole day? + // and then add water/sky on top + // This looks like it will result in water using single keyframe instead of whole day if day is present + // when setting static sky without static water + environment->setWater(mCurrentEnvironment->getWater()); + environment->setFlags(DayInstance::NO_ANIMATE_WATER); + } + else + { + // Environment is not properly initialized yet, but we should have environment by this point + DayInstance::ptr_t substitute = getEnvironmentInstance(ENV_PARCEL, true); + if (!substitute || !substitute->getWater()) + { + substitute = getEnvironmentInstance(ENV_REGION, true); + } + if (!substitute || !substitute->getWater()) + { + substitute = getEnvironmentInstance(ENV_DEFAULT, true); + } + + if (substitute && substitute->getWater()) + { + environment->setWater(substitute->getWater()); + environment->setFlags(DayInstance::NO_ANIMATE_WATER); + } + else + { + LL_WARNS("ENVIRONMENT") << "Failed to assign substitute water/sky, environment is not properly initialized" << LL_ENDL; + } + } } if (!mSignalEnvChanged.empty()) @@ -1824,8 +1882,11 @@ void LLEnvironment::recordEnvironment(S32 parcel_id, LLEnvironment::EnvironmentI } else { - setEnvironment(ENV_REGION, envinfo->mDayCycle, envinfo->mDayLength, envinfo->mDayOffset, envinfo->mEnvVersion); mTrackAltitudes = envinfo->mAltitudes; + // update track selection based on new altitudes + mCurrentTrack = calculateSkyTrackForAltitude(gAgent.getPositionAgent().mV[VZ]); + + setEnvironment(ENV_REGION, envinfo->mDayCycle, envinfo->mDayLength, envinfo->mDayOffset, envinfo->mEnvVersion); } LL_DEBUGS("ENVIRONMENT") << "Altitudes set to {" << mTrackAltitudes[0] << ", "<< mTrackAltitudes[1] << ", " << mTrackAltitudes[2] << ", " << mTrackAltitudes[3] << LL_ENDL; @@ -2461,6 +2522,15 @@ void LLEnvironment::onAgentPositionHasChanged(const LLVector3 &localpos) return; mCurrentTrack = trackno; + + LLViewerRegion* cur_region = gAgent.getRegion(); + if (!cur_region || !cur_region->capabilitiesReceived()) + { + // Environment not ready, environment will be updated later, don't cause 'blend' yet. + // But keep mCurrentTrack updated in case we won't get new altitudes for some reason + return; + } + for (S32 env = ENV_LOCAL; env < ENV_DEFAULT; ++env) { if (mEnvironments[env]) diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index 2e5fff5589..d3c051c6cc 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -239,6 +239,7 @@ void LLFloaterAbout::fetchServerReleaseNotesCoro(std::string cap_url) httpOpts->setWantHeaders(true); httpOpts->setFollowRedirects(false); + httpOpts->setSSLVerifyPeer(false); // We want this data even if SSL verification fails LLSD result = httpAdapter->getAndSuspend(httpRequest, cap_url, httpOpts); diff --git a/indra/newview/llfloatercreatelandmark.cpp b/indra/newview/llfloatercreatelandmark.cpp index eb93a6a75a..588f72e85b 100644 --- a/indra/newview/llfloatercreatelandmark.cpp +++ b/indra/newview/llfloatercreatelandmark.cpp @@ -160,16 +160,9 @@ void LLFloaterCreateLandmark::populateFoldersList(const LLUUID &folder_id) mFolderCombo->removeall(); // Put the "My Favorites" folder first in list. - LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); - LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id); - if (!favorites_cat) - { - LL_WARNS() << "Cannot find the favorites folder" << LL_ENDL; - } - else - { - mFolderCombo->add(getString("favorites_bar"), favorites_cat->getUUID()); - } + // Code moved below because of: + // FIRE-31031 New Create Landmark Floater: Default to Landmarks Folder + // // Add the "Landmarks" category. const LLViewerInventoryCategory* lmcat = gInventory.getCategory(mLandmarksID); @@ -183,6 +176,19 @@ void LLFloaterCreateLandmark::populateFoldersList(const LLUUID &folder_id) mFolderCombo->add(cat_full_name, lmcat->getUUID()); } + // FIRE-31031 New Create Landmark Floater: Default to Landmarks Folder + LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); + LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id); + if (!favorites_cat) + { + LL_WARNS() << "Cannot find the favorites folder" << LL_ENDL; + } + else + { + mFolderCombo->add(getString("favorites_bar"), favorites_cat->getUUID()); + } + // + typedef std::vector folder_vec_t; folder_vec_t folders; // Sort the folders by their full name. @@ -320,4 +326,4 @@ void LLFloaterCreateLandmark::setItem(const uuid_set_t& items) } } } -} \ No newline at end of file +} diff --git a/indra/newview/llfloatereditenvironmentbase.cpp b/indra/newview/llfloatereditenvironmentbase.cpp index 1d28921878..2850951668 100644 --- a/indra/newview/llfloatereditenvironmentbase.cpp +++ b/indra/newview/llfloatereditenvironmentbase.cpp @@ -262,7 +262,7 @@ void LLFloaterEditEnvironmentBase::onSaveAsCommit(const LLSD& notification, cons { const LLUUID &marketplacelistings_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false); LLUUID parent_id = mInventoryItem->getParentUUID(); - if ((marketplacelistings_id == parent_id) || gInventory.isObjectDescendentOf(mInventoryItem->getUUID(), gInventory.getLibraryRootFolderID())) + if (marketplacelistings_id == parent_id || gInventory.isObjectDescendentOf(mInventoryItem->getUUID(), gInventory.getLibraryRootFolderID())) { parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_SETTINGS); } diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index 8c414ecde9..33bf76ee21 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -211,6 +211,20 @@ bool LLFloaterExperienceProfile::experiencePermission( LLHandlesetSSLVerifyPeer(false); // We want this data even if SSL fails httpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_TEXT_XML); std::string url = gSavedSettings.getString("GridStatusRSS"); diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp index 701b057383..5d0d77d87e 100644 --- a/indra/newview/llfloaterinspect.cpp +++ b/indra/newview/llfloaterinspect.cpp @@ -348,6 +348,7 @@ void LLFloaterInspect::refresh() LLResMgr& res_mgr = LLResMgr::instance(); LLSelectMgr& sel_mgr = LLSelectMgr::instance(); S32 fcount = 0; + S32 fcount_visible = 0; S32 tcount = 0; S32 vcount = 0; S32 objcount = 0; @@ -383,6 +384,7 @@ void LLFloaterInspect::refresh() LLSelectNode* obj = *iter; LLSD row; std::string owner_name, creator_name; + auto vobj{obj->getObject()}; if (obj->mCreationDate == 0) { // Don't have valid information from the server, so skip this one @@ -462,12 +464,12 @@ void LLFloaterInspect::refresh() mCreatorNameCacheConnection = LLAvatarNameCache::get(idCreator, boost::bind(&LLFloaterInspect::onGetCreatorNameCallback, this)); } - row["id"] = obj->getObject()->getID(); + row["id"] = vobj->getID(); row["columns"][0]["column"] = "object_name"; row["columns"][0]["type"] = "text"; // make sure we're either at the top of the link chain // or top of the editable chain, for attachments - if(!(obj->getObject()->isRoot() || obj->getObject()->isRootEdit())) + if(!(vobj->isRoot() || vobj->isRootEdit())) { row["columns"][0]["value"] = std::string(" ") + obj->mName; } @@ -495,17 +497,17 @@ void LLFloaterInspect::refresh() row["columns"][5]["value"] = llformat("%d", timestamp); // // PoundLife - Improved Object Inspect - res_mgr.getIntegerString(format_res_string, obj->getObject()->getNumFaces()); + res_mgr.getIntegerString(format_res_string, vobj->getNumFaces()); row["columns"][6]["column"] = "facecount"; row["columns"][6]["type"] = "text"; row["columns"][6]["value"] = format_res_string; - res_mgr.getIntegerString(format_res_string, obj->getObject()->getNumVertices()); + res_mgr.getIntegerString(format_res_string, vobj->getNumVertices()); row["columns"][7]["column"] = "vertexcount"; row["columns"][7]["type"] = "text"; row["columns"][7]["value"] = format_res_string; - res_mgr.getIntegerString(format_res_string, obj->getObject()->getNumIndices() / 3); + res_mgr.getIntegerString(format_res_string, vobj->getNumIndices() / 3); row["columns"][8]["column"] = "trianglecount"; row["columns"][8]["type"] = "text"; row["columns"][8]["value"] = format_res_string; @@ -513,7 +515,7 @@ void LLFloaterInspect::refresh() // Poundlife - Get VRAM U32 texture_memory = 0; U32 vram_memory = 0; - getObjectTextureMemory(obj->getObject(), texture_memory, vram_memory); + getObjectTextureMemory(vobj, texture_memory, vram_memory); res_mgr.getIntegerString(format_res_string, texture_memory / 1024); row["columns"][9]["column"] = "tramcount"; row["columns"][9]["type"] = "text"; @@ -526,15 +528,15 @@ void LLFloaterInspect::refresh() row["columns"][11]["column"] = "facecount_sort"; row["columns"][11]["type"] = "text"; - row["columns"][11]["value"] = LLSD::Integer(obj->getObject()->getNumFaces()); + row["columns"][11]["value"] = LLSD::Integer(vobj->getNumFaces()); row["columns"][12]["column"] = "vertexcount_sort"; row["columns"][12]["type"] = "text"; - row["columns"][12]["value"] = LLSD::Integer(obj->getObject()->getNumVertices()); + row["columns"][12]["value"] = LLSD::Integer(vobj->getNumVertices()); row["columns"][13]["column"] = "trianglecount_sort"; row["columns"][13]["type"] = "text"; - row["columns"][13]["value"] = LLSD::Integer(obj->getObject()->getNumIndices() / 3); + row["columns"][13]["value"] = LLSD::Integer(vobj->getNumIndices() / 3); row["columns"][14]["column"] = "tramcount_sort"; row["columns"][14]["type"] = "text"; @@ -546,9 +548,11 @@ void LLFloaterInspect::refresh() primcount = sel_mgr.getSelection()->getObjectCount(); objcount = sel_mgr.getSelection()->getRootObjectCount(); - fcount += obj->getObject()->getNumFaces(); - tcount += obj->getObject()->getNumIndices() / 3; - vcount += obj->getObject()->getNumVertices(); + fcount += vobj->getNumFaces(); + fcount_visible += vobj->getNumVisibleFaces(); + tcount += vobj->getNumIndices() / 3; + vcount += vobj->getNumVertices(); + // PoundLife - END mObjectList->addElement(row, ADD_TOP); } @@ -613,6 +617,8 @@ void LLFloaterInspect::refresh() args["NUM_OBJECTS"] = format_res_string; res_mgr.getIntegerString(format_res_string, primcount); args["NUM_PRIMS"] = format_res_string; + res_mgr.getIntegerString(format_res_string, fcount_visible); + args["NUM_VISIBLE_FACES"] = format_res_string; res_mgr.getIntegerString(format_res_string, fcount); args["NUM_FACES"] = format_res_string; res_mgr.getIntegerString(format_res_string, vcount); diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 78ab6ae055..edd3a57595 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -1142,7 +1142,7 @@ void LLFloaterModelPreview::onPhysicsUseLOD(LLUICtrl* ctrl, void* userdata) // FIRE-30963 Support pre-defined physics shapes (initially cube) // S32 which_lod = num_lods - which_mode; // sInstance->mModelPreview->setPhysicsFromLOD(which_lod); - if(which_mode >= num_lods) + if(which_mode > num_lods) { // which_mode is between the last LOD entry and file selection // so it is a preset diff --git a/indra/newview/llfloaterurlentry.cpp b/indra/newview/llfloaterurlentry.cpp index f2efef0c33..63bce3d2eb 100644 --- a/indra/newview/llfloaterurlentry.cpp +++ b/indra/newview/llfloaterurlentry.cpp @@ -122,8 +122,7 @@ void LLFloaterURLEntry::headerFetchComplete(S32 status, const std::string& mime_ } } - // Decrement the cursor - getWindow()->decBusyCount(); + getChildView("loading_label")->setVisible( false); closeFloater(); } @@ -302,3 +301,9 @@ bool LLFloaterURLEntry::callback_clear_url_list(const LLSD& notification, const } return false; } + +void LLFloaterURLEntry::onClose( bool app_quitting ) +{ + // Decrement the cursor + getWindow()->decBusyCount(); +} diff --git a/indra/newview/llfloaterurlentry.h b/indra/newview/llfloaterurlentry.h index 20f4604907..04a8eca069 100644 --- a/indra/newview/llfloaterurlentry.h +++ b/indra/newview/llfloaterurlentry.h @@ -42,6 +42,7 @@ public: // that panel via the handle. static LLHandle show(LLHandle panel_land_media_handle, const std::string media_url); /*virtual*/ BOOL postBuild(); + /*virtual*/ void onClose( bool app_quitting ); void headerFetchComplete(S32 status, const std::string& mime_type); bool addURLToCombobox(const std::string& media_url); diff --git a/indra/newview/llgiveinventory.cpp b/indra/newview/llgiveinventory.cpp index 6966be90ce..c1563ac89f 100644 --- a/indra/newview/llgiveinventory.cpp +++ b/indra/newview/llgiveinventory.cpp @@ -49,6 +49,7 @@ #include "llvoavatarself.h" // [RLVa:KB] - Checked: RLVa-1.2.2 #include "llavatarnamecache.h" +#include "llslurl.h" #include "rlvactions.h" #include "rlvcommon.h" #include "rlvui.h" @@ -201,7 +202,10 @@ bool LLGiveInventory::doGiveInventoryItem(const LLUUID& to_agent, if (item->getPermissions().allowCopyBy(gAgentID)) { // just give it away. - LLGiveInventory::commitGiveInventoryItem(to_agent, item, im_session_id); +// [RLVa:KB] - @share + res = LLGiveInventory::commitGiveInventoryItem(to_agent, item, im_session_id); +// [/RLVa:KB] +// LLGiveInventory::commitGiveInventoryItem(to_agent, item, im_session_id); } else { @@ -376,6 +380,14 @@ bool LLGiveInventory::handleCopyProtectedItem(const LLSD& notification, const LL switch(option) { case 0: // "Yes" +// [RLVa:KB] - @share + if ( (RlvActions::isRlvEnabled()) && (!RlvActions::canGiveInventory(notification["payload"]["agent_id"].asUUID())) ) + { + RlvUtil::notifyBlocked(RlvStringKeys::Blocked::Share, LLSD().with("RECIPIENT", LLSLURL("agent", notification["payload"]["agent_id"], "completename").getSLURLString())); + return false; + } +// [/RLVa:KB] + for (LLSD::array_iterator it = itmes.beginArray(); it != itmes.endArray(); it++) { item = gInventory.getItem((*it).asUUID()); @@ -409,11 +421,24 @@ bool LLGiveInventory::handleCopyProtectedItem(const LLSD& notification, const LL } // static -void LLGiveInventory::commitGiveInventoryItem(const LLUUID& to_agent, +//void LLGiveInventory::commitGiveInventoryItem(const LLUUID& to_agent, +// const LLInventoryItem* item, +// const LLUUID& im_session_id) +// [RLVa:KB] - @share +bool LLGiveInventory::commitGiveInventoryItem(const LLUUID& to_agent, const LLInventoryItem* item, const LLUUID& im_session_id) +// [/RLVa:KB] { - if (!item) return; +// if (!item) return; +// [RLVa:KB] - @share + if (!item) return false; + if ( (RlvActions::isRlvEnabled()) && (!RlvActions::canGiveInventory(to_agent)) ) + { + return false; + } +// [/RLVa:KB] + std::string name; std::string item_name = item->getName(); LLAgentUI::buildFullname(name); @@ -467,6 +492,7 @@ void LLGiveInventory::commitGiveInventoryItem(const LLUUID& to_agent, { LLRecentPeople::instance().add(to_agent); } + return true; // [/RLVa:KB] } @@ -482,6 +508,14 @@ bool LLGiveInventory::handleCopyProtectedCategory(const LLSD& notification, cons cat = gInventory.getCategory(notification["payload"]["folder_id"].asUUID()); if (cat) { +// [RLVa:KB] - @share + if ( (RlvActions::isRlvEnabled()) && (!RlvActions::canGiveInventory(notification["payload"]["agent_id"].asUUID())) ) + { + RlvUtil::notifyBlocked(RlvStringKeys::Blocked::Share, LLSD().with("RECIPIENT", LLSLURL("agent", notification["payload"]["agent_id"], "completename").getSLURLString())); + return false; + } +// [/RLVa:KB] + give_successful = LLGiveInventory::commitGiveInventoryCategory(notification["payload"]["agent_id"].asUUID(), cat); LLViewerInventoryCategory::cat_array_t cats; @@ -529,6 +563,13 @@ bool LLGiveInventory::commitGiveInventoryCategory(const LLUUID& to_agent, { return false; } +// [RLVa:KB] - @share + if ( (RlvActions::isRlvEnabled()) && (!RlvActions::canGiveInventory(to_agent)) ) + { + return false; + } +// [/RLVa:KB] + LL_INFOS() << "LLGiveInventory::commitGiveInventoryCategory() - " << cat->getUUID() << LL_ENDL; diff --git a/indra/newview/llgiveinventory.h b/indra/newview/llgiveinventory.h index 20e6df76e5..86919f9010 100644 --- a/indra/newview/llgiveinventory.h +++ b/indra/newview/llgiveinventory.h @@ -82,9 +82,14 @@ private: const std::string& item_name = std::string(), bool is_folder = false); - static void commitGiveInventoryItem(const LLUUID& to_agent, +// [RLVa:KB] - @share + static bool commitGiveInventoryItem(const LLUUID& to_agent, const LLInventoryItem* item, const LLUUID &im_session_id = LLUUID::null); +// [/RLVa:KB] +// static void commitGiveInventoryItem(const LLUUID& to_agent, +// const LLInventoryItem* item, +// const LLUUID &im_session_id = LLUUID::null); // give inventory category functionality static bool handleCopyProtectedCategory(const LLSD& notification, const LLSD& response); diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index 4d8e4b8866..f65485d161 100644 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -78,13 +78,11 @@ const F32 PARCEL_POST_HEIGHT = 0.666f; // Returns true if you got at least one object void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask) { -// [RLVa:KB] - Checked: 2010-11-29 (RLVa-1.3.0c) | Modified: RLVa-1.3.0c +// [RLVa:KB] - @edit* and @interact // Block rectangle selection if: - // - prevented from editing and no exceptions are set (see below for the case where exceptions are set) + // - prevented from editing anything at all // - prevented from interacting at all - if ( (rlv_handler_t::isEnabled()) && - ( ((gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) && (!gRlvHandler.hasException(RLV_BHVR_EDIT))) || - (gRlvHandler.hasBehaviour(RLV_BHVR_INTERACT)) ) ) + if (RlvActions::isRlvEnabled() && (RlvActions::canEdit(ERlvCheckType::Nothing) || RlvActions::hasBehaviour(RLV_BHVR_INTERACT)) ) { return; } diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp index 9c27269beb..d180b20267 100644 --- a/indra/newview/llhudnametag.cpp +++ b/indra/newview/llhudnametag.cpp @@ -106,10 +106,8 @@ LLHUDNameTag::LLHUDNameTag(const U8 type) LLPointer ptr(this); sTextObjects.insert(ptr); - // Performance improvement - mRoundedRectImg = LLUI::getUIImage("Rounded_Rect"); - mRoundedRectTopImg = LLUI::getUIImage("Rounded_Rect_Top"); - // + mRoundedRectImgp = LLUI::getUIImage("Rounded_Rect"); + mRoundedRectTopImgp = LLUI::getUIImage("Rounded_Rect_Top"); } LLHUDNameTag::~LLHUDNameTag() @@ -279,10 +277,6 @@ void LLHUDNameTag::renderText(BOOL for_select) mOffsetY = lltrunc(mHeight * ((mVertAlignment == ALIGN_VERT_CENTER) ? 0.5f : 1.f)); - // *TODO: cache this image - // Performance improvement - //LLUIImagePtr imagep = LLUI::getUIImage("Rounded_Rect"); - // *TODO: make this a per-text setting //LLColor4 bg_color = LLUIColorTable::instance().getColor("NameTagBackground"); //bg_color.setAlpha(gSavedSettings.getF32("ChatBubbleOpacity") * alpha_factor); @@ -319,14 +313,9 @@ void LLHUDNameTag::renderText(BOOL for_select) LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); LLRect screen_rect; screen_rect.setCenterAndSize(0, static_cast(lltrunc(-mHeight / 2 + mOffsetY)), static_cast(lltrunc(mWidth)), static_cast(lltrunc(mHeight))); - // Performance improvement - //imagep->draw3D(render_position, x_pixel_vec, y_pixel_vec, screen_rect, bg_color); - mRoundedRectImg->draw3D(render_position, x_pixel_vec, y_pixel_vec, screen_rect, bg_color); - // + mRoundedRectImgp->draw3D(render_position, x_pixel_vec, y_pixel_vec, screen_rect, bg_color); if (mLabelSegments.size()) { - // Performance improvement - //LLUIImagePtr rect_top_image = LLUI::getUIImage("Rounded_Rect_Top"); LLRect label_top_rect = screen_rect; const S32 label_height = ll_round((mFontp->getLineHeight() * (F32)mLabelSegments.size() + (VERTICAL_PADDING / 3.f))); label_top_rect.mBottom = label_top_rect.mTop - label_height; @@ -336,10 +325,7 @@ void LLHUDNameTag::renderText(BOOL for_select) label_top_color.mV[VALPHA] = color_alpha; // - // Performance improvement - //rect_top_image->draw3D(render_position, x_pixel_vec, y_pixel_vec, label_top_rect, label_top_color); - mRoundedRectTopImg->draw3D(render_position, x_pixel_vec, y_pixel_vec, label_top_rect, label_top_color); - // + mRoundedRectTopImgp->draw3D(render_position, x_pixel_vec, y_pixel_vec, label_top_rect, label_top_color); } F32 y_offset = (F32)mOffsetY; diff --git a/indra/newview/llhudnametag.h b/indra/newview/llhudnametag.h index f41a06d280..7577dd5de6 100644 --- a/indra/newview/llhudnametag.h +++ b/indra/newview/llhudnametag.h @@ -40,10 +40,8 @@ #include #include -#include "lluiimage.h" - -class LLDrawable; class LLHUDNameTag; +class LLUIImage; struct llhudnametag_further_away { @@ -173,6 +171,8 @@ private: EVertAlignment mVertAlignment; S32 mLOD; BOOL mHidden; + LLPointer mRoundedRectImgp; + LLPointer mRoundedRectTopImgp; static BOOL sDisplayText ; static std::set > sTextObjects; @@ -180,11 +180,6 @@ private: // static std::vector > sVisibleHUDTextObjects; typedef std::set >::iterator TextObjectIterator; typedef std::vector >::iterator VisibleTextObjectIterator; - - // Performance improvement - LLUIImagePtr mRoundedRectImg; - LLUIImagePtr mRoundedRectTopImg; - // }; #endif diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp index f833e888ea..ef1897ae30 100644 --- a/indra/newview/llhudtext.cpp +++ b/indra/newview/llhudtext.cpp @@ -148,10 +148,6 @@ void LLHUDText::renderText() mOffsetY = lltrunc(mHeight * ((mVertAlignment == ALIGN_VERT_CENTER) ? 0.5f : 1.f)); - // *TODO: cache this image - // Performance improvement - //LLUIImagePtr imagep = LLUI::getUIImage("Rounded_Square"); - // *TODO: make this a per-text setting // Performance improvement //LLColor4 bg_color = LLUIColorTable::instance().getColor("ObjectBubbleColor"); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 90dcb751eb..3b571ac75a 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -4367,7 +4367,7 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items const LLUUID &lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); const LLUUID &favorites = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE); const LLUUID &marketplace_listings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false); - const LLUUID &outfits_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false); // Fix "outfits" context menu + const LLUUID &outfits_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false); // FIRE-11628: Option to delete broken links from AO folder if (mUUID == AOEngine::instance().getAOFolder()) @@ -4375,7 +4375,9 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items items.push_back(std::string("Cleanup broken Links")); } // + // Fix "outfits" context menu + //if (outfits_id == mUUID) if (model->isObjectDescendentOf(mUUID, outfits_id) && getCategory() && (getCategory()->getPreferredType() == LLFolderType::FT_NONE || getCategory()->getPreferredType() == LLFolderType::FT_MY_OUTFITS)) @@ -4383,6 +4385,7 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items items.push_back(std::string("New Outfit")); } // + if (lost_and_found_id == mUUID) { // This is the lost+found folder. @@ -4484,7 +4487,8 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items // Not sure what the right thing is to do here. if (!isCOFFolder() && cat && (cat->getPreferredType() != LLFolderType::FT_OUTFIT)) { - if (!isInboxFolder()) // don't allow creation in inbox + if (!isInboxFolder() // don't allow creation in inbox + && outfits_id != mUUID) { // Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694. if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat)) @@ -6565,6 +6569,19 @@ BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop, BOOL rv = FALSE; if(item) { +// [RLVa:KB] - @share + if ( (RlvActions::isRlvEnabled()) && (!RlvActions::canGiveInventory(item->getCreatorUUID())) ) + { + if (drop) + { + RlvUtil::notifyBlocked(RlvStringKeys::Blocked::Share, LLSD().with("RECIPIENT", LLSLURL("agent", item->getCreatorUUID(), "completename").getSLURLString())); + } + // We should return false but our caller uses the return value as both 'will accept' *and* 'was handled' so + // returning false will result in the dropped item being moved when it is blocked. + return true; + } +// [/RLVa:KB] + // check the type switch(cargo_type) { diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index c67c7e49f1..d2715a008c 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -893,11 +893,13 @@ void show_item_original(const LLUUID& item_uuid) LLSidepanelInventory *sidepanel_inventory = LLFloaterSidePanelContainer::getPanel("inventory"); if (sidepanel_inventory) { - LLPanelMainInventory* main_inventory = sidepanel_inventory->getMainInventoryPanel(); - if (main_inventory) - { - main_inventory->resetFilters(); - } + // FIRE-31037: "Recent" inventory filter gets reset when using "Show Original" + //LLPanelMainInventory* main_inventory = sidepanel_inventory->getMainInventoryPanel(); + //if (main_inventory) + //{ + // main_inventory->resetFilters(); + //} + // reset_inventory_filter(); if (!LLFloaterReg::getTypedInstance("inventory")->isInVisibleChain()) diff --git a/indra/newview/lllandmarklist.cpp b/indra/newview/lllandmarklist.cpp index a8c2c3ccfc..31e76267e6 100644 --- a/indra/newview/lllandmarklist.cpp +++ b/indra/newview/lllandmarklist.cpp @@ -74,6 +74,16 @@ LLLandmark* LLLandmarkList::getAsset(const LLUUID& asset_uuid, loaded_callback_t { return NULL; } + + if (cb) + { + // Multiple different sources can request same landmark, + // mLoadedCallbackMap is a multimap that allows multiple pairs with same key + // Todo: this might need to be improved to not hold identical callbacks multiple times + loaded_callback_map_t::value_type vt(asset_uuid, cb); + mLoadedCallbackMap.insert(vt); + } + if ( mWaitList.find(asset_uuid) != mWaitList.end() ) { // Landmark is sheduled for download, but not requested yet @@ -89,12 +99,6 @@ LLLandmark* LLLandmarkList::getAsset(const LLUUID& asset_uuid, loaded_callback_t return NULL; } } - - if (cb) - { - loaded_callback_map_t::value_type vt(asset_uuid, cb); - mLoadedCallbackMap.insert(vt); - } if (mRequestedList.size() > MAX_SIMULTANEOUS_REQUESTS) { @@ -131,37 +135,49 @@ void LLLandmarkList::processGetAssetReply( LLFileSystem file(uuid, type); S32 file_length = file.getSize(); - std::vector buffer(file_length + 1); - file.read( (U8*)&buffer[0], file_length); - buffer[ file_length ] = 0; + if (file_length > 0) + { + std::vector buffer(file_length + 1); + file.read((U8*)&buffer[0], file_length); + buffer[file_length] = 0; - LLLandmark* landmark = LLLandmark::constructFromString(&buffer[0]); - if (landmark) - { - gLandmarkList.mList[ uuid ] = landmark; - gLandmarkList.mRequestedList.erase(uuid); - - LLVector3d pos; - if(!landmark->getGlobalPos(pos)) - { - LLUUID region_id; - if(landmark->getRegionID(region_id)) - { - LLLandmark::requestRegionHandle( - gMessageSystem, - gAgent.getRegionHost(), - region_id, - boost::bind(&LLLandmarkList::onRegionHandle, &gLandmarkList, uuid)); - } + LLLandmark* landmark = LLLandmark::constructFromString(&buffer[0], buffer.size()); + if (landmark) + { + gLandmarkList.mList[uuid] = landmark; + gLandmarkList.mRequestedList.erase(uuid); - // the callback will be called when we get the region handle. - } - else - { - gLandmarkList.makeCallbacks(uuid); - } - } - else gLandmarkList.mLoadedCallbackMap.erase(uuid); // Clean up callback map + LLVector3d pos; + if (!landmark->getGlobalPos(pos)) + { + LLUUID region_id; + if (landmark->getRegionID(region_id)) + { + LLLandmark::requestRegionHandle( + gMessageSystem, + gAgent.getRegionHost(), + region_id, + boost::bind(&LLLandmarkList::onRegionHandle, &gLandmarkList, uuid)); + } + + // the callback will be called when we get the region handle. + } + else + { + gLandmarkList.makeCallbacks(uuid); + } + } + else + { + // failed to parse, shouldn't happen + gLandmarkList.eraseCallbacks(uuid); + } + } + else + { + // got a good status, but no file, shouldn't happen + gLandmarkList.eraseCallbacks(uuid); + } } else { @@ -179,8 +195,7 @@ void LLLandmarkList::processGetAssetReply( gLandmarkList.mBadList.insert(uuid); gLandmarkList.mRequestedList.erase(uuid); //mBadList effectively blocks any load, so no point keeping id in requests - // todo: this should clean mLoadedCallbackMap! - gLandmarkList.mLoadedCallbackMap.erase(uuid); // Clean up callback map + gLandmarkList.eraseCallbacks(uuid); } // getAssetData can fire callback immediately, causing @@ -224,34 +239,39 @@ BOOL LLLandmarkList::assetExists(const LLUUID& asset_uuid) void LLLandmarkList::onRegionHandle(const LLUUID& landmark_id) { LLLandmark* landmark = getAsset(landmark_id); - - if (!landmark) - { - LL_WARNS() << "Got region handle but the landmark not found." << LL_ENDL; - mLoadedCallbackMap.erase(landmark_id); // Clean up callback map - return; - } + if (!landmark) + { + LL_WARNS() << "Got region handle but the landmark " << landmark_id << " not found." << LL_ENDL; + eraseCallbacks(landmark_id); + return; + } // Calculate landmark global position. // This should succeed since the region handle is available. LLVector3d pos; if (!landmark->getGlobalPos(pos)) { - LL_WARNS() << "Got region handle but the landmark global position is still unknown." << LL_ENDL; - mLoadedCallbackMap.erase(landmark_id); // Clean up callback map - return; + LL_WARNS() << "Got region handle but the landmark " << landmark_id << " global position is still unknown." << LL_ENDL; + eraseCallbacks(landmark_id); + return; } + // Call this even if no landmark exists to clean mLoadedCallbackMap makeCallbacks(landmark_id); } +void LLLandmarkList::eraseCallbacks(const LLUUID& landmark_id) +{ + mLoadedCallbackMap.erase(landmark_id); +} + void LLLandmarkList::makeCallbacks(const LLUUID& landmark_id) { LLLandmark* landmark = getAsset(landmark_id); if (!landmark) { - LL_WARNS() << "Landmark to make callbacks for not found." << LL_ENDL; + LL_WARNS() << "Landmark " << landmark_id << " to make callbacks for not found." << LL_ENDL; } // make all the callbacks here. diff --git a/indra/newview/lllandmarklist.h b/indra/newview/lllandmarklist.h index 0e4859dbc9..f5fa958204 100644 --- a/indra/newview/lllandmarklist.h +++ b/indra/newview/lllandmarklist.h @@ -64,6 +64,7 @@ public: protected: void onRegionHandle(const LLUUID& landmark_id); + void eraseCallbacks(const LLUUID& landmark_id); void makeCallbacks(const LLUUID& landmark_id); typedef std::map landmark_list_t; diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h index 3f33aad867..b0baeb0ca6 100644 --- a/indra/newview/llmediactrl.h +++ b/indra/newview/llmediactrl.h @@ -31,6 +31,7 @@ #include "lluictrl.h" #include "llframetimer.h" +#include "llnotificationptr.h" class LLViewBorder; class LLUICtrlFactory; @@ -145,7 +146,7 @@ public: void setTextureSize(S32 width, S32 height); - void showNotification(boost::shared_ptr notify); + void showNotification(LLNotificationPtr notify); void hideNotification(); void setTrustedContent(bool trusted); diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 0f1dc1b1da..0c5cc892ae 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -909,7 +909,7 @@ void LLMeshRepoThread::run() LL_WARNS(LOG_MESH) << "Convex decomposition unable to be loaded. Expect severe problems." << LL_ENDL; } - while (!LLApp::isQuitting()) + while (!LLApp::isExiting()) { // *TODO: Revise sleep/wake strategy and try to move away // from polling operations in this thread. We can sleep @@ -926,7 +926,7 @@ void LLMeshRepoThread::run() mSignal->wait(); - if (LLApp::isQuitting()) + if (LLApp::isExiting()) { break; } @@ -1196,7 +1196,7 @@ void LLMeshRepoThread::loadMeshPhysicsShape(const LLUUID& mesh_id) void LLMeshRepoThread::lockAndLoadMeshLOD(const LLVolumeParams& mesh_params, S32 lod) { - if (!LLAppViewer::isQuitting()) + if (!LLAppViewer::isExiting()) { loadMeshLOD(mesh_params, lod); } @@ -2776,7 +2776,7 @@ void LLMeshUploadThread::doWholeModelUpload() LL_DEBUGS(LOG_MESH) << "POST request issued." << LL_ENDL; mHttpRequest->update(0); - while (! LLApp::isQuitting() && ! finished() && ! isDiscarded()) + while (! LLApp::isExiting() && ! finished() && ! isDiscarded()) { ms_sleep(sleep_time); sleep_time = llmin(250U, sleep_time + sleep_time); @@ -2825,7 +2825,7 @@ void LLMeshUploadThread::requestWholeModelFee() U32 sleep_time(10); mHttpRequest->update(0); - while (! LLApp::isQuitting() && ! finished() && ! isDiscarded()) + while (! LLApp::isExiting() && ! finished() && ! isDiscarded()) { ms_sleep(sleep_time); sleep_time = llmin(250U, sleep_time + sleep_time); @@ -3274,7 +3274,7 @@ common_exit: LLMeshHeaderHandler::~LLMeshHeaderHandler() { - if (!LLApp::isQuitting()) + if (!LLApp::isExiting()) { if (! mProcessed) { @@ -3418,7 +3418,7 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * /* body */, S32 /* b LLMeshLODHandler::~LLMeshLODHandler() { - if (! LLApp::isQuitting()) + if (! LLApp::isExiting()) { if (! mProcessed) { @@ -3688,7 +3688,7 @@ void LLMeshRepository::shutdown() mUploads[i]->discard() ; //discard the uploading requests. } - mThread->mSignal->signal(); + mThread->mSignal->broadcast(); while (!mThread->isStopped()) { @@ -4930,7 +4930,8 @@ void LLPhysicsDecomp::shutdown() if (mSignal) { mQuitting = true; - mSignal->signal(); + // There is only one wait(), but just in case 'broadcast' + mSignal->broadcast(); while (!isStopped()) { diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp index 51b79c3cc2..6409b29e00 100644 --- a/indra/newview/llmodelpreview.cpp +++ b/indra/newview/llmodelpreview.cpp @@ -3002,14 +3002,33 @@ void LLModelPreview::lookupLODModelFiles(S32 lod) S32 next_lod = (lod - 1 >= LLModel::LOD_IMPOSTOR) ? lod - 1 : LLModel::LOD_PHYSICS; std::string lod_filename = mLODFile[LLModel::LOD_HIGH]; - std::string ext = ".dae"; - std::string::size_type i = lod_filename.rfind(ext); - if (i != std::string::npos) + // BUG-230890 fix case-sensitive filename handling + // std::string ext = ".dae"; + // std::string::size_type i = lod_filename.rfind(ext); + // if (i != std::string::npos) + // { + // lod_filename.replace(i, lod_filename.size() - ext.size(), getLodSuffix(next_lod) + ext); + // } + // Note: we cannot use gDirUtilp here because the getExtension forces a tolower which would then break uppercase extensions on Linux/Mac + std::size_t offset = lod_filename.find_last_of('.'); + std::string ext = (offset == std::string::npos || offset == 0) ? "" : lod_filename.substr(offset+1); + lod_filename = gDirUtilp->getDirName(lod_filename) + gDirUtilp->getDirDelimiter() + gDirUtilp->getBaseFileName(lod_filename, true) + getLodSuffix(next_lod) + "." + ext; + std::ostringstream out; + out << "Looking for file: " << lod_filename << " for LOD " << next_lod; + LL_DEBUGS("MeshUpload") << out.str() << LL_ENDL; + if(mImporterDebug) { - lod_filename.replace(i, lod_filename.size() - ext.size(), getLodSuffix(next_lod) + ext); + LLFloaterModelPreview::addStringToLog(out, true); } + out.str(""); + // if (gDirUtilp->fileExists(lod_filename)) { + // extra logging is helpful here, so add to log tab + out << "Auto Loading LOD" << next_lod << " from " << lod_filename; + LL_INFOS() << out.str() << LL_ENDL; + LLFloaterModelPreview::addStringToLog(out, true); + // LLFloaterModelPreview* fmp = LLFloaterModelPreview::sInstance; if (fmp) { diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index 4550c71e6d..fa5187dce6 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -67,6 +67,7 @@ LLOutfitGallery::LLOutfitGallery(const LLOutfitGallery::Params& p) mOutfitsObserver(NULL), mScrollPanel(NULL), mGalleryPanel(NULL), + mLastRowPanel(NULL), mGalleryCreated(false), mRowCount(0), mItemsAddedCount(0), @@ -169,9 +170,7 @@ bool compareGalleryItem(LLOutfitGalleryItem* item1, LLOutfitGalleryItem* item2) std::string name1 = item1->getItemName(); std::string name2 = item2->getItemName(); - LLStringUtil::toUpper(name1); - LLStringUtil::toUpper(name2); - return name1 < name2; + return (LLStringUtil::compareDict(name1, name2) < 0); } else { @@ -244,7 +243,15 @@ void LLOutfitGallery::removeLastRow() mGalleryPanel->removeChild(mLastRowPanel); mUnusedRowPanels.push_back(mLastRowPanel); mRowPanels.pop_back(); - mLastRowPanel = mRowPanels.back(); + if (mRowPanels.size() > 0) + { + // Just removed last row + mLastRowPanel = mRowPanels.back(); + } + else + { + mLastRowPanel = NULL; + } } LLPanel* LLOutfitGallery::addToRow(LLPanel* row_stack, LLOutfitGalleryItem* item, int pos, int hgap) @@ -1114,7 +1121,7 @@ void LLOutfitGallery::refreshOutfit(const LLUUID& category_id) } } - if (mGalleryCreated && !LLApp::isQuitting()) + if (mGalleryCreated && !LLApp::isExiting()) { reArrangeRows(); } diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index c0662cddda..bb43a61c45 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -67,10 +67,7 @@ bool LLOutfitTabNameComparator::compare(const LLAccordionCtrlTab* tab1, const LL std::string name1 = tab1->getTitle(); std::string name2 = tab2->getTitle(); - LLStringUtil::toUpper(name1); - LLStringUtil::toUpper(name2); - - return name1 < name2; + return (LLStringUtil::compareDict(name1, name2) < 0); } struct outfit_accordion_tab_params : public LLInitParam::Block diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index c3a20f45f2..dca3c9072b 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -70,6 +70,8 @@ static void expand_all_folders(LLFolderView* root_folder); static bool has_expanded_folders(LLFolderView* root_folder); static bool has_collapsed_folders(LLFolderView* root_folder); static void toggle_restore_menu(LLMenuGL* menu, BOOL visible, BOOL enabled); +// FIRE-31051: Hide empty folders in Places floater when filtering +static bool category_has_descendents(LLPlacesInventoryPanel* inventory_list); /** * Functor counting expanded and collapsed folders in folder view tree to know @@ -197,6 +199,9 @@ void LLLandmarksPanel::onSearchEdit(const std::string& string) if (sFilterSubString != string) sFilterSubString = string; + + // FIRE-31051: Hide empty folders in Places floater when filtering + updateShowFolderState(); } // virtual @@ -208,6 +213,13 @@ void LLLandmarksPanel::onShowOnMap() return; } + // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater + // Disable the "Map" button because loading landmark can take some time. + // During this time the button is useless. It will be enabled on callback finish + // or upon switching to other item. + mShowOnMapBtn->setEnabled(FALSE); + // + doActionOnCurSelectedLandmark(boost::bind(&LLLandmarksPanel::doShowOnMap, this, _1)); } @@ -293,6 +305,16 @@ void LLLandmarksPanel::updateVerbs() { sRemoveBtn->setEnabled(isActionEnabled("delete") && (isFolderSelected() || isLandmarkSelected())); } + + // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater + if (!isTabVisible()) + return; + + bool landmark_selected = isLandmarkSelected(); + mTeleportBtn->setEnabled(landmark_selected && isActionEnabled("teleport")); + mShowProfile->setEnabled(landmark_selected && isActionEnabled("more_info")); + mShowOnMapBtn->setEnabled(landmark_selected && isActionEnabled("show_on_map")); + // } void LLLandmarksPanel::setItemSelected(const LLUUID& obj_id, BOOL take_keyboard_focus) @@ -308,6 +330,27 @@ void LLLandmarksPanel::setItemSelected(const LLUUID& obj_id, BOOL take_keyboard_ root->scrollToShowSelection(); } +// FIRE-31051: Hide empty folders in Places floater when filtering +void LLLandmarksPanel::updateShowFolderState() +{ + if (!mLandmarksInventoryPanel) + { + return; + } + + bool show_all_folders = mLandmarksInventoryPanel->getFilterSubString().empty(); + if (show_all_folders) + { + show_all_folders = category_has_descendents(mLandmarksInventoryPanel); + } + + mLandmarksInventoryPanel->setShowFolderState(show_all_folders ? + LLInventoryFilter::SHOW_ALL_FOLDERS : + LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS + ); +} +// + ////////////////////////////////////////////////////////////////////////// // PROTECTED METHODS ////////////////////////////////////////////////////////////////////////// @@ -1071,6 +1114,7 @@ void LLLandmarksPanel::doShowOnMap(LLLandmark* landmark) LLFloaterReg::showInstance("world_map", "center"); } + mShowOnMapBtn->setEnabled(TRUE); // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater mGearLandmarkMenu->setItemEnabled("show_on_map", TRUE); } @@ -1255,6 +1299,19 @@ void toggle_restore_menu(LLMenuGL *menu, BOOL visible, BOOL enabled) } } +// FIRE-31051: Hide empty folders in Places floater when filtering +static bool category_has_descendents(LLPlacesInventoryPanel* inventory_list) +{ + LLViewerInventoryCategory* category = gInventory.getCategory(inventory_list->getRootFolderID()); + if (category) + { + return category->getDescendentCount() > 0; + } + + return false; +} +// + LLFavoritesPanel::LLFavoritesPanel() : LLLandmarksPanel(false) { diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h index d7408269b5..2f99e6c47b 100644 --- a/indra/newview/llpanellandmarks.h +++ b/indra/newview/llpanellandmarks.h @@ -87,6 +87,9 @@ public: void resetSelection(); + // FIRE-31051: Hide empty folders in Places floater when filtering + void updateShowFolderState(); + protected: /** * @return true - if current selected panel is not null and selected item is a landmark diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 54c137d5a6..9c383a6f4b 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -256,7 +256,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, LLLineEditor* password_edit(getChild("password_edit")); password_edit->setKeystrokeCallback(onPassKey, this); // STEAM-14: When user presses Enter with this field in focus, initiate login - password_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnect, this)); + password_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnect, false)); // change z sort of clickable text to be behind buttons sendChildToBack(getChildView("forgot_password_text")); @@ -267,7 +267,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, { LLComboBox* favorites_combo = getChild("start_location_combo"); updateLocationSelectorsVisibility(); // separate so that it can be called from preferences - favorites_combo->setReturnCallback(boost::bind(&LLPanelLogin::onClickConnect, this)); + favorites_combo->setReturnCallback(boost::bind(&LLPanelLogin::onClickConnect, false)); favorites_combo->setFocusLostCallback(boost::bind(&LLPanelLogin::onLocationSLURL, this)); LLComboBox* server_choice_combo = getChild("server_combo"); @@ -460,6 +460,9 @@ void LLPanelLogin::addFavoritesToStartLocation() if (combo->getValue().asString().empty()) { combo->selectFirstItem(); + // Value 'home' or 'last' should have been taken from NextLoginLocation + // but NextLoginLocation was not set, so init it from combo explicitly + onLocationSLURL(); } } @@ -1006,12 +1009,15 @@ void LLPanelLogin::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent ev // Protected methods //--------------------------------------------------------------------------- // static -void LLPanelLogin::onClickConnect(void *) +void LLPanelLogin::onClickConnect(bool commit_fields) { if (sInstance && sInstance->mCallback) { - // JC - Make sure the fields all get committed. - sInstance->setFocus(FALSE); + if (commit_fields) + { + // JC - Make sure the fields all get committed. + sInstance->setFocus(FALSE); + } LLComboBox* combo = sInstance->getChild("server_combo"); LLSD combo_val = combo->getSelectedValue(); @@ -1134,7 +1140,7 @@ void LLPanelLogin::onUserListCommit(void*) } else { - onClickConnect(NULL); + onClickConnect(); } } } @@ -1366,6 +1372,7 @@ void LLPanelLogin::onSelectServer() { // the grid specified by the location is not this one, so clear the combo location_combo->setCurrentByIndex(0); // last location on the new grid + onLocationSLURL(); } } break; diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h index 9e2a69317e..f832507b09 100644 --- a/indra/newview/llpanellogin.h +++ b/indra/newview/llpanellogin.h @@ -101,7 +101,7 @@ private: static void setFields(LLPointer credential); - static void onClickConnect(void*); + static void onClickConnect(bool commit_fields = true); static void onClickNewAccount(void*); static void onClickVersion(void*); static void onClickForgotPassword(void*); diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index de8688fc5d..d7b07dc5f8 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -307,6 +307,11 @@ BOOL LLPanelPlaces::postBuild() mOverflowBtn = getChild("overflow_btn"); mOverflowBtn->setMouseDownCallback(boost::bind(&LLPanelPlaces::onOverflowButtonClicked, this)); + // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater + mPlaceInfoBtn = getChild("profile_btn"); + mPlaceInfoBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onProfileButtonClicked, this)); + // + mGearMenuButton = getChild("options_gear_btn"); mGearMenuButton->setMouseDownCallback(boost::bind(&LLPanelPlaces::onGearMenuClick, this)); @@ -355,7 +360,7 @@ BOOL LLPanelPlaces::postBuild() } mButtonsContainer = getChild("button_layout_panel"); - mButtonsContainer->setVisible(FALSE); + //mButtonsContainer->setVisible(FALSE); // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater mFilterContainer = getChild("top_menu_panel"); mFilterEditor = getChild("Filter"); @@ -963,6 +968,16 @@ void LLPanelPlaces::onOverflowButtonClicked() mOverflowBtn->setMenu(menu, LLMenuButton::MP_TOP_RIGHT); } +// FIRE-31033: Keep Teleport/Map/Profile buttons on places floater +void LLPanelPlaces::onProfileButtonClicked() +{ + if (!mActivePanel) + return; + + mActivePanel->onShowProfile(); +} +// + bool LLPanelPlaces::onOverflowMenuItemEnable(const LLSD& param) { std::string value = param.asString(); @@ -1245,6 +1260,9 @@ void LLPanelPlaces::createTabs() LLFavoritesPanel* favorites_panel = new LLFavoritesPanel(); if (favorites_panel) { + // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater + favorites_panel->setPanelPlacesButtons(this); + mTabContainer->addTabPanel( LLTabContainer::TabPanelParams(). panel(favorites_panel). @@ -1255,6 +1273,9 @@ void LLPanelPlaces::createTabs() LLLandmarksPanel* landmarks_panel = new LLLandmarksPanel(); if (landmarks_panel) { + // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater + landmarks_panel->setPanelPlacesButtons(this); + mTabContainer->addTabPanel( LLTabContainer::TabPanelParams(). panel(landmarks_panel). @@ -1265,6 +1286,9 @@ void LLPanelPlaces::createTabs() LLTeleportHistoryPanel* teleport_history_panel = new LLTeleportHistoryPanel(); if (teleport_history_panel) { + // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater + teleport_history_panel->setPanelPlacesButtons(this); + mTabContainer->addTabPanel( LLTabContainer::TabPanelParams(). panel(teleport_history_panel). @@ -1369,12 +1393,17 @@ void LLPanelPlaces::updateVerbs() mSaveBtn->setVisible(isLandmarkEditModeOn); mCancelBtn->setVisible(isLandmarkEditModeOn); mCloseBtn->setVisible(is_create_landmark_visible && !isLandmarkEditModeOn); + // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater + mPlaceInfoBtn->setVisible(!is_place_info_visible && !is_create_landmark_visible && !isLandmarkEditModeOn && !is_pick_panel_visible); bool show_options_btn = is_place_info_visible && !is_create_landmark_visible && !isLandmarkEditModeOn; mOverflowBtn->setVisible(show_options_btn); getChild("lp_options")->setVisible(show_options_btn); getChild("lp2")->setVisible(!show_options_btn); + // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater + mPlaceInfoBtn->setEnabled(!is_create_landmark_visible && !isLandmarkEditModeOn && have_3d_pos); + if (is_place_info_visible) { mShowOnMapBtn->setEnabled(have_3d_pos); diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h index 24b7605fd6..81f1c6d70e 100644 --- a/indra/newview/llpanelplaces.h +++ b/indra/newview/llpanelplaces.h @@ -104,6 +104,7 @@ private: bool onOverflowMenuItemEnable(const LLSD& param); void onCreateLandmarkButtonClicked(const LLUUID& folder_id); void onBackButtonClicked(); + void onProfileButtonClicked(); // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater void onGearMenuClick(); void onSortingMenuClick(); void onAddMenuClick(); @@ -140,6 +141,7 @@ private: LLButton* mCancelBtn; LLButton* mCloseBtn; LLMenuButton* mOverflowBtn; + LLButton* mPlaceInfoBtn; // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater // Top menu LLMenuButton* mGearMenuButton; diff --git a/indra/newview/llpanelplacestab.cpp b/indra/newview/llpanelplacestab.cpp index 1594cac817..139949a9c8 100644 --- a/indra/newview/llpanelplacestab.cpp +++ b/indra/newview/llpanelplacestab.cpp @@ -48,6 +48,15 @@ bool LLPanelPlacesTab::isTabVisible() return true; } +// FIRE-31033: Keep Teleport/Map/Profile buttons on places floater +void LLPanelPlacesTab::setPanelPlacesButtons(LLPanelPlaces* panel) +{ + mTeleportBtn = panel->getChild("teleport_btn"); + mShowOnMapBtn = panel->getChild("map_btn"); + mShowProfile = panel->getChild("profile_btn"); +} +// + void LLPanelPlacesTab::onRegionResponse(const LLVector3d& landmark_global_pos, U64 region_handle, const std::string& url, diff --git a/indra/newview/llpanelplacestab.h b/indra/newview/llpanelplacestab.h index aab1c130c1..9376d1a6df 100644 --- a/indra/newview/llpanelplacestab.h +++ b/indra/newview/llpanelplacestab.h @@ -58,6 +58,7 @@ public: bool isTabVisible(); // Check if parent TabContainer is visible. + void setPanelPlacesButtons(LLPanelPlaces* panel); // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater void onRegionResponse(const LLVector3d& landmark_global_pos, U64 region_handle, const std::string& url, @@ -70,6 +71,12 @@ public: void setRemoveBtn(LLButton* trash_btn) { sRemoveBtn = trash_btn; } protected: + // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater + LLButton* mTeleportBtn; + LLButton* mShowOnMapBtn; + LLButton* mShowProfile; + // + // Search string for filtering landmarks and teleport history locations static std::string sFilterSubString; static LLButton* sRemoveBtn; diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 7b0cbe45e0..a5dbb5a212 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -661,6 +661,22 @@ void LLTeleportHistoryPanel::updateVerbs() { sRemoveBtn->setEnabled(true); } + + // FIRE-31033: Keep Teleport/Map/Profile buttons on places floater + if (!mLastSelectedFlatlList) + { + mTeleportBtn->setEnabled(false); + mShowProfile->setEnabled(false); + mShowOnMapBtn->setEnabled(false); + return; + } + + LLTeleportHistoryFlatItem* itemp = dynamic_cast (mLastSelectedFlatlList->getSelectedItem()); + + mTeleportBtn->setEnabled(NULL != itemp); + mShowProfile->setEnabled(NULL != itemp); + mShowOnMapBtn->setEnabled(NULL != itemp); + // } // virtual @@ -1235,6 +1251,12 @@ void LLTeleportHistoryPanel::onGearMenuAction(const LLSD& userdata) LLLandmarkActions::getSLURLfromPosGlobal(globalPos, boost::bind(&LLTeleportHistoryPanel::gotSLURLCallback, _1)); } + // FIRE-31025: Clear TP history doesn't work anymore + else if ("clear_history" == command_name) + { + onRemoveSelected(); + } + // } bool LLTeleportHistoryPanel::isActionEnabled(const LLSD& userdata) const diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 6d2042753f..0a081176ba 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1100,14 +1100,17 @@ bool LLScriptEdCore::writeToFile(const std::string& filename, bool unprocessed) void LLScriptEdCore::sync() { - // Sync with external editor. - std::string tmp_file = mContainer->getTmpFileName(); - llstat s; - if (LLFile::stat(tmp_file, &s) == 0) // file exists - { - if (mLiveFile) mLiveFile->ignoreNextUpdate(); - writeToFile(tmp_file,gSavedSettings.getBOOL("_NACL_LSLPreprocessor")); - } + // Sync with external editor. + if (mLiveFile) + { + std::string tmp_file = mLiveFile->filename(); + llstat s; + if (LLFile::stat(tmp_file, &s) == 0) // file exists + { + mLiveFile->ignoreNextUpdate(); + writeToFile(tmp_file, gSavedSettings.getBOOL("_NACL_LSLPreprocessor")); + } + } } bool LLScriptEdCore::hasChanged() @@ -1572,9 +1575,25 @@ void LLScriptEdCore::openInExternalEditor() // from above). delete mLiveFile; // deletes file - // Save the script to a temporary file. - std::string filename = mContainer->getTmpFileName(); - writeToFile(filename,gSavedSettings.getBOOL("_NACL_LSLPreprocessor")); + // Generate a suitable filename + std::string script_name = mScriptName; + std::string forbidden_chars = "<>:\"\\/|?*"; + for (std::string::iterator c = forbidden_chars.begin(); c != forbidden_chars.end(); c++) + { + script_name.erase(std::remove(script_name.begin(), script_name.end(), *c), script_name.end()); + } + std::string filename = mContainer->getTmpFileName(script_name); + + // Save the script to a temporary file. + if (!writeToFile(filename, gSavedSettings.getBOOL("_NACL_LSLPreprocessor"))) + { + // In case some characters from script name are forbidden + // and not accounted for, name is too long or some other issue, + // try file that doesn't include script name + script_name.clear(); + filename = mContainer->getTmpFileName(script_name); + writeToFile(filename, gSavedSettings.getBOOL("_NACL_LSLPreprocessor")); + } // Start watching file changes. mLiveFile = new LLLiveLSLFile(filename, boost::bind(&LLScriptEdContainer::onExternalChange, mContainer, _1)); @@ -2052,7 +2071,7 @@ std::string LLScriptEdContainer::getBackupFileName() const } // [/SL:KB] -std::string LLScriptEdContainer::getTmpFileName() +std::string LLScriptEdContainer::getTmpFileName(const std::string& script_name) { // Take script inventory item id (within the object inventory) // to consideration so that it's possible to edit multiple scripts @@ -2064,7 +2083,14 @@ std::string LLScriptEdContainer::getTmpFileName() LLMD5 script_id_hash((const U8 *)script_id.c_str()); script_id_hash.hex_digest(script_id_hash_str); - return std::string(LLFile::tmpdir()) + "sl_script_" + script_id_hash_str + ".lsl"; + if (script_name.empty()) + { + return std::string(LLFile::tmpdir()) + "sl_script_" + script_id_hash_str + ".lsl"; + } + else + { + return std::string(LLFile::tmpdir()) + "sl_script_" + script_name + "_" + script_id_hash_str + ".lsl"; + } } bool LLScriptEdContainer::onExternalChange(const std::string& filename) diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index 4d709d07a6..659a603440 100644 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -286,7 +286,7 @@ public: void updateStyle(); protected: - std::string getTmpFileName(); + std::string getTmpFileName(const std::string& script_name); // [SL:KB] - Patch: Build-ScriptRecover | Checked: 2011-11-23 (Catznip-3.2.0) | Added: Catznip-3.2.0 virtual std::string getBackupFileName() const; bool onBackupTimer(); diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index e50f137fbb..36b64c04e9 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -4553,8 +4553,9 @@ void LLSelectMgr::convertTransient() void LLSelectMgr::deselectAllIfTooFar() { -// [RLVa:KB] - Checked: RLVa-1.3.0 - if ( (!mSelectedObjects->isEmpty()) && ((gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) || (gRlvHandler.hasBehaviour(RLV_BHVR_EDITOBJ))) ) +// [RLVa:KB] - @edit* + // Continuously verify the selection as soon as there is at least one prim we shouldn't be able to edit + if ( !mSelectedObjects->isEmpty() && RlvActions::isRlvEnabled() && !RlvActions::canEdit(ERlvCheckType::All) ) { struct NotTransientOrFocusedMediaOrEditable : public LLSelectedNodeFunctor { diff --git a/indra/newview/llskinningutil.cpp b/indra/newview/llskinningutil.cpp index 7e40bffc4e..90e498e341 100644 --- a/indra/newview/llskinningutil.cpp +++ b/indra/newview/llskinningutil.cpp @@ -141,7 +141,7 @@ void LLSkinningUtil::scrubInvalidJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin // for (U32 j = 0; j < count; ++j) // { // S32 joint_num = skin->mJointNums[j]; -// LLJoint * joint = NULL; +// LLJoint *joint = NULL; // if (joint_num >= 0 && joint_num < LL_CHARACTER_MAX_ANIMATED_JOINTS) // { // joint = avatar->getJoint(joint_num); @@ -204,7 +204,7 @@ void LLSkinningUtil::initSkinningMatrixPalette( for (U32 j = 0; j < count; ++j) { S32 joint_num = skin->mJointNums[j]; - LLJoint * joint = NULL; + LLJoint *joint = NULL; if (joint_num >= 0 && joint_num < LL_CHARACTER_MAX_ANIMATED_JOINTS) { joint = avatar->getJoint(joint_num); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 93418415df..2c771018a8 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2581,9 +2581,6 @@ bool idle_startup() display_startup(); - //all categories loaded. lets create "My Favorites" category - gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE,true); - // set up callbacks LL_INFOS() << "Registering Callbacks" << LL_ENDL; LLMessageSystem* msg = gMessageSystem; diff --git a/indra/newview/llteleporthistorystorage.cpp b/indra/newview/llteleporthistorystorage.cpp index 7a329174bc..35f5c99a9d 100644 --- a/indra/newview/llteleporthistorystorage.cpp +++ b/indra/newview/llteleporthistorystorage.cpp @@ -220,6 +220,12 @@ void LLTeleportHistoryStorage::load() std::string line; while (std::getline(file, line)) { + if (line.empty()) + { + LL_WARNS() << "Teleport history contains empty line."<< LL_ENDL; + continue; + } + LLSD s_item; std::istringstream iss(line); if (parser->parse(iss, s_item, line.length()) == LLSDParser::PARSE_FAILURE) diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index aa51c67b13..77d7c9bbca 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -61,6 +61,7 @@ #include "llworld.h" #include "llpanelface.h" // [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1) +#include "rlvactions.h" #include "rlvhandler.h" #include "rlvlocks.h" // [/RLVa:KB] @@ -1650,6 +1651,14 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_ EAcceptance* accept, const LLSD& dest) { +// [RLVa:KB] - @share + if ( (RlvActions::isRlvEnabled()) && (!RlvActions::canGiveInventory(dest_agent)) ) + { + *accept = ACCEPT_NO_LOCKED; + return true; + } +// [/RLVa:KB] + // check the type switch(cargo_type) { @@ -2473,6 +2482,12 @@ EAcceptance LLToolDragAndDrop::dad3dGiveInventoryObject( } if( obj && avatar ) { +// [RLVa:KB] - @share + if ( (obj) && (RlvActions::isRlvEnabled()) && (!RlvActions::canGiveInventory(obj->getID())) ) + { + return ACCEPT_NO_LOCKED; + } +// [/RLVa:KB] if(drop) { LLGiveInventory::doGiveInventoryItem(obj->getID(), item ); @@ -2499,6 +2514,12 @@ EAcceptance LLToolDragAndDrop::dad3dGiveInventory( { return ACCEPT_NO; } +// [RLVa:KB] - @share + if ( (obj) && (RlvActions::isRlvEnabled()) && (!RlvActions::canGiveInventory(obj->getID())) ) + { + return ACCEPT_NO_LOCKED; + } +// [/RLVa:KB] if (drop && obj) { LLGiveInventory::doGiveInventoryItem(obj->getID(), item); @@ -2512,6 +2533,12 @@ EAcceptance LLToolDragAndDrop::dad3dGiveInventoryCategory( LLViewerObject* obj, S32 face, MASK mask, BOOL drop) { LL_DEBUGS() << "LLToolDragAndDrop::dad3dGiveInventoryCategory()" << LL_ENDL; +// [RLVa:KB] - @share + if ( (obj) && (RlvActions::isRlvEnabled()) && (!RlvActions::canGiveInventory(obj->getID())) ) + { + return ACCEPT_NO_LOCKED; + } +// [/RLVa:KB] if(drop && obj) { LLViewerInventoryItem* item; diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp index ae6547b77e..7fea202ee0 100644 --- a/indra/newview/lltoolmgr.cpp +++ b/indra/newview/lltoolmgr.cpp @@ -450,7 +450,7 @@ void LLToolMgr::clearTransientTool() void LLToolMgr::onAppFocusLost() { - if (LLApp::isQuitting()) + if (LLApp::isExiting()) return; if (mSelectedTool) diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index b01e287de3..3422aaed33 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -1605,7 +1605,8 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask) { - if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("ShowHoverTips")) return TRUE; + static LLCachedControl show_hover_tips(*LLUI::getInstance()->mSettingGroups["config"], "ShowHoverTips", true); + if (!show_hover_tips) return TRUE; if (!mHoverPick.isValid()) return TRUE; // [RLVa:KB] - Checked: 2010-05-03 (RLVa-1.2.0g) | Modified: RLVa-1.2.0g #ifdef RLV_EXTENSION_CMD_INTERACT diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp index 4369b146a0..ae66c596ac 100644 --- a/indra/newview/lltranslate.cpp +++ b/indra/newview/lltranslate.cpp @@ -144,6 +144,7 @@ void LLTranslationAPIHandler::verifyKeyCoro(LLTranslate::EService service, std:: httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, user_agent); httpOpts->setFollowRedirects(true); + httpOpts->setSSLVerifyPeer(false); std::string url = this->getKeyVerificationURL(key); if (url.empty()) @@ -185,6 +186,7 @@ void LLTranslationAPIHandler::translateMessageCoro(LanguagePair_t fromTo, std::s httpHeaders->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_TEXT_PLAIN); httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, user_agent); + httpOpts->setSSLVerifyPeer(false); std::string url = this->getTranslateURL(fromTo.first, fromTo.second, msg); if (url.empty()) diff --git a/indra/newview/llviewerassetstorage.cpp b/indra/newview/llviewerassetstorage.cpp index 6d009c0a8c..a36c11db18 100644 --- a/indra/newview/llviewerassetstorage.cpp +++ b/indra/newview/llviewerassetstorage.cpp @@ -114,6 +114,7 @@ LLViewerAssetStorage::LLViewerAssetStorage(LLMessageSystem *msg, LLXferManager * mCountSucceeded(0), mTotalBytesFetched(0) { + LLCoprocedureManager::instance().initializePool(VIEWER_ASSET_STORAGE_CORO_POOL); } LLViewerAssetStorage::LLViewerAssetStorage(LLMessageSystem *msg, LLXferManager *xfer) @@ -125,6 +126,7 @@ LLViewerAssetStorage::LLViewerAssetStorage(LLMessageSystem *msg, LLXferManager * mCountSucceeded(0), mTotalBytesFetched(0) { + LLCoprocedureManager::instance().initializePool(VIEWER_ASSET_STORAGE_CORO_POOL); } LLViewerAssetStorage::~LLViewerAssetStorage() @@ -581,7 +583,7 @@ void LLViewerAssetStorage::assetRequestCoro( LLSD result = httpAdapter->getRawAndSuspend(httpRequest, url, httpOpts); - if (LLApp::isQuitting() || !gAssetStorage) + if (LLApp::isExiting() || !gAssetStorage) { // Bail out if result arrives after shutdown has been started. return; diff --git a/indra/newview/llviewerchat.cpp b/indra/newview/llviewerchat.cpp index d9ff1ec149..585eecf38d 100644 --- a/indra/newview/llviewerchat.cpp +++ b/indra/newview/llviewerchat.cpp @@ -66,6 +66,7 @@ void LLViewerChat::getChatColor(const LLChat& chat, LLColor4& r_color, LLSD args { switch(chat.mSourceType) { + case CHAT_SOURCE_TELEPORT: // FIRE-31034: New teleport info system message ignoring system chat color case CHAT_SOURCE_SYSTEM: r_color = LLUIColorTable::instance().getColor("SystemChatColor"); break; diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 2f2a7cefe6..e23d990184 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -1661,10 +1661,9 @@ void render_ui_2d() if (renderUIBuffer) // { - LLUI* ui_inst = LLUI::getInstance(); - if (ui_inst->mDirty) + if (LLView::sIsRectDirty) { - ui_inst->mDirty = FALSE; + LLView::sIsRectDirty = false; LLRect t_rect; gPipeline.mUIScreen.bindTarget(); @@ -1672,26 +1671,26 @@ void render_ui_2d() { static const S32 pad = 8; - ui_inst->mDirtyRect.mLeft -= pad; - ui_inst->mDirtyRect.mRight += pad; - ui_inst->mDirtyRect.mBottom -= pad; - ui_inst->mDirtyRect.mTop += pad; + LLView::sDirtyRect.mLeft -= pad; + LLView::sDirtyRect.mRight += pad; + LLView::sDirtyRect.mBottom -= pad; + LLView::sDirtyRect.mTop += pad; LLGLEnable scissor(GL_SCISSOR_TEST); - static LLRect last_rect = ui_inst->mDirtyRect; + static LLRect last_rect = LLView::sDirtyRect; //union with last rect to avoid mouse poop - last_rect.unionWith(ui_inst->mDirtyRect); + last_rect.unionWith(LLView::sDirtyRect); - t_rect = ui_inst->mDirtyRect; - ui_inst->mDirtyRect = last_rect; + t_rect = LLView::sDirtyRect; + LLView::sDirtyRect = last_rect; last_rect = t_rect; // Factor out instance() call - //last_rect.mLeft = LLRect::tCoordType(last_rect.mLeft / ui_inst->getScaleFactor().mV[0]); - //last_rect.mRight = LLRect::tCoordType(last_rect.mRight / ui_inst->getScaleFactor().mV[0]); - //last_rect.mTop = LLRect::tCoordType(last_rect.mTop / ui_inst->getScaleFactor().mV[1]); - //last_rect.mBottom = LLRect::tCoordType(last_rect.mBottom / ui_inst->getScaleFactor().mV[1]); + //last_rect.mLeft = LLRect::tCoordType(last_rect.mLeft / LLUI::getScaleFactor().mV[0]); + //last_rect.mRight = LLRect::tCoordType(last_rect.mRight / LLUI::getScaleFactor().mV[0]); + //last_rect.mTop = LLRect::tCoordType(last_rect.mTop / LLUI::getScaleFactor().mV[1]); + //last_rect.mBottom = LLRect::tCoordType(last_rect.mBottom / LLUI::getScaleFactor().mV[1]); last_rect.mLeft = LLRect::tCoordType(last_rect.mLeft / ui_scale_factor.mV[0]); last_rect.mRight = LLRect::tCoordType(last_rect.mRight / ui_scale_factor.mV[0]); last_rect.mTop = LLRect::tCoordType(last_rect.mTop / ui_scale_factor.mV[1]); @@ -1707,7 +1706,7 @@ void render_ui_2d() gPipeline.mUIScreen.flush(); gGL.setColorMask(true, false); - ui_inst->mDirtyRect = t_rect; + LLView::sDirtyRect = t_rect; } LLGLDisable cull(GL_CULL_FACE); diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp index 3348ae35b4..e1e41312c1 100644 --- a/indra/newview/llviewerfoldertype.cpp +++ b/indra/newview/llviewerfoldertype.cpp @@ -157,7 +157,7 @@ LLViewerFolderDictionary::LLViewerFolderDictionary() addEntry(LLFolderType::FT_FAVORITE, new ViewerFolderEntry("Favorites", "Inv_FavoritesOpen", "Inv_FavoritesClosed", FALSE, true)); addEntry(LLFolderType::FT_CURRENT_OUTFIT, new ViewerFolderEntry("Current Outfit", "Inv_LookFolderOpen", "Inv_LookFolderClosed", TRUE, false)); - addEntry(LLFolderType::FT_OUTFIT, new ViewerFolderEntry("New Outfit", "Inv_LookFolderOpen", "Inv_LookFolderClosed", TRUE, true)); + addEntry(LLFolderType::FT_OUTFIT, new ViewerFolderEntry("New Outfit", "Inv_LookFolderOpen", "Inv_LookFolderClosed", TRUE, false)); addEntry(LLFolderType::FT_MY_OUTFITS, new ViewerFolderEntry("My Outfits", "Inv_LookFolderOpen", "Inv_LookFolderClosed", TRUE, true)); addEntry(LLFolderType::FT_MESH, new ViewerFolderEntry("Meshes", "Inv_MeshesOpen", "Inv_MeshesClosed", FALSE, true)); addEntry(LLFolderType::FT_SETTINGS, new ViewerFolderEntry("Settings", "Inv_SettingsOpen", "Inv_SettingsClosed", FALSE, true)); diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 2a04844b51..040b794e34 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1261,6 +1261,7 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url) httpOpts->setFollowRedirects(true); httpOpts->setWantHeaders(true); + httpOpts->setSSLVerifyPeer(false); // viewer's cert bundle doesn't appear to agree with web certs from "https://my.secondlife.com/" LLURL hostUrl(url.c_str()); std::string hostAuth = hostUrl.getAuthority(); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 5ceef9237b..e9cfed0072 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -352,6 +352,8 @@ void force_error_bad_memory_access(void *); void force_error_infinite_loop(void *); void force_error_software_exception(void *); void force_error_driver_crash(void *); +void force_error_coroutine_crash(void *); +void force_error_thread_crash(void *); void handle_force_delete(void*); void print_object_info(void*); @@ -2671,6 +2673,24 @@ class LLAdvancedForceErrorDriverCrash : public view_listener_t } }; +class LLAdvancedForceErrorCoroutineCrash : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + force_error_coroutine_crash(NULL); + return true; + } +}; + +class LLAdvancedForceErrorThreadCrash : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + force_error_thread_crash(NULL); + return true; + } +}; + class LLAdvancedForceErrorDisconnectViewer : public view_listener_t { bool handleEvent(const LLSD& userdata) @@ -3638,17 +3658,19 @@ bool enable_object_edit() } else if (LLSelectMgr::getInstance()->selectGetAllValidAndObjectsFound()) { -// enable = true; -// [RLVa:KB] - Checked: 2010-11-29 (RLVa-1.3.0c) | Modified: RLVa-1.3.0c - bool fRlvCanEdit = (!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) && (!gRlvHandler.hasBehaviour(RLV_BHVR_EDITOBJ)); - if (!fRlvCanEdit) +// [RLVa:KB] - @edit* + if (RlvActions::isRlvEnabled() && !RlvActions::canEdit(ERlvCheckType::All)) { LLObjectSelectionHandle hSel = LLSelectMgr::getInstance()->getSelection(); RlvSelectIsEditable f; - fRlvCanEdit = (hSel.notNull()) && ((hSel->getFirstRootNode(&f, TRUE)) == NULL); + enable = (hSel.notNull()) && (!hSel->getFirstRootNode(&f, true)); + } + else + { + enable = true; } - enable = fRlvCanEdit; // [/RLVa:KB] +// enable = true; } return enable; @@ -5268,30 +5290,36 @@ void near_sit_down_point(BOOL success, void *) class LLLandSit : public view_listener_t { - bool handleEvent(const LLSD& userdata) - { + bool handleEvent(const LLSD& userdata) + { // [RLVa:KB] - Checked: 2010-09-28 (RLVa-1.2.1f) | Modified: RLVa-1.2.1f - if ( (rlv_handler_t::isEnabled()) && ((!RlvActions::canStand()) || (gRlvHandler.hasBehaviour(RLV_BHVR_SIT))) ) - return true; + if ( (rlv_handler_t::isEnabled()) && ((!RlvActions::canStand()) || (gRlvHandler.hasBehaviour(RLV_BHVR_SIT))) ) + return true; // [/RLVa:KB] - gAgent.standUp(); - LLViewerParcelMgr::getInstance()->deselectLand(); + LLVector3d posGlobal = LLToolPie::getInstance()->getPick().mPosGlobal; - LLVector3d posGlobal = LLToolPie::getInstance()->getPick().mPosGlobal; - - LLQuaternion target_rot; - if (isAgentAvatarValid()) - { - target_rot = gAgentAvatarp->getRotation(); - } - else - { - target_rot = gAgent.getFrameAgent().getQuaternion(); - } - gAgent.startAutoPilotGlobal(posGlobal, "Sit", &target_rot, near_sit_down_point, NULL, 0.7f); - return true; - } + LLQuaternion target_rot; + if (isAgentAvatarValid()) + { + target_rot = gAgentAvatarp->getRotation(); + } + else + { + target_rot = gAgent.getFrameAgent().getQuaternion(); + } + gAgent.startAutoPilotGlobal(posGlobal, "Sit", &target_rot, near_sit_down_point, NULL, 0.7f); + return true; + } +}; + +class LLLandCanSit : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + LLVector3d posGlobal = LLToolPie::getInstance()->getPick().mPosGlobal; + return !posGlobal.isExactlyZero(); // valid position, not beyond draw distance + } }; //------------------------------------------------------------------- @@ -10327,6 +10355,16 @@ void force_error_driver_crash(void *) LLAppViewer::instance()->forceErrorDriverCrash(); } +void force_error_coroutine_crash(void *) +{ + LLAppViewer::instance()->forceErrorCoroutineCrash(); +} + +void force_error_thread_crash(void *) +{ + LLAppViewer::instance()->forceErrorThreadCrash(); +} + class LLToolsUseSelectionForGrid : public view_listener_t { bool handleEvent(const LLSD& userdata) @@ -11926,6 +11964,8 @@ void initialize_menus() view_listener_t::addMenu(new LLAdvancedForceErrorInfiniteLoop(), "Advanced.ForceErrorInfiniteLoop"); view_listener_t::addMenu(new LLAdvancedForceErrorSoftwareException(), "Advanced.ForceErrorSoftwareException"); view_listener_t::addMenu(new LLAdvancedForceErrorDriverCrash(), "Advanced.ForceErrorDriverCrash"); + view_listener_t::addMenu(new LLAdvancedForceErrorCoroutineCrash(), "Advanced.ForceErrorCoroutineCrash"); + view_listener_t::addMenu(new LLAdvancedForceErrorThreadCrash(), "Advanced.ForceErrorThreadCrash"); view_listener_t::addMenu(new LLAdvancedForceErrorDisconnectViewer(), "Advanced.ForceErrorDisconnectViewer"); // Advanced (toplevel) @@ -12091,6 +12131,7 @@ void initialize_menus() // Land pie menu view_listener_t::addMenu(new LLLandBuild(), "Land.Build"); view_listener_t::addMenu(new LLLandSit(), "Land.Sit"); + view_listener_t::addMenu(new LLLandCanSit(), "Land.CanSit"); view_listener_t::addMenu(new LLLandBuyPass(), "Land.BuyPass"); view_listener_t::addMenu(new LLLandEdit(), "Land.Edit"); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 00deddbf73..fd388b1435 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -516,6 +516,21 @@ void LLViewerObject::markDead() } } +S32 LLViewerObject::getNumVisibleFaces() const +{ + int v{0}; + if(mDrawable.notNull()) + { + for (int i = 0;i < mDrawable->getNumFaces();i++) + { + if(mDrawable->getFace(i)->getTextureEntry()->getAlpha() != 0.f) + v++; + } + } + return v; +}; + + void LLViewerObject::dump() const { LL_INFOS() << "Type: " << pCodeToString(mPrimitiveCode) << LL_ENDL; diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 07498bec2b..6b2d4ed877 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -199,6 +199,7 @@ public: virtual U32 getNumVertices() const; virtual U32 getNumIndices() const; S32 getNumFaces() const { return mNumFaces; } + S32 getNumVisibleFaces() const; // Graphical stuff for objects - maybe broken out into render class later? virtual void updateTextures(); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index daa4200552..77cece4577 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -83,6 +83,8 @@ #include "llcallstack.h" #include "llsettingsdaycycle.h" +#include + // Firestorm includes #include "lfsimfeaturehandler.h" #include "llviewermenu.h" @@ -150,15 +152,22 @@ public: // build a secondlife://{PLACE} SLurl from this SLapp std::string url = "secondlife://"; + boost::regex name_rx("[A-Za-z0-9()_%]+"); + boost::regex coord_rx("[0-9]+"); for (int i = 0; i < num_params; i++) { if (i > 0) { url += "/"; } + if (!boost::regex_match(params[i].asString(), i > 0 ? coord_rx : name_rx)) + { + return false; + } + url += params[i].asString(); } - + // Process the SLapp as if it was a secondlife://{PLACE} SLurl LLURLDispatcher::dispatch(url, "clicked", web, true); return true; @@ -2407,7 +2416,7 @@ void LLViewerRegion::setSimulatorFeaturesReceived(bool received) mSimulatorFeaturesReceived = received; if (received) { - mSimulatorFeaturesReceivedSignal(getRegionID()); + mSimulatorFeaturesReceivedSignal(getRegionID(), this); mSimulatorFeaturesReceivedSignal.disconnect_all_slots(); } } @@ -3421,7 +3430,7 @@ void LLViewerRegion::setCapabilitiesReceived(bool received) // so that they can safely use getCapability(). if (received) { - mCapabilitiesReceivedSignal(getRegionID()); + mCapabilitiesReceivedSignal(getRegionID(), this); LLFloaterPermsDefault::sendInitialPerms(); diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 9c1715d6aa..2aa8258a75 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -97,7 +97,7 @@ public: NUM_PARTITIONS } eObjectPartitions; - typedef boost::signals2::signal caps_received_signal_t; + typedef boost::signals2::signal caps_received_signal_t; LLViewerRegion(const U64 &handle, const LLHost &host, diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp index adf09bed17..18fba85be1 100644 --- a/indra/newview/llviewerstats.cpp +++ b/indra/newview/llviewerstats.cpp @@ -581,7 +581,8 @@ void send_viewer_stats(bool include_preferences) fail["invalid"] = (S32) gMessageSystem->mInvalidOnCircuitPackets; fail["missing_updater"] = (S32) LLAppViewer::instance()->isUpdaterMissing(); - body["ui"] = LLUIUsage::instance().asLLSD(); + // We do not need to send UI usage stats according to Jess... + //body["ui"] = LLUIUsage::instance().asLLSD(); body["stats"]["voice"] = LLVoiceVivoxStats::getInstance()->read(); diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index a46da8ef0d..0f31bb6b6e 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -259,6 +259,7 @@ LLViewerTextureList::~LLViewerTextureList() void LLViewerTextureList::shutdown() { + LL_WARNS() << "Shutdown called" << LL_ENDL; // clear out preloads mImagePreloads.clear(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index dac81d94f3..7dc754cf37 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2033,7 +2033,8 @@ LLViewerWindow::LLViewerWindow(const Params& p) if (!LLAppViewer::instance()->restoreErrorTrap()) { - LL_WARNS("Window") << " Someone took over my signal/exception handler (post createWindow)!" << LL_ENDL; + // this always happens, so downgrading it to INFO + LL_INFOS("Window") << " Someone took over my signal/exception handler (post createWindow; normal)" << LL_ENDL; } const bool do_not_enforce = false; @@ -3010,7 +3011,7 @@ void LLViewerWindow::draw() static LLCachedControl renderUIBuffer(gSavedSettings, "RenderUIBuffer"); if (!renderUIBuffer) { - LLUI::getInstance()->mDirtyRect = getWindowRectScaled(); + LLView::sDirtyRect = getWindowRectScaled(); } // HACK for timecode debugging @@ -7199,11 +7200,11 @@ void LLPickInfo::fetchResults() // [RLVa:KB] - Checked: RLVa-2.2 (@setoverlay) if ( (RlvActions::hasBehaviour(RLV_BHVR_SETOVERLAY)) && (hit_object) && (!hit_object->isHUDAttachment()) ) { - std::list effects; + std::list effects; LLVfxManager::instance().getEffects(effects); - for (const LLVisualEffect* pEffect : effects) + for (const RlvOverlayEffect* pEffect : effects) { - if (pEffect->getEnabled() && static_cast(pEffect)->hitTest(mMousePt)) + if (pEffect->getEnabled() && pEffect->hitTest(mMousePt)) { hit_object = nullptr; break; diff --git a/indra/newview/llvisualeffect.h b/indra/newview/llvisualeffect.h index ab8f1e5aa0..121d7beb17 100644 --- a/indra/newview/llvisualeffect.h +++ b/indra/newview/llvisualeffect.h @@ -170,7 +170,7 @@ public: LLVisualEffect* getEffect(EVisualEffect eCode, const LLUUID& idEffect) const; template T* getEffect(const LLUUID& idEffect) const { return dynamic_cast(getEffect(T::EffectCode, idEffect)); } bool getEffects(std::list& effectList, std::function fnFilter); - template bool getEffects(std::list& effectList) { return getEffects(effectList, [](const LLVisualEffect* pEffect) { return pEffect->getCode() == T::EffectCode; }); } + template bool getEffects(std::list& effectList); bool hasEffect(EVisualEffect eCode) const; bool removeEffect(EVisualEffect eCode, const LLUUID& idEffect); template bool removeEffect(const LLUUID& idEffect) { return removeEffect(T::EffectCode, idEffect); } @@ -197,4 +197,23 @@ inline bool LLVfxManager::hasEffect(EVisualEffect eCode) const return m_Effects.end() != std::find_if(m_Effects.begin(), m_Effects.end(), [eCode](const LLVisualEffect* pEffect) { return pEffect->getCode() == eCode; }); } +template +inline bool LLVfxManager::getEffects(std::list& effectList) +{ + effectList.clear(); + + std::function fnFilter = [](const LLVisualEffect* pEffect) { return pEffect->getCode() == T::EffectCode; }; + auto itEffect = boost::make_filter_iterator(fnFilter, m_Effects.begin(), m_Effects.end()), + endEffect = boost::make_filter_iterator(fnFilter, m_Effects.end(), m_Effects.end()); + while (itEffect != endEffect) + { + if (T* pEffect = dynamic_cast(*itEffect++)) + { + effectList.push_back(pEffect); + } + } + + return effectList.size(); +} + // ============================================================================ diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index cf8916f91f..f930646d63 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -11660,7 +11660,8 @@ void LLVOAvatar::accountRenderComplexityForObject( LL_DEBUGS("ARCdetail") << "Attachment costs " << attached_object->getAttachmentItemID() << " total: " << attachment_total_cost << ", volume: " << attachment_volume_cost - << ", textures: " << attachment_texture_cost + << ", " << textures.size() + << " textures: " << attachment_texture_cost << ", " << volume->numChildren() << " children: " << attachment_children_cost << LL_ENDL; @@ -11784,10 +11785,23 @@ void LLVOAvatar::calculateUpdateRenderComplexity() ETextureIndex tex_index = baked_dict->mTextureIndex; if ((tex_index != TEX_SKIRT_BAKED) || (isWearingWearableType(LLWearableType::WT_SKIRT))) { - if (isTextureVisible(tex_index)) - { - cost +=COMPLEXITY_BODY_PART_COST; - } + // Same as isTextureVisible(), but doesn't account for isSelf to ensure identical numbers for all avatars + if (isIndexLocalTexture(tex_index)) + { + if (isTextureDefined(tex_index, 0)) + { + cost += COMPLEXITY_BODY_PART_COST; + } + } + else + { + // baked textures can use TE images directly + if (isTextureDefined(tex_index) + && (getTEImage(tex_index)->getID() != IMG_INVISIBLE || LLDrawPoolAlpha::sShowDebugAlpha)) + { + cost += COMPLEXITY_BODY_PART_COST; + } + } } } LL_DEBUGS("ARCdetail") << "Avatar body parts complexity: " << cost << LL_ENDL; @@ -11843,9 +11857,8 @@ void LLVOAvatar::calculateUpdateRenderComplexity() // Diagnostic output to identify all avatar-related textures. // Does not affect rendering cost calculation. - // Could be wrapped in a debug option if output becomes problematic. // Disable useless diagnostics - //if (isSelf()) + //if (isSelf() && debugLoggingEnabled("ARCdetail")) //{ // // print any attachment textures we didn't already know about. // for (LLVOVolume::texture_cost_t::iterator it = textures.begin(); it != textures.end(); ++it) diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp index b6a432bc74..268e8bc096 100644 --- a/indra/newview/llvocache.cpp +++ b/indra/newview/llvocache.cpp @@ -44,6 +44,9 @@ F32 LLVOCacheEntry::sFrontPixelThreshold = 1.0f; F32 LLVOCacheEntry::sRearPixelThreshold = 1.0f; BOOL LLVOCachePartition::sNeedsOcclusionCheck = FALSE; +const S32 ENTRY_HEADER_SIZE = 6 * sizeof(S32); +const S32 MAX_ENTRY_BODY_SIZE = 10000; + BOOL check_read(LLAPRFile* apr_file, void* src, S32 n_bytes) { return apr_file->read(src, n_bytes) == n_bytes ; @@ -111,32 +114,22 @@ LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file) { S32 size = -1; BOOL success; + static U8 data_buffer[ENTRY_HEADER_SIZE]; mDP.assignBuffer(mBuffer, 0); - - success = check_read(apr_file, &mLocalID, sizeof(U32)); - if(success) - { - success = check_read(apr_file, &mCRC, sizeof(U32)); - } - if(success) - { - success = check_read(apr_file, &mHitCount, sizeof(S32)); - } - if(success) - { - success = check_read(apr_file, &mDupeCount, sizeof(S32)); - } - if(success) - { - success = check_read(apr_file, &mCRCChangeCount, sizeof(S32)); - } - if(success) - { - success = check_read(apr_file, &size, sizeof(S32)); + + success = check_read(apr_file, (void *)data_buffer, ENTRY_HEADER_SIZE); + if (success) + { + memcpy(&mLocalID, data_buffer, sizeof(U32)); + memcpy(&mCRC, data_buffer + sizeof(U32), sizeof(U32)); + memcpy(&mHitCount, data_buffer + (2 * sizeof(U32)), sizeof(S32)); + memcpy(&mDupeCount, data_buffer + (3 * sizeof(U32)), sizeof(S32)); + memcpy(&mCRCChangeCount, data_buffer + (4 * sizeof(U32)), sizeof(S32)); + memcpy(&size, data_buffer + (5 * sizeof(U32)), sizeof(S32)); // Corruption in the cache entries - if ((size > 10000) || (size < 1)) + if ((size > MAX_ENTRY_BODY_SIZE) || (size < 1)) { // We've got a bogus size, skip reading it. // We won't bother seeking, because the rest of this file @@ -345,26 +338,25 @@ void LLVOCacheEntry::dump() const << LL_ENDL; } -BOOL LLVOCacheEntry::writeToFile(LLAPRFile* apr_file) const +S32 LLVOCacheEntry::writeToBuffer(U8 *data_buffer) const { - static const S32 data_buffer_size = 6 * sizeof(S32); - static U8 data_buffer[data_buffer_size]; S32 size = mDP.getBufferSize(); + if (size > MAX_ENTRY_BODY_SIZE) + { + LL_WARNS() << "Failed to write entry with size above allowed limit: " << size << LL_ENDL; + return 0; + } + memcpy(data_buffer, &mLocalID, sizeof(U32)); memcpy(data_buffer + sizeof(U32), &mCRC, sizeof(U32)); memcpy(data_buffer + (2 * sizeof(U32)), &mHitCount, sizeof(S32)); memcpy(data_buffer + (3 * sizeof(U32)), &mDupeCount, sizeof(S32)); memcpy(data_buffer + (4 * sizeof(U32)), &mCRCChangeCount, sizeof(S32)); memcpy(data_buffer + (5 * sizeof(U32)), &size, sizeof(S32)); + memcpy(data_buffer + ENTRY_HEADER_SIZE, (void*)mBuffer, size); - BOOL success = check_write(apr_file, (void*)data_buffer, data_buffer_size); - if (success) - { - success = check_write(apr_file, (void*)mBuffer, size); - } - - return success; + return ENTRY_HEADER_SIZE + size; } //static @@ -1402,11 +1394,11 @@ void LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca bool success = true ; { std::string filename; + LLUUID cache_id; getObjectCacheFilename(handle, filename); LLAPRFile apr_file(filename, APR_READ|APR_BINARY, mLocalAPRFilePoolp); - LLUUID cache_id ; - success = check_read(&apr_file, cache_id.mData, UUID_BYTES) ; + success = check_read(&apr_file, cache_id.mData, UUID_BYTES); if(success) { @@ -1418,7 +1410,7 @@ void LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca if(success) { - S32 num_entries; + S32 num_entries; // if removal was enabled during write num_entries might be wrong success = check_read(&apr_file, &num_entries, sizeof(S32)) ; if(success) @@ -1525,30 +1517,57 @@ void LLVOCache::writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry: { std::string filename; getObjectCacheFilename(handle, filename); - // Fix bogus cache entry size warning - //LLAPRFile apr_file(filename, APR_CREATE|APR_WRITE|APR_BINARY, mLocalAPRFilePoolp); - LLAPRFile apr_file(filename, APR_FOPEN_CREATE|APR_FOPEN_WRITE|APR_FOPEN_BINARY|APR_FOPEN_TRUNCATE, mLocalAPRFilePoolp); - - success = check_write(&apr_file, (void*)id.mData, UUID_BYTES) ; - + LLAPRFile apr_file(filename, APR_CREATE|APR_WRITE|APR_BINARY|APR_TRUNCATE, mLocalAPRFilePoolp); + + success = check_write(&apr_file, (void*)id.mData, UUID_BYTES); if(success) { - S32 num_entries = cache_entry_map.size() ; + S32 num_entries = cache_entry_map.size(); // if removal is enabled num_entries might be wrong success = check_write(&apr_file, &num_entries, sizeof(S32)); + if (success) + { + const S32 buffer_size = 32768; //should be large enough for couple MAX_ENTRY_BODY_SIZE + U8 data_buffer[buffer_size]; // generaly entries are fairly small, so collect them and drop onto disk in one go + S32 size_in_buffer = 0; - // This can have a lot of entries, so might be better to dump them into buffer first and write in one go. - for (LLVOCacheEntry::vocache_entry_map_t::const_iterator iter = cache_entry_map.begin(); success && iter != cache_entry_map.end(); ++iter) - { - if(!removal_enabled || iter->second->isValid()) - { - success = iter->second->writeToFile(&apr_file) ; - if(!success) - { - break; - } - } - } + // This can have a lot of entries, so might be better to dump them into buffer first and write in one go. + for (LLVOCacheEntry::vocache_entry_map_t::const_iterator iter = cache_entry_map.begin(); success && iter != cache_entry_map.end(); ++iter) + { + if (!removal_enabled || iter->second->isValid()) + { + S32 size = iter->second->writeToBuffer(data_buffer + size_in_buffer); + + if (size > ENTRY_HEADER_SIZE) // body is minimum of 1 + { + size_in_buffer += size; + } + else + { + success = false; + break; + } + + // Make sure we have space in buffer for next element + if (buffer_size - size_in_buffer < MAX_ENTRY_BODY_SIZE + ENTRY_HEADER_SIZE) + { + success = check_write(&apr_file, (void*)data_buffer, size_in_buffer); + size_in_buffer = 0; + if (!success) + { + break; + } + } + } + } + + if (success && size_in_buffer > 0) + { + // final write + success = check_write(&apr_file, (void*)data_buffer, size_in_buffer); + size_in_buffer = 0; + } + } } } diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h index 6c95541c11..dd6afd6b85 100644 --- a/indra/newview/llvocache.h +++ b/indra/newview/llvocache.h @@ -106,7 +106,7 @@ public: F32 getSceneContribution() const { return mSceneContrib;} void dump() const; - BOOL writeToFile(LLAPRFile* apr_file) const; + S32 writeToBuffer(U8 *data_buffer) const; LLDataPackerBinaryBuffer *getDP(); void recordHit(); void recordDupe() { mDupeCount++; } diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 76763fe250..746ddfdb02 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -703,7 +703,6 @@ void LLVivoxVoiceClient::idle(void* user_data) { } - //========================================================================= // the following are methods to support the coroutine implementation of the // voice connection and processing. They should only be called in the context @@ -750,12 +749,15 @@ void LLVivoxVoiceClient::voiceControlCoro() gSavedSettings.getControl("VivoxVadNoiseFloor")->getSignal()->connect(boost::bind(&LLVivoxVoiceClient::onVADSettingsChange, this)); gSavedSettings.getControl("VivoxVadSensitivity")->getSignal()->connect(boost::bind(&LLVivoxVoiceClient::onVADSettingsChange, this)); - if (mTuningMode) + if (mTuningMode && !sShuttingDown) { performMicTuning(); } - waitForChannel(); // this doesn't normally return unless relog is needed or shutting down + if (!sShuttingDown) + { + waitForChannel(); // this doesn't normally return unless relog is needed or shutting down + } LL_DEBUGS("Voice") << "lost channel RelogRequested=" << mRelogRequested << LL_ENDL; endAndDisconnectSession(); @@ -797,7 +799,6 @@ void LLVivoxVoiceClient::voiceControlCoro() LL_INFOS("Voice") << "exiting" << LL_ENDL; } - bool LLVivoxVoiceClient::startAndConnectSession() { bool ok = false; @@ -1146,7 +1147,14 @@ bool LLVivoxVoiceClient::provisionVoiceAccount() { F32 timeout = pow(PROVISION_RETRY_TIMEOUT, static_cast(retryCount)); LL_WARNS("Voice") << "Provision CAP 404. Retrying in " << timeout << " seconds." << LL_ENDL; - llcoro::suspendUntilTimeout(timeout); + if (sShuttingDown) + { + return false; + } + else + { + llcoro::suspendUntilTimeout(timeout); + } } else if (!status) { @@ -1373,8 +1381,13 @@ bool LLVivoxVoiceClient::loginToVivox() // tell the user there is a problem LL_WARNS("Voice") << "login " << loginresp << " will retry login in " << timeout << " seconds." << LL_ENDL; - - llcoro::suspendUntilTimeout(timeout); + + if (!sShuttingDown) + { + // Todo: this is way to long, viewer can get stuck waiting during shutdown + // either make it listen to pump or split in smaller waits with checks for shutdown + llcoro::suspendUntilTimeout(timeout); + } } else if (loginresp == "failed") { @@ -1440,6 +1453,11 @@ void LLVivoxVoiceClient::logoutOfVivox(bool wait) result = llcoro::suspendUntilEventOnWithTimeout(mVivoxPump, LOGOUT_ATTEMPT_TIMEOUT, timeoutResult); + if (sShuttingDown) + { + break; + } + LL_DEBUGS("Voice") << "event=" << ll_stream_notation_sd(result) << LL_ENDL; // Don't get confused by prior queued events -- note that it's // very important that mVivoxPump is an LLEventMailDrop, which @@ -1679,6 +1697,12 @@ bool LLVivoxVoiceClient::addAndJoinSession(const sessionStatePtr_t &nextSession) { result = llcoro::suspendUntilEventOnWithTimeout(mVivoxPump, SESSION_JOIN_TIMEOUT, timeoutResult); + if (sShuttingDown) + { + mIsJoiningSession = false; + return false; + } + LL_INFOS("Voice") << "event=" << ll_stream_notation_sd(result) << LL_ENDL; if (result.has("session")) { @@ -1875,7 +1899,7 @@ bool LLVivoxVoiceClient::waitForChannel() if (sShuttingDown) { - logoutOfVivox(true); + logoutOfVivox(false); return false; } @@ -1922,7 +1946,7 @@ bool LLVivoxVoiceClient::waitForChannel() // the parcel is changed, or we have no pending audio sessions, // so try to request the parcel voice info // if we have the cap, we move to the appropriate state - requestParcelVoiceInfo(); + requestParcelVoiceInfo(); //suspends for http reply } else if (sessionNeedsRelog(mNextAudioSession)) { @@ -1934,7 +1958,7 @@ bool LLVivoxVoiceClient::waitForChannel() { sessionStatePtr_t joinSession = mNextAudioSession; mNextAudioSession.reset(); - if (!runSession(joinSession)) + if (!runSession(joinSession)) //suspends { LL_DEBUGS("Voice") << "runSession returned false; leaving inner loop" << LL_ENDL; break; @@ -1949,7 +1973,7 @@ bool LLVivoxVoiceClient::waitForChannel() } } - if (!mNextAudioSession) + if (!mNextAudioSession && !sShuttingDown) { llcoro::suspendUntilTimeout(1.0); } @@ -1970,9 +1994,9 @@ bool LLVivoxVoiceClient::waitForChannel() mIsProcessingChannels = false; - logoutOfVivox(true); + logoutOfVivox(!sShuttingDown /*bool wait*/); - if (mRelogRequested) + if (mRelogRequested && !sShuttingDown) { LL_DEBUGS("Voice") << "Relog Requested, restarting provisioning" << LL_ENDL; if (!provisionVoiceAccount()) @@ -2022,7 +2046,12 @@ bool LLVivoxVoiceClient::runSession(const sessionStatePtr_t &session) while (mVoiceEnabled && isGatewayRunning() && !mSessionTerminateRequested && !mTuningMode) { - sendCaptureAndRenderDevices(); + sendCaptureAndRenderDevices(); // suspends + if (mSessionTerminateRequested) + { + break; + } + if (mAudioSession && mAudioSession->mParticipantsChanged) { mAudioSession->mParticipantsChanged = false; @@ -2249,7 +2278,7 @@ bool LLVivoxVoiceClient::performMicTuning() mIsInTuningMode = true; llcoro::suspend(); - while (mTuningMode) + while (mTuningMode && !sShuttingDown) { if (mCaptureDeviceDirty || mRenderDeviceDirty) @@ -2285,9 +2314,12 @@ bool LLVivoxVoiceClient::performMicTuning() tuningCaptureStartSendMessage(1); // 1-loop, zero, don't loop //--------------------------------------------------------------------- - llcoro::suspend(); + if (!sShuttingDown) + { + llcoro::suspend(); + } - while (mTuningMode && !mCaptureDeviceDirty && !mRenderDeviceDirty) + while (mTuningMode && !mCaptureDeviceDirty && !mRenderDeviceDirty && !sShuttingDown) { // process mic/speaker volume changes if (mTuningMicVolumeDirty || mTuningSpeakerVolumeDirty) @@ -2327,7 +2359,7 @@ bool LLVivoxVoiceClient::performMicTuning() // transition out of mic tuning tuningCaptureStopSendMessage(); - if (mCaptureDeviceDirty || mRenderDeviceDirty) + if ((mCaptureDeviceDirty || mRenderDeviceDirty) && !sShuttingDown) { llcoro::suspendUntilTimeout(UPDATE_THROTTLE_SECONDS); } diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h index 686e2b9910..886acf677a 100644 --- a/indra/newview/llvoicevivox.h +++ b/indra/newview/llvoicevivox.h @@ -456,7 +456,6 @@ protected: // local audio updates, mic mute, speaker mute, mic volume and speaker volumes void sendLocalAudioUpdates(); - ///////////////////////////// // Response/Event handlers void connectorCreateResponse(int statusCode, std::string &statusString, std::string &connectorHandle, std::string &versionID); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index cc8b2980da..7ce1730b26 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -4179,7 +4179,25 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const { if (textures.find(img->getID()) == textures.end()) { - S32 texture_cost = 256 + (S32)(ARC_TEXTURE_COST * (img->getFullHeight() / 128.f + img->getFullWidth() / 128.f)); + S32 texture_cost = 0; + S8 type = img->getType(); + if (type == LLViewerTexture::FETCHED_TEXTURE || type == LLViewerTexture::LOD_TEXTURE) + { + const LLViewerFetchedTexture* fetched_texturep = static_cast(img); + if (fetched_texturep + && fetched_texturep->getFTType() == FTT_LOCAL_FILE + && (img->getID() == IMG_ALPHA_GRAD_2D || img->getID() == IMG_ALPHA_GRAD) + ) + { + // These two textures appear to switch between each other, but are of different sizes (4x256 and 256x256). + // Hardcode cost from larger one to not cause random complexity changes + texture_cost = 320; + } + } + if (texture_cost == 0) + { + texture_cost = 256 + (S32)(ARC_TEXTURE_COST * (img->getFullHeight() / 128.f + img->getFullWidth() / 128.f)); + } textures.insert(texture_cost_t::value_type(img->getID(), texture_cost)); } } @@ -5722,8 +5740,8 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) U32 useage = group->getSpatialPartition()->mBufferUsage; - LLCachedControl max_vbo_size(gSavedSettings, "RenderMaxVBOSize", 512); - LLCachedControl max_node_size(gSavedSettings, "RenderMaxNodeSize", 65536); + static LLCachedControl max_vbo_size(gSavedSettings, "RenderMaxVBOSize", 512); + static LLCachedControl max_node_size(gSavedSettings, "RenderMaxNodeSize", 65536); U32 max_vertices = (max_vbo_size * 1024)/LLVertexBuffer::calcVertexSize(group->getSpatialPartition()->mVertexDataMask); U32 max_total = (max_node_size * 1024) / LLVertexBuffer::calcVertexSize(group->getSpatialPartition()->mVertexDataMask); max_vertices = llmin(max_vertices, (U32) 65535); @@ -6540,7 +6558,7 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace #endif - LLCachedControl max_vbo_size(gSavedSettings, "RenderMaxVBOSize", 512); + static LLCachedControl max_vbo_size(gSavedSettings, "RenderMaxVBOSize", 512); U32 max_vertices = (max_vbo_size * 1024)/LLVertexBuffer::calcVertexSize(group->getSpatialPartition()->mVertexDataMask); max_vertices = llmin(max_vertices, (U32) 65535); diff --git a/indra/newview/llwatchdog.cpp b/indra/newview/llwatchdog.cpp index 3aba7a87e3..152f957cc5 100644 --- a/indra/newview/llwatchdog.cpp +++ b/indra/newview/llwatchdog.cpp @@ -31,15 +31,6 @@ const U32 WATCHDOG_SLEEP_TIME_USEC = 1000000; -void default_killer_callback() -{ -#ifdef LL_WINDOWS - RaiseException(0,0,0,0); -#else - raise(SIGQUIT); -#endif -} - // This class runs the watchdog timing thread. class LLWatchdogTimerThread : public LLThread { @@ -165,11 +156,10 @@ void LLWatchdogTimeout::ping(const char *state) } // LLWatchdog -LLWatchdog::LLWatchdog() : - mSuspectsAccessMutex(), - mTimer(NULL), - mLastClockCount(0), - mKillerCallback(&default_killer_callback) +LLWatchdog::LLWatchdog() + :mSuspectsAccessMutex() + ,mTimer(NULL) + ,mLastClockCount(0) { } @@ -191,9 +181,8 @@ void LLWatchdog::remove(LLWatchdogEntry* e) unlockThread(); } -void LLWatchdog::init(killer_event_callback func) +void LLWatchdog::init() { - mKillerCallback = func; if(!mSuspectsAccessMutex && !mTimer) { mSuspectsAccessMutex = new LLMutex(); @@ -260,8 +249,7 @@ void LLWatchdog::run() mTimer->stop(); } - LL_INFOS() << "Watchdog detected error:" << LL_ENDL; - mKillerCallback(); + LL_ERRS() << "Watchdog timer expired; assuming viewer is hung and crashing" << LL_ENDL; } } diff --git a/indra/newview/llwatchdog.h b/indra/newview/llwatchdog.h index a77212c6fc..fd0b0fdbce 100644 --- a/indra/newview/llwatchdog.h +++ b/indra/newview/llwatchdog.h @@ -98,9 +98,7 @@ public: void add(LLWatchdogEntry* e); void remove(LLWatchdogEntry* e); - typedef boost::function killer_event_callback; - - void init(killer_event_callback func = NULL); + void init(); void run(); void cleanup(); @@ -113,8 +111,6 @@ private: LLMutex* mSuspectsAccessMutex; LLWatchdogTimerThread* mTimer; U64 mLastClockCount; - - killer_event_callback mKillerCallback; }; #endif // LL_LLTHREADWATCHDOG_H diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index a04c22789f..be1027a473 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -242,8 +242,8 @@ bool LLWeb::useExternalBrowser(const std::string &url) std::string uri_string = up.host(); // FIRE-20796: Grid check status page ignores opening SL links in internal browser setting - //boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com)$", boost::regex::perl|boost::regex::icase); - boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com|secondlifegrid.net|secondlife-status.statuspage.io)$", boost::regex::perl|boost::regex::icase); + //boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com|secondlife.io)$", boost::regex::perl|boost::regex::icase); + boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com|secondlife.io|secondlifegrid.net|secondlife-status.statuspage.io)$", boost::regex::perl|boost::regex::icase); // boost::match_results matches; return !(boost::regex_search(uri_string, matches, pattern)); diff --git a/indra/newview/llwebprofile.cpp b/indra/newview/llwebprofile.cpp index 182beba574..f2d7e4585a 100644 --- a/indra/newview/llwebprofile.cpp +++ b/indra/newview/llwebprofile.cpp @@ -113,6 +113,7 @@ void LLWebProfile::uploadImageCoro(LLPointer image, std::strin httpOpts->setWantHeaders(true); httpOpts->setFollowRedirects(false); + httpOpts->setSSLVerifyPeer(false); ; // viewer's cert bundle doesn't appear to agree with web certs from "https://my.secondlife.com/" // Get upload configuration data. std::string configUrl(getProfileURL(std::string()) + "snapshots/s3_upload_config"); diff --git a/indra/newview/llwlhandlers.cpp b/indra/newview/llwlhandlers.cpp index 730aa3774f..d55e1b7cd3 100644 --- a/indra/newview/llwlhandlers.cpp +++ b/indra/newview/llwlhandlers.cpp @@ -51,7 +51,7 @@ bool LLEnvironmentRequest::initiate(LLEnvironment::environment_apply_fn cb) if (!cur_region->capabilitiesReceived()) { LL_INFOS("WindlightCaps") << "Deferring windlight settings request until we've got region caps" << LL_ENDL; - cur_region->setCapabilitiesReceivedCallback([cb](const LLUUID ®ion_id) { LLEnvironmentRequest::onRegionCapsReceived(region_id, cb); }); + cur_region->setCapabilitiesReceivedCallback([cb](const LLUUID ®ion_id, LLViewerRegion* regionp) { LLEnvironmentRequest::onRegionCapsReceived(region_id, cb); }); return false; } diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 8e64265bf2..be66720237 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -1022,7 +1022,10 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples) mFXAABuffer.release(); } - if (shadow_detail > 0 || ssao || RenderDepthOfField || samples > 0) +// if (shadow_detail > 0 || ssao || RenderDepthOfField || samples > 0) +// [RLVa:KB] - @setsphere + if (shadow_detail > 0 || ssao || RenderDepthOfField || samples > 0 || RlvActions::hasPostProcess()) +// [/RLVa:KB] { //only need mDeferredLight for shadows OR ssao OR dof OR fxaa if (!mDeferredLight.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE)) return false; } diff --git a/indra/newview/rlvactions.cpp b/indra/newview/rlvactions.cpp index 690250c164..f7fc62d28b 100644 --- a/indra/newview/rlvactions.cpp +++ b/indra/newview/rlvactions.cpp @@ -18,6 +18,7 @@ #include "llagent.h" #include "llimview.h" #include "llviewercamera.h" +#include "llvisualeffect.h" #include "llvoavatarself.h" #include "llworld.h" @@ -133,6 +134,20 @@ bool RlvActions::canChangeActiveGroup(const LLUUID& idRlvObject) return (idRlvObject.isNull()) ? !gRlvHandler.hasBehaviour(RLV_BHVR_SETGROUP) : !gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETGROUP, idRlvObject); } +bool RlvActions::canGiveInventory() +{ + // User can give at least one (unspecified) avatar inventory if: + // - not specifically restricted from giving inventory (or at least one exception exists) + return (!gRlvHandler.hasBehaviour(RLV_BHVR_SHARE)) || (gRlvHandler.hasException(RLV_BHVR_SHARE)); +} + +bool RlvActions::canGiveInventory(const LLUUID& idAgent) +{ + // User can give another avatar inventory if: + // - not specifically restricted from giving inventory (or the target is an exception) + return (!gRlvHandler.hasBehaviour(RLV_BHVR_SHARE)) || (gRlvHandler.isException(RLV_BHVR_SHARE, idAgent)); +} + // Little helper function to check the IM exclusion range for @recvim, @sendim and @startim (returns: min_dist <= (pos user - pos target) <= max_dist) static bool rlvCheckAvatarIMDistance(const LLUUID& idAvatar, ERlvBehaviourModifier eModDistMin, ERlvBehaviourModifier eModDistMax) { @@ -385,6 +400,11 @@ bool RlvActions::canChangeEnvironment(const LLUUID& idRlvObject) return (idRlvObject.isNull()) ? !gRlvHandler.hasBehaviour(RLV_BHVR_SETENV) : !gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETENV, idRlvObject); } +bool RlvActions::hasPostProcess() +{ + return LLVfxManager::instance().hasEffect(EVisualEffect::RlvSphere); +} + // ============================================================================ // World interaction // @@ -407,19 +427,53 @@ bool RlvActions::canBuyObject(const LLUUID& idObj) return (!RlvHandler::instance().hasBehaviour(RLV_BHVR_BUY)); } -// Handles: @edit and @editobj +// Handles: @edit, @editobj, @editattach and @editworld +bool RlvActions::canEdit(ERlvCheckType eCheckType) +{ + RlvHandler& rlvHandler = RlvHandler::instance(); + switch (eCheckType) + { + case ERlvCheckType::All: + // No edit restrictions of any kind + return + !rlvHandler.hasBehaviour(RLV_BHVR_EDIT) && !rlvHandler.hasBehaviour(RLV_BHVR_EDITOBJ) && + !rlvHandler.hasBehaviour(RLV_BHVR_EDITATTACH) && !rlvHandler.hasBehaviour(RLV_BHVR_EDITWORLD); + + case ERlvCheckType::Some: + // Not @edit restricted (or at least one exception) and either not @editattach or not @editworld restricted + return + (!rlvHandler.hasBehaviour(RLV_BHVR_EDIT) || rlvHandler.hasException(RLV_BHVR_EDIT)) && + (!rlvHandler.hasBehaviour(RLV_BHVR_EDITATTACH) || rlvHandler.hasBehaviour(RLV_BHVR_EDITWORLD)); + + case ERlvCheckType::Nothing: + // Either @edit restricted with no exceptions or @editattach and @editworld restricted at the same time + return + (rlvHandler.hasBehaviour(RLV_BHVR_EDIT) && !rlvHandler.hasException(RLV_BHVR_EDIT)) || + (rlvHandler.hasBehaviour(RLV_BHVR_EDITATTACH) && rlvHandler.hasBehaviour(RLV_BHVR_EDITWORLD)); + + default: + RLV_ASSERT(false); + return false; + } +} + +// Handles: @edit, @editobj, @editattach and @editworld bool RlvActions::canEdit(const LLViewerObject* pObj) { // User can edit the specified object if: // - not generally restricted from editing (or the object's root is an exception) // - not specifically restricted from editing this object's root + // - it's an attachment and not restricted from editing attachments + // it's a rezzed object and not restricted from editing any world objects // NOTE-RLVa: edit checks should *never* be subject to @fartouch distance checks since we don't have the pick offset so // instead just implicitly rely on the presence of a (transient) selection return (pObj) && ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_EDIT)) || (RlvHandler::instance().isException(RLV_BHVR_EDIT, pObj->getRootEdit()->getID())) ) && - ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_EDITOBJ)) || (!RlvHandler::instance().isException(RLV_BHVR_EDITOBJ, pObj->getRootEdit()->getID())) ); + ( (!RlvHandler::instance().hasBehaviour(RLV_BHVR_EDITOBJ)) || (!RlvHandler::instance().isException(RLV_BHVR_EDITOBJ, pObj->getRootEdit()->getID())) ) && + ( (pObj->isAttachment()) ? !RlvHandler::instance().hasBehaviour(RLV_BHVR_EDITATTACH) + : !RlvHandler::instance().hasBehaviour(RLV_BHVR_EDITWORLD) ); } // Handles: @fartouch and @interact @@ -466,6 +520,12 @@ bool RlvActions::canGroundSit() return (!hasBehaviour(RLV_BHVR_SIT)) && (canStand()); } +bool RlvActions::canGroundSit(const LLUUID& idRlvObjExcept) +{ + // See canGroundSit() but disregard any restrictions held by the issuing object + return (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_SIT, idRlvObjExcept)) && (canStand(idRlvObjExcept)); +} + bool RlvActions::canSit(const LLViewerObject* pObj, const LLVector3& posOffset /*=LLVector3::zero*/) { // User can sit on the specified object if: @@ -519,8 +579,8 @@ bool RlvActions::canTouch(const LLViewerObject* pObj, const LLVector3& posOffset // (2) Attachment (on another avatar) // - a) not prevented from touching any object // - b) not specifically prevented from touching that object - // - d) not prevented from touching attachments (or the attachment is an exception) - // - e) not prevented from touching other avatar's attachments (or the attachment is an exception) + // - d) not prevented from touching attachments (or the attachment and/or its wearer is/are an exception) + // - e) not prevented from touching other avatar's attachments (or the attachment is worn by a specific avatar on the exception list) // - h) not prevented from touching faraway objects (or the attachment's center + pick offset is within range) // - i) specifically allowed to touch that object (overrides all restrictions) // (3) Attachment (on own avatar) @@ -538,7 +598,7 @@ bool RlvActions::canTouch(const LLViewerObject* pObj, const LLVector3& posOffset // NOTE-RLVa: * touch restrictions apply linkset-wide (as opposed to, for instance, hover text which is object-specific) but only the root object's restrictions are tested // * @touchall affects world objects and world attachments (self and others') but >not< HUD attachments // * @fartouch distance matches against the specified object + pick offset (so >not< the linkset root) - // * @touchattachother exceptions are only checked under the general @touchattach exceptions + // * @touchattachother exceptions change when they specify an avatar id (=block all) or an object id (=allow indiviual - see general @touchattach exceptions) // * @touchattachself exceptions are only checked under the general @touchattach exceptions // * @touchme in any object of a linkset affects that entire linkset (= if you can specifically touch one prim in a linkset you can touch that entire linkset) const LLUUID& idRoot = (pObj) ? pObj->getRootEdit()->getID() : LLUUID::null; @@ -551,12 +611,23 @@ bool RlvActions::canTouch(const LLViewerObject* pObj, const LLVector3& posOffset ( (!rlvHandler.hasBehaviour(RLV_BHVR_TOUCHTHIS)) || (!rlvHandler.isException(RLV_BHVR_TOUCHTHIS, idRoot, ERlvExceptionCheck::Permissive)) ); if (fCanTouch) { - if ( (!pObj->isAttachment()) || (!pObj->permYouOwner()) ) + if (!pObj->isAttachment()) { - // Rezzed or attachment worn by other - test for (1.c), (2.d), (2.e) and (1/2.h) + // Rezzed object - test for (1.c) and (1.h) fCanTouch = - ( (!pObj->isAttachment()) ? (!rlvHandler.hasBehaviour(RLV_BHVR_TOUCHWORLD)) || (rlvHandler.isException(RLV_BHVR_TOUCHWORLD, idRoot, ERlvExceptionCheck::Permissive)) - : ((!rlvHandler.hasBehaviour(RLV_BHVR_TOUCHATTACH)) && (!rlvHandler.hasBehaviour(RLV_BHVR_TOUCHATTACHOTHER))) || (rlvHandler.isException(RLV_BHVR_TOUCHATTACH, idRoot, ERlvExceptionCheck::Permissive)) ) && + ( (!rlvHandler.hasBehaviour(RLV_BHVR_TOUCHWORLD)) || (rlvHandler.isException(RLV_BHVR_TOUCHWORLD, idRoot, ERlvExceptionCheck::Permissive)) ) && + ( (!rlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) || (dist_vec_squared(gAgent.getPositionGlobal(), pObj->getPositionGlobal() + LLVector3d(posOffset)) <= s_nFartouchDist * s_nFartouchDist) ); + } + else if (!pObj->permYouOwner()) + { + // Attachment worn by other - test for (2.d), (2.e) and (2.h) + const LLUUID& idAttachAgent = static_cast(pObj->getRoot())->getID(); + fCanTouch = + ( + ( (!rlvHandler.hasBehaviour(RLV_BHVR_TOUCHATTACH) && !rlvHandler.hasBehaviour(RLV_BHVR_TOUCHATTACHOTHER)) || + (rlvHandler.isException(RLV_BHVR_TOUCHATTACH, idRoot, ERlvExceptionCheck::Permissive) || rlvHandler.isException(RLV_BHVR_TOUCHATTACH, idAttachAgent, ERlvExceptionCheck::Permissive)) ) && + (!rlvHandler.isException(RLV_BHVR_TOUCHATTACHOTHER, idAttachAgent)) + ) && ( (!rlvHandler.hasBehaviour(RLV_BHVR_FARTOUCH)) || (dist_vec_squared(gAgent.getPositionGlobal(), pObj->getPositionGlobal() + LLVector3d(posOffset)) <= s_nFartouchDist * s_nFartouchDist) ); } else if (!pObj->isHUDAttachment()) diff --git a/indra/newview/rlvactions.h b/indra/newview/rlvactions.h index 39fd2beac7..9ff7e18939 100644 --- a/indra/newview/rlvactions.h +++ b/indra/newview/rlvactions.h @@ -34,6 +34,8 @@ class LLVOAvatar; // RlvActions class declaration - developer-friendly non-RLVa code facing class, use in lieu of RlvHandler whenever possible // +enum class ERlvCheckType { All, Some, Nothing }; + class RlvActions { // ====== @@ -90,6 +92,16 @@ public: */ static bool canChangeActiveGroup(const LLUUID& idRlvObject = LLUUID::null); + /* + * Returns true if the user is allowed to give inventory to at least one (unspecified) avatar (used to blanket ban use of 'Share' if the user cannot give items to *anyone*) + */ + static bool canGiveInventory(); + + /* + * Returns true if the user is allowed to give the specified avatar inventory + */ + static bool canGiveInventory(const LLUUID& idAgent); + /* * Returns true if the user is allowed to receive IMs from the specified sender (can be an avatar or a group) */ @@ -225,6 +237,10 @@ public: */ static bool canChangeEnvironment(const LLUUID& idRlvObject = LLUUID::null); + /* + * Returns true if a postprocessing shader is currently active + */ + static bool hasPostProcess(); // ================= // World interaction @@ -246,6 +262,11 @@ public: */ static bool canBuyObject(const LLUUID& idObj); + /* + * Returns true if the user can edit all, some, or nothing (used to bail early, or to skip expensive selection checks) + */ + static bool canEdit(ERlvCheckType eCheckType); + /* * Returns true if the user can edit the specified object (with an optional relative offset) */ @@ -255,6 +276,7 @@ public: * Returns true if the user can sit on the ground */ static bool canGroundSit(); + static bool canGroundSit(const LLUUID& idRlvObjExcept); /* * Returns true if the user can interact with the specified object (with an optional relative offset) diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index c0e19fe324..4977a42632 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -129,6 +129,7 @@ enum ERlvBehaviour { RLV_BHVR_SENDGESTURE, RLV_BHVR_PERMISSIVE, // "permissive" RLV_BHVR_NOTIFY, // "notify" + RLV_BHVR_SHARE, RLV_BHVR_SHOWINV, // "showinv" RLV_BHVR_SHOWMINIMAP, // "showminimap" RLV_BHVR_SHOWWORLDMAP, // "showworldmap" @@ -156,7 +157,9 @@ enum ERlvBehaviour { RLV_BHVR_ALLOWIDLE, // "allowidle" RLV_BHVR_BUY, // "buy" RLV_BHVR_EDIT, // "edit" + RLV_BHVR_EDITATTACH, RLV_BHVR_EDITOBJ, // "editobj" + RLV_BHVR_EDITWORLD, RLV_BHVR_VIEWTRANSPARENT, RLV_BHVR_VIEWWIREFRAME, RLV_BHVR_PAY, // "pay" @@ -176,6 +179,7 @@ enum ERlvBehaviour { RLV_BHVR_SETGROUP, // "setgroup" RLV_BHVR_UNSIT, // "unsit" RLV_BHVR_SIT, // "sit" + RLV_BHVR_SITGROUND, RLV_BHVR_SITTP, // "sittp" RLV_BHVR_STANDTP, // "standtp" RLV_BHVR_SETDEBUG, // "setdebug" @@ -248,6 +252,7 @@ enum ERlvBehaviour { // Effects RLV_BHVR_SETSPHERE, // Gives an object exclusive control of the 'vision spheres' effect RLV_BHVR_SETOVERLAY, // Gives an object exclusive control of the overlay + RLV_BHVR_SETOVERLAY_TOUCH, // Determines whether the overlay texture's alpha channel will be used to allow/block world interaction RLV_BHVR_SETOVERLAY_TWEEN, // Animate between the current overlay settings and the supplied values RLV_BHVR_COUNT, @@ -288,7 +293,6 @@ enum class ERlvLocalBhvrModifier OverlayAlpha, // Transparency level of the overlay texture (in addition to the texture's own alpha channel) OverlayTexture, // Specifies the UUID of the overlay texture OverlayTint, // The tint that's applied to the overlay texture - OverlayTouch, // Determines whether the overlay texture's alpha channel will be used to allow/block world interaction // @setsphere SphereMode, // The type of effect that will apply to any pixel that intersects with the sphere (e.g. blend, blur, ...) SphereOrigin, // The origin of the sphere can either be the avatar or the camera position @@ -459,6 +463,8 @@ namespace RlvStringKeys /*inline*/ constexpr boost::string_view RecvIm = make_string_view("blocked_recvim"); /*inline*/ constexpr boost::string_view RecvImRemote = make_string_view("blocked_recvim_remote"); /*inline*/ constexpr boost::string_view SendIm = make_string_view("blocked_sendim"); + /*inline*/ constexpr boost::string_view Share = make_string_view("blocked_share"); + /*inline*/ constexpr boost::string_view ShareGeneric = make_string_view("blocked_share_generic"); /*inline*/ constexpr boost::string_view StartConference = make_string_view("blocked_startconf"); /*inline*/ constexpr boost::string_view StartIm = make_string_view("blocked_startim"); /*inline*/ constexpr boost::string_view Teleport = make_string_view("blocked_teleport"); @@ -476,6 +482,8 @@ namespace RlvStringKeys constexpr const char RecvIm[] = "blocked_recvim"; constexpr const char RecvImRemote[] = "blocked_recvim_remote"; constexpr const char SendIm[] = "blocked_sendim"; + constexpr const char Share[] = "blocked_share"; + constexpr const char ShareGeneric[] = "blocked_share_generic"; constexpr const char StartConference[] = "blocked_startconf"; constexpr const char StartIm[] = "blocked_startim"; constexpr const char Teleport[] = "blocked_teleport"; diff --git a/indra/newview/rlveffects.cpp b/indra/newview/rlveffects.cpp index 70e9030144..b3ad464646 100644 --- a/indra/newview/rlveffects.cpp +++ b/indra/newview/rlveffects.cpp @@ -58,15 +58,6 @@ ERlvCmdRet RlvOverlayEffect::onAlphaValueChanged(const LLUUID& idRlvObj, const b return RLV_RET_SUCCESS; } -// static -ERlvCmdRet RlvOverlayEffect::onBlockTouchValueChanged(const LLUUID& idRlvObj, const boost::optional newValue) -{ - if (RlvOverlayEffect* pEffect = LLVfxManager::instance().getEffect(idRlvObj)) - { - pEffect->m_fBlockTouch = (newValue) ? boost::get(newValue.value()) : false; - } - return RLV_RET_SUCCESS; -} // static ERlvCmdRet RlvOverlayEffect::onColorValueChanged(const LLUUID& idRlvObj, const boost::optional newValue) { diff --git a/indra/newview/rlveffects.h b/indra/newview/rlveffects.h index d4378da88f..e0649ad90b 100644 --- a/indra/newview/rlveffects.h +++ b/indra/newview/rlveffects.h @@ -39,10 +39,10 @@ public: public: bool hitTest(const LLCoordGL& ptMouse) const; void run(const LLVisualEffectParams*) override; + void setBlockTouch(bool block_touch) { m_fBlockTouch = block_touch; } void tweenAlpha(float endAlpha, double duration) { m_nAlpha.start(endAlpha, duration); } void tweenColor(LLColor3 endColor, double duration) { m_Color.start(endColor, duration); } static ERlvCmdRet onAlphaValueChanged(const LLUUID& idRlvObj, const boost::optional newValue); - static ERlvCmdRet onBlockTouchValueChanged(const LLUUID& idRlvObj, const boost::optional newValue); static ERlvCmdRet onColorValueChanged(const LLUUID& idRlvObj, const boost::optional newValue); static ERlvCmdRet onTextureChanged(const LLUUID& idRlvObj, const boost::optional newValue); protected: diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index fd92632ec0..2d6bbb39a6 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -901,10 +901,7 @@ void RlvHandler::setCameraOverride(bool fOverride) // Checked: 2010-08-29 (RLVa-1.2.1c) | Modified: RLVa-1.2.1c void RlvHandler::onSitOrStand(bool fSitting) { - if (rlv_handler_t::isEnabled()) - { - RlvSettings::updateLoginLastLocation(); - } + RlvSettings::updateLoginLastLocation(); if ( (hasBehaviour(RLV_BHVR_STANDTP)) && (!fSitting) && (!m_posSitSource.isExactlyZero()) ) { @@ -916,6 +913,30 @@ void RlvHandler::onSitOrStand(bool fSitting) doOnIdleOneTime(boost::bind(RlvUtil::forceTp, m_posSitSource)); m_posSitSource.setZero(); } + else if ( (!fSitting) && (m_fPendingGroundSit) ) + { + gAgent.setControlFlags(AGENT_CONTROL_SIT_ON_GROUND); + send_agent_update(TRUE, TRUE); + + m_fPendingGroundSit = false; + m_idPendingSitActor = m_idPendingUnsitActor; + } + + if (isAgentAvatarValid()) + { + const LLViewerObject* pSitObj = static_cast(gAgentAvatarp->getParent()); + const LLUUID& idSitObj = (pSitObj) ? pSitObj->getID() : LLUUID::null; + if (fSitting) + { + RlvBehaviourNotifyHandler::instance().onSit(idSitObj, !gRlvHandler.hasBehaviourExcept(RLV_BHVR_SIT, m_idPendingSitActor)); + m_idPendingSitActor.setNull(); + } + else + { + RlvBehaviourNotifyHandler::instance().onStand(idSitObj, !gRlvHandler.hasBehaviourExcept(RLV_BHVR_UNSIT, m_idPendingUnsitActor)); + m_idPendingUnsitActor.setNull(); + } + } } // Checked: 2010-03-11 (RLVa-1.2.0a) | Modified: RLVa-1.2.0a @@ -2083,7 +2104,7 @@ ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvCommand& } // Refresh overlay effects according to object hierarchy - std::list effects; + std::list effects; if (LLVfxManager::instance().getEffects(effects)) { auto itActiveEffect = std::find_if(effects.begin(), effects.end(), [](const LLVisualEffect* pEffect) { return pEffect->getEnabled(); }); @@ -2094,17 +2115,30 @@ ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvCommand& } const LLUUID idActiveRootObj = (effects.end() != itActiveEffect) ? Rlv::getObjectRootId((*itActiveEffect)->getId()) : LLUUID::null; - for (LLVisualEffect* pEffect : effects) + for (RlvOverlayEffect* pEffect : effects) { bool isActive = (idActiveRootObj.isNull() && pEffect == effects.front()) || (Rlv::getObjectRootId(pEffect->getId()) == idActiveRootObj); int nPriority = (isActive) ? 256 - Rlv::getObjectLinkNumber(pEffect->getId()) : pEffect->getPriority(); LLVfxManager::instance().updateEffect(pEffect, isActive, nPriority); + pEffect->setBlockTouch(gRlvHandler.hasBehaviour(pEffect->getId(), RLV_BHVR_SETOVERLAY_TOUCH)); } } return eRet; } +// Handles: @setoverlay_touch=n +template<> template<> +ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvCommand& rlvCmd, bool& fRefCount) +{ + if (RlvOverlayEffect* pOverlayEffect = LLVfxManager::instance().getEffect(rlvCmd.getObjectID())) + { + pOverlayEffect->setBlockTouch( RLV_TYPE_ADD == rlvCmd.getParamType() ); + } + + return RLV_RET_SUCCESS; +} + // Handles: @setsphere=n|y template<> template<> ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvCommand& rlvCmd, bool& fRefCount) @@ -2118,6 +2152,8 @@ ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvCommand& { if (gRlvHandler.hasBehaviour(rlvCmd.getObjectID(), rlvCmd.getBehaviourType())) { + LLVfxManager::instance().addEffect(new RlvSphereEffect(rlvCmd.getObjectID())); + Rlv::forceAtmosphericShadersIfAvailable(); // If we're not using deferred but are using Windlight shaders we need to force use of FBO and depthmap texture @@ -2131,8 +2167,13 @@ ERlvCmdRet RlvBehaviourHandler::onCommand(const RlvCommand& gPipeline.resetVertexBuffers(); LLViewerShaderMgr::instance()->setShaders(); } - - LLVfxManager::instance().addEffect(new RlvSphereEffect(rlvCmd.getObjectID())); + else if (!gPipeline.mDeferredLight.isComplete()) + { + // In case of deferred with no shadows, no ambient occlusion, no depth of field, and no antialiasing + gPipeline.releaseGLBuffers(); + gPipeline.createGLBuffers(); + RLV_ASSERT(gPipeline.mDeferredLight.isComplete()); + } } else { @@ -2794,6 +2835,9 @@ ERlvCmdRet RlvHandler::processForceCommand(const RlvCommand& rlvCmd) const { gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); send_agent_update(TRUE, TRUE); // See behaviour notes on why we have to force an agent update here + + gRlvHandler.m_idPendingSitActor.setNull(); + gRlvHandler.m_idPendingUnsitActor = gRlvHandler.getCurrentObject(); } } break; @@ -3236,6 +3280,34 @@ ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCm return (fValid) ? RLV_RET_SUCCESS : RLV_RET_FAILED_OPTION; } +// Handles: @sitground=force +template<> template<> +ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCmd) +{ + if ( (!RlvActions::canGroundSit(rlvCmd.getObjectID())) || (!isAgentAvatarValid()) ) + return RLV_RET_FAILED_LOCK; + + if (!gAgentAvatarp->isSitting()) + { + gAgent.setControlFlags(AGENT_CONTROL_SIT_ON_GROUND); + + gRlvHandler.m_fPendingGroundSit = false; + gRlvHandler.m_idPendingSitActor = gRlvHandler.getCurrentObject(); + gRlvHandler.m_idPendingUnsitActor.setNull(); + } + else if (gAgentAvatarp->getParent()) + { + gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); + + gRlvHandler.m_fPendingGroundSit = true; + gRlvHandler.m_idPendingSitActor.setNull(); + gRlvHandler.m_idPendingUnsitActor = gRlvHandler.getCurrentObject(); + } + send_agent_update(TRUE, TRUE); + + return RLV_RET_SUCCESS; +} + // Handles: @sit:=force template<> template<> ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCmd) @@ -3247,10 +3319,7 @@ ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCmd) LLViewerObject* pObj = NULL; if (idTarget.isNull()) { - if ( (!RlvActions::canGroundSit()) || ((isAgentAvatarValid()) && (gAgentAvatarp->isSitting())) ) - return RLV_RET_FAILED_LOCK; - gAgent.sitDown(); - send_agent_update(TRUE, TRUE); + return RlvForceHandler::onCommand(rlvCmd); } else if ( ((pObj = gObjectList.findObject(idTarget)) != NULL) && (LL_PCODE_VOLUME == pObj->getPCode())) { @@ -3273,6 +3342,9 @@ ERlvCmdRet RlvForceHandler::onCommand(const RlvCommand& rlvCmd) gMessageSystem->addUUIDFast(_PREHASH_TargetID, pObj->mID); gMessageSystem->addVector3Fast(_PREHASH_Offset, LLVector3::zero); pObj->getRegion()->sendReliableMessage(); + + gRlvHandler.m_idPendingSitActor = gRlvHandler.getCurrentObject(); + gRlvHandler.m_idPendingUnsitActor.setNull(); } else { diff --git a/indra/newview/rlvhandler.h b/indra/newview/rlvhandler.h index 01da4b6269..e5a6b0895e 100644 --- a/indra/newview/rlvhandler.h +++ b/indra/newview/rlvhandler.h @@ -266,6 +266,9 @@ protected: bool m_fCanCancelTp; // @accepttp=n and @tpto=force mutable LLVector3d m_posSitSource; // @standtp=n (mutable because onForceXXX handles are all declared as const) + bool m_fPendingGroundSit = false; // @sitground=force + LLUUID m_idPendingSitActor; // @sit=force and @sitground=force + LLUUID m_idPendingUnsitActor; // @unsit=force mutable LLUUID m_idAgentGroup; // @setgroup=n std::pair m_PendingGroupChange; // @setgroup=force std::pair m_GroupChangeExpiration; // @setgroup=force diff --git a/indra/newview/rlvhelper.cpp b/indra/newview/rlvhelper.cpp index f633d12770..7af251e9ca 100644 --- a/indra/newview/rlvhelper.cpp +++ b/indra/newview/rlvhelper.cpp @@ -106,7 +106,9 @@ RlvBehaviourDictionary::RlvBehaviourDictionary() addEntry(new RlvBehaviourInfo("detachthis_except", RLV_BHVR_DETACHTHISEXCEPT, RLV_TYPE_ADDREM, RlvBehaviourInfo::FORCEWEAR_NODE)); addEntry(new RlvBehaviourInfo("detachallthis_except", RLV_BHVR_DETACHTHISEXCEPT, RLV_TYPE_ADDREM, RlvBehaviourInfo::FORCEWEAR_SUBTREE)); addEntry(new RlvBehaviourGenericToggleProcessor("edit")); + addEntry(new RlvBehaviourGenericProcessor("editattach", RLV_BHVR_EDITATTACH)); addEntry(new RlvBehaviourGenericProcessor("editobj", RLV_BHVR_EDITOBJ)); + addEntry(new RlvBehaviourGenericProcessor("editworld", RLV_BHVR_EDITWORLD)); addEntry(new RlvBehaviourGenericToggleProcessor("viewtransparent", RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addEntry(new RlvBehaviourGenericToggleProcessor("viewwireframe", RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addEntry(new RlvBehaviourGenericProcessor("emote", RLV_BHVR_EMOTE)); @@ -142,6 +144,7 @@ RlvBehaviourDictionary::RlvBehaviourDictionary() addEntry(new RlvBehaviourGenericToggleProcessor("setdebug")); addEntry(new RlvBehaviourGenericToggleProcessor("setenv")); addEntry(new RlvBehaviourGenericProcessor("setgroup", RLV_BHVR_SETGROUP)); + addEntry(new RlvBehaviourGenericProcessor("share", RLV_BHVR_SHARE, RlvBehaviourInfo::BHVR_STRICT)); addEntry(new RlvBehaviourInfo("sharedunwear", RLV_BHVR_SHAREDUNWEAR, RLV_TYPE_ADDREM, RlvBehaviourInfo::BHVR_EXTENDED)); addEntry(new RlvBehaviourInfo("sharedwear", RLV_BHVR_SHAREDWEAR, RLV_TYPE_ADDREM, RlvBehaviourInfo::BHVR_EXTENDED)); addEntry(new RlvBehaviourProcessor("showhovertext")); @@ -169,7 +172,7 @@ RlvBehaviourDictionary::RlvBehaviourDictionary() addEntry(new RlvBehaviourGenericProcessor("temprun", RLV_BHVR_TEMPRUN)); addEntry(new RlvBehaviourGenericProcessor("touchall", RLV_BHVR_TOUCHALL)); addEntry(new RlvBehaviourGenericProcessor("touchattach", RLV_BHVR_TOUCHATTACH)); - addEntry(new RlvBehaviourGenericProcessor("touchattachother", RLV_BHVR_TOUCHATTACHOTHER)); + addEntry(new RlvBehaviourGenericProcessor("touchattachother", RLV_BHVR_TOUCHATTACHOTHER)); addEntry(new RlvBehaviourGenericProcessor("touchattachself", RLV_BHVR_TOUCHATTACHSELF)); addEntry(new RlvBehaviourGenericProcessor("touchfar", RLV_BHVR_FARTOUCH, RlvBehaviourInfo::BHVR_SYNONYM)); addEntry(new RlvBehaviourGenericProcessor("touchhud", RLV_BHVR_TOUCHHUD, RlvBehaviourInfo::BHVR_EXTENDED)); @@ -229,8 +232,8 @@ RlvBehaviourDictionary::RlvBehaviourDictionary() pSetOverlayBhvr->addModifier(ERlvLocalBhvrModifier::OverlayAlpha, typeid(float), "alpha", &RlvOverlayEffect::onAlphaValueChanged); pSetOverlayBhvr->addModifier(ERlvLocalBhvrModifier::OverlayTexture, typeid(LLUUID), "texture", &RlvOverlayEffect::onTextureChanged); pSetOverlayBhvr->addModifier(ERlvLocalBhvrModifier::OverlayTint, typeid(LLVector3), "tint", &RlvOverlayEffect::onColorValueChanged); - pSetOverlayBhvr->addModifier(ERlvLocalBhvrModifier::OverlayTouch, typeid(LLVector3), "touch", &RlvOverlayEffect::onBlockTouchValueChanged); addEntry(pSetOverlayBhvr); + addEntry(new RlvBehaviourProcessor("setoverlay_touch")); addEntry(new RlvForceProcessor("setoverlay_tween")); // Sphere @@ -293,6 +296,7 @@ RlvBehaviourDictionary::RlvBehaviourDictionary() addEntry(new RlvForceProcessor("setcam_mode", RlvBehaviourInfo::BHVR_EXPERIMENTAL)); addEntry(new RlvForceProcessor("setgroup")); addEntry(new RlvForceProcessor("sit")); + addEntry(new RlvForceProcessor("sitground")); addEntry(new RlvForceProcessor("tpto")); addEntry(new RlvBehaviourInfo("unsit", RLV_BHVR_UNSIT, RLV_TYPE_FORCE)); @@ -1927,6 +1931,22 @@ void RlvBehaviourNotifyHandler::onReattach(const LLViewerJointAttachment* pAttac sendNotification(llformat("reattached %s %s", (fAllowed) ? "legally" : "illegally", pAttachPt->getName().c_str())); } +void RlvBehaviourNotifyHandler::onSit(const LLUUID& idObj, bool fAllowed) +{ + if (idObj.isNull()) + sendNotification(llformat("sat ground %s", (fAllowed) ? "legally" : "illegally")); + else + sendNotification(llformat("sat object %s %s", (fAllowed) ? "legally" : "illegally", idObj.asString().c_str())); +} + +void RlvBehaviourNotifyHandler::onStand(const LLUUID& idObj, bool fAllowed) +{ + if (idObj.isNull()) + sendNotification(llformat("unsat ground %s", (fAllowed) ? "legally" : "illegally")); + else + sendNotification(llformat("unsat object %s %s", (fAllowed) ? "legally" : "illegally", idObj.asString().c_str())); +} + // ========================================================================= // Various helper classes/timers/functors // diff --git a/indra/newview/rlvhelper.h b/indra/newview/rlvhelper.h index c36cde75b0..d20ba1790b 100644 --- a/indra/newview/rlvhelper.h +++ b/indra/newview/rlvhelper.h @@ -625,11 +625,13 @@ public: * Event handlers */ public: - static void onWear(LLWearableType::EType eType, bool fAllowed); - static void onTakeOff(LLWearableType::EType eType, bool fAllowed); - static void onAttach(const LLViewerJointAttachment* pAttachPt, bool fAllowed); - static void onDetach(const LLViewerJointAttachment* pAttachPt, bool fAllowed); - static void onReattach(const LLViewerJointAttachment* pAttachPt, bool fAllowed); + static void onWear(LLWearableType::EType eType, bool fAllowed); + static void onTakeOff(LLWearableType::EType eType, bool fAllowed); + static void onAttach(const LLViewerJointAttachment* pAttachPt, bool fAllowed); + static void onDetach(const LLViewerJointAttachment* pAttachPt, bool fAllowed); + static void onReattach(const LLViewerJointAttachment* pAttachPt, bool fAllowed); + void onSit(const LLUUID& idObj, bool fAllowed); + void onStand(const LLUUID& idObj, bool fAllowed); protected: void onCommand(const RlvCommand& rlvCmd, ERlvCmdRet eRet, bool fInternal); diff --git a/indra/newview/skins/ansastorm/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/ansastorm/xui/en/panel_outfits_inventory.xml index aa8dbb34b4..ed7e3b6e8a 100644 --- a/indra/newview/skins/ansastorm/xui/en/panel_outfits_inventory.xml +++ b/indra/newview/skins/ansastorm/xui/en/panel_outfits_inventory.xml @@ -106,7 +106,7 @@