diff --git a/.github/workflows/build_viewer.yml b/.github/workflows/build_viewer.yml
index 4f76b9a085..4e08d2db9e 100644
--- a/.github/workflows/build_viewer.yml
+++ b/.github/workflows/build_viewer.yml
@@ -379,13 +379,13 @@ jobs:
- name: Install Microsoft.Trusted.Signing.Client
if: runner.os == 'Windows'
run: |
- .\nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.53 -OutputDirectory .
+ .\nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.86 -OutputDirectory .
shell: pwsh
- name: Locate Azure.CodeSigning.Dlib.dll
if: runner.os == 'Windows'
run: |
- $dllPath = (Get-ChildItem ".\Microsoft.Trusted.Signing.Client.1.0.53\bin\x64\Azure.CodeSigning.Dlib.dll" -Recurse -File | Select-Object -First 1).FullName
+ $dllPath = (Get-ChildItem ".\Microsoft.Trusted.Signing.Client.1.0.86\bin\x64\Azure.CodeSigning.Dlib.dll" -Recurse -File | Select-Object -First 1).FullName
if (-not $dllPath) {
Write-Error "Azure.CodeSigning.Dlib.dll not found."
exit 1
diff --git a/indra/llcommon/lluuid.h b/indra/llcommon/lluuid.h
index 52826e36e7..b8e335e67e 100644
--- a/indra/llcommon/lluuid.h
+++ b/indra/llcommon/lluuid.h
@@ -244,14 +244,4 @@ inline size_t hash_value(const LLUUID& id) noexcept
return (size_t)id.getDigest64();
}
-// UUID hash calculation
-struct FSUUIDHash
-{
- inline size_t operator() (const LLUUID& id) const
- {
- return *reinterpret_cast(id.mData);
- }
-};
-// UUID hash calculation
-
#endif // LL_LLUUID_H
diff --git a/indra/llinventory/llsettingsbase.cpp b/indra/llinventory/llsettingsbase.cpp
index a365bf5034..609a001ca7 100644
--- a/indra/llinventory/llsettingsbase.cpp
+++ b/indra/llinventory/llsettingsbase.cpp
@@ -361,14 +361,12 @@ LLSD LLSettingsBase::interpolateSDValue(const std::string& key_name, const LLSD
new_array = q.getValue();
}
else
- { // TODO: We could expand this to inspect the type and do a deep lerp based on type.
- // for now assume a heterogeneous array of reals.
+ {
size_t len = std::max(value.size(), other_value.size());
for (size_t i = 0; i < len; ++i)
{
-
- new_array[i] = lerp((F32)value[i].asReal(), (F32)other_value[i].asReal(), (F32)mix);
+ new_array[i] = interpolateSDValue(key_name, value[i], other_value[i], defaults, mix, skip, slerps);
}
}
diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp
index 97015dc68b..6a377a6f09 100644
--- a/indra/llinventory/llsettingssky.cpp
+++ b/indra/llinventory/llsettingssky.cpp
@@ -661,16 +661,15 @@ void LLSettingsSky::blend(LLSettingsBase::ptr_t &end, F64 blendf)
mHasLegacyHaze |= lerp_legacy_float(mHazeDensity, mLegacyHazeDensity, other->mHazeDensity, other->mLegacyHazeDensity, 0.7f, (F32)blendf);
mHasLegacyHaze |= lerp_legacy_float(mDistanceMultiplier, mLegacyDistanceMultiplier, other->mDistanceMultiplier, other->mLegacyDistanceMultiplier, 0.8f, (F32)blendf);
mHasLegacyHaze |= lerp_legacy_float(mDensityMultiplier, mLegacyDensityMultiplier, other->mDensityMultiplier, other->mLegacyDensityMultiplier, 0.0001f, (F32)blendf);
- mHasLegacyHaze |= lerp_legacy_color(mAmbientColor, mLegacyAmbientColor, other->mAmbientColor, other->mLegacyAmbientColor, LLColor3(0.25f, 0.25f, 0.25f), (F32)blendf);
+ mHasLegacyHaze |= lerp_legacy_color(mAmbientColor, mLegacyAmbientColor, other->mAmbientColor, other->mLegacyAmbientColor, LLColor3(0.25f, 0.25f, 0.25f), (F32)blendf); // import pending PR #4185 Fix sky ambient color not blending.
mHasLegacyHaze |= lerp_legacy_color(mBlueHorizon, mLegacyBlueHorizon, other->mBlueHorizon, other->mLegacyBlueHorizon, LLColor3(0.4954f, 0.4954f, 0.6399f), (F32)blendf);
mHasLegacyHaze |= lerp_legacy_color(mBlueDensity, mLegacyBlueDensity, other->mBlueDensity, other->mLegacyBlueDensity, LLColor3(0.2447f, 0.4487f, 0.7599f), (F32)blendf);
-
parammapping_t defaults = other->getParameterMap();
stringset_t skip = getSkipInterpolateKeys();
stringset_t slerps = getSlerpKeys();
- mAbsorptionConfigs = interpolateSDMap(mAbsorptionConfigs, other->mAbsorptionConfigs, defaults, blendf, skip, slerps);
- mMieConfigs = interpolateSDMap(mMieConfigs, other->mMieConfigs, defaults, blendf, skip, slerps);
- mRayleighConfigs = interpolateSDMap(mRayleighConfigs, other->mRayleighConfigs, defaults, blendf, skip, slerps);
+ mAbsorptionConfigs = interpolateSDValue("absorption_config", mAbsorptionConfigs, other->mAbsorptionConfigs, defaults, blendf, skip, slerps);
+ mMieConfigs = interpolateSDValue("mie_config", mMieConfigs, other->mMieConfigs, defaults, blendf, skip, slerps);
+ mRayleighConfigs = interpolateSDValue("rayleigh_config", mRayleighConfigs, other->mRayleighConfigs, defaults, blendf, skip, slerps);
setDirtyFlag(true);
setReplaced();
diff --git a/indra/llprimitive/lldaeloader.cpp b/indra/llprimitive/lldaeloader.cpp
index d0ff1945ea..fa53d85e37 100644
--- a/indra/llprimitive/lldaeloader.cpp
+++ b/indra/llprimitive/lldaeloader.cpp
@@ -1502,7 +1502,17 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
{
domListOfFloats& transform = t->getValue();
auto count = transform.getCount()/16;
-
+
+ // FIRE-34811 Crash during import due to missing inv_bind_matrices.
+ if (count==0)
+ {
+ LL_WARNS("DAELOader") << "Invalid rigged mesh: Missing inv_bind_matrices." << LL_ENDL;
+ LLSD args;
+ args["Message"] = "ParsingErrorEmptyInvBindInvalidModel";
+ mWarningsArray.append(args);
+ setLoadState( ERROR_PARSING );
+ }
+ //
for (size_t k = 0; k < count; ++k)
{
LLMatrix4 mat;
@@ -1520,7 +1530,14 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
}
}
}
-
+ // FIRE-34811 Crash during import due to missing inv_bind_matrices.
+ if (model->mSkinInfo.mInvBindMatrix.empty())
+ {
+ model->mSkinInfo.mJointNames.clear();
+ model->mSkinInfo.mJointNums.clear();
+ missingSkeletonOrScene = true; // set this true as we've just wiped that data.
+ }
+ //
//Now that we've parsed the joint array, let's determine if we have a full rig
//(which means we have all the joint sthat are required for an avatar versus
//a skinned asset attached to a node in a file that contains an entire skeleton,
diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp
index 6ac2672cc0..ebb5725acf 100644
--- a/indra/llprimitive/llmodel.cpp
+++ b/indra/llprimitive/llmodel.cpp
@@ -1587,7 +1587,7 @@ LLSD LLMeshSkinInfo::asLLSD(bool include_joints, bool lock_scale_if_joint_positi
for (U32 i = 0; i < mJointNames.size(); ++i)
{
ret[ "joint_names" ][ i ] = mJointNames[ i ];
-
+ if (mInvBindMatrix.size() < i) break; // FIRE-34811 Crash during import due to missing inv_bind_matrices.
for (U32 j = 0; j < 4; j++)
{
for (U32 k = 0; k < 4; k++)
diff --git a/indra/newview/NACLantispam.h b/indra/newview/NACLantispam.h
index 74b0592d3d..96516c8b69 100644
--- a/indra/newview/NACLantispam.h
+++ b/indra/newview/NACLantispam.h
@@ -66,8 +66,8 @@ private:
bool mBlocked;
};
-typedef std::unordered_map spam_queue_entry_map_t;
-typedef std::unordered_set collision_sound_set_t;
+typedef std::unordered_map spam_queue_entry_map_t;
+typedef std::unordered_set collision_sound_set_t;
class NACLAntiSpamQueue
{
diff --git a/indra/newview/fsassetblacklist.h b/indra/newview/fsassetblacklist.h
index 39ca880ae5..ea5392e96e 100644
--- a/indra/newview/fsassetblacklist.h
+++ b/indra/newview/fsassetblacklist.h
@@ -35,9 +35,9 @@
#include "llsingleton.h"
#include "llassettype.h"
-using blacklisted_uuid_container_t = std::unordered_set;
+using blacklisted_uuid_container_t = std::unordered_set;
using blacklist_type_map_t = std::map;
-using blacklist_data_t = std::unordered_map;
+using blacklist_data_t = std::unordered_map;
class FSAssetBlacklist : public LLSingleton
{
diff --git a/indra/newview/fscommon.cpp b/indra/newview/fscommon.cpp
index 4fc5740da1..d59ef02a5b 100644
--- a/indra/newview/fscommon.cpp
+++ b/indra/newview/fscommon.cpp
@@ -92,10 +92,10 @@ bool FSCommon::is_irc_me_prefix(std::string_view text)
std::string FSCommon::unescape_name(std::string_view name)
{
// bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_unescape(name.data(), static_cast(name.size())); // Calling data() should be ok here because we also pass the length
+ char* curl_str = curl_unescape(name.data(), static_cast(name.size())); // Calling data() should be ok here because we also pass the length
std::string unescaped_name(curl_str);
curl_free(curl_str);
- curl_str = NULL;
+ curl_str = nullptr;
return unescaped_name;
}
@@ -301,11 +301,12 @@ bool FSCommon::isLinden(const LLUUID& av_id)
if (LLGridManager::getInstance()->isInOpenSim())
{
LLViewerRegion* region = gAgent.getRegion();
- if (!region) return false;
- bool is_god = false;
+ if (!region)
+ return false;
+
+ bool is_god{ false };
// They may not be "Lindens" per se, but opensim has gods.
- std::set gods = region->getGods();
- if (!gods.empty())
+ if (std::set gods = region->getGods(); !gods.empty())
{
is_god = (gods.find(first_name + " " + last_name) != gods.end()
|| gods.find(last_name) != gods.end());
@@ -453,7 +454,7 @@ std::string FSCommon::getAvatarNameByDisplaySettings(const LLAvatarName& av_name
std::string name;
static LLCachedControl NameTagShowUsernames(gSavedSettings, "NameTagShowUsernames");
static LLCachedControl UseDisplayNames(gSavedSettings, "UseDisplayNames");
- if ((NameTagShowUsernames) && (UseDisplayNames))
+ if (NameTagShowUsernames && UseDisplayNames)
{
name = av_name.getCompleteName();
}
@@ -494,21 +495,21 @@ bool FSCommon::isDefaultTexture(const LLUUID& asset_id)
bool FSCommon::isLegacySkin()
{
- std::string current_skin = gSavedSettings.getString("FSInternalSkinCurrent");
- return (current_skin == "Vintage");
+ static bool is_legacy_skin = gSavedSettings.getString("FSInternalSkinCurrent") == "Vintage";
+ return is_legacy_skin;
}
bool FSCommon::isFilterEditorKeyCombo(KEY key, MASK mask)
{
- return (mask == MASK_CONTROL && key == 'F' && gSavedSettings.getBOOL("FSSelectLocalSearchEditorOnShortcut"));
+ static LLCachedControl select_search_on_shortcut(gSavedSettings, "FSSelectLocalSearchEditorOnShortcut");
+ return (mask == MASK_CONTROL && key == 'F' && select_search_on_shortcut);
}
LLUUID FSCommon::getGroupForRezzing()
{
LLUUID group_id{ gAgent.getGroupID() };
- LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
- if (parcel && gSavedSettings.getBOOL("RezUnderLandGroup"))
+ if (LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); parcel && gSavedSettings.getBOOL("RezUnderLandGroup"))
{
// In both cases, group-owned or not, the group ID is the same;
// No need to query the parcel owner ID as it will be either
diff --git a/indra/newview/fsradar.h b/indra/newview/fsradar.h
index a3069839db..260617859d 100644
--- a/indra/newview/fsradar.h
+++ b/indra/newview/fsradar.h
@@ -63,7 +63,7 @@ class FSRadar
virtual ~FSRadar();
public:
- typedef std::unordered_map, FSUUIDHash> entry_map_t;
+ typedef std::unordered_map> entry_map_t;
entry_map_t getRadarList() { return mEntryList; }
void startTracking(const LLUUID& avatar_id);
@@ -130,7 +130,7 @@ private:
bool lastIgnore;
};
- typedef std::unordered_map radarfields_map_t;
+ typedef std::unordered_map radarfields_map_t;
radarfields_map_t mLastRadarSweep;
entry_map_t mEntryList;
diff --git a/indra/newview/lggcontactsets.h b/indra/newview/lggcontactsets.h
index bed8cbdbbe..51983bcf2f 100644
--- a/indra/newview/lggcontactsets.h
+++ b/indra/newview/lggcontactsets.h
@@ -52,7 +52,7 @@ class LGGContactSets : public LLSingleton
public:
typedef std::vector string_vec_t;
- typedef std::unordered_set uuid_set_t;
+ typedef std::unordered_set uuid_set_t;
void loadFromDisk();
@@ -157,7 +157,7 @@ private:
LLSD exportToLLSD();
void saveToDisk();
- typedef std::unordered_map uuid_map_t;
+ typedef std::unordered_map uuid_map_t;
typedef std::map contact_set_map_t;
contact_set_map_t mContactSets;
diff --git a/indra/newview/llagentbenefits.cpp b/indra/newview/llagentbenefits.cpp
index 01a701094d..5716617de1 100644
--- a/indra/newview/llagentbenefits.cpp
+++ b/indra/newview/llagentbenefits.cpp
@@ -305,7 +305,10 @@ S32 LLAgentBenefits::get2KTextureUploadCost(S32 area) const
{
if (m_2k_texture_upload_cost.empty())
{
- return m_texture_upload_cost;
+ // OpenSim legacy economy
+ //return m_texture_upload_cost;
+ return getTextureUploadCost();
+ //
}
return m_2k_texture_upload_cost[0];
}
diff --git a/indra/newview/llheroprobemanager.cpp b/indra/newview/llheroprobemanager.cpp
index 477a348c72..8633fe00cb 100644
--- a/indra/newview/llheroprobemanager.cpp
+++ b/indra/newview/llheroprobemanager.cpp
@@ -60,7 +60,7 @@ static void touch_default_probe(LLReflectionMap* probe)
}
}
-LLHeroProbeManager::LLHeroProbeManager():mMirrorNormal(0,0,1) // [FIRE-35007][#3331] mirrors not working after relog. make sure the mirror normal is not zero length
+LLHeroProbeManager::LLHeroProbeManager()
{
}
diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h
index f0406cd56c..f878d4edb5 100644
--- a/indra/newview/llpanelgroupgeneral.h
+++ b/indra/newview/llpanelgroupgeneral.h
@@ -127,7 +127,7 @@ private:
S32 sortMembersList(S32,const LLScrollListItem*,const LLScrollListItem*);
LLGroupMgrGroupData::member_list_t::iterator mMemberProgress;
- typedef std::unordered_map avatar_name_cache_connection_map_t;
+ typedef std::unordered_map avatar_name_cache_connection_map_t;
avatar_name_cache_connection_map_t mAvatarNameCacheConnections;
bool mPendingMemberUpdate;
diff --git a/indra/newview/llperfstats.h b/indra/newview/llperfstats.h
index 1e99fa343a..a1eb0348dc 100644
--- a/indra/newview/llperfstats.h
+++ b/indra/newview/llperfstats.h
@@ -245,7 +245,7 @@ namespace LLPerfStats
static void updateMeanFrameTime(U64 tot_frame_time_raw);
// StatsArray is a uint64_t for each possible statistic type.
using StatsArray = std::array(LLPerfStats::StatType_t::STATS_COUNT)>;
- using StatsMap = std::unordered_map; //
+ using StatsMap = std::unordered_map; //
using StatsTypeMatrix = std::array(LLPerfStats::ObjType_t::OT_COUNT)>;
using StatsSummaryArray = std::array(LLPerfStats::ObjType_t::OT_COUNT)>;
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index fa28def9ab..5e211c3678 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -742,6 +742,10 @@ bool idle_startup()
gSavedSettings.setBOOL("FSInternalShowNavbarFavoritesPanel", gSavedSettings.getBOOL("ShowNavbarFavoritesPanel"));
//
+ // Added to determine if toolbar gets hidden when empty
+ if (gToolBarView)
+ gToolBarView->setHideBottomOnEmpty(FSCommon::isLegacySkin());
+
if (LLFeatureManager::getInstance()->isSafe())
{
LLNotificationsUtil::add("DisplaySetToSafe");
diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp
index 03210d1d65..a2e5ceb2a3 100644
--- a/indra/newview/lltoolbarview.cpp
+++ b/indra/newview/lltoolbarview.cpp
@@ -131,9 +131,6 @@ bool LLToolBarView::postBuild()
// Member variable needed for console chat bottom offset
mBottomChatStack = findChild("bottom_chat_stack");
- // Added to determine if toolbar gets hidden when empty
- mHideBottomOnEmpty = FSCommon::isLegacySkin();
-
return true;
}
diff --git a/indra/newview/lltoolbarview.h b/indra/newview/lltoolbarview.h
index f75babb56b..0d2d080f52 100644
--- a/indra/newview/lltoolbarview.h
+++ b/indra/newview/lltoolbarview.h
@@ -102,9 +102,12 @@ public:
bool isModified() const;
// Getters for member variables needed for console chat bottom offset
- LLView* getBottomChatStack() const { return mBottomChatStack; };
+ LLView* getBottomChatStack() const { return mBottomChatStack; }
//
+ // Added to determine if toolbar gets hidden when empty
+ void setHideBottomOnEmpty(bool hideBottomOnEmpty) { mHideBottomOnEmpty = hideBottomOnEmpty; }
+
protected:
friend class LLUICtrlFactory;
LLToolBarView(const Params&);
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index fd3aa94931..03173d68b1 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -420,7 +420,7 @@ void LLViewerTextureList::dump()
LL_CONT << image->getNumVolumes(index) << " ";
}
// [FIRE-35081]
- LL_CONT << " http://asset.siva.lindenlab.com/" << image->getID() << ".texture"
+ LL_CONT << " " << image->getID().asString().substr(0, 7)
<< LL_ENDL;
// [FIRE-35081] Blurry prims not changing with graphics settings
image_counts[(image->getDiscardLevel() + 1)] += 1; // Need to add +1 to make up for -1 being a possible value
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index bf2a84a013..83097a3d6f 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -7327,11 +7327,16 @@ void LLViewerWindow::setUIVisibility(bool visible)
// LLPanelTopInfoBar::getInstance()->setVisible(visible? gSavedSettings.getBOOL("ShowMiniLocationPanel") : false);
mStatusBarContainer->setVisible(visible);
- // hide utility bar if we are on a skin that uses it, e.g. Vintage
- LLView* utilityBarStack = mRootView->findChildView("chat_bar_utility_bar_stack");
- if (utilityBarStack)
+ // hide utility bar if we are on a skin that uses it, i.e. Vintage
+ // Beq Note: Added a skin check to fix FIRE-29517 "hitch when entering mouselook"
+ // This was caused having to search for a non-existent childview. If another skin other than vintage
+ // ever needs chat_bar_utility_bar_stack in the future, this will need to be updated.
+ if (FSCommon::isLegacySkin())
{
- utilityBarStack->setVisible(visible);
+ if (LLView* utilityBarStack = mRootView->findChildView("chat_bar_utility_bar_stack"); utilityBarStack)
+ {
+ utilityBarStack->setVisible(visible);
+ }
}
//
}
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 250474db34..03bc3da515 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -596,7 +596,6 @@ with the same filename but different name
-
diff --git a/indra/newview/skins/default/xui/de/floater_model_preview.xml b/indra/newview/skins/default/xui/de/floater_model_preview.xml
index 53622246f7..d8df9fb063 100644
--- a/indra/newview/skins/default/xui/de/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_model_preview.xml
@@ -145,6 +145,9 @@
Netz kann nicht ohne Positionsdaten verarbeitet werden - ungültiges Modell.
+
+ Geriggtes Netz kann nicht ohne InvBind-Daten verarbeitet werden - ungültiges Modell.
+
diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml
index 8d6e1ad28b..e6907da4a3 100644
--- a/indra/newview/skins/default/xui/en/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml
@@ -65,6 +65,9 @@
Document has no root
Document has no visual_scene
Unable to process mesh without position data. Invalid model.
+
+ Unable to process rigged mesh without InvBind data. Invalid model.
+
+
+ Publier en tant que :
+
+
Description :
diff --git a/indra/newview/skins/default/xui/ja/panel_primfeed_photo.xml b/indra/newview/skins/default/xui/ja/panel_primfeed_photo.xml
index 6b0598446e..a2710529e0 100644
--- a/indra/newview/skins/default/xui/ja/panel_primfeed_photo.xml
+++ b/indra/newview/skins/default/xui/ja/panel_primfeed_photo.xml
@@ -24,6 +24,10 @@
+
+ 投稿者:
+
+
説明:
diff --git a/indra/newview/skins/default/xui/pl/floater_model_preview.xml b/indra/newview/skins/default/xui/pl/floater_model_preview.xml
index b9a9f72051..c311aefa6f 100644
--- a/indra/newview/skins/default/xui/pl/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_model_preview.xml
@@ -48,6 +48,7 @@
Dokument nie ma elementu głównego
Dokument nie zawiera visual_scene
Nie można przetworzyć meszu bez danych pozycji. Nieprawidłowy model.
+Nie można przetworzyć meszu bez danych InvBind. Nieprawidłowy model.
diff --git a/indra/newview/skins/default/xui/ru/floater_about_land.xml b/indra/newview/skins/default/xui/ru/floater_about_land.xml
index 48621028c2..eb03b2160e 100644
--- a/indra/newview/skins/default/xui/ru/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ru/floater_about_land.xml
@@ -468,6 +468,7 @@
+
@@ -480,6 +481,7 @@
+
diff --git a/indra/newview/skins/default/xui/ru/floater_fs_poser.xml b/indra/newview/skins/default/xui/ru/floater_fs_poser.xml
index 2e3836c827..92d2e757fe 100644
--- a/indra/newview/skins/default/xui/ru/floater_fs_poser.xml
+++ b/indra/newview/skins/default/xui/ru/floater_fs_poser.xml
@@ -207,10 +207,13 @@
Чувствительность трекпада:
-
+
+
+
+
diff --git a/indra/newview/skins/default/xui/ru/panel_primfeed_photo.xml b/indra/newview/skins/default/xui/ru/panel_primfeed_photo.xml
index c28efa81e1..6fec014580 100644
--- a/indra/newview/skins/default/xui/ru/panel_primfeed_photo.xml
+++ b/indra/newview/skins/default/xui/ru/panel_primfeed_photo.xml
@@ -13,6 +13,8 @@
+ Опубликовать как:
+
Описание:
diff --git a/indra/newview/skins/default/xui/ru/panel_region_access.xml b/indra/newview/skins/default/xui/ru/panel_region_access.xml
index 793c5345e7..07a2919730 100644
--- a/indra/newview/skins/default/xui/ru/panel_region_access.xml
+++ b/indra/newview/skins/default/xui/ru/panel_region_access.xml
@@ -11,6 +11,7 @@
+
@@ -26,6 +27,7 @@
+
@@ -41,6 +43,7 @@
+
@@ -59,6 +62,7 @@
+
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index ea1960b5d6..4d1ff35b6e 100644
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -6877,5 +6877,10 @@ ID объекта: [INSPECTING_KEY]
[NUM_ELEMENTS] элементов
команда поддержки оператора вашей сетки
Неограниченный
+
Список пуст
+ В импортированном файле не найдено действительных UUID.
+ Слишком много записей. CSV-файл содержит [COUNT] записей, а доступно [MAX] слотов.
+ Успешно обработано [COUNT] записей.
+
diff --git a/indra/newview/skins/default/xui/zh/panel_primfeed_photo.xml b/indra/newview/skins/default/xui/zh/panel_primfeed_photo.xml
index 40de4cfee8..0221026a81 100644
--- a/indra/newview/skins/default/xui/zh/panel_primfeed_photo.xml
+++ b/indra/newview/skins/default/xui/zh/panel_primfeed_photo.xml
@@ -15,6 +15,10 @@
+
+ 發布為:
+
+
描述: