From 406927f6293efa416b174cfa1c88689aab9615f7 Mon Sep 17 00:00:00 2001
From: Adam Moss <moss@lindenlab.com>
Date: Wed, 14 Oct 2009 10:40:56 +0000
Subject: [PATCH] Merge a big bunch of fixes from maint-viewer.  Hooray.

svn merge -r136066:136073 svn+ssh://svn.lindenlab.com/svn/linden/branches/maint-viewer/maint-viewer-24-qa-9

DEV-8553 New Server Tools - Prep Land For Sale
DEV-32942 (QAR-1521) Bad border crossings or TP / Ruthing issues
DEV-32942 (QAR-1521) Bad border crossings or TP / Ruthing issues
DEV-33239 VWR-13816: Resizing the Search Window Causes the Results to Refresh back to First Page
DEV-27746 Running a dev build of Second Life will make console window show up on non-dev builds (Windows)
DEV-33209 Linux 1.24.0.120778 client fails to run
DEV-29123 SVC-3871: Crash of viewer when clicking on ghost objects at (0,0,0) on a sim
DEV-35433 Attempting to upload wrong file type crashes viewer
DEV-33499 viewer2009 is not using KDU
DEV-33912 Griefing viewer crashes others' viewers with malformed sound files
DEV-3784 VWR-138: Animation Priority not working correctly, Can't create new AOs
DEV-20678 VWR-9069: Region variable says 'Region Name' in AR if no object is selected
DEV-19934 Help->About Second Life doesn't differentiate between 32- and 64-bit Vista
DEV-6604 Restored folders have 'Purge Item' and 'Restore Item' options
DEV-12867 VWR-5717: Selected Text is not replaced by Input text when Japanese IME is on
DEV-11894 Notecards/Texture windows don't open completely when opened from inventory
DEV-10641 VWR-4955: Local Chat doesn't show end of last conversation
DEV-30039 VWR-12620: Viewer build fails on Linux when compiled with -O2 (--type=Release)
DEV-20944 VWR-9065: (intermittent) Right Click >profile on avatar does not display profile
DEV-24828 Menu accelerator prefixes shouldn't be hard-coded
DEV-34529 VWR-14267: Clicking send in an IM window does not add the sent text to the line editor history
DEV-34124 Invite to group, search by name will not show resident if their first name is two characters
DEV-20930 VWR-9248: On Mac: the "--url" option causes a command line parsing error
DEV-35306 Adult keyword filter triggers multiple warnings
DEV-35503 VWR-3595: "Second Life requires True Color (32-bit) to run in a window" message is incorrect
DEV-35656 VWR-12995: FTBFS: error: format '%-3d' expects type 'int', but argument 3 has type 'size_t'
DEV-30043 VWR-12533: Linux viewer build for OpenAL fails during packaging unless FMOD library is available
DEV-31898 VWR-13202: Right clicking mouse triggers arrow key control events
DEV-32610 Keyboard shortcuts on OSX viewer overridden by OSX
DEV-27067 Coverity Prevent: EVALUATION_ORDER defects
DEV-26188 VWR-2242: Specially formatted .BVH file can cause avatar distortion
DEV-25475 About Land dialog no longer shows Area: field
DEV-19897 OSX Viewer Installer (for an RC) opens with poor positioning
DEV-22837 Inventory> Search Recent Items highlighting incorrect characters
DEV-21709 VWR-9377: Mapping will default to leave exact sim name listing first. (Searching Gar forces Gar to come up and not Garden of Dreams)
DEV-23079 implement volume serial for linux client
DEV-13930 VWR-6432: Space Navigator operation with vehicles is broken
DEV-27666 VWR-10829: Linux Viewer: CLICK_ACTION_PAY shows CLICK_ACTION_PLAY icon
DEV-23670 Viewer crashes on startup if installed into a custom folder with Korean, Japanese or Chinese characters in path
DEV-19313 VWR-8454: PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS not highlighted in script editor
DEV-19918 VWR-8885: Move character/*.xml files to source bundle
DEV-25555 VWR-11172: A source coding mistake prevents number-pad keys from specifying Ctrl+digit shortcuts on Windows
DEV-8536 VWR-4057: Multi-line chat display bug - first character in line missing
DEV-29592 Mac LLFastTimer uses wall clock instead of Intel PMU
DEV-29644 VWR-12587: Cmake install target has a hard coded secondlife-bin reference remaining
DEV-25320 VWR-11128: Python not always detected by develop.py
DEV-30040 VWR-12617: Poor type name that violates Coding Standard breaks compatibility with system header files
DEV-30380 indra/newview/res-sdl/toolpay.BMP is modified during ./develop.py configure
DEV-31247 VWR-12763: non-portable printf specifier used with size_t causes FTBFS on 64bit (due to -Werror)
DEV-29565 VWR-12569: A comment in lluistring.h contains undefined UTF-8 code sequences
DEV-22100 VWR-9620: send_parcel_select_objects in newview/llfloaterland.cpp uses the wrong datatype for the ReturnType field causing a warning
DEV-31911 Selected objects / primitives should be greyed out when nothing is selected
DEV-3667 Windows: Accelerator keys should be "Ctrl+X" rather than "Ctrl-X"
DEV-27223 disable gstreamer on 64-bit linux
DEV-8172 We Need a Linden Sale Option to Sell Land to Anyone
DEV-25511 VWR-10311: Enable LipSync by default
DEV-20443 Revamp group creation confirmation dialog to be more communicative
DEV-20132 VWR-7800: Joystick / SpaceNavigator. Camera should remain in position when exiting flycam mode into avatar mode.
DEV-18420 VWR-8393: Have build scripts copy fmod from an external location
DEV-24841 VWR-10717: Right Space Navigator button should toggle fly in avatar movment, not jump/flyup.
DEV-28457 change auto-populate value in buy L$ window from 1000 to 2000
DEV-15545 VWR-3725: Please add resize option to the SEARCH window UI
---
 doc/contributions.txt                         |  56 +++-
 indra/cmake/00-Common.cmake                   |   2 +
 indra/cmake/LLWindow.cmake                    |   2 +-
 indra/cmake/Python.cmake                      |   4 +
 indra/linux_crash_logger/CMakeLists.txt       |   2 +-
 indra/llaudio/llaudiodecodemgr.cpp            |  35 ++-
 indra/llaudio/llvorbisencode.cpp              |   6 +-
 indra/llaudio/llvorbisencode.h                |  11 +
 indra/llcharacter/llbvhloader.cpp             |  13 +
 indra/llcharacter/llbvhloader.h               |   7 +-
 indra/llcharacter/llgesture.cpp               |   2 +-
 indra/llcharacter/lljointsolverrp3.cpp        |   2 +-
 indra/llcommon/llerror.h                      |   4 +-
 indra/llcommon/llstring.h                     |   1 +
 indra/llcommon/llsys.cpp                      |  39 ++-
 indra/llimage/llimage.cpp                     |   2 +-
 indra/llinventory/llparcel.cpp                |   1 -
 indra/llmath/llvolume.cpp                     |   2 +-
 indra/llmessage/lltemplatemessagebuilder.cpp  |   4 +-
 indra/llmessage/lltemplatemessagereader.cpp   |   7 +-
 indra/llrender/CMakeLists.txt                 |   2 +
 indra/llrender/llcubemap.cpp                  |   2 +-
 indra/llrender/llfontfreetype.cpp             |   5 +-
 indra/llrender/llfontgl.cpp                   |   1 +
 indra/llrender/llglheaders.h                  |   4 -
 indra/llrender/llimagegl.cpp                  |   2 +-
 indra/llui/lllineeditor.cpp                   |  64 ++--
 indra/llui/lllineeditor.h                     |   5 +-
 indra/llui/llmenugl.cpp                       |  42 +--
 indra/llui/llresmgr.cpp                       |   8 +
 indra/llui/lluistring.h                       |   4 +-
 indra/llvfs/CMakeLists.txt                    |   1 +
 indra/llvfs/lldir.cpp                         |  16 +-
 indra/llvfs/lldir.h                           |   1 +
 indra/llvfs/lldir_mac.cpp                     |   3 +-
 indra/llvfs/lldir_win32.cpp                   |  21 +-
 indra/llvfs/lldirguard.h                      |  78 +++++
 indra/llwindow/llkeyboard.cpp                 |  69 ++++-
 indra/llwindow/llkeyboard.h                   |   9 +-
 indra/llwindow/llkeyboardwin32.cpp            |   2 +-
 indra/llwindow/llwindowmacosx.cpp             |   6 +-
 indra/llwindow/llwindowsdl.cpp                |  18 +-
 indra/llxuixml/lltrans.h                      |   5 +
 indra/newview/CMakeLists.txt                  |  11 +-
 indra/newview/app_settings/keywords.ini       |   1 +
 indra/newview/app_settings/settings.xml       |  15 +-
 .../installers/darwin/firstlook-dmg/_DS_Store | Bin 12292 -> 12292 bytes
 .../darwin/publicnightly-dmg/_DS_Store        | Bin 12292 -> 12292 bytes
 .../darwin/releasecandidate-dmg/_DS_Store     | Bin 12292 -> 12292 bytes
 indra/newview/llagent.cpp                     |  21 +-
 indra/newview/llagent.h                       |   4 +-
 indra/newview/llappviewer.cpp                 |  20 +-
 indra/newview/llappviewerlinux.cpp            |  26 +-
 indra/newview/llappviewerlinux.h              |   5 +-
 indra/newview/llappviewerlinux_api_dbus.cpp   |   6 +-
 indra/newview/llappviewermacosx.cpp           |  19 +-
 indra/newview/lldrawpoolwater.cpp             |   2 +-
 indra/newview/llfloateranimpreview.cpp        |  10 +-
 indra/newview/llfloaterauction.cpp            | 293 +++++++++++++++++-
 indra/newview/llfloaterauction.h              |  16 +-
 indra/newview/llfloateravatarpicker.cpp       |  11 +-
 indra/newview/llfloateravatarpicker.h         |   2 +-
 indra/newview/llfloatergesture.cpp            |  25 +-
 indra/newview/llfloaterland.cpp               |   4 +-
 indra/newview/llfloaterreporter.cpp           |   1 +
 indra/newview/llfloatersellland.cpp           |   2 +-
 indra/newview/llfloatertools.cpp              |   5 +
 indra/newview/llfloaterworldmap.cpp           |  40 +--
 indra/newview/llfloaterworldmap.h             |   1 -
 indra/newview/llimpanel.cpp                   |   2 +
 indra/newview/llinventorybridge.cpp           |   2 +
 indra/newview/llinventoryfilter.cpp           |   7 +
 indra/newview/llmaniprotate.cpp               |   4 +-
 indra/newview/llpanelgroup.cpp                |   8 +-
 indra/newview/llpanelgroupgeneral.cpp         |   2 +-
 indra/newview/llpreviewgesture.cpp            |   2 +-
 indra/newview/llpreviewscript.cpp             |   4 +-
 indra/newview/llpreviewtexture.cpp            | 113 ++++++-
 indra/newview/llpreviewtexture.h              |   6 +-
 indra/newview/llselectmgr.cpp                 |   2 +-
 indra/newview/llsky.cpp                       |   3 +
 indra/newview/llsky.h                         |   6 +-
 indra/newview/llstartup.cpp                   |   7 +
 indra/newview/lltexturefetch.cpp              |   2 +-
 indra/newview/llviewercamera.cpp              |   5 +-
 indra/newview/llviewercontrol.cpp             |   2 +-
 indra/newview/llviewerjoystick.cpp            |  87 ++++--
 indra/newview/llviewerjoystick.h              |   5 +-
 indra/newview/llviewermedia.cpp               |   1 +
 indra/newview/llviewermenu.cpp                |  92 ++++++
 indra/newview/llviewermenufile.cpp            |   2 +-
 indra/newview/llviewerobjectlist.cpp          |  99 ++++--
 indra/newview/llviewerwindow.cpp              |   5 -
 indra/newview/llvoiceclient.cpp               |  28 +-
 indra/newview/llvosky.cpp                     |   2 +-
 indra/newview/llvosky.h                       |   2 +-
 indra/newview/llwaterparammanager.cpp         |   2 +-
 indra/newview/llwlparammanager.cpp            |   2 +-
 indra/newview/llxmlrpctransaction.cpp         |  10 +-
 indra/newview/llxmlrpctransaction.h           |   6 +-
 indra/newview/pipeline.cpp                    |   6 +-
 indra/newview/res-sdl/arrow.BMP               | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/arrowcop.BMP            | Bin 0 -> 3126 bytes
 indra/newview/res-sdl/arrowcopmulti.BMP       | Bin 0 -> 3126 bytes
 indra/newview/res-sdl/arrowdrag.BMP           | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/circleandline.BMP       | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/cross.BMP               | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/hand.BMP                | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/ibeam.BMP               | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/ll_icon.BMP             | Bin 0 -> 5174 bytes
 indra/newview/res-sdl/llarrow.BMP             | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/llarrowdrag.BMP         | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/llarrowdragmulti.BMP    | Bin 0 -> 3126 bytes
 indra/newview/res-sdl/llarrowlocked.BMP       | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/llgrablocked.BMP        | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/llno.BMP                | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/llnolocked.BMP          | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/lltoolcamera.BMP        | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/lltoolcreate.BMP        | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/lltoolfocus.BMP         | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/lltoolgrab.BMP          | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/lltoolland.BMP          | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/lltoolpan.BMP           | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/lltoolpipette.BMP       | Bin 0 -> 3126 bytes
 indra/newview/res-sdl/lltoolrotate.BMP        | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/lltoolscale.BMP         | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/lltooltranslate.BMP     | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/lltoolzoomin.BMP        | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/lltoolzoomout.BMP       | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/sizenesw.BMP            | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/sizens.BMP              | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/sizenwse.BMP            | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/sizewe.BMP              | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/toolmediaopen.BMP       | Bin 0 -> 3128 bytes
 indra/newview/res-sdl/toolpause.BMP           | Bin 0 -> 3128 bytes
 indra/newview/res-sdl/toolpickobject.BMP      | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/toolpickobject2.BMP     | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/toolpickobject3.BMP     | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/toolplay.BMP            | Bin 0 -> 3128 bytes
 indra/newview/res-sdl/wait.BMP                | Bin 0 -> 2102 bytes
 indra/newview/res-sdl/working.BMP             | Bin 0 -> 2102 bytes
 .../skins/default/xui/en/floater_auction.xml  |  42 ++-
 .../xui/en/floater_preview_texture.xml        |  62 +++-
 .../skins/default/xui/en/floater_tools.xml    |   2 -
 .../default/xui/en/floater_world_map.xml      |   3 +-
 .../skins/default/xui/en/menu_viewer.xml      |  69 ++++-
 .../skins/default/xui/en/notifications.xml    |  30 +-
 .../default/xui/en/panel_group_general.xml    |   2 +-
 .../xui/en/panel_preferences_advanced.xml     |  29 +-
 .../newview/skins/default/xui/en/strings.xml  |  16 +-
 indra/newview/viewer_manifest.py              |  16 +-
 indra/test/lltut.h                            |   2 +-
 install.xml                                   |  18 +-
 153 files changed, 1468 insertions(+), 459 deletions(-)
 create mode 100644 indra/llvfs/lldirguard.h
 create mode 100644 indra/newview/res-sdl/arrow.BMP
 create mode 100644 indra/newview/res-sdl/arrowcop.BMP
 create mode 100644 indra/newview/res-sdl/arrowcopmulti.BMP
 create mode 100644 indra/newview/res-sdl/arrowdrag.BMP
 create mode 100644 indra/newview/res-sdl/circleandline.BMP
 create mode 100644 indra/newview/res-sdl/cross.BMP
 create mode 100644 indra/newview/res-sdl/hand.BMP
 create mode 100644 indra/newview/res-sdl/ibeam.BMP
 create mode 100644 indra/newview/res-sdl/ll_icon.BMP
 create mode 100644 indra/newview/res-sdl/llarrow.BMP
 create mode 100644 indra/newview/res-sdl/llarrowdrag.BMP
 create mode 100644 indra/newview/res-sdl/llarrowdragmulti.BMP
 create mode 100644 indra/newview/res-sdl/llarrowlocked.BMP
 create mode 100644 indra/newview/res-sdl/llgrablocked.BMP
 create mode 100644 indra/newview/res-sdl/llno.BMP
 create mode 100644 indra/newview/res-sdl/llnolocked.BMP
 create mode 100644 indra/newview/res-sdl/lltoolcamera.BMP
 create mode 100644 indra/newview/res-sdl/lltoolcreate.BMP
 create mode 100644 indra/newview/res-sdl/lltoolfocus.BMP
 create mode 100644 indra/newview/res-sdl/lltoolgrab.BMP
 create mode 100644 indra/newview/res-sdl/lltoolland.BMP
 create mode 100644 indra/newview/res-sdl/lltoolpan.BMP
 create mode 100644 indra/newview/res-sdl/lltoolpipette.BMP
 create mode 100644 indra/newview/res-sdl/lltoolrotate.BMP
 create mode 100644 indra/newview/res-sdl/lltoolscale.BMP
 create mode 100644 indra/newview/res-sdl/lltooltranslate.BMP
 create mode 100644 indra/newview/res-sdl/lltoolzoomin.BMP
 create mode 100644 indra/newview/res-sdl/lltoolzoomout.BMP
 create mode 100644 indra/newview/res-sdl/sizenesw.BMP
 create mode 100644 indra/newview/res-sdl/sizens.BMP
 create mode 100644 indra/newview/res-sdl/sizenwse.BMP
 create mode 100644 indra/newview/res-sdl/sizewe.BMP
 create mode 100644 indra/newview/res-sdl/toolmediaopen.BMP
 create mode 100644 indra/newview/res-sdl/toolpause.BMP
 create mode 100644 indra/newview/res-sdl/toolpickobject.BMP
 create mode 100644 indra/newview/res-sdl/toolpickobject2.BMP
 create mode 100644 indra/newview/res-sdl/toolpickobject3.BMP
 create mode 100644 indra/newview/res-sdl/toolplay.BMP
 create mode 100644 indra/newview/res-sdl/wait.BMP
 create mode 100644 indra/newview/res-sdl/working.BMP

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 9b3087a0ac0..6b51e2649eb 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -1,7 +1,7 @@
 Linden Lab would like to acknowledge source code contributions from the
-following residents.   The Second Life resident name is given below,
+following residents. The Second Life resident name is given below,
 along with the issue identifier corresponding to the patches we've
-received from them.  To see more about these contributions, visit the
+received from them. To see more about these contributions, visit the
 browsable version: http://wiki.secondlife.com/wiki/Source_contributions
 
 Able Whitman
@@ -25,19 +25,25 @@ Aimee Trescothick
 	VWR-6348
 	VWR-6358
 	VWR-6360
+	VWR-6432
 	VWR-6550
 	VWR-6583
 	VWR-6482
 	VWR-7109
 	VWR-7383
+	VWR-7800
+	VWR-8008
 	VWR-8341
 	VWR-8430
 	VWR-8482
 	VWR-9255
+	VWR-10717
 	VWR-10990
 	VWR-11100
 	VWR-11111
- 	VWR-11844
+	VWR-11844
+	VWR-14267
+	VWR-14278
 	VWR-14087
 Alejandro Rosenthal
 	VWR-1184
@@ -45,9 +51,11 @@ Aleric Inglewood
 	VWR-10001
 	VWR-10759
 	VWR-10837
+	VWR-12691
 	VWR-13996
+	VWR-14426
 Ales Beaumont
-    VWR-9352
+	VWR-9352
 Alissa Sabre
 	VWR-81
 	VWR-83
@@ -69,7 +77,7 @@ Alissa Sabre
 	VWR-1351
 	VWR-1353
 	VWR-1410
-        VWR-1843
+	VWR-1843
 	VWR-2116
 	VWR-2826
 	VWR-3290
@@ -77,19 +85,25 @@ Alissa Sabre
 	VWR-3857
 	VWR-4010
 	VWR-5575
-        VWR-5929
-        VWR-6384
-        VWR-6385
+	VWR-5717
+	VWR-5929
+	VWR-6384
+	VWR-6385
 	VWR-6386
-        VWR-6430
+	VWR-6430
 	VWR-6858
-        VWR-6668
-        VWR-7086
-        VWR-7087
-        VWR-7153
-        VWR-7168
+	VWR-6668
+	VWR-7086
+	VWR-7087
+	VWR-7153
+	VWR-7168
 	VWR-9190
 	VWR-10728
+	VWR-11172
+	VWR-12569
+	VWR-12617
+	VWR-12620
+	VWR-12789
 Angus Boyd
 	VWR-592
 Ann Congrejo
@@ -147,6 +161,7 @@ Carjay McGinnis
 	VWR-4212
 	VWR-6154
 	VWR-9400
+	VWR-9620
 Catherine Pfeffer
 	VWR-1282
 	VWR-8624
@@ -294,6 +309,7 @@ Kerutsen Sellery
 	VWR-1350
 Khyota Wulluf
 	VWR-2085
+	VWR-8885
 	VWR-9256
 	VWR-9966
 Kunnis Basiat
@@ -336,6 +352,7 @@ McCabe Maxsted
 	VWR-7877
 	VWR-7893
 	VWR-8080
+	VWR-8454
 	VWR-8689
 	VWR-9007
 Michelle2 Zenovka
@@ -350,6 +367,7 @@ Michelle2 Zenovka
 	VWR-5082
 	VWR-5659
 	VWR-7831
+	VWR-8885
 	VWR-8889
 	VWR-8310
 	VWR-9499
@@ -464,7 +482,7 @@ Pf Shan
 	CT-321
 princess niven
 	VWR-5733
-        CT-85
+	CT-85
 	CT-320
 	CT-352
 Renault Clio
@@ -481,7 +499,11 @@ Ringo Tuxing
 Robin Cornelius
 	VWR-2488
 	VWR-9557
+	VWR-11128
+	VWR-12533
 	VWR-12587
+	VWR-12763
+	VWR-12995
 Ryozu Kojima
 	VWR-53
 	VWR-287
@@ -564,12 +586,16 @@ TBBle Kurosawa
 	VWR-1892
 Teardrops Fall
 	VWR-5366
+Techwolf Lupindo
+	SNOW-92
+	VWR-12385
 tenebrous pau
 	VWR-247
 Tharax Ferraris
 	VWR-605
 Thickbrick Sleaford
 	VWR-7109
+	VWR-9287
 	VWR-13947
 Thraxis Epsilon
 	SVC-371
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 2a70263446e..b168c085521 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -170,6 +170,8 @@ if (LINUX)
     if (NOT STANDALONE)
       # this stops us requiring a really recent glibc at runtime
       add_definitions(-fno-stack-protector)
+      # linking can be so slow - give us a chance to figure out why
+      set(CMAKE_CXX_LINK_FLAGS "-Wl,--stats,--no-keep-memory")
     endif (NOT STANDALONE)
   endif (VIEWER)
 
diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake
index c0efa27f6e0..a5b9cf47a42 100644
--- a/indra/cmake/LLWindow.cmake
+++ b/indra/cmake/LLWindow.cmake
@@ -13,9 +13,9 @@ if (STANDALONE)
       SDL_LIBRARY
       )
 else (STANDALONE)
-  use_prebuilt_binary(SDL)
   use_prebuilt_binary(mesa)
   if (LINUX AND VIEWER)
+    use_prebuilt_binary(SDL)
     set (SDL_FOUND TRUE)
     set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/i686-linux)
     set (SDL_LIBRARY SDL)
diff --git a/indra/cmake/Python.cmake b/indra/cmake/Python.cmake
index 4f86d3234e0..0901c1b7a21 100644
--- a/indra/cmake/Python.cmake
+++ b/indra/cmake/Python.cmake
@@ -13,6 +13,10 @@ if (WINDOWS)
     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath]
     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath]
     [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath]
+    [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath]
+    [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath]
+    [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath]
+    [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath]
     )
 elseif (EXISTS /etc/debian_version)
   # On Debian and Ubuntu, avoid Python 2.4 if possible.
diff --git a/indra/linux_crash_logger/CMakeLists.txt b/indra/linux_crash_logger/CMakeLists.txt
index 6f6754ed7ac..4b19e280660 100644
--- a/indra/linux_crash_logger/CMakeLists.txt
+++ b/indra/linux_crash_logger/CMakeLists.txt
@@ -38,7 +38,7 @@ list(APPEND linux_crash_logger_SOURCE_FILES
      ${linux_crash_logger_HEADER_FILES}
      )
 
-list(APPEND CMAKE_EXE_LINKER_FLAGS -Wl,--as-needed)
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed")
 
 add_executable(linux-crash-logger ${linux_crash_logger_SOURCE_FILES})
 
diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp
index 099c4eba400..ae959eaa81b 100644
--- a/indra/llaudio/llaudiodecodemgr.cpp
+++ b/indra/llaudio/llaudiodecodemgr.cpp
@@ -43,6 +43,8 @@
 #include "llassetstorage.h"
 #include "llrefcount.h"
 
+#include "llvorbisencode.h"
+
 #include "vorbis/codec.h"
 #include "vorbis/vorbisfile.h"
 
@@ -218,11 +220,42 @@ BOOL LLVorbisDecodeState::initDecode()
 		return(FALSE);
 	}
 	
-	size_t size_guess = (size_t)ov_pcm_total(&mVF, -1);
+	S32 sample_count = ov_pcm_total(&mVF, -1);
+	size_t size_guess = (size_t)sample_count;
 	vorbis_info* vi = ov_info(&mVF, -1);
 	size_guess *= vi->channels;
 	size_guess *= 2;
 	size_guess += 2048;
+	
+	bool abort_decode = false;
+	
+	if( vi->channels < 1 || vi->channels > LLVORBIS_CLIP_MAX_CHANNELS )
+	{
+		abort_decode = true;
+		llwarns << "Bad channel count: " << vi->channels << llendl;
+	}
+	
+	if( (size_t)sample_count > LLVORBIS_CLIP_REJECT_SAMPLES )
+	{
+		abort_decode = true;
+		llwarns << "Illegal sample count: " << sample_count << llendl;
+	}
+	
+	if( size_guess > LLVORBIS_CLIP_REJECT_SIZE )
+	{
+		abort_decode = true;
+		llwarns << "Illegal sample size: " << size_guess << llendl;
+	}
+	
+	if( abort_decode )
+	{
+		llwarns << "Canceling initDecode. Bad asset: " << mUUID << llendl;
+		llwarns << "Bad asset encoded by: " << ov_comment(&mVF,-1)->vendor << llendl;
+		delete mInFilep;
+		mInFilep = NULL;
+		return FALSE;
+	}
+	
 	mWAVBuffer.reserve(size_guess);
 	mWAVBuffer.resize(WAV_HEADER_SIZE);
 
diff --git a/indra/llaudio/llvorbisencode.cpp b/indra/llaudio/llvorbisencode.cpp
index 8ee082a2455..0c1ad8191c1 100644
--- a/indra/llaudio/llvorbisencode.cpp
+++ b/indra/llaudio/llvorbisencode.cpp
@@ -162,13 +162,13 @@ S32 check_for_invalid_wav_formats(const std::string& in_fname, std::string& erro
 		  return(LLVORBISENC_PCM_FORMAT_ERR);
 	}
 	
-	if ((num_channels < 1) || (num_channels > 2))
+	if ((num_channels < 1) || (num_channels > LLVORBIS_CLIP_MAX_CHANNELS))
 	{	
 		error_msg = "SoundFileInvalidChannelCount";
 		return(LLVORBISENC_MULTICHANNEL_ERR);
 	}
 
-	if (sample_rate != 44100)
+	if (sample_rate != LLVORBIS_CLIP_SAMPLE_RATE)
 	{	
 		error_msg = "SoundFileInvalidSampleRate";
 		return(LLVORBISENC_UNSUPPORTED_SAMPLE_RATE);
@@ -188,7 +188,7 @@ S32 check_for_invalid_wav_formats(const std::string& in_fname, std::string& erro
 
 	F32 clip_length = (F32)raw_data_length/(F32)bytes_per_sec;
 		
-	if (clip_length > 10.0f)
+	if (clip_length > LLVORBIS_CLIP_MAX_TIME)
 	{
 		error_msg = "SoundFileInvalidTooLong";
 		return(LLVORBISENC_CLIP_TOO_LONG);		 
diff --git a/indra/llaudio/llvorbisencode.h b/indra/llaudio/llvorbisencode.h
index ff5ce3a0533..6531c1919e3 100644
--- a/indra/llaudio/llvorbisencode.h
+++ b/indra/llaudio/llvorbisencode.h
@@ -45,6 +45,17 @@ const S32 LLVORBISENC_UNSUPPORTED_SAMPLE_RATE      = 8; // unsupported sample ra
 const S32 LLVORBISENC_UNSUPPORTED_WORD_SIZE        = 9; // unsupported word size
 const S32 LLVORBISENC_CLIP_TOO_LONG                = 10; // source file is too long
 
+const F32 LLVORBIS_CLIP_MAX_TIME                               = 10.0f;
+const U8  LLVORBIS_CLIP_MAX_CHANNELS                   = 2;
+const U32 LLVORBIS_CLIP_SAMPLE_RATE                            = 44100;
+const U32 LLVORBIS_CLIP_MAX_SAMPLES_PER_CHANNEL        = (U32)(LLVORBIS_CLIP_MAX_TIME * LLVORBIS_CLIP_SAMPLE_RATE);
+const U32 LLVORBIS_CLIP_MAX_SAMPLES                            = LLVORBIS_CLIP_MAX_SAMPLES_PER_CHANNEL * LLVORBIS_CLIP_MAX_CHANNELS;
+const size_t LLVORBIS_CLIP_MAX_SAMPLE_DATA             = LLVORBIS_CLIP_MAX_SAMPLES * 2; // 2 = 16-bit
+ 
+// Treat anything this long as a bad asset. A little fudge factor at the end:
+// Make that a lot of fudge factor. We're allowing 30 sec for now - 3x legal upload
+const size_t LLVORBIS_CLIP_REJECT_SAMPLES              = LLVORBIS_CLIP_MAX_SAMPLES * 3;
+const size_t LLVORBIS_CLIP_REJECT_SIZE                 = LLVORBIS_CLIP_MAX_SAMPLE_DATA * 3;
 
 S32 check_for_invalid_wav_formats(const std::string& in_fname, std::string& error_msg);
 S32 encode_vorbis_file(const std::string& in_fname, const std::string& out_fname);
diff --git a/indra/llcharacter/llbvhloader.cpp b/indra/llcharacter/llbvhloader.cpp
index 24391eb8f32..3dd54b47605 100644
--- a/indra/llcharacter/llbvhloader.cpp
+++ b/indra/llcharacter/llbvhloader.cpp
@@ -91,7 +91,9 @@ const char *LLBVHLoader::ST_NO_XLT_EASEIN		= "Can't get easeIn values.";
 const char *LLBVHLoader::ST_NO_XLT_EASEOUT	= "Can't get easeOut values.";
 const char *LLBVHLoader::ST_NO_XLT_HAND		= "Can't get hand morph value.";
 const char *LLBVHLoader::ST_NO_XLT_EMOTE		= "Can't read emote name.";
+const char *LLBVHLoader::ST_BAD_ROOT        = "Illegal ROOT joint.";
 */
+
 //------------------------------------------------------------------------
 // find_next_whitespace()
 //------------------------------------------------------------------------
@@ -777,6 +779,17 @@ ELoadStatus LLBVHLoader::loadBVHFile(const char *buffer, char* error_text, S32 &
 			return E_ST_NO_NAME;
 		}
 
+		//---------------------------------------------------------------
+		// we require the root joint be "hip" - DEV-26188
+		//---------------------------------------------------------------
+		const char* FORCED_ROOT_NAME = "hip";
+		if ( (mJoints.size() == 0 ) && ( !strstr(jointName, FORCED_ROOT_NAME) ) )
+		{
+			strncpy(error_text, line.c_str(), 127);	/* Flawfinder: ignore */
+			return E_ST_BAD_ROOT;
+		}
+
+		
 		//----------------------------------------------------------------
 		// add a set of keyframes for this joint
 		//----------------------------------------------------------------
diff --git a/indra/llcharacter/llbvhloader.h b/indra/llcharacter/llbvhloader.h
index ecdfc95478e..85ab035e61c 100644
--- a/indra/llcharacter/llbvhloader.h
+++ b/indra/llcharacter/llbvhloader.h
@@ -216,7 +216,8 @@ typedef enum e_load_status
 		E_ST_NO_XLT_EASEIN,
 		E_ST_NO_XLT_EASEOUT,
 		E_ST_NO_XLT_HAND,
-		E_ST_NO_XLT_EMOTE
+		E_ST_NO_XLT_EMOTE,
+		E_ST_BAD_ROOT
 	} ELoadStatus;
 
 //------------------------------------------------------------------------
@@ -235,7 +236,7 @@ class LLBVHLoader
 
 /*	
 	// Status Codes
-	typedef const char *Status;
+	typedef const char *status_t;
 	static const char *ST_OK;
 	static const char *ST_EOF;
 	static const char *ST_NO_CONSTRAINT;
@@ -267,6 +268,7 @@ class LLBVHLoader
 	static const char *ST_NO_XLT_EASEOUT;
 	static const char *ST_NO_XLT_HAND;
 	static const char *ST_NO_XLT_EMOTE;
+	static const char *ST_BAD_ROOT;
 */
 	// Loads the specified translation table.
 	ELoadStatus loadTranslationTable(const char *fileName);
@@ -325,6 +327,7 @@ class LLBVHLoader
 
 	BOOL				mInitialized;
 	ELoadStatus			mStatus;
+
 	// computed values
 	F32	mDuration;
 };
diff --git a/indra/llcharacter/llgesture.cpp b/indra/llcharacter/llgesture.cpp
index 4ee29fe100d..83e4e35b005 100644
--- a/indra/llcharacter/llgesture.cpp
+++ b/indra/llcharacter/llgesture.cpp
@@ -304,7 +304,7 @@ BOOL LLGestureList::trigger(KEY key, MASK mask)
 		}
 		else
 		{
-			llwarns << "NULL gesture in gesture list (" << i << ")" << llendl
+			llwarns << "NULL gesture in gesture list (" << i << ")" << llendl;
 		}
 	}
 	return FALSE;
diff --git a/indra/llcharacter/lljointsolverrp3.cpp b/indra/llcharacter/lljointsolverrp3.cpp
index 0ea92a2d772..6599a76b169 100644
--- a/indra/llcharacter/lljointsolverrp3.cpp
+++ b/indra/llcharacter/lljointsolverrp3.cpp
@@ -211,7 +211,7 @@ void LLJointSolverRP3::solve()
 	//-------------------------------------------------------------------------
 	LLVector3 abacCompOrthoVec = abVec - acVec * ((abVec * acVec)/(acVec * acVec));
 
-//	llinfos << "abacCompOrthoVec : " << abacCompOrthoVec << llendl
+//	llinfos << "abacCompOrthoVec : " << abacCompOrthoVec << llendl;
 
 	//-------------------------------------------------------------------------
 	// compute the normal of the original ABC plane (and store for later)
diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h
index 6794be49049..37e922d4b71 100644
--- a/indra/llcommon/llerror.h
+++ b/indra/llcommon/llerror.h
@@ -239,7 +239,7 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
 */
 
 #define lllog(level, broadTag, narrowTag, once) \
-	{ \
+	do { \
 		static LLError::CallSite _site( \
 			level, __FILE__, __LINE__, typeid(_LL_CLASS_TO_LOG), __FUNCTION__, broadTag, narrowTag, once);\
 		if (_site.shouldLog()) \
@@ -252,7 +252,7 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
 			LLError::End(); \
 			LLError::Log::flush(_out, _site); \
 		} \
-	}
+	} while(0)
 
 // DEPRECATED: Use the new macros that allow tags and *look* like macros.
 #define lldebugs	lllog(LLError::LEVEL_DEBUG, NULL, NULL, false)
diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h
index 8f70726a9e5..eca7e922fd4 100644
--- a/indra/llcommon/llstring.h
+++ b/indra/llcommon/llstring.h
@@ -34,6 +34,7 @@
 #define LL_LLSTRING_H
 
 #include <string>
+#include <cstdio>
 #include <locale>
 #include <iomanip>
 #include "llsd.h"
diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp
index 4d03c4d40db..47374212893 100644
--- a/indra/llcommon/llsys.cpp
+++ b/indra/llcommon/llsys.cpp
@@ -124,9 +124,42 @@ LLOSInfo::LLOSInfo() :
 			}
 			else if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0)
 			{
-				 if(osvi.wProductType == VER_NT_WORKSTATION)
-					mOSStringSimple = "Microsoft Windows Vista ";
-				 else mOSStringSimple = "Microsoft Windows Vista Server ";
+				///get native system info if available..
+				typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); ///function pointer for loading GetNativeSystemInfo
+				SYSTEM_INFO si; //System Info object file contains architecture info
+				PGNSI pGNSI; //pointer object
+				ZeroMemory(&si, sizeof(SYSTEM_INFO)); //zero out the memory in information
+				pGNSI = (PGNSI) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),  "GetNativeSystemInfo"); //load kernel32 get function
+				if(NULL != pGNSI) //check if it has failed
+					pGNSI(&si); //success
+				else 
+					GetSystemInfo(&si); //if it fails get regular system info 
+				//(Warning: If GetSystemInfo it may result in incorrect information in a WOW64 machine, if the kernel fails to load)
+
+				//msdn microsoft finds 32 bit and 64 bit flavors this way..
+				//http://msdn.microsoft.com/en-us/library/ms724429(VS.85).aspx (example code that contains quite a few more flavors
+				//of windows than this code does (in case it is needed for the future)
+				if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 ) //check for 64 bit
+				{
+					 if(osvi.wProductType == VER_NT_WORKSTATION)
+						mOSStringSimple = "Microsoft Windows Vista 64-bit ";
+					 else 
+						mOSStringSimple = "Microsoft Windows Vista Server 64-bit ";
+				}
+				else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL )
+				{
+					 if(osvi.wProductType == VER_NT_WORKSTATION)
+						mOSStringSimple = "Microsoft Windows Vista 32-bit ";
+					 else 
+						mOSStringSimple = "Microsoft Windows Vista Server 32-bit ";
+				}
+				else // PROCESSOR_ARCHITECTURE_IA64 || PROCESSOR_ARCHITECTURE_UNKNOWN not checked
+				{
+					 if(osvi.wProductType == VER_NT_WORKSTATION)
+						mOSStringSimple = "Microsoft Windows Vista ";
+					 else 
+						mOSStringSimple = "Microsoft Windows Vista Server ";
+				}
 			}
 			else   // Use the registry on early versions of Windows NT.
 			{
diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index 488f3bf78d6..9bbc55509dd 100644
--- a/indra/llimage/llimage.cpp
+++ b/indra/llimage/llimage.cpp
@@ -159,7 +159,7 @@ U8* LLImageBase::allocateData(S32 size)
 		size = mWidth * mHeight * mComponents;
 		if (size <= 0)
 		{
-			llerrs << llformat("LLImageBase::allocateData called with bad dimentions: %dx%dx%d",mWidth,mHeight,mComponents) << llendl;
+			llerrs << llformat("LLImageBase::allocateData called with bad dimensions: %dx%dx%d",mWidth,mHeight,mComponents) << llendl;
 		}
 	}
 	else if (size <= 0 || (size > 4096*4096*16 && sSizeOverride == FALSE))
diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp
index e48690908e4..f208d82084c 100644
--- a/indra/llinventory/llparcel.cpp
+++ b/indra/llinventory/llparcel.cpp
@@ -706,7 +706,6 @@ void LLParcel::packMessage(LLSD& msg)
 	msg["category"] = (U8)mCategory;
 	msg["auth_buyer_id"] = mAuthBuyerID;
 	msg["snapshot_id"] = mSnapshotID;
-	msg["snapshot_id"] = mSnapshotID;
 	msg["user_location"] = ll_sd_from_vector3(mUserLocation);
 	msg["user_look_at"] = ll_sd_from_vector3(mUserLookAt);
 	msg["landing_type"] = (U8)mLandingType;
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 5cc0a596fdb..b8ef92f9a98 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -4273,7 +4273,7 @@ LLFaceID LLVolume::generateFaceMask()
 		}
 		break;
 	default:
-		llerrs << "Unknown profile!" << llendl
+		llerrs << "Unknown profile!" << llendl;
 		break;
 	}
 
diff --git a/indra/llmessage/lltemplatemessagebuilder.cpp b/indra/llmessage/lltemplatemessagebuilder.cpp
index e6419807fff..6400310c465 100644
--- a/indra/llmessage/lltemplatemessagebuilder.cpp
+++ b/indra/llmessage/lltemplatemessagebuilder.cpp
@@ -728,9 +728,9 @@ static S32 buildBlock(U8* buffer, S32 buffer_size, const LLMessageBlock* templat
 					    // out gracefully from this function. XXXTBD
 						llerrs << "buildBlock failed. "
 							<< "Attempted to pack "
-							<< result + mvci.getSize()
+							<< (result + mvci.getSize())
 							<< " bytes into a buffer with size "
-							<< buffer_size << "." << llendl
+							<< buffer_size << "." << llendl;
 					}						
 				}
 			}
diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp
index 8c9eb7ed422..6682575ca58 100644
--- a/indra/llmessage/lltemplatemessagereader.cpp
+++ b/indra/llmessage/lltemplatemessagereader.cpp
@@ -678,12 +678,7 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
 
 						// default to 0s.
 						U32 size = mvci.getSize();
-						std::vector<U8> data(size);
-						if(size)
-						{
-							// Nonsense test to get past GCC 4.3.1 bug with -O3
-							memset(&(data[0]), 0, size);
-						}
+						std::vector<U8> data(size, 0);
 						cur_data_block->addData(mvci.getName(), &(data[0]), 
 												size, mvci.getType());
 					}
diff --git a/indra/llrender/CMakeLists.txt b/indra/llrender/CMakeLists.txt
index aac650bec96..5c13df9f81f 100644
--- a/indra/llrender/CMakeLists.txt
+++ b/indra/llrender/CMakeLists.txt
@@ -9,6 +9,7 @@ include(LLCommon)
 include(LLImage)
 include(LLMath)
 include(LLRender)
+include(LLVFS)
 include(LLWindow)
 include(LLXML)
 include(LLVFS)
@@ -19,6 +20,7 @@ include_directories(
     ${LLIMAGE_INCLUDE_DIRS}
     ${LLMATH_INCLUDE_DIRS}
     ${LLRENDER_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
     ${LLWINDOW_INCLUDE_DIRS}
     ${LLXML_INCLUDE_DIRS}
     ${LLVFS_INCLUDE_DIRS}
diff --git a/indra/llrender/llcubemap.cpp b/indra/llrender/llcubemap.cpp
index 754d90c8540..08a96b4e319 100644
--- a/indra/llrender/llcubemap.cpp
+++ b/indra/llrender/llcubemap.cpp
@@ -106,7 +106,7 @@ void LLCubeMap::initGL()
 	}
 	else
 	{
-		llwarns << "Using cube map without extension!" << llendl
+		llwarns << "Using cube map without extension!" << llendl;
 	}
 }
 
diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp
index 44e997340ed..1246cfc44bc 100644
--- a/indra/llrender/llfontfreetype.cpp
+++ b/indra/llrender/llfontfreetype.cpp
@@ -364,7 +364,7 @@ BOOL LLFontFreetype::addChar(llwchar wch) const
 	glyph_index = FT_Get_Char_Index(mFTFace, wch);
 	if (glyph_index == 0)
 	{
-		//llinfos << "Trying to add glyph from fallback font!" << llendl
+		//llinfos << "Trying to add glyph from fallback font!" << llendl;
 		font_vector_t::const_iterator iter;
 		for(iter = mFallbackFonts.begin(); iter != mFallbackFonts.end(); iter++)
 		{
@@ -534,11 +534,10 @@ void LLFontFreetype::renderGlyph(U32 glyph_index) const
 void LLFontFreetype::reset(F32 vert_dpi, F32 horz_dpi)
 {
 	resetBitmapCache(); 
+	loadFace(mName, mPointSize, vert_dpi ,horz_dpi, mFontBitmapCachep->getNumComponents(), mIsFallback);
 	if (!mIsFallback)
 	{
 		// This is the head of the list - need to rebuild ourself and all fallbacks.
-		loadFace(mName, mPointSize, vert_dpi ,horz_dpi, mFontBitmapCachep->getNumComponents(), mIsFallback);
-
 		if (mFallbackFonts.empty())
 		{
 			llwarns << "LLFontGL::reset(), no fallback fonts present" << llendl;
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index f7bab3de67c..2d7b9760e8d 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -44,6 +44,7 @@
 #include "llstl.h"
 #include "v4color.h"
 #include "lltexture.h"
+#include "lldir.h"
 
 // Third party library includes
 #include <boost/tokenizer.hpp>
diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h
index c7178a55520..f33ae7d8f02 100644
--- a/indra/llrender/llglheaders.h
+++ b/indra/llrender/llglheaders.h
@@ -53,8 +53,6 @@
 #   include "GL/glxext.h"
 //#   define  GLH_EXT_GET_PROC_ADDRESS(p) glXGetProcAddressARB((const GLubyte*)(p))
 #   define  GLH_EXT_GET_PROC_ADDRESS(p) glXGetProcAddress((const GLubyte*)(p))
-//  the X headers define 'Status'.  Undefine to avoid confusion.
-#undef Status
 
 // The __APPLE__ kludge is to make glh_extensions.h not symbol-clash horribly
 // This header is distributed with SL.  You'll find it in linden/libraries/include/GL/
@@ -277,8 +275,6 @@ extern PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT;
 // Use glXGetProcAddressARB instead of glXGetProcAddress - the ARB symbol
 // is considered 'legacy' but works on more machines.
 # define GLH_EXT_GET_PROC_ADDRESS(p) glXGetProcAddressARB((const GLubyte*)(p))
-// Whee, the X headers define 'Status'.  Undefine to avoid confusion.
-#undef Status
 #endif // LL_LINUX && !LL_MESA_HEADLESS
 
 #if LL_LINUX && defined(WINGDIAPI)
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index dd64d753c74..e5fea5b995e 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -428,7 +428,7 @@ void LLImageGL::setSize(S32 width, S32 height, S32 ncomponents)
 		// Check if dimensions are a power of two!
 		if (!checkSize(width,height))
 		{
-			llerrs << llformat("Texture has non power of two dimention: %dx%d",width,height) << llendl;
+			llerrs << llformat("Texture has non power of two dimension: %dx%d",width,height) << llendl;
 		}
 		
 		if (mTexName)
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index 693ea5bb452..0db515ab412 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -148,6 +148,7 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p)
 	mBgImage( p.background_image ),
 	mBgImageDisabled( p.background_image_disabled ),
 	mBgImageFocused( p.background_image_focused ),
+	mHaveHistory(FALSE),
 	mReplaceNewlinesWithSpaces( TRUE ),
 	mLabel(p.label),
 	mCursorColor(p.cursor_color()),
@@ -164,13 +165,8 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p)
 	mTripleClickTimer.reset();
 	setText(p.default_text());
 
-	// line history support:
-	// - initialize line history list
-	mLineHistory.insert( mLineHistory.end(), "" );
-	// - disable line history by default
-	mHaveHistory = FALSE;
-	// - reset current history line pointer
-	mCurrentHistoryLine = 0;
+	// Initialize current history line iterator
+	mCurrentHistoryLine = mLineHistory.begin();
 
 	LLRect border_rect(getLocalRect());
 	// adjust for gl line drawing glitch
@@ -278,16 +274,31 @@ void LLLineEditor::updateHistory()
 	// reset current history line number.
 	// Be sure only to remember lines that are not empty and that are
 	// different from the last on the list.
-	if( mHaveHistory && mText.length() && ( mLineHistory.empty() || getText() != mLineHistory.back() ) )
+	if( mHaveHistory && getLength() )
 	{
-		// discard possible empty line at the end of the history
-		// inserted by setText()
-		if( !mLineHistory.back().length() )
+		if( !mLineHistory.empty() )
 		{
-			mLineHistory.pop_back();
+			// When not empty, last line of history should always be blank.
+			if( mLineHistory.back().empty() )
+			{
+				// discard the empty line
+				mLineHistory.pop_back();
+			}
+			else
+			{
+				LL_WARNS("") << "Last line of history was not blank." << LL_ENDL;
+			}
 		}
-		mLineHistory.insert( mLineHistory.end(), getText() );
-		mCurrentHistoryLine = mLineHistory.size() - 1;
+
+		// Add text to history, ignoring duplicates
+		if( mLineHistory.empty() || getText() != mLineHistory.back() )
+		{
+			mLineHistory.push_back( getText() );
+		}
+
+		// Restore the blank line and set mCurrentHistoryLine to point at it
+		mLineHistory.push_back( "" );
+		mCurrentHistoryLine = mLineHistory.end() - 1;
 	}
 }
 
@@ -357,11 +368,8 @@ void LLLineEditor::setText(const LLStringExplicit &new_text)
 	}
 	setCursor(llmin((S32)mText.length(), getCursor()));
 
-	// Newly set text goes always in the last line of history.
-	// Possible empty strings (as with chat line) will be deleted later.
-	mLineHistory.insert( mLineHistory.end(), new_text );
 	// Set current history line to end of history.
-	mCurrentHistoryLine = mLineHistory.size() - 1;
+	mCurrentHistoryLine = mLineHistory.end() - 1;
 
 	mPrevText = mText;
 }
@@ -1254,9 +1262,9 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
 	case KEY_UP:
 		if( mHaveHistory && ( MASK_CONTROL == mask ) )
 		{
-			if( mCurrentHistoryLine > 0 )
+			if( mCurrentHistoryLine > mLineHistory.begin() )
 			{
-				mText.assign( mLineHistory[ --mCurrentHistoryLine ] );
+				mText.assign( *(--mCurrentHistoryLine) );
 				setCursor(llmin((S32)mText.length(), getCursor()));
 			}
 			else
@@ -1271,9 +1279,9 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
 	case KEY_DOWN:
 		if( mHaveHistory  && ( MASK_CONTROL == mask ) )
 		{
-			if( !mLineHistory.empty() && mCurrentHistoryLine < mLineHistory.size() - 1 )
+			if( !mLineHistory.empty() && mCurrentHistoryLine < mLineHistory.end() - 1 )
 			{
-				mText.assign( mLineHistory[ ++mCurrentHistoryLine ] );
+				mText.assign( *(++mCurrentHistoryLine) );
 				setCursor(llmin((S32)mText.length(), getCursor()));
 			}
 			else
@@ -2291,14 +2299,20 @@ BOOL LLLineEditor::hasPreeditString() const
 
 void LLLineEditor::resetPreedit()
 {
-	if (hasPreeditString())
+	if (hasSelection())
 	{
-		if (hasSelection())
+		if (hasPreeditString())
 		{
 			llwarns << "Preedit and selection!" << llendl;
 			deselect();
 		}
-
+		else
+		{
+			deleteSelection();
+		}
+	}
+	if (hasPreeditString())
+	{
 		const S32 preedit_pos = mPreeditPositions.front();
 		mText.erase(preedit_pos, mPreeditPositions.back() - preedit_pos);
 		mText.insert(preedit_pos, mPreeditOverwrittenWString);
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index 48d68b9935e..6e81969f000 100644
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -286,8 +286,9 @@ class LLLineEditor
 
 	// line history support:
 	BOOL		mHaveHistory;				// flag for enabled line history
-	std::vector<std::string> mLineHistory;		// line history storage
-	U32			mCurrentHistoryLine;		// currently browsed history line
+	typedef std::vector<std::string>	line_history_t;
+	line_history_t	mLineHistory;			// line history storage
+	line_history_t::iterator	mCurrentHistoryLine;	// currently browsed history line
 
 	LLViewBorder* mBorder;
 	const LLFontGL*	mGLFont;
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 14bee0465c2..cf013efca02 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -279,47 +279,7 @@ BOOL LLMenuItemGL::addToAcceleratorList(std::list <LLKeyBinding*> *listp)
 // the current accelerator key and mask to the provided string.
 void LLMenuItemGL::appendAcceleratorString( std::string& st ) const
 {
-	// break early if this is a silly thing to do.
-	if( KEY_NONE == mAcceleratorKey )
-	{
-		return;
-	}
-
-	// Append any masks
-#ifdef LL_DARWIN
-	// Standard Mac names for modifier keys in menu equivalents
-	// We could use the symbol characters, but they only exist in certain fonts.
-	if( mAcceleratorMask & MASK_CONTROL )
-	{
-		if ( mAcceleratorMask & MASK_MAC_CONTROL )
-		{
-			st.append( "Ctrl-" );
-		}
-		else
-		{
-			st.append( "Cmd-" );		// Symbol would be "\xE2\x8C\x98"
-		}
-	}
-	if( mAcceleratorMask & MASK_ALT )
-		st.append( "Opt-" );		// Symbol would be "\xE2\x8C\xA5"
-	if( mAcceleratorMask & MASK_SHIFT )
-		st.append( "Shift-" );		// Symbol would be "\xE2\x8C\xA7"
-#else
-	if( mAcceleratorMask & MASK_CONTROL )
-		st.append( "Ctrl-" );
-	if( mAcceleratorMask & MASK_ALT )
-		st.append( "Alt-" );
-	if( mAcceleratorMask & MASK_SHIFT )
-		st.append( "Shift-" );
-#endif
-
-	std::string keystr = LLKeyboard::stringFromKey( mAcceleratorKey );
-	if ((mAcceleratorMask & MASK_NORMALKEYS) &&
-		(keystr[0] == '-' || keystr[0] == '='))
-	{
-		st.append( " " );
-	}
-	st.append( keystr );
+	st = LLKeyboard::stringFromAccelerator( mAcceleratorMask, mAcceleratorKey );
 	LL_DEBUGS("HotKeys") << "appendAcceleratorString: " << st << LL_ENDL;
 }
 
diff --git a/indra/llui/llresmgr.cpp b/indra/llui/llresmgr.cpp
index a4e23a605b2..ed870d46d5f 100644
--- a/indra/llui/llresmgr.cpp
+++ b/indra/llui/llresmgr.cpp
@@ -279,6 +279,14 @@ std::string LLResMgr::getMonetaryString( S32 input ) const
 
 void LLResMgr::getIntegerString( std::string& output, S32 input ) const
 {
+	// handle special case of input value being zero
+	if (input == 0)
+	{
+		output = "0";
+		return;
+	}
+	
+	// *NOTE: this method does not handle negative input integers correctly
 	S32 fraction = 0;
 	std::string fraction_string;
 	S32 remaining_count = input;
diff --git a/indra/llui/lluistring.h b/indra/llui/lluistring.h
index aedeca27cb6..195f21a6a7c 100644
--- a/indra/llui/lluistring.h
+++ b/indra/llui/lluistring.h
@@ -51,9 +51,9 @@
 // llinfos << mMessage.getString() << llendl; // outputs "Welcome Steve to Second Life"
 // mMessage.setArg("[USERNAME]", "Joe");
 // llinfos << mMessage.getString() << llendl; // outputs "Welcome Joe to Second Life"
-// mMessage = "Recepci￳n a la [SECONDLIFE] [USERNAME]"
+// mMessage = "Bienvenido a la [SECONDLIFE] [USERNAME]"
 // mMessage.setArg("[SECONDLIFE]", "Segunda Vida");
-// llinfos << mMessage.getString() << llendl; // outputs "Recepci￳n a la Segunda Vida Joe"
+// llinfos << mMessage.getString() << llendl; // outputs "Bienvenido a la Segunda Vida Joe"
 
 // Implementation Notes:
 // Attempting to have operator[](const std::string& s) return mArgs[s] fails because we have
diff --git a/indra/llvfs/CMakeLists.txt b/indra/llvfs/CMakeLists.txt
index cc0297e3dc9..0de3fa33f9a 100644
--- a/indra/llvfs/CMakeLists.txt
+++ b/indra/llvfs/CMakeLists.txt
@@ -23,6 +23,7 @@ set(llvfs_HEADER_FILES
     CMakeLists.txt
 
     lldir.h
+    lldirguard.h
     lllfsthread.h
     llpidlock.h
     llvfile.h
diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp
index 745e53c9802..781321e5e40 100644
--- a/indra/llvfs/lldir.cpp
+++ b/indra/llvfs/lldir.cpp
@@ -404,6 +404,12 @@ std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subd
 		prefix = getExecutableDir();
 		break;
 		
+	case LL_PATH_FONTS:
+		prefix = getAppRODataDir();
+		prefix += mDirDelimiter;
+		prefix += "fonts";
+		break;
+		
 	default:
 		llassert(0);
 	}
@@ -419,6 +425,11 @@ std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subd
 		filename = subdir1 + mDirDelimiter + filename;
 	}
 
+	if (prefix.empty())
+	{
+		llwarns << "prefix is empty, possible bad filename" << llendl;
+	}
+	
 	std::string expanded_filename;
 	if (!filename.empty())
 	{
@@ -673,11 +684,6 @@ void LLDir::dumpCurrentDirectories()
 	LL_DEBUGS2("AppInit","Directories") << "  CAFile:				 " << getCAFile() << LL_ENDL;
 	LL_DEBUGS2("AppInit","Directories") << "  SkinBaseDir:           " << getSkinBaseDir() << LL_ENDL;
 	LL_DEBUGS2("AppInit","Directories") << "  SkinDir:               " << getSkinDir() << LL_ENDL;
-
-#if LL_LIBXUL_ENABLED
- 	LL_DEBUGS2("AppInit","Directories") << "  HTML Path:             " << getExpandedFilename( LL_PATH_HTML, "" ) << llendl;
- 	LL_DEBUGS2("AppInit","Directories") << "  Mozilla Profile Path:  " << getExpandedFilename( LL_PATH_MOZILLA_PROFILE, "" ) << llendl;
-#endif
 }
 
 
diff --git a/indra/llvfs/lldir.h b/indra/llvfs/lldir.h
index 6c9fea6b6a4..07c814769ef 100644
--- a/indra/llvfs/lldir.h
+++ b/indra/llvfs/lldir.h
@@ -60,6 +60,7 @@ typedef enum ELLPath
 //	LL_PATH_HTML = 16,
 	LL_PATH_EXECUTABLE = 16,
 	LL_PATH_DEFAULT_SKIN = 17,
+	LL_PATH_FONTS = 18,
 	LL_PATH_LAST
 } ELLPath;
 
diff --git a/indra/llvfs/lldir_mac.cpp b/indra/llvfs/lldir_mac.cpp
index 346f7dd8ed7..7bc6f63e1f0 100644
--- a/indra/llvfs/lldir_mac.cpp
+++ b/indra/llvfs/lldir_mac.cpp
@@ -68,7 +68,8 @@ static void CFStringRefToLLString(CFStringRef stringRef, std::string &llString,
 {
 	if (stringRef)
 	{
-		long	bufferSize = CFStringGetLength(stringRef) + 1;
+		long stringSize = CFStringGetLength(stringRef) + 1;
+		long bufferSize = CFStringGetMaximumSizeForEncoding(stringSize,kCFStringEncodingUTF8);
 		char* buffer = new char[bufferSize];
 		memset(buffer, 0, bufferSize);
 		if (CFStringGetCString(stringRef, buffer, bufferSize, kCFStringEncodingUTF8))
diff --git a/indra/llvfs/lldir_win32.cpp b/indra/llvfs/lldir_win32.cpp
index 3e302764de2..4c376f11a5a 100644
--- a/indra/llvfs/lldir_win32.cpp
+++ b/indra/llvfs/lldir_win32.cpp
@@ -121,17 +121,22 @@ LLDir_Win32::LLDir_Win32()
 	GetCurrentDirectory(MAX_PATH, w_str);
 	mExecutableDir = utf16str_to_utf8str(llutf16string(w_str));
 #endif
-	
-	// When running in a dev tree, app_settings is under indra/newview/
-	// but in production it is under Program Files/SecondLife/
-	// Attempt to detect which one we're using. JC
-	if (mExecutableDir.find("indra") != std::string::npos)
-		mAppRODataDir = getCurPath();
-	else
-		mAppRODataDir = mExecutableDir;
+
+	mAppRODataDir = ".";	
 
 	mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";
 
+	if (mExecutableDir.find("indra") == std::string::npos)
+	{
+		// Running from installed directory.  Make sure current
+		// directory isn't something crazy (e.g. if invoking from
+		// command line).
+		SetCurrentDirectory(utf8str_to_utf16str(mExecutableDir).c_str());
+		GetCurrentDirectory(MAX_PATH, w_str);
+		mWorkingDir = utf16str_to_utf8str(llutf16string(w_str));
+	}
+	llinfos << "mAppRODataDir = " << mAppRODataDir << llendl;
+
 	// Build the default cache directory
 	mDefaultCacheDir = buildSLOSCacheDir();
 	
diff --git a/indra/llvfs/lldirguard.h b/indra/llvfs/lldirguard.h
new file mode 100644
index 00000000000..85366120d81
--- /dev/null
+++ b/indra/llvfs/lldirguard.h
@@ -0,0 +1,78 @@
+/** 
+ * @file lldirguard.h
+ * @brief Protect working directory from being changed in scope.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * 
+ * Copyright (c) 2009, Linden Research, Inc.
+ * 
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * 
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * 
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ * 
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_DIRGUARD_H
+#define LL_DIRGUARD_H
+
+#include "linden_common.h"
+#include "llerror.h"
+
+#if LL_WINDOWS
+class LLDirectoryGuard
+{
+public:
+	LLDirectoryGuard()
+	{
+		mOrigDirLen = GetCurrentDirectory(MAX_PATH, mOrigDir);
+	}
+
+	~LLDirectoryGuard()
+	{
+		mFinalDirLen = GetCurrentDirectory(MAX_PATH, mFinalDir);
+		if ((mOrigDirLen!=mFinalDirLen) ||
+			(wcsncmp(mOrigDir,mFinalDir,mOrigDirLen)!=0))
+		{
+			// Dir has changed
+			std::string mOrigDirUtf8 = utf16str_to_utf8str(llutf16string(mOrigDir));
+			std::string mFinalDirUtf8 = utf16str_to_utf8str(llutf16string(mFinalDir));
+			llinfos << "Resetting working dir from " << mFinalDirUtf8 << " to " << mOrigDirUtf8 << llendl;
+			SetCurrentDirectory(mOrigDir);
+		}
+	}
+
+private:
+	TCHAR mOrigDir[MAX_PATH];
+	DWORD mOrigDirLen;
+	TCHAR mFinalDir[MAX_PATH];
+	DWORD mFinalDirLen;
+};
+#else // No-op outside Windows.
+class LLDirectoryGuard
+{
+public:
+	LLDirectoryGuard() {}
+	~LLDirectoryGuard() {}
+};
+#endif 
+
+
+#endif
diff --git a/indra/llwindow/llkeyboard.cpp b/indra/llwindow/llkeyboard.cpp
index f0f618aef15..16cbf815e0b 100644
--- a/indra/llwindow/llkeyboard.cpp
+++ b/indra/llwindow/llkeyboard.cpp
@@ -36,7 +36,6 @@
 
 #include "llwindowcallbacks.h"
 
-
 //
 // Globals
 //
@@ -46,6 +45,8 @@ LLKeyboard *gKeyboard = NULL;
 //static
 std::map<KEY,std::string> LLKeyboard::sKeysToNames;
 std::map<std::string,KEY> LLKeyboard::sNamesToKeys;
+LLKeyStringTranslatorFunc*	LLKeyboard::mStringTranslator = NULL;	// Used for l10n + PC/Mac/Linux accelerator labeling
+
 
 //
 // Class Implementation
@@ -346,6 +347,65 @@ std::string LLKeyboard::stringFromKey(KEY key)
 }
 
 
+//static
+std::string LLKeyboard::stringFromAccelerator( MASK accel_mask, KEY key )
+{
+	std::string res;
+	
+	// break early if this is a silly thing to do.
+	if( KEY_NONE == key )
+	{
+		return res;
+	}
+	
+	LLKeyStringTranslatorFunc *trans = gKeyboard->mStringTranslator;
+	
+	if( trans == NULL )
+	{
+		llerrs << "No mKeyStringTranslator" << llendl;
+		return res;
+	}
+	
+	// Append any masks
+#ifdef LL_DARWIN
+	// Standard Mac names for modifier keys in menu equivalents
+	// We could use the symbol characters, but they only exist in certain fonts.
+	if( accel_mask & MASK_CONTROL )
+	{
+		if ( accel_mask & MASK_MAC_CONTROL )
+		{
+			res.append( trans("accel-mac-control") );
+		}
+		else
+		{
+			res.append( trans("accel-mac-command") );		// Symbol would be "\xE2\x8C\x98"
+		}
+	}
+	if( accel_mask & MASK_ALT )
+		res.append( trans("accel-mac-option") );		// Symbol would be "\xE2\x8C\xA5"
+	if( accel_mask & MASK_SHIFT )
+		res.append( trans("accel-mac-shift") );		// Symbol would be "\xE2\x8C\xA7"
+#else
+	if( accel_mask & MASK_CONTROL )
+		res.append( trans("accel-win-control") );
+	if( accel_mask & MASK_ALT )
+		res.append( trans("accel-win-alt") );
+	if( accel_mask & MASK_SHIFT )
+		res.append( trans("accel-win-shift") );
+#endif
+	std::string key_string = LLKeyboard::stringFromKey(key);
+	if ((accel_mask & MASK_NORMALKEYS) &&
+		(key_string[0] == '-' || key_string[0] == '=' || key_string[0] == '+'))
+	{
+		res.append( " " );
+	}
+
+	std::string keystr = stringFromKey( key );
+	res.append( keystr );
+	
+	return res;
+}
+
 
 //static
 BOOL LLKeyboard::maskFromString(const std::string& str, MASK *mask)
@@ -396,3 +456,10 @@ BOOL LLKeyboard::maskFromString(const std::string& str, MASK *mask)
 		return FALSE;
 	}
 }
+
+
+//static
+void LLKeyboard::setStringTranslatorFunc( LLKeyStringTranslatorFunc *trans_func )
+{
+	mStringTranslator = trans_func;
+}
diff --git a/indra/llwindow/llkeyboard.h b/indra/llwindow/llkeyboard.h
index 0261bcbeb3d..d5450340703 100644
--- a/indra/llwindow/llkeyboard.h
+++ b/indra/llwindow/llkeyboard.h
@@ -47,7 +47,8 @@ enum EKeystate
 };
 
 typedef void (*LLKeyFunc)(EKeystate keystate);
-
+typedef std::string (LLKeyStringTranslatorFunc)(const char *label);
+	
 enum EKeyboardInsertMode
 {
 	LL_KIM_INSERT,
@@ -111,7 +112,7 @@ class LLKeyboard
 	static BOOL		maskFromString(const std::string& str, MASK *mask);		// False on failure
 	static BOOL		keyFromString(const std::string& str, KEY *key);			// False on failure
 	static std::string stringFromKey(KEY key);
-
+	static std::string stringFromAccelerator( MASK accel_mask, KEY key );
 	e_numpad_distinct getNumpadDistinct() { return mNumpadDistinct; }
 	void setNumpadDistinct(e_numpad_distinct val) { mNumpadDistinct = val; }
 
@@ -119,6 +120,8 @@ class LLKeyboard
 	F32				getKeyElapsedTime( KEY key );  // Returns time in seconds since key was pressed.
 	S32				getKeyElapsedFrameCount( KEY key );  // Returns time in frames since key was pressed.
 
+	static void		setStringTranslatorFunc( LLKeyStringTranslatorFunc *trans_func );
+	
 protected:
 	void 			addKeyName(KEY key, const std::string& name);
 
@@ -136,6 +139,8 @@ class LLKeyboard
 	KEY				mCurTranslatedKey;
 	KEY				mCurScanKey;		// Used during the scanKeyboard()
 
+	static LLKeyStringTranslatorFunc*	mStringTranslator;	// Used for l10n + PC/Mac/Linux accelerator labeling
+	
 	e_numpad_distinct mNumpadDistinct;
 
 	EKeyboardInsertMode mInsertMode;
diff --git a/indra/llwindow/llkeyboardwin32.cpp b/indra/llwindow/llkeyboardwin32.cpp
index ea11e0537eb..35a3e7621af 100644
--- a/indra/llwindow/llkeyboardwin32.cpp
+++ b/indra/llwindow/llkeyboardwin32.cpp
@@ -65,7 +65,7 @@ LLKeyboardWin32::LLKeyboardWin32()
 	// numpad number keys
 	for (cur_char = 0x60; cur_char <= 0x69; cur_char++)
 	{
-		mTranslateKeyMap[cur_char] = (KEY)('0' + (0x60 - cur_char));
+		mTranslateKeyMap[cur_char] = (KEY)('0' + (cur_char - 0x60));
 	}
 
 
diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
index 7137c93476d..96e5a1b7ca2 100644
--- a/indra/llwindow/llwindowmacosx.cpp
+++ b/indra/llwindow/llwindowmacosx.cpp
@@ -1389,11 +1389,11 @@ void LLWindowMacOSX::setMouseClipping( BOOL b )
 
 	if(b)
 	{
-		//		llinfos << "setMouseClipping(TRUE)" << llendl
+		//		llinfos << "setMouseClipping(TRUE)" << llendl;
 	}
 	else
 	{
-		//		llinfos << "setMouseClipping(FALSE)" << llendl
+		//		llinfos << "setMouseClipping(FALSE)" << llendl;
 	}
 
 	adjustCursorDecouple();
@@ -1411,7 +1411,7 @@ BOOL LLWindowMacOSX::setCursorPosition(const LLCoordWindow position)
 
 	CGPoint newPosition;
 
-	//	llinfos << "setCursorPosition(" << screen_pos.mX << ", " << screen_pos.mY << ")" << llendl
+	//	llinfos << "setCursorPosition(" << screen_pos.mX << ", " << screen_pos.mY << ")" << llendl;
 
 	newPosition.x = screen_pos.mX;
 	newPosition.y = screen_pos.mY;
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index 00a8d429baa..9f03c8f6956 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -70,7 +70,7 @@ extern BOOL gDebugWindowProc;
 const S32 MAX_NUM_RESOLUTIONS = 200;
 
 // static variable for ATI mouse cursor crash work-around:
-static bool ATIbug = false;
+static bool ATIbug = false; 
 
 //
 // LLWindowSDL
@@ -219,8 +219,7 @@ LLWindowSDL::LLWindowSDL(LLWindowCallbacks* callbacks,
 #endif // LL_X11
 
 #if LL_GTK
-	// We MUST be the first to initialize GTK, i.e. we have to beat
-	// our embedded Mozilla to the punch so that GTK doesn't get badly
+	// We MUST be the first to initialize GTK so that GTK doesn't get badly
 	// initialized with a non-C locale and cause lots of serious random
 	// weirdness.
 	ll_try_gtk_init();
@@ -674,12 +673,12 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B
 	glGetIntegerv(GL_DEPTH_BITS, &depthBits);
 	glGetIntegerv(GL_STENCIL_BITS, &stencilBits);
 	
-	llinfos << "GL buffer:" << llendl
-        llinfos << "  Red Bits " << S32(redBits) << llendl
-        llinfos << "  Green Bits " << S32(greenBits) << llendl
-        llinfos << "  Blue Bits " << S32(blueBits) << llendl
-	llinfos	<< "  Alpha Bits " << S32(alphaBits) << llendl
-	llinfos	<< "  Depth Bits " << S32(depthBits) << llendl
+	llinfos << "GL buffer:" << llendl;
+        llinfos << "  Red Bits " << S32(redBits) << llendl;
+        llinfos << "  Green Bits " << S32(greenBits) << llendl;
+        llinfos << "  Blue Bits " << S32(blueBits) << llendl;
+	llinfos	<< "  Alpha Bits " << S32(alphaBits) << llendl;
+	llinfos	<< "  Depth Bits " << S32(depthBits) << llendl;
 	llinfos	<< "  Stencil Bits " << S32(stencilBits) << llendl;
 
 	GLint colorBits = redBits + greenBits + blueBits + alphaBits;
@@ -2252,6 +2251,7 @@ BOOL LLWindowSDL::dialogColorPicker( F32 *r, F32 *g, F32 *b)
 		GtkColorSelection *colorsel = GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG(win)->colorsel);
 
 		GdkColor color, orig_color;
+		orig_color.pixel = 0;
 		orig_color.red = guint16(65535 * *r);
 		orig_color.green= guint16(65535 * *g);
 		orig_color.blue = guint16(65535 * *b);
diff --git a/indra/llxuixml/lltrans.h b/indra/llxuixml/lltrans.h
index 79df5802e5f..856b9e04fc7 100644
--- a/indra/llxuixml/lltrans.h
+++ b/indra/llxuixml/lltrans.h
@@ -103,6 +103,11 @@ class LLTrans
 		return findString(result, xml_desc, empty);
 	}
 
+        static std::string getKeyboardString(const char* keystring)
+        {
+                // These map directly - no need to specialize
+                return getString( ll_safe_string(keystring) );
+        }
 
 	// get the default args
 	static const LLStringUtil::format_map_t& getDefaultArgs()
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index b9e5664ff7b..c402c3979a6 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1025,7 +1025,7 @@ endif (DARWIN)
 if (LINUX)
     LIST(APPEND viewer_SOURCE_FILES llappviewerlinux.cpp)
     LIST(APPEND viewer_SOURCE_FILES llappviewerlinux_api_dbus.cpp)
-    LIST(APPEND CMAKE_EXE_LINKER_FLAGS -Wl,--as-needed)
+    SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed")
 
     set(viewer_LIBRARIES
         Xinerama
@@ -1113,7 +1113,9 @@ if (WINDOWS)
 
     SOURCE_GROUP("Resource Files" FILES ${viewer_RESOURCE_FILES})
 
-    list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES})
+    if (NOT STANDALONE)
+        list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES})
+    endif (NOT STANDALONE)	
 
     find_library(DINPUT_LIBRARY dinput8 ${DIRECTX_LIBRARY_DIR})
     find_library(DXGUID_LIBRARY dxguid ${DIRECTX_LIBRARY_DIR})
@@ -1223,8 +1225,9 @@ source_group("Character File" FILES ${viewer_CHARACTER_FILES})
 
 set_source_files_properties(${viewer_CHARACTER_FILES}
                             PROPERTIES HEADER_FILE_ONLY TRUE)
-
-list(APPEND viewer_SOURCE_FILES ${viewer_CHARACTER_FILES})
+if (NOT STANDALONE)
+    list(APPEND viewer_SOURCE_FILES ${viewer_CHARACTER_FILES})
+endif (NOT STANDALONE)
 
 if (WINDOWS)
   file(GLOB viewer_INSTALLER_FILES installers/windows/*.nsi)
diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini
index 5d521582988..544f1c598e9 100644
--- a/indra/newview/app_settings/keywords.ini
+++ b/indra/newview/app_settings/keywords.ini
@@ -459,6 +459,7 @@ PARCEL_FLAG_ALLOW_LANDMARK			Used with llGetParcelFlags to find if a parcel allo
 PARCEL_FLAG_ALLOW_TERRAFORM			Used with llGetParcelFlags to find if a parcel allows anyone to terraform the land
 PARCEL_FLAG_ALLOW_DAMAGE			Used with llGetParcelFlags to find if a parcel allows damage
 PARCEL_FLAG_ALLOW_CREATE_OBJECTS	Used with llGetParcelFlags to find if a parcel allows anyone to create objects
+PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS	Used with llGetParcelFlags to find if a parcel allows group members or objects to create objects
 PARCEL_FLAG_USE_ACCESS_GROUP		Used with llGetParcelFlags to find if a parcel limits access to a group
 PARCEL_FLAG_USE_ACCESS_LIST			Used with llGetParcelFlags to find if a parcel limits access to a list of residents
 PARCEL_FLAG_USE_BAN_LIST			Used with llGetParcelFlags to find if a parcel uses a ban list
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index d05fd955dbe..467e1e8342e 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1599,7 +1599,7 @@
     <key>Cursor3D</key>
     <map>
       <key>Comment</key>
-      <string>Tread Joystick values as absolute positions (not deltas).</string>
+      <string>Treat Joystick values as absolute positions (not deltas).</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -3851,6 +3851,17 @@
       <key>Value</key>
       <string />
     </map>
+    <key>JoystickMouselookYaw</key>
+    <map>
+      <key>Comment</key>
+        <string>Pass joystick yaw to scripts in Mouselook.</string>
+      <key>Persist</key>
+        <integer>1</integer>
+      <key>Type</key>
+        <string>Boolean</string>
+      <key>Value</key>
+         <integer>1</integer>
+    </map>
     <key>JoystickRunThreshold</key>
     <map>
       <key>Comment</key>
@@ -4158,7 +4169,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>0</integer>
+      <integer>1</integer>
     </map>
     <key>LipSyncOoh</key>
     <map>
diff --git a/indra/newview/installers/darwin/firstlook-dmg/_DS_Store b/indra/newview/installers/darwin/firstlook-dmg/_DS_Store
index 6c5a3f3452cd273cc2c471151b9953ee844c4735..408a4d49925b8f6c31a1050e2f4e6c27bee6b0f0 100644
GIT binary patch
delta 65
zcmZokXi3=MEnvcs!jQt)&lHiFoL9yG0gMcKY30S`Ir(|%K!L+R3>GQND9*?)0&=uB
J*9)}D0{|wE5Q_i+

delta 65
zcmZokXi3=MEnvd<_fI6V$UooA<h(Kl2w-H;ODiuf&&khA2MSC8Vz5YAMsY@d5s)Lk
Jxn7`E9srI`5=Q_4

diff --git a/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store b/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store
index 6a91b38d6d4760ff55cd1d6a220c6385d2228eaa..b901e46b659ad995165b97bceebb1bcb1c465e06 100644
GIT binary patch
delta 64
zcmZokXi3=MBVe4ukiyu{6p@*nSH=JVj0}2d<;CSW`FZI;fx|!y7Aeap&d4tUa<n(s
I3$)4u03(SIivR!s

delta 64
zcmZokXi3=MBVhcNL5GQjNg*>iuZ#f#7#Z}^%8Sc$^7GPx0uz83EK-(HoRMDy<cM#s
I7ig6S010{z(*OVf

diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store b/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store
index a8b757372e4d502fd00902739ea53f26f4d1bb26..309c8adaaa6586d75fb3ba5d8dbd6aaaff813b12 100644
GIT binary patch
delta 65
zcmZokXi3=MEnvcs!jQt)&lHiFoL9yG0gMcKY30S`Ir(|%K!L+R3>GQND9*?)0&=uB
J*9)}D0{|wE5Q_i+

delta 65
zcmZokXi3=MEnvdb{YQ{_(LdJA<h(Kl2w-H;ODiuf&&khA2MSC8Vz5YAMsY@d5s)Lk
Jxn7`E9sqSO5!3(x

diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 08681db6cb6..41aeeee82a5 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -330,7 +330,7 @@ LLAgent::LLAgent() :
 	mLeftKey(0),
 	mUpKey(0),
 	mYawKey(0.f),
-	mPitchKey(0),
+	mPitchKey(0.f),
 
 	mOrbitLeftKey(0.f),
 	mOrbitRightKey(0.f),
@@ -723,15 +723,15 @@ void LLAgent::moveYaw(F32 mag, bool reset_view)
 //-----------------------------------------------------------------------------
 // movePitch()
 //-----------------------------------------------------------------------------
-void LLAgent::movePitch(S32 direction)
+void LLAgent::movePitch(F32 mag)
 {
-	setKey(direction, mPitchKey);
+	mPitchKey = mag;
 
-	if (direction > 0)
+	if (mag > 0)
 	{
-		setControlFlags(AGENT_CONTROL_PITCH_POS );
+		setControlFlags(AGENT_CONTROL_PITCH_POS);
 	}
-	else if (direction < 0)
+	else if (mag < 0)
 	{
 		setControlFlags(AGENT_CONTROL_PITCH_NEG);
 	}
@@ -2509,10 +2509,10 @@ void LLAgent::propagate(const F32 dt)
 
 	// handle rotation based on keyboard levels
 	const F32 YAW_RATE = 90.f * DEG_TO_RAD;				// radians per second
-	yaw( YAW_RATE * mYawKey * dt );
+	yaw(YAW_RATE * mYawKey * dt);
 
 	const F32 PITCH_RATE = 90.f * DEG_TO_RAD;			// radians per second
-	pitch(PITCH_RATE * (F32) mPitchKey * dt);
+	pitch(PITCH_RATE * mPitchKey * dt);
 	
 	// handle auto-land behavior
 	if (mAvatarObject.notNull())
@@ -2537,7 +2537,7 @@ void LLAgent::propagate(const F32 dt)
 	mLeftKey = 0;
 	mUpKey = 0;
 	mYawKey = 0.f;
-	mPitchKey = 0;
+	mPitchKey = 0.f;
 }
 
 //-----------------------------------------------------------------------------
@@ -3168,6 +3168,7 @@ void LLAgent::updateCamera()
 				mFollowCam.copyParams(*current_cam);
 				mFollowCam.setSubjectPositionAndRotation( mAvatarObject->getRenderPosition(), avatarRotationForFollowCam );
 				mFollowCam.update();
+				LLViewerJoystick::getInstance()->setCameraNeedsUpdate(true);
 			}
 			else
 			{
@@ -4245,7 +4246,7 @@ void LLAgent::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL camera_ani
 	{
 		if(avatar_animate)
 		{
-				// Remove any pitch from the avatar
+			// Remove any pitch from the avatar
 			LLVector3 at = mFrameAgent.getAtAxis();
 			at.mV[VZ] = 0.f;
 			at.normalize();
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 5ca630f8d15..b334874e6eb 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -471,7 +471,7 @@ class LLAgent : public LLOldEvents::LLObservable
 	S32 			mLeftKey;
 	S32				mUpKey;
 	F32				mYawKey;
-	S32				mPitchKey;
+	F32				mPitchKey;
 
 	//--------------------------------------------------------------------
 	// Movement from user input
@@ -486,7 +486,7 @@ class LLAgent : public LLOldEvents::LLObservable
 	void			moveLeftNudge(S32 direction);
 	void			moveUp(S32 direction);
 	void			moveYaw(F32 mag, bool reset_view = true);
-	void			movePitch(S32 direction);
+	void			movePitch(F32 mag);
 
 	//--------------------------------------------------------------------
 	// Orbit
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index d47b994322b..785179f7b31 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -686,8 +686,12 @@ bool LLAppViewer::init()
 	LLUI::setupPaths();
 	LLTransUtil::parseStrings("strings.xml", default_trans_args);		
 	LLTransUtil::parseLanguageStrings("language_settings.xml");
-	LLWeb::initClass();			  // do this after LLUI
+	
+	// LLKeyboard relies on LLUI to know what some accelerator keys are called.
+	LLKeyboard::setStringTranslatorFunc( LLTrans::getKeyboardString );
 
+	LLWeb::initClass();			  // do this after LLUI
+	
 	// Provide the text fields with callbacks for opening Urls
 	LLUrlAction::setOpenURLCallback(&LLWeb::loadURL);
 	LLUrlAction::setOpenURLInternalCallback(&LLWeb::loadURLInternal);
@@ -1802,8 +1806,18 @@ bool LLAppViewer::initConfiguration()
 	gSavedSettings.setString("VersionChannelName", LL_CHANNEL);
 
 #ifndef	LL_RELEASE_FOR_DOWNLOAD
-        gSavedSettings.setBOOL("ShowConsoleWindow", TRUE);
-        gSavedSettings.setBOOL("AllowMultipleViewers", TRUE);
+	// provide developer build only overrides for these control variables that are not
+	// persisted to settings.xml
+	LLControlVariable* c = gSavedSettings.getControl("ShowConsoleWindow");
+	if (c)
+	{
+		c->setValue(true, false);
+	}
+	c = gSavedSettings.getControl("AllowMultipleViewers");
+	if (c)
+	{
+		c->setValue(true, false);
+	}
 #endif
 
 	//*FIX:Mani - Set default to disabling watchdog mainloop 
diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
index ed291c16a8d..d34bcb4a685 100644
--- a/indra/newview/llappviewerlinux.cpp
+++ b/indra/newview/llappviewerlinux.cpp
@@ -188,7 +188,7 @@ static inline BOOL do_basic_glibc_backtrace()
 		for (i = 0; i < size; i++)
 		{
 			// the format of the StraceFile is very specific, to allow (kludgy) machine-parsing
-			fprintf(StraceFile, "%-3d ", i);
+			fprintf(StraceFile, "%-3lu ", (unsigned long)i);
 			fprintf(StraceFile, "%-32s\t", "unknown");
 			fprintf(StraceFile, "%p ", stackarray[i]);
 			fprintf(StraceFile, "%s\n", strings[i]);
@@ -263,7 +263,7 @@ static inline BOOL do_elfio_glibc_backtrace()
 	for (btpos = 0; btpos < btsize; ++btpos)
 	{
 		// the format of the StraceFile is very specific, to allow (kludgy) machine-parsing
-		fprintf(StraceFile, "%-3d ", btpos);
+		fprintf(StraceFile, "%-3ld ", (long)btpos);
 		int symidx;
 		for (symidx = 0; symidx < nSymNo; ++symidx)
 		{
@@ -354,7 +354,7 @@ bool LLAppViewerLinux::init()
 
 bool LLAppViewerLinux::restoreErrorTrap()
 {
-	// *NOTE:Mani there is a case for implementing this or the mac.
+	// *NOTE:Mani there is a case for implementing this on the mac.
 	// Linux doesn't need it to my knowledge.
 	return true;
 }
@@ -727,8 +727,26 @@ std::string LLAppViewerLinux::generateSerialNumber()
 {
 	char serial_md5[MD5HEX_STR_SIZE];
 	serial_md5[0] = 0;
+	std::string best;
+	std::string uuiddir("/dev/disk/by-uuid/");
 
-	// TODO
+	// trawl /dev/disk/by-uuid looking for a good-looking UUID to grab
+	std::string this_name;
+	BOOL wrap = FALSE;
+	while (gDirUtilp->getNextFileInDir(uuiddir, "*", this_name, wrap))
+	{
+		if (this_name.length() > best.length() ||
+		    (this_name.length() == best.length() &&
+		     this_name > best))
+		{
+			// longest (and secondarily alphabetically last) so far
+			best = this_name;
+		}
+	}
+
+	// we don't return the actual serial number, just a hash of it.
+	LLMD5 md5( reinterpret_cast<const unsigned char*>(best.c_str()) );
+	md5.hex_digest(serial_md5);
 
 	return serial_md5;
 }
diff --git a/indra/newview/llappviewerlinux.h b/indra/newview/llappviewerlinux.h
index 365fcfeb6b1..230c0dc24bd 100644
--- a/indra/newview/llappviewerlinux.h
+++ b/indra/newview/llappviewerlinux.h
@@ -33,9 +33,12 @@
 #ifndef LL_LLAPPVIEWERLINUX_H
 #define LL_LLAPPVIEWERLINUX_H
 
-#if LL_DBUS_ENABLED
 extern "C" {
 # include <glib.h>
+}
+
+#if LL_DBUS_ENABLED
+extern "C" {
 # include <glib-object.h>
 # include <dbus/dbus-glib.h>
 }
diff --git a/indra/newview/llappviewerlinux_api_dbus.cpp b/indra/newview/llappviewerlinux_api_dbus.cpp
index ee160d0151c..da67493e676 100644
--- a/indra/newview/llappviewerlinux_api_dbus.cpp
+++ b/indra/newview/llappviewerlinux_api_dbus.cpp
@@ -41,9 +41,9 @@ extern "C" {
 #include "apr_dso.h"
 }
 
-#define DEBUGMSG(...) lldebugs << llformat(__VA_ARGS__) << llendl
-#define INFOMSG(...) llinfos << llformat(__VA_ARGS__) << llendl
-#define WARNMSG(...) llwarns << llformat(__VA_ARGS__) << llendl
+#define DEBUGMSG(...) do { lldebugs << llformat(__VA_ARGS__) << llendl; } while(0)
+#define INFOMSG(...) do { llinfos << llformat(__VA_ARGS__) << llendl; } while(0)
+#define WARNMSG(...) do { llwarns << llformat(__VA_ARGS__) << llendl; } while(0)
 
 #define LL_DBUS_SYM(REQUIRED, DBUSSYM, RTN, ...) RTN (*ll##DBUSSYM)(__VA_ARGS__) = NULL
 #include "llappviewerlinux_api_dbus_syms_raw.inc"
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
index 2b3939d92fb..1282e437f2f 100644
--- a/indra/newview/llappviewermacosx.cpp
+++ b/indra/newview/llappviewermacosx.cpp
@@ -159,15 +159,7 @@ bool LLAppViewerMacOSX::initParseCommandLine(LLCommandLineParser& clp)
 	clp.addOptionDesc("psn", NULL, 1, "MacOSX process serial number");
 	clp.setCustomParser(parse_psn);
 	
-	// First parse the command line, not often used on the mac.
-	if(clp.parseCommandLine(gArgC, gArgV) == false)
-	{
-		return false;
-	}
-    
-    // Now read in the args from arguments txt.
-    // Succesive calls to clp.parse... will NOT override earlier 
-    // options. 
+    // First read in the args from arguments txt.
     const char* filename = "arguments.txt";
 	llifstream ifs(filename, llifstream::binary);
 	if (!ifs.is_open())
@@ -180,7 +172,14 @@ bool LLAppViewerMacOSX::initParseCommandLine(LLCommandLineParser& clp)
 	{
 		return false;
 	}
-	
+
+	// Then parse the user's command line, so that any --url arg can appear last
+	// Succesive calls to clp.parse... will NOT override earlier options. 
+	if(clp.parseCommandLine(gArgC, gArgV) == false)
+	{
+		return false;
+	}
+    	
 	// Get the user's preferred language string based on the Mac OS localization mechanism.
 	// To add a new localization:
 		// go to the "Resources" section of the project
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index f56359afc36..21e17cc2074 100644
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -369,7 +369,7 @@ void LLDrawPoolWater::shade()
 	LLVector3 light_dir;
 	LLColor3 light_color;
 
-	if (gSky.getSunDirection().mV[2] > NIGHTTIME_ELEVATION_COS) 	 
+	if (gSky.getSunDirection().mV[2] > LLSky::NIGHTTIME_ELEVATION_COS) 	 
     { 	 
         light_dir  = gSky.getSunDirection(); 	 
         light_dir.normVec(); 	
diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp
index c062e6ccf2a..55b7ed0c99c 100644
--- a/indra/newview/llfloateranimpreview.cpp
+++ b/indra/newview/llfloateranimpreview.cpp
@@ -426,8 +426,8 @@ void LLFloaterAnimPreview::resetMotion()
 	
 	LLUUID base_id = mIDList[childGetValue("preview_base_anim").asString()];
 	avatarp->deactivateAllMotions();
-	avatarp->startMotion(base_id, BASE_ANIM_TIME_OFFSET);
 	avatarp->startMotion(mMotionID, 0.0f);
+	avatarp->startMotion(base_id, BASE_ANIM_TIME_OFFSET);
 	childSetValue("playback_slider", 0.0f);
 
 	// Set pose
@@ -638,10 +638,10 @@ void LLFloaterAnimPreview::onCommitBaseAnim(LLUICtrl* ctrl, void* data)
 		BOOL paused = avatarp->areAnimationsPaused();
 
 		// stop all other possible base motions
-		avatarp->stopMotion(ANIM_AGENT_STAND, TRUE);
-		avatarp->stopMotion(ANIM_AGENT_WALK, TRUE);
-		avatarp->stopMotion(ANIM_AGENT_SIT, TRUE);
-		avatarp->stopMotion(ANIM_AGENT_HOVER, TRUE);
+		avatarp->stopMotion(previewp->mIDList["Standing"], TRUE);
+		avatarp->stopMotion(previewp->mIDList["Walking"], TRUE);
+		avatarp->stopMotion(previewp->mIDList["Sitting"], TRUE);
+		avatarp->stopMotion(previewp->mIDList["Flying"], TRUE);
 
 		previewp->resetMotion();
 
diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp
index da2a4d9d938..cb0d304aa06 100644
--- a/indra/newview/llfloaterauction.cpp
+++ b/indra/newview/llfloaterauction.cpp
@@ -33,6 +33,7 @@
 
 #include "llviewerprecompiledheaders.h"
 #include "llfloaterauction.h"
+#include "llfloaterregioninfo.h"
 
 #include "lldir.h"
 #include "llgl.h"
@@ -56,6 +57,7 @@
 #include "llviewercontrol.h"
 #include "llui.h"
 #include "llrender.h"
+#include "llsdutil.h"
 
 ///----------------------------------------------------------------------------
 /// Local function declarations, constants, enums, and typedefs
@@ -77,7 +79,9 @@ LLFloaterAuction::LLFloaterAuction(const LLSD& key)
 {
 //	LLUICtrlFactory::getInstance()->buildFloater(this, "floater_auction.xml");
 	mCommitCallbackRegistrar.add("ClickSnapshot",	boost::bind(&LLFloaterAuction::onClickSnapshot, this));
-	mCommitCallbackRegistrar.add("ClickOK",		boost::bind(&LLFloaterAuction::onClickOK, this));
+	mCommitCallbackRegistrar.add("ClickSellToAnyone",		boost::bind(&LLFloaterAuction::onClickSellToAnyone, this));
+	mCommitCallbackRegistrar.add("ClickStartAuction",		boost::bind(&LLFloaterAuction::onClickStartAuction, this));
+	mCommitCallbackRegistrar.add("ClickResetParcel",		boost::bind(&LLFloaterAuction::onClickResetParcel, this));
 }
 
 // Destroys the object
@@ -97,6 +101,8 @@ void LLFloaterAuction::onOpen(const LLSD& key)
 
 void LLFloaterAuction::initialize()
 {
+	mParcelUpdateCapUrl.clear();
+
 	mParcelp = LLViewerParcelMgr::getInstance()->getParcelSelection();
 	LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
 	LLParcel* parcelp = mParcelp->getParcel();
@@ -104,10 +110,23 @@ void LLFloaterAuction::initialize()
 	{
 		mParcelHost = region->getHost();
 		mParcelID = parcelp->getLocalID();
+		mParcelUpdateCapUrl = region->getCapability("ParcelPropertiesUpdate");
 
 		childSetText("parcel_text", parcelp->getName());
 		childEnable("snapshot_btn");
-		childEnable("ok_btn");
+		childEnable("reset_parcel_btn");
+		childEnable("start_auction_btn");
+
+		LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
+		if (panel)
+		{	// Only enable "Sell to Anyone" on Teen grid or if we don't know the ID yet
+			U32 estate_id = panel->getEstateID();
+			childSetEnabled("sell_to_anyone_btn", (estate_id == ESTATE_TEEN || estate_id == 0));
+		}
+		else
+		{	// Don't have the panel up, so don't know if we're on the teen grid or not.  Default to enabling it
+			childEnable("sell_to_anyone_btn");
+		}
 	}
 	else
 	{
@@ -122,8 +141,11 @@ void LLFloaterAuction::initialize()
 		}
 		mParcelID = -1;
 		childSetEnabled("snapshot_btn", false);
-		childSetEnabled("ok_btn", false);
+		childSetEnabled("reset_parcel_btn", false);
+		childSetEnabled("sell_to_anyone_btn", false);
+		childSetEnabled("start_auction_btn", false);
 	}
+
 	mImageID.setNull();
 	mImage = NULL;
 }
@@ -205,7 +227,7 @@ void LLFloaterAuction::onClickSnapshot(void* data)
 }
 
 // static
-void LLFloaterAuction::onClickOK(void* data)
+void LLFloaterAuction::onClickStartAuction(void* data)
 {
 	LLFloaterAuction* self = (LLFloaterAuction*)(data);
 
@@ -244,11 +266,264 @@ void LLFloaterAuction::onClickOK(void* data)
 	msg->sendReliable(self->mParcelHost);
 
 	// clean up floater, and get out
-	self->mImageID.setNull();
-	self->mImage = NULL;
-	self->mParcelID = -1;
-	self->mParcelHost.invalidate();
-	self->closeFloater();
+	self->cleanupAndClose();
+}
+
+
+void LLFloaterAuction::cleanupAndClose()
+{
+	mImageID.setNull();
+	mImage = NULL;
+	mParcelID = -1;
+	mParcelHost.invalidate();
+	closeFloater();
+}
+
+
+
+// static glue
+void LLFloaterAuction::onClickResetParcel(void* data)
+{
+	LLFloaterAuction* self = (LLFloaterAuction*)(data);
+	if (self)
+	{
+		self->doResetParcel();
+	}
+}
+
+
+// Reset all the values for the parcel in preparation for a sale
+void LLFloaterAuction::doResetParcel()
+{
+	LLParcel* parcelp = mParcelp->getParcel();
+	LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
+
+	if (parcelp
+		&& region
+		&& !mParcelUpdateCapUrl.empty())
+	{
+		LLSD body;
+		std::string empty;
+
+		// request new properties update from simulator
+		U32 message_flags = 0x01;
+		body["flags"] = ll_sd_from_U32(message_flags);
+
+		// Set all the default parcel properties for auction
+		body["local_id"] = parcelp->getLocalID();
+
+		U32 parcel_flags = PF_ALLOW_LANDMARK |
+						   PF_ALLOW_FLY	|
+						   PF_CREATE_GROUP_OBJECTS |
+						   PF_ALLOW_ALL_OBJECT_ENTRY |
+						   PF_ALLOW_GROUP_OBJECT_ENTRY |
+						   PF_ALLOW_GROUP_SCRIPTS |
+						   PF_RESTRICT_PUSHOBJECT |
+						   PF_SOUND_LOCAL |
+						   PF_ALLOW_VOICE_CHAT |
+						   PF_USE_ESTATE_VOICE_CHAN;
+
+		body["parcel_flags"] = ll_sd_from_U32(parcel_flags);
+		
+		// Build a parcel name like "Ahern (128,128) PG 4032m"
+		std::ostringstream parcel_name;
+		LLVector3 center_point( parcelp->getCenterpoint() );
+		center_point.snap(0);		// Get rid of fractions
+		parcel_name << region->getName() 
+					<< " ("
+					<< (S32) center_point.mV[VX]
+					<< ","
+					<< (S32) center_point.mV[VY]						
+					<< ") "
+					<< region->getSimAccessString()
+					<< " "
+					<< parcelp->getArea()
+					<< "m";
+
+		std::string new_name(parcel_name.str().c_str());
+		body["name"] = new_name;
+		childSetText("parcel_text", new_name);	// Set name in dialog as well, since it won't get updated otherwise
+
+		body["sale_price"] = (S32) 0;
+		body["description"] = empty;
+		body["music_url"] = empty;
+		body["media_url"] = empty;
+		body["media_desc"] = empty;
+		body["media_type"] = std::string("none/none");
+		body["media_width"] = (S32) 0;
+		body["media_height"] = (S32) 0;
+		body["auto_scale"] = (S32) 0;
+		body["media_loop"] = (S32) 0;
+		body["obscure_media"] = (S32) 0;
+		body["obscure_music"] = (S32) 0;
+		body["media_id"] = LLUUID::null;
+		body["group_id"] = MAINTENANCE_GROUP_ID;	// Use maintenance group
+		body["pass_price"] = (S32) 10;		// Defaults to $10
+		body["pass_hours"] = 0.0f;
+		body["category"] = (U8) LLParcel::C_NONE;
+		body["auth_buyer_id"] = LLUUID::null;
+		body["snapshot_id"] = LLUUID::null;
+		body["user_location"] = ll_sd_from_vector3( LLVector3::zero );
+		body["user_look_at"] = ll_sd_from_vector3( LLVector3::zero );
+		body["landing_type"] = (U8) LLParcel::L_DIRECT;
+
+		llinfos << "Sending parcel update to reset for auction via capability to: "
+			<< mParcelUpdateCapUrl << llendl;
+		LLHTTPClient::post(mParcelUpdateCapUrl, body, new LLHTTPClient::Responder());
+
+		// Send a message to clear the object return time
+		LLMessageSystem *msg = gMessageSystem;
+		msg->newMessageFast(_PREHASH_ParcelSetOtherCleanTime);
+		msg->nextBlockFast(_PREHASH_AgentData);
+		msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+		msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+		msg->nextBlockFast(_PREHASH_ParcelData);
+		msg->addS32Fast(_PREHASH_LocalID, parcelp->getLocalID());
+		msg->addS32Fast(_PREHASH_OtherCleanTime, 5);			// 5 minute object auto-return
+
+		msg->sendReliable(region->getHost());
+
+		// Clear the access lists
+		clearParcelAccessLists(parcelp, region);
+	}
+}
+
+
+
+void LLFloaterAuction::clearParcelAccessLists(LLParcel* parcel, LLViewerRegion* region)
+{
+	if (!region || !parcel) return;
+
+	LLUUID transactionUUID;
+	transactionUUID.generate();
+
+	LLMessageSystem* msg = gMessageSystem;
+
+	// Clear access list
+	//	parcel->mAccessList.clear();
+
+	msg->newMessageFast(_PREHASH_ParcelAccessListUpdate);
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
+	msg->nextBlockFast(_PREHASH_Data);
+	msg->addU32Fast(_PREHASH_Flags, AL_ACCESS);
+	msg->addS32(_PREHASH_LocalID, parcel->getLocalID() );
+	msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID);
+	msg->addS32Fast(_PREHASH_SequenceID, 1);			// sequence_id
+	msg->addS32Fast(_PREHASH_Sections, 0);				// num_sections
+
+	// pack an empty block since there will be no data
+	msg->nextBlockFast(_PREHASH_List);
+	msg->addUUIDFast(_PREHASH_ID,  LLUUID::null );
+	msg->addS32Fast(_PREHASH_Time, 0 );
+	msg->addU32Fast(_PREHASH_Flags,	0 );
+
+	msg->sendReliable( region->getHost() );
+
+	// Send message for empty ban list
+	//parcel->mBanList.clear();
+	msg->newMessageFast(_PREHASH_ParcelAccessListUpdate);
+	msg->nextBlockFast(_PREHASH_AgentData);
+	msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
+	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
+	msg->nextBlockFast(_PREHASH_Data);
+	msg->addU32Fast(_PREHASH_Flags, AL_BAN);
+	msg->addS32(_PREHASH_LocalID, parcel->getLocalID() );
+	msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID);
+	msg->addS32Fast(_PREHASH_SequenceID, 1);		// sequence_id
+	msg->addS32Fast(_PREHASH_Sections, 0);			// num_sections
+
+	// pack an empty block since there will be no data
+	msg->nextBlockFast(_PREHASH_List);
+	msg->addUUIDFast(_PREHASH_ID,  LLUUID::null );
+	msg->addS32Fast(_PREHASH_Time, 0 );
+	msg->addU32Fast(_PREHASH_Flags,	0 );
+
+	msg->sendReliable( region->getHost() );
+}
+
+
+
+// static - 'Sell to Anyone' clicked, throw up a confirmation dialog
+void LLFloaterAuction::onClickSellToAnyone(void* data)
+{
+	LLFloaterAuction* self = (LLFloaterAuction*)(data);
+	if (self)
+	{
+		LLParcel* parcelp = self->mParcelp->getParcel();
+
+		// Do a confirmation
+		S32 sale_price = parcelp->getArea();	// Selling for L$1 per meter
+		S32 area = parcelp->getArea();
+
+		LLSD args;
+		args["LAND_SIZE"] = llformat("%d", area);
+		args["SALE_PRICE"] = llformat("%d", sale_price);
+		args["NAME"] = "Anyone";
+
+		LLNotification::Params params("ConfirmLandSaleChange");	// Re-use existing dialog
+		params.substitutions(args)
+			.functor.function(boost::bind(&LLFloaterAuction::onSellToAnyoneConfirmed, self, _1, _2));
+
+		params.name("ConfirmLandSaleToAnyoneChange");
+		
+		// ask away
+		LLNotifications::instance().add(params);
+	}
+}
+
+
+// Sell confirmation clicked
+bool LLFloaterAuction::onSellToAnyoneConfirmed(const LLSD& notification, const LLSD& response)	
+{
+	S32 option = LLNotification::getSelectedOption(notification, response);
+	if (option == 0)
+	{
+		doSellToAnyone();
+	}
+
+	return false;
+}
+
+
+
+// Reset all the values for the parcel in preparation for a sale
+void LLFloaterAuction::doSellToAnyone()
+{
+	LLParcel* parcelp = mParcelp->getParcel();
+	LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
+
+	if (parcelp
+		&& region
+		&& !mParcelUpdateCapUrl.empty())
+	{
+		LLSD body;
+		std::string empty;
+
+		// request new properties update from simulator
+		U32 message_flags = 0x01;
+		body["flags"] = ll_sd_from_U32(message_flags);
+
+		// Set all the default parcel properties for auction
+		body["local_id"] = parcelp->getLocalID();
+
+		// Set 'for sale' flag
+		U32 parcel_flags = parcelp->getParcelFlags() | PF_FOR_SALE;
+		// Ensure objects not included
+		parcel_flags &= ~PF_FOR_SALE_OBJECTS;
+		body["parcel_flags"] = ll_sd_from_U32(parcel_flags);
+		
+		body["sale_price"] = parcelp->getArea();	// Sell for L$1 per square meter
+		body["auth_buyer_id"] = LLUUID::null;		// To anyone
+
+		llinfos << "Sending parcel update to sell to anyone for L$1 via capability to: "
+			<< mParcelUpdateCapUrl << llendl;
+		LLHTTPClient::post(mParcelUpdateCapUrl, body, new LLHTTPClient::Responder());
+
+		// clean up floater, and get out
+		cleanupAndClose();
+	}
 }
 
 
diff --git a/indra/newview/llfloaterauction.h b/indra/newview/llfloaterauction.h
index 1acc08057c3..c599af782dc 100644
--- a/indra/newview/llfloaterauction.h
+++ b/indra/newview/llfloaterauction.h
@@ -45,6 +45,8 @@
 // Class which holds the functionality to start auctions.
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 class LLParcelSelection;
+class LLParcel;
+class LLViewerRegion;
 
 class LLFloaterAuction : public LLFloater
 {
@@ -62,16 +64,28 @@ class LLFloaterAuction : public LLFloater
 	void initialize();
 
 	static void onClickSnapshot(void* data);
-	static void onClickOK(void* data);
+	static void onClickResetParcel(void* data);
+	static void onClickSellToAnyone(void* data);		// Sell to anyone clicked
+	bool onSellToAnyoneConfirmed(const LLSD& notification, const LLSD& response);	// Sell confirmation clicked
+	static void onClickStartAuction(void* data);
 
 	/*virtual*/ BOOL postBuild();
+
+	void doResetParcel();
+	void doSellToAnyone();
+	void clearParcelAccessLists( LLParcel* parcel, LLViewerRegion* region );
+	void cleanupAndClose();
+
 private:
+
 	LLTransactionID mTransactionID;
 	LLAssetID mImageID;
 	LLPointer<LLViewerTexture> mImage;
 	LLSafeHandle<LLParcelSelection> mParcelp;
 	S32 mParcelID;
 	LLHost mParcelHost;
+
+	std::string mParcelUpdateCapUrl;	// "ParcelPropertiesUpdate" capability
 };
 
 
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 890d863db74..ccfe7d4b649 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -69,7 +69,7 @@ LLFloaterAvatarPicker* LLFloaterAvatarPicker::show(callback_t callback,
 // Default constructor
 LLFloaterAvatarPicker::LLFloaterAvatarPicker(const LLSD& key)
   : LLFloater(key),
-	mResultsReturned(FALSE),
+	mNumResultsReturned(0),
 	mCallback(NULL),
 	mCallbackUserdata(NULL),
 	mNearMeListComplete(FALSE),
@@ -314,7 +314,7 @@ void LLFloaterAvatarPicker::find()
 	getChild<LLScrollListCtrl>("SearchResults")->setCommentText(getString("searching"));
 	
 	childSetEnabled("Select", FALSE);
-	mResultsReturned = FALSE;
+	mNumResultsReturned = 0;
 }
 
 void LLFloaterAvatarPicker::setAllowMultiple(BOOL allow_multiple)
@@ -349,9 +349,10 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*
 	LLScrollListCtrl* search_results = floater->getChild<LLScrollListCtrl>("SearchResults");
 
 	// clear "Searching" label on first results
-	search_results->deleteAllItems();
-
-	floater->mResultsReturned = TRUE;
+	if (floater->mNumResultsReturned++ == 0)
+	{
+		search_results->deleteAllItems();
+	}
 
 	BOOL found_one = FALSE;
 	S32 num_new_rows = msg->getNumberOfBlocks("Data");
diff --git a/indra/newview/llfloateravatarpicker.h b/indra/newview/llfloateravatarpicker.h
index f3b9aefb9cf..85aacb68a59 100644
--- a/indra/newview/llfloateravatarpicker.h
+++ b/indra/newview/llfloateravatarpicker.h
@@ -76,7 +76,7 @@ class LLFloaterAvatarPicker : public LLFloater
 	virtual BOOL handleKeyHere(KEY key, MASK mask);
 
 	LLUUID				mQueryID;
-	BOOL				mResultsReturned;
+	int				mNumResultsReturned;
 	BOOL				mNearMeListComplete;
 	BOOL				mCloseOnSelect;
 
diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index e0fe87f9aed..1300103423c 100644
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -211,25 +211,16 @@ void LLFloaterGesture::buildGestureList()
 			std::string key_string = LLKeyboard::stringFromKey(gesture->mKey);
 			std::string buffer;
 
+			if (gesture->mKey == KEY_NONE)
 			{
-				if (gesture->mKey == KEY_NONE)
-				{
-					buffer = "---";
-					key_string = "~~~";		// alphabetize to end
-				}
-				else
-				{
-					if (gesture->mMask & MASK_CONTROL) buffer.append("Ctrl-");
-					if (gesture->mMask & MASK_ALT) buffer.append("Alt-");
-					if (gesture->mMask & MASK_SHIFT) buffer.append("Shift-");
-					if ((gesture->mMask & (MASK_CONTROL|MASK_ALT|MASK_SHIFT)) &&
-						(key_string[0] == '-' || key_string[0] == '='))
-					{
-						buffer.append(" ");
-					}
-					buffer.append(key_string);
-				}
+				buffer = "---";
+				key_string = "~~~";		// alphabetize to end
 			}
+			else
+			{
+				buffer = LLKeyboard::stringFromAccelerator( gesture->mMask, gesture->mKey );
+			}
+
 			element["columns"][1]["column"] = "shortcut";
 			element["columns"][1]["value"] = buffer;
 			element["columns"][1]["font"]["name"] = "SANSSERIF";
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index a378a511b51..c1031ee4378 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -105,7 +105,7 @@ class LLParcelSelectionObserver : public LLParcelObserver
 // LLFloaterLand
 //---------------------------------------------------------------------------
 
-void send_parcel_select_objects(S32 parcel_local_id, S32 return_type,
+void send_parcel_select_objects(S32 parcel_local_id, U32 return_type,
 								uuid_list_t* return_ids = NULL)
 {
 	LLMessageSystem *msg = gMessageSystem;
@@ -123,7 +123,7 @@ void send_parcel_select_objects(S32 parcel_local_id, S32 return_type,
 	msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
 	msg->nextBlockFast(_PREHASH_ParcelData);
 	msg->addS32Fast(_PREHASH_LocalID, parcel_local_id);
-	msg->addS32Fast(_PREHASH_ReturnType, return_type);
+	msg->addU32Fast(_PREHASH_ReturnType, return_type);
 
 	// Throw all return ids into the packet.
 	// TODO: Check for too many ids.
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index 1ec869da738..70a3ad5252d 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -143,6 +143,7 @@ BOOL LLFloaterReporter::postBuild()
 	LLViewerRegion *regionp = gAgent.getRegion();
 	if (regionp)
 	{
+		childSetText("sim_field", regionp->getName());
 		pos -= regionp->getOriginGlobal();
 	}
 	setPosBox(pos);
diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp
index 43d31aa30a4..2d8ccd1aef7 100644
--- a/indra/newview/llfloatersellland.cpp
+++ b/indra/newview/llfloatersellland.cpp
@@ -47,7 +47,7 @@
 #include "llviewerwindow.h"
 
 // defined in llfloaterland.cpp
-void send_parcel_select_objects(S32 parcel_local_id, S32 return_type,
+void send_parcel_select_objects(S32 parcel_local_id, U32 return_type,
 								uuid_list_t* return_ids = NULL);
 
 enum Badge { BADGE_OK, BADGE_NOTE, BADGE_WARN, BADGE_ERROR };
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index b64d8ab3347..e00b352c9bd 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -417,6 +417,11 @@ void LLFloaterTools::refresh()
 	LLResMgr::getInstance()->getIntegerString(prim_count_string, LLSelectMgr::getInstance()->getSelection()->getObjectCount());
 	childSetTextArg("prim_count", "[COUNT]", prim_count_string);
 
+	// disable the object and prim counts if nothing selected
+	bool have_selection = ! LLSelectMgr::getInstance()->getSelection()->isEmpty();
+	childSetEnabled("obj_count", have_selection);
+	childSetEnabled("prim_count", have_selection);
+
 	// Refresh child tabs
 	mPanelPermissions->refresh();
 	mPanelObject->refresh();
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index d653d44f8c9..b7e8835fb88 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -49,6 +49,7 @@
 #include "llfirstuse.h"
 #include "llfloaterreg.h"		// getTypedInstance()
 #include "llfocusmgr.h"
+#include "llinventorymodel.h"
 #include "lllandmarklist.h"
 #include "lllineeditor.h"
 #include "llregionhandle.h"
@@ -57,7 +58,7 @@
 #include "lltabcontainer.h"
 #include "lltextbox.h"
 #include "lltracker.h"
-#include "llinventorymodel.h"
+#include "lltrans.h"
 #include "llviewerinventory.h"	// LLViewerInventoryItem
 #include "llviewermenu.h"
 #include "llviewerregion.h"
@@ -151,7 +152,6 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key)
 	mFriendObserver(NULL),
 	mCompletingRegionName(""),
 	mWaitingForTracker(FALSE),
-	mExactMatch(FALSE),
 	mIsClosing(FALSE),
 	mSetToUserPosition(TRUE),
 	mTrackedLocation(0,0,0),
@@ -903,7 +903,6 @@ void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui)
 	}
 	LLWorldMap::getInstance()->mIsTrackingCommit = FALSE;
 	mCompletingRegionName = "";
-	mExactMatch = FALSE;
 }
 
 
@@ -1163,7 +1162,6 @@ void LLFloaterWorldMap::onLocationCommit()
 	LLStringUtil::toLower(str);
 	mCompletingRegionName = str;
 	LLWorldMap::getInstance()->mIsTrackingCommit = TRUE;
-	mExactMatch = FALSE;
 	if (str.length() >= 3)
 	{
 		LLWorldMap::getInstance()->sendNamedRegionRequest(str);
@@ -1418,11 +1416,10 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
 	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("search_results");
 	list->operateOnAll(LLCtrlListInterface::OP_DELETE);
 
-	LLSD selected_value = list->getSelectedValue();
-
 	S32 name_length = mCompletingRegionName.length();
 
-	BOOL match_found = FALSE;
+	LLSD match;
+	
 	S32 num_results = 0;
 	std::map<U64, LLSimInfo*>::const_iterator it;
 	for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
@@ -1434,15 +1431,11 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
 
 		if (sim_name_lower.substr(0, name_length) == mCompletingRegionName)
 		{
-			if (LLWorldMap::getInstance()->mIsTrackingCommit)
+			if (sim_name_lower == mCompletingRegionName)
 			{
-				if (sim_name_lower == mCompletingRegionName)
-				{
-					selected_value = sim_name;
-					match_found = TRUE;
-				}
+				match = sim_name;
 			}
-
+			
 			LLSD value;
 			value["id"] = sim_name;
 			value["columns"][0]["column"] = "sim_name";
@@ -1451,29 +1444,24 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
 			num_results++;
 		}
 	}
-	
-	list->selectByValue(selected_value);
 
 	if (found_null_sim)
 	{
 		mCompletingRegionName = "";
 	}
 
-	if (match_found)
-	{
-		mExactMatch = TRUE;
-		childSetFocus("search_results");
-		onCommitSearchResult();
-	}
-	else if (!mExactMatch && num_results > 0)
+	// if match found, highlight it and go
+	if (!match.isUndefined())
 	{
-		list->selectFirstItem(); // select first item by default
+		list->selectByValue(match);
 		childSetFocus("search_results");
 		onCommitSearchResult();
 	}
-	else if (num_results == 0)
+
+	// if we found nothing, say "none"
+	if (num_results == 0)
 	{
-		list->setCommentText(std::string("None found."));
+		list->setCommentText(LLTrans::getString("worldmap_results_none_found"));
 		list->operateOnAll(LLCtrlListInterface::OP_DESELECT);
 	}
 }
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index 6d5b7543d4e..20a8e6d3217 100644
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -174,7 +174,6 @@ class LLFloaterWorldMap : public LLFloater
 	std::string				mCompletingRegionName;
 	std::string				mLastRegionName;
 	BOOL					mWaitingForTracker;
-	BOOL					mExactMatch;
 
 	BOOL					mIsClosing;
 	BOOL					mSetToUserPosition;
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
index 99f331d0877..c2d515f1583 100644
--- a/indra/newview/llimpanel.cpp
+++ b/indra/newview/llimpanel.cpp
@@ -1654,6 +1654,8 @@ void LLFloaterIMPanel::sendMsg()
 		LLWString text = mInputEditor->getConvertedText();
 		if(!text.empty())
 		{
+			// store sent line in history, duplicates will get filtered
+			if (mInputEditor) mInputEditor->updateHistory();
 			// Truncate and convert to UTF8 for transport
 			std::string utf8_text = wstring_to_utf8str(text);
 			utf8_text = utf8str_truncate(utf8_text, MAX_MSG_BUF_SIZE - 1);
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index d4a93242081..1880a574a76 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2316,6 +2316,8 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 	LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH);
 	LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND);
 
+	mItems.clear(); //adding code to clear out member Items (which means Items should not have other data here at this point)
+	mDisabledItems.clear(); //adding code to clear out disabled members from previous 
 	if (lost_and_found_id == mUUID)
 	  {
 		// This is the lost+found folder.
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index b4d3f4575bc..7ec8d3d0034 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -131,6 +131,13 @@ BOOL LLInventoryFilter::check(LLFolderViewItem* item)
 		&& (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos)
 		&& ((listener->getPermissionMask() & mFilterOps.mPermissions) == mFilterOps.mPermissions)
 		&& (listener->getCreationDate() >= earliest && listener->getCreationDate() <= mFilterOps.mMaxDate);
+
+	BOOL is_folder = (dynamic_cast<LLFolderViewFolder*>(item) != NULL);
+	if (is_folder && mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS)
+	{
+		passed = TRUE;
+	}
+
 	return passed;
 }
 
diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp
index 14a8b7cb598..c99e67be3f2 100644
--- a/indra/newview/llmaniprotate.cpp
+++ b/indra/newview/llmaniprotate.cpp
@@ -1234,9 +1234,9 @@ LLVector3 LLManipRotate::getConstraintAxis()
 		else
 		{
 #ifndef LL_RELEASE_FOR_DOWNLOAD
-			llerrs << "Got bogus hit part in LLManipRotate::getConstraintAxis():" << mManipPart << llendl
+			llerrs << "Got bogus hit part in LLManipRotate::getConstraintAxis():" << mManipPart << llendl;
 #else
-			llwarns << "Got bogus hit part in LLManipRotate::getConstraintAxis():" << mManipPart << llendl
+			llwarns << "Got bogus hit part in LLManipRotate::getConstraintAxis():" << mManipPart << llendl;
 #endif
 			axis.mV[0] = 1.f;
 		}
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index e2281743c92..206d8428be2 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -101,14 +101,13 @@ void LLPanelGroupTab::handleClickHelp()
 }
 
 LLPanelGroup::LLPanelGroup()
-:	LLPanel()
-	,LLGroupMgrObserver( LLUUID() )
-	,mAllowEdit(TRUE)
+:	LLPanel(),
+	LLGroupMgrObserver( LLUUID() ),
+	mAllowEdit( TRUE )
 {
 	// Set up the factory callbacks.
 	// Roles sub tabs
 	LLGroupMgr::getInstance()->addObserver(this);
-
 }
 
 
@@ -247,6 +246,7 @@ void LLPanelGroup::onBackBtnClick()
 	}
 }
 
+
 void LLPanelGroup::onBtnCreate()
 {
 	LLPanelGroupGeneral* panel_general = findChild<LLPanelGroupGeneral>("group_general_tab_panel");
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 0331fad60c0..a6b67d668aa 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -186,7 +186,7 @@ BOOL LLPanelGroupGeneral::postBuild()
 	}
 
 	mIncompleteMemberDataStr = getString("incomplete_member_data_str");
-	
+
 	// If the group_id is null, then we are creating a new group
 	if (mGroupID.isNull())
 	{
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index 32ed20bd56c..ab2afb80560 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -1178,7 +1178,7 @@ void LLPreviewGesture::onSaveComplete(const LLUUID& asset_uuid, void* user_data,
 			else
 			{
 				llwarns << "Inventory item for gesture " << info->mItemUUID
-						<< " is no longer in agent inventory." << llendl
+						<< " is no longer in agent inventory." << llendl;
 			}
 		}
 		else
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 19bb60b237f..ac7abf14485 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -1260,7 +1260,7 @@ void LLPreviewLSL::onSaveComplete(const LLUUID& asset_uuid, void* user_data, S32
 			else
 			{
 				llwarns << "Inventory item for script " << info->mItemUUID
-					<< " is no longer in agent inventory." << llendl
+					<< " is no longer in agent inventory." << llendl;
 			}
 
 			// Find our window and close it if requested.
@@ -1383,6 +1383,7 @@ void LLPreviewLSL::onLoadComplete( LLVFS *vfs, const LLUUID& asset_uuid, LLAsset
 	delete item_uuid;
 }
 
+
 /// ---------------------------------------------------------------------------
 /// LLLiveLSLEditor
 /// ---------------------------------------------------------------------------
@@ -2145,6 +2146,7 @@ void LLLiveLSLEditor::processScriptRunningReply(LLMessageSystem* msg, void**)
 	}
 }
 
+
 void LLLiveLSLEditor::onMonoCheckboxClicked(LLUICtrl*, void* userdata)
 {
 	LLLiveLSLEditor* self = static_cast<LLLiveLSLEditor*>(userdata);
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 9d7338c111c..9c21faa3be5 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -38,6 +38,7 @@
 
 #include "llagent.h"
 #include "llbutton.h"
+#include "llcombobox.h"
 #include "llfilepicker.h"
 #include "llfloaterreg.h"
 #include "llimagetga.h"
@@ -57,6 +58,10 @@ const S32 CLIENT_RECT_VPAD = 4;
 
 const F32 SECONDS_TO_SHOW_FILE_SAVED_MSG = 8.f;
 
+const F32 PREVIEW_TEXTURE_MAX_ASPECT = 200.f;
+const F32 PREVIEW_TEXTURE_MIN_ASPECT = 0.005f;
+
+
 LLPreviewTexture::LLPreviewTexture(const LLSD& key)
 	: LLPreview( key ),
 	  mLoadingFullImage( FALSE ),
@@ -65,7 +70,8 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
 	  mIsCopyable(FALSE),
 	  mUpdateDimensions(TRUE),
 	  mLastHeight(0),
-	  mLastWidth(0)
+	  mLastWidth(0),
+	  mAspectRatio(0.f)
 {
 	const LLInventoryItem *item = getItem();
 	if(item)
@@ -144,6 +150,10 @@ BOOL LLPreviewTexture::postBuild()
 		}
 	}
 	
+	childSetCommitCallback("combo_aspect_ratio", onAspectRatioCommit, this);
+	LLComboBox* combo = getChild<LLComboBox>("combo_aspect_ratio");
+	combo->setCurrentByIndex(0);
+	
 	return LLPreview::postBuild();
 }
 
@@ -369,8 +379,13 @@ void LLPreviewTexture::updateDimensions()
 	S32 max_client_width = gViewerWindow->getWindowWidth() - horiz_pad;
 	S32 max_client_height = gViewerWindow->getWindowHeight() - vert_pad;
 
+	if (mAspectRatio > 0.f)
+	{
+		client_height = llceil((F32)client_width / mAspectRatio);
+	}
+
 	while ((client_width > max_client_width) ||
-	       (client_height > max_client_height ) )
+	       (client_height > max_client_height ))
 	{
 		client_width /= 2;
 		client_height /= 2;
@@ -383,12 +398,12 @@ void LLPreviewTexture::updateDimensions()
 	childSetTextArg("dimensions", "[WIDTH]", llformat("%d", mImage->getFullWidth()));
 	childSetTextArg("dimensions", "[HEIGHT]", llformat("%d", mImage->getFullHeight()));
 	
-	// add space for dimensions
+	// add space for dimensions and aspect ratio
 	S32 info_height = 0;
-	LLRect dim_rect;
-	childGetRect("dimensions", dim_rect);
-	S32 dim_height = dim_rect.getHeight();
-	info_height += dim_height + CLIENT_RECT_VPAD;
+	LLRect aspect_rect;
+	childGetRect("combo_aspect_ratio", aspect_rect);
+	S32 aspect_height = aspect_rect.getHeight();
+	info_height += aspect_height + CLIENT_RECT_VPAD;
 	view_height += info_height;
 	
 	S32 button_height = 0;
@@ -445,24 +460,96 @@ void LLPreviewTexture::updateDimensions()
 	else
 	{
 		client_width = getRect().getWidth() - horiz_pad;
-		client_height = getRect().getHeight() - vert_pad;
+		if (mAspectRatio > 0)
+		{
+			client_height = llround(client_width / mAspectRatio);
+		}
+		else
+		{
+			client_height = getRect().getHeight() - vert_pad;
+		}
 	}
 
-	S32 max_height = getRect().getHeight() - PREVIEW_BORDER - button_height
+	S32 max_height = getRect().getHeight() - PREVIEW_BORDER - button_height 
 		- CLIENT_RECT_VPAD - info_height - CLIENT_RECT_VPAD - PREVIEW_HEADER_SIZE;
-	S32 max_width = getRect().getWidth() - horiz_pad;
 
-	client_height = llclamp(client_height, 1, max_height);
-	client_width = llclamp(client_width, 1, max_width);
+	if (mAspectRatio > 0.f)
+	{
+		max_height = llmax(max_height, 1);
+
+		if (client_height > max_height)
+		{
+			client_height = max_height;
+			client_width = llround(client_height * mAspectRatio);
+		}
+	}
+	else
+	{
+		S32 max_width = getRect().getWidth() - horiz_pad;
+
+		client_height = llclamp(client_height, 1, max_height);
+		client_width = llclamp(client_width, 1, max_width);
+	}
 	
 	LLRect window_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
 	window_rect.mTop -= (PREVIEW_HEADER_SIZE + CLIENT_RECT_VPAD);
 	window_rect.mBottom += PREVIEW_BORDER + button_height + CLIENT_RECT_VPAD + info_height + CLIENT_RECT_VPAD;
 
-	mClientRect.setLeftTopAndSize(window_rect.getCenterX() - (client_width / 2), window_rect.mTop, client_width, client_height);
+	mClientRect.setLeftTopAndSize(window_rect.getCenterX() - (client_width / 2), window_rect.mTop, client_width, client_height);	
+	
+	// Hide the aspect ratio label if the window is too narrow
+	// Assumes the label should be to the right of the dimensions
+	LLRect dim_rect, aspect_label_rect;
+	childGetRect("aspect_ratio", aspect_label_rect);
+	childGetRect("dimensions", dim_rect);
+	childSetVisible("aspect_ratio", dim_rect.mRight < aspect_label_rect.mLeft);
+}
+
+
+// Return true if everything went fine, false if we somewhat modified the ratio as we bumped on border values
+bool LLPreviewTexture::setAspectRatio(const F32 width, const F32 height)
+{
+	mUpdateDimensions = TRUE;
+
+	// We don't allow negative width or height. Also, if height is positive but too small, we reset to default
+	// A default 0.f value for mAspectRatio means "unconstrained" in the rest of the code
+	if ((width <= 0.f) || (height <= F_APPROXIMATELY_ZERO))
+	{
+		mAspectRatio = 0.f;
+		return false;
+	}
+	
+	// Compute and store the ratio
+	F32 ratio = width / height;
+	mAspectRatio = llclamp(ratio, PREVIEW_TEXTURE_MIN_ASPECT, PREVIEW_TEXTURE_MAX_ASPECT);
+	
+	// Return false if we clamped the value, true otherwise
+	return (ratio == mAspectRatio);
 }
 
 
+void LLPreviewTexture::onAspectRatioCommit(LLUICtrl* ctrl, void* userdata)
+{	
+	LLPreviewTexture* self = (LLPreviewTexture*) userdata;
+	
+	std::string ratio(ctrl->getValue().asString());
+	std::string::size_type separator(ratio.find_first_of(":/\\"));
+	
+	if (std::string::npos == separator) {
+		// If there's no separator assume we want an unconstrained ratio
+		self->setAspectRatio( 0.f, 0.f );
+		return;
+	}
+	
+	F32 width, height;
+	std::istringstream numerator(ratio.substr(0, separator));
+	std::istringstream denominator(ratio.substr(separator + 1));
+	numerator >> width;
+	denominator >> height;
+	
+	self->setAspectRatio( width, height );	
+}
+
 void LLPreviewTexture::loadAsset()
 {
 	mImage = LLViewerTextureManager::getFetchedTexture(mImageID, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE);
diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h
index 9ace304fa63..520626b49f1 100644
--- a/indra/newview/llpreviewtexture.h
+++ b/indra/newview/llpreviewtexture.h
@@ -38,6 +38,7 @@
 #include "llframetimer.h"
 #include "llviewertexture.h"
 
+class LLComboBox;
 class LLImageRaw;
 
 class LLPreviewTexture : public LLPreview
@@ -71,7 +72,9 @@ class LLPreviewTexture : public LLPreview
 protected:
 	void				init();
 	/* virtual */ BOOL	postBuild();
-
+	bool				setAspectRatio(const F32 width, const F32 height);
+	static void			onAspectRatioCommit(LLUICtrl*,void* userdata);
+	
 private:
 	void				updateDimensions();
 	LLUUID						mImageID;
@@ -88,6 +91,7 @@ class LLPreviewTexture : public LLPreview
 
 	S32 mLastHeight;
 	S32 mLastWidth;
+	F32 mAspectRatio;
 	BOOL mUpdateDimensions;
 };
 
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index d163ceb30e2..288cf728b94 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -545,7 +545,7 @@ BOOL LLSelectMgr::removeObjectFromSelections(const LLUUID &id)
 				object_found = TRUE;
 				break; // must break here, may have removed multiple objects from list
 			}
-			else if (object->isAvatar())
+			else if (object->isAvatar() && object->getParent() && ((LLViewerObject*)object->getParent())->mID == id)
 			{
 				// It's possible the item being removed has an avatar sitting on it
 				// So remove the avatar that is sitting on the object.
diff --git a/indra/newview/llsky.cpp b/indra/newview/llsky.cpp
index a49b07c5d9c..de99cb86fa9 100644
--- a/indra/newview/llsky.cpp
+++ b/indra/newview/llsky.cpp
@@ -66,6 +66,9 @@ F32 elevation_from_vector(const LLVector3 &v);
 LLSky				gSky;
 // ---------------- LLSky ----------------
 
+const F32 LLSky::NIGHTTIME_ELEVATION = -8.0f; // degrees
+const F32 LLSky::NIGHTTIME_ELEVATION_COS = (F32)sin(NIGHTTIME_ELEVATION*DEG_TO_RAD);
+
 //////////////////////////////////////////////////////////////////////
 // Construction/Destruction
 //////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llsky.h b/indra/newview/llsky.h
index abd4205e6c8..d7796dea832 100644
--- a/indra/newview/llsky.h
+++ b/indra/newview/llsky.h
@@ -42,9 +42,6 @@
 #include "llvosky.h"
 #include "llvoground.h"
 
-const F32 NIGHTTIME_ELEVATION			= -8.0f;	// degrees
-const F32 NIGHTTIME_ELEVATION_COS		= (F32)sin(NIGHTTIME_ELEVATION*DEG_TO_RAD);
-
 class LLViewerCamera;
 
 class LLVOWLSky;
@@ -111,6 +108,9 @@ class LLSky
 	// Legacy stuff
 	LLVector3 mSunDefaultPosition;
 
+	static const F32 NIGHTTIME_ELEVATION;	// degrees
+	static const F32 NIGHTTIME_ELEVATION_COS;
+
 protected:
 	BOOL			mOverrideSimSunPosition;
 
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 62435c62882..9cd3acf13ed 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -977,6 +977,13 @@ bool idle_startup()
 		LLFile::mkdir(gDirUtilp->getChatLogsDir());
 		LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir());
 
+		// chat history must be loaded AFTER chat directories are defined.
+		if (!gNoRender && gSavedPerAccountSettings.getBOOL("LogShowHistory"))
+		{
+			LLFloaterChat::loadHistory();
+		}
+		
+		
 		//good as place as any to create user windlight directories
 		std::string user_windlight_path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight", ""));
 		LLFile::mkdir(user_windlight_path_name.c_str());		
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 63af170fa97..88fc7f98c01 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -1371,7 +1371,7 @@ bool LLTextureFetch::createRequest(const std::string& filename, const LLUUID& id
 	}
 	else if (w*h*c > 0)
 	{
-		// If the requester knows the dimentions of the image,
+		// If the requester knows the dimensions of the image,
 		// this will calculate how much data we need without having to parse the header
 
 		desired_size = LLImageJ2C::calcDataSizeJ2C(w, h, c, desired_discard);
diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp
index ee6ef6ffee3..f65baea6ca0 100644
--- a/indra/newview/llviewercamera.cpp
+++ b/indra/newview/llviewercamera.cpp
@@ -120,9 +120,8 @@ void LLViewerCamera::updateCameraLocation(const LLVector3 &center,
 											const LLVector3 &up_direction,
 											const LLVector3 &point_of_interest)
 {
-	// do not update if we are in build mode AND avatar didn't move
-	if (LLToolMgr::getInstance()->inBuildMode() 
-		&& !LLViewerJoystick::getInstance()->getCameraNeedsUpdate())
+	// do not update if avatar didn't move
+	if (!LLViewerJoystick::getInstance()->getCameraNeedsUpdate())
 	{
 		return;
 	}
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index fa826121140..b71291f834f 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -688,7 +688,7 @@ static LLCachedControl<std::string> test_BrowserHomePage("BrowserHomePage", "hah
 
 void test_cached_control()
 {
-#define TEST_LLCC(T, V) if((T)mySetting_##T != V) llerrs << "Fail "#T << llendl
+#define do { TEST_LLCC(T, V) if((T)mySetting_##T != V) llerrs << "Fail "#T << llendl; } while(0)
 	TEST_LLCC(U32, 666);
 	TEST_LLCC(S32, (S32)-666);
 	TEST_LLCC(F32, (F32)-666.666);
diff --git a/indra/newview/llviewerjoystick.cpp b/indra/newview/llviewerjoystick.cpp
index b919e3d1c18..b593fbfb007 100644
--- a/indra/newview/llviewerjoystick.cpp
+++ b/indra/newview/llviewerjoystick.cpp
@@ -414,14 +414,41 @@ void LLViewerJoystick::agentFly(F32 inc)
 }
 
 // -----------------------------------------------------------------------------
-void LLViewerJoystick::agentRotate(F32 pitch_inc, F32 yaw_inc)
+void LLViewerJoystick::agentPitch(F32 pitch_inc)
 {
-	LLQuaternion new_rot;
-	pitch_inc = gAgent.clampPitchToLimits(-pitch_inc);
-	const LLQuaternion qx(pitch_inc, gAgent.getLeftAxis());
-	const LLQuaternion qy(-yaw_inc, gAgent.getReferenceUpVector());
-	new_rot.setQuat(qx * qy);
-	gAgent.rotate(new_rot);
+	if (pitch_inc < 0)
+	{
+		gAgent.setControlFlags(AGENT_CONTROL_PITCH_POS);
+	}
+	else if (pitch_inc > 0)
+	{
+		gAgent.setControlFlags(AGENT_CONTROL_PITCH_NEG);
+	}
+	
+	gAgent.pitch(-pitch_inc);
+}
+
+// -----------------------------------------------------------------------------
+void LLViewerJoystick::agentYaw(F32 yaw_inc)
+{	
+	// Cannot steer some vehicles in mouselook if the script grabs the controls
+	if (gAgent.cameraMouselook() && !gSavedSettings.getBOOL("JoystickMouselookYaw"))
+	{
+		gAgent.rotate(-yaw_inc, gAgent.getReferenceUpVector());
+	}
+	else
+	{
+		if (yaw_inc < 0)
+		{
+			gAgent.setControlFlags(AGENT_CONTROL_YAW_POS);
+		}
+		else if (yaw_inc > 0)
+		{
+			gAgent.setControlFlags(AGENT_CONTROL_YAW_NEG);
+		}
+
+		gAgent.yaw(-yaw_inc);
+	}
 }
 
 // -----------------------------------------------------------------------------
@@ -595,12 +622,38 @@ void LLViewerJoystick::moveAvatar(bool reset)
 	}
 
 	bool is_zero = true;
+	static bool button_held = false;
 
 	if (mBtn[1] == 1)
 	{
-		agentJump();
+		// If AutomaticFly is enabled, then button1 merely causes a
+		// jump (as the up/down axis already controls flying) if on the
+		// ground, or cease flight if already flying.
+		// If AutomaticFly is disabled, then button1 toggles flying.
+		if (gSavedSettings.getBOOL("AutomaticFly"))
+		{
+			if (!gAgent.getFlying())
+			{
+				gAgent.moveUp(1);
+			}
+			else if (!button_held)
+			{
+				button_held = true;
+				gAgent.setFlying(FALSE);
+			}
+		}
+		else if (!button_held)
+		{
+			button_held = true;
+			gAgent.setFlying(!gAgent.getFlying());
+		}
+
 		is_zero = false;
 	}
+	else
+	{
+		button_held = false;
+	}
 
 	F32 axis_scale[] =
 	{
@@ -758,11 +811,13 @@ void LLViewerJoystick::moveAvatar(bool reset)
 		{
 			if (gAgent.getFlying())
 			{
-				agentRotate(eff_rx, eff_ry);
+				agentPitch(eff_rx);
+				agentYaw(eff_ry);
 			}
 			else
 			{
-				agentRotate(eff_rx, 2.f * eff_ry);
+				agentPitch(eff_rx);
+				agentYaw(2.f * eff_ry);
 			}
 		}
 	}
@@ -771,7 +826,8 @@ void LLViewerJoystick::moveAvatar(bool reset)
 		agentSlide(sDelta[X_I]);		// move sideways
 		agentFly(sDelta[Y_I]);			// up/down & crouch
 		agentPush(sDelta[Z_I]);			// forward/back
-		agentRotate(sDelta[RX_I], sDelta[RY_I]);	// pitch & turn
+		agentPitch(sDelta[RX_I]);		// pitch
+		agentYaw(sDelta[RY_I]);			// turn
 	}
 }
 
@@ -963,15 +1019,10 @@ bool LLViewerJoystick::toggleFlycam()
 		moveFlycam(true);
 		
 	}
-	else if (!LLToolMgr::getInstance()->inBuildMode())
-	{
-		moveAvatar(true);
-	}
 	else 
 	{
-		// we are in build mode, exiting from the flycam mode: since we are 
-		// going to keep the flycam POV for the main camera until the avatar
-		// moves, we need to track this situation.
+		// Exiting from the flycam mode: since we are going to keep the flycam POV for
+		// the main camera until the avatar moves, we need to track this situation.
 		setCameraNeedsUpdate(false);
 		setNeedsReset(true);
 	}
diff --git a/indra/newview/llviewerjoystick.h b/indra/newview/llviewerjoystick.h
index b565ed5696c..a3904bd2c38 100644
--- a/indra/newview/llviewerjoystick.h
+++ b/indra/newview/llviewerjoystick.h
@@ -82,8 +82,9 @@ class LLViewerJoystick : public LLSingleton<LLViewerJoystick>
 	void agentSlide(F32 inc);
 	void agentPush(F32 inc);
 	void agentFly(F32 inc);
-	void agentRotate(F32 pitch_inc, F32 turn_inc);
-    void agentJump();
+	void agentPitch(F32 pitch_inc);
+	void agentYaw(F32 yaw_inc);
+	void agentJump();
 	void resetDeltas(S32 axis[]);
 #if LIB_NDOF
 	static NDOF_HotPlugResult HotPlugAddCallback(NDOF_Device *dev);
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 2b972614f1f..b8e945a7b82 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -1000,6 +1000,7 @@ BOOL LLViewerMediaImpl::handleMouseUp(S32 x, S32 y, MASK mask)
 
 	return TRUE; 
 }
+
 //////////////////////////////////////////////////////////////////////////////////////////
 void LLViewerMediaImpl::navigateHome()
 {
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index b4e0d88e798..c2def610dc8 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -4733,6 +4733,96 @@ class LLToolsSnapObjectXY : public view_listener_t
 	}
 };
 
+// Determine if the option to cycle between linked prims is shown
+class LLToolsEnableSelectNextPart : public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		bool new_value = (gSavedSettings.getBOOL("EditLinkedParts") &&
+				 !LLSelectMgr::getInstance()->getSelection()->isEmpty());
+		return new_value;
+	}
+};
+
+// Cycle selection through linked children in selected object.
+// FIXME: Order of children list is not always the same as sim's idea of link order. This may confuse
+// resis. Need link position added to sim messages to address this.
+class LLToolsSelectNextPart : public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		S32 object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
+		if (gSavedSettings.getBOOL("EditLinkedParts") && object_count)
+		{
+			LLViewerObject* selected = LLSelectMgr::getInstance()->getSelection()->getFirstObject();
+			if (selected && selected->getRootEdit())
+			{
+				bool fwd = (userdata.asString() == "next");
+				bool prev = (userdata.asString() == "previous");
+				bool ifwd = (userdata.asString() == "includenext");
+				bool iprev = (userdata.asString() == "includeprevious");
+				LLViewerObject* to_select = NULL;
+				LLViewerObject::child_list_t children = selected->getRootEdit()->getChildren();
+				children.push_front(selected->getRootEdit());	// need root in the list too
+
+				for (LLViewerObject::child_list_t::iterator iter = children.begin(); iter != children.end(); ++iter)
+				{
+					if ((*iter)->isSelected())
+					{
+						if (object_count > 1 && (fwd || prev))	// multiple selection, find first or last selected if not include
+						{
+							to_select = *iter;
+							if (fwd)
+							{
+								// stop searching if going forward; repeat to get last hit if backward
+								break;
+							}
+						}
+						else if ((object_count == 1) || (ifwd || iprev))	// single selection or include
+						{
+							if (fwd || ifwd)
+							{
+								++iter;
+								while (iter != children.end() && ((*iter)->isAvatar() || (ifwd && (*iter)->isSelected())))
+								{
+									++iter;	// skip sitting avatars and selected if include
+								}
+							}
+							else // backward
+							{
+								iter = (iter == children.begin() ? children.end() : iter);
+								--iter;
+								while (iter != children.begin() && ((*iter)->isAvatar() || (iprev && (*iter)->isSelected())))
+								{
+									--iter;	// skip sitting avatars and selected if include
+								}
+							}
+							iter = (iter == children.end() ? children.begin() : iter);
+							to_select = *iter;
+							break;
+						}
+					}
+				}
+
+				if (to_select)
+				{
+					if (gFocusMgr.childHasKeyboardFocus(gFloaterTools))
+					{
+						gFocusMgr.setKeyboardFocus(NULL);	// force edit toolbox to commit any changes
+					}
+					if (fwd || prev)
+					{
+						LLSelectMgr::getInstance()->deselectAll();
+					}
+					LLSelectMgr::getInstance()->selectObjectOnly(to_select);
+					return true;
+				}
+			}
+		}
+		return true;
+	}
+};
+
 // in order to link, all objects must have the same owner, and the
 // agent must have the ability to modify all of the objects. However,
 // we're not answering that question with this method. The question
@@ -7729,6 +7819,7 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLToolsEditLinkedParts(), "Tools.EditLinkedParts");
 	view_listener_t::addMenu(new LLToolsSnapObjectXY(), "Tools.SnapObjectXY");
 	view_listener_t::addMenu(new LLToolsUseSelectionForGrid(), "Tools.UseSelectionForGrid");
+	view_listener_t::addMenu(new LLToolsSelectNextPart(), "Tools.SelectNextPart");
 	view_listener_t::addMenu(new LLToolsLink(), "Tools.Link");
 	view_listener_t::addMenu(new LLToolsUnlink(), "Tools.Unlink");
 	view_listener_t::addMenu(new LLToolsStopAllAnimations(), "Tools.StopAllAnimations");
@@ -7742,6 +7833,7 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLToolsSelectedScriptAction(), "Tools.SelectedScriptAction");
 
 	view_listener_t::addMenu(new LLToolsEnableToolNotPie(), "Tools.EnableToolNotPie");
+	view_listener_t::addMenu(new LLToolsEnableSelectNextPart(), "Tools.EnableSelectNextPart");
 	view_listener_t::addMenu(new LLToolsEnableLink(), "Tools.EnableLink");
 	view_listener_t::addMenu(new LLToolsEnableUnlink(), "Tools.EnableUnlink");
 	view_listener_t::addMenu(new LLToolsEnableBuyOrTake(), "Tools.EnableBuyOrTake");
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 1cfeec5627b..d3a9e1cef8a 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -219,7 +219,7 @@ const std::string upload_pick(void* data)
 			args["EXTENSION"] = ext;
 			args["VALIDS"] = valid_extensions;
 			LLNotifications::instance().add("InvalidFileExtension", args);
-			return NULL;
+			return std::string();
 		}
 	}//end else (non-null extension)
 
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index acdc2c2513f..1d982265caa 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -174,11 +174,28 @@ BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject &object)
 		U32 port = region_host.getPort();
 		U64 ipport = (((U64)ip) << 32) | (U64)port;
 		U32 index = sIPAndPortToIndex[ipport];
-
+		
+		// llinfos << "Removing object from table, local ID " << local_id << ", ip " << ip << ":" << port << llendl;
+		
 		U64	indexid = (((U64)index) << 32) | (U64)local_id;
-		return sIndexAndLocalIDToUUID.erase(indexid) > 0 ? TRUE : FALSE;
+		
+		std::map<U64, LLUUID>::iterator iter = sIndexAndLocalIDToUUID.find(indexid);
+		if (iter == sIndexAndLocalIDToUUID.end())
+		{
+			return FALSE;
+		}
+		
+		// Found existing entry
+		if (iter->second == object.getID())
+		{   // Full UUIDs match, so remove the entry
+			sIndexAndLocalIDToUUID.erase(iter);
+			return TRUE;
+		}
+		// UUIDs did not match - this would zap a valid entry, so don't erase it
+		//llinfos << "Tried to erase entry where id in table (" 
+		//		<< iter->second	<< ") did not match object " << object.getID() << llendl;
 	}
-
+	
 	return FALSE ;
 }
 
@@ -200,6 +217,9 @@ void LLViewerObjectList::setUUIDAndLocal(const LLUUID &id,
 	U64	indexid = (((U64)index) << 32) | (U64)local_id;
 
 	sIndexAndLocalIDToUUID[indexid] = id;
+	
+	//llinfos << "Adding object to table, full ID " << id
+	//	<< ", local ID " << local_id << ", ip " << ip << ":" << port << llendl;
 }
 
 S32 gFullObjectUpdates = 0;
@@ -246,8 +266,8 @@ void LLViewerObjectList::processUpdateCore(LLViewerObject* objectp,
 	{
 		if ( LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance() )
 		{
-			//llinfos << "DEBUG selecting " << objectp->mID << " " 
-			//		<< objectp->mLocalID << llendl;
+			// llinfos << "DEBUG selecting " << objectp->mID << " " 
+			// << objectp->mLocalID << llendl;
 			LLSelectMgr::getInstance()->selectObjectAndFamily(objectp);
 			dialog_refresh_all();
 		}
@@ -294,7 +314,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
 		{
 			size = mesgsys->getReceiveSize();
 		}
-//		llinfos << "Received terse " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl;
+		// llinfos << "Received terse " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl;
 	}
 	else
 	{
@@ -308,7 +328,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
 			size = mesgsys->getReceiveSize();
 		}
 
-//		llinfos << "Received " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl;
+		// llinfos << "Received " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl;
 		gFullObjectUpdates += num_objects;
 	}
 
@@ -318,7 +338,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
 
 	if (!regionp)
 	{
-		llwarns << "Object update from unknown region!" << llendl;
+		llwarns << "Object update from unknown region! " << region_handle << llendl;
 		return;
 	}
 
@@ -357,7 +377,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
 			U8							compbuffer[2048];
 			S32							uncompressed_length = 2048;
 			S32							compressed_length;
-			
 			compressed_dp.reset();
 
 			U32 flags = 0;
@@ -398,7 +417,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
 								 gMessageSystem->getSenderPort());
 				if (fullid.isNull())
 				{
-					//llwarns << "update for unknown localid " << local_id << " host " << gMessageSystem->getSender() << llendl;
+					// llwarns << "update for unknown localid " << local_id << " host " << gMessageSystem->getSender() << ":" << gMessageSystem->getSenderPort() << llendl;
 					mNumUnknownUpdates++;
 				}
 			}
@@ -412,7 +431,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
 							gMessageSystem->getSenderPort());
 			if (fullid.isNull())
 			{
-				//llwarns << "update for unknown localid " << local_id << " host " << gMessageSystem->getSender() << llendl;
+				// llwarns << "update for unknown localid " << local_id << " host " << gMessageSystem->getSender() << llendl;
 				mNumUnknownUpdates++;
 			}
 		}
@@ -420,19 +439,43 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
 		{
 			mesgsys->getUUIDFast(_PREHASH_ObjectData, _PREHASH_FullID, fullid, i);
 			mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, local_id, i);
-		//	llinfos << "Full Update, obj " << local_id << ", global ID" << fullid << "from " << mesgsys->getSender() << llendl;
+			// llinfos << "Full Update, obj " << local_id << ", global ID" << fullid << "from " << mesgsys->getSender() << llendl;
 		}
 		objectp = findObject(fullid);
 
 		// This looks like it will break if the local_id of the object doesn't change
 		// upon boundary crossing, but we check for region id matching later...
-		if (objectp && (objectp->mLocalID != local_id))
+		// Reset object local id and region pointer if things have changed
+		if (objectp && 
+			((objectp->mLocalID != local_id) ||
+			 (objectp->getRegion() != regionp)))
 		{
+			//if (objectp->getRegion())
+			//{
+			//	llinfos << "Local ID change: Removing object from table, local ID " << objectp->mLocalID 
+			//			<< ", id from message " << local_id << ", from " 
+			//			<< LLHost(objectp->getRegion()->getHost().getAddress(), objectp->getRegion()->getHost().getPort())
+			//			<< ", full id " << fullid 
+			//			<< ", objects id " << objectp->getID()
+			//			<< ", regionp " << (U32) regionp << ", object region " << (U32) objectp->getRegion()
+			//			<< llendl;
+			//}
 			removeFromLocalIDTable(*objectp);
 			setUUIDAndLocal(fullid,
 							local_id,
 							gMessageSystem->getSenderIP(),
 							gMessageSystem->getSenderPort());
+			
+			if (objectp->mLocalID != local_id)
+			{    // Update local ID in object with the one sent from the region
+				objectp->mLocalID = local_id;
+			}
+			
+			if (objectp->getRegion() != regionp)
+			{    // Object changed region, so update it
+				objectp->setRegion(regionp);
+				objectp->updateRegion(regionp); // for LLVOAvatar
+			}
 		}
 
 		if (!objectp)
@@ -441,7 +484,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
 			{
 				if (update_type == OUT_TERSE_IMPROVED)
 				{
-					//	llinfos << "terse update for an unknown object:" << fullid << llendl;
+					// llinfos << "terse update for an unknown object:" << fullid << llendl;
 					continue;
 				}
 			}
@@ -452,7 +495,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
 			{
 				if (update_type != OUT_FULL)
 				{
-// 					llinfos << "terse update for an unknown object:" << fullid << llendl;
+					// llinfos << "terse update for an unknown object:" << fullid << llendl;
 					continue;
 				}
 
@@ -462,7 +505,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
 			if (mDeadObjects.find(fullid) != mDeadObjects.end())
 			{
 				mNumDeadObjectUpdates++;
-				//llinfos << "update for a dead object:" << fullid << llendl;
+				// llinfos << "update for a dead object:" << fullid << llendl;
 				continue;
 			}
 #endif
@@ -475,20 +518,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
 			justCreated = TRUE;
 			mNumNewObjects++;
 		}
-		else
-		{
-			if (objectp->getRegion() != regionp)
-			{
-				// Object has changed region!  Update lookup tables, set region pointer.
-				removeFromLocalIDTable(*objectp);
-				setUUIDAndLocal(fullid,
-								local_id,
-								gMessageSystem->getSenderIP(),
-								gMessageSystem->getSenderPort());
-				objectp->setRegion(regionp);
-			}
-			objectp->updateRegion(regionp); // for LLVOAvatar
-		}
 
 
 		if (objectp->isDead())
@@ -623,7 +652,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
 		mCurLazyUpdateIndex = 0;
 	}
 
-	mCurBin = (++mCurBin) % NUM_BINS;
+	mCurBin = (mCurBin + 1) % NUM_BINS;
 
 	LLVOAvatar::cullAvatarsByPixelArea();
 }
@@ -808,6 +837,14 @@ void LLViewerObjectList::cleanupReferences(LLViewerObject *objectp)
 	// Remove from object map so noone can look it up.
 
 	mUUIDObjectMap.erase(objectp->mID);
+	
+	//if (objectp->getRegion())
+	//{
+	//	llinfos << "cleanupReferences removing object from table, local ID " << objectp->mLocalID << ", ip " 
+	//				<< objectp->getRegion()->getHost().getAddress() << ":" 
+	//				<< objectp->getRegion()->getHost().getPort() << llendl;
+	//}	
+	
 	removeFromLocalIDTable(*objectp);
 
 	if (objectp->onActiveList())
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 3cc379821aa..273ca8bd1a6 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1502,11 +1502,6 @@ void LLViewerWindow::initWorldUI()
 	//  currently needs to happen before initializing chat or IM
 	LLFloaterReg::getInstance("communicate");
 
-	if ( gSavedPerAccountSettings.getBOOL("LogShowHistory") )
-	{
-		LLFloaterChat::loadHistory();
-	}
-
 	LLRect morph_view_rect = full_window;
 	morph_view_rect.stretch( -STATUS_BAR_HEIGHT );
 	morph_view_rect.mTop = full_window.mTop - 32;
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 6401389c8f5..ca028269fea 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -1664,7 +1664,6 @@ void LLVoiceClient::stateMachine()
 						// SLIM SDK: these arguments are no longer necessary.
 //						std::string args = " -p tcp -h -c";
 						std::string args;
-						std::string cmd;
 						std::string loglevel = gSavedSettings.getString("VivoxDebugLevel");
 						
 						if(loglevel.empty())
@@ -1679,17 +1678,18 @@ void LLVoiceClient::stateMachine()
 
 #if LL_WINDOWS
 						PROCESS_INFORMATION pinfo;
-						STARTUPINFOA sinfo;
+						STARTUPINFOW sinfo;
 						memset(&sinfo, 0, sizeof(sinfo));
-						std::string exe_dir = gDirUtilp->getAppRODataDir();
-						cmd = "SLVoice.exe";
-						cmd += args;
-						
-						// So retarded.  Windows requires that the second parameter to CreateProcessA be a writable (non-const) string...
-						char *args2 = new char[args.size() + 1];
-						strcpy(args2, args.c_str());
 
-						if(!CreateProcessA(exe_path.c_str(), args2, NULL, NULL, FALSE, 0, NULL, exe_dir.c_str(), &sinfo, &pinfo))
+						std::string exe_dir = gDirUtilp->getExecutableDir();
+
+						llutf16string exe_path16 = utf8str_to_utf16str(exe_path);
+						llutf16string exe_dir16 = utf8str_to_utf16str(exe_dir);
+						llutf16string args16 = utf8str_to_utf16str(args);
+						// Create a writeable copy to keep Windows happy.
+						U16 *argscpy_16 = new U16[args16.size() + 1];
+						wcscpy_s(argscpy_16,args16.size()+1,args16.c_str());
+						if(!CreateProcessW(exe_path16.c_str(), argscpy_16, NULL, NULL, FALSE, 0, NULL, exe_dir16.c_str(), &sinfo, &pinfo))
 						{
 //							DWORD dwErr = GetLastError();
 						}
@@ -1701,7 +1701,7 @@ void LLVoiceClient::stateMachine()
 							CloseHandle(pinfo.hThread); // stops leaks - nothing else
 						}		
 						
-						delete[] args2;
+						delete[] argscpy_16;
 #else	// LL_WINDOWS
 						// This should be the same for mac and linux
 						{
@@ -4972,7 +4972,7 @@ void LLVoiceClient::sessionState::removeAllParticipants()
 	
 	if(!mParticipantsByUUID.empty())
 	{
-		LL_ERRS("Voice") << "Internal error: empty URI map, non-empty UUID map" << LL_ENDL
+		LL_ERRS("Voice") << "Internal error: empty URI map, non-empty UUID map" << LL_ENDL;
 	}
 }
 
@@ -6488,7 +6488,7 @@ void LLVoiceClient::deleteSession(sessionState *session)
 		{
 			if(iter->second != session)
 			{
-				LL_ERRS("Voice") << "Internal error: session mismatch" << LL_ENDL
+				LL_ERRS("Voice") << "Internal error: session mismatch" << LL_ENDL;
 			}
 			mSessionsByHandle.erase(iter);
 		}
@@ -6528,7 +6528,7 @@ void LLVoiceClient::deleteAllSessions()
 	
 	if(!mSessionsByHandle.empty())
 	{
-		LL_ERRS("Voice") << "Internal error: empty session map, non-empty handle map" << LL_ENDL
+		LL_ERRS("Voice") << "Internal error: empty session map, non-empty handle map" << LL_ENDL;
 	}
 }
 
diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp
index 33b86660fa8..d44c5432669 100644
--- a/indra/newview/llvosky.cpp
+++ b/indra/newview/llvosky.cpp
@@ -965,7 +965,7 @@ void LLVOSky::calcAtmospherics(void)
 		
 		// and vary_sunlight will work properly with moon light
 		F32 lighty = unclamped_lightnorm[1];
-		if(lighty < NIGHTTIME_ELEVATION_COS)
+		if(lighty < LLSky::NIGHTTIME_ELEVATION_COS)
 		{
 			lighty = -lighty;
 		}
diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h
index 466cdfdcd01..62c934fb410 100644
--- a/indra/newview/llvosky.h
+++ b/indra/newview/llvosky.h
@@ -147,7 +147,7 @@ class LLSkyTex
 
 	static S32 getResolution()						{ return sResolution; }
 	static S32 getCurrent()						{ return sCurrent; }
-	static S32 stepCurrent()					{ return (sCurrent = ++sCurrent % 2); }
+	static S32 stepCurrent()					{ return (sCurrent = (sCurrent + 1) % 2); }
 	static S32 getNext()						{ return ((sCurrent+1) % 2); }
 	static S32 getWhich(const BOOL curr)		{ return curr ? sCurrent : getNext(); }
 
diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
index 136ffe607d7..c8cc6a3d8eb 100644
--- a/indra/newview/llwaterparammanager.cpp
+++ b/indra/newview/llwaterparammanager.cpp
@@ -304,7 +304,7 @@ void LLWaterParamManager::update(LLViewerCamera * cam)
 		mWaterPlane = LLVector4(enorm.v[0], enorm.v[1], enorm.v[2], -ep.dot(enorm));
 
 		LLVector3 sunMoonDir;
-		if (gSky.getSunDirection().mV[2] > NIGHTTIME_ELEVATION_COS) 	 
+		if (gSky.getSunDirection().mV[2] > LLSky::NIGHTTIME_ELEVATION_COS) 	 
 		{ 	 
 			sunMoonDir = gSky.getSunDirection(); 	 
 		} 	 
diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp
index 4bf64816c7b..1581153c199 100644
--- a/indra/newview/llwlparammanager.cpp
+++ b/indra/newview/llwlparammanager.cpp
@@ -317,7 +317,7 @@ void LLWLParamManager::propagateParameters(void)
 	{
 		mLightDir = sunDir;
 	}
-	else if(sunDir.mV[1] < 0 && sunDir.mV[1] > NIGHTTIME_ELEVATION_COS)
+	else if(sunDir.mV[1] < 0 && sunDir.mV[1] > LLSky::NIGHTTIME_ELEVATION_COS)
 	{
 		// clamp v1 to 0 so sun never points up and causes weirdness on some machines
 		LLVector3 vec(sunDir.mV[0], sunDir.mV[1], sunDir.mV[2]);
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
index a2fd0f0d9c2..58ff84a8a69 100644
--- a/indra/newview/llxmlrpctransaction.cpp
+++ b/indra/newview/llxmlrpctransaction.cpp
@@ -150,11 +150,11 @@ XMLRPC_VALUE LLXMLRPCValue::getValue() const
 class LLXMLRPCTransaction::Impl
 {
 public:
-	typedef LLXMLRPCTransaction::Status	Status;
+	typedef LLXMLRPCTransaction::EStatus	EStatus;
 
 	LLCurlEasyRequest* mCurlRequest;
 
-	Status		mStatus;
+	EStatus		mStatus;
 	CURLcode	mCurlCode;
 	std::string	mStatusMessage;
 	std::string	mStatusURI;
@@ -176,7 +176,7 @@ class LLXMLRPCTransaction::Impl
 	
 	bool process();
 	
-	void setStatus(Status code,
+	void setStatus(EStatus code,
 				   const std::string& message = "", const std::string& uri = "");
 	void setCurlStatus(CURLcode);
 
@@ -385,7 +385,7 @@ bool LLXMLRPCTransaction::Impl::process()
 	return false;
 }
 
-void LLXMLRPCTransaction::Impl::setStatus(Status status,
+void LLXMLRPCTransaction::Impl::setStatus(EStatus status,
 	const std::string& message, const std::string& uri)
 {
 	mStatus = status;
@@ -509,7 +509,7 @@ bool LLXMLRPCTransaction::process()
 	return impl.process();
 }
 
-LLXMLRPCTransaction::Status LLXMLRPCTransaction::status(int* curlCode)
+LLXMLRPCTransaction::EStatus LLXMLRPCTransaction::status(int* curlCode)
 {
 	if (curlCode)
 	{
diff --git a/indra/newview/llxmlrpctransaction.h b/indra/newview/llxmlrpctransaction.h
index 528451fcb29..c835423d67c 100644
--- a/indra/newview/llxmlrpctransaction.h
+++ b/indra/newview/llxmlrpctransaction.h
@@ -100,7 +100,7 @@ class LLXMLRPCTransaction
 		
 	~LLXMLRPCTransaction();
 	
-	typedef enum {
+	typedef enum e_status {
 		StatusNotStarted,
 		StatusStarted,
 		StatusDownloading,
@@ -108,12 +108,12 @@ class LLXMLRPCTransaction
 		StatusCURLError,
 		StatusXMLRPCError,
 		StatusOtherError
-	} Status;
+	} EStatus;
 
 	bool process();
 		// run the request a little, returns true when done
 		
-	Status status(int* curlCode);
+	EStatus status(int* curlCode);
 		// return status, and extended CURL code, if code isn't null
 	std::string statusMessage();
 		// return a message string, suitable for showing the user
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index c736d0ccc84..3800b9223d7 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -35,7 +35,7 @@
 #include "pipeline.h"
 
 // library includes
-#include "llaudioengine.h" // For MAX_BUFFERS for debugging.
+#include "llaudioengine.h" // For debugging.
 #include "imageids.h"
 #include "llerror.h"
 #include "llviewercontrol.h"
@@ -4289,7 +4289,7 @@ void LLPipeline::setupAvatarLights(BOOL for_edit)
 			}
 		}
 		F32 backlight_mag;
-		if (gSky.getSunDirection().mV[2] >= NIGHTTIME_ELEVATION_COS)
+		if (gSky.getSunDirection().mV[2] >= LLSky::NIGHTTIME_ELEVATION_COS)
 		{
 			backlight_mag = BACKLIGHT_DAY_MAGNITUDE_OBJECT;
 		}
@@ -4475,7 +4475,7 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
 
 	// Light 0 = Sun or Moon (All objects)
 	{
-		if (gSky.getSunDirection().mV[2] >= NIGHTTIME_ELEVATION_COS)
+		if (gSky.getSunDirection().mV[2] >= LLSky::NIGHTTIME_ELEVATION_COS)
 		{
 			mSunDir.setVec(gSky.getSunDirection());
 			mSunDiffuse.setVec(gSky.getSunDiffuseColor());
diff --git a/indra/newview/res-sdl/arrow.BMP b/indra/newview/res-sdl/arrow.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..a8f6da64b573f4136d742e98fbce372b389fa966
GIT binary patch
literal 2102
zcmeH`XE+vY6vuyxtcp<4qG2>iQnXP@k=Y(r3Z+7%U0O6KLMas*geL7}_0XVFv}h`{
zl=ga`=gIYc;_>DE_@3*!$94bi|GCb6&biI3jpY!Vu{7ujcUrYWidrD1wUd-^6%ElM
zB}Jn~jcDAsG1Ah~$jHdhq)8KGWo40*lS5u!9t8yj6crU|+O#Rnnl+<&^X4ciDWR;a
zOp6vRP*G7qRaF%=H8oncY)PwDt!Ul4HR|f>XlQ8ArcE2#wrxwhcI{~2zC9f}bU;&6
z6D=(*I(F<xr%s*d+_^Jdx^zKXTN@o69dvbd(bLnTYuB!H>(-6#-MiDHM-O`T>`AX)
zz0lX!$H2gV-o1NcXlO{EK7BAUGNNzaz8D)D)30AY`uFdTiHQlOrlt%SFo1yr2Qp~T
zAO;T}%#a~N7&>$)!-fsR%*+gPb8{>#EEqm~I3q@kz|zu^kt0VkYSbvKtgIM4dNgCk
zjKSL48XFrM#*Q6}t*tF~c6Qj?+vDKifTN=$PEJmY8#j*e<Hs{$!UQHxoXDg}lbAet
zGE=5ZVd~VWOq({1>C>m<?Cgw-iwmx<uDH3m;qLCvj2ScV@bF;f%$dxZH49HqPrSUm
z@b>m*_UzfrnKK6;A0Ot<oy)v=^O!$>KEA%b`1$$a@9)oo1q%oW2p}*pkcA5u5)>4~
zqD6~Xym&E7mMmfE(xoh0wv6S=m$PEU3RbRM$*NVW2o4Tr_3G8ES+j<<YuB=F-8$B<
zUr$I#2%({&Y}l}YjT<+zY11Y)Z{AE;SQz2q;cVHmg{@n+5)lzWWMm}UwrwLSDvIdn
zXkubw*uH%`J9g|KHa3=>J9n~c*Dm7X;@G`=H+%N%Vej6(#K*^zkdQ!PVj}zY?PLG`
z{Tw)OfP)7Ql9ZH0a&j_<4jm#TC56<~RMOJYIDGgpM~)of=+UDbJ9doY$B%R3#0k>V
z)5*xl;N;1ZoH})i)2B~!=FAz+o;}OCbLTjJ{yY~hT;Srxi(I;NiOZKSlbM-GR#q0-
z+1cde<dB=2%atov5C{b1<>ir|pU>5+SGjiW8rQF1=f;g26ciLtSXju-n>V?2>lU|f
z-=?Ujh&y-gaQE(Aii?XWDJkLJy?flhf1d{r9`NwtLmoYPL}_U$Wo2bNe*BmxPoD7f
z=~JFPd&cwU&w26U1?A=CynOkRSFc`CQBgr<WhGTrRlI)vnm2FW@b>Ln-o1Or`}gmu
zuCC_8hYx)G_>r2L8a{pc#OKeS`SRrpU%!6k+qZ9g|NfmHKYsA@=TCn9`o-_xzxng$
zkLZ2>+kcP&Bxh2XYl$}+s6_)<P(K%kRX-MpqmsmhEg}Jn7!7b?o7LZEBCUvvtgbTD
za?zE#usF8A9_qyZ^19W+&n*_$<6P+SFRxEs%j?Hty#y@clCY3V#DD8o_tV9vlGOsi
EKkxL16aWAK

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/arrowcop.BMP b/indra/newview/res-sdl/arrowcop.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..1a26a0df34166f5bb159625bd2b424c7e5296a7a
GIT binary patch
literal 3126
zcmeIuF%H5o3<c0I!^XnM$O(D?cJ9rs;Dh1IZbBm~KO2_PI%)Fk=6YKW<sA#27mV{~
z?8*rl0^g5&8@5o&{U4bd_+DG*ogu?sxQ||7PdJmA)P8d%Lx#OgZS_N{{^9sw6)c9H
zG83GoV@Y!*Lx#Ogt*#i(WG3{HFxUECw!D63S`K?jv1hLMB%Dc3;CMWFy1!lPL-QrI
zIAnkbmO!q(90RR{9Jl_hVc=7JUJDWw;*AX^zGs$r{fUc_5@5*I3BHctIJ@DG;~TyN
f|K+RjrZ2>6UyHANIqv-#IQ>bu`SWn|@thY=;PuCf

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/arrowcopmulti.BMP b/indra/newview/res-sdl/arrowcopmulti.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..48f153cef662b9cfab38df3ab11264837c3fdbc7
GIT binary patch
literal 3126
zcmeH@F%H5o3`N5X8w(>NC+Gp#xi`0hFMjz-<0P$BM`FNIT-&jqe{+9Kr}VK2{)Tg%
z&mmn9!Ek>*^01K7^KYIP_&(dp*MnU2g8N!C^ekpPiRD)-D8fA8xffG~{8nW@AB5br
z7e&Ona{UEog(4?URneB;<n#9n<xHiV|Kio3lNno|ztSE)Ie~nL0gdk<kxKJ`ZSXGr
zmT$$YLIHh#ApogFlB2X56ytUmA*x$G8#-RI)qp^F+%l$4R;nYeqL>I2V+CRtr`4P@
z^}<nbEN$^om$kHQsRJU}Ho)x`NT;X6-w(&$7C!{u;zz-&{6M(n$HEJKI6UW%fQvr}
MPX0JJ`S9cH4R|eix&QzG

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/arrowdrag.BMP b/indra/newview/res-sdl/arrowdrag.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..cd868eec2008229506cca29e6a706325996b5916
GIT binary patch
literal 2102
zcmdUvcUVq+7{@;;NoiQ2L1kr>5m6#qX2_<L&{8r=HW@{O?6Oz(9wn<X;-P7TvS(SP
zLCWZL>UrKjT+j3T_x|zT*Y*3|=bX>EzxVh4o$ER_j^-*<g}D+K|G6>{F9pP)ii$Ud
zKUr8pQc$2qjT$H_Dx##MM9rEtQC3!_R;^m7sHjl8c5PHuRZ&w@qfVVVsH>}^p`n4M
zrY2fiTGXvumwNT;QNMnD8Z>A?!-fsf*4Cy`qee7t+?Xa!nxLbjgRZVFdU|^3>+93B
zX;YdtYleY=0fvT#7#SJSym@n4v}i%gmMv-3suitUx5n7mm^N+N(6((`+O=y(`}XZI
zF)_i^)RYb#I?%CWM>=)tMCZ<(F*7rxOP4Nm?b;P{b91_N>qhtP-LbH+z|zu^9zA+s
zWo1Rro;~T+s~6VR*7WY(n?8N|U}Iy0t*tF~c6Qj?+vDKiK;OQ7>DR9x{rmT4z<>b^
z95|3cg9hQ~=*Zx~gBdbp2t$Vs#mUKuVZ(+oeE4uij2OYlks}#3Y80bKk7mr6F^nBM
zmT}|8;q2^;i;D~6$B)O=)fG24HzrJ&fV;ap6DLk&(xgdDo;(>34-Y&&J@NAL!rR*$
zA0Hp4OqqhOuP=UneoUP@6@Pz!rcIm1^y$-?F=GZZXU-%bAb`NYKxWOFMNm)>vuDp{
z&YU^SojaF#^X4&s{(KfJSir)C3t6;i5sMcuCO9~lB}<mDbm>x-EnCL&<;w{P2_ZBz
zlocyhuyW-}!otD`4-Y3IB7(@sNLH;{#p>0oiHeG1&6+i=UAvZb>(;S;{dzWR*uch(
z8`-pJ6VcJp#Kgp~dGltrY}vxrty|f)Z5!LSZ)eAj9qin>lU=)Zv3vJ!_Uzfi-o1N?
zjg4jBzJ2W9zn=pK4sh_`K@J@{#Noq-IdbF(M~@!m*s)_AKYpAOCr)tk<VjAQI>qVJ
zr#W-x3}?@tB`z+G`1p9vojXTDLIUT{pXb7b3tYT-kxQ2@aryFP5)%_iN=hO*IhiY0
zu5k70RjysT#`WvhNl8iJ#*G`?ym=FmNW`sMx43=#HmRwpq@|^io}NxdMh2OgnPg>U
zap%q*?%uu2y?gh#fB!z&+1WgJ@PLO8AM)tYBXV+b$j!~=@#DuldGds(PoMJa*)yI$
zf6j{+FL?R#C9ht+;`Qs-ym|A6w{PF_?%g}`^76>f&*%O7_k8&9fsY?Q^6AqjK7am9
zK|uk9g@t_i@`a+JB8rQPDJdzTw6v73U%&G0+c(O}%J}~MJLTo&R8&;(<Hrwv{`|?W
zU%&YM`!|)9mBM`geN_Ku#JiMsf)hzdbM!ypNIXjQFHp%LNSnW^TK4&f1aWD?5-r)h
zs!BE%A-o`u|LH3S3#{6_#L8b;sFi14!iC}gDy_N|bD0wVa;eqTqscQM=`XFf@T{84
d5SMV-Snk=0_2pCx{pI57?<WY!2>I0_(LXq?b(sJF

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/circleandline.BMP b/indra/newview/res-sdl/circleandline.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..284ae8b7d51ab1321fbdeea11d93c43321c5728a
GIT binary patch
literal 2102
zcmeH^cUaC{7{@<RWF(OtMQBMzij0&I5|yHo5uzfBWG8zRl~A^#C_+1BH-xNYw4}($
zD0|oYJWoBB-nV-Hf3NF3*L8m9ocr@V_xE@1+t5Tu8qv^^1XaOKscK441w^#!BOzFY
zQ@BV-P_JG+>esK2q@*NLQc^T%(13;w8zL<&O`}GQXxz9lO`0^JY15|2$jH#FSu<p1
zWoh2LIdXDxv}n<SmMvQ%FE3B4R;_5=x;1Uuw4rU=wzO;4j`r=_)1gBL6ciNb*s&v>
zI(0%(Q4u92B|3NROqVWQP*zr^YuB!H>(-6#-MgcrqJpZbDr#zKsH>}^p`k&K9zD?1
z)TC$6o@i-l(W_T4diU;4pFVx)+qW;;+S>H%*AE>X9dvbd>EFLU0|pF0Pfw450|zo_
z&>#j69?Xy-L(tdPXXwzO7#J8}XlTf=VZ#_cd^jUUj9}!*kr){nF>2H(MvorNm@#88
zHa2GL*s++Hm@sbKIL413kEy9CW@cuXo0~IX!UQZVEU>h+Wa7k$Oqw(aD=RCkt*x=K
zv0?J$$=KT3GG)pXrcRy8v}x0rK7BfNc6Q8|F@u>iXEJNnEbQ&=nLT?pbLPy!!NCDX
zM@O8ToR~XzF7xKi!`a!H`Sa(qV8H@hTwHK<b!Fkgg)CaM2sbx37B60mySqC}mMmfE
z(xoh0wv6S=m$PEU3RbRM$*NVW@bK_p_3G7ldU~>E%^KFOUCX+4>sY^jJsUP`VB^M(
zY}&Mm&6_u~Wy=<}ZrzHPmlxjN-fY{pjqTgF<KyFludgqDetzuOu>*g9e|GNN$*x_y
z*u8r<0RaI71_rWc&mQ*f-OIjx``EvKKL-vR;NZc796EG}!-o$O6cj{oa4<)X9O3BE
zqlAQn5E>fFv17+Le*8FLVPS-ahjZe@2~M6oNkl{hr%s*X^y$-_Idg`{$Vj51qKJ-;
zCMG6^*w|R&;^K&pk0&7^fwO1Nl9-rCQc@D<&Yk1@`SV=3aDj^#FLLS9B`#mS%#|xw
zNKQ^BB_)N_)Kt>a(ztr{D(UIzT)TFS>({Sy<Hij#GBUV%^Cq`$-QxD`+uXTxhr4(0
zl9`#wy?gh_%F5#Y{rfz4@PLO8AM)tYBeJuz$;rtfH#e8Oygc&r^LhOEF$Dz$JbChj
z!oos|ii&vp^eNAtJ)^j|nCH)*^Wwz|UcP+Et5>fmDJkLg>({(_^M<!?-}3I=J4#DS
zDJv`E{rmTP`0#;`A3yTx(<eTE{>+yzU-<g<E8o6-<NNpT{P^*MpFe-{>(?)S|Nc#R
zc{vpo6~g!ZKmPj_5VW$Q&Q}QgEEsi3L{KOYNNUL;#KQEIIcf+*SQM>YAc$6G72%o=
zVlKqueKiwtNQBeHr$2(KNF}b5SK+$27}vr@A#r7@%>K9wcEY>Wo>-%TBL1fWHF#wL
cae-@Mu|qYRzxfM);oti!lne9!^P1@V7thjLp8x;=

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/cross.BMP b/indra/newview/res-sdl/cross.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..0b4672d4d61f54cbc0a4cb603e9081525bd3e0d5
GIT binary patch
literal 2102
zcmeH|cQ6oa9LGOOMnoBr22CS`N=rngDJi3b>~>0ngd|Nug9Z)Jpv($cm8>$Fv`b5S
z(4-{N-TOy(ulJAlu6ys^@7?#F-~E2~{C@ZSKF>Xmk%_JdKcOoKDvgoSFADIh(3qDN
zYbFAX#U?f_0s^#Z)r!`wTO%kaNSiio5E2qXSXdYl5fMa1MQPi%En;F~h>MHUu3bAM
zBqWfOl%#$8_H^jb0Vyddq@|^ik&!`GR+f$(J0d41hrGNzojP?wK|z7eojcQ|OBcF!
z?Mk<9-B46iL`g}B?%li7qel;V_UuWoUcKnuyElFM^g&r!85I>3R8>_`Q&XdF-@d4;
ztD~Wzfu^P={rdGoOG^uFZEbXPbm-r|KLZ8~VBo-k=<4b+XwV=A4<5{rAww8CbST4y
z4MR^)kKx0Iqpz=zfq?-dMvTDF&=4adBSwxK$*57I7(IG4#>U2s88e2lW5+UX+&IRM
zAJ2pd6PP%0A|@s#Oqw(aQ&UqWPo9jKnHf{2OkwKOshFFaV_{)|rKKfSR#r@#HjU}i
zr(<nx&5Ri{u(7eh*47p~J3D61oQb`?Jq`{II66Aw<m802vokI(F1Wh7GHcc>X3w6@
zoH=utJ9jSg=FMaN{P`?cuz-aN7vkpT#-c@wSiE>K?(Xg^S+azsOP8{2*)o<dUyg@|
z2cDjutXQ!EFE1}vu3U+?w>LgMKKT0jvTD^T{QUe_y?QnN{{F04vxb0x0M@Qu%er;z
zSigQf8#ZiU<Hn6_+O&zlz(9h6g4n!yGr_^ZgoK0;8XC%$EnC>Sbt~JpZDafP?SzGe
z5gs1SjvYJLxpODGcI{&K?%hO0L=YJn$(}uX*t>Tx`}XZ)|Ni|%MMZJozyYG8qlt-$
z;o!l896EG}!-o%Z<j4_XV`GVni{t3gqZ~VSjQIF?5)u+fOiUyxDT(CdWKvR6IDY&%
zCr+H;<jIqyrlyjXmPUGdI;T#ZA|oS%%*;%(va-m|&L$@(htsD|bLPw$&YnF>Zf-8;
z&YdGKFOU5Ed<qH*C@d_bsHlkZ=g)KD!Uc+pizz87p|rG=va&KRUcAVqOP9EO`7&3o
zT;b}~t6aNwjq>txDk>_te*HQ(ZrtGJ&70i1b&K1#Z*%9)9q!(}%e{N|xPSjXm6eq|
zc<_LS4<GXA(IXx|e$106PpGP@;_1_;JbU(x=g*(>;>8PIzI@56SFd>e`ZaIfyy5NJ
zx4e7zj_T@aYHDhD|NcE6K78Qg$B%sa^oh@(KlA0w7iw#3sjI8w>({S*`}U3c`g*>9
z|4u_gLzBM$@$Wg%_?rH0Gg@%`&((ka1T@ZX#&0T`Zp&ZzU1dxAn;ZT)egANN3+MNn
IE&uhz4{@k^761SM

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/hand.BMP b/indra/newview/res-sdl/hand.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..2a092fbb7feb8f112168a0b95d50401a4db897b1
GIT binary patch
literal 2102
zcmeH@_gl_?6vkgoQ4}c+l$|6RvNg<**-#NtsZ{nzXvwau>|K;(M9YdIqasZtd!%7Y
z1Lb+DAN<hcANYRH^*Pt)T<1RbectCbvoMmOK8z$mOHgSxrWlQYpsy&~kcbIDVG4g@
zVu*{2BOxJyq@*NLQc_4uOVg}bGh}3BXx_XzEn2idR#p}{IXPOkY)PwDt&o?OM?pb>
z)~#F9rcE0Z6%}dQwk=9ZN+>HU)2>}RR8&+@RaHezO$~K*b=tRYPlpa2=-9C%8X6jC
zYHHG{Qztri?o5|1UFh1iE8V(vqkH%6^ytw8EiEm2_Uwtawl=+b^+HEShu*z=qpPb+
zpFVx)+qW-zdV1*V>tkSGfT5uw{rdI8$jFHP{rfXuzyJmg9LS(SgBUz`Fhhn6Vd&7I
z3>!8KV`F1XOiVB}HO0)#jN!wFGh)ODMvffGs8ORBJ$f`_#*D$-+?=sv$1-l*IL413
zkA;N=6DCYx;>3wenly>YlP5D}$`qzfor<NUC015eSX*0TV`Ia#Y16Q^wZ+cP4tslh
zrca;Fj2Sa<aByJe%$dxZH48^aM`q8S&73)NaB_0O+1VKv7Z>Kvor|lhD{gLXxVyVE
zZ{9pSJUsC9^u)`{i}~~CvtYpj7A{=KqD6~Xym&E7mMmfE(xoh0wv6S=m$PEU3cS6&
zS-Em0K0ZFITD6MRt5>sT%^G}teev`2!{6VZfPer30|QyRb}d0cL9AQ1j`i!;vth#q
zHg4R=rcImJym>QQwrn9dIGB)-5JE#k*}8Qr+qP|E`}XbZ*s+71J9iQm7RIh!yV$*Z
zH+%N%Vej6(?Ay1G{rmTG;J^V69z4jQLx(tg_%KI~9O3BEqZ~VSjPUSqA|fI<e*8Em
zPMjbzGLopMC{CU{Npy5Hr%s(BCMJf{r%!X{%o)y}J<GXs=ZKAs<^1{cT)1$7xVSjt
z<Ksz4NFXsWk))&~E?&IIrAwE%eEBk0u3X{j)vF{YCv)xEHLhR3PD)A&si~>lxN(D<
zH*b=bmd34Hx43=#Hh1pa;qKkLq^GBok&!`WW+wOU-Q)iK`($Nh@!-J&va_?v$;lx%
zH<!G;Jo5ANDJUr5;lqbKdi03Lj~`Q5SjdwnPbexX;_1_;JbU(x=g*(>;>8PIzI@56
zSFd>e`ZaIfyy5NJx4e7zj^g5C-oJlONl6K%rKOaWl~G<^&W8^l`1tW7pFVx!^XJce
z`SOLYU%&G0+c&;{|4v0k1wVfLpt7=(s;VlgtE;K0sp03(pZxmui{HP0Q(Ie0U0t2<
zzW?Jd2kQQ+n<(q}=YRnI*MI;NST0gQ2-km2EEco`ppY+0p&k`IP`|rgU&IRpd?8!Z
s1&w@B+Xc^S;EPiKH(y9@;5Thg!(Ae8uV3Dv(6n~~^BO_~{GV<A0W-{yJOBUy

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/ibeam.BMP b/indra/newview/res-sdl/ibeam.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..820904a228d2d162e914b8dd99c8c2ed32b663d8
GIT binary patch
literal 2102
zcmd^<cT^8*7{@<RL_{Sr+NqEgWm9QNp=?6ZKtm;~tc+5jsiHE{pzKk|DAJ&5YZ^sF
znPql=b^UpD@88#R&hx(Sc|Py=J?Hs8=e&Am+M=|CwlJs*P71$Lh+jZZmlFFs5fZ@W
zY~F-~Xw#+*ZQHg*SXdYl5fR$8Ye)O`?GY6fr9+1fbnMs>F)=YZb?QXt&Yck#7pF^?
zE_ChM6$uFmBqb%0l9HlZw{A#FOVho3cY5^bfsBj{J$v?~SFc|5?%kU{efl6PD~p_*
z9P;w=C@3hPsHljNk`l_w%BZNQ(6?`2R8>_`Q&U4-U7ddY`q96Ce+CQ~fQE(!0|yRd
z(4avK9z2*KLxwPP=uk8@H5oQ+7{iATM@vf!ZEbBvj2OYlks}#3Y80bKk7mr6F^nBM
zmT}|8F@F4bCQO)sj*bqxy1MA;=`nHQMD+FbF)%Q|(9jSgBO{EBjWIDXVbY{Yn3|e0
zdGch;%*-%1H)qO}DNLO@m1)zaVPRo`rKKg)r%z|bj2X<FIg?qlW-)vAZ05|F!`!)Z
znKy49^XJdU%F2ob3l^|&;X)QIT7<Q=HH#N7#>U2mB}<lIYio<0ogMb}_Bc2=uypBC
zmMvSx^5x5MbaceY$q8p?XIxxdSg~RSuCA`Qxw+x)?#{}UEAjB~VAZNstX{pEHEY(e
zcI{f$ty_nurzc)sUaVigo(&r|uyNx?Hf`F(=FOY&_V#AWmMv`Ex|MC)wy}Ntc6@w%
z@b&d&$BrHN`T61R?@vHL06TZ?WY?};?B2bbz`#I)f`SMR4kjcdgwW7X!otGXvu6+C
z;o(F?L=YJn$=<zt*|%>WQBhGuM@JJA6T|-f`#Esn00$2q<j|o*#Ky*Q`0!!k;^K&p
zk0&7^fyBf_jvP6{(W6I6N=hO*IhkX}j&c0>aZa2#!O4>+Id$q3r%#{e%$YNsJ$sgO
z=gx8d{CQGRQb<ir<-&yvT)cRZOP4N@mX^ll%a^%w<qB7?Ugg@gYow>AlaZ0Z_3PKU
zapMM=nVH<Yd6TTHEV8q+$;rtfH#e7Cw{CI!_HFX=^2pE6r=XyK!oos|ii#*MF6Pdi
zJKVi{mwWf_asU2(9z1x!!-o%f^ym?fA3vs~q=eGaQp(E8C@(LkqN0Mz%1WL*dBW4D
zPkHw28PA_Tr>d%o>gsA<ym-OOmoKTQso~YDSG<1xn%df0-n@Ck+qZA2tE;2FzMgmQ
z-tqqZdp>;lz{igt`Sj@%pFe-5p`n4s#zww;`NG$)U-|a!8{fZw=f{s9{QUWorlzLm
z{{EC`{_3(@mVfTJ#gA4z5lEY<;E~^j;6f`@pc3%kX<O?5bKbf?|K{(1m`|(oZPocd
G75)WR+IcGg

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/ll_icon.BMP b/indra/newview/res-sdl/ll_icon.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..4a44aafbfaeefcc50b9a461693f9de9bc29b8930
GIT binary patch
literal 5174
zcmcJTcR*9;8pdA%fg~isESjK6WXXtvD2iYasHixqSG<lo+KK~E87dY_6~V1wRfbX!
z!ze<-C<1~(hQzRfL54B|f&-x<TBx9a-0uY2%WaSL-aqaW&dJ9~e$V&5-v-AOa~Po1
z95n!ARI-16O#n^hbI=B$lg2KXfF5BNrU{y$IT3(3Q4`cO)nTFr1+>W;Kp>NVq(y^C
zWGZOWCxP}PCa@S(VA2@CW_<!o76(|LuwatT6kxN_rOSaS99@{o<--&{7p8FafWy}Z
zLp=kSYM=*G^^AaPXaqb1Q!t!n1SUqtU~Far1}5fUU?za+rUEcAodM?4O~7o10E}nM
z1`~^!Fw1-<n9sC;>9eiC(rOmWwVDm{ZLDCfjWx`gHy>u$d<wR9^TFQE7Od^<VV>is
zu)xtC<~TZm(_$xZSh^4#oSorQ=Vf5OYz^42SO-q4R)dqvN?5-3b6E1v_3)2P>tW@_
zEwFU+W>~j<E4b`%hfTY7z$PzG*yOnnTz$M?r{4kC_1#|B;ddB(f)0XbP#|~)o`hY;
zPr$)50kH4X3HavBdDwsMdk73Y3Ey2f4<|04g`<}*!SU!YI43*@N3UFk3-O_FHa-$g
z#79GLtPp~e;^A^iB!r3LAv`4&e#l6M@arOo%Mn6O#Xg9>kq8+Tevo;0FQil)f+F;u
zCijE#YHtwcr9e&HZm76-5Tv!fkXjQ2@p)NrtLivpO5&iU(F00qjzHA|^qC|Hq*bRt
z*0dkW>-{0Q_&O*Wd?B|n5b7HbK$0{aI$J%UUEu}N#vr)fcp8ctkAtlKIHcA^z|DrU
zP^S0}@+z-EUDHvBy>lCq8ZSZRqi-Nv_A?aKheK(@1;}fNfOJ_F<j7OtX~%v@D;L9y
z$6g?Q7y@Na0-*fSNf5V%Lwbb-B#(n3t2P^Q9)&|zwHPEFVbI=w7H+ghK}AC%q__SE
zmCdnmuOl2v8bu)LNPwcwP>?(nLSda4G9L>;(S8YPJI}+t_A5}-kPRvAA`oNWdlC)h
zt=FKmF%zn~zXwUH2xJ|xP~UL{%DY2B{wx9{E!QFUehE}`MMHk$ZK!Qefuf!mC~3_D
zaZel+J`{tvxddvvg;3O52=`xxLDl0lDC>;^Nmnw+UtR`zj}R(Rxwz*Vl)XrR``yX#
z;AIRH{(22^dw+)8&+_1I=S`^W7ee{-OepRD5ei?W!~NGWC=M|ccS@k-*A%GhPXyVk
z45;WV1zC47$Oe<4`pu6Z9ZZFS*EgW>O$OAUvUDH|O1kB6@7H{g^_D~4n|!!6aue<i
zXM=p;HryP!1J%O?P&t|h^3gj`_D&8DM$4gUv=XY{)j|DeHB^r@L&Lj9<@Eo5+|-C1
z4vQ}s6N}BEqc!QjmKxvO+=$JfkV#}svL=Z_XL3y}E&2bY1yNwaBx};m7A#-CQK|K-
z9rQ>9hQ2lD?;{`zEO}(A)#{z1{EQ!u_#HoX><6TbjF9!Si8PZrtiN$!@fjq}@{r7L
zeS-Xgj$cN?a7;%scG{3w0&C*O99V1;eYxngmzR%EP*9NHaisSimwz~RB!4|in``}%
zR^YHmR{p2=cp;4$`1$!ALqb^`Lsm!5ePc%D&-q{gbQa0!+8(4a1D|u}GV<@-xua|d
z<m7k6&nLu~X3GD7ff}2<I2pq+gT48pi{4+XUgqfN==Av)kvB7rAcG)3pKm^4V%rm*
zIHY;GWB8uaqMgg^Ia)LHnG6br!C)HNZz;(*;)8T<HC5jTj|Mdc$NxQ^yxE?i0%Sg&
ztVyJ?NCYjquA#kmKEl1clFgWwxI9to^DsBe;9!W8kqX)kd0Ir9jUm@WAv+hdC>#Ux
z&G`uT+Pju&iJO2n_oka0GT7&DWr!+J<7(+`&BQta1syV*!kf-_KZp1|Av%V5qex9_
zY1l5zAY`60KW(zH|3R;B$K)lNP0=^8D)B<$CC}w?aS~7?`FePGxa|sCtgjqmEV}!_
z!|(BLzukLrGRu;<;q;z8Zr?3on&R*plO>4vaP#LXt5+jCCGR_Y`0%0k9tYP^r|Uc9
z?s0QF;6gXY;nn9B?e^I1alnPC%ua*kd-xEhvHPJtS-L#aDJ5=h9&TST@H#-%IdnHt
zuC2bMk$?;8#w90$gM$wRD^1WX(}B&Wr7L+lAE$oRRT%G?HI>Prb4=%GIpiXIoDQsD
zGNzX7^1veG;qWSJ4(#{z^t?zT>*!JGe8!5*=qp#EFI>0~92}M#794zF6-#ST=q?Y>
zFlQb*NBu>FHKF_W@Ar%#eU@J2I)%b;z7-vPMfp16JAYePbfz<z8gMEw(6eantiQnM
z0pY9glP6DlModW$6ov*&Bg||P7KjT9#Nz1CPgNJ)I+bOh=@J?k7`Qt?7q9z(u<dNz
z$+*CabDL6AQ%}V%niL?E7bq3FZlZ<clEWuo<O!pqPKK@=8y|m;0psK10t2Q>qU3UU
zR9bAg5WQn6NON7ZaM_l!G-MogHqscc^#Ig;V=&&G;PNz8Dpe@tsS1Un8T~Xj%M;RC
zs&dd%X<Ur#Gkx6I0|eiwQmHi1onpG_Ne)64on6@d-$J-Frfi7;nwmILA^66XN=u{M
zDbpwZqr63`=<4k1RO$~0skAEIfrs08Xu4`5zO+7SJ4FB#+kck#)+suFcj&|{q&Y3I
zOXviqB^{@B#8V^VTI=g$Tp0ol9)-Yi@-Bb)xDI8nXqL<C>K;Fo9bKm9v~?+si#K@?
zuOlg~?dV9@z%XZ$COg<r$#a%};p%-fLMD?$xVt#bGZ(0?tw^}##K2#D)O97LtsOn#
ztC*Gq+pLQF{#^Dfvg$-tO_sovz*+ja9>tV?NmzW!pQex70%-czx3+erIkWksfP!bu
z6;5nE(SGNpje1OqRZ(H#B@UP3pOBD{Igg3Efv8WD)%Wyt<=Gl)&unUb)b`U-Hp4<B
z7GK{;qpUBySCDDXq--rrNI0>PD!^O*)aN&K_4G*N`6lWv#n0N>ep<{XFRy5OBo1L|
zZ7r;>KCza@SYDBka7x4(TcG~b3+m1-zw~saxo{1M0nN`JwPo7y2wTN%4=P1m^47wF
z;w%0P_Po0&fiNcqUJt0Qsr^Nox6OdZFl*|3{=E6F8IR~+S^1zcm#?+?dO@LB#L?y7
z6rupOQq6Hju*!xfPj0U<*HR-m*K|IA)+XYzIij`)h&LjyzFu8ekZHrF`zOT2oE35O
z@z!rW2RmZ|fCgc^qOb3HfxiyZ>~34-gL{Zy{!>A5!B0z>jJ3CNVq$LDF!2(2-yTHW
z^sc_XzT(X+hW-7v%14N&EUT!lu0FM%!M1Bkypb5{LdEUDF#|2TmI1^UE<>9+YW_CF
zGZx>MSJw%5YMZbmi8qqYcvA#;3!su$(^yl7@ihzd32PsqerQJgg1d^ky3~s_Q<86D
zQqq~CsUMnzD1DM|$LrSveMQCs^)1!UQAdajm=;Znjt*%Smrq%9<L9KLa5M-0)cb$@
zN}M7a7<~P@<EV~c;`U|~NN15APp<?G?bad-9?zjHB|H1f77AVuDm^H+4+jSa-`2S@
zW)LGg`}zjDvUH88@rZ9ob6^VeBp4q-Lx0@jN=<#$<DsFqZ);XEXOJTMUJnc?{AmKx
z)%u?9?(h{1YwFeW+1W{XwoCyoj`e>3TcjF0Lza$Y0EMFPrdq3StL^UYj@h7Pt+wq(
zHVR;!_6K^9s3RF1dOPyAXxc0l<0l9o?C_>os(yv>iQB1`s!JYXd;kr13j)xZ`Sk6`
z$jIvm9f69)Q;e_O&M;M7RrRX7yYwi{T-`#38sI$o7&m@2_<IpP(&9=pQlH;DG&DGr
zvw<OiMJ=zoUp2^d_34_vD1kHXT)ZU!?I8qLj32F8!{n$eLj2HB&N>E1#qQ}Vq_Ual
z;Nw`{*jWA<4`&9Vh%{*NSokAN4m_gzir!(wSGh1bVD{u!#J4O&2cHR!UvILd;YN?r
zw|F`-ie6>YW&m;B81KyFs_4luK5->V<)b1j=^sYb_s8lAK;5+;tG~s8%>{Zq#{c{!
z<%8pP%$EFR|M2keXs<hykM<)}M!X%51=Pr25Z`c=X8qCXLG|nYckkYfwyfmQ)wJWs
z>bEr{!o(fj7$3{}JO0c5(b3V7_Sw@xg;hR;>VMN{F`Wpi>jr<rcpcoWV_Zy&UW|+m
z_kPJ`!URtH5DNcIqp?5(R2IJc?bUCsJ9PQuzKd5ReqH|J#g5rb^e-v1m#8U*-n8ps
zZ8kZwzoE74Lq~^kP7}-)F3`bF2osFk5kEXs##Q#2?f18@I<xUd%{Y8qaWa<w@MG`a
zW1ax`2aj>ce-t%$^bQXXK6EntUn(8%U~~1w3)u!!t?|$Pm$I6%!)JD!zpMRU2q6g2

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/llarrow.BMP b/indra/newview/res-sdl/llarrow.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..a8f6da64b573f4136d742e98fbce372b389fa966
GIT binary patch
literal 2102
zcmeH`XE+vY6vuyxtcp<4qG2>iQnXP@k=Y(r3Z+7%U0O6KLMas*geL7}_0XVFv}h`{
zl=ga`=gIYc;_>DE_@3*!$94bi|GCb6&biI3jpY!Vu{7ujcUrYWidrD1wUd-^6%ElM
zB}Jn~jcDAsG1Ah~$jHdhq)8KGWo40*lS5u!9t8yj6crU|+O#Rnnl+<&^X4ciDWR;a
zOp6vRP*G7qRaF%=H8oncY)PwDt!Ul4HR|f>XlQ8ArcE2#wrxwhcI{~2zC9f}bU;&6
z6D=(*I(F<xr%s*d+_^Jdx^zKXTN@o69dvbd(bLnTYuB!H>(-6#-MiDHM-O`T>`AX)
zz0lX!$H2gV-o1NcXlO{EK7BAUGNNzaz8D)D)30AY`uFdTiHQlOrlt%SFo1yr2Qp~T
zAO;T}%#a~N7&>$)!-fsR%*+gPb8{>#EEqm~I3q@kz|zu^kt0VkYSbvKtgIM4dNgCk
zjKSL48XFrM#*Q6}t*tF~c6Qj?+vDKifTN=$PEJmY8#j*e<Hs{$!UQHxoXDg}lbAet
zGE=5ZVd~VWOq({1>C>m<?Cgw-iwmx<uDH3m;qLCvj2ScV@bF;f%$dxZH49HqPrSUm
z@b>m*_UzfrnKK6;A0Ot<oy)v=^O!$>KEA%b`1$$a@9)oo1q%oW2p}*pkcA5u5)>4~
zqD6~Xym&E7mMmfE(xoh0wv6S=m$PEU3RbRM$*NVW2o4Tr_3G8ES+j<<YuB=F-8$B<
zUr$I#2%({&Y}l}YjT<+zY11Y)Z{AE;SQz2q;cVHmg{@n+5)lzWWMm}UwrwLSDvIdn
zXkubw*uH%`J9g|KHa3=>J9n~c*Dm7X;@G`=H+%N%Vej6(#K*^zkdQ!PVj}zY?PLG`
z{Tw)OfP)7Ql9ZH0a&j_<4jm#TC56<~RMOJYIDGgpM~)of=+UDbJ9doY$B%R3#0k>V
z)5*xl;N;1ZoH})i)2B~!=FAz+o;}OCbLTjJ{yY~hT;Srxi(I;NiOZKSlbM-GR#q0-
z+1cde<dB=2%atov5C{b1<>ir|pU>5+SGjiW8rQF1=f;g26ciLtSXju-n>V?2>lU|f
z-=?Ujh&y-gaQE(Aii?XWDJkLJy?flhf1d{r9`NwtLmoYPL}_U$Wo2bNe*BmxPoD7f
z=~JFPd&cwU&w26U1?A=CynOkRSFc`CQBgr<WhGTrRlI)vnm2FW@b>Ln-o1Or`}gmu
zuCC_8hYx)G_>r2L8a{pc#OKeS`SRrpU%!6k+qZ9g|NfmHKYsA@=TCn9`o-_xzxng$
zkLZ2>+kcP&Bxh2XYl$}+s6_)<P(K%kRX-MpqmsmhEg}Jn7!7b?o7LZEBCUvvtgbTD
za?zE#usF8A9_qyZ^19W+&n*_$<6P+SFRxEs%j?Hty#y@clCY3V#DD8o_tV9vlGOsi
EKkxL16aWAK

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/llarrowdrag.BMP b/indra/newview/res-sdl/llarrowdrag.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..cd868eec2008229506cca29e6a706325996b5916
GIT binary patch
literal 2102
zcmdUvcUVq+7{@;;NoiQ2L1kr>5m6#qX2_<L&{8r=HW@{O?6Oz(9wn<X;-P7TvS(SP
zLCWZL>UrKjT+j3T_x|zT*Y*3|=bX>EzxVh4o$ER_j^-*<g}D+K|G6>{F9pP)ii$Ud
zKUr8pQc$2qjT$H_Dx##MM9rEtQC3!_R;^m7sHjl8c5PHuRZ&w@qfVVVsH>}^p`n4M
zrY2fiTGXvumwNT;QNMnD8Z>A?!-fsf*4Cy`qee7t+?Xa!nxLbjgRZVFdU|^3>+93B
zX;YdtYleY=0fvT#7#SJSym@n4v}i%gmMv-3suitUx5n7mm^N+N(6((`+O=y(`}XZI
zF)_i^)RYb#I?%CWM>=)tMCZ<(F*7rxOP4Nm?b;P{b91_N>qhtP-LbH+z|zu^9zA+s
zWo1Rro;~T+s~6VR*7WY(n?8N|U}Iy0t*tF~c6Qj?+vDKiK;OQ7>DR9x{rmT4z<>b^
z95|3cg9hQ~=*Zx~gBdbp2t$Vs#mUKuVZ(+oeE4uij2OYlks}#3Y80bKk7mr6F^nBM
zmT}|8;q2^;i;D~6$B)O=)fG24HzrJ&fV;ap6DLk&(xgdDo;(>34-Y&&J@NAL!rR*$
zA0Hp4OqqhOuP=UneoUP@6@Pz!rcIm1^y$-?F=GZZXU-%bAb`NYKxWOFMNm)>vuDp{
z&YU^SojaF#^X4&s{(KfJSir)C3t6;i5sMcuCO9~lB}<mDbm>x-EnCL&<;w{P2_ZBz
zlocyhuyW-}!otD`4-Y3IB7(@sNLH;{#p>0oiHeG1&6+i=UAvZb>(;S;{dzWR*uch(
z8`-pJ6VcJp#Kgp~dGltrY}vxrty|f)Z5!LSZ)eAj9qin>lU=)Zv3vJ!_Uzfi-o1N?
zjg4jBzJ2W9zn=pK4sh_`K@J@{#Noq-IdbF(M~@!m*s)_AKYpAOCr)tk<VjAQI>qVJ
zr#W-x3}?@tB`z+G`1p9vojXTDLIUT{pXb7b3tYT-kxQ2@aryFP5)%_iN=hO*IhiY0
zu5k70RjysT#`WvhNl8iJ#*G`?ym=FmNW`sMx43=#HmRwpq@|^io}NxdMh2OgnPg>U
zap%q*?%uu2y?gh#fB!z&+1WgJ@PLO8AM)tYBXV+b$j!~=@#DuldGds(PoMJa*)yI$
zf6j{+FL?R#C9ht+;`Qs-ym|A6w{PF_?%g}`^76>f&*%O7_k8&9fsY?Q^6AqjK7am9
zK|uk9g@t_i@`a+JB8rQPDJdzTw6v73U%&G0+c(O}%J}~MJLTo&R8&;(<Hrwv{`|?W
zU%&YM`!|)9mBM`geN_Ku#JiMsf)hzdbM!ypNIXjQFHp%LNSnW^TK4&f1aWD?5-r)h
zs!BE%A-o`u|LH3S3#{6_#L8b;sFi14!iC}gDy_N|bD0wVa;eqTqscQM=`XFf@T{84
d5SMV-Snk=0_2pCx{pI57?<WY!2>I0_(LXq?b(sJF

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/llarrowdragmulti.BMP b/indra/newview/res-sdl/llarrowdragmulti.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..fb528bc92d20e8ad39c1f6a74709d4986c4ba6cb
GIT binary patch
literal 3126
zcmeH_F%kkH3`Mcl&c@Qx6YK%(y|=g0KYsng5?~2}m6;)aLh?vhueaq8Ubetru+Hzb
z3nwTT&X0R8212<1&GQ1EXWRJoAXmBIKDG=ws~XRyk<alw;CF5#A0zfn;o^5p;o^5p
z@iRVW&;FIzgS_i26U$nTuShI-)b~E*sPh;r-Ob0afW&a=L@*8B^*)xbo~_^%b$-$S
zw(65WZL=aNw|5buxaBjU;#Hd!1j6H#ntd{oEpY|KgpkG+&@N6XIcDmGN5OGviI2Ff
z)LTm&5VdUuPFo<AoC^PYIPNX+hrmnxQSdB(Al&lD!V~^*c+8&x7k?6*{CRNl;pf>C
D7dn)m

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/llarrowlocked.BMP b/indra/newview/res-sdl/llarrowlocked.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..0aaa441ab1f77ecaba93139c4434a97561777806
GIT binary patch
literal 2102
zcmdUvcT`V(9LHa&6hfpVAv+<2rdcw}2-!t8sWd2LmZYWZjIy^fQ%F{RWp6TCM$-;0
zJ@-}~htn^AKIi$I^Sz&Y@9X=%pY=W0)KXuOQqz|MZQ)L<e92G_N@@8;M)2Yios0}s
zs#HN%Ru(xqIppQ#samxv3JMA+Dk@T~S~aRyuTG5`HBeGgqGrvS)T&jB+O=z=tgK9(
zI(4X9w=OCwD%7i24^>rF)YR0dU%x);>gqIT&;Sh$4H`CVh^D3{jT$wgapT4`Y0?BO
zEiIZhZA!Cd&1l}dIW1bWpk>RJv})Cg)~#Ekt*uR)Hf_++(V=bIwzO;4j`r=_qpPb+
zhYlU+*s&v>I(0%%Pmj)>JJY307rJ)sioU)+1_lNg8X96`WQ4J?F(xJ^bnDiQ?%li7
zqel;V_UuWoUcKnuyEmq$rkI(T(Wg%z%+1Z|+qW<M`t_rK|NaaZFo1yr2Qp~TAS^5_
zu(Y&f@ZiA=88U>SLx(bK*f6ZDtQbCgI3q@kVC2Y=SX)~&YSbu3j~>mKF=H4zb}Zw@
zjbr@y@l2R70UH||Y;A3sIB_DACQZW5&W_2GCo^Tr6sAs{%Cu?Im_B_vGiJ<S=FFMQ
znl+2rvu9&(Z_k`Lb8v8Qz|qkWCnqQ7&Yg?1vokI(F1Wh7;^yYYym|AOKYu>%?(TSa
zc(7o>0v0Y@$f8Ay@bvU#@#4iSS+azsOP8{2*)o<dU(SjZEAaC2!rR-Ml`B``<Kx4s
zRjcsz^=0+y)%f}O;qUKHKtKS2fq?`C1+iw$8iIp^2?+^d?b@}hTept&>({ek!v;2P
z+{mU)o7lX0GohiOY}vAfty{OUZQC}sZ{JQ>SQz2q;q2J4gPl8fvTN5acJJQJo;`cm
zyLT`9_U&W;{{0*{aDamc4|3?xAr2ot%#kBUIC}Ib5fKqYMn-b%*fEYDKhB90CpdZX
zB&SZD;`Hg$L`6k$=FAzQqoaw5iQ(+ovz$A3j`Qcw6B`@Lg$oymi;Lsp#fx0JbcxHC
zFLUL}6|P>rN_>1g*REYdB9V}gkU(N$BG<29=f;g2+`M^{Teog;`}S?_+_}TuyLY*F
z?;iK>-{--D2RwZEkVlUm@%Zs$o;-QN)2B~KN=o9{vu8Yi{+t&tUhwkeOOlh5Nl8f|
zH8qvAv^3Jw(|Psk6|Y~v=FOWoynXwYjEoF2Gc(D`$|5^Eo1B~+a&vQe_wF6<-@oU>
zhYx)G_>oVaKJoeUXTE&-LS9}TU%!6k+qZ9g|Nfo){Co-u3Mecrq^PKf;^Ja{{P;mh
zNr_nB|HXuK%S=kbC1rmzO8yHDlFH%>z2+}m+#u9fVftmG`a2gp@O$~C1O7Q_F@xW+
zM95n>;bL5|Yl8oyc|uaZ@E=Tk6r{p8%jFewfl5DTqE_UhRUj{oUB0Cv{EJtpE-S4x
nK!xgmxfJzJE)|!>mySz$C0OK@VS!hQ%jPGgHt}`kYKi0@sG()n

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/llgrablocked.BMP b/indra/newview/res-sdl/llgrablocked.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..847439670f94de1aedda70d2cbcd3ad27d31c8dc
GIT binary patch
literal 2102
zcmd^<cQn>*7{@<~lBj4SR7g7&qEOP5_TGv_Qc9Bw?L^U(iuR<vhpa*=yP{2rhG=O%
zJwMN5mELpS_uuzA=l<RIxj*;!dtKLke&@EZHk79*3}r!2ywZ{m8Kj_yN<T8<Ss213
zBSWQ1m8e{~GP1I=$jQl3rAig5R;`M>ygb#aRYO5Rf$G((qo}Bel9CcNYSf@+&6?Dz
zRSRWhWmHsDs9n1@b?VfiZr!@nt5=Wu_3P81K?52#Y>29=Dr#zKsH>~fs8J&{G&IoE
z)I>{5i^h!`)1*lgnl^2Uwzf7pIy&g;>e8%PGxYTIXx_XzEn2joWy_YdYSoI?ty|Nk
zO&i*_ZA-g$?a<fPr+xeObm-85jvYH<U|@iup&>>_Ms(`b31eepOiWDZ+_^Jdx^%(R
z)D$x_GtAA+>Dsj`-MV$d!oq^?-MeFHX-SVBJ?Po9C%t<0qId7!^y$-wzJ2>*Wo1Rb
ze*Lhvwx)mo{tOr}fPn)CGHB2s1`i(0kRd}DI&>(*h7Du*@ZpRYF@ljJM>1;EC`OMS
z&6qJ`7&~?><Hn6+{P^)qm@t8f6DMM0W5c9LlbAetGPbt1*xA`JWy%!n?d_R5bt(=H
z4mdhGGHu#4oSdAPK7BgQ&d$u3F@u>iXX4`G!mL@dm_2(ouCA`knKOsEbLTQ|-aO{d
zpU;8?3s|^tA#QGNxVyWvXwf1TFJ8=&B}?$|@W9j46E80>mM&e&vSrIyzI-_=R;*y<
z%9X5IwTjiNSF>i#8oa%|S-W;EK0ZG9`uehN-8$B<Uyq-kAO8OSY}l}YjT<+zY11Y)
zZ{Ez7EnC>Sbt?e@0c_j0jljS_wr}6gjvYJLxpOB$K|uru2eWI}E_UzU&7M7b*t>Tx
z`}XZ)|Ni|PIB<Z22M==S&>;>VKFpCLM>u-)C?O#sgocK4?AS4mA3x5C6DK%%@+7BD
zo#OQA)0{bThO=kSa_-zY&YwTeg$ozBc<~~aE?wgC<;z^Ta)ql`uM!p(#<gqL2oDb@
zA|isw$Vj51qKJ-;=KA&P+_-Urn3x!1V`GVni{s|ao7}o}i}?6>Zr{GmojZ3(NJt<t
zF_EOCB$AVpNl8f|H8qvAv^4JCz019O_qc!mKI!S{WMpLU;K2hPK77cdM~`^?_%TnO
zJmKlnr#yT1jLghTva+&x{`@&FUc4YXJDZm;Uy_rPLvC&^uU@_4_3PKXdGm(1Z{L!a
zm&dzz@5s;3r=XyK_wV2H;ll?$e*DO%PoMbw`7?!ug?#z)g|A<~^6lF<zJLGDj~_qy
z`ST|tkx1z8Ux!#HiN7dCl4k|cf8k>7Kj;N2u38d*`WMl^aw)Bl3y#HYi4O=#M537D
z>nR5%OyDKBR4G{%)mMUJB+in}k^`k!{EG=8p33<YyO-W#IsQ8qJCv1|!-9QTC|;NF
z3RpQ@R#)m$Dlg&1IfP6lSlU~eB)?&yyE3&EWhkSTG%v^{A!PdlOAkpZ5iYXgkT_J#
I{;#{g0RNF)y8r+H

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/llno.BMP b/indra/newview/res-sdl/llno.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..284ae8b7d51ab1321fbdeea11d93c43321c5728a
GIT binary patch
literal 2102
zcmeH^cUaC{7{@<RWF(OtMQBMzij0&I5|yHo5uzfBWG8zRl~A^#C_+1BH-xNYw4}($
zD0|oYJWoBB-nV-Hf3NF3*L8m9ocr@V_xE@1+t5Tu8qv^^1XaOKscK441w^#!BOzFY
zQ@BV-P_JG+>esK2q@*NLQc^T%(13;w8zL<&O`}GQXxz9lO`0^JY15|2$jH#FSu<p1
zWoh2LIdXDxv}n<SmMvQ%FE3B4R;_5=x;1Uuw4rU=wzO;4j`r=_)1gBL6ciNb*s&v>
zI(0%(Q4u92B|3NROqVWQP*zr^YuB!H>(-6#-MgcrqJpZbDr#zKsH>}^p`k&K9zD?1
z)TC$6o@i-l(W_T4diU;4pFVx)+qW;;+S>H%*AE>X9dvbd>EFLU0|pF0Pfw450|zo_
z&>#j69?Xy-L(tdPXXwzO7#J8}XlTf=VZ#_cd^jUUj9}!*kr){nF>2H(MvorNm@#88
zHa2GL*s++Hm@sbKIL413kEy9CW@cuXo0~IX!UQZVEU>h+Wa7k$Oqw(aD=RCkt*x=K
zv0?J$$=KT3GG)pXrcRy8v}x0rK7BfNc6Q8|F@u>iXEJNnEbQ&=nLT?pbLPy!!NCDX
zM@O8ToR~XzF7xKi!`a!H`Sa(qV8H@hTwHK<b!Fkgg)CaM2sbx37B60mySqC}mMmfE
z(xoh0wv6S=m$PEU3RbRM$*NVW@bK_p_3G7ldU~>E%^KFOUCX+4>sY^jJsUP`VB^M(
zY}&Mm&6_u~Wy=<}ZrzHPmlxjN-fY{pjqTgF<KyFludgqDetzuOu>*g9e|GNN$*x_y
z*u8r<0RaI71_rWc&mQ*f-OIjx``EvKKL-vR;NZc796EG}!-o$O6cj{oa4<)X9O3BE
zqlAQn5E>fFv17+Le*8FLVPS-ahjZe@2~M6oNkl{hr%s*X^y$-_Idg`{$Vj51qKJ-;
zCMG6^*w|R&;^K&pk0&7^fwO1Nl9-rCQc@D<&Yk1@`SV=3aDj^#FLLS9B`#mS%#|xw
zNKQ^BB_)N_)Kt>a(ztr{D(UIzT)TFS>({Sy<Hij#GBUV%^Cq`$-QxD`+uXTxhr4(0
zl9`#wy?gh_%F5#Y{rfz4@PLO8AM)tYBeJuz$;rtfH#e8Oygc&r^LhOEF$Dz$JbChj
z!oos|ii&vp^eNAtJ)^j|nCH)*^Wwz|UcP+Et5>fmDJkLg>({(_^M<!?-}3I=J4#DS
zDJv`E{rmTP`0#;`A3yTx(<eTE{>+yzU-<g<E8o6-<NNpT{P^*MpFe-{>(?)S|Nc#R
zc{vpo6~g!ZKmPj_5VW$Q&Q}QgEEsi3L{KOYNNUL;#KQEIIcf+*SQM>YAc$6G72%o=
zVlKqueKiwtNQBeHr$2(KNF}b5SK+$27}vr@A#r7@%>K9wcEY>Wo>-%TBL1fWHF#wL
cae-@Mu|qYRzxfM);oti!lne9!^P1@V7thjLp8x;=

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/llnolocked.BMP b/indra/newview/res-sdl/llnolocked.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..61f0170cb34615a7b0c46c41a1bee31f8e6be555
GIT binary patch
literal 2102
zcmd^<hg*(c7{@;)iAY3cB_mQ)NC}BD)1Z{Cl#!4!i;S|ONTJdqJEF)cD=V^P7BVU;
zGcuym^Y*@_@CW>^-?^^yobma7&wcLuT-Rf2X&{HF8OVTU=}cYRr4R!V6@R2kN1+RY
zloZm^(p0Nf4H+33s#mX$tgI|GYSchZPL7&2Yf`ILE#&3psa?A^b?VeXK|z7Kb?c(2
zs7Sqf^{8LJK1xbTG-%L(h7B8{tgMWRiVCW#sx)fUh{lZ@)1*lgnl^1pvu4duQ&XdP
z^X90ltJ9)I3tF~pNvl?^Xx+Ls8X6k3Y14+bZQG)$sY$zb?a<QFLR(v#_U+r#p+g6B
zbac?w)kRNFkB%KX(y3D?I(P1jzP>(Px^%(7zyL!-L%MeDijk2K-MV$7d-v}2=+OgX
zV`F;u?1_nq3B7vtqId7!n3|emW@bj8K7Huhw=ezr^`n3P{tOr}fPn)CVs38Eph1JM
zu&}_=(h@5xE3B=p89aC}Lxv2&#>NI)TU&+>9g3Zu9rpJ23>!9#;lqbBV#EkWjvUFT
zQKJ|=dNgCkjA889u{bz5;OOYcxN+lfa&p4i*_rX<$1`EV1SU?L$fQY=aB*>A^5n_5
zy1FuD$`qzfoyxRn({OWhWBT;zxVyXK;o-rI88etUb0)K9&0_ZK+02<Uhq-g-;_2y$
zmzNjw=FMaN{P}o$d$VA{0v0Y@$f8AySiE>KK0ZG9`uehD$r6?>UCOd$%UHgAIV)DI
zz|YT*l`B`WYSk+I{rw3D2w?T<)vQ^whQPo;)~;PkP*4!T!NIIsw~qDe*Rx^620}tY
z2n`J-EG&$T8#fXj9!^9=1d)-EL`6jr9UaZ4O`F)fc{4FFF>Kkgg{@n+vTfTowr}6g
zjvYJLxpODGcI_fIHkRGHce7{D9^&HS*t>Tx`}XZ4K0cm=gar2Q-_L;q2S`jz<lw=B
z96EG}!-o%Z<j4_@9z9A@QWD9@$s9X&jN`|TbK=AaPM$o;sZ*y&NlD@K>C>D!bB42L
z&vNeEInJLyPikr^7cN}j;>C-krKNG{(j_imzRZ;?SGaohD%Y-E<NEdM+_-Urn>TNg
zo}SLFTerA<`!;v(+~MxsyWG2XkNfxUlaY}@W@aW29z5XT!-qV2^oXpiEFM38%#$Zi
zc>44y&z?OaJ3E`4oE&m<b9w&!IWJzk;N{Dgyn6MD*RNlbmzT$zH*a|R_AT$;z2p7+
z_k8&9fsY?QlAoW?r%#{w{P{Bl1qFQh@`bNozw+(dH@<)WPGMmoKYsk+=g*%M6%|oj
zTuezxiICs_sFh}1*8Y)mN!bsPlK&bPvJ&oGB6`#+*Dqy4UV`LrT#~d%A}T;7zkr3~
z#b*es->W0Sq7AX2>>}lo(%mw>2v_zBA_*6;WL|Erg3HAf0<lHpu25IyV*D?^1pkGL
zwj?==gH@bfIupFVrC6ypf>6XOD)0vv3&aKf6H6le7N$~sA%x^@{^l+d3&&TriPpaW
DY!W${

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/lltoolcamera.BMP b/indra/newview/res-sdl/lltoolcamera.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..c961d7a49c749cf414b3399d1a07824ff9ae369b
GIT binary patch
literal 2102
zcmeH{cT~@P6vtmF36YUiM#E^3&=PGUBN>$<No2Gnl_E)0_9%O1Yf@xHLzIxMWRx9J
zA(c_$*RPHqkJIz_bI$YJbMF1zb6%f&zwgiee9y<&OiKcxX^DZ7Ad{<e5$b@D)&&v4
zTH`f~hzN}uH9}NW6frR|8aHl?xVSh?nlwQ|LV~7Eo6@XVGnzMVj-;d{En2joWy_XG
zNlDSFRV!MzZcUpuZD`xJEz;7`v}@On_U+r#p+g5ccI-%}PMwgEkwI2gmd>3!)1^xn
zx_0eKw{G2#laoVUULFMn1r!w(>E69NJ$m$@XV0GW>eUM+B_))Vl~GYqK~+_i-o1O%
zr%xZ$)YRzPw=e4I>h$Z^kN*ApGhn~~G&D5O)YL>vOABpnZFF>W7&vesy1Kdy8Z?N(
zg9oFhr-#12J_ZH`7#bR4WMqV~u`wnlCJY%egrP%+GHlo|h7TW(si`R=MvP$O$dQa1
zHHy)rM`LDY#+Wf<FgG`6?AWo48#j*e<Hs{$!UQZVEU>h+#LCKwi4!McZEcN>jSZ6~
zO=9xo$=KT3GG)pX?Ck8AI&~`c_V!GhHVp>{2c}P-&Wsr|aCCHJ=FFMQnl+2rvu87B
z&K#VaoN#t_#>K@2S65fu+}xNucP{Sk?#!Dv4-XFy=Fgvxr>7@gUS4>6d$VA{0(^XY
z@b&d&;lhP1TC@m1KR*^PUW~uLKTDP@As`@trAwC*7#PU1Wy@H;d^tfuK?DZ}6A}`_
ziWMtZxpF0|R;^<7>eZ}Svxc>6*RpQiI@YgW&xQ>f*tl^cp`oFKg@v(c(<U}=-prOQ
zTiCjFE8DhhWBc~)?AWn`ojZ53Yu7Gz@7~RxJ$u-@cQ4`L;q2SDkNx}ibKt-M4jw$n
zp+ko_eE2X&jvV3W(W68}L=YJnNmNu6(b3Vw#KaIA8_Tg{$2flcIB{`t#K*^T;=~C~
zo;*oHLIS5wo#OQA)0{bThO=kSl9-stxpU_@fBrm4Nl7FpCzFzrLTYL%7cN{NEiH|U
z7cX+@(k0T<)5*xl;PU0mWM*b^<;oSVUcJh-YuCui%HsO<>)g0;gPS*Ra_iPDZr{Gm
zojZ59d-pE)?%g9hJDZ%G9PZ!0Pi}554<0<=;lqbKdi03Lj~|nlmq&hnK2M%J;px+-
zJbU(x=g*(>;>8PIzI@56SFb22DB$($*SvZ2hPQ9uQdn5XyLay>Dk`G5xR{cX65hXm
z&xa2m`1tW7rKP2O`t*sivNFoc%c-cS;PdCteEIT)uV26N?b|mhD=Vq0s^a_i?^IV;
z^W(>ln)Cf{|E38DU*v`bA-uH)uT6jj4Fujm2LTe0+W6;|+EN<i0wDZl8mbp|{>SfU
w)-?Z3p76ZCLX9|q)l2(D>XLd=n+fM3P*rPxt^BX>-zW6<`3T2ZzvU176Ubak<^TWy

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/lltoolcreate.BMP b/indra/newview/res-sdl/lltoolcreate.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..08a4a9322d9873617fe4a73e60174df884b042cd
GIT binary patch
literal 2102
zcmd^;cQ_YZ6vscJkTRkzWJFU_rDP-_3N39^w535sLRJcyl@Xz6P$`P`AXI4Yp|nfd
zsK`(HD=*LU{`tP=dCooexu5$z_ntcp%(cX*Gc6I&sO>4$yAbuDj@CCqwNc=LAS6Vy
zX3Y>57Dhxwgyzkg)1pNSL`6jr6B9#RT%49ITOuJLL914+Xx+Lsl9G~0Nl76sEsczf
z3~k!9K~`24IXOAnwrxwhcI{~2zC9f}bf9C$j&$nOiO!unBQGycmo8mUP*6ZoQ4u92
zCAxO)in6jYDk>_ds;Z)<rbf4J-B4FoM?*t{?%li7qel;V_UuWoUcKnuyElFM^g&Zo
zlfHfX(yw1X`uFe8fB^#-IB+0?1`R?>ON+sS2Qy^I5QYvNing{k!-frG`0(NA=;$zF
z#0YeCb<xw)LtkGX0|Ns_jvR@hp&_G2jl#&th|!}*V{B}UiHQlOrlyP;GX^s=GtAA+
z89R0?<Hn7{!omVeOG~V*tQbFjJQF5NVB*AyOqw)_$&)8zZEekzDN~p_bt==QO=J4>
z>CBihgPAjDGHcc>Y;0_>wYA00&W_o$XESHc9OllQi@m))4h{~?n>Ua7^XIc*!2%X8
zT*#tDi&(sPF-w*#!O_u?rAwFM<mAM%Wy@H;d^syttYGEJl{h;)<Kp7Ns#U94y?Qlk
z)~vzR)fG24H`cCQi@Uo!>(;Hq!@~nlPfxtOyjZ_}J>K5l`1ttX>+6f3pCA7I{%qK=
zfq;MjHg4R=rcIj&3=AYFD2U+TU^Z{wOh`xwp`oFKg@q9w9!^9=1d)-EY}vAfty{OU
zZQC}YqN0e7jwU81hS=Cxwr}4~TwEOS@$u}~v4ez!1QHVyNlHp$=gyt%+O>=1<YZD(
zQrNwFH+%N%Vej6(?Ay1G)YMec($d(!e?JEf9N^%=gQTaYbLh|^4j(>DMn(pinVB3p
za)hHtkCK&@MRs;J$BrH2`0?YMIB|lLCr@(f)G1D%KFygkXE=NIEa%Rh<NW#a<mBX#
zo14pp3m3@C%OgKOpMrt{E?&IIrAwE%eEBkkg@qIq6;WJV%#|xwxO(*}*REaT`t|GF
zxN(D<H*a$5)-7(|zRjIGces1^F8A);<Np2oJb3VchYug}=+Pq{KYmO}NeNG$JmKln
zr<9hK^6c3&o<D!iix)3=`SK;NUcKV=>({(_^M<!?-}3I=JIcz+c>n%A<>lpk`0#;`
zA3yTx(<eTE{>+yzU-<g<E8o6-qoSgM%F0Trs;c<@{X0K?{NU%$pHx>@Q&UqTsPDgM
zP1Hr>g*S0B|3h3OcqEO~E#Qsdyn20u*CJrQy+K?DYk6G?!8ZQ3KN<ceO^($5ftugR
f>w8Tq8ko?;`t|u65Y`R-Q48WfSz}C~`Pcjx&<2?E

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/lltoolfocus.BMP b/indra/newview/res-sdl/lltoolfocus.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..afb90a95e31fdda2bce51e3acabcbb8b85343c6e
GIT binary patch
literal 2102
zcmeH|XEYFM7{`A~(Nu(xXh|v*p->?jQlUu8YN&)%l4wh1v_sKEX`z&gO2cf@)<noi
z8EJEIbt?B9_uD=9+;g9Eo^j6a`SASzAKq8rL_?VR&=3U0+DX141!w^Ew4n&p_PVTV
z0s=H^){N%On<FSFNQ)LNXxXwQLPA0a3k%b#RV!MzZcUpuZD`xJE$!O1qka4Kh=_>L
zp+g5ccI=3#s3>A$Vsz@%32||8BqSt|l$4}%=gvq;Ng*vQjf{*8UAlBZR#uj-UArPD
zCx^VeJl(o=qkH%6^ytxpo;`cgt5+`+6cp&)yElr8iuCEz2PGvX`u6QhzkdDb-@iY~
z%F3vysGzE<%76g_7&vesYHDhztE)3;&>%E4G|<%4L`zGH!Gi}gWXKS-wYAaF(Lq;N
zm!U(4GHlo|h7TW(o}M21`uZ3c7%*bQ2n-DkF)}h@<j9eX8a0a1qenAl%ovP~jTt+3
zEG8x<j2kzO@#DucVZsDVO-(T~GsE26oQV@BGHKEzEG#Urw6tXM<jGiBSuthG6sAs{
z%Cu?Im_B_vGiJ=d+S(c$8yjqGZLzbn!`|MWnKNfHYt}4g&z{YkIdgDuaA5A-xy+k4
zkNNZG<LKzff&~k3a&p4i*%=oX7ZxsDh^wnBixw?n@#4iSS+WE-H#e3pU5dNAJIj_W
z!^6Xa<;$1j>FJ4=mlrEmtYGEJm8@E|iq)%Evu4d2)~;R4x^?UD_V#A|`t|tu_^@Ha
z1~zWo$fix3@b&e@&(9Bke}4i30@%EHGh4Q7Ve8hdY}>Yt?c2ArW5*75?%c_)UAqVj
z3?wKhh~VI0cJJQJo;`aA2?-%IG?cx2_p)!_KKAe5&w&F6IC$_NhYlSgEG&%h@Ngm`
zA~<~bFh`CYAu=+OqeqW&?AS4mA3x5C6DK%%@+47FQA9^a6B84|sZ*yoefl)9v9X*v
zbB42L&k`3G$GLOoIDh^;7cN{NK0cm=gaj^LyvU_Xm$-cSGKq<aT)A?Et5>gb?b<c2
zU%yULQWD9@$)u#DkeZrGT3Q<E>FM0Kaf6#TZ*uF_EpFew&7C`UxO?|585tR5W@d8l
z-aYQ$zt4jQ4|w?SA&(wC;_>6hJbChjtgI}aK7GowXU};4{5daPyx`@_m%MuQitOxc
za&mIW&CTWY>(}Jv<&mGCPeDNeZ{ED2u&|J#q9Tfmizz87;qBYEl$MtA?%g}yzkg3z
zSsCT!<y2HuP+3{YhYug9s;c7S$B%sa^oh@(KlA0w7ruV|%C~Rd`2PJn)z#J1)YR1J
z`#=6^2mZ$O+9$cGi=d{dg*x2C!oLmI|3E)W<I8`NAJgyF)XMoKYIlCesf~Ff{2$;y
QeEG9C)>kX=*Z2$m1C-@WnE(I)

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/lltoolgrab.BMP b/indra/newview/res-sdl/lltoolgrab.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..f2ac68bf3cce2c148bbb6de92e75657a5ca513a1
GIT binary patch
literal 2102
zcmd^<cUX>X7>CaWQYb6gm6a_GyCo4qG7~~p!)PEQ+5=e?4O?Vu2-#UFWn^T8LX>RT
z<bCR`-q)w^&+nh_I*$9fuH!!M>-W2_=Xj3C#6n+zlF*k2Em5T|UNVS52^BwNL|Iru
zl954HRu(xqIppQ#sZym1RjXE|TD58@C@4_9dUX^P6;V=BqDGAx)T~*PTD5AStgMWR
ziVC%B*QQRLI@GOOmwNT;QNMnDR8>`J(4YZoYHBoW*pNnz8qv6MW12K+Ler*AY1XV6
z&6_tzU0odw4GlCkHEGeJ1ua{)q*bd{v~Jy+Hf`FVrKLsNwry$Gt{v^$x2Hpg4s`6;
zkxrdD(YbSHx^(G+wzf81yLLrKM+aS9UG((y(AU?eTeog>@7|prJ$lfyXHR<d>P7F~
zz3J1Z4+aJX7#bR4WMqV~u`wnlCiLyw7gJMH`t|FFnVA{=`}b$SfB~4Bn=^3WKn4vO
z#Nfe$v9PdU$dDln9Xga@!-ipLY02>6!?CimV#J6Mj2t<VQKLpNdh}?<j2Xk&v175e
zwr1S8aoE_{Fn;`aCQO*X#EBEJwY6o^q)AMkJees|reJ4h$JD7)nKo@2)2B~o#*7)v
zoH-MFdwU!l9B_1W#L3BtS+iy_d-iPR%$dX7xpQ%LcE-iU1y@&B+}zxlH*X&E=g()s
zf(5v{yR&fNLKZDr#Nx$^S+Zma9v&VnUAmNI%a-Bk>4}$@7vA39`1ttX>+6f3pCA7I
z{saUB5EvLpP*4!dmoI0<iWRI}xsu@EU{<YK#p>0oS+iyhYuB!2-MV#zgoF?p8cJAL
z80*)sXTydKgolR{5fMRTWF%2hQEc3}kxiR6v3c`mwrttL)~#FFwrv~Rw{K_1jvYit
zN3(P1PIm3uMNCW#yLazq&z?Q(-Mg24`}VPa|9%b}IKaV!2RU@;5V5hb#KpxCA0JOb
zLIQ^mA0{y|kt0WraP;U=jvYHjQc@Dfk00m6i4&YWd6HA7PI3D5Y0jKE!`ZWENls4Y
z+_`g{KYyMJ7cOw|;zcf9x<pD!3YRZmCN(vcw6rv?T)9GedO8^y8C<=3m220oasB#r
zZrr#*W@aWgZ{FnAty|o_eVaRX?vRz0#ofDixp(g#_wV25!Gi~6XJ_;9;X@uhdc@<$
zkIBi&AvZUdCr_U6^yyQcJ$pu8ULMb%Kj+1Z7v$&XQ&3RA%a<=HEG*>Jt5>{!{hBv#
z-thMATi(5U$NTs1`S9TbA3uJisHlifpFZ*V^Jl(%`NG$)U-|a!8{fZw=f{s9{QUWo
zU%!4)TwE;7_uq%`)2Yl=V4{l^|DB6rWd}-I1uBYvC`i#i4wTuJbe26*%5EuPTgHT3
zjwLrM>N1>CGElK#QCgKADaWEuObAh`=oM8GTs(>t{}W4#OLq(MQrZ&ge_@j5QhgOF
z<?a={%tP2I$Ku%}O#Z;aXcZcwmn7X?I=RqZ8p0G3;^G%mlEf<i{%KWCC8hp9^>0{p
BhjRb`

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/lltoolland.BMP b/indra/newview/res-sdl/lltoolland.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..64e63656250c5a7056f20f0725971206fd8d077f
GIT binary patch
literal 2102
zcmeH|hgZ*U6vtl?B|@T%C@Hd%P?TsWBV}hqsFbZpMTwTsFp5fK3ndy<R+$YmdsC!j
zw5&q;Hhz8U_v4)3AK;$z+~+>;_xri`bDwk1`RJQyh*M=6qM#y(6l#_THAEF#<3t2|
z<*M97L}<{U0Sy~AL{wCiMvWTLxN&2|#KaI67pF;+CP+v~(6nh&nl)>Nq@*Oxn>VLL
zix#wO*%B!!DO$B^g|xIZty{OIO`A5z$jBfoD@)t9ZE4r89qrq<r$dJh$jQmkv13O%
zb?St?ygUjD3Uuz=8AU}!x^(G+l9Ce2%F1-@+LdnIx}l<?Lig_7>CvMHJ$v?~SFc|5
z?%f+zRaN@*>4Tb@8h!irMO|H;e*OB<zkh!Q3>bihh6b9NnhYE`kU@h6p{1pTwzf8d
z2M<O^M~5LphA?#KP;_;5(bLmIUtb>s0|SN)8-}5wAx1_<3?Dw65hF%0a^y%xjT(iq
zu`#1ZkH*Br1XEK}#*7)m*s)_7H*Or`$B$>igb7TXIFU({CShh~#^lM9nKESxQ>RX4
z+O%nyo0~Iz`gCT@n1O|b1v6*PWY(-%%$_|POG`_vtgNuMwr0+pIoR0PU~6m3+_`g^
zH*X&E=g()sf(0yGxR6DQ7O{BoVwNmff}Ncm_V)HHUAmNI%a-Bb;K1_b%W-sc#L3AC
zXJ=<ttXRRyl`C;^alzHql~t=&;pXPX>eZ`Rvt|wM?(TSac;M;jiI<lb-rnA<UAq<^
zA0O7OTgUqK>)Ehj1HQh#`1$$a@9$4QKmZ#zZe-J@O>Ex0nJrtk5EvLpP*4zCw{B(I
zwrvCl2NMz!LTG3x+qZ8gEG&#2J9e;h=T5@I!`ZcK7rS@wX3w5I?A^PUef##YfB$|C
z95}$ig9nL-h~UtnLmWPQm?KAy5E&UsR8$m4j~*pDI+|n0j&c0>abjX(h>eXUE-sGv
z_;^m7IKj!2CrL<1ATcqKq@*NHojS$o)2BIe<_u@gp5@%Rb0jAxlai9c`Sa(waNz<M
zFJ9!*rAu7Ce3>g(u8^9VN?KYP>FMcYWMpvl>Q$~?yT<kF*ST@y1~+fs<kqcQWM*b^
z`}S?_+_}TuyLY*F?;iK>-{--D2RwZEkVlUm@%Zs$o;-QN)2B~)_UswYpFiitix<3n
z`I4-xEV8q+dG+cQuV23=CntwDZ{Cobn@e6^9&g{iB|kr(ckkZu{{4GCeE7h}j~^*0
zD4?*gkfNd@ii?XWDJkL8r%!zT{FyIbzVP+ySH6AwMrmm&Wo2c2|NfmHKYsA@=TFMZ
z%c-cSsO;~r{e6KyzCiUKqQ?JDRbNnhs+CeXX4O_n)`q_qR8%PhPB@sgcLdWaz^kVA
zkNofQ|5ILYS7>$03qfI2OQ#7jK_pBi6jVjk%>U+v-PPpzSC#+pb&J$(zTRgDlhlLj
J9V#_-fnOJ?KV|>`

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/lltoolpan.BMP b/indra/newview/res-sdl/lltoolpan.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..ffbef21ec74db5e9ea6e262640df17f9594a8435
GIT binary patch
literal 2102
zcmeH{c{G+=6vltb6jD-}C`!>lq-2alNhz8%QJEr@A(f&?r2&x!&9g)knlm(#1~jQO
z8PZ7eKvC}ZeYe(P-O4}rpS#xGYwdUMb)K`&e)jXe@3FAemqujz;-D$WRDZY_KL8Q>
z;~^%9LKg-xF&Z>zK*NR&5f>LnLP7#bNlB!nq>z@Drct9t$jHbbD=UkfoE(iCH%4Aw
zo+eG2(6nh&6ciL_)~p$dii$LE-kcUKTA-w)M9Y>fY1OI~ty{OIO`A5fZQB-QWo1-U
zRA|?(9qrq<M^#l7H8nLlbm&0GjvY}~SEo~_PIT_v84V2$G&MEp(xnSsyLP2pw{CRr
z-W@G1Ewr_@>CvMHIyyS&>gv+7XHWF>^yt;A7rlG;Mqgi_K7IONU|@iup&>>_Mi?6#
zV`5^0si`S_`}W1m%nWmLbNcn`hlPa&{rmUF($W$uD=P*J7{I`R1F^QYX3(HP*x1-G
zc<^9`3>kv0tt~@`4rSP|Vc6N(VQ+8G@ZrN5F=7NGM~-CFs8Ng_JsJlG2gZyU!`QK7
z88>bm<HwI@!h{JpIy&Oy<ix~@6PYw=5|bxS#@X2!7Z(>?U0rc=bHm-;ohehM;Njtc
zr>7@Vr%uJo%Zq8#rZIi`bY{$$fw#9eK0ZG9`ugJM=f}*MGx7KLXV$D)%$_})IdkR^
z5D>uJxpSE}ZytexfdmBwF@OGi7A#mmaBwgoAt5YWxRB7$P!=s(#Nx$^S+ZmaVPRn`
zUAmNI%a*Zx`EpjQSV4GrI1v#ML`Fuka^*^*qN0e7j%L-WRm8-^uzK}s)~s2>+O=z0
zw{9J=v9YXQzn%>nHn4HyMmBBQ#OBSL*|KE|Teogy+qP|N-@ct4J9e;h=T3I*+QshO
zyNQd7W6z#F#K*_8ckf;j5)w#EOl04_eeB=Ap92RDaPZ(k4jno~Qc@Dh$;qUoq;UA~
zVU8R*!qKBgId<$A$B!T9#EBD}Jb98+r%sWYno3$)8tLijWMpJ;`t)heoH@hUvu8PX
z?i}aOpXb7b3uI<yl9iRk#fulo&d%o2rAu7Ce3>g(u5k70RdRB2$j!|qFE5X4*RFB>
z`gLyHxWUbvH@S7|7Ww)4+`fIAJ9qAI_wHQ^3JSP)?;iK>-{--D2RwZEkVlUmQCL_=
zQBe`a#l@7Al<@fRV@gX)dGh25PoF;J*|TRnfBu{oFJAES<x9%S$|x@{=hdrMyng+f
zH*enX_U&8Vy?e*|_wV`e;R7E(e&o}qPkjFTnTm=EDl04b^5qL(zka2vs*39BYQBB@
z#`o{vsi~<E&iB9ls|wU3DSy_yo|huHt!o7SJHi4)c>eD;h-!uPzvdw9{nLKgqMmxe
zukz>q!VRJ`YVjAW)G`76x*ugNOq7b|t5g1yu`mh;ughG}ua^B&nEyUrSD{+c{GHYV
F{{?v~N|FEo

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/lltoolpipette.BMP b/indra/newview/res-sdl/lltoolpipette.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..2d27118289e22acaf863e508f18aa66d40f210c6
GIT binary patch
literal 3126
zcmeH^F%H5o3`N5X8w(>NC+Gp#xi_~8E{4cT9P4F>1X3cUa)17RZk_vMJEiy9<av{Q
z{p>@!NF__o&qv)Vr1V@1OyE1MiQ|$MIcIGIzG&E@WND#YhVvjWyM^-QIqxr43vkc7
zWew^t2Bp^oKQ*w~>n_Y9N)cq?k)^pc<ODVsYsDZ7k1VaKAtAO^O#2!K$*HBeHG%Xz
zF0d7QaiX_0S0SjL#|5@xFHZDA6LYECf}n_}C96WR(Brm%S!k<Tz|@e<wipWjviSul
CHozJH

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/lltoolrotate.BMP b/indra/newview/res-sdl/lltoolrotate.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..dd84673018ed70c3013e6fb47fd858f16705e971
GIT binary patch
literal 2102
zcmd6nc~nhZ7>A#dBt#-($q<?6(m={gnUf-k3>i`+8Is6650#>5AX8*$KvaZerZPv7
zp-@VtiSOKdYkhyzz3cn)J8SK|&pOY3fA8;o_c_PZTvrM4rK<os!kt#-kfRcaY2_p*
ztfC=W<m8Z-m#0>(S|}(eP`h?*6crVzQ>P9}N=nqNTNh<zW$M+dNB#QsY0#hnDk>^8
zY}k-SjT)h<s!HR=jZsrmqe+t{G;P`xb#--`HETxm=FMr*q6IBmwxm_7R<v&28VwB%
zG&MD8)20ntT3WPi+m?3i+R?s!dpdOJfVQ?a9XocUQ>RYo=;+Y7b7#7A=|b18UFp`X
z8{NBir$>(-^z7M_UcGwJyLWH;^yx$2zJ2M}uOI#U_eWP(7d<^a1`HU0zP>&N1_l@!
z8e(K*#K3_A88m1R#>U1B9y}Nm6BA5LO&Ky|2t$VsW!SJ`3?Dw65hF%0a^y%xjT*)1
z(W4nNW(;O#W|*6sGj{A)#*G`t`0?YJFku1{Cr)J2q)AMkJQ)iM3#Lq&f~BP;Q>RYF
z%E}6BYip)Wo5u9%)3LF!VaALZ*xK4MbLLF!?Ch8|YZkL-&&J-~o;h>oFn8`;=FOYO
z{Q2{7aByJ3f(0yGxR6DQ7O{BoVjLYES+ZmaPEJlZJ3F&<=~9+0TZW5^3(J=;$JN!9
z6)RTY=H|xAl`C1bY89(juV&4fHMqOGvv%!TJUl#Dw{9Jto}R2<zn%>nHsIyu#m0>r
z*|cdBn>TM}%a$!{-MW=++qSWN`*wEh*ul=7JK42s7rS@wX3w5I?A^PUef##YfB$|C
z95{ftw>LgMKKT0ja`50m{QUgz_xI<}p+g)#e3*cM00IL8IdbF(M~@yQC@6^F;9x>R
zLI@2F<=C-f96x@Xu&^*roH)VBlP5WK>J+C>pXSV&GlYkSbN1|6&Ye3)L_`GV&!6YQ
zg$rD~c#%t&E)f|SNmNu6(b3Vw#Kds<@@1}Exx&?}SBZ^{<=VAtT)%#uxVSjt<Ksz4
zNZ`he8{E8klf=YCZr!@Y?c2AxbLS38NlDzjdza+oWbWO&$Nl^FdGO!?4<A0{(W6H^
ze*BmxPoD7f=~JFPdqzr13aP27q@|_t{P}ZUym-OOmoIts>J_hFzvj)GH@toOmh|*=
z-o1Or`}gn3$jBfwGm{S=KJfA5N3ycA`1I)$pFe-*%a<>F{rZ*c>}+y!a`^V`8{fZw
z=f{s9<mTp*mzT%SpFhdZ&!?cEfM36UQCL_=QBe`a#l`&o{hN}K5=u);DJv_Zyu6%>
ziVFVx`NQA8e?|5Ek1p}=NV*@ymZf?Yupl4|DGCA-h-9w5MG}fsE&y@AYK|8r6{VJv
zUx*cUh{S8QSE-#O5~yyiDs>G+@~A4j`UbI@bSxwkVq|flXELy)AQ>-`C{_j*Ym2y)
z!mGGciAsI($yBdiQkpCS|IJ@bXYz07Wqn1mdM8p4xO8zbmx(3kC$UoFEIT?W=^ti4
BW&;2K

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/lltoolscale.BMP b/indra/newview/res-sdl/lltoolscale.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..882515e5e3c1a7450f967775f0080c7b64e7a0b2
GIT binary patch
literal 2102
zcmb`HcQ{sk7{@=NGD=HBC8LzmCM_}&rL?sqMOp136=jqWkroQkUYZ&jqGeSmqe+vd
z(xmBq2Jh9?>v{fq?{odeIiGWn@BKU1F|#(1M`Q+apd;96R1X=dfrwU5GJ;h&go}&}
zb?VeXR#p}{IXUXqtxLUn^{8LJKJxPNC@3hPsHljNk`fIXG@xO_hA1m5)2LA+8aHlC
zlO|1Q+O#Rnnl(d3MTO?go71923tF~pNvl?^P*qi>b?er&Y14+bZQG)zrbfGV?NC=&
zM?*scO-)U-w6tj7zC9f}bU<5Mn~ohj(y3D?baZs++_^Jdx^zKTSC_6`yV9*&H@bK4
zPLCcv=-IO;y?XVcckkZl>FJ@buTP&oeK0UEpl{#4^y}A;{{8ziV88$d4jhP~p&>>_
zMhqG>2xDVoOiWBLH8sV|%#6W<2V-t-&X6HPu&}Ve($bQlLx(bK*f6ZDtQbCgI3q@k
zz}niHkt0VkYSbu3j~>mKF=H4zb}Zw@jbr@y@z~hdFk!+3CQh8lq)C&QJb5xxrcA-s
z)|RPLr($Pk$FynFu(!8o`t<3{m@xwf2L~J-9ho_ECbMSE!pX@AXJ=<zTwHK<b;Zri
zjoGtjGiS~m=FXkVym|AOKYu<87A#=l!i6kaw1~xv7qeu^65QS0S-Ny79v&VnTeghl
z%a^la#R@z<J@NALV&%$}tXj1SZ*OmWe0=cr^~KN6kJYPJvu4d2{Qdn22nZlBFp!|2
zAl9y3OK@;7At52GTeptT&``p{!dSn4J>lWuY}l}YjT<+zY11Y)Z{Ez7EnA3)h#)dD
zlBlRCwr<_Zwr$&pj*ccKCWhG9ShjE9PF!3Z@$vEO*s+71J9n~c*DiMN-p!spd)T{o
zFZ=fGWB>mB95`@*g9i_C=+Ge&5)wFk_%KI~9O3BEqZ~VSjN`|TbK=Aa5)%_SdGaKu
zPMzZP>C>D!bB3g(B+i~a%eiysIDh^;7cN{NIXRh&7cY{Ml0s@~Dwi%@;_~IoT)A?E
zt5>gb?b<cc($YvzPbVWIgUrlKva+(ce*HQ(ZrtGJ&6{LrXOokYLvC&^w{G3y_U+r`
z<>ir|pHD$S0fmKy+_`gyyLaz$@7_J`-@ng;2M>7o@F7J-MHCko^XSnd9zTA}lP6Dj
z`t&K!o;~CF^XHV5lu%k)%8M5-c=_@ruU@_4_3PKXdGm(1Z{Jc@R>r$`?|A?IJ>}))
zeE9Hzj~_qs>C-1ZfBwvuFJJij^(z$>6;xJM^6lF<zJLGDj~_qy`ST~ge*NP2@848a
zRSEU|Zzlemh~`>j3KNR0_Ot>n4k4i|ssxwNBy;gAQn)CG6fUSwYJ5rg5lE`8t~P(M
zv>N&U%`a??D0KDoSN}x#uV;VWO6H<YOU4<(x&?(x{1Sw{mV$*$pjV>1$X5#fmkV|O
zsi<Zzj4ifWagD#k0&4tg_ZCYR#FvDt<4eS1E*Xos6fES@uz*X&;`6I%RxPV^?~IIp
E05OD7V*mgE

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/lltooltranslate.BMP b/indra/newview/res-sdl/lltooltranslate.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..d084f6a0269e9b88c548a8f44e92f8a772311141
GIT binary patch
literal 2102
zcmb`HcQ{sk7{@<~(oS1Lq@kshh(c*-sk9U&nxaI*i1yM%LVIfuMMgy>q(r5R78P1D
zQ%1x4oCjU+)$4is=e@7%cYf!b&-s4uan5xNjkV+vhn6g;iO!TOmkgCaOe+sEqFq?R
zCL=?Q8a1d{vnH~#vdGEFQL9!hYS*rfyu3Vh>eQib-MZAPSC9Jj>(ih?0~$7LNTWuL
zXxz9l3JMA|Y0`wIO`FoJSu>h9Z%&IAEoj-YC9PVuLQzqX)~#F9rcE2#wrxwhcI{A7
zQlfqP_9!bWqoSfhhYlT3RaK>9$BuOB)QQfWJJY307u3|$=-Ra_-MV$7d-v}2=+T3o
zJ$s_Au1>FBz3AP$HyRom^y$-wzJ2?msi{f7e*MtW(n4EXoBsX#qobpPuC6Wv1`J@}
zz=7!L>7lQ$kAZ;!g9Z&^@ZiB18X7WW$Pk7O9m=p_!x%n%I7UWBj2JP3kt0VkYSbu3
zj~>mKF=H?`HfHSDv5Xrxj`8EiV`5^$gb5RvIB_DACQV}U<jG8#G6hppQ>IRx%Cu?I
zFf%j5+}xb$)2B0I#tbYhESNcSCYF|#SXo&yYt}4g&z{YkIdhmhcP{hh&13%j`B+<9
zvtYpjY;0_>wY6p8!i6kav<N#pI~FfqjJ>@*4h{}1S+azsOP8{2*)o<dUyh@rBTi0E
zI6FJz;^M-J6)SLcb;Zrijg>1`vTD^TR<B;onl)=!yLK(>)~#dx`t@wsuz`&mH?nEd
zCN^*0jJvx#TefUr>(;Go+qRAE+qbi0#}0Px+=+*W2cDjuczJoTYu7Hky}jAJdpABl
zKKT0j;^*hbo;`cmyLT`9_U&W;{{0*{aDamc4|3?xAr2ot%#kBUIC}Ib$BrH2`0?YM
zIB^1he}7J%Jjtn3r#OB3G-uA7;q2M7oI7`p^XJcV;lc$jUcAVqOP2@;2;lPN%Uro~
zg}}f-f`Wp$di5&7!NG)tgb*4UN?2GJ*REaT`t|GFxN(E<@Ngm`BDi_;Cbw?g;`Z&^
zL`Ft(=gu9XqN0e7jwU81hP!v~5*r)Ky?gh#fB!yladA9&@PPREcoGs4c=+%kj~+eZ
z@#DuNCMNRa$rGMFeM(YN63NNQq@<*fnwrY9XU};4{5daPyx`@_m%MuQinO#e($mv<
z{rWX;-n`-M+qYz7WRRJeNmf=C@7}%R{rmTP`0#;`A3yTx(<idCv-$k_GdVdq<mTp*
zmzPI=em(^S1r!z*^5x4Hii(Q(`t>W{zI~&(xR{cX5=u);DJv`E`}gns`0<0EKY#M;
z*DuP;%Z2{_*Z7Me(lh?0B+<XBT(l$=EFyxxqzA-WL0^3hLhh=lHicBZkW@;3k-0!6
z)?eAUr2c>3mr{F0&3{%dzWy!$@8rb8lE#IBipKJ%Z<UjXiJFqig`rB4i@gOdM3v{i
zcfq?Ns>M}$i5aT&)vHDCOq#i<kP0qIUCAY5v0e%mxHK%{QnAF3y=sQi)v>Yv0O46=
AuK)l5

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/lltoolzoomin.BMP b/indra/newview/res-sdl/lltoolzoomin.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..e4e46cc70281c40f2b09e0536e80ee282712c4de
GIT binary patch
literal 2102
zcmeH|cQhAz6u>`<l2T-)RH$syQZ$qzDk38)l1O_XS}IBdEh+7VD5HTEMaoDhEp1JO
zmiChTq*r<G<^A=}`{Uhn?)TnvKKFjV_ug~9->;Fmo+#C#Ck$#;o??v(Q3I-J%_3A~
z1u8H?Le#5QkNWlNBP=Y8h=>Rc8Z@9`!-j~8iqfc2BgDkSXxz9lO`0@8TwI){O`FoJ
zSu-RgB#@Mpq<Qn^NJ&W{EiH|Vj101}vdGEF(V|5Q<mKgQ*|H_ATD3w!L4nq-ThpdZ
z8``#Qi=v_;N=iy7D=X8kT|3&hZ%>B~9Z*qGK~+^1H8nNV)z#6^&_GjD6D=(*w6(R-
z(b1t}$ByXg>e8uGCpvfTOqVWQ=-Ra_-MV!{Pfw5T-MiDHM-TM%^)WCopl8pX^y<}%
z-o1O%r%xXY4Grnrw=ezr^~1=>i2nWiGhn~~jE#*kF)?A_z=4>Wnqp>V#-Kri7(93|
zLxv2&+}s=s3k!x09g3x;C015e3>!8KYinz4Y;3T#wZ+cPj^V?HV{dPdgM$MjMvP$O
z$dQa1H3~;ZN1U9T7(IG4&d$z^88ZeK7Z=8k9gC~0D{gLXj2kx&cXxNjj~~y32@{w&
zaUzo@O=9xo$xN9tg{f1gGHu#4rca;Fj2ScV@bJLX(-SW*FJ{i1iMO{mK0ZFonl+2r
zvu87B&K%~>oy)v=^YHccW&Zs6ELgCBg$ozr=jVsNzdwr>En@NF#RLQduw=;+mM&e&
zvSrIyzI-`>fq?`C1rZz^%!(B&Sh;c~t5&UI_3G8ES+j<akPz0cT}x<aDC^d(WBvN|
zgoTB%VZ#PCZrsSGO`F)fc{5wKY+>uxt!&%2jqTgFvt!2&cJAECu3ftb4-Y3IB7(@s
zNOteuO;l7A(b3WD*|Ueed-oC(6GLolEOBvh#K*_8Z{I%l@88dX0|z*G@E{2Z2_z;a
zl9ZIhp+ko_eE2X&jvV3W(W4wYc8uiYWKvR6IDY&%Cr+FoH8qvAv@}khJV|<bI;T#Z
z;`Hg$WMpKJnVCseRu<XW*_=6ZhMb%n&YnF>Zf-7ld3ogL=X37dInJLyPeDNe7cN}j
z;>C+xx^#)lmoIbW$`uL=3%PprD%Y-E<NEdM+_-Urn>TNA>((u9-@Z*zQ4x3U+~Mxs
zyWG2XkNfxU^Web)9zJ|Xad9z^9zEjm<HwYglu%k)N?BPMPo6yC>C>k?d-jay&!6++
z#S6;I%X#_oC9ht+;`Qs-ym|A6w{PF_?%g}yzkkn%4<GpW@gtu;ed6=y&s0=Y@a4-F
zDl01m{rxZh_5|vfdexKsyNaOlcL4(Yn}GisuKt03EVV2DLB4yxj;5-epQI}0SDanL
w|1h=iKjYty7F?Iw+keZiiwhE~tNfe%x_M2Hf0h4zF5hhJ{;CT6S^k8-0{NdgtpET3

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/lltoolzoomout.BMP b/indra/newview/res-sdl/lltoolzoomout.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..7f958383ab820ad0860cbf3482cba82216492bba
GIT binary patch
literal 2102
zcmeH{cT|sU7{@;i$tYQcLdnQzXelAeC<-B~G>oE2WsgvZkRm0U>};h%GP0?pRFn!)
zDI=9a-d~-(^4977<MrozopayUeV)(vxvuAXo#)&JrrP3Ehqfpv2~P4gONbg!O=~tG
zL9SX=Nk|A`VPQl>L=Y7frBS0sh>3~OxN&2|#l>mTqzO%%Hl<m!W;Ac!90>^tBqb$j
z(V_)XQc|>R*^*YRTG6_7YudDFL)*4(k(QQ5Mn;Bq?b^}4eS11|=zy%OEOK&kbnMuX
zPMtc@xpQaa<>gUOP@qefE+{H0(zR<>x^?SD_wL>4(W3`SN=o$X*^^$qdeOUgZ~FA<
zgR-(RDk>_ds;Z)<rbgeseNk6eM?*scO-)U-w6xIH)}~*-e(31vpsTA(|Ni~a)6-+X
zfB_5~IFLbu2BEL7&)~s>88T!D1_lNg8X7Wm=un0Y8^-YA!x=GR1V%<i7#kZia^y%x
zjT(iCi3z5rri>mvnlWR>Fm~)%%*@OfH*Or`$B$>igbA3Nn=^6ZL?%s|#N^47nKESx
zQ>RYF!omVeOG~Crn}(H@71q|)*x1-$YirB&>C>4pV+J#4&SciCS=iaxVQ+8G?Af!K
zGiMGC4h}dvI^yKygtN0VE-o&(y1FuV?p)^0n}?g58}9DzczAd)fBt+HELgz8g$r4<
zXc3DSFJ{S-B`jUKlx547v3&V*R;*Zor>7??SFU8$s#UCBy&5ksFTB0IS+iyhYuB!2
z-MV%7`1r7X{dzWR*nqFEFB>;*WYeZiY~H*XKR-XVY}tapzdr#10c_p6m2KO$5f~WA
z_U+pV3JM}PIG7zfb`TO0!p@yL*|lpIyLazq&z?Q(-Mg24`}VPa|9%b}IKaV!2MG-g
z<<Ox+96o%QBS(&K^ypEJ9XrPH<HtF1;sjw~VVpd9l2fNnar*RW&YU^J*|TRkckUeL
z&!6YQg$sm-hZ7MI!NrRgiHwXSDk_TT=x8ooy2Rznm$`D~3NbM;T)ldg*w|REUAxBh
z>({w);|4cx-XtzAj$5~Gar^dd?%cV<-Me?Wckdqe@89Rag9ki(_>f1B9uXfOPeMWh
ziHV6ke*BoEq$Hj^c|vk>GASu3Jbn6<)YMec($YvzPv_aQXFPxYoQ#YNGBY!I@!|zp
zSy^OfXOokY!^@X1dG+cQuV23=H#e6zZ{G0s?OXEl^2pE6r=XyKckkX&SXf9=Q4#Oo
zzvsh;4}ARikx!pKQCwWi=g*%hDJh|}w3M>4GQNEILV0;P6%`eH{rZ(}-@ftv`*$iU
zEBW!`N0q<-;}1>XUxq2TX&Y)(eHAw(_z$eQ_Rp<uou8y8*AY<ltNe_5Tr|i9rt9!p
zgQzN3m;Wsgd{Vu<mY`n#%R{~I|H4(LI{kmg0{&b4gH{))C8&%4$dl?04OJ2d8o~mb
H_29n%Z^BYP

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/sizenesw.BMP b/indra/newview/res-sdl/sizenesw.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..559579f40e4b563d75af4507d21f53967706a048
GIT binary patch
literal 2102
zcmeH{XIKwv7{-4oM5JVts8p1Z6p}(p8X8o{UL_JjR1^(6nxuh@qG3f*q>PNL3eiNi
ztd>!sPJcSzPM!1VeDYk^bG`5N-1l=|*ZceM8dzwF@~gB&K(+Cv(9}XS35|0pvEPkQ
zqbO*>AtXerR;>^g7Dhxwgx0NF)22-u+O}<rsHiCI+O?y7`}T;5iP51$2Re4_h`6{o
zojP?wLP7#bNl7|)?u?X_6kWP>p=;N!bnDiQ?%lg1EiH|Vj0`<`^gvctmYzL((yLc5
z<mBX#mzPIDL4n@Ad!wkRh?0^L%F4?0>C=b4efy%KqJpZbD*gKPqksSY3>YwgfddDk
zrl!WAL4#0NS7-3x!Dwh`psA_JkRd}DI&>(*h7ChYON-&dhoh~n&4>{r(9zLBS67#j
zBS$i7)F?)e9*v%!9%IIgL0?}V0|Nubjvb4kp&{eOjl;;u2xDVoOiWBLH8o}Y`0<#T
znPF~jj)jE<mX?-Gm@t8f6DMM2Wrel1H8wUjOqw)_$&)8DWy%z6ZEcx4bt==QO=J4>
z>CBihgPAjDGHcc>X3w6@oH=utJ9jSg=FMaN{Q20~*<o*Q&w>RDaBy&7;lhP1TC@m9
zM@JSfUW}8I6HAsXVd>JPEL*k=XJ==YFJI1z6)RY|awRS<F05L$iq)%E<Lc^)o0}W%
z?(VEvvxc>6*W%&ffv2Y@>(;Gf{rdHId3oXO?TwF*55B&>Y}l}YjT<+zY11Y)Z{Ez7
zEnC>Sbt~JpZNtyckL}yHvt!2&{Qdn22nZlBFp!|2AcBK~2?+^d=gyt%+O><&&`@^o
z-c49o7~$dJL_|ao85zl*J$u-@cQ5<)?IS8Giv9cdbKt-M4jw$np+kp=j*ccKCWga@
z4|C+m5n^LwiHnOPK0cm=ganQrJ<73T$2flcI44e=;N;1ZBqk<u>eMMtpFT}eQWD9@
z$(%WJhO=kSl9G}_YHBLy&Yk1@`SYZurE%fH1=7>g$;imy;>C+xx^#)lmoIbW$`vv*
zGr4;8D%Y-E<NEdM+_-UrtgI|<-n_}JTerA<`!;v(+~MxsyJTl)larG}Zf-93?%m`5
z{rfz4@PNF$JRUxL$fHM($j{HGprC-l!a|CQiYP8Frlh2V$B!TL<jE7BK7C4QX(`X1
zJ>&WF=e&6Ff|oB}^6J$qUcY|Ln>TNG`}QqmWo5j3_m21P-}B+a2R?rM$fr-AC@(Lk
zqN0Mz%1WxLs;I86=JV&zeEIT)uV26N?b|nMYHFyht);H6j_=>U^W(=4e*XMPeSJL*
z4Gn_#{i!AbzkkDKaR_*|MC_N|0?_}m-{@&Jfd+vpFz}C_#%YtGr3^tr^ZMTj%|Z|u
T{$;;q{TJls<NqlCFM+=Rf~1J}

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/sizens.BMP b/indra/newview/res-sdl/sizens.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..8373077dffc48ab321f24b72b79b23e54f1f870d
GIT binary patch
literal 2102
zcmeH{XH*Yf7{@=Qr9~y9LWHt2iXshUB$6#eStW&1RH9Nw$w<RYp|ZEKg;I7=C@nN7
z6{Vrn{}*03&QUM_Z#?&W&wcLw-WSjFx#wOZQ*8-;gtiE12r|`Q65^L3*jJGHDTD-O
zqZ%h6A%um6Y0;tuA|fJ)ii#p8CWg4UI1&;Pv~1ZDNl8hhq@<9RmPSTK23c8ITD59L
z>(;H2laoVUULFMn1=_S}gQB7$ZQHh`UAuO)Z{MB{9Xg<-q=d4vGAb%6bnMuXPMtc@
zxpQY!RaNQIr3+oVc12B1jc(n#(Y<?jdi3aly1F_V8XENM*^^$qdeOUgZ~FA<L*KrA
z>DR9x{rmSvQ&W=x0|qc~;6Mfq8pPnigVEB`LR(v#Awz~Rbm&lYbac?w)n(YQVGJKW
z96dcfMvNGNzP>&N1_l@!8e(K*#K@5&88vDYqeqX%*w~mcW5zIc>{!N)8^`$Z<1sNY
zVZww7n3|e0apFWKO`3$6nHiHOPsZHboGDYLFm>uwrcIm1^y$-?F=GZZXU=5StXa&S
zJsS%P3+Bw3!`!)ZnKy49mX?;xpFf`k3l?ByWrel1H47ImWYMBUEMB~rB}<mDbm>xT
zY;3T#wPo3|W!Tx-v3&V*?CtGwaByJ7iWRI}xsp|@R^jOAh?A2Ot5>ha+1VKv7Z=v7
zS;N}3YjJgT#m&tPcXxNzty_nOhX?D|uV=%C4S0Hb;^pOqx3@PNH*Uno#|K|uUp8&p
z#OBSL*|KE|Teoh-&(9Bke}A@Z+eSb@0Nb~3XUC2m?A*DNUAuM>7#PUz-Ma}23L-c-
zn2?YVLPJB@vu6)`_wHrizJ2W9zn=pK4sh_`LBhhqICSU`;o;##L_~1-@L`S|Il|GS
zM~RG#Bq}P3=;&yU9XrPH<HtF1;shs8p5)Z2Q=C41nloq4aQ5t3&Ye5Q`Sa(waNz<M
zFJ9!*rAu7Ce3_V-7-C~%xpL(SSFc{>+O=z3zkZz?H*RqA=1p$hy2b6=w~333<IbHs
z+`W63d-v`UA0JObLIU^i-zPCKk))&~9z1x!!-o%f^ym?fA3x^FlP5fV`jltSo{^lK
zOiD@$&!0c%#fulDrlyjXmd4AMFM0Lq6|Y~vCOti!jEoH4ym>=rW+qu#S!8EtlarG}
zZf-7b-@fJDyLY^Q|DL?OJo5ANDJUqQu&|I1A3pH$<41~$iYP8F=F_K7l$4ZET3Sk3
zSs9-{f9A`VFO-*;Q&CaD*RNlxtgNJ}s*39BYHDg~`1b7^wY9a>)z$I+`*-T=>uG3c
zXzcG_{6>JLku<}s(QX3jPy6o&1b=aZVDR@_`QiUo?w{%Z>o-?_bNwea!%y%Qo5I@&
OLjd4UCjZt=5cm)KU57CM

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/sizenwse.BMP b/indra/newview/res-sdl/sizenwse.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..6d069fa7658e571f4bd1f7cd71e0fa3b6708f8d4
GIT binary patch
literal 2102
zcmeH{XIKwh7{-68RI-aQA`zizi6W&%$X;!dBxIIRMB1`tg;12eD$&rAtV$^gWfx7O
zLgDRSK9=|W@_zGN=ef?gp8I~D`<(m3F)-5-r!lldK&jy*|2u{F4K&oHB%2bU22hZK
zO-P7Vty&>0ER2YV2%@5*v~JxRF)=a3#l?}3kf2SQHb_cJ(zb0|+O=y(`}XbW(4hkz
zJ9eZ~r%rV4+!-k;DWs*P>C&YOUAuNgMn(o%Sy{Su>qhtP-RaSz2R(cCL{3hQUcGwJ
zyLWHo<>l$qrw<AW3iR#Umwx^Fp{S@x|Ni|MFkk>mN=ghIIFLbu1~GW>V3d`WQBhH0
z$dDln9Xb?MRaMl~)KFJfM?*scO-)UP4I74*mKMW@4`;-P5ol{`qobq4$dMx%HEI;P
zy1I-WJsLedJ@obU88c=K1_lNg8X96`WQ4J?F(xJ^j2%0capT5eYHG^(@#C2=VFD8;
zPQ=X2j7gIwF?sT2rc9Z_)TvXMHf<Wyr%z|bj2X<FIg?qlW-)vAZ05|FgSojm78Vv*
zT3TXdWrel1H8wUj*xK4MckW!~&6|gvogMS%&&S^0o&^gQ;NalE!i5WQbaZ6VqD444
zIk9;0VwNmf!qTNnadviQ*|KFUU%s3bD^{>_<w{nqTE*(st8sC0!PV83HEY(ecI{f$
zty{<X_3LqSbHm-;oedi{uyNx?JUl$uv}qHYH*dz%(~~V*w&3OEg}1jiK0ZG9`ugJM
z=ZC+)KLG&&Y~8w*z`#JZZQI87?c3S0V+T8T?qt`lUF_byn>~B>uy^lXf`WqBw{IW&
z_wVPxfdd>oc#uPf4iOw2%;Cd_IdbF(M~@yQBqW4m$BuFQ_;F60I6-J=C}Ck?oIH7w
zQ>RW59v)6aL<FZ#pXSV&Gn_qpmUHLMasK>yE?l_4#fulYbm<b8FJI=$l`CAmdX>n?
zNTQ;mh>nit+O=!M#Kds@`gLyHxIt`eEOBvh#K*^zkdVO5n>R^JOe85OiR9#DQc_Y#
zO-<$2ty`p}rE&ZAZPL@zxpU_ZckkZi-o1O=zki<x4<3+_kwIo=CRtfoJbd_&?CflE
za&ma|=n=WOx#Z>L@%Zs$o;-O%ettd$1qD2P`jltSp7H$oa|#O!DJm-B#fulbeEE`B
zuU_%`^=sa|dBfYcZ+Z9b9mU1Pl$4b4{{4GCeE2|VX(?r8Wt5kfQ&CYtWo0E*RaJca
z_>oVaKJoeUXTE&-LUnaDH8nNV*4Fa%>sP*g`^NY0->IvsqrSeLA3uKZ^XE@~{rV+%
z-{1JJ4m5q2EwcrV{?XG$Ld%{vz=GA1Koi_N4(Y$UTfiG93x+o^n~8?zf7AZs(**s^
WD>sQX;(sJGn%m6H{+9kv2mS$!#fbO-

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/sizewe.BMP b/indra/newview/res-sdl/sizewe.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..878df453a4a9ed6ff177d690f1aab46e51c71dfc
GIT binary patch
literal 2102
zcmeH{cT^8-6vsa)lqjhbp^$`7p)%4i8dMUZ$S9d9*%TEO$|wzGRfN#8nzFT!UC5|Z
z%AQ4$e)M|J(R)sRzvsB;+;i`9zjr?OIgg>4mMA|-O9WKwHKhg?q5-J4ON;+vgz7;7
z3xtpm&6+hsSXdYl5fPd<Z%&IAEoj-YC8DCDh>3~Os#Pn*#l>mex;1Uuv_V2b0!c|p
z+O}<rl#~?h+O<PkS{fM{8DwQ;Y2Us*a&mIW%gfWDLkBu`?1+Mb0-ZW_qI2iYbm`Is
zMMXuFl$7Y&wJY7ab)$Rt?kFoO)1yZZR8&;x*|R6As;czr)r;P}d()>+AJo*;=-an1
z{rdHzfB*idtE;1-p@F8RCIbcxVBo-k3>q{DEiEmywYAaF(P8l5!3-HPgrP%+GHlo|
zbaizZK72TOdV1*V>tkSGfT5uwBSws1<j9eX8a0a1qeo+8WQ4J?F(xJ^n3|e0X3QAI
zjvb4cnHlEh=2%!*FmBv9EG;b=KYlz`R#r@yFoB5^Co*Z$B&@BinLK$iQ>IM8#>NI)
zTU(}1oyxRn)3CF%WBT;z%$PBQnKNfHYt}66?d@@JaA5ZA**H2nGH1>l=FXkVym|AO
zKYu<87A#=l!i6|FIk9NbBAlI_adB~B@#4j}y1KGt$r6?>UCOd$%UHgAIV)DIVCBk{
ztXj2-)vH&tX3ZMh+}v<?cW3R|wX9pW4i66xJUu<}^73N+`t@wsumNvxZ+v`w@b&d&
z<Hn6_+O&zyn>XX<=ZC+)KU=nJVe8hdY}>Yt?c28#5D-9MU?4ko>>wy8h~VI0LPA0a
z4Gm@I&YgsXg%KVe&aPd%*u8r<d-m*M@7}%a+qaL1hzKGhBZ-QNV*mdA95`@*=;&w;
z9z4jQLx(tg_%JasF&sH^gri4~a_rbKVq;^8i;E*ZKAwbx1QHVyIez>&Cr+H;<jIqq
zI(3TEr%#iVltglJGASu3q^72lmX=0(dOBy$oFOA4gR^JPa_-zY&YwTeg$ozBc<~~a
zE?wgC<;z^Ta)r#yOtP}F$j;6tCnty8++40+y~?#~*SLQDI(d0{+_-Urn>TNA>((u9
z-@eVAJ9oHy_b&JD-6KCgpMrt{?%%)9g9i_I`0ycxg@rtN^oYlgAM@nN6P`YON>Nb}
z#l^*xl$7x7*)vK@ODQWWqrAMF=g*&0QBgr<WhF0Oyx`@_m%MuQir24S^XAPP-oAay
zyLaz+|NcE6K78Qg$B%sa^oh@(KT}mzMRj#GU%q_d>({T;)YMR0Tg$g^-}wIhJ9Tw+
zg8BZ^|KtYvwXFuxsA(Fu`H%d=p?=-JzI%c42UdR+yoP_Nv4a5n9bZ@1C_z*4f&#ze
a8>j!-LBo9i)t;bU6Z1D}>93*b8~6b<0EaOE

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/toolmediaopen.BMP b/indra/newview/res-sdl/toolmediaopen.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..ac4b231994c1f3ccd69b04c35759fac271b1dbc4
GIT binary patch
literal 3128
zcmeH{y$-@K41^8o1``t_BTs;s*?Di?3Qj$+EH^SVI7mpfl+?}7ch2?aay@Tlj1&4J
z+Tqz&vPUMe#{6!>HV&Y>EwMQ8pANiU;mS4TK;YhMk@eO5l24C#n)Lb!SBVt!0Rd18
zwi4uX<QpyJL&fruQ=Lh(gyl~qsMrkG3N44Z?Hl;RFj%G|SU7Sw`}P)aK2s!au_FgH
z*o}@;N=fIdL{PjfX;w}qCHnE<Ne?(qs#w~t=3^W&%Zln^KrGqjUHK{Sz@O@28wRKT
mWL3^$96uNC{K3cD;6S`3_#wm_Kb)mM>9(jk$o=3@5qSVkjf<oJ

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/toolpause.BMP b/indra/newview/res-sdl/toolpause.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..dd2c6857d28b9eb531819e1774e609e994e4bb37
GIT binary patch
literal 3128
zcmeH{Jrcqo5Jpkxw6e0a^aPHzy_e+_xs|@j5{i{DLY6K&1IhC9KJpQGy`N_{$AkJ#
zxutS&SKgdE(tkNgnH#94J$fBjEUZ0y*%Qzh<EI)7=-xplR@td@J0F6C5SJ{ellED}
z#5JIj+xf~6mG1s1LsYuapZY07tD8UQeh49m1OL>miw7=-@X|WBI9_qQ_vZX8VZM02
zNSGoqj*llJ;CcP(Cr3-7xMfX^a1=bJbTy%hgV*>ba1@JtD|nG_2><2V!WEyxON(uo
UUkGY>vcKlGWEIHc;HWtF1ys3!wEzGB

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/toolpickobject.BMP b/indra/newview/res-sdl/toolpickobject.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..25469fc3a86c94b64c87866a6c1fdc227d41e7d8
GIT binary patch
literal 2102
zcmdUvcQn^)7{EVDqN2T#kTjH3N=qpc(NHQXWktIrG?CKKBGS&Nv}h{HY9d9_FxmrA
zMn*<;e?Q!=dk*ej_uO-zbKdX!eBaOWJnu8kd9@7G#i<f?QBW3Way3hY8c;=RJ|co$
zxP+UC2#p#wqH*KKh>D8Rq)8LR#KdUYv?=1^;z&qH(5zWAnm2Dwixw@Al$1nDN{W^(
zThgjkD_Xa1O`A4tXxp|e?b@}Yef#!w=+J?V9XrygQztri?o5|1UFh1iE7H=^$jHbb
zD=SO4ZrzZRlcRh0?#Ro_qoAOGqM{-_dh|d^Nr|34d!nqYOs`(O=-s<FefspFZ{NPC
zsHo7dUqAZy?~kggDgy=#Kut}JfddCJXwV=A4<3xVx;jIK3}NWdp=fAmFl^W`h7TXk
zh!G<gIdUYUMvX#KQ<Kr7M>A&37__vs7&~?><Hn6cTU#3)9UaDxACIoCE)yn9Ku=E(
zeSLi<PMnB=fdPhwhD@3?iOG{EGiAyYrcRxTk&zM8rcGn|^ywHI8#80Z3}()p$*ftk
zFflQ~)YO#Ovu87B&K%~>or{^78T01NWB&a4n46npVPS!#r6pEYR#;nGvtYpjY;0_>
zwY6p8!i6kaw1~xv7qeu^5|%Dq%Ccq4SiXEYD^{#v<;s=V+1asb)hg`m?ODBgH4Y9A
zI66Aw<mAMfHEUSAb}j4Htz-TA^=#O%fsGqC;_U2<i;D}cuC8p_v<WviH#TqH%$6-%
zaCdiS>(;Go+qRAE+qbi0#|}I^JlMH&C%bm-V)yRd?Af!2y?giK>FJ4=mlyl??ZeyK
z8y_DZ_V3@1udgo$4jka%!Gjz+bcn-;4|C+m5sn@`%CTd|IDY&%etv%V`}-3R5I|sH
zASX_o;N;1ZoH})ipr9a5pFYi*GiNw^_AKYlo#XuZ^8^P66A}`_g$ozBc<~~aE?wgC
z<;z^Ta)ql`uM!#>%C&3PxPJXQVPRq1xN(E<@NjP4yh%hv1d)-EL`6jr9UV<fOboYf
z-QxD`+uXTxhr4(0a_`<f?%%&pY-}uXadE`Q$MfL90}>Jvc=+%kj~+cDF)@*(q$D0c
zeoS(5GEbg7Atfb+r%#{q?AbG(KYz}P7cWRnO(iWYjr8<%GBPrF`SK;NUcKV=>({(_
z^M<!?-}3I=JKn#4&xa2m`1tW7pFVveGc%K{tSqv#v-$k_GdVdq<mTq`<;xeoe*H>b
zULN`R`4kisP*_;Vw{PDlDk`G5xR{cX5=u);`TqSoWo2cQmzPsfQ9)&8B|m=r;OEbu
z{QC7vSl|CoXgF;_VGSDm18)FVg>8rn3>v@!Mm@Z`B%yDe$qS!p!JGt8IJBC-T7&x=
zuWPQq<5x$h<yu><j$eQGYVNP?Qlr<3UuW<C;&tNK-@HCtWgzTdo$_b>^<Y8x>I>?0
P799T9yuQ5t_47XfnucV}

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/toolpickobject2.BMP b/indra/newview/res-sdl/toolpickobject2.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..09df69e675e89c8797bf03c3a96095248e45fd3f
GIT binary patch
literal 2102
zcmeH{cUX>X7>Ca^iHf9*hP04Ph&D+}*`ts>%c!griX??78D&&bX2VK$l)X0<Wu;{l
z3VGkRKHuk{_xtDj^Sh4YzVGLG&gXai?(4dr<FRxwl0y_mQeYss(yAE})Bq8!nIr_O
za0nL(3F_3TgQTP+Qc_Y#OG_goBZI80EOK&k)U8{WdiCldFE3C1`t@nhpaBXB3MeWn
zqNJom!-frM)Tj~4%E~lu+!z%V6`C|@f~u-2YHDgUZQ7J(&6?4?d2?E{Xo0%AIvN@p
zXliPrrKLs7mMziN)}~dfR_N&HpsTBko}M21`uZ3c7|^<PYudDFL)*4(F*G!!UAuO)
zZ{MB{9XimlV@Eo5>O|+xo$1o03thW*rCYad7#SJSy?b|h^yop)o;@)(Hl|mvUi9wW
z8xs=~OifKOGc&{7+#CxF3oI=yv9hwFPoF;Y?b{b?Yis)T>xYev4gLG~$JW*sJ3Bk<
z?d@@JaKO>gkpTk+;N;|lv$Hb;2M%P=pg{~CJeVOvhA?#KP=*Z~#_-|888Ko6BS(&8
z)TmLoxVYfz>dNTRqZu=13}eTR#m&u)apT4@e*AbQOqjsLi4&PLX%dqsPiD%LDNLO@
zm1)zaF@5@UX3Utu%$YNBcX!9b!-H9~W-)vAZ05|F!`!)Z@$~e>%gYOIZ*S(!o5%e5
z^I5Q90Sgx{WYMBU`1ts+c=2L<eSPus^JB@9B`jUKlx547;qUKHKtKS?moI0<iWLL~
z2C{PHN`iudShZ>u!NI|-UcH)-kPt#cLs_$C4Qtn~W!<`UgoTB%e*JnjY}i0}csLOe
z5p3MJk;uqMHf`F(=FOYgvSkZfw{9gWDvIdnXtr(J#`f*o*|B2>J9q9RCMJg1*jVD?
z;@Guo7xD4&?B2bbgoFeV6BF69XAgV#?q%P;eeB=Ap92RDaPZ(kl9G~0PEIBzC56<~
zR1O_F#Noq-IdbF(M~@!m*s)`zrKNHF_;J$H(>ZbC1Se0P<kYECoIZV;GiT0l_Uu{C
zojXTHMh554pXb7b3uI<yl9iRk#fulYbm<b8FJI=$l`CAmdX;O}u5tbPb#C0a!OfdD
zxpnInw{PF(&Ye5ly?d8?_wI53{(T-ic)-Jl4|(+H5sx1~=E;*MJbn6<?CflEa&pMc
z&E?s%XFPxYoV>g|^7Hd~@!|z9U%uqkt5>{!{hBv#-cV3bz}vTPDJ(3csHlkI;$lil
zN+>NY<=wk?ynp|m4<A18@#9Cz%E~A&FXz*zPkjFTnJ-_yP*G7qWo0E_zkcQ0w{Lv^
z{++6-Dq(&9$A8uV#P?J9vlZv{Z#=73d99$@PH@!Xjca%<X@1Io=c2UYxZs6<;NKD;
z*qC@;^%D!q|ASue6;}y?&`31@(qVzPI)ob)!>jA4RWHJ|>#OlE#x*x0|Jt#zcCknE
UckzG9F6^zC<f4-Qto!Tf50|-Q%>V!Z

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/toolpickobject3.BMP b/indra/newview/res-sdl/toolpickobject3.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..fc286980501efa6815696413f6c8e268b37ae1d5
GIT binary patch
literal 2102
zcmeH{cT~@B6vtl?C8LtaNJU6x6lH}5Au1K2C>lmavV~HT3Q?%622oi>XrP6P$|@Nt
zB73iF`F>T0-%<JF_xtnrob!C1d+zJL?{n`x&-v&ZYm4)9X^Vo2z*4N*B2<B&wCW=w
zIE7nyh=@?HUOnp9uaBsxC=D7kpkc#?h>3|IE-p@^Mvah=kf3qn#x!Ztgr-fK(yUoC
zBqb%0l9EDNTAJp~n<FD5LyHzIkd>9CWy_YdYSjukIXPOlZcUpuZD`xJE$!O1Ltb8<
z_U+rFprC-Fq9RI4N_6PZfsP$JqO7b;r%s*d+_^Jdx^zKBMTM?iyP~S9ikg}l>gwur
z>(-6#-MiDHM-O`T?1_ek2AZ0h^y<}%-o1OHrKN?owl;nG^r3IxzVz$YkN*ApGhn~~
zbaZqWIB+0?1`T5H;KAtX>Y}HohrYf(1_lNU88U>SLx*B$XvnZ(!x%n%I3q@kz{tpm
zkt0VkYSbu<jg2ueF~QW-l+mL{V`gTCxw$zO78Z;dGlsEa$6{$|$+&Uj7(aeI6DCZ+
z%E}6BYilM>oXDg}ld!R|!PeH6$&)8DWy%!n?Ch|&x5vT30Y^tircRy8v}x0rK7Bef
zX3W6J$%&aWXEJNnEN0K1&73)NaCUZP?%cV!xVSKH-aO{dpU;8?3s|^tA&V9*V)5d|
zELpOIrAwFM>gvj}Wy@H;d^syttia994R?2UR<2x$hldBAo}R2)wF)mUFIKN!jkmWq
zYu2p6$Hxa>Utj$E{8+noE$h~;WBvN|`1|{_VZ#PCZrn&fKmdV(fo$5eiOrigvt`Q`
zf`Wnw4h|+HB!sP7x3X>9Hnwly&W;^B*tv5jp`oFKg@q9w9!^9=1iN<aV)yRdL`Fuk
zXU`t??%hjNR20$C(Zs~Wuy5Z!_V3@%fddCPc<>;H4jm#kHkP=!I1V2^%#kBUh>wrw
z=+UDbJ9doY$B&bckU(N$B1uU}Bqt|x;=~C~o;=B^Q>REtNg*{gm9(@p($mw)$jIRI
z>C>D!bB42L&yty$Nmf=C+1c5gJ9m!r=g*UqlS6K9E_r!*T)1$7ix)3)>Cz=GU%t$h
zD_6+R&!?cEfU8%pQdn5XwQJY7e*HQ(ZrtGJ&6^Yz6>;m<EsBeaDJd!8_U+r;xpRlo
z(o*i;z019O_b4kX<Np2oJb3VchYug}=+Pq{KYq-UCr^0#^eNAtJ>&WF=e&6Ff|oB}
z^6J$qUcY|Ln>TNG`}QsG-o4}f`}dTWm-FGn2R?rM$fr-A`26`ZU%q_d>({S*`}U3R
z-@j8)Q6cQ_|Mg!@K=3cEE7jiy{x5jt#kJlq$o#j;e)3v^s^$EdrBYUvz9udRsFn+i
zKQ0ius=46&BS6Tiy|r+mO1Ol1YSIh5m7p#zEUXS*-DWNME8D77U)6PGmH&JpHEDj2
X5b!GX@7`Z_4I}*p1y<cJGCTVR3ixs)

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/toolplay.BMP b/indra/newview/res-sdl/toolplay.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..9c40d7dbecab270979b9a06fe4a7a0fe5ac1a56c
GIT binary patch
literal 3128
zcmds%F>As=6vxwoLuiK3DT6}=3H<<4x*4*GG?U;e_yK}zhKvpoH^Eh$0!ro#0SA{3
zet>+2Oo4m=`^Q%fNz<6vm!%KxIPSgs{V)H^o%!*uNSAm+|BCkV-5w+jBT0Hh{`ra8
zWdhyjzmCJ<(ChUUi$!x^2@fsHYPZ|7*$i^*Lg1gz=QxgS+g221JRS!@z^FoeNFdTQ
z^*pcB=@^EwUawhHuKA>b-uL}}zpv}M<2c9T@h?J!d=fgHPSfdBRn^I45{BV@DkXeU
zNs`2M-BznL7z{R>O<k4h{NZr8-EJBA!XLQA>(6etGfk8Ie6uWDE|=YI7ysvKwW@1H
zVLkaz_e+*#+^_w9Us!qHB>1DzNYgaD4^b4|2Ps*F_ia9(mlV`ZiA!2{VU>EoVF&_)
zD)l#Oa-1gkLV_KRuOlW&G{+~yFUGSuPe&v6OmGsyq==g*SY7~*Am;{1m9MRm{f*B8
j#|8@dT<}6ZBm5_y7oOv@!>{>Gzy-e{IPsf<gD**6!DY&`

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/wait.BMP b/indra/newview/res-sdl/wait.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..26dec59afe10818db0cff219f91d41dc647dd754
GIT binary patch
literal 2102
zcmeH{cQ}`87{@<KA*s-ysYqH>q>0cll2lSDEkz`0Xi2opc9gb4S<ys`(vSu%qfiQE
zM6?I`{o<U?Rln=}an7IT+}Cwq&+|T?@BM!7`+ctKH89hb<VR?WgPLHcRG(th1Hrkx
zbX_7QfWj0mVq!FC(13;w8zL?)PNPPRXxz9l5)u+fN=hOnB}J1aO^}wBrfJir$jHdh
ztXVUfH*Zdh7A=sKl|@cY4taTbTDELSt5&UO-MTex+O$DIK><ZYMcTG)OS^XMXy3j)
z9XfQNW5<qk>eLA(B_%p{?o5|1T~Jn5Mny%1u3fvLs;Wx2ZrxB*Q=@zL?)2!<gPuKm
z(yLc5diU;)y1F_V8XENJ(}%u&`_ivpKQuKp(bCeQfB*hyYil!LzyJmg9LS(SgBUz`
zFhhn6Vd&7I=;-L6tE-Eio*u)74MSgF9|Hpe3=It#K72SMMvP$O$dQa1H3}mmBaDrW
zF)=a0)YO#Gqeo+AX2zH?V=y;2XYAOqSXfvvZrnJ=j~~y32@|liv}EGMiC9@#F=^5y
zCQqKslqplNwzg*K)TvCHHVqpa8>Ua6&Wsr|m^pJMvu4d=_Uzf%+S)Q_&K%~>or|5F
z9rpJ2%$qk42L}fn9UYlJe?Cr5PApik0B2`s7A{<fi;D}37A<1&;>9dkvV^5em*VQ`
z%Ccq4SiXEYD^{#v<;s<;TD1x{H#b(VUX8oEJ8Rag!NbD?Pft(Qu3gKzb?aEaemxsD
zY+&QYjd*!^;qC2>kB<+&zP|YR`Qh*H&!$bA*t~f&TefUr>(;Go+qRAE+qbi0#}0Px
z+(|${0D*yl?Ao=9-Me=a6cogsJ$u-@cQ5<)?PLG`{Tw)OfP)7Qa_G<@f`fxOeE2X&
zjvOH*B!tk=P{P8(IC}Ib$BrE%JUpC;hzKGhBZ-QNB04&n<HwH^6B9#hY%C{EoZ#fi
zlbkwriqof0bLPw$&YnF>TwEOS@$n=iByjHBInJLy&xH#YxOnj*mo8l*F)@*(q$Dn1
zzRZ;?S4d7y=IYg}T)TFS>({Sy<HikAQc}2i^CqdOsoc7Ci`%zvbLY+-?%usiT3Q<E
z>FM0NcaQt`@AKfn10Ftn$fHM($jHbbGc%K{tSqv#vw8gZF;AX6Atxt?+}vF9^7454
z^eNAtJtIFqpXbk?^Wwz|3JMA+EG(p`sEC&@U-IhJD~gMYDJdzTw6v76vNB%3eoc9K
zITaNZym|A6%F0Trs;YSV_AT$;z2p7+_k8&9fsY?Q^6AqjK7anqmoH!V`t>W{zI~&*
zx|*7r8ft56h4cL%DJivee?q7g{Wbn2|Fc}QfdC8c;zx)S2=N~Z;r`bif3Tl|-!8Qd
z2}TrJ2o{m`Lh!e|z6DYB^#*n2zxP)^pHL<6_|;wTEcC7qQTQ(c(fH>J{vj99(|_aW
EJFbFWmH+?%

literal 0
HcmV?d00001

diff --git a/indra/newview/res-sdl/working.BMP b/indra/newview/res-sdl/working.BMP
new file mode 100644
index 0000000000000000000000000000000000000000..26dec59afe10818db0cff219f91d41dc647dd754
GIT binary patch
literal 2102
zcmeH{cQ}`87{@<KA*s-ysYqH>q>0cll2lSDEkz`0Xi2opc9gb4S<ys`(vSu%qfiQE
zM6?I`{o<U?Rln=}an7IT+}Cwq&+|T?@BM!7`+ctKH89hb<VR?WgPLHcRG(th1Hrkx
zbX_7QfWj0mVq!FC(13;w8zL?)PNPPRXxz9l5)u+fN=hOnB}J1aO^}wBrfJir$jHdh
ztXVUfH*Zdh7A=sKl|@cY4taTbTDELSt5&UO-MTex+O$DIK><ZYMcTG)OS^XMXy3j)
z9XfQNW5<qk>eLA(B_%p{?o5|1T~Jn5Mny%1u3fvLs;Wx2ZrxB*Q=@zL?)2!<gPuKm
z(yLc5diU;)y1F_V8XENJ(}%u&`_ivpKQuKp(bCeQfB*hyYil!LzyJmg9LS(SgBUz`
zFhhn6Vd&7I=;-L6tE-Eio*u)74MSgF9|Hpe3=It#K72SMMvP$O$dQa1H3}mmBaDrW
zF)=a0)YO#Gqeo+AX2zH?V=y;2XYAOqSXfvvZrnJ=j~~y32@|liv}EGMiC9@#F=^5y
zCQqKslqplNwzg*K)TvCHHVqpa8>Ua6&Wsr|m^pJMvu4d=_Uzf%+S)Q_&K%~>or|5F
z9rpJ2%$qk42L}fn9UYlJe?Cr5PApik0B2`s7A{<fi;D}37A<1&;>9dkvV^5em*VQ`
z%Ccq4SiXEYD^{#v<;s<;TD1x{H#b(VUX8oEJ8Rag!NbD?Pft(Qu3gKzb?aEaemxsD
zY+&QYjd*!^;qC2>kB<+&zP|YR`Qh*H&!$bA*t~f&TefUr>(;Go+qRAE+qbi0#}0Px
z+(|${0D*yl?Ao=9-Me=a6cogsJ$u-@cQ5<)?PLG`{Tw)OfP)7Qa_G<@f`fxOeE2X&
zjvOH*B!tk=P{P8(IC}Ib$BrE%JUpC;hzKGhBZ-QNB04&n<HwH^6B9#hY%C{EoZ#fi
zlbkwriqof0bLPw$&YnF>TwEOS@$n=iByjHBInJLy&xH#YxOnj*mo8l*F)@*(q$Dn1
zzRZ;?S4d7y=IYg}T)TFS>({Sy<HikAQc}2i^CqdOsoc7Ci`%zvbLY+-?%usiT3Q<E
z>FM0NcaQt`@AKfn10Ftn$fHM($jHbbGc%K{tSqv#vw8gZF;AX6Atxt?+}vF9^7454
z^eNAtJtIFqpXbk?^Wwz|3JMA+EG(p`sEC&@U-IhJD~gMYDJdzTw6v76vNB%3eoc9K
zITaNZym|A6%F0Trs;YSV_AT$;z2p7+_k8&9fsY?Q^6AqjK7anqmoH!V`t>W{zI~&*
zx|*7r8ft56h4cL%DJivee?q7g{Wbn2|Fc}QfdC8c;zx)S2=N~Z;r`bif3Tl|-!8Qd
z2}TrJ2o{m`Lh!e|z6DYB^#*n2zxP)^pHL<6_|;wTEcC7qQTQ(c(fH>J{vj99(|_aW
EJFbFWmH+?%

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/xui/en/floater_auction.xml b/indra/newview/skins/default/xui/en/floater_auction.xml
index 29f8b497943..fb0994b4cda 100644
--- a/indra/newview/skins/default/xui/en/floater_auction.xml
+++ b/indra/newview/skins/default/xui/en/floater_auction.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  can_resize="true"
- height="368"
+ height="412"
  layout="topleft"
- min_height="368"
+ min_height="412"
  min_width="420"
  name="floater_auction"
  help_topic="floater_auction"
@@ -49,21 +49,47 @@
      left_delta="0"
      name="snapshot_btn"
      top_pad="4"
-     width="96">
+     width="150">
       <button.commit_callback
          function="ClickSnapshot" />
     </button>
     <button
      follows="left|bottom"
      height="20"
-     label="OK"
-     label_selected="OK"
+     label="Sell to Anyone"
+     label_selected="Sell to Anyone"
+     layout="topleft"
+     left_delta="0"
+     name="sell_to_anyone_btn"
+     top_pad="4"
+     width="150">
+      <button.commit_callback
+         function="ClickSellToAnyone" />
+    </button>
+    <button
+     follows="left|bottom"
+     height="20"
+     label="Clear Settings"
+     label_selected="Clear Settings"
+     layout="topleft"
+     left_delta="0"
+     name="reset_parcel_btn"
+     top_pad="4"
+     width="150">
+      <button.commit_callback
+         function="ClickResetParcel" />
+    </button>
+    <button
+     follows="left|bottom"
+     height="20"
+     label="Start Auction"
+     label_selected="Start Auction"
      layout="topleft"
      left_pad="4"
-     name="ok_btn"
+     name="start_auction_btn"
      top_delta="0"
-     width="48">
+     width="150">
       <button.commit_callback
-          function="ClickOK" />
+          function="ClickStartAuction" />
     </button>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_texture.xml b/indra/newview/skins/default/xui/en/floater_preview_texture.xml
index a243cb399ee..5ee136c4223 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_texture.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_texture.xml
@@ -49,7 +49,7 @@
      layout="topleft"
      left="80"
      name="Discard"
-     top="302"
+     top="283"
      width="100" />
     <button
      follows="left|bottom"
@@ -68,8 +68,66 @@
      layout="topleft"
      left="13"
      name="dimensions"
-     top="287"
+     top="309"
      width="303">
         [WIDTH]px x [HEIGHT]px
     </text>
+	<text
+	 type="string"
+	 length="1"
+	 bg_visible="false"
+	 border_drop_shadow_visible="false"
+	 border_visible="false"
+	 top="309"
+	 drop_shadow_visible="true"
+	 enabled="true"
+	 follows="right|bottom"
+	 font="SansSerifSmall"
+	 h_pad="0"
+	 halign="right"
+	 height="14"
+	 left="54"
+	 mouse_opaque="true"
+	 name="aspect_ratio"
+	 v_pad="0"
+	 width="110">
+		Preview Aspect Ratio
+	</text>
+	<combo_box
+	 allow_text_entry="true" 
+	 top="306" 
+	 follows="right|bottom" 
+	 height="20"
+	 left="176"
+	 max_chars="20"
+	 mouse_opaque="true"
+	 enabled="true"
+	 width="108"
+	 name="combo_aspect_ratio"
+	 tool_tip="Preview at a fixed aspect ratio">
+		<combo_item name="Unconstrained" value="Unconstrained">
+			Unconstrained
+		</combo_item>
+		<combo_item name="1:1" value="1:1" tool_tip="Group Insignia or 1st Life Profile">
+			1:1
+		</combo_item>
+		<combo_item name="4:3" value="4:3" tool_tip="2nd Life Profile">
+			4:3
+		</combo_item>
+		<combo_item name="10:7" value="10:7" tool_tip="Classifieds and search listings, landmarks">
+			10:7
+		</combo_item>
+		<combo_item name="3:2" value="3:2" tool_tip="About land">
+			3:2
+		</combo_item>
+		<combo_item name="16:10" value="16:10">
+			16:10
+		</combo_item>
+		<combo_item name="16:9" value="16:9" tool_tip="Profile Picks">
+			16:9
+		</combo_item>
+		<combo_item name="2:1" value="2:1">
+			2:1
+		</combo_item>
+	</combo_box>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 32456c00ee2..80750b140ad 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -722,7 +722,6 @@
     </button>
     <text
      type="string"
-     text_color="LabelSelectedDisabledColor"
      length="1"
      height="12"
      follows="left|top"
@@ -736,7 +735,6 @@
     </text>
     <text
      type="string"
-     text_color="LabelSelectedDisabledColor"
      length="1"
      follows="left|top"
      halign="right"
diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
index bd76b103129..4386c0c5ee3 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -417,7 +417,8 @@
      left_delta="0"
      name="search_results"
      top_pad="10"
-     width="222">
+     width="222"
+     sort_column="1">
         <scroll_list.columns
          label=""
          name="icon"
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 57ea24ac0e9..b30597bcb67 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -355,7 +355,8 @@
          label="World Map"
          layout="topleft"
          name="World Map"
-         shortcut="control|M">
+         shortcut="control|M"
+         use_mac_ctrl="true">
             <menu_item_check.on_check
              function="Floater.Visible"
              parameter="world_map" />
@@ -981,6 +982,57 @@
                 </menu_item_check>
             </menu>
         </menu>
+        <menu
+         create_jump_keys="true"
+         label="Select Linked Parts"
+         layout="topleft"
+         name="Select Linked Parts"
+         tear_off="true">
+            <menu_item_call
+             label="Select Next Part"
+             layout="topleft"
+             name="Select Next Part"
+	     shortcut="control|.">
+                <menu_item_call.on_click
+                 function="Tools.SelectNextPart"
+                 parameter="next" />
+                <menu_item_call.on_enable
+                 function="Tools.EnableSelectNextPart" />
+            </menu_item_call>
+            <menu_item_call
+             label="Select Previous Part"
+             layout="topleft"
+             name="Select Previous Part"
+	     shortcut="control|,">
+                <menu_item_call.on_click
+                 function="Tools.SelectNextPart"
+                 parameter="previous" />
+                <menu_item_call.on_enable
+                 function="Tools.EnableSelectNextPart" />
+            </menu_item_call>
+            <menu_item_call
+             label="Include Next Part"
+             layout="topleft"
+             name="Include Next Part"
+	     shortcut="control|shift|.">
+                <menu_item_call.on_click
+                 function="Tools.SelectNextPart"
+                 parameter="includenext" />
+                <menu_item_call.on_enable
+                 function="Tools.EnableSelectNextPart" />
+            </menu_item_call>
+            <menu_item_call
+             label="Include Previous Part"
+             layout="topleft"
+             name="Include Previous Part"
+	     shortcut="control|shift|,">
+                <menu_item_call.on_click
+                 function="Tools.SelectNextPart"
+                 parameter="includeprevious" />
+                <menu_item_call.on_enable
+                 function="Tools.EnableSelectNextPart" />
+            </menu_item_call>
+        </menu>
     </menu>
     <menu
      label="Help"
@@ -1603,7 +1655,8 @@
              label="Texture Console"
              layout="topleft"
              name="Texture Console"
-             shortcut="control|shift|3">
+             shortcut="control|shift|3"
+             use_mac_ctrl="true">
                 <menu_item_check.on_check
                  function="Advanced.CheckConsole"
                  parameter="texture" />
@@ -1615,7 +1668,8 @@
              label="Debug Console"
              layout="topleft"
              name="Debug Console"
-             shortcut="control|shift|4">
+             shortcut="control|shift|4"
+             use_mac_ctrl="true">
                 <menu_item_check.on_check
                  function="Advanced.CheckConsole"
                  parameter="debug" />
@@ -1627,7 +1681,8 @@
              label="Fast Timers"
              layout="topleft"
              name="Fast Timers"
-             shortcut="control|shift|9">
+             shortcut="control|shift|9"
+             use_mac_ctrl="true">
                 <menu_item_check.on_check
                  function="Advanced.CheckConsole"
                  parameter="fast timers" />
@@ -1639,7 +1694,8 @@
              label="Memory"
              layout="topleft"
              name="Memory"
-             shortcut="control|shift|0">
+             shortcut="control|shift|0"
+             use_mac_ctrl="true">
                 <menu_item_check.on_check
                  function="Advanced.CheckConsole"
                  parameter="memory view" />
@@ -1651,7 +1707,8 @@
              label="Notifications Console"
              layout="topleft"
              name="Notifications"
-             shortcut="control|shift|5">
+             shortcut="control|shift|5"
+             use_mac_ctrl="true">
                 <menu_item_check.on_check
                  function="Advanced.CheckConsole"
                  parameter="notifications" />
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 91c19badfaa..217178a5efd 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -483,6 +483,20 @@ Joining this group costs L$[COST].
 You do not have enough L$ to join this group.
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="CreateGroupCost"
+   type="alertmodal">
+Creating this group will cost L$100.
+Groups need more than one member, or they are deleted forever.
+Please invite members within 48 hours.
+    <usetemplate
+     canceltext="Cancel"
+     name="okcancelbuttons"
+     notext="Cancel"
+     yestext="Create group for L$100"/>
+  </notification>
+
   <notification
    icon="alertmodal.tga"
    name="LandBuyPass"
@@ -493,7 +507,7 @@ For L$[COST] you can enter this land (&apos;[PARCEL_NAME]&apos;) for [TIME] hour
      notext="Cancel"
      yestext="OK"/>
   </notification>
-
+  
   <notification
    icon="alertmodal.tga"
    name="SalePriceRestriction"
@@ -6487,20 +6501,6 @@ The SLurl you clicked on is not supported.
       <button index="0" name="respondbutton" text="Respond"/>
     </form>
   </notification>
-  
-  <notification
-   icon="alertmodal.tga"
-   name="CreateGroupCost"
-   type="alertmodal">
-Creating this group will cost L$100.
-Groups need more than one member, or they are deleted forever.
-Please invite members within 48 hours.
-    <usetemplate
-     canceltext="Cancel"
-     name="okcancelbuttons"
-     notext="Cancel"
-     yestext="Create group for L$100"/>
-  </notification>
 
   <notification icon="notifytip.tga"
 		name="AttachmentSaved" type="notifytip">
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index 9a4480127d8..6f012026808 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -212,4 +212,4 @@ Hover your mouse over the options for more help.
              value="Not Mature" />
         </combo_box>  
     </panel>
-</panel> 
\ No newline at end of file
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 06ecfdc9959..f7d7d52b68b 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -217,7 +217,7 @@ My Avatar:
      width="237"
      top_pad="0"/>
     <check_box
-     control_name="TapTapHoldtoRun"
+     control_name="AllowTapTapHoldRun"
      height="20"
      label="Tap-tap-hold to run"
      layout="topleft"
@@ -225,36 +225,15 @@ My Avatar:
      name="tap_tap_hold_to_run"
      width="237"
      top_pad="0"/>
-    <!--menu_item_check
-         label="Tap-Tap-Hold to Run"
-         layout="topleft"
-         name="Tap-Tap-Hold to Run">
-            <menu_item_check.on_check
-             function="Advanced.CheckAllowTapTapHoldRun"
-             parameter="TapTapHoldRun" />
-            <menu_item_check.on_click
-             function="Advanced.ToggleAllowTapTapHoldRun" />
-        </menu_item_check-->  
     <check_box
-     control_name="EnableLipSync"
+     control_name="LipSyncEnabled"
      height="20"
-     label="Move my avatar's lips when speaking"
+     label="Move avatar lips when speaking"
      layout="topleft"
      left_delta="0"
      name="enable_lip_sync"
      width="237"
      top_pad="0" />
-            <!--menu_item_check
-         label="Enable Lip Sync(Beta)"
-         layout="topleft"
-         name="Enable Lip Sync(Beta)">
-            <menu_item_check.on_check
-             function="CheckControl"
-             parameter="LipSyncEnabled" />
-            <menu_item_check.on_click
-             function="ToggleControl"
-             parameter="LipSyncEnabled" />
-        </menu_item_check-->
     <check_box
      control_name="test"
      height="20"
@@ -293,4 +272,4 @@ My Avatar:
     </radio_group>
 
 
-</panel>
\ No newline at end of file
+</panel>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index f620e8f2d72..360fd3c2db4 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -230,8 +230,10 @@
 	<string name="anim_yes_happy">Yes (Happy)</string>
 	<string name="anim_yes_head">Yes</string>
 	
+	<!-- world map -->
 	<string name="texture_loading">Loading...</string>
 	<string name="worldmap_offline">Offline</string>
+	<string name="worldmap_results_none_found">None found.</string>
 	
 	<!-- animations uploading status codes -->
 	<string name="Ok">OK</string>
@@ -2110,6 +2112,15 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="AddLandmarkNavBarMenu">Add Landmark...</string>	 
 	<string name="EditLandmarkNavBarMenu">Edit Landmark...</string>
 	
+	<!-- menu accelerators -->
+	<string name="accel-mac-control">Ctrl-</string>
+	<string name="accel-mac-command">Cmd-</string>
+	<string name="accel-mac-option">Opt-</string>
+	<string name="accel-mac-shift">Shift-</string>
+	<string name="accel-win-control">Ctrl+</string>
+	<string name="accel-win-alt">Alt+</string>
+	<string name="accel-win-shift">Shift+</string>
+
 	<!-- Previews -->
 	<string name="FileSaved">File Saved</string>	
 	<string name="Receiving">Receiving</string>	
@@ -2225,9 +2236,8 @@ Running in window.
 	<string name="MBPixelFmtErr">Can't find suitable pixel format</string>
 	<string name="MBPixelFmtDescErr">Can't get pixel format description</string>
 	<string name="MBTrueColorWindow">
-		[APP_NAME] requires True Color (32-bit) to run in a window.
-Please go to Control Panels &gt; Display &gt; Settings and set the screen to 32-bit color.
-Alternately, if you choose to run fullscreen, [APP_NAME] will automatically adjust the screen each time it runs.
+		[APP_NAME] requires True Color (32-bit) to run.
+Please go to your computer's display settings and set the color mode to 32-bit.
 	</string>
 	<string name="MBAlpha">
 		[APP_NAME] is unable to run because it can't get an 8 bit alpha channel.  Usually this is due to video card driver issues.
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 545fa29675e..89f916937b1 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -696,20 +696,30 @@ def construct(self):
         #self.path("secondlife-i686.supp")
 
         if self.prefix("../../libraries/i686-linux/lib_release_client", dst="lib"):
-            #self.path("libkdu_v42R.so", "libkdu.so")
-            self.path("libfmod-3.75.so")
             self.path("libapr-1.so.0")
             self.path("libaprutil-1.so.0")
             self.path("libdb-4.2.so")
             self.path("libcrypto.so.0.9.7")
             self.path("libexpat.so.1")
             self.path("libssl.so.0.9.7")
-            self.path("libuuid.so", "libuuid.so.1")
+            self.path("libuuid.so.1")
             self.path("libSDL-1.2.so.0")
             self.path("libELFIO.so")
             self.path("libopenjpeg.so.1.3.0", "libopenjpeg.so.1.3")
             self.path("libalut.so")
             self.path("libopenal.so", "libopenal.so.1")
+            try:
+                    self.path("libkdu_v42R.so", "libkdu.so")
+                    pass
+            except:
+                    print "Skipping libkdu_v42R.so - not found"
+                    pass
+            try:
+                    self.path("libfmod-3.75.so")
+                    pass
+            except:
+                    print "Skipping libkdu_v42R.so - not found"
+                    pass
             self.end_prefix("lib")
 
             # Vivox runtimes
diff --git a/indra/test/lltut.h b/indra/test/lltut.h
index 47ea9d3f9e2..bbb437c3f9c 100644
--- a/indra/test/lltut.h
+++ b/indra/test/lltut.h
@@ -74,7 +74,7 @@ namespace tut
 	inline void ensure_memory_matches(const char* msg,const void* actual, U32 actual_len, const void* expected,U32 expected_len)
 	{
 		if((expected_len != actual_len) || 
-			(memcmp(actual, expected, actual_len) != 0))
+			(std::memcmp(actual, expected, actual_len) != 0))
 		{
 			std::stringstream ss;
 			ss << (msg?msg:"") << (msg?": ":"") << "not equal";
diff --git a/install.xml b/install.xml
index e7a76483450..44224664cae 100644
--- a/install.xml
+++ b/install.xml
@@ -53,26 +53,12 @@
         <string>lgpl</string>
         <key>packages</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>md5sum</key>
-            <string>40b8a63b553d91304588fba6796d7cc1</string>
-            <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.5-darwin-20091006.tar.bz2</uri>
-          </map>
           <key>linux</key>
           <map>
             <key>md5sum</key>
-            <string>298fd8a3351f6a8d757d205a1e9ad82f</string>
-            <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.12-linux-20091006.tar.bz2</uri>
-          </map>
-          <key>windows</key>
-          <map>
-            <key>md5sum</key>
-            <string>33bb17ecbef6cdadff533d97135f3a56</string>
+            <string>fce0ff7d2cdf0f36c1647e6a3916e29e</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.5-windows-20091006.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.12-linux-20090218.tar.bz2</uri>
           </map>
         </map>
       </map>
-- 
GitLab